From f7ea553ff885b8e9b7cbc8f80d1a129cb0b76ef7 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 12 Feb 2021 22:47:46 +0100 Subject: [PATCH] more work on filename/command reception in CBDOS --- src/dos_m65/,aliases_dos.s | 17 ++++-- src/dos_m65/dev_floppy/dev_fd_cmd_close.s | 12 +++++ src/dos_m65/dev_floppy/dev_fd_cmd_open.s | 12 +++++ src/dos_m65/dev_floppy/dev_fd_init.s | 1 + src/dos_m65/dev_ramdisk/dev_rd_cmd_close.s | 12 +++++ src/dos_m65/dev_ramdisk/dev_rd_cmd_open.s | 12 +++++ src/dos_m65/dev_ramdisk/dev_rd_init.s | 1 + src/dos_m65/dev_sdcard/dev_sd_cmd_close.s | 12 +++++ src/dos_m65/dev_sdcard/dev_sd_cmd_open.s | 12 +++++ src/dos_m65/dev_sdcard/dev_sd_init.s | 1 + src/dos_m65/dos_acptr.s | 2 +- src/dos_m65/dos_ciout.s | 63 +++++++++++++++++++++- src/dos_m65/dos_listen_talk.s | 4 +- src/dos_m65/dos_second_tksa.s | 23 +++++--- src/dos_m65/dos_vectable_dev.s | 18 +++++++ 15 files changed, 187 insertions(+), 15 deletions(-) create mode 100644 src/dos_m65/dev_floppy/dev_fd_cmd_close.s create mode 100644 src/dos_m65/dev_floppy/dev_fd_cmd_open.s create mode 100644 src/dos_m65/dev_ramdisk/dev_rd_cmd_close.s create mode 100644 src/dos_m65/dev_ramdisk/dev_rd_cmd_open.s create mode 100644 src/dos_m65/dev_sdcard/dev_sd_cmd_close.s create mode 100644 src/dos_m65/dev_sdcard/dev_sd_cmd_open.s create mode 100644 src/dos_m65/dos_vectable_dev.s diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 657300b4..68c1d1a0 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -28,10 +28,15 @@ ; 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_CHANNEL = $8067 ; current channel + !addr SD_CHANNEL = $8067 ; - SD card + !addr FD_CHANNEL = $8068 ; - floppy + !addr RD_CHANNEL = $8069 ; - ram disk + + !addr XX_CMDFN_IDX = $806A ; index byte for storing file name/command + !addr SD_CMDFN_IDX = $806A ; - SD card + !addr FD_CMDFN_IDX = $806B ; - floppy + !addr RD_CMDFN_IDX = $806C ; - ram disk !addr XX_STATUS_IDX = $806D ; index byte for reading status !addr SD_STATUS_IDX = $806D ; - SD card @@ -42,3 +47,7 @@ !addr SD_STATUS_STR = $8070 ; status string for SD card, terminated by 0 !addr FD_STATUS_STR = $80A0 ; status string for floppy drive, terminated by 0 !addr RD_STATUS_STR = $80D0 ; status string for ram disk, terminated by 0 + + !addr SD_CMDFN_BUF = $8100 ; buffer for command and/or file name, 128 bytes, SD card + !addr FD_CMDFN_BUF = $8180 ; buffer for command and/or file name, 128 bytes, floppy + !addr RD_CMDFN_BUF = $8200 ; buffer for command and/or file name, 128 bytes, ram disk diff --git a/src/dos_m65/dev_floppy/dev_fd_cmd_close.s b/src/dos_m65/dev_floppy/dev_fd_cmd_close.s new file mode 100644 index 00000000..09a06999 --- /dev/null +++ b/src/dos_m65/dev_floppy/dev_fd_cmd_close.s @@ -0,0 +1,12 @@ + +; +; Close currently opened file +; + + +dev_fd_cmd_CLOSE: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_floppy/dev_fd_cmd_open.s b/src/dos_m65/dev_floppy/dev_fd_cmd_open.s new file mode 100644 index 00000000..462309b1 --- /dev/null +++ b/src/dos_m65/dev_floppy/dev_fd_cmd_open.s @@ -0,0 +1,12 @@ + +; +; Open file for reading +; + + +dev_fd_cmd_OPEN: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_floppy/dev_fd_init.s b/src/dos_m65/dev_floppy/dev_fd_init.s index 0d153d81..5c3a8141 100644 --- a/src/dos_m65/dev_floppy/dev_fd_init.s +++ b/src/dos_m65/dev_floppy/dev_fd_init.s @@ -10,6 +10,7 @@ dev_fd_init: ldx #$00 stx FD_STATUS_IDX + stx FD_CMDFN_IDX dex @1: inx diff --git a/src/dos_m65/dev_ramdisk/dev_rd_cmd_close.s b/src/dos_m65/dev_ramdisk/dev_rd_cmd_close.s new file mode 100644 index 00000000..58be858d --- /dev/null +++ b/src/dos_m65/dev_ramdisk/dev_rd_cmd_close.s @@ -0,0 +1,12 @@ + +; +; Close currently opened file +; + + +dev_rd_cmd_CLOSE: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_ramdisk/dev_rd_cmd_open.s b/src/dos_m65/dev_ramdisk/dev_rd_cmd_open.s new file mode 100644 index 00000000..64f55a31 --- /dev/null +++ b/src/dos_m65/dev_ramdisk/dev_rd_cmd_open.s @@ -0,0 +1,12 @@ + +; +; Open file for reading +; + + +dev_rd_cmd_OPEN: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_ramdisk/dev_rd_init.s b/src/dos_m65/dev_ramdisk/dev_rd_init.s index 227f8f31..b5aad740 100644 --- a/src/dos_m65/dev_ramdisk/dev_rd_init.s +++ b/src/dos_m65/dev_ramdisk/dev_rd_init.s @@ -10,6 +10,7 @@ dev_rd_init: ldx #$00 stx RD_STATUS_IDX + stx RD_CMDFN_IDX dex @1: inx diff --git a/src/dos_m65/dev_sdcard/dev_sd_cmd_close.s b/src/dos_m65/dev_sdcard/dev_sd_cmd_close.s new file mode 100644 index 00000000..b6e75e00 --- /dev/null +++ b/src/dos_m65/dev_sdcard/dev_sd_cmd_close.s @@ -0,0 +1,12 @@ + +; +; Close currently opened file +; + + +dev_sd_cmd_CLOSE: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s b/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s new file mode 100644 index 00000000..61a504c6 --- /dev/null +++ b/src/dos_m65/dev_sdcard/dev_sd_cmd_open.s @@ -0,0 +1,12 @@ + +; +; Open file for reading +; + + +dev_sd_cmd_OPEN: + + ; XXX provide implementation + + sec + jmp dos_SECOND_done diff --git a/src/dos_m65/dev_sdcard/dev_sd_init.s b/src/dos_m65/dev_sdcard/dev_sd_init.s index afb799e8..b12689e2 100644 --- a/src/dos_m65/dev_sdcard/dev_sd_init.s +++ b/src/dos_m65/dev_sdcard/dev_sd_init.s @@ -10,6 +10,7 @@ dev_sd_init: ldx #$00 stx SD_STATUS_IDX + stx SD_CMDFN_IDX dex @1: inx diff --git a/src/dos_m65/dos_acptr.s b/src/dos_m65/dos_acptr.s index 50582e1b..35d2658c 100644 --- a/src/dos_m65/dos_acptr.s +++ b/src/dos_m65/dos_acptr.s @@ -50,7 +50,7 @@ dos_ACPTR_eoi: -; Retrieving bytes from the status string +; Sending bytes from the status string dos_ACPTR_getsts_SD: ; get next byte of status - SD card diff --git a/src/dos_m65/dos_ciout.s b/src/dos_m65/dos_ciout.s index 179b046f..7549b070 100644 --- a/src/dos_m65/dos_ciout.s +++ b/src/dos_m65/dos_ciout.s @@ -6,7 +6,66 @@ dos_CIOUT: - ; XXX provide implementation + pha + phx - sec + ; XXX handle cases of transferring data + + ; Receive command/file name byte + + ldx IDX2_TALKER + jsr (dos_CIOUT_putcmdfn_table, X) + + plx + pla + + clc rts + + + + + +; Receiving command/file name + +dos_CIOUT_putcmdfn_SD: ; get next byte of status - SD card + + ldx SD_CMDFN_IDX + sta SD_CMDFN_IDX,x + inx + bpl @1 + ldx #$7F +@1: + lda #$00 + sta SD_CMDFN_IDX,x + rts + +dos_CIOUT_putcmdfn_FD: ; get next byte of status - floppy + + ldx FD_CMDFN_IDX + sta FD_CMDFN_IDX,x + inx + bpl @1 + ldx #$7F +@1: + lda #$00 + sta FD_CMDFN_IDX,x + rts + +dos_CIOUT_putcmdfn_RD: ; get next byte of status - ram disk + + ldx RD_CMDFN_IDX + sta RD_CMDFN_IDX,x + inx + bpl @1 + ldx #$7F +@1: + lda #$00 + sta RD_CMDFN_IDX,x + rts + +dos_CIOUT_putcmdfn_table: + + !word dos_CIOUT_putcmdfn_SD + !word dos_CIOUT_putcmdfn_FD + !word dos_CIOUT_putcmdfn_RD diff --git a/src/dos_m65/dos_listen_talk.s b/src/dos_m65/dos_listen_talk.s index c959d435..72dbd45d 100644 --- a/src/dos_m65/dos_listen_talk.s +++ b/src/dos_m65/dos_listen_talk.s @@ -36,7 +36,9 @@ dos_LISTEN_success: sta IDX1_LISTENER asl - sta IDX2_LISTENER + sta IDX2_LISTENER + + ; XXX should we reset XX_CMDFN_IDX ? bra dos_common_LSN_TALK_UN diff --git a/src/dos_m65/dos_second_tksa.s b/src/dos_m65/dos_second_tksa.s index 2c139500..8b8ee56c 100644 --- a/src/dos_m65/dos_second_tksa.s +++ b/src/dos_m65/dos_second_tksa.s @@ -16,9 +16,9 @@ dos_SECOND: tay and #$0F ; support channels 0-15, like 1541 drive - ldx IDX1_LISTENER ; store channel + ldx IDX1_LISTENER bmi dos_SECOND_done ; do nothing if no listener - sta XX_CHANNEL, x + sta XX_CHANNEL, x ; store channel ; Determine command type @@ -32,10 +32,17 @@ dos_SECOND: ; XXX provide implementation -dos_SECOND_OPEN: ; XXX provide implementaation -dos_SECOND_CLOSE: ; XXX provide implementaation + bra dos_SECOND_done - ; finish +dos_SECOND_OPEN: + + ldx IDX2_LISTENER + jmp (dos_cmd_OPEN_vectable, x) + +dos_SECOND_CLOSE: + + ldx IDX2_LISTENER + jmp (dos_cmd_CLOSE_vectable, x) dos_SECOND_done: @@ -50,9 +57,11 @@ dos_TKSA: and #$0F ; support channels 0-15, like 1541 drive - ldx IDX1_TALKER ; store channel + ldx IDX1_TALKER bmi dos_TKSA_done ; do nothing if no taalker - sta XX_CHANNEL, x + sta XX_CHANNEL, x ; store channel + + ; FALLTROUGH dos_TKSA_done: diff --git a/src/dos_m65/dos_vectable_dev.s b/src/dos_m65/dos_vectable_dev.s new file mode 100644 index 00000000..7881735f --- /dev/null +++ b/src/dos_m65/dos_vectable_dev.s @@ -0,0 +1,18 @@ + +; +; Vector tables to device-specific routines +; + + +dos_cmd_OPEN_vectable: + + !word dev_sd_cmd_OPEN + !word dev_fd_cmd_OPEN + !word dev_rd_cmd_OPEN + + +dos_cmd_CLOSE_vectable: + + !word dev_sd_cmd_CLOSE + !word dev_fd_cmd_CLOSE + !word dev_rd_cmd_CLOSE