diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 6416122c..877b2072 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -109,26 +109,67 @@ !addr FD_STATUS_IDX = $806E ; - floppy !addr RD_STATUS_IDX = $806F ; - ram disk - !addr XX_STATUS_STR = $8070 - !addr SD_STATUS_STR = $8070 ; status string for SD card, terminated by 0 - !addr FD_STATUS_STR = $80A0 ; status string for floppy drive, terminated by 0 - !addr RD_STATUS_STR = $80D0 ; status string for ram disk, terminated by 0 + !addr SD_DESC = $8070 ; current file descriptor + + + + ; XXX Free space + ; - ; Further pages + ; Various buffers, caches, and other large memory chunks ; - !addr SD_CMDFN_BUF = $8100 ; buffer for command and/or file name, 128 bytes, SD card - !addr FD_CMDFN_BUF = $8180 ; buffer for command and/or file name, 128 bytes, floppy - !addr RD_CMDFN_BUF = $8200 ; buffer for command and/or file name, 128 bytes, ram disk + ; BAM cache for floppy drives; 2 KB (4 blocks) each, to cover up to ED floppies - XXX implementation to be written - !addr XX_DIR_ENTRY = $8280 ; directory entry in BASIC format - !addr SD_DIR_ENTRY = $8280 ; - SD card - !addr FD_DIR_ENTRY = $82B0 ; - floppy - !addr RD_DIR_ENTRY = $82E0 ; - ram disk + !addr FD_BAM_CACHE_0 = $8A00 ; - floppy drive 0 + !addr FD_BAM_CACHE_1 = $8E00 ; - floppy drive 1 - !addr SD_MEMSHADOW = $8310 ; 256 byte buffer for preserving original memory content - !addr SD_FILEBUF = $8410 ; 512 byte buffer for file reading + ; General purpose buffers, 512 bytes each, each starts at page start - XXX dynamic alllocation to be written - !addr SD_DESC = $8610 ; current file descriptor + !addr SHARED_BUF_0 = $9200 ; XXX temporarily hardcoded for usage by SD card + !addr SHARED_BUF_1 = $9400 + !addr SHARED_BUF_2 = $9600 + !addr SHARED_BUF_3 = $9800 + !addr SHARED_BUF_4 = $9A00 + !addr SHARED_BUF_5 = $9C00 + !addr SHARED_BUF_6 = $9E00 + !addr SHARED_BUF_7 = $A000 + !addr SHARED_BUF_8 = $A200 + !addr SHARED_BUF_9 = $A400 + !addr SHARED_BUF_A = $A600 + !addr SHARED_BUF_B = $A800 + !addr SHARED_BUF_C = $AA00 + !addr SHARED_BUF_D = $AC00 + !addr SHARED_BUF_E = $AE00 + !addr SHARED_BUF_F = $B000 + ; Memory shadow, needed for SD card support + + !addr SD_MEMSHADOW_BUF = $8200 ; 256 byte buffer for preserving original memory content + + ; Command/filename buffers, 128 bytes each - XXX extend to 256 bytes (change implementation) + + !addr SD_CMDFN_BUF = $B300 ; - SD card + !addr FD_CMDFN_BUF = $B400 ; - floppy + !addr RD_CMDFN_BUF = $B500 ; - ram disk + + ; Directory entry buffers, in BASIC format, $30 bytes each + + !addr XX_DIRENT_BUF = $B600 + !addr SD_DIRENT_BUF = $B600 ; - SD card + !addr FD_DIRENT_BUF = $B630 ; - floppy + !addr RD_DIRENT_BUF = $B660 ; - ram disk + + ; Status buffers, content terminated by 0, $30 bytes each + + !addr XX_STATUS_BUF = $B690 + !addr SD_STATUS_BUF = $B690 ; - SD card + !addr FD_STATUS_BUF = $B6C0 ; - floppy + !addr RD_STATUS_BUF = $B6F0 ; - ram disk + + ; + ; Reserved 18 KB for floppy track buffers + some area for track metadata + ; + + !addr XX_REMAINING = $B720 diff --git a/src/dos_m65/dev_floppy/dev_fd_init.s b/src/dos_m65/dev_floppy/dev_fd_init.s index 501bcc61..4be7c57a 100644 --- a/src/dos_m65/dev_floppy/dev_fd_init.s +++ b/src/dos_m65/dev_floppy/dev_fd_init.s @@ -20,7 +20,7 @@ dev_fd_init: @1: inx lda dos_sts_init_floppy,x - sta FD_STATUS_STR,x + sta FD_STATUS_BUF,x bne @1 ; End of initialization diff --git a/src/dos_m65/dev_ramdisk/dev_rd_init.s b/src/dos_m65/dev_ramdisk/dev_rd_init.s index e7be8d2c..964eae2a 100644 --- a/src/dos_m65/dev_ramdisk/dev_rd_init.s +++ b/src/dos_m65/dev_ramdisk/dev_rd_init.s @@ -20,7 +20,7 @@ dev_rd_init: @1: inx lda dos_sts_init_ramdisk,x - sta RD_STATUS_STR,x + sta RD_STATUS_BUF,x bne @1 ; End of initialization diff --git a/src/dos_m65/dev_sdcard/dev_sd_init.s b/src/dos_m65/dev_sdcard/dev_sd_init.s index 526e5d3a..4ee236a8 100644 --- a/src/dos_m65/dev_sdcard/dev_sd_init.s +++ b/src/dos_m65/dev_sdcard/dev_sd_init.s @@ -21,7 +21,7 @@ dev_sd_init: @1: inx lda dos_sts_init_sdcard,x - sta SD_STATUS_STR,x + sta SD_STATUS_BUF,x bne @1 ; Close all the files in the hypervisor, go to root directory diff --git a/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s b/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s index 91bb422e..fdcbaaa8 100644 --- a/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s +++ b/src/dos_m65/dev_sdcard/fs_hvsr_read_dir.s @@ -66,21 +66,21 @@ fs_hvsr_read_dir: jsr util_dir_filesize_bytes - ; Prepare output entry, starting from XX_DIR_ENTRY + initial offset + ; Prepare output entry, starting from XX_DIRENT_BUF + initial offset ldx #$00 ; offset for SD card unit lda #$01 ; link to the next line - dummy, will be regenerated by BASIC - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx lda PAR_FSIZE_BLOCKS+0 ; store number of blocks - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx lda PAR_FSIZE_BLOCKS+1 - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx lda #' ' ; indent file name @@ -88,14 +88,14 @@ fs_hvsr_read_dir: @lp1: dey bmi @lp1_done - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx bra @lp1 @lp1_done: lda #$22 ; opening quote - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx ldy #$FF ; put file name @@ -108,14 +108,14 @@ fs_hvsr_read_dir: beq @lp2_done cpy #$10 beq @lp2_done - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx bra @lp2 @lp2_done: lda #$22 ; closing quote - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx ldy #$10 ; put spaces for indentation @@ -128,7 +128,7 @@ fs_hvsr_read_dir: bne @lp3_done lda #' ' - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx bra @lp3 @@ -142,7 +142,7 @@ fs_hvsr_read_dir: @closed: lda #' ' - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx lda PAR_FTYPE ; put file type @@ -156,7 +156,7 @@ fs_hvsr_read_dir: lda dir_types, y beq @lp4_done - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx iny bra @lp4 @@ -167,21 +167,21 @@ fs_hvsr_read_dir: and #$40 beq @skipro lda #'<' - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx @skipro: lda #$00 ; put end of the line - sta XX_DIR_ENTRY, x + sta XX_DIRENT_BUF, x inx stx SD_ACPTR_LEN+0 sta SD_ACPTR_LEN+1 - lda #<(XX_DIR_ENTRY) + lda #<(XX_DIRENT_BUF) sta SD_ACPTR_PTR+0 - lda #>(XX_DIR_ENTRY) + lda #>(XX_DIRENT_BUF) sta SD_ACPTR_PTR+1 clc @@ -227,7 +227,7 @@ fs_hvsr_direntmem_prepare: ldx #$00 @1: ldy $1000, x - sty SD_MEMSHADOW, x + sty SD_MEMSHADOW_BUF, x inx bne @1 @@ -239,7 +239,7 @@ fs_hvsr_direntmem_restore: ldx #$00 @1: - ldy SD_MEMSHADOW, x + ldy SD_MEMSHADOW_BUF, x sty $1000, x inx bne @1 diff --git a/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s b/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s index 61977c37..29c88fba 100644 --- a/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s +++ b/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s @@ -99,12 +99,12 @@ fs_hvsr_read_file: ; Set pointer to new data - lda #SD_FILEBUF + lda #>SHARED_BUF_0 sta SD_ACPTR_PTR+1 - ; Copy data to SD_FILEBUF + ; Copy data to SHARED_BUF_0 lda #%10000000 ; select SD card buffer tsb SD_BUFCTL @@ -131,8 +131,8 @@ fs_hvsr_read_file: !byte $00 ; operation: COPY !word $0200 ; data size if 512 bytes !byte $00, $6E, $0D ; src. addr is $xxD6E00 - !byte <(SD_FILEBUF - $8000) - !byte >(SD_FILEBUF - $8000) + !byte <(SHARED_BUF_0 - $8000) + !byte >(SHARED_BUF_0 - $8000) !byte $01 ; dst. addr is $xx1xxxx (internal buffer) fs_hvsr_file_not_found: diff --git a/src/dos_m65/msg_acptr.s b/src/dos_m65/msg_acptr.s index e3bffd87..f1e0dbe2 100644 --- a/src/dos_m65/msg_acptr.s +++ b/src/dos_m65/msg_acptr.s @@ -90,21 +90,21 @@ msg_ACPTR_status_SD: ; get next byte of status - SD card ldx SD_STATUS_IDX inc SD_STATUS_IDX - lda SD_STATUS_STR,x + lda SD_STATUS_BUF,x bra msg_ACPTR_status_got msg_ACPTR_status_FD: ; get next byte of status - floppy ldx FD_STATUS_IDX inc FD_STATUS_IDX - lda FD_STATUS_STR,x + lda FD_STATUS_BUF,x bra msg_ACPTR_status_got msg_ACPTR_status_RD: ; get next byte of status - ram disk ldx RD_STATUS_IDX inc RD_STATUS_IDX - lda RD_STATUS_STR,x + lda RD_STATUS_BUF,x ; FALLTROUGH diff --git a/src/dos_m65/utils/util_status.s b/src/dos_m65/utils/util_status.s index 126f7a96..209a73cd 100644 --- a/src/dos_m65/utils/util_status.s +++ b/src/dos_m65/utils/util_status.s @@ -50,7 +50,7 @@ util_status_common: @lp: jsr code_LDA_nnnn_Y beq @lp_end - sta XX_STATUS_STR, x + sta XX_STATUS_BUF, x iny inx bra @lp @@ -69,13 +69,13 @@ util_status_common: ; Mark end of status and quit lda #$00 - sta XX_STATUS_STR, x + sta XX_STATUS_BUF, x rts util_status_store_comma: ldy #',' - sty XX_STATUS_STR, x + sty XX_STATUS_BUF, x inx rts @@ -86,7 +86,7 @@ util_status_store_number: cmp #200 bcc @store_00_199 ldy #'2' - sty XX_STATUS_STR, x + sty XX_STATUS_BUF, x inx sec sbc #200 @@ -97,7 +97,7 @@ util_status_store_number: cmp #100 bcc @store_00_99 ldy #'1' - sty XX_STATUS_STR, x + sty XX_STATUS_BUF, x inx sec sbc #100 @@ -115,11 +115,11 @@ util_status_store_number: @store_finalize: ; first digit to store in .Y, second in .A (need no add '0') - sty XX_STATUS_STR, x + sty XX_STATUS_BUF, x inx clc adc #'0' - sta XX_STATUS_STR, x + sta XX_STATUS_BUF, x inx rts