Добрался до TRAP-диспетчера.
Написал несколько комментариев и запутался.
Не пойму, какое число получается после очистки битов и сдвига
И куда в конечном счёте происходит переход?
Аргументы у TRAP-а видел такие:
11, 12, 13
20, 22, 23, 25, 27
32, 33, 36,
44
50, 53, 55
Код:
TRAP-диспетчер:
---------------------
Сохраняем регистры:
004 504: MOV R3,-(SP) ; SP=SP-2; занести значение регистра R3 в стек
004 506: MOV R4,-(SP) ; SP=SP-2; занести значение регистра R4 в стек
004 510: MOV 000 004(SP),R3 ;записать в R3 содержимое ячейки по адресу SP+4, т.е. адрес возврата из прерывания
004 514: MOV R3,R4 ; R4 = R3 = адрес возврата из прерывания
004 516: MOV -(R3),R3 ; R3 = (R3-2) ; достали команду TRAP, вызвавшую прерывание, и положили в регистр R3
004 520: BIC #177 600,R3 ; обнулить все разряды команды TRAP, кроме младших 7 бит - достали аргумент TRAP-а
004 524: MOV R3,-(SP) ; полученный аргумент кладём в стек
004 526: CMP #000 010,R3 ; сравниваем 000 010 - R3
004 532: BMI 004 540 ; если R3 меньше 10, то перейти на 004 540
004 534: CLR R3 ; очистить R3
004 536: BR 004 544 ; перейти на 004 544
004 540: SUB #000 010,R3 ; вычесть 10 из R3
004 544: MOVB 004 600(R3),-(SP); положить в стек значение 004 600+(R3)
004 550: BIC #177 400,(SP) ; очистить старший байт ячейки стека
004 554: ASL R3 ; сдвинуть R3 влево
004 556: JSR PC,@004 646(R3) ; перейти к подпрограмме по адресу 004 646+(R3)
004 562: MOV (SP)+,R3
004 564: ADD R3,000 006(SP)
004 570: TST (SP)+
004 572: MOV (SP)+,R4
004 574: MOV (SP)+,R3
004 576: RTI
004 600: RTI
004 602: HALT