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
Пардон, там есть ещё один Trap to 10 - гораздо ближе к "концу":
Код:Trap to 010 Trap to 010 -> PC:126750 PSW:340 126750 [000340]: MOV #6, -(SP) ; 126752:000006 -> 000764 126754 [000340]: ADD SP, (SP) ; R6 :000764 -> 000764:000006 126756 [000340]: MOV R5, -(SP) ; R5 :135656 -> 000762 126760 [000350]: MOV R4, -(SP) ; R4 :010520 -> 000760 126762 [000340]: MOV 6(SP), R5 ; 000766:013564 -> R5 126766 [000340]: MOV -(R5), R4 ; 013562:075002 -> R4 126770 [000340]: MOV R3, -(SP) ; R3 :105061 -> 000756 126772 [000350]: MOV R2, -(SP) ; R2 :000762 -> 000754 126774 [000340]: MOV R1, -(SP) ; R1 :000003 -> 000752 126776 [000340]: MOV R0, -(SP) ; R0 :004430 -> 000750 127000 [000340]: MOV R4, R0 ; R4 :075002 -> R0 127002 [000340]: MOV R0, R1 ; R0 :075002 -> R1 127004 [000340]: CMP R0, #31232. ; R0 :075002 -> 127006:075000 127010 [000340]: BCC 127124 127124 [000340]: CMP R0, #31264. ; R0 :075002 -> 127126:075040 127130 [000351]: BCS 127136 127136 [000351]: BIC #-25., R0 ; 127140:177747 -> R0 :075002 127142 [000345]: ASR R0 ; R0 :000000 127144 [000344]: ASR R0 ; R0 :000000 127146 [000344]: BIC #-8., R1 ; 127150:177770 -> R1 :075002 127152 [000340]: ASL R1 ; R1 :000002 127154 [000340]: ADD SP, R1 ; R6 :000750 -> R1 :000004 127156 [000340]: MOV R1, -(SP) ; R1 :000754 -> 000746 127160 [000340]: MOV (R1), R1 ; 000754:000762 -> R1 127162 [000340]: MOV (R1)+, R2 ; 000762:135656 -> R2 127164 [000350]: MOV (R1)+, R3 ; 000764:000772 -> R3 127166 [000340]: MOV (R1)+, R4 ; 000766:013564 -> R4 127170 [000340]: MOV (R1)+, R5 ; 000770:000004 -> R5 127172 [000340]: MOV R1, -(SP) ; R1 :000772 -> 000744 127174 [000340]: ADD PC, R0 ; R7 :127176 -> R0 :000000 127176 [000350]: ADD #6, R0 ; 127200:000006 -> R0 :127176 127202 [000350]: ADD (R0), PC ; 127204:000412 -> R7 :127204 127616 [000350]: MOV R2, R0 ; R2 :135656 -> R0 127620 [000350]: BNE 127630 127630 [000350]: MOV R4, R1 ; R4 :013564 -> R1 127632 [000340]: BEQ 130154 127634 [000340]: BIC #-128., R2 ; 127636:177600 -> R2 :135656 127640 [000340]: BIS #128., R2 ; 127642:000200 -> R2 :000056 127644 [000340]: TST R0 ; R0 :135656 127646 [000350]: BPL 127656 127650 [000350]: NEG R3 ; R3 :000772 127652 [000351]: ADC R2 ; R2 :000256 127654 [000340]: NEG R2 ; R2 :000257 127656 [000351]: BIC #-128., R4 ; 127660:177600 -> R4 :013564 127662 [000341]: BIS #128., R4 ; 127664:000200 -> R4 :000164 127666 [000341]: TST R1 ; R1 :013564 127670 [000340]: BPL 127700 127700 [000340]: BIC #-32641., R0 ; 127702:100177 -> R0 :135656 127704 [000340]: BIC #-32641., R1 ; 127706:100177 -> R1 :013564 127710 [000340]: CLR -(SP) ; 000742:000000 127712 [000344]: MOV R0, -(SP) ; R0 :035600 -> 000740 127714 [000340]: SUB R1, R0 ; R1 :013400 -> R0 :035600 127716 [000340]: BHI 127746 127746 [000340]: CLR R1 ; R1 :013400 127750 [000344]: CMP R0, #3072. ; R0 :022200 -> 127752:006000 127754 [000340]: BLE 127764 127756 [000340]: CLR R4 ; R4 :000364 127760 [000344]: CLR R5 ; R5 :000004 127762 [000344]: BR 130000 130000 [000344]: ADD R5, R3 ; R5 :000000 -> R3 :177006 130002 [000350]: ADC R2 ; R2 :177521 130004 [000350]: ADD R4, R2 ; R4 :000000 -> R2 :177521 130006 [000350]: BPL 130030 130010 [000350]: NEG R1 ; R1 :000000 130012 [000344]: ADC R3 ; R3 :177006 130014 [000350]: ADC R2 ; R2 :177521 130016 [000350]: NEG R3 ; R3 :177006 130020 [000341]: ADC R2 ; R2 :177521 130022 [000350]: NEG R2 ; R2 :177522 130024 [000341]: INC 2(SP) ; 000742:000000 130030 [000341]: MOV R3, R4 ; R3 :000772 -> R4 130032 [000341]: BIS R1, R4 ; R1 :000000 -> R4 :000772 130034 [000341]: BIS R2, R4 ; R2 :000256 -> R4 :000772 130036 [000341]: BNE 130044 130044 [000341]: CMP R2, #256. ; R2 :000256 -> 130046:000400 130050 [000351]: BCS 130066 130066 [000351]: TSTB R2 ; R2 : 256 130070 [000350]: BMI 130106 130106 [000350]: ASL R1 ; R1 :000000 130110 [000344]: ADC R3 ; R3 :000772 130112 [000340]: ADCB R2 ; R2 : 256 130114 [000350]: BCC 130122 130122 [000350]: MOV (SP)+, R4 ; 000740:035600 -> R4 130124 [000340]: BPL 130136 130136 [000340]: ROR (SP)+ ; 000742:000001 130140 [000347]: BCC 130146 130142 [000347]: BIS #-32768., R2 ; 130144:100000 -> R2 :000256 130146 [000351]: BIC #128., R2 ; 130150:000200 -> R2 :100256 130152 [000351]: BIS R4, R2 ; R4 :035600 -> R2 :100056 130154 [000351]: CLR R5 ; R5 :000000 130156 [000344]: TST R2 ; R2 :135656 130160 [000350]: BNE 130166 130166 [000350]: BPL 130174 130170 [000350]: BIS #8., R5 ; 130172:000010 -> R5 :000000 130174 [000340]: MOV (SP)+, R1 ; 000744:000772 -> R1 130176 [000340]: MOV (SP)+, R0 ; 000746:000754 -> R0 130200 [000340]: MOV R3, -(R1) ; R3 :000772 -> 000770 130202 [000340]: MOV R2, -(R1) ; R2 :135656 -> 000766 130204 [000350]: MOV R1, (R0) ; R1 :000766 -> 000754 130206 [000340]: SUB SP, R0 ; R6 :000750 -> R0 :000754 130210 [000340]: CMP R0, #12. ; R0 :000004 -> 130212:000014 130214 [000351]: BCS 130226 130226 [000351]: CALL 127032 ; R7 :130232 -> 000746 127032 [000351]: BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772 127040 [000341]: BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760 127044 [000341]: MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762 127050 [000351]: MOV (SP)+, R0 ; 000750:004430 -> R0 127052 [000341]: MOV (SP)+, R1 ; 000752:000003 -> R1 127054 [000341]: MOV (SP)+, R2 ; 000754:000766 -> R2 127056 [000341]: MOV (SP)+, R3 ; 000756:105061 -> R3 127060 [000351]: MOV (SP)+, R4 ; 000760:010520 -> R4 127062 [000341]: MOV (SP)+, R5 ; 000762:135656 -> R5 127064 [000351]: RETURN ; 000764:130232 -> R7 130232 [000351]: RTI 000000 [000000]: BIC R0, R0 ; R0 :004430 -> R0 :004430 000002 [000004]: EMT 350
---------- Post added at 22:50 ---------- Previous post was at 22:33 ----------
Внимательно проверил - драйвер отрабатывает штатно, но при выполнении завершающей команды RTI - в стеке оказывается ноль.
Сейчас добавлю в листинг дизассемблера показ значения SP и содержимого ячейки с адресом возврата при каждом шаге.
Похоже, что ошибка в алгоритме эмуляции FIS.Код:PC[013562] PSW[004] SP[000772] 0766[000000] : 075002 - Команда не опознана. Trap to 010 Trap to 010 -> PC:126750 PSW:340 PC[126750] PSW[340] SP[000766] 0766[013564] : MOV #6, -(SP) ; 126752:000006 -> 000764 PC[126754] PSW[340] SP[000764] 0766[013564] : ADD SP, (SP) ; R6 :000764 -> 000764:000006 PC[126756] PSW[340] SP[000764] 0766[013564] : MOV R5, -(SP) ; R5 :135656 -> 000762 PC[126760] PSW[350] SP[000762] 0766[013564] : MOV R4, -(SP) ; R4 :010520 -> 000760 PC[126762] PSW[340] SP[000760] 0766[013564] : MOV 6(SP), R5 ; 000766:013564 -> R5 PC[126766] PSW[340] SP[000760] 0766[013564] : MOV -(R5), R4 ; 013562:075002 -> R4 PC[126770] PSW[340] SP[000760] 0766[013564] : MOV R3, -(SP) ; R3 :105061 -> 000756 PC[126772] PSW[350] SP[000756] 0766[013564] : MOV R2, -(SP) ; R2 :000762 -> 000754 PC[126774] PSW[340] SP[000754] 0766[013564] : MOV R1, -(SP) ; R1 :000003 -> 000752 PC[126776] PSW[340] SP[000752] 0766[013564] : MOV R0, -(SP) ; R0 :004430 -> 000750 PC[127000] PSW[340] SP[000750] 0766[013564] : MOV R4, R0 ; R4 :075002 -> R0 PC[127002] PSW[340] SP[000750] 0766[013564] : MOV R0, R1 ; R0 :075002 -> R1 PC[127004] PSW[340] SP[000750] 0766[013564] : CMP R0, #31232. ; R0 :075002 -> 127006:075000 PC[127010] PSW[340] SP[000750] 0766[013564] : BCC 127124 PC[127124] PSW[340] SP[000750] 0766[013564] : CMP R0, #31264. ; R0 :075002 -> 127126:075040 ..... Сut ...... PC[130114] PSW[350] SP[000740] 0766[013564] : BCC 130122 PC[130122] PSW[350] SP[000740] 0766[013564] : MOV (SP)+, R4 ; 000740:035600 -> R4 PC[130124] PSW[340] SP[000742] 0766[013564] : BPL 130136 PC[130136] PSW[340] SP[000742] 0766[013564] : ROR (SP)+ ; 000742:000001 PC[130140] PSW[347] SP[000744] 0766[013564] : BCC 130146 PC[130142] PSW[347] SP[000744] 0766[013564] : BIS #-32768., R2 ; 130144:100000 -> R2 :000256 PC[130146] PSW[351] SP[000744] 0766[013564] : BIC #128., R2 ; 130150:000200 -> R2 :100256 PC[130152] PSW[351] SP[000744] 0766[013564] : BIS R4, R2 ; R4 :035600 -> R2 :100056 PC[130154] PSW[351] SP[000744] 0766[013564] : CLR R5 ; R5 :000000 PC[130156] PSW[344] SP[000744] 0766[013564] : TST R2 ; R2 :135656 PC[130160] PSW[350] SP[000744] 0766[013564] : BNE 130166 PC[130166] PSW[350] SP[000744] 0766[013564] : BPL 130174 PC[130170] PSW[350] SP[000744] 0766[013564] : BIS #8., R5 ; 130172:000010 -> R5 :000000 PC[130174] PSW[340] SP[000744] 0766[013564] : MOV (SP)+, R1 ; 000744:000772 -> R1 PC[130176] PSW[340] SP[000746] 0766[013564] : MOV (SP)+, R0 ; 000746:000754 -> R0 PC[130200] PSW[340] SP[000750] 0766[013564] : MOV R3, -(R1) ; R3 :000772 -> 000770 PC[130202] PSW[340] SP[000750] 0766[013564] : MOV R2, -(R1) ; R2 :135656 -> 000766 -------- Вот это место -------- PC[130204] PSW[350] SP[000750] 0766[135656] : MOV R1, (R0) ; R1 :000766 -> 000754 PC[130206] PSW[340] SP[000750] 0766[135656] : SUB SP, R0 ; R6 :000750 -> R0 :000754 PC[130210] PSW[340] SP[000750] 0766[135656] : CMP R0, #12. ; R0 :000004 -> 130212:000014 PC[130214] PSW[351] SP[000750] 0766[135656] : BCS 130226 PC[130226] PSW[351] SP[000750] 0766[135656] : CALL 127032 ; R7 :130232 -> 000746 PC[127032] PSW[351] SP[000746] 0766[135656] : BIC #15., 18.(SP) ; 127034:000017 -> 000770:000772 PC[127040] PSW[341] SP[000746] 0766[135656] : BIS R5, 18.(SP) ; R5 :000010 -> 000770:000760 PC[127044] PSW[341] SP[000746] 0766[135656] : MOV (SP)+, 12.(SP) ; 000746:130232 -> 000762 PC[127050] PSW[351] SP[000750] 0766[135656] : MOV (SP)+, R0 ; 000750:004430 -> R0 PC[127052] PSW[341] SP[000752] 0766[135656] : MOV (SP)+, R1 ; 000752:000003 -> R1 PC[127054] PSW[341] SP[000754] 0766[135656] : MOV (SP)+, R2 ; 000754:000766 -> R2 PC[127056] PSW[341] SP[000756] 0766[135656] : MOV (SP)+, R3 ; 000756:105061 -> R3 PC[127060] PSW[351] SP[000760] 0766[135656] : MOV (SP)+, R4 ; 000760:010520 -> R4 PC[127062] PSW[341] SP[000762] 0766[135656] : MOV (SP)+, R5 ; 000762:135656 -> R5 PC[127064] PSW[351] SP[000764] 0766[135656] : RETURN ; 000764:130232 -> R7 PC[130232] PSW[351] SP[000766] 0766[135656] : RTI PC[000000] PSW[000] SP[000766] 0766[135656] : BIC R0, R0 ; R0 :004430 -> R0 :004430 PC[000002] PSW[004] SP[000766] 0766[135656] : EMT 350
Адрес возврата в стеке затирается.
Правда, содержимое листинга поcле RTI я не понял..
Последний раз редактировалось Patron; 01.03.2012 в 00:08.
А почему в возвращаемом PSW, судя по листингу, старший байт не равен нулю. В ячейке 770 вроде значение 760.
---------- Post added at 00:14 ---------- Previous post was at 00:12 ----------
Увидел:
Код:PC[130174] PSW[340] SP[000744] 0766[013564] : MOV (SP)+, R1 ; 000744:000772 -> R1 PC[130176] PSW[340] SP[000746] 0766[013564] : MOV (SP)+, R0 ; 000746:000754 -> R0 PC[130200] PSW[340] SP[000750] 0766[013564] : MOV R3, -(R1) ; R3 :000772 -> 000770 PC[130202] PSW[340] SP[000750] 0766[013564] : MOV R2, -(R1) ; R2 :135656 -> 000766
---------- Post added at 00:16 ---------- Previous post was at 00:14 ----------
Кстати эмуляцию FIS можно сравнить с тем, как она делается на УКНЦ, листинги доступны.
Похоже, что адрес возврата "перекладывается" при входе в драйвер в другое место..
Ведь на адрес 135656 управление не передаётся, хотя именно это значение оказывается вместо адреса возврата.
Такое вполне возможно - нужно разбираться дальше.
И дизассемблер, похоже, в конце подвирает с выдачей значения SP.
---------- Post added at 23:21 ---------- Previous post was at 23:18 ----------
Драйвер заводит себе в стеке блок временных переменных, перекладывая куда-то исходные значения PC и PSW вектора возврата.
Меня смущает, что дизассемблер не изменяет SP после RTI.
Там явно какой-то глюк..
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Понял из-за чего это происходит. Взгляните на это кусок кода:
Сами два аргумента ложаться в стек, но не по SP, а по R2. Естественно возникающий TRAP10 ложит туда прерванный PC и PSW. Но п/п исполнения FIS естественно его благополучно затирает. Сами команды FIS стек не используют, а вот здесь получается вот так не очень хорошо.Код:013544 [000004]: MOV SP, R2 ; R6 :000772 -> R2 013546 [000000]: MOV #16384., -(R2) ; 013550:040000 -> 000770 013552 [000000]: CLR -(R2) ; 000766:013536 013554 [000004]: MOV #16384., -(R2) ; 013556:040000 -> 000764 013560 [000000]: CLR -(R2) ; 000762:010520 013562 [000004]: 075002 - Команда не опознана.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)