DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦0e798d559⟧ TextFile

    Length: 3840 (0xf00)
    Types: TextFile
    Names: »ASSEMBL.A86«

Derivation

└─⟦490a8e2df⟧ Bits:30003937 SW1501 RcComal-80 v3.0 (thykier)
    └─ ⟦this⟧ »ASSEMBL.A86« 
└─⟦72a4952a6⟧ Bits:30004362 SW1501 RcComal-80 v3.0
    └─ ⟦this⟧ »ASSEMBL.A86« 
└─⟦dcb507fe6⟧ Bits:30003936 SW1501 RcComal-80 v3.0 (ils)
    └─ ⟦this⟧ »ASSEMBL.A86« 

TextFile


VERSNO		EQU	8324h
ASSEMBLER	EQU	28h
VALUE		EQU	0
REF		EQU	1
REAL		EQU	0
STRING		EQU	2
PROC		EQU	5
REALFUNC	EQU	9
STRINGFUNC	EQU	10
ASSERR		EQU	180


CSEG $


	; FUNCTION get_real_par(no : byte): integer;

	; (* henter parameter no fra COMAL og konveterer tallet og
	;    og lægger det i BX *)

	;	CALL		RETURN
	; CL	no
	; BX			get_real_par

REALPAR:
	MOV	BP,RESERVER+6	;
	XOR	CH,CH		;
	SHL	CX,1		;
	ADD	BP,CX		;
	MOV	SI,4ÆBPÅ	;   ptr := adresse_par(no);
	MOV	BX,1		;
	CALL	COMALRUT	;   comal_fix(ptr);
	RET			;



	; PROCEDURE get_string_par(no : byte, adr : integer);

	; (* henter parameter no fra COMAL og lægger den i adressen
	;    DI udpeger og fremefter *)

	;	CALL		RETURN
	; CL	no
	; DI	adr

STRPAR:
	MOV	BP,RESERVER+6	;
	PUSH	DS		;
	POP	ES		;   extra_segment := pakkens data_segment;
	PUSH	DS		;   gem pakkens data_segment;
	MOV	DS,4ÆBPÅ	;   data_segment := COMAL's data_segment;
	XOR	CH,CH		;
	SHL	CX,1		;
	ADD	BP,CX		;
	MOV	SI,4ÆBPÅ	;   ptr := adresse_par(no);
	INC	SI		;
	INC	SI		;   skip_max_længde;
	LODS	AX		;
	MOV	CX,AX		;   hent_nuværende_længde;
	CLD			;
	REP	MOVSB		;   flyt strengen;
	POP	DS		;   data_segment := pakkens data_segment;
	RET			;



	; PROCEDURE put_real_resultat(resultat : integer,
	;			REF resultat_segm, resultat_offset : integer);

	; (* konverterer resultatet til COMAL-format  og returnerer værdien *)

	; 	CALL		RETURN
	; BX	resultat
	; AX			resultat_segm
	; CX			resultat_offset

REALRES:MOV	SI,BX		;
	MOV	BX,0		;
	CALL	COMALRUT	;   comal_float(resultat);
	RET 			;




	; PROCEDURE put_real_parameter(resultat : integer, no : byte);

	; (* konverterer resultatet til COMAL-format  og lægger resultatet
	;    på adressen for parameter no *)

	; 	CALL		RETURN
	; BX	resultat
	; CL	no

PUTREALPAR:
	PUSH	CX		;
	CALL	REALRES		;   realres(resultat,res_segm,res_offset);
	MOV	SI,CX		;   from := res_offset;
	MOV	BP,RESERVER+6	;   (* res_segm = COMAL's data_segment *)
	POP	CX		;
	XOR	CH,CH		;
	SHL	CX,1		;
	ADD	BP,CX		;
	MOV	DI,4ÆBPÅ	;   to := adresse_par(no);
	PUSH	DS		;   gem pakkens data_segment;
	MOV	ES,AX		;   extra_segment := COMAL's data_segment;
	MOV	DS,AX		;   data_segment := COMAL's data_segment;
	MOV	CX,8		;
	REP	MOVSB		;   movebytes(from,to,8);
	POP	DS		;   hent pakkens data_segment;
	RET			;



	; PROCEDURE finito;
	; (* return far *)


FINITO:	MOV	BP,RESERVER+6	;
	SUB	BP,6		;
	MOV	SP,BP		;   return_far;
	RETF			;



	; PROCEDURE test_error(error_kode : integer);

	; (* tester om error_kode er forskellig fra nul og sætter
	;    i så fald fejlkoden i COMAL *)

	;	CALL		RETURN
	; AX	error_kode


	; PROCEDURE error(error_kode : integer);

	; (* sætter fejlkoden i COMAL *)

	;	CALL		RETURN
	; AX	error_kode


TSTERR:	OR	AX,AX		;
	JNZ	ERROR		;   IF error_kode <> 0 THEN
	RET			;	comal_set_error(error_kode);

ERROR:	MOV	SI,AX		;
	MOV	BX,32		;
	CALL	COMALRUT	;   comal_set_error(error_kode);
	RET			;



	; PROCEDURE comal_rutine(rutine_no, arg1, arg2 : integer,
	;				REF res_offset, res_segment : integer);

	; (* kalder en af de COMAL-rutiner, der er til rådighed for pakken *)

	;	CALL		RETURN
	; BX	rutine_no
	; SI	arg1
	; DI	arg2
	; CX			res_offset
	; AX			res_segment


COMALRUT:
	MOV	BP,RESERVER+6	;
	PUSH	DS		;   gem pakkens data_segment;
	MOV	DS,4ÆBPÅ	;   data_segment := COMAL's data_segment;
	CALLF	DWORD PTR ÆBPÅ	;   kald COMAL-rutinen;
	PUSH	SI		;   gem resultat_offset;
	PUSH	DS		;   gem resultat_segment;
	CALL	TSTERR		;   test om der er fejl under COMAL-rutinen;
	POP	AX		;   resultat_segment;
	POP	CX		;   resultat_offset;
	POP	DS		;   data_segment := pakkens data_segment;
	RET			;


DSEG $

ORG	100h

RESERVER	RW	4

CSEG $

«eof»