docs: справочники по железу Sprinter + правка gfx_scroll_h

- docs/new/ — сводные справочники (архитектура, BIOS, DSS, память,
  графика, акселератор, IRQ, порты, ввод, звук, известные баги);
- docs/Original/ — первоисточники, из которых они собраны (BIOS, Estex
  DSS, мануалы, описание акселератора), + Форум.doc/.docx в reference;
- libbgi/common/gfx_scroll_h.c — обход бага скролла при ширине >256
  (правка автора: шаг банды 255 и продвижение указателей на cw; старый
  вариант с 256 оставлен закомментированным с TODO);
- удалён applications/PoP/roomtest/hang_variants.png — рабочая раскладка
  из разбора позы виса, в репозитории ей не место.

Большие архивы (docs/extra ~568 МБ, docs/sources с вложенными git-репо
~68 МБ) в коммит НЕ включены — см. обсуждение.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-29 18:26:31 +03:00
parent 1214785a56
commit 64ce6339eb
32 changed files with 23762 additions and 3 deletions
Binary file not shown.
+893
View File
@@ -0,0 +1,893 @@
# Функции BIOS v2.12
### Вызов функций BIOS
Вызов функций BIOS осуществляется из ассемблерного кода.
Номер функции задается в регистре C процессора. В остальные регистры,
при необходимости, загружаются входные параметры функции. После исполнения
функции происходит возврат в программу, из которой произошел вызов функции.
Установленный флаг CF (CF=1) означает, что работа функции произошла с
ошибкой. В некоторых регистрах передаются выходные параметры.
Ниже приведены таблицы входных и выходных параметров для каждой функции:
- Функции работы с памятью
- Функции управления 'железом'
- Функции управления окнами и режимами экрана
- Функции вывода текста на экран
- Графические функции
- Функции работы с жесткими дисками и дисководами
При работе функций BIOS необходимо что бы стек находился в области
8000h..0BFFFh, так как часть функций использует переключение страниц
PAGE1 и PAGE3.
Вызов функций BIOS возможен в различных конфигурациях компьютера Sprinter.
Конфигурация Spectrum: вызов функций BIOS осуществляется через 3D13h.
При этом работают и все функции TR-DOS.
Конфигурации Sprinter: вызов функций BIOS осуществляется через RST 18h
при подключенном системном ПЗУ.
Для постоянного подключения системного ПЗУ можно воспользоваться
такой последовательностью команд:
```asm
LD A,0
OUT (07Ch),A
```
После ее исполнения в 0-м окне Z80 будет включено ПЗУ BIOSа и программа
может вызывать функции BIOSа через RST 18h.
Отключение ПЗУ BIOSа из нулевого окна Z80 производится следующей
последовательностью команд:
```asm
LD A,0
OUT (03Ch),A
```
При необходимости, функции BIOSа могут быть вызваны программой, находящейся
в ОЗУ непосредственно в нулевом окне Z80. Для этого надо установить в
адресе 0008h следующий код:
```asm
ADDRESS_0008h:
PUSH AF
LD A,0
OUT (7Ch),A
POP AF
RET
```
После этого BIOS можно вызывать командой RST 8. (Функции TR-DOS, так
же как и в случае RST 18 остаются недоступны.) Вызывая программы таким
образом, через RST 8, следует помнить что адреса 3FFFh..0000h после входа
в BIOS будут содержать код ПЗУ, поэтому, если фунция использует данные в
ОЗУ, они должны находиться в других адресах.
Оптимизация программы для RST 8 недопустима, так как в ПЗУ, для
обратного переключения, стоит такая же программа, только порт 3Ch для
отключения ПЗУ BIOSа.
Вызов функций BIOS в exe-файлах, вызываемых с помощью операционной
системы Estex, производится командой RST 8. Необходимая программа в адресе
0008h уже имеется в блоке кода ОС Estex.
### Функции работы с памятью
**0C0h (192) EMM_FN0 Определение объемов ОЗУ**
Значение регистров на входе:
C=0C0h
Значение регистров на выходе:
HL - общий объем ОЗУ в страницах по 16k
BC - объем свободного ОЗУ в страницах по 16k
**0C1h (193) EMM_FN1 Инициализация распределения памяти**
Стирается вся информация о выделенных ранее блоках ОЗУ.
Блоки с системной информацией и первые 256K ОЗУ объявляются занятыми.
Значение регистров на входе:
C=0C1h
Значение регистров на выходе:
нет
**0C2h (194) EMM_FN2 Выделение блока ОЗУ**
Значение регистров на входе:
C=0C2h
B - число запрашиваемых страниц
Значение регистров на выходе:
CF=0 - нормальное завершение - A - идентификатор блока
CF=1 - ошибка - A=1 - не хватает памяти
**0C3h (195) EMM_FN3 Освободить блок ОЗУ**
Значение регистров на входе:
C=0C3h
A - идентификатор блока
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неправильный идентификатор
идентификатор не всегда отслеживается правильно
**0C4h (196) EMM_FN4 Получить физический номер страницы из блока памяти**
Значение регистров на входе:
C=0C4h
A - идентификатор блока
B - логическая номер страницы в блоке
Значение регистров на выходе:
CF=0 - A - логический номер страницы
CF=1 - ошибка:
A=0 - блок не существует
A=255 - запрашиваемый номер страницы слишком велик
**0C5h (197) EMM_FN5 Получить список физических страниц блока**
Значение регистров на входе:
C=0C5h
A - идентификатор блока
HL - буфер 256 байт для размещения списка страниц
Значение регистров на выходе:
CF=0 - нормальное завершение:
B - число страниц в блоке
HL - тот же адрес буфера, в буфере список физических
страниц по порядку, заканчивающийся байтом 0FFh
CF=1 - неверный идентификатор блока; старая информация в буфере
может быть затерта
**0C6h (198) EMM_FN6 Получение адресов портов окон**
Примечание по использованию функции получения адресов портов окон (0C6h):
>Cледует хотя бы один раз вызвать эти функции и сравнить адреса
>портов с теми, что используются в программе и, если они не совпадают,
>выдать соответствующее предупреждение. В данный момент эти порты
>таковы: PAGE0=82h, PAGE1=0A2h, PAGE2=0C2h, PAGE3=0E2h
Значение регистров на входе:
C=0C6h
A - номер окна процессора - 0,1,2 или 3
Значение регистров на выходе:
CF=0 - нормальное завершение
C - 8-битный адрес порта окна
B - физический номер подключенной в окно страницы
CF=1 - ошибка - неверный номер окна
**0C7h (199) EMM_FN7 Получить номер следующей страницы блока**
Примечание по использованию функции EMM_FN7 (0C7h):
> Информация о распределении памяти хранится в виде RAM Allocation Table,
> похожей на дисковый FAT. Поэтому нахождение физического номера
> следующей страницы по предыдущему физическому номеру происходит
> значительно быстрее, чем поиск по увеличенному на единицу логическому
> номеру.
Значение регистров на входе:
C=0C7h
A - физическая страница
Значение регистров на выходе:
CF=0 - нормальное завершение
A - следуюшая физическая страница блока
A=0FFh - индицирует конец блока
CF=1 - ошибка - страница не принадлежит никакому блоку.
фактически, это означает, что она свободна.
**09Eh (158) EMM_FN8 Слияние блоков**
Значение регистров на входе:
A - идентификатор блока 1
B - идентификатор блока 2
Значение регистров на выходе:
CF=0 - нормальное завершение
A - идентификатор объединенного блока
CF=1 - ошибка - неверный идентификатор блока
**09Dh (157) EMM_FN9 Разделение блока**
Значение регистров на входе:
C=09Dh
A - идентификатор блока
B - новая длина блока
Значение регистров на выходе:
CF=0 - нормальное завершение
A - идентификатор блока результата
B - идентификатор блока остатка
CF=1 - ошибка - неверный идентификатор блока
### Функции управления 'железом'
**0EFh (239) FN_VERSION Выдача информации о версии BIOSа и железа.**
Значение регистров на входе:
C=0EFh
HL - буфер, куда будет помещена ASCII строка с несколькими
полями, номером версии BIOS и названием модели
компьютера. Конец строки отмечен двойным нулем.
Значение регистров на выходе:
CF=0 - нормальное завершение
HL - тот же буфер с записанной строкой.
DE - версия BIOSа
BC - версия железа подробности ниже
A - количество полей в буфере (в данный момент - 2)
Первое поле - версия BIOS.
Второе - название модели компьютера.
CF=1 - ошибка - Очень старая версия,
не имеющая данной функции
**0F2h (242) FN_SICF=0 Установка синхронизации, очистка страницы режима экрана**
Значение регистров на входе:
C=0F2h
A - режим синхронизации
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный номер режима синхронизации
### Функции работы с CMOS данными и Turbo режимом
Комментарий к функциям CMOS (0F5h-0F7h):
> Функции CMOS_RD, CMOS_WR, CMOS_TEST работают всегда. Если в машине нет
> микросхемы CMOS, то эмулируется ее память. Наличие микросхемы
> определяется функцией CMOS_TEST.
**0F5h (245) CMOS_TEST Проверить наличие CMOS**
Значение регистров на входе:
C=0F5h
Значение регистров на выходе:
CF=0 - часы есть
CF=1 - часов нет
**0F6h (246) CMOS_RD Читать из регистра CMOS**
Значение регистров на входе:
C=0F6h
D - номер регистра CMOS
Значение регистров на выходе:
A - считанные данные
CF=0 - часы есть
CF=1 - часов нет
**0F7h (247) CMOS_WR Писать в регистр CMOS**
Значение регистров на входе:
C=0F7h
D - номер регистра CMOS
A - записываемые данные
Значение регистров на выходе:
CF=0 - часы есть
CF=1 - часов нет
**08Fh (143) FN_TURBO Функция управления турбо режимом.**
Комментарий к функции FN_TURBO (08Fh):
Переключение режима турбо может не произойти, если прошивка не
поддерживает это переключение. При этом ошибки не происходит. Так
же, переключение режима TURBO блокируется кнопкой "Turbo" в
режиме Turbo-OFF
Значение регистров на входе:
C=08Fh
A - режим турбо: 2 - off, 3 - on
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный режим турбо
### Функции управления окнами и режимами экрана
**0B0h (176) WIN_OPEN Функция открытия окна.**
Значение регистров на входе:
C=0B0h
IX - описатель окна
E - флаги окна:
бит 0 указывает какую страницу режима включать после
исполнения функции;
бит 4 указывает на какой странице режима открывать окно
Значение регистров на выходе:
CF=0 - нормальное завершение:
A - идентификатор окна
CF=1 - ошибка слишком много окон
**0B1h (177) WIN_CLOSE закрытие окна**
Значение регистров на входе:
C=0B1h
A - идентификатор окна
Значение регистров на выходе:
CF=0 - успешное завершение
CF=1 - ошибка - неверный идентификатор
Окно с номером 0 никогда не закрывается и попытка
закрытия приводит к ошибке
**0B2h (178) WIN_COPY_WIN Копирование данных текстового окна в память (запоминание окна)**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B2h
A - идентификатор глобального окна
H - размер окна в символах по вертикали
L - размер окна в символах по горизонтали
D - вертикальное положение окна в глобальном окне
E - горизонтальное положение окна в глобальном окне
IX - адрес буфера для запоминания данных
адрес буфера указывается для окна 0C000h если адрес
указан с 8000h, номер страницы буфера не действителен
ниже 8000h адрес указывать нельзя
A' - страница буфера для данных окна эта страница должна
принадлежать программе
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B3h (179) WIN_RESTORE_WIN Копирование из памяти в текстовое окно (восстановление окна)**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B2h
A - идентификатор глобального окна
H - размер окна в символах по вертикали
L - размер окна в символах по горизонтали
D - вертикальное положение окна в глобальном окне
E - горизонтальное положение окна в глобальном окне
IX - адрес буфера для запоминания данных
адрес буфера указывается для окна 0C000h если адрес
указан с 8000h, номер страницы буфера не действителен
ниже 8000h адрес указывать нельзя
A' - страница буфера для данных окна эта страница должна
принадлежать программе
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B4h (180) WIN_GET_SYM Взять символ с экрана**
Значение регистров на входе:
C=0B4h
A - идентификатор окна
DE - положение символа в окне:
D - вертикаль, E - горизонталь
Значение регистров на выходе:
CF=0 - нормальное завершение
L - символ, H - атрибут,
B - знакогенератор
CF=1 - ошибка неверный идентификатор окна
**0B5h (181) WIN_PUT_SYM Положить символ на экран**
Значение регистров на входе:
C=0B5h
A - идентификатор окна
DE - положение символа в окне:
D - вертикаль, E - горизонталь
L - символ, H - атрибут символа
B - знакогенератор
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка неверный идентификатор окна
**0B6h (182) WIN_SET_ZG установка знакогенератора**
Значение регистров на входе:
C=0B6h
A - системный номер знакогенератора
DE - указатель на 2Kb блок данных знакогенератора
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка (старая версия, нет функции)
**0B7h (183) WIN_MOVE_WIN Перемещение окна**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B7h
A - идентификатор глобального окна
H - размер локального окна по вертикали в символах
L - размер локального окна по горизонтали в символах
D - положение локального окна по вертикали в символах
E - положение локального окна по горизонтали в символах
IX - новое положение локального окна (подобно DE)
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B8h (184) WIN_GET_ZG Получение знакогенератора**
Значение регистров на входе:
C=0B8h
DE - адрес, куда будет загружено 2kb знакогенератора
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка (старая версия, нет функции)
### Функции вывода текста на экран
**081h (129) LP_PRINT_ALL Печать символов с атрибутом**
На экран выводится строка из B одинаковых символов
Значение регистров на входе:
C=081h
A - символ
E - атрибут
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**082h (131) LP_PRINT_SYM Вывод символов на экран без атрибута**
На экран выводится строка из B одинаковых символов атрибут
остается тот, который был на экране
Значение регистров на входе:
C=082h
A - символ
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**083h (131) LP_PRINT_ATR печать атрибутов**
На экран выводится строка из B одинаковых атрибутов.
Символы не меняются.
Значение регистров на входе:
C=083h
E - атрибут
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**084h (132) LP_SET_PLACE Установка текущего знакоместа в окне**
Позиция печати устанавливается в соответстии с регистром DE
Значение регистров на входе:
C=084h
E - положение символа по горизонтали
D - номер символа по вертикали
Превышение границ приводит не к ошибке, а к переустановке
с начала, за вычетом полного размера окна
Значение регистров на выходе:
CF=0 - всегда
**085h (133) LP_PRINT_LN Вывод строки символов на экран с текущего знакоместа**
Значение регистров на входе:
C=085h
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - длина выводимой строки
Значение регистров на выходе:
CF=0 - всегда
**086h (134) LP_PRINT_LN2 Вывод строки символов на экран без атрибутов**
Значение регистров на входе:
C=086h
HL - адрес строки должен быть между 04000h и 0BFFFh
B - длина выводимой строки
Значение регистров на выходе:
CF=0 - всегда
**087h (135) LP_PRINT_LN3 Вывод строки символов до разделителя**
После разделителя выводятся пробелы, что бы вывести B символов
Значение регистров на входе:
C=087h
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**088h (136) LP_PRINT_LN4 Вывод строки символов до разделителя, без атрибутов**
символы из выводятся на экран, пока не встретится символ равный D,
далее печатаются пробелы, как дополнение строки до B символов.
Атрибуты не изменяются.
Значение регистров на входе:
C=088h
HL - адрес строки должен быть между 04000h и 0BFFFh
B - длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**089h (137) LP_CLS_WIN Очистка экрана**
Выполнение производится выводом пробелов с заданным атрибутом
Значение регистров на входе:
C=089h
DE - положение локального окна
H - размер в символах локального окна по вертикали
L - размер в символах локального окна по горизонтали
B - атрибут очистки
Значение регистров на выходе:
CF=0 - всегда
**08Ah (138) LP_SCROLL_UD Скроллинг части глобального окна вверх/вниз**
Скроллируются полные строки глобального окна
Значение регистров на входе:
C=08Ah
B - тип скроллинга: 1 - вверх; 2 - вниз
D - начальная строка скроллинга
E - число скроллируемых строк
Значение регистров на выходе:
CF=0 - всегда
**08Bh (139) LP_PRINT_LN5 Вывод строки символов на экран до разделителя**
После разделителя вывод останавливается
Значение регистров на входе:
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - максимальная длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**08Ch (140) LP_PRINT_LN6 Вывод строки символов на экран до разделителя без атрибутов**
После разделителя вывод останавливается.
Значение регистров на входе:
C=08Ch
HL - адрес строки должен быть между 04000h и 0BFFFh
B - максимальная длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**08Dh (141) LP_CLS_WIN2 Очистка экрана с указанием символа заполнения**
Значение регистров на входе:
C=08Dh
DE - положение локального окна
H - размер в символах локального окна по вертикали
L - размер в символах локального окна по горизонтали
B - атрибут очистки
A - символ очистки
Значение регистров на выходе:
CF=0 - всегда
**08Eh (142) LP_GET_PLACE Получить текущее положение вывода на экран**
Значение регистров на входе:
C=08Eh
Значение регистров на выходе:
CF=0 - всегда
DE - координаты, в которых будет напечатан
следующий символ:
D - вертикаль, E - горизонталь
### Графические функции
**0A1h (161) PIC_POINT Установить точку**
Значение регистров на входе:
C=0A1h
DE - координата по вертикали (пиксели)
HL - координата по горизонтали (пиксели)
Координаты считаются от верхнего левого угла экрана
A - идентификатор окна
B - цвет точки
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный идентификатор окна
**0A4h (164) PIC_SET_PAL Установка палитры**
Значение регистров на входе:
C=0A4h
HL - данные палитры
E - номер начального цвета
D - количество устанавливаемых цветов
B - маска при установке палитры.
Для нормального режима должнa быть 0FFh
A - номер палитры 0..15; от 8 до 15 - резервные
Значение регистров на выходе:
CF=0 - всегда
**0A6h (166) SET_PAL_INIT Установка внутренней палитры**
Значение регистров на входе:
C=0A6h
A - страница палитры
B - номер палитры:
B=2 - установка спектрумовской палитры
B=1 - установка графической плаитры
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный номер палитры
### Функции работы с жесткими дисками и дисководами
**50h,52h,53h (80,82,83) Зарезервированы**
Значение регистров на входе и на выходе:
нет
**51h (81) DRV_RESET Сброс контроллера и настройка на диск**
Значение регистров на входе:
C=51h
A - номер и тип устройства
бит 7..4 - тип устройства:
#0x - FDD
#6x - RAM-DISK
#8x - HDD
#Cx - CD-ROM
бит 3..0 - номер устройства
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка, нет диска или нет устройства
**54h (84) DRV_VERIFY Проверка секторов**
Проверка внутренняя на совпадение ECC
Значение регистров на входе:
C=54h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество проверяемых секторов
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - проверка с ошибкой
**55h (85) DRV_READ Чтение с устройства**
Значение регистров на входе:
C=55h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество секторов
DE - адрес буфера для данных
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка чтения
HL:IX - номер сектора + кол-во прочитанных секторов
DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
**56h (86) DRV_WRITE Запись на устройства**
Значение регистров на входе:
C=56h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество секторов
DE - адрес буфера данных для записи
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка записи
HL:IX - номер сектора + кол-во прочитанных секторов
DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
**57h (87) DRV_DETECT Определение параметров устройства**
Значение регистров на входе:
C=57h
A - номер и тип устройства (см. выше)
Значение регистров на выходе:
CF=0 - нормальное завершение
A - bit7=0 диск 720Кb
bit7=1 диск 1.44Mb
CF=1 - нет устройства или нет носителя
**58h (88) DRV_GET_PAR Получить параметры носителя**
Значение регистров на входе:
C=58h
A - номер и тип устройства (см. выше)
Значение регистров на выходе:
CF=0 - нормальное завершение
L - число секторов
H - число головок
DE - количество цилиндров
если HL=DE=0FFFFh - устройства нет
IX - размер сектора в байтах
B - доп. параметры для дискет:
бит7 - тип 1.44Mb/720Kb
CF=1 - нет устройства
**59h (89) DRV_SET_PAR Установить параметры носителя**
Значение регистров на входе:
A - номер и тип устройства (см. выше)
L - число секторов
H - число головок
DE - количество цилиндров
IX - размер сектора в байтах
B - доп. параметры для дискет
бит7 - тип 1.44Mb/720Kb
Значение регистров на выходе:
CF=0 - нормальное завершение
**5Ah (90) EXT_VERSION Номер версии дисковой спецификации.**
Значение регистров на входе:
C=5Ah
Значение регистров на выходе:
CF=0 - нормальное завершение
D - версия
E - модификация
CF=1 - ошибка
**5Fh (95) DRV_LIST Список дисковых устройств**
Значение регистров на входе:
C=5Fh
IX - буфер для списка устройств
Значение регистров на выходе:
CF=0 - нормальное завершение
В буфере список дисков в формате:
IX+0 - размер заполненого буфера
IX+1 - кол-во устройств FDD
IX+2 - кол-во устройств HDD
IX+3 - кол-во устройств CD DRIVE
IX+4 - #00 - конец списка, иначе кол-во устройств нового типа
### Примечания и комментарии.
##### *Примечание по использованию функции получения адресов портов окон (0C6h).*
Cледует хотя бы один раз вызвать эти функции и сравнить адреса портов с
теми, что используются в программе и, если они не совпадают, выдать
соответствующее предупреждение. В данный момент эти порты таковы:
PAGE0=82h, PAGE1=0A2h, PAGE2=0C2h, PAGE3=0E2h
##### *Примечание по использованию функции EMM_FN7 (0C7h).*
Информация о распределении памяти хранится в виде RAM Allocation Table,
похожей на дисковый FAT. Поэтому нахождение физического номера следующей
страницы по предыдущему физическому номеру происходит значительно быстрее,
чем поиск по увеличенному на единицу логическому номеру.
##### *Комментарий к функции FN_VERSION (0EFh).*
Значения регистра BC на выходе и соответствующая ему конфигурация
BC=FFFF - Не определено
BC=FFFE - Конфигурация Spectrum, режим Sprinter ZX
BC=FFFD - Конфигурация Sprinter
BC=FFFC - Зарезервировано
BC=FFFB - Зарезервировано
BC=FFFA - Зарезервировано
BC=FFF9 - Зарезервировано
Иные значения BC - новые прошивки.
##### *Комментарий к функциям CMOS (0F5h-0F7h)*
Функции CMOS_RD, CMOS_WR, CMOS_TEST работают всегда. Если в машине нет
микросхемы CMOS, то эмулируется ее память. Наличие микросхемы
определяется функцией CMOS_TEST.
##### *Комментарий к функции FN_TURBO (08Fh)*
Переключение режима турбо может не произойти, если прошивка не
поддерживает это переключение. При этом ошибки не происходит. Так же,
переключение режима TURBO блокируется кнопкой "Turbo" в режиме Turbo-OFF
##### *Комментарий к функциям печати текста.*
Эти функции работают с текущим окном, которым всегда является последнее
открытое окно. К графическому экрану функции печати текста не применимы.
##### *Описатель окна.*
Для открытия окон используется 32-хбайтовый описатель окна (дескриптор),
адрес которого указывается в регистре IX.
IX - 32-хбайтовый описатель окна
(IX+0) - горизонтальный размер окна в знакоместах
(IX+1) - вертикальный размер в знакоместах
(IX+2) - положение окна по горизонтали на экране в знакоместах
(IX+3) - положение окна по вертикали на экране в знакоместах
(IX+4) - режим знакоместа
bit4=1 - text_mode bit4=0 - graf_mode
bit5=0 - 16, bit5=1 - 8 точек в знакоместе
graf_mode bit3..0 - не существенны
bit7..6 - номер палитры
text_mode bit7..6,3..0 - номер знакогенератора
исключение: bit7..6=B"11" - бордер
(IX+5) - дополнительный режим знакоместа
bit0=1 - указывает на включение спектрумовской
адресации экрана
(IX+6) - положение по X в поле графики (по знакоместам)
(IX+7) - положение по Y в поле графики (по знакоместам)
разъяснения о положении в поле графики - ниже
(IX+8..31) - зарезервировано (переменные окна)
в этих байтах должны быть нули
При открытии окна описатель копируется в системную страницу ОЗУ и
программа может не сохранять его. Что бы описатель окна не потерялся,
программа получает идентификатор окна. Он же идентификатор глобального
окна. В функциях запоминания, восстановления, перемещения, а так же
функциях стирания, скроллинга и т.п. идентификатор окна определяет
область экрана, относительно которой производится работа с локальными
окнами. Подразумеваются локальные окна в смысле "окно в окне".
Идентификатор окна определяет глобальное окно, отнoсительно которого
адресуются локальные. В части функций глобальное окно определяется по
умолчанию, как последнее, с которым производились действия с явным
указанием идентификатора.
В данный момент BIOS хранит только один описатель окна - последний,
с которым была произведена функция открытия. Идентификатор окна
выставляется в 0. В дальнейшем планитруется разработка функций со
множеством окон, потому, во избежание неприятностей в будущем, при
работе с окнами, программисту следует запоминать идентификатор окна
и пользоваться этим значением при работе с ним.
Типы стандартных окон:
0 - окно 32x24 в формате ZX Spectrum
1 - текстовое окно 64x24
2 - текстовое окно 40x32
3 - текстовое окно 80x32
4 - окно в формате ZX Spectrum, HL - положение окна на экране в знакоместах
5 - текстовое окно 64x24, HL - положение окна на экране в знакоместах
6 - текстовое окно 40x32, HL - положение окна на экране в знакоместах
7 - текстовое окно 80x32, HL - положение окна на экране в знакоместах
8 - графическое окно 0, HL - положение окна на экране
9 - графическое окно 1, HL - положение окна на экране
Данные палитры должны представлять собой список приблизительно такого вида:
DB blue1,green1,red1,0
DB blue2,green2,red2,0
.....................
DB blueN,greenN,redN,0
N - количество цветов. Значеное равное 0 соответствует 256-ти цветам.
При записи в видео-ОЗУ все данные предварительно проходят функцию AND
со значением регистра маски - B.
Страницы палитры 0..3 соответствуют графическим режимам. Для вывода в
соответствующей палитре нужно задать соответствующее значение bit7..6 в
байте режима знакоместа
Страницы 4..7 соответствуют текстовому режиму и спектрумовскому режиму.
В странице 4 задается цвет PAPER для каждого атрибута. В странице 5
задается цвет INK для каждого атрибута. В странице 6 задается цвет PAPER,
которым он будет моргать в режиме FLASH В странице 7 задается цвет INK,
которым он будет моргать в режиме FLASH. Таким образом, для каждого из
256-ти атрибутов задается четыре цвета если цвета 4,5 совпадают с
цветами 6,7 то режим FLASH оказывается отключенным. Для его включения
в спектрумовском режиме надо поменять местами цвета 6 и 7. Если надо
включить FLASH в режим IBM-CGA, следует установить цвета 6 и 7
одинаковыми и равными цвету 4. По сути режим FLASH всегда включен, и
на экране постоянно меняются цвета PAPER с 4-го на 6-й, а цвета INK с
5 на 7-й. Если эти пары цветов для атрибута знакоместа устанавливаются
одинаковыми, то FLASH в этом месте не виден.
##### *Комментарий к функциям работы с устройствами хранения информации.*
В этих функциях в регистре A обычно задается номер и тип устройства:
бит 0..3 - номер устройства
бит 4..7 - тип устройства:
0 - дисковод
6 - ram-disk
8 - HDD
C - CD-ROM
остальные номера не используются
А так же задаются: старшая часть номера сектора в регисте HL,
младшая часть номера сектора в регистре IX.
@@ -0,0 +1,901 @@
# Функции BIOS v3.00
### Вызов функций BIOS
**Вызов функций BIOS осуществляется из ассемблерного кода.**
Номер функции задается в регистре C процессора. В остальные
регистры, при необходимости, загружаются входные параметры функции.
После исполнения функции происходит возврат в программу, из которой
произошел вызов функции. Установленный флаг CF (CF=1) означает, что
работа функции произошла с ошибкой. В некоторых регистрах передаются
выходные параметры.
Ниже приведены таблицы входных и выходных параметров для каждой функции:
- Функции работы с памятью
- Функции управления 'железом'
- Функции управления окнами и режимами экрана
- Функции вывода текста на экран
- Графические функции
- Функции работы с жесткими дисками и дисководами
При работе функций BIOS необходимо что бы стек находился в области
8000h..0BFFFh, так как часть функций использует переключение страниц
PAGE1 и PAGE3.
Вызов функций BIOS возможен в различных конфигурациях компьютера
Sprinter.
**Конфигурация Spectrum:** вызов функций BIOS осуществляется через
3D13h. При этом работают и все функции TR-DOS.
**Конфигурации Sprinter:** вызов функций BIOS осуществляется через RST
18h при подключенном системном ПЗУ.
Для постоянного подключения системного ПЗУ можно воспользоваться такой
последовательностью команд:
```asm
LD A,0
OUT (07Ch),A
```
После ее исполнения в 0-м окне Z80 будет включено ПЗУ BIOSа и программа
может вызывать функции BIOSа через RST 18h.
Отключение ПЗУ BIOSа из нулевого окна Z80 производится следующей
последовательностью команд:
```asm
LD A,0
OUT (03Ch),A
```
При необходимости, функции BIOSа могут быть вызваны программой,
находящейся в ОЗУ непосредственно в нулевом окне Z80. Для этого надо
установить в адресе 0008h следующий код:
```asm
ADDRESS_0008h:
PUSH AF
LD A,0
OUT (7Ch),A
POP AF
RET
```
После этого BIOS можно вызывать командой RST 8. (Функции TR-DOS, так
же как и в случае RST 18 остаются недоступны.) Вызывая программы таким
образом, через RST 8, следует помнить что адреса 3FFFh..0000h после
входа в BIOS будут содержать код ПЗУ, поэтому, если фунция использует
данные в ОЗУ, они должны находиться в других адресах.
Оптимизация программы для RST 8 недопустима, так как в ПЗУ, для
обратного переключения, стоит такая же программа, только порт 3Ch для
отключения ПЗУ BIOSа.
Вызов функций BIOS в exe-файлах, вызываемых с помощью операционной
системы Estex, производится командой RST 8. Необходимая программа в
адресе 0008h уже имеется в блоке кода ОС Estex.
### Функции работы с памятью
**0C0h (192) EMM_FN0 Определение объемов ОЗУ**
Значение регистров на входе:
C=0C0h
Значение регистров на выходе:
HL - общий объем ОЗУ в страницах по 16k
BC - объем свободного ОЗУ в страницах по 16k
**0C1h (193) EMM_FN1 Инициализация распределения памяти**
Стирается вся информация о выделенных ранее блоках ОЗУ.
Блоки с системной информацией и первые 256K ОЗУ объявляются занятыми.
Значение регистров на входе:
C=0C1h
Значение регистров на выходе:
нет
**0C2h (194) EMM_FN2 Выделение блока ОЗУ**
Значение регистров на входе:
C=0C2h
B - число запрашиваемых страниц
Значение регистров на выходе:
CF=0 - нормальное завершение - A - идентификатор блока
CF=1 - ошибка - A=1 - не хватает памяти
**0C3h (195) EMM_FN3 Освободить блок ОЗУ**
Значение регистров на входе:
C=0C3h
A - идентификатор блока
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неправильный идентификатор
идентификатор не всегда отслеживается правильно
**0C4h (196) EMM_FN4 Получить физический номер страницы из блока памяти**
Значение регистров на входе:
C=0C4h
A - идентификатор блока
B - логическая номер страницы в блоке
Значение регистров на выходе:
CF=0 - A - логический номер страницы
CF=1 - ошибка:
A=0 - блок не существует
A=255 - запрашиваемый номер страницы слишком велик
**0C5h (197) EMM_FN5 Получить список физических страниц блока**
Значение регистров на входе:
C=0C5h
A - идентификатор блока
HL - буфер 256 байт для размещения списка страниц
Значение регистров на выходе:
CF=0 - нормальное завершение:
B - число страниц в блоке
HL - тот же адрес буфера, в буфере список физических
страниц по порядку, заканчивающийся байтом 0FFh
CF=1 - неверный идентификатор блока; старая информация в буфере
может быть затерта
**0C6h (198) EMM_FN6 Получение адресов портов окон**
Примечание по использованию функции получения адресов портов окон (0C6h):
>Cледует хотя бы один раз вызвать эти функции и сравнить адреса
>портов с теми, что используются в программе и, если они не совпадают,
>выдать соответствующее предупреждение. В данный момент эти порты
>таковы: PAGE0=82h, PAGE1=0A2h, PAGE2=0C2h, PAGE3=0E2h
Значение регистров на входе:
C=0C6h
A - номер окна процессора - 0,1,2 или 3
Значение регистров на выходе:
CF=0 - нормальное завершение
C - 8-битный адрес порта окна
B - физический номер подключенной в окно страницы
CF=1 - ошибка - неверный номер окна
**0C7h (199) EMM_FN7 Получить номер следующей страницы блока**
Примечание по использованию функции EMM_FN7 (0C7h):
> Информация о распределении памяти хранится в виде RAM Allocation Table,
> похожей на дисковый FAT. Поэтому нахождение физического номера
> следующей страницы по предыдущему физическому номеру происходит
> значительно быстрее, чем поиск по увеличенному на единицу логическому
> номеру.
Значение регистров на входе:
C=0C7h
A - физическая страница
Значение регистров на выходе:
CF=0 - нормальное завершение
A - следуюшая физическая страница блока
A=0FFh - индицирует конец блока
CF=1 - ошибка - страница не принадлежит никакому блоку.
фактически, это означает, что она свободна.
**09Eh (158) EMM_FN8 Слияние блоков**
Значение регистров на входе:
A - идентификатор блока 1
B - идентификатор блока 2
Значение регистров на выходе:
CF=0 - нормальное завершение
A - идентификатор объединенного блока
CF=1 - ошибка - неверный идентификатор блока
**09Dh (157) EMM_FN9 Разделение блока**
Значение регистров на входе:
C=09Dh
A - идентификатор блока
B - новая длина блока
Значение регистров на выходе:
CF=0 - нормальное завершение
A - идентификатор блока результата
B - идентификатор блока остатка
CF=1 - ошибка - неверный идентификатор блока
### Функции управления 'железом'
**0EFh (239) FN_VERSION Выдача информации о версии BIOSа и железа.**
Значение регистров на входе:
C=0EFh
HL - буфер, куда будет помещена ASCII строка с несколькими
полями, номером версии BIOS и названием модели
компьютера. Конец строки отмечен двойным нулем.
Значение регистров на выходе:
CF=0 - нормальное завершение
HL - тот же буфер с записанной строкой.
DE - версия BIOSа
BC - версия железа подробности ниже
A - количество полей в буфере (в данный момент - 2)
Первое поле - версия BIOS.
Второе - название модели компьютера.
CF=1 - ошибка - Очень старая версия,
не имеющая данной функции
**0F2h (242) FN_SICF=0 Установка синхронизации, очистка страницы режима экрана**
Значение регистров на входе:
C=0F2h
A - режим синхронизации
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный номер режима синхронизации
### Функции работы с CMOS данными и Turbo режимом
Комментарий к функциям CMOS (0F5h-0F7h):
> Функции CMOS_RD, CMOS_WR, CMOS_TEST работают всегда. Если в машине нет
> микросхемы CMOS, то эмулируется ее память. Наличие микросхемы
> определяется функцией CMOS_TEST.
**0F5h (245) CMOS_TEST Проверить наличие CMOS**
Значение регистров на входе:
C=0F5h
Значение регистров на выходе:
CF=0 - часы есть
CF=1 - часов нет
**0F6h (246) CMOS_RD Читать из регистра CMOS**
Значение регистров на входе:
C=0F6h
D - номер регистра CMOS
Значение регистров на выходе:
A - считанные данные
CF=0 - часы есть
CF=1 - часов нет
**0F7h (247) CMOS_WR Писать в регистр CMOS**
Значение регистров на входе:
C=0F7h
D - номер регистра CMOS
A - записываемые данные
Значение регистров на выходе:
CF=0 - часы есть
CF=1 - часов нет
**08Fh (143) FN_TURBO Функция управления турбо режимом.**
Комментарий к функции FN_TURBO (08Fh):
Переключение режима турбо может не произойти, если прошивка не
поддерживает это переключение. При этом ошибки не происходит. Так
же, переключение режима TURBO блокируется кнопкой "Turbo" в
режиме Turbo-OFF
Значение регистров на входе:
C=08Fh
A - режим турбо: 2 - off, 3 - on
A - режим FDD: 12h - 720Kb, 13h - 1.44Mb
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный режим турбо
### Функции управления окнами и режимами экрана
**0B0h (176) WIN_OPEN Функция открытия окна.**
Значение регистров на входе:
C=0B0h
IX - описатель окна
E - флаги окна:
бит 0 указывает какую страницу режима включать после
исполнения функции;
бит 4 указывает на какой странице режима открывать окно
Значение регистров на выходе:
CF=0 - нормальное завершение:
A - идентификатор окна
CF=1 - ошибка слишком много окон
**0B1h (177) WIN_CLOSE закрытие окна**
Значение регистров на входе:
C=0B1h
A - идентификатор окна
Значение регистров на выходе:
CF=0 - успешное завершение
CF=1 - ошибка - неверный идентификатор
Окно с номером 0 никогда не закрывается и попытка
закрытия приводит к ошибке
**0B2h (178) WIN_COPY_WIN Копирование данных текстового окна в память (запоминание окна)**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B2h
A - идентификатор глобального окна
H - размер окна в символах по вертикали
L - размер окна в символах по горизонтали
D - вертикальное положение окна в глобальном окне
E - горизонтальное положение окна в глобальном окне
IX - адрес буфера для запоминания данных
адрес буфера указывается для окна 0C000h если адрес
указан с 8000h, номер страницы буфера не действителен
ниже 8000h адрес указывать нельзя
A' - страница буфера для данных окна эта страница должна
принадлежать программе
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B3h (179) WIN_RESTORE_WIN Копирование из памяти в текстовое окно (восстановление окна)**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B2h
A - идентификатор глобального окна
H - размер окна в символах по вертикали
L - размер окна в символах по горизонтали
D - вертикальное положение окна в глобальном окне
E - горизонтальное положение окна в глобальном окне
IX - адрес буфера для запоминания данных
адрес буфера указывается для окна 0C000h если адрес
указан с 8000h, номер страницы буфера не действителен
ниже 8000h адрес указывать нельзя
A' - страница буфера для данных окна эта страница должна
принадлежать программе
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B4h (180) WIN_GET_SYM Взять символ с экрана**
Значение регистров на входе:
C=0B4h
A - идентификатор окна
DE - положение символа в окне:
D - вертикаль, E - горизонталь
Значение регистров на выходе:
CF=0 - нормальное завершение
L - символ, H - атрибут,
B - знакогенератор
CF=1 - ошибка неверный идентификатор окна
**0B5h (181) WIN_PUT_SYM Положить символ на экран**
Значение регистров на входе:
C=0B5h
A - идентификатор окна
DE - положение символа в окне:
D - вертикаль, E - горизонталь
L - символ, H - атрибут символа
B - знакогенератор
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка неверный идентификатор окна
**0B6h (182) WIN_SET_ZG установка знакогенератора**
Значение регистров на входе:
C=0B6h
A - системный номер знакогенератора
DE - указатель на 2Kb блок данных знакогенератора
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка (старая версия, нет функции)
**0B7h (183) WIN_MOVE_WIN Перемещение окна**
При работе этой функции через RST 18h или RST 8, обязателен запрет
прерываний, так как функция пользуется стеком для ускорения своей работы.
Значение регистров на входе:
C=0B7h
A - идентификатор глобального окна
H - размер локального окна по вертикали в символах
L - размер локального окна по горизонтали в символах
D - положение локального окна по вертикали в символах
E - положение локального окна по горизонтали в символах
IX - новое положение локального окна (подобно DE)
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка - неверный идентификатор окна
**0B8h (184) WIN_GET_ZG Получение знакогенератора**
Значение регистров на входе:
C=0B8h
DE - адрес, куда будет загружено 2kb знакогенератора
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка (старая версия, нет функции)
### Функции вывода текста на экран
**081h (129) LP_PRINT_ALL Печать символов с атрибутом**
На экран выводится строка из B одинаковых символов
Значение регистров на входе:
C=081h
A - символ
E - атрибут
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**082h (131) LP_PRINT_SYM Вывод символов на экран без атрибута**
На экран выводится строка из B одинаковых символов атрибут
остается тот, который был на экране
Значение регистров на входе:
C=082h
A - символ
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**083h (131) LP_PRINT_ATR печать атрибутов**
На экран выводится строка из B одинаковых атрибутов.
Символы не меняются.
Значение регистров на входе:
C=083h
E - атрибут
B - число выводимых символов
регистры HL,IX - сохраняются
Значение регистров на выходе:
CF=0 - всегда
**084h (132) LP_SET_PLACE Установка текущего знакоместа в окне**
Позиция печати устанавливается в соответстии с регистром DE
Значение регистров на входе:
C=084h
E - положение символа по горизонтали
D - номер символа по вертикали
Превышение границ приводит не к ошибке, а к переустановке
с начала, за вычетом полного размера окна
Значение регистров на выходе:
CF=0 - всегда
**085h (133) LP_PRINT_LN Вывод строки символов на экран с текущего знакоместа**
Значение регистров на входе:
C=085h
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - длина выводимой строки
Значение регистров на выходе:
CF=0 - всегда
**086h (134) LP_PRINT_LN2 Вывод строки символов на экран без атрибутов**
Значение регистров на входе:
C=086h
HL - адрес строки должен быть между 04000h и 0BFFFh
B - длина выводимой строки
Значение регистров на выходе:
CF=0 - всегда
**087h (135) LP_PRINT_LN3 Вывод строки символов до разделителя**
После разделителя выводятся пробелы, что бы вывести B символов
Значение регистров на входе:
C=087h
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**088h (136) LP_PRINT_LN4 Вывод строки символов до разделителя, без атрибутов**
символы из выводятся на экран, пока не встретится символ равный D,
далее печатаются пробелы, как дополнение строки до B символов.
Атрибуты не изменяются.
Значение регистров на входе:
C=088h
HL - адрес строки должен быть между 04000h и 0BFFFh
B - длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**089h (137) LP_CLS_WIN Очистка экрана**
Выполнение производится выводом пробелов с заданным атрибутом
Значение регистров на входе:
C=089h
DE - положение локального окна
H - размер в символах локального окна по вертикали
L - размер в символах локального окна по горизонтали
B - атрибут очистки
Значение регистров на выходе:
CF=0 - всегда
**08Ah (138) LP_SCROLL_UD Скроллинг части глобального окна вверх/вниз**
Скроллируются полные строки глобального окна
Значение регистров на входе:
C=08Ah
B - тип скроллинга: 1 - вверх; 2 - вниз
D - начальная строка скроллинга
E - число скроллируемых строк
Значение регистров на выходе:
CF=0 - всегда
**08Bh (139) LP_PRINT_LN5 Вывод строки символов на экран до разделителя**
После разделителя вывод останавливается
Значение регистров на входе:
HL - адрес строки должен быть между 04000h и 0BFFFh
E - атрибут, с которым будет выведена строка
B - максимальная длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**08Ch (140) LP_PRINT_LN6 Вывод строки символов на экран до разделителя без атрибутов**
После разделителя вывод останавливается.
Значение регистров на входе:
C=08Ch
HL - адрес строки должен быть между 04000h и 0BFFFh
B - максимальная длина выводимой строки
D - символ-разделитель, указывающий конец строки
Значение регистров на выходе:
CF=0 - всегда
**08Dh (141) LP_CLS_WIN2 Очистка экрана с указанием символа заполнения**
Значение регистров на входе:
C=08Dh
DE - положение локального окна
H - размер в символах локального окна по вертикали
L - размер в символах локального окна по горизонтали
B - атрибут очистки
A - символ очистки
Значение регистров на выходе:
CF=0 - всегда
**08Eh (142) LP_GET_PLACE Получить текущее положение вывода на экран**
Значение регистров на входе:
C=08Eh
Значение регистров на выходе:
CF=0 - всегда
DE - координаты, в которых будет напечатан
следующий символ:
D - вертикаль, E - горизонталь
### Графические функции
**0A1h (161) PIC_POINT Установить точку**
Значение регистров на входе:
C=0A1h
DE - координата по вертикали (пиксели)
HL - координата по горизонтали (пиксели)
Координаты считаются от верхнего левого угла экрана
A - идентификатор окна
B - цвет точки
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный идентификатор окна
**0A4h (164) PIC_SET_PAL Установка палитры**
Значение регистров на входе:
C=0A4h
HL - данные палитры
E - номер начального цвета
D - количество устанавливаемых цветов
B - маска при установке палитры.
Для нормального режима должнa быть 0FFh
A -
0..3 биты - значения 0..7 - номер палитры
- значения 8..15 - зарезервированы
4..6 биты - зарезервированы (установить в 0)
7 бит -
- значение 0 - установить
- значение 1 - загрузить палитру в память
Значение регистров на выходе:
CF=0 - всегда
**0A6h (166) SET_PAL_INIT Установка внутренней палитры**
Значение регистров на входе:
C=0A6h
A - страница палитры
B - номер палитры:
B=3 - установка текстовой палитры CGA
B=2 - установка спектрумовской палитры
B=1 - установка графической плаитры
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - неверный номер палитры
### Функции работы с жесткими дисками и дисководами
**50h,52h,53h (80,82,83) Зарезервированы**
Значение регистров на входе и на выходе:
нет
**51h (81) DRV_RESET Сброс контроллера и настройка на диск**
Значение регистров на входе:
C=51h
A - номер и тип устройства
бит 7..4 - тип устройства:
#0x - FDD
#6x - RAM-DISK
#8x - HDD
#Cx - CD-ROM
бит 3..0 - номер устройства
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка, нет диска или нет устройства
**54h (84) DRV_VERIFY Проверка секторов**
Проверка внутренняя на совпадение ECC
Значение регистров на входе:
C=54h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество проверяемых секторов
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - проверка с ошибкой
**55h (85) DRV_READ Чтение с устройства**
Значение регистров на входе:
C=55h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество секторов
DE - адрес буфера для данных
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка чтения
HL:IX - номер сектора + кол-во прочитанных секторов
DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
**56h (86) DRV_WRITE Запись на устройства**
Значение регистров на входе:
C=56h
A - номер и тип устройства (см. выше)
HL:IX - номер сектора (IX - младшая часть номера сектора)
B - количество секторов
DE - адрес буфера данных для записи
Значение регистров на выходе:
CF=0 - нормальное завершение
CF=1 - ошибка записи
HL:IX - номер сектора + кол-во прочитанных секторов
DE - адрес буфера для данных + (кол-во прочитанных секторов * размер сектора)
**57h (87) DRV_DETECT Определение параметров устройства**
Значение регистров на входе:
C=57h
A - номер и тип устройства (см. выше)
Значение регистров на выходе:
CF=0 - нормальное завершение
A - bit7=0 диск 720Кb
bit7=1 диск 1.44Mb
CF=1 - нет устройства или нет носителя
**58h (88) DRV_GET_PAR Получить параметры носителя**
Значение регистров на входе:
C=58h
A - номер и тип устройства (см. выше)
Значение регистров на выходе:
CF=0 - нормальное завершение
L - число секторов
H - число головок
DE - количество цилиндров
если HL=DE=0FFFFh - устройства нет
IX - размер сектора в байтах
B - доп. параметры для дискет:
бит7 - тип 1.44Mb/720Kb
CF=1 - нет устройства
**59h (89) DRV_SET_PAR Установить параметры носителя**
Значение регистров на входе:
A - номер и тип устройства (см. выше)
L - число секторов
H - число головок
DE - количество цилиндров
IX - размер сектора в байтах
B - доп. параметры для дискет
бит7 - тип 1.44Mb/720Kb
Значение регистров на выходе:
CF=0 - нормальное завершение
**5Ah (90) EXT_VERSION Номер версии дисковой спецификации.**
Значение регистров на входе:
C=5Ah
Значение регистров на выходе:
CF=0 - нормальное завершение
D - версия
E - модификация
CF=1 - ошибка
**5Fh (95) DRV_LIST Список дисковых устройств**
Значение регистров на входе:
C=5Fh
IX - буфер для списка устройств
Значение регистров на выходе:
CF=0 - нормальное завершение
В буфере список дисков в формате:
IX+0 - размер заполненого буфера
IX+1 - кол-во устройств FDD
IX+2 - кол-во устройств HDD
IX+3 - кол-во устройств CD DRIVE
IX+4 - #00 - конец списка, иначе кол-во устройств нового типа
### Примечания и комментарии.
##### *Примечание по использованию функции получения адресов портов окон (0C6h).*
Cледует хотя бы один раз вызвать эти функции и сравнить адреса портов с
теми, что используются в программе и, если они не совпадают, выдать
соответствующее предупреждение. В данный момент эти порты таковы:
PAGE0=82h, PAGE1=0A2h, PAGE2=0C2h, PAGE3=0E2h
##### *Примечание по использованию функции EMM_FN7 (0C7h).*
Информация о распределении памяти хранится в виде RAM Allocation Table,
похожей на дисковый FAT. Поэтому нахождение физического номера следующей
страницы по предыдущему физическому номеру происходит значительно быстрее,
чем поиск по увеличенному на единицу логическому номеру.
##### *Комментарий к функции FN_VERSION (0EFh).*
Значения регистра BC на выходе и соответствующая ему конфигурация
BC=FFFF - Не определено
BC=FFFE - Конфигурация Spectrum, режим Sprinter ZX
BC=FFFD - Конфигурация Sprinter
BC=FFFC - Зарезервировано
BC=FFFB - Зарезервировано
BC=FFFA - Зарезервировано
BC=FFF9 - Зарезервировано
Иные значения BC - новые прошивки.
##### *Комментарий к функциям CMOS (0F5h-0F7h)*
Функции CMOS_RD, CMOS_WR, CMOS_TEST работают всегда. Если в машине нет
микросхемы CMOS, то эмулируется ее память. Наличие микросхемы
определяется функцией CMOS_TEST.
##### *Комментарий к функции FN_TURBO (08Fh)*
Переключение режима турбо может не произойти, если прошивка не
поддерживает это переключение. При этом ошибки не происходит. Так же,
переключение режима TURBO блокируется кнопкой "Turbo" в режиме Turbo-OFF
##### *Комментарий к функциям печати текста.*
Эти функции работают с текущим окном, которым всегда является последнее
открытое окно. К графическому экрану функции печати текста не применимы.
##### *Описатель окна.*
Для открытия окон используется 32-хбайтовый описатель окна (дескриптор),
адрес которого указывается в регистре IX.
IX - 32-хбайтовый описатель окна
(IX+0) - горизонтальный размер окна в знакоместах
(IX+1) - вертикальный размер в знакоместах
(IX+2) - положение окна по горизонтали на экране в знакоместах
(IX+3) - положение окна по вертикали на экране в знакоместах
(IX+4) - режим знакоместа
bit4=1 - text_mode bit4=0 - graf_mode
bit5=0 - 16, bit5=1 - 8 точек в знакоместе
graf_mode bit3..0 - не существенны
bit7..6 - номер палитры
text_mode bit7..6,3..0 - номер знакогенератора
исключение: bit7..6=B"11" - бордер
(IX+5) - дополнительный режим знакоместа
bit0=1 - указывает на включение спектрумовской
адресации экрана
(IX+6) - положение по X в поле графики (по знакоместам)
(IX+7) - положение по Y в поле графики (по знакоместам)
разъяснения о положении в поле графики - ниже
(IX+8..31) - зарезервировано (переменные окна)
в этих байтах должны быть нули
При открытии окна описатель копируется в системную страницу ОЗУ и
программа может не сохранять его. Что бы описатель окна не потерялся,
программа получает идентификатор окна. Он же идентификатор глобального
окна. В функциях запоминания, восстановления, перемещения, а так же
функциях стирания, скроллинга и т.п. идентификатор окна определяет
область экрана, относительно которой производится работа с локальными
окнами. Подразумеваются локальные окна в смысле "окно в окне".
Идентификатор окна определяет глобальное окно, отнoсительно которого
адресуются локальные. В части функций глобальное окно определяется по
умолчанию, как последнее, с которым производились действия с явным
указанием идентификатора.
В данный момент BIOS хранит только один описатель окна - последний,
с которым была произведена функция открытия. Идентификатор окна
выставляется в 0. В дальнейшем планитруется разработка функций со
множеством окон, потому, во избежание неприятностей в будущем, при
работе с окнами, программисту следует запоминать идентификатор окна
и пользоваться этим значением при работе с ним.
Типы стандартных окон:
0 - окно 32x24 в формате ZX Spectrum
1 - текстовое окно 64x24
2 - текстовое окно 40x32
3 - текстовое окно 80x32
4 - окно в формате ZX Spectrum, HL - положение окна на экране в знакоместах
5 - текстовое окно 64x24, HL - положение окна на экране в знакоместах
6 - текстовое окно 40x32, HL - положение окна на экране в знакоместах
7 - текстовое окно 80x32, HL - положение окна на экране в знакоместах
8 - графическое окно 0, HL - положение окна на экране
9 - графическое окно 1, HL - положение окна на экране
Данные палитры должны представлять собой список приблизительно такого вида:
DB blue1,green1,red1,0
DB blue2,green2,red2,0
.....................
DB blueN,greenN,redN,0
N - количество цветов. Значеное равное 0 соответствует 256-ти цветам.
При записи в видео-ОЗУ все данные предварительно проходят функцию AND
со значением регистра маски - B.
Страницы палитры 0..3 соответствуют графическим режимам. Для вывода в
соответствующей палитре нужно задать соответствующее значение bit7..6 в
байте режима знакоместа
Страницы 4..7 соответствуют текстовому режиму и спектрумовскому режиму.
В странице 4 задается цвет PAPER для каждого атрибута. В странице 5
задается цвет INK для каждого атрибута. В странице 6 задается цвет PAPER,
которым он будет моргать в режиме FLASH В странице 7 задается цвет INK,
которым он будет моргать в режиме FLASH. Таким образом, для каждого из
256-ти атрибутов задается четыре цвета если цвета 4,5 совпадают с
цветами 6,7 то режим FLASH оказывается отключенным. Для его включения
в спектрумовском режиме надо поменять местами цвета 6 и 7. Если надо
включить FLASH в режим IBM-CGA, следует установить цвета 6 и 7
одинаковыми и равными цвету 4. По сути режим FLASH всегда включен, и
на экране постоянно меняются цвета PAPER с 4-го на 6-й, а цвета INK с
5 на 7-й. Если эти пары цветов для атрибута знакоместа устанавливаются
одинаковыми, то FLASH в этом месте не виден.
##### *Комментарий к функциям работы с устройствами хранения информации.*
В этих функциях в регистре A обычно задается номер и тип устройства:
бит 0..3 - номер устройства
бит 4..7 - тип устройства:
0 - дисковод
6 - ram-disk
8 - HDD
C - CD-ROM
остальные номера не используются
Binary file not shown.
+155
View File
@@ -0,0 +1,155 @@
Estex: Disk SubSystem (DSS) Programming Guide
Table of Contents
1. Introducing
2. Identification of system functions
3. Disk devices functions
1. Introducing
This document contains the list of functions and concepts of
interaction with a disk subsystem.
DSS is a collection of very useful functions that reside in
DSS itself, ready for use by any your programs. These functions
are stored in library SYSTEM.DOS and allow management of files,
memory allocation, loading and execution of the programs.
File specification
The file specification is a string, containing a names of disk,
directories separated by a symbol "\" and name of file. The names
of disk drive and directories can be discard.
for example:
C:\TEXT\DOC\text.doc
A:file.txt
\TEXT\info.txt
The DSS used chars with colon suffix as names of disk devices
(A:, B:, C: etc.) The name of disk can be written down before
filename for specified disk there it placed.
For example: command
DIR C:DATFILE
searches for DATFILE in the current directory of disk C:.
When disk name not specified DSS used current disk. At start
DSS, the current disk is a disk whence was loaded DSS.
The filenames consist of two parts. The first part contain 8
chars of file name. The second part is not necessary and contain
3 chars of file type (also known as extentsion). At the writing
of filename, both parts are separated by char point.
For example: the names "NAME" and "NAME." is specified same file.
In the name don't allows symbols with codes less 32 and chars
. " / \ [ ] : | < > + = ; ,
As the subdirectories files too, their names are formed by
same way. The name of root directory always "\". And each
subdirectories contain two items with names "." and "..". The
name "." specified a current directory and name ".." specified
name of parent(uplevel) directory.
Some console commands and DSS functions allow to use global
symbols ? and * which can be used for filename templates.
The symbol ? means that any one char of filename. The
symbol * means that it char can be replaced by any symbols.
For example:
*.txt - means, all files with type "txt"
a??.* - means, files which contain three or less symbols and
first symbol is "a"
dc*.exe - means, files with type "exe" and began "dc"
File attributes
The each bit of byte attributes specified various attribute.
And it can be changed by DSS function.
bit 0 - Read only
bit 1 - Hidden
bit 2 - System
bit 3 - Volume label
bit 4 - Directory
bit 5 - Archive
bit 6 - Reserved
bit 7 - Reserved
Attribute "read only". When value is 1, file can be read,
but can't be written or deleted.
Attribute "hidden". When value is 1, DSS can't manipulate
with this file.
Attribute "system". Specified system file.
Attribute "volume label". In old version of MSDOS used for
specified volume laben, now it can be used for long filenames.
And must be 0 for compatibles.
Attribute "directory". When value is 1, means that this
file is directory.
Attribute "archive". This bite sets in 1 when DSS writing
in this file. It can be used in backup utilities for detect
changed files.
File handle
When any file are opened, DSS build File Control Block in
DSS working areas.
The Handle (and assigned file) identified by number which
returned DSS to program after file opening and used it in all
further DSS calls. In other words, when file is opening, the
program informs DSS his name and has taken back file handle.
Which used in further file operations.
All necessary information for working with file are placed
in DSS working areas.
2. Identification of system functions
00h (00) VERSION (Version of DSS)
input:
C - 00h
output:
D - version number
E - modification
The function return version number of DSS.
3. Disk devices functions
01h (01) CHDISK (Change current disk)
input:
A - disk number (0-A,1-B...)
C - 01h
output:
A - error code, if CF=1
A - number of disks, if CF=0
The function changes current disk device.
02h (02) CURDISK (Current disk number)
input:
C - 02h
output:
A - current disk number (0-A,1-B...)
The function returns number of current disk device.
03h (03) DSKINFO (Disk information)
input:
A - disk number (0-A,1-B...0FFh-current)
C - 03h
output:
A - error code, if CF=1
A - sectors per cluster, if CF=0
HL - clusters per disk
DE - free clusters
BC - bytes per sector
The function returns information about disk device
(capacity and free space).
for example:
LD C,03h ;Function DSKINFO
LD A,0FFh ;Information about current disk
RST 10h ;Execution of function
LD A,D ;There is a free
OR E ;space?
JR Z,NO_SPACE ;No, the disk is completely filled
09h (09) BOOTDSK (Number of boot disk)
input:
C - 09h
B = 0
output:
A - number of boot disk (0-A,1-B...)
The function returns number of boot disk device whence was loaded DSS.
+126
View File
@@ -0,0 +1,126 @@
Estex: Дисковая подсистема (DSS) – Обзор
1. Введение
2. Загрузка подсистемы
3. Системная консоль
4. Файловая система
1. Введение
Estex - операционная система компьютера Sprinter, включающая
в себя различные модули. Данный документ описывает модуль дисковой
подсистемы.
В DSS используется та же самая файловая система, как и в
MS-DOS FAT16 и полностью с ней совместима.
2. Загрузка подсистемы
После включения питания или сброса компьютера, BIOS считывает
первичный загрузчик с 1-го сектора загрузочного диска.
Если загрузка происходит с HDD или дискеты, то сначала загрузочный
сектор считывается в память и ему передается управление по загрузке
модуля дисковой подсистемы SYSTEM.DOS.
Затем выполняются следующие действия:
• инициализация дисковой подсистемы и вывод сообщения "Starting DOS..."
• загрузка системной консоли SYSTEM.EXE
• выполнение команд указанных в файле SYSTEM.BAT
Обычно файл SYSTEM.BAT содержит путь к программе файловой навигации
пользователя или другому часто используемому приложения.
Например "c:\fn\fn.exe".
Если во время загрузки вы хотите пропустить выполнение SYSTEM.BAT.
То вам следует нажать клавишу "SHIFT", как только появиться
сообщение "Starting DOS..." и удерживать пока не появится приглашение
консоли ("C:\>").
3. Системная консоль
В DSS многие задачи могут быть выполнены через интерфейс командной
строки называемой системной консолью. Основная задача консоли ввод
команд и их исполнение. Также она имеет ряд функций, которые выполняют
такие действия как управление файлами, перемещение по файловой структуре
каталогов, редактирование командной строки и переменных среды.
Системная консоль позволяет пользователю взаимодействовать с
операционной системой. Для DOS системная консоль это SYSTEM.EXE. Если вы
видите на экране приглашение командной строки (A:\> или C:\>), то это
означает что SYSTEM.EXE загружен и активизирован. Когда вы вводите
командную строку, командный процессор интерпретирует команду и выполняет
необходимые действия.
На сегодняшний день в консоли доступны следующие команды:
CD Displays the name of or changes the current directory.
CHDIR Displays the name of or changes the current directory.
CLS Clears the screen.
DATE Displays or sets the date.
DEL Deletes one or more files.
DIR Displays a list of files and subdirectories in a directory.
ECHO Displays messages, or turns command echoing on or off.
ERASE Deletes one or more files.
EXIT Quits the SYSTEM.EXE program (command interpreter).
HELP Provides Help information for console commands.
MD Creates a directory.
MKDIR Creates a directory.
PAUSE Suspends processing of a batch file and displays a message.
RD Removes a directory.
REM Records comments (remarks) in batch files or SYSTEM.BAT.
REN Renames a file or files.
RENAME Renames a file or files.
RMDIR Removes a directory.
TIME Displays or sets the system time.
VER Displays the System version.
4. Файловая система
Сейчас, в качестве файловой системы Estex использует FAT12 и FAT16.
С помощью файловой системы FAT (File Allocation Table) организуются
данные на винчестере и дискетах.
Для указания спецификации файла используется следующая форма:
[drive:][directory\]filename[.ext]
Файловая спецификация - это строка символов содержащая наименования
диска, директорий отделенных символом "\" и имя файла. Имена диска и
директории могут быть опущены, если требуемый файл расположен в текущей
директории.
Например:
C:\TEXT\DOC\text.doc
A:file.txt
\TEXT\info.txt
В DSS в качестве имен дисковых устройств используются буквы с
последующим символом двоеточия (A:, B:, C: и.т.д.) Имя диска может быть
набрано перед именем файла для указания диска, на котором он расположен.
Например:
команда
DIR C:TESTFILE
ищет TESTFILE в текущей директории диска C:.
Если имя диска не указанно используется текущий диск. После запуска DSS,
текущим диском является диск, с которого была загружена DSS.
Имена файлов состоят из двух частей. Первая часть может содержать
8 букв, цифр или следующие специальные символы:
$ % ' _ @ { } ~ ` ! # ( ).
Вторая часть не является обязательной и содержит любую комбинацию из трех
букв, цифр или специальных символов с предшествующей точкой (.).
Например имена "NAME" и "NAME." указывают на одинаковый файл.
В имени файла не допускаются символы с кодом меньше 32, а также символы
. " / \ [ ] : | < > + = ; ,
Поскольку директории также являются файлами их имена образуются по
тем же правилам.
Имя корневой директории всегда "\". И каждая поддиректория содержит
два элемента с именами "." and "..". Имя "." указывает на текущую
директорию, а имя ".." указывает на родительную (на уровень выше)
директорию.
Некоторые команды и функции DSS позволяют использовать глобальные
символы * и ? которые могут использоваться для задания шаблона имени
файла.
Символ ? означает любой один символ в имени файла.
Символ * означает, что он может быть заменен на любое количество
любых символов.
for example:
*.txt - означает, все файлы с типом "txt"
a??.* - означает, файлы содержащие три и менее символов и первый символ "a"
dc*.exe - означает, файлы с типом "exe" и начинающиеся на "dc"
В именах файлов не делается различий между заглавными и прописными
символами.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,97 @@
Акселератор компьютера Sprinter.
Акселератор предназначен для ускорения операций по пересылке блоков данных в ОЗУ и видео-ОЗУ.
Акселератор позволяет:
- быстро заполнять горизонтальную или вертикальную линию длиной до 256 точек одним цветом (в режиме 640x256 - одинарную/двойную горизонтальную линию длиной до 512 точек)
- быстро копировать горизонтальную или вертикальную линию длиной до 256 точек (в режиме 640x256 - горизонтальную линию до 512 точек)
- проводить быстрые операции AND, OR, XOR с блоками памяти.
Акселератор не может работать с блоками данных ПЗУ и Быстрого-ОЗУ.
ОЗУ акселератора является частью внутреннего ОЗУ ППЛМ.
Операции по пересылке данных производятся путем записи блока данных в это
внутреннее ОЗУ, а затем копировании его в нужное место ОЗУ из ОЗУ акселератора.
Блок данных, записываемый в ОЗУ акселератора может иметь различную
длинну из диапазона 1..256 байт.
После одной записи копирование может производиться несколько раз и, таким
образом, можно производить заполнение экрана текстурами.
Для заполнения экрана одним цветом используется другой режим
акселератора. В нем вместо копируемого блока данных из внутреннего ОЗУ
производится запись данных с шины процессора, которые в этот момент не
изменяются.
Управление акселератором производится непосредственно из программы.
Для этого изпользуются команды процессора, которые, фактически, являются
операциями типа NOP.
LD B,B - выключить акселетарор.
LD D,D - включить акселератор в режим приема байта размера блока
далее следует команда типа LD A,dat, где dat и будет новым
размером блока. Если размер блока был установлен ранее,
его можно не устанавливать.
LD C,C - Операция Fill - заполнение одним байтом. Последующая
команда типа LD (HL),A приведет к заполнению указанного
ранее количества байт значением A
LD E,E - Операция Fill для графического экрана - заполнение
вертикальных линий.
LD H,H - rezerved
LD L,L - копирование блока. Последующая команда типа LD A,(HL)
приведет к заполнению ОЗУ акселератора данными из адреса (HL),
а команда типа LD (DE),A приведет к перезаписи данных из ОЗУ
акселератора в ОЗУ или видео-ОЗУ.
LD A,A - копирование блока для графического экрана подобна команде
LD L,L, но работает с вертикальными линиями экрана.
Пример использования акселератора:
; Считаем, что экранная страница уже открыта по адресу #C000
LD HL,#C040 ; адрес начала линии первого экрана
LD DE,#C180 ; адрес начала линии второго экрана
LD BC,#140 ; длина экрана по горизонтали
DI ; запретить прерывания для работы с акселератором
LD D,D ; включить акселератор на установку размера блока
LD A,0 ; установить размер блока - 256 байт
LD A,A ; установить акселератор на копирование
; вертикальных линий.
LDIR ; копировать
LD B,B ; выключить акселератор
EI ; включить прерывания
Эта часть программы произведет копирование всего содержимого первого экрана на другой.
Время исполения составляет примерно 26 милисекунд.
Дополнительные функции акселератора (AND, OR, XOR) работают таким же образом.
Для выполнения логических функций используются команды XOR (HL); OR (HL); AND (HL).
Пример кодирования блока в 256 байт.
LD HL,ADRES_1
LD DE,XOR_DAT
DI
LD D,D
LD A,0 ; число байт, которые надо закодировать
LD L,L
LD A,(DE) ; взять блок данных в ОЗУ акселератора
XOR (HL) ; произвести операцию XOR с данными акселератора
LD (HL),A ; запомнить в ОЗУ результат операции
LD B,B
EI
Скорость работы акселератора ограничивается только физической
скоростью работы основного ОЗУ. Определить примерное время работы команды с
акселератором можно по такой формуле:
Время работы = время работы команды без акселератора + время работы
акселератора
Время работы акселератора = число пересылаемых байт /7 микросекунд
Во время работы акселератора необходимо отключать прерывания, так как в этот момент
изменяется система команд процессора и программа на прерывании не сможет работать корректно.
@@ -0,0 +1,635 @@
ÜÜÜÜÜÜ
ÜÛ°°°°°°
Û°° Û°°
Û°°ÜÜÜÛ°°
Û°°°°°°°°
Û°° Û°°
Û°° Û°° àå¨â¥ªâãà  ª®¬¯ìîâ¥à  Sprinter.
ß°° ß°°
‚¢¥¤¥­¨¥.
„ ­­®¥ ®¯¨á ­¨¥ ¯à¥¤¯®« £ ¥â ­ «¨ç¨¥ ®¯à¥¤¥«¥­­ëå §­ ­¨© ç¨â â¥«ï,
  ¨¬¥­­® §­ ­¨¥  àå¨â¥ªâãàë ª®¬¯ìîâ¥à  ZX-Spectrum ¨ ¨å à §­®¢¨¤­®á⥩, ¢
ç áâ­®á⨠Pentagon-128 ¨ Scorpion-256,   â ª ¦¥ §­ ­¨¥ ï§ëª  BASIC ¨
­¥ª®â®à®¥ §­ ª®¬á⢮ á ï§ëª®¬  áᥬ¡«¥à  Z80.
‡¤¥áì ï ¡ã¤ã ­ §ë¢ âì ª®­ä¨£ãà æ¨¥© ¬ è¨­ë - ª®­ªà¥â­ãî ॠ«¨§ æ¨î
ª®­ªà¥â­®© áå¥¬ë ¢ ¯¥à¥¯à®£à ¬¬¨à㥬®© «®£¨ç¥áª®© ¬¨ªà®á奬¥ (‹Œ).
â® ®§­ ç ¥â, çâ® ¬ è¨­  ¨¬¥¥â ¬­®¦¥á⢮ ª®­ä¨£ãà æ¨©, ª ¦¤ ï ¨§ ª®â®àëå
¨¬¥¥â ᢮î á奬ã.
Ÿ â ª ¦¥ ¨á¯®«ì§ãî ¯®­ï⨥ Š˜-އ“. â® ­¥ Š˜ ¢ ä®à¬ «ì­®¬
á¬ëá«¥,   ¡ëáâ஥ އ“, ¢ ª®â®à®¬ ¯à®æ¥áá®à ¬®¦¥â à ¡®â âì ­  ¢ë᮪®©
ç áâ®â¥ ¡¥§ ®¦¨¤ ­¨ï. Š˜-¥¬ íâ® Ž‡“ ­ §ë¢ ¥âáï ⮫쪮 ¯® âà ¤¨æ¨¨,
¯®¤®¡­® Š˜-ã ­  Š537“10 ¢ ª®¬¯ìîâ¥à å Pentagon-128.
Šà âª¨¥ ¤ ­­ë¥ ª®¬¯ìîâ¥à  Sprinter.
p®æ¥áá®p . . . . . . . . . . . Z84C15
’ ªâ®¢ ï ç áâ®â  . . . . 21MHz/3.5MHz
އ“ . . . . . . . . . . . . . . 4096Kb
Š˜ އ“ . . . . . . . . . . . . . 64Kb
‡“ . . . . . . . . . . . . . . .128Kb
‚¨¤¥®-އ“ . . . . . . . . . 256Kb(512)
Š®­âp®««¥p ¤¨áª®¢ . . . . . Šp1818‚ƒ93
®¤¤¥p¦ª  1.44Mb ä®p¬ â  . . 3.5"¤¨áª 
Š®­âp®««¥p ¢¨­ç¥áâ¥p  . . . . . IDE/AT
Š®­âp®««¥p ª« ¢¨ âãpë . . . 101key/AT
Š®­âp®««¥p ¬ëè¨ . . . . . . . MS-Mouse
„¢  á«®â  . . . . . . . áâ ­¤ pâ ISA-8
†¥«¥§­ ï í¬ã«ïæ¨ï AY-3-8910 áâ¥à¥®-OUT
COVOX . . . . . . . . . 8bit x 4chanel
‚¨¤¥®-p¥¦¨¬ë: . . . Spectrum standart
GRAF 320x256x256,640x256x16, TXT 80x32
‚ë室 ¢¨¤¥® ­  TV ¨«¨ CGA ¬®­¨â®p, RGB
’¥å­¨ç¥áª ï ॠ«¨§ æ¨ï.
Ÿ¤à®¬ ¬ è¨­ë ïîâáï ¯à®æ¥áá®à Z84C15 ¨ ‹Œ EPF10K10QC208.
Šà®¬¥ ­¨å ­  ¯« â¥ ¯à¨áãâáâ¢ãîâ ¬¨ªà®á奬a ‡“, 72å-¯¨­®¢ë© SIMM
­  4Mb, 256Kb ¢¨¤¥®-އ“, 64Kb Š˜-އ“, á奬  ª®­â஫«¥à  ¤¨áª®¢®¤  ­ 
ˆ‘ Š1818‚ƒ93, ¡ãä¥àë ¤«ï ¯®¤ª«î祭¨ï ¤¦®©á⨪ , ¬ £­¨â®ä®­ , ¯à¨­â¥à ,
ª« ¢¨ âãàë, ¤¨áª®¢®¤®¢, ¢¨­ç¥áâ¥à , ¬ëè¨, ¡ãä¥à­ë¥ ¬¨ªà®á奬ë 設ë ISA-8
¨ ¥é¥ ®¤­  ‹Œ ä¨à¬ë ALTERA - EPM7032LC44. â  ‹Œ ­¥ ¬¥­ï¥â ᢮¥©
ª®­ä¨£ãà æ¨¨ ¨ ¯à¥¤­ §­ ç¥­  ¤«ï ®¡¥á¯¥ç¥­¨ï ᨭåà®­¨§ æ¨¨ ¨ ­ ç «ì­®£®
§ ¯ã᪠ ª®¬¯ìîâ¥à .   ¯« â¥ â ª ¦¥ ¯à¥¤ãᬮâ७  ¢®§¬®¦­®áâì ¯®¤ª«î祭¨ï
CMOS ç á®¢ ­  ®á­®¢¥ ¬¨ªà®á奬ë DALLAS. Šà®¬¥ ¯¥à¨ä¥à¨¨ ¨ ¡ãä¥à®¢ ¨¬¥îâáï
¬¨ªà®áå¥¬ë ¤¥è¨äà æ¨¨, ¢å®¤ë ª®â®àëå ¯®¤ª«îç îâáï ª ¯à®æ¥áá®àã ç¥à¥§ ‹Œ.
â® ¯®§¢®«ï¥â «¥£ª® ¬¥­ïâì  ¤à¥á æ¨î ãáâனá⢠¡¥§ ª ª®£® «¨¡® ¨§¬¥­¥­¨ï
à §¢®¤ª¨ ¯¥ç â­®© ¯« âë.
‚®§¬®¦­®á⨠ àå¨â¥ªâãàë ¬ è¨­ë.
‘奬  ª®¬¯ìîâ¥p  ®á­®¢ ­  ­  ¡®«ì让 ¯¥p¥¯p®£p ¬¬¨p㥬®© «®£¨ç¥áª®©
¬¨ªp®á奬¥. ®¤ª«î祭¨¥ ¯¥à¨ä¥à¨©­ëå ãáâனá⢠ç¥à¥§ ‹Œ ¯®§¢®«ï¥â ¯®«ãç¨âì
¢ë᮪ãî £¨¡ª®áâì ¬ è¨­ë ¯® ª®­ä¨£ãà æ¨ï¬.
p®£p ¬¬¨p®¢ ­¨¥ ‹Œ ®áãé¥á⢫ï¥âáï ­¥¯®áp¥¤á⢥­­® ¢ ¬®¬¥­â
¢ª«î祭¨ï,   â ª ¦¥ ¯p¨ ¯¥p¥§ £p㧪¥, çâ® ¯®§¢®«ï¥â ª p¤¨­ «ì­® ¬¥­ïâì
á奬㠢 ‹Œ ­¥¯®áp¥¤á⢥­­® ¢® ¢p¥¬ï p ¡®âë. ⮠ᨫ쭮 ¢ë¤¥«ï¥â
 àå¨â¥ªâãàã ª®¬¯ìîâ¥à  ¨§ à鸞 áãé¥áâ¢ãîé¨å ª®¬¯ìîâ¥à®¢ ¨ ¯®í⮬㠬­®£¨¥
¯®­ïâ¨ï, ¯à¨áã騥 ®¡ëç­ë¬ ¬ è¨­ ¬, ¬¥­ïîâ ᢮© á¬ëá«. ” ªâ¨ç¥áª¨ ª®¬¯ìîâ¥à
¨¬¥¥â ¨§¬¥­ï¥¬ãî  àå¨â¥ªâãàã, ¢ ª®â®à®© ¢®§¬®¦­ë ¨§¬¥­¥­¨ï ¢® ¬­®£¨å ç áâïå
á奬ë. ’ ª, ­ ¯à¨¬¥à, ­¥«ì§ï £®¢®à¨âì ® ª®­ªà¥â­ëå  ¤à¥á å ¯®à⮢
¯®¤ª«î祭¨ï ¯¥à¨ä¥à¨¨, â ª ª ª ®­¨ ¬®£ãâ ¡ëâì ¨§¬¥­¥­ë ¢ ®¤­ã ᥪ㭤ã
¯ã⥬ ¯¥à¥¯à®£à ¬¬¨à®¢ ­¨ï ‹Œ ¨ ¤ ­­ëå ¢ އ“, ®â¢¥ç îé¨å §  ª®­ä¨£ãà æ¨î
¯®à⮢. Š®­ªà¥â­ë¥  ¤à¥á  ¯®ï¢«ïîâáï ⮫쪮 ¢ ª®­ªà¥â­ëå ª®­ä¨£ãà æ¨ïå,
­ ¯à¨¬¥à, â ª®© ª ª ª®­ä¨£ãà æ¨ï ZX-Spectrum.
¥à¥¯à®£à ¬¬¨à㥬®áâì áå¥¬ë ¤ ¥â ¤®¢®«ì­® ¡®«ìèãî ᢮¡®¤ã
ä ­â §¨¨ ¯à®£à ¬¬¨áâ  ¯® ª®­ä¨£ãà æ¨¨ ¬ è¨­ë. ‡ ¤ã¬ë¢ ï ª®­ªà¥â­ãî
à ¡®â㠯ணࠬ¬¨áâ ¬®¦¥â ®¯à¥¤¥«¨âì ¢ ª ª®© ª®­ä¨£ãà æ¨¨ ¥¥ ¬®¦­®
ᤥ« âì «ãçè¥,  , ¢®§¬®¦­®, ¨ ¯à¨¤ã¬ âì á¢®î ª®­ä¨£ãà æ¨î, ª®â®àãî
§ â¥¬ ¬®¦­® ॠ«¨§®¢ âì ¢ ‹Œ ¨ ¢ª«îç¨âì ¯¥à¥¤ § ¯ã᪮¬ í⮩ ¯à®£à ¬¬ë.
«®ç­ ï á奬  ª®¬¯ìîâ¥à  Sprinter.
ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄ>Sinc
³à¨­â¥à³ ³ 2 ISA SLOTS ³ ³ ÚÄÄÄÄÄÄÄ>R
ÃÄÄÄÄÄÄÄ´ ÀÄÄÄÂÄÂÄÂÄÂÄÂÄÄÄÄÄÄÄÂÄÂÄÂÄÂÄÂÄÄÙ ³ ³ ÚÄÄÄÄÄ>G
³ Œëèì ³ ÚÄÄÄÁÄÁÄÁÄÁÄÁÄÄÄÄÄÄÄÁÄÁÄÁÄÁÄÁÄÄ¿ ³ ³ ³ ÚÄÄÄ>B
ÀÄÂÄÂÄÂÄÙ ³ ãä¥àë ¨ ¤¥è¨äà â®àë ³ ³ ÚÄÁÄÁÄÁÄ¿
³ ³ ³ ÀÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÂÄÄÂÄÂÄÄÄÄÂÄÂÄÙ ³ ³ –€ ³
³ ³ ³ ³INT ³ ³ ³ ³ ³ ³ ³ ³ ¡ãä¥à ³
ÚÄÄÁÄÁÄÁÂÄ¿ ³ ³ ³ ³ ³ ÚÁÄÁÄÄÄÄÄÄÁÄ¿ÀÄÄÂÄÂÄÄÙ ÚÄÄÄÄÄÄÄÄ¿
³ ‚­ãâà ³ ÃÄÄÄijÄÄÄÄÄÄÄÄÄÄÙ ÀÄij ³ÄÄÄ´ EPF10K10 ÃÄÄÄÙ ÀÄÄÄÄÄÄ´ ¢¨¤¥® ³
³ ¯®àâë ³ ÃÄÄÄijÄÄÄÄÄÄÄÄÄÄDATAij ³ÄÄÄ´ ÃÄÄV_DATAÄÄÄÄ´ ³
ÃÄÄÄÄÄÄÄÙ ÃÄÄÄijÄÄÄ¿ ÚÄÄÄÄÄÄÄÄij ³ÄÄÄ´ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ އ“ ³
³ Ã<ÄÄÄÙ ³ ³ ³ ³ ³ ³ ³ ³
³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄ´ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
³ Z84C15 ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄADRESSÄÄÄÄÄ´ ÃÄV_ADRESSÄÄÄ´ ³
³ ÃÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
³ ³ ³ ³ ³ ³ ³ ³ ³ ³
³ Ã<ÄÄij ³Ä³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>´ ÃÄÄWE,CSiÄÄÄ>´ ³
³ Ã<ÄÄij ³Ä³ ³ÄÄÄÄDIRÄÄÄÄÄÄÄ>´ ³ ÀÄÄÄÄÄÄÄÄÙ
³ Ã<ÄÄij ³Ä³ ³ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>´ ÃÄÄÄÄÄÄÄ> Audio OUTs
³ ³ ³ ³ ³ ³ ³ ³ ÚÄÄÄÄÄÄÄÄ¿
³ ³ ÚÄÁÄÁÄÁÄÁÄÄÄÄÄÄÄ¿ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ MAIN ³
³ ³ ³ ‡“ ¨ Š˜-އ“ Ã<ÄADR'Ä´ ÃÄÄDATAÄÄÄÄÄÄ´ RAM ³
ÀÄÂÄÂÄÂÄÄÂÙ ³ CS Ã<ÄCSÄÄÄ´ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ SIMM ³
³ D ³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
³ A ³ ³ ³ EPM7032 ÃÄÄÄÄÄÄÄ>´ ÃÄÄADRESSÄÄÄÄ´ ³
³ T ³ ÀÄÄ>´ Sinchro ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
³ A ³ ³ HDD_DIR Ã<ÄÄÄÄÄÄÄ´ ³ ³ ³
³ ³ ³ ³ ”€— Ã<ÄÄÄÄÄÄÄ´ ÃÄRAS,CAS,WEÄ´ ³
³ ³ ³ ÀÄÂÄÂÄÂÄÂÄÂÄÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄÙ
³ ³ ³ ³ ³ ³ ³ ³ ³ ³
ÚÄÁÄÁÄÁÄÄÄÄÄÄÄÄÁÄÁÄÁÄÁÄÁÄÄÄÄÄÄÄ¿ ³ ³
³ ¥à¨ä¥à¨©­ë¥ ãáâனá⢠ Ã<ÄÄÄÄ´ ³
³ FDD,HDD,KEMPSTON Ã<DIRÄ´ ³
³ Ã<ÄÄÄÄ´ ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>´ ³
ÚÄÄÄÄÄÄÄÄ¿ ³ ÚÄÄÄÄÄÄÄÄ¿ ³ ³
³ TAPE Ã<ÄÄÙ ³KeyboardÃÄÄÄÄÄÄÄÄÄ>´ ³
³ in/out ³ ô ³ ³
ÀÄÄÄÄÄÄÄÄÙ ÀÁÁÁÁÁÁÁÁÙ ÀÄÄÄÄÄÄÄÄÄÄÄÙ
¨áã­®ª 1.
„«ï ¯à®áâ®âë ­¥ª®â®àë¥ ¡ãä¥àë ¨ ¤¥è¨äà â®àë ­  á奬¥ ­¥ 㪠§ ­ë.
Š®«¨ç¥á⢮ ஢®¤®¢ ¢ 設 å â ª ¦¥ ãá«®¢­ë. — áâì ᨣ­ «®¢ ã¯à ¢«¥­¨ï
ãáâனáâ¢ á ‹Œ á¬ã«ì⨯«¨æ¨à®¢ ­ë á  ¤à¥á ¬¨ SIMM- .
„ «ì­¥©è¥¥ ®¯¨á ­¨¥  àå¨â¥ªâãàë ï¥âáï ®¯¨á ­¨¥¬ ª®­ªà¥â­ëå
ª®­ä¨£ãà æ¨© ¨ ç á⥩ ª®­ä¨£ãà æ¨©. ® ¯¥à¥¤ í⨬ á«¥¤ã¥â ᪠§ âì ­¥áª®«ìª®
á«®¢ ® ¯¥à¥ª«î祭¨¨ á ¬¨å ª®­ä¨£ãà æ¨©.
‡ £à㧪  ª®­ä¨£ãà æ¨©.
‚ ¬®¬¥­â ¢ª«î祭¨ï ª®¬¯ìîâ¥à ,   â ª ¦¥ ¯®á«¥ ­ ¦ â¨ï ­  RESET ¢áï
¨­ä®à¬ æ¨ï, ­ å®¤¨¢è ïáï ¢ ‹Œ ®â¢¥ç îé ï §  ª®­ªà¥â­ãî ª®­ä¨£ãà æ¨î,
áâ¨à ¥âáï. ‹Œ ¯¥à¥å®¤¨â ¢ ०¨¬ ®¦¨¤ ­¨ï § £à㧪¨ ¡«®ª  ¤ ­­ëå á奬ë.
‚ íâ®â ¬®¬¥­â ¯à®æ¥áá®à ¯®«­®áâìî ®âª«î祭 ®â ª ª®© «¨¡® ¯¥à¨ä¥à¨¨.
‚ ¥£®  ¤à¥á­®¥ ¯à®áâà ­á⢮ ¯ ¬ï⨠®ª §ë¢ ¥âáï ¢ª«î祭  ®¤­  áâà ­¨æ  ‡“ ¨
®¤­  áâà ­¨æ  އ“ Š˜-¯ ¬ïâ¨. ‹î¡ ï § ¯¨áì ¢  ¤à¥á­®¥ ¯à®áâà ­á⢮ ¯ ¬ïâ¨
¯à®æ¥áá®à  ¢ íâ®â ¬®¬¥­â ¯à¨¢®¤¨â ª § ¯¨á¨ ¤ ­­ëå ¢ ‹Œ ¨ ¯à®£à ¬¬  ¢
¯®¤ª«î祭­®© áâà ­¨æ¥ ‡“ ¨¬¥¥â ⮫쪮 ®¤­ã ¥¤¨­á⢥­­ãî æ¥«ì - § £à㧨âì
¢ ‹Œ ¤ ­­ë¥ ª®­ä¨£ãà æ¨¨. ‚ í⮩ ¦¥ áâà ­¨æ¥ ‡“ ­ å®¤ïâáï ¤ ­­ë¥
­ ç «ì­®© ª®­ä¨£ãà æ¨¨. (‚ ¤ ­­ë© ¬®¬¥­â íâ® ª®­ä¨£ãà æ¨ï Sprinter-1.)
ணࠬ¬  § £à㧪¨ ª®­ä¨£ãà æ¨¨ ¯à®¢¥àï¥â ä« £ ¢ Š˜-¯ ¬ï⨠¨, ¥á«¨ ®­
ãáâ ­®¢«¥­, § £à㦠¥â ¢ ‹Œ ¤ ­­ë¥ ¨§ އ“, ¥á«¨ á¡à®è¥­, â® ¤ ­­ë¥ ¨§
‡“.   í⮬ ®á­®¢ ­® ¯¥à¥ª®­ä¨£ãà¨à®¢ ­¨¥ áå¥¬ë ª®¬¯ìîâ¥à .
„«ï ¨§¬¥­¥­¨ï áå¥¬ë ­ ¤® § £à㧨âì ¢ ¯®á«¥¤­îî áâà ­¨æã Š˜-¯ ¬ïâ¨
¡«®ª ¤ ­­ëå ª®­ä¨£ãà æ¨¨ ᮠᬥ饭¨ï #100 ¨ ¢ëáâ ¢¨âì ä« £, ª®â®àë¬ ï¢«ï¥âáï
⥪á⮢ ï áâப  "FLEX_10K_LOADING", § ¯¨á ­­ ï ¯® ᬥ饭¨î #80 ¢ í⮩ ¦¥
áâà ­¨æ¥ Š˜- . ®á«¥ í⮣® ­ ¤® ¯à®¨§¢¥á⨠¯®«­ë© á¡à®á, ª®â®àë©
®áãé¥á⢫ï¥âáï ¯à®£à ¬¬­® § ¯¨áìî ¢ ᯥ樠«ì­ãî áâà ­¨æã ¯ ¬ï⨠RESET_PAGE.
ணࠬ¬  ¢ ‡“, § ¯ã᪠¥¬ ï ¯® á¡à®áã ­ å®¤¨â ä« £ FLEX_10K_LOADING ¨
­ ç¨­ ¥â § £à㧪㠤 ­­ëå ¢ ‹Œ. ਠí⮬ ®­  ®¤­®¢à¥¬¥­­® § â¨à ¥â ä« £,
çâ® ¯à¥¤®â¢à é ¥â ¯®¢â®à­ãî § £à㧪㠭®¢®© ª®­ä¨£ãà æ¨¨ ¯à¨ ­ ¦ â¨¨ ­ 
ª­®¯ªã RESET ¨ ¯®§¢®«ï¥â ¢¥à­ãâìáï ¯®á«¥ "àãç­®£®" á¡à®á  ¢ ­ ç «ì­ãî
ª®­ä¨£ãà æ¨î. ‡ â¨à ­¨¥ ä« £  â ª ¦¥ ¨§¡ ¢«ï¥â ®â ¬ã祭¨© ¢ á«ãç ¥
¯®¤ª«î祭¨ï ­¥¯à ¢¨«ì­®© ª®­ä¨£ãà æ¨¨ ¢® ¢à¥¬ï íªá¯¥à¨¬¥­â®¢ á ¯à®£à ¬¬ ¬¨.
 ¦ â¨¥ ­  RESET ¢á¥£¤  ¢¥à­¥â á奬㠢 ­ ç «ì­ãî ª®­ä¨£ãà æ¨î.
ਬ¥ç ­¨¥:
‚­ãâ७­ïï ¨­ä®à¬ æ¨ï ¡«®ª  ¤ ­­ëå ‹Œ ï¥âáï § ªàë⮩
¨­ä®à¬ æ¨¥© ä¨à¬ë ALTERA. Šà®¬¥ á ¬¨å ¬¨ªà®á奬 ‹Œ ALTERA ¯®áâ ¢«ï¥â
¨ ¯à®£à ¬¬­®¥ ®¡¥á¯¥ç¥­¨¥ ¤«ï à §¢®¤ª¨ á奬 ¢­ãâਠ‹Œ. Š á®¦ «¥­¨î, íâ 
¯à®£à ¬¬  ­¥ ¬®¦¥â à ¡®â âì ­  ª®¬¯ìîâ¥à¥ ⨯  ZX-Spectrum ¨ ¢ ¡«¨¦ ©è¥¬
®¡®§à¨¬®¬ ¡ã¤ã饬 ­¥ ¯à¥¤¢¨¤¨âáï ¥¥ ¢¥àá¨ï ¤«ï Sprinter- . ®í⮬ã
à §à ¡®âª  ­®¢ëå ª®­ä¨£ãà æ¨© ¬®¦¥â ¯à®¨§¢®¤¨âáï ⮫쪮 ¯à¨ ­ «¨ç¨¨
¤®áâ â®ç­® ¬®é­®© ¬ è¨­ë (¢á¥ ¤¥« «®áì ­  Pentium-166) ¨ ¯à®£à ¬¬ë à §¢®¤ª¨
á奬 ¢ ‹Œ, 業  ­  ª®â®àãî á®áâ ¢«ï¥â á®â­¨ ¤®«« à®¢ ‘˜€.
‚ á¢ï§¨ á í⨬, ¢ ¤ ­­ë© ¬®¬¥­â Sprinter ¨¬¥¥â ­¥áª®«ìª® ª®­ªà¥â­ëå
ª®­ä¨£ãà æ¨©, ¤¢¥ ¨§ ª®â®àëå § ¯¨á ­ë ¢ ‡“,   ®áâ «ì­ë¥ ¬®£ãâ ¡ëâì
¯®¤£à㦥­ë á ¤¨áª¥âë ¨«¨ ¢¨­ç¥áâ¥à . ®áâ®ï­­® ¢¥¤¥âáï ᮢ¥à襭á⢮¢ ­¨¥
ª®­ªà¥â­ëå ª®­ä¨£ãà æ¨© ¨ à §à ¡®âª  ­®¢ëå.
Š®­ä¨£ãà æ¨ï Sprinter-1.
‚ª«î砥⠢ á¥¡ï ª®­ä¨£ãà æ¨î Spectrum-128/256, à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨
¤® 4Mb, à áè¨à¥­­ë© íªà ­ á ०¨¬ ¬¨ Spectrum, Text-80x32, Graf-320x256x256,
ª®­â஫«¥à ¤¨áª®¢®¤ , ª®­â஫«¥à IDE ¢¨­ç¥áâ¥à , ª®­â஫«¥à ª« ¢¨ âãàë AT,
¯®¤ª«î祭­®© ª ª ZX-Keyboard, 8-bit COVOX.
â  ª®­ä¨£ãà æ¨ï ¬ ªá¨¬ «ì­® ¯à¨¡«¨¦¥­  ª ª®­ä®£ãà æ¨¨ ZX-Spectrum
¨ ¯®§¢®«ï¥â à ¡®â âì ­  ®¡ëç­ëå ᯥªâà㬮¢áª¨å ¯à®£à ¬¬ å ¨ ¯®á⥯¥­­®
¬¥­ïâì ¨å ¯®¤ à áè¨à¥­­ë¥ ०¨¬ë íªà ­  ¨ ¯ ¬ïâ¨,   â ª ¦¥ ¤«ï à ¡®âë á
­®¢ë¬¨ ãáâனá⢠¬¨.
Š®­ä¨£ãà æ¨ï Sprinter-2.
‚ª«î砥⠢ á¥¡ï ª®­ä¨£ãà æ¨î Spectrum-128/256, à á¯à¥¤¥«¥­¨¥ ¯ ¬ïâ¨
¤® 4Mb, à áè¨à¥­­ë© íªà ­ á ०¨¬ ¬¨ Spectrum, Text-80x32, Graf-320x256x256,
ª®­â஫«¥à ¤¨áª®¢®¤ , ª®­â஫«¥à IDE ¢¨­ç¥áâ¥à , ª®­â஫«¥à ª« ¢¨ âãàë AT,
¯®¤ª«î祭­®© ª ª ZX-Keyboard, Accelerator.
Š®­ä¨£ãà æ¨ï, ª ª ¨ Sprinter-1 ¯à¨¡«¨¦¥­  ª ᯥªâà㬮¢áª®©, ­®
¨¬¥¥â ¡®«¥¥ ¦¥á⪨¥ âॡ®¢ ­¨ï ª ¯à®£à ¬¬ ¬ ¯® ᮢ¬¥á⨬®áâ¨. ®§¢®«ï¥â
¨á¯®«ì§®¢ âì  ªá¥«¥à â®à ®¯¥à æ¨© á ®á­®¢­ë¬ ¨ ¢¨¤¥®-އ“. €ªá¥«¥à â®à
ã᪮àï¥â ®¯¥à æ¨¨ ¯¥à¥á뫪¨ ¡«®ª®¢ ¤ ­­ëå ¨ § ¯®«­¥­¨ï އ“ ®¤­¨¬ ¡ ©â®¬
¤® 䨧¨ç¥áª®£® ¯à¥¤¥«  ᪮à®á⨠®á­®¢­®£® އ“.
‚ ¯®á«¥¤­¥© ¢¥àᨨ ª®­ä¨£ãà æ¨ï Sprinter-2 ­¥ ¨¬¥¥â Spectrum-®¢áª®©
ª« ¢¨ âãàë. ‚¬¥áâ® ­¥¥ ¨§ ¯®àâ  0FEh áç¨â뢠¥âáï ᪠­ª®¤ ¯à¨è¥¤è¨© á
AT-ª« ¢¨ âãàë.
Š®­ä¨£ãà æ¨ï ZX-Spectrum-256/AY.
â  ª®­ä¨£ãà æ¨ï ¬ ªá¨¬ «ì­® ¯à¨¡«¨¦¥­  ª ZX-Spectrum-128/256
¨ ¢ª«î砥⠢ ᥡï á奬㠬ã§ëª «ì­®£® á®¯à®æ¥áá®à  AY-3-8910. ‚ í⮩
ª®­ä¨£ãà æ¨¨ ®âáãâáâ¢ãîâ à áè¨à¥­­ë¥ ०¨¬ë íªà ­ .
‚â®à ï ¢¥àá¨ï á奬ë AY ¢ª«î砥⠢ ᥡï âਠ£¥­¥à â®à  £®«®á®¢,
£¥­¥à â®à è㬠 ¨ ॣã«ïâ®àë  ¬¯«¨âã¤ë. ƒ¥­¥à â®à ®£¨¡ î饩 ®âáãâáâ¢ã¥â.
’ ª ¦¥ ®âáãâáâ¢ã¥â ¢®§¬®¦­®áâì ç⥭¨ï ¨§ ¯®à⮢ ¤ ­­ëå á®¯à®æ¥áá®à .
‚ âà¥â쥩 ¢¥àᨨ AY ¯à¥¤¯®« £ ¥âáï ¤ ­­ë¥ ­¥¤®áâ âª¨ ¨áª«îç¨âì.
Š®­ä¨£ãà æ¨ï Sprinter-3.
Š®­ä¨£ãà æ¨ï ®â¢ï§ ­  ®â ª®­ä¨£ãà æ¨¨ ZX-Spectrum. ®«­®áâìî
®âª«îç ¥âáï ‡“ ¨ ¢á¥  ¤à¥á­®¥ ¯à®áâà ­á⢮ à §¡¨â® ­  ç¥âëॠ®ª­  ¯® 16k,
¢ ª ¦¤®¥ ¨§ ª®â®àëå ¯®¤ª«îç ¥âáï «î¡ ï ¨§ 256-⨠áâà ­¨æ އ“. Žâáãâáâ¢ã¥â
ᯥªâà㬮¢áª¨© íªà ­, £à ä¨ç¥áª¨© íªà ­ â ª®© ¦¥, ª ª ¢ ª®­ä¨£ãà æ¨ïå
Sprinter-1 ¨ Sprinter-2. ˆ¬¥¥â ¤®¯®«­¨â¥«ì­ë¥ ä㭪樨  ªá¥«¥à â®à .
®§¢®«ï¥â ¯à®¨§¢®¤¨âì ®¯¥à æ¨¨ AND, OR ¨ XOR á ¡«®ª ¬¨ ¤ ­­ëå. ˆ¬¥¥â 8-bit
COVOX.
‚ ¤ «ì­¥©è¥¬ ¯à¥¤¯®« £ ¥âáï ¯®¤ª«î祭¨¥ ¢ í⮩ ª®­ä¨£ãà æ¨¨
á¯à¨­â¥à®¢áª®© §¢ãª®¢®© ª àâë.
Š®­ä¨£ãà æ¨ï Game-1.
®å®¦  ­  ª®­ä¨£ãà æ¨î Sprinter-3. €ªá¥«¥à â®à ­¥ ¨¬¥¥â «®£¨ç¥áª¨å
ä㭪権,   ¤«ï ¢ë¢®¤  §¢ãª  ¨¬¥¥â COVOX-Blaster - COVOX á ¡ãä¥à­ë¬ އ“,
¯®§¢®«ïî騬 ¢ë¢®¤¨âì §¢ãª ¯®¡«®ç­® ¨ ®á¢®¡®¦¤ âì ¯à®æ¥áá®à­®¥ ¢à¥¬ï ¤«ï
¤à㣮© à ¡®âë. Š®­ä¨£ãà æ¨ï ®à¨¥­â¨à®¢ ­  ­  ¨á¯®«ì§®¢ ­¨¥ ¢ ¨£à å ¤«ï
Sprinter- .
‘奬  à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
‘奬ë à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠¢ ª®­ä¨£ãà æ¨ïå Sprinter-1 ¨ Sprinter-2
®¤¨­ ª®¢ë ¨ ¤®áâ â®ç­® ¯à®§à ç­ë. ” ªâ¨ç¥áª¨ ®­  ¯à¥¤áâ ¢«ï¥â ᮡ®© á奬ã
à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠ª®¬¯ìîâ¥à  Scorpion, á ­ «®¦¥­­®© ­  ­¥¥
¤®¯®«­¨â¥«ì­®© á奬®©, ª®â®à ï ¯®§¢®«ï¥â ¯à®¨§¢®«ì­® ãáâ ­ ¢«¨¢ âì ¢á¥
áâà ­¨æë ¯ ¬ïâ¨, ª ª ‡“, â ª ¨ އ“.
Š ¦¤ ï áâà ­¨æ  ‡“ ¨«¨ އ“ ¨¬¥¥â ᢮© ¯®àâ, ¢ ª®â®à®¬ 㪠§ë¢ ¥âáï
¤¥©á⢨⥫ì­ë© ­®¬¥à áâà ­¨æë ¨§ 256-⨠áâà ­¨æ ¢á¥å 4Mb. ‘âà ­¨æë,
¯à®¥æ¨àã¥¬ë¥ ¢ à §«¨ç­ë¥ ®ª­   ¤à¥á­®£® ¯à®áâà ­á⢠ ¯à®æ¥áá®à  ¨¬¥îâ ᢮¨
ᮡá⢥­­ë¥ ¯®àâë. ’.¥. ‘âà ­¨æ , ¢ª«îç ¥¬ ï ¢  ¤à¥á  #4000..#7FFF, ¨
áâà ­¨æ  ­®¬¥à 5 ®¡ëç­®£® Spectrum-®¢áª®£® à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨, ¢ª«îç ¥¬ ï
¢  ¤à¥á  #C000..#FFFF ¨¬¥îâ à §¤¥«ì­ë¥ ¯®àâë.
‚ᥣ® â ª¨å ¯®à⮢ áâà ­¨æ ¯ ¬ï⨠- 32.
16 ¯®à⮢ ®â¢¥ç îâ §  ­®¬¥à  áâà ­¨æ އ“, ¯®¤ª«îç ¥¬ë¥ ª  ¤à¥á ¬
#C000..#FFFF. …é¥ âਠ¯®àâ  ®â¢¥ç îâ §  ¯®¤ª«î祭¨¥ áâà ­¨æ އ“ ª  ¤à¥á ¬
#0000..#3FFF, #4000..#7FFF ¨ #8000..#BFFF. ‚®á¥¬ì ¯®à⮢ ¨á¯®«ì§ãîâáï ¤«ï
¯®¤ª«î祭¨ï à §«¨ç­ëå áâà ­¨æ ‡“. ޤ¨­ ¯®àâ - ¤«ï ¯®¤ª«î祭¨ï áâà ­¨æë
Š˜-  ¢¬¥áâ® ‡“. ˆ ®¤¨­ ¯®àâ - íâ® ¯®àâ á¨á⥬­®£® ‡“, ¯®¤ª«îç ¥¬®£® ­ 
¬¥áâ® ‡“ áà §ã ¯®á«¥ á¡à®á  ¬ è¨­ë ¯® ª« ¢¨è ¬ Ctrl+Alt+Del.
Žá⠢訥áï 3 ¯®àâ  áâà ­¨æ ¯ ¬ï⨠®áâ îâáï ­  ¤ ­­ë© ¬®¬¥­â ¢ १¥à¢¥.
‘奬  à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠¯®§¢®«ï¥â ¯®¤ª«îç¨âì ¢  ¤à¥á­®¥ ¯à®áâà ­á⢮
¯à®æ¥áá®à  ­¥ ⮫쪮 އ“ ¨«¨ ‡“, ­® ¨ ¯®àâë ¨ ¯ ¬ïâì ISA ª àâ, ¢áâ ¢«ï¥¬ëå
¢ á«®â.
ਠ¯®¤ª«î祭¨¨ ¢  ¤à¥á  #C000..#FFFF ᪮௨®­®¢áª¨å à áè¨à¥­­ëå
áâà ­¨æ އ“, ­  ¨å ¬¥áâ® ¬®¦­® ¯¥à¥ ¤à¥á®¢ âì á«®âë. „«ï í⮣® ­ ¤® ¯à®áâ®
§ ¯¨á âì ¢ ¯®àâ ®¤­®© ¨§ íâ¨å áâà ­¨æ §­ ç¥­¨¥, ᮮ⢥âáâ¢ãî饥 ISA-á«®âã,
ª ª®â®à®¬ã ­¥®¡å®¤¨¬® ¯à®¨§¢¥á⨠®¡à é¥­¨¥. â® §­ ç¥­¨¥ â ª ¦¥ 㪠§ë¢ ¥â
ª 祬㠢¥¤¥âáï ®¡à é¥­¨¥, ª ¯®àâ ¬ ¨«¨ ¯ ¬ïâ¨.
‘奬  à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠Sprinter- .
€¤à¥á­®¥ ¯à®áâà ­á⢮ ‘âà ­¨ç­ë¥ ¯®àâë ‡“ ª®¬¯ìîâ¥à 
¯à®æ¥áá®à  ¯®¤ª«îç ¥¬ëå áâà ­¨æ áâà ­¨æë ¯® 16k
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ #0000..#3FFF ÃÄ>´ ¯®àâë ÃÄÄ>´ ROM_BASIC ÃÄÄ>ÂÄÄÂÄÄÂÄ>´ EXPANSION ³
³ ³ ³ #7FFD,³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ³ #1FFD ÃÄ¿ ³ ROM_TR-DOS ÃÄÄ>´ ³ ÃÄ>´ TR-DOS ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÀÄÄÄÄÄÄÄÙ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ #4000..#7FFF ÃÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ÃÄ>´ BASIC128 ³
³ ³ ³ ³ ÃÄ Ä Ä Ä Ä Ä Ä ´ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ³ ³ ³ ROM_SYSTEM ÃÄÄ>Ù ³ ÃÄ>´ BASIC48 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ #8000..#BFFF ÃÄÄÄÄ¿ ³ À>´ RAM_0000 ÃÄÄÄ>¿ ³ ÃÄ>´ SYSTEM ROM ³
³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ÃÄ>´ SYSTEM ROM2 ³
ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÀÄÄ>´ RAM_4000 ÃÄÄÄ>´ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ #C000..#FFFF ÿ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ÃÄ>´ CONFIG 2 ³
³ ³³ ³ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ÀÄ>´ CONFIG 1 ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ³ ÀÄÄÄÄÄÄÄÄ>´ RAM_8000 ÃÄÄÄ>´ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³
³ ³ ³ އ“ ª®¬¯ìîâ¥à 
³ ÚÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ áâà ­¨æë ¯® 16k
³ ³ ®àâë ÃÄÄ>´ RAM_0 ÃÄÄÄ>´ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ³ #7FFD,³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ÃÄÄÄ>ÂÄ>´ RAM_00 ³
À>´ #1FFD ÃÄÄ>´ ÃÄÄÄ>´ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ÃÄ Ä Ä Ä Ä Ä Ä ³ ³ ³ ÃÄ>´ RAM_01 ³
³ ÃÄÄ>´ RAM_7 ÃÄÄÄ>´ ÀÄ>´ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³
³ ÃÄÄ>´ RAM_8 ÃÄ>ÂijÄÄÄ>´ ÃÄ Ä Ä Ä Ä Ä Ä ´
³ ³ ÃÄ Ä Ä Ä Ä Ä Ä ´ ³ ³ ÀÄÄ´ RAM_7F ³
³ ÃÄÄ>´ ÃÄ>´ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÀÄÄÄ>ÂÄ>´ RAM_80 ³
³ ÃÄÄ>´ RAM_F ÃÄ>ÁÄ>¿ ³ ÃÄ Ä Ä Ä Ä Ä Ä ´
ÀÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ³ ³
‚­¥è­¨¥ ãáâனá⢠ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ÃÄ>´ RAM_FE ³
®àâë ÃÄÄÄÄ>´ ISA_1 Ã<ÄÄÄÄ´ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
ª®¬¯ìîâ¥à  ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ÀÄ>´ RAM_FF ³
ÃÄÄÄÄ>´ ISA_2 Ã<ÄÄÄÄ´ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
ÃÄÄÄÄ>´ HDD Ã<ÄÄÄÄ´
³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³
ÃÄÄÄÄ>´ OVER DEVICES Ã<ÄÄÄÄÙ
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
¨áã­®ª 2.
‚ ¤àã£¨å ª®­ä¨£ãà æ¨ïå á奬  à á¯à¥¤¥«¥­¨ï ¯ ¬ï⨠ã¯à®é ¥âáï ¤«ï
®á¢®¡®¦¤¥­¨ï à¥áãàᮢ ‹Œ. Œ®£ãâ ®âáãâá⢮¢ âì ¯®àâë #1FFD ¨ #7FFD,   â ª
¦¥ ã¯à®é ¥âáï á奬  à ¡®âë á ãáâனá⢠¬¨, ®â®¡à ¦ ¥¬ë¬¨ ­  ¯ ¬ïâì.
‘奬  à á¯à¥¤¥«¥­¨ï ¯®à⮢.
Sprinter ¨¬¥¥â ¤¢¥ ®¡®á®¡«¥­­ë¥ £àã¯¯ë ¯®à⮢. ¥à¢ ï £à㯯 , íâ®
¢­ãâ७­¨¥ ¯®àâë ¯à®æ¥áá®à  Z84C15, ¢â®à ï - ¢­¥è­¨¥ ¯®àâë. €¤à¥á æ¨ï
¯®à⮢ ¯¥à¢®© £àã¯¯ë ­¥ ¬®¦¥â ¡ëâì ¨§¬¥­¥­ , â ª ª ª í⨠¯®àâë ­  ®¤­®¬
ªà¨áâ ««¥ á ¯à®æ¥áá®à®¬. ‚â®à ï £à㯯  ¯®£ª«îç ¥âáï ç¥à¥§ ‹Œ ¨ ¨å  ¤à¥á 
¬®£ãâ ¨§¬¥­ïâìáï ª ª 㣮¤­®, á ¥¤¨­á⢥­­ë¬ ãá«®¢¨¥¬, ­¥¯¥à¥á¥ç¥­¨ï á
 ¤à¥á ¬¨ ¯¥à¢®© £à㯯ë.
Ž â®¬ ª ª¨¥ ¯®àâë ¨¬¥îâáï ­  ªà¨áâ ««¥ Z84C15 ¬®¦­® ¯à®ç¨â âì ¢
¤®ªã¬¥­â æ¨¨ ¯® íâ®¬ã ¯à®æ¥áá®àã ¨ §¤¥áì ï 㯮¬ï­ã ­¥ª®â®àë¥ ¨§ ­¨å. ޤ¨­
¨§ ¯®á«¥¤®¢ â¥«ì­ëå ¯®à⮢ ¨á¯®«ì§ã¥âáï ¤«ï ¢¢®¤  ¤ ­­ëå á  ªâ¨¢­®© ¬ëè¨.
ޤ¨­ ¨§ ¯ à ««¥«ì­ëå ¨á¯®«ì§ã¥âáï ¤«ï ¢ë¢®¤  ¤ ­­ëå, ­  ¢â®à®© ¯ à ««¥«ì­ë©
¯®àâ § ¢¥¤¥­ë ᨣ­ «ë ¯à¥à뢠­¨© ¨ § ¯à®á®¢ ¯àאַ£® ¤®áâ㯠 ᮠ᫮⮢ ISA.
 à ««¥«ì­ë© ¯®àâ ¯à®æ¥áá®à  Z84C15 ãáâ஥­ â ª¨¬ ®¡à §®¬, çâ® ­  ­¥¬
¢®§¬®¦­  ®à£ ­¨§ æ¨ï ¯à¥à뢠­¨© ¯® ᨣ­ « ¬ ¯à¨å®¤ï騬 ç¥à¥§ ¯ à ««¥«ì­ë©
¯®àâ. ” ªâ¨ç¥áª¨ ¢â®à®© ¯ à ««¥«ì­ë© ¯®à⠨ᯮ«ì§ã¥âáï ª ª ª®­â஫«¥à
¯à¥à뢠­¨©.
‘奬  à á¯à¥¤¥«¥­¨ï ¯®à⮢ ¢â®à®© £àã¯¯ë ¨¬¥¥â á¢®î ®á®¡¥­­®áâì.
ƒ« ¢­®© ¨¤¥¥© ¡ë«® ¯®«ã祭¨¥ ¢®§¬®¦­®á⨠¡ëáà® ¨§¬¥­ïâì ª®­ä¨£ãà æ¨î ¯®à⮢
¡¥§ ¯¥à¥£à㧪¨ ‹Œ. â® ¤®á⨣­ãâ® ¯ã⥬ ¯à¨¬¥­¥­¨ï ª àâë à á¯à¥¤¥«¥­¨ï
¯®à⮢, à á¯®« £ î饩áï ­  ᯥ樠«ì­®© áâà ­¨æ¥ އ“.
ਠ¯®ï¢«¥­¨¨ 横«  ®¡à é¥­¨ï ª ¯®àâã á­ ç «  ¯à®¨á室¨â ®¡à é¥­¨¥
ª އ“ ª àâë ¯®à⮢. ‚ ª à⥠¯®à⮢ § ¯¨á ­® ª ª®© ¨¬¥­­® ¯®àâ ¯®¤ª«î祭 ª
¤ ­­®¬ã  ¤à¥áã. „ «¥¥ ¯à®¨á室¨â ¢­ãâ७­ïï ¤¥è¨äà æ¨ï ¯® ¡ ©âã ¨§ ª àâë
¯®à⮢ ¨ ®¡à é¥­¨¥ ª ¢ë¡à ­­®¬ã ¯®àâã. ‚ ०¨¬¥ ­¥âãà¡® íâ® ¯à®¨á室¨â ¡¥§
ª ª¨å «¨¡® § ¤¥à¦¥ª,   ¢ ०¨¬¥ âãà¡® ¯à®æ¥áá®àã ¢ëáâ ¢«ï¥âáï ᨣ­ « WAIT ¢
§ ¢¨á¨¬®á⨠®â ­¥®¡å®¤¨¬®© ¤«¨­ë 横«  ®¡à é¥­¨ï ª ¯®àâã.
„«ï ¯®¤ª«î祭¨ï ª ª ª®¬ã «¨¡®  ¤à¥áã ¨«¨ ®âª«î祭¨ï ®â ­¥£® ª ª®£®
«¨¡® ¯®àâ  ¤®áâ â®ç­® ®âªàëâì ª àâã ¯®à⮢ ¨ ¢¯¨á âì ¢ ­ã¦­®¥ ¬¥áâ® ®¤¨­
¡ ©â.
‚ áâà ­¨æ¥ ª àâë ¯®à⮢ ᮤ¥à¦¨âáï ç¥âëॠª àâë, ª®â®àë¥ ¬®£ãâ
¯¥à¥ª«îç âìáï ç¥à¥§ á¨á⥬­ë© ¯®àâ. ’ ª¨¬ ®¡à §®¬ ¬®¦­® ®áãé¥á⢨âì ¡ëáâ஥
¯¥à¥ª«î祭¨¥ ª®­ä¨£ãà æ¨¨ ¯®à⮢, çâ® ¬®¦¥â ¡ëâì ¯®«¥§­® ¯à¨ à ¡®â¥
Spectrum-®¢áª¨å ¯à®£à ¬¬ ᮢ¬¥áâ­® á® Sprinter-®¢áª¨¬ ¡¨®á®¬.
Š®­ªà¥â­ë¥  ¤à¥á  ¯®à⮢, ¨á¯®«ì§ã¥¬ë¥ ¢ Sprinter-¥.
‡¤¥áì ï ¯à¨¢¥¤ã  ¤à¥á æ¨î ¯®à⮢ ¤«ï ª®­ä¨£ãà æ¨© Sprinter-1 ¨
Sprinter-2. ‘ࠧ㠮⬥çã, çâ® í⨠ ¤à¥á  «¥£ª® ¬®£ãâ ¡ëâì ¨§¬¥­¥­ë ¯à®á⮩
¯à®£à ¬¬®©, ¢ á«ãç ¥ ¯®ï¢«¥­¨ï â ª®© ­¥®¡å®¤¨¬®áâ¨.
‘â ­¤ àâ­ë¥ ¯®àâë.
#FE - RD_KBD - ¯®àâ ª« ¢¨ âãàë
#FE - WR_BRD - ¯®àâ ¡®à¤îà 
#7FFD - ¯®àâ à áè¨à¥­¨ï ZX-Spectrum 128k
#1FFD - ¯®àâ à áè¨à¥­¨ï Scorpion ZS-256
#1F,#0F - RD_KEMPS - ¯®àâ ¤¦®©á⨪ . ‚ ª®­ä¨£ãà æ¨¨ Sprinter-1 ¯®àâ
#1F  ¯¯ à â­® ¯¥à¥ ¤à¥áã¥âáï ­  ¯®àâ #0F
#BFFD,#FFFD - AY-PORTS - ¯®àâë AY-á®¯à®æ¥áá®à  (ZX-Spectrum-256/AY)
¥ ᮢᥬ áâ ­¤ àâ­ë¥ ¯®àâë.
#FB,#4F - ¯®àâ COVOX- .
„®¯®«­¨â¥«ì­ë¥ 8-¡¨â­ë¥ ¯®àâë Sprinter- .
#82 - PAGE0 - áâà ­¨æ  އ“, ¯®¤ª«îç ¥¬ ï ¢¬¥áâ® ‡“ ç¥à¥§ ¯®àâ #1FFD
#A2 - PAGE1 - áâà ­¨æ  އ“, ¯®¤ª«î祭­ ï ¯®  ¤à¥áã #4000
#C2 - PAGE2 - áâà ­¨æ  އ“, ¯®¤ª«î祭­ ï ¯®  ¤à¥áã #8000
#E2 - PAGE2 - áâà ­¨æ  އ“, ¯®¤ª«î祭­ ï ¯®  ¤à¥áã #C000
‡¤¥áì ­ ¤® ®â¬¥â¨âì ®á®¡®, ç¥à¥§ ¯®àâ #E2 ¬®¦­® ¨§¬¥­¨âì «î¡ãî ¨§
16-⨠áâà ­¨æ ᪮௨®­®¢áª®£® à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
#89 - PORT_Y - ¢¥à⨪ «ì­ ï ª®®à¤¨­ â  â®çª¨ ­  £à ä¨ç¥áª®¬ íªà ­¥
¨«¨ áâà ­¨æ  VIDEO-RAM ¤«ï ᯥªâà㬮¢áª®£® ०¨¬ 
#C9 - RGMOD - ¯®àâ ०¨¬  íªà ­ . ¥à¥ª«îç ¥â áâà ­¨æë ०¨¬  íªà ­ .
#3C,#7C - SYS_PORT - á¨á⥬­ë© ¯®àâ âண âì ­¥ ४®¬¥­¤ã¥âáï
#10..#1F,#EE,#EF,#F0,#F1,#F4 - ¢­ãâ७­¨¥ ¯®àâë Z84C15
®àâë áâà ­¨æ އ“ ®âªàëâë ª ª ­  § ¯¨áì, â ª ¨ ­  ç⥭¨¥. â®
¯®§¢®«ï¥â «¥£ª® ¢ë¯®«­ïâì ¯à®£à ¬¬ë, ¨á¯®«ì§ãî騥 ¯¥à¥ª«î祭¨¥ áâà ­¨æ,  
§ â¥¬ ¢®§¢à é âì í⨠áâà ­¨æë ­ § ¤. ਠࠡ®â¥ BIOS-  ¢á¥ áâà ­¨æë
á®åà ­ïîâáï.
„®¯®«­¨â¥«ì­ë¥ 16-⨡¨â­ë¥ ¯®àâë Sprinter- .
#xx50..#xx55 - ¯®àâë HDD - ¨á¯®«ì§®¢ âì ¢­¥è­¨¬¨ ¯à®£à ¬¬ ¬¨ ­¥
४®¬¥­¤ã¥âáï. ”㭪樨 à ¡®âë á HDD § ¯¨á ­ë ¢ ‡“.
‘ªàëâë¥ ¯®àâë Sprinter- .
‘ªàëâ묨 ïîâáï ¯®àâë ª®â®àë¥ ­¤®áâã¯­ë ¢ ª®­ªà¥â­ë© ¬®¬¥­â
¢à¥¬¥­¨, ­® ¬®£ãâ áâ âì ¤®áâ㯭묨 ¯®á«¥ ¯à®¢¥¤¥­¨ï ¨§¬¥­¥­¨© ¢ ª à⥠¯®à⮢.
ˆå  ¤à¥á  ­¥ 㪠§ë¢ îâáï, â ª ª ª ®­¨ ¬®£ãâ ¡ëâì ¢ëáâ ¢«¥­ë ¢ «î¡®¥ ¬¥áâ®.
®àâ ‡“ BASIC48
®àâ ‡“ BASIC128
®àâ ‡“ TR-DOS
®àâ ‡“ EXPANSION
®àâ ‡“ SYSTEM
—¥à¥§ í⨠¯®àâë ¬®¦­® ãáâ ­®¢¨âì ­®¢ë¥ ¯à®è¨¢ª¨ ‡“. „«ï í⮣® ¨å
¤®áâ â®ç­® § ¯¨á âì ¢ އ“ á ­®¬¥à ¬¨ áâà ­¨æ ¬¥­ìè¥ #80 ¨ § ¯¨á âì ¢
ᮮ⢥âáâ¢ãî騩 ¯®àâ ­®¬¥à í⮩ áâà ­¨æë. ਠ⠪®¬ ¯®¤ª«î祭¨¨ áâà ­¨æë
⨠áâà ­¨æë ¡ã¤ãâ § é¨é¥­ë ®â § ¯¨á¨.
— áâ¨ç­® áªàëâ묨, â ª ¦¥ ïîâáï ¨ ¯®àâë #7FFD,#1FFD ¢ ®¡ëç­®¬
á®áâ®ï­¨¨ ®­¨ ¤®áâ㯭ë ⮫쪮 ­  § ¯¨áì, ­® §­ ç¥­¨ï, § ¯¨á뢠¥¬ë¥ ¢ íâ¨
¯®àâë ¬®¦­® ¯à®ç¨â âì, ®âªàë¢ á®®â¢¥âáâ¢ãî騥 ¯®àâë ­  ç⥭¨¥.
‚ ¤àã£¨å ª®­ä¨£ãà æ¨ïå ¬®¦¥â ®âáãâá⢮¢ âì ç áâì ¯®à⮢ ¨«¨
¯à¨áãâá⢮¢ âì ­®¢ë¥ ¯®àâë.
Žà£ ­¨§ æ¨ï ¢¨¤¥®¯ ¬ï⨠¨ ¢¨¤¥®à¥¦¨¬®¢.
‚¨¤¥®-އ“ Sprinter-  á®áâ ¢«ï¥â 256 ª¨«®¡ ©â. ‚ ¤ «ì­¥©è¥¬
¯à¥¤¯®« £ ¥âáï ¥£® à áè¨à¥­¨¥ ¤® 512 ª¨«®¡ ©â, ¤«ï ¯®«ã祭¨ï ¡®«¥¥
¢ë᮪¨å ०¨¬®¢ à §à¥è¥­¨ï.
‚ ०¨¬¥ Spectrum-®¢áª®£® íªà ­  ¢áï ®à£ ­¨§ æ¨ï â ª ï ¦¥ ª ª ¢
áâ ­¤ àâ­®¬ ZX-Spectrum. ‚ ®áâ «ì­ëå ०¨¬ å ¢ª«îç ¥âáï Sprinter-®¢áª¨©
íªà ­, áâàãªâãà  ª®â®à®£® ¢ª«î砥⠢ á¥¡ï ‘¯¥ªâà㬮¢áª¨© íªà ­ ª ª ç áâì
á奬ë.
“áâனá⢮ íªà ­ .
‚¥áì íªà ­ à §¡¨â ­  ª¢ ¤à âë, à §¬¥à®¬ ¢ áâ ­¤ àâ­®¥
‘¯¥ªâà㬮¢áª®¥ §­ ª®¬¥áâ®. „«ï ª ¦¤®£® ª¢ ¤à â  ãáâ ­ ¢«¨¢ ¥âáï ᢮©
ᮡá⢥­­ë© ०¨¬ ¢ë¢®¤ ,   â ª ¦¥  ¤à¥á ¢¨¤¥®-އ“, ®âªã¤  ¯à®¨§¢®¤¨âáï
¢ë¢®¤ ¢ íâ®â ª¢ ¤à â.
‚ ª ¦¤®¬ §­ ª®¬¥á⥠¬®¦¥â ¡ëâì § ¤ ­ ᢮© ᮡá⢥­­ë© ०¨¬ ¢ë¢®¤ .
‚ ¤ ­­ë© ¬®¬¥­â ¬®¦­® ãáâ ­ ¢«¨¢ âì â ª¨¥ ०¨¬ë:
ZX-40 - ®¡ëç­ë© ᯥªâà㬮¢áª¨© ०¨¬ á ®¤­¨¬ ¡¨â¯« ­®¬ ¨
®¤­¨¬  âਡã⮬ ­  §­ ª®¬¥áâ®.
ZX-80 - ¥¦¨¬, ¯®å®¦¨© ­  ᯥªâà㬮¢áª¨© ¯® áâ஥­¨î
ᨬ¢®«®¢, ­® ¢ ª ¦¤®¬ §­ ª®¬¥á⥠®ª §ë¢ ¥âáï ¤¢  ᨬ¢®« , ᦠâë¥ ¯®
£®à¨§®­â «¨.
G256-8 - ƒà ä¨ç¥áª¨© ०¨¬. Š¢ ¤à â ¯à¥¤áâ ¢«ï¥â ᮡ®© ¬ áᨢ 8x8
â®ç¥ª. ‚ ª ¦¤®© â®çª¥ § ¤ ¥âáï ®¤¨­ ¨§ 256-⨠梥⮢, ¢ë¡¨à ¥¬ëå ¨§ ¯ «¨âàë
16 ¬¨««¨®­®¢ 梥⮢. Š¢ ¤à âë ¬®£ãâ ¨¬¥âì à §­ë¥ ¯ «¨âàë. ’ ª¨å ¯ «¨âà ¤«ï
०¨¬  G256-8 - ç¥âëà¥.
G16-16 - ƒà ä¨ç¥áª¨© ०¨¬. Š¢ ¤à â ¯à¥¤áâ ¢«ï¥â ᮡ®© ¬ áᨢ
16x8 â®ç¥ª. Š ¦¤ ï â®çª  ¨¬¥¥â ®¤¨­ ¨§ 16 梥⮢, ¢ë¡¨à ¥¬ëå ¨§ ¯ «¨âàë 16
¬¨««¨®­®¢ 梥⮢. ’ ª ¦¥, ª ª ¨ G256-8 ¢ ª¢ ¤à â¥ ¬®¦¥â ¡ëâì ãáâ ­®¢«¥­ 
®¤­  ¨§ 4-å ¯ «¨âà.  «¨âàë £à ä¨ç¥áª¨å ०¨¬®¢ ¯¥à¥á¥ª îâáï ¤àã£ á ¤à㣮¬.
 «¨âà  16-â¨æ¢¥â­®£® ०¨¬  íâ® ¯¥à¢ë¥ 16 梥⮢ ¨§ ¯ «¨âàë 256-â¨æ¢¥â­®£®.
BORDER - ‚ ª¢ ¤à â ¢ë¢®¤¨âáï æ¢¥â ¡®à¤¥à .
BLANK - Š¢ ¤à â £ á¨âáï - áâ ­®¢¨âáï ç¥à­ë¬.
Ž¡ê¥¬ ¤ ­­ëå ०¨¬  ª¢ ¤à â  á®áâ ¢«ï¥â 2 ¡ ©â ,
¯®í⮬㠨§¬¥­¥­¨¥ ०¨¬  ¢á¥£® íªà ­  ᢮¤¨âáï ª ¯¥à¥§ ¯¨á¨ 2.5 ª¨«®¡ ©â
¤ ­­ëå ¢ ¢¨¤¥®-އ“.
®¤®¡­ ï áâàãªâãà  íªà ­  ¯®§¢®«ï¥â «¥£ª® ¯à®¨§¢®¤¨âì áªà®««¨­£¨
ª ª ¢á¥£®, â ª ¨ ç á⥩ íªà ­  ¯® §­ ª®¬¥áâ ¬.
¥¦¨¬ íªà ­  ãáâ ­ ¢«¨¢ ¥âáï ¯à¨ ¢ª«î祭¨¨,   â ª ¦¥ á ¯®¬®éìî
ä㭪権 ¡¨®á . ”㭪樨 ¡¨®á  ¯®§¢®«ïîâ ®âªà뢠âì ­  íªà ­¥ £à ä¨ç¥áª¨¥ ¨
⥪áâ®¢ë¥ ®ª­  ¢ ­ã¦­ëå ¬¥áâ å ¨ ­ã¦­®£® à §¬¥à .
‚ ¡¨®á¥ ¨¬¥îâáï ä㭪樨 ®âªàëâ¨ï £à ä¨ç¥áª®£® íªà ­  ­  ¢¥áì íªà ­
320x256 â®ç¥ª. ®á«¥ ®âªàëâ¨ï í⮣® ०¨¬  íªà ­ ¯à¥¤áâ ¢«ï¥â ᮡ®©.
­ ¡®à ¨§ 256-⨠«¨­¨©, ¤«¨­®© ¯® 320 ¡ ©â. ‘®á¥¤­¨¥ â®çª¨ ¢ «¨­¨¨ - íâ®
á®á¥¤­¨¥ ¡ ©âë. ¥à¥ª«î祭¨¥ «¨­¨© ¯à®¨§¢®¤¨âáï ç¥à¥§ PORT_Y, ¢ ª®â®à®¬
ãáâ ­ ¢«¨¢ ¥âáï ­®¬¥à «¨­¨¨, ¢ë¢®¤¨¬®© ­  íªà ­. ®¬¥à  «¨­¨© áç¨â îâáï
ᢥàåã íªà ­ , ­ ç¨­ ï á ­ã«¥¢®©.
„«ï ¢ë¢®¤  ¢ £à ä¨ç¥áª¨© íªà ­ â ª ¦¥ âॡã¥âáï ®âªàëâì
ᮮ⢥âáâ¢ãîéãî áâà ­¨æã ®á­®¢­®£® އ“. ‚ í⮩ áâà ­¨æ¥ ¡ã¤¥â ᮤ¥à¦ âìáï
ª®¯¨ï ¢¨¤¥®¨§®¡à ¦¥­¨ï.
‚¨¤¥®-އ“ ï¥âáï ⥭¥¢ë¬ އ“, ¯®í⮬㠨­ä®à¬ æ¨ï, ­ å®¤ïé ïáï ¢
®á­®¢­®¬ އ“, ¯®¤ ª®â®àë¬ ­ å®¤¨âáï ¢¨¤¥®-އ“ ­¥ ®¡ï§ â¥«ì­® ¡ã¤¥â
ᮢ¯ ¤ âì á ¨­ä®à¬ æ¨¥©, ­ å®¤ï饩áï ¢ í⮬ ¢¨¤¥®-އ“. ‡ ¯¨áì ¢¨¤¥®-¤ ­­ëå
¬®¦¥â ¯à®¨§¢®¤¨âìáï ¨ ¡¥§ ¯¥à¥§ ¯¨á¨ ¤ ­­ëå ¢ ®á­¢­®¬ އ“, çâ® ®ª §ë¢ ¥âáï
¯®«¥§­ë¬ ¯à¨ à ¡®â¥, ­ ¯à¨¬¥à, á® á¯à ©â ¬¨. „«ï à ¡®âë á® á¯à ©â ¬¨ â ª ¦¥
¯à¥¤ãᬮâ७ ०¨¬ § ¯¨á¨ ¢ ¢¨¤¥®-އ“ á ¯à®§à ç­ë¬ 梥⮬. ‚ í⮬ ०¨¬¥
¨­ä®à¬ æ¨ï, ¯¥à¥¤ ¢ ¥¬ ï ¢ ¢¨¤¥®-އ“ ¯à®¢¥àï¥âáï ­  ­ «¨ç¨¥ ¡ ©â  #FF. …᫨
íâ®â ¡ ©â ®¡­ à㦨¢ ¥âáï, ⮠横« § ¯¨á¨ ¯à®¯ã᪠¥âáï ¨ ­  íªà ­¥ ¢ í⮬
¬¥á⥠®áâ ¥âáï ⥠¤ ­­ë¥, ª ª¨¥ ¡ë«¨ à ­¥¥. ’ ª¨¬ ®¡à §®¬ ­  íªà ­¥ ¬®¦­®
¡ëáâà® ¯à®à¨á®¢ë¢ âì á¯à ©âë, ¯à¥¤áâ ¢«ïî騥 ¨§ á¥¡ï ¯àאַ㣮«ì­ë¥ ª à⨭ª¨
á "¯à®§à ç­ë¬¨" 梥⠬¨.
ਬ¥à ¯à®£à ¬¬ë ¢ë¢®¤  ¯àאַ㣮«ì­®© ª à⨭ª¨ ­  íªà ­:
PAGE3 EQU #E2
RGADR EQU #89
LD A,#50 ; áâà ­¨æ  £à ä¨ç¥áª®£® ¢¨¤¥®íªà ­ 
OUT (PAGE3),A ; ãáâ ­®¢¨âì ¢ PAGE3
LD HL,Pucture ;  ¤à¥á ª à⨭ª¨ (àï¬ë¥ „ ­­ë¥)
LD DE,#C040+HorPlace ; ¯®«®¦¥­¨¥ ª à⨭ª¨ ­  íªà ­¥ ¯® £®à¨§®­â «¨
LD A,VerPlace ; ¯®«®¦¥­¨¥ ª à⨭ª¨ ­  íªà ­¥ ¯® ¢¥à⨪ «¨
OUT (RGADR),A
LD B,VerSize ; ¢ëá®â  ª à⨭ª¨
LOOP: PUSH DE ; § ¯®¬­¨âì ¯®«®¦¥­¨¥ ­  «¨­¨¨
PUSH BC ; § ¯®¬­¨âì áç¥â稪 ¢ëá®âë
LD BC,HorSize ; ¤«¨­  ª à⨭ª¨
LDIR ; ª®¯¨à®¢ âì «¨­¨î
POP BC
POP DE
INC A ; á«¥¤ãîé ï ª®®à¤¨­ â  ¯® Y
OUT (RGADR),A
DJNZ LOOP ; ¯®¢â®àïâì ­ã¦­®¥ ª®«¨ç¥á⢮ à §
“¯à ¢«¥­¨¥ ०¨¬®¬ ¢ë¢®¤  ­  íªà ­ (¢ª«î祭¨¥ ¢ë¢®¤  á ¯à®§à ç­ë¬¨
梥⠬¨, ®âª«î祭¨¥ ª®¯¨à®¢ ­¨ï ¢ ®á­®¢­®¥ އ“) ®áãé¥á⢫ï¥âáï ç¥à¥§
¬« ¤è¨¥ ¡¨âë ¯®àâ  áâà ­¨æë £à ä¨ç¥áª®£® íªà ­ .
€ªá¥«¥à â®à ®¯¥à æ¨© á Ž‡“.
€ªá¥«¥à â®à ®¯¥à æ¨© á Ž‡“ ¯à¥¤­ §­ ç¥­ ¤«ï ã᪮७¨ï ®¯¥à æ¨©
¯® ¯¥à¥á뫪¥ ¤ ­­ëå ¨«¨ ¯® § ¯®«­¥­¨î އ“ ®¤­¨¬ ¡ ©â®¬. €ªá¥«¥à â®à
¯à¨áãâáâ¢ã¥â ¢ ç¨áâ® Sprinter-®¢áª¨å ª®­ä¨£ãà æ¨ïå ¨ ¯®í⮬㠭¨ª ª ­¥
¬¥è ¥â à ¡®â¥ ®¡ëç­ëå Spectrum-®¢áª¨å ¯à®£à ¬¬.
Žá­®¢®©  ªá¥«¥à â®à  ï¥âáï ¡ëáâ஥ ¢­ãâ७­¥¥ އ“ ¢ ‹Œ.
ޝ¥à æ¨¨ ¯® ¯¥à¥á뫪¥ ¤ ­­ëå ¯à®¨§¢®¤ïâáï ¯ã⥬ § ¯¨á¨ ¡«®ª  ¤ ­­ëå ¢ íâ®
¢­ãâ७­¥¥ އ“,   § â¥¬ ª®¯¨à®¢ ­¨¨ ¥£® ¢ ­ã¦­®¥ ¬¥áâ® ¯ ¬ï⨠¨§ í⮣® އ“.
®á«¥ ®¤­®© § ¯¨á¨ ª®¯¨à®¢ ­¨¥ ¬®¦¥â ¯à®¨§¢®¤¨âìáï ­¥áª®«ìª® à § ¨ â ª¨¬
®¡à §®¬ ¬®¦­® ¯à®¨§¢®¤¨âì § ¯®«­¥­¨¥ íªà ­  ⥪áâãà ¬¨.
„«ï § ¯®«­¥­¨ï íªà ­  ®¤­¨¬ 梥⮬ ¨á¯®«ì§ã¥âáï ¤à㣮© ०¨¬
 ªá¥«¥à â®à . ‚ ­¥¬ ¢¬¥áâ® ª®¯¨à㥬®£® ¡«®ª  ¤ ­­ëå ¨§ ¢­ãâ७­¥£® އ“
¯à®¨§¢®¤¨âáï § ¯¨áì ¤ ­­ëå á è¨­ë ¯à®æ¥áá®à , ª®â®àë¥ ¢ íâ®â ¬®¬¥­â ­¥
¨§¬¥­ïîâáï.
«®ª ¤ ­­ëå, § ¯¨á뢠¥¬ë© ¢ އ“  ªá¥«¥à â®à  ¬®¦¥â ¨¬¥âì à §«¨ç­ãî
¤«¨­­ã ¨§ ¤¨ ¯ §®­  1..256 ¡ ©â.
“¯à ¢«¥­¨¥  ªá¥«¥à â®à®¬ ¯à®¨§¢®¤¨âáï ­¥¯®á।á⢥­­® ¨§ ¯à®£à ¬¬ë.
„«ï í⮣® ¨§¯®«ì§ãîâáï ª®¬ ­¤ë ¯à®æ¥áá®à , ª®â®àë¥ ä ªâ¨ç¥áª¨ ïîâáï
®¯¥à æ¨ï¬¨ ⨯  NOP.
â® ª®¬ ­¤ë LD A,A; LD B,B; LD C,C; LD D,D; LD E,E; LD H,H, LD L,L
 §­ ç¥­¨¥ ª®¬ ­¤ á«¥¤ãî饥:
LD B,B - ¢ëª«îç¨âì  ªá¥«¥â à®à.
LD D,D - ¢ª«îç¨âì  ªá¥«¥à â®à ¢ ०¨¬ ¯à¨¥¬  ¡ ©â  à §¬¥à  ¡«®ª 
¤ «¥¥ á«¥¤ã¥â ª®¬ ­¤  ⨯  LD A,dat, £¤¥ dat ¨ ¡ã¤¥â ­®¢ë¬
à §¬¥à®¬ ¡«®ª . …᫨ à §¬¥à ¡«®ª  ¡ë« ãáâ ­®¢«¥­ à ­¥¥,
¥£® ¬®¦­® ­¥ ãáâ ­ ¢«¨¢ âì.
LD C,C - ޝ¥à æ¨ï Fill - § ¯®«­¥­¨¥ ®¤­¨¬ ¡ ©â®¬. ®á«¥¤ãîé ï
ª®¬ ­¤  ⨯  LD (HL),A ¯à¨¢¥¤¥â ª § ¯®«­¥­¨î 㪠§ ­­®£®
à ­¥¥ ª®«¨ç¥á⢠ ¡ ©â §­ ç¥­¨¥¬ A
LD E,E - ޝ¥à æ¨ï Fill ¤«ï £à ä¨ç¥áª®£® íªà ­  - § ¯®«­¥­¨¥
¢¥à⨪ «ì­ëå «¨­¨©.
LD H,H - rezerved
LD L,L - ª®¯¨à®¢ ­¨¥ ¡«®ª . ®á«¥¤ãîé ï ª®¬ ­¤  ⨯  LD A,(HL)
¯à¨¢¥¤¥â ª § ¯®«­¥­¨î އ“  ªá¥«¥à â®à  ¤ ­­ë¬¨ ¨§  ¤à¥á  (HL),
  ª®¬ ­¤  ⨯  LD (DE),A ¯à¨¢¥¤¥â ª ¯¥à¥§ ¯¨á¨ ¤ ­­ëå ¨§ އ“
 ªá¥«¥à â®à  ¢ ®á­®¢­®¥ ¨«¨ ¢¨¤¥®-އ“.
LD A,A - ª®¯¨à®¢ ­¨¥ ¡«®ª  ¤«ï £à ä¨ç¥áª®£® íªà ­  ¯®¤®¡­  ª®¬ ­¤¥
LD L,L, ­® à ¡®â ¥â á ¢¥à⨪ «ì­ë¬¨ «¨­¨ï¬¨ íªà ­ .
ਬ¥à ¨á¯®«ì§®¢ ­¨ï  ªá¥«¥à â®à :
; ‘ç¨â ¥¬, çâ® íªà ­­ ï áâà ­¨æ  㦥 ®âªàëâ  ¯®  ¤à¥áã #C000
LD HL,#C040 ;  ¤à¥á ­ ç «  «¨­¨¨ ¯¥à¢®£® íªà ­ 
LD DE,#C180 ;  ¤à¥á ­ ç «  «¨­¨¨ ¢â®à®£® íªà ­ 
LD BC,#140 ; ¤«¨­  íªà ­  ¯® £®à¨§®­â «¨
DI ; § ¯à¥â¨âì ¯à¥à뢠­¨ï ¤«ï à ¡®âë á  ªá¥«¥à â®à®¬
LD D,D ; ¢ª«îç¨âì  ªá¥«¥à â®à ­  ãáâ ­®¢ªã à §¬¥à  ¡«®ª 
LD A,0 ; ãáâ ­®¢¨âì à §¬¥à ¡«®ª  - 256 ¡ ©â
LD A,A ; ãáâ ­®¢¨âì  ªá¥«¥à â®à ­  ª®¯¨à®¢ ­¨¥
; ¢¥à⨪ «ì­ëå «¨­¨©.
LDIR ; ª®¯¨à®¢ âì !
LD B,B ; ¢ëª«îç¨âì  ªá¥«¥à â®à
EI ; ¢ª«îç¨âì ¯à¥à뢠­¨ï
â®â ®â१®ª ¯à®£à ¬¬ë ¯à®¨§¢¥¤¥â ª®¯¨à®¢ ­¨¥ ¢á¥£® íªà ­  á ®¤­®£®
íªà ­  ­  ¤à㣮©. ‚à¥¬ï ¥£® ¨á¯®«¥­¨ï á®áâ ¢«ï¥â ¯à¨¬¥à­® 1.2 ¨­â .
„®¯®«­¨â¥«ì­ë¥ ä㭪樨  ªá¥«¥à â®à  ¯®ï¢«ïî騥áï ¢ ª®­ä¨£ãà æ¨¨
Sprinter-3 à ¡®â îâ ¯®¤®¡­ë¬ ¦¥ ®¡à §®¬. „«ï ¢ë¯®«­¥­¨ï «®£¨ç¥áª¨å ä㭪権
¨á¯®«ì§ãîâáï ª®¬ ­¤ë XOR (HL); OR (HL); AND (HL).
ਬ¥à ªá®àª¨ ¡«®ª  ¢ 256 ¡ ©â.
LD HL,ADRES_1
LD DE,XOR_DAT
DI
LD D,D
LD A,0 ; ç¨á«® ¡ ©â, ª®â®àë¥ ­ ¤® ¯à®ªá®à¨âì
LD L,L
LD A,(DE) ; ‚§ïâì ¡«®ª ¢ އ“  ªá¥«¥à â®à 
XOR (HL) ; ¯à®¨§¢¥á⨠®¯¥à æ¨î XOR á ¤ ­­ë¬¨  ªá¥«¥à â®à 
LD (HL),A ; § ¯®¬­¨âì ¢ އ“ १ã«ìâ â ®¯¥à æ¨¨
LD B,B
EI
‘ª®à®áâì à ¡®âë  ªá¥«¥à â®à  ®£à ­¨ç¨¢ ¥âáï ⮫쪮 䨧¨ç¥áª®©
᪮à®áâìî à ¡®âë ®á­®¢­®£® އ“. Ž¯à¥¤¥«¨âì ¢à¥¬ï à ¡®âë ª®¬ ­¤ë á
 ªá¥«¥à â®à®¬ ¬®¦­® ¯® â ª®© ¯à¨¬¥à­®© ä®à¬ã«¥:
‚६ï à ¡®âë = ¢à¥¬ï à ¡®âë ª®¬ ­¤ë ¡¥§  ªá¥«¥à â®à  + ¢à¥¬ï
à ¡®âë  ªá¥«¥à â®à 
‚६ï à ¡®âë  ªá¥«¥à â®à  = ç¨á«® ¯¥à¥áë« ¥¬ëå ¡ ©â /7000000 (ᥪ㭤)
Žâª«î祭¨¥ ¯à¥à뢠­¨© ¢® ¢à¥¬ï à ¡®âë  ªá¥«¥à â®à  ­¥®¡å®¤¨¬®, â ª
ª ª ¢ íâ®â ¬®¬¥­â ç áâ¨ç­® ¬¥­ï¥âáï á¨á⥬  ª®¬ ­¤ ¯à®æ¥áá®à  ¨ ¯à®£à ¬¬ 
­  ¯à¥à뢠­¨¨ ­¥ ᬮ¦¥â à ¡®â âì ­®à¬ «ì­®.
‡ ª«î祭¨¥.
 ¡®â  ­ ¤ Sprinter-®¬ ¯à®¤®«¦ ¥âáï. ‘®¢¥à襭áâ¢ã¥âáï ¦¥«¥§® ¨
¡¨®á. ¨è¥âáï á®äâ, ¯®¤¤¥à¦¨¢ î騩 à áè¨à¥­­ë¥ ०¨¬ë à ¡®âë ª®¬¯ìîâ¥à .
® ¢á¥¬ ª®¬¬¥àç¥áª¨¬ ¢®¯à®á ¬ á¢ï§ ­­ë¬ á ¯à¨®¡à¥â¥­¨¥¬ ª®¬¯ìîâ¥à 
¬®¦­® ®¡à é âìáï ¢ ä¨à¬ã "¥â¥àá":
Adress: ‘ ­ªâ-¥â¥à¡ãà£, ã«. ‚®ááâ ­¨ï, ¤. 35, ®ä. 31.
Phone: (812)-327-35-31
E-mail: peters@atlant.ru
® â¥å­¨ç¥áª¨¬ ¢®¯à®á ¬ ®¡à é âìáï ª® ¬­¥:
Fido: Ivan Mak (2:5030/529.24)
E-mail: ivan_mak@yahoo.com (¢à¥¬¥­­® § ªàëâ)
File diff suppressed because it is too large Load Diff