MULCOP ;
 ;
 ;
 ;
 ;		* * * * * * * * * * * * *
 ;		*  Program by Kim Watt  *
 ;		* Breeze Computing Inc. *
 ;		*     P.O. Box  1013    *
 ;		* Berkley, Mich.  48072 *
 ;		*    (313)  288-9422    *
 ;		* * * * * * * * * * * * *
 ;
 ;
 ;
 ;
 	ORG	6000H
 VIDEO	EQU	3C00H
 STRING	EQU	5F00H
 SDIR	EQU	4300H
 DDIR	EQU	4D00H
 STACK	EQU	5FF0H
 BUFF1	EQU	4200H
 BUFF2	EQU	5700H
 CURSOR	EQU	4020H
 ROMDIS	EQU	33H
 ROMKEY	EQU	2BH
 WAIT	EQU	60H
 STAT	EQU	37ECH
 SEEK	EQU	1BH
 RD	EQU	88H
 WT	EQU	0A9H
 RES	EQU	0BH
 DAT	EQU	37EFH
 TRREG	EQU	37EEH
 DRV	EQU	37E1H
 DISPLY	EX	(SP),HL
 	PUSH	DE
 	EX	DE,HL
 	PUSH	BC
 	PUSH	AF
 DISLP	LD	A,(DE)
 	INC	DE
 	OR	A
 	JR	Z,DISDN
 	CP	20H
 	JR	C,DISCTL
 	LD	HL,(CURSOR)
 	LD	(HL),A
 	CP	(HL)
 	JR	Z,DISOK
 	SUB	20H
 	LD	(HL),A
 DISOK	INC	HL
 	LD	(CURSOR),HL
 	JR	DISLP
 DISDN	EX	DE,HL
 	POP	AF
 	POP	BC
 	POP	DE
 	EX	(SP),HL
 	RET
 DISCTL	PUSH	DE
 	PUSH	IY
 	CALL	ROMDIS
 	POP	IY
 	POP	DE
 	JR	DISLP
 SELECT	PUSH	AF
 	DEFB	3EH
 DRIVE	DEFB	1
 	LD	(DRV),A
 	POP	AF
 	RET
 RESTOR	PUSH	AF
 	PUSH	BC
 	CALL	SELECT
 	LD	BC,0
 	CALL	WAIT
 	LD	A,RES
 	LD	(STAT),A
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 RESWT	CALL	SELECT
 	LD	A,(STAT)
 	RRCA
 	JR	C,RESWT
 	POP	BC
 	POP	AF
 	RET
 READ	PUSH	BC
 	CALL	READ1
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 READ1	LD	(TRREG),DE
 	CALL	SELECT
 	PUSH	AF
 	POP	AF
 	LD	HL,STAT
 	LD	(HL),SEEK
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 READ2	CALL	SELECT
 	LD	A,(HL)
 	RRCA
 	JR	C,READ2
 	LD	(HL),RD
 	PUSH	DE
 	LD	DE,DAT
 	PUSH	BC
 	POP	BC
 	PUSH	BC
 	POP	BC
 	JR	READ4
 READ3	RRCA
 	JR	NC,READ5
 READ4	LD	A,(HL)
 	BIT	1,A
 	JR	Z,READ3
 	LD	A,(DE)
 	LD	(BC),A
 	INC	BC
 	JR	READ4
 READ5	LD	A,(HL)
 	AND	1CH
 	POP	DE
 	RET	Z
 	LD	(HL),0D0H
 	RET
 WRITE	PUSH	BC
 	CALL	WRITE1
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 WRITE1	LD	(TRREG),DE
 	PUSH	DE
 	CALL	SELECT
 	LD	HL,STAT
 	LD	(HL),SEEK
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 WRITE2	CALL	SELECT
 	LD	A,(HL)
 	RRCA
 	JR	C,WRITE2
 	DEFB	36H
 WRTYPE	DEFB	WT
 	LD	DE,DAT
 	PUSH	BC
 	POP	BC
 	PUSH	BC
 	POP	BC
 	NOP
 	JR	WRITE4
 WRITE3	RRCA
 	JR	NC,WRITE5
 WRITE4	LD	A,(HL)
 	BIT	1,A
 	JR	Z,WRITE3
 	LD	A,(BC)
 	LD	(DE),A
 	INC	BC
 	JR	WRITE4
 WRITE5	LD	A,(HL)
 	AND	1CH
 	POP	DE
 	RET	Z
 	LD	(HL),0D0H
 	RET
 MREAD	PUSH	HL
 	CALL	READ
 	POP	HL
 	JP	NZ,RERROR
 	DEC	L
 	RET	Z
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,MREAD
 	LD	E,A
 	INC	D
 	JR	MREAD
 MWRITE	PUSH	HL
 	CALL	WRITE
 	POP	HL
 	JP	NZ,WERROR
 	DEC	L
 	RET	Z
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,MWRITE
 	LD	E,A
 	INC	D
 	JR	MWRITE
 RERROR	CALL	DISPLY
 	DEFW	0D0DH
 	DEFM	'Error detected during READ operation !'
 	DEFB	0
 	BIT	7,A
 	JR	Z,ERR1
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Drive NOT READY for read operation !'
 	DEFB	0
 ERR1	BIT	6,A
 	JR	Z,ERR2
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Address mark bit 6 set.'
 	DEFB	0
 ERR2	BIT	5,A
 	JR	Z,ERR3
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Address mark bit 5 set.'
 	DEFB	0
 ERR3	BIT	4,A
 	JR	Z,ERR4
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'SECTOR NOT FOUND during read !'
 	DEFB	0
 ERR4	LD	E,A
 	AND	18H
 	LD	A,E
 	JR	Z,ERR5
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Error in ID field !'
 	DEFB	0
 	JR	ERR6
 ERR5	BIT	3,A
 	JR	Z,ERR6
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Error in DATA field !'
 	DEFB	0
 ERR6	BIT	2,A
 	JP	Z,ERDONE
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'DATA LOST during read operation !'
 	DEFB	0
 	JP	ERDONE
 WERROR	CALL	DISPLY
 	DEFW	0D0DH
 	DEFM	'Error detected during WRITE operation !'
 	DEFB	0
 	BIT	7,A
 	JR	Z,ERRA
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Drive NOT READY for write operation !'
 	DEFB	0
 ERRA	BIT	6,A
 	JR	Z,ERRB
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Diskette is WRITE PROTECTED !'
 	DEFB	0
 ERRB	BIT	5,A
 	JR	Z,ERRC
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Write fault from DRIVE !'
 	DEFB	0
 ERRC	BIT	4,A
 	JR	Z,ERRD
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Sector NOT FOUND during write !'
 	DEFB	0
 ERRD	LD	E,A
 	AND	18H
 	LD	A,E
 	JR	Z,ERRE
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Error in ID field !'
 	DEFB	0
 	JR	ERRF
 ERRE	BIT	3,A
 	JR	Z,ERRF
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Error in DATA field !'
 	DEFB	0
 ERRF	BIT	2,A
 	JP	Z,ERDONE
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'DATA LOST during write !'
 	DEFB	0
 ERDONE	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'MULCOPY cannot continue because of detected ERROR !'
 	DEFB	0DH
 	DEFM	'Press <ENTER> to restart program ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	JP	START
 STATCK	LD	(FLAG3),A
 	CALL	RESTOR
 	CALL	SELECT
 	LD	A,(STAT)
 	LD	HL,ERMSG5
 	BIT	7,A
 	JP	NZ,DERROR
 	LD	HL,ERMSG6
 	BIT	2,A
 	JP	Z,DERROR
 	LD	HL,ERMSG7
 	LD	B,A
 	LD	A,(FLAG3)
 	OR	A
 	LD	A,B
 	JR	Z,PAST4
 	BIT	6,A
 	JP	NZ,DERROR
 PAST4	LD	BC,00CDH
 	LD	HL,ERMSG8
 TST1	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	LD	A,(STAT)
 	AND	2
 	JR	NZ,TST1
 	LD	BC,199DH
 	LD	HL,ERMSG9
 TST2	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	LD	A,(STAT)
 	AND	2
 	JR	Z,TST2
 	LD	DE,0
 	LD	BC,00BAH
 	LD	HL,ERMSG0
 TST3	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	INC	DE
 	LD	A,(STAT)
 	AND	2
 	JR	NZ,TST3
 	LD	BC,1720H
 	LD	HL,ERMSG9
 TST4	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,DERROR
 	INC	DE
 	LD	A,(STAT)
 	AND	2
 	JR	Z,TST4
 	LD	HL,0EACBH
 	ADD	HL,DE
 	LD	HL,ERMSG1
 	JP	NC,DERROR
 	RET
 ERMSG5	DEFB	0DH
 	DEFM	'Drive NOT READY !'
 	DEFB	0
 	JP	ERDONE
 ERMSG6	DEFB	0DH
 	DEFM	'Drive NOT IN SYSTEM !'
 	DEFB	0
 	JP	ERDONE
 ERMSG7	DEFB	0DH
 	DEFM	'Diskette WRITE PROTECTED !'
 	DEFB	0
 	JP	ERDONE
 ERMSG8	DEFB	0DH
 	DEFM	'No SYSTEM in DRIVE !'
 	DEFB	0
 	JP	ERDONE
 ERMSG9	DEFB	0DH
 	DEFM	'DOOR NOT CLOSED on drive !'
 	DEFB	0
 	JP	ERDONE
 ERMSG0	DEFB	0DH
 	DEFM	'No DISKETTE in drive !'
 	DEFB	0
 	JP	ERDONE
 ERMSG1	DEFB	0DH
 	DEFM	'Diskette is HARD SECTORED !'
 	DEFB	0
 	JP	ERDONE
 DERROR	PUSH	HL
 	JP	DISPLY
 CODE	EX	DE,HL
 	LD	A,B
 	ADD	A,E
 	LD	L,A
 	LD	A,D
 	ADC	A,0
 	LD	H,A
 	LD	A,8
 	SUB	B
 	LD	B,A
 CODLP1	LD	(HL),20H
 	INC	HL
 	DJNZ	CODLP1
 	LD	HL,0FFFFH
 	LD	B,8
 	LD	A,E
 	ADD	A,7
 	LD	E,A
 	JR	NC,CODLP2
 	INC	D
 CODLP2	LD	A,(DE)
 	PUSH	DE
 	LD	D,A
 	LD	E,H
 	LD	A,L
 	AND	7
 	RRCA
 	RRCA
 	RRCA
 	XOR	L
 	LD	L,A
 	LD	H,0
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,HL
 	ADD	HL,HL
 	XOR	H
 	XOR	D
 	LD	D,A
 	LD	A,L
 	ADD	HL,HL
 	XOR	H
 	XOR	E
 	LD	E,A
 	EX	DE,HL
 	POP	DE
 	DEC	DE
 	DJNZ	CODLP2
 	RET
 REQLEN	DEFB	0
 LENGTH	DEFB	0
 CHAR	DEFB	0
 NEWST	XOR	A
 	LD	(LENGTH),A
 	LD	HL,(CURSOR)
 	LD	A,(REQLEN)
 	LD	B,A
 	JR	GET15
 GETSTR	LD	HL,(CURSOR)
 	LD	A,B
 	LD	(REQLEN),A
 GET15	LD	(HL),20H
 	INC	HL
 	DJNZ	GET15
 	LD	(HL),20H
 	XOR	A
 	LD	(LENGTH),A
 	LD	HL,STRING
 	LD	DE,(CURSOR)
 SCAN	LD	A,8FH
 	LD	(DE),A
 	LD	BC,900H
 	CALL	WAIT
 	PUSH	DE
 	PUSH	IY
 	CALL	ROMKEY
 	POP	IY
 	POP	DE
 	OR	A
 	JR	NZ,GOTONE
 	LD	A,20H
 	LD	(DE),A
 	LD	BC,900H
 	CALL	WAIT
 	PUSH	DE
 	PUSH	IY
 	CALL	ROMKEY
 	POP	IY
 	POP	DE
 	OR	A
 	JR	NZ,GOTONE
 	JR	SCAN
 GOTONE	LD	(CHAR),A
 	CP	0DH
 	JR	Z,DONEST
 	CP	8
 	JR	Z,BCKSPA
 	CP	18H
 	JR	Z,NEWST
 	CP	20H
 	JR	C,SCAN
 	LD	A,(REQLEN)
 	LD	B,A
 	LD	A,(LENGTH)
 	CP	B
 	JR	NC,SCAN
 	LD	A,(CHAR)
 	LD	(DE),A
 	LD	(HL),A
 	INC	DE
 	INC	HL
 	LD	A,(LENGTH)
 	INC	A
 	LD	(LENGTH),A
 	JR	SCAN
 BCKSPA	LD	A,(LENGTH)
 	OR	A
 	JR	Z,SCAN
 	DEC	A
 	LD	(LENGTH),A
 	LD	A,20H
 	LD	(DE),A
 	LD	(HL),A
 	DEC	HL
 	DEC	DE
 	JR	SCAN
 DONEST	LD	A,20H
 	LD	(DE),A
 	LD	(HL),0DH
 	LD	A,(LENGTH)
 	OR	A
 	LD	B,A
 	LD	C,A
 	LD	A,(STRING)
 	LD	HL,STRING
 	LD	(CURSOR),DE
 	RET
 VALUE	LD	E,0
 VALLP	LD	A,(HL)
 	INC	HL
 	CP	30H
 	RET	C
 	CP	3AH
 	RET	NC
 	SUB	30H
 	LD	B,A
 	LD	A,E
 	ADD	A,A
 	ADD	A,A
 	ADD	A,E
 	ADD	A,A
 	ADD	A,B
 	LD	E,A
 	JR	VALLP
 ASCII	LD	C,0
 ASCII1	SUB	0AH
 	JR	C,ASCII2
 	INC	C
 	JR	ASCII1
 ASCII2	ADD	A,3AH
 	LD	B,A
 	LD	A,C
 	LD	C,0
 ASCII3	SUB	0AH
 	JR	C,ASCII4
 	INC	C
 	JR	ASCII3
 ASCII4	ADD	A,3AH
 	EX	AF,AF'
 	LD	A,C
 	ADD	A,30H
 	EX	AF,AF'
 	LD	C,A
 	EX	AF,AF'
 	RET
 ENTRY	DI
 	LD	SP,STACK
 	CALL	HDING
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Program by Kim Watt'
 	DEFB	0DH
 	DEFM	'Breeze Computing Inc.'
 	DEFB	0DH
 	DEFM	'P.O. Box 1013'
 	DEFB	0DH
 	DEFM	'Berkley, Mich.  48072'
 	DEFW	0D0DH
 	DEFM	'Press <ENTER> to continue ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	JR	START
 HDING	CALL	DISPLY
 	DEFW	1F1CH
 	DEFM	'- BREEZE SPECIAL COPY UTILITY -'
 	DEFB	0DH
 	DEFB	0
 	RET
 START	CALL	HDING
 BAD2	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Full <D>isk copy or <F>ile copy ? '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	CP	'D'
 	JP	Z,DISK
 	CP	'F'
 	JR	NZ,BAD2
 BAD1	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'<O>ne file, <A>ll files, or <S>elective files ? '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	CP	'O'
 	JP	Z,ONE
 	CP	'A'
 	JP	Z,ALL
 	CP	'S'
 	JR	NZ,BAD1
 	CALL	GETSRC
 	CALL	GETDES
 	LD	A,1
 	CALL	MOUNT
 	LD	A,(SRCN)
 	LD	(DRIVE),A
 	LD	A,1
 	CALL	GETDIR
 	CALL	DISPLY
 	DEFW	1F1CH
 	DEFM	'- <C>opy this one - <S>kip this one - <J>ump over the rest -'
 	DEFB	0DH
 	DEFB	0
 	LD	DE,20H
 	LD	B,40H
 	LD	IX,SDIR+200H
 	LD	IY,BUFF2
 SELLP	PUSH	BC
 	PUSH	IX
 	PUSH	DE
 	LD	A,(IX)
 	OR	A
 	JP	Z,NOSEL
 	PUSH	IX
 	POP	HL
 	LD	A,5
 	ADD	A,L
 	LD	L,A
 	CALL	SHOW
 BADZ	LD	B,1
 	CALL	GETSTR
 	CP	0DH
 	JR	Z,AJUST
 	CP	'C'
 	JR	Z,DOCOPY
 	CP	'S'
 	JR	Z,ADJUST
 	CP	'J'
 	JR	Z,OVERZ
 	LD	A,8
 	PUSH	IY
 	CALL	33H
 	POP	IY
 	JR	BADZ
 OVERZ	PUSH	IY
 	LD	A,8
 	LD	B,11H
 OVERY	CALL	33H
 	DJNZ	OVERY
 	POP	IY
 	POP	DE
 	POP	IX
 	POP	BC
 	JP	SELDN
 ADJUST	PUSH	IY
 	LD	A,8
 	CALL	33H
 	POP	IY
 AJUST	LD	HL,(CURSOR)
 	LD	DE,10H
 	XOR	A
 	SBC	HL,DE
 	LD	(CURSOR),HL
 	PUSH	HL
 	CALL	DISPLY
 	DEFM	'                '
 	DEFB	0
 	POP	HL
 	LD	(CURSOR),HL
 	JR	NOSEL
 DOCOPY	PUSH	IY
 	LD	A,8
 	CALL	33H
 	POP	IY
 	PUSH	IX
 	LD	B,20H
 DOCPLP	LD	A,(IX)
 	LD	(IY),A
 	INC	IX
 	INC	IY
 	DJNZ	DOCPLP
 	POP	IX
 	CALL	EXTS
 NOSEL	POP	DE
 	POP	IX
 	ADD	IX,DE
 	POP	BC
 	DEC	B
 	JP	NZ,SELLP
 	JP	SELDN
 GETSRC	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Enter SOURCE drive: '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	LD	(SRCA),A
 	CALL	DECODE
 	JR	NZ,GETSRC
 	LD	(SRCN),A
 	RET
 SRCA	DEFB	0
 SRCN	DEFB	0
 GETDES	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Enter DESTINATION drive: '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	LD	(DESA),A
 	CALL	DECODE
 	JR	NZ,GETDES
 	LD	(DESN),A
 	LD	B,A
 	LD	A,(SRCN)
 	CP	B
 	LD	A,1
 	JR	Z,DESIOK
 	LD	A,0
 DESIOK	LD	(FLAG1),A
 	XOR	A
 	LD	(FLAG2),A
 	RET
 FLAG1	DEFB	0
 FLAG2	DEFB	0
 FLAG3	DEFB	0
 DESA	DEFB	0
 DESN	DEFB	0
 DECODE	SUB	30H
 	JR	C,DEBAD
 	CP	4
 	JR	NC,DEBAD
 	LD	C,1
 DECDLP	OR	A
 	JR	Z,DEFND
 	RLC	C
 	DEC	A
 	JR	DECDLP
 DEFND	XOR	A
 	LD	A,C
 	RET
 DEBAD	LD	A,0FFH
 	OR	A
 	RET
 GETDIR	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Loading BOOT to locate directory.'
 	DEFB	0
 	PUSH	AF
 	XOR	A
 	CALL	STATCK
 	LD	BC,BUFF1
 	LD	DE,0
 	CALL	READ
 	JP	NZ,RERROR
 	LD	A,(BUFF1)
 	LD	C,A
 	LD	A,(BUFF1+1)
 	LD	E,A
 	LD	A,(BUFF1+2)
 	LD	D,A
 	LD	A,C
 	OR	A
 	JP	NZ,NOBOOT
 	LD	A,E
 	CP	0FEH
 	JP	NZ,NOBOOT
 	LD	A,D
 	CP	61H
 	JP	NC,NOBOOT
 	LD	E,0
 	CALL	ASCII
 	LD	(MG1+1),BC
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Directory is on Track '
 MG1	DEFM	'00.  Loading directory.'
 	DEFB	0
 	POP	AF
 	CP	1
 	LD	BC,SDIR
 	JR	Z,SKIP1
 	LD	BC,DDIR
 SKIP1	LD	L,10
 	CALL	MREAD
 	RET
 SHOW	PUSH	IY
 	LD	DE,(CURSOR)
 	PUSH	DE
 	LD	B,8
 LO5	LD	A,(HL)
 	CP	20H
 	JR	Z,NOSHOW
 	CALL	ROMDIS
 NOSHOW	INC	HL
 	DJNZ	LO5
 	LD	A,(HL)
 	CP	20H
 	JR	Z,FIXCUR
 	LD	A,'/'
 	CALL	ROMDIS
 	LD	B,3
 LO6	LD	A,(HL)
 	CP	20H
 	JR	Z,SHOWNO
 	CALL	ROMDIS
 SHOWNO	INC	HL
 	DJNZ	LO6
 FIXCUR	LD	A,20H
 	CALL	ROMDIS
 	LD	A,'S'
 	BIT	6,(IX)
 	CALL	NZ,ROMDIS
 	LD	A,'I'
 	BIT	3,(IX)
 	CALL	NZ,ROMDIS
 	LD	A,(IX)
 	AND	7
 	LD	A,'P'
 	CALL	NZ,ROMDIS
 	POP	DE
 	LD	HL,10H
 	ADD	HL,DE
 	LD	(CURSOR),HL
 	POP	IY
 	RET
 NOBOOT	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Boot on diskette is NON STANDARD !'
 	DEFB	0
 TERMIN	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Mulcopy is terminated from error condition !'
 	DEFB	0
 TERMIX	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Press <ENTER> to restart program ! '
 	DEFB	0
 	LD	B,1
 	CALL	GETSTR
 	JP	START
 MOUNT	LD	B,A
 	LD	A,(FLAG1)
 	OR	A
 	LD	A,B
 	JR	Z,DEMNT
 	CP	1
 	JR	NZ,MOUNTD
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Press <ENTER> when SOURCE disk mounted ! '
 	DEFB	0
 	JR	MOUNTS
 DEMNT	LD	A,(FLAG2)
 	OR	A
 	RET	NZ
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Press <ENTER> when BOTH disks mounted ! '
 	DEFB	0
 	LD	A,1
 	LD	(FLAG2),A
 	JR	MOUNTS
 MOUNTD	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Press <ENTER> when DESTINATION disk mounted ! '
 	DEFB	0
 MOUNTS	LD	B,1
 	CALL	GETSTR
 	RET
 SELDN	LD	(IY),0
 	LD	IY,BUFF2
 	CALL	GRANS
 	LD	IY,BUFF2
 	LD	A,(SGRAN)
 	CALL	ASCII
 	LD	(MSG2),A
 	LD	(MSG2+1),BC
 	CALL	DISPLY
 	DEFB	0DH
 MSG2	DEFM	'000 Grans total to be copied.'
 	DEFB	0
 	LD	A,(SGRAN)
 	OR	A
 	JP	M,QUITA
 	LD	A,(DESN)
 	LD	(DRIVE),A
 	LD	A,2
 	CALL	MOUNT
 	CALL	ASKFMT
 	LD	A,2
 	CALL	GETDIR
 	CALL	FREESP
 	LD	A,(FREE)
 	CALL	ASCII
 	LD	(MSG4),A
 	LD	(MSG4+1),BC
 	CALL	DISPLY
 	DEFB	0DH
 MSG4	DEFM	'000 free grans available.'
 	DEFB	0
 	LD	A,(SGRAN)
 	LD	B,A
 	LD	A,(FREE)
 	CP	B
 	JP	C,NOPE1
 	LD	IY,BUFF2
 COPYLP	LD	A,(IY)
 	OR	A
 	JR	Z,COPYDN
 	LD	A,(SRCN)
 	LD	(DRIVE),A
 	LD	A,1
 	CALL	MOUNT
 	CALL	SETIX
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Loading: '
 	DEFB	0
 	PUSH	IX
 	POP	HL
 	LD	A,5
 	ADD	A,L
 	LD	L,A
 	CALL	SHOW
 	CALL	LOAD
 	LD	A,(DESN)
 	LD	(DRIVE),A
 	LD	A,2
 	CALL	MOUNT
 	CALL	DISPLY
 	DEFB	1DH
 	DEFM	'Saving:  '
 	DEFB	0
 	CALL	SAVE
 	JR	COPYLP
 COPYDN	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'All requested files copied !'
 	DEFB	0
 	JP	TERMIX
 QUITA	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'No files are to be copied !'
 	DEFB	0
 	JP	TERMIX
 NOPE1	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Not enough room available to contain files !'
 	DEFB	0
 	JP	TERMIN
 GRANS	XOR	A
 	LD	(SGRAN),A
 GRANLP	LD	A,(IY)
 	OR	A
 	RET	Z
 	PUSH	IY
 GLP1	LD	A,(IY+22)
 	CP	0FFH
 	JR	Z,ALL1
 	CP	0FEH
 	JR	Z,EXTEND
 	LD	A,(IY+23)
 	AND	1FH
 	INC	A
 	LD	B,A
 	LD	A,(SGRAN)
 	ADD	A,B
 	LD	(SGRAN),A
 	INC	IY
 	INC	IY
 	JR	GLP1
 ALL1	POP	IY
 	LD	DE,20H
 	ADD	IY,DE
 	JR	GRANLP
 EXTEND	POP	IY
 	LD	DE,20H
 	ADD	IY,DE
 	PUSH	IY
 	JR	GLP1
 EXTS	LD	A,(IX+22)
 	CP	0FFH
 	RET	Z
 	CP	0FEH
 	JR	Z,EXYES
 	INC	IX
 	INC	IX
 	JR	EXTS
 EXYES	LD	A,(IX+23)
 	LD	C,A
 	AND	7
 	LD	D,A
 	LD	A,C
 	AND	0E0H
 	LD	E,A
 	LD	HL,SDIR+200H
 	ADD	HL,DE
 	LD	A,(HL)
 	BIT	7,A
 	JP	Z,ERRORX
 	PUSH	HL
 	POP	IX
 	LD	B,20H
 BLOOL	LD	A,(HL)
 	LD	(IY),A
 	INC	HL
 	INC	IY
 	DJNZ	BLOOL
 	JR	EXTS
 FREE	DEFB	0
 SGRAN	DEFB	0
 ERRORX	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Program error has occured !'
 	DEFB	0
 	JP	TERMIN
 FREESP	XOR	A
 	LD	(FREE),A
 	LD	IX,DDIR
 	LD	B,60H
 FREELP	BIT	0,(IX)
 	CALL	Z,ADD1
 	BIT	1,(IX)
 	CALL	Z,ADD2
 	INC	IX
 	DJNZ	FREELP
 	RET
 ADDONE	LD	A,(FREE)
 	INC	A
 	LD	(FREE),A
 	RET
 ADD1	BIT	0,(IX+60H)
 	JR	Z,ADDONE
 	RET
 ADD2	BIT	1,(IX+60H)
 	JR	Z,ADDONE
 	RET
 ASKFMT	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Do you want to format the destination disk ? '
 	DEFB	0
 	LD	B,3
 	CALL	GETSTR
 	CP	'N'
 	RET	Z
 	CP	0DH
 	RET	Z
 	LD	A,2
 	CALL	STATCK
 	CALL	SETUP
 BAD6	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'How many tracks (2-96) ? '
 	DEFB	0
 	LD	B,2
 	CALL	GETSTR
 	CP	0DH
 	JR	NZ,BAD66
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'35 Tracks assumed !'
 	DEFB	0
 	LD	A,35
 	JR	BAD666
 BAD66	CALL	VALUE
 	LD	A,E
 	CP	2
 	JR	C,BAD6
 	CP	61H
 	JR	NC,BAD6
 BAD666	LD	(TRACKS),A
 	LD	(DDIR+0C0H),A
 	CALL	ASCII
 	LD	(DDIR+0D0H),BC
 	LD	IY,TRACKS
 	CALL	SETGAT
 BAD7	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Which track for Directory ? '
 	DEFB	0
 	LD	B,2
 	CALL	GETSTR
 	CP	0DH
 	JR	Z,FINDTR
 	CALL	VALUE
 	LD	A,E
 	OR	A
 	JR	Z,BAD7
 	LD	HL,TRACKS
 	CP	(HL)
 	JR	NC,BAD7
 	JP	DIRFND
 FINDTR	LD	H,4DH
 	LD	L,11H
 	LD	C,0
 FINLP1	LD	A,(HL)
 	CP	0FCH
 	JR	Z,DIRFN1
 	INC	C
 	LD	A,C
 	RRCA
 	LD	A,L
 	JR	NC,FINLP2
 	ADD	A,C
 	LD	L,A
 	CP	(IY)
 	JR	NZ,FINLP1
 BAD9	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'No tracks available for directory !'
 	DEFB	0
 	JP	TERMIN
 FINLP2	SUB	C
 	LD	L,A
 	JR	NZ,FINLP1
 	JR	BAD9
 DIRFN1	LD	A,L
 DIRFND	LD	(DIRTRK),A
 	LD	E,A
 	LD	L,A
 	LD	HL,4DH
 	LD	A,(HL)
 	INC	A
 	JP	Z,BAD7
 	LD	A,(DESA)
 	LD	(MSG7),A
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Formatting on Drive '
 MSG7	DEFM	'0.'
 	DEFB	0DH
 	DEFB	0
 	CALL	SELECT
 	LD	BC,0
 	CALL	WAIT
 	XOR	A
 	LD	(TRAK),A
 FMTLP	LD	A,(TRAK)
 	CALL	ASCII
 	LD	(FMTTR),BC
 	CALL	DISPLY
 	DEFB	1DH
 	DEFM	'Formatting Track '
 FMTTR	DEFM	'00.'
 	DEFB	0
 	LD	A,(TRAK)
 	LD	B,A
 	LD	A,(DIRTRK)
 	CP	B
 	LD	B,0FAH
 	JR	Z,GOFMT1
 	LD	L,A
 	LD	H,5CH
 	LD	A,(HL)
 	INC	A
 	LD	B,0FBH
 	JR	NZ,GOFMT1
 	DEFB	3EH
 FMTLCK	DEFB	'Y'
 	CP	'Y'
 	JP	NZ,NXTFMT
 	LD	B,0F9H
 GOFMT1	LD	A,B
 	LD	(DATMRK),A
 	LD	HL,BUFFER
 	LD	DE,ORDER
 	LD	B,0EH
 	CALL	FILLFF
 SECLP	LD	B,6
 	LD	C,0
 	CALL	FILL
 	LD	C,0FEH
 	CALL	FILL1
 	DEFB	0EH
 TRAK	DEFB	0
 	CALL	FILL1
 	LD	C,0
 	CALL	FILL1
 	LD	A,(DE)
 	LD	C,A
 	CALL	FILL1
 	LD	C,1
 	CALL	FILL1
 	LD	C,0F7H
 	CALL	FILL1
 	LD	C,0FFH
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	LD	B,6
 	LD	C,0
 	CALL	FILL
 	DEFB	0EH
 DATMRK	DEFB	0
 	CALL	FILL1
 	LD	B,0
 	DEFB	0EH
 FILBYT	DEFB	0E5H
 	CALL	FILL
 	LD	C,0F7H
 	CALL	FILL1
 	LD	B,0BH
 	CALL	FILLFF
 	INC	DE
 	LD	A,(DE)
 	INC	A
 	JR	NZ,SECLP
 	LD	B,5BH
 	CALL	FILLFF
 	CALL	WRITTR
 NXTFMT	LD	A,(TRAK)
 	INC	A
 	LD	(TRAK),A
 	CP	(IY)
 	JP	Z,VERIFY
 	LD	A,5BH
 	LD	(37ECH),A
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 STEPWT	LD	A,(37ECH)
 	RRCA
 	JR	C,STEPWT
 	JP	FMTLP
 WRITTR	CALL	TRWRIT
 	RET	Z
 TRWRIT	CALL	SELECT
 	LD	BC,BUFFER
 	LD	HL,37ECH
 	LD	(HL),0F4H
 	LD	DE,37EFH
 	PUSH	BC
 	PUSH	BC
 	POP	BC
 	POP	BC
 	DI
 	JR	WRBZZ
 BZWRZ	RRCA
 	JR	NC,WRDNZ
 WRBZZ	LD	A,(HL)
 	BIT	1,A
 	JR	Z,BZWRZ
 	LD	A,(BC)
 	LD	(DE),A
 	INC	BC
 	JR	WRBZZ
 WRDNZ	LD	A,(HL)
 	LD	(HL),0D0H
 	LD	HL,ERMSG2
 	BIT	2,A
 	JP	NZ,WERROR
 	RET
 ERMSG2	DEFM	'Can'
 	DEFB	27H
 	DEFM	't format.  Transfer rate TOO FAST !'
 	DEFB	0
 	JP	WERROR
 FILLFF	LD	C,0FFH
 FILL	CALL	FILL1
 	DJNZ	FILL
 	RET
 FILL1	LD	(HL),C
 	INC	HL
 	RET
 BOOT	DEFB	5EH
 	DEFW	0
 	DEFW	0
 	DEFB	42H
 	DEFB	4FH
 	DEFB	4FH
 	DEFB	54H
 	DEFW	2020H
 	DEFW	2020H
 	DEFB	53H
 	DEFB	59H
 	DEFB	53H
 	DEFB	60H
 	DEFB	7FH
 	DEFB	1FH
 	DEFB	0B2H
 	DEFB	5
 	DEFW	0
 	DEFB	0
 	DEFW	0FFFFH
 	DEFW	0
 	DEFW	0
 	DEFW	0
 DIR	DEFB	5DH
 	DEFW	0
 	DEFW	0
 	DEFB	44H
 	DEFB	49H
 	DEFB	52H
 	DEFW	2020H
 	DEFW	2020H
 	DEFB	20H
 	DEFB	53H
 	DEFB	59H
 	DEFB	53H
 	DEFB	0A7H
 	DEFB	1DH
 	DEFB	0F9H
 	DEFB	0E5H
 	DEFB	0AH
 	DEFB	0
 DIRTRK	DEFB	11H
 	DEFB	01
 	DEFW	0FFFFH
 	DEFW	0
 	DEFW	0
 	DEFW	0
 ORDER	DEFB	0
 	DEFB	5
 	DEFB	1
 	DEFB	6
 	DEFB	2
 	DEFB	7
 	DEFB	3
 	DEFB	8
 	DEFB	4
 	DEFB	9
 	DEFB	0FFH
 VERIFY	CALL	RESTOR
 	CALL	DISPLY
 	DEFB	0DH
 	DEFB	0
 	LD	D,0
 VERLP	LD	L,D
 	LD	H,4DH
 	LD	A,(HL)
 	INC	A
 	JP	Z,VERNO
 	LD	A,D
 	CALL	ASCII
 	LD	(ASDR),BC
 	LD	E,0
 VERLP1	PUSH	DE
 	CALL	SELECT
 	LD	A,E
 	CALL	ASCII
 	LD	A,B
 	LD	(ASSC),A
 	CALL	DISPLY
 	DEFB	1DH
 	DEFM	'Verifying Track '
 ASDR	DEFM	'00, Sector '
 ASSC	DEFM	'0.'
 	DEFB	0
 	POP	DE
 	LD	BC,4200H
 	CALL	READ
 	LD	HL,ERMSGA
 	BIT	4,A
 	JP	NZ,LOKIT
 	LD	HL,ERMSGB
 	BIT	3,A
 	JP	NZ,LOKIT
 	LD	HL,ERMSGC
 	BIT	2,A
 	JP	NZ,LOKIT
 	INC	E
 	LD	A,E
 	CP	0AH
 	JP	NZ,VERLP1
 VERNO	INC	D
 	LD	A,D
 	CP	(IY)
 	JP	NZ,VERLP
 	LD	HL,DDIR
 	LD	DE,4D60H
 	LD	A,(IY)
 	LD	C,A
 	LD	B,0
 	LDIR
 	LD	A,(DIRTRK)
 	CALL	ASCII
 	LD	(DIRTK),BC
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Writing directory on Track '
 DIRTK	DEFM	'00.'
 	DEFB	0
 	LD	HL,DDIR
 	LD	A,(HL)
 	OR	1
 	LD	(HL),A
 	LD	A,(DIRTRK)
 	LD	(BENTRY+2),A
 	LD	L,A
 	LD	H,4DH
 	LD	A,(HL)
 	INC	A
 	JP	Z,DIRERR
 	LD	(HL),0FFH
 	LD	DE,0
 	LD	BC,BENTRY
 	LD	A,0A8H
 	LD	(WRTYPE),A
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	JP	NZ,DIRERR
 	LD	BC,DDIR
 	LD	A,(DIRTRK)
 	LD	D,A
 	LD	E,0
 	LD	A,0A9H
 	LD	(WRTYPE),A
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	CP	20H
 	JP	NZ,DIRERR
 	LD	HL,DDIR+100H
 LP1	LD	(HL),0
 	INC	L
 	JR	NZ,LP1
 	LD	(HL),0A2H
 	INC	HL
 	LD	(HL),2CH
 	DEC	HL
 	LD	E,1
 	LD	BC,DDIR+100H
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	CP	20H
 	JP	NZ,DIRERR
 	LD	DE,DDIR+100H
 	LD	HL,BOOT
 	LD	BC,20H
 	LDIR
 	LD	A,(DIRTRK)
 	LD	D,A
 	LD	E,2
 	LD	BC,DDIR+100H
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	CP	20H
 	JP	NZ,DIRERR
 	LD	HL,DIR
 	LD	DE,DDIR+100H
 	LD	BC,20H
 	LDIR
 	LD	A,(DIRTRK)
 	LD	D,A
 	LD	E,3
 	LD	BC,DDIR+100H
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	CP	20H
 	JP	NZ,DIRERR
 	LD	HL,DDIR+100H
 	LD	B,20H
 LP2	LD	(HL),0
 	INC	HL
 	DJNZ	LP2
 	LD	A,(DIRTRK)
 	LD	D,A
 	LD	E,4
 LP3	LD	BC,DDIR+100H
 	CALL	WRITEV
 	LD	A,(37ECH)
 	AND	60H
 	CP	20H
 	JP	NZ,DIRERR
 	INC	E
 	LD	A,E
 	CP	0AH
 	JR	NZ,LP3
 	CALL	RESTOR
 	RET
 SETUP	LD	HL,DDIR
 	LD	DE,4D01H
 	LD	BC,0A00H
 	LD	(HL),0
 	LDIR
 	LD	HL,DDIR
 	LD	DE,4D01H
 	LD	BC,0C0H
 	LD	(HL),0FFH
 	LDIR
 	LD	HL,O5CCB
 	LD	DE,4DCBH
 	LD	BC,50
 	LDIR
 	RET
 TRACKS	DEFB	0
 DIRERR	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'Can'
 	DEFB	27H
 	DEFM	't initialize system information !'
 	DEFB	0
 	JP	TERMIN
 ERMSGA	DEFM	'   Not found, TRACK LOCKED OUT !'
 	DEFB	0DH
 	DEFB	0
 	POP	DE
 	JP	VERNO
 ERMSGB	DEFM	'   CRC error, TRACK LOCKED OUT !'
 	DEFB	0DH
 	DEFB	0
 	POP	DE
 	JP	VERNO
 ERMSGC	DEFM	'   Can'
 	DEFB	27H
 	DEFM	't verify, TRACK LOCKED OUT !'
 	DEFB	0DH
 	DEFB	0
 	POP	DE
 	JP	VERNO
 LOKIT	PUSH	DE
 	PUSH	HL
 	LD	L,D
 	LD	H,4DH
 	LD	(HL),0FFH
 	JP	DISPLY
 BENTRY	NOP
 	CP	0
 	DI
 	LD	SP,41FCH
 	LD	HL,42E2H
 	CALL	429AH
 	LD	A,1
 	LD	(37E1H),A
 	LD	A,(4202H)
 	LD	D,A
 	LD	E,4
 	LD	BC,DDIR
 	CALL	42AAH
 	JR	NZ,L7F90
 	LD	A,(DDIR)
 	AND	10H
 	LD	HL,42E5H
 	JR	Z,L7F93
 	EXX
 	LD	HL,(4D16H)
 	LD	D,L
 	LD	A,H
 	RLCA
 	RLCA
 	RLCA
 	AND	07H
 	LD	H,A
 	RLCA
 	RLCA
 	ADD	A,H
 	LD	E,A
 	LD	BC,4DFFH
 	EXX
 L7F3E	CALL	4275H
 	DEC	A
 	JR	NZ,L7F5B
 	CALL	4275H
 	LD	B,A
 	CALL	4275H
 	LD	L,A
 	DEC	B
 	CALL	4275H
 	LD	H,A
 L7F51	DEC	B
 	JR	Z,L7F3E
 	CALL	4275H
 	LD	(HL),A
 	INC	HL
 	JR	L7F51
 L7F5B	DEC	A
 	JR	Z,L7F69
 	CALL	4275H
 	LD	B,A
 L7F62	CALL	4275H
 	DJNZ	L7F62
 	JR	L7F3E
 L7F69	CALL	4275H
 	CALL	4275H
 	LD	L,A
 	CALL	4275H
 	LD	H,A
 	JP	(HL)
 	EXX
 	INC	C
 	JR	NZ,L7F8D
 	PUSH	BC
 	LD	A,1
 	LD	(37E1H),A
 	CALL	42AAH
 	JR	NZ,L7F90
 	POP	BC
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,L7F8D
 	LD	E,A
 	INC	D
 L7F8D	LD	A,(BC)
 	EXX
 	RET
 L7F90	LD	HL,42F1H
 L7F93	CALL	429AH
 	CALL	40H
 	HALT
 	PUSH	HL
 L7F9B	LD	A,(HL)
 	CP	3
 	JR	Z,L7FA8
 	CALL	33H
 	INC	HL
 	CP	0DH
 	JR	NZ,L7F9B
 L7FA8	POP	HL
 	RET
 	PUSH	BC
 	CALL	42B2H
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 	LD	(37EEH),DE
 	LD	HL,37ECH
 	LD	(HL),1BH
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 L7FBF	LD	A,(HL)
 	RRCA
 	JR	C,L7FBF
 	LD	(HL),88H
 	PUSH	DE
 	LD	DE,37EFH
 	PUSH	BC
 	POP	BC
 	JR	L7FD8
 L7FCD	RRCA
 	JR	NC,L7FDA
 L7FD0	LD	A,(HL)
 	BIT	1,A
 	JR	Z,L7FCD
 	LD	A,(DE)
 	LD	(BC),A
 	INC	BC
 L7FD8	JR	L7FD0
 L7FDA	LD	A,(HL)
 	AND	5CH
 	POP	DE
 	RET	Z
 	LD	(HL),0D0H
 	RET
 	DEFW	1F1CH
 	DEFB	3
 	DEFB	17H
 	DEFB	0E8H
 	DEFM	'NO SYSTEM'
 	DEFB	0DH
 	DEFB	17H
 	DEFB	0E8H
 	DEFM	'DISK ERROR'
 	DEFB	0DH
 	DEFB	0EBH
 	DEFB	5FH
 O5CCB	DEFB	21H
 	DEFW	0
 	DEFW	4296H
 	DEFM	'00 TRACK'
 	DEFM	'00/00/00'
 	DEFB	0DH
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 	DEFW	0
 WRITEV	CALL	WRITE
 	JP	NZ,WERROR
 	PUSH	BC
 	LD	BC,4200H
 	CALL	READ
 	POP	BC
 	RET	Z
 	JP	DIRERR
 SETGAT	LD	HL,DDIR
 	LD	B,(IY)
 SETLPX	LD	(HL),0FCH
 	INC	HL
 	DJNZ	SETLPX
 	RET
 SETIX	LD	IX,SDIR+200H
 	LD	B,40H
 SETLP	LD	A,(IX)
 	OR	A
 	JR	Z,SETNX
 	BIT	7,A
 	JR	NZ,SETNX
 	PUSH	IX
 	PUSH	IY
 	PUSH	BC
 SETTST	LD	A,(IY)
 	CP	(IX)
 	JR	NZ,SETNOP
 	INC	IY
 	INC	IX
 	DJNZ	SETTST
 	POP	BC
 	POP	IY
 	POP	IX
 	RET
 SETNOP	POP	BC
 	POP	IY
 	POP	IX
 SETNX	LD	DE,20H
 	ADD	IX,DE
 	DJNZ	SETLP
 	JP	ERRORX
 LOAD	LD	BC,BUFFER
 	XOR	A
 	LD	(SGRAN),A
 LOADLP	LD	A,(IX+22)
 	CP	0FFH
 	RET	Z
 	CP	0FEH
 	JR	Z,EXTEN
 	LD	D,A
 	LD	A,(IX+23)
 	RLCA
 	RLCA
 	RLCA
 	AND	7
 	LD	H,A
 	RLCA
 	RLCA
 	ADD	A,H
 	LD	E,A
 	LD	A,(IX+23)
 	AND	1FH
 	INC	A
 	LD	H,A
 	ADD	A,A
 	ADD	A,A
 	ADD	A,H
 	LD	L,A
 	LD	A,(SGRAN)
 	ADD	A,L
 	LD	(SGRAN),A
 	CALL	MREAD
 	INC	IX
 	INC	IX
 	JR	LOADLP
 EXTEN	LD	A,(IX+23)
 	PUSH	BC
 	LD	C,A
 	AND	7
 	LD	D,A
 	LD	A,C
 	AND	0E0H
 	LD	E,A
 	LD	HL,SDIR+200H
 	ADD	HL,DE
 	LD	A,(HL)
 	BIT	7,A
 	JP	Z,ERRORX
 	PUSH	HL
 	POP	IX
 	LD	DE,20H
 	ADD	IY,DE
 	POP	BC
 	JP	LOADLP
 SAVE	LD	HL,DDIR+100H
 	LD	B,40H
 SAVFN	LD	A,(HL)
 	OR	A
 	JR	Z,AVAIL
 	INC	HL
 	LD	A,L
 	CP	9
 	JR	C,SAVFNI
 	LD	DE,8
 	ADD	HL,DE
 SAVFNI	DJNZ	SAVFN
 	CALL	DISPLY
 	DEFB	0DH
 	DEFM	'File space FULL !'
 	DEFB	0
 	JP	TERMIN
 AVAIL	LD	BC,BUFFER
 	PUSH	HL
 	LD	A,L
 	AND	7
 	LD	H,4FH
 	ADD	A,H
 	LD	H,A
 	LD	A,L
 	AND	0E0H
 	LD	L,A
 	PUSH	HL
 	POP	IX
 	POP	HL
 	PUSH	IX
 	PUSH	BC
 	LD	C,0
 	LD	B,0BH
 HLOOP	LD	A,(IX+5)
 	INC	IX
 	XOR	C
 	RLCA
 	LD	C,A
 	DJNZ	HLOOP
 	OR	A
 	JR	NZ,HASHOK
 	INC	A
 HASHOK	POP	BC
 	POP	IX
 	LD	(HL),A
 SALP	LD	A,(SGRAN)
 	OR	A
 	RET	Z
 	PUSH	IX
 	PUSH	IY
 	PUSH	BC
 	LD	B,22
 SLP	LD	A,(IY)
 	LD	(IX),A
 	INC	IY
 	INC	IX
 	DJNZ	SLP
 	POP	BC
 	POP	IY
 	POP	IX
 	CALL	GETGRA
 	LD	A,(SGRAN)
 	CP	L
 	JR	C,SALL
 	PUSH	HL
 	PUSH	DE
 	CALL	MWRITE
 	POP	DE
 	POP	HL
 	LD	A,(SGRAN)
 	SUB	L
 	LD	(SGRAN),A
 	CALL	LOKOUT
 	INC	IX
 	INC	IX
 	PUSH	IX
 	POP	HL
 	LD	A,L
 	CP	7
 	JR	NC,FXDE
 	JR	SALP
 LOKOUT	LD	B,H
 	LD	HL,DDIR
 	LD	A,D
 	ADD	HL,DE
 LOKLOP	BIT	0,(HL)
 	JR	NZ,LOK1
 	SET	0,(HL)
 	JR	GOTLOK
 LOK1	BIT	1,(HL)
 	JP	NZ,ERRORX
 	SET	0,(HL)
 	INC	HL
 GOTLOK	DEC	B
 	JR	NZ,LOKLOP
 	RET
 GETGRA	LD	HL,DDIR
 	XOR	B
 GETGRL	BIT	0,(HL)
 	JR	Z,GRAST1
 	BIT	1,(HL)
 	JR	Z,GRAST2
 	INC	HL
 	LD	A,L
 	CP	61H
 	JR	C,GETGRL
 	CALL	DISPLY
 	DEFM	'GAT table error !'
 	DEFB	0
 	JP	TERMIN
 GRAST1	LD	E,0
 	JR	GRAST
 GRAST2	LD	E,5
 GRAST	LD	D,L
 	XOR	A
 	LD	B,A
 GRASTM	BIT	0,(HL)
 	JR	NZ,GRASTE
 	INC	B
 	BIT	1,(HL)
 	JR	NZ,GRASTE
 	INC	B
 	INC	HL
 	JR	GRASTM
 GRASTE	LD	H,B
 	LD	A,B
 	ADD	A,A
 	ADD	A,A
 	ADD	A,B
 	LD	L,A
 	RET
 SALL	PUSH	DE
 	LD	A,(SGRAN)
 	LD	H,A
 	ADD	A,A
 	ADD	A,A
 	ADD	A,H
 	LD	L,A
 	PUSH	HL
 	CALL	MWRITE
 	POP	HL
 	POP	DE
 	CALL	LOKOUT
 	RET
 DISK	JR	DISK
 ALL	JR	ALL
 ONE	JR	ONE
 FXDE	JR	FXDE
 BUFFER	DEFB	0
 	END	ENTRY
 	ADD	A,A
 	ADD	A,A
 	ADD	A,H
 	LD	L,A
 	PUSH	HL
 	CALL	MWRITE
 	POP	HL
 	POP	DE
 	CALL	LOKOUT
 	RET
 DISK	JR	DISK
 ALL	JR	ALL
 ONE	JR	ONE
 FXDE	JR	FXDE
 BUFFER	DEFB	0
 	END	E