improved support for different RAM configurations
This commit is contained in:
1 parent
7510d4a83f
commit
d68583d1b3
7 files changed
+89
-37
No files matched your search
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
+10
-10
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user