|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
ПК Поиск - замена штатного 1810ВМ88 на NEC V20
Author |
Message |
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Ну вам виднее Мне проще пару кнопок нажать, чем стирать ПЗУ и перешивать его. По поводу SRAM - в смысле сэмулировать? Запись подавить? Или с таймингами у нее не то что-то? upd: тьфу, дошло. ПЗУ же эмулировать!
|
07 Nov 2015 02:10 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Ну да, собрал махарайку:
|
07 Nov 2015 02:32 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Вообщем, написал так в NMI: | | | | Code: NMI_SERVICE: CLD PUSH ES PUSH DS PUSH DX PUSH CX PUSH BX PUSH SI PUSH DI PUSH AX
MOV AX,DSEGMENT MOV DS,AX mov bx,sp ;SS:[BP] - ВР ;SS:[BP+2] - IP ;SS:[BP+4] - CS ;SS:[BP+6] - флаги mov rep_now,0
mov ax,ss:[bx+4+14] mov bx,ss:[bx+2+14] mov es,ax cmp byte ptr es:[bx],0F3h jne skip_rep mov rep_now,1 jmp skip_rep2 skip_rep: cmp byte ptr es:[bx-2],0F3h jne skip_rep2 mov rep_now,1 skip_rep2:
| | | | |
Смысл в том, что когда CX=2 и rep stosw, то я получаю в NMI уже опкод команды, следующей за rep stpsw. Поэтому для такого случая приходится проверять es:[bx-2]. С другой стороны, когда CX=1 и rep stosw, я здесь зря отрисую два символа. И когда CX=3, должно сработать первое условие es:[bx]. Скомпилил биос, прошил... Ну.... Волков работает. Дальше пока не могу тестить, клава не работает :E
|
07 Nov 2015 03:47 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Ну, раз волков онлайн, значит проблема, по сути, решена. Искренне поздравляю, такие баги ловить - занятие неблагодарное. И чсх, никому кроме тебя это не надо, и никому кроме тебя это не интересно. Но как же приятно найти и удавить засранца! В общем - грац!
|
07 Nov 2015 04:25 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Спасибо. Но не все гладко - те сорцы биоса, что есть - это 89 года, видимо одна из самых первых версий. Много багов, например не правильное определение кол-ва памяти (в меньшую сторону), не отображает инверсные цвета, клавиатура немного по-другому назначены кнопки, например ESC - это F1, F2 - это F1 и тд)... То есть работает, но не так, как с биосом 91-ого года... Ну думаю потихоньку подправлю...
|
07 Nov 2015 05:23 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так а я о чем изначально? Замена 2 вектора (без каких-либо модификаций любого биоса!) - лучшее решение. Скажем, резидент, подменяющий NMI. Ну скушает он 20-30 параграфов памяти. Кто умрет-то (в текстовом режиме причем)? Зато загружабелен и выгружабелен (волков альт+ф5, если мне не изменяет склелоз) по желанию, а не прибит гвоздями в биосе. Который еще перешить чем-то надо.
|
07 Nov 2015 06:23 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
А ведь и правда! Спасибо, сейчас попробую!
|
07 Nov 2015 06:31 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Vic3Dexe Посмотрел твой исходник - вроде бы все хорошо, только это будет медленно на мой взгляд (генерировать еще раз nmi путем перезаписи байта). Поиск и так то тормозит с выводом на экран... Чем хорош вариант с BIOS - не нужно дважды проходить груду push ax, push bx, push dx.... pop dx, pop bx, pop ax.
Если просто записать в порт 28h нужный адрес и джампнуться еще раз в NMI, не будет ли побыстрее, чем аппаратно генерировать NMI?
|
07 Nov 2015 12:54 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Записать в 28h ничего не получится - глянь по схеме, он пишется по фронту NMI. У меня тоже такая мысль была. =) А что медленно... Ну NMI придется звать так или иначе. И как бы в варианте вшивания в биос дольше не получилось, из-за того, что инструкции в биосе лежат (я не в курсе - он у поиска медленней RAM?).
Да, и нашел 3 бага у себя же: 1. После mov [es:bx],al нужно добавить сброс флага mov [cs:flag],0 2. После pop DS перед iret нужно добавить pop bp 3. В инструкциях cmp [cs:flag],1 / je exit метку нужно сменить на exit1, которую поставить на iret (мы же в этом месте регистры еще не сохраняли) upd: 4. mov al,[es:bx+2] / mov [es:bx+2],al
|
07 Nov 2015 23:54 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Угу, я тоже эти баги еще вчера видел, но это и так понятно, поэтому не заострял. Сегодня попозже попробую протестить, щаз уезжаю по делам. Вообще, есть мысль переписать нафиг int 10h и nmi на свои полностью, для начала резидентом конечно, а в дальнейшем и в BIOS встроить. В частности в процедурах отображения символов использовать таблицы, а не на ходу вычислять позицию в буфере и тд. Но работка не очень легкая.... Но интересная.
|
08 Nov 2015 01:09 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Все-таки решил пилить BIOS, потому что... Ну потому что тормоза будут, если подменять int 2 из-под доса. Прям чувствую. Ну и с биосом можно поиграться в плане перевода части команд на V20 для ускорения, оптимизации. Пока дописал нормальное отображение инверсного цвета (это было легко). И взялся за клавиатуру... Выручает имеющийся эмулятор Поиска - EMU за авторством b2m ( http://bashkiria-2m.narod.ru/index/files/0-11 ), хоть и не без косяков он, но юзать можно. В биосе 91-ого года совершенно по другому реализовано сканирование клавиш, код не совпадает с имеющимися листингами совсем. Долго не думая, решил диззасемблернуть 91-ый биос и впилить кусок, отвечающий за сканирование в имеющиеся исходники... Все шло гладко, пока не дошел до таблиц перекодировок. Но я думаю еще несколько часов в дизасме и хекс редакторе и все-таки наступит "просветление".. Так что вот так пока.
|
08 Nov 2015 11:36 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
BIOS от 14.02.1991? Их есть у меня. На каком смещении проблема? Посмотрю идой.
|
08 Nov 2015 11:46 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Ну сорцы - 89 года, которые везде есть в инетах. А биос в бинарнике - от 14.02.91. Все-таки впилил дезассемблированную обработку сканирования клавиш из биоса 91-ого года. Теперь клавиши начали соответствовать своей раскладке на клавиатуре (ESC - это ESC, F1 - это F1 и тд), начали срабатывать комбинации Ctrl + буква, начал включаться синий фон при нажатии правого Ctrl (переключение на русский). Однако само переключение не происходит, символы по прежнему печатаются английские, и не выключается синий фон повторным нажатием на правый Ctrl. Видимо что-то еще там не того, наверное еще и int9 надо менять... Но все равно, уже гораздо лучше, по сравнению с самым первым вариантом.
Итого, уже пофикшено: 1) Правильное определение количества набортной памяти. По умолчанию сильно занижал, например на реальных 480Кб дос рапортовала о ~306Kb. Не стал разбираться, а переписал функцию. Сделал вывод на экран количества памяти (места много, так как выкинул кассетные функции). 2) Нормальный вывод символов, с инверсными аттрибутами. Volkov Commander стал выглядеть так-же, как и на биос 91-ой версии 3) Частично заработала клавиатура. Описано выше. Изменен SCANINT2.ASM. Старый сохранен как SCANINT2.A__
Что еще надо сделать: 1) Клавиатура - описано выше (русские символы, убирание синего фона при повторном нажатии пр. Ctrl) 2) Впилить более корректную обработку CGA портов в NMI, в том числе вроде в 91-ой версии есть возможность читать значения из CGA портов, а не только их туда писать. Добится запуска принца персии. 3) Посмотреть что с курсором - он не убирается, когда его выключают, хотя вроде бы функции такие в 89 биосе есть. 4) Посмотреть что с переключением видео-страниц. При тестировании видеостраниц в Checkit происходит не пойми что. 5) Шрифт - взять из 91-ой версии, потому что мне он больше нравится. Различаются начертанием кодов >127 6) Ну и по мелочи, оптимизация, приведение кода в человеческий вид...
Вот такие планы... На всякий случай прикладываю текущий модифицированный биос с исходниками. Собираю в dosbox, запуская make_p1.bat. На выходе bios.bin.
|
08 Nov 2015 12:30 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так я как раз про бинарник-91. Где лежит-то этот кнопкосканер в нем (или с чем сейчас проблема)? В дизассемблинге опыт есть (любимая Elite разобрана по байтику за мелкими исключениями, UFO на очереди). Даже морровинд ковырял, но сиплюсплюснутые компиляторы вымораживают... В общем по асму/дизасму - любые вопросы.
К сожалению, с запуском Принца и пр. помочь не смогу - железа нет, и как выглядит проблема я не знаю. Эмуляторы едут лесом, и вот почему. Разбирался с потрохами VGA (мне его в свой проект на FPGA пихать надо), первые же нестандратные проверки на реальном (хоть и современном) железе и эмуляторах показали полную несостоятельность последних. Так что эмуляторам доверять перестал вообще. Исключение, пожалуй, досбокс - там уклон именно в точную эмуляцию старого железа.
|
08 Nov 2015 14:00 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Справился с клавиатурой худо-бедно. Перенес по кускам из версии 91-ого года. Благо int 9 похож на int 9 из сорцов биоса Поиск-2, практически байт-байт копипаста. Таблицу переконвертации русских букв они выкинули из SCANINT2 и засунули в int16. И теперь это стала реально таблица, а раньше была небольшая табличка и множество условий...
Вообще клава работает.
Теперь видео - тоже не совпадает код в 91 и 89 года версии, то же они там многое поменяли... В 89 все как-то сыровато - глюки с видео-страницами, с прятаньем курсора, курсор оставляет инвертированные пиксели на символах, палитра не переключается для 320x200, и тд и тп. Наверное целиком in10h я не перетащу, больно большой... Не знаю... Попробовать новый int10h впилить и к нему прикручивать уже Поисковое...
|
14 Nov 2015 08:14 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|