cpu11 icon indicating copy to clipboard operation
cpu11 copied to clipboard

VM3 mtpi in usermode not work.

Open xolod79 opened this issue 1 year ago • 1 comments

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)

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

xolod79 avatar Aug 14 '24 18:08 xolod79

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ых постингов:

  1. Процессоры выпуска до середины 1989 года (приблизительно - дату точно не помню) имели ошибку в командах MFPD/MTPD - они отрабатывались как байтовые. Из-за них не работал TSX. Ошибка обходилась заменой на команды MTPI/MFPI.

Следующие ошибки, насколько мне известно, остались неустраненными.

  1. Ошибка в реализации команд MTPI/MTPD. Согласно PDP11 processor handbook эти команды должны выполняться следующим образом: (temp) <- (SP)+; (dst) <- (temp).

В 1801ВМ3 команда выполняется без использования промежуточного регистра. Проявляется в случае выполнения команды MTPI SP при совпадении текущего и предыдущего режимов работы процессора - значение указателя стека оказывается на 2 большим. Влияние на программное обеспечение не отмечено."

1801BM1 avatar Aug 16 '24 20:08 1801BM1