From 04be4bf1d16af63f651e4e3a751989e378eae8b8 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 7 Feb 2021 12:39:18 +0100 Subject: [PATCH] work towards SECOND/TKSA in CBDOS --- Makefile | 6 ++- src/dos_m65/,aliases_dos.s | 13 ++++- src/dos_m65/dev_floppy/dev_fd_init.s | 22 +++++++++ src/dos_m65/dev_ramdisk/dev_rd_init.s | 22 +++++++++ src/dos_m65/dev_sdcard/dev_sd_init.s | 22 +++++++++ src/dos_m65/dos_acptr_ciout.s | 22 +++++++++ src/dos_m65/dos_error_strings.s | 6 +-- src/dos_m65/dos_init.s | 6 +++ .../{dos_listen_unlsn.s => dos_listen_talk.s} | 1 + src/dos_m65/dos_second_tksa.s | 47 +++++++++++++++++++ src/dos_m65/stubs.s | 16 ------- src/kernal/iec/acptr.s | 2 +- src/kernal/iec/tksa.s | 2 +- 13 files changed, 163 insertions(+), 24 deletions(-) create mode 100644 src/dos_m65/dev_floppy/dev_fd_init.s create mode 100644 src/dos_m65/dev_ramdisk/dev_rd_init.s create mode 100644 src/dos_m65/dev_sdcard/dev_sd_init.s create mode 100644 src/dos_m65/dos_acptr_ciout.s rename src/dos_m65/{dos_listen_unlsn.s => dos_listen_talk.s} (97%) create mode 100644 src/dos_m65/dos_second_tksa.s delete mode 100644 src/dos_m65/stubs.s diff --git a/Makefile b/Makefile index 782ad434..c2c1040a 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,11 @@ SRCDIR_KERNAL = $(SRCDIR_COMMON) \ src/kernal/time SRCDIR_DOS_M65 = $(SRCDIR_COMMON) \ - src/dos_m65 + src/dos_m65 \ + src/dos_m65/dev_floppy \ + src/dos_m65/dev_ramdisk \ + src/dos_m65/dev_sdcard + SRCDIR_MON_M65 = $(SRCDIR_COMMON) \ src/mon_m65 diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 96b2f5c2..a8b3e35b 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -21,5 +21,14 @@ ; General DOS status - !addr IDX_LISTENER = $8008 ; listener idx * 2, >=$80 = none - !addr IDX_TALKER = $8009 ; talker idx * 2, >=$80 = none + !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 + + ; Free space: $800A-$806F + + !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 diff --git a/src/dos_m65/dev_floppy/dev_fd_init.s b/src/dos_m65/dev_floppy/dev_fd_init.s new file mode 100644 index 00000000..0d153d81 --- /dev/null +++ b/src/dos_m65/dev_floppy/dev_fd_init.s @@ -0,0 +1,22 @@ + +; +; Initializes DOS part of floppy controller +; + + +dev_fd_init: + + ; Copy status string + + ldx #$00 + stx FD_STATUS_IDX + dex +@1: + inx + lda dos_err_init_floppy,x + sta FD_STATUS_STR,x + bne @1 + + ; End of initialization + + rts diff --git a/src/dos_m65/dev_ramdisk/dev_rd_init.s b/src/dos_m65/dev_ramdisk/dev_rd_init.s new file mode 100644 index 00000000..227f8f31 --- /dev/null +++ b/src/dos_m65/dev_ramdisk/dev_rd_init.s @@ -0,0 +1,22 @@ + +; +; Initializes DOS part of ram disk +; + + +dev_rd_init: + + ; Copy status string + + ldx #$00 + stx RD_STATUS_IDX + dex +@1: + inx + lda dos_err_init_ramdisk,x + sta RD_STATUS_STR,x + bne @1 + + ; End of initialization + + rts diff --git a/src/dos_m65/dev_sdcard/dev_sd_init.s b/src/dos_m65/dev_sdcard/dev_sd_init.s new file mode 100644 index 00000000..afb799e8 --- /dev/null +++ b/src/dos_m65/dev_sdcard/dev_sd_init.s @@ -0,0 +1,22 @@ + +; +; Initializes DOS part of SD card +; + + +dev_sd_init: + + ; Copy status string + + ldx #$00 + stx SD_STATUS_IDX + dex +@1: + inx + lda dos_err_init_sdcard,x + sta SD_STATUS_STR,x + bne @1 + + ; End of initialization + + rts diff --git a/src/dos_m65/dos_acptr_ciout.s b/src/dos_m65/dos_acptr_ciout.s new file mode 100644 index 00000000..4b868ae5 --- /dev/null +++ b/src/dos_m65/dos_acptr_ciout.s @@ -0,0 +1,22 @@ + +; +; Implementation of ACPTR/CIOUT commands. +; For detailed description see 'm65dos_bridge.s' file. +; + + +dos_ACPTR: + + ; XXX provide implementation + + sec + rts + + + +dos_CIOUT: + + ; XXX provide implementation + + sec + rts diff --git a/src/dos_m65/dos_error_strings.s b/src/dos_m65/dos_error_strings.s index 91a69be4..2c72cfc6 100644 --- a/src/dos_m65/dos_error_strings.s +++ b/src/dos_m65/dos_error_strings.s @@ -9,15 +9,15 @@ dos_err_init_sdcard: - !pet "m65 dos sdcard", 0 + !pet "73,m65 dos sdcard,00,00", 0 dos_err_init_floppy: - !pet "m65 dos floppy", 0 + !pet "73,m65 dos floppy,00,00", 0 dos_err_init_ramdisk: - !pet "m65 dos ram disk", 0 + !pet "73,m65 dos ram disk,00,00", 0 ; List compiled from various manuals (CBM 1571, CBM 1581, CMD FD4000, MSD Super Disk, IDE64) diff --git a/src/dos_m65/dos_init.s b/src/dos_m65/dos_init.s index 2b537af7..e1bb14a6 100644 --- a/src/dos_m65/dos_init.s +++ b/src/dos_m65/dos_init.s @@ -37,4 +37,10 @@ dos_INIT: sta IDX_LISTENER sta IDX_TALKER + ; Initialize device handlers + + jsr dev_sd_init + jsr dev_fd_init + jsr dev_rd_init + rts diff --git a/src/dos_m65/dos_listen_unlsn.s b/src/dos_m65/dos_listen_talk.s similarity index 97% rename from src/dos_m65/dos_listen_unlsn.s rename to src/dos_m65/dos_listen_talk.s index e3bf5700..2855500c 100644 --- a/src/dos_m65/dos_listen_unlsn.s +++ b/src/dos_m65/dos_listen_talk.s @@ -72,6 +72,7 @@ dos_TALK_success: dos_fail_TALK_LISTEN: pla + lda #K_ERR_DEVICE_NOT_FOUND sec rts diff --git a/src/dos_m65/dos_second_tksa.s b/src/dos_m65/dos_second_tksa.s new file mode 100644 index 00000000..076f6850 --- /dev/null +++ b/src/dos_m65/dos_second_tksa.s @@ -0,0 +1,47 @@ + +; +; Implementation of SECOND/TKSA commands. +; For detailed description see 'm65dos_bridge.s' file. +; + + +dos_SECOND: + + ; XXX provide implementation + + sec + rts + + +dos_TKSA: + + pha + and #$60 + bne dos_TKSA_OPEN + pla + + ; XXX provide implementation + + sec + rts + + +dos_TKSA_OPEN: + + pla + and #$1F + cmp #$0F + beq dos_TKSA_OPEN_cmd + + ; XXX provide implementation + + sec + rts + + +dos_TKSA_OPEN_cmd: + + ; XXX provide implementation + + sec + rts diff --git a/src/dos_m65/stubs.s b/src/dos_m65/stubs.s deleted file mode 100644 index 2c8a2052..00000000 --- a/src/dos_m65/stubs.s +++ /dev/null @@ -1,16 +0,0 @@ - -; Dummy implementations - XXX to be replaced with real ones - -dos_ACPTR: - +nop -dos_CIOUT: - +nop -dos_SECOND: - +nop -dos_TKSA: - +nop - - sec - rts - - diff --git a/src/kernal/iec/acptr.s b/src/kernal/iec/acptr.s index 732d3b96..973f8bd4 100644 --- a/src/kernal/iec/acptr.s +++ b/src/kernal/iec/acptr.s @@ -24,7 +24,7 @@ ACPTR: !ifdef CONFIG_MB_M65 { jsr m65dos_check - +bcc m65dos_acptr ; branch if device is handeld by internal DOS + +bcc m65dos_acptr ; branch if device is handeld by internal DOS } !ifdef CONFIG_IEC { diff --git a/src/kernal/iec/tksa.s b/src/kernal/iec/tksa.s index 13563324..b9e9dee8 100644 --- a/src/kernal/iec/tksa.s +++ b/src/kernal/iec/tksa.s @@ -15,7 +15,7 @@ TKSA: -!ifdef CONFIG_MB_MEGA65 { +!ifdef CONFIG_MB_M65 { jsr m65dos_check +bcc m65dos_tksa ; branch if device is handeld by internal DOS