?login_element?

Subversion Repositories NedoOS

Rev

Rev 917 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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