- небольшая утилитка в формате BIN - проверка качества эмуляции K1801BM1
-
? alex savelev@ - 26.02.2012 08:31
Может быть полезна эмуляторописателям для выяснения надежности и правильности
исполнения команд ВМ1. Проверяет много чего, в том числе опкоды которые по разному выполняются на ВМ1 и ВМ2(3), системный таймер, недокументированные (reserved) на ВМ1 инструкции, правильность установки флажков. Работает на БК10 и на БК11М (на 11М машине еще и меряет скорость CPU в Mhz =)
¤
линк на дропбоксе:
¤
http://dl.dropbox.com/u/60728714/CPUTEST4.RAR
-
? alex savelev@ - 26.02.2012 08:43
полностью правильно пройденный тест выглядит так:
¤
http://imageshack.us/photo/my-images/525/nicetest.jpg/
-
? Patron - 26.02.2012 11:07
А как этот тест запустить на эмуляторе ДВК-1 ?
Тест пойдёт на чистом ВМ1 или нужна какая-то специфика БК ?
-
? alex savelev@ - 26.02.2012 12:24
на ДВК-1 не запустится ни на реальной машине ни под эмулем - придется перекомпилировать исходный код. Ну, если действительно есть необходимость сделать можно в принципе. Укажите какой эмуль ДВК используете, мне известно как минимум 4 разных.
-
? Patron - 26.02.2012 13:22
Я использую недоделанный "эмулятор ДВК" собственного написания: ( http://zx.pk.ru/attachment.php?attachmentid=33376 )
Запускаемая там модель процессора 1801ВМ1 создана по результатам тестирования, описанного здесь: ( http://bk0010.org/forum/?id=3799 )
Текущая сборка "эмулятора ДВК" описана здесь: ( http://zx.pk.ru/showthread.php?p=472128#post472128 )
-
? alex savelev@ - 26.02.2012 17:15
скачал и запустил ваш эмулятор ДВК, почитал треды. Как я понимаю у вас цель - создать максимально близкую к оригинальному ВМ1 эмуляцию, с учетом времени исполнения команд, прерываний итд. Ну что, дело это хорошее, правда чтобы мой тест запустить это надо его в *.SAV перекомпилировать - а это означает с трудом вспомнать давние двкашные EDIKM.SAV, MACRO.SAV, LINK.SAV =) Будет время-попробую этим занятся, даже ради простого спортивного интереса.
-
? Patron - 26.02.2012 18:24
Для работы с образами DSK в формате RT-11 удобно использовать WCX-плагин для TotalCommander/Far, который можно взять здесь: ( http://zx.pk.ru/showthread.php?t=11015 )
Тогда можно писать программы в обычном текстовом редакторе Windows, копируя исходники в образ только для компиляции.
Цель у меня - создать универсальный модульный API для абстрактной, дискретной или аналоговой эмуляции любых электронных компонентов, устройств и комплексов, позволяющий совместно использовать модули, скомпилированные с разными версиями библиотеки API.
-
? alex savelev@ - 26.02.2012 18:59
понятно. Но компилировать придется все равно MACRO от RT11. Это печально, макро неудобен и сильно устарел как и впрочем весь софт под RT11SJ. Да и я уже привык к другому компилятору (*.ASM -> *.BIN, работает непосредственно на IBM PC). Он простенький, быстрый и приятный.
¤
Далее, модульный эмулятор Всего "универсальный". Ну чтож. Достойная цель. сложное только это дело. Всегда будут какие нибудь тонкости в железе,
которые будут гораздо лучше реализованы в узкоспециализированном эмуле.
-
? Patron - 26.02.2012 19:17
Сору нет. Формализовать технические подробности в виде иерархии стандартизованных API - чертовски трудно. Но увлекательно :)
Кроме того, никто не заставляет использовать любой из разделов стандартного API - на то API и иерархический, и модульный, чтобы можно было оформлять хоть целые эмуляторы в виде отдельных модулей или создавать собственные иерархии API (без существенных ограничений).
Главная задача - сделать так, чтобы модули, написанные разными людьми с спользованием разных версий API - были двоично-совместимы и могли использоваться совместно.
-
? anonymous - 26.02.2012 19:59
macro11 тоже на C переписали много лет назад и он якобы работает под любыми ос posixовыми. Постился в mail-liste pdp-11 @ village.org но вот под qnx, где у меня в те годы крутился программно-аппаратный эмулятор, с карточкой pci<->qbus, он глючил, и я в эмуляторе родным пользовался. Сейчас, вероятно, допилили уже до рабочего состояния, но все же я родной по-прежнему пользую.
-
? gid@ - 28.02.2012 11:16
Предлагаю дополнить тест такими пунктами (для полноты картины и проверяющими логику работы программ):
1) чтение/запись слова по нечетному адресу
примерно так:
ADDR=10000
MOV #123456,R0
MOV R0,@#ADDR+1
MOV ADDR,R1 ;в результате должно быть R0 == R1
то, же но при нечётном PC и относительной адресации
ADDR=10000
MOV #ADDR,R5
INC PC
MOV #123456,ADDR
MOV #65432,ADDR+1
MOV 2(R5),R2
MOV #121212,ADDR+2
DEC PC
MOV ADDR,R0
MOV ADDR+2,R1 ;в результате должно быть R0 == 123456, R1 == 121212, R2 == 65432
2) чтение/запись байтов в память, если PC нечётный
ADDR=10000
MOV #42101,@#ADDR
L0: MOVB ADDR,R0
MOV R0,-(SP)
INC PC
BR L0
MOV (SP)+,R1
MOV (SP)+,R0 ;в результате должно быть R0 == 104, R1 == 101
второй вариант:
L0: MOVB #42101,R0
MOV R0,-(SP)
INC PC
BR L0
MOV (SP)+,R1
MOV (SP)+,R0 ;в результате должно быть R0 == 104, R1 == 101
Ещё добавить проверку, как ведёт себя указатель стека при байтовых операциях
MOVB R0,-(SP)
SP уменьшается на 2 или на 1?
Ещё добавить проверку, что произойдёт на БК11М, если записать байт в системный порт по нечётному адресу, например MOVB #35,@#177717 произойдёт ли переключение страниц? Или
MOVB #110,@#177663 переключает ли палитры?
Я к сожалению, уже забыл, каково поведение стека и портов на реальной бкшке, а проверить не могу, пока не будет решена проблема с форматированием дискеты на 800кб из-под win7. Встроенные средства тупо не могут.
-
? alex savelev@ - 28.02.2012 11:31
пока быстрый ответ, убегаю на встречу сейчас:
¤
1) SP на БК всегда уменьшается на 2, даже если операция байтовая.
т.е. при movb r0,-(sp) sp:=sp - 2. Проверялось на реальной машине,правда давно
¤
2) нечетные обращения на БК к портам возможны. При этом реально используется
адрес порта минус единичка. Т.е. нечетный адрес порта во время исполнения
команды будет насильно "превращен" в четный :)
¤
3) Тестовая программка естественно будет со временем пополнятся новыми тестами. Сейчас вот полез в дебри - делаю тест правильности прерывания по вектору 14
(T-бита).
-
? Patron - 28.02.2012 11:45
Ещё интересно уточнить, как реагирует байтовая запись в стек на нечётное значение SP:
MOV #10000, R0
MOV #177777, -(R0)
MOV #177777, -(R0)
MOV #177777, -(R0)
MOV #177777, -(R0)
MOV #177777, -(R0)
MOV #177777, -(R0)
MOV #177777, -(R0)
MTPS #340
MOV #10000, SP
MOVB #1, -(SP)
MOVB #2, -(SP)
INC SP
MOV SP, R1
MOVB #3, -(SP)
MOVB #4, -(SP)
MOV SP, R2
INC SP
MOV SP, R3
MOVB #5, -(SP)
MOVB #6, -(SP)
MOV SP, R4
R1/
R2/
R3/
R4/
10000/
10002/
10004/
10006/
10010/
10012/
10014/
-
? Patron - 28.02.2012 11:53
Кстати, в предыдущем тесте можно для интереса использовать вместо команд типа
MOVB #1, -(SP)
команды типа
MOVB #177401, -(SP)
...
Большой набор тестов поведения процессора при установленном бите Т можно найти здесь: ( http://zx.pk.ru/showthread.php?t=18184 )
-
? anonymous - 29.02.2012 11:51
Patron Там на zxpk вы про работу байтовых MxPD вспоминаете - они таковыми были только в определенном поколении ВМ3, все ВМ3 с 89го года и далее их нормально отрабатывают.
Тестирование также на ВМ3 я вам предлагал проводить, в треде о тонкостях ВМ1. ДВК1 пока я не выкопал, но плата с ВМ3 всегда на ходу у меня, требования к тестам в треде том я излагал.
-
? Patron - 29.02.2012 13:17
Для тестирования "голых" материнских плат - я через некоторое время сделаю утилиту, позволяющую загружать обычную RT-11 через порт её системного терминала. Драйвер системного устройства при этом будет осуществлять блочный обмен через порт системного терминала, а утилита на PC - фильтровать поток данных из COM-порта, отделяя блочный ввод-вывод от символьного терминального обмена.
Если же у материнской платы есть собственный терминал (или графический монитор), то тогда через COM-порт пойдёт только блочный обмен и PC будет использоваться просто как эмулятор дискового накопителя с 8-ю приводами и serial-интерфейсом. Но в этом случае для загрузки через дополнительный последовательный порт (к которому будет подключен COM-порт PC) - загрузчик придётся вводить вручную с основного терминала.
...
Мне про ВМ3 вспоминать пока нечего - кроме названия я про этот процессор мало что знаю. Тестирование ВМ3 мы обязательно проведём, но сначала мне нужно закончить исследование циклов шины и таймингов команд ВМ1, чтобы завершить разработку модели хотя бы одного процессора.
-
? alex savelev@ - 03.03.2012 17:54
Patron, результаты запуска Вашего теста на БК10:
¤
R0=7762
R1=7775
R2=7771
R3=7772
R4=7766
SP=7766
¤
7766: 177406
7770: 2005
7772: 1777
7774: 177402
7776: 177401
¤
все как и следовало ожидать.
-
? anonymous - 03.03.2012 19:25
「и PC будет использоваться просто как эмулятор дискового накопителя с 8-ю приводами и serial-интерфейсом.」 - Почему с 8? RT11 64 привода поддерживает начиная с версии 5.6.
-
? Patron - 03.03.2012 23:14
Учитывая, что в каждый привод можно смонтировать образ размером до 32 МБ - мне показалось, что 8 приводов должно хватить.
Я ещё слабо разбираюсь в новых возможностях RT-11, наоборот - для ускоренной загрузки через последовательный канал собираюсь выпустить модифицированный вариант RT-11 v5.4
( Если не все в курсе - недавно стали доступны все исходники v5.4 с комментариями разработчиков: http://zx.pk.ru/showthread.php?p=471839 )
Ведь скорость обмена с "диском" через COM-порт не очень высокая. При скорости порта 9600 - загрузка системы занимает около минуты.
- << Форум