CBDOS can now return status

This commit is contained in:
FeralChild64 committed 2021-02-08 17:20:20 +01:00
1 parent 49b9a13d14
commit d1b19c8739
7 files changed
+135 -21

No files matched your search

+1 -1
View File
@@ -66,7 +66,7 @@
;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 "REM F9"
;; #CONFIG# KEYCMD_F9 "@20$"
;; #CONFIG# KEYCMD_F10 "\5FL"
;; #CONFIG# KEYCMD_F11 "COLORSET 128"
;; #CONFIG# KEYCMD_F12 "\5FHF"
+15 -6
View File
@@ -21,14 +21,23 @@
; General DOS status
!addr IDX_LISTENER = $8008 ; listener idx * 2, >=$80 = none - for calling routines via vector table
!addr IDX_TALKER = $8009 ; talker idx * 2, >=$80 = none - for calling routines via vector table
!addr IDX1_LISTENER = $8008 ; listener idx, >=$80 = none
!addr IDX2_LISTENER = $8009 ; listener idx * 2, >=$80 = none - for calling routines via vector table
!addr IDX1_TALKER = $800A ; talker idx, >=$80 = none
!addr IDX2_TALKER = $800B ; talker idx * 2, >=$80 = none - for calling routines via vector table
; Free space: $800A-$806F
; Free space: $800C-$8069
!addr XX_CHANNEL = $806A ; current channel
!addr SD_CHANNEL = $806A ; - SD card
!addr FD_CHANNEL = $806B ; - floppy
!addr RD_CHANNEL = $806C ; - ram disk
!addr XX_STATUS_IDX = $806D ; index byte for reading status
!addr SD_STATUS_IDX = $806D ; - SD card
!addr FD_STATUS_IDX = $806E ; - floppy
!addr RD_STATUS_IDX = $806F ; - ram disk
!addr SD_STATUS_STR = $8070 ; status string for SD card, terminated by 0
!addr SD_STATUS_IDX = $809F ; index byte for reading status
!addr FD_STATUS_STR = $80A0 ; status string for floppy drive, terminated by 0
!addr FD_STATUS_IDX = $80CF ; index byte for reading status
!addr RD_STATUS_STR = $80D0 ; status string for ram disk, terminated by 0
!addr RD_STATUS_IDX = $80FF ; index byte for reading status
+89 -2
View File
@@ -5,13 +5,89 @@
;
dos_ACPTR:
dos_ACPTR: ; does not have to preserve .X
; XXX provide implementation
ldx IDX1_TALKER
bmi dos_ACPTR_fail
lda XX_CHANNEL, X
cmp #$0F
beq dos_ACPTR_status
; XXX providde implementation for non-status streams
jmp dos_ACPTR_fail
dos_ACPTR_status:
ldx IDX2_TALKER
jsr (dos_ACPTR_getsts_table, X)
sta TBTCNT ; byte return
beq dos_ACPTR_reset_status
; XXX
clc
rts
dos_ACPTR_fail:
; XXX set error code
sec
rts
dos_ACPTR_reset_status:
; XXX replace status with OK instead
ldx IDX1_TALKER
lda #$00
sta XX_STATUS_IDX,x
; FALLTROUGH
dos_ACPTR_eoi:
jsr kernalstatus_EOI
clc
rts
dos_ACPTR_getsts_SD: ; get next byte of status - SD card
ldx SD_STATUS_IDX
inc SD_STATUS_IDX
lda SD_STATUS_STR,x
rts
dos_ACPTR_getsts_FD: ; get next byte of status - floppy
ldx FD_STATUS_IDX
inc FD_STATUS_IDX
lda FD_STATUS_STR,x
rts
dos_ACPTR_getsts_RD: ; get next byte of status - ram disk
ldx RD_STATUS_IDX
inc RD_STATUS_IDX
lda RD_STATUS_STR,x
rts
dos_ACPTR_getsts_table:
!word dos_ACPTR_getsts_SD
!word dos_ACPTR_getsts_FD
!word dos_ACPTR_getsts_RD
dos_CIOUT:
@@ -20,3 +96,14 @@ dos_CIOUT:
sec
rts
kernalstatus_EOI:
; XXX reuse original code instead
lda IOSTATUS
ora #K_STS_EOI
sta IOSTATUS
rts
+4 -2
View File
@@ -34,8 +34,10 @@ dos_INIT:
; Clear listener / talker
lda #$FF
sta IDX_LISTENER
sta IDX_TALKER
sta IDX1_LISTENER
sta IDX2_LISTENER
sta IDX1_TALKER
sta IDX2_TALKER
; Initialize device handlers
+16 -8
View File
@@ -22,19 +22,22 @@ dos_LISTEN:
cmp UNIT_FLOPPY
bne @2
lda #$02
lda #$01
bra dos_LISTEN_success
@2:
cmp UNIT_RAMDISK
bne dos_fail_TALK_LISTEN
lda #$04
lda #$02
; FALLTROUGH
dos_LISTEN_success:
sta IDX_LISTENER
sta IDX1_LISTENER
asl
sta IDX2_LISTENER
bra dos_common_LSN_TALK_UN
; TALK
@@ -54,19 +57,22 @@ dos_TALK:
cmp UNIT_FLOPPY
bne @2
lda #$02
lda #$01
bra dos_TALK_success
@2:
cmp UNIT_RAMDISK
bne dos_fail_TALK_LISTEN
lda #$04
lda #$02
; FALLTROUGH
dos_TALK_success:
sta IDX_TALKER
sta IDX1_TALKER
asl
sta IDX2_TALKER
bra dos_common_LSN_TALK_UN
dos_fail_TALK_LISTEN:
@@ -82,14 +88,16 @@ dos_UNLSN:
pha
lda #$FF
sta IDX_LISTENER
sta IDX1_LISTENER
sta IDX2_LISTENER
bra dos_common_LSN_TALK_UN
dos_UNTLK:
pha
lda #$FF
sta IDX_TALKER
sta IDX1_TALKER
sta IDX2_TALKER
; FALLTROUGH
+9 -1
View File
@@ -15,6 +15,7 @@ dos_SECOND:
dos_TKSA:
phx
pha
and #$60
bne dos_TKSA_OPEN
@@ -22,6 +23,7 @@ dos_TKSA:
; XXX provide implementation
plx
sec
rts
@@ -30,11 +32,16 @@ dos_TKSA_OPEN:
pla
and #$1F
ldx IDX1_TALKER ; store channel
sta XX_CHANNEL, X
cmp #$0F
beq dos_TKSA_OPEN_cmd
; XXX provide implementation
plx
sec
rts
@@ -43,5 +50,6 @@ dos_TKSA_OPEN_cmd:
; XXX provide implementation
sec
plx
clc
rts
+1 -1
View File
@@ -1224,7 +1224,7 @@ void DataSet::generateConfigDepStrings()
// CBDOS features
featureStrM65 += "CBDOS : CARD ";
featureStrM65 += "CBDOS : SDCARD ";
// Keyboard support features