;	ORG	0100h		;use L80

;	modified Imsai Imdos v2.05 format utility with serializer
;	last edit: 11/28/14

;use ddt to change serial# within sformat:
;
;ddt sformat.com
;s107
;7A
;01
;g0
;save 15 sformat.com
;
;now use sformat to initialize a disk with a new serial#

BDOS	EQU	0005h

	JMP 	H0139

;serial# is located here to be modified by ddt

	DB 02h
	DB 00h			;revision
	DB 02h,05h		;version
	DB 0CDh,00h		;serial

SERIAL:	LXI 	SP,H0F7D	;label marks end of serial field
	CALL	H0139
	RST 	07

	DB 'COPYRIGHT (C) 1977, IMSAI MFG CORP, MADE IN USA'
H0139:	LXI 	H,0000h
	DAD 	SP
	SHLD	H0F05
	LXI 	SP,H0F7B
	CALL	H09E5		;get imdos serial# and check version
	JNC	H0175		;if ok
	CALL	H0BB0

	DB '   INCOMPATIBLE VERSION OF SYSTEM$'
H016E:	XRA 	A
	STA 	H0F10
	JMP 	H07A1
H0175:	LXI 	H,0080h		;check command tail for drive letter
	MOV 	A,M
	STA 	H0F03		;# of chars in tail
	ORA 	A
	JZ 	H01B6		;no tail
	LXI 	D,H0F7D
	PUSH	D
	MOV 	C,A
H0185:	INX 	H
	MOV 	A,M
	STAX	D
	DCR 	C
	JP 	H019E
	MOV 	A,E
	POP 	H
	SUB 	L
	STA 	H0F03
	JZ 	H01B6
	LXI 	D,H0986
	CALL	H0BC7
	JMP 	H016E
H019E:	CPI 	20h		;skip spaces
	JZ 	H0185
	INX 	D
	SUI 	3Ah		;check for ':'
	JNZ	H0185
	STAX	D
	INX 	H
	XTHL	
	CALL	H092B
	POP 	H
	CALL	H0A1F
	JMP 	H05EA
H01B6:	CALL	H0BB0

	DB 'IMSAI FORMATTER-INITIALIZER VERS 2.05'
	DB 0Dh,0Ah,0Ah
	DB '$'
	CALL	H0BB0

	DB '  CAUTION: THIS PROGRAM ERASES'
	DB 0Dh,0Ah
	DB '  ALL INFORMATION ON DISKETTE'
	DB 0Dh,0Ah,0Ah
	DB '$'
	CALL	H0919
H0229:	CALL	H0BB0

	DB 'REMOVE SYSTEM DISK, TYPE CR $'
	CALL	H0B85
	JC 	H0229
	CALL	H0A0C
H0252:	CALL	H0BB0

	DB 'OK TO GO? (Y, N, V, OR *) $'
	CALL	H0B99
	JC 	H0252
	CPI 	2Ah
	JZ 	H028F
	ANI 	0DFh
	CPI 	4Eh
	JZ 	H07AC
	CPI 	59h
	JZ 	H05EA
	CPI 	56h
	JZ 	H05C0
	JMP 	H0252
H028F:	XRA 	A
	STA 	H0F04
	CALL	H0BB0

	DB 0Ah
	DB '**** VOLUME CONTROL BLOCK OPTIONS.'
	DB 0Dh,0Ah
	DB '     HIT CR TO DEFAULT.'
	DB 0Dh,0Ah,0Ah
	DB '$'
H02D6:	CALL	H0BB0

	DB 'USE OLD VCB FOR DEFAULT VALUES? (Y OR CR) $'
	CALL	H0B99
	JC 	H02D6
	CPI 	59h		;'Y'
	JNZ	H0386
	LDA 	H0F13
	MOV 	E,A
	MVI 	C,22h		;read vcb
	CALL	0005h
	PUSH	B
	LXI 	H,0014h
	DAD 	B
	LDA 	H0F01
	ORA 	A
	MOV 	A,M
	JNZ	H0329
	ORA 	A
	JNZ	H0332
H0329:	LXI 	H,H0EEA
	CALL	H03E3
	JZ 	H0357
H0332:	POP 	B
	CALL	H0BB0

	DB 'INCOMPATIBLE SECTOR LENGTH '
	DB 0Dh,0Ah
	DB '$'
	JMP 	H0386
H0357:	POP 	H
	LXI 	D,000Eh
	DAD 	D
	MOV 	A,M
	STA 	H0EE4
	INX 	H
	INX 	H
	MOV 	A,M
	STA 	H0EE6
	MVI 	E,10h
	DAD 	D
	MOV 	E,M
	INX 	H
	MOV 	D,M
	INX 	H
	MOV 	A,M
	STA 	H0EF8
	INX 	H
	INX 	H
	INX 	H
	MOV 	C,M
	XCHG	
H0376:	MOV 	A,H
	RAR 	
	MOV 	H,A
	MOV 	A,L
	RAR 	
	MOV 	L,A
	DCR 	C
	JNZ	H0376
	SHLD	H0EF6
	JMP 	H0405
H0386:	LDA 	H0F01
	ORA 	A
	JZ 	H0405
H038D:	CALL	H0BB0

	DB 'NUMBER OF BLOCKS PER SECTOR $'
	LXI 	H,H0EEA
	INR 	M
	CALL	H0A6A
	DCR 	M
	DCR 	A
	CALL	H03E3
	JZ 	H0405
	CALL	H0BB0

	DB '   MUST BE $'
	MOV 	A,B
	INR 	A
	CALL	H0B3A
	CALL	H0BB0

	DB ' OR $'
	MOV 	A,C
	INR 	A
	CALL	H0B3A
	CALL	H0BC4
	JMP 	H038D
H03E3:	CMP 	M
	RZ 	
	LHLD	H0F0E
	LXI 	D,0018h
	DAD 	D
	MOV 	B,M
	CMP 	B
	JZ 	H08FF
	LXI 	D,0023h
	DAD 	D
	MOV 	C,M
	CMP 	C
	RNZ	
	LXI 	D,0FFF4h
	DAD 	D
	XCHG	
	LXI 	H,H0EDE
	MVI 	C,23h
	JMP 	H0908
H0405:	CALL	H0BB0

	DB 'SECTOR SPACING$'
	LDA 	H0EE2
	MOV 	C,A
	INR 	C
	LXI 	H,H0EE4
	CALL	H0A6A
	CPI 	01h
	JC 	H042B
	CMP 	C
	JC 	H044A
H042B:	CALL	H0BB0

	DB '   MUST BE 1 TO $'
	MOV 	A,C
	DCR 	A
	CALL	H0B3A
	CALL	H0BC4
	JMP 	H0405
H044A:	MOV 	M,A
H044B:	CALL	H0BB0

	DB 'NUMBER OF DIRECTORY ENTRIES $'
	LXI 	H,H0EF8
	CALL	H0A6A
	CPI 	20h
	JC 	H048C
	CPI 	0F1h
	JNC	H048C
	MOV 	B,A
	ANI 	03h
	JNZ	H048C
	MOV 	A,B
	RAR 	
	RAR 	
	LXI 	H,H0EFA
	ANA 	M
	MOV 	A,B
	JZ 	H04BF
H048C:	CALL	H0BB0

	DB '   MUST BE 32-224, DIVISIBLE BY $'
	LDA 	H0EFA
	INR 	A
	RLC 	
	RLC 	
	CALL	H0B3A
	CALL	H0BC4
	JMP 	H044B
H04BF:	STA 	H0EF8
H04C2:	CALL	H0BB0

	DB 'NUMBER OF 80H BLOCKS FOR SYSTEM IMAGE $'
	LXI 	H,H0EE6
	CALL	H0A6A
	MOV 	B,A
	LDA 	H0EE2
	MOV 	C,A
	LHLD	H0EEA
	INR 	L
	MOV 	H,L
	XRA 	A
H04FD:	ADD 	C
	DCR 	L
	JNZ	H04FD
	MOV 	C,A
	LDA 	H0F00
	CMP 	B
	JZ 	H051B
	LDA 	H0EEC
H050D:	CMP 	B
	JNC	H051B
	ADD 	H
	CMP 	B
	JNC	H051B
	SUB 	H
	ADD 	C
	JMP 	H050D
H051B:	STA 	H0EE6
	JZ 	H053D
	CALL	H0BB0

	DB 'ROUNDING UP TO $'
	CALL	H0B3A
	CALL	H0BC4
	JMP 	H04C2
H053D:	CALL	H0637
H0540:	LDA 	H0EFB
	MOV 	D,A
	ADI 	2Eh
	STA 	H0561
	CALL	H0BB0

	DB 'DIRECTORY OFFSET (IN '
H0561:	DB '1K BYTE UNITS) $'
	LXI 	H,H0EF6
	CALL	H0A6A
	MOV 	B,A
	LDA 	H0EF8
	INR 	D
	INR 	D
H057D:	ORA 	A
	RAR 	
	DCR 	D
	JNZ	H057D
	LHLD	H0EFC
H0586:	DCX 	H
	DCR 	A
	JNZ	H0586
	SUB 	H
	JNZ	H05B7
	MOV 	A,L
	CMP 	B
	JNC	H05B7
	CALL	H0BB0

	DB '   MUST BE LESS THAN $'
	INR 	A
	CALL	H0B3A
	CALL	H0BC4
	JMP 	H0540
H05B7:	MOV 	L,B
	MVI 	H,00h
	SHLD	H0EF6
	JMP 	H0252
H05C0:	STA 	H0F04
	CALL	H0BB0

	DB 'WRITING VOLUME CONTROL BLOCK ONLY'
	DB 0Dh,0Ah
	DB '$'
H05EA:	LDA 	H0EFB
	LHLD	H0EF6
H05F0:	DAD 	H
	DCR 	A
	JNZ	H05F0
	SHLD	H0EF6
	MVI 	A,1Dh
	CALL	H086C
	MVI 	A,LOW H0F07
	CALL	H086C
	MVI 	A,HIGH H0F07
	CALL	H086C
H0607:	LXI 	H,H0F07
	MOV 	A,M
	ANI 	0Fh
	ORI 	30h
	MOV 	M,A
	INX 	H
	INX 	H
	XRA 	A
	MOV 	M,A
	INX 	H
	MOV 	M,A
	LDA 	H0F04
	ORA 	A
	JNZ	H0631
H061D:	CALL	H07DC
	LXI 	H,H0F09
	LDA 	H0EEB
	MOV 	M,A
	INX 	H
	INR 	M
	MOV 	A,M
	LXI 	H,H0EE0
	CMP 	M
	JC 	H061D
H0631:	CALL	H0637
	JMP 	H0657
H0637:	LHLD	H0EE6
	XCHG	
	LHLD	H0EFE
	MOV 	A,L
	SUB 	E
	MOV 	L,A
	MOV 	A,H
	SBB 	D
	MOV 	H,A
	LDA 	H0EFB
	MOV 	C,A
H0648:	ORA 	A
	MOV 	A,H
	RAR 	
	MOV 	H,A
	MOV 	A,L
	RAR 	
	MOV 	L,A
	DCR 	C
	JNZ	H0648
	SHLD	H0EFC
	RET 	
H0657:	LXI 	H,H0EE2
	MOV 	E,M
	MOV 	D,E
	XRA 	A
	MOV 	C,A
	INX 	H
	INX 	H
H0660:	ADD 	M
	INR 	C
	CMP 	E
	JC 	H066A
	SUB 	E
	JZ 	H066E
H066A:	DCR 	D
	JNZ	H0660
H066E:	INX 	H
	MOV 	M,C
H0670:	LHLD	0000h		;self modified to get serial# into HL
	SHLD	H0EF4
	XRA 	A
	STA 	H0ED6
	LXI 	H,H0EFE
	MVI 	E,28h
	MOV 	A,E
H0680:	DCX 	H
	ADD 	E
	RLC 	
	XRA 	M
	DCR 	E
	JNZ	H0680
	MOV 	M,A
	LXI 	H,H0F07
	MOV 	A,M
	ANI 	0Fh
	ORI 	20h
	MOV 	M,A
	INX 	H
	INX 	H
	MVI 	M,00h
	INX 	H
	MVI 	M,00h
	INX 	H
	MVI 	M,01h
	LXI 	H,H0F7D
	SHLD	H0F0C
	CALL	H07DC
	LXI 	H,0FFFFh	;vcb bitmap?
	SHLD	H0F7E
	LXI 	H,H0ED2
	LXI 	D,H0FC4
	MVI 	C,2Ch
H06B3:	MOV 	A,M
	STAX	D
	INX 	H
	INX 	D
	DCR 	C
	JNZ	H06B3
	LXI 	H,H0F07
	MOV 	A,M
	SUI 	10h
	MOV 	M,A
	CALL	H07DC
	LDA 	H0F04
	ORA 	A
	JNZ	H06F9
	LDA 	H0F10
	CPI 	25h
	JNC	H06F9
	LXI 	H,0080h
	SHLD	H0F0C
	MVI 	C,80h
H06DC:	MVI 	M,0E5h		;erase pattern
	INX 	H
	DCR 	C
	JNZ	H06DC
	MVI 	A,02h
	STA 	H0F0A
	MVI 	A,01h
H06EA:	STA 	H0F0B
	CALL	H07DC
	LDA 	H0F0B
	INR 	A
	CPI 	1Bh		;26 sectors
	JM 	H06EA		;loop until track erased
H06F9:	LDA 	H0F03
	ORA 	A
	JNZ	H0788
	CALL	H0BB0

	DB "ENTER 'R' TO REPEAT, OTHERWISE"
	DB 0Dh,0Ah
H0723:	DB '   REPLACE SYSTEM DISK, THEN HIT CR $'
	CALL	H0B99
	JC 	H06F9
	ORA 	A
	JZ 	H0788
	CPI 	52h
	JNZ	H06F9
	CALL	H0BB0

	DB 'INSERT ANOTHER DISKETTE IN DRIVE '
H077B:	DB 00h,00h,00h,00h
	DB 0Dh,0Ah
	DB '$'
	CALL	H0A0C
	JMP 	H0607
H0788:	MVI 	A,00h
H078A:	PUSH	PSW
	CALL	H09E5		;check imdos serial# and version
	JC 	H079B		;if wrong version
	MVI 	C,1Dh
	LDA 	H0F10
	MOV 	E,A
	ORA 	A
	CNZ	0005h
H079B:	POP 	PSW
	LHLD	H0F05
	SPHL	
	RET 	
H07A1:	LXI 	D,H07AF
	CALL	H0BC7
	MVI 	A,0FFh
	JMP 	H078A
H07AC:	CALL	H0BB0

H07AF:	DB '   FORMAT ABORTED$'
H07C1:	CALL	H0BC4
H07C4:	LXI 	D,H0723
	CALL	H0BC7
	CALL	H0B85
	JC 	H07C4
	JMP 	H078A
H07D3:	CALL	H0BB0
	MOV 	E,M
	MOV 	B,E
	INR 	H
	JMP 	H07C1
H07DC:	PUSH	B
	PUSH	D
	PUSH	H
H07DF:	LXI 	B,H0A05
H07E2:	LXI 	H,H0F08
	MVI 	M,00h
	MVI 	A,0Dh
	DI  	
	CALL	H086C
	EI  	
	XRA 	A
H07EF:	ADD 	M
	JZ 	H07EF
	CPI 	0A1h
	JZ 	H082E
	CPI 	01h
	JZ 	H082A
	DCR 	C
	JNZ	H07E2
	CALL	H0BB0

	DB '   DISK ERROR, CODE $'
	CALL	H0BFF
	CALL	H0BB0

	DB ' TRACK $'
	JMP 	H07AC
H082A:	POP 	H
	POP 	D
	POP 	B
	RET 	
H082E:	LXI 	D,1770h		;delay
H0831:	DCX 	D
	MOV 	A,D
	ORA 	E
	JNZ	H0831
	DCR 	B
	JNZ	H07E2
	CALL	H0BB0

	DB '   DRIVE '
H0847:	DB 00h,00h,00h
	DB ' NOT READY'
	DB 0Dh,0Ah
	DB '$'
	MVI 	C,0Bh
	CALL	0005h
	JZ 	H07DF
	MVI 	C,01h
	CALL	0005h
	CPI 	03h
	JZ 	0000h
	JMP 	H07DF
H086C:	JMP 	H086F		;self modified to JMP E006 for DIO/PDS
H086F:	OUT 	0FDh
	RET 	
H0872:	LDA 	H0F10		;=22h for B:
	MOV 	C,A
	SUI 	21h
	ANI 	03h
	MOV 	B,A		;=1 for B:
	MOV 	A,C		;=22h for B:
	CPI 	25h		;E: or greater? 
	JC 	H08C4		;taken if D: or less
	LDA 	0E7FFh		;DIO/PDS controller rom ?
	SUI 	30h
	STA 	H0F01
	MOV 	C,A
	LDA 	H0F02
	SUI 	04h
	JP 	H0897
H0892:	ADI 	02h
	JM 	H0892
H0897:	MOV 	L,A
	MVI 	H,00h
	DAD 	H
	PUSH	H
	DAD 	H
	DAD 	H
	DAD 	H
	MOV 	D,H
	MOV 	E,L
	DAD 	H
	DAD 	H
	DAD 	D
	POP 	D
	DAD 	D
	LXI 	D,H0C13
	DAD 	D
	XCHG	
	LXI 	H,0E009h	;for DIO/PDS
	CPI 	02h
	JNC	H08C1
	LXI 	H,0E006h	;for DIO/PDS
	DCR 	C
	JP 	H08C1
	RRC 	
	JNC	H08C1
	LXI 	D,H0EA3
H08C1:	JMP 	H08EC
H08C4:	XRA 	A
	STA 	H0F01
	MVI 	A,1Dh
	OUT 	0FDh
	LXI 	H,H0911
	MOV 	A,L
	OUT 	0FDh
	MOV 	A,H
	OUT 	0FDh
	INX 	H
	MVI 	M,01h
	MVI 	A,0Dh
	OUT 	0FDh
	MVI 	C,0FFh
H08DE:	DCR 	C
	JNZ	H08DE
	MOV 	A,M		;=2
	DCR 	A
	STC 	
	RZ			;not taken 	
	LXI 	D,H0C13
	LXI 	H,H086F		;for FIF
H08EC:	SHLD	H086C+1
	XCHG	
	SHLD	H0F0E
	MVI 	A,80h
H08F5:	RLC 	
	DCR 	B
	JP 	H08F5
	STA 	H0F07
	ORA 	A
	RET 	
H08FF:	LHLD	H0F0E
	XCHG	
	LXI 	H,H0ED2
	MVI 	C,2Fh
H0908:	LDAX	D
	MOV 	M,A
	INX 	D
	INX 	H
	DCR 	C
	JNZ	H0908
	RET 	

;	FIF controller microcode
H0911:	DB 30h,01h,01h,4Eh,00h

H0916:	CALL	H0BC7
H0919:	CALL	H0BB0

	DB 'DRIVE NAME $'
	CALL	H0B5F
H092B:	LXI 	D,H0847		;place drive letter in this message
	CALL	H09CF
	LXI 	D,H077B		;place drive letter in this message
	CALL	H09CF
	SHLD	H0F11		;index
	LXI 	D,H0F11		;[DE] points to ascii drive letter
	LXI 	B,019Fh		;bdos function #31
	CALL	0005h		;parse drive letter to physical
	LXI 	D,H0986		;possible error message 
	JM 	H0916		;taken to re-enter drive letter
	MOV 	E,A		;A = 2 if B:
	LXI 	B,019Eh		;bdos function #30
	CALL	0005h
	LXI 	D,H09A5		;possible error message
	JM 	H0916		;if disk not assigned
	STA 	H0F10		;A = 22h for drive B and valid device
	MOV 	E,A
	LXI 	B,01A6h		;possible set dma call for DIO/PDS ?
	MVI 	A,24h		;n4 = D:
	CMP 	E		;greater than D:?
	CC 	0005h		;called for drive E: or greater which may be DIO/PDS controller
	STA 	H0F02
	CPI 	0FAh		;if 'NO SUCH DRIVE'
	LXI 	D,H09BC
	JZ 	H0916
	LHLD	H0F11
	CALL	H0B88		;check for command tail following n:
	LXI 	D,H0986
	JC 	H0916		;syntax error
	CALL	H0872
	LXI 	D,H09BC
	JNC	H08FF
	JMP 	H0916

H0986:	DB '   DISK NAME, COLON, CR ONLY'
H09A2:	DB 0Dh,0Ah
	DB '$'
H09A5:	DB '   DISK NOT ASSIGNED'
	DB 0Dh,0Ah
	DB '$'
H09BC:	DB '   NO SUCH DRIVE'
	DB 0Dh,0Ah
	DB '$'

;place drive 'n:' from [HL] to [DE]

H09CF:	MVI 	C,03h
	PUSH	H
H09D2:	MOV 	A,M
	ORA 	A
	JNZ	H09D9
	MVI 	A,20h
H09D9:	STAX	D
	INX 	H
	INX 	D
	DCR 	C
	JNZ	H09D2
	MVI 	A,20h
	STAX	D
	POP 	H
	RET

;get imdos serial# and check version
 	
H09E5:	PUSH	H
	PUSH	B
	MOV 	B,A

;modification to use internal serial#

	LXI	H,SERIAL	;was LHLD BDOS+1

	DCX 	H
	DCX 	H
	SHLD	H0670+1		;serial#
	DCX 	H
	MOV 	A,M		;check imdos version
	SUI 	05h
	CPI 	05h
	JNC	H09FF
	DCX 	H
	MOV 	A,M
	SUI 	02h
	CPI 	01h
H09FF:	CMC 	
	MOV 	A,B
	POP 	B
	POP 	H
	RET 	
H0A04:	ADD 	L
H0A05:	MOV 	L,A
	MVI 	A,00h
	ADC 	H
	MOV 	H,A
	MOV 	A,M
	RET 	
H0A0C:	CALL	H0BB0

	DB 'VOLUME NAME $'
	CALL	H0B5F
H0A1F:	MVI 	C,08h
	LXI 	D,H0ED7
H0A24:	MOV 	A,M
	ORA 	A
	JZ 	H0A65
	DCR 	C
	JZ 	H0A33
	STAX	D
	INX 	D
	INX 	H
	JMP 	H0A24
H0A33:	CALL	H0BB0

	DB '   MAXIMUM 7 CHARACTERS, MAY BE BLANK'
	DB 0Dh,0Ah
	DB '$'
	JMP 	H0A0C
H0A61:	MVI 	A,20h
	STAX	D
	INX 	D
H0A65:	DCR 	C
	JNZ	H0A61
	RET 	
H0A6A:	PUSH	B
	PUSH	D
	PUSH	H
	CALL	H0BB0

	DB ' (DEFAULT $'
	POP 	H
	MOV 	A,M
	PUSH	H
	CALL	H0B3A
	CALL	H0BB0

	DB ') $'
H0A87:	CALL	H0ABD
	POP 	H
	MOV 	A,M
	JC 	H0ABA
	MOV 	A,D
	ORA 	A
	JZ 	H0AB9
	PUSH	H
	CALL	H0BB0

	DB '   NUMBER TOO LARGE, REENTER $'
	JMP 	H0A87
H0AB9:	MOV 	A,E
H0ABA:	POP 	D
	POP 	B
	RET 	
H0ABD:	CALL	H0B5F
	ORA 	A
	STC 	
	RZ 	
	CALL	H0B12
	JC 	H0ACE
	CALL	H0B7D
	ORA 	A
	RZ 	
H0ACE:	CALL	H0BB0

	DB '   MUST BE DECIMAL NUMBER,'
	DB 0Dh,0Ah
	DB '       OR CR TO DEFAULT. REENTER $'
	JMP 	H0ABD
H0B12:	LXI 	D,0000h
H0B15:	MOV 	A,M
	CPI 	30h
	JM 	H0B36
	CPI 	3Ah
	JP 	H0B36
	INX 	H
	PUSH	H
	MOV 	H,D
	MOV 	L,E
	DAD 	D
	DAD 	H
	DAD 	D
	DAD 	H
	JC 	H0B38
	SUI 	30h
	MOV 	E,A
	MVI 	D,00h
	DAD 	D
	XCHG	
	POP 	H
	JMP 	H0B15
H0B36:	ORA 	A
	RET 	
H0B38:	POP 	H
	RET 	
H0B3A:	MVI 	H,00h
	MOV 	L,A
H0B3D:	PUSH	B
	PUSH	D
	PUSH	H
	LXI 	B,0FFF6h
	LXI 	D,0FFFFh
H0B46:	DAD 	B
	INX 	D
	JC 	H0B46
	LXI 	B,000Ah
	DAD 	B
	XCHG	
	MOV 	A,H
	ORA 	L
	CNZ	H0B3D
	MOV 	A,E
	ADI 	30h
	CALL	H0BF0
	POP 	H
	POP 	D
	POP 	B
	RET 	
H0B5F:	PUSH	B
	PUSH	D
	LXI 	D,H0F14
	MVI 	A,14h
	STAX	D
	PUSH	D
	MVI 	C,0Ah
	CALL	0005h
	CALL	H0BC4
	POP 	H
	INX 	H
	MOV 	A,M
	INX 	H
	PUSH	H
	CALL	H0A04
	MVI 	M,00h
	POP 	H
	POP 	D
	POP 	B
H0B7D:	MOV 	A,M
	CPI 	20h
	RNZ	
	INX 	H
	JMP 	H0B7D
H0B85:	CALL	H0B5F
H0B88:	CALL	H0B7D
	ORA 	A
	RZ 	
	CALL	H0BB0

	DB '   ?'
	DB 0Dh,0Ah
	DB '$'
	STC 	
	RET 	
H0B99:	CALL	H0B5F
	MOV 	B,A
	ORA 	A
	RZ 	
	INX 	H
	CALL	H0B88
	MOV 	A,B
	PUSH	PSW
	CPI 	60h
	JC 	H0BAD
	SUI 	20h
	MOV 	B,A
H0BAD:	POP 	PSW
	MOV 	A,B
	RET 	
H0BB0:	XTHL	
	PUSH	PSW
	MOV 	A,M
H0BB3:	CALL	H0BF0
	INX 	H
	MOV 	A,M
	CPI 	24h
	JNZ	H0BB3
	INX 	H
	POP 	PSW
	XTHL	
	RET 	
	CALL	H0BC7
H0BC4:	LXI 	D,H09A2
H0BC7:	PUSH	PSW
	PUSH	B
	MVI 	C,09h
	CALL	0005h
	POP 	B
	POP 	PSW
	RET 	
H0BD1:	CPI 	61h
	RC 	
	CPI 	7Bh
	RNC	
	ANI 	0DFh
	RET 	
	PUSH	B
	PUSH	D
	MVI 	C,01h
	CALL	0005h
	CPI 	03h
	JZ 	H07D3
	POP 	D
	POP 	B
	CALL	H0BD1
	CPI 	0Dh
	RNZ	
	MVI 	A,0Ah
H0BF0:	PUSH	H
	PUSH	PSW
	PUSH	B
	PUSH	D
	MOV 	E,A
	MVI 	C,02h
	CALL	0005h
	POP 	D
	POP 	B
	POP 	PSW
	POP 	H
	RET 	
H0BFF:	PUSH	PSW
	RAR 	
	RAR 	
	RAR 	
	RAR 	
	CALL	H0C08
	POP 	PSW
H0C08:	ANI 	0Fh
	ADI 	90h
	DAA 	
	ACI 	40h
	DAA 	
	JMP 	H0BF0

H0C13:	DB 04h,0C3h,06h,0E0h,09h
	DB 'UNNAMED'
	DB 01h,01h
	DB 'M'
	DB 00h,1Ah,00h,06h,0Dh
	DB '4'
	DB 00h,80h,00h,00h,00h,1Ah,05h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h
	DB '@'
	DB 00h,07h,03h,0F3h,00h,0D2h,07h,01h
	DB 02h,01h
	DB 'M'
	DB 00h,0Fh,00h,04h,0FFh
	DB '8'
	DB 00h,00h,01h,01h
	DB '@'
	DB 1Ah,04h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,1Eh,00h
	DB '@'
	DB 00h,0Fh,04h,8Ah,00h,02h,09h,1Ah

	DB 04h,0C3h,06h,0E0h,00h
	DB 'UNNAMED'
	DB 04h,01h
	DB 'M'
	DB 00h,1Ah,00h,05h,0FFh
	DB 'N'
	DB 00h,00h,01h,01h
	DB '@'
	DB 1Ah,03h,00h,00h,00h,00h,00h,00h
	DB 00h,00h
	DB '4'
	DB 00h,80h,00h,0Fh,04h,0E7h,00h,8Ah
	DB 0Fh,1Ah,06h,01h
	DB 'M'
	DB 00h,08h,00h,03h,0FFh
	DB 'Z'
	DB 00h,00h,04h,07h,0C0h,1Ah,03h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
	DB '@'
	DB 00h,80h,00h,0Fh
	DB 04h,','
	DB 01h,1Ah,13h,1Ah

	DB 08h,0C3h,09h,0E0h
	DB 00h
	DB 'UNNAMED'
	DB 01h,01h
	DB '#'
	DB 00h,12h,00h,03h,0FFh
	DB '6'
	DB 00h,80h,00h,00h,00h,12h,05h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,12h
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'G'
	DB 00h
	DB 'v'
	DB 02h,01h,02h,01h
	DB '#'
	DB 00h,09h,00h,04h,0FFh
	DB '6'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,04h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,12h,00h
	DB '@'
	DB 00h,07h,03h
	DB 'E'
	DB 00h
	DB 'v'
	DB 02h,12h

	DB 08h,0C3h,09h,0E0h,00h
	DB 'UNNAMED'
	DB 04h,01h
	DB '#'
	DB 00h,11h,00h,05h,0FFh
	DB 'V'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,03h,00h,00h,00h,00h,00h,00h
	DB 00h,00h
	DB '"'
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'G'
	DB 00h,96h,04h,12h,06h,01h
	DB '#'
	DB 00h,05h,00h,03h,0FFh
	DB ':'
	DB 00h,00h,04h,07h,0C0h,12h,03h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
	DB '('
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'E'
	DB 00h
	DB 'b'
	DB 05h,12h

	DB 08h,0C3h,09h,0E0h,00h
	DB 'UNNAMED'
	DB 01h,01h
	DB '('
	DB 00h,12h,00h,03h,0FFh
	DB '6'
	DB 00h,80h,00h,00h,00h,12h,05h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,12h
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'G'
	DB 00h,0D0h,02h,01h,02h,01h
	DB '('
	DB 00h,09h,00h,04h,0FFh
	DB '6'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,04h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,12h,00h
	DB '@'
	DB 00h,07h,03h
	DB 'E'
	DB 00h,0D0h,02h,12h

	DB 08h,0C3h,09h,0E0h
	DB 00h
	DB 'UNNAMED'
	DB 04h,01h
	DB '('
	DB 00h,11h,00h,05h,0FFh
	DB 'V'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,03h,00h,00h,00h,00h,00h,00h
	DB 00h,00h
	DB '"'
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'G'
	DB 00h
	DB '@'
	DB 05h,12h,06h,01h
	DB '('
	DB 00h,05h,00h,03h,0FFh
	DB ':'
	DB 00h,00h,04h,07h,0C0h,12h,03h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
	DB '('
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'E'
	DB 00h
	DB '*'
	DB 06h,12h

	DB 08h,0C3h,09h,0E0h,00h
	DB 'UNNAMED'
	DB 01h,01h
	DB 'M'
	DB 00h,12h,00h,03h,0FFh
	DB '6'
	DB 00h,80h,00h,00h,00h,12h,05h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
	DB '$'
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'G'
	DB 00h
	DB 'j'
	DB 05h,01h,02h,01h
	DB 'M'
	DB 00h,09h,00h,04h,0FFh
	DB '6'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,04h,00h,00h,00h,00h,00h,00h
	DB 00h,00h
	DB '$'
	DB 00h
	DB '@'
	DB 00h,07h,03h
	DB 'E'
	DB 00h
	DB 'j'
	DB 05h,12h

	DB 08h,0C3h,09h,0E0h,00h
	DB 'UNNAMED'
	DB 04h,01h
	DB 'M'
	DB 00h,11h,00h,05h,0FFh
	DB 'V'
	DB 00h,00h,01h,01h
	DB '@'
	DB 12h,03h,00h,00h,00h,00h,00h,00h
	DB 00h,00h
	DB '"'
	DB 00h
	DB '@'
	DB 00h,0Fh,04h
	DB 'G'
	DB 00h
	DB '*'
	DB 0Ah,12h,06h,01h
	DB 'M'
	DB 00h,05h,00h,03h,0FFh
	DB ':'
	DB 00h,00h,04h,07h,0C0h,12h,03h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
	DB '('
	DB 00h
	DB '@'
	DB 00h,0Fh,04h
	DB 'E'
	DB 00h,0F2h,0Bh,12h

H0EA3:	DB 04h,0C3h,06h,0E0h,00h
	DB 'UNNAMED'
	DB 01h,01h,4Dh,00h,3Ah,00h,05h,0FFh
	DB 3Ah,00h,80h,00h,00h,00h,3Ah,03h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 40h,00h,80h,00h,0Fh,04h,13h,01h
	DB 72h,11h,01h

;new vcb

H0ED2:	DB 00h,40h,00h,07h		;header 04 C3 06 E0
H0ED6:	DB 03h				;checksum
H0ED7:	DB 47h,00h,40h,05h,12h,06h,01h	;name
H0EDE:	DB 28h,00h
H0EE0:	DB 05h,00h
H0EE2:	DB 03h,0FFh
H0EE4:	DB 3Ah				;skew
	DB 00h
H0EE6:	DB 00h				;# of 80h blocks for system image
	DB 04h,07h,0C0h
H0EEA:	DB 12h
H0EEB:	DB 03h
H0EEC:	DB 00h,00h,00h,00h,00h,00h,00h,00h
H0EF4:	DB 28h,00h
H0EF6:	DB 40h				;directory offset
	DB 00h
H0EF8:	DB 07h				;# of directory entries
	DB 03h
H0EFA:	DB 45h
H0EFB:	DB 00h
H0EFC:	DB 2Ah,06h
H0EFE:	DB 12h,08h
H0F00:	DB 0C3h
H0F01:	DB 09h
H0F02:	DB 0E0h		;set to 24h for valid floppy device
H0F03:	DB 00h		;# of chars in command tail
H0F04:	DB 00h
H0F05:	DW 0		;stack pointer
H0F07:	DB 00h
H0F08:	DB 00h
H0F09:	DB 00h
H0F0A:	DB 00h
H0F0B:	DB 00h
H0F0C:	DB 00h,00h
H0F0E:	DW 0		;holds H0C13 table index
H0F10:	DB 00h		;set = 22h for physical drive (B=2) and density?
H0F11:	DW 0		;index to command tail
H0F13:	DB 00h
H0F14:	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h,00h
	DB 00h,00h,00h,00h,00h,00h,00h
H0F7B:			;top of stack
	DB 00h,00h

;	command tail

H0F7D:	DB 00h		;drive letter to format
H0F7E:	DB 00h,00h	; ':' then 0 for drive set
	
;H0F7D reused as 80h boot sector buffer

H0FC4	EQU	H0F7D+47h	;vcb

	END
