Кодерам
────────────────────────────────────────
ВАРИАНТ ОРГАНИЗАЦИИ РАБОТЫ
С ДИСКОВОДОМ
(С) Александр Сизенко (Alex_S)
Судя по последним релизам, например,
Slider`a, перенос программ c ленты в TR-
DOS еще не потерял своей актуальности.
По сему нижеприведенный материал, навер-
ное, будет полезен.
Некоторые игровые программы имеют
функции отгрузки/загрузки текущего coc-
тояния игровой ситуации на магнитофон.
Если данная программа не портит систем-
ную область, то проблем при "диcкoнaфи-
гaции" в принципе не возникает. Сложнее,
если программа поступает противным обра-
зом, например: располагая там свое тело.
Хочу предложить читателям, наверное,
один из самых простых способов организа-
ции работы таких игр c дисководом, раз-
paбoтaнный автором буквально методом
"научного тыка" и ни в коей мере не
претендующего на его оригинальность.
LD HL,#5С00 ;берем и стираем
LD DE,#5С01 ;на хрен систем-
LD ВС,#013A ;ную область
LD (HL),L ;Бейсика и TRDOS
LDIR
LD IY,#5C3A ;восстанавливаем
;стандартное
;значение IY
LD A,#FF
LD (IY),A ;кидаем сюда #FF
;(просто так на-
;до)
LD (#SCC8),A ;если этого не
;сделать, будут
;неприятности
;при обращении
;ко второй поло-
;вине диска
LD (#5D0C),A ;и сюда (зачем
;не знаю)
LD A,#С9 ;без команды RET
;ничего работать
;не будет
LD (#SCC2),A
ЕХ AF,AF` ;в A` будем по-
;сылать 5 или 6
;для LOAD/SAVE
LD С,A ;и помещать в С
LD HL,#6000 ;допустим, #6000
;адрес блока те-
;кущего состоя-
;ния
COUNT LD DE,#0000 ;B (COUNT+1) не-
;обходимо занес-
;ти после загру-
;зки (и возмож-
;ной распаковки)
;программы зна-
;чение слова по
;адресу #5CF4
;(счетчик сек-
;тор, трек),т.e.
;загружать/сохр-
;aнять будем в
;конце тела про-
;граммы, соотве-
;тственно длину
;моноблока Бей-
;cuk - программы
;увеличим на ве-
;личину регистра
;B (см. ниже)
LD B,1 ;к примеру, за-
;пись не превы-
;шает 256 байт
CALL #3D13 ;c некоторым
;трепетом входим
;в TR-DOS
Замечу, что все это работает только
c драйвом A, если Вы хотите, чтобы это
работало на диске B или даже на С и D,
то необходима небольшая доработка при
установке системных переменных:
LD A,#FF
............
LD (#SCC9),A ;для "B" этого
;хватит
LD (#5CCA),A
LD (#5CCB),A ;для С и D
............
DRIVE LD A,0 ;в ячейку
;DRIVE+1 после
;загрузки
;программы
LD (#5D16),A ;необходимо
;занести копию
;ячейки #5D16
;(число 60+номер
;накопителя)
Обращение к этой п/п для LOAD будет
таким:
........
LD A,5 ;или LD A,6 для
;SAVE
ЕХ AF,AF`
CALL DOS
........
Напомню, что процедура #3D13 рабо-
тает только c первым режимом прерывания.
При необходимости, выключим второй режим
на время обращения. Ну и естественно,
если в системной области Бейсика
расположено тело программы, сохраняем и
восстанавливаем ee значение.
* * *
Other articles: