- Рождение эмуля - нужна помощь
-
? Валерий@ - 11.12.2009 22:18
Доброго времени суток !
¤
Люди - помогите !!!
С эмулировал процессор, память, видео. Загрузил от БК-0010.01 ПЗУ, все запустилось все работает, но при полноэкранном режиме все работает как будто в режиме расширенной памяти (4 строки и скроллинг програмный).
Чего делать ума не приложу - бьюсь третьи сутки.
Пока не работал ошибки было искать легко, а теперь за что хвататься не понятно.
исходники прилагаются:http://rapidshare.com/files/319514467/BKEmul01.zip
PS: эмуль под MAC OS X
-
? anonymous - 11.12.2009 22:26
Нету маков, не на чем смотреть. А вы верно регистр 0177664 эмулируете? В документации от БК ошибочно обратное значение 9го разряда указано было, вы об этом помните? 0..7 разряды - скроллинг, при этом значению 0330 соответствует 040000 в верхней строке кадра, 8й разряд всегда равен нулю, физически он отсутствует, 9й разряд в 1 соответствует нормальному экрану, 9й в 0 - расширенная память, разряды 10..15 всегда читаются как 0.
-
? anonymous - 11.12.2009 22:28
Да, и еще, байтовая запись в этот регистр на живой БК тоже не реализована, адресация его только словная.
-
? Валерий@ - 11.12.2009 22:35
в том и дело, что отображается правильно, сама программа БК считает что она в режиме расширенной памяти. Причем не вся программа, отображение она начинает с адреса 040000 а вот работает в 4-х строках причем если нужно про скраллировать то скроллинг программный 4 строки без участия регистра сдвига
-
? anonymous - 11.12.2009 22:58
А тесты 791401, 791404 и 791323 проходят?
-
? Валерий@ - 11.12.2009 23:19
А что за тесты ?
EMT 34 выдает - 32 символа в строке, 32 символа в служебной строке. Остальный биты в 0.
Может кто знает в какой системной переменной хранится количество строк на экране или еще что нибудь что связано с режимом экрана.
-
? anonymous - 11.12.2009 23:39
Первые два - из комплекта сдаточных тестов ВМ1, тест инструкций процессора и тест прерываний, третий - расширенный тест ОЗУ. Они обругают, если что-то не так съемулировано. Загружаются с адреса 0, диагностику выводят на учительскую машину через блок ИРПС. ИРПС эмулировать не сложно, там 4 регистра, перемычкой их адрес задается 0176560..0176567 для школьного бейсика и 0177560..0177567 для школьного фокала, последний вариант - стандартные адреса терминала в pdp11, на этих адресах и следует добавить эмуляцию с выводом в соседнее, например, окно, или в файл. В *560м регистре имеются два бита, 6й и 7й. 7 бит *560го регистра устанавливается, если во входной регистр *562 поступил новый байт, а если перед приемом байтов установить в 1 6й бит *560го регистра, то произойдет прерывание с вектором, адрес которого читается из регистра *566. *562й регистр - буфер приемника, оттуда считывается последний принятый байт, по записи регистр ничего не делает. В регистре *564 имеются тоже два бита, 6й и 7й, с тем же назначением, что и у приемника, 7й бит устанавливается в 0, когда процессор пишет байт в буфер передатчика, *566, и устанавливается в 1, когда заканчивается передача, т.е. когда буфер готов к приему следующего байта. Если при установке 7го бита был установлен 6й, то по готовности передатчика возникает прерывание с вектором, на 4 бОльшим, чем считываемое из регистра *566 значение. Регистр *566 - по записи - буфер передатчика, по чтению - регистр вектора прерывания, при установке адресов 0176560..0176567 вектор считывается 0360, приемник прерывает работу по 0360му вектору, а передатчик - по 0364му, при установке адресов 0177560..0177567 - адрес вектора 060 для приемника и 064 для передатчика.
По команде процессора reset все биты в регистрах приемника обнуляются, а в регистре передатчика устанавливается бит 7 - готовности к передаче.
-
? anonymous - 11.12.2009 23:44
тесты (расширение .256 у них от программатора осталось, т.к. я их в пзу жег)
http://qbus.narod.ru/791401.256
http://qbus.narod.ru/791401.256
http://qbus.narod.ru/791323.256
-
? Валерий - 11.12.2009 23:46
к сожалению у меня нет данных тестов
-
? SKcorp.@ - 11.12.2009 23:50
OFF: Вот оно что! А то я Фокальную БК-шку с Бейсиковским ИРПС пытался загрузить, а не вышло.
А какие команды для загрузки Фокальной БК с ДВК, на ДВК Vdisk, в котором есть "Загрузка БК(Фокал)".
-
? anonymous - 12.12.2009 04:56
Загрузка фокальных машин производится с учительского места, фокал вообще жестоким был, учитель может все действия ученика контролировать и вмешиваться в любой момент. На счет адресов: "современный" школьный фокал, который 084я прошивка, работает с теми же адресами ИРПС, что и бейсик, адреса системного терминала использовал старый МИЭТовский фокал, портированный с классов из бездисковых двк-1, там загрузка делалась через RTшные put.sav/get.sav/netp.sav, написанные А.Л. Вильсоном, также был комплект программ, написанный нашим В. Полетаевым еще в студенческие годы, включая средства для работы в RT11 учительской машины с места ученика, Цургаев Леша тоже переписывал NETP для параллельной загрузки нескольких машин разным кодом/текстом программы.
-
? anonymous - 12.12.2009 04:58
P.S. Если влезть внутрь машины, то МИЭТовский поставлялся в к573РФ3, а 084я - в кр1801РЕ2.
-
? anonymous - 12.12.2009 05:00
P.P.S. Полетаев и Цургаев иногда ловятся в ФИДО MO.DEC
-
? Валерий - 12.12.2009 17:51
Есть ли различия между ВМ3/ВМ4 и ВМ1 ?
¤
Дело в том что попались исходеики DEC-350/Электроника 85. Эмуляцию проца драл оттуда. Возможно частичная не совместимость ?
-
? Валерий - 12.12.2009 20:51
Всем спасибо !
Ошибки найдены !
Вопрос снят.
-
? SKcorp. - 12.12.2009 21:50
Так вопрос-то был как грузить? Что нажимать? Или Бейсиковская локалка не подходит?
Фокал -084, при подключении ИРПС пропадает надпись ТЛГ ОТКЛЮЧЕН, что делать дальше?
-
? anonymous - 13.12.2009 01:56
У фокала другой протокол обмена, надо его родной софт найти.
-
? anonymous - 13.12.2009 01:56
Валерий, так в чем было дело? Интересно же!
-
? anonymous - 13.12.2009 02:01
А, и еще, 350/Э85 с ВМ3/ВМ4 не совместима весьма сильно, там с десяток различий имеется, главным образом заметны различия при обработке прерываний по ошибкам шины и ловушкам диспетчера памяти при выполнении двухадресных команд с автоинкрементом/декрементом. В Э85 стоит процессор 1811ВМ1, а не 1801.
-
? SKcorp. - 13.12.2009 02:02
Какой софт? Названия? В Vdisk-е есть пункт загрузка БК с Фокалом, но ничего не происходит.
-
? anonymous - 13.12.2009 02:02
Я же писал - NETP.SAV
-
? anonymous - 13.12.2009 02:27
Написал Цургаеву, он сразу ответил, что под рукой - нет, но если и сохранилось, то на КНГМД МХ, а у него их нечем прочитать, напишите запрос в news://fido7.mo.dec там почти все в тот или иной момент жизни с классами сталкивались, может у Забайратского, например, завалялся комплект софта. А вообще с бейсиком оно работает? А то мозчет быть в самом блоке ИРПС перемычки выставлены не в тот режим, что на хостовой машине? Вы БК с живой ДВК грузите или с персоналки из эмулятора?
-
? SKcorp. - 13.12.2009 02:32
Я подумал - netp - это для МИЭТ-овского.
MX - есть.
В MO.DEC - народ инертный.
С Бейсиком - в полный рост.
Все живое - эмули - не мое.
-
? anonymous - 13.12.2009 02:47
Там просто разные версии для старого и нового, старая писала "netp версия такая-то", а новая писала "программа взаимодействия рмп двк с бк0010ш", потом спрашивала, с каким РМУ установить связь, а загрузка происходила после перехода из нее по клавише LF(ПС) в программу put, тогда появлялась строка Эпараллельный загрузчик РМП, версия такая-то. введите через запятую номера БК0010Ш:" после ввода появлялись строки вида "установлена связь с РМУ № такой-то(перечисляя номера указанных машин)", затем спрашивала имя файла для раздачи, потом, после окончания загрузки, снова просила перечислить номера и ввести имя раздаваемого файла, когда весь класс был загружен, вместо CR(ввод), нажималась LF(ПС) и командный файл снова запускал netp.
-
? Валерий - 13.12.2009 12:05
Ошибка была в эмуляции некоторых комманд - адрес операнда приемника считался правильно а обращение к памяти было байтовое вместо слова.
¤
Сейчас в общем все работает, но до тех пор пока не использую строковые переменные. Если в программе присутствует строковая переменная - мусорится память и забивает часть программы.
Грешу на ошибки в байтовых коммандах.
-
? nzeemin@ - 16.12.2009 15:45
anonymous, спасибо за выложенные тесты. А каким образом, в каком окружении они должны запускаться? Допустим, гружу я их с адреса 0, но каков стартовый адрес. Регистр SEL позволяет задать стартовый адрес процессора кратный 0400, но по таким адресам не вижу чего-либо разумного.
Валерий, у вас получилось запустить эти тесты?
-
? Alex_K@ - 16.12.2009 16:17
Эти тесты запускаются по значению вектора по сбою питания (24 вектор).
У всех тестов получается стартовый адрес равен 0200, значение PSW равно нулю.
-
? Валерий - 16.12.2009 18:12
Честно говоря эмулировать ИРПС обломило, так разобрался.
-
? anonymous - 16.12.2009 20:07
Совершенно верно, загрузчик их считывает в свой буфер, размещенный старше 020000, а после успешного считывания перемещает в адрес 0 и делает jmp #@200, 024й вектор в БК не реализован в аппаратуре, он реализован в местах на базе двк1, а тесты - универсальные, потому там прописана часть векторов, не использующихся на БК. Однако описание на эти тесты у меня заиграли, была целая брошюрка конкретно по ним, с расшифровкой всех кодов ошибки и списком ячеек, доступных для модификации пользователем, предназначенных для изменения поведения тестов.
-
? nzeemin@ - 16.12.2009 21:17
Похоже, тесты выдают диагнистику в КОИ-7. Вот например что выдает тест 791323:
¤
pAMqTx
000000-176776
O{ib A
110464 010464 000626 002012 000007 000000
000000-176776
O{ib ~
110464 010464 000626 002012 000007 000000
000000-176776
O{ib ~
110464 010464 000626 002012 000007 000000
-
? anonymous - 17.12.2009 00:34
Тесты выдают диагностику на учительское место, потому они либо на 15ИЭ0013 в режиме КОИ7, либо на MERA79хх печатали по-русски.
Тест памяти у вас неверно определяет границы ОЗУ, для 10й машины он пишет ПАМЯТЬ 000000-077776 и для 11й с подключенными страницами ПАМЯТЬ 000000-137776. Возможно у вас запись в ПЗУ 4й вектор не генерит.
-
? anonymous - 17.12.2009 00:36
А касательно памяти 0170000..0176777 в составе контроллера винчестера - в нее вообще не заведены байтовые выборки, адресация только словная, потому на нее в тесте следует замаскировать байтовые операции. (вот когда пропавшую книжку по тестам надо бы иметь...)
-
? nzeemin@ - 18.12.2009 18:26
Нда, книжечка-то не помешала бы. Но реально тут достаточно смотреть что проверяется перед формированием кода ошибки.
-
? a214 - 18.12.2009 22:50
Если в ОЗУ(и соотв с шиной) что-то не так - как могут загружаться какие-то тесты и что-то можно определить?
-
? anonymous - 19.12.2009 02:47
a214, это тест памяти для многочасовой проверки в цикле, там много тестов, заполнение, многопроходное заполнение, адресный, бегущая 1, псевдослучайный, шумовой и им инверсные, нацеленные на доскональную проверку машины, например, если через 10 минут после начала урока на РМУ вылезают кракозябры и вся работа ученика идет на смарку, а тест из МСТД проходит, потому как там в какой-либо ячейке сбой происходит раз на миллионный, да еще только при условии, что в какой-то из соседних ячеек оказывается определенное число. Так были на моей памяти партии микросхем, у которых проходили все рекомендуемые изготовутелем тесты, однако если начиналась периодическая долбежка двух смежных ячеек с адресами, кратными 4, при этом в одной из них должен был быть шахматный код, а в другой, неприменно, произвольный код, со смежными 0, но их количеством подряд не более 3, то код, считываемый из ячейки с шахматным числом, искажался в сторону появления лишних нулей, причем только на первом чтении, второе проходило без ошибок. Фирма Alliance, изготовившая микросхемы, получив обратно образцы и исследовав их, согласилась с допущением брака по их вине. Партия была заменена.
Что касается тестов процессора, то опять же, многие ощибки проявляются при определенном сочетании предыдущих состояний микросхемы, и могут вообще не влиять годами на работу машины, пока в какой-нибудь программе не возникнет соответствующая комбинация, например, были ВМ3, у которых не выполнялся EIS, если после выхода из пульта по команде RTI (но не RTT, потому на отладочное пошаговое исполнение влияния не было) до применения рассширенной арифметики не встречалась ни одна команда ветвления, из-за этого во всех загрузчиках ФОДОС и РАФОС имеется, казалось бы ненужная, команда с кодом 0400 - BR на следующую ячейку. :)
-
? nzeemin@ - 19.12.2009 16:50
Проходя по шагам тест 791401, исправил работу команд MARK, MFPS и RTT.
Теперь тест выдает:
¤
<00>
<0e>k prohod
<0e>k prohod
<0e>k prohod
...и так далее в цикле.
-
? nzeemin@ - 19.12.2009 18:25
Alex_K подкинул ссылки в тему: http://zx.pk.ru/showthread.php?p=242024#post242024
http://grands.land.ru/docs/test0505.htm -- Методика проверки работоспособности ДВК «Электроника МС 0501.08»
http://mix.wol.bz/sys/ftmo_dsk.zip -- дискета с тестами, включая тесты ВМ1 и ВМ2
-
? Александр Тишин@ - 20.12.2009 03:57
Что-то я не очень понимаю насчёт теста 791401. У меня он, во-первых, при ошибках исполнения команд ничего на ИРПС не передаёт, а просто переходит на команду HALT. Впрочем, так даже удобнее. А во-вторых, при прогоне теста столкнулся со странной проблемой: он по адресу 7070 содержит команды clr r0/mtps r0, которые разрешают прерывания. При этом немедленно срабатывает прерывание передатчика ИРПС, в результате чего тест виснет (вектор-то не инициализирован).
Это я как-то криво тест запускаю, или всё же косяк в эмуляции?
¤
Условия запуска такие: Эмулируется БК-0010.01 в стандартной конфигурации с Бейсиком + ИРПС, тест грузится по адресу 0, по адресу начального пуска подставляется команда jmp @#200
-
? Alex_K@ - 20.12.2009 12:34
Александр Тишин, вообще эти тесты предназначены для запуска в RT-11 через FTMON. В RT-11 бит разрешения прерывания передатчика в регистре 177564 устанавливается только тогда, когда надо передавать информацию, по завершении передачи он сбрасывается. При этом тесты по адресу 200 вызываются с PSW=0, поэтому прерывание в этом случае должно было возникнуть раньше.
Тест 791401 при ошибке выходит на HALT, в ячейке 402 содержится номер теста, который не прошел проверку.
-
? anonymous - 20.12.2009 12:59
「Эмулируется БК-0010.01 в стандартной конфигурации с Бейсиком + ИРПС」 - драйвер в составе бейсика вообще не использует прерывания от ИРПС, каким образом у вас они разрешенными оказались? Только focal разрешает прерывания, и то - от приемника.
-
? anonymous - 20.12.2009 13:01
Вот драйвер Бейсика, первыми же командами - запрещение прерываний и от приемника, и от передатчика.
¤
DLDRV: CLR @#RSLR
CLR @#RSLT
CLR R5
MOVB @#RDLR,R0
MOVB (R1)+,R0
JSR PC,$TR
JSR PC,$RD
MOV R1,R2
ADD #5,R2
MOV #12,R3
1$: MOVB (R2)+,R0
JSR PC,$TR
SOB R3,1$
MOV #4,R3
JSR PC,$RD
MOVB R0,(R1)+
BNE 2$
ADD #6,R2
4$: JSR PC,$RD
MOVB R0,(R2)+
SOB R3,4$
MOV -(R2),R3
BEQ 2$
TST (R1)
BEQ 5$
MOV (R1),R2
BR 6$
5$: MOV -(R2),R2
MOV R2,@#264
6$: JSR PC,$RD
MOVB R0,(R2)+
ADD R0,R5
SOB R3,6$
7$: JSR PC,$RD
CMPB R0,R5
BEQ 9$
MOVB #2,-(R1)
9$: MOV R5,R0
JSR PC,$TR
2$: RTS PC
$RD: TSTB @#RSLR
BPL $RD
MOVB @#RDLR,R0
RTS PC
-
? anonymous - 20.12.2009 13:04
ох, не докопировались последние команды
$TR: TSTB @#RSLT
BPL $TR
MOVB R0,@#RDLT
RTS PC
-
? Александр Тишин@ - 20.12.2009 18:24
Alex_K, спасибо, в этом и была проблема. Я запускал с psw=340, плюс выяснилось, что бит разрешения прерывания в ИРПС эмулировался инверсно :)
¤
anonymous, да, запрещает. Но эмулируется - то Фокальный ИРПС!
¤
PS: Заодно спасибо за тесты.
-
? Manwe@ - 07.01.2010 21:22
Краем уха услышал слово "Мак". Неужели эмулятор БК под Макинтош?!!
-
? Валерий@ - 03.02.2010 00:28
Доброго времени суток !
¤
Чесно говоря застрял. Эмулятор в принципе работает, но при упоминании строковых переменных на Бейсике портится текст программы. Причем если не в программе использовать переменные :
a$="hello"
? a$
все работает. Если :
10 a$="hello"
20 ? a$
выдает ошибку в строке 20, после команды List в строке 20 полная белиберда.
Чего только не делал, код сверил с PDP11CPU.c раз 50, потом плюнул переписал проц с нуля заново - до фонаря ! Все остальное работает (кружочки на экране, математика и т.д.). Пока собирался с мыслями добавил произвольное маштабирование экрана (естественно в пропорции 4:3). Я грешу на некоторое не соответствие команд у ВМ3 и ВМ1. Временный ступор - куда копать дальше не знаю. Могу выложить проэкт. В принципе программка получилась симпатичная.
2 hdc если посчитаете возможным выложите пожалуйста исходники своего эмулятора, может найду не соответствие проца.
В своем сделал так сказать открытую шину, то есть возможность дописывать произвольные устроуства и цеплять их на разные адреса без переделки основного проекта - делал задел на 11-тую.
-
? nzeemin@ - 03.02.2010 00:44
Валерий, не совсем понял к кому вы обращаетесь, если речь обо мне то сырцы тут: http://code.google.com/p/bkbtl/source/checkout
-
? SKcorp.@ - 17.02.2010 01:49
Раскопал PUTP.SAV и NETBK.SAV
В PUTP загрузка идет, но программы не запускаются или лезут в экран, гружу .BIN или там свой формат был?
¤
NETBK дает терминальный режим (? AT 28 МИЭТ-85), но съедает пробелы.
¤
-
? anonymous - 17.02.2010 04:01
Вот это уже не помню, у меня было два формата, один использовал два дополнительных слова перед началом BINа для адреса и длины, другой использовал целый блок в начале файла, где по стандарту ОС адрес брал из 040 ячейки, а длину высчитывал из конечного адреса, хранящегося в 050й ячейке SAV-файла RT11. Вообще там какая-то хитрость была для бинарников, файлы фокала грузятся с адреса 017хх-с чем-то, потому, вероятно, ваши программы и вылезают в экран, т.к. их ПО принимает за текст программы, а не за исполняемый файл.
-
? SKcorp.@ - 17.02.2010 17:13
В мониторе грузил - та же фигня, видимо второй формат нужно получать из БК GET-ом.
- << Форум