Возможно что в тот раз была версия теста 0.2, но вроде др. Титус в 0.3 добавил только MARK тест.
Возможно что в тот раз была версия теста 0.2, но вроде др. Титус в 0.3 добавил только MARK тест.
Ну и как тогда у двух тестов могут различаться ВСЕ контрольные суммы - и измеренные, и эталонные ..
---------- Post added at 16:02 ---------- Previous post was at 15:56 ----------
Получается, что на тестируемом процессоре подпрограмма печати 16-ричного значения выводит на экран неизвестно что.
Значит тот тест был версии 0.1.
Прогнал тест 0.3а на Эл.85
результат не отличается от теста 0.3а на плате М6.
Лучше ответить в этой теме, более соответствует. На УКНЦ с процессором 1801ВМ2 результаты аналогичные, потому скриншот и не выкладываю.
---------- Post added at 18:44 ---------- Previous post was at 18:37 ----------
Из описания исполнения RTI на 1801ВМ2:
"...Если при загрузке нового PSW устанавливается бит T в PSW, то отладочное прерывание будет вызвано до исполнения первой команды нового процесса. Если перед исполнением RTI был установлен T-бит, а при загрузке нового PSW он очищается, то в этом случае всё равно будет вызвано отладочное прерывание, но в стеке сохранится уже новое PSW без установленного бита T. ..."
Особенности RTT:
"... Единственным отличием является то, что если при загрузке нового PSW устанавливается бит T, то после исполнения RTT не запускается блок обработки прерываний, и соответственно выполняется команда нового процесса. ..."
Из этой особенности следует, что если при возврате по RTT бит T не был установлен, то блок обработки прерываний не пропускается.
На 11/83:Код:.BO RT11SB
Foreground loaded; Are you sure? Y
RT-11SB (S) V05.07
.SET TT QUIET
?ETM-I-Date & time - 11-FEB-2015 19:22:55
?ETM-I-Time server - 70-71-BC-50-EB-D0, OpenBSD 5.5 amd64
.R DATE
.AS D10 DK
.RU TTST6
LSI-11 Traps Test #6
Mov #00,-(SP)
Mov #L2,-(SP)
Mov #20,-(SP)
Mov #L1,-(SP)
RTT
L1: RTI
L2:
NOP
Mov #00,-(SP)
Mov #L4,-(SP)
Mov #20,-(SP)
Mov #L3,-(SP)
RTT
L3: RTT
L4:
NOP
.
---------- Post added at 20:43 ---------- Previous post was at 19:24 ----------
А вот интересно, как ВМx ведут себя если в @#16 записать 20 и сделать BPT?
На *J11 процессорах это один из 4 случаев когда придется останавливать проц сигналом BHALT.
Ну вобщем-то так и предполагал.
На 11/83 все зависает, если остановить вручную - SP будет равен 0 и тот факт, что SP в кернел моде не может безнаказанно пересечь зловещие 400 не спасает :)
---------- Post added at 23:24 ---------- Previous post was at 21:24 ----------
Попутно для общего развития тест прерывания по небольшому переполнению стека.
Выполняет последовательно команды (при SP=400):Первая из них ждет пока таймер вызовет прерывание и тем самым опустит SP ниже 400, остальные команды сами действуют на SP.Код:BR .
EMT 350
TST -(SP)
CALL @#EXSUB
Программа теста
Код:.TITLE YELL -- ТЕСТ YELLOW STACK TRAP
.MCALL .EXIT,.PRINT
;+
;ТЕСТ ПОСЛЕДОВАТЕЛЬНО ВЫПОЛНЯЕТ ПРИ SP=400 КОМАНДЫ:
; BR .
; EMT 350
; TST -(SP)
; CALL @#EXSUB
;-
START:: MOV #CODES,R3 ;R3=ТАБЛИЦА КОМАНД
MOV @#4,SAVE ;СОХРАНЯЕМ ВЕКТОР
MOV @#6,SAVE+2 ; 4
MOV #ODINT,@#4 ;УСТАНАВЛИВАЕМ ОБРАБОТЧИК
MOV #340,@#6 ; ПРЕРЫВАНИЯ
DOTST:: MOV #ARGS,R2 ;R2=БЛОК АРГУМЕНТОВ $EDMSG
MOV #INSTR,(R2)+ ;АДРЕС ТЕСТИРУЕМОЙ КОМАНДЫ
ASR SP ;SP=400
INSTR:: BR . ;ТЕСТИРУЕМАЯ КОМАНДА
.WORD EXSUB ;ВТОРАЯ ЧАСТЬ ОТ КОМАНДЫ CALL
PRINT:: MOV #BUFF,R0 ;R0=БУФЕР
MOV #DUMP,R1 ;R1=ФОРМАТНАЯ СТРОКА
MOV #ARGS,R2 ;R2=БЛОК АРГУМЕНТОВ
CALL $EDMSG ;ФОРМАТИРУЕМ СООБЩЕНИЕ
.PRINT #BUFF ;ПЕЧАТАЕМ
MOV (R3)+,INSTR ;СЛЕДУЮЩАЯ ИНСТРУКЦИЯ
BNE DOTST ;ЕСЛИ 0 - ВСЕ
MOV SAVE,@#4 ;ВОССТАНАВЛИВАЕМ ВЕКТОР
MOV SAVE+2,@#6 ;
EXSUB:: .EXIT ;ВЫХОД
ODINT:: MOV SP,R0 ;СОХРАНЯЕМ SP
MOV #START,SP ;ВОССТАНАВЛИВАЕМ
MOV R0,(R2)+ ;SP
MOV (R0)+,(R2)+ ;@SP
MOV @R0,(R2)+ ;2(SP)
CLR -(SP) ;ВОЗВРАТ
MOV #PRINT,-(SP) ; НА
RTI ; ПП ПЕЧАТИ
CODES:: .EXIT ;EMT 350
TST -(SP) ;TST -(SP)
CALL @#0 ;CALL @#EXSUB
SAVE: .BLKW 2
ARGS: .BLKW 4
BUFF: .BLKB 64.
DUMP: .ASCIZ /%P: SP=%P, @SP=%P, 2(SP)=%P/
.END START
[свернуть]
Результаты показывают, что в случае возникновения прерывания или вызова подпрограммы, сначала проходит сохранение в стек, потом устанавливается PC/PS, а потом происходит прерывание по 4, что позволяет обработчику прерываний просто вернуться назад по RTI (предварительно проверив в регистре CPUERR, что это yellow stack trap) и тем самым продолжить выполнение в надежде что остатков стека хватит :)
Код:.EX YELL/LINK:SY:RSXLIB
001046: SP=000370, @SP=133014, 2(SP)=000341
001046: SP=000370, @SP=120760, 2(SP)=000000
001046: SP=000372, @SP=001050, 2(SP)=000004
001046: SP=000372, @SP=001122, 2(SP)=000000
.E 30
120760
.E 100
133014
.
Что скрыто за этими вызовами?
Можно ли (имеет ли смысл) например этот тест запустить на УК-НЦ под RT-11?
Каким образом и можно ли RSXLIB использовать? - я наверное пропустил если
есть эта OBJ для RT-11? Есть ли в этой библиотеке (если её можно использовать
под RT-11), что нибудь супер крутое и полезное, описание аналогичное SYSMAC.HLP существует?