BDOS EQU #0005             ;Точка BDOS для MSX-DOS.
                           ;
       LD   DE,#005C       ;С этих  адресов  в  операционной  системе
       CALL START          ;хранятся первые 12 необходимых байтов спе-
       LD   DE,#006C       ;цификации  файлов, имена  которых  вводят-
       CALL START          ;ся  в  командной строке  (2  и  3-е слово
       RET                 ;строки соответственно).
                           ;
START: PUSH DE             ;HL:= REGION, DE:= 005Ch
       LD   HL,REGION      ;Операциями в стеке меняем содержимое ре-
       PUSH HL             ;гистров HL и DE (можно проще: EX DE,HL).
       POP  DE             ;DE:= REGION, HL:= 005Ch
       POP  HL             ;Это пересылка номера драйвера  и  имени
       LD   BC,#000C       ;файла с расширением в отведенную  опера-
       LDIR                ;тивную область для дальнейшей работы  с
                           ;файлом.
OPEN:  LD   DE,REGION      ;Открытие файла,определяемого блоком FCB
       LD   C,#0F          ;(блоком управления  файлами), начальный
       CALL BDOS           ;адрес которого находится в регистре DE.
                           ;
PERES: LD   DE,#0500       ;Перед считыванием записи из файла  уста-
       LD   HL,#0007       ;навливаем адрес пересылки = 0500h,a так-
       CALL BLOAD          ;же размер записи = 7 байтам и считываем
                           ;запись.
       LD   HL,(#0505)     ;По адресу  метки  ADRES  положим  адрес
       LD   (ADRES),HL     ;старта считываемой программы  с расшире-
       LD   HL,(#0501)     ;нием OBJ или BLO. Напомним, что  первые
                           ;7 байтов такой программы определяют  по
                           ;порядку:
                           ;   код ASCII буквы "Ч",
                           ;   адрес  н а ч а л а  программы,
                           ;   адрес  к о н ц а    программы,
                           ;   адрес  с т а р т а  программы
                           ;
       LD   BC,#0007       ;Уменьшаем на 7 адрес начала программы и
       SBC  HL,BC          ;таким образом устанавливаем новый адрес
       EX   DE,HL          ;передачи записи при считывании из файла,
                           ;только размер записи теперь устанавлива-
       LD   HL,(REGION+16) ;ем равным размеру файла в  байтах и  вы-
       CALL BLOAD          ;полняем полное  считывание файла. Таким
                           ;образом, первые 7 байтов  файла, опреде-
                           ;ляющие параметры и тип файла, "отрезают-
                           ;ся".
                           ;
       LD   HL,JUMP        ;В рабочую область для оператора  CIRCLE 
       LD   DE,#F931       ;пересылается программа запуска загружен-
       PUSH DE             ;ного файла. Начальный адрес рабочей  об-
       LD   BC,13          ;ласти остается в стеке и, таким образом,
       LDIR                ;область памяти с этим адресом  опрашива-
       RET                 ;ется при встрече команды RET.
                           ;
JUMP:  LD   A,11110000B    ;XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY
       OUT  (#A8),A        ;V Подключим ROM BASIC:                     V
       RST  #30            ;V  в адресах 0000hІ7FFFh - ROM, слот 0-2;  V
       DEFB #00            ;V  в адресах 8000hІFFFFh - RAM, слот 3-2   V
                           ;V                                          V
ADRES: NOP                 ;VЗдесь хранится адрес старта.              V
       NOP                 ;V                                          V
       LD   A,11110011B    ;VДля  загрузки  второго  файла (если  он   V
       OUT  (#A8),A        ;Vесть) к слоту 3-2 (в котором  находимся)  V
       RET                 ;Vподключаем страницу  с  адресами 0000hІ   V
                           ;V3FFFh(в области, в которой работали раньше)
                           ;ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[
                           ;
BLOAD: LD   (REGION+14),HL ;Установка текущего размера записи
       LD   HL,#0000       ;(см.таблицу "Спецификация файла").
       LD   (REGION+33),HL ;Номер записи всегда равен нулю,т.е.
       LD   (REGION+35),HL ;считываем файл с самого начала.
                           ;
       LD   C,#1A          ;XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY
       CALL BDOS           ;VУстановка адреса передачи (BDOS)        V
                           ;V                                        V
       LD   HL,#0001       ;TWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS
       LD   DE,REGION      ;VСчитывание одной записи из файла,опреде-V
       LD   C,#27          ;Vляемого блоком FCB, начальный адрес  ко-V
       JP   BDOS           ;Vторого находится в регистре DE          V
                           ;ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[
REGION:DEFS 36             ;Обнуление последующих 36 байтов. Освобожде-
                           ;ние области  для  работы  со спецификацией
                           ;файла
KONEC: RET                 ;
