*	OUT N
START	EQU $A800
MEMORY	EQU $A800

BUFR	EPZ $32
YTEMP	EPZ $34
ANZB	EPZ $35
SPACE	EPZ $36


COLCRS	EPZ $55
ROWCRS	EPZ $54


DDEVIC	EQU $0300
DUNIT	EQU $0301
DCOMND	EQU $0302

DSTATS	EQU $0303
DBYTLO	EQU $0308
DBYTHI	EQU $0309
DAUX1	EQU $030A
DAUX2	EQU $030B


ICCOM	EQU $0342
ICBAL	EQU $0344
ICBAH	EQU $0345
ICBLL	EQU $0348
ICBLH	EQU $0349
ICAUX1	EQU $034A

LINEPAR	EQU 2
LINECMD	EQU 3
LINEBUF	EQU 6


*VARIAB	EQU $0600
PMODE	EQU VARIAB+1
CMD	EQU PMODE+1
CURLINE	EQU CMD+1



CIOV	EQU $E456

*DBUFR	EQU START+$0E00
DBUFR	EQU $5000

*ASPI	EQU $A800

	ORG $2E0
	DFW PRGSTART


	ORG START+$0800,MEMORY+$0800

PRGSTART	KOPEN
	LDA #0
	STA BUFPOS


	CLBUF
	LDA #0
	STA PMODE
	LDA #1
	STA CMD

	COPYOUT
	PAROUT
	CMDOUT
	BUFOUT
	KEYBEF
	KCLOSE

	RTS

GOASPI	JMP ($0002)

COPYOUT	LDX #TCOPY:L
	LDY #TCOPY:H
	LDA #33
	CHROUT
	RTS

CLBUF	LDY #0
	TYA
CLB00	STA DBUFR,Y
	STA DBUFR+$100,Y
	STA DBUFR+$200,Y
	STA DBUFR+$300,Y
	STA DBUFR+$400,Y
	STA DBUFR+$500,Y
	STA DBUFR+$600,Y
	STA DBUFR+$700,Y
	INY
	BNE CLB00
	RTS


CLBUFO	CLBUF
	BUFOUT
	RTS

ESCAPE	PLA
	PLA
	RTS


CHID	TAX
	LDA CMD
	ASL
	ASL
	ASL
	ASL
	TAY
	TXA
	STA CMDTABLE,Y
	PAROUT
	RTS

CHID1	LDA #1
	BNE CHID

CHID2	LDA #2
	BNE CHID

CHID3	LDA #3
	BNE CHID

CHID4	LDA #4
	BNE CHID

CHID5	LDA #5
	BNE CHID

CHID6	LDA #6
	BNE CHID

CHID0	LDA #0
	BEQ CHID


CHCMD	STA CMD
	PAROUT
	CMDOUT
	RTS

CHCMD1	LDA #1
	BNE CHCMD

CHCMD2	LDA #2
	BNE CHCMD

CHCMD3	LDA #3
	BNE CHCMD

CHCMD4	LDA #4
	BNE CHCMD

CHCMD5	LDA #5
	BNE CHCMD

CHCMD6	LDA #6
	BNE CHCMD

CHCMD7	LDA #7
	BNE CHCMD

CHCMD8	LDA #8
	BNE CHCMD

CHCMD9	LDA #9
	BNE CHCMD

CHCMD0	LDA #0
	BEQ CHCMD


SCRESET	LDA #$70
	STA DDEVIC
	LDA #1
	STA DUNIT
	LDA #$40
	STA DSTATS
	LDA #4
	STA DCOMND

	GOASPI
	PAROUT
	RTS


EXECUTE	LDY #$0C
EXEC00	LDA DCBTMP,Y
	STA DDEVIC,Y
	DEY
	BPL EXEC00
	LDA CMD
	ASL
	ASL
	TAY
	LDA CDCBTBL+1,Y
	STA DSTATS
	LDA CDCBTBL+2,Y
	STA DBYTLO
	LDA CDCBTBL+3,Y
	STA DBYTHI
	TYA
	ASL
	ASL
	CLC
	ADC #CMDTABLE:L
	STA DAUX1
	LDA #CMDTABLE:H
	ADC #0
	STA DAUX2

	GOASPI

	LDA CMD
	ASL
	ASL
	ASL
	ASL
	TAY
	LDA CMDTABLE+2,Y
	CMP #$1B		;LOAD
	BNE EXEC10
	LDA CMDTABLE+6,Y
	EOR #%00000001
	STA CMDTABLE+6,Y
	SEC
	BCS EXEC30
EXEC10	CMP #$4B
	BNE EXEC30
	LDA CMDTABLE+10,Y
	EOR #%00000001
	STA CMDTABLE+10,Y

EXEC30	PAROUT
	CMDOUT
	BUFOUT
	RTS



CHMODE	LDY PMODE
	INY
	CPY #$3
	BNE CHM00
	LDY #0
CHM00	STY PMODE
	BUFOUT
	RTS




KBEF00	JSR KBEF08
KEYBEF	AKIN
	LDY #$FD
KBEF04	INY
	INY
	INY
	CPY #(BEFTBEND-BEFTBL)
	BEQ KEYBEF
	CMP BEFTBL,Y
	BNE KBEF04
	BEQ KBEF00

KBEF08	LDA BEFTBL+2,Y
	PHA
	LDA BEFTBL+1,Y
	PHA
	RTS



NEXTBLK	LDA CMD
	ASL
	ASL
	ASL
	ASL
	TAX
	LDA CMDTABLE+2,X
	CMP #$28
	BNE NXTBL20
	INC CMDTABLE+7,X
	BNE NXTBL04
	INC CMDTABLE+6,X
	BNE NXTBL04
	INC CMDTABLE+5,X
	BNE NXTBL04
	INC CMDTABLE+4,X
NXTBL04	CMDOUT
	JMP EXECUTE

NXTBL20	CMP #$48
	BNE NXTBL30
	INC CMDTABLE+6,X
	INC CMDTABLE+9,X
	CMDOUT
	EXECUTE

NXTBL30	RTS


PREVBLK	LDA CMD
	ASL
	ASL
	ASL
	ASL
	TAX
	LDA CMDTABLE+2,X
	CMP #$28
	BNE PRVBL20
	LDA CMDTABLE+7,X
	BNE PRVBL08

	LDA CMDTABLE+6,X
	BNE PRVBL07

	LDA CMDTABLE+5,X
	BNE PRVBL06

	DEC CMDTABLE+4,X
PRVBL06	DEC CMDTABLE+5,X
PRVBL07	DEC CMDTABLE+6,X
PRVBL08	DEC CMDTABLE+7,X


	CMDOUT
	JMP EXECUTE

PRVBL20	CMP #$48
	BNE PRVBL30
	DEC CMDTABLE+6,X
	DEC CMDTABLE+9,X
	CMDOUT
	EXECUTE

PRVBL30	RTS


BEFTBL	DFB $1B
	DFW ESCAPE-1

	DFB $9B
	DFW EXECUTE-1

	ASC ">"
	DFW NEXTBLK-1


	ASC "<"
	DFW PREVBLK-1

	ASC "R"
	DFW SCRESET-1


	ASC "M"
	DFW CHMODE-1


	ASC "C"
	DFW CLBUFO-1

	ASC "1"
	DFW CHCMD1-1

	ASC "2"
	DFW CHCMD2-1

	ASC "3"
	DFW CHCMD3-1

	ASC "4"
	DFW CHCMD4-1

	ASC "5"
	DFW CHCMD5-1

	ASC "6"
	DFW CHCMD6-1

	ASC "7"
	DFW CHCMD7-1

	ASC "8"
	DFW CHCMD8-1

	ASC "9"
	DFW CHCMD9-1

	ASC "0"
	DFW CHCMD0-1



	ASC "!"
	DFW CHID1-1

	ASC !"!
	DFW CHID2-1

	ASC "#"
	DFW CHID3-1

	ASC "$"
	DFW CHID4-1

	ASC "%"
	DFW CHID5-1

	ASC "&"
	DFW CHID6-1

	ASC ")"
	DFW CHID0-1





BEFTBEND	EQU *

PAROUT	LDA #LINEPAR-1
	STA ROWCRS
	NEWLINE

	LDA #'C
	AKOUT
	LDA CMD
	BCDOUT
	SPACEOUT

	LDA #'I
	AKOUT
	LDA #'d
	AKOUT
	LDA CMD
	ASL
	ASL
	ASL
	ASL
	ADC #CMDTABLE:L
	STA BUFR
	LDA #CMDTABLE:H
	ADC #0
	STA BUFR+1
	LDY #0
	LDA (BUFR),Y
	BCDOUT
	SPACEOUT

	LDA #'L
	AKOUT

	LDY #1
	LDA (BUFR),Y
	HEXOUT
	SPACEOUT


	LDA #'D
	AKOUT
	LDA CMD
	ASL
	ASL
	TAY
	PHA
	LDA CDCBTBL+1,Y
	HEXOUT
	SPACEOUT


	LDA #'#
	AKOUT

	PLA
	TAY
	PHA
	LDA CDCBTBL+3,Y
	HEXOUT
	PLA
	TAY
	LDA CDCBTBL+2,Y
	HEXOUT
	SPACEOUT




	LDA #'S
	AKOUT
	LDA DSTATS
	HEXOUT
	SPACEOUT

	LDA #'#
	AKOUT
	LDA DBYTHI
	HEXOUT
	LDA DBYTLO
	HEXOUT
	SPACEOUT	


	NEWLINE
	RTS


CMDOUT	LDA #LINECMD-1
	STA ROWCRS
	NEWLINE
	LDA CMD
	ASL
	ASL
	ASL
	ASL
	CLC
	ADC #CMDTABLE+2:L
	STA BUFR
	LDA #CMDTABLE+2:H
	ADC #0
	STA BUFR+1
	LDA #$20
	LDY #12
	LINEOH
	LDA #$9B
	AKOUT

	LDA #$9B
	AKOUT
	RTS

BUFOUT	LDA #LINEBUF-1
	STA ROWCRS
	NEWLINE

	LDA #16
	STA CURLINE

	LDA #DBUFR:L
*	LDA #$80
	STA BUFR
	LDA #DBUFR:H
	STA BUFR+1


BUFO08	LDA PMODE
	LINEOUT
	DEC CURLINE
	BNE BUFO08
	RTS

	KCLOSE
	RTS

LINEOUT	PHA
	LDA BUFR
	HEXOUT
	LDA #':
	AKOUT
	SPACEOUT

	PLA
	CMP #0
	BNE LINO50
	LDY #8
	LDA #$20
	LINEOH
	LDY #8
	LINEOA
	LDA #8
	BNE LINO60

LINO50	CMP #1
	BNE LINO54
	LDY #16
	LDA #0
	LINEOH
	LDA #16
	BNE LINO60




LINO54	CMP #2
	BNE LINO58
	LDY #32
	LINEOA
	LDA #32
	BNE LINO60
LINO58	LDA #0
LINO60	CLC
	ADC BUFR
	STA BUFR
	BCC LINO64
	INC BUFR+1
LINO64	LDA #$9B
	AKOUT
	RTS



LINEOH	STY ANZB
	STA SPACE

	LDY #0
LINO00	STY YTEMP
	LDA (BUFR),Y
	HEXOUT
	LDA SPACE
	BEQ LINO02
	AKOUT
LINO02	LDY YTEMP
	INY
	CPY ANZB
	BNE LINO00

	RTS

LINEOA	STY ANZB

	LDY #0
LINO34	STY YTEMP
	LDA (BUFR),Y
	CMP #$1B
	BCC LINO42
	CMP #$20
	BCC LINO40
	CMP #$7D
	BCC LINO42
	CMP #$80
	BCC LINO40
	CMP #$9B
	BCC LINO42
	CMP #$A0
	BCC LINO40
	CMP #$FD
	BCC LINO42

LINO40	LDA #'.
LINO42	AKOUT
	LDY YTEMP
	INY
	CPY ANZB
	BNE LINO34
LINO44	RTS


AKIN	LDX #$10
	LDA #0
	STA ICBLL,X
	STA ICBLH,X
	LDA #7
	STA ICCOM,X
	JMP CIOV

KOPEN	LDX #$10
	LDA #KDEV:L
	STA ICBAL,X
	LDA #KDEV:H
	STA ICBAH,X
	LDA #4
	STA ICAUX1,X
	LDA #3
	STA ICCOM,X
	JMP CIOV

KCLOSE	LDX #$10
	LDA #12
	STA ICCOM,X
	JMP CIOV	

KDEV	ASC "K:"
	DFB $9B

NEWLINE	LDA #$9B
	BNE AKOUT

SPACEOUT	LDA #$20
	BNE AKOUT


HEXOUT	PHA
	LSR
	LSR
	LSR
	LSR
	BCDOUT
	PLA
BCDOUT	AND #%00001111
	CMP #10	BCC BCDO00
	ADC #6
BCDO00	ADC #$30

AKOUT	LDX BUFPOS
	STA LINBUF,X
	INC BUFPOS
	CMP #$9B
	BEQ AKO00
	RTS
AKO00	LDX #0
	LDA #LINBUF:L
	STA ICBAL,X
	LDA #LINBUF:H
	STA ICBAH,X
	LDA #80
	STA ICBLH,X
	LDA #0
	STA ICBLL,X
	LDA #9
	STA ICCOM,X
	JSR CIOV
	LDA #0
	STA BUFPOS
	RTS

LINBUF	ASC "                                     "
	ASC "                                     "
BUFPOS	DFB 0

OAKOUT	PHA
	LDX #0
	LDA #0
	STA ICBLL,X
	STA ICBLH,X
	LDA #11
	STA ICCOM,X
	PLA
	JMP CIOV



CHROUT	PHA
	TXA
	LDX #0
	STA ICBAL,X
	TYA
	STA ICBAH,X
	LDA #0
	STA ICBLH,X
	PLA
	STA ICBLL,X
	LDA #11
	STA ICCOM,X
	JMP CIOV



TCOPY	DFB $7D
	ASC "ATASPI MON V0.12 (c) 2000 by msc"
	DFB $9B


DCBTMP	DFB $70
	DFB $1
	DFB $2
	DFB $40
	DFW DBUFR
	DFB $1
	DFB 0
	DFW 0
	DFW 0



CMDTABLE	EQU *


CMDREQSE	DFB 0	; TID
	DFB 6	; LEN
	DFB 3	;
	DFB 0
	DFB 0,0
	DFB $FF
	DFB 0

	DFB 0,0,0,0
	DFB 0,0,0,0




CMDINQ	DFB 0	; TID
	DFB 6	; LEN
	DFB $12	;
	DFB 0
	DFB 0,0
	DFB $FF
	DFB 0

	DFB 0,0,0,0
	DFB 0,0,0,0


CMDMODSN	DFB 0	; TID
	DFB 6	; LEN
	DFB $1A	;
	DFB %00000000
	DFB %00111111
	DFB 0
	DFB $FF
	DFB $00

	DFB 0,0,0,0
	DFB 0,0,0,0

CMDREAD	DFB 0	; TID
	DFB 10	; LEN
	DFB $28	;
	DFB %00000000
	DFB 0,0,$80,0
	DFB 0
	DFB 0,1
	DFB 0

	DFB 0,0,0,0

CMDRDCAP	DFB 0	; TID
	DFB 10	; LEN
	DFB $25	;
	DFB %00000000
	DFB 0,0,0,0
	DFB 0,0,0
	DFB 0
	DFB 0,0,0,0

CMD4	DFB 0	; TID
	DFB 10	; LEN
	DFB $2A	;
	DFB %00000000
	DFB 0,0,$80,0
	DFB 0
	DFB 0,1
	DFB 0

	DFB 0,0,0,0

CMDRDTOC	DFB 0	; TID
	DFB 10	; LEN
	DFB $43	;
	DFB %00000010
	DFB 0,0,0,0,0
	DFB 1,0
	DFB 0

	DFB 0,0,0,0

CMDPLTRK	DFB 0	; TID
	DFB 10	; LEN
	DFB $48	;
	DFB %00000000
	DFB 0,0
	DFB 1,0
	DFB 0
	DFB 1,0
	DFB 0

	DFB 0,0,0,0

CMDPAUSE	DFB 0	; TID
	DFB 10	; LEN
	DFB $4B	;
	DFB %00000000
	DFB 0,0,0,0,0,0
	DFB %00000000
	DFB 0

	DFB 0,0,0,0

CMDLOAD	DFB 0	; TID
	DFB 6	; LEN
	DFB $1B	;
	DFB %00000000
	DFB 0,0
	DFB %00000010
	DFB 0

	DFB 0,0,0,0
	DFB 0,0,0,0


CDCBTBL	DFB 0		;REQ SEN
	DFB $40
	DFW $00FF

	DFB 0		;INQ
	DFB $40
	DFW $00FF

	DFB 0		;MODE SENSE
	DFB $40
	DFW $00FF

	DFB 0		;READ
	DFB $40
	DFW $0800

	DFB 0		;READ CAP
	DFB $40
	DFW $0008

	DFB 0		;
	DFB $80
	DFW $0200

	DFB 0		;READ TOC
	DFB $40
	DFW $00FF

	DFB 0		;PLAY TRK
	DFB $40
	DFW $0000

	DFB 0		;PAUSE/RESUME
	DFB $40
	DFW $0000

	DFB 0		;OPEN/LOAD
	DFB $40
	DFW $0000
VARIAB	EQU *