diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 0cd6902b..9cfdbf59 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -138,10 +138,12 @@ !addr F1_LOADTRACK = $807D ; current track for file loading !addr F1_LOADSECTOR = $807E ; current sector for file loading - !addr RD_STARTSEG = $807F ; RAM disk start address, 2nd most significant byte (or $FF if no RAM) - !addr RD_MAXTRACK = $8080 ; maximum RAM disk track number + !addr RD_MAXTRACK = $807F ; maximum RAM disk track number of loaded image + !addr RD_STARTSEG = $8080 ; RAM disk start address, 2nd most significant byte (or $FF if no RAM) + !addr RD_VALIDIMG = $8081 ; $00 = no valid image loaded - ; Reserved: $8081-$81FF + + ; Reserved: $8082-$81FF ; ; Various buffers, caches, and other large memory chunks diff --git a/src/dos_m65/unit_ramdisk/unit_rd_init.s b/src/dos_m65/unit_ramdisk/unit_rd_init.s index 0532228f..14d73474 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_init.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_init.s @@ -41,7 +41,7 @@ unit_rd_init_test_ram: ; non-destructive ATTIC/CELLAR RAM test stx RD_STARTSEG ; by default $FF, to mark no RAM disk inx - stx RD_MAXTRACK ; maximum allowed track number, for now set 0 + stx RD_VALIDIMG ; mark no valid image loaded stx RAM_ATTIC ; set ATTIC/CELLAR RAM as not present stx RAM_CELLAR diff --git a/src/dos_m65/unit_ramdisk/unit_rd_preload.s b/src/dos_m65/unit_ramdisk/unit_rd_preload.s index 3f06bbf0..97f86cd4 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_preload.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_preload.s @@ -4,17 +4,22 @@ ; +!addr __stoptrack = RD_DIR_PHASE ; helper value for detecting too large image + + unit_rd_preload: - ; Check if RAM disk is enabled + ; Check if RAM disk is enabled (should be disabled if no Hyper RAM is present) lda UNIT_RAMDISK beq @error_no_ramdisk - ; XXX make sure attic RAM is present - rts ; XXX remove when code is fully implemented + + + + ; Set file name ldy #>ramdisk_filename @@ -31,6 +36,30 @@ unit_rd_preload: +nop bcc @error_not_found ; branch if file not found + ; Calculate maximum amount of tracks possible to load + + lda #$FF + sta RD_MAXTRACK ; maximum track number of loaded image, for now set $FF + sta __stoptrack + + lda RAM_ATTIC + beq @added_attic + jsr unit_rd_preload_addram + +@added_attic: + + lda RAM_CELLAR + beq @added_cellar + jsr unit_rd_preload_addram + +@added_cellar: + + ; Load the file + + + + + ; XXX load the file ; XXX while loading set RD_MAXTRACK @@ -47,6 +76,12 @@ unit_rd_preload: ; End of initialization + lda #$FF + sta RD_VALIDIMG ; mark image as valid + + lda #$00 ; temporary storage needs to be restored to 0 + sta __stoptrack + rts @@ -61,3 +96,17 @@ unit_rd_preload: ; XXX set error information rts + + + + + +unit_rd_preload_addram: + + ; Add allowed number of tracks due to attic/cellar block presence + + clc + lda #$80 + adc __stoptrack + sta __stoptrack + rts