This commit is contained in:
Joshua Bell 2018-12-31 12:27:07 -08:00
parent f42539a517
commit 26857a74d1
1 changed files with 63 additions and 53 deletions

116
chtype.s
View File

@ -2,72 +2,82 @@
;;; ;;;
.org $2000 .org $2000
INBUF := $200 ;GETLN input buffer. INBUF := $200 ;GETLN input buffer.
WAIT := $FCA8 ;Monitor wait routine.
BELL := $FF3A ;Monitor bell routine WAIT := $FCA8 ;Monitor wait routine.
EXTRNCMD := $BE06 ;External cmd JMP vector. BELL := $FF3A ;Monitor bell routine
XTRNADDR := $BE50 ;Ext cmd implementation addr.
XLEN := $BE52 ;Length of command string-1.
XCNUM := $BE53 ;CI cmd no. (ext cmd = 0). ;;; BASIC.SYSTEM global page
PBITS := $BE54 ;Command parameter bits.
VSLOT := $BE61 ;Verified slot parameter. EXTRNCMD := $BE06 ;External cmd JMP vector.
XTRNADDR := $BE50 ;Ext cmd implementation addr.
XLEN := $BE52 ;Length of command string-1.
XCNUM := $BE53 ;CI cmd no. (ext cmd = 0).
PBITS := $BE54 ;Command parameter bits.
VSLOT := $BE61 ;Verified slot parameter.
;;; TODO: Relocate into ProDOS-allocated buffer
;;; ;;;
;;; REMEMBER TO SAVE THE PREVIOUS COMMAND ADDRESS. ;;; Remember to save the previous command address.
;;; ;;;
LDA EXTRNCMD+1 lda EXTRNCMD+1
STA NXTCMD sta nxtcmd
LDA EXTRNCMD+2 lda EXTRNCMD+2
STA NXTCMD+1 sta nxtcmd+1
;;; ;;;
LDA #>BEEPSLOT ;Install the address of our lda #>beepslot ;Install the address of our
STA EXTRNCMD+1 ; command handler in the sta EXTRNCMD+1 ; command handler in the
LDA #<BEEPSLOT ; external command JMP lda #<beepslot ; external command JMP
STA EXTRNCMD+2 ; vector. sta EXTRNCMD+2 ; vector.
RTS RTS
;;; ;;;
BEEPSLOT: LDX #0 ;Check for our command. beepslot:
NXTCHR: LDA INBUF,X ;Get first character. ldx #0 ;Check for our command.
CMP CMD,X ;Does it match? nxtchr: lda INBUF,X ;Get first character.
BNE NOTOURS ;NO, SO CONTINUE WITH NEXT CMD. cmp cmd,X ;Does it match?
INX ;Next character bne notours ;NO, SO CONTINUE WITH NEXT CMD.
CPX #CMDLEN ;All characters yet? inx ;Next character
BNE NXTCHR ;No, read next one. cpx #cmdlen ;All characters yet?
bne nxtchr ;No, read next one.
;;; ;;;
LDA #CMDLEN-1 ;Our cmd! Put cmd length-1 lda #cmdlen-1 ;Our cmd! Put cmd length-1
STA XLEN ; in CI global XLEN. sta XLEN ; in CI global XLEN.
LDA #>EXECUTE ;Point XTRNADDR to our lda #>execute ;Point XTRNADDR to our
STA XTRNADDR ; command execution sta XTRNADDR ; command execution
LDA #<EXECUTE ; routine lda #<execute ; routine
STA XTRNADDR+1 sta XTRNADDR+1
LDA #0 ;Mark the cmd number as lda #0 ;Mark the cmd number as
STA XCNUM ; zero (external). sta XCNUM ; zero (external).
;;; ;;;
LDA #%00010000 ;Set at least one bit lda #%00010000 ;Set at least one bit
STA PBITS ; in PBITS low byte! sta PBITS ; in PBITS low byte!
;;; ;;;
LDA #%00000100 ;And mark PBITS high byte lda #%00000100 ;And mark PBITS high byte
STA PBITS+1 ; that slot & drive are legal. sta PBITS+1 ; that slot & drive are legal.
CLC ;Everything is OK. clc ;Everything is OK.
RTS ;Return to BASIC.SYSTEM rts ;Return to BASIC.SYSTEM
;;; ;;;
EXECUTE: LDA VSLOT ;Get slot parameter. execute:
TAX ;Transfer to index reg. lda VSLOT ;Get slot parameter.
NXTBEEP: JSR BELL ;Else, beep once. tax ;Transfer to index reg.
LDA #$80 ;Set up the delay nxtbeep:
JSR WAIT ; and wait. jsr BELL ;Else, beep once.
DEX ;decrement index and lda #$80 ;Set up the delay
BNE NXTBEEP ; repeat until x = 0. jsr WAIT ; and wait.
CLC ;All done successfully. dex ;decrement index and
RTS ;Back to BASIC.SYSTEM. bne nxtbeep ; repeat until x = 0.
clc ;All done successfully.
rts ;Back to BASIC.SYSTEM.
;;; ;;;
;;; IT'S NOT OUR COMMAND SO MAKE SURE YOU LET BASIC ;;; IT'S NOT OUR COMMAND SO MAKE SURE YOU LET BASIC
;;; CHECK WHETER OR NOT IT'S THE NEXT COMMAND. ;;; CHECK WHETER OR NOT IT'S THE NEXT COMMAND.
;;; ;;;
NOTOURS: SEC ;SET CARRY AND LET notours: sec ;SET CARRY AND LET
JMP (NXTCMD) ; NEXT EXT CMD GO FOR IT. jmp (nxtcmd) ; NEXT EXT CMD GO FOR IT.
;;; ;;;
CMD: .byte "BEEPSLOT" ;Our command cmd: .byte "BEEPSLOT" ;Our command
CMDLEN = *-CMD ;Our command length cmdlen = *-cmd ;Our command length
NXTCMD: .word 0 ; STORE THE NEXT COMMAND'S nxtcmd: .word 0 ; STORE THE NEXT COMMAND'S
; ADDRESS HERE. ; ADDRESS HERE.