Uknc ROM Basic boot
From Felixl.com
Процесс загрузки с кассеты ПЗУ Бейсик Вильнюс.
- Загрузчик в ОЗУ ЦП дает команду на чтение первых 512 байт из картриджа в ОЗУ с адреса 000000
- Загрузчик проверяет что первой командой является 000240 NOP и запускает выполнение с адреса 000000
; Начало загрузчика, полученного с кассеты ПЗУ 000000 000240 NOP 000002 012702 MOV #000104, R2 000004 000104 000006 110062 MOVB R0, 000003(R2) ; 000010 000003 000012 012701 MOV #000005, R1 ; 000014 000005 000016 012703 MOV #000116, R3 000020 000116 ; Далее через канал 2 считываем 27653 слов с кассеты в ОЗУ с адреса 5566 000022 000402 BR 000030 ; --+ ; Передача массива параметров в канал 2 ; | 000024 112337 MOVB (R3)+, @#176676 ; | <-+ 000026 176676 ; | | 000030 105737 TSTB @#176674 ; <-+ | 000032 176674 ; | | 000034 100375 BPL 000030 ; --+ | 000036 077106 SOB R1, 000024 ; --+ 000040 105712 TSTB (R2) ; Проверяем состояние ошибки операции 000042 001356 BNE 000000 ; Ошибка - повторяем сначала ; Теперь по адресам 005566-065313 находится дамп с кассеты ПЗУ ; Подсчет контрольной суммы 000044 005003 CLR R3 000046 012701 MOV #005556, R1 000050 005556 000052 012702 MOV #027653, R2 000054 027653 000056 062103 ADD (R1)+, R3 ; <-+ 000060 005503 ADC R3 ; | 000062 077203 SOB R2, 000056 ; --+ 000064 005203 INC R3 000066 001344 BNE 000000 ; Переход на загруженный код 000070 000137 JMP @#005556 000072 005556 ; Массив параметров для получения данных с кассеты ПЗУ через канал 2 000104 004000 ; Команда (10) и ответ 000106 000021 ; Номер кассеты и номер устройства 000110 000200 ; Адрес от начала кассеты ПЗУ 000112 005566 ; Адрес в ОЗУ 000114 027653 ; Количество слов; это 24406 (десятичное) байт ; Начало работы основного блока ; Перенос 6-ти слов с адресов 000000-.. на адреса 001206-.. 005556 012706 MOV #001000, SP 005560 001000 005562 012700 MOV #001206, R0 005564 001206 005566 005001 CLR R1 005570 012702 MOV #000006, R2 005572 000006 005574 012120 MOV (R1)+, (R0)+ ; <-+ 005576 077202 SOB R2, 005574 ; --+ 005600 013720 MOV @#000060, (R0)+ 005602 000060 005604 013720 MOV @#000062, (R0)+ 005606 000062 005610 013720 MOV @#000244, (R0)+ 005612 000244 005614 013720 MOV @#000246, (R0)+ 005616 000246 005620 005037 CLR @#001236 005622 001236 005624 012737 MOV #070074, @#176640 005626 070074 005630 176640 005632 013720 MOV @#176642, (R0)+ 005634 176642 005636 012737 MOV #020306, @#176642 005640 020306 005642 176642 005644 005237 INC @#176640 005646 176640 005650 013720 MOV @#176642, (R0)+ 005652 176642 005654 012737 MOV #000600, @#176642 005656 000600 005660 176642 005662 005067 CLR 001170 005664 173302 005666 012737 MOV #160000, @#001034 005670 160000 005672 001034 005674 013737 MOV @#001034, @#001032 005676 001034 005700 001032 005702 005067 CLR 001054 005704 173146 005706 005067 CLR 001142 005710 173230 005712 012767 MOV #000310, 001006 005714 000310 005716 173066 005720 012700 MOV #001060, R0 005722 001060 005724 012720 MOV #000012, (R0)+ 005726 000012 005730 012720 MOV #000012, (R0)+ 005732 000012 005734 005020 CLR (R0)+ 005736 010001 MOV R0, R1 005740 012720 MOV #040101, (R0)+ 005742 040101 005744 012720 MOV #027076, (R0)+ 005746 027076 005750 012120 MOV (R1)+, (R0)+ 005752 012120 MOV (R1)+, (R0)+ 005754 012701 MOV #000012, R1 005756 000012 005760 012720 MOV #043524, (R0)+ ; <-+ 005762 043524 ; | 005764 077103 SOB R1, 005760 ; --+ 005766 005037 CLR @#001130 005770 001130 005772 004767 JSR PC, 014170 005774 006172 005776 005037 CLR @#001064 006000 001064 006002 004767 JSR PC, 007746 006004 001740