Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VM3 mtpi in usermode not work. #20

Open
xolod79 opened this issue Aug 14, 2024 · 1 comment
Open

VM3 mtpi in usermode not work. #20

xolod79 opened this issue Aug 14, 2024 · 1 comment

Comments

@xolod79
Copy link

xolod79 commented Aug 14, 2024

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
@1801BM1
Copy link
Owner

1801BM1 commented Aug 16, 2024

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 большим. Влияние на программное обеспечение не отмечено."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants