From 0e34cd8d68c0687d970940d8342768827f501cbb Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 26 Mar 2021 21:43:24 +0100 Subject: [PATCH] more work on RAM disk support, added ATTIC/CELLAR RAM test --- src/aliases/,aliases_ram_lowmem.s | 2 +- src/dos_m65/,aliases_dos.s | 7 +- src/dos_m65/4020.dos_vectable.s | 1 + src/dos_m65/dos_preload.s | 17 ++++ src/dos_m65/unit_ramdisk/unit_rd_init.s | 102 ++++++++++++++++----- src/dos_m65/unit_ramdisk/unit_rd_preload.s | 47 ++++++++++ src/kernal/iec_fast/m65dos_bridge.s | 31 ++++--- src/kernal/init/fce2.hw_entry_reset.s | 2 + 8 files changed, 174 insertions(+), 35 deletions(-) create mode 100644 src/dos_m65/dos_preload.s create mode 100644 src/dos_m65/unit_ramdisk/unit_rd_preload.s diff --git a/src/aliases/,aliases_ram_lowmem.s b/src/aliases/,aliases_ram_lowmem.s index ed03d9c9..2c6e08db 100644 --- a/src/aliases/,aliases_ram_lowmem.s +++ b/src/aliases/,aliases_ram_lowmem.s @@ -44,7 +44,7 @@ !addr OLDLIN = $3B ; $3B-$3C previous BASIC line number !addr OLDTXT = $3D ; $3D-$3E current BASIC line pointer !addr DATLIN = $3F ; $3F-$40 -- NOT IMPLEMENTED -- - !addr DATPTR = $41 ; $41-$42 pointer for READ/DATA copmmands + !addr DATPTR = $41 ; $41-$42 pointer for READ/DATA commands !addr INPPTR = $43 ; $43-$44 -- NOT IMPLEMENTED -- !addr VARNAM = $45 ; $45-$46 current variable name !addr VARPNT = $47 ; $47-$48 current variable/descriptor pointer diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index e5652ce5..2be9d441 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -27,7 +27,12 @@ !addr REG_Y = $8007 !addr REG_Z = $8008 - ; Reserved: $8009 - $800C + ; System configuration + + !addr RAM_ATTIC = $8009 ; $8000000-$87FFFFF RAM status; 0 = not present, $FF = present + !addr RAM_CELLAR = $800A ; $8800000-$8FFFFFF RAM status; 0 = not present, $FF = present + + ; Reserved: $800B - $800C ; General DOS configuration diff --git a/src/dos_m65/4020.dos_vectable.s b/src/dos_m65/4020.dos_vectable.s index fb940b73..fd2aa2c3 100644 --- a/src/dos_m65/4020.dos_vectable.s +++ b/src/dos_m65/4020.dos_vectable.s @@ -2,6 +2,7 @@ ; A vector table to integrate DOS with the MEGA65 Kernal !word dos_INIT +!word dos_PRELOAD !word dos_UNITCHK !word dos_UNITSET !word dos_UNITNUM diff --git a/src/dos_m65/dos_preload.s b/src/dos_m65/dos_preload.s new file mode 100644 index 00000000..0775e180 --- /dev/null +++ b/src/dos_m65/dos_preload.s @@ -0,0 +1,17 @@ + +; +; Preload RAM disk image +; + + +dos_PRELOAD: + + ; Before the start make sure memory content is not damaged + + jsr dos_MEMCHK + bcc @ok + rts +@ok: + jsr dos_ENTER + jsr unit_rd_preload + jmp dos_EXIT_CLC diff --git a/src/dos_m65/unit_ramdisk/unit_rd_init.s b/src/dos_m65/unit_ramdisk/unit_rd_init.s index bff58927..eeb9826f 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_init.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_init.s @@ -1,11 +1,12 @@ ; -; Initializes DOS part of ram disk +; Initializes DOS part of RAM disk ; unit_rd_init: + ; Copy status string ldx #$00 @@ -23,41 +24,98 @@ unit_rd_init: sta RD_STATUS_BUF,x bne @1 - ; End of initialization, now try to load the initial RAM disk; first set file name + ; FALLTROUGH - ldy #>ramdisk_filename - ldx #ramdisk_filename + ldx #