Difference between revisions of "Uknc rt11 boot"

From Felixl.com
Jump to navigationJump to search
 
(первый этап)
 
Line 2: Line 2:
  
 
== первый этап ==
 
== первый этап ==
 +
 +
загрузочный код в ЦПУ расположен по 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              ; Запускаем вторую фазу
  
 
== второй этап ==
 
== второй этап ==
  
 
== запуск ==
 
== запуск ==

Latest revision as of 21:18, 23 March 2007

Процесс загрузки 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              ; Запускаем вторую фазу

второй этап

запуск