;Некоторые макроопределения:

DISK MACRO             ;
    LD     BC,0100H    ;
DSK:PUSH   BC          ;
    CALL   0FD9FH      ;
    POP    BC          ;
    LD     A,B         ; Гашение лампочки дисковода
    OR     C           ; для YIS805/128 КУВТ 2
    RET    Z           ;
    DEC    BC          ;
    JR     DSK         ;
    ENDM               ;
                       ;
GASI MACRO             ;
    BCALL  041H        ; В ы к л ю ч е н и е   экрана
    ENDM               ;
                       ;
GORI MACRO             ;
    BCALL  044H        ; В к л ю ч е н и е   экрана
    ENDM               ;
                       ;
NETEND MACRO           ;
    RST    030H        ;
    DEFB   08FH        ; Отключение от  с е т и  (только для MSX-2)
    DEFW   04016H      ;
    ENDM               ;

BCALL MACRO @X         ;
    RST    030H        ;
    DEFB   0           ; Межслотовые вызовы подпрограмм
    DEFW   @X          ;
    ENDM               ;

CLS MACRO              ;
    XOR    A           ; Очистка экрана
    BCALL  0C3H        ;
    ENDM               ;

SCREEN2 MACRO          ;
     LD    HL,01800H   ;
     LD    (0F3C7H),HL ;
     LD    HL,02000H   ;
     LD    (0F3C9H),HL ;
     LD    HL,0        ; Инициализация и установка
     LD    (0F3CBH),HL ; 2-го графического режима
     LD    HL,01B00H   ;
     LD    (0F3CDH),HL ;
     LD    HL,03800H   ;
     LD    (0F3CFH),HL ;
     BCALL 072H        ;
     ENDM              ;

COLOR MACRO            ;
     LD    A,01H       ;
     LD    HL,0F3E9H   ;
     LD    (HL),A      ;
     INC   HL          ; Установка цвета
     LD    (HL),A      ;
     INC   HL          ;
     LD    (HL),A      ;
     BCALL 062H        ;
     ENDM              ;

INITSPR MACRO          ;
     BCALL 069H        ;
     LD    BC,06201H   ; Инициализация и "разрешение"
     BCALL 047H        ; спрайтов размером 16 \ 16
     ENDM              ;

VIDEO MACRO            ;
SNOW:DI                ;
     LD    A,E         ;
     OUT   (99H),A     ; Заполнение области видеопамяти, начинающейся
     LD    A,D         ; с DE длиною в BC из области, начинающейся с HL
     OR    40H         ;
     OUT   (99H),A     ;
     LD    A,(HL)      ;
     OUT   (98H),A     ;
     LD    A,B         ;
     OR    C           ;
     EI                ;
     RET   Z           ;
     DEC   BC          ;
     INC   HL          ;
     INC   DE          ;
     JR    SNOW        ;
     ENDM              ;
START:                 ;
     CALL  DISKETA     ; Выполнение описанных макроопределений
     NETEND            ;
     GASI              ;
     COLOR             ;
     SCREEN2           ;
     INITSPR           ;
     CLS               ;
     LD    HL,SGT      ; Заполнение видеопамяти шаблонами спрайта
     LD    DE,03800H   ;
     LD    BC,20H      ;
     CALL  VRAM        ;
     LD    HL,SAT      ;
     LD    DE,01B00H   ; Установка атрибутов спрайта
     LD    BC,04H      ;
     CALL  VRAM        ;
     GORI              ;
     LD    HL,HOOK     ;
     LD    DE,0FD9FH   ; Установка адреса обработки прерываний.
     LD    BC,5        ; Обслуживает подпрограмму обработки HOOK с
     DI                ; адресом 0FD9Fh
     LDIR              ;
     EI                ;

CIKL:NOP               ;
     LD    HL,SAT      ; Постоянное отображение спрайта на экран, но коор-
     LD    DE,01B00H   ; динаты его меняются в подпрограмме обработки пре-
     LD    BC,4        ; рываний в зависимости от состояния матрицы клави-
     CALL  VRAM        ; атуры.
     ...               ; Здесь может находиться Ваша программа.
     ...               ; Например, программа движения фона  или  движения
     ...               ; других спрайтов.
     ...               ;
                       
     JR    CIKL        ;

HOOK: RST  30H         ;
      DEFB 8BH         ; Межслотовый вызов подпрограммы
      DEFW STICK       ; обработки прерываний
      RET              ;

STICK:LD   A,8         ; Подпрограмма обработки прерываний
      DI               ;
      CALL BUFF        ; После обращения к BUFF
      LD   HL,SAT      ; в регистре А - состояние ряда матрицы
      PUSH AF          ;
      CP   0EFH        ;
      JR   Z,LEFT      ; В зависимости от нажатой клавиши ("стрелки")
      POP  AF          ; меняется координата
      PUSH AF          ;
      CP   0DFH        ;
      JR   Z,SHIFT     ;
      POP  AF          ;
      PUSH AF          ;
      CP   0BFH        ;
      JR   Z,MAIN      ;
      POP  AF          ;
      PUSH AF          ;
      CP   07FH        ;
      JR   Z,RIGHT     ;
END:  POP  AF          ;
      RET              ;
SHIFT:DEC  (HL)        ; Клавиша "Стрелка вверх"
      JR   END         ;
MAIN: INC  (HL)        ; Клавиша "Стрелка вниз"
      JR   END         ;
LEFT: INC  HL          ; Клавиша "Стрелка влево"
      DEC  (HL)        ;
      JR   END         ;
RIGHT:INC  HL          ; Клавиша "Стрелка вправо"
      INC  (HL)        ;
      JR   END         ;

BUFF: LD   C,A         ; Подпрограмма возвращает состояние "сброшенных"
      DI               ; битов для определенного ряда матрицы клавиатуры
      IN   A,(0AAH)    ;
      AND  0F0H        ;
      ADD  A,C         ;
      OUT  (0AAH),A    ;
      EI               ;
      IN   A,(0A9H)    ;
      RET              ;
DISKETA:               ;
      DISK             ;

SGT:  DEFB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
      DEFB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
      DEFB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
      DEFB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
SAT:  DEFB 100,127,0,10

VRAM: VIDEO

