Better file IO

This commit is contained in:
Pecusx
2024-12-04 11:00:28 +01:00
parent ce327c37a8
commit 7d335669fe
3 changed files with 71 additions and 12 deletions
+60
View File
@@ -1155,6 +1155,60 @@ drawBricksLoop
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc FileUp
;--------------------------------------------------
inc LevelNumber+2
lda LevelNumber+2
cmp #'9'+1 ; 9+1 character code
bne NumberReady
lda #'0' ; 0 character code
sta LevelNumber+2
inc LevelNumber+1
lda LevelNumber+1
cmp #'9'+1 ; 9+1 character code
bne NumberReady
lda #'0' ; 0 character code
sta LevelNumber+1
inc LevelNumber
NumberReady
rts
.endp
;--------------------------------------------------
.proc LoadLevelData
;--------------------------------------------------
lda LevelType
beq level000
bmi levelTitle
; load level from disk
; prepare number in filename
ldx #2
@ lda LevelNumber,x
sta fname+7,x
dex
bpl @-
jsr close
jsr open
bmi open_error
jsr bget
bmi bget_error
go_close jsr close
rts
bget_error
cpy #136 ; EOF
beq go_close
open_error
mva #0 LevelType ; set level to internal 000
; reset file number to 001
ldx #2
@ lda StartLevelNumber,x
sta LevelNumber,x
dex
bpl @-
level000
levelTitle
rts
.endp
;--------------------------------------------------
.proc BuildLevelFromBuffer .proc BuildLevelFromBuffer
;-------------------------------------------------- ;--------------------------------------------------
lda LevelType lda LevelType
@@ -1298,6 +1352,12 @@ Level000_data
LevelFileBuff LevelFileBuff
LevelFileBuffLen=(screenWidth*maxLines)+20 LevelFileBuffLen=(screenWidth*maxLines)+20
.ds LevelFileBuffLen ; Buffer for data from the level file .ds LevelFileBuffLen ; Buffer for data from the level file
LevelNumber
.byte '001'
StartLevelNumber
.byte '001'
fname
.byte 'D:LEVEL000.DAT',$9b
;-------------------------------------------------- ;--------------------------------------------------
BigBrickFlag BigBrickFlag
.byte 0 .byte 0
BIN
View File
Binary file not shown.
+11 -12
View File
@@ -7,17 +7,16 @@
ldx #$10 ;IOCB #1 ldx #$10 ;IOCB #1
lda #$03 ;komenda: OPEN lda #$03 ;komenda: OPEN
sta iccmd,x sta ICCOM,x
lda #<fname ;adres nazwy pliku lda #<fname ;adres nazwy pliku
sta icbufa,x sta ICBAL,x
lda #>fname lda #>fname
sta icbufa+1,x sta ICBAH,x
lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis
sta icax1,x sta ICAX1,x
lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre
sta icax2,x sta ICAX2,x
jmp ciov jmp ciov
fname .byte "D:LEVEL000.DAT",$9b
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc bget .proc bget
@@ -26,15 +25,15 @@ fname .byte "D:LEVEL000.DAT",$9b
ldx #$10 ;IOCB #1 ldx #$10 ;IOCB #1
lda #$07 ;komenda: GET BYTES / BINARY READ lda #$07 ;komenda: GET BYTES / BINARY READ
sta iccmd,x sta ICCOM,x
lda #<LevelFileBuff ;adres w pamieci, gdzie maja trafic dane lda #<LevelFileBuff ;adres w pamieci, gdzie maja trafic dane
sta icbufa,x sta ICBAL,x
lda #>LevelFileBuff lda #>LevelFileBuff
sta icbufa+1,x sta ICBAH,x
lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach
sta icbufl,x sta ICBLL,x
lda #>(LevelFileBuffLen-2) lda #>(LevelFileBuffLen-2)
sta icbufl+1,x sta ICBLH,x
jmp ciov jmp ciov
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
@@ -43,7 +42,7 @@ fname .byte "D:LEVEL000.DAT",$9b
; CLOSE #1 ; CLOSE #1
ldx #$10 ;IOCB #1 ldx #$10 ;IOCB #1
lda #$0c ;komenda: CLOSE lda #$0c ;komenda: CLOSE
sta iccmd,x sta ICCOM,x
jmp ciov jmp ciov
.endp .endp