improved support for different RAM configurations

This commit is contained in:
FeralChild64 committed 2021-03-30 20:34:01 +02:00
1 parent 7510d4a83f
commit d68583d1b3
7 files changed
+89 -37

No files matched your search

+9 -9
View File
@@ -52,23 +52,23 @@
;; #CONFIG# PROGRAMMABLE_KEYS YES ;; #CONFIG# PROGRAMMABLE_KEYS YES
;; #CONFIG# KEYCMD_RUN "RUN" ;; #CONFIG# KEYCMD_RUN "RUN:"
;; #CONFIG# KEYCMD_F1 "@8$" ;; #CONFIG# KEYCMD_F1 "@8$"
;; #CONFIG# KEYCMD_F2 "LOAD" ;; #CONFIG# KEYCMD_F2 "LOAD"
;; #CONFIG# KEYCMD_F3 "@9$" ;; #CONFIG# KEYCMD_F3 "@9$"
;; #CONFIG# KEYCMD_F4 "RUN:" ;; #CONFIG# KEYCMD_F4 "\5FL"
;; #CONFIG# KEYCMD_F5 "@10$" ;; #CONFIG# KEYCMD_F5 "@10$"
;; #CONFIG# KEYCMD_F6 "REM F6" ;; #CONFIG# KEYCMD_F6 "\5FHF"
;; #CONFIG# KEYCMD_F7 "@11$" ;; #CONFIG# KEYCMD_F7 "@11$"
;; #CONFIG# KEYCMD_F8 "MONITOR" ;; #CONFIG# KEYCMD_F8 "MONITOR"
;; #CONFIG# KEYCMD_HELP "LIST" ;; #CONFIG# KEYCMD_HELP "LIST"
;; #CONFIG# KEYCMD_F9 "@28$" ;; #CONFIG# KEYCMD_F9 "@27$"
;; #CONFIG# KEYCMD_F10 "\5FL" ;; #CONFIG# KEYCMD_F10 "REM F10"
;; #CONFIG# KEYCMD_F11 "@29$" ;; #CONFIG# KEYCMD_F11 "@28$"
;; #CONFIG# KEYCMD_F12 "\5FHF" ;; #CONFIG# KEYCMD_F12 "@29$"
;; #CONFIG# KEYCMD_F13 "@30$" ;; #CONFIG# KEYCMD_F13 "@30$"
;; #CONFIG# KEYCMD_F14 "BOOTCPM" ;; #CONFIG# KEYCMD_F14 "BOOTCPM"
@@ -90,8 +90,8 @@
; --- Built-in DOS configuration ; --- Built-in DOS configuration
;; #CONFIG# UNIT_SDCARD 28 ;; #CONFIG# UNIT_SDCARD 27
;; #CONFIG# UNIT_FLOPPY 29 ;; #CONFIG# UNIT_FLOPPY 28 ; XXX use separate number for second floppy (device 29)
;; #CONFIG# UNIT_RAMDISK 30 ;; #CONFIG# UNIT_RAMDISK 30
+4
View File
@@ -122,6 +122,10 @@
!addr FD_LOADTRACK = $8072 ; current track for file loading !addr FD_LOADTRACK = $8072 ; current track for file loading
!addr FD_LOADSECTOR = $8073 ; current sector 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 ; XXX Free space
+10 -10
View File
@@ -14,17 +14,16 @@ dos_UNITSET:
@ok: @ok:
jsr dos_ENTER 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 ; Check what kind of device was requested
cmp #$00 cmp #$00
beq dos_UNITSET_sdcard beq dos_UNITSET_sdcard
; XXX devices below are not implemented yet cmp #$01
; cmp #$01 beq dos_UNITSET_floppy
; beq dos_UNITSET_floppy cmp #$02
; cmp #$02 beq dos_UNITSET_ramdisk
; beq dos_UNITSET_ramdisk
jmp dos_EXIT_SEC jmp dos_EXIT_SEC
@@ -38,12 +37,13 @@ dos_UNITSET_sdcard:
dos_UNITSET_floppy: dos_UNITSET_floppy:
stx UNIT_FLOPPY stx UNIT_FLOPPY
+skip_2_bytes_trash_nvz jmp dos_EXIT_CLC
; FALLTROUGH
dos_UNITSET_ramdisk: dos_UNITSET_ramdisk:
stx UNIT_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
+27 -16
View File
@@ -39,41 +39,48 @@ unit_rd_init_test_ram: ; non-destructive ATTIC/CELLAR RAM test
; For the start, mark extended RAM as not present ; For the start, mark extended RAM as not present
stx RD_STARTSEG ; by default $FF, to mark no RAM disk
inx inx
stx RD_MAXTRACK ; maximum allowed track number, for now set 0
stx RAM_ATTIC ; set ATTIC/CELLAR RAM as not present stx RAM_ATTIC ; set ATTIC/CELLAR RAM as not present
stx RAM_CELLAR stx RAM_CELLAR
; Prepare address - ATTIC RAM, $0800:$0000 ; Prepare address - CELLAR RAM, $0880:$0000
stx PNTR+0 stx PNTR+0
stx PNTR+1 stx PNTR+1
stx PNTR+2 lda #$80
sta PNTR+2
lda #$08 lda #$08
sta PNTR+3 sta PNTR+3
ldz #$00 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 ; Test for ATTIC RAM
jsr @perform_ram_test jsr @perform_ram_test
bne @done_attic 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: @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 ; Restore temporary address area content
ldx #$00 ldx #$00
@@ -84,6 +91,10 @@ unit_rd_init_test_ram: ; non-destructive ATTIC/CELLAR RAM test
cpx #$04 cpx #$04
bne @3 bne @3
; Clear RAM disk device number if no Hyper RAM available
jsr util_check_rd_ram
; End of initialization ; End of initialization
rts rts
+17 -1
View File
@@ -6,6 +6,11 @@
unit_rd_preload: unit_rd_preload:
; Check if RAM disk is enabled
lda UNIT_RAMDISK
beq @error_no_ramdisk
; XXX make sure attic RAM is present ; XXX make sure attic RAM is present
rts ; XXX remove when code is fully implemented rts ; XXX remove when code is fully implemented
@@ -28,6 +33,11 @@ unit_rd_preload:
; XXX load the file ; 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: @error_not_found:
; XXX set information about file not found ; XXX set error information
rts
@error_no_ramdisk:
; XXX set error information
rts rts
+21
View File
@@ -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
+1 -1
View File
@@ -92,7 +92,7 @@ load_iec:
sta EAL+1 sta EAL+1
!ifdef CONFIG_MB_M65 { !ifdef CONFIG_MB_M65 {
load_iec_m65cont: load_iec_m65cont:
} }
; If secondary address is 0, override EAL with STAL ; If secondary address is 0, override EAL with STAL