From d68583d1b340caba3d34a4a9c501f3ed34207b9c Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 30 Mar 2021 20:34:01 +0200 Subject: [PATCH] improved support for different RAM configurations --- src/,,config_mega65.s | 18 ++++----- src/dos_m65/,aliases_dos.s | 4 ++ src/dos_m65/dos_unitset.s | 20 +++++----- src/dos_m65/unit_ramdisk/unit_rd_init.s | 43 ++++++++++++++-------- src/dos_m65/unit_ramdisk/unit_rd_preload.s | 18 ++++++++- src/dos_m65/utils/util_check_rd_ram.s | 21 +++++++++++ src/kernal/iec/load_iec.s | 2 +- 7 files changed, 89 insertions(+), 37 deletions(-) create mode 100644 src/dos_m65/utils/util_check_rd_ram.s diff --git a/src/,,config_mega65.s b/src/,,config_mega65.s index ce67ea29..21d7e6fe 100644 --- a/src/,,config_mega65.s +++ b/src/,,config_mega65.s @@ -52,23 +52,23 @@ ;; #CONFIG# PROGRAMMABLE_KEYS YES -;; #CONFIG# KEYCMD_RUN "RUN" +;; #CONFIG# KEYCMD_RUN "RUN:" ;; #CONFIG# KEYCMD_F1 "@8$" ;; #CONFIG# KEYCMD_F2 "LOAD" ;; #CONFIG# KEYCMD_F3 "@9$" -;; #CONFIG# KEYCMD_F4 "RUN:" +;; #CONFIG# KEYCMD_F4 "\5FL" ;; #CONFIG# KEYCMD_F5 "@10$" -;; #CONFIG# KEYCMD_F6 "REM F6" +;; #CONFIG# KEYCMD_F6 "\5FHF" ;; #CONFIG# KEYCMD_F7 "@11$" ;; #CONFIG# KEYCMD_F8 "MONITOR" ;; #CONFIG# KEYCMD_HELP "LIST" -;; #CONFIG# KEYCMD_F9 "@28$" -;; #CONFIG# KEYCMD_F10 "\5FL" -;; #CONFIG# KEYCMD_F11 "@29$" -;; #CONFIG# KEYCMD_F12 "\5FHF" +;; #CONFIG# KEYCMD_F9 "@27$" +;; #CONFIG# KEYCMD_F10 "REM F10" +;; #CONFIG# KEYCMD_F11 "@28$" +;; #CONFIG# KEYCMD_F12 "@29$" ;; #CONFIG# KEYCMD_F13 "@30$" ;; #CONFIG# KEYCMD_F14 "BOOTCPM" @@ -90,8 +90,8 @@ ; --- Built-in DOS configuration -;; #CONFIG# UNIT_SDCARD 28 -;; #CONFIG# UNIT_FLOPPY 29 +;; #CONFIG# UNIT_SDCARD 27 +;; #CONFIG# UNIT_FLOPPY 28 ; XXX use separate number for second floppy (device 29) ;; #CONFIG# UNIT_RAMDISK 30 diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 2be9d441..8d07ebb8 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -122,6 +122,10 @@ !addr FD_LOADTRACK = $8072 ; current track for file loading !addr FD_LOADSECTOR = $8073 ; current sector for file loading + !addr RD_STARTSEG = $8074 ; RAM disk start address, 2nd most significant byte (or $FF if no RAM) + !addr RD_MAXTRACK = $8075 ; maximum RAM disk track number + + ; XXX Free space diff --git a/src/dos_m65/dos_unitset.s b/src/dos_m65/dos_unitset.s index a82e6316..02b89f9d 100644 --- a/src/dos_m65/dos_unitset.s +++ b/src/dos_m65/dos_unitset.s @@ -14,17 +14,16 @@ dos_UNITSET: @ok: jsr dos_ENTER - ; XXX do not allow illegal device numbers... above 30 or below 8 ? + ; XXX do not allow illegal device numbers (above 30 or below 8) ; Check what kind of device was requested cmp #$00 beq dos_UNITSET_sdcard - ; XXX devices below are not implemented yet - ; cmp #$01 - ; beq dos_UNITSET_floppy - ; cmp #$02 - ; beq dos_UNITSET_ramdisk + cmp #$01 + beq dos_UNITSET_floppy + cmp #$02 + beq dos_UNITSET_ramdisk jmp dos_EXIT_SEC @@ -38,12 +37,13 @@ dos_UNITSET_sdcard: dos_UNITSET_floppy: stx UNIT_FLOPPY - +skip_2_bytes_trash_nvz - - ; FALLTROUGH + jmp dos_EXIT_CLC dos_UNITSET_ramdisk: stx UNIT_RAMDISK - jmp dos_EXIT_CLC + ; Clear RAM disk device number if no Hyper RAM available + + jsr util_check_rd_ram + jmp dos_EXIT diff --git a/src/dos_m65/unit_ramdisk/unit_rd_init.s b/src/dos_m65/unit_ramdisk/unit_rd_init.s index eeb9826f..0532228f 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_init.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_init.s @@ -39,41 +39,48 @@ unit_rd_init_test_ram: ; non-destructive ATTIC/CELLAR RAM test ; For the start, mark extended RAM as not present + stx RD_STARTSEG ; by default $FF, to mark no RAM disk inx + stx RD_MAXTRACK ; maximum allowed track number, for now set 0 stx RAM_ATTIC ; set ATTIC/CELLAR RAM as not present stx RAM_CELLAR - ; Prepare address - ATTIC RAM, $0800:$0000 + ; Prepare address - CELLAR RAM, $0880:$0000 stx PNTR+0 stx PNTR+1 - stx PNTR+2 + lda #$80 + sta PNTR+2 lda #$08 sta PNTR+3 ldz #$00 + ; Test for CELLAR RAM + + jsr @perform_ram_test + bne @done_cellar + dec RAM_ATTIC ; test passed + lda #$08 + sta RD_STARTSEG ; RAM DISK start segment - CELLAR RAM + +@done_cellar: + + ; Prepare address - ATTIC RAM, $0800:$0000 + + lda #$00 + sta PNTR+2 + ; Test for ATTIC RAM jsr @perform_ram_test bne @done_attic - dec RAM_ATTIC ; test passed + dec RAM_CELLAR ; test passed + lda #$00 + sta RD_STARTSEG ; RAM DISK start segment - ATTIC RAM @done_attic: - ; Prepare address - CELLAR RAM, $0880:$0000 - - lda #$80 - sta PNTR+2 - - ; Test for cellar RAM - - jsr @perform_ram_test - bne @done_cellar - dec RAM_CELLAR ; test passed - -@done_cellar: - ; Restore temporary address area content ldx #$00 @@ -84,6 +91,10 @@ unit_rd_init_test_ram: ; non-destructive ATTIC/CELLAR RAM test cpx #$04 bne @3 + ; Clear RAM disk device number if no Hyper RAM available + + jsr util_check_rd_ram + ; End of initialization rts diff --git a/src/dos_m65/unit_ramdisk/unit_rd_preload.s b/src/dos_m65/unit_ramdisk/unit_rd_preload.s index 0facd81b..3f06bbf0 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_preload.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_preload.s @@ -6,6 +6,11 @@ unit_rd_preload: + ; Check if RAM disk is enabled + + lda UNIT_RAMDISK + beq @error_no_ramdisk + ; XXX make sure attic RAM is present rts ; XXX remove when code is fully implemented @@ -28,6 +33,11 @@ unit_rd_preload: ; XXX load the file + ; XXX while loading set RD_MAXTRACK + +@load_track: + + ; XXX while loading set RD_MAXTRACK @@ -42,6 +52,12 @@ unit_rd_preload: @error_not_found: - ; XXX set information about file not found + ; XXX set error information + + rts + +@error_no_ramdisk: + + ; XXX set error information rts diff --git a/src/dos_m65/utils/util_check_rd_ram.s b/src/dos_m65/utils/util_check_rd_ram.s new file mode 100644 index 00000000..8a614e5e --- /dev/null +++ b/src/dos_m65/utils/util_check_rd_ram.s @@ -0,0 +1,21 @@ + +; If no Hyper RAM is present, clear the RAM DISK device number and set Carry + + +util_check_rd_ram: + + lda RAM_ATTIC + ora RAM_CELLAR + beq @no_hyperram + + clc + rts + + +@no_hyperram: + + lda #$00 + sta UNIT_RAMDISK + + sec + rts diff --git a/src/kernal/iec/load_iec.s b/src/kernal/iec/load_iec.s index e006b001..714945ff 100644 --- a/src/kernal/iec/load_iec.s +++ b/src/kernal/iec/load_iec.s @@ -92,7 +92,7 @@ load_iec: sta EAL+1 !ifdef CONFIG_MB_M65 { - load_iec_m65cont: +load_iec_m65cont: } ; If secondary address is 0, override EAL with STAL