Последний раз редактировалось form; 29.11.2011 в 18:15.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
А те кто проги тестовые пишут дураки зачем-то заполняют большой кусок памяти командой и натравливают счет на него
Нет, конечно можно попробовать опереться и на одно прерывания таймера, но ответа на вопрос как организовано я не получил. Как минимум хандлер таймера должен быть свой и единственный и сам тест запускать должен именно он.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
А на счет прерываний, могущих помещать измерениям. Каналы 0..2 не помешают, т.к. в это время ЦП сидит в ожидании окончания теста, и ничего не далает. Единственное, может помешать нажатие клавиши на клавиатуре и программируемый таймер.
---------- Post added at 17:20 ---------- Previous post was at 17:19 ----------
То, что пишут другие - это их личное дело)
Конечно тест запускает собственный обработчик прерывания от таймера. А после теста восстанавливает его.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Чтобы не было вопросов, вот как он запускается, и выходится. Все числа в десятичной арифметике, если не указано иное.
Код:MTPS #0 ;Разрешить прерывания 3$: BR 3$ ;Остановка программы и ожидание прерываний ;=============================================== Первая итерация прерывания от сетевого таймера ;Необходима для избежания случая, когда запрос на прерывания ;от таймера уже установлен, а прерывания запрещены, в связи с чем ;прерывание наступает с запозданием. TMInit: MOV R0,-(SP) ; MOV PC,R0 ; ADD #TMHandler-.,R0 ; MOV R0,@#^O100 ;Адрес вектора = TMHandler MOV (SP)+,R0 ; RTI ; ;=============================================== Главный цикл тестирования команд TMHandler: MOV #TMExit,@#^O100 ;Адрес вектора = TMHandler OpBufLoop: .WORD 0 ;Комада подготовки данных для каждого цикла OpBuf: .BLKW 2048 ;Буфер для тестируемых команд OpBufEnd: INC R4 ;Увеличиваем счетчик циклов JMP (R5) ;Бесконечный цикл --> OpBufLoop ;=============================================== Буфер данных DBuf: .BLKW 2048 ;Буфер для данных и стека тестируемых команд DBufEnd: ;=============================================== TMExit: ;Обработчик прерывания для выхода из цикла измерений MOV (SP)+,R5 ;R5 - адрес прерывания цикла MOV PC,R2 ; ADD #CPUTCnt-.,R2 ; MOV R2,-(SP) ;Взамен на стек положить адрес продолжения программы CPUTCnt MOV TMPSW,@#^O102 ;Восстановить PSW вектора MOV TMPC,@#^O100 ;Восстановить адрес обработки прерывания RTI ;Выход из прерывания ;----------------------------------------------- CPUTCnt: ADD #4,SP ;Восстановить стек после одного вложенного прерывания
Последний раз редактировалось Titus; 29.11.2011 в 18:29.
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)