.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+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