;
;   the assembler to generate cpmhard.spr
;          rzh        Sept. 2000
;
cr              equ     0dh
lf              equ     0ah

                org     100h

		db	2

		dw	0EB7H

		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
		dw	208h
		dw	208h
		dw	208h
		dw	208h
		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

		JP	0EB4H

		JP	7AH

		JP	39H

		JP	84H

		JP	90H

		JP	0A3H

		JP	0AAH

		JP	0C3H

		JP	0

		JP	0

		JP	0

		JP	0

		JP	0

		JP	0

		JP	0

		JP	0

; unreferenced code
		XOR	A
		LD	(3ACH),A
		LD	(39BH),A
		JR	218H
; to here

		LD	HL,0
		XOR	A
		LD	(395H),A
		LD	A,(392H)
		OR	A
		JR	NZ,259H
		LD	A,(4DH)
		DEC	A
		SUB	C
		JR	NC,21EH
		CPL
		LD	C,A
		LD	A,(4EH)
		OR	A
		RET	Z
		DEC	A
		CP	C
		RET	C
		JR	267H

		LD	A,(4EH)
		OR	A
		JR	Z,21EH
		DEC	A
		SUB	C
		JR	NC,267H
		CPL
		LD	C,A
		JR	21EH

		LD	A,0FFH
		LD	(395H),A
		LD	A,C
		LD	(3A2H),A
		LD	L,C
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		LD	DE,0E16H
		ADD	HL,DE
		RET

		LD	A,(395H)
		OR	A
		JP	Z,1BH
		LD	BC,0
		LD	A,(395H)
		OR	A
		JP	Z,21H
		LD	(3A3H),BC
		RET

		LD	A,(395H)
		OR	A
		JP	Z,24H
		LD	A,C
		LD	(3A6H),A
		SRL	A
		SRL	A
		LD	(3A5H),A
		RET

		LD	(393H),BC
		JP	27H

		LD	A,(395H)
		OR	A
		JP	Z,2AH
		XOR	A
		LD	(3ACH),A
		INC	A
		LD	(39AH),A
		LD	(399H),A
		INC	A
		LD	(39DH),A
		JP	134H

		LD	A,(395H)
		OR	A
		JP	Z,2DH
		XOR	A
		LD	(39AH),A
		LD	A,C
		LD	(39DH),A
		CP	2
		JR	NZ,2EFH
		LD	A,(3A2H)
		LD	E,A
		LD	D,0
		LD	HL,0E05H
		ADD	HL,DE
		LD	A,(HL)
		LD	(3ACH),A
		LD	HL,3A2H
		LD	DE,3A7H
		LD	BC,5
		LDIR
		LD	HL,3ACH
		LD	A,(HL)
		OR	A
		JR	Z,32CH
		DEC	(HL)
		LD	A,(3A2H)
		LD	HL,3A7H
		CP	(HL)
		JR	NZ,32CH
		LD	HL,(3A3H)
		LD	DE,(3A8H)
		SBC	HL,DE
		JR	NZ,32CH
		LD	A,(3A6H)
		LD	HL,3ABH
		CP	(HL)
		JR	NZ,32CH
		INC	(HL)
		LD	A,(0DA3H)
		LD	B,A
		LD	A,(HL)
		CP	B
		JR	C,326H
		LD	(HL),0
		LD	HL,(3A8H)
		INC	HL
		LD	(3A8H),HL
		XOR	A
		LD	(399H),A
		JR	334H

		XOR	A
		LD	(3ACH),A
		INC	A
		LD	(399H),A
		XOR	A
		LD	(398H),A
		LD	HL,39BH
		BIT	0,(HL)
		SET	0,(HL)
		JR	Z,365H
		LD	A,(3A2H)
		LD	HL,39EH
		CP	(HL)
		JR	NZ,35EH
		LD	HL,(3A3H)
		LD	DE,(39FH)
		SBC	HL,DE
		JR	NZ,35EH
		LD	A,(3A5H)
		LD	HL,3A1H
		CP	(HL)
		JR	Z,37BH
		LD	A,(39CH)
		OR	A
		CALL	NZ,1D3H
		LD	HL,3A2H
		LD	DE,39EH
		LD	BC,4
		LDIR
		LD	A,(399H)
		OR	A
		CALL	NZ,1BAH
		XOR	A
		LD	(39CH),A
		LD	A,(3A6H)
		AND	3
		LD	L,A
		LD	H,0
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		LD	DE,(396H)
		ADD	HL,DE
		LD	DE,(393H)
		LD	BC,80H
		LD	A,(39AH)
		OR	A
		JR	NZ,3A2H
		EX	DE,HL
		LD	A,1
		LD	(39CH),A
		LDIR
		LD	A,(39DH)
		CP	1
		LD	A,(398H)
		RET	NZ
		OR	A
		RET	NZ
		XOR	A
		LD	(39CH),A
		CALL	1D3H
		LD	(398H),A
		RET

		CALL	1ECH
		CALL	Z,3CDH
		CALL	79EH
		INC	A
		LD	(391H),A
		LD	(398H),A
		RET	Z
		LD	HL,2EFH
		CALL	215H
		JR	3BAH

		CALL	1ECH
		CALL	Z,446H
		CALL	79EH
		INC	A
		LD	(391H),A
		LD	(398H),A
		RET	Z
		LD	HL,2F5H
		CALL	215H
		JR	3D3H

		CALL	7BCH
		XOR	A
		LD	(398H),A
		LD	A,(39EH)
		CALL	0A33H
		LD	A,(3A1H)
		CALL	0A3FH
		LD	HL,(39FH)
		CALL	0A52H
		CALL	75CH
		CALL	79EH
		INC	A
		RET	NZ
		CALL	64EH
		CALL	79EH
		INC	A
		RET

		CALL	2BFH
		LD	B,0
		LD	A,(392H)
		OR	A
		JR	NZ,424H
		LD	A,(4DH)
		LD	B,A
		LD	A,(39EH)
		ADD	A,'A'
		ADD	A,B
		LD	(30EH),A
		LD	A,(8B2H)
		CALL	2CDH
		LD	(316H),HL
		LD	A,(8B4H)
		CALL	2CDH
		LD	(322H),HL
		LD	A,(8B5H)
		CALL	2CDH
		LD	(320H),HL
		LD	A,(8B3H)
		CALL	2CDH
		LD	(32EH),HL
		LD	A,(8B6H)
		CALL	2CDH
		LD	(339H),HL
		LD	HL,2FCH
		CALL	2BFH
		LD	A,(391H)
		DEC	A
		LD	E,A
		LD	D,0
		LD	HL,919H
		ADD	HL,DE
		ADD	HL,DE
		LD	E,(HL)
		INC	HL
		LD	D,(HL)
		EX	DE,HL
		CALL	2BFH
		LD	HL,33EH
		CALL	2BFH
		CALL	2E3H
		AND	5FH
		CP	'R'
		JR	Z,4AFH
		CP	'C'
		JR	Z,495H
		CP	'I'
		JR	Z,4A3H
		CP	3
		JR	Z,4B6H
		LD	C,7
		CALL	2E9H
		JR	479H

		LD	HL,372H
		CALL	2BFH
		POP	HL
		LD	A,1
		LD	(398H),A
		OR	A
		RET

		LD	HL,37EH
		CALL	2BFH
		POP	HL
		XOR	A
		LD	(398H),A
		RET

		LD	HL,369H
		CALL	2BFH
		RET

		LD	HL,388H
		CALL	2BFH
		JP	0

		PUSH	HL
		LD	C,(HL)
		RES	7,C
		CALL	2E9H
		POP	HL
		BIT	7,(HL)
		RET	NZ
		INC	HL
		JR	4BFH

		PUSH	AF
		RRCA
		RRCA
		RRCA
		RRCA
		CALL	2D7H
		LD	L,A
		POP	AF
		AND	0FH
		CP	0AH
		JR	C,4DFH
		ADD	A,7
		ADD	A,30H
		LD	H,A
		RET

		LD	HL,(1)
		LD	L,9
		JP	(HL)

		LD	HL,(1)
		LD	L,0CH
		JP	(HL)

		db	cr,lf
		db	'Rea','d'+128

		db	cr,lf
		db	'Writ','e'+128

		db	' Error: Hard disk'
		db	' @, Unit 00, Track 0'
		db	'000, Surface 00,'
		db	' Sector 00.',cr
		db	lf+128

		db	cr,lf,'(R)etry, (I)'
		db	'gnore, (C)ontinue,'
		db	' (^C)Abort','.'+128

		db	' Retry.',cr,lf+128

		db	' Continue.',cr,lf+128

		db	' Ignore.',cr,lf+128

		db	' Abort.',cr,lf+128

		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

		LD	A,0FH
		OUT	(0E2H),A
		LD	A,4FH
		OUT	(0E3H),A
		LD	A,0CFH
		OUT	(0E6H),A
		LD	A,0E0H
		OUT	(0E6H),A
		XOR	A
		OUT	(0E4H),A
		LD	A,0CFH
		OUT	(0E7H),A
		LD	A,0FEH
		OUT	(0E7H),A
		LD	A,1
		OUT	(0E5H),A
		RET

		CALL	4CCH
		LD	A,2
		LD	(8B0H),A
		LD	A,0AH
		LD	(8B1H),A
		CALL	4EDH
		CALL	79EH
		JR	NZ,642H
		CALL	7BCH
		CALL	5DBH
		CALL	79EH
		JR	NZ,642H
		CALL	7BCH
		LD	HL,(90FH)
		DEC	HL
		DEC	HL
		DEC	HL
		DEC	HL
		LD	(8B9H),HL
		LD	HL,204H
		LD	(8B7H),HL
		CALL	574H
		CALL	7C5H
		CALL	7A4H
		JR	NZ,620H
		LD	HL,(8B9H)
		LD	BC,4
		CALL	7AAH
		CALL	7A4H
		JR	Z,642H
		LD	A,0CH
		LD	(8BEH),A
		JR	642H

		CALL	6F6H
		LD	A,(8BDH)
		CP	4
		JR	Z,637H
		LD	HL,8B0H
		DEC	(HL)
		JR	NZ,5E2H
		LD	A,0AH
		LD	(8BEH),A
		JR	642H

		LD	HL,8B1H
		DEC	(HL)
		JR	NZ,5E2H
		LD	A,0BH
		LD	(8BEH),A
		CALL	4DCH
		RET

		CALL	4CCH
		CALL	4EDH
		CALL	79EH
		JR	NZ,6C8H
		CALL	790H
		CALL	79EH
		JR	NZ,6C8H
		LD	A,2
		LD	(8AEH),A
		LD	A,2
		LD	(8AFH),A
		CALL	7BCH
		CALL	5DBH
		CALL	79EH
		JR	NZ,6C8H
		CALL	7BCH
		LD	HL,204H
		LD	(8B7H),HL
		LD	HL,(90FH)
		DEC	HL
		DEC	HL
		DEC	HL
		DEC	HL
		LD	(8B9H),HL
		EX	DE,HL
		LD	HL,8B3H
		LD	BC,4H
		LDIR
		CALL	50CH
		CALL	7C5H
		CALL	7A4H
		JR	Z,6A5H
		CALL	6F6H
		LD	HL,8AEH
		DEC	(HL)
		JR	NZ,663H
		LD	A,8
		LD	(8BEH),A
		JR	6C8H

		LD	HL,8BFH
		BIT	0,(HL)
		JR	Z,6C8H
		LD	HL,(911H)
		LD	(8B9H),HL
		CALL	3D0H
		CALL	79EH
		JR	Z,06C8H
		LD	A,6
		LD	(8BDH),A
		CALL	6F6H
		LD	HL,8AFH
		DEC	(HL)
		JR	NZ,663H
		CALL	4DCH
		RET

		LD	HL,(90FH)
		LD	DE,0FFFBH
		ADD	HL,DE
		LD	DE,913H
		LD	BC,5
		LDIR
		RET

		LD	HL,(90FH)
		LD	DE,0FFFBH
		ADD	HL,DE
		EX	DE,HL
		LD	HL,913H
		LD	BC,5
		LDIR
		RET

		CALL	7BCH
		CALL	75CH
		CALL	79EH
		RET	NZ
		CALL	7C5H
		CALL	7A4H
		CALL	NZ,7D0H
		LD	HL,568H
		LD	DE,8C3H
		LD	BC,0CH
		LDIR
		RET

		LD	HL,(8B7H)
		LD	(8C5H),HL
		LD	HL,(8B9H)
		DEC	HL
		LD	(HL),2
		LD	(8CAH),HL
		LD	HL,8C3H
		LD	BC,0CE8H
		OTIR
		LD	A,0
		OUT	(0E0H),A
		LD	A,4
		CALL	87CH
		LD	A,0H
		OUT	(0E5H),A
		LD	A,47H
		LD	B,1
		DI
		OUT	(0EDH),A
		IN	A,(0E4H)
		OR	10H
		OUT	(0E4H),A
		LD	A,80H
		OUT	(0EDH),A
		LD	C,0EDH
		IN	A,(C)
		JP	M,543H
		LD	C,0E0H
		OUT	(C),B
		IN	A,(0E4H)
		AND	0
		SUB	A
		OUT	(C),A
		NOP
		NOP
		NOP
		NOP
		IN	A,(0E4H)
		AND	0EFH
		OUT	(0E4H),A
		LD	A,1
		OUT	(0E5H),A
		IN	A,(0E4H)
		AND	0F7H
		OUT	(0E4H),A
		RET

; 12 bytes of data for ldir
		JP	3B62H

		RET	Z
		LD	D,B
		NOP
		XOR	L
		JP	82D1H

		RST	8
		ADD	A,A
;

		LD	HL,(8B7H)
		DEC	HL
		LD	(8C5H),HL
		LD	HL,(8B9H)
		LD	(8CAH),HL
		LD	HL,8C3H
		LD	BC,0CE8H
		OTIR
		LD	A,0
		OUT	(0E0H),A
		LD	A,4
		CALL	87CH
		LD	A,0
		OUT	(0E5H),A
		LD	D,2
		DI
		IN	A,(0E4H)
		OR	10H
		OUT	(0E4H),A
		LD	A,47H
		OUT	(0EDH),A
		LD	A,80H
		OUT	(0EDH),A
		LD	C,0EDH
		IN	A,(C)
		JP	M,5A9H
		LD	B,0
		NOP
		NOP
		NOP
		LD	C,0E0H
		OUT	(C),D
		NOP
		OUT	(C),B
		NOP
		NOP
		NOP
		NOP
		IN	A,(0E5H)
		LD	D,A
		IN	A,(0E4H)
		AND	0EFH
		OUT	(0E4H),A
		LD	B,A
		LD	A,1
		OUT	(0E5H),A
		IN	A,(0E4H)
		AND	0F7H
		OUT	(0E4H),A
		BIT	7,D
		RET	Z
		LD	A,4
		LD	(8BDH),A
		RET

		CALL	600H
		CALL	79EH
		RET	NZ
		LD	A,(90EH)
		LD	B,A
		LD	A,(8B6H)
		SUB	B
		JP	M,5EFH
		JR	NZ,7F1H
		ADD	A,14H
		LD	B,A
		LD	A,47H
		OUT	(0EDH),A
		LD	A,B
		OUT	(0EDH),A
		IN	A,(0EDH)
		CP	1
		JR	NZ,7F9H
		RET

		LD	A,2
		LD	(8A7H),A
		LD	A,2
		LD	(8ABH),A
		CALL	0064EH
		CALL	79EH
		RET	NZ
		CALL	6C3H
		CALL	79EH
		RET	NZ
		CALL	7A4H
		JR	Z,832H
		LD	HL,8A7H
		DEC	(HL)
		JR	NZ,829H
		LD	A,0
		LD	(8BEH),A
		RET

		CALL	7D0H
		CALL	79EH
		RET	NZ
		JR	80AH

		LD	HL,90BH
		LD	BC,3
		CALL	7AAH
		CALL	7A4H
		RET	Z
		CALL	6F6H
		LD	HL,8ABH
		DEC	(HL)
		JR	NZ,829H
		LD	A,3
		LD	(8BEH),A
		RET

		LD	A,2
		LD	(8A8H),A
		LD	A,2
		LD	(8A9H),A
		CALL	68AH
		CALL	7A4H
		RET	Z
		CALL	6F6H
		LD	A,(8BDH)
		CP	2
		JR	NZ,87EH
		LD	HL,8A8H
		DEC	(HL)
		JR	NZ,875H
		LD	A,1
		LD	(8BEH),A
		RET

		CALL	7D0H
		CALL	79EH
		RET	NZ
		JR	858H

		LD	HL,8A9H
		DEC	(HL)
		JR	NZ,875H
		LD	A,2
		LD	(8BEH),A
		RET

		CALL	822H
		CALL	6A9H
		PUSH	HL
		LD	HL,1388H
		CALL	83DH
		POP	HL
		LD	A,(8C1H)
		BIT	0,A
		JR	Z,8A5H
		LD	A,2
		LD	(8BDH),A
		RET

		CALL	7C5H
		RET

		CALL	775H
		LD	HL,(8B4H)
		OR	H
		LD	(8C0H),A
		OUT	(0E0H),A
		LD	A,0
		CALL	870H
		LD	A,L
		OUT	(0E0H),A
		LD	A,2
		CALL	870H
		RET

		LD	A,0AH
		LD	(8AAH),A
		CALL	7BCH
		LD	HL,4
		LD	(8B7H),HL
		LD	HL,90BH
		LD	(8B9H),HL
		CALL	574H
		CALL	7C5H
		CALL	7A4H
		RET	Z
		CALL	6F6H
		LD	A,(8BDH)
		CP	4
		RET	NZ
		LD	HL,8AAH
		DEC	(HL)
		JR	NZ,8C8H
		LD	A,4
		LD	(8BEH),A
		RET

		LD	HL,8C2H
		SET	5,(HL)
		LD	A,(8BDH)
		CP	3
		CALL	Z,725H
		LD	HL,8EFH
		RLCA
		LD	C,A
		LD	B,0
		ADD	HL,BC
		CALL	756H
		RET

; Don't know what this is
		LD	A,(8BEH)
		LD	HL,8CFH
		JR	906H

; nor this!
		LD	HL,8CFH
		LD	DE,8D0H
		LD	BC,3BH
		LD	(HL),0
		LDIR
		RET

		PUSH	AF
		LD	HL,8FDH
		LD	DE,744H
		LD	A,0
		CALL	860H
		LD	C,A
		LD	B,4
		CALL	74BH
		LD	A,2
		CALL	860H
		LD	C,A
		LD	B,3
		CALL	74BH
		POP	AF
		RET

		db	80h,40h,20h,10h
		db	80h,8,1

		LD	A,(DE)
		INC	DE
		AND	C
		CALL	NZ,756H
		INC	HL
		INC	HL
		DJNZ	94BH
		RET

		INC	(HL)
		RET	NZ
		INC	HL
		INC	(HL)
		DEC	HL
		RET

		CALL	7BCH
		CALL	775H
		OUT	(0E0H),A
		LD	A,0
		CALL	870H
		LD	A,(8BDH)
		CP	0
		RET	NZ
		LD	A,7
		LD	(8BEH),A
		RET

		LD	A,(8B3H)
		AND	4
		ADD	A,A
		ADD	A,A
		ADD	A,A
		LD	B,A
		LD	A,(8B2H)
		AND	7
		OR	B
		ADD	A,A
		ADD	A,A
		LD	B,A
		LD	A,(8B3H)
		AND	3
		OR	B
		ADD	A,A
		ADD	A,A
		RET

		LD	A,2
		CALL	860H
		BIT	4,A
		RET	Z
		LD	A,0DH
		LD	(8BEH),A
		RET

		LD	A,(8BEH)
		CP	0FFH
		RET

		LD	A,(8BDH)
		CP	0FFH
		RET

		LD	DE,8B3H
		LD	A,(DE)
		INC	DE
		CPI
		JR	NZ,9B6H
		RET	PO
		JR	9ADH

		LD	A,5
		LD	(8BDH),A
		RET

		LD	A,0FFH
		LD	(8BDH),A
		LD	(8BEH),A
		RET

		IN	A,(0E5H)
		BIT	1,A
		RET	NZ
		LD	A,3
		LD	(8BDH),A
		RET

		LD	A,2
		LD	(8ACH),A
		LD	A,3
		LD	(8ADH),A
		CALL	7BCH
		CALL	822H
		LD	A,2
		OUT	(0E0H),A
		LD	A,6
		CALL	870H
		PUSH	HL
		LD	HL,1388H
		CALL	83DH
		POP	HL
		LD	A,(8C1H)
		BIT	0,A
		JR	Z,0A0CH
		LD	A,2
		LD	(8BDH),A
		CALL	6F6H
		LD	HL,8ACH
		DEC	(HL)
		JR	NZ,9DAH
		LD	A,5
		LD	(8BEH),A
		RET

		CALL	7C5H
		CALL	7A4H
		RET	Z
		CALL	6F6H
		LD	HL,8ADH
		DEC	(HL)
		JR	NZ,9DAH
		LD	A,6
		LD	(8BEH),A
		RET

		LD	HL,0
		LD	(8BBH),HL
		LD	A,57H
		OUT	(0E6H),A
		LD	A,5FH
		OUT	(0E6H),A
		XOR	A
		LD	(8C1H),A
		LD	A,47H
		OUT	(0EEH),A
		LD	A,2
		OUT	(0EEH),A
		RET

		PUSH	DE
		LD	D,69H
		IN	A,(0EEH)
		RRCA
		JR	C,0A51H
		DEC	D
		JR	NZ,0A40H
		DEC	HL
		LD	A,H
		OR	L
		JR	NZ,0A3EH
		LD	A,81H
		JR	0A53H

		LD	A,80H
		LD	(8C1H),A
		POP	DE
		RET

; don't know what this is
		OUT	(0E0H),A
		LD	A,B
		RLCA
		CALL	870H
		RET

		OR	'A'
		CALL	87CH
		IN	A,(0E1H)
		PUSH	AF
		IN	A,(0E4H)
		AND	0F7H
		OUT	(0E4H),A
		POP	AF
		RET

		AND	0BEH
		CALL	87CH
		IN	A,(0E4H)
		AND	0F7H
		OUT	(0E4H),A
		RET

		AND	0F7H
		OUT	(0E4H),A
		LD	B,1AH
		IN	A,(0E4H)
		AND	80H
		JR	NZ,0A91H
		DEC	B
		JR	NZ,0A82H
		LD	A,1
		LD	(8BDH),A
		RET

		IN	A,(0E4H)
		OR	8
		OUT	(0E4H),A
		LD	B,1AH
		IN	A,(0E4H)
		AND	80H
		RET	Z
		DEC	B
		JR	NZ,0A99H
		LD	A,0
		LD	(8BDH),A
		RET

; following 3 blocks of code are ref'ed as data
;     data or code?
		LD	H,(IY+0CH)
		LD	(4796H),HL
		LD	B,(IY+0DH)
		RES	7,B
		LD	A,(IY+2)
		CP	'S'
		JR	Z,0ACBH
		LD	B,82H
		CP	'M'
		JR	NZ,0AD1H
		DEC	HL
		DEC	HL
		BIT	0,(HL)
		JR	NZ,0AD1H
		BIT	7,(HL)
		JR	Z,0ACBH
		LD	B,0E2H
		LD	HL,3E05H
		CALL	3707H
		POP	HL
		LD	DE,0EH
		ADD	HL,DE
		JR	0A94H

		PUSH	HL
		EX	DE,HL
		CALL	12F6H
		POP	HL
		PUSH	HL
		CALL	3864H
		POP	HL
		PUSH	HL
		CALL	3766H
		SUB	A
		LD	(2F20H),A
		POP	HL
		PUSH	HL
		CALL	2F21H
		JR	C,0AFFH
		LD	HL,4C57H
		LD	(4860H),HL
		CALL	2F7CH
		POP	HL
		JP	387AH

		EX	AF,AF'
		LD	(2F1EH),DE
		POP	HL
		PUSH	HL
		INC	HL
		INC	HL
		INC	HL
		LD	DE,398CH
		LD	BC,21H
; is above data or code?

		dw	0B0EDH
		dw	8921H

		ADD	HL,SP
		CALL	3766H
		db	0FDH

		db	0

		dw	939H
		dw	948H
		dw	951H
		dw	95CH
		dw	967H
		dw	978H
		dw	98FH
		dw	9A3H
		dw	9B3H
		dw	9BFH
		dw	9CCH
		dw	9D7H
		dw	9E1H
		dw	9F8H
		dw	0A0EH
		dw	0A23H

		db	'Internal error','.'+128

		db	'Time out','.'+128

		db	'Seek fault','.'+128

		db	'Seek error','.'+128

		db	'Header CRC error','.'+128

		db	'Timeout during Re-'
		db	'zero','.'+128

		db	'Fault after Re-zero'
		db	'.'+128

		db	'Drive not ready','.'+128

		db	'Write fault','.'+128

		db	'Verify error','.'+128

		db	'Read fault','.'+128

		db	'CRC error','.'+128

		db	'Incorrect sector'
		db	' found','.'+128

		db	'Drive write protected'
		db	'.'+128

		db	'Sector address error'
		db	'.'+128

		db	'Illegal command','.'+128

		LD	HL,0E0DH
		LD	E,A
		LD	D,0
		ADD	HL,DE
		LD	A,(HL)
		LD	(8B2H),A
		RET

		LD	B,0
		SUB	14H
		JR	C,0C48H
		INC	B
		JR	0C41H

		ADD	A,14H
		LD	(8B6H),A
		LD	A,B
		LD	(8B3H),A
		RET

		LD	(8B4H),HL
		LD	A,(8B3H)
		LD	E,A
		LD	D,0
		PUSH	HL
		ADD	HL,HL
		POP	BC
		ADD	HL,BC
		ADD	HL,DE
		PUSH	HL
		LD	A,(0E04H)
		ADD	A,A
		LD	E,A
		LD	D,0
		LD	HL,0DA4H
		LD	A,(8B2H)
		INC	A
		DEC	A
		JR	Z,0C75H
		ADD	HL,DE
		JR	0C6FH

		POP	DE
		LD	BC,15EH
		PUSH	BC
		LD	C,0
		LD	A,(0E04H)
		LD	B,A
		LD	A,E
		CP	(HL)
		INC	HL
		JR	NZ,0C89H
		LD	A,D
		CP	(HL)
		JR	Z,0C99H
		INC	HL
		INC	C
		LD	A,C
		CP	3
		JR	NZ,0C95H
		LD	C,0
		EX	(SP),HL
		INC	HL
		EX	(SP),HL
		DJNZ	0C80H
		POP	HL
		RET

		LD	A,C
		LD	(8B3H),A
		POP	HL
		LD	(8B4H),HL
		RET

		LD	HL,30H
		LD	(1),HL
		LD	HL,(1)
		PUSH	HL
		LD	L,0
		LD	DE,100H
		ADD	HL,DE
		LD	(396H),HL
		LD	(90FH),HL
		XOR	A
		LD	(8BFH),A
		CALL	3ADH
		POP	HL
		PUSH	HL
		LD	DE,18H
		LD	BC,3
		LDIR
		POP	DE
		LD	HL,0
		LD	BC,3
		LDIR
		LD	HL,(1)
		LD	DE,15H
		ADD	HL,DE
		PUSH	HL
		LD	DE,1BH
		LD	BC,15H
		LDIR
		POP	DE
		LD	HL,3
		LD	BC,15H
		LDIR
		LD	HL,(1)
		LD	L,0
		LD	DE,500H
		ADD	HL,DE
		LD	A,(0DA2H)
		LD	B,A
		LD	IX,0E16H
		LD	(IX+8),L
		LD	(IX+9),H
		LD	DE,10H
		ADD	IX,DE
		DJNZ	0CFCH
		LD	HL,40H
		LD	A,(HL)
		AND	80H
		LD	(392H),A
		LD	A,(HL)
		AND	0FH
		LD	(4EH),A
		RET	Z
		DEC	A
		LD	B,0
		LD	HL,0E0DH
		CP	(HL)
		JR	C,0D26H
		INC	B
		INC	HL
		JR	0D1FH

		LD	A,B
		LD	(4EH),A
		LD	A,(4DH)
		ADD	A,B
		LD	(4FH),A
		LD	HL,0DA4H
		LD	DE,0DA5H
		LD	BC,5FH
		LD	(HL),0E5H
		LDIR
		LD	HL,0
		LD	(8B4H),HL
		LD	A,13H
		LD	(8B6H),A
		XOR	A
		LD	(8B3H),A
		LD	DE,0DA4H
		LD	A,(40H)
		AND	0FH
		LD	B,A
		LD	HL,8B2H
		LD	(HL),0FFH
		PUSH	BC
		PUSH	DE
		LD	HL,8B2H
		INC	(HL)
		CALL	7BCH
		CALL	75CH
		CALL	79EH
		JR	Z,0D71H
		LD	HL,0BB5H
		JR	0D96H

		CALL	7D0H
		CALL	79EH
		JR	Z,0D7EH
		LD	HL,0BBDH
		JR	0D96H

		CALL	64EH
		CALL	79EH
		JR	Z,0D8BH
		LD	HL,0BC6H
		JR	0D96H

		CALL	3CDH
		CALL	79EH
		JR	Z,0E08H
		LD	HL,0BCCH
		CALL	2BFH
		LD	A,(8B2H)
		CALL	2CDH
		LD	(0BDFH),HL
		LD	HL,0BD2H
		CALL	2BFH
		POP	HL
		LD	A,(0E04H)
		ADD	A,A
		LD	E,A
		LD	D,10H
		ADD	HL,DE
		PUSH	HL
		JP	0C3DH

		db	cr,lf
		db	'Selec','t'+128
		db	cr,lf
		db	'Re-zer','o'+128
		db	cr,lf
		db	'See','k'+128
		db	cr,lf
		db	'Rea','d'+128
		db	' Error: Unit'
		db	' 00 while reading'
		db	' alternate track'
		db	' table.',cr,lf+128

		LD	IX,(90FH)
		LD	DE,100H
		ADD	IX,DE
		LD	A,(0E04H)
		LD	B,A
		LD	HL,0E5E5H
		LD	A,(IX+0)
		CP	0E5H
		JR	Z,0E2FH
		LD	L,(IX+2)
		LD	H,(IX+3)
		PUSH	HL
		ADD	HL,HL
		POP	DE
		ADD	HL,DE
		LD	E,(IX+0)
		LD	D,0
		ADD	HL,DE
		POP	DE
		EX	DE,HL
		LD	(HL),E
		INC	HL
		LD	(HL),D
		INC	HL
		PUSH	HL
		LD	DE,8
		ADD	IX,DE
		DJNZ	0E15H
		POP	DE
		POP	BC
		DEC	B
		JP	NZ,0B5BH
		RET

;following 2 blocks of code unref'ed
		CCF
		SUB	A
		LD	(3FDBH),A
		CALL	3403H
		JR	0E37H

		LD	HL,(4C53H)
		LD	DE,(4C55H)
		CALL	27D7H
		RET	NC
		PUSH	HL
		PUSH	HL
		POP	IY
		LD	A,(IY+2)
		CP	'S'
		JR	NZ,0E8CH
		LD	A,(IY+0DH)
		BIT	5,A
		JR	Z,0E8CH
		BIT	6,A
		JR	NZ,0E8CH
		AND	1FH
		DEC	A
		JR	Z,0E8CH
		DEC	A
		LD	B,A
		LD	DE,3
		ADD	HL,DE
		LD	E,(IY+0BH)
		LD	D,(IY+0CH)
		OR	D
		OR	E
		JR	Z,0E8CH
		CALL	3270H
		LD	A,6
		CALL	329FH
		POP	HL
		LD	DE,0EH
		ADD	HL,DE
		JR	0E51H
; what was that?

; same?
		PUSH	AF
		LD	A,(3F7AH)
		AND	A
		JR	Z,0EB4H
		PUSH	HL
		PUSH	DE
		PUSH	BC
		LD	A,(3F6DH)
		LD	B,A
		CALL	3270H
		LD	DE,(46A8H)
		LD	A,0BH
		CALL	32E7H
		XOR	A
		LD	(3F7AH),A
		POP	BC
		POP	DE
		POP	HL
		POP	AF
		RET

; more ?
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL
		LD	A,B
		CP	3
		JR	C,0EDFH
		LD	A,(46A5H)
		CP	B
		JR	Z,0EDDH
		LD	A,B
		LD	(46A5H),A
		SUB	3
		LD	L,A
		LD	H,0
		LD	DE,8
		CALL	2432H
		LD	DE,4624H
		ADD	HL,DE
		LD	A,1
		CALL	329FH
		LD	A,3
		POP	HL
		POP	DE
		POP	BC
		LD	B,A
		POP	AF
		RET

; from here to next "********" is prob. just data (?)
		PUSH	AF
		LD	A,(HL)
		CP	20H
		JR	Z,0F02H
		PUSH	HL
		PUSH	DE
		LD	A,(109H)
		LD	E,A
		LD	D,0
		LD	A,(HL)
		CP	20H
		JR	Z,0EFDH
		INC	HL
		INC	D
		DEC	E
		JR	NZ,0EF3H
		LD	C,D
		POP	DE
		POP	HL
		JR	0F07H

		LD	HL,32C5H
		LD	C,1
		POP	AF
		JP	32E7H

		AND	B
		BIT	0,(IX+2)
		JP	NZ,33ADH
		CALL	324DH
		AND	A
		CALL	3354H
		PUSH	BC
		LD	B,8
		CALL	334DH
		POP	BC
		RET

		LD	A,B
		AND	A
		RET	Z
		LD	A,(HL)
		CALL	32C6H
		INC	HL
		DEC	B
		JR	0F22H

		BIT	0,(IX+2)
		RET	NZ
		PUSH	AF
		XOR	A
		CALL	331CH
		POP	AF
		PUSH	AF
		PUSH	BC
		LD	B,4
		CALL	333FH
		POP	BC
		POP	AF
		CP	0FH
		RET	Z
		CP	5
		JR	C,0F50H
		PUSH	AF
		CALL	3332H
		POP	AF
		CP	9
		RET	NC
		LD	A,C
		LD	B,3
		CALL	333FH
		LD	A,(HL)
		CALL	27CCH
		CALL	32D4H
		INC	HL
		DEC	C
		JR	NZ,0F56H
		RET

		SCF
		CALL	3354H
		PUSH	BC
		LD	B,2
		CALL	333FH
		POP	BC
		RET

		CALL	324DH
		CALL	3270H
		SCF
		CALL	3354H
		LD	A,B
		CALL	3320H
		LD	A,E
		CALL	32D4H
		LD	A,D
		CALL	32D4H
		RET

		PUSH	BC
		PUSH	AF
		LD	A,9
		SUB	B
		LD	C,A
		POP	AF
		DEC	C
		JR	Z,0F92H
		ADD	A,A
		JR	0F8CH

		POP	BC
		ADD	A,A
		CALL	3354H
		DJNZ	0F93H
		RET

		PUSH	AF
		LD	A,(3F6CH)
		CP	2
		JR	NZ,0FBBH
		EX	AF,AF'
		RET	P
		NOP
		LD	B,(HL)
		JR	Z,0FBBH
		POP	AF
		PUSH	AF
		LD	A,(33A0H)
		RLA
		LD	(33A0H),A
		LD	A,(33A1H)
		DEC	A
		LD	(33A1H),A
		CALL	Z,3377H
		POP	AF
		RET

		PUSH	HL
		PUSH	DE
		PUSH	BC
		PUSH	AF
		LD	A,(33A0H)
		LD	HL,3CBDH
		CALL	3803H
		LD	A,8
		LD	(33A1H),A
		POP	AF
		POP	BC
		POP	DE
		POP	HL
		RET

		LD	A,(33A1H)
		CP	8
		RET	Z
		LD	B,A
		LD	A,(33A0H)
		ADD	A,A
		DJNZ	0FDEH
		LD	(33A0H),A
		JR	0FBDH

		SBC	A,(HL)
		EX	AF,AF'
		BIT	0,(IX+2)
		RET	Z
		CALL	28EBH
		SUB	A
		INC	A
		RET

		PUSH	AF
		LD	A,(3F6CH)
		CP	2
		JR	Z,0FFDH
		POP	AF
		RET

		POP	AF
		PUSH	HL
		PUSH	DE
		PUSH	BC
		PUSH	AF
		LD	A,(0C7AH)
		LD	B,B
		JR	NZ,1048H
		JR	NZ,104AH
		JR	NZ,104CH
		JR	NZ,100EH
		NOP
		LD	BC,201H
		LD	(BC),A
		INC	BC
		INC	BC
		RST	38H
;  **************************

		dw	0	; translation table
		dw	0	; used by BDOS
		dw	0
		dw	0
		dw	0	; addr. of dir. buff.
		dw	0E96H   ; addr. of DPB
		dw	0	; addr. of check vect.
		dw	0AA2H	; addr. of alloc. vect.

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0EA5H
		dw	0
		dw	0B22H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0E96H
		dw	0
		dw	0B62H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0EA5H
		dw	0
		dw	0BE2H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0E96H
		dw	0
		dw	0C22H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0EA5H
		dw	0
		dw	0CA2H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0E96H
		dw	0
		dw	0CE2H

		dw	0
		dw	0
		dw	0
		dw	0
		dw	0
		dw	0EA5H
		dw	0
		dw	0D62H

		dw	240	; CP/M spt
		db	6	; BSH
		db	63	; BLM
		db	3	; EXM
		dw	1023	; DSM
		dw	1023	; DRM
		db	0f0h	; AL0
		db	0	; AL1
		dw	0	; CKS
		dw	1	; OFF

		dw	240	; CP/M spt
		db	5	; BSH
		db	31	; BLM
		db	1	; EXM
		dw	511	; DSM
		dw	255	; DRM
		db	0c0h	; AL0
		db	0	; AL1
		dw	0	; CKS
		dw	281	; OFF

		JP	0AA2H

; bit map for relocation?

		db	24h,92h,49h,0
		db	0,0,12h,1
		db	20h,0,0,0
		db	0,11h,1,8
		db	82h,22h,22h,20h
		db	42h,48h,88h,91h
		db	24h,44h,40h,82h
		db	12h,40h,40h,48h
		db	22h,4,81h,0
		db	44h,41h,11h,20h
		db	12h,8,81h,20h
		db	89h,20h,22h,24h
		db	0,4,20h,80h
		db	42h,10h,24h,89h
		db	22h,44h,84h,91h
		db	22h,42h,24h,92h
		db	49h,21h,21h,8
		db	2,9,24h,92h
		db	49h,24h,92h,49h
		db	20h,40h,24h,90h
		db	0,0,21h,20h
		db	84h,84h,48h,90h
		db	4,0,8,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,1,8,49h
		db	9,21h,20h,41h
		db	24h,84h,12h,4
		db	24h,8,8,40h
		db	48h,92h,12h,4
		db	24h,90h,82h,40h
		db	88h,9,21h,20h
		db	21h,2,49h,2
		db	48h,22h,4,2
		db	2,1,24h,49h
		db	24h,2,48h,24h
		db	0,10h,0,0
		db	1,0,0,0
		db	0,0,2,24h
		db	90h,0,40h,0
		db	0,4,0,0
		db	0,0,0,44h
		db	88h,88h,0,0
		db	8,49h,12h,21h
		db	1,12h,8,24h
		db	48h,8,21h,24h
		db	48h,10h,11h,20h
		db	80h,89h,2,20h 
		db	11h,12h,20h,40h
		db	41h,20h,92h,49h
		db	12h,8,8,84h
		db	24h,4,48h,48h
		db	0,90h,82h,10h
		db	40h,0,80h,2
		db	40h,90h,11h,0
		db	80h,40h,8,8
		db	82h,8,0,20h
		db	90h,2,8,49h
		db	0,81h,10h,9
		db	20h,22h,44h,80h
		db	81h,0,10h,0
		db	0,0,4,2
		db	8,0,8,0
		db	0,1,0,0
		db	4,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,2ah
		db	0aah,0aah,0aah,80h
		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,4,4
		db	0,8,89h,0
		db	10h,24h,0,2
		db	0,0,0,8
		db	89h,0,9,12h
		db	10h,8,0,8
		db	4,0,2,10h
		db	0,0,40h,2
		db	0,0,12h,0
		db	10h,89h,0,81h
		db	12h,42h,12h,10h
		db	90h,84h,84h,92h
		db	49h,10h,8,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,10h,10h,0
		db	0,0,0,0
		db	20h,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,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	44h,0,44h,0
		db	44h,0,44h,0
		db	44h,0,44h,0
		db	44h,0,44h,0
		db	0,0,2,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,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,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,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0,0,0,0
		db	0

		END
