
Итак, 34 годовщине разработки МК-106 посвящается...
Воссоздана экспериментальная модель МК-106 по оригинальным чертежам. К сожалению нет ни чертежей ни фото платы для воссоздания полной реплики. В данном прототипе вместо оригинального ЖКИ модуля от МК-90 был использован эмулятор данного модуля. Теперь более подробно.
Черновой вариант оригинальной схемы был сделан на «миллиметровке», в дальнейшем, при создании первого прототипа разработчиками, схема была изменена в плане элементной базы, а так же функционирования некоторых узлов. В ходе создания данного рабочего прототипа в схему были внесены некоторые изменения и улучшения:
- переработана схема дешифрации адресного пространства;
- увеличен объем адресуемого ОЗУ с 16кБ до 32кБ (в оригинальной схеме используется статическая память по 8кБ, но на фото видно, что установлена микросхема памяти на 32кБ, т.е. разработчиками был увеличен объем, но в схему изменения небыли внесены);
- исправлена адресация внутренних портов В/В (в оригинальной схеме дешифрация внутренних портов В/В для записи происходит только адресными линиями А0-А3, а чтение – только А7/А15, т.о. внутренние порты В/В перекрывают все адресное пространство от 00h до FFh, в исправленной схеме внутренние порты В/В занимают адреса от 80h до FFh);
- сигнал /BANK формируется при обращении в адресное пространство ПЗУ C000h - FFFFh (в оригинале – 8000h - FFFFh), что позволяет переключаться между системным и дополнительным ПЗУ, т.о. увеличив объем ПЗУ до 32кБ, или подключить дополнительное ОЗУ вместо системного ПЗУ, тем самым, увеличив ОЗУ микрокомпьютера до 64кБ;
- узел «пульсирующего питания» был убран, т.к. он подразумевал использование прерывания RST6.5 с переходом на п/п по адресу 34h, т.е. этот адрес должен быть постоянно занят системой, что накладывает большие ограничения на использование данной области ОЗУ пользователем, этот узел был переделан на включение/выключение микрокомпьютера по нажатию кнопки без фиксации;
- убрана схема согласования уровней сигнала порта ИРПС «токовая петля», реализованного через сигналы процессора SID и SOD, которые так же используются для связи с магнитофоном, т.е. этот порт выполняет функцию загрузки/сохранения программ на РС (через конвертор «USB to TTL») или эмулятор магнитофона (уровни TTL).
Так же были внесены несколько других мелких изменений. Все изменения не затронули элементную базу и логику работы оригинального микрокомпьютера. Разработчиками была заявлена поддержка внешних модулей памяти (СМП) от микрокомпьютера МК-90, но в оригинальной схеме это реализовано не было. В дальнейшем планируется сделать поддержку модулей СМП и аппаратный последовательный порт в виде внешних подключаемых модулей.
Код:
Распределение памяти:
C000h-FFFFh – системное ПЗУ (16кБ), может заменятся другим ПЗУ или ОЗУ;
A000h-BFFFh - системное ОЗУ №2 (8кБ);
8000h-9FFFh - системное ОЗУ №1, содержит видеопамять с адреса 9000h, отключается при опросе клавиатуры;
0000h-7FFFh - ОЗУ пользователя, стек (32кБ).
Распределение видеопамяти:
9000h 9100h ... 9E00h
9001h 9101h ... 9E01h
... ... ... ...
903Fh 913Fh ... 9E3Fh
Распределение памяти при переключении на опрос клавиатуры:
D7 D6 D5 D4 D3 D2 D1 D0
F1|F9 | / | V | C | X | Z | . | 0x90FE
F2|F10| ; | G | F | D | S | A | 0x90FD
F3|F11|del| T | R | E | W | Q | 0x90FB
F4|F12| _ | 5 | 4 | 3 | 2 | 1 | 0x90F7
F5|cs | + | 6 | 7 | 8 | 9 | 0 | 0x90EF
F6|ss |lf | Y | U | I | O | P | 0x90DF
F7|F13| ' | H | J | K | L |cr | 0x90BF
F8|F14|nul| B | N | M | , | | 0x907F
Распределение внутренних портов ввода-вывода:
F8h - данные принтера (запись);
F9h – сброс прерывания RST6.5 (запись);
FAh - отключение питания (запись);
FBh - отключение системного ПЗУ (запись);
FCh - включение системного ПЗУ (запись)
FDh - звук, бит D1 (запись);
FEh – включить опрос клавиатуры (запись);
FFh – отключить опрос клавиатуры (запись);
7Fh - джойстик (D0-Left, D1-Right, D2-Up, D3-Down, D4-Fire), авария (D5- батарея разряжена), принтер (D0 - /BUSY) (чтение).
- - - Добавлено - - -
Системное ПЗУ
Системное ПЗУ содержит Монитор, Ассемблер и Бейсик. При старте микрокомпьютера появляется меню с возможностью выбора данных программ. Если системное ОЗУ с адреса A000h содержит дополнительную программу, то ее название появится в стартовом меню (адрес A000h должен содержать код 0C3H, а с адреса A003h должно быть короткое, не более 12 символов, название программы с кодом 000h в конце).
Код:
Системные подпрограммы:
«Холодный» старт системы (COLD_START)
Адрес: 0C000H
«Теплый» старт системы (WARM_START)
Адрес: 0C003H
Очистка экрана (MON_CLS)
Адрес: 0C006H
Вывод символа на экран (MON_PRN_CHR_A)
Адрес: 0C009H
Вход: A-код символа (>019Н)
Перевод строки (MON_PRN_CRLF)
Адрес: 0C00CH
Прокрутка экрана вверх на одну строку (MON_SCROLL_UP)
Адрес: 0C00FH
Прокрутка экрана вниз на одну строку (MON_SCROLL_DOWN)
Адрес: 0C012H
Получить абсолютные координаты печати/курсора (MON_GET_XY)
Адрес: 0C015H
Выход: L=строка, H=колонка
Установить абсолютные координаты печати/курсора (MON_SET_XY)
Адрес: 0C018H
Вход: L=строка, H=колонка
Сравнить содержимое HL и DE(MON_CMP)
Адрес: 0C01BH
Выход: Z=0 если [HL]=[DE], С=0 если [HL]>[DE], С=1 если [HL]<[DE]
Копировать область памяти (MON_COPY)
Адрес: 0C01EH
Вход: HL=начало источника, DE=конец источника, BC=начальный адрес приемника (BC]>[DE] или [BC]<[HL])
Заполнение области памяти константой (MON_FILL)
Адрес: 0C021H
Вход: C=константа, HL=начало области, DE=конец области
Печать содержимого HL в 16-ричном виде (MON_PRN_HL)
Адрес: 0C024H
Подпрограмма обработки часов/календаря (MON_WATCH)
Адрес: 0C027H
Подпрограмма запуска часов (MON_RUN_WATCH)
Адрес: 0C02AH
Примечание. Разрешает прерывания RST6.5 и записывает по адресу 034Н код вызова подпрограммы обработки часов MON_WATCH.
Запрос на продолжение вывода (прокрутка) при заполнении экран (MON_ASK_SCROLL)
Адрес: 0C02DH
Выход: Z=1-продолжить, Z=0-прервать
Примечание. Обращение к данной подпрограмме нужно ставить перед выводом очередной строки.
Пауза (MON_PAUSE)
Адрес: 0C030H
Вход: HL=длительность
Подпрограмма загрузки файла (MON_LOAD)
Адрес: 0C033H
Подпрограмма сохранения файла (MON_SAVE)
Адрес: 0C036H
Вход: HL=начало, DE=конец
- - - Добавлено - - -
Монитор
Программа Монитор является измененной программой Монитор-2 от компьютера «Специалист».
Клавиши управления:
F1 – Выход в стартовое меню
F2 – Редактор/Ассемблер
Все команды остались без изменения за исключением двух. Команда «Х» была исключена, т.к. команда «G» получила новый формат:
G[адрес запуска],[HL],[DE],[BC]
где в параметрах [HL],[DE] и [BC] можно указать начальное значение соответствующих регистровых пар, т.е. программу можно запускать с параметрами.
Так же изменения коснулись вывода информации на экран – при заполнении экрана, выводится запрос на продолжения вывода.
Выполнение команд чтения и записи (I, O, R) прервать нельзя, однако при вводе пустого имени (для команд I, O) происходит выход. Формат хранения файлов на «ленте» соответствует формату фалов RKS с заголовком, т.е.:
Заголовок – 3 байта D9h, имя файла в формате 8.3, 255 байт 000h, E6h, адрес загрузки (младший байт, старший байт), адрес конца (младший байт, старший байт);
Данные;
Контрольная сумма (младший байт, старший байт).
Т.к. работа микрокомпьютера не предусмотрена с реальным магнитофоном, то формат сигнала для записи/чтения байта соответствует параметрам протокола RS-232 на скорости 9600bps (проверки четности нет, 1 стоп бит). Из-за того, что данный протокол реализован программно, необходимы задержки между байтами при передачи/приеме. В качестве носителя информации использован «цифровой магнитофон» (только для команд I, O) на микроконтроллере семейства AVR с SD-картой и реализовано управление передачей через состояние линий TxD и RxD. При передачи данных, микрокомпьютер или «магнитофон» проверяют входную линию и если она в «1», то начинается передача байта. Т.о. реализуются задержки, необходимые для обработки блоков данных или их записи на карту. Так же загружать данные можно с РС через терминал, в котором выставляется задержка при передачи (например, в программе Terminal by Br@y++ выставлять задержки не нужно, внутренней задержки программы достаточно, чтобы микрокомпьютер успевал обработать данные). Выставление микрокомпьютером выхода в «0» при приеме данных от РС, воспринимается терминальной программой как байт FFh, что может служить индикатором приема данных микрокомпьютером. Через терминал, так же, можно загружать программы без заголовка (команда R) в виде бинарного файла, содержащего только адрес начала и конца загрузки, данные и контрольная сумма. При необходимости загрузки какой-либо программы по команде I, микрокомпьютер сначала передает на выход строку «LOAD:имя файла», которая служит командой для «цифрового магнитофона» (есть еще команды KILL, DIR, FREE), терминалом она игнорируется.
Для команд Записи/Чтения файла используется имя в формате 8.3. В качестве расширения имени, рекомендуется использовать «RKS» или «BIN».
Код:
Адреса подпрограмм и параметры вызова, за исключением нескольких подпрограмм, остались прежними:
Старт Монитора (MON_START)
Адрес: 0C800H
Ввод символа с клавиатуры (MON_GET_KEY_CODE)
Адрес: 0C803H
Выход: A=код символа/клавиши
Получение одного байта с магнитофона/терминала (MON_TYPE_GET_BYTE)
Адрес: 0C806H
Выход: A=полученный байт
Печать символа по текущим координатам (MON_PRN_CHR)
Адрес: 0C809H
Вход: C-код символа
Примечание. Обрабатываются так же коды 007H (Beep), 00AH (Line feed), 00DH (Carriage return), 018H (RIGHT), 008H (LEFT/Backspace), 019H (UP), 01AH (DOWN), 00CH (HOME), 01FH (Clear screen)
Вывод байта на магнитофон/терминал (MON_TYPE_PUT_BYTE)
Адрес: 0C80CH
Вход: A=байт для передачи
Ввод строки (MON_GET_STR)
Адрес: 0C80FH
Вход: HL=начало буфера, DE=конец буфера
Состояние клавиатура (MON_KB_STATUS)
Адрес: 0C812H
Выход: A=FF – была нажата клавиша, A=0 – нет нажатия
Печать байта в 16-ричном виде (MON_PRN_HEX)
Адрес: 0C815H
Вход: A=байт
Печать строки (MON_PRN_STR)
Адрес: 0C818H
Вход: HL=адрес начала строки (строка должна заканчиваться кодом 000Н)
Запрос кода нажатой клавиши (MON_GET_KEY)
Адрес: 0C81BH
Выход: A=FF – клавиша не нажата иначе A=код клавиши
Запрос текущих координат печати/курсора (MON_GET_CUR_POS)
Адрес: 0C81EH
Выход: H=горизонтальная координата, L=вертикальная координата
Вывод байта на принтер (MON_PRINT)
Адрес: 0C821H
Вход: С=байт
Получение блока данных с магнитофона/терминала (MON_TYPE_GET_BLOCK)
Адрес: 0C824H
Выход: HL=начальных адрес, DE=конечный адрес, BC=контрольная сумма, Inp_FileName=имя файла
Вывод блока данных на магнитофон/терминал (MON_TYPE_PUT_BLOCK)
Адрес: 0C827H
Вход: HL=начальных адрес, DE=конечный адрес, BC=контрольная сумма, Inp_FileName=имя файла
Расчет контрольной суммы (MON_CHK_SUM)
Адрес:0C82AH
Вход: HL=начальных адрес, DE=конечный адрес
Выход: BC=контрольная сумма
Вывод звукового сигнала (MON_SOUND)
Адрес: 0C82DH
Вход: H=продолжительность, L-тон
Получение верхней границы памяти (MON_GET_MAX_RAM)
Адрес: 0C830H
Выход: HL=адрес границы
Установка верхней границы памяти (MON_SET_MAX_RAM)
Адрес: 0C833H
Вход: HL= адрес границы
Вывод строки на магнитофон/терминал (MON_TYPE_PUT_STRING)
Адрес: 0C836H
Вход: HL=адрес начала строки (строка должна заканчиваться кодом 000Н)
Системные ячейки так же, в основном, соответствуют Монитору-2 «Специалиста». Дополнения и изменения:
Секунды (Second) = 08F4EH
Минуты (Minute) = 08F4FH
Часы (Hour) = 08F50H
Месяц (Month) = 08F51H
День (Day) = 08F52H
Год (Year) = 08F53H
Имя файла для загрузки/записи (Inp_FileName) = 08FC1H (формат 8.3 + 000Н)
Адрес таблицы шрифтов (ChrTable) = 08FE7H
Текущая раскладка клавиатуры (KBLayout) = 08FECH (D3 - прокрутка вкл/выкл, D2 - Alt, D1 - CapsShift, D0 - рус/лат)
Константа задержки при записи (TSpeed) = 08FFEH (по умолчанию равна 00052H, что соответствует 1мс).
- - - Добавлено - - -
Ассемблер
Это адаптированная версия ассемблера «Микрон» от «Специалиста». Текстовый редактор - свой. Редактор и Ассемблер работают из ПЗУ, в своей работе используют ячейки памяти с адреса 06800H по 0686DH. Текст программы хранится с адреса 02000H и может быть объемом до 16кБ. Откомпилированный код хранится с адреса 00000Н, поэтому, если адрес запуска другой, то код необходимо переместить по нужному адресу командой Т Монитора. При запуске, Редактор спросит об очистке памяти запросом «Новый? (Д/Н)». Если нажать «Д», то текст, ранее находящийся в памяти, будет удален. Так же, память необходимо очищать при первом запуске.
Клавиши управления:
F1 – Выход в Монитор
F2 - Ассемблер/Редактор
F4 – Перейти в начало текста (Home)
F5 – Перейти на страницу вверх (PageUp)
F6 – Перейти на страницу вниз (PageDown)
F7 – Перейти в конец текста (End)
F8 - Выкл/вкл режима вставки символа (Insert)
F9 - Вкл/выкл режим выделения текста
F10 – Включить режим копирования/перемещения выделенного текста в текущую позицию: C-копировать, X-переместить
F11 – Загрузить файл
F12 – Сохранить файл
F13 – Новый файл
Для команд Записи/Чтения файла используется имя в формате 8.3. В качестве расширения имени, рекомендуется использовать «ASM».
Бейсик
Это адаптированная первая версия Бейсика для «Специалиста», который, в свою очередь, был адаптирован от компьютера «Микро-80». Отличий от Бейсика «Специалиста» нет, за исключением того, что вместо команды DPL (постройка отрезка по относительным координатам) была возвращена команда INP (чтение данных с внешнего порта Ввода/Вывода) и подпрограмма с RST6 перемещена на RST7 для освобождения места под RST6.5 (адрес 0034H) для возможности запуска часов при работе Бейсика. Так же изменения были внесены в формат хранения программ – он соответствует формату Монитора, т.е. формату файлов типа «RKS». Текст программы хранится с адреса 02000H, сам интерпретатор при старте копируется из ПЗУ в ОЗУ с адреса 00000Н и занимает около 6кБ. В своей работе Бейсик дополнительно использует ячейки с 08000H по 0800CH.
Клавиши управления:
F1 – Выход в Монитор
F3 – Стоп (возврат в Бейсик)
F11 – Загрузить файл (аналог команды MLOAD)
F12 – Сохранить файл (аналог команды MSAVE)
Для команд Записи/Чтения файла используется имя в формате 8.3. В качестве расширения имени, рекомендуется использовать «BAS».