Вернуться на ГЛАВНУЮ страницу

ОПИСАНИЕ

У меня есть куча информации по ATM-1 и ATM-2. А так как я человек не жадный, то в самое ближайшее время она будет выложена в этот раздел!

Здесь будет описание архитектуры компьютера, структура портов и экранов, различные режимы работы и все, что с этим связано на простом и доступном языке.


 
>
Технические характеристики разных моделей ATM-turbo
 
>
Описание портов и архитектуры ATM-turbo 1
 
>
Описание портов и архитектуры ATM-turbo 2 и TURBO 2+
 
>
Работа с XT(AT)-клавиатурой на TURBO 2+



Технические характеристики компьютеров ATM-turbo, ATM-turbo 2, TURBO 2+

========
ATM-turbo 512 (v4.50)
ATM-turbo 2 (v6.40)
TURBO 2+ (v.7.10)
ХАРАКТЕРИСТИКА
ТИП
ПРИМЕЧАНИЕ
ТИП
ПРИМЕЧАНИЕ
ТИП
ПРИМЕЧАНИЕ
Процессор
Z80
Любая буква кроме L (3.5Mhz)
Z80
Любая буква кроме L (3.5Mhz)
Z80
Любая буква кроме L (3.5Mhz)
Режим TURBO (7.0Mhz)
Есть
.
Есть
.
Есть
.
ПЗУ
Основное
64Кб (м/с27512)
Основное
64Кб (м/с27512)
Основное
64Кб (м/с27512)
.
Максимальное
128Кб(м/с27010)
Максимальное
128Кб(м/с27010)
Максимальное
128Кб(м/с27010)
ОЗУ
Минимальное
128Кб (16хРУ5)
Минимальное
128Кб (16хРУ5)
Минимальное
128Кб (16хРУ5)
.
Максимальное
512Кб(16хРУ7)
Максимальное
512Кб(16хРУ7)
Максимальное
512Кб(16хРУ7)
.
.
=====
.
=====
.
1024Кб(32хРУ7)
.
.
=====
.
=====
.
=====
КЭШ
Нет
.
Нет
.
Нет
.
Диспетчер памяти (любая страница ОЗУ или ПЗУ ставится в любую четверть адресного пространства)
Нет
.
Есть
.
Есть
.
Включение страницы 0 ОЗУ по адресу #0000
Есть
Одновременно по адресу #4000 включается страница 4
Есть
.
Есть
.
Видеорежимы

Sinclair 256x192

Стандартный. Атрибут на знакоместо,16 цветов
Sinclair 256x192
Стандартный. Атрибут на знакоместо,16 цветов
Sinclair 256x192
Стандартный. Атрибут на знакоместо,16 цветов
.

Графич. 640х200

"Аппаратный мультиколор": атрибут на байт
Графич. 640х200
"Аппаратный мультиколор": атрибут на байт
Графич. 640х200
"Аппаратный мультиколор": атрибут на байт
.
Графич. 320х200
Каждая точка своим цветом, 16 цветов, аналог EGA
Графич. 320х200
Каждая точка своим цветом, 16 цветов, аналог EGA
Графич. 320х200
Каждая точка своим цветом, 16 цветов, аналог EGA
.
=====
=====
Текст. 80х25
Аппаратный консольный вывод символов из специального ПЗУ. 16 цветов. Атрибут на символ
Текст. 80х25
Аппаратный консольный вывод символов из специального ПЗУ. 16 цветов. Атрибут на символ
Палитра
Есть
64 цвета при 16-ти одновременно отображаемых (аналог EGA)
Есть
64 цвета при 16-ти одновременно отображаемых (аналог EGA)
Есть
64 цвета при 16-ти одновременно отображаемых (аналог EGA)
Встроенные ОС
BASIC 48/128
Со встроенным драйвером принтера.
BASIC 48/128
Со встроенным драйвером принтера.
BASIC 48/128
Со встроенным драйвером принтера.
.
TR-DOS
v5.03 с дополнительными подпрограммами для стартового меню
TR-DOS
v5.03 с дополнительными подпрог- раммами для стартового меню
TR-DOS
v5.03 с дополнитель- ными подпрог- раммами для стартового меню
.
CP/M2.2
BIOS 1.03 или 1.04
CP/M2.2
BIOS 1.06 или 1.07.12
CP/M2.2
BIOS 1.07.12(13fix)
.
=====
=====
TBIOS
Вместо CP/M
TBIOS
Вместо CP/M
Вывод изображения
RGB
.
RGB
.
RGB
.
.
Video
Черно-белый
Video
Черно-белый
Video
Черно-белый
.
PAL
цветной
Нет
.
Нет
.
Контроллер дисковода1818ВГ93
Есть
.
Есть
С цифровой ФАПЧ
Есть
С цифровой ФАПЧ
Контроллер IDE
Нет
.
Есть
HDD любой емкости, CD-ROM
Есть
HDD любой емкости, CD-ROM
Порт атрибутов #FF
Нет
.
Есть
.
Есть
.
Работа с магнитофоном
Есть
.
Есть
.
Есть
.
Звук
BEEPer
Однобитный через динамик
BEEPer
Однобитный через динамик
BEEPer
Однобитный через динамик
.
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
.
=====
=====
=====
=====
=====
=====
Аналого-цифровой преобразователь (АЦП)
Есть
1 канал на м/с 1113ПВ1А Макс. частота выборки 9Кгц
Есть
1 канал на м/с 5712ПА1 (1108ПА1) +155ИР17 Макс.частота выборки до 200Кгц
Есть
8 каналов на м/с 5712ПА1 (1108ПА1) +155ИР17 Макс.частота выборки до 200Кгц
Внутренний модем
Есть
На базе ЦАП/АЦП
Есть
На базе ЦАП/АЦП
Нет
.
Внутренний звуковой усилитель
Есть
2x1 Вт
Есть
2x1 Вт
Есть
2x1 Вт
Сетевой выход
Нет
.
Есть
.
Нет
.
Выход на принтер
Есть
Стандартный CENTRONIX
Есть
Стандартный CENTRONIX
Есть
Стандартный CENTRONIX
Контроллер клавиатуры
a)
Стандартная механическая матрица 8х5(40 клавиш)
a)
Стандартная механическая матрица 8х5
(40 клавиш)
a)
Стандартная механическая матрица 8х5(40 клавиш)
.
b)
Расширенная механическая матрица (до 64 клавиш)
b)
=====
b)
=====
.
c)
=====
c)
Контроллер XT-клавиатуры на м/с ОЗУ 537РУ10
c)
Контроллер XT(AT)-клавиатуры(в зависимости от прошивки спец.ПЗУ)на ОЭВМ 1816ВЕ31(i8031)

Стандартный RS-232

Нет
.
Нет
.
Есть
На той же ОЭВМ 1816ВЕ31(i8031)
Выходы на два Sinclair-джойстика
Есть
.
Есть
.
Есть
.
Kempston-джойстик
Нет
.
Нет
.
Нет
.
Мышь
Нет
.
Нет
.
Есть
Через RS-232, но не совместима с кемпстон-мышью
Разъем для периферии
Есть
Управляется через порт #FA
Есть
Управляется через порт #FA
Есть
Управляется через порт #FA
Функциональная законченность (все разъемы на плате)
Нет
.
Есть
.
Есть
.
Системный разъем (слот)
Нет
.
Нет
.
Нет
.
Защита платы
Есть
Защищена ПЛМ1556ХЛ8, на которой построен видеоконтроллер
Есть
Защищена ПЛМ1556ХЛ8, на которой построен видеоконтроллер
Есть
Защищена ПЛМ1556ХЛ8, на которой построен видеоконтроллер
Конструктив
---
Одна плата 312х132
---
Одна плата 335х190
---
Одна плата 335х190
Площадь платы
---
4.12дм2
---
6.36дм2
---
6.36дм2
Количество микросхем
---
99 штук
---
Посчитаю - скажу
---
127 штук
Питание
---
+5V, +12V
---
+5V, +12V.А также -12V для ЦАП/АЦП (но есть и внутренний источник)
---
+5V, +12V.А также -12V для ЦАП/АЦП (но есть и внутренний источник)
Программная совместимость с другими клонами (в стандартном ZX-режиме)
60%
Без доработок
90%
Без доработок
90%
Без доработок
.
90-95%
С доработками расширенных портов и дешифрации
95-96%
С небольшой доработкой
95-96%
С небольшой доработкой

Информация по ATM-turbo1(512К):
(платы 4.20-4.50 и 5.20)

Порт out #FE (выборка: %nnnnnnnn XXXnX1n0):

Как и на любом Спектруме он управляет бордюром и звуком -

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 (выборка: %XXXXXXXX nnnnn1n0):

как и в стандартном Спектруме:

D0-D4 - чтение одной из пяти клавиш полуряда клавиатуры.
A8-A15 - выбор полурядов клавиатуры, путем сброса соответствующего бита в ноль.
D5 - "готовность АЦП" (аналогично #7FFD.7 для turbo 2+)
D6 - чтение сигнала с магнитофона.

Исключение -
D7 - это системный сигнал Z. Он активизируется (устанавливается в "1") строго через определенное время после INT. На этом строится защита ПЗУ CP/M в АТМ - оно закодировано (вернее та часть, которая перекидывается позднее в ОЗУ): и ключом к коду является подученное число тактов до установки Z.

Порт out #FB (выборка: %nnnnnnnn Xnnnn0n1) - вывод на принтер (centronix):
D0-D7 - данные. Также по #FB работает встроенный COVOX
A7=0 - строб данных, то есть вывод в на принтер осуществляется выводом в этот порт трижды -
OUT (#FB), A
OUT (#7B), A
OUT (#FB), A

А вообще-то это стандартный LPRINT III

Порт in #FB (выборка: %nnnnnnnn Xnnnn0n1) - чтение 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 (выборка: %nnnnnnnn nnnnn0n0) - идет на внешний разъем - и представляет собой нечто похожее на системную шину:
Число выводимое/вводимое в/из него это D0-D7, а число выведенное в порт принтера #FB - это шина адреса A0-A7. К этому порту подключался программатор UNIPROG той же фирмы МикроАРТ.

Порт out #7FFD (выборка: %0nnnnn1n nnnnnn0n) - такой же как и в других Спектрумах:

D0-D2 - выбор одной из восьми страниц по 16Кб из 128Кб по адресу #C000.
D3 - номер видеостраницы
D4 - выбор одной из двух страниц ПЗУ: при 0 - BASIC-128, при 1 - BASIC-48
D5 - при равенстве 1 - блокирует порт #7FFD для совместимости со Спектрумом-48.
D6-D7 - не используются.


Порт in #7FFD (выборка: %0nnnnn1n nnnnnn0n) - для встроенного модема:
D0 - BELL

D1-D7 - всегда в "1".

Порты для AY (#FFFD и #BFFD) также стандартные...
(выборка: %11nnnn1n nnnnnn0n и %10nnnn1n nnnnnn0n соответственно)

Все остальные дополнительные порты образуются из порта #FD плюс
обнуление A9, что приводит к зависанию компьютера прииспользовании "половинки" #FD при переключении памяти и выводе звука на AY в программах для Пентагона... "Вылечил" тумблером, отрубающим A9 когда надо вручную...

Вот эти порты:

Порт out #7DFD (выборка: %0nnnnn0n nnnnnn0n) - порт палитры:

какой цвет из 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 (выборка: %0nnnnn0n nnnnnn0n) - чтение с АЦП (covox наоборот):
D0-D7 - данные.

Порт out #FDFD (выборка: %1nnnnn0n nnnnnn0n) - системный:

D0-D1 - переключение расширенной памяти до 512Кб

D2 - ROM-диск, включение дополнительных 4-х страниц пзу, если в компе стоит не 27512, а 271000, а уж что ты туда прошьешь... Располагаются выше основных четырех страниц. В ATM-2 для использования этого наворота в CP/M прошит драйвер, а в ATM-1 "забыли"... Типа крутись сам...
D3 - CPNET - для нереализованных сетевых возможностей... Только лишь будучи установлен, приводит к зависанию при попытке обратиться к TR-DOS, ибо в этом случае при попытке обратиться в промежуток адресов ПЗУ #3Dxx происходит переход не в ПЗУ TR-DOS (страница 1 в ROM-прошивке), а в ПЗУ CP/M (страница 0 в ROM-прошивке). В свое время авторы ПЗУ планировали вставить туда перехватчик обращений к портам TR-DOS, но так и не довели дело до конца, а аппаратная «мулька» осталась... Поэтому всегла его надо держать в "0"
D4 - TON
D5 - TNAB
эти биты для модема...

Порт in #FDFD (выборка: %1nnnnn0n nnnnnn0n)НЕЗАДЕЙСТВОВАННЫЙ. Сигнал выборки на схеме дешифратора присутствует, но никуда не ведет. Теоретически возможно использовать под свои нужды.

Порты in/out #xF (выборка: %nnnnnnnn XXXnnn11) – порты BETA-disk интерфейса (#1F, #3F, #5F, #7F и #FF) – ТЕНЕВЫЕ.

 


Информация по ATM-turbo 2 и TURBO 2+

(платы 6.40-7.10)

Примечание -
Dn - биты шины данных
An - биты адресной шины!
_______________________________
Сначала порты, находящиеся в общем адресном поле:

out #FE (выборка: %nnnnnnnn nnnnX110) - стандартный порт бордюра/звука

D0-D2 - цвет бордюра (8 цветов) - BRG
D3 - запись сигнала на магнитофон
D4 - управление звуковым каналом ("бипером")
D5-D7 - не используются.

+ в наследство от ATM-1 досталось -
A3=0 - BRIGHT 1 на бордюре (переключение экранных режимов перенесено на другой порт).

in #FE (выборка: %nnnnnnnn nnnnn110) - тоже стандартный порт клавиатуры, кроме одной детали

D0-D4 - чтение одной из пяти клавиш полуряда клавиатуры.
A8-A15 - выбор полурядов клавиатуры, путем сброса соответствующего бита в ноль.
D5 - еще одно наследство от ATM-1 -это системный сигнал Z, только раньше он висел на бите D7.
D6 - чтение сигнала с магнитофона.

out #FB (выборка: %nnnnnnnn Xnnnn011) - вывод на принтер, аналогичный тому, что в ATM-1

in #FB (выборка: %nnnnnnnn nnnnn011) - чтение состояния принтера, аналогичный на ATM-1 ( но нетy A7=1(включение CP/M-страницы ПЗУ, так как тут используется другая организация памяти))

in/out #FA (выборка: %nnnnnnnn nnnnn010) - аналогичный ATM-1

in #FF (выборка: %nnnnnnnn nnnnn111) - порт атрибутов (отсутствовал в ATM-1, что также приводило к некоторой несовместимости).

in #7DFD (выборка: %0nnnnn0n nnnnnn0n) - как и в ATM-1 чтение АЦП - единственный порт использующий A9=0, оставшийся от ATM-1, так как подобные порты на out не используются, можно одним логическим элементом и паяльником ликвидировать неполадки из-за половинок #FD...

in #7FFD (выборка: %0nnnnn1n nnnnnn0n) -
D0-D3 - не используются
D4-D5 - для платы 6.40 - сигналы BELL и ULINE для телефонной линии. В 7.10 - не используется.
D6=1 - сигнал готовности (WIRQ) с IDE. (D6=0 - нет готовности)
D7 - для 6.40 - или данные с XT-клавиатуры, или (D7=0) - сигнал готовности АЦП. Для 7.10 - только последнее.

out #7FFD (выборка: %0nnnnnnn nnnnnn0n) - такой же как и в других Спектрумах:

D0-D2 - выбор одной из восьми страниц по 16Кб из 128Кб по адресу #C000.
D3 - номер видеостраницы
D4 - выбор одной из двух страниц ПЗУ: при 0 - BASIC-128, при 1 - BASIC-48. В CP/M используется для быстрой смены карт памяти, так как на каждое значение этого бита можно установить в диспетчере памяти свою.
D5 - при равенстве 1 - блокирует порт #7FFD для совместимости со Спектрумом-48.
D6-D7 - не используются.

Порты для AY (#FFFD и #BFFD) также стандартные...
(выборка: %11nnnnnn nnnnnn0n и %10nnnnnn nnnnnn0n соответственно)

Теперь пойдут "скрытые" порты, которые спрятаны в TR-DOS:

#FF77 (выборка: %nXnnnnXX 0nn101n1) - системный порт -
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 (выборка: %XXnnnnnn 1nn101n1) - тот самый диспетчер памяти. Здесь можно в любую четверть памяти вставить любую страницу ОЗУ или ПЗУ (теоретически 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 (выборка: %XXXXXXXX 0nn001n1) - только для 6.40! Сигнал WCSF' - запись в специальное ОЗУ
XT-клавиатуры (537РУ10) (не находится в адресном пространстве Z80)
D0-D4 - данные.
A8-A15 + сигнал K_RES с порта #FF77 - адрес ОЗУ клавиатуры.
В 7.10 - не задействован.

in #FFE7 (выборка: %nnnnnnn1 0nn00111) - не задействован!

in/out #FEE7 (выборка: %nnnnnnn0 0nn00111) - не задействован!

in/out #EF (выборка: %nnnnnnnX XXX01111) - работа с винчестером (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 (выборка: %nnnnnnnn 1nn11111):
1) системный порт дисководов.
2) при PEN2=0 - одновременно и выбор палитры, такой же как и в ATM-1, но по другим битам:
D0 - B
D1 - R
D2 - 1 - не использ.
D3 - 1 - не использ.
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