Вернуться на ГЛАВНУЮ страницу
ОПИСАНИЕ
|
У меня есть куча информации по ATM-1 и ATM-2. А так как я человек не жадный, то в самое ближайшее время она будет выложена в этот раздел!
Здесь будет описание архитектуры компьютера, структура портов и экранов, различные режимы работы и все, что с этим связано на простом и доступном языке.
4
|
Технические характеристики разных моделей ATM-turbo | |
4
|
Описание портов и архитектуры ATM-turbo 1 | |
4
|
Описание портов и архитектуры ATM-turbo 2 и TURBO 2+ | |
4
|
Работа с XT(AT)-клавиатурой на TURBO 2+ |
Технические
характеристики компьютеров
ATM-turbo,
ATM-turbo 2, TURBO 2+
и
разрабатываемого TURBO 2++
(на
основе существующих доработок).
========
|
ATM-turbo 512 (v4.50)
|
ATM-turbo 2 (v6.40)
|
TURBO 2+ (v.7.10)
|
TURBO 2++(v7.30)
|
||||
ХАРАКТЕРИСТИКА
|
ТИП
|
ПРИМЕЧАНИЕ
|
ТИП
|
ПРИМЕЧАНИЕ
|
ТИП
|
ПРИМЕЧАНИЕ
|
ТИП
|
ПРИМЕЧАНИЕ
|
Процессор
|
Z80
|
Любая буква кроме L (3.5Mhz)
|
Z80
|
Любая буква кроме L (3.5Mhz)
|
Z80
|
Любая буква кроме L (3.5Mhz)
|
Z80
|
Любая буква кроме L (3.5Mhz)
|
Режим TURBO (7.0Mhz)
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
ПЗУ
|
Основ-ное
|
64Кб (м/с27512)
|
Основ-ное
|
64Кб (м/с27512)
|
Основ-ное
|
64Кб (м/с27512)
|
Основ-ное
|
64Кб (м/с27512)
|
.
|
Макси-маль-ное
|
128Кб(м/с27010)
|
Макси-маль-ное
|
128Кб(м/с27010)
|
Макси-маль-ное
|
128Кб(м/с27010)
|
Макси-маль-ное
|
128Кб(м/с27010)
|
ОЗУ
|
Мини-маль-ное
|
128Кб (16хРУ5)
|
Мини-маль-ное
|
128Кб (16хРУ5)
|
Мини-маль-ное
|
128Кб (16хРУ5)
|
Мини-маль-ное
|
128Кб (16хРУ5)
|
.
|
Макси-маль-ное
|
512Кб(16хРУ7)
|
Макси-маль-ное
|
512Кб(16хРУ7)
|
Макси-маль-ное
|
512Кб(16хРУ7)
|
Макси-маль-ное
|
512Кб(16хРУ7)
|
.
|
.
|
=====
|
.
|
=====
|
.
|
1024Кб(32хРУ7)
|
.
|
1024Кб(32хРУ7)
|
.
|
.
|
=====
|
.
|
=====
|
.
|
=====
|
.
|
2048Кб (2хSIMM-30pin)Второй мегабайт
- по стандарту PROFI (порт #DFFD)
|
КЭШ
|
Нет
|
.
|
Нет
|
.
|
Нет
|
.
|
Есть
|
Характеристики определяются. Будет или
32Кб, или 128Кб.
|
Диспетчер памяти (любая страница ОЗУ
или ПЗУ ставится в любую четверть адресного пространства)
|
Нет
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
Только мегабайт по стандарту ATM. Мегабайт
PROFI - только по адресу #C000
|
Включение страницы 0 ОЗУ по адресу
#0000
|
Есть
|
Одновременно по адресу #4000 включается
страница 4
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Видеорежимы
|
Sinclair 256x192 |
Стандартный. Атрибут на знакоместо,16
цветов
|
Sinclair 256x192
|
Стандартный. Атрибут на знакоместо,16
цветов
|
Sinclair 256x192
|
Стандартный. Атрибут на знакоместо,16
цветов
|
Sinclair 256x192
|
Стандартный. Атрибут на знакоместо,16
цветов
|
.
|
Графич. 640х200 |
"Аппаратный мультиколор": атрибут
на байт
|
Графич. 640х200
|
"Аппаратный мультиколор": атрибут
на байт
|
Графич. 640х200
|
"Аппаратный мультиколор": атрибут
на байт
|
Графич. 640х200
|
"Аппаратный мультиколор": атрибут
на байт
|
.
|
Графич. 320х200
|
Каждая точка своим цветом, 16 цветов,
аналог EGA
|
Графич. 320х200
|
Каждая точка своим цветом, 16 цветов,
аналог EGA
|
Графич. 320х200
|
Каждая точка своим цветом, 16 цветов,
аналог EGA
|
Графич. 320х200
|
Каждая точка своим цветом, 16 цветов,
аналог EGA
|
.
|
=====
|
=====
|
Текст. 80х25
|
Аппаратный консольный вывод символов
из специального ПЗУ. 16 цветов. Атрибут на символ
|
Текст. 80х25
|
Аппаратный консольный вывод символов
из специального ПЗУ. 16 цветов. Атрибут на символ
|
Текст. 80х25
|
Аппаратный консольный вывод символов
из специального ПЗУ. 16 цветов. Атрибут на символ
|
Палитра
|
Есть
|
64 цвета при 16-ти одновременно отображаемых
(аналог EGA)
|
Есть
|
64 цвета при 16-ти одновременно отображаемых
(аналог EGA)
|
Есть
|
64 цвета при 16-ти одновременно отображаемых
(аналог EGA)
|
Есть
|
64 цвета при 16-ти одновременно отображаемых
(аналог EGA)
|
Встроенные ОС
|
BASIC 48/128
|
Со встроенным драйвером принтера.
|
BASIC 48/128
|
Со встроенным драйвером принтера.
|
BASIC 48/128
|
Со встроенным драйвером принтера.
|
BASIC 48/128
|
Со встроенным драйвером принтера.
|
.
|
TR-DOS
|
v5.03 с дополнитель- ными подпрог-
раммами для стартового меню
|
TR-DOS
|
v5.03 с дополнитель- ными подпрог-
раммами для стартового меню
|
TR-DOS
|
v5.03 с дополнитель- ными подпрог-
раммами для стартового меню
|
TR-DOS
|
v5.03 с дополнитель- ными подпрог-
раммами для стартового меню
|
.
|
CP/M2.2
|
BIOS 1.03
|
CP/M2.2
|
BIOS 1.06 или 1.07.12
|
CP/M2.2
|
BIOS 1.07.12(13fix)
|
CP/M2.2
|
BIOS 1.07.12(13fix)
|
.
|
=====
|
=====
|
TBIOS
|
Вместо CP/M
|
TBIOS
|
Вместо CP/M
|
TBIOS
|
Вместо CP/M. Или вместе с ней, но в КЭШе
|
Вывод изображения
|
RGB
|
.
|
RGB
|
.
|
RGB
|
.
|
RGB
|
.
|
.
|
Video
|
Черно-белый
|
Video
|
Черно-белый
|
Video
|
Черно-белый
|
Video
|
Черно-белый
|
.
|
PAL
|
цветной
|
Нет
|
.
|
Нет
|
.
|
Нет
|
.
|
Контроллер дисковода1818ВГ93
|
Есть
|
.
|
Есть
|
С цифровой ФАПЧ
|
Есть
|
С цифровой ФАПЧ
|
Есть
|
С цифровой ФАПЧ. Турбированный
|
Контроллер IDE
|
Нет
|
.
|
Есть
|
HDD любой емкости, CD-ROM
|
Есть
|
HDD любой емкости, CD-ROM
|
Есть
|
HDD любой емкости, CD-ROM
|
Порт атрибутов #FF
|
Нет
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Работа с магнитофоном
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Звук
|
BEEPer
|
Однобитный через динамик
|
BEEPer
|
Однобитный через динамик
|
BEEPer
|
Однобитный через динамик
|
BEEPer
|
Однобитный через динамик
|
.
|
Covox
|
ЦАП на м/с 572ПА1
|
Covox
|
ЦАП на м/с 572ПА1
|
Covox
|
ЦАП на м/с 572ПА1
|
Covox
|
ЦАП на м/с 572ПА1
|
.
|
AY
|
Стерео, 3 канала AY-3-8912
|
AY
|
Стерео, 3 каналаAY-3-8912или 8910
|
AY
|
Стерео, 3 каналаAY-3-8912или 8910
|
AY
|
Стерео, 3 каналаAY-3-8912или 8910
|
.
|
=====
|
=====
|
=====
|
=====
|
=====
|
=====
|
Turbo-Sound
|
Два AY "бутербродом", стерео,
6 каналов.
|
Аналого-цифровой преобразователь (АЦП)
|
Есть
|
1 канал на м/с 1113ПВ1А Макс. частота
выборки 9Кгц
|
Есть
|
1 канал на м/с 5712ПА1 (1108ПА1) +155ИР17
Макс.частота выборки до 200Кгц
|
Есть
|
8 каналов на м/с 5712ПА1 (1108ПА1) +155ИР17
Макс.частота выборки до 200Кгц
|
Есть
|
8 каналов на м/с 5712ПА1 (1108ПА1) +155ИР17
Макс.частота выборки до 200Кгц
|
Внутренний модем
|
Есть
|
На базе ЦАП/АЦП
|
Есть
|
На базе ЦАП/АЦП
|
Нет
|
.
|
Нет
|
.
|
Внутренний звуковой усилитель
|
Есть
|
2x1 Вт
|
Есть
|
2x1 Вт
|
Есть
|
2x1 Вт
|
Есть
|
2x1 Вт
|
Сетевой выход
|
Нет
|
.
|
Есть
|
.
|
Нет
|
.
|
Нет
|
.
|
Выход на принтер
|
Есть
|
Стандартный CENTRONIX
|
Есть
|
Стандартный CENTRONIX
|
Есть
|
Стандартный CENTRONIX
|
Есть
|
Стандартный CENTRONIX
|
Контроллер клавиатуры
|
a)
|
Стандартная механическая матрица 8х5(40
клавиш)
|
a)
|
Стандартная механическая матрица 8х5(40
клавиш)
|
a)
|
Стандартная механическая матрица 8х5(40
клавиш)
|
a)
|
Стандартная механическая матрица 8х5(40
клавиш)
|
.
|
b)
|
Расширенная механическая матрица (до
64 клавиш)
|
b)
|
=====
|
b)
|
=====
|
b)
|
=====
|
.
|
c)
|
=====
|
c)
|
Контроллер XT-клавиатуры на м/с ОЗУ 537РУ10
|
c)
|
Контроллер XT(AT)-клавиатуры(в зависимости
от прошивки спец.ПЗУ)на ОЭВМ 1816ВЕ31(i8031)
|
c)
|
Контроллер XT(AT)-клавиатуры(в зависимости
от прошивки спец.ПЗУ)на ОЭВМ 1816ВЕ31(i8031)
|
Стандартный RS-232 |
Нет
|
.
|
Нет
|
.
|
Есть
|
На той же ОЭВМ 1816ВЕ31(i8031)
|
Есть
|
На той же ОЭВМ 1816ВЕ31(i8031)
|
Выходы на два Sinclair-джойстика
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Kempston-джойстик
|
Нет
|
.
|
Нет
|
.
|
Нет
|
.
|
Есть
|
.
|
Мышь
|
Нет
|
.
|
Нет
|
.
|
Есть
|
Через RS-232, но не совместима с кемпстон-мышью
|
Есть
|
Через RS-232, но не совместима с кемпстон-мышью
|
Разъем для периферии
|
Есть
|
Управляется через порт #FA
|
Есть
|
Управляется через порт #FA
|
Есть
|
Управляется через порт #FA
|
Есть
|
Управляется через порт #FA
|
Функциональная законченность (все
разъемы на плате)
|
Нет
|
.
|
Есть
|
.
|
Есть
|
.
|
Есть
|
.
|
Системный разъем (слот)
|
Нет
|
.
|
Нет
|
.
|
Нет
|
.
|
Есть
|
Стандарт NEMO, один слот
|
Защита платы
|
Есть
|
Защищена ПЛМ1556ХЛ8, на которой построен
видеоконтроллер
|
Есть
|
Защищена ПЛМ1556ХЛ8, на которой построен
видеоконтроллер
|
Есть
|
Защищена ПЛМ1556ХЛ8, на которой построен
видеоконтроллер
|
Есть
|
Защищена ПЛМ1556ХЛ8, на которой построен
видеоконтроллер
|
Конструктив
|
---
|
Одна плата 312х132
|
---
|
Одна плата 335х190
|
---
|
Одна плата 335х190
|
---
|
Одна плата 335х190(220???)
|
Площадь платы
|
---
|
4.12дм2
|
---
|
6.36дм2
|
---
|
6.36дм2
|
---
|
Около 7.37дм2
|
Количество микросхем
|
---
|
99 штук
|
---
|
Посчитаю - скажу
|
---
|
127 штук
|
---
|
???
|
Питание
|
---
|
+5V, +12V
|
---
|
+5V, +12V.А также -12V для ЦАП/АЦП (но
есть и внутренний источник)
|
---
|
+5V, +12V.А также -12V для ЦАП/АЦП (но
есть и внутренний источник)
|
---
|
+5V, +12V.А также -12V для ЦАП/АЦП (но
есть и внутренний источник)
|
Программная совместимость с другими
клонами (в стандартном ZX-режиме)
|
60%
|
Без доработок
|
90%
|
Без доработок
|
90%
|
Без доработок
|
95-96%
|
Без доработок
|
.
|
90-95%
|
С доработками расширенных портов и дешифрации
|
95-96%
|
С небольшой доработкой
|
95-96%
|
С небольшой доработкой
|
???
|
---
|
Информация
по ATM-turbo1(512К):
(платы 4.20-4.50 и 5.20)
Порт out #FE:
Как и на любом Спектруме он управляет бордюром и звуком -
D0-D2 -
цвет бордюра (8 цветов) - BRG
D3 - запись сигнала на магнитофон
D4 - управление звуковым каналом ("бипером")
D5-D7 - не используются.
Кроме стандартных функций введены новые, путем сброса в "0" некоторых адресных линий порта:
A7=0(именно адресная шина: то есть вывод не в #FE, а, например, в #7E! Не путать с шиной данных!!! В дальнейшем адресные шины будут обозначаться An: а шины данных - Dn) - CPUS: выключение ПЗУ, вместо него с адреса #0000 включается страница 0, а с адреса #4000 - страница 4 вместо страницы 5 с экраном(экран как и прежде располагается в 5(7) странице ОЗУ, но для доступа к нему необходимо включать эти страницы в верхней памяти по #7FFD). Это, естественно, нужно в CP/M, но ничто не мешает использовать его в обычном режиме. Правда в этом режиме недоступны порты TR-DOS, так что для работы с дисководом нужно прыгать в обычный режим: устанавливая в порте #FE линию A7 в единицу. Также не действует переключение ПЗУ через #7FFD (хотя ОЗУ, экраны, защелка верхней памяти работают): но попытавшись изменить через #7FFD сигнал ROM2: и включив позже ПЗУ обратно, вы увидите, что ваш труд не пропал даром!
A6 - RG0(A6=1
- RG0=1 и наоборот)
и
A5 - RG1(также как и с A6)
включение расширенных экранов, кроме
того именно при обнулении RG0 происходит перепутывание памяти. Комбинации:
RG0=1 RG1=1 - sinclair-режим 256x192
RG0=0 RG1=1 - режим 640x200, атрибут на байт.
RG0=0 RG1=0 - режим 320x200, 16 цветов, аналог
EGA.
RG0=1 RG1=0 - не используется...
-----------
A3 - Включение
BRIGHT 1 для бордюра! То есть на бордюр можно выводить не 8, а 16 цветов!
(Значение бита инверсно, то есть A3=0 - BRIGHT1, A3=1 - BRIGHT0)
Маленькое НО: использование обнуления старших адресов порта #FE является не совсем удачным, так как возникла несовместимость с достаточно большим, пусть и не фатально, количеством ПО, которое вываливается в высокую графику и виснет из-за перепутывания памяти... Я это "вылечил" тумблером, которые когда надо блокировали обнуление при обращении к #FE адресов A7,6,5...
Порт in #FE:
как и в стандартном Спектруме:
D0-D4 -
чтение одной из пяти клавиш полуряда клавиатуры.
A8-A15 - выбор полурядов клавиатуры, путем сброса
соответствующего бита в ноль.
D5 - ...данные уточняются.
D6 - чтение сигнала с магнитофона.
Исключение -
D7 - это системный сигнал Z. Он активизируется (устанавливается
в "1") строго через определенное время после INT. На этом строится
защита ПЗУ CP/M в АТМ - оно закодировано (вернее та часть, которая перекидывается
позднее в ОЗУ): и ключом к коду является подученное число тактов до установки
Z.
Порт out #FB
- вывод на принтер (centronix):
D0-D7 - данные. Также по #FB работает встроенный
COVOX
A7=0 - строб данных, то есть вывод в на принтер
осуществляется выводом в этот порт трижды -
OUT (#FB), A
OUT (#7B), A
OUT (#FB), A
А вообще-то это стандартный LPRINT III
Порт in #FB - чтение CENTRONIX:
D7 - BUSY
с принтера ("0" - свободен, "1" - занят)
D6 - ULINE - для встроенного модема
D0-D5 - всегда в "1"
A7 - "1"
- так называемый CPSYS: включение страницы ПЗУ под номером 0 с прошитой CP/M.
"0" - работа в стандартных для Спектрума страницах ПЗУ...
Всего в ПЗУ 27512 таких страниц 4 -
0 - CP/M
1 - TR-DOS 5.03
2 - BASIC 128
3 - BASIC 48
Включение CPSYS также блокирует переключение ПЗУ через #7FFD с сохранением выведенного числа до отключения этого режима. Зато сохраняется возможность доступа к портам TR-DOS (без включения ПЗУ TR-DOS). Для этого просто надо сделать CALL в промежуток от 15616 до 15871, где организованы нужные подпрограммы. Стандартным же образом доступ к этим портам и прекращается - путем выхода за пределы 16383.
В зависимости от режима работы карта памяти выглядит так:
Mode
|
Spectrum-128
|
Spectrum-48
|
TR-DOS
|
CP/M-system
|
CP/M-users
|
ROMs
|
ROM2=0
|
ROM2=1
|
ROM2=0(!!!)
|
ROM2=x
|
ROM2=x
|
#0000
|
ROM-2
|
ROM-3
|
ROM-1
|
ROM-0
|
RAM-0
|
#4000
|
RAM-5
|
RAM-5
|
RAM-5
|
RAM-5
|
RAM-4
|
#8000
|
RAM-2
|
RAM-2
|
RAM-2
|
RAM-2
|
RAM-2
|
#C000
|
порт #7FFD
|
порт #7FFD
|
порт #7FFD
|
RAM - 1 или 3
|
RAM-3
|
Порт in/out #FA
- идет на внешний разъем - и представляет собой нечто похожее на системную шину:
Число выводимое/вводимое в/из него это D0-D7, а
число выведенное в порт принтера #FB - это шина
адреса A0-A7. К этому порту подключался программатор
UNIPROG той же фирмы МикроАРТ.
Порт out #7FFD - такой же как и в других Спектрумах:
D0-D2 -
выбор одной из восьми страниц по 16Кб из 128Кб по адресу #C000.
D3 - номер видеостраницы
D4 - выбор одной из двух страниц ПЗУ: при 0 - BASIC-128,
при 1 - BASIC-48
D5 - при равенстве 1 - блокирует порт
#7FFD для совместимости со Спектрумом-48.
D6-D7 - не используются.
Порт in #7FFD - для встроенного модема:
D0 - BELL
Порты для AY (#FFFD и #BFFD) также стандартные...
Все остальные дополнительные порты образуются
из порта #FD плюс
обнуление A9, что приводит к зависанию компьютера
прииспользовании "половинки" #FD при
переключении памяти и выводе звука на AY в программах для Пентагона... "Вылечил"
тумблером, отрубающим A9 когда надо вручную...
Вот эти порты:
Порт out #7DFD - порт палитры:
какой цвет из 16-ти в данный момент выводится на монитор (то есть лежит на шине данных контроллера графики), тот и подлежит замене. То есть это или текущий цвет бордюра, или текущий выводимый атрибут (или INK, или PAPER - в зависимости от того. Был ли установлен бит пикселя или нет).
D0-D5 - BRGbrg
Все биты цвета инверсны!!! То есть 0 - цвет включен, 1 - выключен.
brg - цвета с пониженной интенсивностью,
раза в два тусклее цвета в режиме BRIGHT 0.
BRG - цвета обычной яркости - BRIGHT 0
При включении одновременно битов BRG и brg получается цвет повышенной яркости
- BRIGHT 1.
Таким образом каждый цвет из RGB имеет 4 градации яркости - от черного до BRIGHT1.
Путем комбинации этих 6 битов и получаем 64 самых разнообразных оттенка.
Порт in #7DFD
- чтение с АЦП (covox наоборот):
D0-D7 - данные.
Порт out #FDFD - системный:
D0-D1 - переключение расширенной памяти до 512Кб
D2 - ROM-диск,
включение дополнительных 4-х страниц пзу, если в компе стоит не 27512, а 271000,
а уж что ты туда прошьешь... Располагаются выше основных четырех страниц. В
ATM-2 для использования этого наворота в CP/M прошит драйвер, а в ATM-1 "забыли"...
Типа крутись сам...
D3 - CPNET - для нереализованных сетевых возможностей...
Только лишь будучи установлен, приводит к зависанию при попытке обратиться к
TR-DOS... Поэтому всегла его надо держать в "0"
D4 - TON
D5 - TNAB
эти биты для модема...
Информация по ATM-turbo 2 и TURBO 2+
(платы 6.40-7.10)
Примечание -
Dn - биты шины данных
An - биты адресной шины!
_______________________________
Сначала порты, находящиеся в общем адресном поле:
out #FE - стандартный порт бордюра/звука
D0-D2 -
цвет бордюра (8 цветов) - BRG
D3 - запись сигнала на магнитофон
D4 - управление звуковым каналом ("бипером")
D5-D7 - не используются.
+ в наследство от ATM-1 досталось -
A3=0 - BRIGHT 1 на бордюре (переключение экранных
режимов перенесено на другой порт).
in #FE - тоже стандартный порт клавиатуры, кроме одной детали
D0-D4 -
чтение одной из пяти клавиш полуряда клавиатуры.
A8-A15 - выбор полурядов клавиатуры, путем сброса
соответствующего бита в ноль.
D5 - еще одно наследство от ATM-1 -это системный
сигнал Z, только раньше он висел на бите D7.
D6 - чтение сигнала с магнитофона.
out #FB
- вывод на принтер, аналогичный тому, что в ATM-1
in #FB - чтение состояния принтера, аналогичный на ATM-1 ( но нетy A7=1(включение CP/M-страницы ПЗУ, так как тут используется другая организация памяти))
in/out #FA - аналогичный ATM-1
in #FF - порт атрибутов (отсутствовал в ATM-1, что также приводило к некоторой несовместимости).
in #7DFD - как и в ATM-1 чтение АЦП - единственный порт использующий A9=0, оставшийся от ATM-1, так как подобные порты на out не используются, можно одним логическим элементом и паяльником ликвидировать неполадки из-за половинок #FD...
in #7FFD
-
D0-D3 - не используются
D4-D5 - для платы 6.40 - сигналы BELL и ULINE для
телефонной линии. В 7.10 - не используется.
D6=1 - сигнал готовности (WIRQ) с IDE. (D6=0
- нет готовности)
D7 - для 6.40 - или данные с XT-клавиатуры, или
(D7=1) - сигнал готовности АЦП. Для 7.10 - только
последнее.
out #7FFD - такой же как и в других Спектрумах:
D0-D2 -
выбор одной из восьми страниц по 16Кб из 128Кб по адресу #C000.
D3 - номер видеостраницы
D4 - выбор одной из двух страниц ПЗУ: при 0 - BASIC-128,
при 1 - BASIC-48. В CP/M используется для быстрой смены карт памяти, так как
на каждое значение этого бита можно установить в диспетчере памяти свою.
D5 - при равенстве 1 - блокирует порт
#7FFD для совместимости со Спектрумом-48.
D6-D7 - не используются.
Порты для AY (#FFFD и #BFFD) также стандартные...
Теперь пойдут "скрытые" порты, которые спрятаны в TR-DOS:
#FF77 -
системный порт -
D0 - RG0 \
D1 - RG1 > переключение экранных режимов.
D2 - RG2 /
RG0=1 RG1=1 RG2=0
- обычный sinclair режим 256x192 пикселей
RG0=0 RG1=1 RG2=0 - аппаратный мультиколор 640x200
пикселей
RG0=0 RG1=0 RG2=0 - EGA 320x200 (16 цветов) пикселей
RG0=0 RG1=1 RG2=1 - текстовый режим 80x25 символов
D3=1 -
программное включение TURBO-режима(7.0 МГц).
D4 - для платы 6.40 - TON (для встроенного модема),
для 7.10 - сигнал Z_1 - зарезервирован, необходимо устанавливать в 0.
D5 - для 6.40 - TNAB (встроенный модем), для 7.10
- Z_I прерывания от HSYNC (50 гц) 1-разрешены 0- запрещены.
D6 и D7 соответственно
-
для 6.40 - сигналы AD_KEY и K_RES для программирования XT-клавиатуры -
AD_KEY - переключение между АЦП и клавиатурой.
K_RES - сброс прерываний с клавиатуры...
для 7.10 - соответственно сигналы VE1(=1 - запрет функционирования 8031 (все
запросы идут к zx-клавиатуре)) и VE0(не используется, по умолчанию необходимо
устанавливать в 1) - управление модернизированным контроллером XT-клавиатуры.
Через этот контроллер еще и работа с RS-232 осуществляется.
A8=0 - сигнал PEN, выключение диспетчера памяти
(о нем позже) - в каждую четверть адресного пространства памяти устанавливается
страница ПЗУ с BIOS CP/M... При включении в сеть компьютера диспетчер как раз
выключен.
Здесь такое расположение страниц ПЗУ(число в скобках - значение при ПЗУ 271000):
0(4) - BASIC 48
1(5) - TR-DOS
2(6) - BASIC 128
3(7) - CP/M
Если подключено ПЗУ 271000, то 0-3 - это дополнительные страницы: а 4-7 - вышеприведенная прошивка.
A9=0 -
сигнал CPM - включается постоянное действие сигнала DOSEN, в результате становится
возможным прямой доступ ко всем скрытым портам и ПЗУ TR-DOS. Если A9=1,
то доступ ко всем расширенным портам: в том числе и к этому прекращается: таким
образом сбросить этот бит обычными методами нельзя - можно это сделать только
из области TR-DOS, где эти порты открываются автоматически (аппаратно). Оттуда
можно сделать OUT со сброшенным A9, и тогда при
выходе из TR-DOS расширенные порты просто не выключатся, да и ПЗУ TR-DOS останется
в области #0000-#4000 (если конечно не установить туда ОЗУ).
A14=0 - сигнал PEN2, разрешает запись палитры (об
этом позже) через дисководный порт #FF.
out #FFF7
- тот самый диспетчер памяти. Здесь можно в любую четверть памяти вставить любую
страницу ОЗУ или ПЗУ (теоретически 1Мб ОЗУ и 1Мб ПЗУ)
D0-D7 - все значения инверсны! Например выбор страницы
5(%101) выглядит
как %010...
D0-D4 - выбор одной из 32х страниц ОЗУ или ПЗУ(512Кб).
Если выбирается ПЗУ, то все незадействованные биты (так как его размер меньше
512-1024Кб) устанавливаются в 0 для совместимости с микросхемами ПЗУ разной
емкости!
------------------
Для 6.40 -
D5=1 - выбор ПЗУ
D6=0 - выбор ОЗУ
Получаются комбинации -
D5=1 D6=1 - выбор ОЗУ
D5=0 D6=0 - выбор ПЗУ
D5=0 D6=1 - эмуляция ПЗУ в ОЗУ
Для 7.10 -
D5 - выбор до 64х страниц памяти ОЗУ или ПЗУ(1024Кб)(вместе
с D0-D4)
D6 - =1 - выбор ОЗУ, =0 - выбор ПЗУ
То есть на плате 7.10 отсутствует эмуляция ПЗУ и бит D5 задействован для выбора ОЗУ.ПЗУ вплоть до 1024Кб. Но отмечу особо, что драйвера, написанные для платы 6.40 и 7.10 остаются взаимно совместимыми (если, конечно, на драйвере для 6.40 не попытаться выбрать свыше 512Кб), так как программно компьютер не заметит изменений, если, приличий ради, при выборе в диспетчере памяти именно ПЗУ держать D5=0.
------------------
D7=1 включение мультиплексора для коммутации выбора
страниц памяти с #7FFD
При выводе страниц в #C000-#FFFF -вместо D0-D2
- используются D0-D2 c #7FFD,
при выводе в #0000-#3FFF - этим битом разрешается автоматическое включение ПЗУ
TR-DOS при переходе на адреса #3Dxx иначе останется та страница, которая там
стоит на данный момент.
A14-A15
- выбор четверти адресного пространства, где надо изменять страницы(то есть
где будут действовать все установленные или сброшенные биты
Dn и An рассмотренные у этого порта выше)
0 0 - #0000-#3FFF
1 0 - #4000-#7FFF
0 1 - #8000-#BFFF
1 1 - #C000-#FFFF
Особо надо сказать в этой ситуации про
сигнал ROM2 с порта #7FFD - он позволяет диспетчеру памяти ОТДЕЛЬНО программировать
четверти адресного пространства: то есть создать не одну, а две карты памяти,
запрограммированные каждая по-своему. Для режима Спектрум-128, например, это
программирование подобрано так как обычно - каждая из карт идентична за исключением
нулевой четверти, где при ROM2=1 - ПЗУ с BASIC-48, а при ROM-2=0 - при ПЗУ с
BASIC-128.
Так можно: к примеру организовать доступ к портам TR-DOS из программы в ОЗУ,
подключенного к нулевой четверти, только ОЗУ помещать там лучше при ROM2=0(так
как только при ROM2=1 возможен необходимый нам стандартный доступ к ПЗУ TR-DOS
-
Надо заранее запрограммировать карту памяти при ROM2=0(обычно используется только
в редакторе бейсика ZX-128, а при исполнении программ - всегда - ROM2=1, в iS-DOS,
насколько я знаю, также) чтобы в нулевой четверти была включена нулевая страница
ОЗУ. Далее по #7FFD дублируем страницу с нашей программой вверху и делаем CALL
туда в и нашей программы в саму себя, только со смещением #C000 в специально
предусмотренную подпрограммку, которая через #7FFD делает ROM2=1, после чего
задав соответствующие параметры в регистре BC прыгает в TR-DOS в то место где
расположена подпрограммка -
OUT (C), A
RET
Доступ к портам TR-DOS открыт! Теперь можно спокойно делать ROM2=0 и возвращаться
в нулевую четверть в банку ОЗУ.
Особенностью ATM-turbo 2(+) можно считать такой момент - ПЗУ TR-DOS при входе на адреса #3Dxx активизируется только если сигнал ROM2=1 и по адресу #0000 находится именно ПЗУ, а не какая-либо из страниц ОЗУ. Это означает, что если вы включите вместо ПЗУ-48 ОЗУ, а затем запретите расширенные порты, то программным путем снова включить их (например для возвращения ПЗУ на место) будет невозможно, так как для этого надо будет "прыгать" в TR-DOS, что невозможно.
В различных режимах работы компьютера обычно устанавливается следующая конфигурация диспетчера памяти:
Mode
|
Spectrum-128
|
Spectrum-48
|
TR-DOS
|
CP/M-system
|
CP/M-users
|
ROMs
|
ROM2=0
|
ROM2=1
|
ROM2=0(!!!)
|
ROM2=1
|
ROM2=0
|
#0000
|
ROM-#3E
|
ROM-#3C
|
ROM-#3D
|
ROM-#3F
|
RAM-0
|
#4000
|
RAM-5
|
RAM-5
|
RAM-5
|
RAM-5
|
RAM-4
|
#8000
|
RAM-2
|
RAM-2
|
RAM-2
|
RAM-2
|
RAM-2
|
#C000
|
порт #7FFD
|
порт #7FFD
|
порт #7FFD
|
RAM - 1 или 3
|
RAM-3
|
Далее другие порты -
out #FFE7
- только для 6.40! Сигнал WCSF' - запись в специальное ОЗУ
XT-клавиатуры (537РУ10) (не находится в адресном пространстве Z80)
D0-D4 - данные.
A8-A15 + сигнал K_RES с порта #FF77 - адрес ОЗУ
клавиатуры.
В 7.10 - не задействован.
in/out #EF
- работа с винчестером (IDE-интерфейс)
D0-D7 - данные
A5-A7 - выбор регистров HDD (стандартный порядок)
A8 - управление буфером коммутации 8-битной шины
данных Z80 с 16-битной шиной адреса HDD.
Если нужно выводить/вводить только 8 бит данных,то -
out #FEEF, data
in #FEEF, data
Если все 16 бит, то:
OUT -
out #FFEF, data(старш) - защелкивание в спецрегистр
старшей половинки данных
out #FEEF, data(младш) - вывод всех 16 бит одновременно.
IN -
in data(младш) #FEEF
- чтение 16 бит данных, старшая половинка защелкивается в спецрегистр.
in data(старш) #FFEF
- стение старших 8 бит из спецрегистра.
Чтение очень удобно проводить так:
LD B, #00
LD C, #EF
INIR
INIR
Так как биты выше A8 не учитываются - все равно
какое значение они примут. Зато действительно достигается фантастическая скорость
чтения с HDD.
--------------
out #FF:
1) системный порт дисководов.
2) при PEN2=0 - одновременно и выбор палитры, такой же как и в ATM-1, но по
другим битам:
D0 - B
D1 - R
D2 - x - не использ.
D3 - x - не использ.
D4 - G
D5 - b
D6 - r
D7 - g
Все данные инверсны, т.е. например Dx=0 - цвет
включен, =1 - выключен. Порядок вывода палитры
такой же как и в ATM-1 через порт out #7DFD - в зависимости от считываемого
в данный момент видеоконтроллером из ОЗУ цвета. Какой код цвета (0-15) та цветовая
позиция и будет заменяться.
--------------------
Управление XT(AT)-клавиатурой на
TURBO 2+
(платы 7.00-7.10)
Начиная с версии 7.00,
в компьютере появилась мс. 8031, что кардинально изменило работу порта #FE и
дало возможность подключить IBM XT клавиатуру (или современную AT-клавиатуру
- надо только поставить другую прошивку ПЗУ).
При попытке прочитать содержимое клавиатуры, процессор дает команду IN A,(#FE),
взводится спец. триггер и процессор останавливается сигналом WAIT. При этом
в микроконтроллере 8031 генерируется прерывание. После необходимых процедур
трансляции адресных линий, микроконтроллер выдает на шину данных процессора
состояние клавиатуры, сигнал WAIT сбрасывается и процессор продолжает свою работу.
Наличие 8031 и расширенной клавиатуры (101 клавиша) позволи-
ло упростить опрос клавиатуры в CP/M до простого чтения кода
клавиши, однако, это потребовало введения дополнительных команд
для управления 8031, и поскольку единственно возможный способ
передать данные в 8031, это состояние старшей половины шины адреса Z80 в момент
чтения порта #FE, этот способ и используется.
Управляющие последовательности клавиатуры:
_#55_
- указывает, что следующий байт является
кодом
команды для клавиатуры. В ответ клавиатура воз вращает код #AA - это можно использовать
для проверки наличия 8031.
LD A,#55
IN A,(#FE)
CP #AA
JR NZ,NO_XT
LD A,COMM ;команда (см ниже)
IN A,(#FE)
LD A,ARG1 ;дополнительные параметры (могут отсутствовать)
IN A,(#FE)
LD A,ARG2 ;дополнительные параметры (могут отсутствовать)
IN A,(#FE)
_#00_ - Читает код нажатой клавиши.
XOR A
IN A,(#FE)
;в аккумуляторе код клавиши (список кодов приводится ниже)
_#80_ - читает 1-й байт флагов клавиатуры
LD A,#80
IN A,(#FE)
_#40_ - читает 2-й байт флагов клавиатуры
LD A,#40
IN A,(#FE)
Коды команд (Внимание! Перед записью кода команды необходимо дать упр. код _#55_
для перевода 8031 в режим ввода команды):
#01 получить 1 байт номера версии программы
#41 получить 2 байт номера версии программы
#81 получить 3 байт номера версии программы
#C1 получить 4 байт номера версии программы
#07 стереть буфер клавиатуры и все флаги
#08 DATA установка режима работы:
bit 0,1 - устанавливается режим работы
0 - эмуляция синклер клавиатуры
1 - чтение кода клавиши (флаги не обрабатываются)
2 - режим CP/M
3 - прямое чтение кода с последовательного порта кла виатуры
bit 7 - режим 0-lat 1-rus (только для CP/M)
#09 получить содержимое ячейки памяти 1
#49 получить содержимое ячейки памяти 2
#89 получить содержимое ячейки памяти 3
#C9 получить содержимое ячейки памяти 4
#0A переключится в режим ввода русских букв
#0B переключится в режим ввода латинских букв
#0C программная пауза
#0D перезапуск компьютера
#10 получить секунды
#50 получить минуты
#90 получить часы
#11 DATA установить секунды
#51 DATA установить минуты
#91 DATA установить часы
#12 получить число
#52 получить месяц
#92 получить год
#13 DATA установить число
#53 DATA установить месяц
#93 DATA установить год
#14 DATA принудительно устанавливает некоторые
сигналы
(установка происходит если соответствующий бит равен 1)
bit 0 = 0
bit 1 = 0
bit 2 = 0
bit 3 DTR (RS-232!)
bit 4 RTI (RS-232!)
bit 5 = 0
bit 6 = 0
bit 7 = 0
#15 DATA принудительно сбрасывает некоторые сигналы
(сброс
происходит, если соответствующий бит равен 1 (см. ком #14)
#16 прочитать содержимое порта P3
bit 0 -
bit 1 -
bit 2 -
bit 3 -
bit 4 VE1
bit 5 -
bit 6 -
bit 7 -
#17 прочитать состояние RS232
bit 0 CD
bit 1 CTS
bit 2 RI
bit 3 -
bit 4 -
bit 5 -
bit 6 -
bit 7 -
Список
кодов клавиш, возвращаемых клавиатурой
PC-XT в режиме CP/M по командам XOR A, IN A,(#FE)
ESC - #1B
F1 - #61
F2 - #62
F3 - #63
F4 - #64
F5 - #65
F6 - #66
F7 - #67
F8 - #68
F9 - #69
F10 - #6A
F11 - #6B
F12 - #6C
` - #60
1 - #31
2 - #32
3 - #33
4 - #34
5 - #35
6 - #36
7 - #37
8 - #38
9 - #39
0 - #30
- - #2D
= - #3D
\ - #5C
BS - #08
TAB - #09
Q - #51
W - #57
E - #45
R - #52
T - #54
Y - #59
U - #55
I - #49
O - #4F
P - #50
[ - #5B
] - #5D
ENTER - #0D
CAPS LOCK - меняет флаг CAPS LOCK
A - #41
S - #53
D - #44
F - #46
G - #47
H - #48
J - #4A
K - #4B
L - #4C
; - #3B
' - #27
L-SHIFT - взводит флаг LEFT SHIFT при нажатии,сбрасывает
при от пускании
Z - #5A
X - #58
C - #43
V - #56
B - #42
N - #4E
M - #4D
, - #2C
. - #2E
/ - #2F
R-SHIFT - взводит флаг RIGHT SHIFT при нажатии,
сбрасывает при отпускании
L-CTRL - взводит флаг CTRL при нажатии, сбрасывает
при отпуска нии
L-ALT - взводит флаг ALT при нажатии, сбрасывает
при отпуска нии
SPACE - #20
R-ALT - взводит флаг ALT при нажатии, сбрасывает
при отпуска нии
R-CTRL - взводит флаг CTRL при нажатии, сбрасывает
при отпуска нии
PRNSCR - принудительно включает RIGHT SHIFT нажатие
и отпуска ние клавиши R-SHIFT сбрасывает этот флаг.
SCRLOCK - меняет флаг SCROLL LOCK
PAUSE - эта клавиша останавливает работу компьютера
до нажа тия любой другой (активизируя сигнал WAIT - Z80)
INSERT - #78
HOME - #76
PAGE UP - #74
DELETE - #79
END - #77
PAGE DOWN- #75
Курсорные клавиши.
CURUP - #70
CURLEFT - #72
CURDOWN - #71
CURRIGHT- #73
Клавиши дополнительной клавиатуры.
NUM LOCK - изменяет флаг NUM LOCK
/ - #2F
* - #AA
- - #AD
7 - #B7
8 - #B8
9 - #B9
+ - #AB
4 - #B4
5 - #B5
6 - #B6
1 - #B1
2 - #B2
3 - #B3
ENTER - #0D
0 - #B0
. - #AE
(C)MAXSOFT
Контроллер XT-клавиатуры на 51(31)-ом контроллере.
Режим работы контроллера
определяется двумя младшими битами кода передаваемого в контроллер по команде:
0x55 0x08 <mode>.
0 - Spectrum KBD
1 - RD Code KBD
2 - Mode CP/M
3 - Direct RD
Остальные биты не влияют на работу контроллера, хотя судя по предварительному
описанию старший бит должен был переключать режим RUS/LAT.
;--------------------------------------
mode=0 режим Spectrum KBD
В этом режиме контроллер эмулирует подключение к порту клавиатуры обычной матрицы
5*8 клавиш.
Каждое нажатие клавиши преобразуется в одно или два замыкания в узлах этой матрицы.
При сканировании порта клавиатуры на выход выдается код соответствующий запрошенной
адресной линии матрицы. Дополнительно к этому коду добавляется код считанный
с "родного" порта клавиатуры, что позволяет считать линию входа магнитофонного
интерфейса и сигналы с джойстиков или механической клавиатуры. Добавка идет
командой OR.
Соответствие клавиш IBM-клавиатуры и матрицы Spectruma задается таблицей:
;---------------------------------------
; Scan-code IBM(1) -> code Spectrum
; D7 - Symbol Shift
; D6..D4 - Number bit Adress (A8=000..A15=111)
; D3 - Caps Shift
; D2..D0 - Number bit Data (D0=001..D4=101)
L_4B6:
db 39h ;01 ESC CapSh + 1
;
db 31h ;02 1/!
db 32h ;03 2/@
db 33h ;04 3/#
db 34h ;05 4/$
db 35h ;06 5/%
;
db 45h ;07 6/^
db 44h ;08 7/&
db 43h ;09 8/*
db 42h ;0A 9/(
db 41h ;0B 0/)
;
db 0E4h ;0C -/_ SymSh+Kl_J
db 0E2h ;0D =/+ SymSh+Kl_L
db 49h ;0E BS CapSh+Kl_0
db 3Bh ;0F TAB CapSh+Kl_3
;
db 21h ;10 Q
db 22h ;11 W
db 23h ;12 E
db 24h ;13 R
db 25h ;14 T
;
db 55h ;15 Y
db 54h ;16 U
db 53h ;17 I
db 52h ;18 O
db 51h ;19 P
;
db 0D5h ;1A [/{ SymSh+Kl_Y
db 0D4h ;1B ]/} SymSh+Kl_U
db 61h ;1C ENTER
db 88h ;1D Ctrl CapSh+SymSh
;
db 11h ;1E A
db 12h ;1F S
db 13h ;20 D
db 14h ;21 F
db 15h ;22 G
;
db 65h ;23 H
db 64h ;24 J
db 63h ;25 K
db 62h ;26 L
;
db 0D2h ;27 ;/: SymSh+Kl_O
db 0D1h ;28 '/" SymSh+Kl_P
db 91h ;29 `/~ CapSh+Kl_A
;
db 08h ;2A Left Shift CapSh
db 92h ;2B \/| CapSh+Kl_S
;
db 02h ;2C Z
db 03h ;2D X
db 04h ;2E C
db 05h ;2F V
;
db 75h ;30 B
db 74h ;31 N
db 73h ;32 M
;
db 0F4h ;33 ,/< SymSh+Kl_N
db 0F3h ;34 ./> SymSh+Kl_M
db 85h ;35 //? SymSh+Kl_V
db 80h ;36 Rght Shift SymSh
db 0F5h ;37 [*] SymSh+Kl_B
db 3Ch ;38 Alt CapSh+Kl_4
;
db 71h ;39 SPACE
;
db 3Ah ;3A CapsLock CapSh+Kl_2
;
db 0B1h ;3B F1 SymSh+Kl_1
db 0B2h ;3C F2 SymSh+Kl_2
db 0B3h ;3D F3 SymSh+Kl_3
db 0B4h ;3E F4 SymSh+Kl_4
db 0B5h ;3F F5 SymSh+Kl_5
db 0C5h ;40 F6 SymSh+Kl_6
db 0C4h ;41 F7 SymSh+Kl_7
db 0C3h ;42 F8 SymSh+Kl_8
db 0C2h ;43 F9 SymSh+Kl_9
db 0C1h ;44 F10 SymSh+Kl_0
;
db 0 ;45 NumLock
db 0 ;46 ScrollLock
;
db 3Ch ;47 [7] CapSh+Kl_4
db 4Ch ;48 [8][Up] CapSh+Kl_7
db 3Dh ;49 [9] CapSh+Kl_5
db 0E4h ;4A [-] SymSh+Kl_J
db 3Dh ;4B [4] CapSh+Kl_5
db 35h ;4C [5] 5
db 4Bh ;4D [6] CapSh+Kl_8
db 0E3h ;4E [+] SymSh+Kl_K
db 4Ah ;4F [1] CapSh+Kl_9
db 4Dh ;50 [2] CapSh+Kl_6
db 4Bh ;51 [3] CapSh+Kl_8
db 84h ;52 [Insert] SymSh+Kl_C
db 49h ;53 [Delete] CapSh+Kl_0
db 0E5h ;57 F11 SymSh+Kl_H
db 94h ;58 F12 SymSh+Kl_F
;*****************************************************
mode=1 - RD code KBD
В этом режиме, независимо от состояния адресной линии, контроллер возвращает
CP/M код последней нажатой клавиши.
При этом регистр контроллера, хранящий этот код сбрасывается в 0. ;******************************************************
mode=2 - CP/M KBD
В этом режиме, в зависимости от состояния двух старших битов адреса сканирования,
контроллер возвращает: A15=0,A14=0 - CP/M код последней нажатой клавиши.
Регистр после чтения сбрасывается. A15=0,A14=1 - состояние регистра управляющих
клавиш;
d0 - Shift (1-нажата)
d1 - Ctrl (1-нажата)
d2 - ALT (1-нажата)
d3 - всегда 0
d4 - Caps Lock trigger
d5 - Num Lock trigger
d6 - Scroll Lock trigger
d7 - RUS(1)/LAT(0)
A15=1,A14=0 - состояние дополнительного регистра
d0 - Right Shift
d1..d7 - всегда 0
A15=1,A14=1 - не несет полезной информации
;******************************************************
mode=3 - Direct RD
В этом режиме, независимо от состояния адресных линий, контроллер возвращает
скан-код последней нажатой клавиши клавиатуры IBM, причем код XT-клавиатуры.
;******************************************************
Управление контроллером:
Для управления контроллером при чтении порта клавиатуры выставляется адрес сканирования
равный 0x55. При этом контроллер возвращает в качестве
ответа код 0xAA. Это является признаком готовности
контроллера к приему кода команды в следующем цикле чтения порта.
Код сканирования клавиатуры в цикле передачи команды, в 6 младших битах содержит
собственно код команды, а в двух старших битах адресный код команды.
Необходимо отметить, что при приеме незадействованного кода команды контроллер
в ответ выдает код = 0xFF.
В частности в игре MINER наличие контроллера опредляется выполнением команды
с кодом = 0x00. Поскольку этот код не является
командой, то контроллер отвечает на 0x55 -> 0xAA,
а на 0x00 -> 0xFF. Этот факт и является признаком
наличия контроллера.
Коды
команд:
1) чтение версии
прошивки контроллера
0x55h 0x01 - первый байт версии (обычно он и читается)
0x55h 0x41 - второй
0x55h 0x81 - третий
0x55h 0xC1 - четвертый
Эти команды читают содержимое ПЗУ контроллера начиная
с адреса 0x2C. Судя по всему автор прошивки зарезервировал
эти адреса для размещения кодов версии.
В XT-прошивке в этих адресах записаны коды 6,0,1,0. Текст в конце прошивки при
этом указывает V1.06.
В AT-прошивке в этих адресах записаны коды 1,0,0,0 Текст в конце прошивки при
этом указывает V1.00.
В BIOS ATM проверяется только первый байт.
При этом наличие контроллера опознается сравнением этого байта либо с 10 либо
с 16 (проверка производится дважды). Тоесть первый байт должен быть не более
10.
2) очистка буфера SPECTRUM клавиатуры
0x55h 0x07|0x47|0x87|0xC7
Очищается буфер, в котором хранятся скан-коды нажатых клавиш в режиме 0. Нажатие
клавиши заносит ее скан-код в буфер, отжатие должно удалить этот скан-код из
буфера. Похоже эта команда введена на всякий случай, поскольку при корректной
работе контроллера буфер должен автоматически очищаться при нажатии и отжатии
клавиш.
Команда возвращает коды 0AAh 0xFF.
3) Установка режима работы контроллера
0x55h 0x08|0x48|0x88|0xC8 <mode>
В результате выполнения этой команды в переменной контроллера сохраняется код
<mode>.
Реально в контроллере используются только 2 мл. бита этого кода, определяющие
текущий режим работы контроллера.
Команда возвращает коды 0AAh 0xFF.
4) Чтение регистров CP/M кода клавиатуры
0x55 0x09 - байт предыдущего скан-кода клавиатуры
0x55 0x49 - байт текущего скан-кода клавиатуры
0x55 0x89 - байт регистра управляющих клавиш;
d0 - Shift (1-нажата)
d1 - Ctrl (1-нажата)
d2 - ALT (1-нажата)
d3 - всегда 0
d4 - Caps Lock trigger
d5 - Num Lock trigger
d6 - Scroll Lock trigger
d7 - RUS(1)/LAT(0)
0x55 0xC9 - байт дополнительного регистра
d0 - Right Shift
d1..d7 - всегда 0
По сути эти команды дублируют чтение регистров контроллера, выполняемое при
его работе в режиме 2.
5) Установка режима RUS
0x55 0x0A|0x4A|0x8A|0xCA
Эта команда устанавливает в 1 бит D7 регистра управляющих
клавиш контроллера.
Команда возвращает коды 0AAh 0xFF.
6) Установка режима LAT
0x55 0x0B|0x4B|0x8B|0xCB
Эта команда сбрасывает в 0 бит D7 регистра управляющих
клавиш контроллера.
Команда возвращает коды 0AAh 0xFF.
7) Установка режима ожидания.
0x55 0x0C|0x4C|0x8C|0xCC
Команда устанавливает контроллер в режим выдачи сигнала /WAIT на процессор Z80.
Тоесть она эквивалентна нажатию клавиши PAUSE/BREAK. Для выхода из этого режима
надо нажать эту клавишу.
Команда возвращает коды 0AAh 0xFF.
8) Выдача сигнала /RESET
0x55 0x0D|0x4D|0x8D|0xCD
На Z80 выдается сигнал сброса, что перезагружает всю систему. Эквивалентно нажатию
Ctrl/Alt/Del
9) Чтение регистров текущего времени
0x55 0x10 - секунды
0x55 0x50 - минуты
0x55 0x90 - часы
0x55 0xD0 - дни
Читается содержимое регистров часов реального времени, реализованных на основе
встроенного таймера микроконтроллера. Таймер в обоих прошивках настроен на работу
при частоте тактирования контроллера 7 МГц. При отключении питания таймер естественно
сбрасывается.
10) Установка регистров текущего времени
0x55 0x11 <секунды>
0x55 0x51 <минуты>
0x55 0x91 <часы>
0x55 0xD1 <дни>
Эти команды записывают передаваемые данные в регистры часов реального времени.
11) Чтение регистров текущей даты
0x55 0x12 - секунды
0x55 0x52 - минуты
0x55 0x92 - часы
0x55 0xD2 - дни
12) Запись регистров текущей даты
0x55 0x13 <секунды>
0x55 0x53 <минуты>
0x55 0x93 <часы>
0x55 0xD3 <дни>
13) Установка в 1 линий порта P1
0x55 0x14|0x54|0x94|0xD4 <cod>
Выполняется команда: orl P1,<cod>
14) Сброс в 0 линий порта P1
0x55 0x15|0x55|0x95|0xD5 <cod>
Выполняется команда cpl <cod> ;инверсия кода
anl P1,<cod>
Предполагалось, видимо, что эти команды позволят программно управлять последовательным
портом контроллера. Но я считаю их использование не целесообразным, тем более,
что реально можно задействовать только биты 3(DTR)
и 4(RTS). С остальными битами при таком способе
управления можно получить непредсказуемый результат работы контроллера.
; порт P1
; P10 - CD input
; P11 - CTS input
; P12 - RI input
; P13 - DTR out
; P14 - RTS out
; P15 - INT_T out
; P16 - /RES -out
; P17 - W_ON -out
15) Чтение линий порта P3
0x55 0x16|0x56|0x96|0xD6
Команда должна выполнять чтение состояния линий порта P3 контроллера, но в результате
ошибки всегда выдает код 0xFF(в новой версии ПЗУ
контроллера ошибка исправлена).
; порт P3
; P30 - RX input
; P31 - TX -output
; P32 - CLK_K input
; P33 - /KEYRD input
; P34 - VE1 input
; P35 - DATA_K input
; P36 - /VWR -output
; P37 - /VRD -output
Судя по линиям порта, команда годится только для анализа линии VE1.
16) Чтение линий порта P1
0x55 0x17|0x57|0x97|0xD7
Та же самая ошибка приводит к чтению 0xFF.
; порт P1
; P10 - CD input
; P11 - CTS input
; P12 - RI input
; P13 - DTR out
; P14 - RTS out
; P15 - INT_T out
; P16 - /RES -out
; P17 - W_ON -out
Команда годится для чтения линий CD, CTS, RI.
;------------------------------------------
; Таблица CP/M - кодов клавиатуры
; код CP/M ; Клавиша IBM
L_400:
db 1Bh ; ESC
db 31h ; 1
db 32h ; 2
db 33h ; 3
db 34h ; 4
db 35h ; 5
db 36h ; 6
db 37h ; 7
db 38h ; 8
db 39h ; 9
db 30h ; 0
db 2Dh ; -/_
db 3Dh ; =/+
db 8 ; BS
;
db 9 ; TAB
db 51h ; Q
db 57h ; W
db 45h ; E
db 52h ; R
db 54h ; T
db 59h ; Y
db 55h ; U
db 49h ; I
db 4Fh ; O
db 50h ; P
db 5Bh ; [
db 5Dh ; ]
db 0Dh ; Enter
;
db 41h ; A
db 53h ; S
db 44h ; D
db 46h ; F
db 47h ; G
db 48h ; H
db 4Ah ; J
db 4Bh ; K
db 4Ch ; L
db 3Bh ; ;
db 27h ; '
db 60h ; `
db 5Ch ; \
;
db 5Ah ; Z
db 58h ; X
db 43h ; C
db 56h ; V
db 42h ; B
db 4Eh ; N
db 4Dh ; M
db 2Ch ; ,
db 2Eh ; .
db 2Fh ; /
db 0AAh ; \/|
db 20h ; SPACE
;
db 61h ; F1
db 62h ; F2
db 63h ; F3
db 64h ; F4
db 65h ; F5
db 66h ; F6
db 67h ; F7
db 68h ; F8
db 69h ; F9
db 6Ah ; F10
;----------------------------------
; Num keyboard scan code set1 > 47h
db 80h+37h ; [7]
db 80h+38h ; [8]
db 80h+39h ; [9]
db 80h+2Dh ; [-]
db 80h+34h ; [4]
db 80h+35h ; [5]
db 80h+36h ; [6]
db 80h+2Bh ; [+]
db 80h+31h ; [1]
db 80h+32h ; [2]
db 80h+33h ; [3]
db 80h+30h ; [0]
db 80h+2Eh ; [.]
;
db 6Bh ; F11
db 6Ch ; F12
;-----------------------------------------
; Эта таблица для Num Pad в режиме
; Num Lock=0
L_511: db 76h ;47h Home db 70h ;48h Cur Up
db 74h ;49h Page Up
db 0ADh ;4Ah [-]
db 72h ;4Bh Cur Left
db 0B5h ;4Ch [5]
db 73h ;4Dh Cur Right
db 0ABh ;4Eh [+]
db 77h ;4Fh End
db 71h ;50h Cur Down
db 75h ;51h Page Down
db 78h ;52h Insert
db 79h ;53h Del
; =============================================
(C)Kamil Karimov