?login_element?

Subversion Repositories NedoOS

Rev

Rev 881 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;Загрузка/запись состояния игры
  2.  
  3. ;Загрузка отложенного состояния
  4. LOAD ;-> GAME
  5.        if 1==1
  6.         ld a,PG_MAP
  7.         call setpg
  8.         ld de,savefn
  9.         OS_OPENHANDLE
  10.         push bc      
  11.         ld de,0xc000;VIDEOS ;0x9000 сейчас обменяно
  12.         LD hl,0x3000
  13.         OS_READHANDLE
  14.         pop bc ;b=handle
  15.         push bc
  16.         ld de,VARS
  17.         LD hl,0x600
  18.         OS_READHANDLE
  19.         pop bc ;b=handle
  20.         OS_CLOSEHANDLE
  21.        else ;TR-DOS
  22. ;Ищем файл
  23.         CALL FILE
  24.         LD C,#18
  25.         CALL TRDOS
  26.         JP NZ,ERROR
  27.         LD C,10
  28.         CALL TRDOS
  29.         LD A,C
  30.         INC C
  31.         JP Z,ERROR ;Нет файла
  32. ;Высчитываем адрес файла (сектор,дорожка)
  33.         LD C,8
  34.         CALL TRDOS
  35.         LD A,(#5CDD+13)
  36.         CP 57 ;размер состояния в секторах
  37.         JP NZ,ERROR
  38.         LD DE,(#5CDD+14)
  39. ;Считываем карту и массив
  40.         LD HL,VIDEOS
  41.         LD BC,#3005
  42.         CALL TRDOS
  43.         JP NZ,ERROR ;ошибка
  44. ;Считываем переменные
  45.         LD DE,(#5CF4)
  46.         LD HL,VARS
  47.         LD BC,#0605
  48.         CALL TRDOS
  49.         JP NZ,ERROR ;ошибка
  50. ;Считываем спрайт дня/ночи
  51. ;      LD A,PG_VIEW
  52.         CALL PAGE_PG_VIEW
  53.         LD DE,(#5CF4)
  54.         LD HL,NG
  55.         LD BC,#0305
  56.         CALL TRDOS
  57.         JP NZ,ERROR ;ошибка
  58.        
  59.         ld a,(...)
  60.         ld (daynightphase),a
  61.        endif
  62.         xor a
  63.         ld (DAY_NGT),a ;обновить спрайт дня и ночи сразу
  64.        
  65.         JP GAME
  66.  
  67. ;Сохранение состояния
  68. SAVE
  69.        if 1==1
  70.         ld a,PG_MAP
  71.         call setpg
  72.         ld de,savefn
  73.         OS_CREATEHANDLE
  74.         push bc      
  75.         ld de,0xc000;VIDEOS ;0x9000 сейчас обменяно
  76.         LD hl,0x3000
  77.         OS_WRITEHANDLE
  78.         pop bc ;b=handle
  79.         push bc
  80.         ld de,VARS
  81.         LD hl,0x600
  82.         OS_WRITEHANDLE
  83.         pop bc ;b=handle
  84.         OS_CLOSEHANDLE
  85.        else ;TR-DOS
  86. ;Ищем файл
  87.         LD A,PG_MAP
  88.         CALL PAGE
  89.         CALL FILE
  90.         LD C,#18
  91.         CALL TRDOS
  92.         JP NZ,ERROR2
  93.         LD C,10
  94.         CALL TRDOS
  95.         LD A,C
  96.         INC C
  97.         JR Z,NOFILE
  98. ;Высчитываем адрес файла (сектор,дорожка)
  99.         LD C,8
  100.         CALL TRDOS
  101.         LD A,(#5CDD+13)
  102.         CP 57 ;размер состояния в секторах
  103.         JP NZ,ERROR2
  104.         LD DE,(#5CDD+14)
  105. ;Записываем карту и массив
  106.         LD HL,MAP
  107.         LD BC,#3006
  108.         CALL TRDOS
  109.         JP NZ,ERROR2 ;ошибка
  110. ;Записываем переменные
  111.         LD DE,(#5CF4)
  112. SAVE2   LD HL,VARS
  113.         LD BC,#0606
  114.         CALL TRDOS
  115.         JP NZ,ERROR2 ;ошибка
  116. ;Записываем спрайт дня/ночи
  117. ;      LD A,PG_VIEW
  118.         CALL PAGE_PG_VIEW
  119.         LD DE,(#5CF4)
  120.         LD HL,NG
  121.         LD BC,#0306
  122.         CALL TRDOS
  123.         JP NZ,ERROR2 ;ошибка
  124.        endif
  125.         JP SAVE_OK
  126.  
  127.        if 1==0
  128. ;Читаем системный сектор
  129. NOFILE  LD DE,#0008
  130.         LD HL,CAT
  131.         LD BC,#0105
  132.         CALL TRDOS
  133.         JP NZ,ERROR2   ;ошибка
  134.         LD A,(CAT+228) ;кол-во файлов
  135.         CP 128
  136.         JP NC,ERROR2
  137.         LD HL,(CAT+229);кол-во своб. секторов
  138.         LD DE,57
  139.         AND A
  140.         SBC HL,DE
  141.         JP C,ERROR2
  142.  
  143. ;Записываем карту и массив+мусор
  144.         LD HL,MAP
  145.         LD DE,#3900
  146.         LD C,#0B
  147.         CALL TRDOS
  148.         JP NZ,ERROR2 ;ошибка
  149. ;Увеличиваем адрес на диске вперед на 48 секторов (3 трека)
  150.         LD DE,(CAT+225)
  151.         INC D,D,D
  152.  
  153.         JR SAVE2
  154.  
  155. FILE    LD HL,FILENAM
  156.         LD DE,#5CDD
  157.         LD BC,9
  158.         LDIR
  159.         RET
  160.  
  161. TRDOS   EX AF,AF' ;'
  162.         XOR A
  163.         LD (23823),A  ;Обнуляем код
  164.         LD (23824),A  ;ошибки TR-DOS
  165.         LD (23570),A  ;Блокируем поток
  166.         EX AF,AF' ;'
  167.         PUSH HL
  168.         LD HL,(23613)
  169.         LD (DOS_ERR+1),HL
  170.         LD HL,DOS_ERR ;Устанавливаем
  171.         EX (SP),HL    ;свой обработчик
  172.         LD (23613),SP
  173.         JP #3D13
  174. DOS_ERR LD HL,0
  175.         LD (23613),HL
  176.         LD A,6        ;Восстанавливаем
  177.         LD (23570),A  ;поток
  178.         LD A,(23838)
  179.         LD B,A
  180.         LD A,(23823)  ;Проверяем
  181.         AND A         ;была ли ошибка
  182.         RET Z
  183.         CP B
  184.         RET Z
  185.         INC A
  186.         RET Z
  187. ERR     LD B,10
  188.         LD A,2
  189.         OUT (254),A
  190.         HALT
  191.         DJNZ $-1
  192.         XOR A
  193.         OUT (254),A
  194.         RET
  195.  
  196. FILENAM DB "VERASAVEC" ;TODO HDD
  197. CAT
  198.        endif
  199.