From 81f0b16ca400f5807e4b13c6b36406a44dee20c6 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 18 May 2021 21:39:47 +0200 Subject: [PATCH] more ram disk code --- src/dos_m65/unit_ramdisk/unit_rd_preload.s | 101 +++++++++++++++++---- 1 file changed, 85 insertions(+), 16 deletions(-) diff --git a/src/dos_m65/unit_ramdisk/unit_rd_preload.s b/src/dos_m65/unit_ramdisk/unit_rd_preload.s index 97f86cd4..11dedca1 100644 --- a/src/dos_m65/unit_ramdisk/unit_rd_preload.s +++ b/src/dos_m65/unit_ramdisk/unit_rd_preload.s @@ -54,51 +54,120 @@ unit_rd_preload: @added_cellar: - ; Load the file + ; Load the image - - - - - ; XXX load the file - - ; XXX while loading set RD_MAXTRACK + lda #$FF + sta RD_MODE ; mark for nothing loaded @load_track: - ; XXX while loading set RD_MAXTRACK + inc RD_MAXTRACK ; XXX check against __stoptrack - detect file too llarge + ldx #$FF ; counter of 512-byte blocks to load +@load_track_loop: + phx - ; lda #$20 ; dos_closefile - ; sta HTRAP00 - ; +nop + ; Read 512 bytes + + lda #$1A ; dos_readfile + sta HTRAP00 + +nop + + cpx #$00 + bne @error_wrong_size_plx ; file size not multiplicity of 64K + + cpy #$00 + beq @load_image_end + + cpy #$02 + bne @error_wrong_size_plx ; file size not multiplicity of 64K + + stx RD_MODE ; .X should be 0 - mark that something was actually loaded + + plx + inx + + ; XXX launch DMA job to copy data + + cpx #$7F + bne @load_track_loop ; next 512-byte block of the same track + + bra @load_track ; next track + +@load_image_end: + + plx + cpx #$7F + bne @error_wrong_size ; file empty or file size not multiplicity of 64K + + lda RD_MAXTRACK + cmp #$02 + bcc @error_wrong_size ; file too small, at least 128K required + + lda #$20 ; dos_closefile + sta HTRAP00 + +nop ; End of initialization lda #$FF - sta RD_VALIDIMG ; mark image as valid + sta RD_VALIDIMG ; mark image as valid - lda #$00 ; temporary storage needs to be restored to 0 + lda #$00 ; temporary storage needs to be restored to 0 sta __stoptrack rts + +@error_wrong_size_plx: + + plx + +@error_wrong_size: + + jsr unit_rd_preload_err_common + + ; XXX set error information + + rts + + @error_not_found: - ; XXX set error information + jsr unit_rd_preload_err_common_noclose + + ; XXX set error information, put 0 to __stoptrack rts @error_no_ramdisk: - ; XXX set error information + jsr unit_rd_preload_err_common_noclose + + ; XXX set error information, put 0 to __stoptrack rts +unit_rd_preload_err_common: + + lda #$20 ; dos_closefile + sta HTRAP00 + +nop + + ; FALLTROUGH + +unit_rd_preload_err_common_noclose: + + lda #$00 ; temporary storage needs to be restored to 0 + sta __stoptrack + sta RD_VALIDIMG ; mark image as invalid + + rts + unit_rd_preload_addram: