Перейти к содержанию

I/O-порты

Карта регистров

Системные

Индекс Адрес Доступ Имя Описание
0000h 00020000h R SYS_STATUS Статус системы
0001h 00020001h R/W SYS_CTRL Управление системой
0002h 00020002h - IRQ_PEND Ожидающие прерывания
0003h 00020003h - IRQ_MASK Маска прерываний
0004h 00020004h R TIMER_LOW Младшая часть таймера
0005h 00020005h R TIMER_HIGH Старшая часть таймера
0006h 00020006h R UPTIME Время работы системы
0007h 00020007h R/W BANK Страница окна VRAM в 64 КБ (0 — следовать за TERM_BUFFER)
0008h 00020008h R/W KBD_CTRL Управление клавиатурой
0009h 00020009h R KBD_SCANCODE Скан-код следующей клавиши (PC set-1)
000Ah 0002000Ah R KBD_MODIFIER Зафиксированные модификаторы
000Bh 0002000Bh R KBD_ASCII ASCII-код активной клавиши
000Ch 0002000Ch R RAM_SIZE Размер ОЗУ
0010h 00020010h R CPU_FEATURES Возможности CPU
0011h 00020011h R/W BOOT_DEVICE Загрузочное устройство
0012h 00020012h R/W SYS_FLAGS Системные флаги
0013h 00020013h R ERROR_CODE Код последней ошибки

Терминал и видео

Индекс Адрес Доступ Имя Описание
0018h 00020018h W TERM_OUT Вывод символа в терминал
0019h 00020019h W TERM_COMMAND Команда терминала (см. ниже)
001Ah 0002001Ah R/W VC_MODE Режим видеокарты
001Bh 0002001Bh R/W TERM_ATTR Атрибут символа (младшие 16 = fg, старшие 16 = bg)
0060h 00020060h R TERM_RES_X Ширина экрана (символы или пиксели)
0064h 00020064h R TERM_RES_Y Высота экрана
0068h 00020068h R/W TERM_POS_X Позиция курсора по X
006Ch 0002006Ch R/W TERM_POS_Y Позиция курсора по Y
0070h 00020070h R/W TERM_BUFFER База отображения VRAM (и база окна, пока BANK = 0)

Команды TERM_COMMAND:

Значение Команда
01h Очистить экран
02h Включить курсор
03h Выключить курсор
04h Включить прокрутку
05h Выключить прокрутку

Часы реального времени (RTC)

Индекс Адрес Доступ Имя Описание
0020h 00020020h R RTC_SEC Секунды
0021h 00020021h R RTC_MIN Минуты
0022h 00020022h R RTC_HOUR Часы
0023h 00020023h R RTC_DAY День
0024h 00020024h R RTC_MONTH Месяц
0025h 00020025h R RTC_YEAR Год
0026h 00020026h R RTC_WEEKDAY День недели
0027h 00020027h R RTC_CENTURY Век
0028h 00020028h R RTC_UNIX_TIME Unix time (32-бит, little-endian)

Программируемый таймер (PIT)

Индекс Адрес Доступ Имя Описание
0030h 00020030h R/W PIT_COMMAND Команда PIT
0031h 00020031h R/W PIT_CH0 Канал 0
0032h 00020032h R/W PIT_CH1 Канал 1
0033h 00020033h R/W PIT_CH2 Канал 2
0034h 00020034h R PIT_STATUS Статус PIT

Мышь

Индекс Адрес Доступ Имя Описание
0040h 00020040h R/W MOUSE_X Координата X
0044h 00020044h R/W MOUSE_Y Координата Y
0048h 00020048h R/W MOUSE_BTN Кнопки мыши
004Ch 0002004Ch R/W MOUSE_DELTA_X Смещение по X
0050h 00020050h R/W MOUSE_DELTA_Y Смещение по Y
0054h 00020054h R/W MOUSE_SENS Чувствительность (fixed-point 1/256)

Генератор случайных чисел (RNG)

Индекс Адрес Доступ Имя Описание
0080h 00020080h R RNG_RAND Следующее случайное значение
0081h 00020081h W RNG_SEED Переинициализация генератора

Сопроцессор с плавающей точкой (FPU)

Индекс Адрес Доступ Имя Описание
0090h 00020090h R/W FPU_A Операнд A (IEEE 754 float32)
0094h 00020094h R/W FPU_B Операнд B (IEEE 754 float32)
0098h 00020098h W FPU_OP Код операции (выполняется сразу)
009Ch 0002009Ch R FPU_RESULT Результат
00A0h 000200A0h R/W FPU_FLAGS Флаги состояния

Звукогенератор (PSG)

Индекс Адрес Доступ Имя Описание
00B0h 000200B0h R/W PSG_TONE0 Период тона канала 0 (16-бит)
00B2h 000200B2h R/W PSG_TONE1 Период тона канала 1
00B4h 000200B4h R/W PSG_TONE2 Период тона канала 2
00B6h 000200B6h R/W PSG_NOISE Период шума
00B7h 000200B7h R/W PSG_MIXER Микшер (bits 0-2 - тон, 3-5 - шум)
00B8h 000200B8h R/W PSG_VOL0 Громкость канала 0 (4 бита) + бит 7 - огибающая
00B9h 000200B9h R/W PSG_VOL1 Громкость канала 1
00BAh 000200BAh R/W PSG_VOL2 Громкость канала 2
00BBh 000200BBh R/W PSG_ENV_PERIOD Период огибающей (16-бит)
00BDh 000200BDh R/W PSG_ENV_SHAPE Форма огибающей (см. ниже)
00BEh 000200BEh R PSG_ENV_LEVEL Текущий уровень огибающей (0-15)

Классы устройств

Индекс Адрес Доступ Имя Описание
0200h 00020200h R/W DEV_CLASS_COUNT Количество классов
0201h 00020201h R/W DEV_CLASS_SELECT Выбор класса
0202h 00020202h R DEV_CLASS_CLASS Класс устройства
0203h 00020203h R DEV_CLASS_VENDOR Производитель
0204h 00020204h R DEV_CLASS_NAME Имя устройства
… … … … …
023Fh 0002023Fh R DEV_CLASS_NAME_END Конец имени

Дисковый контроллер XPB1

Индекс Адрес Доступ Имя Описание
0100h 00020110h R DISK_STATUS Статус
0101h 00020111h R/W DISK_CTRL Управление (команды)
0102h 00020112h R/W DISK_LBA Младшая часть LBA
0103h 00020113h R/W DISK_LBA_HI Старшая часть LBA
0104h 00020114h R/W DISK_BUFFER Буфер сектора
0105h 00020115h R/W DISK_COUNT Число секторов
0106h 00020116h R/W DISK_DRIVE Номер диска
0107h 00020117h R/W DISK_IRQ IRQ
0108h 00020118h R/W DISK_SIZE Размер диска
0109h 00020119h R/W LBA_SIZE Размер LBA
010Ah 0002011Ah R DISK_DOUT Вывод данных
010Bh 0002011Bh R/W DISK_DIN Ввод данных
010Ch 0002011Ch R/W BUFFER_OFFSET Смещение буфера

Команды DISK_CTRL:

Код Команда
00h Idle / reset
01h Acknowledge ready
02h Read single sector
03h Read multiple sectors
04h Write single sector
05h Write multiple sectors
08h Write DISK_DIN в буфер по BUFFER_OFFSET
10h Format (обнулить DISK_COUNT секторов начиная с DISK_LBA)

Биты статуса DISK_STATUS:

Бит Имя Описание
0 BUSY Устройство занято
1 ERROR Ошибка