PDA

Просмотр полной версии : ПК8002 Эльф. Дизассемблер ПЗУ.



hantarex
29.04.2015, 12:32
начал потихоньку разбираться с ПЗУ Эльфа. тот образ, что в эмуляторе Дмитрия - это 8 раз повторенная область в 2кБ вроде. пытался дизассемблировать в IDA - фигня получается:( пробовал в нескольких версиях, все тупо загоняют код в DB и все. сделайте кто-нить нормальный листинг плизз, у меня тяму не хватает:(
погонял ПЗУ в отладчике эмулятора, понял только, что вывод на экран через RST 2, указатель на сообщение в HL. буду дальше разбираться, но программист из меня никакой. прошу помощи всех увлекающихся людей:)

demetrius2003
29.04.2015, 15:16
А где ПЗУ взять пормальное? Книжки сканированные есть?

hantarex
29.04.2015, 16:06
говорю - в эмуляторе нормальное ПЗУ:) только его реальная длина - 2кБ, а в эмуле оно зачем-то 8 раз повторено.
ну, или http://zx-pk.ru/showpost.php?p=800521&postcount=8.
первая РФ - монитор, вторая - знакогенератор. но я не уверен.

подскажите, как в ида работать? выбрал файл, выбрал проц:Z80-8085, а дальше? а то у мну дизассемблирует в вид:

db 'F3'
db '3E'
и далее, до конца файла.

ссылка на описание портов: http://pk8002.narod.ru/index/ports/0-9
в книжках описание бейсика, и команды монитора.

esl
29.04.2015, 16:22
стать на F3 и нажать 'C'

оно не зря там несколько раз, похоже внутри расчитанно на то что оно несколько раз повторяется

hantarex
29.04.2015, 16:42
ну да, есть переходы за 800h.

---------- Post added at 16:42 ---------- Previous post was at 16:28 ----------

а как переключать кодировку комментов в иде?

esl
29.04.2015, 17:21
не совсем понятен вопрос
под чем пускается ?

hantarex
29.04.2015, 17:27
в винде, вестимо. речь об IDA.

ROM:0671 .db 0F0h ; ¨
ROM:0672 .db 0EBh ; û
ROM:0673 .db 38h ; 8
ROM:0674 .db 30h ; 0
ROM:0675 .db 30h ; 0
ROM:0676 .db 32h ; 2
ROM:0677 .db 20h
ROM:0678 .db 0
ROM:0679 .db 20h
ROM:067A .db 0EDh ; ý
ROM:067B .db 0EFh ; ÿ
ROM:067C .db 0EEh ; þ
ROM:067D .db 0E9h ; ù
ROM:067E .db 0F4h ; ¯
ROM:067F .db 0EFh ; ÿ
ROM:0680 .db 0F2h ; ª
ROM:0681 .db 20h
ROM:0682 .db 31h ; 1
ROM:0683 .db 2Eh ; .
ROM:0684 .db 30h ; 0
ROM:0685 .db 0Dh
ROM:0686 .db 0

здесь, например, поменять кодировку на КОИ-8R, чтобы не искать хотя бы сообщения вручную.

esl
29.04.2015, 17:59
ну ок, а версия иды какая

а вообще, там где надо сделать строку
стать курсором, нажать 'A'

смена кодировки строки
Alt+A -> Change encoding -> change -> ins -> koi8-r

ZX_NOVOSIB
29.04.2015, 18:17
Вижу волну интереса к пк8002. Выкладываю хорошие фото кое-каких документов от этого компа, авось чем-то поможет. Архив разбит на три части:

Первая (http://files.inbox.lv/ticket/8c76ec6c9a052f1b0ce439898cbb5375065dc879/DOCUM+PK8002.part1.rar).
Вторая (http://files.inbox.lv/ticket/81bfaaca6df4cef27486a0777eb019f459d12fb3/DOCUM+PK8002.part2.rar).
Третья (http://files.inbox.lv/ticket/cbbc429eaf8d43113dd2182cc4222cf4819257b9/DOCUM+PK8002.part3.rar).

hantarex
29.04.2015, 20:14
ну ок, а версия иды какая
версия 5.2

---------- Post added at 20:14 ---------- Previous post was at 18:35 ----------

вообще, поделитесь опытом анализа ПЗУ. как искать ввод с клавы, например? по прерыванию? или по чтению порта?

hantarex
30.04.2015, 14:30
буфер строки ввода FF78h. подпрограмму пока не нашел:)

esl
30.04.2015, 14:48
mainmenuloop
RAM:0488 mainMenu: ; CODE XREF: sub_38+21j



RAM:0010 putSTR:
RAM:0013 putADDR:
RAM:0018 putCR:
RAM:001C putSPC:
RAM:0020 putHEX_HL:
RAM:0025 putByteHL:
RAM:0030 putCHAR1:
RAM:0033 _jp_mem_hl:

RAM:23BA beep:

ram resident
RAM:FF2C rd_byte_hl:



RAM:2304 ; ---------------------------------------------------------------------------
RAM:2307 menuTAB: menu <'X', 0, _X_showRegs> ; DATA XREF: sub_22A0-1E07o
RAM:2307 menu <'S', 1, _S_ChangeMemory>
RAM:2307 menu <'M', 3, _MOVE>
RAM:2307 menu <'R', 80h, _READ>
RAM:2307 menu <'G', 0, _GO>
RAM:2307 menu <'D', 2, _DUMP>
RAM:2307 menu <'W', 80h, _WRITE>
RAM:2307 menu <'H', 2, _H_CALC>
RAM:2307 menu <'F', 3, _FILL>
RAM:2307 menu <'C', 3, _COMPARE>

hantarex
30.04.2015, 15:50
а настройки RAM в IDA какие? у меня начало 4000h, длина C000h.
и свой листинг выложите плиззз:)

esl
30.04.2015, 16:15
а настройки RAM в IDA какие? у меня начало 4000h, длина C000h.
и свой листинг выложите плиззз:)

0000:FFFF, я всегда так делаю ;)

там особо и нет ничего, могу и иду выложить но база от 6.1
как то я не завёлся ее крутить ;)

хотя тут дошло, что можно на ПК8002 портировать AthleticLand https://www.youtube.com/watch?v=isjCc7CiSfM
т.к. я его с MSX на Корвет перенес
т.е. есть полные исходники для MSX
и есть порт на 8080 ;)

hantarex
30.04.2015, 16:23
прикольная игруха:) а исходники самодельные? или в сети нашли?

esl
30.04.2015, 16:59
Фсе сам

---------- Post added at 16:59 ---------- Previous post was at 16:59 ----------

Выложено на битбакете

hantarex
30.04.2015, 18:44
Выложено на битбакете
это где?

---------- Post added at 18:44 ---------- Previous post was at 17:05 ----------

вообще - ткните носом, где можно почитать про реверс-инженеринг для старых платформ?:)

esl
30.04.2015, 18:54
MSX: https://bitbucket.org/esl/park_dissassm
KORVET: https://bitbucket.org/esl/park_korvet

---------- Post added at 18:54 ---------- Previous post was at 18:51 ----------


вообще - ткните носом, где можно почитать про реверс-инженеринг для старых платформ?:)

тяжело вербализуемо ;)
сначала дизасмиш
добиваешся чтоб компилилось и работало на исходной платформе
потом переделываеш на таргет.

b2m
30.04.2015, 19:02
добиваешся чтоб компилилось и работало на исходной платформе
Потом добавляешь пару NOPов в начало программы и снова "добиваешься чтоб работало на исходной платформе" :)

esl
30.04.2015, 19:47
Ага, обязательный шаг

hantarex
30.04.2015, 20:57
в памяти постоянно идут повторы кодов от 0 до FF. это артефакты теста памяти, например? или что-то другое?

---------- Post added at 20:57 ---------- Previous post was at 20:29 ----------

еще нубский вопрос: как сохранить листинг IDA в нечто удобочитаемое? txt, или html например?

alex-eller
10.05.2015, 00:40
Вижу волну интереса к пк8002. Выкладываю хорошие фото кое-каких документов от этого компа, авось чем-то поможет. Архив разбит на три части:
Первая.
Вторая.
Третья.

И ещё раз спасибо)

alex-eller
10.05.2015, 07:30
hantarex, Боюсь спросить, хоть какой нибудь адекватный результат есть?

---------- Post added at 07:30 ---------- Previous post was at 07:29 ----------

ЗЫ А как тут посты удалять?

hantarex
18.05.2015, 08:42
вышел из запоя, продолжу ковыряться:)

scaraby
27.07.2015, 01:11
Забавное представление о совместимости было у инженеров, которые проектировали ПК8002. Очень многие игры на ассемблере для ПК8000 использовали подпрограммы ПЗУ для своих целей. В итоге совместимость сохранилась, полагаю, только у тех, которые были написаны с использованием обращений к портам ввода-вывода самостоятельно, без обращения ПЗУ. В частности, программа ASSM на ПК8002 не завелась, увы.

Когда-то давно написал программу COPY09, чтобы копировать программы ПК8000, оснащённые автозапуском. Сегодня встал вопрос с созданием WAV из CAS. Так вот, чтобы создать WAV-версию программы ERIC для ПК8002, запустил эмулятор ПК8000, запустил в нём COPY09, дал ей сожрать ERIC.CAS из комплекта программ ПК8002, включил режим записи в эмуляторе, создал файл ERIC.WAV, скопировал этот файл в телефон, подключил телефон к реальному ПК8002, ввёл RERIC, включил воспроизведение в телефоне и, вуаля, появилась через 5 сек надпись "Найден файл: ERIC B", а через 2 минуты игра "автостартанула" из монитора. Вывод - параметры протокола сохранения данных на магнитной ленте - одинаковые.

Я так понимаю, чтобы запустить тот же самый ASSM, потребуется все процедуры из ПЗУ ПК8000, которые используются, перенести в адреса ОЗУ выше &H4000 и исправить все ссылки на эти подпрограммы на новые значения адресов, где будут эти подпрограммы сложены. Масштабы работы видятся нереальными просто. Закат солнца в ручную.

Кстати, время загрузки BASIC составляет почти 6 минут. Сам факт того, чтобы пользоваться бейсиком, нужно его грузить 6 минут, как любую из игрушек, для меня выглядит дикостью несусветной. Под программу пользователю оставили всего 16 КБайт, что после 47 Кбайт ПК8000 тоже, мягко говоря, выглядит странно.

UPD: Не подозревая про наличие аппаратной закладки, удалось обойти с помощью COPY09 защиту от копирования. Дело в том, что в этой программе тип файла определяется по принципу, что не BAS, то HEX. Содержимое заголовка сохраняется целиком в ОЗУ, оттуда берётся только имя файла (6 байт) для отображения на экране, а при записи выгружается на ленту ровно в том виде, как загружено. Со значением маркера 0a0h.

scaraby
19.01.2017, 14:10
А насколько вообще актуален дизассемблер ПЗУ монитора? Мне тут нужно было найти точку для выхода из своих программ в монитор, поэтому я распотрошил ПЗУ до этого момента. По ходу действий нашёл ряд интересных системных переменных в том плане, для чего какие используются. Помимо этого разобрался с общей логикой запуска, с тем, как работают прерывания. Всё это закомментировал более-менее, чтобы было понятно, что к чему. Но нужная мне задача, в принципе, решена. Поэтому и интересуюсь - нужно ли до конца весь монитор в таком виде оформлять или такие вещи никто не использует в принципе?

scaraby
25.01.2017, 16:56
Оказывается, что в ПК8002 существует четыре маркера заголовков файлов, загружаемых с ленты. Кроме известных в ПК8000 0d0h, 0d3h и 0eah, появился ещё и 0a0h, который приводит к автозапуску загруженной с ленты программы. Интересно, а в Ямахе тоже такой маркер существовал? На мой запрос на эту тему, гугл покрутил пальцем у виска, предложил выпить корвалол и ложиться спать.

UPD: Создатели компьютера были не так просты. Программа ERIC, к примеру, имеет маркер заголовка 0a0h, поэтому запускается автоматически после загрузки. Работает это следующим образом: берётся код второго символа в имени файла и сдвигается влево на один разряд. Полученный результат сохраняется в регистре b и является ключом к расшифровке загруженной программы. Далее вся программа от первого до последнего байта пропускается через исключающее или (расшифровка) и только после этого управление передаётся по адресу запуска, указанному в пятом и шестом байте hex-файла данных.

ROM:0605 loc_605: ; CODE XREF: ROM:05EAj
ROM:0605 pop h ; адрес начала загруженной программы
ROM:0606 pop d ; в hl из стека адрес начала загруженной программы, в de - конца
ROM:0607 lda 0FF1Fh ; второй байт из имени фактически загруженного файла
ROM:060A rlc ; сдвинутый влево на 1 разряд
ROM:060B mov b, a ; является ключом к шифрованию загруженного файла
ROM:060C
ROM:060C loc_60C: ; CODE XREF: ROM:0615j
ROM:060C call 0FF2Ch ; подпрограмма чтения из VRAM байта, адрес которого в hl
ROM:060F xra b ; расшифровка загруженной программы автозапуска
ROM:0610 mov m, a ; сохранение декодированного байта
ROM:0611 call sub_23F9 ; проверка, если hl=de, то ZF=1
ROM:0614 inx h ; повторяется до конца загруженного блока
ROM:0615 jnz loc_60C
ROM:0618 pop h ; загружается адрес запуска программы
ROM:0619 pchl ; и передаётся ему управление
То есть, как я понимаю, таким образом защищали программу от копирования. С помощью ПК8000 через SKIPPY, BLOAD, BSAVE не скопируешь, так как маркер в заголовке не опознается. А если подсунешь заголовок от ERIC для ПК8000, то после перезаписи не заработает. Расшифровка происходит только при наличии маркера 0a0h в заголовке, а в ПК8000 он 0d0h. Дизассемблировать на ПК8000 тоже бесполезно, если не знаешь ключ, который привязан к имени файла.

ПК8002 верен барыжьим традициям ПК8000. Сперва продаём игры, которые не копируются, а через некоторое время предлагаем купить копировщик для этих игр, цена которого сопоставима с десятком игр.

scaraby
01.02.2017, 17:22
Вот вроде бы закончил разбор ПЗУ. Осталось некоторое количество неизвестного кода, но, чтобы вникать в него, нужно сперва схему включения ПЗУ построить, чтобы понять, как там оно адресуется. Сейчас, по крайней мере, все процедуры, которые так или иначе затрагиваются из монитора после включения питания распознаны и более-менее описаны. За неимением никакой документации это - хоть что-то. Можно писать Хэловорды. Заодно прикрепил базу данных для IDA. Версия 5.2.0.908 (64-bit).

59613

scaraby
02.03.2017, 13:36
В детстве больше всего хотелось, чтобы у ПК8000 был режим 64 символа в строке. Помню, когда в очередном письме из МЦ "Контакт" с предложением купить очередную порцию программ увидел редактор TEXT, в котором было заявлено что поддерживается режим 64 символа в строке, пришёл в восторг. Однако, спустя примерно месяц разочарованию не было предела, потому что на экране были всё те же 40 символов в строке, а что касается обещанных 64, то это прикручена была возможность горизонтальной прокрутки видимого окна по тексту со скоростью 1 столбец в секунду. Печально.

В ПК8002 режим отображения 64 символов в строке заявлен и реализован, но через известное место. Тем не менее, детские мечты должны сбываться и мною была набросана небольшая прога, позволяющая увидеть на экране текст. Скормить можно любой файл, кодировку тоже можно выбрать какую хочешь, но путём подсовывания нужного знакогенератора. Я ориентировался на ansi-windows. Интерфейс, разумеется, отсутствует в принципе. Кроме прокрутки вниз и выхода больше никаких функций нет, но такая задача и не ставилась. Хотелось просто увидеть, как 64-символьный текст будет смотреться на экране.

Главная проблема с реализацией этого режима состоит в том, что один буфер экрана используется для двух наборов знакогенераторов, поэтому невозможно реализовать текстовый режим: бросил код символа в буфер, а символ отобразился на экране. Вместо этого очень быстрого способа выведения текста, нужно в буфер забить три последовательности 0-0ffh, а в знакогенераторы закидывать непосредственно 8 байт изображения символа. Работает намного медленнее. В итоге получилась скорость прокрутки, соизмеримая с LIST Бейсика ПК8000. Ещё одна странность реализации связана с тем, что нечётные знакоместа адресуются знакогенераторами, определяемыми параметром Адрес Массива Графики, а чётные - Адрес Массива Цвета. И ещё один смешной нюанс, на который у меня ушло пару дней и куча нервов, связан с тем, что цвет фона и символов в этом режиме задаётся портами 8ah и 8bh. При прочтении руководства по работе видеоадаптера и видеопроцессора про это не говорится ни слова, поэтому пока я, матерясь, не изгрыз описание всех портов, у меня упорно отображался на экране чёрный квадрат в синей рамочке.

Из спец-кодов поддерживается только табуляция, перевод строки и возврат каретки, плюс реализован перенос слов, а-ля выравнивание текста по левому краю. В целом, выглядит забавно, когда прямо из форума копируешь текст и тут же его закидываешь в ОЗУ ПК8002 и любуешься на экране.

http://s019.radikal.ru/i643/1703/28/8752ca067240.jpg

http://s018.radikal.ru/i521/1703/67/0d32b6366a28.jpg