Быстрый порт COM2 на БИС 16C550
В продолжении тематики виртуального диска, раскрою тему быстрого порта COM2 на микросхеме 16C550.
Электрическая схема порта:
https://forum-img.guitarplayer.ru/2024/02/11/1jMBJ.png
альтернативаня ссылка на схему
Устройство представляет собой карту расширения, подключается в системный разъём ПРК "Орион-128.2" (нумерация контактов указана согласно схеме рев.512).
Возможны два варианта сборки: упрощённый и стандартный. Первый вариант - без дешифратора 1533ИД3, его использование возможно только если в системе больше нет никаких других устройста, занимающих адресное пространство F700..F7FFh. Второй вариант с помощью дешифратора позволяет корректно занимать только диапазон F7E0..F7EFh, в этом случае сигнал ПРК "SEL_F7xx" (В30) идёт на БИС 16C550 через дешифратор.
Для упрощения схемотехники в качестве тактового генератора используется специализированный чип с HCMOS/TTL-выходом, например такой - http://www.chipdip.ru/product/7.3728mhz-hcmos-ttl/. Частота генератора - 7.3728 МГц.
Для преобразования сигналов (TTL<->RS232) используется микросхема MAX232. Вариантов исполнения этого популярного преобразователя вагон и маленькая тележка, они требуют разные номиналы конденсаторов обвязки, поэтому на схеме указан номинал с вариацией. Более точно нужно смотреть даташит на ваш конкретный экземпляр "макса".
На плате ПРК требуется небольшая доработка (если она у вас не была сделана ранее): на линию "В20" системного разъёма заводится сигнал RESET с выхода "9" микросхемы DD18.2 (ТМ7).
Как было сказано ранее, программно порт поддержан в ОС DSDOS начиная с версии v3.81, его наличие в системе определяется автоматически при загрузке, скорость обмена программируется максимальная - 115200 Бод.
Схема не требует наладки, при исправных деталях и правильном монтаже работает сразу.
Мой "макетный" вариант выглядит так:
https://forum-img.guitarplayer.ru/2024/02/11/1jm7m.png
https://forum-img.guitarplayer.ru/2024/02/11/1j6Rc.png
Фото №1 Фото №2
В нём микросхем больше, т.к. я одновременно распаял два порта: COM1 и COM2. Причём первый с вариацией: 1) под КР580ВВ51А (скорость обмена 38400 Бод) и 2) под MSM82C51A-2 (скорость обмена 115200 Бод).
Информация по программированию порта COM2:
Код:
; BIOS (2/2) для DSDOS v3.81 (Орион-128.2)
; (C) 1998-2016 Соловьев Д.Н. /Санкт-Петербург/
; 18.06.2016
; Порт COM2 (16C550)
RG_RWD:EQU 0F7E0H; Read/Write Data
RG_IER:EQU 0F7E1H; Interrupt Enable Reg
RG_LCR:EQU 0F7E3H; Line Control Reg
RG_MCR:EQU 0F7E4H; Modem Control Reg
RG_LSR:EQU 0F7E5H; Line Status Reg
RG_SCR:EQU 0F7E7H; Scratch Reg
IniCOM:
; Инициализация UART 16C550
LXI H,RG_IER
MVI M,0; отключить все прерывания
INX H
INX H
MVI M,80H; маска установки DLAB
MVI L,RG_RWD
MVI M,4; LSB делителя (4 = 115200 Бод)
INX H
MVI M,0; MSB делителя
INX H
INX H
MVI M,03H; настройка протокола (8,N,1)
RET
SvbCOM:
; Запись байта в порт обмена
; I: [C]-записываемый байт
; O: <C>=0 - [A]=записанный байт,
; <C>=1 - порт не готов
MVI B,0; time-out const = 256
SVB2:
DCR B
JZ LDB2_4
LDA RG_LSR
ANI 20H
JZ SVB2
MOV A,C
STA RG_RWD
RET
LdbCOM:
; Чтение байта из порта обмена
; O: C=0 - [A]=байт, C=1 - порт не готов
LDB2_0:
; проверка на преждевременную готовность
LDA RG_LSR
RRC
JC LDB2_2
; ожидание поступления данных
PUSH B
LXI B,33000; time-out const
LDB2_1:
DCX B
MOV A,B
ORA C
JZ LDB2_3
LDA RG_LSR
RRC
JNC LDB2_1
POP B
LDB2_2:
LDA RG_RWD
CMC
RET
LDB2_3:
POP B
LDB2_4:
STC
RET
Порт COM1 на КР580ВВ51А / MSM82C51A-2
В добавок к предыдущему посту вариант реализации интерфейса RS-232 (порт COM1, v.2) на микросхеме КР580ВВ51А (или MSM82C51A-2):
https://forum-img.guitarplayer.ru/2024/02/11/1jvo2.png
альтернативная ссылка на схему
Подробно описывать не буду, ибо, что называется, действующие лица в общем-то те же. Для упрощения схемотехники из оригинальной схемы выкинут таймер КР580ВИ53, вместо него тактирование протокола выполняет синтезатор частот на интегральном генераторе и счётчике-делителе. Схема позволяет устанавливать либо отечественный УСАПП - КР580ВВ51А (скорость обмена 38400 Бод, перемычки J1 и J2 в нижнем положении), либо быструю КМОП-версию UART от OKI - MSM82C51A-2 (скорость обмена 115200 Бод, перемычки J1 и J2 в верхнем положении).
Программно данный порт полностью совместим с оригинальным (из ж. РАДИО), всё ранее написанное ПО (LINK$, VDISK) с ним совместимо (скорость обмена аппаратно зафиксирована, программная настройка игнорируется).
Информация по программированию порта COM1:
Код:
; BIOS (2/2) для DSDOS v3.81 (Орион-128.2)
; (C) 1998-2016 Соловьев Д.Н. /Санкт-Петербург/
; 18.06.2016
; Порт COM1 (ВВ51А)
PT_TM0:EQU 0F730H
PT_CTM:EQU 0F733H
PT_SP0:EQU 0F740H
PT_SP1:EQU 0F741H
IniCOM:
; Инициализация порта COM1
; Настройка таймера ВИ53
MVI A,36H
STA PT_CTM
LXI H,PT_TM0
MVI A,9; 14400 Бод
MOV M,A
XRA A
MOV M,A
; Настройка УСАПП ВВ51А
LXI H,PT_SP1
MVI A,1
MOV M,A
MOV M,A
MVI A,40H
MOV M,A
MVI A,4EH; настройка протокола (8,N,1)
MOV M,A
MVI A,27H
MOV M,A
DCX H; [HL]=PT_SP0
MOV A,M; очистка порта ввода
RET
SvbCOM:
; Запись байта в порт COM1
; I: [C]-записываемый байт
; O: <C>=0 - [A]=записанный байт,
; <C>=1 - порт не готов
MVI B,0; time-out const = 256
SVB1:
; ожидание готовности
DCR B
JZ LDB1_4
LDA PT_SP1
RRC
JNC SVB1
MOV A,C
STA PT_SP0
CMC
RET
LdbCOM:
; Чтение байта из порта COM1
; O: C=0 - [A]-считанный байт
; C=1 - ошибка (тайм-аут)
; проверка на преждевременную готовность
LDA PT_SP1
ANI 2
JNZ LDB1_2
; ожидание поступления данных
PUSH B
LXI B,33000; time-out const
LDB1_1:
DCX B
MOV A,B
ORA C
JZ LDB1_3
LDA PT_SP1
ANI 2
JZ LDB1_1
POP B
LDB1_2:
LDA PT_SP0
RET
LDB1_3:
POP B
LDB1_4:
STC
RET