Uknc rt11 boot
From Felixl.com
Jump to navigationJump to 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 ; Запускаем вторую фазу