You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This problem exists in real VM3 processors, but it may be possible to solve it in the verilog model. Which theoretically increases compatibility with DEC OS. These problems are mentioned in the DEMOS source codes. https://github.com/sergev/vak-opensource/tree/master/bk/demos-dvk
DEMOS/src/sys/stand/bootstrap/M.s
94/05/13
/ Вставлены заглушки для дебильных процессоров ВМ3, в которых mtpi
/ не работает из-под пользовательского режима (mtpi, mfpi, clrseg).
...
/P3: Заменена на медленный аналог на C, работающий через mtpi().
/Это проще, чем переписывать, и не настолько уж медленно.
// clrseg(addr,count)
/.globl _clrseg
/_clrseg:
/ mov 4(sp),r0
/ beq 2f
/ asr r0
/ bic $!77777,r0
/ mov 2(sp),r1
/1:
/ clr -(sp)
/ mtpi (r1)+
/ sob r0,1b
/2:
/ rts pc
/ mtpd(word,addr)
.globl _mtpd
_mtpd:
cmp _cputype,$23. / ДВК, однако
beq mtpi_23
mov 4(sp),r0
mov 2(sp),-(sp)
mtpd (r0)+
rts pc
/P3: Вот mtpi(), которое не содержит mtpi.
/В оригинале есть побочный эффект: возвращается адрес+2. Не знаю, нужно
/ли это кому-нибудь. На всякий случай поддержано. Предполагается, что
/мы находимся где-то внизу адресного пространства программы и можем
/двигать сегмент #6.
mtpi_23:
mov 4(sp),r0 / addr
mov 2(sp),r1 / value
mov r2,-(sp)
mov r3,-(sp)
mov r0,r2 / Вычисляем индекс сегмента назначения
ash $-12.,r2
bic $177761,r2
mov *$UISA6,r3 / Спасаем и устанавливаем сегмент #6
mov KISA0(r2),*$UISA6
mov r0,r2 / Относим смещение к базе #6
bic $160000,r2
bis $140000,r2
mov r1,*r2
mov r3,*$UISA6 / Восстанавливаем базу #6
mov (sp)+,r3
mov (sp)+,r2
add $2,r0
rts pc
The text was updated successfully, but these errors were encountered:
Not sure the kernel space access should be allowed from user mode.
F-11 factory tests of mtpd/mtpi instructions are done for "previous user mode" only.
Would be interesting to test for "previous kernel mode".
But there is another errata related:
"Дополнения от Полетаева из стаpых постингов:
Процессоры выпуска до середины 1989 года (приблизительно - дату точно не
помню) имели ошибку в командах MFPD/MTPD - они отрабатывались как байтовые.
Из-за них не работал TSX. Ошибка обходилась заменой на команды MTPI/MFPI.
Следующие ошибки, насколько мне известно, остались неустраненными.
Ошибка в реализации команд MTPI/MTPD. Согласно PDP11 processor handbook
эти команды должны выполняться следующим образом:
(temp) <- (SP)+; (dst) <- (temp).
В 1801ВМ3 команда выполняется без использования промежуточного регистра.
Проявляется в случае выполнения команды MTPI SP при совпадении текущего и
предыдущего режимов работы процессора - значение указателя стека оказывается
на 2 большим. Влияние на программное обеспечение не отмечено."
This problem exists in real VM3 processors, but it may be possible to solve it in the verilog model. Which theoretically increases compatibility with DEC OS. These problems are mentioned in the DEMOS source codes.
https://github.com/sergev/vak-opensource/tree/master/bk/demos-dvk
DEMOS/src/sys/stand/bootstrap/M.s
94/05/13
/ Вставлены заглушки для дебильных процессоров ВМ3, в которых mtpi
/ не работает из-под пользовательского режима (mtpi, mfpi, clrseg).
...
/P3: Заменена на медленный аналог на C, работающий через mtpi().
/Это проще, чем переписывать, и не настолько уж медленно.
// clrseg(addr,count)
/.globl _clrseg
/_clrseg:
/ mov 4(sp),r0
/ beq 2f
/ asr r0
/ bic $!77777,r0
/ mov 2(sp),r1
/1:
/ clr -(sp)
/ mtpi (r1)+
/ sob r0,1b
/2:
/ rts pc
/ mtpd(word,addr)
.globl _mtpd
_mtpd:
cmp _cputype,$23. / ДВК, однако
beq mtpi_23
mov 4(sp),r0
mov 2(sp),-(sp)
mtpd (r0)+
rts pc
/ mtpi(word,addr)
.globl _mtpi
_mtpi:
cmp _cputype,$23.
beq mtpi_23
mov 4(sp),r0
mov 2(sp),-(sp)
mtpi (r0)+
rts pc
/P3: Вот mtpi(), которое не содержит mtpi.
/В оригинале есть побочный эффект: возвращается адрес+2. Не знаю, нужно
/ли это кому-нибудь. На всякий случай поддержано. Предполагается, что
/мы находимся где-то внизу адресного пространства программы и можем
/двигать сегмент #6.
mtpi_23:
mov 4(sp),r0 / addr
mov 2(sp),r1 / value
mov r2,-(sp)
mov r3,-(sp)
The text was updated successfully, but these errors were encountered: