Uknc ROM Basic boot

From Felixl.com
Revision as of 10:13, 26 March 2007 by Nzeemin (talk | contribs)
(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to navigationJump to search

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

  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-..
  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???