📄 save.s
字号:
include h/mori.h
if nc1020
include ../filesys_rom/h/GFFS.h
include ../filesys_rom/h/GFFS.mac
endif
public check_save
public save_file
public load_file
if nc1020
check_save:
BREAK_BANK __CDRoot
enter_my_dir:
move dirname,FileName,#16
BREAK_BANK __DirEnter ;gmud
bcc check_save2
cmp1 FileErrorCode,#ERR_NOT_EXIST ;判断是否是"目录不存在"错误
beq check_save1
sec
rts
check_save1:
lm FileAttribute,#11110000b ;创建目录
lm FileAttribute+1,#0ffh
lm BlockType,#DIR_BLOCK
lda #0ffh
sta FileExpireDate
sta FileExpireDate+1
sta FileExpireDate+2
BREAK_BANK __FileCreate
bcc enter_my_dir
rts
check_save2:
lda #0
jsr save_name
jsr save_head
sta _a3
ldx #11
check_save4:
lda data_read_buf,x
sta ScreenBuffer+36,x
dex
bpl check_save4
lda #1
jsr save_name
jsr save_head
sta _a3h
ldx #11
check_save7:
lda data_read_buf,x
sta ScreenBuffer+62,x
dex
bpl check_save7
rts
save_file:
lm game_ver,#01h
lda _a3
jsr save_name
lm FileOpenMode,#OPEN_WRITE
BREAK_BANK __FileOpen
bcc replace_file
cmp1 FileErrorCode,#ERR_NOT_EXIST
bne save_rts
new_file:
lm FileAttribute,#NORMAL_NODE_ATTR ;创建文件
lm FileAttribute+1,#FILE_UNTRANS_FLAG
lm BlockType,#NORMAL_USER_BLOCK
lda #0ffh
sta FileExpireDate
sta FileExpireDate+1
sta FileExpireDate+2
BREAK_BANK __FileCreate
bcs save_rts
save_file1:
lm2 DataBuffer,#save_data
lm2 DataSize,#save_len
BREAK_BANK __FileWrite
BREAK_BANK __FileClose
save_rts:
rts
replace_file:
lm2 DataOffset,#0
sta DataOffset+2
BREAK_BANK __FileLocate
jmp save_file1
load_file:
lda _a3
jsr save_name
lm FileOpenMode,#OPEN_READ
BREAK_BANK __FileOpen
bcs load_file1
lm2 DataBuffer,#save_data
lm2 DataSize,#save_len
BREAK_BANK __FileRead
BREAK_BANK __FileClose
sec
rts
load_file1:
clc
rts
save_name:
bne save_name1
move save1,FileName,#16
rts
save_name1:
move save2,FileName,#16
rts
save_head:
lm FileOpenMode,#OPEN_READ
BREAK_BANK __FileOpen
bcs save_head1
lm2 DataBuffer,#data_read_buf
lm2 DataSize,#12
BREAK_BANK __FileRead
BREAK_BANK __FileClose
lda #1
rts
save_head1:
ldx #11
save_head2:
lda no_save,x
sta data_read_buf,x
dex
bpl save_head2
lda #0
rts
else
check_save:
ldx #3
check_save1:
lda dirname,x
sta FileName,x
dex
bpl check_save1
BREAK_BANK __DIREnter
lda #0
jsr save_name
jsr save_head
sta _a3
ldx #11
check_save4:
lda data_read_buf,x
sta ScreenBuffer+36,x
dex
bpl check_save4
lda #1
jsr save_name
jsr save_head
sta _a3h
ldx #11
check_save7:
lda data_read_buf,x
sta ScreenBuffer+62,x
dex
bpl check_save7
rts
save_name0:
bne save_name2
ldx #0
save_name1:
lda save1,x
sta data_read_buf,x
beq save_name4
inx
bne save_name1
save_name2:
ldx #0
save_name3:
lda save2,x
sta data_read_buf,x
beq save_name4
inx
bne save_name3
save_name4:
rts
save_name:
jsr save_name0
save_name5:
stx RecordSize
lm RecordSize+1,#0
lm2 RecordBuffer,#data_read_buf
BREAK_BANK __FileHeadCheck
lda FileErrorCode
rts
save_head:
bne save_head1
lm FileOpenMode,#OPEN_READ
BREAK_BANK __FileOpen
lda FileErrorCode
bne save_head1
lm2 RecordBuffer,#data_read_buf
lm RecordSize,#12
lm RecordOffset,#0
sta RecordOffset+1
sta RecordSize+1
BREAK_BANK __FileRead
BREAK_BANK __FileClose
lda #1
rts
save_head1:
ldx #11
save_head2:
lda no_save,x
sta data_read_buf,x
dex
bpl save_head2
lda #0
rts
save_file:
lm game_ver,#01h
lda _a3
jsr save_name
bne save_file1 ;无该文件
BREAK_BANK __FileDelete
jmp save_file
save_file1:
lm FileAttribute,#ATTR_LB
lm2 RecordSize,#save_len
BREAK_BANK __FileCreate
lda FileErrorCode
bne save_file2
lm FileOpenMode,#OPEN_WRITE
BREAK_BANK __FileOpen
lda FileErrorCode
bne save_file2
lm2 RecordBuffer,#save_data
lm2 RecordSize,#save_len
lm RecordOffset,#0
sta RecordOffset+1
BREAK_BANK __FileWrite
lda _a3
jsr save_name0
stx RecordSize
lm RecordSize+1,#0
lm2 RecordBuffer,#data_read_buf
BREAK_BANK __FileHeadWrite
BREAK_BANK __FileClose
save_file2:
rts
load_file:
lda _a3
jsr save_name
bne load_file1 ;无该文件
lm FileOpenMode,#OPEN_READ
BREAK_BANK __FileOpen
lda FileErrorCode
bne load_file1
lm2 RecordBuffer,#save_data
lm2 RecordSize,#save_len
lm RecordOffset,#0
sta RecordOffset+1
BREAK_BANK __FileRead
BREAK_BANK __FileClose
sec
rts
load_file1:
clc
rts
endif
if nc1020
dirname:
db '应用程序 '
else
dirname:
db 'udf '
endif
save1:
db 'doom1.sav ',0
save2:
db 'doom2.sav ',0
no_save:
db '空白存档 '
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -