АВТОРСКАЯ РАЗРАБОТКА
© С. Веремеенко
АДАПТАЦИЯ ИГР 8-БИТОВЫХ ВИДЕОПРИСТАВОК ДЛЯ ZX-SPECTRUM С ВИДЕОПРОЦЕССОРОМ
В ZX-Ревю 1995/6 была опубликована статья «Видеопроцессор» для ZX-Spectrum". Первые отклики на нее показали, что наибольший интерес (пока!!) вызвала возможность адаптации игр 8-битовых видеоприставок для ZX-Spectrum с видеопроцессором.
Это несколько не тот эффект, на который я рассчитывал, но, как говорится: "Голос народа - глас божий".
Вообще-то, при разработке интерфейсной платы не ставилась задача возможности адаптации дендивских игрушек под Spectrum. Это выявилось уже при завершении работы, как некое бесплатное приложение.
Чтобы расширить круг программ, адаптация которых возможна, пришлось внести небольшие изменения в схему интерфейсной платы. Новая схема полностью совместима со старой при работе в режиме видеопроцессора. Её дополнительные функции используются только при загрузке дендивских игрушек.
Схема нового варианта интерфейсной платы приведена на рис. 1. Микросхемы D10 и D14 можно заменить на 556РТ11. В этом случае резисторы R1-R8 устанавливать не нужно. Если DENDY подключается по низкой частоте, то ее блок питания можно не подключать и, в любом случае, выключатель питания должен быть в положении "выключено", т. к. питание заведено от SPECTRUMa.
Прошивки ПЗУ приведены в таблицах на рис. 2-4.
Ограничения на адаптацию.
Интерфейсная плата в, своей максимальной конфигурации, имеет один банк ОЗУ программ емкостью 32 К. Некоторые игры занимают несколько (до 8 ) банков. Если в игре используется быстрое переключение банков, такая игра, для предложенного варианта интерфейсной платы, адаптирована быть не может. Не представляет особого труда увеличить емкость ОЗУ до 128 К. При этом появится возможность адаптации любых игр, но вряд ли это целесообразно. Стоимость платы резко возрастет, а количество игр увеличится не очень заметно. Подавляющее большинство игр из картриджей могут быть адаптированы под существующий вариант.
Существуют несколько разновидностей картриджей 8-битовых видеоприставок. Рассмотрим некоторые из них.
В простейшем и самом приятном случае, картридж содержит 1 банк ПЗУ программ (в дальнейшем S-ROM) и 1 банк видеоПЗУ (V-ROM). Эти картриджи обычно содержат одну игру. Считывание информации из них не представляет никаких трудностей. В принципе, можно использовать любой программатор РПЗУ с соответствующим переходником. Файлы S-ROM и V-ROM в коррекции не нуждаются, и их достаточно снабдить BASIC-загрузчиком.
Наиболее распространены картриджи, в которых ПЗУ делится на несколько банков. Банки ПЗУ переключаются путем записи кода в специальный регистр, как правило, выполненный на микросхеме 74ALS161 (1533ИЕ10). Эта микросхема используется как регистр с параллельной записью. При считывании информации из таких картриджей возникают некоторые трудности.
Запись в регистр осуществляется сигналом WRS, формально- это запись в ПЗУ. Естественно, никакой записи в ПЗУ при этом не происходит, но картриджи устроены так, что S-ROM по сигналу записи переходит в режим чтения! Если порт, выставивший данные, достаточно мощный, он, конечно, передавит достаточно хилый S-ROM, но, в этом случае, невозможно поручиться за сохранность картриджа. Ну, а если порт достаточно деликатный, байт на входе регистра банков выставит S-ROM, и что туда запишется предсказать невозможно. Единственный выход заключается в том, что в S-ROM нужно записывать то, что уже там есть. Положение усугубляется тем, что входы регистра банков могут быть подключены как к шине данных, так и к шине адреса, и разряды могут использоваться любые. Кроме того, часто используется дополнительная логика, которая может модифицировать номер банка в зависимости от других разрядов. А если учесть еще и то, что иногда применяются бескорпусные микросхемы, залитые эпоксидкой, и проследить схему по дорожкам невозможно.
Однако, положение не так безнадежно, как может показаться. Мною написана программе "Анализатор картриджей V1.4" Она позволяет за несколько секунд определить все параметры картриджей этого типа, считать информацию и записать ее в виде группы файлов на дискету. Картридж подключается к компьютеру через специальный адаптер схема которого приведена на рис 5.
Адаптер содержит 4 выходных и 2 входных порта, буфер данных и дешифратор адресов портов. Если у Вас возникнет необходимость изменить адреса портов, то придется изменить схему дешифратора. Через порты ADRF и ADRL устанавливается адрес S-ROM или V-ROM, через порть, RDAT и WDAT производится чтение и запись данных. Порт WDAT имеет третье состояние выхода. Порт УПР служит для передачи управляющих сигналов. Порт РЕЖ позволяет определить режим работы V-ROM данного картриджа.
Некоторую сложность представляет выбор адресов портов. В разных моделях SPECTRUM для дешифрации системных портов задействованы различные разряды адресной шины с различной степенью неполноты дешифрации. Вследствие этого очень трудно выбрать адреса внешних портов, которые не конфликтовали бы с внутренними во всех моделях. Чтобы не заставлять пользователей переделывать свои компьютеры, программа «Анализатор картриджей» позволяет выбрать произвольные, наиболее удобные для каждой модели адреса портов. Исходно, в ней используются адреса 04h, 0Ch, 14h, lCh. Эти адреса внешних портов удобны для использования в SCORPION ZS-256. При необходимости их изменения нужно выбрать в главном меню пункт "НАСТРОЙКА ПОРТОВ" и внести в таблицу портов соответствующие изменения. Программа с внесенными изменениями перезапишется на дискету, и в дальнейшем будет использовать, указанны Вами адреса портов. Эту процедуру можно проводить многократно, но если у Вас не очень надежный дисковод, позаботьтесь предварительно о страховой копии программы. Разумеется, «Анализатор картриджей» не всемогущ, и если получена диагностика «Анализ невозможен» или явно бессмысленный результат анализа, то остается только с вздохом отложить картридж. Я проанализировал несколько десятков картриджей. «Не по зубам» анализатору пришлось 5 или 6.
Есть еще один тип картриджей, в которых функцию переключения банков выполняет специальная заказная микросхема. Структуру таких картриджей можно определить обычно только методом последовательных приближений, считывая очередной банк и определяя условия переключения на следующий путем анализа программы, записанной в нем. К счастью, таких картриджей немного, и обычно проще найти другой картридж с более простой структурой, содержащий те же игры.
Х1
SOUND |
|
GND |
|
+5 В |
|
WAIT |
|
RESET |
|
DO |
|
D1 |
|
D2 |
|
D3 |
|
D4 |
|
D5 |
|
D6 |
|
D7 |
|
AO |
|
BO |
|
A1 |
|
R1 |
|
A2 A3 |
|
B2 |
|
B3 |
|
B4 |
A4 |
|
Bb |
|
A5 |
|
B6 |
|
Ab |
|
R7 |
|
A7 |
|
|
|
|
T |
|
|
OE |
|
|
СМОТРИ НА
ПРЕДЫДУЩЕЙ
СТРАНИЦЕ
D2 - 555ЛА2 D3 - 555ЛЕ1 D15 - 555ЛАЗ
(ПРОДОЛЖЕНИЕ)
Следующий этап адаптации, после того как структура картриджа определена и информация из него перекачана на дискету, чем-то напоминает процедуру дискофицирования ленточных программ для Spectrum. Возможны два варианта. Можно разделить все игры из картриджа и адаптировать каждую отдельно, а можно адаптировать картридж целиком. Есть достоинства и недостатки у обоих вариантов. Раздельная адаптация, в большинстве случаев, проще и позволяет сделать ленточную версию. Адаптация всего картриджа позволяет сохранить меню картриджа и все варианты игр, что при раздельной адаптации обычно теряется. Рассмотрим вначале раздельную адаптацию.
Т
10
77
В большинстве случаев каждая игра занимает один банк S-ROM и один V-ROM. Соответствие банков определяется достаточно просто, если «Анализатор» показал одни и те же разряды регистра банков для S-ROM и V-ROM. В этом случае файлы на дискете, относящиеся - к одной игре, будут иметь один и тот же номер. Если разряды регистра банков различны для S-RO3M и V-ROM, то соответствие можно определить, просматривая файлы S-ROM кроссмонитором MON6502, который имеет команду поиска команд переключения банков. Когда все команды переключения найдены, определяем соответствие битов кодам банков.
Например, "Анализатор" выдал следующий диагноз:
СЕЛЕКЦИЯ БАНКОВ ПО ДАННЫМ БАНКОВ S-ROM ЕМКОСТЬЮ 16KB
04
БАНКОВ V-ROM ЕМКОСТЬЮ 8KB 04
КОДЫ1 БАНКОВ: S-ROM00 00 V-ROM00 00 S-ROMOl 04 V-ROMOl 01 S-ROM02 08 V-ROM02 02 S-ROM03 0С V-ROM03 03 РЕЖИМ А11
Из этого следует, что банки S-ROM переключаются разрядами D2 и D3, а банки V-ROM разрядами DO и D1.
Допустим, MON6502 нашел команду переключения банков: FF52 LDA #FAh FF54 STA #FF53h
В аккумулятор загружается число FAh и производится запись по адресу FF53, который соответствует второму байту команды загрузки аккумулятора. Это почти стандартный прием. 4 старших бита значения не имеют, а 4 младших вызовут включение S-ROM02 и V-ROM02.
Хорошие результаты может дать метод «научного тыка», когда на заключительном этапе адаптации, просто случайным образом объединяются разные S-ROM и V-ROM. При работе с дисководом это занимает меньше времени, чем анализ программы.
Следующий этап заключается в восстановлении программы. Это самый сложный этап, и результат здесь во многом зависит от Ваших хакерских способностей. Если в картридже всего одна игра или игра не имеет модификаций, то этот этап пропускается. Если же модификации есть, например, в меню фигурируют MARIO, MARIO1, ... MARIO999, игру придется восстанавливать. Все эти модификации делаются довольно просто. В любой игре есть процедура инициализации, которая устанавливает значения переменных. В лучшем случае, в программе, обслуживающей меню, есть своя процедура инициализации, а основная программа запускается не с начала, хотя присутствует в S-ROM полностью и в неискаженном виде. А в худшем. Китайские хакеры вообще работают очень грубо. Что они делают с играми «при помощи лома и кувалды» словами не передать. Впрочем, с грубыми и однообразными приемами, при некотором навыке, справляться легче.
Не забудьте установить вектор "START" на начало игры. Пока существует единственный инструмент для просмотра и внесения изменений в программы для DENDY. Это кроссмонитор MON6502.
Он имеет следующие команды: L - загрузка файла S-ROM. На экране появляется имя первого файла на дискете. CS+6 и CS+7 - выбор файла, ENTER - загрузка.
S - сохранение измененного файла. Новый файл не создается, изменения вносятся в исходный. Z - дизассемблер. Подрежимы: R - новый адрес, Р - РОКЕ адрес, данные; ПРОБЕЛ - следующая страница, CS+0 - выход в меню D - дамп. Подрежим:
Р - РОКЕ адрес, данные, ПРОБЕЛ - следующая страница, CS+0 - выход в меню. Т - текстовый дамп.
ПРОБЕЛ - следующая страница,
CS+0 - выход в меню. F - поиск
ПРОБЕЛ - следующий элемент поиска,
CS+0 - выход в меню.
Поиск имеет 4 модификации:
Тип 1 - поиск команд переключения банков. Ищутся команды записи в область BOOOh-OFFFFh. Поиск проводится по формальным признакам, поэтому монитор может дать «ложную тревогу». Окончательно решать: найдена ли нужная команда или это случайное сочетание байтов - Вам.
Тип 2 - поиск обращений к видеопроцессору. Запись и чтение по адресам 2000h-2007h.
Тип 3 - поиск обращений к портам. Запись и чтение по адресам 4000h-4020h.
Тип 4 - поиск последовательности от 1 до 3 заданных байтов.
Искомые байты вводятся через запятую. Во всех режимах найденная последовательность выделяется повышенной яркостью. Все аргументы команд вводятся в шестнадцатеричной системе счисления.
Некоторые рекомендации,
Хотя маскируемое прерывание в играх не используется, его вектор часто указывает на истинное начало игры, размещенной в' данном банке. Вектор START показывает на переход к меню. Очень часто, но не всегда, стартовый адрес совпадает с началом банка. Достаточно надежно начало игры можно найти, задав поиск команды установки стека, если ее не «ампутировал» китайский хакер.
Если в начале игры обнаружились длинные цепочки NOP, значит игра запускается с начала, но инициализация неполная. В этом случае недостающие команды несложно найти в программе МЕНЮ.
Гораздо хуже, если начало игры полностью разрушено. В этом случае Вам понадобится поистине ангельское терпение и весь отпущенный природой интеллект. При раздельной адаптации игра полностью загружается в ОЗУ интерфейсной платы, и в дальнейшем никакого взаимодействия между Spectrum и DENDY нет вплоть до сброса.
При адаптации картриджа целиком, необходимо найти в памяти DENDY свободный участок около 200 байт. В нем нужно разместить небольшую подпрограмму, которая будет выполнять функцию диспетчера. Алгоритм загрузки приблизительно таков:
1. Загружаем банк памяти, содержащий МЕНЮ и устанавливаем вектор маскируемого прерывания на диспетчер.
2. Порт 6000h устанавливаем в 00h и запускаем МЕНЮ. SPECTRUM непрерывно читает порт 7Fh, и пока в нем 00h, не предпринимает никаких действий.
3. Выбираем пункт МЕНЮ с нужной игрой, при этом в порт 6000h записывается код игры.
4. SPECTRUM, прочитав код игры, считывает соответствующий блок с дискеты и загружает его в DENDY.
Аналогичный алгоритм можно использовать при адаптации игр, занимающих несколько банков, когда используемые банки меняются при переходе на следующий уровень или в другую локацию. К сожалению, он малопригоден для компьютера без дисковода.
Организация взаимодействия между SPECTRUM и DENDY может потребоваться и в еще одном случае. Не очень удобно, кроме клавиатуры и джойстика SPECTRUMa использовать еще и DENDY'ский джойстик. Можно заменить подпрограмму чтения состояния DENDY'вского джойстика подпрограммой, принимающей управляющий код от SPECTRUMa по прерываниям. В этом случае DENDY'вской игрушкой станет возможным управлять с клавиатуры или KEMPSTON-джойстиком. Адреса портов джойстиков в DENDY 4016h и 4017 h MON6502 позволяет найти подпрограмму чтения джойстика за несколько секунд. Загрузка игры.
В ПЗУ интерфейсной платы размещена программа-загрузчик. Предусмотрено 4 режима загрузки. Три из них упрощенные, рассчитанные на применение стандартных загрузчиков. Комплект загрузчиков для всех возможных вариантов предложен мною на дистрибуцию в «Инфорком». При использовании стандартного, загрузчика заключительный этап адаптации упрощен до предела. Предположим, нужно перевести на дискету игру с S-ROM емкостью 32 Кб и режимом видеопроцессора А10. Объединяем файлы V-ROM и S-ROM в один (V-ROM при объединении должен занимать в памяти компьютера младшие адреса) размером 40 Кб и снабжаем его BASIC-загрузчиком D32A10. Все стандартные загрузчики универсальны, они одинаково позволяют загрузить игру с дискеты и кассеты.
Четвертый режим существенно сложнее, но он позволяет использовать все возможности интерфейсной платы. В основном он предназначен для загрузки программ, в которых во время работы сохраняется возможность взаимодействия SPECTRUM и DENDY.
g DO |
3 |
3 |
2 |
€D1 |
4 |
4 |
3 |
-D2 |
5 |
5 |
4 |
-D3 |
6 |
G |
5 |
.□4 |
7 |
7 |
6 |
.□5 8 |
8 |
7 |
-D8 |
9 |
9 8 |
eD7 |
10 |
10 |
9 |
|
|
61 |
1 |
|
|
2 |
19 |
-A3 |
11 |
|
-A4 |
12 |
|
|
-A5 |
13 |
|
|
f WR |
14 |
18 |
2 |
(RD |
15 |
19 |
3 |
,iORO |
18 |
20 |
4 |
eDOS |
17 |
21 |
5 |
|
|
22 |
8 |
|
|
23 |
7 |
-+5B |
1 |
24 8 |
-GND |
2 |
25 |
9 |
|
|
2 |
1 |
|
|
59 |
19 |
<39 Q1
<32
<зз
<34 <35 06 <37
DO |
<36 |
D1 |
<31 |
D2 D3 D4 D5 D6 |
<32 <33 <34 <35 <36 <37 |
D7 |
С |
|
L |
|
15
оо Q1
Q2 <33 <34 Q5 Q6 <37
|
7 |
55 |
6 |
50 |
5 |
57 |
4 |
50 |
9 59 |
10 |
60 |
Hf^T-j* в _ |8
Ч-1 „
В четвертом режиме в память DENDY по адресу 0700h загружается загрузчик в машинном коде DENDY длиной 256 байт, и управление передается ему. За универсальность приходится платить необходимостью писать программу на непривычном для синклериста ассемблере 6502. Для перевода загрузчика в 4 режим, перед передачей 256-байтного блока нужно передать байт Olh.
Х1.В
1 |
+5B |
2 |
RDV |
3 |
A12 |
4 |
A13 |
5 |
A14 |
6 |
D7 |
7 |
D6 |
8 |
D5 |
9 |
D4 |
10 |
D3 |
11 |
D2 |
12 |
□1 |
13 |
DO |
14 |
CSS |
15 |
SOUHD1 |
18 |
SOUIIDO |
17 |
WRV |
18 |
vcs- |
19 |
VA13 |
20 |
UA7 |
21 |
VA8 |
22 |
VA9 |
23 |
VA10 |
24 |
VA11 |
25 |
VA12 |
26 |
VA13 |
27 |
VD7 |
20 |
VD6 |
29 |
VD5 |
30 |
VD4 |
2 |
1 |
14 |
1 |
83 |
2 |
|
11 |
13 |
12 |
3 |
15 |
15 |
62 |
14 |
DIP 555 ИД4
Х1.А
40
49
1 |
GND |
2 |
Д11 |
3 |
A10 |
4 |
A9 |
5 |
A8 |
6 |
A7 |
7 |
A6 |
8 |
AS |
9 |
A4 |
10 |
A3 |
11 |
A2 |
12 |
A1 |
13 |
AO |
14 |
WRS |
15 |
INT |
16 |
GIID |
17 |
OEV |
18 |
VA10' |
19 |
VA8 |
20 |
VA5 |
21 |
VA4 |
22 |
VA3 |
23 |
VA2 |
24 |
VA1 |
25 |
VA0 |
28 |
VD0 |
27 |
VD1 |
28 |
VD2 |
29 |
VD3 |
30 |
+5B |
32
30
18 |
26 |
17 |
27 |
16 |
28 |
15 |
29 |
14 |
30 |
13 |
31 |
12 |
32 |
11 |
33 |
D7 555 ЛАЗ □8 555 ЛП8 D9 555 ЛЕ4
Рис. 5
Прошивка микросхемы D10
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0b |
0C |
0D |
0E |
0F |
00 |
0A |
0 a |
0a |
0 a |
0 a |
0A |
0A |
0A |
0D |
0B |
0F |
0F |
08 |
08 |
08 |
08 |
01 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
08 |
0E |
0E |
08 |
08 |
08 |
08 |
02 |
0A |
0A |
0A |
0A |
0A |
0A |
0A |
0A |
0D |
0F |
0F |
0F |
08 |
08 |
08 |
08 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
08 |
0E |
0E |
08 |
08 |
08 |
08 |
04 |
08 |
08 |
08 |
08 |
08 |
08 |
08 |
08 |
0D |
0B |
08 |
08 |
08 |
08 |
08 |
08 |
05 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
08 |
0E |
0E |
08 |
08 |
08 |
08 |
06 |
08 |
08 |
08 |
08 |
08 |
08 |
08 |
08 |
0D |
0F |
08 |
08 |
08 |
08 |
08 |
08 |
07 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
08 |
0E |
0E |
08 |
08 |
08 |
08 |
|
|
|
|
|
|
|
|
Рис |
. 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Прошивка микросхемы |
D14 |
|
|
|
|
|
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0b |
0C |
0D |
0E |
0F |
00 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
0C |
0D |
0A |
0b |
0E |
0E |
0E |
0E |
01 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
02 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
03 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
04 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
05 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
06 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
07 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0A |
0B |
0E |
0E |
0E |
0E |
08 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
0C |
0D |
0C |
0D |
0C |
0D |
0C |
0D |
09 |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0C |
0D |
0C |
0D |
0C |
0D |
0A |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
0C |
0C |
0D |
0D |
0C |
0C |
0D |
0D |
0B |
0E |
0E |
0E |
0E |
0Ё |
0E |
0E |
0E |
0C |
0C |
0D |
0D |
0C |
0C |
0D |
0D |
0C |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0C |
0D |
0C |
0D |
0C |
0D |
0D |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0D |
0C |
0D |
0C |
0D |
0C |
0D |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0C |
0D |
0D |
0C |
0C |
0D |
0D |
OF |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0E |
0C |
0C |
0D |
0D |
0C |
0C |
0D |
0D |
|
|
|
|
|
|
|
|
|
Рис. |
3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Прошивка микросхемы |
D11 |
|
|
|
|
|
|
|
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
0A |
0B |
0C |
0D |
0E |
0F |
F800 |
78 |
D8 |
A9 |
00 |
8D |
00 |
60 |
8D |
00 |
20 |
8D |
01 |
20 |
AD |
02 |
20 |
F810 |
10 |
FB |
AD |
02 |
20 |
30 |
FB |
A9 |
00 |
8D |
00 |
20 |
8D |
01 |
20 |
A9 |
F820 |
3F |
8D |
06 |
20 |
A9 |
F0 |
8D |
06 |
20 |
A9 |
0D |
8D |
07 |
20 |
A9 |
FF |
F830 |
8D |
17 |
40 |
A2 |
96 |
AD |
02 |
20 |
10 |
FB |
AD |
02 |
20 |
30 |
FB |
CA |
F840 |
D 0 |
F3 |
A0 |
00 |
98 |
99 |
00 |
00 |
C8 |
D0 |
FA |
A0 |
00 |
B9 |
00 |
F9 |
F850 |
99 |
00 |
03 |
C8 |
D0 |
F7 |
B9 |
00 |
F9 |
D9 |
00 |
03 |
D0 |
ED |
C8 |
D0 |
F860 |
F5 |
4C |
00 |
03 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
|
|
|
|
|
Далее |
до адреса |
F8FF |
заполнено FF |
|
|
|
|
|
F900 |
A9 |
20 |
8D |
01 |
60 |
A9 |
3F |
8D |
06 |
20 |
A9 |
F0 |
8D |
06 |
20 |
A9 |
F910 |
10 |
8D |
07 |
20 |
A2 |
FF |
9A |
A0 |
00 |
8C |
06 |
20 |
8C |
06 |
20 |
A9 |
F920 |
80 |
8D |
00 |
80 |
A9 |
20 |
8D |
00 |
E0 |
A9 |
08 |
8D |
00 |
F8 |
AD |
00 |
F930 |
80 |
8D |
00 |
60 |
A9 |
03 |
8D |
FB |
FF |
8D |
FD |
FF |
8D |
FF |
FF |
A9 |
F940 |
51 |
8D |
FE |
FF |
A9 |
62 |
8D |
FB |
FF |
58 |
EA |
EA |
EA |
78 |
4C |
49 |
F950 |
03 |
AD |
00 |
60 |
C9 |
01 |
F0 |
0B |
85 |
20 |
A9 |
68 |
8D |
FE |
FF |
8D |
F960 |
00 |
60 |
40 |
A9 |
7A |
4C |
6F |
F9 |
AD |
00 |
60 |
85 |
23 |
A9 |
8D |
8D |
F970 |
FE |
FF |
A2 |
00 |
A0 |
00 |
8D |
00 |
60 |
40 |
AD |
00 |
60 |
99 |
00 |
07 |
F980 |
C8 |
F0 |
04 |
8D |
00 |
60 |
40 |
CA |
9A |
58 |
4C |
00 |
07 |
AD |
00 |
60 |
F990 |
8D |
07 |
20 |
E8 |
D0 |
0C |
C8 |
C0 |
20 |
D0 |
07 |
A0 |
00 |
A9 |
A6 |
8D |
F9A0 |
FE |
FF |
8D |
00 |
60 |
40 |
A5 |
23 |
C9 |
FF |
D0 |
10 |
C0 |
FE |
D0 |
0C |
F9B0 |
AC |
00 |
60 |
A9 |
C8 |
8D |
FE |
FF |
8D |
00 |
60 |
40 |
AD |
00 |
60 |
91 |
F9C0 |
22 |
C8 |
D0 |
DE |
E6 |
23 |
D0 |
DA |
AD |
00 |
60 |
8D |
FF |
FF |
8D |
00 |
F9D0 |
60 |
8C |
FE |
FF |
A5 |
20 |
F0 |
11 |
A2 |
E0 |
C9 |
FF |
F0 |
08 |
A2 |
F0 |
F9E0 |
C 9 |
FE |
F0 |
02 |
A2 |
F8 |
8E |
01 |
60 |
6C |
FC |
FF |
FF |
FF |
FF |
FF |
|
|
|
|
|
Далее |
до адреса |
FFF0 |
заполнено FF |
|
|
|
|
|
FFF0 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
62 |
F9 |
00 |
F8 |
62 |
F9 |
Рис. 4.