Вызовы ПЗУ для звука, прерываний и работы с магнитофоном

ZX Land #02

Во второй части описания ПЗУ

Во второй части описания я расскажу:

  • о вызове звука заданной высоты и длительности;
  • об обработке маскируемых прерываний;
  • о чтении клавиши BREAK;
  • об обработке процедур LOAD и SAVE.

Процедура BEEPER вызывается командой:

CALL #03B5

Входные параметры:

  • в регистрах HL задаётся высота звука (нота до первой октавы);
  • в регистрах DE — произведение f*t, где:
    • f — частота звука;
    • t — длительность звука.

Обработка маскируемых прерываний вызывается командой RST 8 либо следующим фрагментом кода:

PUSH AF       ;сохранить регистры
PUSH HL
LD HL,(FRAMES)
INC HL
LD (FRAMES),HL
LD A,H
OR L
JR NZ,KEYIN

INC (FRAMES3)
KEYIN
PUSH BC
PUSH DE
CALL #02BF    ;клавиатура
POP DE        ;и изменение
POP BC        ;LAST K
POP AF
RET

Эта подпрограмма вызывается примерно каждые 20 мс. Она полезна при работе с прерываниями из BASIC.

Процедуры обработки загрузки с магнитофонной ленты описывались во многих публикациях. Для напоминания приведу основные сведения.

Вызов:

LOAD  -
SAVE  -
CALL #04C2

Входные параметры:

  • в регистрах DE — длина загружаемого блока;
  • в регистрах IX — начальный адрес блока;
  • в регистре A:
    • 0 — заголовок;
    • 255 — блок данных;
  • флаг C (только для LOAD!):
    • 1 — загрузка в память;
    • 0 — проверка.

Выходные параметры:

  • флаги C и Z:
    • 0 1 — ошибка загрузки;
    • 0 0 — неверный тип файла;
    • 1 1 — загрузка выполнена успешно.

Процедуры выбрал и описал:
WILL

Поделитесь вашим мнением о статье