Add UPDFB: update FILEBLK after LOADFILE/SAVEFILE.

This commit is contained in:
Bobbi Webber-Manners 2021-08-23 23:59:52 -04:00
parent 8d12c531cc
commit ac256afdfd
2 changed files with 43 additions and 13 deletions

Binary file not shown.

View File

@ -473,7 +473,8 @@ LOADFILE >>> ENTMAIN
:EOF2 LDA OPENPL+5 ; File ref num :EOF2 LDA OPENPL+5 ; File ref num
STA CLSPL+1 STA CLSPL+1
JSR CLSFILE JSR CLSFILE
:EXIT JSR COPYFB ; Copy FILEBLK to auxmem :EXIT JSR UPDFB ; Update FILEBLK
JSR COPYFB ; Copy FILEBLK to auxmem
>>> XF2AUX,OSFILERET >>> XF2AUX,OSFILERET
:BLOCKS DB $00 :BLOCKS DB $00
@ -516,9 +517,9 @@ SAVEFILE >>> ENTMAIN
STA CREATEPL+3 STA CREATEPL+3
LDA #$06 ; Filetype BIN LDA #$06 ; Filetype BIN
STA CREATEPL+4 STA CREATEPL+4
LDA FBLOAD ; Auxtype = start address LDA FBSTRT ; Auxtype = start address
STA CREATEPL+5 STA CREATEPL+5
LDA FBLOAD+1 LDA FBSTRT+1
STA CREATEPL+6 STA CREATEPL+6
LDA #$01 ; Storage type - file LDA #$01 ; Storage type - file
STA CREATEPL+7 STA CREATEPL+7
@ -538,11 +539,9 @@ SAVEFILE >>> ENTMAIN
LDA FBEND LDA FBEND
SBC FBSTRT SBC FBSTRT
STA :LENREM STA :LENREM
STA FILELEN
LDA FBEND+1 LDA FBEND+1
SBC FBSTRT+1 SBC FBSTRT+1
STA :LENREM+1 STA :LENREM+1
STA FILELEN+1
:L1 LDA FBSTRT ; Setup for first block :L1 LDA FBSTRT ; Setup for first block
STA A1L STA A1L
STA A2L STA A2L
@ -639,26 +638,57 @@ SAVEFILE >>> ENTMAIN
DW GINFOPL DW GINFOPL
BCS :EXIT BCS :EXIT
LDA #$02 ; Write error LDA #$02 ; Write error
:EXIT JSR UPDLENFB ; Update length in FILEBLK :EXIT JSR UPDFB ; Update FILEBLK
JSR COPYFB ; Copy FILEBLK to aux mem JSR COPYFB ; Copy FILEBLK to aux mem
>>> XF2AUX,OSFILERET >>> XF2AUX,OSFILERET
:BLOCKS DB $00 :BLOCKS DB $00
:LENREM DW $0000 ; Remaining length :LENREM DW $0000 ; Remaining length
FILELEN DW $0000 ; Total length
* Update file length in FILEBLK * Update FILEBLK before returning to aux memory
UPDLENFB LDA FILELEN ; Update CB with file len UPDFB LDA #<MOSFILE
STA OPENPL+1
STA GINFOPL+1
LDA #>MOSFILE
STA OPENPL+2
STA GINFOPL+2
JSR MLI ; Call GET_FILE_INFO
DB GINFOCMD
DW GINFOPL
BCS :ERR
LDA GINFOPL+5 ; Aux type LSB
STA FBLOAD
STA FBEXEC
LDA GINFOPL+6 ; Aux type MSB
STA FBLOAD+1
STA FBEXEC+1
STZ FBLOAD+2
STZ FBLOAD+3
STZ FBEXEC+2
STZ FBEXEC+3
JSR OPENFILE ; Open file
BCS :ERR
LDA OPENPL+5 ; File ref number
STA GMARKPL+1
JSR MLI ; Call GET_EOF MLI
DB GEOFCMD
DW GMARKPL ; MARK parms same as EOF
LDA GMARKPL+2
STA FBSTRT+0 STA FBSTRT+0
LDA FILELEN+1 LDA GMARKPL+3
STA FBSTRT+1 STA FBSTRT+1
STZ FBSTRT+2 LDA GMARKPL+4
STA FBSTRT+2
STZ FBSTRT+3 STZ FBSTRT+3
LDA #$33 ; 'W/R' attribs
STA FBEND+0
STZ FBEND+1 STZ FBEND+1
STZ FBEND+2 STZ FBEND+2
STZ FBEND+3 STZ FBEND+3
LDA #$33 ; W/R attributes LDA #$33 ; W/R attributes
STA FBEND LDA OPENPL+5 ; File ref numbre
RTS STA CLSPL+1
JSR CLSFILE
:ERR RTS
* Quit to ProDOS * Quit to ProDOS
QUIT INC $3F4 ; Invalidate powerup byte QUIT INC $3F4 ; Invalidate powerup byte