178 lines
3.2 KiB
ArmAsm
178 lines
3.2 KiB
ArmAsm
.segment "EXTRA"
|
|
|
|
; IO
|
|
|
|
CHKIN:
|
|
stx CURDVC
|
|
stx IO_FILE_DESCRIPTOR
|
|
rts
|
|
|
|
CHKOUT:
|
|
stx CURDVC
|
|
stx IO_FILE_DESCRIPTOR
|
|
rts
|
|
|
|
CLRCH:
|
|
lda #0
|
|
sta CURDVC
|
|
rts
|
|
|
|
CHRIN:
|
|
lda CURDVC
|
|
bne @file
|
|
lda IO_KBD
|
|
bmi @end
|
|
cmp #LF
|
|
beq @end
|
|
jsr CHROUT ; echo
|
|
rts
|
|
@file:
|
|
lda CURDVC
|
|
sta IO_FILE_DESCRIPTOR
|
|
lda #IO_COMMAND_READ
|
|
sta IO_FILE_COMMAND
|
|
@wait:
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_READY
|
|
beq @wait
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_ERROR
|
|
beq :+
|
|
jmp IQERR
|
|
:
|
|
lda IO_FILE_DATA
|
|
@end:
|
|
rts
|
|
|
|
CHROUT:
|
|
pha
|
|
lda CURDVC
|
|
bne @file
|
|
pla
|
|
sta IO_SCREEN
|
|
rts
|
|
@file:
|
|
lda CURDVC
|
|
sta IO_FILE_DESCRIPTOR
|
|
pla
|
|
sta IO_FILE_DATA
|
|
pha
|
|
lda #IO_COMMAND_WRITE
|
|
sta IO_FILE_COMMAND
|
|
@wait:
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_READY
|
|
beq @wait
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_ERROR
|
|
bne @error
|
|
pla
|
|
rts
|
|
@error:
|
|
pla
|
|
jmp IQERR
|
|
|
|
OPEN:
|
|
jsr GETBYT
|
|
stx IO_FILE_DESCRIPTOR
|
|
jsr CHKCOM
|
|
jsr FRMEVL
|
|
jsr CHKSTR
|
|
jsr FREFAC
|
|
sta STRNG2
|
|
ldy #0
|
|
@copy:
|
|
cpy STRNG2
|
|
beq @done_copy
|
|
lda (INDEX),y
|
|
sta FILE_NAME_BUFFER,y
|
|
iny
|
|
bne @copy
|
|
@done_copy:
|
|
lda #0
|
|
sta FILE_NAME_BUFFER,y
|
|
lda #<FILE_NAME_BUFFER
|
|
sta IO_FILE_DATA
|
|
lda #>FILE_NAME_BUFFER
|
|
sta IO_FILE_DATA+1
|
|
jsr CHKCOM
|
|
jsr FRMEVL
|
|
jsr CHKSTR
|
|
jsr FREFAC
|
|
cmp #1
|
|
beq :+
|
|
jmp SYNERR
|
|
:
|
|
ldy #0
|
|
lda (INDEX),y
|
|
ldy #IO_COMMAND_OPEN_R
|
|
cmp #'R'
|
|
beq @setCommand
|
|
ldy #IO_COMMAND_OPEN_W
|
|
cmp #'W'
|
|
beq @setCommand
|
|
ldy #IO_COMMAND_OPEN_A
|
|
cmp #'A'
|
|
beq @setCommand
|
|
jmp SYNERR
|
|
@setCommand:
|
|
sty IO_FILE_COMMAND
|
|
@wait:
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_READY
|
|
beq @wait
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_ERROR
|
|
bne @error
|
|
rts
|
|
@error:
|
|
jmp IQERR
|
|
|
|
CLOSE:
|
|
jsr GETBYT
|
|
stx IO_FILE_DESCRIPTOR
|
|
lda #IO_COMMAND_CLOSE
|
|
sta IO_FILE_COMMAND
|
|
@wait:
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_READY
|
|
beq @wait
|
|
lda IO_FILE_STATUS
|
|
and #FILE_STATUS_ERROR
|
|
bne @error
|
|
jsr CLRCH
|
|
rts
|
|
@error:
|
|
jmp IQERR
|
|
|
|
; Default
|
|
|
|
ISCNTC:
|
|
lda IO_KBD
|
|
cmp #$03
|
|
beq :+
|
|
rts
|
|
:
|
|
jmp STOP
|
|
|
|
SYS:
|
|
jsr GTNUM
|
|
lda LINNUM
|
|
sta SYSJMP+1
|
|
lda LINNUM+1
|
|
sta SYSJMP+2
|
|
SYSJMP:
|
|
jsr $FFFF
|
|
rts
|
|
|
|
MONRDKEY := CHRIN
|
|
MONCOUT := CHROUT
|
|
|
|
.segment "WOZMON"
|
|
.include "wozmon.s"
|
|
|
|
.segment "RESETVEC"
|
|
.word $0000 ; NMI vector
|
|
.word COLD_START ; RESET vector
|
|
.word $0000 ; IRQ vector
|