Uknc ROM Basic boot
From Felixl.com
Jump to navigationJump to searchПроцесс загрузки с кассеты ПЗУ Бейсик Вильнюс.
- Загрузчик в ОЗУ ЦП дает команду на чтение первых 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-.. 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 ;??? почему текущий адрес стал 000104???