SCOTT4 ;		* * * * * * * * * * * * *
 ;		*  Program by Kim Watt  *
 ;		* Breeze Computing Inc. *
 ;		*     P.O. Box  1013    *
 ;		* Berkley, Mich.  48072 *
 ;		*    (313)  288-9422    *
 ;		* * * * * * * * * * * * *
 ;
 ;
 ;
 	ORG	6000H
 ENTRY	DI
 STACK	EQU	6000H		;BELOW INTERCEPT
 STRING	EQU	8AA3H		;INPUT BUFFER
 	LD	SP,STACK	;SET STACK
 ;  SPECIFY WHICH ADVENTURES ARE ON THIS DISK
 ;	USE 0 IF SPOT NOT NEEDED
 ;	MAY BE ANY NUMBER FROM 1 - 99
 	LD	A,1		;ADVENTURE 1
 	LD	(84B4H),A
 	LD	A,2		;ADVENTURE 2
 	LD	(84B5H),A
 	LD	A,3		;ADVENTURE 3
 	LD	(84B6H),A
 	LD	A,4		;ADVENTURE 4
 	LD	(84B7H),A
 	LD	A,0C3H		;"JUMP" OPCODE
 	LD	(4424H),A	;OPEN VECTOR
 	LD	HL,OPEN
 	LD	(4425H),HL
 	LD	(4428H),A	;CLOSE VECTOR
 	LD	HL,CLOSE
 	LD	(4429H),HL
 	LD	(4436H),A	;READ VECTOR
 	LD	HL,READ
 	LD	(4437H),HL
 	LD	(443CH),A	;VERIFY VECTOR
 	LD	(443DH),HL
 	LD	(402DH),A	;DOS ENTRY
 	LD	HL,DOS
 	LD	(402EH),HL
 	LD	(4409H),A	;ERROR MESSAGE DISPLAY
 	LD	HL,ERROR
 	LD	(4491H),HL
 	LD	(4490H),A	;"BUG" IN ADVENTURE
 	LD	(440AH),HL
 	LD	(7494H),A	;ADVENTURE KEYBRD DRIVER
 	LD	HL,GETSTR
 	LD	(7495H),HL	;INTERCEPT TO FIX IT
 	LD	(84E3H),A	;MUST SLOW DOWN DRIVE
 	LD	HL,SLOWUP
 	LD	(84E4H),HL
 	LD	(7BA0H),A	;SAVE GAME
 	LD	HL,SAVGAM
 	LD	(7BA1H),HL
 	LD	(77CFH),A	;RESTORE PREVIOUS GAME
 	LD	HL,PREVGM
 	LD	(77D0H),HL
 	LD	A,0F3H		;"DI" OPCODE
 	LD	(84C8H),A	;DISABLE INTERRUPTS
 	LD	A,0C9H		;"RETURN" OPCODE
 	LD	(8755H),A	;NOT NEEDED
 	LD	(4420H),A	;NOT NEEDED
 	LD	(4439H),A	;NOT NEEDED
 	LD	HL,XENTER	;ENTER KEY WAIT ROUTINE
 	LD	(70CAH),HL	;NO INPUT ON TITLE PAGE
 	LD	HL,7134H	;PUT ZIP CODE WHERE
 	LD	(HL),33H	;	"PHONE" WAS
 	INC	HL
 	LD	(HL),32H
 	INC	HL
 	LD	(HL),37H
 	INC	HL
 	LD	(HL),35H
 	INC	HL
 	LD	(HL),30H
 	LD	HL,NOCLR
 	LD	(7060H),HL	;DON'T CLEAR SCREEN
 	LD	HL,0		;NOP'S
 	LD	(89F4H),HL	;DON'T ASK FOR NAME
 	LD	(89F5H),HL	;DON'T DISPLAY
 	LD	HL,NONAM	;DON'T GO KEYBOARD
 	LD	(8A05H),HL
 	LD	A,'3'		;VERSION 8.3
 	LD	(70E7H),A
 	LD	A,'Y'		;CAPITALIZE FIRST LETTER
 	LD	(71A6H),A	; IN "YOU"
 	LD	HL,739AH	;FIX MISSPELLED "WRITING"
 	LD	DE,7399H	;BY SHIFTING ENTIRE LINE
 	LD	BC,35		;TO THE LEFT BY 1 CHAR.
 	LDIR			;MOVE 'EM
 	DEC	HL
 	LD	(HL),20H	;SPACE TO THE END
 	LD	HL,8A4BH
 	LD	(HL),'9'	;ADVENTURE (1-99)
 	INC	HL
 	LD	(HL),29H
 	INC	HL
 	LD	(HL),3FH
 	INC	HL
 	LD	(HL),20H
 	XOR	A
 	LD	(8A4FH),A	;TERMINATOR
 ;	TRACK 0 SECTOR 1 IS NOW SECTOR 148
 ;	VERIFY THAT SECTOR EXISTS. IF NOT, DON'T CONTINUE
 	LD	DE,0094H	;TRACK 0 SECTOR 94H
 	LD	BC,4200H	;INPUT BUFFER
 	LD	HL,1		;1 SECTOR
 	CALL	READ2
 	JP	Z,7050H		;GO ADVENTURE DRIVER
 CATCH	JR	CATCH		;SECTOR NOT FOUND. HALT
 ;  FOLLOWING ROUTINE WILL TEST REQUESTED ADVENTURE
 ;	WITH WHAT IS AVAILABLE ON DISK AND SET
 ;	UP POINTERS IF FOUND
 OPEN	LD	HL,8AA3H	;BUFFER START
 	LD	(84ACH),HL	;PUT INTO DCB
 	CALL	VALUE		;CONVERT TO NUMERIC
 	LD	A,E		;E HAS VALUE
 	LD	HL,84B4H	;AVAILABLE ADVENTURES
 	LD	DE,0700H	;TRACK/SECTOR
 	LD	(84C6H),DE	;SAVE IT
 	CP	(HL)		;COMPARE REQUEST TO AVAIL
 	RET	Z		;THAT ONE IS OK
 	INC	HL		;NEXT ADVENTURE ON DISK
 	LD	DE,0E00H	;TRACK/SECTOR OF DATA
 	LD	(84C6H),DE	;SAVE FOR JUMP IF TEST +
 	CP	(HL)		;IS IT THERE ?
 	RET	Z		;THAT ONE IS OK
 	INC	HL		;POINT TO 3rd ADVENTURE
 	LD	DE,1500H	;WHERE DATA IS ON DISK
 	LD	(84C6H),DE	;SAVE IT
 	CP	(HL)		;IS THIS THE ONE ?
 	RET	Z		;THAT'S IT
 	INC	HL		;4th ADVENTURE
 	LD	DE,1C00H	;DATA LOCATION ON DISK
 	LD	(84C6H),DE
 	CP	(HL)
 	RET	Z
 BAD	LD	A,0FFH
 	OR	A		;NOT ZERO = NOT FOUND
 	RET			;BACK TO ADVENTURE
 NONAM	XOR	A
 	LD	(8AA3H),A
 	RET
 NOCLR	EXX			;DON'T CLEAR SCREEN
 	LD	HL,15360+320
 	LD	(8C23H),HL	;CURSOR POSITION
 	LD	HL,3C80H	;BOTTOM OF UPPER SCREEN
 	LD	(8BC9H),HL	;SAVE IT FOR DISPLAY DVR.
 	EXX
 	RET			;DONE WITH INTERCEPT
 CLOSE	RET			;NOT NEEDED ANYMORE
 ERROR	RET			;NOT NEEDED
 DOS	LD	HL,DOSMSG
 	CALL	7036H
 	JR	WAIT
 DOSMSG	DEFB	0DH
 	DEFM	'Insert a diskette containing DOS into Drive 0.'
 	DEFB	0DH
 	DEFM	'Press <ENTER> when ready ! '
 	DEFB	0
 WAIT	LD	A,(3840H)	;ENTER KEY ADDRESS
 	BIT	0,A		;PRESSED ?
 	JP	NZ,0		;RE-BOOT
 	JR	WAIT		;WAIT SOME MORE
 DISPLY	POP	DE		;GET DATA ADDRESS
 LOIOP2	LD	A,(DE)		;GET A BYTE
 	INC	DE		;BUMP POINTER
 	OR	A		;SET FLAGS
 	JR	Z,DONEX		;TERMINATOR REACHED
 	CP	20H		;CONTROL CHARACTER ?
 	JR	C,DISCTL	;USE ROM ROUTINE
 	LD	HL,(4020H)	;GET CURSOR POSITION
 	LD	(HL),A		;WRITE THE BYTE
 	CP	(HL)		;STILL THERE ?
 	JR	Z,DISOK		;LOWER CASE MOD INSTALLED
 	SUB	20H		;MAKE IT UPPER CASE
 	LD	(HL),A		;RE-WRITE THE BYTE
 DISOK	INC	HL		;BUMP VIDEO POINTER
 	LD	(4020H),HL	;UPDATE CURSOR
 	JR	LOIOP2		;GET NEXT BYTE
 DISCTL	PUSH	DE		;MUST SAVE
 	PUSH	IY		;	DE & IY
 	CALL	33H		;WRITE BYTE
 	POP	IY		;RESTORE
 	POP	DE
 	JR	LOIOP2		;CURSOR IS UPDATED IN ROM
 DONEX	PUSH	DE		;RETURN ADDRESS
 	RET			;GO TO IT
 READ	PUSH	AF		;READ ADVENTURE DATA
 	PUSH	BC
 	PUSH	DE
 	PUSH	HL
 RDGO	LD	BC,8AA3H	;BUFFER ADDRESS
 	LD	DE,(84C6H)	;TRACK/SECTOR OF DATA
 	LD	HL,1		;ONE SECTOR
 	CALL	DREAD		;READ THE DISK
 	JR	NZ,RDGO		;BAD READ, TRY AGAIN
 	LD	(84C6H),DE	;SAVE NEXT TRACK/SECTOR
 	POP	HL		;RESTORE STACK
 	POP	DE
 	POP	BC
 	POP	AF
 	RET			;DONE
 ;  ROUTINE TO READ MULTIPLE SECTORS INTO RAM
 ;	 L = # OF SECTORS TO READ
 ;	DE = START TRACK/SECTOR
 ;	BC = LOAD ADDRESS
 ;	ZERO FLAG SET IF READ IS SUCCESSFUL
 DREAD	PUSH	HL		;SAVE LOOP COUNT
 READLP	CALL	READ2		;2 TRIES FOR SUCCESS
 	JP	NZ,DERROR	;DISK ERROR ROUTINE
 	INC	E		;NEXT SECTOR
 	LD	A,E		;PASS TO ACCUM.
 	SUB	0AH		;10 SECTORS ?
 	JR	NZ,NEXTGO	;MORE SECTORS
 	LD	E,A		;0 TO E
 	INC	D		;NEXT TRACK
 NEXTGO	POP	HL		;RESTORE COUNT
 	DEC	L		;REDUCE IT
 	JR	NZ,DREAD	;READ SOME MORE
 	RET			;DONE
 READ2	PUSH	BC		;SAVE LOAD ADDRESS
 	CALL	READ1		;READ IT ONE TIME
 	POP	BC		;RESTORE LOAD ADDRESS
 	PUSH	BC		;READ TWICE ANYWAY NOW
 	CALL	READ1		;READ 1 MORE TIME
 	POP	HL		;LOAD ADDRESS
 	RET	Z		;GOOD AFTER 1 TRY
 	LD	B,H		;RESET LOAD ADDRESS
 	LD	C,L		;	INTO BC
 READ1	LD	(37EEH),DE	;TRACK/SECTOR
 	CALL	SELECT		;SELECT DRIVE
 	LD	HL,37ECH	;COMMAND REGISTER
 	LD	(HL),1BH	;SEEK COMMAND
 	PUSH	AF		;8 MS DELAY
 	POP	AF
 	PUSH	AF
 	POP	AF
 READBZ	LD	A,(HL)		;GET STATUS BYTE
 	RRCA			;SHIFT BUSY BIT
 	JR	C,READBZ	;NOT FOUND YET
 	LD	A,88H		;READ SECTOR COMMAND
 	LD	(HL),A		;PASS TO CONTROLLER
 	PUSH	DE		;SAVE TRACK/SECTOR
 	LD	DE,37EFH	;DATA TRANSFER ADDRESS
 	PUSH	BC		;4 MORE MS DELAY
 	POP	BC
 	JR	RDTEST		;READ TEST
 RDDONE	RRCA			;SHIFT COMMAND DONE BIT
 	JR	NC,READOK	;NOT SET = DONE
 RDTEST	LD	A,(HL)		;GET STATUS
 	BIT	1,A		;VALID DATA PRESENT ?
 	JR	Z,RDDONE	;IS READ DONE ?
 	LD	A,(DE)		;GET THE VALID BYTE
 	LD	(BC),A		;PUT INTO LOAD BUFFER
 	INC	BC		;POINT TO NEXT
 	JR	RDTEST		;ANY MORE DATA ?
 READOK	LD	A,(HL)		;GET STATUS/RESET LATCH
 	POP	DE		;RESTORE TRK/SEC
 	AND	1CH		;SET STATUS FLAGS
 	RET	Z		;READ OK
 	LD	(HL),0D0H	;FORCE INTERRUPT
 	RET			;Z FLAG IS RESET/ERROR
 ;  ROUTINE TO WRITE DISK SECTORS
 ;	 L = # OF SECTORS TO WRITE
 ;	DE = START TRACK/SECTOR
 ;	BC = DATA ADDRESS
 ;	ZERO FLAG SET IF WRITE IS SUCCESSFUL
 DWRITE	PUSH	HL		;SAVE LOOP COUNT
 ;  SEE SIMILAR REMARKS FOR READ SECTORS
 WRITEL	CALL	WRITE2
 	JP	NZ,DERROR	;DISK ERROR ROUTINE
 	POP	HL
 	DEC	L
 	RET	Z
 	PUSH	HL
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,WRITEL
 	LD	E,A
 	INC	D
 	JR	WRITEL
 WRITE2	PUSH	BC
 	CALL	WRITE1
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 WRITE1	LD	(37EEH),DE
 	CALL	SELECT		;SELECT DRIVE
 	LD	HL,37ECH
 	LD	(HL),1BH	;SEEK COMMAND
 	PUSH	AF
 	POP	AF
 	PUSH	AF
 	POP	AF
 WRITEZ	LD	A,(HL)
 	RRCA
 	JR	C,WRITEZ
 	LD	A,0ABH		;WRITE AS DELETED DATA
 	LD	(HL),A		;PASS TO CONTROLLER
 	PUSH	DE
 	LD	DE,37EFH
 	PUSH	BC
 	POP	BC
 	JR	WRITET
 WRITED	RRCA
 	JR	NC,WRITEO
 WRITET	LD	A,(HL)
 	BIT	1,A
 	JR	Z,WRITED
 	LD	A,(BC)
 	LD	(DE),A
 	INC	BC
 	JR	WRITET
 WRITEO	LD	A,(HL)
 	AND	1CH		;SET STATUS FLAGS
 	POP	DE
 	RET	Z		;ZERO = GOOD WRITE
 	LD	(HL),0D0H	;FORCE INTERRUPT
 	RET			;FLAGS ARE SET
 ;  THIS ROUTINE WILL CATCH ALL DISK ERRORS
 ;	A WILL CONTAIN LAST STATUS BYTE
 DERROR	BIT	2,A		;DATA LOST FLAG
 	LD	HL,ERMSG1	;ERROR MESSAGE
 	JR	NZ,ERSHOW	;SHOW IS THAT'S IT
 	BIT	4,A		;TRACK/SECTOR NOT FOUND
 	LD	HL,ERMSG2
 	JR	NZ,ERSHOW
 	BIT	3,A		;ERROR IN DATA FIELD
 	LD	HL,ERMSG3
 	JR	NZ,ERSHOW
 	LD	HL,ERMSG4
 ERSHOW	CALL	7036H
 	LD	HL,ERMSGO
 	CALL	7036H
 	JP	WAIT
 ERMSGO	DEFB	0DH
 	DEFM	'Press <ENTER> to continue ! '
 	DEFB	0
 SHOW	PUSH	HL
 	JP	DISPLY
 ERMSG1	DEFB	0DH
 	DEFM	'DATA LOST during disk I/O operation.'
 	DEFB	0
 	RET
 ERMSG2	DEFB	0DH
 	DEFM	'Track/Sector NOT FOUND during disk'
 	DEFM	' I/O operation.'
 	DEFB	0
 	RET
 ERMSG3	DEFB	0DH
 	DEFM	'Error in DATA ID FIELD on diskette.'
 	DEFB	0
 	RET
 ERMSG4	DEFB	0DH
 	DEFM	'UNIDENTIFIED ERROR has been detected.'
 	DEFB	0
 	RET
 SELECT	LD	A,1		;SELECT DRIVE 0
 	LD	(37E1H),A	;PASS TO CONTROLLER
 	RET			;DONE WITH SELECT
 LENGTH	DEFB	0		;LENGTH OF INPUT STRING
 REQLEN	DEFB	0		;REQUESTED LENGTH
 CHAR	DEFB	0		;LAST INPUT CHARACTER
 GETSTR	PUSH	AF		;MUST SAVE
 	LD	A,18		;18 INPUT CHAR ALLOWED
 	LD	B,A		;PASS TO LOOP COUNTER
 SPEC11	LD	(REQLEN),A	;SAVE IT
 	LD	HL,(8C23H)	;GET BEGINNING CURSOR POS
 	LD	(4020H),HL	;SAVE IT
 NEWST	LD	HL,(4020H)	;GET IT FOR RESTART
 	PUSH	HL		;PASS TO DE
 	POP	DE
 	INC	DE		;POINT TO NEXT
 	LD	BC,18		;18 SPACES TO ERASE LINE
 	LD	(HL),20H
 	LDIR
 	LD	HL,(4020H)	;GET START CURSOR AGAIN
 	LD	(8C23H),HL	;RESTART
 	LD	DE,STRING	;POINT TO BUFFER
 	LD	A,(REQLEN)
 	LD	B,A
 	XOR	A		;FOR BUFFER
 LOOP15	LD	(HL),20H	;INTO VIDEO
 	LD	(DE),A		;INTO BUFFER
 	INC	DE		;	NEXT
 	INC	HL		;    TYPED INTO
 	DJNZ	LOOP15		;NEXT SPACE
 	XOR	A		;ZERO THE ACCUMULATOR
 	LD	(LENGTH),A	;INITIALIZE LENGTH
 	LD	HL,STRING	;SET POINTER TO BEGINNING
 ;					OF BUFFER AREA
 	LD	DE,(8C23H)	;GET CURSOR POSITION
 SCAN	LD	A,5DH		;CURSOR CHARACTER
 LOOP3	LD	(DE),A		;CURSOR ON
 LOOP2	LD	BC,500H
 LOOP1	PUSH	DE
 	PUSH	IY
 	CALL	2BH
 	POP	IY
 	POP	DE
 	OR	A
 	JR	NZ,GOTONE
 LOOPZZ	DEC	BC
 	LD	A,B
 	OR	C
 	JR	NZ,LOOPZZ
 	LD	A,(DE)
 	CP	5DH
 	JR	NZ,SCAN
 	LD	A,20H
 	JR	LOOP3
 ;  KEY PRESSED IS IN <A> REG.
 GOTONE	LD	(CHAR),A	;SAVE INPUT CHARACTER
 	CP	0DH		;IS IT A CARRIAGE RETURN
 	JP	Z,DONE		;GO IF IT IS
 	CP	8		;IS IT A BACKSPACE
 	JR	Z,BCKSPA	;SEE IF IT'S OK
 	CP	18H		;SHIFT LEFT ARROW
 	JR	Z,NEWST		;INITIALIZE IF YES
 	CP	20H		;SEE IF A NON-ALPHA KEY
 	JP	C,SCAN		;   WAS PRESSED
 	LD	A,(REQLEN)	;GET REQUESTED LENGTH
 	LD	B,A		;GIVE VALUE TO <B> REG.
 	LD	A,(LENGTH)	;GET CURRENT LENGTH
 	CP	B		;COMPARE VALUES
 	JR	NC,SCAN		;TOO MANY CHARACTERS
 ;  HERE THE NEW KEY IS DISPLAYED AND STORED IN <STRING>
 	LD	A,(CHAR)	;RESTORE INPUT CHARACTER
 	LD	(DE),A		;PUT IN ON VIDEO
 	LD	(HL),A		;PUT IT IN BUFFER
 	INC	DE		;INCREMENT <HL> AND <DE>
 	INC	HL		;    TABLE POINTERS
 	LD	(8C23H),DE	;NEW CURSOR POSITION
 	LD	A,(LENGTH)	;GET LENGTH
 	INC	A		;ADD 1
 	LD	(LENGTH),A	;SAVE VALUE
 	JR	SCAN		;GET NEXT KEY
 BCKSPA	LD	A,(LENGTH)	;GET CURRENT LENGTH
 	OR	A		;SET FLAGS
 	JR	Z,SCAN		;NO CHARACTERS IN BUFFER
 	DEC	A		;SUBTRACT 1
 	LD	(LENGTH),A	;NEW LENGTH
 	LD	A,20H		;CURSOR OFF CHAR.
 	LD	(DE),A		;CURSOR OFF
 	LD	(HL),A		;PUT SPACE IN BUFFER
 	DEC	HL		;DECREMENT BOTH
 	DEC	DE		;    TABLE POINTERS
 	LD	(8C23H),DE	;NEW CURSOR POSITION
 	JR	SCAN		;GET ANOTHER KEY
 DONE	LD	A,20H		;ASCII - SPACE
 	LD	(DE),A		;CURSOR OFF
 	LD	(HL),00H	;TERMINATOR
 	LD	A,(LENGTH)	;GET LENGTH
 	LD	B,A		;GIVE TO B REG.
 	LD	HL,(8C23H)
 	LD	A,0DH
 	CALL	7427H		;ADJUST DISPLAY
 	POP	AF		;RESTORE
 	RET			;DONE
 SLOWUP	CALL	7036H		;ORIGINAL DISPLAY INST.
 	CALL	SELECT		;SELECT DRIVE
 	LD	BC,0		;1 SECOND DELAY FOR
 	CALL	60H		;	MOTOR SPEED
 	JP	84E6H		;BACK TO ADVENTURE
 PREVMG	DEFM	'9 available areas.  Which one ? '
 	DEFB	0
 PREVGM	CALL	WHICH1		;GET WHICH ONE TO USE
 	JP	NZ,77BCH	;INVALID INPUT IF NZ
 	PUSH	DE
 	CALL	STATCK		;CHECK DISK STATUS
 	POP	DE
 	JP	NZ,77BCH	;NZ = DRIVE NOT READY
 	JP	OVERM
 WHICH1	LD	HL,PREVMG	;POINT TO MESSAGE
 	CALL	7036H		;ADVENTURE DISPLAY
 	CALL	GETSTR		;GET KEY INPUT
 	LD	A,(STRING)	;GET FIRST CHARACTER
 	SUB	30H		;REMOVE ASCII
 	JR	C,BADDZ		;LESS THAN 0
 	JR	Z,BADDZ		;0
 	CP	10
 	JR	NC,BADDZ	;MORE THAN 9
 	LD	C,2		;START WITH SECTOR 2
 COMLP1	DEC	A		;REDUCE REQUEST
 	JR	Z,COMOK1	;SECTOR FOUND
 	INC	C		;BUMP BY 2
 	INC	C
 	JR	COMLP1
 COMOK1	LD	A,C		;A HAS PROPER SECTOR
 	LD	D,0		;START WITH TRACK 0
 	LD	E,A		;SECTOR REQUESTED
 PRLP11	SUB	0AH		;-10
 	JR	C,PRLP22	;LESS THAN 10 FOR SECTOR
 	INC	D		;BUMP TRACK
 	LD	E,A		;NEW SECTOR
 	JR	PRLP11		;GO AGAIN
 PRLP22	XOR	A
 	RET
 BADDZ	LD	A,0FFH
 	OR	A
 	RET
 ; DE HAS TRACK SECTOR
 OVERM	CALL	SELECT		;SELECT DRIVE
 	LD	BC,0		;WAIT 1 SEC FOR MOTOR
 	CALL	60H
 	LD	BC,8AA3H	;BUFFER
 	LD	HL,1		;ONE SECTOR
 	CALL	DREAD		;READ THE SECTORS
 	LD	(77E7H),DE	;SAVE TRACK SECTOR
 	LD	DE,(8BC7H)
 	LD	HL,(8AA3H)
 	SCF
 	CCF
 	SBC	HL,DE
 	JR	NZ,PRLP33	;BAD ONE
 	LD	DE,8C37H
 	LD	HL,8AA5H
 	LD	BC,3CH
 	LDIR			;MOVE NEW DATA
 	LD	BC,8AA3H	;BUFFER
 	LD	HL,1		;ONE SECTOR
 	LD	DE,(77E7H)	;RESTORE TRACK/SECTOR
 	CALL	DREAD		;READ IT
 	JP	77FEH		;BACK TO ADVENTURE
 PRLP33	LD	HL,PRMSG3	;MESSAGE
 	CALL	7036H		;DISPLAY
 	JP	PREVGM		;TRY AGAIN
 PRMSG3	DEFM	'That game cannot be restored or has not been saved.'
 	DEFB	0DH
 	DEFB	0
 SAVGAM	CALL	WHICH1		;GET WHICH 1
 	JR	NZ,BADSV1	;BAD REQUEST
 	PUSH	DE
 	CALL	STATCK		;CHECK DISK STATUS
 	POP	DE		;RESTORE TRACK/SECTOR
 	JR	NZ,BADSV1
 	LD	(7BACH),DE	;SAVE TRACK/SECTOR
 	LD	HL,(8BC7H)
 	LD	(8AA3H),HL
 	LD	DE,8AA5H
 	LD	HL,8C37H
 	LD	BC,3CH
 	LDIR
 	CALL	SELECT
 	LD	BC,0
 	CALL	60H
 	LD	HL,1		;ONE SECTOR
 	LD	DE,(7BACH)	;TRACK SECTOR
 	LD	BC,8AA3H
 	CALL	DWRITE
 	JR	NZ,BADSV6	;DISK I/O ERROR
 	INC	E
 	LD	(7BACH),DE	;SAVE NEXT SECTOR
 	LD	HL,CONT11	;CONTINE POINT
 	LD	(7BD3H),HL	;PUT INTO PROGRAM
 	JP	7BB7H		;CONTINUE
 BADSV1	LD	HL,BADMS9	;MESSAGE
 	CALL	7036H		;DISPLAY IT
 	POP	IY
 	POP	IX
 	RET
 BADSV6	LD	HL,BADMG8
 	CALL	7036H
 	JR	BADSV1
 BADMG8	DEFM	'DISK ERROR !'
 	DEFB	0DH
 	DEFB	0
 STATCK	CALL	SELECT		;SELECT DRIVE
 	LD	A,0BH		;RESTORE BYTE
 	LD	(37ECH),A	;GO COMMAND
 	PUSH	AF		;SHORT WAIT FOR READY
 	POP	AF
 	PUSH	AF
 	POP	AF
 STATWT	CALL	SELECT		;RESELECT DRIVE
 	LD	A,(37ECH)	;GET STATUS
 	RRCA			;SHIFT OUT BUSY BIT
 	JR	C,STATWT	;WAIT SOME MORE
 	LD	BC,0		;WAIT 1 SECOND
 	CALL	60H
 	CALL	SELECT
 	LD	A,(37ECH)	;GET STATUS
 	LD	HL,ERMSG5	;DRIVE NOT READY
 	BIT	7,A
 	JP	NZ,BADXX
 	LD	HL,ERMSGC	;HEAD NOT OVER TRACK 0
 	BIT	2,A
 	JP	Z,BADXX
 	LD	HL,ERMSG6	;WRITE PROTECTED
 	BIT	6,A
 	JP	NZ,BADXX
 	LD	BC,00CDH
 	LD	HL,ERMSG8	;NO SYSTEM IN DRIVE
 TST1	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,BADXX
 	LD	A,(37ECH)
 	AND	2
 	JR	NZ,TST1
 	LD	BC,199DH
 	LD	HL,ERMSG9	;DOOR NOT CLOSED
 TST2	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,BADXX
 	LD	A,(37ECH)
 	AND	2
 	JP	Z,TST2
 	LD	DE,0
 	LD	BC,00BAH
 	LD	HL,ERMSG0	;NO DISK IN DRIVE
 TST3	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,BADXX
 	INC	DE
 	LD	A,(37ECH)
 	AND	2
 	JR	NZ,TST3
 	LD	BC,1720H
 	LD	HL,ERMSG9	;DOOR NOT CLOSED
 TST4	DEC	BC
 	LD	A,B
 	OR	C
 	JP	Z,BADXX
 	INC	DE
 	LD	A,(37ECH)
 	AND	2
 	JR	Z,TST4
 	LD	HL,0EACBH
 	ADD	HL,DE
 	LD	HL,ERMSG7	;HARD SECTORED
 	JP	NC,BADXX
 	XOR	A		;SET ZERO FLAG
 	RET			;CHECKS OUT OK
 BADXX	CALL	7036H		;DISPLAY ERROR TYPE
 	LD	A,0FFH
 	OR	A		;RESET ZERO FLAG FOR BAD
 	RET			;RETURN IN ERROR
 ERMSG5	DEFM	'Drive NOT READY !'
 	DEFB	0DH
 	DEFB	0
 ERMSG6	DEFM	'Diskette WRITE PROTECTED !'
 	DEFB	0DH
 	DEFB	0
 ERMSG7	DEFM	'Diskette is HARD SECTORED !'
 	DEFB	0DH
 	DEFB	0
 ERMSG8	DEFM	'NO DISKETTE in drive !'
 	DEFB	0DH
 	DEFB	0
 ERMSG9	DEFM	'DOOR NOT CLOSED on drive !'
 	DEFB	0DH
 	DEFB	0
 ERMSG0	DEFM	'NO DISKETTE in drive !'
 	DEFB	0DH
 	DEFB	0
 ERMSGC	DEFM	'Drive NOT IN SYSTEM !'
 	DEFB	0DH
 	DEFB	0
 BADMS9	DEFM	'Game was not saved !   Try again.'
 	DEFB	0DH
 	DEFB	0
 CONT11	LD	HL,1
 	LD	BC,8AA3H	;DATA ADDRESS
 	LD	DE,(7BACH)	;TRACK SECTOR
 	CALL	DWRITE		;WRITE THE DATA
 	RET			;ALL DONE
 ;  FOLLOWING ROUTINE USED TO FLASH CURSOR DURING
 ;	FIRST SCREEN.  ONLY ALLOW ENTER KEY INPUT.
 XENTER	LD	HL,3FFFH	;CURSOR POSITION
 XWAIT	LD	(HL),5DH	;CURSOR CHARACTER
 XW0	LD	BC,500H
 	CALL	2BH
 	CP	13
 	RET	Z
 XW1	DEC	BC
 	LD	A,B
 	OR	C
 	JR	NZ,XW1
 	LD	A,(HL)
 	CP	5DH
 	JR	NZ,XWAIT
 	LD	(HL),20H
 	JR	XW0
 VALUE	LD	E,0		;CONVERT ASCII TO NUMERIC
 VALLP	LD	A,(HL)		;GET A BYTE
 	INC	HL		;POINT TO NEXT
 	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
 	ORG	6F00H		;AUTHOR CREDIT
 	DEFB	0DH
 	DEFM	'THIS ADVENTURE "INTERCEPT" '
 	DEFB	0DH
 	DEFM	'WAS WRITTEN BY KIM WATT'
 	DEFB	0DH
 	DEFM	'COPYRIGHT (C) 1980'
 	DEFB	0DH
 	DEFM	'BREEZE COMPUTING INC.'
 	DEFB	0DH
 	DEFM	'P.O. BOX 1013'
 	DEFB	0DH
 	DEFM	'BERKLEY, MICH. 48072'
 	DEFW	0D0DH
 	DEFM	'THIS PROGRAM MAY NOT BE DUPLICATED WITHOUT'
 	DEFB	0DH
 	DEFM	'WRITTEN PERMISSION FROM THE AUTHOR'
 	DEFB	0DH
 	DEFB	0DH
 	END	ENTRY
P.O. BOX 1013'
 	DEFB	0DH
 	DEFM	'BERKLEY, MICH. 48072'
 	DEFW	0D0DH
 	DEFM	'THIS PROGRAM MAY NOT BE