Files
2026-09-28 23:28:22 +02:00

170 lines
3.1 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
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