ПК Поиск - замена штатного 1810ВМ88 на NEC V20

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

Ну вам виднее :)
Мне проще пару кнопок нажать, чем стирать ПЗУ и перешивать его.

По поводу SRAM - в смысле сэмулировать? Запись подавить? Или с таймингами у нее не то что-то?
upd: тьфу, дошло. ПЗУ же эмулировать! :mrgreen:
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Ну да, собрал махарайку:

Image
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Вообщем, написал так в NMI:

Code: Select all

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
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

Ну, раз волков онлайн, значит проблема, по сути, решена. Искренне поздравляю, такие баги ловить - занятие неблагодарное.
И чсх, никому кроме тебя это не надо, и никому кроме тебя это не интересно. Но как же приятно найти и удавить засранца!
В общем - грац! :kruto: :idea:
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Спасибо. Но не все гладко - те сорцы биоса, что есть - это 89 года, видимо одна из самых первых версий. Много багов, например не правильное определение кол-ва памяти (в меньшую сторону), не отображает инверсные цвета, клавиатура немного по-другому назначены кнопки, например ESC - это F1, F2 - это F1 и тд)... То есть работает, но не так, как с биосом 91-ого года... Ну думаю потихоньку подправлю...
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

Так а я о чем изначально? Замена 2 вектора (без каких-либо модификаций любого биоса!) - лучшее решение.
Скажем, резидент, подменяющий NMI. Ну скушает он 20-30 параграфов памяти. Кто умрет-то (в текстовом режиме причем)?
Зато загружабелен и выгружабелен (волков альт+ф5, если мне не изменяет склелоз) по желанию, а не прибит гвоздями в биосе. Который еще перешить чем-то надо.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

А ведь и правда! Спасибо, сейчас попробую!
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Vic3Dexe Посмотрел твой исходник - вроде бы все хорошо, только это будет медленно на мой взгляд (генерировать еще раз nmi путем перезаписи байта). Поиск и так то тормозит с выводом на экран... Чем хорош вариант с BIOS - не нужно дважды проходить груду push ax, push bx, push dx.... pop dx, pop bx, pop ax.

Если просто записать в порт 28h нужный адрес и джампнуться еще раз в NMI, не будет ли побыстрее, чем аппаратно генерировать NMI?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

Записать в 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
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Угу, я тоже эти баги еще вчера видел, но это и так понятно, поэтому не заострял. Сегодня попозже попробую протестить, щаз уезжаю по делам. Вообще, есть мысль переписать нафиг int 10h и nmi на свои полностью, для начала резидентом конечно, а в дальнейшем и в BIOS встроить. В частности в процедурах отображения символов использовать таблицы, а не на ходу вычислять позицию в буфере и тд. Но работка не очень легкая.... Но интересная.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Все-таки решил пилить BIOS, потому что... Ну потому что тормоза будут, если подменять int 2 из-под доса. Прям чувствую. Ну и с биосом можно поиграться в плане перевода части команд на V20 для ускорения, оптимизации. Пока дописал нормальное отображение инверсного цвета (это было легко). И взялся за клавиатуру... Выручает имеющийся эмулятор Поиска - EMU за авторством b2m (http://bashkiria-2m.narod.ru/index/files/0-11 ), хоть и не без косяков он, но юзать можно. В биосе 91-ого года совершенно по другому реализовано сканирование клавиш, код не совпадает с имеющимися листингами совсем. Долго не думая, решил диззасемблернуть 91-ый биос и впилить кусок, отвечающий за сканирование в имеющиеся исходники... Все шло гладко, пока не дошел до таблиц перекодировок. Но я думаю еще несколько часов в дизасме и хекс редакторе и все-таки наступит "просветление".. Так что вот так пока.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

BIOS от 14.02.1991? Их есть у меня. На каком смещении проблема? Посмотрю идой.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Ну сорцы - 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.
You do not have the required permissions to view the files attached to this post.
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Vic3Dexe »

Так я как раз про бинарник-91. Где лежит-то этот кнопкосканер в нем (или с чем сейчас проблема)? В дизассемблинге опыт есть (любимая Elite разобрана по байтику за мелкими исключениями, UFO на очереди).
Даже морровинд ковырял, но сиплюсплюснутые компиляторы вымораживают...
В общем по асму/дизасму - любые вопросы.

К сожалению, с запуском Принца и пр. помочь не смогу - железа нет, и как выглядит проблема я не знаю. Эмуляторы едут лесом, и вот почему. Разбирался с потрохами VGA (мне его в свой проект на FPGA пихать надо), первые же нестандратные проверки на реальном (хоть и современном) железе и эмуляторах показали полную несостоятельность последних. Так что эмуляторам доверять перестал вообще. Исключение, пожалуй, досбокс - там уклон именно в точную эмуляцию старого железа.
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: ПК Поиск - замена штатного 1810ВМ88 на NEC V20

Post by Tronix »

Справился с клавиатурой худо-бедно. Перенес по кускам из версии 91-ого года. Благо int 9 похож на int 9 из сорцов биоса Поиск-2, практически байт-байт копипаста. Таблицу переконвертации русских букв они выкинули из SCANINT2 и засунули в int16. И теперь это стала реально таблица, а раньше была небольшая табличка и множество условий...

Вообще клава работает.

Теперь видео - тоже не совпадает код в 91 и 89 года версии, то же они там многое поменяли... В 89 все как-то сыровато - глюки с видео-страницами, с прятаньем курсора, курсор оставляет инвертированные пиксели на символах, палитра не переключается для 320x200, и тд и тп. Наверное целиком in10h я не перетащу, больно большой... Не знаю...
Попробовать новый int10h впилить и к нему прикручивать уже Поисковое...