ПЗУ ZX Spectrum: инициализация компьютера и проверка памяти

ZX Land #01

Описание ПЗУ, часть I

В этом цикле статей мы будем публиковать все важнейшие процедуры, содержащиеся в постоянной памяти нашего компьютера.

В первой части мы опишем основные процедуры, связанные с:

  • инициализацией компьютера;
  • чтением клавиатуры;
  • выводом текста;
  • выводом числовых значений;
  • очисткой экрана.

Первая из этих процедур используется как при обработке команды NEW, так и при инициализации компьютера, начиная с адреса:

11CB NEW
LD A,7
;установка цвета рамки — 7
LD A,3F
LD I,A
;подождать 24 такта!!!

;теперь выполняется проверка памяти:

11DA RAMCHECK
LD H,D
LD L,E
;перенос в регистры HL значения
;RAMTOP для NEW или #FFFF для #0000

11DC RAMFILL
DEC HL
CP H
JR NZ,RAMFILL

11E2 RAMREAD
AND A
SBC HL,DE
ADD HL,DE
INC HL
JR NC,RAMDONE

DEC (HL)
JR Z,RAMDONE
DEC (HL)
JR Z,RAMDONE

11EF RAMDONE
DEC HL
EXX
LD (PRAMT),BC
LD (RASP/PIP),DE
LD (UDG),HL
EXX
;инициализация основных
;системных переменных

INC B
JR Z,RAMSET

;проверка, была ли процедура
;вызвана командой NEW

NONEW
LD (PRAMT),HL
LD DE,3EAF
LD BC,00A8
EX DE,HL
LDDR
EX DE,HL
;копирование в память форм
;букв для графического режима (UDG)

INC HL
LD (UDG),HL
DEC HL

1219 RAMSET
LD (RAMTOP),HL
LD HL,3C00
LD (CHARS),HL
;обновление (установка)
;значения RAMTOP

LD HL,(RAMTOP)
LD (HL),3E
DEC HL
LD SP,HL
;установка значения стека

DEC HL
DEC HL
LD (ERRSP),HL
;адрес обработчика ошибок

Далее компьютер устанавливает другие переменные, необходимые для начала работы, включает прерывания (сканирование клавиатуры, FRAMES) и выводит надпись «Sinclair ...».


Чтение клавиатуры

CALL #028E ;переход к SCANKEY
LD A,D
RET

В результате выполнения перехода по адресу #028E код нажатой клавиши помещается в регистр D и в переменную LAST_K.


Вывод текста

Чтобы вывести текст на экран, нужно открыть канал для процедуры PRINT.

Это делается подпрограммой:

OPEN
RET

Теперь можно печатать текст с помощью команды:

LD A,"знак"

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