DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

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

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦157506701⟧ TextFile

    Length: 8832 (0x2280)
    Types: TextFile
    Names: »MAIN.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »MAIN.SRC« 

TextFile

; Pascal/Z run-time support interface          
; COPYRIGHT 1978, 1979, 1980 BY JEFF MOSKOW
	NAME MAIN
	ENTRY FLTERR,HPERR,REFERR,STKERR,RNGERR,DIVERR,MLTERR,L98
	ENTRY PERROR,STMTMSG,CRLF,CHAIN$,STRERR,MAXOUT,MXOUT,MXOUT1,STRMSG
	EXT ILODV,ILODV1,ILODV2,ILOD1,ILOD11,ILOD12,ILOD2,ILOD21,ILOD22
	EXT ISTOR,ISTOR1,ISTOR2,XADDR,YADDR,FSUB,FADD,ENTRSC,ENTER,EXITF
	EXT FPEQ,SEQUL,FPNEQ,SNE,FPLTE,SLE,ILE,FPLT,SLT,ILT
	EXT FPGTE,SGE,IGE,FPGT,SGT,IGT,FMULT,IMULT,QMULT,IDIVD,IMOD
	EXT ERROR,CSTS,CI,CO,CHKDE,CHKHL,PSTAT,CONSET,UNION,INN,LTEQ
	EXT GTEQ,INSECT,ORGAN,COMP,FUSS,FOUT,FXDCVT,CVTFLT,TOUT,TXTYP 
	EXT FDIVD,STREQL,STRNQL,STRLEQ,STRLSS,STRGEQ,STRGRT,LAST
	EXT	WRITELN,L109,L110,L111,L112,L115,L116,L117,L118,L120
	EXT	READLN,L121,L122,L123,L124,L125,L126,L127,L128,L129
	EXT	WRITE,L130,L131,L132,L133,L134,L135,L136,L0
	EXT	READ,L137,ABS,FPABS,SQR,FPSQR,EOLN,EOF,RESET,REWRITE
	EXT	FTXTIN,CHAIN,NEW,MARK,RELEASE,TRUNC,ROUND,ARCTAN,COS
	EXT	EXPFCT,LN,SQRT,SIN
R:	SET	0FFFFH
C:	SET	0FFFFH
M:	SET	0FFFFH
S:	SET	0FFFFH
D:	SET	0FFFFH
E:	SET	00000H
F:	SET	0FFFFH
T:	SET	00000H
VALID:	SET	00000H
MAXOUT	EQU	4
MXOUT	EQU	MAXOUT*256
MXOUT1	EQU	MXOUT*2
CR	EQU	13
LF	EQU	10
EOFMRK	EQU	1AH
BUFLEN	EQU	80
TOPFRM	EQU	MAXOUT+MAXOUT+BUFLEN+3+1
MARGIN	EQU	50
COMPILER EQU	0H
MAXDRV	EQU	16
CPM	EQU	5
START:	MVI	C,25
	CALL	CPM
	LHLD	6
	DCX	H
	MOV	M,A
	LXI	B,0
	LXI	H,LAST
	EXX
	LHLD	6
	LXI	D,0-TOPFRM-1
	DAD	D
	PUSH	H
	PUSH	H
	POP	X
	POP	Y
	SPHL
	MVI	B,MAXOUT*2+1
	XRA	A
CLRSTK:	MOV	M,A
	INX	H
	DJNZ	CLRSTK
	INX	H
	MOV	M,A
	LXI	H,80H
	CMP	M
	JRZ	NOCOM
	MOV	B,M
	DCR	B
	INX	H
INITLP	INX	H
	MOV	C,M
	CALL	TOUT
	DJNZ	INITLP
NOCOM	MVI	C,CR
	CALL	TOUT
	JMP	L99
FINI:	MACRO
	JMP	L0
	END	START
	ENDMAC
EXTD:	MACRO	INTN,EXTN
	EXT	EXTN
INTN:	equ	EXTN
	ENDMAC
SPSH:	MACRO	Q,SIZE
	IF 	SIZE
	IF	SIZE&8000H
	LXI	H,SIZE
	DAD	S
	SPHL
	ELSE
	MVI	A,SIZE
	CMP	M
	JC	STRERR
	MOV	B,A
	INR	B
PSHLP:	SET	$
	MOV	D,M
	PUSH	D
	INX	S
	DCX	H
	DJNZ	PSHLP
	XRA	A
	ENDIF
	ENDIF
	ENDMAC
MLOAD:	MACRO	WHERE,VALUE
	IF	VALUE
	IF	VALUE&0FF00H
	LXI	B,VALUE
	CALL	WHERE!2
	ELSE
	MVI	C,VALUE
	CALL	WHERE!1
	ENDIF
	ELSE
	CALL	WHERE
	ENDIF
	ENDMAC
ILOD:	MACRO	Q,SIZE,OFST
	IF	SIZE&8000H
	MLOAD	ILODV,OFST
	ELSE
	IF	SIZE-1
	MLOAD	ILOD2,OFST
	ELSE
	MLOAD	ILOD1,OFST
	ENDIF
	ENDIF
	ENDMAC
ISTR:	MACRO	Q,SIZE,OFST
	MLOAD	ISTOR,OFST
	IF	R
	JC	REFERR
	ENDIF
	ENDMAC
LPOP:	MACRO	REG,DISTANCE
	IF	DISTANCE
	PUSH	H
	LXI	H,DISTANCE+2
	DAD	S
	MOV	E,M
	INX	H
	MOV	D,M
	PUSH	D
	MOV	D,H
	MOV	E,L
	DCX	H
	DCX	H
	LXI	B,DISTANCE
	LDDR
	POP	D
	POP	H
	POP	B
	ELSE
	POP	D
	ENDIF
	ENDMAC
ADDR:	MACRO	Q
TEMP	SET	'Q'-'IY'
	IF	'Q'-'Y'*TEMP
	CALL	XADDR
	ELSE
	CALL	YADDR
	ENDIF
	ENDMAC
MIDL:	MACRO	REG,LEVEL
	PUSH	X
	MVI	A,LEVEL
MIDL1:	SET	$
	MOV	C,4(X)
	MOV	B,5(X)
	PUSH	B
	POP	X
	CMP	1(X)
	JRNZ	MIDL1
	XRA	A
	ENDMAC
DSUB:	MACRO	Q,SIZE
	IF	0!SIZE&8000H
	CALL	FSUB
	IF	F
	JC	FLTERR
	ENDIF
	ELSE
	XRA	A
	DSBC	Q D
	ENDIF
	ENDMAC
DADD	MACRO	Q,SIZE
	IF	0!SIZE&8000H
	CALL	FADD
	IF	F
	JC	FLTERR
	ENDIF
	ELSE
	IF	'Q'-'C'
	DAD	Q D
	ELSE
	IF	M
	XRA	A
	DADC	H
	JV	MLTERR
	ELSE
	DAD	H
	ENDIF
	ENDIF
	ENDIF
	ENDMAC
ENTR:	MACRO	Q,LVL,VSIZ
	IF	LVL-1
	MVI	B,LVL
	LXI	D,1-VSIZ
	IF	S
	CALL	ENTRSC
	ELSE
	CALL	ENTER
	ENDIF
	ELSE
	LXI	H,1-VSIZ
	DAD	S
	SPHL
CHAIN$:
	EXX
	LXI	H,LAST
	EXX
	LXI	H,-MARGIN
	DAD	S
	LXI	D,LAST
	DSUB	D
	JC	STKERR
	ENDIF
	ENDMAC
EXIT:	MACRO	Q,SSIZ
	LXI	H,SSIZ+8
	JMP	EXITF
	ENDMAC
L98:	DAD	D
	DAD	D
	MOV	E,M
	INX	H
	MOV	D,M
	XCHG
	PCHL
EQUL:	MACRO	Q,SIZE1,SIZE2
	IF 	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPEQ
	ELSE
	LXI	B,SIZE1
	CALL	SEQUL
	ENDIF
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STREQL
	ENDIF
	ENDMAC
NEQL:	MACRO	Q,SIZE1,SIZE2
	IF	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPNEQ
	ELSE
	LXI	B,SIZE1
	CALL	SNE
	ENDIF
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STRNQL
	ENDIF
	ENDMAC
LE:	MACRO	Q,SIZE1,SIZE2
	IF	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPLTE
	ELSE
	LXI	B,SIZE1
	CALL	SLE
	ENDIF
	ELSE
	CALL	ILE
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STRLEQ
	ENDIF
	ENDMAC
LESS:	MACRO	Q,SIZE1,SIZE2
	IF	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPLT
	ELSE
	LXI	B,SIZE1
	CALL	SLT
	ENDIF
	ELSE
	CALL	ILT
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STRLSS
	ENDIF
	ENDMAC
GE:	MACRO	Q,SIZE1,SIZE2
	IF	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPGTE
	ELSE
	LXI	B,SIZE1
	CALL	SGE
	ENDIF
	ELSE
	CALL	IGE
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STRGEQ
	ENDIF
	ENDMAC
GRET:	MACRO	Q,SIZE1,SIZE2
	IF	'Q'-'S'
	IF	SIZE1
	IF	SIZE1&8000H
	CALL	FPGT
	ELSE
	LXI	B,SIZE1
	CALL	SGT
	ENDIF
	ELSE
	CALL	IGT
	ENDIF
	ELSE
	LXI	B,SIZE1*256+SIZE2
	CALL	STRGRT
	ENDIF
	ENDMAC
FDVD:	MACRO	Q,SIZE
	CALL	FDIVD
	IF	F
	JC	DIVERR
	ENDIF
	ENDMAC
MULT:	MACRO	Q,SIZE
	IF	0!SIZE&8000H
	CALL	FMULT
	IF	F
	JC	MLTERR
	ENDIF
	ELSE
	IF	M
	CALL	IMULT
	ELSE
	CALL	QMULT
	ENDIF
	ENDIF
	ENDMAC
DIVD:	MACRO
	CALL	IDIVD
	IF	M&D
	JC	DIVERR
	ENDIF
	ENDMAC
MMOD:	MACRO
	CALL	IMOD
	IF	M
	JC	DIVERR
	ENDIF
	ENDMAC
NEGT:	MACRO	REG
	IF	'REG'-'H'
	IF	'REG'-'D'
	POP	H
	POP	D
	MVI	A,80H
	XRA	E
	MOV	E,A
	PUSH	D
	PUSH	H
	ELSE
	MOV	A,E
	CMA
	MOV	E,A
	MOV	A,REG
	CMA
	MOV	REG,A
	INX	REG
	ENDIF
	ELSE
	MOV	A,L
	CMA
	MOV	L,A
	MOV	A,REG
	CMA
	MOV	REG,A
	INX	REG
	ENDIF
	XRA	A
	ENDMAC
CTRL:	MACRO
	IF	C
	CALL	CSTS
	JRZ	$+16
	CALL	CI
	CPI	'C'&3FH
	JZ	ERROR
	MVI	C,7
	CALL	CO
	XRA	A
	ENDIF
	ENDMAC
RCHK:	MACRO	REG,LBND,HBND
	IF	R
	LXI	B,LBND
	IF	'REG'-'H'
	IF	'REG'-'S'
	PUSH	H
	LXI	H,HBND
	CALL	CHKDE
	POP	H
	ELSE
	MVI	A,LBND
	CMP	M
	JC	STRERR
	XRA	A
	ENDIF
	ELSE
	PUSH	D
	LXI	D,HBND
	CALL	CHKHL
	POP	D
	ENDIF
	ENDIF
	ENDMAC
STMT:	MACRO	Q,NUMBER
	IF	T+E
VALID	SET	0FFFFH
	EXX
	LXI	B,NUMBER
	IF	T
	IF	'M'-'Q'
	CALL	PSTAT
	ENDIF
	ENDIF
	EXX
	ELSE
	IF	VALID
	EXX
	MOV	B,A
	MOV	C,A
	EXX
VALID	SET	00000H
	ENDIF
	ENDIF
	ENDMAC
GLBP	MACRO	Q,OFFSET,SIZE
	PUSH	Y
	POP	B
	DAD	B
	MOV	B,M
	DCX	H
	MOV	L,M
	MOV	H,B
	LXI	B,OFFSET
	DAD	B
	IF	SIZE-1
	MOV	B,M
	DCX	H
	MOV	L,M
	MOV	H,B
	ELSE
	MOV	L,M
	MOV	H,A
	ENDIF
	ENDMAC
	IF	NOT COMPILER
STRERR:	LXI	H,STRMSG
	JR	PERROR
HPERR:	LXI	H,STKMSG
	JR	PERROR
REFERR:	LXI	H,REFMSG
	JR	PERROR
RNGERR:	LXI	H,RNGMSG
	JR	PERROR
	ENDIF
FLTERR:	LXI	H,FLTMSG
	JR	PERROR
STKERR:	LXI	H,STKMSG
	JR	PERROR
DIVERR:	LXI	H,OUMSG
	JR	PERROR
MLTERR	LXI	H,MLTMSG
PERROR:	CALL	TXTYP
	JMP	ERROR
	IF	NOT COMPILER
STRMSG	DB	'String too lon','g'+80H
REFMSG	DB	'Call by reference precision erro','r'+80H
RNGMSG	DB	'Index or value out of rang','e'+80H
	ENDIF
OUMSG	DB	'Attempted divide by zer','o'+80H
MLTMSG	IF	COMPILER
	DB	'Too many error','s'+80H
	ELSE
	DB	'Multiply overflo','w'+80H
	ENDIF
STKMSG	IF	COMPILER
	DB	'Program too comple','x'+80H
	ELSE
	DB	'Stack overflo','w'+80H
	ENDIF
FLTMSG	DB	'Floating point overflow/underflo','w'+80H
STMTMSG	DB	' -- statement',' '+80H
CRLF	DB	CR,LF+80H
CSET:	MACRO	Q,OFF1,OFF2
	IF	OFF1
	LXI	H,OFF1
	CALL	CONSET
	ELSE
	LXI	H,-OFF2
	DAD	S
	SPHL
	MVI	B,OFF2
CSETCL	SET	$
	MOV	M,A
	INX	H
	DJNZ	CSETCL
	ENDIF
	ENDMAC
UNIN:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	UNION
	ENDMAC
MEMB:	MACRO	Q,OFFSET,OFF2
	LXI	D,OFF2
	LXI	H,OFFSET
	CALL	INN
	ENDMAC
INCL:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	LTEQ
	ENDMAC
SBST:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	GTEQ
	ENDMAC
INTR:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	INSECT
	ENDMAC
DIFF:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	ORGAN
	ENDMAC
MTCH:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	COMP
	ENDMAC
NOMT:	MACRO	Q,OFFSET,OFF1
	LXI	H,OFF1
	LXI	D,OFFSET
	CALL	FUSS
	ENDMAC
xcfp:	macro
	pop	d
	pop	h
	pop	b
	xthl
	push	d
	push	h
	push	b
	endmac
cvtf:	macro	where,value
	if	'A'-'where'
	if	'B'-'where'
	if	'C'-'where'
	if	'D'-'where'
	if	'H'-'where'
	if	value-4
	mov	a,l
	pop	b
	pop	d
	pop	h
	mov	h,a
	push	h
	push	d
	push	b
	xra	a
	call	fout
	lxi	h,13
	dad	s
	push	h
	call	fxdcvt
	else
	call	fout
	endif
	else
	call	cvtflt
	endif
	else
	xchg
	call	cvtflt
	endif
	else
	pop	b
	pop	d
	pop	h
	push	d
	push	b
	call	cvtflt
	xcfp
	endif
	else
	pop	h
	call	cvtflt
	endif
	else
	lxi	h,value
	call	cvtflt
	endif
	endmac
dsb1	macro	reg
	xra	a
	dsbc	reg d
	endmac
cmpi	macro	q,value
	cpi	value
	endmac

svln:	macro
	mov	a,m
	exx
	mov	e,a
	xra	a
	exx
	dcx	h
	endmac

gtln:	macro	reg,size
	exx
	mov	a,e
	exx
	mov	c,a
	xra	a
	mov	b,a
	lxi	h,size
	dsub	b
	dad	s
	mvi	m,cr
	endmac
«eof»