Ну и отлично! Насчет креша тестов. Я думаю вы зря грешите на формирователь импулься прерываний. Я не думаю, что плохая работа этого узла приведт к крэшу системы на тесте памяти. Скорее это может привести к каким либо визуальным дефектам, или повлияет на темп игры, демки, музыки. А если крэш тут нуадо смотреть на процессор, память, шины адресов, данных, дешифраторы устройст ввода вывода, формирователи RAS,CAS, маппер, и тому подобное
О прогрмме DBG. Она позволяет: исполнять программу, выпонять программу по шагам или до точки останова, добавлять снимать точки останова. Просматривать и изменять регистры и флаги процессора, а также просматривать и изменять состояние маппера. Писать новую или справлять имеющуюся программу встроемным интерактивным ассемблером. Загружать в память файл с диска, и записывать фрагменты памяти на диск. Просматривать и редактировать hex-dump памяти.
Выше кто то говорил (или спрашивал) про обьем памяти в режиме CPC. Оказывается не имея данных мы сделали расширение почти совместимое с dk'tronics модулем
На этой страничке написано про Aleste так:
Semi-Standard Expansions
Aleste 520EX - a CPC clone that allows to access 256K (of its total 512K memory) in Inicron-style fashion (ie. as on a 64K computer with 192K expansion which can be mapped to 4000h..7FFFh).
На другой страничке они интерпретируют D28 Aleste, ту часть которая в режиме CPC
Но стандарное расширение dk'tronics немного отличается. Вообще они (dk'tronics) называют первые (основные) 64 килобайта Block 1, а дополнительные Block 2Код:0000: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ;-1st+2nd 64K banks (as on cpc 6128) 0010: 0 4 2 3 0 5 2 3 0 6 2 3 0 7 2 3 ;-1st+2nd 64K banks (as on cpc 6128) 0020: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ;-1st+2nd 64K banks (mirror of 6128) 0030: 0 8 2 3 0 9 2 3 0 A 2 3 0 B 2 3 ;-1st+3rd 64K banks (as on dk'tronics) 0080: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ;-1st+2nd 64K banks (mirror of 6128) 0090: 0 C 2 3 0 D 2 3 0 E 2 3 0 F 2 3 ;-1st+4th 64K banks (as on dk'tronics) 00A0: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ;-1st+2nd 64K banks (mirror of 6128) 00B0: 0 C 2 3 0 D 2 3 0 E 2 3 0 F 2 3 ;-1st+4th 64K banks (mirror of above)
Если я правильно понимаю документацию... Приведу фрагмент:
То это означает, что биты D3-D5 дожны выбирать то какой из банков начиная с Bank 2 будет подключаться каждый раз когда у CPC128 подключается страница отличная от основной (Bank 1). То есть битами D3..5 выбирается Bank 2,3,4,5,...,9. Всего возможно (дополнительно к 64КБ) 512 расширения.Код:The numbers 0, 1, 2, 3 refer to the four 16K sub blocks in a 64K block in the obvious way. The star (*) indicates that the memory is from a 'new' block, i.e. block 2 or higher, otherwise the 'original', block 1, is implied. Thus, code 0 selects the original, unmapped 64K, code 2 selects a completely new block of 64K, the other codes are a mixture. Bits D5-D3, 64K Block Select Codes. D5 D4 D3 BLOCK. 0 0 0 2 (ie, 'new' memory sub blocks came from block 2, as in CPC 6128. 0 0 1 3 0 1 0 4 0 1 1 5
Таким образом мы "не угадали" с расширением. Тесть мы его сделали, но немного иначе.
Чтоы это исправить, можно изменить прошивку так.
В итоге в режиме CPC должно получится 256Кб. Но это нужно тестировать.Код:Далее к страницам 4,5,6,7 (это банк 2) используются как на Aleste 0000: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ; Bank 2 0010: 0 4 2 3 0 5 2 3 0 6 2 3 0 7 2 3 ; Далее к страницам 4,5,6,7 (это банк 2) нужно добавить 4 0020: 0 1 2 3 0 1 2 B 8 9 A B 0 3 2 B ; Bank 3 0030: 0 8 2 3 0 9 2 3 0 A 2 3 0 B 2 3 ; Далее к страницам 4,5,6,7 (это банк 2) нужно добавить 8 0080: 0 1 2 3 0 1 2 F 4 D E F 0 3 2 F ; Bank 4 0090: 0 C 2 3 0 D 2 3 0 E 2 3 0 F 2 3 ; Last possible page accessible by D28 Вернутся к самой первой конфигурации 00A0: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ; Bank 2 00B0: 0 4 2 3 0 5 2 3 0 6 2 3 0 7 2 3 ;
P.S. Такое странное число от того что D28 формирует только A14..A17 тогда как маппер имеет на одну адресную линию больше A14..A18.
Последний раз редактировалось Sherlock; 19.10.2017 в 23:38.
Надеюсь Дмитрий2012 меня простит, что лезу поперек него. В режиме CPC он действительно обнаружил 192 Кб доп. памяти.
P.S. Еще один момент. В режиме CPC, тоесть когда MAPMOD=0 процессор имеет доступ только к странице 0 маппера.
Иначе говоря доступо по адресам #7CXX, #7DXX, #7EXX, #7FXX эквивалентен доступу к #7CXX
Таким оразом если предположить, что содержимое маппера не определено, то перед тем как его включить (установить MAPMOD=1)
Необходимо из адресного пространтва 0x0000-0x3FFF установить значение 0 в #7CXX..#7FXX.
Это гарантирует что в пространтве 0x0000-0x3FFF будет расположена страница 0 из банка 1 в режиме CPC и MSX.
Теперь по шагам
1 Передать управление коду в адресах 0000-3FFF
2 Запретить прерывания
3 Включить CPC конфигурацию памяти 0, при которой с 0000 по 3FFF будет страница 0 банка 1.А именно записать по адресу #7FXX значение С0.
4 Установить MAPMOD 1
5 При необходимости настройть все страницы маппера #7DXX, #7EXX, #7FXX
7 Гарантировать валидность таблицы прерываний
8 Разрешить прерывания
Я думаю тот тест Алесты который написал автор Arnold эмулятора, мог крешится именно из за этого. Потому что он собран с адреса 9000.
Перед включением MAPMOD он конечно утанавливал конфигурацию 0. Но при включении MAPMOD=1 страница памяти с 8000 устанавливается той которая установлена в маппере #7EXX. А у меня нет гарантии того, что после старта компьютера, БИОС настроил маппер так, что страница которая при MAPMOD=0, находилась по адресам c 8000, будет там же при MAPMOD=1. Но может быть и будет, а можт и нет. Правильнее гарантировать то что все окажется там где должно быть.
- - - Добавлено - - -
Он обнаружил, но она не совсем стандартная. Об этом я и информирую.
Последний раз редактировалось Sherlock; 18.10.2017 в 18:53.
Без софтовой поддержки ivagor я бы ничего не выяснил и не проверил бы память. За что ему огромное спасибо.
А можно для тестов сделать модифицированную прошивку для D28 в виде.BIN файла ?
Не совсем понял, что необходимо в ней прописывать по адресам 00А0-00FFh
Сделаю. Дайте время.
Должно быть так.
Код:0000: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ; bank 1 & 2 (same as was before) 0010: 0 4 2 3 0 5 2 3 0 6 2 3 0 7 2 3 ; bank 1 & 2 (same as was before) 0020: 0 1 2 3 0 1 2 B 8 9 A B 0 3 2 B ; bank 1 & 3 (modified) 0030: 0 8 2 3 0 9 2 3 0 A 2 3 0 B 2 3 ; bank 1 & 3 (modified) 0040: 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 ; MSX (same as was before) 0050: 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 ; MSX (same as was before) 0060: 8 8 8 8 9 9 9 9 A A A A B B B B ; MSX (same as was before) 0070: C C C C D D D D E E E E F F F F ; MSX (same as was before) 0080: 0 1 2 3 0 1 2 F C D E F 0 3 2 F ; bank 1 & 4 (modified) 0090: 0 C 2 3 0 D 2 3 0 E 2 3 0 F 2 3 ; bank 1 & 4 (modified) 00A0: 0 1 2 3 0 1 2 7 4 5 6 7 0 3 2 7 ; bank 1 & 2 (modified) (same as at 0000) 00B0: 0 4 2 3 0 5 2 3 0 6 2 3 0 7 2 3 ; bank 1 & 2 (modified) (same as at 0010) 00C0: 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 ; MSX (same as was before) 00D0: 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 ; MSX (same as was before) 00E0: 8 8 8 8 9 9 9 9 A A A A B B B B ; MSX (same as was before) 00F0: C C C C D D D D E E E E F F F F ; MSX (same as was before)
Тут привожу таблицу всех конфигураций памяти в зависимости от значения 7FXX
Звездочкой * обозначены значаения которые должны быть модифицированы
Код:BANKS 1 & 2 0000 ----- ----- ----- ----- ----- ----- ----- ----- ! 0 ! ! 0 ! !*4 ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! 4000 ----- ----- ----- ----- ----- ----- ----- ----- ! 1 ! ! 1 ! !*5 ! ! 3 ! !*4 ! !*5 ! !*6 ! !*7 ! 8000 ----- ----- ----- ----- ----- ----- ----- ----- ! 2 ! ! 2 ! !*6 ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! С000 ----- ----- ----- ----- ----- ----- ----- ----- ! 3 ! !*7 ! !*7 ! !*7 ! ! 3 ! ! 3 ! ! 3 ! ! 3 ! FFFF ----- ----- ----- ----- ----- ----- ----- ----- 0 1 2 3 4 5 6 7 Reg #7FXX BANKS 1 & 3 0000 ----- ----- ----- ----- ----- ----- ----- ----- ! 0 ! ! 0 ! !*8 ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! 4000 ----- ----- ----- ----- ----- ----- ----- ----- ! 1 ! ! 1 ! !*9 ! ! 3 ! !*8 ! !*9 ! !*A ! !*B ! 8000 ----- ----- ----- ----- ----- ----- ----- ----- ! 2 ! ! 2 ! !*A ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! С000 ----- ----- ----- ----- ----- ----- ----- ----- ! 3 ! !*B ! !*B ! !*B ! ! 3 ! ! 3 ! ! 3 ! ! 3 ! FFFF ----- ----- ----- ----- ----- ----- ----- ----- 8 9 A B C D E F Reg #7FXX BANKS 1 & 4 0000 ----- ----- ----- ----- ----- ----- ----- ----- ! 0 ! ! 0 ! !*C ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! ! 0 ! 4000 ----- ----- ----- ----- ----- ----- ----- ----- ! 1 ! ! 1 ! !*D ! ! 3 ! !*C ! !*D ! !*E ! !*F ! 8000 ----- ----- ----- ----- ----- ----- ----- ----- ! 2 ! ! 2 ! !*E ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! ! 2 ! С000 ----- ----- ----- ----- ----- ----- ----- ----- ! 3 ! !*F ! !*F ! !*F ! ! 3 ! ! 3 ! ! 3 ! ! 3 ! FFFF ----- ----- ----- ----- ----- ----- ----- ----- 10 11 12 13 14 15 16 17 Reg #7FXX
Всетаки перед прошивкой прошу вникнуть и проверить на ошибки.
Последний раз редактировалось Sherlock; 20.10.2017 в 11:54.
Вижу 3 дополнительных банка/блока 2-4, т.е. 64*3=192 Кб доп. памяти. Патченый memcheck как видел 192 Кб. дополнительной памяти, так и будет видеть.
- - - Добавлено - - -
Как я понимаю, фишка изменения D28 в том, чтобы программы, ожидающие увидеть доп. память именно при D5=0 и D4-D3 00/01/10/11 увидели ее там. А memcheck (патченый) прощелкивает все (а непатченый даже больше чем все). Это я к тому, что если изменять D28, то проверять нужно не memcheckом, или нужно его еще патчить.
Представим что вся память компьютера выглядит так.
Номером в клетке обозначен номер 16КБ страницы во всей памяти компьютераКод:0000 ----- ----- ----- ----- ------ ------ ------ ------ ! 0 ! ! 4 ! ! 8 ! ! C ! ! 10 ! ! 14 ! ! 18 ! ! 1C ! 4000 ----- ----- ----- ----- ------ ------ ------ ------ ! 1 ! ! 5 ! ! 9 ! ! D ! ! 11 ! ! 15 ! ! 19 ! ! 1D ! 8000 ----- ----- ----- ----- ------ ------ ------ ------ ! 2 ! ! 6 ! ! A ! ! E ! ! 12 ! ! 16 ! ! 1A ! ! 1E ! C000 ----- ----- ----- ----- ------ ------ ------ ------ ! 3 ! ! 7 ! ! B ! ! F ! ! 13 ! ! 17 ! ! 1B ! ! 1F ! FFFF ----- ----- ----- ----- ------ ------ ------ ------ BANK 1 BANK 2 BANK 3 BANK 4 BANK 5 BANK 6 BANK 7 BANK 8
N.B. Однако D28 не имеет возможности адресоваться в в банки с 5 до 8
Тест памяти который мне дал Дмитрий, работал так: перебилал все возможные страницы во всех банках.
Где номер nn это номер страницы внутри банка а bbb это номер банка, старший бит которого игнорирован. D5 в игноре.Код:#7FXX D7 D6 D5 D4 D3 D2 D1 D0 1 1 b b b 1 n n
В результате когда тест перебирая значение bbbnn от 1FH до 0H но при D2=1. Получалется следующая послдовательность страниц в адресном пространстве с 4000-7FFFF
Оригинальная прошивка получила быКод:7 6 5 4 F E D C B A 9 8 7 6 5 4 7 6 5 4 F E D C B A 9 8 7 6 5 4
Но изменение прошивки касается и отсальных конфигураций, тех которые при D2=0Код:F E D C F E D C B A 9 8 7 6 5 4 F E D C F E D C B A 9 8 7 6 5 4
Последний раз редактировалось Sherlock; 20.10.2017 в 21:09.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)