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