Uknc rt11 boot

From Felixl.com

Jump to: navigation, search

Процесс загрузки RT11 с дисковода.

первый этап

загрузочный код в ЦПУ расположен по 1000 . при выборе опции -- диск -- он копируется из системной памяти в 1000 и имеет следующий вид :

ROM:001000 loc_1000:                                 ; 
ROM:001000                 mov     #176674, R1       ; Регистр состояния К2
ROM:001004                 movb    R0, SourceSector  ; Номер сектора сохраняем в структуре обмена
ROM:001010                 clrb    @R1               ; сбросить биты К2
ROM:001012                 mov     #IO_Structure, R2 ; адрес структуры обмена в R2
ROM:001016 
ROM:001016 StartTransfer:                          ; 
ROM:001016                                         ; 
ROM:001016                 mov     #2, R3          ; Пересылаем 2 байта
ROM:001022 
ROM:001022 SendWordLoop:                           ; 
ROM:001022                                         ; 
ROM:001022                 tstb    @R1             ; Готов ли К2?
ROM:001024                 bpl     SendWordLoop    ; Готов ли К2?
ROM:001026                 movb    R2, 2(R1)       ; Слать младший байт в К2
ROM:001032                 swab    R2              ; меняем байты
ROM:001034                 sob     R3, SendWordLoop ; Готов ли К2?
ROM:001036                 mov     #2, R3          ; Шлем опять 2 байта в К2
ROM:001042 
ROM:001042 SendWordLoop1:                          ; 
ROM:001042                                         ; 
ROM:001042                 tstb    @R1             ; Готов ли К2?
ROM:001044                 bpl     SendWordLoop1   ; Готов ли К2?
ROM:001046                 movb    #377, 2(R1)     ; Шлем "Конец Посылки" в К2
ROM:001054                 sob     R3, SendWordLoop1 ; Готов ли К2?
ROM:001056 
ROM:001056 WaitForTransfer:                        ; 
ROM:001056                 tstb    @R1             ; Конец посылки был послан дважды для того что-бы узнать -- 
ROM:001056                                         ; когда-же ППУ перешлет считанный сектор в память.
ROM:001056                                         ; С точки зрения ППУ -- как только он исполнит комманду --
ROM:001056                                         ; "Читай сектор" - он увидит очередной запрос в канале --
ROM:001056                                         ; но там только 0377 -- тоесть конец запроса. ЦПУ -же увидит 
ROM:001056                                         ; что ППУ считал канал -- значит -- уря!!! сектор получили
ROM:001056                                         ; 
ROM:001060                 bpl     WaitForTransfer ; 
ROM:001060                                         ; 
ROM:001060                                         ; 
ROM:001060                                         ; 
ROM:001060                                         ;  
ROM:001060                                         ;  
ROM:001060                                         ; 
ROM:001062                 tstb    IO_Structure    ; Код ошибки будет тут. 0 == Ок
ROM:001066                 beq     Boot            ; А есть ли NOP по адресу 0?
ROM:001070                 clrb    IO_Structure
ROM:001074                 br      StartTransfer   ; Пересылаем 2 байта
ROM:001076 ; ---------------------------------------------------------------------------
ROM:001076 
ROM:001076 Boot:                                   ; CODE XREF: ROM:001066�j
ROM:001076                 cmp     #240, @#000000 ; 'а' ; А есть ли NOP по адресу 0?
ROM:001104                 bne     StartTransfer   ; Нет -- значит не тот сектор -- читаем еще раз
ROM:001106                 clr     PC              ; Запускаем вторую фазу

второй этап

запуск

Personal tools