УКНЦ загрузка Бейсик-Вильнюс с кассеты ПЗУ

Материал из Emuverse
Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

Процесс загрузки с кассеты ПЗУ Бейсик Вильнюс.

  1. Загрузчик в ОЗУ ЦП дает команду на чтение первых 512 байт из картриджа в ОЗУ с адреса 000000
  2. Загрузчик проверяет что первой командой является 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