            EMUZ - Эмулятор компьютера ZX Spectrum
         Автор: Кладов Владимир, Новосибирск, 1995 г.

                           ВВЕДЕНИЕ

     Данный эмулятор  был разработан как составная часть комп-
лекса для программирования и отладки программ  для  Спектрума,
включающего в    себя    помимо    данного   эмулятора   также
кросс-турбо-транслятор с языка METAL (публикация  по  языку  в
Ежегодном Сборнике трудов СО РАН,  1995 г.), а также программу
обслуживания реальных/эмулируемых  дискет  в  формате   TR-DOS
BETACOM. Конечной целью изготовления эмулятора являлось созда-
ние программного обеспечения для разработанной в фирме  "Поли-
тех" (НГТУ,  общ.  №1,  к.212А)  платы расширения TI-DOS (Tape
Imitator DOS), идею которого я имел толкнуть еще 2 года назад.
На момент  написания  данной документации (11.07.95) программа
TI-DOS еще не готова, тем не менее эмулятор представляет собой
вполне законченное изделие,  и заслуживает нескольких часов на
оформление подобающего описания.
     В отличие  от  всех известных мне эмуляторов Спектрума (а
мне посчастливилось работать с  эмуляторами  JPP  Арнта  Гулб-
рандсена и Z80 Г.А.  Лунтера), мой EMUZ эмулирует широко расп-
ространенную в странах СНГ систему  TR-DOS.  Имеются  также  и
другие отличия:  абсолютно корректная эмуляция регистра R, де-
тальная эмуляция всех,  даже слабо документированных и недоку-
ментированных команд  с восстановлением практически всех флаж-
ков в требуемое состояние. В результате корректно работают под
данным эмулятором  все известные мне (имеющиеся у меня на дан-
ный момент) программы для Спектрума.  В то же время, я не ста-
вил перед собой быстродействие как сверх-цель.  Для нормальной
работы эмулятора  требуется   очень   большое   быстродействие
инструментальной IBM-PC-машины   (разработка  велась  для  486
DX2/66), и кроме того,  я значительно облегчил себе жизнь, ог-
раничившись доступным    только   в   VGA   видеорежимом   13H
(320x200x256). Сам эмулятор разрабатывался на языке C-- (автор
Питер Целлик).
     Кроме перечисленных  выше  достоинств,   эмулятор   имеет
встроенный отладчик,    работающий    в    лучших    традициях
Borland'овсих Turbo-Debugger'ов, и предоставляющий возможность
символической отладки программ в том числе.  Что касается сов-
местимости с другими эмуляторами,  то команда LOADSNAP обеспе-
чивает загрузку .SNA-файлов,  поддерживаемых обоими известными
мне эмуляторами. Впрочем, программа BETACOM предоставляет зна-
чительно большие возможности, поскольку с ее применением проб-
лема перенесения программ с реального Спектрума в EMUZ  и  об-
ратно решается просто и естественно.

                ТРЕБУЕМОЕ ОБОРУДОВАНИЕ.
     Значительные усилия были направлены на детальную покоман-
дную эмуляцию, вплоть до отслеживания реального времени работы
и правильности содержимого регистра R (в большинстве случаев).
Однако требуется очень мощный компьютер, желательно 80486 не
менее чем с 50 MHz. На моем 486DX2-66, по крайней мере, ходит
очень хорошо. Используется только CONVENTIONAL память, кажется,
400Kb будет болле чем по за глаза. Могут обнаружиться проблемы
с восстановлением правильного системного времени и при интен-
сивной работе за месяц компьютер может проскочить год. My big
excuses, и если очень надо, я это постараюсь исправить.
     Желающим дополнительно могу поставить систему программи-
рования METAL.

                       УСТАНОВКА.
     Скопируйте в желаемую директорию и запускайте. Ключи см.
ниже.

               СОСТАВ ПОСТАВКИ И КЛЮЧИ ЗАПУСКА
     Для нормальной работы эмулятора необходим,  как  минимум,
он сам (EMUZ.COM), а также файл SPECTRUM.ROM размером 48Кбайт,
содержащий образы  ПЗУ  Спектрума  (  первые  16Кбайт  -  ROM0
S128-го, следующие  16Кбайт  - ROM1 S48-го с кодом Бейсика,  и
последние 16Кбайт -  ROM  TR-DOS'а  ).  Для  ускорения  работы
TR-DOS'а нужно  либо  изменить  содержимое ПЗУ TR-DOS'а,  либо
указывать при запуске эмулятора ключ /t - в этом случае по ад-
ресу 3FC5  в  ПЗУ TR-DOS'а код команды DEC A заменяется на код
команды XOR A - тем самым устраняется цикл ожидания.
     Кроме того,  в  поставку  может входить файл ПЗУ TI-DOS'а
(TI-DOS.ROM), при его отсутствии работа  начинается  с  выдачи
сообщения, в ответ на которое нужно нажать любую клавишу (кро-
ме ESC).  При наличии такого файла Вы сразу  получите  возмож-
ность работать  под TI-DOS'ом,  выполняющим переадресацию всех
обращений к магнитофону в обращения к дисководу,  и, таким об-
разом, устраняющим  проблему дискизации программ,  расчитанных
на работу с кассетами.  Для работы под эмулятором  это,  может
быть, и  неактульно,  но  для  реального  Спектрума очень даже
принципиально, поскольку большинство даже дискизированных  под
TR-DOS программ  по-прежнему отгружают промежуточные состояния
на ленту, что не очень удобно.
     Необязательно также    вхождение    в   поставку   файлов
SYSLAB.TBL и SYSVAR.TBL,  представляющих собой  таблицу  меток
системного ПЗУ Бейсика и системных переменных Бейсика, S128-го
и TR-DOS'а. Файлы эти могут представлять интерес для пользова-
телей всего комплекса METAL-EMUZ-BETACOM для более удобной от-
ладки своих программ, и при их наличии в окне дизассемблирова-
ния возможно  видеть  кроме шестнадцатиричных адресов еще и их
символическую расшифровку в терминах ассемблера. Для использо-
вания собственной  таблицы меток при запуске эмулятора необхо-
димо указать ключ /lFILENAME.EXT,  где указанный файл содержит
адреса и соответствующие им имена в простом формате:
     ADDR NAME [ADDR NAME]... (вместо пробелов разрешены возв-
раты каретки).  При  запуске  эмулятора  из  кросс-транслятора
METAL данный ключ указывается автоматически.

                ПРОЧИЕ КЛЮЧИ:
   /Adiskname - "установить" в дисковод A: образ дискеты из
                файла diskname.trd (умолчания нет, в случае
                отсутствия при первом обращении к диску -
                автоматический вход в дисковое меню);
   /Llabfile  - подключить пользовательский файл меток допол-
                нителльно к syslab.tbl и sysvar.tbl;
   /I         - включить TR-DOS
   /T         - режим эмуляции TR-DOS'а без ожидания пере-
                мещения "головки" (модифицируется TR-DOS
                образ ПЗУ);
   /N         - разрешить переходы в TR-DOS при обращении по
                любому адресу в диапазоне 3D00-3DFF (могут
                не работать некоторые программы обслуживания
                дисков вроде DCU, ADM и т.д. Впрочем, они все
                равно не работают как следует).

                          КЛАВИАТУРА
     При работе в эмулируемом Спектруме клавиши 1-0, Q-P, A-L,
ENTER, Z-M работают прежним образом,  Shift  используется  как
CAPS-SHFT Spectrum'а, Ctrl как SYMBOL-SHFT, а Alt означает од-
новременное нажатие CAPS и SYMBOL. Дополнительно Backspace ге-
нерирует CAPS+0,  Tab -> CAPS+9, а также возможно использовать
клавиши -/_ =/+ [/{ ]/} ;/:  '/" ,/< ./> //? \/| `/~ для гене-
рации соответствующих   сочетаний  клавиш  на  Спектруме.  За-
действованы также стрелки для  генерации  сочетаний  CAPS+5  -
CAPS+8, и  стрелки  на  расширенной  клавиатуре - для эмуляции
KEMPSTON-джойстика.
     Клавиша ESC  зарезервирована для прерывания работы компь-
ютера в любой момент времени и входа в режим  покомандной  от-
ладки -  при этом сразу высвечивается окно дизассемблера и об-
новляется панель регистров  и  состояний  Спектрума  слева  от
основного экрана. Кроме того, еще три клавиши доступны в любой
момент работы эмулятора:
     F10 - клавиша "Внимание" для TI-DOS'а;
     F11 - Reset;

     F12 - MAGIC TR-DOS'а.
     Прочая клавиатура доступна только  из  режима  прерывания
(т.е. после  того,  как  нажата клавиша ESC и выполнен выход в
режим отладки).  При отладке программ, да и в некоторых играх,
может оказаться  полезной  возможность фиксировать нажатия от-
дельных клавиш Спектрума (ESC - вход в дизассемблер, затем K -
вход в  панель  управления  клавиатурой,  затем нажатие нужных
клавиш, и снова ESC - выход в дизассемблер, после чего возмож-
но продолжить  работу  по F9,  либо покомандную отладку - кому
как нравится: зафиксированные клавиши будут оставаться нажаты-
ми, пока   Вы   их  не  отожмете,  повторив  вышеперечисленные
действия).
     Вообще, список  доступных  в режиме отладки клавиш всегда
можно получить по F1,  но тем  не  менее  повторю  здесь  этот
список для полноты ощущений:

                     Режим дизассемблера
     ALT-X - выход из эмулятора;
     F1 - подсказка по списку клавиш;
     (Здесь можно сразу нажать то, что Вам понравилось, или
      ESC -выход).
     F4 - выполнять до данного адреса;
     F5 - просмотр текущего состояния экрана;
     F6 - поиск по маске (сначала с подсказкой SEARCH вводится
последовательность шестнадцатиричных кодов, затем с подсказкой
MASK вводится соответствующая последовательность  масок,  так,
например, поиск CD 00 05 с маской FF 00 FF обеспечивает после-
довательный просмотр  всех  вызовов  подпрограмм  по   адресам
0500-05FF);
     SHIFT-F6 - повтор поиска;
     F7 - TRACE - трассировка одной команды, если команда мно-
готактная, как например LDIR, то отслеживается каждый такт ко-
манды, также для команд типа CALL выполняется переход по соот-
ветствующему адресу;
     F8 -  STEP  -  выполнение команды,  в случае команды CALL
подпрограмма выполняется целиком;
Добавлена новая ФАНТАСТИЧЕСКАЯ возможность: даже если вызов
делался командой CALL/RST в подпрограмму, из которой программист
выходить не собирался, останов все равно произойдет в случае
выполнения команд RET/RETI/RETN, если при этом указатель стека
окажется чуть выше, чем был при нажатии F8 (Облегчается взлом/
отладка при использовании подпрограмм с параметрами, следую-
щими вслед за командой вызова)!!!
     F9 -  RUN - запуск на исполнение до очередного прерывания
по ESC или до срабатывания одной из установленных вручную  то-
чек прерывания;
     F11 - RESET;
     F12 - MAGIC-BUTTON TR-DOS'а;
     INS - установка точки останова по данному адресу, все та-
кие точки  останова индицируются малиновым флажком перед кодом
операции в окне дизассемблера  и  редактора  памяти,  возможна
установка до 32 различных точек останова;
     DEL - снятие точки останова, установленной по INS;
     ,< - поиск предыдущей точки останова в списке;
     .> - поиск следующей точки останова в списке;
     P - переход к адресу текущей исполняемой команды (адресу,
на который указывает регистр PC);
     G - переход к адресу, запрашиваемому дополнительно;
     F - FOLLOW - переход по адресу перехода в текущей команде
перехода (для всех трех вышеперечисленных команд под переходом
подразумевается переход к просмотру кода программы  с  данного
адреса, для  изменения  же регистра счетчика адреса PC следует
перейти в режим редактирования регистров);
     Backspace -  возврат  к  предыдущему  адресу (применяется
после перехода по 'F', глубина стека переходов равна 10);
     T - просмотр состояния портов;
     R - переход в редактор регистров;
     D - дисковое меню;
     M - переход в редактор памяти;
     K - переход в редактор клавиатуры;
     L - загрузка SNAP-файла;

                    Режим редактора памяти
     F1 - список доступных в данном режиме клавиш;
     F5 - просмотр пользовательского экрана;
     Tab -  переход от шестнадцатиричного редактора к символи-
ческому и обратно;
     Стрелки - движение по адресам;
     Enter - ввод нового адреса просмотра памяти;
     0-9,A-F - редактирование в шестнадцатиричной панели;
     Esc - выход в дизассемблер.

     Дополнительно при работе в редакторе памяти внизу  высве-
чивается код  в различных его интерпретациях:  шестнадцатирич-
ная, десятичная, как код Бейсика (токены Спекки), как машинная
команда. При редактировании памяти возможно также после утвер-
дительного ответа изменить слегка и содержимое ПЗУ. О том, ка-
кое именно  ПЗУ  в настоящий момент активно,  и какая страница
ОЗУ "впечатана" в адреса C000-FFFF,  см. в левой панели. Неко-
торое отличие команды F5 в редакторе памяти: происходит обнов-
ление экранной страницы,  и возможно увидеть то,  что  еще  не
высветил эмулируемый луч развертки.

                  Режим редактира регистров
     Esc - Выход в дизассемблер,
     Enter - Выход в дизассемблер с  запоминанием  выполненных
изменений;
     Стрелки вверх/вниз - движение курсора по регистрам,
     0-9,A-F,Backspace - редактирование значения регистра.

                     Режим дискового меню
     В этом  режиме  высвечивается  список имеющихся в текущей
директории эмулируемых дисков и установленный в данный  момент
в "разъем" A или B диск.
     Esc - Выход в дизассемблер,
     Tab - сменить разъем,
     Стрелки и Enter - выбор диска,
     Enter - окончательный выбор диска.

     Вход в  режим выполняется автоматически при работе эмуля-
тора, если выполняется обращение к диску из TR-DOS'а, и в тре-
буемом разъеме  не установлен никакой диск.  При этом выход из
режима выполняется сразу в эмулятор.  Если же не выбрать ника-
кой диск (ввести пустое имя), то реакция будет такая же, как и
в реальном Спектруме,  когда дискета отсутствует  в  дисководе
(ситуация NO DISK).

                               ДОПОЛНЕНИЯ.
     Программу BETACOM.EXE, входящую в поставку, следует исполь-
     зовать для копирования файлов с реальных TR-DOS - дисков на
     эмулируемые диски и обратно. Для подготовки образа диска
     можно запустить эмулятор, указать в дисковом меню новое имя
     диска, и выполнить в командной строке TR-DOS'а команду
     FORMAT "имя" . BETACOM может плохо понимать первые сектора
     дискет, отформатированных на SPECTRUM'е - желательно исполь-
     зовать HOBETA.EXE - такие дискеты нормально читаются и на
     SPECTRUM'е, и на IBM PC. Дискеты 3.5'' не подойдут - только
     5.25''. В BETACOM.EXE файлы filename.trd в панели IBM PC
     можно рассматривать как подкаталоги, при входе - отобража-
     ется панель TR-DOS-диска.
     
                          ЗАКЛЮЧЕНИЕ
     Работа данного эмулятора проверялась на  следующих  прог-
раммах:
     QS-Chess
     IS-Chess48
     AD ASTRA
     Impossible
     Sim City
     RINGWARS
     LaserSquadron
     BEATLES
     KRAKOUT
     Battle Ship
     Mercenary
     CP.BLOOD
     ENTERPRISE
     ACADEMY
     Space Raiders II
     S.Glider
     ACE 2088
     ASTRO
     Starion
     F.Planet
     StarStriker2
     STARFOX
     COSMIC
     ASTROL
     VIRGULA
     KABALIST
     HIRO
     ASTROLOG
     COM 3.2R
     Bascet
     Arcanoid2
     Knight2
     и других всяких прочих.

     По всем вопросам обращаться ко мне, 630132, г.Новосибирск-132,
                            ул.Шамшурина, 20-48, Кладову Владимиру.
