nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 01:31



Reply to topic  [ 37 posts ]  Go to page Previous  1, 2, 3  Next
ПК Поиск - замена штатного 1810ВМ88 на NEC V20 
Author Message
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Ну вам виднее :)
Мне проще пару кнопок нажать, чем стирать ПЗУ и перешивать его.

По поводу SRAM - в смысле сэмулировать? Запись подавить? Или с таймингами у нее не то что-то?
upd: тьфу, дошло. ПЗУ же эмулировать! :mrgreen:


07 Nov 2015 02:10
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Ну да, собрал махарайку:

Image

_________________
https://t.me/tronix_blog


07 Nov 2015 02:32
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Вообщем, написал так в 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

_________________
https://t.me/tronix_blog


07 Nov 2015 03:47
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Ну, раз волков онлайн, значит проблема, по сути, решена. Искренне поздравляю, такие баги ловить - занятие неблагодарное.
И чсх, никому кроме тебя это не надо, и никому кроме тебя это не интересно. Но как же приятно найти и удавить засранца!
В общем - грац! :kruto: :idea:


07 Nov 2015 04:25
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Спасибо. Но не все гладко - те сорцы биоса, что есть - это 89 года, видимо одна из самых первых версий. Много багов, например не правильное определение кол-ва памяти (в меньшую сторону), не отображает инверсные цвета, клавиатура немного по-другому назначены кнопки, например ESC - это F1, F2 - это F1 и тд)... То есть работает, но не так, как с биосом 91-ого года... Ну думаю потихоньку подправлю...

_________________
https://t.me/tronix_blog


07 Nov 2015 05:23
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Так а я о чем изначально? Замена 2 вектора (без каких-либо модификаций любого биоса!) - лучшее решение.
Скажем, резидент, подменяющий NMI. Ну скушает он 20-30 параграфов памяти. Кто умрет-то (в текстовом режиме причем)?
Зато загружабелен и выгружабелен (волков альт+ф5, если мне не изменяет склелоз) по желанию, а не прибит гвоздями в биосе. Который еще перешить чем-то надо.


07 Nov 2015 06:23
Profile
Doomed

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

_________________
https://t.me/tronix_blog


07 Nov 2015 06:31
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Vic3Dexe Посмотрел твой исходник - вроде бы все хорошо, только это будет медленно на мой взгляд (генерировать еще раз nmi путем перезаписи байта). Поиск и так то тормозит с выводом на экран... Чем хорош вариант с BIOS - не нужно дважды проходить груду push ax, push bx, push dx.... pop dx, pop bx, pop ax.

Если просто записать в порт 28h нужный адрес и джампнуться еще раз в NMI, не будет ли побыстрее, чем аппаратно генерировать NMI?

_________________
https://t.me/tronix_blog


07 Nov 2015 12:54
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Записать в 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
Profile
Doomed

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

_________________
https://t.me/tronix_blog


08 Nov 2015 01:09
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Все-таки решил пилить BIOS, потому что... Ну потому что тормоза будут, если подменять int 2 из-под доса. Прям чувствую. Ну и с биосом можно поиграться в плане перевода части команд на V20 для ускорения, оптимизации. Пока дописал нормальное отображение инверсного цвета (это было легко). И взялся за клавиатуру... Выручает имеющийся эмулятор Поиска - EMU за авторством b2m (http://bashkiria-2m.narod.ru/index/files/0-11 ), хоть и не без косяков он, но юзать можно. В биосе 91-ого года совершенно по другому реализовано сканирование клавиш, код не совпадает с имеющимися листингами совсем. Долго не думая, решил диззасемблернуть 91-ый биос и впилить кусок, отвечающий за сканирование в имеющиеся исходники... Все шло гладко, пока не дошел до таблиц перекодировок. Но я думаю еще несколько часов в дизасме и хекс редакторе и все-таки наступит "просветление".. Так что вот так пока.

_________________
https://t.me/tronix_blog


08 Nov 2015 11:36
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
BIOS от 14.02.1991? Их есть у меня. На каком смещении проблема? Посмотрю идой.


08 Nov 2015 11:46
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Ну сорцы - 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.


Attachments:
BIOS_V20.rar [214.29 KiB]
Downloaded 356 times

_________________
https://t.me/tronix_blog
08 Nov 2015 12:30
Profile
Doomed

Joined: 16 Dec 2014 11:58
Posts: 370
Location: Киев
Reply with quote
Так я как раз про бинарник-91. Где лежит-то этот кнопкосканер в нем (или с чем сейчас проблема)? В дизассемблинге опыт есть (любимая Elite разобрана по байтику за мелкими исключениями, UFO на очереди).
Даже морровинд ковырял, но сиплюсплюснутые компиляторы вымораживают...
В общем по асму/дизасму - любые вопросы.

К сожалению, с запуском Принца и пр. помочь не смогу - железа нет, и как выглядит проблема я не знаю. Эмуляторы едут лесом, и вот почему. Разбирался с потрохами VGA (мне его в свой проект на FPGA пихать надо), первые же нестандратные проверки на реальном (хоть и современном) железе и эмуляторах показали полную несостоятельность последних. Так что эмуляторам доверять перестал вообще. Исключение, пожалуй, досбокс - там уклон именно в точную эмуляцию старого железа.


08 Nov 2015 14:00
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Справился с клавиатурой худо-бедно. Перенес по кускам из версии 91-ого года. Благо int 9 похож на int 9 из сорцов биоса Поиск-2, практически байт-байт копипаста. Таблицу переконвертации русских букв они выкинули из SCANINT2 и засунули в int16. И теперь это стала реально таблица, а раньше была небольшая табличка и множество условий...

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

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

_________________
https://t.me/tronix_blog


14 Nov 2015 08:14
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 37 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 7 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.