CBDOS memory reorganization

This commit is contained in:
FeralChild64 committed 2021-03-02 23:21:30 +01:00
1 parent 62f9b2d3d6
commit 29db7340dd
8 files changed
+92 -51

No files matched your search

+56 -15
View File
@@ -109,26 +109,67 @@
!addr FD_STATUS_IDX = $806E ; - floppy !addr FD_STATUS_IDX = $806E ; - floppy
!addr RD_STATUS_IDX = $806F ; - ram disk !addr RD_STATUS_IDX = $806F ; - ram disk
!addr XX_STATUS_STR = $8070 !addr SD_DESC = $8070 ; current file descriptor
!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
; 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 ; BAM cache for floppy drives; 2 KB (4 blocks) each, to cover up to ED floppies - XXX implementation to be written
!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
!addr XX_DIR_ENTRY = $8280 ; directory entry in BASIC format !addr FD_BAM_CACHE_0 = $8A00 ; - floppy drive 0
!addr SD_DIR_ENTRY = $8280 ; - SD card !addr FD_BAM_CACHE_1 = $8E00 ; - floppy drive 1
!addr FD_DIR_ENTRY = $82B0 ; - floppy
!addr RD_DIR_ENTRY = $82E0 ; - ram disk
!addr SD_MEMSHADOW = $8310 ; 256 byte buffer for preserving original memory content ; General purpose buffers, 512 bytes each, each starts at page start - XXX dynamic alllocation to be written
!addr SD_FILEBUF = $8410 ; 512 byte buffer for file reading
!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
+1 -1
View File
@@ -20,7 +20,7 @@ dev_fd_init:
@1: @1:
inx inx
lda dos_sts_init_floppy,x lda dos_sts_init_floppy,x
sta FD_STATUS_STR,x sta FD_STATUS_BUF,x
bne @1 bne @1
; End of initialization ; End of initialization
+1 -1
View File
@@ -20,7 +20,7 @@ dev_rd_init:
@1: @1:
inx inx
lda dos_sts_init_ramdisk,x lda dos_sts_init_ramdisk,x
sta RD_STATUS_STR,x sta RD_STATUS_BUF,x
bne @1 bne @1
; End of initialization ; End of initialization
+1 -1
View File
@@ -21,7 +21,7 @@ dev_sd_init:
@1: @1:
inx inx
lda dos_sts_init_sdcard,x lda dos_sts_init_sdcard,x
sta SD_STATUS_STR,x sta SD_STATUS_BUF,x
bne @1 bne @1
; Close all the files in the hypervisor, go to root directory ; Close all the files in the hypervisor, go to root directory
+18 -18
View File
@@ -66,21 +66,21 @@ fs_hvsr_read_dir:
jsr util_dir_filesize_bytes 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 ldx #$00 ; offset for SD card unit
lda #$01 ; link to the next line - dummy, will be regenerated by BASIC lda #$01 ; link to the next line - dummy, will be regenerated by BASIC
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
lda PAR_FSIZE_BLOCKS+0 ; store number of blocks lda PAR_FSIZE_BLOCKS+0 ; store number of blocks
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
lda PAR_FSIZE_BLOCKS+1 lda PAR_FSIZE_BLOCKS+1
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
lda #' ' ; indent file name lda #' ' ; indent file name
@@ -88,14 +88,14 @@ fs_hvsr_read_dir:
@lp1: @lp1:
dey dey
bmi @lp1_done bmi @lp1_done
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
bra @lp1 bra @lp1
@lp1_done: @lp1_done:
lda #$22 ; opening quote lda #$22 ; opening quote
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
ldy #$FF ; put file name ldy #$FF ; put file name
@@ -108,14 +108,14 @@ fs_hvsr_read_dir:
beq @lp2_done beq @lp2_done
cpy #$10 cpy #$10
beq @lp2_done beq @lp2_done
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
bra @lp2 bra @lp2
@lp2_done: @lp2_done:
lda #$22 ; closing quote lda #$22 ; closing quote
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
ldy #$10 ; put spaces for indentation ldy #$10 ; put spaces for indentation
@@ -128,7 +128,7 @@ fs_hvsr_read_dir:
bne @lp3_done bne @lp3_done
lda #' ' lda #' '
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
bra @lp3 bra @lp3
@@ -142,7 +142,7 @@ fs_hvsr_read_dir:
@closed: @closed:
lda #' ' lda #' '
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
lda PAR_FTYPE ; put file type lda PAR_FTYPE ; put file type
@@ -156,7 +156,7 @@ fs_hvsr_read_dir:
lda dir_types, y lda dir_types, y
beq @lp4_done beq @lp4_done
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
iny iny
bra @lp4 bra @lp4
@@ -167,21 +167,21 @@ fs_hvsr_read_dir:
and #$40 and #$40
beq @skipro beq @skipro
lda #'<' lda #'<'
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
@skipro: @skipro:
lda #$00 ; put end of the line lda #$00 ; put end of the line
sta XX_DIR_ENTRY, x sta XX_DIRENT_BUF, x
inx inx
stx SD_ACPTR_LEN+0 stx SD_ACPTR_LEN+0
sta SD_ACPTR_LEN+1 sta SD_ACPTR_LEN+1
lda #<(XX_DIR_ENTRY) lda #<(XX_DIRENT_BUF)
sta SD_ACPTR_PTR+0 sta SD_ACPTR_PTR+0
lda #>(XX_DIR_ENTRY) lda #>(XX_DIRENT_BUF)
sta SD_ACPTR_PTR+1 sta SD_ACPTR_PTR+1
clc clc
@@ -227,7 +227,7 @@ fs_hvsr_direntmem_prepare:
ldx #$00 ldx #$00
@1: @1:
ldy $1000, x ldy $1000, x
sty SD_MEMSHADOW, x sty SD_MEMSHADOW_BUF, x
inx inx
bne @1 bne @1
@@ -239,7 +239,7 @@ fs_hvsr_direntmem_restore:
ldx #$00 ldx #$00
@1: @1:
ldy SD_MEMSHADOW, x ldy SD_MEMSHADOW_BUF, x
sty $1000, x sty $1000, x
inx inx
bne @1 bne @1
+5 -5
View File
@@ -99,12 +99,12 @@ fs_hvsr_read_file:
; Set pointer to new data ; Set pointer to new data
lda #<SD_FILEBUF lda #<SHARED_BUF_0
sta SD_ACPTR_PTR+0 sta SD_ACPTR_PTR+0
lda #>SD_FILEBUF lda #>SHARED_BUF_0
sta SD_ACPTR_PTR+1 sta SD_ACPTR_PTR+1
; Copy data to SD_FILEBUF ; Copy data to SHARED_BUF_0
lda #%10000000 ; select SD card buffer lda #%10000000 ; select SD card buffer
tsb SD_BUFCTL tsb SD_BUFCTL
@@ -131,8 +131,8 @@ fs_hvsr_read_file:
!byte $00 ; operation: COPY !byte $00 ; operation: COPY
!word $0200 ; data size if 512 bytes !word $0200 ; data size if 512 bytes
!byte $00, $6E, $0D ; src. addr is $xxD6E00 !byte $00, $6E, $0D ; src. addr is $xxD6E00
!byte <(SD_FILEBUF - $8000) !byte <(SHARED_BUF_0 - $8000)
!byte >(SD_FILEBUF - $8000) !byte >(SHARED_BUF_0 - $8000)
!byte $01 ; dst. addr is $xx1xxxx (internal buffer) !byte $01 ; dst. addr is $xx1xxxx (internal buffer)
fs_hvsr_file_not_found: fs_hvsr_file_not_found:
+3 -3
View File
@@ -90,21 +90,21 @@ msg_ACPTR_status_SD: ; get next byte of status - SD card
ldx SD_STATUS_IDX ldx SD_STATUS_IDX
inc SD_STATUS_IDX inc SD_STATUS_IDX
lda SD_STATUS_STR,x lda SD_STATUS_BUF,x
bra msg_ACPTR_status_got bra msg_ACPTR_status_got
msg_ACPTR_status_FD: ; get next byte of status - floppy msg_ACPTR_status_FD: ; get next byte of status - floppy
ldx FD_STATUS_IDX ldx FD_STATUS_IDX
inc FD_STATUS_IDX inc FD_STATUS_IDX
lda FD_STATUS_STR,x lda FD_STATUS_BUF,x
bra msg_ACPTR_status_got bra msg_ACPTR_status_got
msg_ACPTR_status_RD: ; get next byte of status - ram disk msg_ACPTR_status_RD: ; get next byte of status - ram disk
ldx RD_STATUS_IDX ldx RD_STATUS_IDX
inc RD_STATUS_IDX inc RD_STATUS_IDX
lda RD_STATUS_STR,x lda RD_STATUS_BUF,x
; FALLTROUGH ; FALLTROUGH
+7 -7
View File
@@ -50,7 +50,7 @@ util_status_common:
@lp: @lp:
jsr code_LDA_nnnn_Y jsr code_LDA_nnnn_Y
beq @lp_end beq @lp_end
sta XX_STATUS_STR, x sta XX_STATUS_BUF, x
iny iny
inx inx
bra @lp bra @lp
@@ -69,13 +69,13 @@ util_status_common:
; Mark end of status and quit ; Mark end of status and quit
lda #$00 lda #$00
sta XX_STATUS_STR, x sta XX_STATUS_BUF, x
rts rts
util_status_store_comma: util_status_store_comma:
ldy #',' ldy #','
sty XX_STATUS_STR, x sty XX_STATUS_BUF, x
inx inx
rts rts
@@ -86,7 +86,7 @@ util_status_store_number:
cmp #200 cmp #200
bcc @store_00_199 bcc @store_00_199
ldy #'2' ldy #'2'
sty XX_STATUS_STR, x sty XX_STATUS_BUF, x
inx inx
sec sec
sbc #200 sbc #200
@@ -97,7 +97,7 @@ util_status_store_number:
cmp #100 cmp #100
bcc @store_00_99 bcc @store_00_99
ldy #'1' ldy #'1'
sty XX_STATUS_STR, x sty XX_STATUS_BUF, x
inx inx
sec sec
sbc #100 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') @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 inx
clc clc
adc #'0' adc #'0'
sta XX_STATUS_STR, x sta XX_STATUS_BUF, x
inx inx
rts rts