	PAGE	58
	TITLE	'Boot Loader for Cromemco 4FDC/16FDC in 8080 code'
;
LARGESW		EQU	1		;ONE IF MAXI (8") DRIVE; ZERO FOR 5"
;
MEMSIZE		EQU	64
BEGINADR	EQU	MEMSIZE*1024-56*128	;START OF CPM
;
CBOOT		EQU	BEGINADR+44*128		;THIS IS THE COLD BOOT
;
		ORG	80H	;Cromemco nFDC boards load boot to 80H not 00H
;
;CROMEMCO 4FDC I/O ASSIGNMENTS
;
CSTATPORT	EQU	00H
CDATAPORT	EQU	01H
IMODEPORT	EQU	02H
IMASKPORT	EQU	03H
PARLPORT	EQU	04H
STATPORT	EQU	30H
TRAKPORT	EQU	31H
SECTPORT	EQU	32H
DATAPORT	EQU	33H
FLAGPORT	EQU	34H
BANKPORT	EQU	40H
;
START:	MVI	A,01H
	OUT	BANKPORT
	LXI	H,BEGINADR		;START OF CP/M
	LXI	D,51*256+2		;SECTOR COUNT, FIRST SECTOR
;
;RESTORE TO TRACK ZERO
;
	MVI	A,21H+LARGESW*10H
	OUT	FLAGPORT
	MVI	A,0FH-LARGESW*2
RST0:	OUT	STATPORT
RST1:	IN	FLAGPORT
	RAR
	JNC	RST1
	IN	STATPORT
	ANI	98H
	JNZ	START
;
;READ ONE SECTOR
;
RDI0:	MOV	A,E
	OUT	SECTPORT
	LXI	B,8000H+DATAPORT
	MVI	A,0A1H+LARGESW*10H
	OUT	FLAGPORT
	MVI	A,88H
	OUT	STATPORT
RDI1:	IN	FLAGPORT
	RAR
	JC	RDI3
;	INI
	IN	DATAPORT
	MOV	M,A
	INX	H
	DCR	B
;
	JNZ	RDI1
RDI2:	IN	FLAGPORT
	RAR
	JNC	RDI2
;
;CHECK STATUS AND READY FOR NEXT SECTOR AND TRACK
;
RDI3:	IN	STATPORT
	ANI	9CH
	JNZ	START			;RETRY BOOT IF ERROR
	DCR	D
	JZ	CBOOT			;SEE IF ALL DONE
	INR	E
	MOV	A,E			;INCREMENT SECTOR NUMBER
	CPI	19+LARGESW*8
	JC	RDI0			;JUMP IF NOT END OF TRACK
	MVI	E,1
	MVI	A,5FH-LARGESW*2		;GO TO NEXT TRACK
	JMP	RST0
;
	END
