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

⟦9abf0171f⟧ TextFile

    Length: 3200 (0xc80)
    Types: TextFile
    Names: »SRELOP.SRC«

Derivation

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

TextFile

;STRUCTURED RELATIVE OPERATORS
;
	NAME SRELOP
	ENTRY SEQUL,SNE,SLE,SLT,SGE,SGT
;
;
;THESE ROUTINES ARE CALLED WITH THE LENGTH OF
;THE PARAMETERS IN BC, AND THE PARAMETERS
;ARE ON THE STACK IMMEDIATELY UNDERNEATH THE
;RETURN ADDRESS. THE BYTE IN THE PARAMETER OCCUPYING
;THE HIGHEST MEMORY LOCATION IS THE MOST SIGNIFICANT.
;EXPRESSIONS ARE EVALUATED A<COND>B WHERE A IS
;THE PARAMETER OCCUPYING THE HIGHER MEMORY ADDRESSES.
;THE ROUTINES REMOVE THE PARAMETERS FROM THE STACK
;WHEN THEY RETURN AND SET THE CARRY IF THE
;CONDITION IS TRUE.

Z0012	EQU	 6		;SYSTEM LOCATIONS

;STRUCTURED EQUALS
SEQUL:	CALL	Z0009
	RET

;STRUCTURED NOT EQUALS
SNE:	CALL	Z0009
	CMC			;COMPLEMENT THE CARRY
	RET

;STRUCTURED GREATER THAN
SGT:	CALL	Z0010
	RET

;STRUCTURED LESS THAN OR EQUALS
SLE:	CALL	Z0010
	CMC			;COMPLEMENT THE CARRY
	RET

;STRUCTURED LESS THAN
SLT:	CALL	Z0011
	RET

;STRUCTURED GREATER THAN OR EQUALS
SGE:	CALL	Z0011
	CMC			;COMPLEMENT CARRY
	RET

;Z0009 EVALUATES THE EQUALS CONDITION AND SETS THE CARRY
Z0009:	PUSH	X
	LXI	X,Z0012
	DADX	S
	PUSH	X
	POP	H		;HL POINTS TO SECOND OPERAND
	DADX	B		;X POINTS TO FIRST OPERAND
;COMPARE THE TWO OPERANDS BYTE BY BYTE
Z0001:	MOV	A,0(X)
	INX	X
	CCI 
	JRNZ	Z0008
	JV	Z0001

;THE TWO OPERANDS ARE IDENTICAL
;CONDITION IS TRUE, CLEAN UP AND SET THE CARRY
Z0014:	XTIX			;RESTORE IX
	POP	H		;GET NEW SP
	POP	D		;GET FIRST RETURN ADDR
	POP	B		;GET SECOND RETURN ADDR
	SPHL			;SET NEW STACK POINTER
	PUSH	B		;RESTORE SECOND RETURN ADDR
	XCHG			;RETURN ADDR -> HL
	XRA	A		;CLEAR ACCUMULATOR
	STC			;SET THE CARRY
	PCHL			;RETURN

;THE TWO OPERANDS ARE NOT EQUAL
Z0008:	DADX	B		;NEW STACK POINTER
;CONDITION IS FALSE, CLEAN UP AND RESET THE CARRY
Z0013:	XTIX			;RESTORE IX
	POP	H		;GET NEW SP
	POP	D		;GET FIRST RETURN ADDR
	POP	B		;GET SECOND RETURN ADDR
	SPHL			;SET NEW STACK POINTER
	PUSH	B		;RESTORE SECOND RETURN ADDR
	XCHG			;RETURN ADDR -> HL
	XRA	A		;CLEAR ACCUMULATOR
	PCHL			;RETURN

;Z0010 EVALUATES THE GREATER THAN CONDITION AND SETS THE CARRY
Z0010:	PUSH	X
	LXI	X,Z0012-1
	DADX	S
	DADX	B
	PUSH	X
	POP	H		;HL POINTS TO SECOND OPERAND
	DADX	B		;X POINTS TO FIRST OPERAND
	PUSH	X		;BEGINNING OF PARAMETER LIST

;COMPARE THE TWO OPERANDS BYTE BY BYTE
Z0002:	MOV	A,M
	CMP	0(X)
	DCX	X
	DCX	H
	JRC	Z0004
	JRNZ	Z0006
	DCX	B    
	XRA	A		;CLEAR CARRY AND CHECK FOR THE END OF PARAMETERS
	CMP	B
	JRNZ	Z0002
	CMP	C
	JRNZ	Z0002	; OPERANDS ARE ACTUALLY IDENTICAL
Z0006:	POP	X
	INX	X
	JMPR	Z0013

;THE GREATER THAN CONDITION IS TRUE
Z0004:	POP	X
	INX	X
	JMPR	Z0014

;Z0011 ACTUALLY EVALUATES THE LESS THAN CONDITION AND SETS THE CARRY
; ACCORDINGLY
Z0011:	PUSH	X
	LXI	X,Z0012-1
	DADX	S
	DADX	B
	PUSH	X
	POP	H		;HL POINTS TO SECOND OPERAND
	DADX	B		;X POINTS TO FIRST OPENAND
	PUSH	X		;BEGINNING OF PARAMETER LIST

;COMPARE THE TWO OPERANDS BYTE BY BYTE
Z0003:	MOV	A,M
	CMP	0(X)
	DCX	X
	DCX	H
	JRC	Z0006
	JRNZ	Z0004
	DCX	B    
	XRA	A		;CLEAR CARRY AND CHECK FOR THE END OF PARAMETERS
	CMP	B
	JRNZ	Z0003
	CMP	C
	JRNZ	Z0003
	JR	Z0006
«eof»