CBDOS memory reorganization
This commit is contained in:
1 parent
62f9b2d3d6
commit
29db7340dd
8 files changed
+92
-51
No files matched your search
+56
-15
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in new issue
Block a user