Код:.EX TEST/LINK:SY:RSXLIB
CLR @#177776 ;PSW=000000
BISB #0,@#177777 ;PSW=000000
BISB #300,@#177777 ;PSW=140000
.
Код:.EX TEST/LINK:SY:RSXLIB
CLR @#177776 ;PSW=000000
MOVB #0,@#177777 ;PSW=000000
MOVB #1,@#177777 ;PSW=140000
.
Код:.EX TEST/LINK:SY:RSXLIB
CLR @#177776 ;PSW=000000
BISB #0,@#177777 ;PSW=000000
BISB #300,@#177777 ;PSW=140000
.
Код:.EX TEST/LINK:SY:RSXLIB
CLR @#177776 ;PSW=000000
MOVB #0,@#177777 ;PSW=000000
MOVB #1,@#177777 ;PSW=140000
.
Получается, что или 11/83 всегда эмулирует байтовые циклы через словные, или что цикл DATIO используется байтовыми командами только при работе с PSW ( специально - чтобы случайно не повлиять на содержимое соседнего байта ).
- - - Добавлено - - -
Интересно - учтена ли такая особенность 11/83 в SIMH и E11 ..
Это врядли очень много железа перестало бы работать без переделки софта.
- - - Добавлено - - -
Код:E11>set cpu 83
E11>a 1000
001000 clr @#177776
001004 movb #0,@#177777
001012 movb #300,@#177777
001020 clr @#177776
001024 bisb #0,@#177777
001032 bisb #300,@#177777
001040 ^C
E11>pc=1000
E11>sp=1000
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=K PM=K PRIO=0
R4/000000 R5/000000 SP/001000 PC/001004 N=0 Z=0 V=0 C=0
001004 movb #000000,@#177777
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=K PM=K PRIO=0
R4/000000 R5/000000 SP/001000 PC/001012 N=0 Z=0 V=0 C=0
001012 movb #000300,@#177777
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=U PM=K PRIO=0
R4/000000 R5/000000 SP/000000 PC/001020 N=0 Z=0 V=0 C=0
001020 clr @#177776
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=K PM=K PRIO=0
R4/000000 R5/000000 SP/001000 PC/001024 N=0 Z=0 V=0 C=0
001024 bisb #000000,@#177777
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=K PM=K PRIO=0
R4/000000 R5/000000 SP/001000 PC/001032 N=0 Z=0 V=0 C=0
001032 bisb #000300,@#177777
E11>s
R0/000000 R1/000000 R2/000000 R3/000000 CM=U PM=K PRIO=0
R4/000000 R5/000000 SP/000000 PC/001040 N=0 Z=0 V=0 C=0
001040 halt
E11>
Надеюсь, что реальный ВМ3 так не мудрит, ведь иначе придётся при эмуляции всех циклов с записью байта - вылавливать обращение к физическим адресам PSW и устанавливать флаг запрета модификации признаков.
Попросил выполнить PSW2. Ждем.
- - - Добавлено - - -
ВМ3:Код:RU HX1:PSW2
PSW test #2
vvvfж
INC @#177776
177776/000001
ROL @#177776
177776/000003
CLR @#177776
BIS #140000, @#177776
177776/140000
CLR @#177776
BISB #000300, @#177777
177776/140010
CLR @#177776
MOV #000000, @#160000
>>> Trap to 004 <<<
177776/000000
Program completed.
.
.
Новый тест: PSW3.SAV - проверяет мапинг PSW в команде MTPS и во время сохранения PSW при входе в прерывание.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 ( где сохранение PSW при входе в прерывание пока не мапится через 177776 ) результат такой :
Код:.RU PSW3
PSW test #3
MOV #177400, @#177656
MOV #140340, @#177776
MTPS #000
>>> Trap to 004 <<<
177776/140351
MOV #000340, @#177776
MOV #140340, @#000022
IOT
177776/140350
Program completed.
.
Висит. Останов с пульта.Код:.RU PSW3
PSW test #3
MOV #177400, @#177656
MOV #140340, @#177776
MTPS #000
002036
@
- - - Добавлено - - -
Хинт: когда делаются тесты с включением MMU можно обойтись без сохранения-восстановления векторов :)
- - - Добавлено - - -
RESET здесь эффективный NOP. Еще не нашел в коде выключения MMU обратно и восстановления маппинга. Хотя нет - про ресет погорячился.Код:Mov @#057776, $PSW
Clr @#057776
Reset
- - - Добавлено - - -
Вобщем как раз в RESETе все дело видимо - MSCP контроллер после его выполнения становится неработоспособным до настройки.
UPD: не, видимо до него дело просто не доходит...
Обработчик TrapTo_4 вызывает подпрограмму, обращающуюся к странице I/O - и обращение вызывает новый TrapTo_4.
Но в векторе 06 записано 0340 - разве в обработчике страница I/O не должна мапиться куда надо..
- - - Добавлено - - -
Все предыдущие тесты тоже сбрасывают MMU через RESET.
Уже вижу что не в том дело - просто даже не доходит до этого места.
- - - Добавлено - - -
Вобщем работает если там где MTPS #0 возникает трап. У меня он не возникает. Воткнул туда HALT для трапа - все заработало...
- - - Добавлено - - -
Код:MTPS #0
HALT
1$:
Mov $PSW, R1
- - - Добавлено - - -Код:.RU P3
PSW test #3
MOV #177400, @#177656
MOV #140340, @#177776
MTPS #000
>>> Trap to 004 <<<
177776/140340
MOV #000340, @#177776
MOV #140340, @#000022
IOT
177776/140350
Program completed.
.
Попутно, на 11/34 (на всех без CPUERR регистра?) HALT трапается по 10 - интересно будет на ВМ3 проверить.
Перезалил исправленную версию: PSW3.SAV.
- - - Добавлено - - -Код:.RU D10:PSW3
PSW test #3
MOV #177400, @#177656
MOV #140340, @#177776
MTPS #000
177776/140340
MOV #000340, @#177776
MOV #140340, @#000022
IOT
177776/140350
Program completed.
.
На ВМ3 тот же тест:- - - Добавлено - - -Код:.
.RU HX1:PSW3
PSW test #3
Чс56vvFфvfVfж
MOV #140340, @#177776
MTPS #000
>>> Trap to 004 <<<
177776/140345
MOV #000340, @#177776
MOV #140340, @#000022
#177776/140350
Program completed.
.
Походу часть текста съелась. Издержки HX видимо.
Тесты на ВМ3.
Код:.PSW2
PSW test #2
CLR @#177776
INC @#177776
177776/000001
ROL @#177776
177776/000003
CLR @#177776
BIS #140000, @#177776
177776/140000
CLR @#177776
BISB #000300, @#177777
177776/140010
CLR @#177776
MOV #000000, @#160000
>>> Trap to 004 <<<
177776/000000
Program completed.
.PSW3
PSW test #3
MOV #177400, @#177656
MOV #140340, @#177776
MTPS #000
>>> Trap to 004 <<<
177776/140345
MOV #000340, @#177776
MOV #140340, @#000022
IOT
177776/140350
Program completed.
Ну это мы вроде уже выяснили.
- - - Добавлено - - -
Небольшой тестик MMU. Можно запускать под любым монитором.
Интересно бы посмотреть на ВМ3 и СМ1420 (а также на прошниках/Э85 [требуется подключение терминала к принтерному порту в maintenance mode]).Цитата:
Сообщение от PDP-11/83
Цитата:
Сообщение от PDP-11/34 (E11)
- - - Добавлено - - -Цитата:
Сообщение от PDP-11/45 (E11)
Ктати к вопросу об ACF из 3 бит - 11/45 и 11/70 их поддерживают (на тесте в E11 видно, что бит 0 регистра можно менять). В общем случае принцип остается тот же, но реакция на резервные комбинации может быть другой.
- - - Добавлено - - -
Ище маленький тест...Код:.RU TEST
TSTSET @#177776 ;PSW=140010, R0=140000
WRTLCK @#177776 ;PSW=140000
SEC ;
TSTSET @#177776 ;PSW=140011, R0=140011
.
.
Новый тест: PSW4.SAV - проверяет реакцию включённого MMU на попадание в PSW неправильных комбинаций битов моды.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:.RU PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT
>>> Trap to 250 <<<
MOV #100340, 2(SP)
RTI
>>> Trap to 250 <<<
Program completed.
.
- - - Добавлено - - -Код:.RU PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT
>>> Trap to 250 <<<
MOV #100340, 2(SP)
RTI
>>> Trap to 250 <<<
Program completed.
.
А зачем IOT, к слову?
- - - Добавлено - - -
Я так понимаю, что тест недописан - это правильный режим, но видимо в силу ненастроенности PAR/PDR трап.
- - - Добавлено - - -
А тут надо проверять командами MxPI...
.
Перезалил новую версию теста: PSW4.SAV - теперь до и после IOT и RTI выводится значение SP :
Код:.RU PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; SP/001000
>>> Trap to 250 <<< ; SP/001000
MOV #100340, 2(SP)
RTI ; SP/001000
>>> Trap to 250 <<< ; SP/001000
Program completed.
.
- - - Добавлено - - -Код:.VDT
VDT V05.07
*172240/000000 0
172242 /177737 200
172244 /177737 400
172246 /177737 600
172250 /177776 1000
172252 /173026 1200
172254 /173052 1400
172256 /173546 177600
*172200/000000 77406
172202 /000000 77406
172204 /000000 77406
172206 /000000 77406
172210 /000000 77406
172212 /000000 77406
172214 /000000 77406
172216 /000000 77406
*^C
.RU PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT
>>> Trap to 250 <<<
MOV #100340, 2(SP)
RTI
>>> Trap to 250 <<<
Program completed.
.
Код:.RU D10:PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; SP/001000
>>> Trap to 250 <<< ; SP/001000
MOV #100340, 2(SP)
RTI ; SP/001000
>>> Trap to 250 <<< ; SP/001000
Program completed.
.
.
Новый тест: PSW5.SAV - выводит содержимое SR0 и SR2 после прерывания при неправильных комбинациях битов моды.
Запускать на машинах с диспетчером памяти.
На ВМ3:- - - Добавлено - - -Код:.MMU
MMU FEATURES: 22-BIT
MOV #-1,@#MMR0 ;MMR0 = 160401
CLR @#MMR0 ;MMR0 = 000000
MOV #-1,@#MMR3 ;MMR3 = 177777
CLR @#MMR3 ;MMR3 = 177717
MOV #-1,@#KISAR0 ;KISAR0 = 007777
CLR @#KISAR0 ;KISAR0 = 000000
MOV #-1,@#KISDR0 ;KISDR0 = 077416
CLR @#KISDR0 ;KISDR0 = 000000
BIS #140000,@#PSW ;SET USER MODE
HALT ;TRAP TO 10
MOV #123456,@#20000 ;
MFPD @#20000 ;
MOV (SP)+,R0 ;R0=123456
MOV #77404,@#UISDR1 ;ACF=10
TST @#20000 ;
*** MMU FAULT AT 002312, MMR0=100143, MMR1=000000, MMR2=002306 ***
CLR @#20000 ;
*** MMU FAULT AT 002342, MMR0=100143, MMR1=000000, MMR2=002336 ***
.
На 11/83:Код:.RU PSW5
PSW test #5
001150/ MOV #100340, @#177776
001156/ MOV #000001, @#177572
001164/ NOP
>>> Trap to 250 <<< ; SR0/140101 ; SR2/001164
001224/ MOV #000001, @#177572
001232/ MOV #100340, @#177776
001240/ NOP
>>> Trap to 250 <<< ; SR0/140101 ; SR2/001240
001300/ MOV #000001, @#177572
001306/ MOV #020340, @#177776
001314/ MFPI (PC)
>>> Trap to 250 <<< ; SR0/140101 ; SR2/001314
Program completed.
.
Попытка проверить с пульта провалилась: пишется-читается все.
- - - Добавлено - - -
Проверил, если установить 22-бит режим - прога читает полный регистр. Но кроме всего прочего получается вот такая штука...Код:@17777572/000016 0
@/000016
@17772516/177717 0
@
@
@1000/012737
00001002/177777
00001004/172340
00001006/013737 0
00001010/172340 13737
00001012/010000 172340
00001014/000000 10000
00001016/003214 0
00001020/104351
@1000G
@ 001010
@17772340/177777
@10000/007777 0
@P
@ 001020
@10000/007777
@
ВМ3:Код:.TY PAR.MAC
.TITLE PAR
.MCALL .EXIT,.PRINT
START:: CLR @#177572
CLR @#172516
MOV #177777,@#172340
MOV @#172340,ARGS
BIS #20,@#172516
MOV @#172340,ARGS+2
MOV #177777,@#172340
MOV @#172340,ARGS+4
BIC #20,@#172516
MOV @#172340,ARGS+6
MOV #BUFF,R0
MOV #FMTS,R1
MOV #ARGS,R2
CALL $EDMSG
.PRINT #BUFF
.EXIT
ARGS: .BLKW 4
BUFF: .BLKB 80.
FMTS: .ASCIZ /%4P/
.END START
.RU HX1:PAR
007777 177777 177777 007777
.
Это заставляет иначе взглянуть на начальные значения PAR.
Касаемо начальных значений MMU.
Про KDJ11-B написано, что при включении значение PARов неопределено, не сбрасывается ни по ресету ни по консольному старту. Если включиться с выпаданием в пульт там 177777 у меня. На ВМ3 довелось посмотреть только после включения и загрузки SJ (VM нету) - содержимое напоминало код программы, но сильно не приглядывался.
Тесты на ВМ3
Код:.MMU
MMU FEATURES: 22-BIT
MOV #-1,@#MMR0 ;MMR0 = 160401
CLR @#MMR0 ;MMR0 = 000000
MOV #-1,@#MMR3 ;MMR3 = 177777
CLR @#MMR3 ;MMR3 = 177717
MOV #-1,@#KISAR0 ;KISAR0 = 007777
CLR @#KISAR0 ;KISAR0 = 000000
MOV #-1,@#KISDR0 ;KISDR0 = 077416
CLR @#KISDR0 ;KISDR0 = 000000
BIS #140000,@#PSW ;SET USER MODE
HALT ;TRAP TO 10
MOV #123456,@#20000 ;
MFPD @#20000 ;
MOV (SP)+,R0 ;R0=123456
MOV #77404,@#UISDR1 ;ACF=10
TST @#20000 ;
*** MMU FAULT AT 002312, MMR0=100143, MMR1=000000, MMR2=002306 ***
CLR @#20000 ;
*** MMU FAULT AT 002342, MMR0=100143, MMR1=000000, MMR2=002336 ***
.PSW4
PSW test #4
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; SP/001000
>>> Trap to 250 <<< ; SP/001000
MOV #100340, 2(SP)
RTI ; SP/001000
>>> Trap to 250 <<< ; SP/001000
Program completed.
.PSW5
PSW test #5
001150/ MOV #100340, @#177776
001156/ MOV #000001, @#177572
001164/ NOP
>>> Trap to 250 <<< ; SR0/100101 ; SR2/001156
001224/ MOV #000001, @#177572
001232/ MOV #100340, @#177776
001240/ NOP
>>> Trap to 250 <<< ; SR0/100101 ; SR2/001232
001300/ MOV #000001, @#177572
001306/ MOV #020340, @#177776
001314/ MFPI (PC)
>>> Trap to 250 <<< ; SR0/100101 ; SR2/001314
Program completed.
.
Новая версия теста: PSW4.SAV - выводит значения USP и KSP.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:.RU PSW4
PSW test #4a
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; USP/010000 ; KSP/001000
>>> Trap to 250 <<< ; USP/007774 ; KSP/001000
MOV #100340, 2(SP)
RTI ; USP/007774 ; KSP/000774
>>> Trap to 250 <<< ; USP/007774 ; KSP/001000
Program completed.
.
- - - Добавлено - - -Код:.RU PSW4
PSW test #4a
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; USP/010000 ; KSP/001000
>>> Trap to 250 <<< ; USP/010000 ; KSP/001000
MOV #100340, 2(SP)
RTI ; USP/010000 ; KSP/000774
>>> Trap to 250 <<< ; USP/010000 ; KSP/001000
Program completed.
.
ВМ3:- - - Добавлено - - -Код:.RU HX1:PSW4
PSW test #4a
MOV #000001, @#177572
MOV #100340, @#177776
>>> Trap to 250 <<<
MOV #040340, @#177776
>>> Trap to 250 <<<
MOV #020340, @#177776
MOV #010340, @#177776
MOV #100340, @#000022
IOT ; USP/010000 ; KSP/001000
>>> Trap to 250 <<< ; USP/007776 ; KSP/001000
MOV #100340, 2(SP)
RTI ; USP/007776 ; KSP/000774
>>> Trap to 250 <<< ; USP/007776 ; KSP/001000
Program completed.
.
Тут как бы все логично: IOT не меняет SP (какой менять?)
А тут получается за неимением вариантов пытается запихать в USP, а потом спохватывается и посреди процесса вылетает? Или USP выбирается по одному старшему биту, а попытка записать PC (причем декремент сохраняется) вызывает MP SST - нет PAR/PDR... Надо еще наверное @xSP выводить
Похоже второе мое предположение верно: SP выбирается по одному биту, делается запись в него и вызывает аборт - нет соответствующих PAR/PDR, но декремент сохраняется (хотя с MP STT наверное всегда так - не случайно в MMR1 возвращаются значения регистров и оффсетов для отката).
- - - Добавлено - - -
Похоже он и есть всегда без мапинга. То есть SP выбирается старшим битом, а пары PAR/PDR нету.