Устройства¶
Раздел описывает периферийные устройства системы, их назначение и особенности работы.
Классы устройств¶
Каждое устройство относится к одному из классов:
| Код | Класс |
|---|---|
00h |
Nome |
01h |
Storage |
02h |
Input |
03h |
Timer |
04h |
RTC |
05h |
Video |
06h |
RNG |
07h |
FPU |
08h |
Audio (PSG) |
FFh |
Unknown |
Производители¶
| Код | Производитель |
|---|---|
00h |
None |
01h |
System |
Видеокарты¶
Видеокарта выбирается в GUI эмулятора или через параметр --vc командной строки.
Доступные варианты¶
| Имя | Описание |
|---|---|
default |
Комбинированная текстовая/графическая карта, режим выбирается через VC_MODE |
default-text |
Только текстовый режим 80x25, 16 цветов |
default-mono |
Только монохромный текстовый режим 80x25 (зелёный фосфор) |
Режимы видеокарты default¶
Режим задаётся через регистр VC_MODE (0x0002001Ah):
| Код | Описание |
|---|---|
00h |
80x25 текст, шрифт 8x16, 16-цветная палитра VGA (640x400) |
01h |
320x200 графический, 256 цветов (аналог Mode 13h) |
10h |
40x30 текст, шрифт 8x8, 16 цветов (320x240) |
11h |
80x60 текст, шрифт 8x8, 16 цветов (640x480) |
12h |
80x30 текст, шрифт 8x8 растянут до 8x16, 16 цветов (640x480) |
20h |
320x240 графический, 256 цветов |
21h |
640x480 графический, 256 цветов |
22h |
800x600 графический, 256 цветов |
FPU (сопроцессор с плавающей точкой)¶
FPU работает с числами в формате IEEE 754 float32. Для выполнения операции нужно записать операнды в FPU_A и FPU_B, затем записать код операции в FPU_OP. Результат читается из FPU_RESULT.
Коды операций¶
| Код | Операция | Описание |
|---|---|---|
00h |
ADD | Сложение |
01h |
SUB | Вычитание |
02h |
MUL | Умножение |
03h |
DIV | Деление |
04h |
SQRT | Квадратный корень |
05h |
MIN | Минимум |
06h |
MAX | Максимум |
07h |
CMP | Сравнение |
10h |
ITOF | int32 → float |
11h |
FTOI | float → int32 (биты в RESULT) |
12h |
UTOF | uint32 → float |
13h |
FTOU | float → uint32 (биты в RESULT) |
20h |
SIN | Синус |
21h |
COS | Косинус |
22h |
TAN | Тангенс |
23h |
COT | Котангенс |
24h |
LOG | Логарифм |
25h |
EXP | Экспонента |
Флаги FPU¶
Регистр FPU_FLAGS содержит биты состояния:
| Бит | Имя | Описание |
|---|---|---|
| 0 | ZERO | Результат равен нулю |
| 1 | SIGN | Отрицательный результат |
| 2 | DIV0 | Деление на ноль |
| 3 | INVALID | Некорректная операция |
| 4 | GT | A > B (для CMP) |
| 5 | EQ | A == B |
| 6 | LT | A < B |
PSG (звукогенератор)¶
Программируемый звукогенератор с тремя тональными каналами и каналом шума.
Параметры:
- Частота дискретизации: 44100 Гц.
- Моно, 16 бит.
- Вывод через SDL2.
Расчёт тона¶
Период тона вычисляется по формуле:
Пример: для 440 Гц (нота A4) период ≈ 44100 / (2 * 440) ≈ 50.
Микшер¶
PSG_MIXER:
- Биты 0–2 - включение тона для каналов 0–2.
- Биты 3–5 - включение шума.
Огибающая¶
PSG_VOLn:
- Биты 0–3 - громкость канала.
- Бит 7 - заменить громкость уровнем огибающей.
PSG_ENV_SHAPE:
| Значение | Форма |
|---|---|
| 0 | Выключена |
| 1 | Attack (0 → 15) |
| 2 | Decay (15 → 0) |
| 3 | Triangle (0 → 15 → 0, циклически) |
| 4 | Sawtooth (0 → 15, циклически) |
RNG (генератор случайных чисел)¶
- Чтение
RNG_RANDпродвигает генератор и возвращает следующее значение. - Запись в
RNG_SEEDпереинициализирует генератор (для воспроизводимых последовательностей).
Клавиатура¶
Работает через GUI эмулятора.
KBD_ASCII(0x0002000B) иKBD_SCANCODE(0x00020009) читают из одного и того же FIFO-слота, поэтому остаются синхронизированными. Чтение любого из них потребляет слот.KBD_SCANCODEвозвращает скан-код PC set-1 (Escape=0x01, цифры 1–9=0x02–0x0A,0=0x0B, Enter=0x1C, пробел=0x39, стрелки=0x48/0x50/0x4B/0x4D, Delete=0x53и т.д.).- Клавиши отображаются по физическому положению (фиксированная US-раскладка), поэтому каждая клавиша работает одинаково независимо от раскладки хост-ОС. Клавиша, которая на US-раскладке печатает
<, всегда даёт,без Shift и<с Shift - даже если на хосте она помечена какБ. KBD_ASCIIучитывает Shift/Caps:SHIFT+4→$,CAPS+буква→A,SHIFT+CAPS+буква→a.
Битовая маска KBD_MODIFIER:
| Бит | Модификатор |
|---|---|
| 0 | SHIFT |
| 1 | CTRL |
| 2 | ALT |
| 3 | CAPS (состояние Caps Lock) |
| 4 | TAB (удерживается) |
| 5 | WIN / Command / Super |
Мышь¶
MOUSE_X/MOUSE_Yограничены значениямиTERM_RES_X/TERM_RES_Y(0x20060/0x20064). В графических режимах диапазон - размер в пикселях (640x480 →0..639/0..479), в текстовых - сетка символов (80x25 →0..79/0..24).MOUSE_X/MOUSE_Yможно записывать: программа может переставить курсор (например, в центр экрана). Значения вне диапазона обрезаются до текущего разрешения.MOUSE_DELTA_X/MOUSE_DELTA_YиMOUSE_BTNтоже записываемые.MOUSE_SENS(0x20054) - множитель чувствительности в формате fixed-point 1/256.0x100(=256) - это 1.0 (по умолчанию).0x200удваивает скорость,0x80уменьшает вдвое. Запись0сбрасывает в 1.0.
Дисковый контроллер (XPB1)¶
Дисковый контроллер подключён через шину XPB. Банк 0001h и XPB #01 всегда зарезервированы под него.
Образы дисков¶
Поддерживаются форматы:
.bin,.img- сырые образы секторов..hex- формат Logisim/simple hex.