О совместимости компьютера "ATM-TURBO-2й
(С) Сергей Рюмик,
г.Чернигов, 1995.
В ZX-PEB»-94, N4, стр.22 уже говорилось о неполной совместимости компьютера ATM-TURBO-2 фирмы MicroART.
Хочу остановиться на двух проблемах, одинаковых для всех версий компьютера от 6.00 до 7.10 ("TURBO-2+"):
- отличия в прошивке ПЗУ в области TR-DOS (не работают прикладные программы DCU 2.02 - 2.31, L-COPY и т.д.);
- слишком полная дешифрация адреса порта #7FFD (не работают игровые програнмы режима 128К -RODLAND, FAIRLIGHT-2 и т.д.).
1. Нестандартное ПЗУ TR-DOS.
Как известно, из 16К ПЗУ TR-DOS версий 5.03, 5.04t около 5К свободно, точнее, заполнено кодом #FF. В компьютере ATM-TUR-ВО-2 эти 5К информации используются для организации начального меню н дополнительных данных.
Если сравнить совпадающие места в ПЗУ TR-DOS версий 5.03, 5.04t и ATM, то оказывается, что в четырех десятках точек они отличаются между собой. Причем, версия ATM является неполным гибридом от 5.03 и 5.04t, поскольку в половине точек она выполнена оригинально.
Из-за этого на ATM-TURBO-2 не работают программы, использующие нестандартные точки в ПЗУ TR-DOS (например, копировщик L-COPY, автор А.Лаптев, LAPTEVSOFT-1992 г.) и программы, проверяющие или использующие в работе факт наличия кода #FF в свободной области ПЗУ (например, DCU 2.02 - 2.31, автор Н.Родионов, С.Петербург - 1991-1993 гг.).
Для однозначности выявления причины достаточно скопировать область TR-DOS из микросхемы ПЗУ 27512 компьютера ATM-TURBO-2 в микросхемы памяти контроллера дисковода образцового компьютера. Теперь, если с АТМ-овским TR-DOS программы на образцовом компьютере будут вести себя точно так же, то причина заключается именно в отличиях прошивок ПЗУ TR-DOS.
Можно было бы восстановить работоспособность программы L-COPY занесением кода #00 в ячейки #4800 и #4801 микросхемы 27512, однако это наталкивается на останов компьютера с вежливой разноцветной надписью: "I craced. I halted. Press RESET to continue ..." .
Выход из создавшегося положения очевиден. Перейти от ПЗУ 27512 (64К) к ПЗУ 271000 (128К), что уже предусмотрено в электрической схеме ATM-TURBO-2. Далее перенести информацию о начальном меню ATM из области TR-DOS на свободное место микросхемы 271000, а области TR-DOS вернуть первозданный облик, но это уже задача для программистов фирмы MicroART.
2. Дешифрация адреса порта #7FFD.
Системный порт #7FFD (32765) используется в режиме "Спект-рум-128" для переключения страниц ПЗУ И ОЗУ (ZX-PEB10-91, стр.26). Через обращение к этому порту многие программы определяют, с каким компьютером имеют дело: с 48К или 128К.
Игровая программа RODLAND (The Sales Curve 1991, дисковая версия Fanatic Stas) сбрасывается в самом начале загрузки на ATM-TUR
к о м и ь ю |
Т Е Р Ы , |
|
К О T О Р Ы |
Е МЫ ВЫБИРАЕМ |
|
|
|
|
|
Листинг 1. |
|
#5E3D |
ЗЕ |
13 |
LD |
А,#13 |
;#13 - Контрольный код. |
#5E3F |
21 |
FF FF |
LD |
HL,#FFFF |
;Адрес проверки. |
#5Е42 |
D3 |
FD |
OUT |
(#FD),А |
Переключение на ОЗУ-З. |
#5Е44 |
77 |
|
LD |
(HL),А |
;В #FFFF ОЗУ-З код #13. |
#5Е45 |
ЗС |
|
INC |
А |
;#14 - Контрольный код. |
#5Е46 |
D3 |
FD |
OUT |
(#FD),A |
Переключение на ОЗУ-4. |
#5Е48 |
77 |
|
LD |
(HL),А |
;В #FFFF ОЗУ-4 код #14. |
#5Е49 |
3D |
|
DEC |
А |
;#13 - Контрольный код. |
#5Е4А |
D3 |
FD |
OUT |
(#FD),А |
Переключение на ОЗУ-З. |
#5Е4С |
BE |
|
CP |
(HL) |
Проверка на код #13. |
#5E4D |
С8 |
|
RET |
Z |
;Если #13, то выход. |
#5Е4Е |
С7 |
|
RST |
0 |
Иначе - сброс. |
BO- 2 , однако нормально работает на других типах компьютеров. После дизассемблирования был обнаружен следующий фрагмент (см. листинг 1.).
Налицо проверка объема памяти компьютера. Если это "Спект-рум-48", то происходит сброс через команду RST 0, а, если иСпектрум-128и, то продолжение норнальной работы через RET Z.
Внимательно приглядевшись, можно заметить, что в листинге 1 вместо обращения к порту #7FFD происходит обращение к порту #13FD в строке #5Е42 и к порту #14FD в строке #5Е4б.
С другой стороны, из анализа электрической схемы ATM-TURBO-2 видно, что в дешифрации порта #7FFD принимают участие три адресных линии А1, А9, А15. Причем, предполагается, что линия А9 должна быть равна "Iм. Для адреса #13FD в листинге 1 это условие выполняется, а для адреса #14FD -нет, так как А9 равно "0".
Следовательно, программа при обращении к порту #7FFD как к порту #14FD делает заключение, что такого порта в ATM-TURBO-2 не существует и, как следствие, ROD-LAND сбрасывается при загрузке.
Выход из создавшегося положения следует искать в программных и аппаратных изменениях.
2.1. Программные изменения.
Первое, что напрашивается, это изменить программу листинга 1 так, чтобы ATM-TURBO-2 не чувс-#5E3D ЗЕ 13 LD А,#13
01 FD 7F LD BC,#7FFD
21 FF FF LD HL,#FFFF
ED 79 OUT (С),A
КОМПЬЮТЕРЫ , КОТОРЫЕ МЫ ВЫБИРАЕМ
Листинг 2.
;#13 - Контрольный код. ;Полный адрес порта #7FFD. ;В HL - адрес проверки. Переключение на ОЗУ-З.
твовал "Iй в разряде A9.
Действительно, если в кодовом блоке заменить команду LD А,#13 на LD А,#16 (ячейка #5ЕЗЕ - было #13, должно быть #16), то все станет на свои места. Порт #13FD заменится портом #16FD, а порт #14FD - портом #17FD. Программа заработает нормально, так как адреса #16FD и #17FD содержат в разряде А9 "единицу'1.
Аналогичным образом можно вылечить игру THE EXTERMINATOR (Audiogenic - 1991, дисковая версия Fanatic Stas), для чего в ячейку #5ЕЗВ (24123) вместо кода #13 надо занести код #16.
Второй путь - это замена команд ассемблера OUT (#FD),A на аналогичные, но с использованием косвенной адресации через регистровую пару ВС. Например, листинг 2 выполняет ту же функцию, что и первые три команды листинга 1.
Полный адрес порта состоит из содержимого регистра С (младший байт) и регистра В (старший байт). Преимущество использования подобной конструкции - в возможности задания полного адреса #7FFD в паре ВС, что убережет от накладок при работе с любым компьютером.
На этом можно было , бы поставить точку, сказав, что загрузчики в играх RODLAND и THE EXTERMINATOR написаны хаккером не вполне корректно и, в принципе, не оптимально (процедуру листинга 1 можно было бы сократить по крайней мере на три байта).
Однако нашлись еще программы, страдающие из-за того, что в ATM-TURBO-2 сделана слишком "правильная" дешифрация порта #7FFD.
Причем данные программы сбоят из-за разряда А9 не только при загрузке, но и в ходе самой игры. Это программы: THE VINDICATOR! (Imagine - 1988, 128К, дисковая версия П.Никитин 1993) - невозможность выбора строк в меню клавиатуры на титульном экране; FA-IRLIGHT-2 (The Edge - 1987, 128К, дисковая версия M.Макаревич, Е.Копров 1992) - зависает в игре при переходе с экрана на экран; SHOCK MEGADEMO (Ethanot Soft Inc. - E.S.I. - 1992, Польша) - сбрасывается при смене демонстрационных картинок.
Особое внимание привлекает программа SHOCK MEGADEMO, в титрах которой С.Петербургская фирма Black Square сообщает, что кроме всего прочего, настоящая программа является тестовой и будет полностью работать только на компьютерах ZX-Spectrum-128, собранных в Англии.
Налицо проблема несовместимости с фирменным компьютером.
Чтобы правильно оценить ситуацию, обратимся к истории.
Сэр Клайв Синклер при разработке компьютера ZX-Spectrum с самого начала решил сделать цсе возможное, чтобы он был максимально дешевым. И, действительно, долгое время ZX-Spectrum был вне конкуренции среди бытовых компьютеров по критерию "цена-»-качество".
Однако за все надо платить. Архитектура "Спектрума" предусматривает максимально упрощенную систему адресации внешних устройств, когда выбор порта осуществляется сбросом в "ноль" одного или двух разрядов адреса. Например, порт клавиатуры #FE выбирается при А0»0, порт принтера #FB - при А2»0, порт музыкального сопроцессора #BFFD - при А1«0, А14=0 и т.д.
Аналогично и с портом #7FFD, к нему можно обратиться при наличии "нулей" всего в двух разрядах: А1 и А15.
Упрощенная система дешифрации создает неудобство программистам, вынужденным учитывать конфликтные ситуации.
С другой стороны, "правила игры" установил сэр Клайв Синклер и не нам их менять. Исходя из этого следует признать, что програнны, использующие для своих целей факт упрощенной дешифрации портов в фирменном "Спектруме", имеют право на существование. Нет снысла запрещать. Иной вопрос, нужно ли вводить подобные приемы в ранг стандарта.
Решение проблемы совместимости в данном случае следует искать в аппаратной части.
2.2. Аппаратные Изменения.
Проанализировав схемы различных компьютеров с режимом 128К, а также схемы приставок 128К, ножно убедиться, что сигнал А9 при дешифрации порта #7FFD совсем не является обязательным.
Разработчики компьютера ATM-TURBO-2 ввели разряд А9 по необходимости, чтобы бесконфликтно развязать сигналы других портов, отсутствующих в фирменном "Спект-руме". Напринер, в ATM-TURBO-2 инеется порт #7DFD - чтение аналого-цифрового преобразователя (АЦП), а также порт чтения #7FFD - доступ к телефонной линии/сети.
Схема развязки портов выполнена на одном и том же дешифраторе, микросхеме DD17 К555ИД7 ("Радиолюбитель", N1, 3-6/1993).
На рисунке 1 представлен вариант доработки схемы компьютера ATM •-TURBO-2, при которой начинают работать программы THE EXTERMINATOR, SHOCK MEGADEMO и т.д.
В схему добавлен еще один дешифратор DD17*, который запарал-лелен по входам с микросхемой DDI7 за исключением вывода 1.
На вывод 1 новой микросхемы подан сигнал А9 для обеспечения правильной дешифрации сигналов ADRD (для АЦП) и TLRD (для сети). На вывод 1 старой микросхемы DDI7 подан уровень логической "единицы", тен самым разряд А9 не будет принимать участие в формировании сигналов S128 для системного порта #7FFD и MSO, MS1 для музыкального сопроцессора.
КОМПЬЮТЕРЫ , |
КОТОРЫЕ |
м ы |
В Ы Б 1 |
i РАЕМ |
|
Значит, для системного порта #7FFD будут анализироваться только линии А1 и А15, а для портов АЦП и сети - линии А1, А9, А15 как и прежде.
Доработать компьютер ATM-TURBO -2 по схеме рис.1, несложно.
Новую микросхему DDI7* К555ИД7 удобно поставить навесом над микросхемой DDI7, запаяв параллельно выводы 2, 3, 4, 5, 6, 8, 16.
Для тех, кто к любым изменениям в принципиальной схеме относится настороженно, можно порекомендовать сделать доработки по рис.1, но к выводу 1 микросхемы DDI7 подсоединить переключатель, коммутирующий или +5В или сигнал А9 (как было раньше). После проверки коллекции программ на сов-местимость при разных положениях переключателя, пользователь смог жет сам сделать правильный выбор.
2.3. Проверочная програнма.
Если в компьютере ATM-TURBO-2 имеется проблема с дешифрацией адреса порта #7FFD, то почему бы не проверить, а как обстоит дело с другими типами компьютеров? Тем более, что уже делаются попытки механического копирования схемотехнических решений из ATM-TURBO-2 в части разряда А9 (ZX-PEBI0-94, N5, стр.47-49).
0017 - кзззид7 0017* - к999ид7 dd36 - к999лн1 0037 - к999ли1 0073 - к999лаз
м*от« рмрыяо» печатной плат*
РИС.1.
10 CLEAR 40999: FOR С=41000 ТО 41028: READ В
20 РОКЕ С,В: NEXT С: RANDOMIZE USR 41000 30 LET A=PEEK 49279+256*РЕЕК 4 9280
40 IF А-32768 THEN PRINT "YOU HAVE 48K"
50 IF A-0 THEN PRINT "YOU HAVE STANDART 128K" 60 FOR K=0 TO 14
70 IF INT (A/2+0.5)> INT (A/2) THEN PRINT "DETECTED A";K;" LIN E"
80 LET A-INT (A/2): NEXT К 90 DATA 243,1,255,255,33,128, 192,3,120,189
100 DATA 40,12,62,17,119,237, 121,61,119,237
110 DATA 121,190,40,239,112,43, 113,251,201
КОМПЬЮТЕРЫ , КОТОРЫЕ МЫ ВЫБИРАЕМ
Листинг 3.
Листинг 4.
#А028 |
F3 |
|
|
DI |
|
#А029 |
01 |
FF |
FF |
LD |
BC,#FFFF |
#А02С |
21 |
80 |
СО |
LD |
HL,#C028 |
#A02F |
03 |
|
|
INC |
BC |
#А030 |
78 |
|
|
LD |
А,В |
#А031 |
BD |
|
|
CP |
L |
#А032 |
28 |
ОС |
|
OR |
Z,#A040 |
#А034 |
ЗЕ |
11 |
|
LD |
A,#11 |
#А036 |
77 |
|
|
LD |
(HL),A |
#А037 |
ED |
79 |
|
OUT |
(C),A |
#А039 |
3D |
|
|
DEC |
A |
#А03А |
77 |
|
|
LD |
(HL),A |
#А03В |
ED |
79 |
|
OUT |
(C),A |
#A03D |
BE |
|
|
CP |
(HL) |
#А03Е |
28 |
EF |
|
OR |
Z,#A02F |
#А040 |
70 |
|
|
LD |
(HL),В |
#А041 |
2В |
|
|
DEC |
HL |
#А042 |
71 |
|
|
LD |
(HL),С |
#А043 |
FB |
|
|
EI |
|
#А044 |
С9 |
|
|
RET |
|
;Запрет прерываний. ;В паре ВС - адрес порта. ;Адрес ячейки 49280. ;Изменение адреса порта. ;Проверка на перебор всех ; возможных значений. ;Выход для режима 48К. ;Занесение проверочного ; кода #11 в ОЗУ-О. Переключение на ОЗУ-1. ;Занесение проверочного ; кода #10 в ОЗУ-1. Переключение на ОЗУ-О. ;Сравнение с кодом #11. ;Цикл.
;Результат в ячейке 49280. ;Адрес ячейки 49279. ;Результат в ячейке 49279. ;Разрешение прерываний. ;Выход из подпрограммы.
Предлагаемая проверочная Бейсик-программа (листинг 3) с дизассемблером кодового блока (листинг 4) позволит протестировать любой компьютер 128K и определить, какие разряды участвуют в дешифрации адреса порта #7FFD.
Строки 10, 20 Бейсик-программы подготавливают к вводу и запускают с адреса #А028 (41000) кодовую проверочную программу. Результат работы блока кодов помещается в ячейки #C07F (49279) и #С080 (49280).
В строке 30 результат переводится в пятизначное десятичное число, крайние значения которого анализируются в строках 40, 50.
В строках 60-80 организована проверка на наличие "единиц" в
двоичных разрядах исследуемого числа с выдачей информации.
Результат работы Бейсик-программы выводится сообщениями:
1. YOU HAVE 48K - в компьютере вообще не реализован порт #7FFD.
2. YOU HAVE STANDART 128K -порт #7FFD реализован стандартно с дешифрацией только разряда А1 и А15.
3. DETECTED А9 LINE, DETECTED All LINE - дешифрация порта происходит с дополнительными проверками , в приведенном примере по разрядам А9 и All, из-за чего возникнут проблемы при запуске программ типа SHOCK MEGADEMO. В таком случае нужно проанализнро- Ц вать электрическую схему конкрет- 1 ного компьютера в части дешифра- Я
ции порта #7FFD, найти точки введения разрядов и устранить конфликт схемотехнически.
Необходимость выявления других проверяемых разрядов, а не только А9, объясняется результатами практических экспериментов.
Например, оказалось, что игра FAIRLIGHT-2 чувствительна не только к дешифрации разряда А9, но и А8, А10, All, А13, а в игре THE VINDICATOR! нельзя дешифрировать разряды А4, А5, Аб, А7, так как обращение к порту #7FFD происходит через OUT (#0D),A.
3. Выводы.
1. Программы, использующие приемы, основанные на факте неполной дешифрации порта #7FFD фирменного "Спектрума", имеют право на существование. Однако применять подобные приемы целесообразно только в логически обоснованных случаях, а ииенно, тестовые программы, проверка архитектуры конкретного компьютера, нехватка объема памяти программы.
Стоит прислушаться к мнению опытных программистов, которые настоятельно рекомендуют во-избе-жание различных накладок всегда указывать точный адрес порта (А.Ларченко, Н.Родионов в книге ZX-Spectrum и TR-DOS для пользователей и программистови, С.Петербург, 1994).
2. Необходимо с большой осторожностью подходить к механическому копированию схемотехнических решений в сложных "Супер-Спектру-мах" типа PROFI, ATM-TURBO-2, SCORPION-ZS-256, а в программных изменениях по-возможности не занимать свободные места прошивок ПЗУ "Спектрум-48", "Спектрум-128", "TR-DOS", даже если очень хочется.
Альтернативный вариант - применение замещающих "теневых" ПЗУ.
3. Компьютер ATM-TURBO-2, доработанный по схеме рис.1, повысит свою совместимость, но не станет 100% совместимым с фирменным "Спектрумом", так как останутся еще проблемы синхронизации, различие в прошивке ПЗУ дисковой системы TR-DOS, а также специфической работы компьютера в режиме с IВМ-клавиатурой.
Для последнего случая можно облегчить жизнь для версий ATM старше 7.00 (фирменное название компьютеров "TURBO-2+"), если на время звучания AY-музыки блокировать переключателем работу IBM-клавиатуры, как показано на рисунке 2.
0d80— к999лн1
R5-
-rs к »ы»оду 9 ddi00 1816ве31
Рис.2.
Примечание. Доработки по схе-мам рис.1 и рис.2 опробованы на практике с конпьютерами "ATM-TURBO-2" версий 7.00 и 7.10.