![]() |
Что за "дамп ПЗУ палитры" такой? Дайте хоть посмотреть на это, а то я не вдупляю о чем вообще речь идет. В текстовом режиме палитра не меняется, да. Меняется только в 320x200. b2m - вы читали сообщение http://zx-pk.ru/showpost.php?p=648201&postcount=108 ? Что по поводу полноэкранного режима?
|
Quote:
Выглядит так: Code:
00000000: 00 01 02 03 01 01 02 03 │ 02 01 02 03 03 01 02 03Quote:
Quote:
Попробуй добавить в конфиг строчки: main.fullscreen=1280x1024x16 main.fullscreen.scale.x=2 main.fullscreen.scale.y=2 ---------- Post added at 13:13 ---------- Previous post was at 13:10 ---------- Предварительно уточни в настройках видеокарты, поддерживается ли 1280х1024 16-цветов. Если нет, выбери другой режим. 1-в-1 (т.е. без масштабирования) это 640х400, но вряд-ли у тебя такой режим есть. ---------- Post added at 13:14 ---------- Previous post was at 13:13 ---------- Если режим не поддерживается, то он опять будет подобран автоматически и изменений ты не заметишь. |
Quote:
А прошивку АTA BIOS взяли от Поиска или еще какую-то? Quote:
|
Quote:
Hard Disk BIOS "POISK" Version 1.1 Copyright (C) S.Kovalenko, 1990 Quote:
---------- Post added at 14:03 ---------- Previous post was at 13:46 ---------- Кстати, если будешь разбираться с РТ5, там на схеме ошибка вроде. Бит адреса пронумерованы подряд 20...28, а судя по содержимому РТ5 должно быть 20..23,25..29. ---------- Post added at 14:05 ---------- Previous post was at 14:03 ---------- Из чего должно следовать, что порты дублируются: 2x=3x, 4x=5x, 6x=7x, 3Cx=3Dx |
Это b_hd_v11.rf2 с SHA1 57faa56b320abf801fedbed578cf97d253e5b777 ?
|
SHA не считал, имя файла - да, такое.
|
Крайне занятно. Разве это не прошивка от MFM контроллера? Как она работает с ATA?
|
MFM там, или нет, это уже контроллер разбираться будет. А общение с контроллером идёт в 8-ми битном режиме ATA PIO Mode, используются те-же 8 портов, плюс порт данных декодируется в ещё одной области памяти, чтобы rep movsb можно было использовать.
|
В942 не использует порты совсем, насколько я понимаю из схемы, только память (сегмент D000).
|
Quote:
А где можно взять схемы всех внешних модулей? |
Схему В942 -- в соседней теме, http://zx.pk.ru/attachment.php?attac...8&d=1345582603
Но вопрос остается -- как прошивка от В942 у вас вообще работает? :) ---------- Post added at 17:48 ---------- Previous post was at 16:49 ---------- Оказалось, что эмуляция WD2010 в MESS пока не работает, поэтому пока В942 подключить не удастся. Оставляю пока для раздумий трассировку общения BIOS v1.4 с контроллером (все адреса в сегменте D000, читается всегда 0). Полагаю, что по адресам 08xx находится собственно ВГ7: Code:
1.154857: hdc R $0000 == $00 |
Quote:
|
Это как? :)
А другие карты эмулируете (джойстик, мышь, локальную сеть)? |
Нет пока.
|
Quote:
|
Для 32-битных режимов нельзя делать scale.x (эмулятор может генерировать максимум 32 бита на точку). Странно, что не получилось с 16-битным режимом. Вобщем, пока не знаю, чем помочь.
|
1 Attachment(s)
b2m - а регистр флагов нормально обрабатываете? И вместе с ним, флаг trap, который должен переводить проц в режим пошагового исполнения команд (int 01).
Просто все великолепно в эмуле, кроме того, что ни checkit, ни pctools с информацией о системе, ни даже мой файл-коммандер упакованный diet не запускаются. На всякий случай тест для раздумий насчет trap в архиве. UPD: На реальном Поиске соответственно должен выдавать: "Intel 8088 '81 or later, or Intel 80C88" |
1 Attachment(s)
Проблему с trap-ом решил, но checkit по прежнему вылетает :(
|
Ну, не видя сорцов мне трудно что либо сказать. Может по секрету (под NDA) все-таки покажите код эмуляции x86? И где бы новую версию с исправленным trap качнуть, попробую еще методом тыка поковырять...
|
Quote:
---------- Post added at 18:23 ---------- Previous post was at 18:18 ---------- CheckIt вылетает, начиная тестировать какие-то "системные компоненты" на втором из 12 шагов. Видимо, не находит какого-то обязательного устройства. Знать бы, чего он тестирует, а то по шагам трассировать программу, написанную на ЯВУ довольно муторно, и мало чего понятно, чего она делает. ---------- Post added at 19:09 ---------- Previous post was at 18:23 ---------- Tronix, у меня какая-то неправильная версия CheckIt, она использует 32-битные команды (с префиксами 66h,67h). А какая версия использовалась на Поиске? И где её скачать? |
1 Attachment(s)
Quote:
---------- Post added at 18:24 ---------- Previous post was at 18:16 ---------- Вот стандартная тащемто детектилка проца тех времен: Code:
; 8086 CPU check |
Quote:
|
1 Attachment(s)
Quote:
Но тут вылезает какая-то другая бага, он (эмулятор) мне пишет: error at 53 generated 5750 etalon: 5700 . Фишка в том, что по этому смещению (53h) в эталонном массиве нули, да и тест не должен ничего по этому смещению писать, там тоже должны быть нули (я затираю в начале сегмент ES 16Kb нулями). Проверка между эталоном и сгенереным масивом идет командой REP CMPSB. error at берется из 159-CX, когда находит первый несовпавший байт. Соответственно generated есть ES:[DI-1], etalon DS:[SI-1]. Вообщем чето где-то тут не так работает как надо. res_add.bin - это эталонный массив в бинарном виде, удобно в hex смотреть. |
Quote:
Code:
xor di,di ; clean 16Kb ES:DI with zeros |
Quote:
|
Вот с чем сравнивается:
Code:
00000000: FF FF 00 00 FE FF FF FF 02 00 03 00 00 80 FF 7F |
со смещения 00 по смещение 4E - результаты работы ADD, INC. Потом несколько нулей (не используемых), далее со смещения 5C по 9F - флаги после результатов работы.
Но все это вообще не важно пока, потому как в эмуле пишется бред - error at 53 - то есть он нашел различие по смещению 53. Как так - я хз, в эталонном массиве там нули, в генеррируемом тоже должны быть нули, ибо 1 кб очищаем и более туда (по смещению 53) никто ничо не пишет в процессе. Предполагаю, что REP CMPSB неправильно возвращает CX (который у меня и используется для вывода смещения по которому произошло несовпадение), либо что то еще. |
По завершению repe cmpsb di=005e, cx=0042, это правильно?
---------- Post added at 16:50 ---------- Previous post was at 16:47 ---------- Вывод байта работает неверно. al=0D -> aaa -> al=03 cy=1 -> aad 11 -> al=33 Где косяк? |
Quote:
[COLOR="Silver"] Quote:
|
Quote:
---------- Post added at 17:06 ---------- Previous post was at 17:04 ---------- Я бы понял, как это работает, если бы вместо aad 11h стояло adc al,30h. Но тут? |
Quote:
|
Видимо, я не совсем понимаю, как работает aad
|
AAD : AL = AH*x + AL ;AH = 0
И все флаги от результата AX- (SF, ZF, PF, OF, CF, AF) |
Хорошо, флаги я забыл сделать, но AL=AH*x+AL именно так я и сделал. Разве что старший байт после умножения я отбросил, но ты пишешь AH=0...
---------- Post added at 17:21 ---------- Previous post was at 17:20 ---------- Есть такой вот тест, но он явно не пройдёт у меня :) |
2 Attachment(s)
Ну я не знаю как так может быть. Вот в тесте печатает hex числа от 0 до FE.
Некоторые сорцы из эмулей: Code:
case 0xD5: /*AAD*/Code:
/* OP D5: AAD imm8 */Code:
case 0xD5: /* D5 AAD I0 */ |
Проблема оказалась в команде aaa, забыл ah обновить. Теперь пишет как и положено - 005D.
Обновил эмулятор. |
1 Attachment(s)
Гуд, будем копать дальше :) На всякий случай собрал тест AAD, должен выводить 3FFF. DosBox кстати неправильно работает -)
Ваш эмуль тоже не проходит тест. PCem так же не проходит. На моем Поиске выдает 3FFF, как и положено. |
Также не учитывается еще одна особенность 8088/86, а именно:
Code:
push sp ; save SP on stack to look atCode:
; 8086/80186 80286+ |
1 Attachment(s)
Так же интересно, почему если в качестве биос подсунуть некий тест, эмуль вообще падает по ексепшену. Тест div.bin, там устанавливается вектор прерывания int 00h, далее в коде происходит деление на ноль. Должно сгенерироваться int 0, но где-то тут наверно происходит крах системы -) В то же время, подобный тест sub.bin отрабатывает без ошибок. Правда в нем нет никаких обработчиков прерываний. Файлы res_div.bin и res_sub.bin содержат эталонные значения, с которыми можно сравнить содержимое памяти начиная с 0000:0000. В случае sub.bin все верно, ну кроме старших бит во флагах, но это так и должно быть. А вот с div.bin непонятно, так как эмуль падает.
|
1 Attachment(s)
С умножением похоже нелады во флагах после операций. И это не только старшие биты. Запускать вместо BIOS, потом сравнить память с res_mul.bin Флаги это важно, возможно checkit из-за этого падает с math-error
|
| All times are GMT +4. The time now is 04:56. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.