;Загрузка/запись состояния игры
;Загрузка отложенного состояния
LOAD ;-> GAME
if 1==1
ld a,PG_MAP
call setpg
ld de,savefn
OS_OPENHANDLE
push bc
ld de,0xc000;VIDEOS ;0x9000 сейчас обменяно
LD hl,0x3000
OS_READHANDLE
pop bc ;b=handle
push bc
ld de,VARS
LD hl,0x600
OS_READHANDLE
pop bc ;b=handle
OS_CLOSEHANDLE
LD HL,MUSNUM
DEC (HL) ;???
else ;TR-DOS
;Ищем файл
CALL FILE
LD C,#18
CALL TRDOS
JP NZ,ERROR
LD C,10
CALL TRDOS
LD A,C
INC C
JP Z,ERROR ;Нет файла
;Высчитываем адрес файла (сектор,дорожка)
LD C,8
CALL TRDOS
LD A,(#5CDD+13)
CP 57 ;размер состояния в секторах
JP NZ,ERROR
LD DE,(#5CDD+14)
;Считываем карту и массив
LD HL,VIDEOS
LD BC,#3005
CALL TRDOS
JP NZ,ERROR ;ошибка
;Считываем переменные
LD DE,(#5CF4)
LD HL,VARS
LD BC,#0605
CALL TRDOS
JP NZ,ERROR ;ошибка
;Считываем спрайт дня/ночи
; LD A,PG_VIEW
CALL PAGE_PG_VIEW
LD DE,(#5CF4)
LD HL,NG
LD BC,#0305
CALL TRDOS
JP NZ,ERROR ;ошибка
ld a,(...)
ld (daynightphase),a
endif
xor a
ld (DAY_NGT),a ;обновить спрайт дня и ночи сразу
JP GAME
;Сохранение состояния
SAVE
if 1==1
ld a,PG_MAP
call setpg
ld de,savefn
OS_CREATEHANDLE
push bc
ld de,0xc000;VIDEOS ;0x9000 сейчас обменяно
LD hl,0x3000
OS_WRITEHANDLE
pop bc ;b=handle
push bc
ld de,VARS
LD hl,0x600
OS_WRITEHANDLE
pop bc ;b=handle
OS_CLOSEHANDLE
else ;TR-DOS
;Ищем файл
LD A,PG_MAP
CALL PAGE
CALL FILE
LD C,#18
CALL TRDOS
JP NZ,ERROR2
LD C,10
CALL TRDOS
LD A,C
INC C
JR Z,NOFILE
;Высчитываем адрес файла (сектор,дорожка)
LD C,8
CALL TRDOS
LD A,(#5CDD+13)
CP 57 ;размер состояния в секторах
JP NZ,ERROR2
LD DE,(#5CDD+14)
;Записываем карту и массив
LD HL,MAP
LD BC,#3006
CALL TRDOS
JP NZ,ERROR2 ;ошибка
;Записываем переменные
LD DE,(#5CF4)
SAVE2 LD HL,VARS
LD BC,#0606
CALL TRDOS
JP NZ,ERROR2 ;ошибка
;Записываем спрайт дня/ночи
; LD A,PG_VIEW
CALL PAGE_PG_VIEW
LD DE,(#5CF4)
LD HL,NG
LD BC,#0306
CALL TRDOS
JP NZ,ERROR2 ;ошибка
endif
JP SAVE_OK
if 1==0
;Читаем системный сектор
NOFILE LD DE,#0008
LD HL,CAT
LD BC,#0105
CALL TRDOS
JP NZ,ERROR2 ;ошибка
LD A,(CAT+228) ;кол-во файлов
CP 128
JP NC,ERROR2
LD HL,(CAT+229);кол-во своб. секторов
LD DE,57
AND A
SBC HL,DE
JP C,ERROR2
;Записываем карту и массив+мусор
LD HL,MAP
LD DE,#3900
LD C,#0B
CALL TRDOS
JP NZ,ERROR2 ;ошибка
;Увеличиваем адрес на диске вперед на 48 секторов (3 трека)
LD DE,(CAT+225)
INC D,D,D
JR SAVE2
FILE LD HL,FILENAM
LD DE,#5CDD
LD BC,9
LDIR
RET
TRDOS EX AF,AF' ;'
XOR A
LD (23823),A ;Обнуляем код
LD (23824),A ;ошибки TR-DOS
LD (23570),A ;Блокируем поток
EX AF,AF' ;'
PUSH HL
LD HL,(23613)
LD (DOS_ERR+1),HL
LD HL,DOS_ERR ;Устанавливаем
EX (SP),HL ;свой обработчик
LD (23613),SP
JP #3D13
DOS_ERR LD HL,0
LD (23613),HL
LD A,6 ;Восстанавливаем
LD (23570),A ;поток
LD A,(23838)
LD B,A
LD A,(23823) ;Проверяем
AND A ;была ли ошибка
RET Z
CP B
RET Z
INC A
RET Z
ERR LD B,10
LD A,2
OUT (254),A
HALT
DJNZ $-1
XOR A
OUT (254),A
RET
FILENAM DB "VERASAVEC" ;TODO HDD
CAT
endif