Косяки, найденные в RT-11 V05.07
В процессе разборки с RTEM были обнаружены некоторые косяки в системе. Патчи в посте выше.
BSTRAP.MAC
Код:
120$: BIS #<RTEM$>,SYSGEN(R4)
BIT #<1>,@#CNFMOD
BEQ 130$
BIS #<UCF.ON>,CLIFLG-$RMON(R4)
R4 уже содержит смещение с учетом "-$RMON", соответственно флаг улетает в мусорку.
RMON.MAC
Код:
CLIFLG::.BYTE < UCL.ON ! CCL.ON ! DCL.ON ! <UCF.ON*RTE$M> >
На самом деле как видно из этого фрагмента, код все-равно нерабочий так как UCF жестко прописан в RMON. Косяк был изначально во всех RT-11 V5.
BSTRAP.MAC
Код:
.WORD ERRHOK
BR .+14
RMON.MAC
Код:
CALL @$XTTPS
BIS #<XCS.IE>,@TTPS
.ASSUME .-ERRHOK EQ 20
.ENDC
.ENDC
CALL @$XTTPS
JSR R0,20$
.ASCII <CR><LF>"?MON-F-"<200>
BR должен передать управление на JSR, но после добавления хуков XTTxx никто не пересчитал разницу, а ведь этот .ASSUME там специально для того и написан чтобы не забыть. Результат - при прерывании в 4/10 система зацикливается в вечном трапе. Попутно здесь виден косяк не относящийся к RTEM - вызов @$XTTPS должен быть внутри последнего .ENDC (иначе в однотерминальной системе хук будет вызываться лишний раз [не страшно, но не красиво]).
USR.MAC
Код:
.IF NE TIME$R
.$UPDA ==: < . + 2>
CALL @#UPDDAT-$RMON
.ENDC
Код для предотвращения возможного создания файла со вчерашней датой хукается загрузчиком в RTEM, вызывая его подпрограмму обновления даты. При этом портятся регистры и вместо файла может открыться устройство, а запись получится хрен знает куда.