MAKE80 ;	MAKE80/TXT	MAKE80/TOO	MAKE80/CMD
 	ORG	6D00H
 STACK	EQU	6CF0H
 BUFFER	EQU	7C00H
 BUFF1	EQU	7A00H
 SAVEIT	DB	0
 SPBYTE	DB	3
 FLAG	DB	0
 FLAG2	DB	0
 TOPMEM	DW	0
 TRAK	DB	0
 TRAK1	DB	0
 TRAK2	DB	0
 TRACKS	DB	0
 RESULT	DB	0
 TYPE	DB	0
 COUNT	DW	0
 TEMP0	DW	0
 TEMP1	DW	0
 START	DI
 	LD	A,0D0H
 	OUT	(0F0H),A
 	LD	SP,STACK
 	LD	A,(3810H)
 	OR	A
 	JR	Z,PRENTR
 	CP	16
 	JR	NC,PRENTR
 	LD	B,0
 TLP	RRCA
 	JR	C,TFN
 	INC	B
 	JR	TLP
 TFN	LD	A,B
 	LD	(SPBYTE),A
 	JR	ENTER
 PRENTR	LD	A,(HL)
 	CP	0DH
 	JR	Z,ENTER
 	INC	HL
 	CP	20H
 	JR	Z,PRENTR
 	CP	','
 	JR	Z,PRENTR
 	SUB	30H
 	JR	C,ENTER
 	CP	4
 	JR	NC,ENTER
 	LD	(SPBYTE),A
 ENTER	CALL	2BH		;clear key buffer
 ENTRY	DI
 	LD	SP,STACK
 	CALL	CHKSUM
 	LD	HL,0C000H
 	LD	A,'B'
 	LD	(DENSITY),A
 	XOR	A
 MEMTST	LD	(HL),A
 	CP	(HL)
 	JR	NZ,LOW
 	INC	A
 	JR	NZ,MEMTST
 	LD	HL,0
 LOW	LD	(TOPMEM),HL
 	LD	A,(SPBYTE)
 	LD	L,'4'
 	LD	H,'0'
 	CP	3
 	JR	Z,SPGO
 	LD	L,'2'
 	CP	2
 	JR	Z,SPGO
 	LD	L,'1'
 	LD	H,'2'
 	CP	1
 	JR	Z,SPGO
 	LD	L,'0'
 	LD	H,'6'
 SPGO	LD	(SPEED),HL
 	CALL	DISPLY
 	DW	1F1CH
 	DB	'**  MAKE-80 III Ver 1.1 by Kim Watt  **  Step = '
 SPEED	DB	'00 ms.  **'
 	DB	0DH
 RANDY	DB	'Copyright (C) 1981 by A.M. Electronics, Inc.                  '
 	DB	0DH
 	DB	'3366 Washtenaw Ave. - Ann Arbor, Mich.  48104 - (313) 973-2312'
 	DW	0D0DH
 	DB	'Insert a 35 or 40 Track formatted diskette into your 80 Track'
 	DB	0DH
 	DB	'drive.  When you take it out it will still have the original'
 	DB	0DH
 	DB	'data, but will be formatted as 80 Tracks !!'
 	DB	0
 BAD1	LD	HL,3C00H+576-64
 	LD	A,'B'
 	LD	(DENSITY),A
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'Which Drive contains mounted diskette ? '
 	DB	0
 	CALL	O40H
 	SUB	30H
 	JR	C,BAD1
 	CP	4
 	JR	NC,BAD1
 	LD	B,1
 DRVCK	OR	A
 	JR	Z,DRVFN
 	SLA	B
 	DEC	A
 	JR	DRVCK+1
 DRVFN	LD	A,B
 	LD	(DRIVE),A
 BAD99	LD	HL,3C00H+640-64
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'<S>ingle or <D>ouble Density ? ',0
 	CALL	O40H
 	CP	'S'
 	LD	B,0
 	JR	Z,BAD88
 	CP	'D'
 	JR	NZ,BAD99
 BADIR	LD	HL,3C00H+640-64
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'A> Sectors 0-17, B> Sectors 1-18 ? ',0
 	CALL	O40H
 	LD	B,A
 	CP	'A'
 	JR	Z,BAD88
 	CP	'B'
 	JR	NZ,BADIR
 BAD88	LD	A,B
 	LD	(DENSITY),A
 	CALL	DENSETUP
 BAD22	LD	HL,3C00H+640+64-64
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'Verify after completion ? '
 	DB	0
 	CALL	O40H
 	CP	'Y'
 	JR	Z,VFND
 	CP	'N'
 	JR	NZ,BAD22
 VFND	LD	(FLAG2),A
 	LD	IX,TRAK
 	XOR	A
 	LD	(IX+1),A
 	LD	(IX+2),A
 	CALL	RESTOR
 	CALL	IFGOOD
 	CALL	RESTOR
 	LD	DE,1
 DEN01	EQU	$-2
 	LD	(TEMP0),DE
 	XOR	A
 	LD	(IX+1),A
 	LD	(IX+2),A
 	LD	A,1
 	LD	(FLAG),A
 COPYLP	CALL	READ10
 	CALL	FMTTR
 	CALL	PUT10
 	LD	A,(FLAG)
 	OR	A
 	JR	NZ,COPYLP
 FINISH	CALL	FORMAT
 	LD	A,(IX+2)
 	CP	80
 	JP	Z,VERIFY
 	JR	FINISH
 ERMSG0	DB	'Diskette is WRITE PROTECTED !'
 	DB	0
 ERRORD	LD	HL,3C00H+896
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	'MAKE-80 CANNOT CONTINUE because of detected error !'
 	DB	0DH
 	DB	'Press <ENTER> to restart program. '
 	DB	0
 ERRZ	CALL	O40H
 	JP	ENTRY
 DERROR	LD	HL,ERMSG0
 	PUSH	HL
 	LD	HL,3C00H+896-64
 	LD	(4020H),HL
 DISPLY	POP	DE
 DISLP	LD	HL,(4020H)
 	LD	A,(DE)
 	INC	DE
 	OR	A
 	JR	Z,DISDN
 	CP	20H
 	JR	C,DISCTL
 	LD	(HL),A
 	INC	HL
 	LD	(4020H),HL
 	JR	DISLP
 DISCTL	PUSH	DE
 	PUSH	IY
 	PUSH	IX
 	CALL	33H
 	POP	IX
 	POP	IY
 	POP	DE
 	JR	DISLP
 DISDN	PUSH	DE
 	RET
 SELECT0	LD	A,D
 	CP	16H
 	LD	A,0
 	JR	C,SELECT1
 	LD	A,20H
 SELECT1	LD	(SELECT2),A
 	LD	A,(DRIVE)
 	RES	5,A
 	OR	0
 SELECT2	EQU	$-1
 	LD	(DRIVE),A
 SELECT	LD	A,1
 DRIVE	EQU	$-1
 	AND	7FH
 	OR	80H
 DENSITY	EQU	$-1
 	OUT	(0F4H),A
 	RET
 RESTOR	CALL	SELECT
 	LD	A,(SPBYTE)
 	AND	3
 	OR	08
 	OUT	(0F0H),A
 	CALL	DSKSLO
 RESWT	CALL	SELECT
 	IN	A,(0F0H)
 	BIT	0,A
 	JR	NZ,RESWT
 	BIT	2,A
 	JR	Z,RESTOR
 	XOR	A
 	LD	(IX),A
 	JP	WHHEAD
 STEPIN	CALL	SELECT
 	INC	(IX)
 	LD	A,(SPBYTE)
 	AND	3
 	OR	58H
 STEPCT	OUT	(0F0H),A
 	CALL	DSKSLO
 STIN	CALL	SELECT
 	IN	A,(0F0H)
 	BIT	0,A
 	JR	NZ,STIN
 	BIT	4,A
 	JP	WHHEAD
 STEPOT	CALL	SELECT
 	DEC	(IX)
 	LD	A,(SPBYTE)
 	AND	3
 	OR	78H
 	JR	STEPCT
 READ10	LD	DE,(TEMP0)
 	LD	A,D
 	SLA	A
 	CALL	GOTRK
 	LD	BC,BUFFER
 	LD	HL,0
 	LD	(COUNT),HL
 	LD	DE,(TEMP0)
 	LD	(TEMP1),DE
 	LD	IY,BUFF1
 RDLP	LD	DE,(TEMP0)
 	LD	A,D
 	OUT	(0F1H),A
 	CALL	READ
 	CALL	NZ,BADRD
 	JR	C,RDLP
 	INC	E
 	LD	A,E
 	SUB	19
 DEN11	EQU	$-1
 	JR	NZ,RDC1
 	LD	E,1
 DEN21	EQU	$-1
 	CALL	STEPIN
 	CALL	STEPIN
 	INC	D
 RDC1	LD	(TEMP0),DE
 	LD	A,(RESULT)
 	RRCA
 	RRCA
 	RRCA
 	RRCA
 	RRCA
 	AND	1
 	OR	0A0H
 	LD	(IY),A
 	INC	IY
 	LD	HL,(COUNT)
 	INC	HL
 	LD	(COUNT),HL
 	LD	A,(TRACKS)
 	CP	D
 	JR	Z,ATEND
 	LD	HL,(TOPMEM)
 	DEC	H
 	LD	A,B
 	CP	H
 	JR	NZ,RDLP
 	RET
 ATEND	XOR	A
 	LD	(FLAG),A
 	RET
 PUT10	LD	DE,(TEMP1)
 	LD	A,D
 	CALL	GOTRK
 	LD	DE,(TEMP1)
 	LD	BC,BUFFER
 	LD	HL,(COUNT)
 	LD	IY,BUFF1
 WRLP	LD	A,D
 	OUT	(0F1H),A
 	PUSH	HL
 WRLP1	LD	A,(IY)
 	LD	(TYPE),A
 	CALL	WRITE
 	CALL	NZ,BADWRT
 	JR	C,WRLP1
 	INC	IY
 	POP	HL
 	INC	E
 	LD	A,E
 	SUB	19
 DEN12	EQU	$-1
 	JR	NZ,WRLP2
 	LD	E,1
 DEN22	EQU	$-1
 	INC	D
 	PUSH	HL
 	PUSH	DE
 	CALL	STEPIN
 	POP	DE
 	POP	HL
 WRLP2	DEC	HL
 	LD	A,H
 	OR	L
 	JR	NZ,WRLP
 	RET
 GOTRK	LD	B,(IX)
 	CP	B
 	RET	Z
 	JR	C,GOOUT
 	SUB	B
 	LD	B,A
 INLOOP	CALL	STEPIN
 	DJNZ	INLOOP
 	RET
 GOOUT	LD	C,A
 	LD	A,B
 	SUB	C
 	LD	B,A
 OUTLP	CALL	STEPOT
 	DJNZ	OUTLP
 	RET
 WHHEAD	LD	HL,3C00H+704
 	LD	(4020H),HL
 	PUSH	AF
 	LD	A,(IX)
 	OUT	(0F1H),A
 	PUSH	DE
 	PUSH	BC
 	CALL	ASCII
 	LD	(HEAD),BC
 	CALL	DISPLY
 	DB	1DH
 	DB	'Head positioned over Track: '
 HEAD	DB	'00.'
 	DB	0
 	POP	BC
 	POP	DE
 	POP	AF
 	RET
 READ	CALL	SELECT0
 	LD	A,E
 	PUSH	BC
 	CALL	ASCII
 	LD	(RSEC),BC
 	LD	A,D
 	CALL	ASCII
 	LD	(RTK),BC
 	PUSH	DE
 	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	1DH
 	DB	'Reading    Track '
 RTK	DB	'00, Sector '
 RSEC	DB	'00.'
 	DB	0
 	POP	DE
 	POP	BC
 	CALL	R1
 	CALL	NZ,R1
 	CALL	NZ,R1
 	RET
 WRITE	CALL	SELECT0
 	LD	A,E
 	PUSH	BC
 	CALL	ASCII
 	LD	(WSEC),BC
 	LD	A,D
 	CALL	ASCII
 	LD	(WTK),BC
 	PUSH	DE
 	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	1DH
 	DB	'Writing    Track '
 WTK	DB	'00, Sector '
 WSEC	DB	'00.'
 	DB	0
 	POP	DE
 	POP	BC
 	CALL	W1
 	CALL	NZ,W1
 	CALL	NZ,W1
 	RET
 WRDN	AND	0FCH
 	LD	(SAVEIT),A
 	LD	B,H
 	LD	C,L
 	RET	Z
 	LD	A,0D0H
 	OUT	(0F0H),A
 	LD	A,(SAVEIT)
 	RET
 BADWRT	PUSH	DE
 	PUSH	BC
 	PUSH	HL
 	LD	HL,3C00H+896
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	'Disk WRITE ERROR!'
 	DB	0
 WRTCON	CALL	DISPLY
 	DB	'  <R>etry, <S>kip or <C>ancel ?'
 	DB	0
 WRTWT	PUSH	IY
 	CALL	2BH
 	POP	IY
 	OR	A
 	JR	Z,WRTWT
 	CP	'R'
 	SCF
 	JR	Z,GOBACK
 	CP	'S'
 	JR	Z,SKIP
 	CP	'C'
 	JP	Z,ERRORD
 	JR	WRTWT
 SKIP	SCF
 	CCF
 	POP	HL
 	POP	BC
 	INC	B
 	PUSH	BC
 	PUSH	HL
 GOBACK	PUSH	AF
 	CALL	DISPLY
 	DW	1E1DH
 	DB	0
 	POP	AF
 	POP	HL
 	POP	BC
 	POP	DE
 	RET
 BADRD	PUSH	DE
 	PUSH	BC
 	PUSH	HL
 	LD	HL,3C00H+896
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	'Disk READ ERROR!'
 	DB	0
 	JR	WRTCON
 VERIFY	LD	A,(FLAG2)
 	CP	'N'
 	JP	Z,COPBYE	;UPDATE
 	XOR	A
 	CALL	GOTRK
 	LD	DE,1
 DEN02	EQU	$-2
 VERLP	LD	BC,BUFFER
 	LD	A,D
 	LD	(IX),A
 	CALL	WHHEAD
 V11	CALL	READ
 	CALL	NZ,BADRD
 	JR	C,V11
 	INC	E
 	LD	A,E
 	SUB	19
 DEN13	EQU	$-1
 	JR	NZ,V11
 	LD	E,1
 DEN23	EQU	$-1
 	INC	D
 V12	LD	A,80
 	CP	D
 	JP	Z,COPBYE	;UPDATE
 	CALL	STEPIN
 	JR	VERLP
 COPBYE	LD	HL,3C00H+896
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'Routine Complete.  <ENTER> to restart. '
 	DB	0
 	CALL	O40H
 	CP	'0'
 	JP	NZ,ENTRY
 	HALT
 	JP	0
 FMTTR	LD	HL,(COUNT)
 	LD	D,18
 DEN41	EQU	$-1
 	CALL	DIV16
 	LD	A,E
 	ADD	A,5
 	LD	B,A
 FORMLP	PUSH	BC
 	CALL	FORMAT
 	POP	BC
 	DJNZ	FORMLP
 	RET
 FORMAT	LD	A,80
 	LD	B,(IX+2)
 	CP	B
 	RET	Z
 	LD	A,B
 	CALL	GOTRK
 	LD	A,(IX+2)
 	OUT	(0F1H),A
 	INC	(IX+2)
 	LD	A,(IX+2)
 	DEC	A
 	CALL	ASCII
 	LD	(FTR),BC
 	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DB	1DH
 	DB	'Formatting Track '
 FTR	DB	'00.                   '
 	DB	0
 	LD	HL,5200H
 	CALL	BUILDTRK
 	CALL	SELECT
 	IN	A,(0F0H)
 	BIT	6,A
 	JP	NZ,DERROR
 TRYWRTG	CALL	WRITTR
 	RET	Z
 	JR	TRYWRTG
 WRITTR	LD	BC,5200H
 	LD	A,0F0H
 	LD	(TYPE),A
 	LD	D,(IX)
 	CALL	SELECT0
 	JP	W0
 ERMSG2	DB	0DH
 	DB	'Transfer rate TOO FAST !'
 	DB	0
 	JP	ERRORD
 ASCII	LD	C,30H
 ASCII1	SUB	0AH
 	JR	C,ASCII2
 	INC	C
 	JR	ASCII1
 ASCII2	ADD	A,3AH
 	LD	B,A
 	RET
 DIV16	PUSH	IX
 	LD	A,L
 	LD	L,H
 	LD	H,0
 	LD	E,0
 	LD	B,16
 	LD	IX,0
 LOOP	ADD	HL,HL
 	RLA
 	JP	NC,LOOP1
 	INC	L
 LOOP1	ADD	IX,IX
 	INC	IX
 	OR	A
 	SBC	HL,DE
 	JP	NC,CONT
 	ADD	HL,DE
 	DEC	IX
 CONT	DJNZ	LOOP
 	PUSH	IX
 	POP	DE
 	POP	IX
 	RET
 IFGOOD	LD	A,40
 	LD	(TRACKS),A
 	DEC	A
 	SLA	A
 	CALL	GOTRK
 	LD	A,39
 	OUT	(0F1H),A
 	LD	D,A
 	LD	E,1
 DEN24	EQU	$-1
 GOODLP	LD	BC,BUFFER
 	CALL	READ
 	JR	NZ,TRY35
 	INC	E
 	LD	A,E
 	CP	19
 DEN14	EQU	$-1
 	JR	NZ,GOODLP
 	JR	GOODCN
 TRY35	LD	A,35
 	LD	(TRACKS),A
 	DEC	A
 	SLA	A
 	CALL	GOTRK
 	LD	A,34
 	OUT	(0F1H),A
 	LD	D,A
 	LD	E,1
 DEN25	EQU	$-1
 GOODL1	LD	BC,BUFFER
 	CALL	READ
 	JP	NZ,NOTIT
 	INC	E
 	LD	A,E
 	CP	19
 DEN15	EQU	$-1
 	JR	NZ,GOODL1
 GOODCN	LD	A,(TRACKS)
 	CALL	ASCII
 	LD	(MGG2),BC
 	LD	HL,3C00H+512-64
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'**  '
 MGG2	DB	'00 Tracks assumed  **'
 	DB	0
 	XOR	A
 	CALL	GOTRK
 	CALL	RESTOR
 	CALL	STEPIN
 	LD	D,1
 	LD	E,1
 DEN26	EQU	$-1
 GODLP1	LD	BC,BUFFER
 	LD	A,1
 	OUT	(0F1H),A
 	CALL	READ
 	JR	Z,MB80
 	RET
 NOTIT	LD	(ERRCODE),A
 	LD	A,(TRACKS)
 	DEC	A
 	CALL	ASCII
 	LD	(VVTT),BC
 	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'Cannot verify track '
 VVTT	DB	'00.'
 	DB	0
 	LD	A,0
 ERRCODE	EQU	$-1
 	POP	HL
 	JP	ERRORD
 MB80	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	'Diskette may already have 80 Tracks.  <ENTER> or X to abort. '
 	DB	0
 	CALL	O40H
 	CP	'X'
 	JP	Z,ENTRY
 	LD	HL,3C00H+832
 	LD	(4020H),HL
 	CALL	DISPLY
 	DW	1E1DH
 	DB	0
 	RET
 CHKSUM	LD	DE,RANDY
 	LD	HL,0
 	LD	A,44
 CHKLP	PUSH	AF
 	LD	A,(DE)
 	INC	DE
 	LD	C,A
 	LD	B,0
 	ADD	HL,BC
 	POP	AF
 	DEC	A
 	JR	NZ,CHKLP
 	LD	BC,3476
 	OR	A
 	SBC	HL,BC
 	RET	Z
 	LD	HL,4000H
 	LD	DE,4001H
 	LD	BC,0
 	LD	(HL),'?'
 	LDIR
 	HALT
 O40Z	LD	A,14
 	PUSH	IY
 	PUSH	DE
 	CALL	33H
 	POP	DE
 	POP	IY
 	RET
 O40H	CALL	O40Z
 	PUSH	IY
 	PUSH	DE
 	CALL	2BH
 	POP	DE
 	POP	IY
 	OR	A
 	JR	Z,O40H+3
 OK0	PUSH	HL
 	PUSH	AF
 	LD	A,15
 	CALL	O40Z+2
 	POP	AF
 	LD	HL,(4020H)
 	CALL	UCASE
 	LD	(HL),A
 	POP	HL
 	RET
 UCASE	CP	60H
 	RET	C
 	AND	5FH
 	RET
 DSKSLO	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 DSKSLO2	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 	RET
 R1	LD	(BUFFSAVE),BC
 	LD	(SECSAVE),DE
 	CALL	DRVSETUP
 	RET	NZ
 	LD	BC,0F3H
 	CALL	SELECT
 	LD	D,A
 	LD	A,9DH
 	LD	(MASK),A
 	LD	HL,IORET
 	LD	(404AH),HL
 	LD	A,0C3H
 	LD	(4049H),A
 	DI
 	LD	A,0C0H
 	OUT	(0E4H),A
 	LD	E,2
 	LD	HL,0
 BUFFSAVE	EQU	$-2
 	LD	A,80H
 	OUT	(0F0H),A
 	CALL	DSKSLO
 R100	IN	A,(0F0H)
 	AND	E
 	JR	Z,R100
 	INI
 	LD	A,D
 	OR	40H
 R101	OUT	(0F4H),A
 	INI
 	JP	R101
 IORET	POP	HL
 	LD	HL,NMIRET
 	LD	(404AH),HL
 	XOR	A
 	OUT	(0E4H),A
 	LD	BC,(BUFFSAVE)
 	INC	B
 	CALL	DSKSLO2
 	IN	A,(0F0H)
 	LD	(RESULT),A
 	AND	0
 MASK	EQU	$-1
 	LD	DE,0
 SECSAVE	EQU	$-2
 	RET	Z
 	PUSH	AF
 	LD	A,0D0H
 	OUT	(0F0H),A
 	DEC	B
 	POP	AF
 	RET
 NMIRET	RETN
 DRVSETUP	CALL	SELECT
 	LD	A,D
 	OUT	(0F3H),A
 	LD	A,(SPBYTE)
 	AND	3
 	OR	18H
 	OUT	(0F0H),A
 	CALL	DSKSLO
 DRVS1	IN	A,(0F0H)
 	BIT	0,A
 	JR	NZ,DRVS1
 	AND	18H
 	PUSH	AF
 	LD	A,E
 	OUT	(0F2H),A
 	POP	AF
 	RET
 W1	CALL	DRVSETUP
 	RET	NZ
 	LD	(BUFFSAVE),BC
 	LD	BC,0F3H
 	LD	(SECSAVE),DE
 	CALL	SELECT
 	OR	40H
 	LD	D,A
 	LD	A,0FDH
 	LD	(MASK),A
 	LD	HL,IORET
 	LD	(404AH),HL
 	LD	A,0C3H
 	LD	(4049H),A
 	DI
 	LD	A,0C0H
 	OUT	(0E4H),A
 	LD	E,2
 	LD	HL,(BUFFSAVE)
 	LD	A,(TYPE)
 	OUT	(0F0H),A
 	CALL	DSKSLO
 WR100	IN	A,(0F0H)
 	AND	E
 	JR	Z,WR100
 	OUTI
 	LD	B,64H
 	DJNZ	$
 	LD	A,D
 WR101	OUT	(0F4H),A
 	OUTI
 	JP	WR101
 HEXCV	LD	C,A
 	SRL	A
 	SRL	A
 	SRL	A
 	SRL	A
 	CALL	HEXTST
 	LD	L,A
 	LD	A,C
 	AND	0FH
 	CALL	HEXTST
 	LD	H,A
 	RET
 HEXTST	ADD	A,30H
 	CP	3AH
 	RET	M
 	ADD	A,7
 	RET
 ORDNEW	PUSH	BC
 	PUSH	DE
 	PUSH	HL
 	EX	DE,HL
 	LD	B,3
 	DEC	C
 	LD	A,(DENSITY)
 	OR	A
 	JR	Z,ORDNEW1
 	LD	B,4
 ORDNEW1	PUSH	BC
 	LD	A,(HL)
 	PUSH	HL
 	INC	HL
 ORDNEW2	LD	E,(HL)
 	LD	(HL),A
 	LD	A,E
 	INC	HL
 	DEC	C
 	JR	NZ,ORDNEW2
 	POP	HL
 	LD	(HL),A
 	POP	BC
 	DJNZ	ORDNEW1
 	POP	HL
 	POP	DE
 	POP	BC
 	RET
 BUILDTRK	LD	A,(DENSITY)
 	LD	HL,ORDER
 	OR	A
 	JR	Z,GOTORD
 	LD	HL,DORDER
 GOTORD	LD	C,(HL)
 	INC	HL
 	LD	E,(HL)
 	INC	HL
 	LD	D,(HL)
 	INC	HL
 	CALL	ORDNEW
 	PUSH	DE
 	LD	DE,5200H
 	EX	DE,HL
 	CALL	MOVEIN
 	LD	(DESVE),DE
 SECLP	CALL	MOVEIN
 	CALL	MOVEIN
 	LD	(HL),0FEH
 	INC	HL
 	LD	A,(IX)
 	LD	(HL),A
 	INC	HL
 	LD	(HL),0
 	INC	HL
 	EX	(SP),HL
 	LD	A,(HL)
 	INC	HL
 	EX	(SP),HL
 	LD	(HL),A
 	INC	HL
 	LD	(HL),1
 	INC	HL
 	LD	(HL),0F7H
 	INC	HL
 	CALL	MOVEIN
 	CALL	MOVEIN
 	CALL	MOVEIN
 	LD	(HL),0FBH
 	INC	HL
 	LD	A,0
 	CALL	FILL
 	LD	(HL),0F7H
 	INC	HL
 	CALL	MOVEIN
 	LD	DE,0
 DESVE	EQU	$-2
 	DEC	C
 	JR	NZ,SECLP
 	INC	SP
 	INC	SP
 	DEC	DE
 	LD	A,(DE)
 	JP	FILL
 ORDER	DB	10
 	DW	ORDERS
 	DB	1FH,0FFH
 	DB	3,0
 	DB	3,0
 	DB	0BH,0FFH
 	DB	3,0
 	DB	3,0
 	DB	0BH,0FFH
 DORDER	DB	18
 ORDERW	DW	ORDERD
 	DB	3EH,4EH
 	DB	0CH,0
 	DB	3,0F5H
 	DB	16H,4EH
 	DB	0CH,0
 	DB	3,0F5H
 	DB	16H,4EH
 ORDERS	DB	0,5,1,6,2,7,3,8,4,9
 ORDERD	DB	1,7,13,2,8,14,3,9,15
 	DB	4,10,16,5,11,17,6,12,18
 ORDERD2	DB	0,6,12,1,7,13,2,8,14
 	DB	3,9,15,4,10,16,5,11,17
 MOVEIN	LD	A,(DE)
 	INC	DE
 	LD	B,A
 	LD	A,(DE)
 	INC	DE
 FILL	LD	(HL),A
 	INC	HL
 	DJNZ	FILL
 	RET
 DENSETUP	LD	A,(DENSITY)
 	OR	A
 	JR	NZ,DODBL
 	LD	DE,0
 	CALL	SET01
 	LD	A,10
 	CALL	SET02
 	LD	A,0
 	CALL	SET03
 	LD	A,9
 	JR	SET04
 DODBL	PUSH	AF
 	LD	A,80H
 	LD	(DENSITY),A
 	POP	AF
 	CP	'A'
 	LD	HL,ORDERD
 	LD	(ORDERW),HL
 	JR	Z,DODBLA
 	LD	DE,1
 	CALL	SET01
 	LD	A,19
 	CALL	SET02
 	LD	A,1
 	CALL	SET03
 	LD	A,18
 	JR	SET04
 DODBLA	LD	DE,0
 	LD	HL,ORDERD2
 	LD	(ORDERW),HL
 	CALL	SET01
 	LD	A,18
 	CALL	SET02
 	LD	A,0
 	CALL	SET03
 	LD	A,19
 SET04	LD	(DEN41),A
 	RET
 SET01	LD	(DEN01),DE
 	LD	(DEN02),DE
 	RET
 SET02	LD	(DEN11),A
 	LD	(DEN12),A
 	LD	(DEN13),A
 	LD	(DEN14),A
 	LD	(DEN15),A
 	RET
 SET03	LD	(DEN21),A
 	LD	(DEN22),A
 	LD	(DEN23),A
 	LD	(DEN24),A
 	LD	(DEN25),A
 	LD	(DEN26),A
 	RET
 W0	LD	(BUFFSAVE),BC
 	LD	BC,0F3H
 	CALL	SELECT
 	OR	40H
 	LD	D,A
 	LD	A,0FDH
 	LD	(MASK),A
 	LD	HL,IORET
 	LD	(404AH),HL
 	LD	A,0C3H
 	LD	(4049H),A
 	DI
 	LD	A,0C0H
 	OUT	(0E4H),A
 	LD	E,2
 	LD	HL,(BUFFSAVE)
 	LD	A,0F0H
 	OUT	(0F0H),A
 	CALL	DSKSLO
 W0A	IN	A,(0F0H)
 	AND	E
 	JP	Z,W0A
 	OUTI
 W0B	IN	A,(0F0H)
 	AND	E
 	JP	Z,W0B
 	OUTI
 	LD	A,D
 W0C	OUT	(0F4H),A
 	OUTI
 	JP	W0C
 	END	START
LD	A,0F0H
 	OUT	(0F0H),A
 	CALL	DSKSLO
 W0A	IN	A,(0F0H)
 	AND	E
 	JP	Z,W0A
 	OUTI
 W