Цитата Сообщение от AFZ Посмотреть сообщение
Угу, осталось найти и разобрать сам загрузчик. Он, кстати, скорее всего, лежит в ПЗУ не по тому адресу, с которого выполняется, так, что его дизасм вряд ли будет корректным...
А чем он может быть некорректным? Старался как мог:
Код:
; Загрузчик из сети164160$:MTPS    #340        ; Запретить прерывания
    MOVB    @#176561,R5    ; Выделение в R5 номера сетевой станции
    MOV    R5,R0
    BIC    #177760,R5
    ASR    R0
    BIC    #177717,R0
    BIS    R0,R5
    MOVB    R5,164556$    ; Сохранение номера сетевой станции
    MOVB    164572$,R0    ; R0 = 173(8)
    XOR    R5,R0        ; R0 = 173(8) XOR номер_сетевой_станции
    MOVB    R0,164572$
    MOV    #30,R0        ; R0 = 30 (адрес вектора команды EMT)
    MOV    #164500$-164160$+1000,(R0)+ ; Установка вектора прерывания EMT
    CLR    (R0)+        ; Установка ССП при вызове EMT
    MOV    #164512$-164160$+1000,(R0)+ ; Установка вектора прерывания TRAP
    CLR    (R0)+        ; Установка ССП при вызове TRAP
164244$:MOV    #10000,SP    ; Установка указателя стека
    MOV    #164526$-164160$+1000,@#100 ; Устан. вект. прер. сет. таймера
    CLR    @#102
    MTPS    #0        ; Разрешить прерывания
    CLR    164534$        ; Очистка счетчика ожидания
164272$:TRAP    0        ; Чтение пришедшего байта
    CMP    164534$,#5    ; Счетчик ожидания больше пяти
    BLO    164272$        ; Нет
164304$:EMT    0        ; Посылка и чтение очередного байта
    CMPB    #376,R0        ; Пришедший байт равен 376(8)
    BNE    164304$        ; Нет
    MOV    #164554$-164160$+1000,R1 ; R1 = адрес блока передачи
164320$:MOVB    (R1)+,R0    ; R0 = очередной байт из блока передачи
    CMPB    #376,R0        ; Он равен 376(8) ?
    BEQ    164334$        ; Да
    EMT    0        ; Посылка и чтение очередного байта
    BR    164320$
164334$:EMT    0        ; Посылка и чтение очередного байта
    CMPB    #377,R0        ; Прочитанный байт равен 377(8) ?
    BNE    164334$        ; Нет
    EMT    0        ; Посылка и чтение очередного байта
    CMPB    R5,R0        ; Полученный байт равен номеру станции ?
    BNE    164334$        ; Нет
    MOV    #377,R4        ; R4 = 377(8) (контрольная сумма)
    XOR    R0,R4        ; R4 = 377(8) XOR номер_сетевой_станции
    MOV    #50000,R1    ; R1 = адрес расположения загрузчика
    EMT    0        ; Посылка и чтение очередного байта
    MOV    R0,R3        ; R3 = считанный байт
    XOR    R0,R4        ; Подсчет контрольной суммы
164372$:EMT    0        ; Посылка и чтение очередного байта
    CMPB    #373,R0        ; Считанный байт равен 373(8) ?
    BLOS    164410$        ; Выше или равен 373(8)
    XOR    R0,R4        ; Подсчет контрольной суммы
    MOVB    R0,(R1)+    ; Передача принятого байта в память
    BR    164372$
164410$:BNE    164426$        ; Принятый байт равен не равен 373(8)
    EMT    0        ; Посылка и чтение очередного байта
    COM    R0        ; Инверсия принятого байта
    XOR    R0,R4        ; Подсчет контрольной суммы
    MOVB    R0,(R1)+    ; Передача принятого байта в память
    COM    R0        ; Инверсия для передачи
    BR    164372$
164426$:CMPB    #374,R0        ; Принятый байт равен 374(8)
    BNE    164244$        ; Нет
    EMT    0        ; Посылка и передача байта
    CMPB    R0,R4        ; Он равен контрольной сумме ?
    BNE    164244$        ; Нет
    EMT    0        ; Посылка и передача байта
    BISB    #10,R0        ; R0 = R0 OR 10(8)
    EMT    0        ; Посылка и передача байта
    CMPB    #377,R0        ; Принятый байт равен 377(8)
    BNE    164244$        ; Нет
    EMT    0        ; Посылка и передача байта
    MOV    #4,@#176560    ; Включение кольцевой сети
    MTPS    #340        ; Запретить прерывания
    JMP    @#50000        ; Переход на исполнение загрузчика
; Подпрограмма передачи байта в локальную сеть (исполнение команды EMT)
164500$:TSTB    @#176564    ; Передатчик СА готов ?
    BPL    164500$        ; Нет
    MOVB    R0,@#176566    ; Передача байта в сеть
; Подпрограмма чтения байта, пришедшего по сети (исполнение команды TRAP)
164512$:TSTB    @#176560    ; Приемник СА готов ?
    BPL    164512$        ; Нет
    MOVB    @#176562,R0    ; Прием байта из сети
    RTI
; Подпрограмма исполнения прерываний таймера
164526$:CLR    @#176560    ; Включение режима загрузки
    INC    (PC)+        ; Инкремент счетчика ожидания
164534$:.WORD    0
    CMP    164534$,#1000    ; Счетчик ожидания превысил лимит времени ?
    BHI    164550$        ; Да
    RTI
164550$:JMP    164244$
; Блок передачи в сеть
164554$:.BYTE    377,0,0,204,0,0,0,0,0,0,0,0,0,374,173,60,377,376,0,0