Это заставляет иначе взглянуть на начальные значения PAR.
Это заставляет иначе взглянуть на начальные значения 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 нету.