;
;   the assembler to generate cpmcrt.spr
;          rzh        Sept. 2000
;
cr		equ	0dh
lf		equ	0ah
esc		equ	1bh

		org	100h
;
		db	0

		dw	415h

		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0

		JP	18H

		JP	107H

		JP	114H

		JP	0FCH

		JP	208H

		JP	0FBH

		JP	0F9H

		JP	1ACH

		XOR	A
		LD	(3),A
		CALL	57H
		CALL	0A1H
		LD	A,0C3H
		LD	(40H),A
		LD	HL,18DH
		LD	(41H),HL
		LD	HL,(1)
		LD	L,6
		EX	DE,HL
		LD	HL,3
		LD	BC,12H
		LDIR
		PUSH	HL
		LD	HL,15H
		ADD	HL,DE
		EX	DE,HL
		POP	HL
		LD	BC,3
		LDIR
		RET

		PUSH	BC
		LD	C,esc
		CALL	0FCH
		LD	C,'.'
		CALL	0FCH
		POP	BC
		JP	0FCH

		LD	A,(303H)
		OR	A
		RET	Z
		LD	C,'0'
		CALL	48H
		LD	C,'4'
		CALL	48H
		LD	C,'6'
		CALL	48H
		LD	C,'9'
		CALL	48H
		LD	HL,400H
		LD	DE,2DDH
		LD	BC,30BH
		LD	A,14H
		PUSH	AF
		EX	DE,HL
		LD	(HL),C
		INC	HL
		LD	(HL),B
		INC	HL
		EX	DE,HL
		LD	A,(HL)
		CP	'^'
		JP	NZ,8DH
		LD	A,cr
		JP	94H

		CP	'_'
		JP	NZ,94H
		LD	A,' '
		LD	(BC),A
		INC	HL
		INC	BC
		INC	A
		JP	NZ,82H
		POP	AF
		DEC	A
		JP	NZ,7BH
		RET

		LD	HL,310H
		LD	DE,2BEH
		LD	BC,4
		LDIR
		LD	HL,318H
		LD	DE,2C2H
		LD	BC,4
		LDIR
		LD	DE,314H
		LD	HL,2C2H
		LD	B,4
		LD	A,(HL)
		OR	A
		JP	Z,0D4H
		LD	A,(DE)
		OR	A
		JP	Z,0D4H
		LD	C,(HL)
		INC	C
		INC	C
		LD	A,1
		OUT	(C),A
		LD	C,(HL)
		LD	A,(DE)
		OUT	(C),A
		INC	HL
		INC	DE
		DEC	B
		JP	NZ,0BFH
		LD	HL,2BEH
		LD	DE,2C2H
		LD	B,4
		LD	A,(DE)
		LD	(4CH),A
		LD	A,(HL)
		CP	5
		PUSH	HL
		PUSH	DE
		PUSH	BC
		CALL	Z,43H
		POP	BC
		POP	DE
		POP	HL
		INC	HL
		INC	DE
		DEC	B
		JP	NZ,0E2H
		RET

		LD	A,1AH
		RET

		IN	A,(0)
		AND	80H
		JP	Z,0FCH
		LD	A,C
		OUT	(1),A
		RET

		LD	A,(411H)
		OR	A
		RET	NZ
		IN	A,(0)
		AND	40H
		RET	Z
		LD	A,0FFH
		RET

		LD	A,(411H)
		OR	A
		JP	NZ,179H
		CALL	0010CH
		JP	Z,11BH
		IN	A,(1)
		AND	7FH
		CP	2
		RET	NZ
		LD	C,A
		CALL	0FCH
		LD	HL,1000H
		CALL	10CH
		JP	NZ,13EH
		DEC	HL
		LD	A,H
		OR	L
		JP	NZ,12FH
		LD	A,2
		RET

		IN	A,(1)
		OR	80H
		LD	B,A
		LD	C,2
		CALL	0FCH
		LD	HL,412H
		LD	A,(HL)
		OR	A
		LD	A,B
		RET	Z
		AND	7FH
		LD	HL,2C6H
		LD	DE,2DDH
		LD	B,17H
		CP	(HL)
		INC	HL
		JP	Z,167H
		DEC	B
		JP	Z,114H
		INC	DE
		INC	DE
		JP	159H

		EX	DE,HL
		LD	E,(HL)
		INC	HL
		LD	D,(HL)
		LD	A,D
		OR	E
		JP	Z,114H
		EX	DE,HL
		LD	(413H),HL
		LD	HL,411H
		LD	(HL),0FFH
		LD	HL,(413H)
		LD	A,(HL)
		LD	B,A
		INC	HL
		LD	(413H),HL
		LD	A,(HL)
		SUB	0FFH
		JP	NZ,18BH
		LD	(411H),A
		LD	A,B
		RET

		LD	A,C
		CP	2
		RET	NC
		LD	B,0
		LD	HL,19DH
		ADD	HL,BC
		ADD	HL,BC
		LD	E,(HL)
		INC	HL
		LD	D,(HL)
		EX	DE,HL
		JP	(HL)

		dw	1A1H
		dw	1A6H

		XOR	A
		LD	(412H),A
		RET

		LD	A,1
		LD	(412H),A
		RET

		CALL	294H
		CP	A
		LD	BC,1C2H
		JP	NC,0DD01H
		LD	BC,1EEH
		POP	AF
		LD	BC,1FBH
		CP	A
		LD	BC,0FF3EH
		RET

		CALL	2B1H
		INC	C
		INC	C
		INC	C
		INC	C
		IN	A,(C)
		CPL
		AND	20H
		RET	Z
		LD	A,0FFH
		RET

; can find references
		CALL	2B1H
		IN	A,(C)
		AND	80H
		RET	Z
		LD	A,0FFH
		RET

; nor to this
		CALL	1D2H
		RET	Z
		INC	C
		INC	C
		INC	C
		INC	C
		IN	A,(C)
		CPL
		AND	40H
		RET	Z
		LD	A,0FFH
		RET

; one call in unref'd code
		JP	1D2H

; orphan code?
		CALL	2B1H
		LD	A,C
		LD	(4CH),A
		JP	46H

; orphan code?
		CALL	1D2H
		RET	Z
		IN	A,(C)
		CPL
		AND	4
		RET	Z
		LD	A,0FFH
		RET

		PUSH	BC
		CALL	1ACH
		JP	Z,209H
		CALL	294H
		LD	(2402H),HL
		LD	(BC),A
		ADD	HL,SP
		LD	(BC),A
		LD	B,C
		LD	(BC),A
		LD	D,D
		LD	(BC),A
		LD	B,H
		LD	(BC),A
		LD	C,A
		LD	(BC),A
		LD	(0C102H),HL
		RET

; unref'ed
		CALL	2B1H
		INC	C
		INC	C
		INC	C
		INC	C
		POP	DE
		SET	7,E
		OUT	(C),E
		RES	7,E
		OUT	(C),E
		SET	7,E
		OUT	(C),E
		RET

; unref'ed
		CALL	2B1H
		INC	C
		POP	DE
		OUT	(C),E
		RET

; unref'ed
		JP	239H

; unref'ed
		CALL	2B1H
		LD	A,C
		LD	(4CH),A
		POP	BC
		JP	49H

; unref'ed
		JP	239H

; unref'ed
		POP	DE
		LD	HL,(2BAH)
		INC	L
		LD	A,E
		CP	esc
		LD	A,3FH
		JP	NZ,261H
		LD	A,':'
		CP	L
		JP	NC,275H
		PUSH	DE
		LD	A,H
		OR	A
		CALL	NZ,286H
		LD	E,3
		CALL	278H
		LD	H,0FFH
		LD	L,1
		POP	DE
		LD	(2BAH),HL
		PUSH	DE
		CALL	1EEH
		OR	A
		JP	Z,279H
		INC	C
		POP	DE
		OUT	(C),E
		LD	C,E
		RET

; unref'ed
		CALL	2B1H
		IN	A,(C)
		AND	40H
		JP	Z,289H
		INC	C
		IN	A,(C)
		RET

		LD	A,(3)
		AND	0C0H
		RLCA
		RLCA
		LD	(2BCH),A
		LD	E,A
		LD	D,0
		LD	HL,2BEH
		ADD	HL,DE
		LD	A,(HL)
		ADD	A,A
		LD	E,A
		LD	D,0
		POP	HL
		ADD	HL,DE
		LD	E,(HL)
		INC	HL
		LD	D,(HL)
		EX	DE,HL
		JP	(HL)

		LD	HL,(2BCH)
		LD	DE,2C2H
		ADD	HL,DE
		LD	C,(HL)
		RET

		db	0,0,0,0,0,0,0,0
		db	0,0,0,0

		db	'p'
		db	'q'
		db	'r'
		db	's'
		db	't'
		db	'u'
		db	'v'
		db	'w'
		db	'x'
		db	'y'
		db	'z'
		db	'{'
		db	'|'
		db	'}'
		db	'~'
		db	7fh
		db	'o'
		db	'n'
		db	'm'
		db	'l'
		db	'^'
		db	'_'
		db	'j'

		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0

		dw	40BH
		dw	40DH
		dw	40FH

		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0
		db	0,0,0,0,0,0,0,0

		dw	0FF18H
		dw	0FF13H
		dw	0FF10H
		dw	100H
		dw	0

;  bit map for relocation?

		db	24h,92h,49h,2
		db	40h,40h,4,0
		db	0,4,22h,0
		db	84h,21h,4,80h
		db	1,8,40h,21h
		db	2,0,40h,8
		db	10h,80h,0,49h
		db	0,0,1,0
		db	20h,40h,2,24h
		db	80h,10h,48h,20h
		db	1,20h,12h,4
		db	42h,1,12h,10h
		db	41h,20h,4,2
		db	88h,22h,0aah,0aah
		db	8,0,8,1
		db	0,0,90h,4
		db	0,12h,55h,55h
		db	42h,0,0,10h
		db	12h,0,44h,2
		db	8,21h,1,11h
		db	0,81h,0,4
		db	10h,0,12h,0
		db	0,0,0,0
		db	0,0,0,0
		db	2,0a0h,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0

		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah
		db	1ah,1ah,1ah,1ah

		END
