mirror of
https://github.com/nzeemin/bkbtl-doc.git
synced 2025-04-18 05:44:04 +03:00
Initial commit
This commit is contained in:
parent
c86eb0afbb
commit
118d9d4947
41
FDD_drivers.txt
Normal file
41
FDD_drivers.txt
Normal file
@ -0,0 +1,41 @@
|
||||
http://forum.maxiol.com/index.php?showtopic=3893
|
||||
|
||||
История версий
|
||||
|
||||
1. 253я - cамая первая версия драйвера контроллера дисковода
|
||||
устанавливалась в контроллер для БК-0011
|
||||
|
||||
В 253 прошивке нет встроенного отладчика, поэтому командой T из Мони-
|
||||
тора БК-0010(.01) не попадешь в отладчик и не загрузишься (нужно будет
|
||||
набирать S 160000 <ВВОД>).Также следует иметь в виду что 253 прошивка
|
||||
единственная из всех не имеющая в своем составе блока эмуляции команд
|
||||
EIS/FIS. Кроме того, с 253 прошивкой не работает ОСБК/RT11,по-видимому
|
||||
из-за того что драйвер BY.SYS рассчитан на 326 и cовместимые с ней
|
||||
прошивки и делает прямые вызовы в дисковое ПЗУ.
|
||||
|
||||
2. 326я - cамая популярная но имеющая ошибку которая не позволяет читать диски отформатированные на IBM
|
||||
|
||||
3. 327ая - их множество версий:
|
||||
|
||||
|
||||
fdd/hdd rom 327 version 12 © dj.H key features
|
||||
|
||||
- 100% совместимость с эмулятором БК Савельева А. так и с реальными БК-0011М,
|
||||
БК-0011, БК-0010, БК-0010.01 с дополнительным ОЗУ (или без него);
|
||||
|
||||
- Обслуживание 31 дискового устройства - приводы A:-Z:, [, \, ], ^, _
|
||||
|
||||
- Проверка контрольной суммы дискового ПЗУ при начальной загрузке;
|
||||
|
||||
- Начальная загрузка с 4 приводов - A:, B:, C:, D:
|
||||
|
||||
- Поддержка чтения/записи дисков отформатированных и записанных на IBM PC
|
||||
без каких либо дополнительных программ;
|
||||
|
||||
- Встроенный мини-отладчик - вызов из монитора БК00-10 по команде T
|
||||
(требуется Монитор БК10 по адресу 100000 или его эмуляция в режиме БК-11М);
|
||||
|
||||
- Полная 100% совместимость с более ранними версиями дискового ПЗУ-326 и 327;
|
||||
|
||||
- Поддержка дополнительного "сетевого" дравера BK-LINK /LPT/ сети размещаемо-
|
||||
го по адресу 170000 (требуется rom 327 v15).
|
767
FL11M.txt
Normal file
767
FL11M.txt
Normal file
@ -0,0 +1,767 @@
|
||||
========================================================================
|
||||
= ОПИСАНИЕ БК-11М ГЛАВА ПЕРВАЯ: РЕГИСТРЫ ВНЕШНИХ УСТРОЙСТВ = fl.1=
|
||||
========================================================================
|
||||
|
||||
* описания подготовил БАГАЕВ МАКСИМ * дом. тел (8322)60-28-05 после 21
|
||||
|
||||
* ВНИМАНИЕ ! ВСЕ АДРЕСА УКАЗАНЫ В ВОСЬМЕРИЧНОЙ СИСТЕМЕ ИСЧИСЛЕНИЯ
|
||||
|
||||
|
||||
1.1 РЕГИСТР СОСТОЯНИЯ КЛАВИАТУРЫ
|
||||
|
||||
АДРЕС = 177660
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
¦ ¦
|
||||
--------------------------------+¬ -+-------------------------¬
|
||||
¦ готовность ¦ ¦разрешение прерывания ¦
|
||||
¦ "1"- в этом разряде означает,¦ ¦"0" - разрешает прерывание¦
|
||||
¦что в регистре данных клавиатуры¦ ¦от клавиатуры ¦
|
||||
¦(177662) находится код нажатой ¦ L---------------------------
|
||||
¦клавиши. сбрасывается при чтении¦
|
||||
¦кода из регистра (177662). ¦
|
||||
¦ = доступен только по чтению = ¦
|
||||
L---------------------------------
|
||||
|
||||
* остальные разряды НЕ ИСПОЛЬЗУЮТСЯ и читаются как "0"
|
||||
|
||||
* по сигналу на ОШ 'INIT' (команда RESET) разряд '6'="0", '7'="0"
|
||||
|
||||
|
||||
1.2 РЕГИСТР ДАННЫХ КЛАВИАТУРЫ
|
||||
|
||||
АДРЕС = 177662
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦--------¬¦ ¦ ¦ ¦-----------------¬¦
|
||||
¦ ¦ ¦ L+палитра+- L--T- L+код с клавиатуры+-
|
||||
¦ ¦ ¦ L-------- ¦ L-----------------
|
||||
¦ ¦ ¦----------------¬¦
|
||||
¦ ¦ L+не используется+-
|
||||
¦ ¦ L----------------
|
||||
¦ ¦------------------------------------------------¬
|
||||
¦ L+разрешение прерывания по таймеру (вектор 100)¦
|
||||
¦ ¦ ("0"-разрешено) Fтаймера = 48.5 Hz ¦
|
||||
¦ L------------------------------------------------
|
||||
¦ ------------------------------------------------¬
|
||||
L---+ перекл. буферов зкрана : "1" - N%6, "0" - N%5 ¦
|
||||
L------------------------------------------------
|
||||
|
||||
* при ВКЛЮЧЕНИИИ ПИТАНИЯ разряд '15'="0" (буфер N% 0 [стр N% 5]),
|
||||
а разряд '14'="1"(запрещено прерывание от таймера)
|
||||
|
||||
* неиспользуемые (7,12,13) разряды читаются как "0"
|
||||
|
||||
* МЛАДШИЙ БАЙТ доступен только ПО ЧТЕНИЮ
|
||||
|
||||
* код ПАЛИТЫ доступен только ПО ЗАПИСИ
|
||||
|
||||
* по включению устанавливается палитра N%15
|
||||
|
||||
** ТАБЛИЦА ПАЛИТР **
|
||||
|
||||
-------T-------------------T-------------------------------------------¬
|
||||
¦номер ¦ код палитры ¦ код точки ¦
|
||||
¦ +----T----T----T----+--------T----------T-----------T-----------+
|
||||
¦ NN% ¦ 11 ¦ 10 ¦ 09 ¦ 08 ¦ 00 ¦ 10 ¦ 01 ¦ 11 ¦
|
||||
+------+----+----+----+----+--------+----------+-----------+-----------+
|
||||
¦ 00 ¦ 0 ¦ 0 0 0 ¦ черный ¦ зеленый ¦ синий ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 01 ¦ 0 ¦ 0 0 1 ¦ .... ¦ сирениев.¦ желтый ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 02 ¦ 0 ¦ 0 1 0 ¦ .... ¦ синий ¦ голубой ¦ сиреневый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 03 ¦ 0 ¦ 0 1 1 ¦ .... ¦ голубой ¦ зеленый ¦ желтый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 04 ¦ 0 ¦ 1 0 0 ¦ .... ¦ голубой ¦ сиренев. ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 05 ¦ 0 ¦ 1 0 1 ¦ .... ¦ белый ¦ белый ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 06 ¦ 0 ¦ 1 1 0 ¦ .... ¦красно- ¦ темно- ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦-коричнев.¦ -красный ¦ ¦
|
||||
¦ 07 ¦ 0 ¦ 1 1 1 ¦ .... ¦светло- ¦ салатовый ¦ желтый ¦
|
||||
¦ ¦ ¦ ¦ ¦ -зеленый ¦ ¦ ¦
|
||||
¦ 08 ¦ 1 ¦ 0 0 0 ¦ .... ¦ фиолетов.¦ фиолетов. ¦ сиреневый ¦
|
||||
¦ ¦ ¦ ¦ ¦ синий ¦ ¦ ¦
|
||||
¦ 09 ¦ 1 ¦ 0 0 1 ¦ .... ¦ фиолетов.¦ светло- ¦ красно- ¦
|
||||
¦ ¦ ¦ ¦ ¦ синий ¦ -зеленый ¦-коричневый¦
|
||||
¦ 10 ¦ 1 ¦ 0 1 0 ¦ .... ¦ фиолетов.¦ салатовый ¦ темно- ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ -красный ¦
|
||||
¦ 11 ¦ 1 ¦ 0 1 1 ¦ .... ¦ желтый ¦ голубой ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 12 ¦ 1 ¦ 1 0 0 ¦ .... ¦ зеленый ¦ красный ¦ голубой ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 13 ¦ 1 ¦ 1 0 1 ¦ .... ¦ желтый ¦ голубой ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 14 ¦ 1 ¦ 1 1 0 ¦ .... ¦ зеленый ¦ желтый ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 15 ¦ 1 ¦ 1 1 1 ¦ .... ¦ зеленый ¦ голубой ¦ белый ¦
|
||||
L------+----+--------------+--------+----------+-----------+------------
|
||||
|
||||
|
||||
|
||||
2.1 РЕГИСТР СМЕЩЕНИЯ
|
||||
|
||||
АДРЕС = 177664
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
------------------¬¦ ¦--------------------¬¦
|
||||
¦'малый'экран ="0"+- L+ смещение +-
|
||||
L------------------ L--------------------
|
||||
|
||||
* при установке разряда '9' в "0" отображается только четверть зкрана
|
||||
- режим РП (ОЗУ пользователя возрастает до 28 кБ (от 1000 до 70000)
|
||||
|
||||
* задание смещения экрана, начальная установка (адресу 40000
|
||||
сответствует левый верхний угол) - запись числа 1330
|
||||
|
||||
|
||||
|
||||
|
||||
4.1 РЕГИСТР ********
|
||||
|
||||
АДРЕС = 177700
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
* ПРИМЕЧАНИЕ: установка битов '0' или '1' приводит к зависанию,
|
||||
а установка бита 2 вводит машину в состояние, аналогичное
|
||||
команде WAIT
|
||||
|
||||
4.2 РЕГИСТР ********
|
||||
|
||||
АДРЕС = 177702
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
|
||||
|
||||
4.3 РЕГИСТР ********
|
||||
|
||||
АДРЕС = 177704
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
|
||||
5. СИСТЕМНЫЙ ТАЙМЕР
|
||||
|
||||
ТАЙМЕР СОСТОИТ:
|
||||
A. генератор с периодом 32 мкс (т.к. тактовая частота процессора
|
||||
В. делители на 4 и 16 БК-11 и БК-11М составляет 4 MHz, а
|
||||
C. реверсивный счетчик (177710) не 5 MHz, kak написано в литературе)
|
||||
D. регистр установки (177706)
|
||||
E. регистр команд и состояний (177712)
|
||||
|
||||
* ДЛЯ СПРАВКИ: тактовая частота, поступающая на процессор, делится на
|
||||
128. , а потом поступает на таймер
|
||||
|
||||
5.1 РЕГИСТР УСТАНОВКИ
|
||||
|
||||
АДРЕС = 177706
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
* доступен и по записи и по чтению
|
||||
|
||||
|
||||
5.2 РЕВЕРСИВНЫЙ СЧЕТЧИК
|
||||
|
||||
АДРЕС = 177710
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
* козфициент деления закладывается в регистр установки (177706)
|
||||
|
||||
* счетчик загружается из регитра установки (177706) в момент пуска и
|
||||
перехода через "0" или при обращении к биту 1 регистра управления
|
||||
|
||||
* доступен и по записи и по чтению
|
||||
|
||||
5.3 РЕГИСТР УПРАВЛЕНИЯ
|
||||
|
||||
АДРЕС = 177712
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
¦--------------------¬¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L+ не используются +- ¦ ¦ ¦ ¦ ¦ ¦ ¦ L-------¬
|
||||
¦и установлены в "1"¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ --------+-------¬
|
||||
L-------------------- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ "1" остановка ¦
|
||||
---------------- ¦ ¦ ¦ ¦ ¦ ¦ L----------------
|
||||
-----------------+---------------¬ ¦ ¦ ¦ ¦ ¦ L--------¬
|
||||
¦ указатель окончания счета - ¦ ¦ ¦ ¦ ¦ ¦ ---------+---------¬
|
||||
¦- готовность "1"; в зависимости ¦ ¦ ¦ ¦ ¦ ¦ ¦ начальная ¦
|
||||
¦от режима (бит3) останавливается¦ ¦ ¦ ¦ ¦ ¦ ¦установка таймера¦
|
||||
¦ либо продолжает считать ¦ ¦ ¦ ¦ ¦ ¦ L-------------------
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ L----------¬
|
||||
------------------- ¦ ¦ ¦ -----------+----------¬
|
||||
-----------------+---------------¬ ¦ ¦ ¦ ¦разрешение установки¦
|
||||
¦ включает делитель на 4 ¦ ¦ ¦ ¦ ¦сигнала 'конец счета'¦
|
||||
L--------------------------------- ¦ ¦ ¦ L----------------------
|
||||
---------------------- ¦ L------------¬
|
||||
-----------------+---------------¬ ¦ -------------+-----------¬
|
||||
¦ включает делитель на 16 ¦ ¦ ¦ режим одновибратора ¦
|
||||
L--------------------------------- ¦ L-------------------------
|
||||
-----------------+--------------¬
|
||||
¦ запуск счетчика; по чтению - ¦
|
||||
¦ - состояние: "1" - считает ¦
|
||||
L--------------------------------
|
||||
|
||||
|
||||
6.1 РЕГИСТР ПОРТА
|
||||
|
||||
АДРЕС = 177714
|
||||
ФОРМАТ РЕГИСТРА
|
||||
|
||||
------------ РЕГИСТР 714 --------¬
|
||||
¦
|
||||
----------------------------------------------¬ ¦
|
||||
¦ по чтению ¦ ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬ ¦
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦ ¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--- ¦
|
||||
¦
|
||||
-----------
|
||||
|
||||
----------------------------------------------¬
|
||||
¦ по записи ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
========================================================================
|
||||
= ПРОДОЛЖЕНИЕ В СЛЕДУЮЩЕМ ФАЙЛЕ =
|
||||
========================================================================
|
||||
КИРОВ 1993
|
||||
========================================================================
|
||||
= ОПИСАНИЕ БК-11М ГЛАВА ПЕРВАЯ: РЕГИСТРЫ ВНЕШНИХ УСТРОЙСТВ = fl.2=
|
||||
========================================================================
|
||||
|
||||
* описания подготовил БАГАЕВ МАКСИМ * дом. тел (8332)60-28-05 после 21
|
||||
|
||||
* ВНИМАНИЕ ! ВСЕ АДРЕСА УКАЗАНЫ В ВОСЬМЕРИЧНОЙ СИСТЕМЕ ИСЧИСЛЕНИЯ
|
||||
|
||||
РАСПРЕДЕЛEНИЕ АДРЕСНОГО ПРОСТРАНСТВА
|
||||
|
||||
окно N%0 окно N%1
|
||||
0 40000 100000 140000 160000 177777
|
||||
---------------T-------------T-------------T------------T------------¬
|
||||
¦ стр ОЗУ 0 ¦ ХХХХХХ ¦ ХХХХХХ ¦ сист. ПЗУ ¦регистры ВУ¦
|
||||
L--------------+-------------+-------------+------------+-------------
|
||||
¦ ¦
|
||||
--------- L--------¬
|
||||
--------------+------------¬ -------------+------------¬
|
||||
¦ стр ОЗУ 0....7 ¦ ¦ стр ОЗУ 0....7 ¦
|
||||
L--------------------------- L--------------------------
|
||||
или
|
||||
--------------------------¬
|
||||
¦ стр ПЗУ 8....11 ¦
|
||||
L--------------------------
|
||||
|
||||
6.1 РЕГИСТР ПОРТА
|
||||
|
||||
АДРЕС = 177716
|
||||
ФОРМАТ РЕГИСТРА
|
||||
|
||||
------------ РЕГИСТР 716 --------¬
|
||||
¦
|
||||
----------------------------------------------¬ ¦
|
||||
¦ по чтению ¦ ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬ ¦
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦ ¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--- ¦
|
||||
¦--------------------¬¦ ¦ ¦ ¦ ¦ ¦
|
||||
L+ адрес начального +- ¦ ¦ ¦ ¦ ¦
|
||||
¦ пуска 140000 ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L-------------------- ¦ ¦ ¦ ¦ ¦
|
||||
--------------- ¦ ¦ L---¬ ¦
|
||||
----------+---------¬ ¦ ¦ --------+-------¬ ¦
|
||||
¦ наличие арифм.ПРЦ ¦ ¦ ¦ ¦признак записи¦ ¦
|
||||
¦ "1" - норма ¦ ¦ ¦ ¦в сист. регистр¦ ¦
|
||||
L-------------------- ¦ ¦ L---------------- ¦
|
||||
--------------------------¬¦ ¦---------------------¬ ¦
|
||||
¦ "0" - нажатие клавиши +- L+данные с магнитофона¦ ¦
|
||||
L-------------------------- L--------------------- ¦
|
||||
¦
|
||||
-------------------------------+
|
||||
¦
|
||||
----------------------------------------------¬ ¦
|
||||
¦ по записи, без установки бита 11 ¦ ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬ ¦
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦ ¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--- ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦
|
||||
------------+----------¬ ¦ -+--+------------------¬ ¦
|
||||
¦'0' разрешение ¦ ¦ ¦ данные на магнитофон ¦ ¦
|
||||
¦ прерывания по (СТОП) ¦ ¦ L----------------------- ¦
|
||||
L----------------------- ¦ ¦
|
||||
--------------------------+---------¬ -----------
|
||||
¦'0' включние двигателя магнитофона ¦ ¦
|
||||
L------------------------------------
|
||||
----------------------------------------------¬
|
||||
¦ по записи, при установленом бите 11 ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
------------------------¬ ¦¦¦¦¦¦¦ ¦ ¦¦¦¦¦¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ окно ОЗУ N%0 +---+------ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L------------------------ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ окно ОЗУ N%1 +------------¦--+----- ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L------------------------ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ стробирование записи +------------- ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L------------------------ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
----------------------------------------------------------¦--¦-----¦--¦¬
|
||||
¦ подключение стр. ППЗУ NN% по адресу 100000-140000 11..10....9..8¦
|
||||
L-----------------------------------------------------------------------
|
||||
|
||||
* запись в регистр возможна ТОЛЬКО при установленном 11 БИТЕ и
|
||||
командами, работающими с регистом, как с целым СЛОВОМ
|
||||
|
||||
* в странице 8 ппзу и адресном пространстве 100000-117777 страницы 9
|
||||
записан BASIC, далее по адресам 12000-137777 расположены подпрограммы
|
||||
драйвер мониторной ситемы
|
||||
|
||||
* ВНИМАНИЕ ! 11й бит по записи обозначает запись параметров
|
||||
конфигурации памяти , если же 11й бит НЕ установлен, то доступен
|
||||
регистр управления магнитофоном и прерыванием по клавише (СТОП)
|
||||
|
||||
* ОСОБЕННОСТЬ работы с данными выводимыми НА магнитофон, см график:
|
||||
|
||||
V напряжение на выходе порта магнитофона
|
||||
|
||||
¦ ----¬
|
||||
¦ ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ ----¬ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ ----¬ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
о +------------------------------------------ t
|
||||
|
||||
|
||||
установлен бит 2 ¦ установлен бит 6
|
||||
¦
|
||||
установлен бит 5
|
||||
* на пьезодинамик поступают данные только бита 6 !
|
||||
* в остальном это примитивный музыкальный ЦАП
|
||||
|
||||
|
||||
КОДИРОВКА ПЕРЕКЛЮЧАЕМЫХ СТАНИЦ ОЗУ
|
||||
|
||||
-----------------T------------------T----------------T-----------------¬
|
||||
¦ НОМЕР СТРАНИЦЫ ¦ МАСКА (14;13;12) ¦ МАСКА (10,9,8) ¦ СТАТУС ¦
|
||||
+----------------+------------------+----------------+-----------------+
|
||||
¦ 0 ¦ 60000 ¦ 3000 ¦ отображена ¦
|
||||
¦ ¦ ¦ ¦ 0....40000 ¦
|
||||
¦ 1 ¦ 00000 ¦ 0000 ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 2 ¦ 20000 ¦ 1000 ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 3 ¦ 30000 ¦ 1400 ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 4 ¦ 40000 ¦ 2000 ¦ ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 5 ¦ 10000 ¦ 0400 ¦ БУФЕР ЭКРАНА 0 ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 6 ¦ 70000 ¦ 3400 ¦ БУФЕР ЭКРАНА 1 ¦
|
||||
¦ ¦ ¦ ¦ ¦
|
||||
¦ 7 ¦ 50000 ¦ 2400 ¦ ¦
|
||||
L----------------+------------------+----------------+------------------
|
||||
|
||||
* ВНИМАНИЕ ! маска указана без учета бита 11
|
||||
|
||||
|
||||
7. РЕГИСТРЫ КНГМД
|
||||
|
||||
|
||||
7.1 РЕГИСТР УПРАВЛЕНИЯ
|
||||
|
||||
АДРЕС = 177130
|
||||
ФОРМАТ РЕГИСТРА
|
||||
|
||||
------------ РЕГИСТР 130 --------¬
|
||||
¦
|
||||
----------------------------------------------¬ ¦
|
||||
¦ по чтению ¦ ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬ ¦
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦ ¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--- ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦----------------------¬
|
||||
¦ ¦ L---- н/о ------- ¦ L-- н/о -- ¦ ¦ L+ признак '0' дорожка ¦
|
||||
¦ ¦ -------------------+-----------¬ ¦ ¦ L----------------------
|
||||
¦ ¦ ¦ запрос на чтение или записи ¦ ¦ ¦ ----------------------¬
|
||||
¦ ¦ ¦ данных из регистра данных ¦ ¦ L---+ готовность к работе ¦
|
||||
¦ ¦ L------------------------------- ¦ L----------------------
|
||||
¦ ¦ -------------------------¬ ¦ ----------------------¬
|
||||
¦ L--+ признак форматирования ¦ L------+ 'защита от записи' ¦
|
||||
¦ L------------------------- L----------------------
|
||||
¦ -------------------------¬ ¦
|
||||
L-----+ признак '0' сектор ¦ ¦
|
||||
L------------------------- ¦
|
||||
¦
|
||||
-----------
|
||||
|
||||
----------------------------------------------¬
|
||||
¦ по записи ¦
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L---- н/о ---- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ переключение схем предкорреции +- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ признак 'запись маркера' +---- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ признак 'начало чтения' +------- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ переключение 40/80 дорожек +---------- ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ направление перем. головок +------------- ¦ ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ выбор головки: "0"-верхняя +---------------- ¦ ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦ ¦
|
||||
---------------------------------¬ ¦ ¦ ¦ ¦ ¦
|
||||
¦ включение эл-ля, опускание гол.+------------------- ¦ ¦ ¦ ¦
|
||||
L--------------------------------- ¦ ¦ ¦ ¦
|
||||
-----------------------------------------------------------------¬
|
||||
¦ выбор накопителя: номера --------------------- 3 2 1 0¦
|
||||
L-----------------------------------------------------------------
|
||||
|
||||
* примечание: в дисководах 6022 сигнал 'готовность к работе' не
|
||||
используется
|
||||
|
||||
* при подаче сигнала 'включение электродвигателя' происходит его
|
||||
включение и после проверки готовности двигателя и наличия дискеты
|
||||
происходит опускание головок
|
||||
|
||||
* ОЧЕНЬ ВАЖНАЯ ОСОБЕННОСТЬ ! нельзя читать или писать в регистр
|
||||
данных, если не выставлен бит 7 в регистре управления !
|
||||
|
||||
7.2 РЕГИСТР ДАННЫХ
|
||||
|
||||
АДРЕС = 177132
|
||||
ФОРМАТ РЕГИСТРА
|
||||
---T--T--T--T--T--T--T--T--T--T--T--T--T--T--T--¬
|
||||
¦15¦14¦13¦12¦11¦10¦09¦08¦07¦06¦05¦04¦03¦02¦01¦00¦
|
||||
L--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+---
|
||||
|
||||
* Все разряды регистра доступны по чтению и по записи
|
||||
|
||||
========================================================================
|
||||
BMS corp. КИРОВ 1993
|
||||
========================================================================
|
||||
========================================================================
|
||||
= ОПИСАНИЕ БК-11М ГЛАВА ВТОРАЯ: КОМАНДЫ МОНИТОРА БК 11М = fl3 =
|
||||
========================================================================
|
||||
|
||||
* описания подготовил БАГАЕВ МАКСИМ * дом. тел (8332)60-28-05 после 21
|
||||
|
||||
* ВНИМАНИЕ ! ВСЕ АДРЕСА УКАЗАНЫ В ВОСЬМЕРИЧНОЙ СИСТЕМЕ ИСЧИСЛЕНИЯ
|
||||
|
||||
* МОНИТОР БК 11М *
|
||||
|
||||
* готовность монитора к работе - символ '@'
|
||||
* все числа выводятся в восьмеричеой системе счисления
|
||||
* собщение об ошибке - '?'
|
||||
|
||||
|
||||
1. РАБОТА С ПАМЯТЬЮ
|
||||
------------------------------T----------------------------------------¬
|
||||
¦ @XXXXXX\ открыть байт ¦ содержимое можно изменить, ¦
|
||||
¦ ¦ введя новое значение и подав одну ¦
|
||||
¦ @XXXXXX/ открыть слово ¦ из команд работы с памятью ¦
|
||||
¦ ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<> открыть пердыдущее ¦ ¦
|
||||
¦ слово, байт, регистр ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<> открыть следующее ¦ ¦
|
||||
¦ слово, байт, регистр ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ @RX/ открыть регистр, где¦ ¦
|
||||
¦ X = (0...7) или 'S' ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<-> закрыть слово, байт ¦ если было введено новое значение, ¦
|
||||
¦ или регистр ¦ то оно будет записано ¦
|
||||
¦ ¦ ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<> закрыть ячейку и ¦ по формуле: ¦
|
||||
¦ вычислить адрес ¦ АДРЕС=[адрес тек. ячейки] + [ее содер- ¦
|
||||
¦ ¦ -жимое (новое)] + 2 ¦
|
||||
¦ ¦ ¦
|
||||
¦ ¦ команда используется для открытия ¦
|
||||
¦ ¦ аргумента команд с адресацией "67" ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<> закрыть ячейку и ¦ по формуле: ¦
|
||||
¦ вычислить адрес ¦ АДРЕС=[адрес тек. ячейки] + [содер - ¦
|
||||
¦ ¦ жимое мл. байта]*2 + 2 ¦
|
||||
¦ ¦ ¦
|
||||
¦ ¦ команда используется для открытия ¦
|
||||
¦ ¦ ячейки, на которуя выполняется переход ¦
|
||||
¦ ¦ по комнде "BR" ¦
|
||||
¦ ¦ ¦
|
||||
¦ @<@> закрыть ячейку и ¦ по формуле: ¦
|
||||
¦ вычислить адрес ¦ АДРЕС=[адрес тек. ячейки] ¦
|
||||
¦ ¦ ¦
|
||||
L-----------------------------+-----------------------------------------
|
||||
|
||||
|
||||
2. СПЕЦИАЛЬНЫЕ КОМАНДЫ
|
||||
|
||||
@N;MC отобразить станицу памяти "N" по адресу "M"
|
||||
N=(0...7) - ОЗУ N=(10...13) - ПЗУ
|
||||
M=0 означает адреса с 40000 по 100000
|
||||
M=1 означает адреса со 100000 по 140000
|
||||
|
||||
@XB загрузить оп/систему с накопителя с номером X
|
||||
- если номер не задан, то поиск системы
|
||||
производится автоматически
|
||||
|
||||
@XXXXXXL загрузить с адреса двоичный файл с МЛ
|
||||
- если адрес не задан, то загузка производится
|
||||
по адресу, указанному в заголовке
|
||||
- в ответ на запрос ввести имя, при вводе
|
||||
пустого имени производится загрузка
|
||||
первого встретевшгося файла
|
||||
|
||||
@NNNNNN-MMMMMM;U вывести в файл информацию, где NNNNNN -
|
||||
начальный адрес, а MMMMMM - конечный адрес (включительно)
|
||||
|
||||
@NNNNNN+MMMMMM;U вывести в файл информацию, где NNNNNN -
|
||||
начальный адрес, а MMMMMM - длина в байтах
|
||||
|
||||
@XM включить(X=1)/выключить(X=0) двигатель МГ
|
||||
|
||||
@XXXXXXG передать управление на программу пользователя
|
||||
- если адрес не указан, то производится запуск по
|
||||
адресу загрузки (ячейка 40)
|
||||
|
||||
@P продолжить выполнение программы, прерванное прерыванием
|
||||
по вектору 4
|
||||
|
||||
@<ШАГ> пошаговое выполнение программы
|
||||
|
||||
@<-+> анулировать последнюю введенную цифру
|
||||
|
||||
@СУ/Е выход в непосредственный режим - используется для
|
||||
настройки драйвера экрана
|
||||
- в драйвер передается код ESC (код33), после чего монитор
|
||||
все вводимуе символы передает драйверу экрана
|
||||
- выход из режима - СУ/@
|
||||
- ESC-последовательности ниже
|
||||
пример:
|
||||
|
||||
СУ/Е 0 СУ/@ - установка цветного режима
|
||||
|
||||
СУ/Е ;21 СУ/@ - установка цвета фона 2 и цвета смволов 1
|
||||
|
||||
-----------------------T-----------------------------------------------¬
|
||||
¦ КОМАНДА ¦ НАЗНАЧЕНИЕ ¦
|
||||
+----------------------+-----------------------------------------------+
|
||||
¦ ESC 0 (033,060) ¦ - 32 символа в строке ¦
|
||||
¦ ESC 1 (033,061) ¦ - 64 символа в строке ¦
|
||||
¦ ESC 2 (033,062) ¦ - 80 символов в строке ¦
|
||||
¦ ESC 3 (033,063) ¦ - двойная ширина символов ¦
|
||||
¦ ESC 4 (033,064) ¦ - одинарна ширина символов ¦
|
||||
¦ ESC 5 (033,065) ¦ - двойная высота символов (верхняя половина) ¦
|
||||
¦ ESC 6 (033,066) ¦ - двойная высота символов (нижняя половина) ¦
|
||||
¦ ESC 7 (033,067) ¦ - отмена двойной высоты ¦
|
||||
¦ ESC 8 (033,071) ¦ - отбражение курсора ¦
|
||||
¦ ESC 9 (033,072) ¦ - запрет отображения курсора ¦
|
||||
¦ ESC : (033,073) ¦ - установка палитры * ¦
|
||||
¦ ESC ; (033,075) ¦ - установка цветов ** ¦
|
||||
¦ ESC = (033,076) ¦ - вводит режим дополнительной клавиатуры ¦
|
||||
¦ ESC > (033,100) ¦ - сбрасывает режим дополнительной клавиатуры ¦
|
||||
¦ ESC @ (033,101) ¦ - раздвижка символов от курсора вправо ¦
|
||||
¦ ESC A (033,102) ¦ - курсор вверх (в первой строке игнорируется) ¦
|
||||
¦ ESC B (033,103) ¦ - курсор вниз (в последней строке игнорируется¦
|
||||
¦ ESC C (033,104) ¦ - курсор вправо (зависят от режима авто- ¦
|
||||
¦ ESC D (033,105) ¦ - курсор влево -переноса) ¦
|
||||
¦ ESC E (033,110) ¦ - очистка экрана ¦
|
||||
¦ ESC H (033,111) ¦ - курсор 'домой' (левый вехний угол) ¦
|
||||
¦ ESC I (033,112) ¦ - "обратный ПС" (сдвиг экрана вниз) ¦
|
||||
¦ ESC J (033,113) ¦ - стирание вправо от курсора до конца экрана ¦
|
||||
¦ ESC K (033,114) ¦ - стирание вправо от курсора до конца строки ¦
|
||||
¦ ESC L (033,115) ¦ - раздвижка строк вниз ¦
|
||||
¦ ESC M (033,116) ¦ - сдвижка строк снизу, с уничтожением строки ¦
|
||||
¦ ESC N (033,117) ¦ - подчеркивание символов ¦
|
||||
¦ ESC O (033,120) ¦ - запрет подчеркивания символов ¦
|
||||
¦ ESC P (033,121) ¦ - сдвижка символов к курсору влево ¦
|
||||
¦ ESC Q (033,122) ¦ - курсор в начало следующей строки ¦
|
||||
¦ ESC R (033,123) ¦ - курсор в начало текущей строки ¦
|
||||
¦ ESC T (033,124) ¦ - инверсия символов ¦
|
||||
¦ ESC V (033,125) ¦ - запрет инверсии ¦
|
||||
¦ ESC Y (033,131) ¦ - прямая адресация курсора *** ¦
|
||||
¦ ESC Z (033,132) ¦ - индентификация **** ¦
|
||||
L----------------------+------------------------------------------------
|
||||
ПРИМЕЧАНИЯ:
|
||||
|
||||
* после команды должен следовать байт, младшие 4 бита которого
|
||||
задают код палитры (см )
|
||||
** после команды должны следовать 2 байта, задающие фон и цвет
|
||||
символов
|
||||
*** после команды должны следовать 2 байта, задающие код строки и
|
||||
код позиции в строке (пример: код 040 - верхняя сторка и крайне левая
|
||||
позиция)
|
||||
**** в ответ на команду в драйвер клавиатуры передается командная
|
||||
последовательность: ESC K
|
||||
|
||||
|
||||
** ТАБЛИЦА ПАЛИТР **
|
||||
|
||||
-------T-------------------T-------------------------------------------¬
|
||||
¦номер ¦ код палитры ¦ код точки ¦
|
||||
¦ +----T----T----T----+--------T----------T-----------T-----------+
|
||||
¦ NN% ¦ 11 ¦ 10 ¦ 09 ¦ 08 ¦ 00 ¦ 10 ¦ 01 ¦ 11 ¦
|
||||
+------+----+----+----+----+--------+----------+-----------+-----------+
|
||||
¦ 00 ¦ 0 ¦ 0 0 0 ¦ черный ¦ зеленый ¦ синий ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 01 ¦ 0 ¦ 0 0 1 ¦ .... ¦ сирениев.¦ желтый ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 02 ¦ 0 ¦ 0 1 0 ¦ .... ¦ синий ¦ голубой ¦ сиреневый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 03 ¦ 0 ¦ 0 1 1 ¦ .... ¦ голубой ¦ зеленый ¦ желтый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 04 ¦ 0 ¦ 1 0 0 ¦ .... ¦ голубой ¦ сиренев. ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 05 ¦ 0 ¦ 1 0 1 ¦ .... ¦ белый ¦ белый ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 06 ¦ 0 ¦ 1 1 0 ¦ .... ¦красно- ¦ темно- ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦-коричнев.¦ -красный ¦ ¦
|
||||
¦ 07 ¦ 0 ¦ 1 1 1 ¦ .... ¦светло- ¦ салатовый ¦ желтый ¦
|
||||
¦ ¦ ¦ ¦ ¦ -зеленый ¦ ¦ ¦
|
||||
¦ 08 ¦ 1 ¦ 0 0 0 ¦ .... ¦ фиолетов.¦ фиолетов. ¦ сиреневый ¦
|
||||
¦ ¦ ¦ ¦ ¦ синий ¦ ¦ ¦
|
||||
¦ 09 ¦ 1 ¦ 0 0 1 ¦ .... ¦ фиолетов.¦ светло- ¦ красно- ¦
|
||||
¦ ¦ ¦ ¦ ¦ синий ¦ -зеленый ¦-коричневый¦
|
||||
¦ 10 ¦ 1 ¦ 0 1 0 ¦ .... ¦ фиолетов.¦ салатовый ¦ темно- ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ -красный ¦
|
||||
¦ 11 ¦ 1 ¦ 0 1 1 ¦ .... ¦ желтый ¦ голубой ¦ красный ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 12 ¦ 1 ¦ 1 0 0 ¦ .... ¦ зеленый ¦ красный ¦ голубой ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 13 ¦ 1 ¦ 1 0 1 ¦ .... ¦ желтый ¦ голубой ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 14 ¦ 1 ¦ 1 1 0 ¦ .... ¦ зеленый ¦ желтый ¦ белый ¦
|
||||
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦
|
||||
¦ 15 ¦ 1 ¦ 1 1 1 ¦ .... ¦ зеленый ¦ голубой ¦ белый ¦
|
||||
L------+----+--------------+--------+----------+-----------+------------
|
||||
|
||||
========================================================================
|
||||
= BMS corp. Kirov 1993 =
|
||||
========================================================================
|
||||
+======================================================================+
|
||||
¦ ОПИСАНИЕ БК-11М ГЛАВА ТРЕТЬЯ: СИСТЕМНЫЕ ЗАПРОСЫ БК-11М = fl4 ¦
|
||||
+======================================================================+
|
||||
|
||||
* описания подготовил БАГАЕВ МАКСИМ * дом. тел (8332)60-28-05 после 21
|
||||
|
||||
* ВНИМАНИЕ ! ВСЕ АДРЕСА УКАЗАНЫ В ВОСЬМЕРИЧНОЙ СИСТЕМЕ ИСЧИСЛЕНИЯ
|
||||
|
||||
|
||||
|
||||
----------T--------T---------T--------T--------------------------------¬
|
||||
¦ N% EMT ¦ АДРЕС ¦ АДРЕС @ ¦ КОМАДА ¦ ФУНКЦИЯ ¦
|
||||
+---------+--------+---------+--------+--------------------------------+
|
||||
¦ ЕМТ 0 ¦ 150414 ¦ 140010 ¦ .BINIT ¦ инициализация БOC ¦
|
||||
¦ EMT 1 ¦ 147712 ¦ 140012 ¦ .BEXIT ¦ выход в клавиатурный монитор ¦
|
||||
¦ EMT 2 ¦ 147742 ¦ 140014 ¦ .BTRPS ¦ перехват вектора 4 ¦
|
||||
¦ EMT 3 ¦ 150070 ¦ 140016 ¦ .BTIM ¦ управление таймером ¦
|
||||
¦ EMT 4 ¦ 152202 ¦ 140020 ¦ .BEMT ¦ управление обработкой ЕМТ ¦
|
||||
¦ EMT 10 ¦ 150474 ¦ 140030 ¦ .BMEM ¦ чтение состояния прамяти ¦
|
||||
¦ EMT 11 ¦ 150504 ¦ 140032 ¦ .BTEST ¦ чтение статуса страницы ¦
|
||||
¦ EMT 12 ¦ 150514 ¦ 140034 ¦ .BPAGE ¦ подключение страницы ОЗУ/ПЗУ ¦
|
||||
¦ EMT 13 ¦ 150530 ¦ 140036 ¦ .BWORK ¦ назначение/чт.рабочей страницы ¦
|
||||
¦ EMT 14 ¦ 150540 ¦ 140040 ¦ .BGETW ¦ чтение слова из раб. страницы ¦
|
||||
¦ EMT 15 ¦ 150564 ¦ 140042 ¦ .BGETB ¦ чтение байта из раб. страницы ¦
|
||||
¦ EMT 16 ¦ 150612 ¦ 140044 ¦ .BPUTW ¦ запись слова в рабочую страницу¦
|
||||
¦ EMT 17 ¦ 150654 ¦ 140046 ¦ .BPUTB ¦ запись байта в рабочую страницу¦
|
||||
¦ EMT 20 ¦ 151140 ¦ 140050 ¦ .BMOVW ¦ пересылка массива слов ¦
|
||||
¦ EMT 21 ¦ 151156 ¦ 140052 ¦ .BMOVB ¦ пересылка массива байтов ¦
|
||||
¦ EMT 22 ¦ 151006 ¦ 140054 ¦ .BJSR ¦ вызов подпрограммы из раб. стр.¦
|
||||
¦ EMT 23 ¦ 151114 ¦ 140056 ¦ .BJMP ¦ переход в рабочую стр. ( JMP ) ¦
|
||||
¦ EMT 30 ¦ 146714 ¦ 140070 ¦ .BKINI ¦ инициализация драйв. клавиатуры¦
|
||||
¦ EMT 31 ¦ 146752 ¦ 140072 ¦ .BKSET ¦ установка реж. драйв. клавиат. ¦
|
||||
¦ EMT 32 ¦ 146764 ¦ 140074 ¦ .BKGET ¦ чтение режима драйв. клавиатуры¦
|
||||
¦ EMT 33 ¦ 147550 ¦ 140076 ¦ .BTTIN ¦ ввод символа с ожиданием ¦
|
||||
¦ EMT 34 ¦ 147406 ¦ 140100 ¦ .BINKEY¦ ввод символа без ожидания ¦
|
||||
¦ EMT 35 ¦ 151336 ¦ 140102 ¦ .BGLIN ¦ ввод строки с редактираванием ¦
|
||||
¦ EMT 36 ¦ 151266 ¦ 140104 ¦ .BEDIT ¦ редактирование сущ. строки ¦
|
||||
¦ EMT 37 ¦ 147636 ¦ 140106 ¦ .BKRES ¦ сброс буфера клавиатуры ¦
|
||||
¦ EMT 40 ¦ 147672 ¦ 140110 ¦ .BSFUN ¦ установка функциональных клавиш¦
|
||||
¦ EMT 41 ¦ 147702 ¦ 140112 ¦ .BGFUN ¦ чтение функциональных клавиш ¦
|
||||
¦ EMT 50 ¦ 143456 ¦ 140130 ¦ .BTINI ¦ инициализация драйвера экрана ¦
|
||||
¦ EMT 51 ¦ 143446 ¦ 140132 ¦ .BTSET ¦ уст. режима драйвера экрана ¦
|
||||
¦ EMT 52 ¦ 143434 ¦ 140134 ¦ .BTGET ¦ чтение режима драйвера экрана ¦
|
||||
¦ EMT 53 ¦ 143274 ¦ 140136 ¦ .BSCOL ¦ установка цветов ¦
|
||||
¦ EMT 54 ¦ 143414 ¦ 140140 ¦ .BGCOL ¦ чтение цветов ¦
|
||||
¦ EMT 55 ¦ 150000 ¦ 140142 ¦ .BPAL ¦ установка/чтение палитры ¦
|
||||
¦ EMT 56 ¦ 143466 ¦ 140144 ¦ .BBUF ¦ переключение буферов экрана ¦
|
||||
¦ EMT 57 ¦ 143476 ¦ 140146 ¦ .BSPOS ¦ установка координат А/Ц курсора¦
|
||||
¦ EMT 60 ¦ 143560 ¦ 140150 ¦ .BGPOS ¦ чтение координат А/Ц курсора ¦
|
||||
¦ EMT 61 ¦ 143572 ¦ 140152 ¦ .BSCRL ¦ сдвиг экрана ¦
|
||||
¦ EMT 62 ¦ 143622 ¦ 140154 ¦ .BCLS ¦ очистка экрана ¦
|
||||
¦ EMT 63 ¦ 143070 ¦ 140056 ¦ .BTOUT ¦ вывод символа ¦
|
||||
¦ EMT 64 ¦ 143142 ¦ 140160 ¦ .BPRIN ¦ вывод строки в формате RT-11 ¦
|
||||
¦ EMT 65 ¦ 143130 ¦ 140162 ¦ .BSTR ¦ вывод строки символов ¦
|
||||
¦ EMT 66 ¦ 152470 ¦ 140164 ¦ .BSGRF ¦ установка тек. граф. координат ¦
|
||||
¦ EMT 67 ¦ 152506 ¦ 140166 ¦ .BGGRF ¦ чтение текущих граф. координат ¦
|
||||
¦ EMT 70 ¦ 152524 ¦ 140170 ¦ .BSCRG ¦ установка гафического цвета ¦
|
||||
¦ EMT 71 ¦ 152546 ¦ 140173 ¦ .BGCGR ¦ чтение графического цвета ¦
|
||||
¦ EMT 72 ¦ 152564 ¦ 140174 ¦ .BGMOD ¦ установка/чтение реж. рисования¦
|
||||
¦ EMT 73 ¦ 152230 ¦ 140176 ¦ .BSPNT ¦ вывод графической точки ¦
|
||||
¦ EMT 74 ¦ 152372 ¦ 140200 ¦ .BGPNT ¦ чтение цвета графической точки ¦
|
||||
¦ EMT 75 ¦ 152460 ¦ 140202 ¦ .BVECT ¦ вывод вектора ¦
|
||||
¦ EMT 76 ¦ 153424 ¦ 140204 ¦ .BRECT ¦ вывод закрашеного прямоугол. ¦
|
||||
¦ EMT 77 ¦ 152722 ¦ 140206 ¦ .BCIRC ¦ вывод дуги или окружности ¦
|
||||
¦ EMT 100 ¦ 154202 ¦ 140210 ¦ .BFILL ¦ закраска гранично-опред. обл. ¦
|
||||
¦ EMT 101 ¦ 143636 ¦ 140212 ¦ .BSOUN ¦ выдача звука ¦
|
||||
¦ EMT 102 ¦ 153000 ¦ 140214 ¦ .BSWIN ¦ установка графического окна ¦
|
||||
¦ EMT 103 ¦ 153134 ¦ 140216 ¦ .BGWIN ¦ чтение графического окна ¦
|
||||
¦ EMT 105 ¦ 152614 ¦ 140222 ¦ .BSTYP ¦ установка типа вектора ¦
|
||||
¦ EMT 106 ¦ 152660 ¦ 140224 ¦ .BGTYP ¦ чтение типа вектора ¦
|
||||
¦ EMT 107 ¦ 153166 ¦ 140226 ¦ .BGOSET¦ уст./чт. ориент. граф. символов¦
|
||||
¦ EMT 110 ¦ 153226 ¦ 140230 ¦ .BGOUT ¦ графический вывод символа ¦
|
||||
¦ EMT 114 ¦ 154550 ¦ 140240 ¦ .BMOT ¦ управление двигателем магн. ¦
|
||||
¦ EMT 115 ¦ 154614 ¦ 140242 ¦ .BMB10 ¦ вызов формата БК-0010(.01) ¦
|
||||
¦ EMT 124 ¦ 156560 ¦ 140260 ¦ .BPINI ¦ инициализация драйвера принтера¦
|
||||
¦ EMT 125 ¦ 156612 ¦ 140262 ¦ .BPSET ¦ установка режима печати ¦
|
||||
¦ EMT 126 ¦ 156664 ¦ 140264 ¦ .BPGET ¦ чтение режима печати ¦
|
||||
¦ EMT 127 ¦ 156736 ¦ 140266 ¦ .BPOUT ¦ вывод символа на печать ¦
|
||||
¦ EMT 130 ¦ 156676 ¦ 140270 ¦ .BPRDY ¦ определение готовности принтера¦
|
||||
¦ EMT 131 ¦ 156724 ¦ 140272 ¦ .BPPOS ¦ определиние позиции печ. гол. ¦
|
||||
L---------+--------+---------+--------+---------------------------------
|
||||
|
||||
|
||||
========================================================================
|
||||
= BMS corp. продолжение следует Kirov 1993 =
|
||||
========================================================================
|
BIN
KeyboardMapping.png
Normal file
BIN
KeyboardMapping.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
1864
ROM sources/BASIC 1985/BK.MAC
Normal file
1864
ROM sources/BASIC 1985/BK.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1057
ROM sources/BASIC 1985/COMP.MAC
Normal file
1057
ROM sources/BASIC 1985/COMP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
2801
ROM sources/BASIC 1985/FLOAT.MAC
Normal file
2801
ROM sources/BASIC 1985/FLOAT.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1752
ROM sources/BASIC 1985/GRAF.MAC
Normal file
1752
ROM sources/BASIC 1985/GRAF.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1748
ROM sources/BASIC 1985/JMP.MAC
Normal file
1748
ROM sources/BASIC 1985/JMP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1416
ROM sources/BASIC 1985/MONIT.MAC
Normal file
1416
ROM sources/BASIC 1985/MONIT.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1276
ROM sources/BASIC 1985/TRAP.MAC
Normal file
1276
ROM sources/BASIC 1985/TRAP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
31
ROM sources/BASIC 1987/BAS11.COM
Normal file
31
ROM sources/BASIC 1987/BAS11.COM
Normal file
@ -0,0 +1,31 @@
|
||||
R MACRO
|
||||
MONIT=GEN,MONIT
|
||||
IO=GEN,IO
|
||||
TRAP=GEN,TRAP
|
||||
COMP=GEN,COMP
|
||||
JMIN=GEN,JMIN
|
||||
JMP=GEN,JMP
|
||||
GRAF=GEN,GRAF
|
||||
GRAF11=GEN,GRAF11
|
||||
FLOATS=GEN,FLOATS
|
||||
^C
|
||||
R LINK
|
||||
,,BAS1[4]/B:100000=MONIT,IO,TRAP
|
||||
,,BAS2[9]/B:100000/T:100000=COMP,JMIN,JMP//
|
||||
GRAF,GRAF11,FLOATS//
|
||||
BAS2[97],BAS2[17]/W/T:100000/B:100000=COMP,JMIN,JMP//
|
||||
GRAF,GRAF11,FLOATS,BAS1.STB//
|
||||
^C
|
||||
DEL BAS1.STB/NOQ
|
||||
RU KPTSAB
|
||||
BAS2=BAS2
|
||||
^C
|
||||
DEL BAS2.SAV/NOQ
|
||||
R LINK
|
||||
BAS1[80],BAS1[17]/W/B:100000=MONIT,IO,TRAP,BAS2.STB
|
||||
^C
|
||||
DEL BAS2.STB/NOQ
|
||||
RU KPTSAB
|
||||
BAS1=BAS1
|
||||
^C
|
||||
DEL BAS1.SAV/NOQ
|
5993
ROM sources/BASIC 1987/BASMSX.TXT
Normal file
5993
ROM sources/BASIC 1987/BASMSX.TXT
Normal file
File diff suppressed because it is too large
Load Diff
1858
ROM sources/BASIC 1987/FLOATS.MAC
Normal file
1858
ROM sources/BASIC 1987/FLOATS.MAC
Normal file
File diff suppressed because it is too large
Load Diff
75
ROM sources/BASIC 1987/GEN.MAC
Normal file
75
ROM sources/BASIC 1987/GEN.MAC
Normal file
@ -0,0 +1,75 @@
|
||||
.ENABLE LC
|
||||
;
|
||||
; ###################
|
||||
; # #
|
||||
; # BASIC - VVU #
|
||||
; # #
|
||||
; ###################
|
||||
;
|
||||
; ispolnitelx: wckp wgu
|
||||
; wilxn`s,1987
|
||||
;
|
||||
; ======================
|
||||
; ****blok nastroiki****
|
||||
; ======================
|
||||
;
|
||||
BK0011 =1
|
||||
BK0010 =2
|
||||
DVK2B =3 ;DVK SU BK0010 KLASE
|
||||
DVK2 =4
|
||||
VUMS =5 ;SILELIS
|
||||
DVK3 =6
|
||||
UK =7
|
||||
MDS =10 ;MDS RAFOS
|
||||
|
||||
;------------------------
|
||||
MASINA =BK0011 ; .IF EQ,MASINA-XX
|
||||
;------------------------
|
||||
|
||||
.IF GT,MASINA-DVK2B
|
||||
UKM=MASINA
|
||||
.IF EQ,MASINA-UK
|
||||
KLAS=UK
|
||||
MSX=MASINA
|
||||
.IFF
|
||||
KLAS=BK0010
|
||||
MSX=0
|
||||
.ENDC
|
||||
.IFF
|
||||
UKM=0
|
||||
KLAS=BK0010
|
||||
MSX=0
|
||||
.ENDC
|
||||
;
|
||||
.IF GT,MASINA-BK0010
|
||||
.IF EQ,MASINA-DISK
|
||||
RAM=160000
|
||||
.IFF
|
||||
.IF EQ,MASINA-NET
|
||||
RAM=150000
|
||||
.IFF
|
||||
RAM=160000
|
||||
.ENDC
|
||||
.ENDC
|
||||
ROM=0
|
||||
.IFF
|
||||
.IF EQ,MASINA-BK0011
|
||||
RAM=1
|
||||
ROM=0
|
||||
.IFF
|
||||
MVIDEO=40000
|
||||
RAM=MVIDEO
|
||||
ROM=120000
|
||||
.ENDC
|
||||
.ENDC
|
||||
;------------------------
|
||||
MEMTYP =RAM ; .IF EQ,MEMTYP-RAM (ROM)
|
||||
VM =1 ; .IF EQ,VM-1 (2)
|
||||
SNG =0 ; .IF DF,SNG
|
||||
; HOOKS =0 ; .IF DF,HOOKS
|
||||
DISK =0 ; .IF EQ,MASINA-DISK
|
||||
NET =0 ; .IF EQ,MASINA-NET
|
||||
CASET =MASINA ; .IF EQ,MASINA-CASET
|
||||
MESSAG =0 ; .IF EQ,MESSAG
|
||||
STACK =2000 ; .IF EQ,STACK-1000 (2000)
|
||||
;------------------------
|
1890
ROM sources/BASIC 1987/GRAF.MAC
Normal file
1890
ROM sources/BASIC 1987/GRAF.MAC
Normal file
File diff suppressed because it is too large
Load Diff
2196
ROM sources/BASIC 1987/IO.MAC
Normal file
2196
ROM sources/BASIC 1987/IO.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1523
ROM sources/BASIC 1987/JMIN.MAC
Normal file
1523
ROM sources/BASIC 1987/JMIN.MAC
Normal file
File diff suppressed because it is too large
Load Diff
2249
ROM sources/BASIC 1987/JMP.MAC
Normal file
2249
ROM sources/BASIC 1987/JMP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
2317
ROM sources/BASIC 1987/MONIT.MAC
Normal file
2317
ROM sources/BASIC 1987/MONIT.MAC
Normal file
File diff suppressed because it is too large
Load Diff
1750
ROM sources/BASIC 1987/TRAP.MAC
Normal file
1750
ROM sources/BASIC 1987/TRAP.MAC
Normal file
File diff suppressed because it is too large
Load Diff
4923
ROM sources/BK-0010 driver module/BK10.LST
Normal file
4923
ROM sources/BK-0010 driver module/BK10.LST
Normal file
File diff suppressed because it is too large
Load Diff
736
ROM sources/BK-0010 driver module/BKNET.LST
Normal file
736
ROM sources/BK-0010 driver module/BKNET.LST
Normal file
@ -0,0 +1,736 @@
|
||||
|
||||
|
||||
|
||||
|
||||
Утверждаю
|
||||
|
||||
главный инженер ОКБ
|
||||
_________ Ю.В.Майоров
|
||||
"___" ________ 1986г.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Блок КЛС
|
||||
|
||||
техническое описание
|
||||
|
||||
13
|
||||
|
||||
листов
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
начальник отделения 2
|
||||
________ С.М.Косенков
|
||||
"___" ________ 1986г.
|
||||
|
||||
Начальник сектора
|
||||
_______ З.А.Счепицкий
|
||||
"___" ________ 1986г.
|
||||
|
||||
Инженер
|
||||
_________ В.А.Никулин
|
||||
"___" ________ 1986г.
|
||||
|
||||
Нормоконтроль
|
||||
_____________ Е.С.Кац
|
||||
"___" _________ 1986г.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Первичное применение литера о
|
||||
2.165.002
|
||||
|
||||
|
||||
1986
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 2 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
1. Введение.
|
||||
|
||||
|
||||
Настоящее техническое описание (ТО) предназначено для озна-
|
||||
комления с устройством и работой блока контроллера локальной
|
||||
сети (КЛС).
|
||||
|
||||
|
||||
При изучении настоящего то следует дополнительно пользо-
|
||||
ваться следующими документами:
|
||||
|
||||
- 4.883.020 ЭЗ плата КЛС. Схема электрическая принци-
|
||||
пиальная;
|
||||
|
||||
- 4.883.020 СБ плата КЛС. Сборочный чертеж.
|
||||
|
||||
|
||||
|
||||
2. Назначение.
|
||||
|
||||
|
||||
Блок КЛС предназначен для обеспечения обмена информацией
|
||||
между персональной эвм "электроника БК0011" (ПЭВМ) в кольцевой
|
||||
локальной вычислительной сети.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 3 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
3. Основные технические характеристики.
|
||||
|
||||
|
||||
Блок КЛС обеспечивает по последовательному каналу:
|
||||
|
||||
- скорость обмена 57600 бод;
|
||||
|
||||
- прием и выдачу посылки в формате 8 информационных бит;
|
||||
|
||||
- формирование и контроль бита паритета.
|
||||
|
||||
|
||||
Тип линии связи - токовая петля.
|
||||
|
||||
|
||||
Блок КЛС обеспечивает:
|
||||
|
||||
- считывание сетевого адреса, установленного с помощью пе-
|
||||
реключателя;
|
||||
|
||||
- программно-управляемое отключение станции из сети;
|
||||
|
||||
- поддержание целостности кольца при механическом или элек-
|
||||
трическом отключении сетевой станции с помощью электроме-
|
||||
ханического шунта, обеспечивающего шунтирование нерабо-
|
||||
тающей станции.
|
||||
|
||||
|
||||
Амплитуда тока в линии связи - 60 ма.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 4 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
4. Устройство и работа блока КЛС.
|
||||
|
||||
|
||||
Блок КЛС выполнен в виде функционально законченного модуля,
|
||||
подключаемого к раз'ему межмодульного параллельного интерфейса
|
||||
(МПИ). Все элементы блока смонтированы на одной печатной пла-
|
||||
те.
|
||||
|
||||
Структурная схема блока КЛС приведена на рис.1.
|
||||
|
||||
|
||||
Микросхема К1801ВП1-065 предназначена для преобразования
|
||||
параллельной информации в последовательную и наоборот, обеспе-
|
||||
чивает по последовательным входу и выходу требования интерфей-
|
||||
са для радиального подключения устройств с последовательной
|
||||
передачей информации (ИРПС).
|
||||
|
||||
|
||||
Схема формирования сигнала "выбор устройства" (ВУ) предназ-
|
||||
начена для формирования сигнала низкого уровня при выдачи из
|
||||
ПЭВМ адреса в диапазоне 160000 - 177776. Выполнена на элемен-
|
||||
тах D11.4, D11.5, D11.6, D4.3 (см. Схему электрическую принци-
|
||||
пиальную).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 5 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
структурная схема блока КЛС.
|
||||
|
||||
-----------
|
||||
! !
|
||||
! ! -------- --------
|
||||
/--------\ ! ! ! ! ! 10 !----->
|
||||
/ 13 \! 1 !------>! 6 !-----> --------
|
||||
\ /! !<------! !<----- -------- 11
|
||||
\ ------/ ! ! ! ! ! 9 !<-----
|
||||
! ! ! ! -------- --------
|
||||
! ! ! ! !
|
||||
! ! ---- ----------- !
|
||||
! -\ !2 !--! ! ! ! ! !
|
||||
! -/ ! ! ! ! ! ! -----------
|
||||
! ! ---- ! ! ! ! ! ! 12
|
||||
! ! ---- ! ! ! !-------! 8 !------------------->
|
||||
! ! !3 !----! ! ! ! !
|
||||
! ! ! ! ! ! -----------
|
||||
! ! ---- ! ! ----------- !
|
||||
! ! ---- ! ! ! ! !
|
||||
! ! !4 !------+-!--! 7 !---
|
||||
! ! ! ! ! ! !
|
||||
! ! ---- ! -----------
|
||||
! ! ---- !
|
||||
! ---!5 !<-------!
|
||||
!-----! !
|
||||
----
|
||||
1.бис асинхронного приемо-передатчика К1801ВП1-065.
|
||||
|
||||
2.схема формирования сигнала "выбор устройства".
|
||||
|
||||
3.схема задания режима работы блока.
|
||||
|
||||
4.задающий генератор.
|
||||
|
||||
5.схема формирования сетевого адреса.
|
||||
|
||||
6.электронный шунт.
|
||||
|
||||
7.таймер.
|
||||
|
||||
8.схема управления коммутацией.
|
||||
|
||||
9.входной узел приемника.
|
||||
|
||||
10.выходной узел передатчика.
|
||||
|
||||
11.информационные линии связи.
|
||||
|
||||
12.линия управления электро-механическим шунтом.
|
||||
|
||||
13.МПИ.
|
||||
Рис.1.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 6 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
Схема задания режима работы блока предназначена для задания
|
||||
следующего режима работы микросхемы К1801ВП1-065:
|
||||
а) адреса регистров и векторов прерываний, задаваемые с по-
|
||||
мощью перемычек 31-32, 33-34, соответствуют таблице 2.
|
||||
Б) формат посылок по последовательному каналу, задаваемый
|
||||
перемычками 35-36, 37-38, 39-40, соответствует рис.2. причем
|
||||
перемычка 37-38 задает количество информационных бит в посыл-
|
||||
ке, равное 8, а перемычки 35-36, 39-40 определяют наличие и
|
||||
контроль бита нечетности в посылке.
|
||||
В) скорость обмена по последовательному каналу, задаваемая
|
||||
перемычками 41-42, 43-44, 45-46, равна 57600 бод.
|
||||
|
||||
Формат посылки
|
||||
- ----------------------------------------- -
|
||||
! Стоп ! ! 1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! ! Стоп !
|
||||
-------- ! --------------------------------------------
|
||||
! !
|
||||
Старт бит паритета
|
||||
|
||||
рис.2.
|
||||
|
||||
|
||||
Задающий генератор предназначен для формирования высокоста-
|
||||
бильного синхросигнала частотой 4608 кгц. Стабильность частоты
|
||||
синхросигнала определяет стабильность скорости обмена по пос-
|
||||
ледовательному каналу. Выполнен на элементах D11.1, D11.2,
|
||||
D11.3.
|
||||
|
||||
|
||||
Схема формирования сетевого адреса предназначена для зада-
|
||||
ния сетевого адреса в диапазоне 0-255, в разрядах 8-11, 13, 14
|
||||
по адресам 176560-176566. Выполнен на наборе переключателей
|
||||
SA1, наборе резисторов е2.1 и микросхемах D2, D3.1, D3.2,
|
||||
D5.3.
|
||||
|
||||
|
||||
Электронный шунт предназначен для сохранения целостности
|
||||
кольцевой ЛВС посредством электронного замыкания входного узла
|
||||
приемника с выходным узлом передатчика при программном отклю-
|
||||
чении станции от ЛВС. Выполнен на элементах D7.4, D7.3.
|
||||
|
||||
|
||||
Таймер предназначен для подсчета времени прошедшего после
|
||||
последнего обращения ПЭВМ к регистрам приемника блока КЛС в
|
||||
случае, когда электронный шунт разомкнут и отсутствует сигнал
|
||||
"ОСТ". Когда это время превышает 2,5с в схему управления ком-
|
||||
мутацией выдается соответствующий сигнал. Выполнен на элемен-
|
||||
тах D8, D3.5, D4.1, D5.1, D5.2.
|
||||
|
||||
|
||||
|
||||
- 7 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
Схема управления коммутацией предназначена для:
|
||||
а) формирования сигнала управления электронным шунтом в
|
||||
случае обращения по адресу 176560 по записи. Запись во 2-й
|
||||
разряд лог. 1 Замыкает электронный шунт. Запись лог.0 размы-
|
||||
кает электронный шунт и подключает последовательный выход мик-
|
||||
росхемы К1801ВП1-065 к выходному узлу передатчика. Б) формиро-
|
||||
вания сигнала управления электромеханическим шунтом при появ-
|
||||
лении соответствующего сигнала от таймера. Выполнена на эле-
|
||||
ментах D5.4, D6, D3.3, D3.4 D4.2 и транзисторе VT1.
|
||||
|
||||
|
||||
Входной узел приемника предназначен для преобразования им-
|
||||
пульсов токов в линии связи в потенциальный сигнал, подаваемый
|
||||
на последовательный вход микросхемы К1801ВП1-065 и электронный
|
||||
шунт, а также для осуществления гальванической развязки блока
|
||||
КЛС от линии связи. Выполнен на элементах D7.1, D7.2, тран-
|
||||
сформаторе TV1.
|
||||
|
||||
|
||||
Выходной узел передатчика предназначен для преобразования
|
||||
потенциального последовательного сигнала в импульсы тока дли-
|
||||
тельностью = 650+20 нс в линии связи, а также для организации
|
||||
гальванической развязки блока КЛС от линии связи. Выполнен на
|
||||
элементах D9, D10, трансформаторе TV2.
|
||||
|
||||
|
||||
Связь блока КЛС с ПЭВМ осуществляется через раз'ем межмо-
|
||||
дульного параллельного интерфейса (МПИ) ХТ1, номера контактов
|
||||
которого и соответствующие им обозначения сигналов приведены в
|
||||
таблице 1.
|
||||
Интерфейс связи соответствует ОСТ 11.305.903-80.
|
||||
|
||||
|
||||
Блок КЛС содержит 4 системных регистра и 2 источника адре-
|
||||
сов векторов прерываний
|
||||
адреса регистров и векторов прерываний приведены в таблице
|
||||
2.
|
||||
|
||||
|
||||
Регистр состояния приемника (РСПР) имеет следующий формат:
|
||||
|
||||
|
||||
15 12 7 6 2 0
|
||||
------------------------------------------------------------
|
||||
! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! ! ! ! Х ! ! !
|
||||
------------------------------------------------------------
|
||||
0, 1, 3-5, разряды - не используются, читаются как лог."0".
|
||||
|
||||
2Р - разряд управления электронным шунтом. Доступен по записи.
|
||||
- 8 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
Читается всегда как лог."0". Запись лог."0" в этот разряд оп-
|
||||
ределяет режим выдачи посылок от ПЭВМ.
|
||||
|
||||
Запись лог."1" в этот разряд определяет режим ретрансляции
|
||||
принимаемых из линии посылок.
|
||||
|
||||
6Р - разрешение работы приемника по прерыванию. Если 6р ус-
|
||||
тановлен в "1", то прерывание разрешено, если в "0", - запре-
|
||||
щено. Доступен по записи и чтению. Сбрасывается в "0" по сиг-
|
||||
налу "СБРОС".
|
||||
|
||||
7 - Флаг состояния приемника. Устанавливается в "1" по
|
||||
окончании прихода посылки из линии в буферный регистр приемни-
|
||||
ка.
|
||||
Сбрасывается в "0" по окончании чтения посылки из буферного
|
||||
регистра приемника или по сигналу "СБРОС". Доступен по чтению.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 9 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
таблица 1
|
||||
-------------------------------------------------
|
||||
! Номер контакта ХТ1 ! Наименование сигнала !
|
||||
!-----------------------------------------------!
|
||||
! А 31 ! АД 00 н !
|
||||
! В 31 ! АД 01 н !
|
||||
! В 29 ! АД 02 н !
|
||||
! В 30 ! АД 03 н !
|
||||
! В 28 ! АД 04 н !
|
||||
! А 28 ! АД 05 н !
|
||||
! В 27 ! АД 06 н !
|
||||
! В 32 ! АД 07 н !
|
||||
! В 26 ! АД 08 н !
|
||||
! А 27 ! АД 09 н !
|
||||
! В 25 ! АД 10 н !
|
||||
! А 26 ! АД 11 н !
|
||||
! В 24 ! АД 12 н !
|
||||
! А 25 ! АД 13 н !
|
||||
! В 23 ! АД 14 н !
|
||||
! В 7 ! АД 15 н !
|
||||
! В 22 ! СИА Н !
|
||||
! В 20 ! СИП Н !
|
||||
! А 24 ! ППР 2 Н !
|
||||
! В 5 ! ТПР Н !
|
||||
! А 5 ! ПРТ Н !
|
||||
! В 19 ! СБРОС Н !
|
||||
! В 21 ! ВЫВОД Н !
|
||||
! А 23 ! ВВОД Н !
|
||||
! А 1 ! ОСТ Н !
|
||||
! А 29 ! Е !
|
||||
! А 4, А 12, В 12 ! +5В !
|
||||
! А 2, А 3, В 2, В 3 ! ОБЩИЙ !
|
||||
-------------RFEJSA (mpi) ht1, NOMERA KONTAKTOW
|
||||
KOTOROGO I SOOTWETSTWU@]IE IM OBOZNA^ENIQ SIGNALOW PRIWEDENY W
|
||||
TABLICE 1.
|
||||
iNTERFEJS SWQZI SOOTWETSTWUET ost 11.305.903-80.
|
||||
|
||||
|
||||
bLOK kls SODERVIT 4 SISTEMNYH REGISTRA I 2 ISTO^NIKA ADRE-
|
||||
SOW WEKTOROW PRERYWANIJ
|
||||
ADRESA REGISTROW I WEKTOROW PRERYWANIJ PRIWEDENY W TABLICE
|
||||
2.
|
||||
|
||||
|
||||
Регистр состояния приемника (РСПР) имеет следующий формат:
|
||||
|
||||
|
||||
15 12 7 6 2 0
|
||||
------------------------------------------------------------
|
||||
! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! Х ! ! ! ! Х ! ! !
|
||||
------------------------------------------------------------
|
||||
0, 1, 3-5, разряды - не используются, читаются как лог."0".
|
||||
|
||||
2Р - разряд управления электронным шунтом. Доступен по записи.
|
||||
- 8 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
Читается всегда как лог."0". Запись лог."0" в этот разряд оп-
|
||||
ределяет режим выдачи посылок от ПЭВМ.
|
||||
|
||||
Запись лог."1" в этот разряд определяет режим ретрансляции
|
||||
принимаемых из линии посылок.
|
||||
Устанавливается в "1", если в
|
||||
сдвиговый регистр приемника поступило более одной посылки без
|
||||
чтения из буферного регистра приемника первой поступившей по-
|
||||
сылки.
|
||||
При этом независимо от числа поступивших в канал приемника
|
||||
посылок в буферном регистре сохраняется первая посылка. Нахо-
|
||||
дится в "0", если поступившая в буферный регистр посылка чи-
|
||||
тается до окончания поступления в сдвиговый регистр последнего
|
||||
информационного бита следующей посылки. Сбрасывается в "0" по
|
||||
окончании чтения буферного регистра приемника или по сигналу
|
||||
"СБРОС Н". Доступен по чтению.
|
||||
|
||||
15Р - ошибка в принятой посылке. Устанавливается в "1", ес-
|
||||
ли есть ошибка паритета в принятой посылке. В противном случае
|
||||
находится в "0". Признак ошибки сбрасывается в "0" с момента
|
||||
чтения содержимого буферного регистра приемника или по сигналу
|
||||
"СБРОС". Доступен по чтению.
|
||||
|
||||
|
||||
Буферный регистр приемника (БРПР) имеет следующий формат:
|
||||
|
||||
|
||||
15 14 13 12 11 8 7 0
|
||||
-----------------------------------------------------
|
||||
! ! Х х ! ! Х х х х ! Х х х х х х х х !
|
||||
-----------------------------------------------------
|
||||
|
||||
0-7Р по чтению - содержит посылку принятую с линии. В 0р
|
||||
находится первый бит посылки, в 7р - восьмой.
|
||||
|
||||
8-11, 13, 14р - содержат системный адрес (см. РСПР).
|
||||
|
||||
12, 15р - не используются, читаются как лог."0".
|
||||
|
||||
|
||||
Регистр состояния передатчика (РСПЕР).
|
||||
|
||||
|
||||
15 14 13 11 8 7 6 2 0
|
||||
--------------------------------------------------------
|
||||
! ! Х х ! ! Х х х х ! Х ! Х ! ! Х ! ! Х !
|
||||
--------------------------------------------------------
|
||||
|
||||
0Р - разрыв линии. Если 0 разряд установлен в "1", то на
|
||||
выходе контроллера формируется состояние "СТАРТ". Доступен по
|
||||
записи и чтению. Сбрасывается в "0" по сигналу "СБРОС".
|
||||
|
||||
2Р - проверка работы. Если 2р установлен в "1", то выдавае-
|
||||
- 11 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
мая в линию посылка поступает также и на канал приемника.
|
||||
Сбрасывается в "0" по сигналу "СБРОС". Доступен по записи и
|
||||
чтению.
|
||||
|
||||
6Р - разрешение работы передатчика по прерыванию. Если 6р
|
||||
установлен в "1", то прерывание разрешено, если в "0" - запре-
|
||||
щено. Доступен по записи и чтению. Сбрасывается в "0" по сиг-
|
||||
налу "СБРОС".
|
||||
|
||||
7Р - флаг состояния передатчика. Устанавливается в "1" в
|
||||
момент выдачи посылки на линию или по сигналу "ОСТ". Сбрасы-
|
||||
вается в "0" по записи информации в буферный регистр передат-
|
||||
чика. 7Р в "1" свидетельствует о том, что буферный регистр пе-
|
||||
редатчика пустой. Если запись информации в буферный регистр
|
||||
передатчика произошла во время выдачи посылки, то следующая
|
||||
посылка начинается сразу же по окончанию предыдущей. 7Р досту-
|
||||
пен по чтению.
|
||||
|
||||
8-11, 13, 14р - содержат системный адрес (см. РСПР).
|
||||
|
||||
12, 15 - не используются, читаются как лог."0".
|
||||
|
||||
|
||||
Буферный регистр передатчика (БРПСР).
|
||||
|
||||
|
||||
15 8 7 0
|
||||
------------------------------------------------
|
||||
! ! Х х х х х х х х !
|
||||
------------------------------------------------
|
||||
|
||||
0-7Р - разряды для передачи посылки в линию. В 0р записы-
|
||||
вается первый бит посылки, в 7р - восьмой. Посылка поступает в
|
||||
линию по окончании записи данных в БРПСР. При соблюдении усло-
|
||||
вия формирования бита паритета он автоматически следует за
|
||||
последним битом посылки.
|
||||
|
||||
При чтении по адресу бпрср в 0-7р читается адрес вектора
|
||||
прерывания, в 8-11, 13, 14р - читается системный адрес (см.
|
||||
РСПР), а 12, 15р читается как лог."0".
|
||||
|
||||
|
||||
Запрос на прерывание от приемника возникает, если 6 и 7
|
||||
разряды рспр установлены в "1". При обработке запроса на пре-
|
||||
рывание читается адрес вектора прерывания приемника равный
|
||||
360.
|
||||
|
||||
|
||||
Запрос на прерывание от передатчика возникает если 6 и 7
|
||||
разряды рспср установлены в "1". При обработке запроса на пре-
|
||||
рывание читается адрес вектора прерывания передатчика равный
|
||||
364.
|
||||
|
||||
Приоритет запроса от приемника выше приоритета запроса от
|
||||
- 12 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
передатчика.
|
||||
|
||||
|
||||
Все разряды системных регистров кроме разрядов 8-11, 13,
|
||||
14, содержащих системный адрес и 2р рспр находятся в микросхе-
|
||||
ме К1801ВП1-065.
|
||||
|
||||
2Р рспр выполнен на триггере D6.2. Разряды 8-11, 13, 14 ре-
|
||||
гистров блока КЛС выполнены на наборе переключателей SA1.
|
||||
|
||||
|
||||
Основным элементом блока КЛС является БИС асинхронного пос-
|
||||
ледовательного приемо-передатчика К1801ВП1-065.
|
||||
|
||||
|
||||
Временные диаграммы работы микросхемы К1801ВП1-065 пред-
|
||||
ставлены на рис.3..8.
|
||||
|
||||
|
||||
Временные диаграммы работы выходного узла передатчика пред-
|
||||
ставлены на рис.9.
|
||||
|
||||
|
||||
Временные диаграммы работы входного узла приемника пред-
|
||||
ставлены на рис.10.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
- 13 -
|
||||
|
||||
Блок КЛС
|
||||
|
||||
Содержание
|
||||
|
||||
|
||||
1. Введение. . . . . . . . . . . . . . . . . . . . . . . 2
|
||||
|
||||
2. Назначение. . . . . . . . . . . . . . . . . . . . . . 2
|
||||
|
||||
3. Основные технические характеристики. . . . . . . . . . 3
|
||||
|
||||
4. Устройство и работа блока КЛС. . . . . . . . . . . . . 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
478
ROM sources/BK-0010 driver module/D1.MAC
Normal file
478
ROM sources/BK-0010 driver module/D1.MAC
Normal file
@ -0,0 +1,478 @@
|
||||
; #############################################################
|
||||
; # #
|
||||
; # Д Р А Й В Е Р Н Ы Й М О Д У Л Ь Б К - 0 0 1 0 #
|
||||
; # #
|
||||
; #############################################################
|
||||
|
||||
|
||||
; РАЗРАБОТАЛ: ДЯБИН М.И.
|
||||
; МОСКВА, 1983 Г.
|
||||
;
|
||||
; ПОСЛЕДНЯЯ РЕДАКЦИЯ: МАЙ 1984 Г.
|
||||
|
||||
|
||||
|
||||
; ====================================
|
||||
; **** АРГУМЕНТЫ КОМАНДЫ EMT DMBK ****
|
||||
; ====================================
|
||||
|
||||
|
||||
|
||||
; КЛАВИАТУРА
|
||||
; ----------
|
||||
|
||||
INDKLW = 4 ;- ИНИЦИАЛИЗАЦИЯ ДРАЙВЕРА КЛАВИАТУРЫ
|
||||
|
||||
CTKOD = 6 ;- ЧТЕНИЕ КОДА С КЛАВИАТУРЫ
|
||||
; ВЫХОД: R0 - КОД В МЛ. БАЙТЕ
|
||||
|
||||
CTSTR = 10 ;- ЧТЕНИЕ СТРОКИ С КЛАВИАТУРЫ
|
||||
; ВХОД: R1 - АДРЕС БУФЕРА СТРОКИ
|
||||
; R2 - ДЛИНА СТРОКИ (МЛ.Б.)
|
||||
; - СИМВОЛ-ОГРАНИЧИТЕЛЬ (СТ.Б.)
|
||||
|
||||
USTKLC = 12 ;- УСТАНОВКА КЛЮЧЕЙ КЛАВИАТУРЫ
|
||||
; ВХОД: R0 - НОМЕР КЛЮЧА
|
||||
; R1 - АДРЕС ТЕКСТА КЛЮЧА
|
||||
|
||||
|
||||
; TV-МОНИТОР
|
||||
; ----------
|
||||
|
||||
INDMBK = 14 ;- ИНИЦИАЛИЗАЦИЯ DMBK
|
||||
|
||||
FSIM = 16 ;- ФОРМИРОВАНИЕ СИМВОЛА
|
||||
; ВХОД: R0 - КОД СИМВОЛА В МЛ.Б.
|
||||
|
||||
FSTR = 20 ;- ФОРМИРОВАНИЕ СТРОКИ
|
||||
; ВХОД: R1 - АДРЕС СТРОКИ
|
||||
; R2 - ДЛИНА СТРОКИ (МЛ.Б.)
|
||||
; - СИМВОЛ-ОГРАНИЧИТЕЛЬ (СТ.Б.)
|
||||
|
||||
ZSIMSS = 22 ;- ЗАПИСЬ СИМВОЛА В СЛУЖЕБНУЮ СТРОКУ
|
||||
; ВХОД: R0 - КОД СИМВОЛА (0-СБРОС СТРОКИ)
|
||||
; R1 - НОМЕР ПОЗИЦИИ В СС
|
||||
|
||||
USTKK = 24 ;- УСТАНОВКА КУРСОРА ПО КООРДИНАТАМ
|
||||
; ВХОД: R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
SEMKK = 26 ;- С'ЕМ КООРДИНАТ КУРСОРА
|
||||
; ВЫХОД: R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
FTCK = 30 ;- ФОРМИРОВАНИЕ ТОЧКИ
|
||||
; ВХОД: R0 - 1-ЗАПИСЬ, 0-СТИРАНИЕ
|
||||
; R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
FWEKT = 32 ;- ФОРМИРОВАНИЕ ВЕКТОРА
|
||||
; ВХОД: R0 - 1-ЗАПИСЬ, 0-СТИРАНИЕ
|
||||
; R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
CTSSD = 34 ;- ЧТЕНИЕ СЛОВА СОСТОЯНИЯ ДИСПЛЕЯ
|
||||
; ВЫХОД: R0 - СЛОВО СОСТ. ДИСПЛ.
|
||||
|
||||
|
||||
; МАГНИТОФОН
|
||||
; ----------
|
||||
|
||||
DMAG = 36 ;- ДРАЙВЕР МАГНИТОФОНА
|
||||
; ВХОД: R1 - АДРЕС БЛОКА ПАРАМЕТРОВ
|
||||
|
||||
|
||||
; TLG-КАНАЛ
|
||||
; ---------
|
||||
|
||||
INDTLG = 40 ;- ИНИЦИАЛИЗАЦИЯ ДРАЙВЕРА ТЛГ-КАНАЛА
|
||||
; ВХОД: R0 - НОМЕР СКОРОСТИ
|
||||
|
||||
PDBYT = 42 ;- ПЕРЕДАЧА БАЙТА
|
||||
; ВХОД: R0 - МЛ.Б. НА ПЕРЕДАЧУ
|
||||
|
||||
PRBYT = 44 ;- ПРИЕМ БАЙТА
|
||||
; ВЫХОД: R0 - МЛ.Б. ПРИНЯТ
|
||||
|
||||
PDMAS = 46 ;- ПЕРЕДАЧА МАССИВА
|
||||
; ВХОД: R1 - АДРЕС МАССИВА
|
||||
; R2 - ДЛИНА МАССИВА
|
||||
|
||||
PRMAS = 50 ;- ПРИЕМ МАССИВА
|
||||
; ВХОД: R1 - АДРЕС БУФЕРА МАССИВА
|
||||
; R2 - ДЛИНА МАССИВА
|
||||
|
||||
|
||||
; РЕЗЕРВ
|
||||
; ------
|
||||
|
||||
RW1 = 52
|
||||
RW2 = 54
|
||||
RW3 = 56
|
||||
RW4 = 60
|
||||
RW5 = 62
|
||||
RW6 = 64
|
||||
RW7 = 66
|
||||
RW8 = 70
|
||||
RW9 = 72
|
||||
RW10 = 74
|
||||
RW11 = 76
|
||||
RW12 = 100
|
||||
RW13 = 102
|
||||
RW14 = 104
|
||||
RW15 = 106
|
||||
RW16 = 110
|
||||
|
||||
|
||||
|
||||
; ======================
|
||||
; *** КОНСТАНТЫ DMBK ***
|
||||
; ======================
|
||||
|
||||
|
||||
AWPZAW = 4 ;- АДР.ВЕКТ.ПРЕР. ПО ЗАВИСАНИЮ
|
||||
AWPEMT = 30 ;- АДР.ВЕКТ.ПРЕР. ПО КОМАНДЕ ЕМТ
|
||||
APORT = 177714 ;- АДРЕС ПОРТА
|
||||
ASPORT = 177716 ;- АДРЕС СИСТЕМНОГО ПОРТА
|
||||
|
||||
|
||||
|
||||
|
||||
; ============================
|
||||
; **** ОБЛАСТЬ СВЯЗИ DMBK ****
|
||||
; ============================
|
||||
|
||||
|
||||
|
||||
DMBK: JMP MNDMBK ;- ПЕРЕХОД НА МОНИТОР DMBK
|
||||
|
||||
|
||||
; -------------------------------
|
||||
; ** ВХОДЫ ДРАЙВЕРА КЛАВИАТУРЫ **
|
||||
; -------------------------------
|
||||
|
||||
WIDKLW: .WORD MIDKLW ;- ВХОД ИНИЦИАЛИЗАЦИИ DKLAW
|
||||
WCTKOD: .WORD MCTKOD ;- ВХОД ЧТЕНИЯ КОДА
|
||||
WCTSTR: .WORD MCTSTR ;- ВХОД ЧТЕНИЯ СТРОКИ
|
||||
WUKLC: .WORD MUKLC ;- ВХОД УСТАНОВКИ КЛЮЧЕЙ
|
||||
|
||||
|
||||
; --------------------------------
|
||||
; ** ВХОДЫ ДРАЙВЕРА TV-МОНИТОРА **
|
||||
; --------------------------------
|
||||
|
||||
WIDMBK: .WORD MIDMBK ;- ВХОД ИНИЦИАЛИЗАЦИИ DMBK
|
||||
WFSIM: .WORD MFSIM ;- ВХОД ФОРМИРОВАНИЯ СИМВОЛА
|
||||
WFSTR: .WORD MFSTR ;- ВХОД ФОРМИРОВАНИЯ СТРОКИ
|
||||
WZSSS: .WORD MZSSS ;- ВХОД ЗАПИСИ СИМВОЛА В СЛУЖ. СТРОКУ
|
||||
WUSTKK: .WORD MUSTKK ;- ВХОД УСТАНОВКИ КООРДИНАТ КУРСОРА
|
||||
WSKK: .WORD MSKK ;- ВХОД С'ЕМА КООРДИНАТ КУРСОРА
|
||||
WFTCK: .WORD MFTCK ;- ВХОД ФОРМИРОВАНИЯ ТОЧКИ
|
||||
WFWEKT: .WORD MFWEKT ;- ВХОД ФОРМИРОВАНИЯ ВЕКТОРА
|
||||
WCTSSD: .WORD MCTSSD ;- ВХОД ЧТЕНИЯ ССД
|
||||
|
||||
|
||||
; --------------------------------
|
||||
; ** ВХОДЫ ДРАЙВЕРА МАГНИТОФОНА **
|
||||
; --------------------------------
|
||||
|
||||
WDMAG: .WORD MDMAG ;- ВХОД ЗАПИСИ/ЧТЕНИЯ МАССИВА
|
||||
|
||||
|
||||
; -------------------------------
|
||||
; ** ВХОДЫ ДРАЙВЕРА ТЛГ-КАНАЛА **
|
||||
; -------------------------------
|
||||
|
||||
WIDTLG: .WORD MIDTLG ;- ВХОД ИНИЦИАЛИЗАЦИИ DTLG
|
||||
WPDBYT: .WORD MPDBYT ;- ВХОД ПЕРЕДАЧИ БАЙТА
|
||||
WPRBYT: .WORD MPRBYT ;- ВХОД ПРИЕМА БАЙТА
|
||||
WPDMAS: .WORD MPDMAS ;- ВХОД ПЕРЕДАЧИ МАССИВА
|
||||
WPRMAS: .WORD MPRMAS ;- ВХОД ПРИЕМА МАССИВА
|
||||
|
||||
|
||||
; --------------------------
|
||||
; ** РЕЗЕРВНЫЕ ВХОДЫ DMBK **
|
||||
; --------------------------
|
||||
|
||||
RWDM1: .WORD 160000
|
||||
RWDM2: .WORD 160004
|
||||
RWDM3: .WORD 160010
|
||||
RWDM4: .WORD 160014
|
||||
RWDM5: .WORD 160020
|
||||
RWDM6: .WORD 160024
|
||||
RWDM7: .WORD 160030
|
||||
RWDM8: .WORD 160034
|
||||
RWDM9: .WORD 160040
|
||||
RWDM10: .WORD 160044
|
||||
RWDM11: .WORD 160050
|
||||
RWDM12: .WORD 160054
|
||||
RWDM13: .WORD 160060
|
||||
RWDM14: .WORD 160064
|
||||
RWDM15: .WORD 160070
|
||||
RWDM16: .WORD 160074
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ==============================
|
||||
; ***** ДИСПЕТЧЕР Е М Т *****
|
||||
; ==============================
|
||||
|
||||
|
||||
DEMT: MOV R5,-(SP)
|
||||
|
||||
MOV 2(SP),R5 ; АДРЕС МОДУЛЯ
|
||||
MOV -(R5),R5
|
||||
BIC #177400,R5
|
||||
MOV DMBK(R5),R5
|
||||
|
||||
JSR PC,(R5) ; ОБРАЩЕНИЕ К МОДУЛЮ
|
||||
|
||||
MOV (SP)+,R5
|
||||
RTI
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =====================================
|
||||
; ***** МОДУЛЬ ИНИЦИАЛИЗАЦИИ DMBK *****
|
||||
; =====================================
|
||||
|
||||
|
||||
MIDMBK: CLR R1 ; УСТАНОВКА ВЕКТОРОВ
|
||||
MOV #20,R2
|
||||
1$: MOV #100000,(R1)+
|
||||
SOB R2,1$
|
||||
MOV #MNZAW,@#AWPZAW
|
||||
MOV #DEMT,@#AWPEMT
|
||||
MOV #200,@#AWPEMT+2
|
||||
|
||||
MOV #120,R2 ; СБРОС ПРИЗНАКОВ
|
||||
2$: CLR (R1)+
|
||||
SOB R2,2$
|
||||
|
||||
EMT INDKLW ;- ИНИЦИАЛИЗАЦИЯ DKLAW
|
||||
|
||||
INC DSIMB ;- ИНИЦИАЛИЗАЦИЯ DTVM
|
||||
INCB NMPGT
|
||||
COM MASCW
|
||||
COM MCWSS
|
||||
JSR PC,PPRP1
|
||||
|
||||
MOV #KDBIT0,DLBIT0 ;- ИНИЦИАЛИЗАЦИЯ DMAG
|
||||
MOV #KDBIT1,DLBIT1
|
||||
|
||||
CLR R0
|
||||
EMT INDTLG ;- ИНИЦИАЛИЗАЦИЯ DTLG
|
||||
|
||||
CLR @#APORT ;- СБРОС ПОРТА
|
||||
MOV #220,@#ASPORT ;- УСТАНОВКА СИСТЕМНОГО ПОРТА
|
||||
|
||||
MTPS R0 ;- РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; ***** М О Н И Т О Р D M B K *****
|
||||
; ======================================
|
||||
|
||||
|
||||
|
||||
|
||||
MNDMBK: MOV #1000,SP ;- УСТАНОВКА СТЕКА
|
||||
JSR PC,MIDMBK
|
||||
|
||||
JSR PC,@#120000 ;- ЗАПУСК ФОКАЛА
|
||||
JSR PC,MIDMBK ;- ВЫХОД ИЗ ФОКАЛА
|
||||
|
||||
MNKOM: JSR R5,PPCT ;- "МОНИТОР БК-0010"
|
||||
.WORD TMON
|
||||
MNKOM1: JSR R5,PPCT ;- ">"
|
||||
.WORD TPRIGL
|
||||
|
||||
MOV SP,R1 ; ПРИЕМ КОМАНДЫ
|
||||
SUB #100,R1
|
||||
MOV R1,R5
|
||||
2$: EMT CTKOD
|
||||
CMPB R0,#30 ;- АНС
|
||||
BNE 1$
|
||||
CMP R5,R1
|
||||
BEQ 2$
|
||||
3$: CLR (R5)+
|
||||
4$: EMT FSIM
|
||||
BR 2$
|
||||
1$: MOV R0,-(R5) ;- ЗАПИСЬ КОДА В БУФЕР
|
||||
TSTB R5
|
||||
BEQ 3$
|
||||
CMPB R0,#12 ;- "ПС"
|
||||
BNE 4$
|
||||
EMT FSIM
|
||||
|
||||
MOV -(R1),R4 ; ЧТЕНИЕ КОМАНДЫ
|
||||
CLR R5 ;- ЧИСЛО
|
||||
MOV R4,R3
|
||||
7$: CMP R3,R0 ;- "ПС"
|
||||
BEQ 5$
|
||||
CMP R3,#67 ;- ЦИФРА
|
||||
BHI 6$
|
||||
SUB #60,R3
|
||||
BMI 6$
|
||||
ASL R5
|
||||
ASL R5
|
||||
ASL R5
|
||||
ADD R3,R5
|
||||
6$: MOV -(R1),R3 ;- ЧТЕНИЕ СЛЕД.СИМВ.
|
||||
BR 7$
|
||||
|
||||
5$: BIC #240,R4 ; АНАЛИЗ КОМАНДЫ
|
||||
CMPB R4,#124 ;- "T"
|
||||
BHI 10$
|
||||
SUB #114,R4 ;- "L"
|
||||
BMI 11$
|
||||
ASL R4
|
||||
|
||||
MOV MNKOMT(R4),R1 ; ПЕРЕДАЧА УПРАВЛЕНИЯ
|
||||
JSR PC,(R1)
|
||||
BR MNKOM1
|
||||
|
||||
11$: ADD #13,R4 ;- A : K
|
||||
BPL MNDMBK
|
||||
BR MNKOM1
|
||||
|
||||
10$: JSR PC,@#160110 ;- > T
|
||||
BR MNKOM1
|
||||
|
||||
MNKOMT: .WORD PCTTLG ;- "L"
|
||||
.WORD PCTMAG ;- "M"
|
||||
.WORD 160110 ;- "N"
|
||||
.WORD 160110 ;- "O"
|
||||
.WORD 140000 ;- "P"
|
||||
.WORD 160110 ;- "Q"
|
||||
.WORD 160104 ;- "R"
|
||||
.WORD PSTART ;- "S"
|
||||
.WORD 160100 ;- "T"
|
||||
|
||||
|
||||
|
||||
; -----------------------------------
|
||||
; ** 0. ОБРАБОТКА ЗАВИСАНИЯ И СТОП **
|
||||
; -----------------------------------
|
||||
|
||||
MNZAW: MOV #1000,SP
|
||||
MOV #220,@#ASPORT
|
||||
EMT INDKLW
|
||||
BR MNKOM
|
||||
|
||||
|
||||
; -----------------------------
|
||||
; ** 1. ЧТЕНИЕ ФАЙЛА С ЛИНИИ **
|
||||
; -----------------------------
|
||||
|
||||
PCTTLG: EMT PRBYT ; УСТАНОВКА СВЯЗИ
|
||||
EMT PDBYT
|
||||
|
||||
MOV #BUFSTA,R1 ; ПРИЕМ АДРЕСА И ДЛИНЫ
|
||||
MOV #4,R2
|
||||
EMT PRMAS
|
||||
TST R5
|
||||
BEQ 1$
|
||||
MOV R5,BUFSTA
|
||||
|
||||
1$: MOV BUFSTA,R1 ; ПРИЕМ МАССИВА
|
||||
MOV BUFDL,R2
|
||||
EMT PRMAS
|
||||
JSR R5,PPCT ;- ПЕЧАТЬ СООБЩЕНИЯ
|
||||
.WORD TFZ
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -----------------------------------
|
||||
; ** 2. ЧТЕНИЕ ФАЙЛА С МАГНИТОФОНА **
|
||||
; -----------------------------------
|
||||
|
||||
PCTMAG: MOV #BPDMAG,R1 ; ЗАГРУЗКА BPDMAG
|
||||
MOV #3,(R1)+ ;- КОМАНДА
|
||||
MOV R5,(R1)+ ;- АДРЕС
|
||||
CLR (R1)+ ;- ДЛИНА
|
||||
JSR R5,PPCT ;- "ИМЯ ФАЙЛА?"
|
||||
.WORD TIMF
|
||||
MOV #5020,R2
|
||||
EMT CTSTR
|
||||
DEC R1
|
||||
2$: MOVB #40,(R1)+
|
||||
DEC R2
|
||||
BPL 2$
|
||||
|
||||
1$: MOV #BPDMAG,R1 ; ЧТЕНИЕ ФАЙЛА
|
||||
EMT DMAG
|
||||
|
||||
MOVB 1(R1),R0 ; АНАЛИЗ ОТВЕТА
|
||||
BEQ 4$
|
||||
DEC R0
|
||||
BNE 3$
|
||||
JSR PC,5$ ;- ПЕЧАТЬ ИМ. ТЕК. ФАЙЛА
|
||||
MOV #12,R0
|
||||
EMT FSIM
|
||||
BR 1$
|
||||
|
||||
3$: JSR R5,PPCT ;- "*ОШИБКА*"
|
||||
.WORD TOH
|
||||
BR KCTMAG
|
||||
|
||||
4$: JSR R5,PPCT ;- "ЗАГРУЖЕН ФАЙЛ "
|
||||
.WORD TZF
|
||||
5$: ADD #32,R1
|
||||
MOV #20,R2
|
||||
EMT FSTR
|
||||
|
||||
KCTMAG: RTS PC
|
||||
|
||||
|
||||
; --------------
|
||||
; ** 3. СТАРТ **
|
||||
; --------------
|
||||
|
||||
PSTART: TST R5
|
||||
BNE 1$
|
||||
MOV BUFSTA,R5 ;- СТАРТОВЫЙ АДРЕС
|
||||
1$: JSR PC,(R5)
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ----------------------
|
||||
; ** 4. ПЕЧАТЬ ТЕКСТА **
|
||||
; ----------------------
|
||||
|
||||
PPCT: MOV (R5)+,R3
|
||||
BR 1$
|
||||
2$: EMT FSIM
|
||||
1$: MOVB (R3)+,R0
|
||||
BNE 2$
|
||||
|
||||
RTS R5
|
||||
|
||||
|
||||
|
||||
; =====================
|
||||
; *** ДАННЫЕ MNDMBK ***
|
||||
; =====================
|
||||
|
||||
|
||||
TMON: .BYTE 12,355,357,356,351,364,357,362,40 ; МОНИТОР БК-0010
|
||||
.BYTE 342,353,55,60,60,61,60,0
|
||||
TPRIGL: .BYTE 12,12,76,40,0 ; >
|
||||
TIMF: .BYTE 351,315,321,40,306,301,312,314,301,77,40,0 ; ИМЯ ФАЙЛА?
|
||||
TZF: .BYTE 12,372,301,307,322,325,326,305,316,40 ; ЗАГРУЖЕН ФАЙЛ
|
||||
.BYTE 306,301,312,314,40,0
|
||||
TFZ: .BYTE 12,346,301,312,314,40 ; ФАЙЛ ЗАГРУЖЕН
|
||||
.BYTE 332,301,307,322,325,326,305,316,0
|
||||
TOH: .BYTE 12,52,357,373,351,342,353,341,52,0 ; *ОШИБКА*
|
||||
.EVEN
|
461
ROM sources/BK-0010 driver module/D2.MAC
Normal file
461
ROM sources/BK-0010 driver module/D2.MAC
Normal file
@ -0,0 +1,461 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; **********************************************
|
||||
; * *
|
||||
; * Д Р А Й В Е Р К Л А В И А Т У Р Ы *
|
||||
; * *
|
||||
; **********************************************
|
||||
|
||||
|
||||
|
||||
; =======================
|
||||
; *** КОНСТАНТЫ DKLAW ***
|
||||
; =======================
|
||||
|
||||
|
||||
AWPKL1 = 60 ;- АДРЕС ВЕКТОРА ПР. КЛАВ.1
|
||||
AWPKL2 = 274 ;- АДРЕС ВЕКТОРА ПР. КЛАВ.2
|
||||
ARSKL = 177660 ;- АДРЕС РЕГ.СОСТОЯНИЯ КЛАВ.
|
||||
ARDKL = 177662 ;- АДРЕС РЕГ.ДАННЫХ КЛАВ.
|
||||
|
||||
ASPORT = 177716 ;- АДРЕС СИСТЕМНОГО ПОРТА
|
||||
APRWK = 262 ;- АДРЕС ПРИЗНАКА ВК
|
||||
KPOWTS = 20000 ;- КОНСТАНТА ПОВТОРА СИМВОЛА
|
||||
KPOWTG = 4000 ;- КОНСТАНТА ПОВТОРА ГТ
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; ***** МОДУЛЬ ИНИЦИАЛИЗАЦИИ DKLAW *****
|
||||
; ======================================
|
||||
|
||||
|
||||
|
||||
|
||||
MIDKLW: MOV #BCTKW1,@#AWPKL1 ;- УСТ. ВКЛ1
|
||||
MOV #200,@#AWPKL1+2
|
||||
|
||||
MOV #BCTKW2,@#AWPKL2 ;- УСТ. ВКЛ2
|
||||
MOV #200,@#AWPKL2+2
|
||||
|
||||
CLR APOPKL ;- СБРОС РЕЖИМА ПРЕРЫВАНИЯ
|
||||
CLR PRWK ;- СБРОС ПРИЗНАКА КОДА ВК
|
||||
CLR @#ARSKL ;- СБРОС МАСКИ ПРЕРЫВАНИЯ
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ==============================
|
||||
; ***** МОДУЛЬ ЧТЕНИЯ КОДА *****
|
||||
; ==============================
|
||||
|
||||
|
||||
MCTKOD: ;ВЫХОД: R0 - КОД В МЛ.БАЙТЕ
|
||||
|
||||
|
||||
|
||||
; =================================
|
||||
; *** 1. БЛОК УПРАВЛЕНИЯ MCTKOD ***
|
||||
; =================================
|
||||
|
||||
|
||||
BUMCTK: MOV @#ARDKL,R0 ;- ФИКТИВНОЕ ЧТЕНИЕ КЛАВ.
|
||||
|
||||
1$: TSTB PRZKB ; ЧТЕНИЕ КОДА С КЛАВИАТУРЫ
|
||||
BEQ 2$
|
||||
CLR R0
|
||||
BISB BUFKL,R0
|
||||
CLRB PRZKB ;- РАЗРЕШЕНИЕ ЗАПИСИ КОДА В БУФЕР
|
||||
RTS PC
|
||||
|
||||
2$: TSTB SCKLC ; КЛЮЧ
|
||||
BEQ 3$
|
||||
JSR PC,PZKKLC
|
||||
BR 1$
|
||||
|
||||
3$: TSTB SCTAB ; ТАБУЛЯЦИЯ
|
||||
BEQ 4$
|
||||
JSR PC,PZKTAB
|
||||
BR 1$
|
||||
|
||||
4$: TSTB PRPOWT ; ПОВТОР
|
||||
BEQ 5$
|
||||
JSR PC,PPOWT
|
||||
BR 1$
|
||||
|
||||
5$: MTPS #0 ;- РАЗРЕШЕНИЕ ПРЕРЫВАНИЯ
|
||||
BR 1$
|
||||
|
||||
|
||||
|
||||
; ========================================
|
||||
; *** 2. БЛОК ЧТЕНИЯ КОДА ПО ВЕКТОРУ 1 ***
|
||||
; ========================================
|
||||
|
||||
|
||||
BCTKW1: JSR R4,PSREG0
|
||||
MOV R5,-(SP)
|
||||
|
||||
JSR PC,PCTK ; ЧТЕНИЕ КОДА
|
||||
|
||||
CMPB R0,#20 ; КОДЫ РЕЖИМОВ КЛАВ.
|
||||
BHI 1$
|
||||
|
||||
MOV R0,R1 ; ВЫБОР КОДА
|
||||
SUB #12,R1
|
||||
BMI 2$
|
||||
ASL R1
|
||||
ADD R1,PC
|
||||
BR 3$
|
||||
BR 2$
|
||||
BR 2$
|
||||
BR 4$
|
||||
BR 5$
|
||||
BR 6$
|
||||
BR 7$
|
||||
|
||||
3$: TST @#APRWK ; ПС
|
||||
BEQ 2$
|
||||
MOV #15,R0
|
||||
BR 2$
|
||||
|
||||
5$: MOVB #200,PRRUS ; РУС
|
||||
BR 9$
|
||||
|
||||
6$: CLRB PRRUS ; ЛАТ
|
||||
9$: CLR R0
|
||||
CLR SCKOD
|
||||
JSR PC,PFINDR
|
||||
BR KCTKW1
|
||||
|
||||
7$: CLR R3 ;- СБР. ТАБ.
|
||||
4$: JSR PC,PUTAB ;- УСТ. ТАБ.
|
||||
BR KCTKW1
|
||||
|
||||
1$: CMPB R0,#77 ; МОДИФ. КОДА
|
||||
BLOS 2$
|
||||
BISB PRRUS,R0
|
||||
|
||||
2$: JSR PC,PZKBUF ; ЗАПИСЬ КОДА В БУФЕР
|
||||
|
||||
KCTKW1: MOV (SP)+,R5
|
||||
JSR R4,PWREG
|
||||
|
||||
RTI
|
||||
|
||||
|
||||
; ------------------------------
|
||||
; ** 2.1. УСТАНОВКА ТАБУЛЯЦИИ **
|
||||
; ------------------------------
|
||||
|
||||
PUTAB: JSR PC,POPSIM ; ОПРЕД. ПОЗ. СИМВОЛА
|
||||
|
||||
TST R3 ; УСТ. ТАБ.
|
||||
BEQ 1$
|
||||
BIS R0,MTAB(R1)
|
||||
BR 2$
|
||||
|
||||
1$: BIC R0,MTAB(R1) ; СБР. ТАБ.
|
||||
|
||||
2$: JSR PC,PFINDT ; УСТАНОВКА ИНДИК.ТАБ.
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
; ========================================
|
||||
; *** 3. БЛОК ЧТЕНИЯ КОДА ПО ВЕКТОРУ 2 ***
|
||||
; ========================================
|
||||
|
||||
|
||||
BCTKW2: JSR R4,PSREG0
|
||||
MOV R5,-(SP)
|
||||
|
||||
JSR PC,PCTK ; ЧТЕНИЕ И МОДИФ. КОДА
|
||||
BISB #200,R0
|
||||
|
||||
CMPB R0,#277 ; КОДЫ ПОЛУГРАФИКИ
|
||||
BLOS 1$
|
||||
BICB #100,R0
|
||||
BISB #40,R0
|
||||
BR 2$
|
||||
|
||||
1$: CMPB R0,#271 ; КЛЮЧИ
|
||||
BHI 3$
|
||||
MOV R0,R1
|
||||
SUB #260,R1
|
||||
BMI 3$
|
||||
TSTB SCKLC
|
||||
BNE KCTKW2
|
||||
ASL R1
|
||||
MOV AKLC(R1),TAKLC ;- ЗАПУСК КЛЮЧА
|
||||
BEQ KCTKW2
|
||||
MOVB @TAKLC,SCKLC
|
||||
INC TAKLC
|
||||
JSR PC,PZKLC1
|
||||
BR KCTKW2
|
||||
|
||||
3$: CMPB R0,#237 ; КОДЫ РЕЖИМОВ ДИСПЛЕЯ
|
||||
BLOS 4$
|
||||
BICB #40,R0
|
||||
BISB #20,R0
|
||||
CMPB R0,#232 ;- ГАШ. К.
|
||||
BEQ 8$
|
||||
CMPB R0,#235 ;- ИНВ. Э.
|
||||
BEQ 8$
|
||||
CMPB R0,#236 ;- УСТ.ИНД.
|
||||
BNE 2$
|
||||
|
||||
8$: EMT FSIM ;- ИСУ,БЛР,ГАШ.К,ИНВ.Э,УСТ.ИНД
|
||||
BR KCTKW2
|
||||
|
||||
4$: CMPB R0,#211 ; ТАБ
|
||||
BLO 5$
|
||||
BNE 6$
|
||||
JSR PC,PTAB
|
||||
BR KCTKW2
|
||||
|
||||
5$: CMPB R0,#204 ; БЛР,ИСУ
|
||||
BHI 7$
|
||||
|
||||
CMPB R0,#201 ; ПОВТОР
|
||||
BHI 8$
|
||||
BNE 7$
|
||||
INCB PRPOWT
|
||||
JSR PC,PPOWT1
|
||||
BR KCTKW2
|
||||
|
||||
7$: BIS #20,R0 ; ГРАФ. КОДЫ И ШАГ
|
||||
BR 2$
|
||||
|
||||
6$: CMPB R0,#212 ; ОСТАНОВ
|
||||
BNE 9$
|
||||
10$: TSTB @#ARSKL
|
||||
BPL 10$
|
||||
JSR PC,PCTK
|
||||
BR KCTKW2
|
||||
|
||||
9$: CMPB R0,#213 ; СБР.К.СТР.
|
||||
BNE 2$
|
||||
MOV #231,R0
|
||||
|
||||
2$: JSR PC,PZKBUF ; ЗАПИСЬ КОДА В БУФЕР
|
||||
|
||||
|
||||
KCTKW2: MOV (SP)+,R5
|
||||
JSR R4,PWREG
|
||||
|
||||
RTI
|
||||
|
||||
|
||||
; ----------------------------
|
||||
; ** 3.1. ЗАПИСЬ КОДА КЛЮЧА **
|
||||
; ----------------------------
|
||||
|
||||
PZKKLC: MOVB @TAKLC,R0
|
||||
JSR PC,PZKBUF
|
||||
INC TAKLC
|
||||
DECB SCKLC
|
||||
BEQ KZKKLC
|
||||
PZKLC1: TST @#APOPKL ;- РЕЖИМ ПРЕР.
|
||||
BNE PZKKLC
|
||||
|
||||
KZKKLC: RTS PC
|
||||
|
||||
|
||||
; --------------------
|
||||
; ** 3.2. ТАБУЛЯЦИЯ **
|
||||
; --------------------
|
||||
|
||||
PTAB: JSR PC,POPSIM ; ОПРЕД. ПОЗ. СИМВ.
|
||||
|
||||
MOVB #1,SCTAB ; ПОИСК ПОЗИЦИИ
|
||||
ASL R0
|
||||
BCS 1$
|
||||
2$: BIT R0,MTAB(R1)
|
||||
BNE PZKT1
|
||||
INCB SCTAB
|
||||
ASL R0
|
||||
BCC 2$
|
||||
|
||||
1$: ADC R0 ; ИЗМЕНЕНИЕ АДР. СЛОВА
|
||||
ADD #2,R1
|
||||
CMP R1,#4
|
||||
BLO 2$
|
||||
TSTB PRCW
|
||||
BNE PZKT1
|
||||
CMP R1,#10
|
||||
BNE 2$
|
||||
|
||||
PZKT1: TST @#APOPKL ; ЗАПИСЬ КОДА ТАБУЛЯЦИИ
|
||||
BEQ KTAB
|
||||
PZKTAB: MOV #40,R0
|
||||
JSR PC,PZKBUF
|
||||
DECB SCTAB
|
||||
BNE PZKT1
|
||||
|
||||
KTAB: RTS PC
|
||||
|
||||
|
||||
; -----------------
|
||||
; ** 3.3. ПОВТОР **
|
||||
; -----------------
|
||||
|
||||
PPOWT: JSR PC,PZKB1
|
||||
MOV BKPOWT,R0 ;- ЗАДЕРЖКА
|
||||
1$: SOB R0,1$
|
||||
BIT #100,@#ASPORT ;- ПРОВЕРКА РЕЖ. ПОВТ.
|
||||
BEQ PPOWT1
|
||||
CLRB PRPOWT
|
||||
BR KPOWT
|
||||
PPOWT1: TST @#APOPKL ;- РЕЖИМ ПРЕР.
|
||||
BNE PPOWT
|
||||
|
||||
KPOWT: RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ================================
|
||||
; ***** МОДУЛЬ ЧТЕНИЯ СТРОКИ *****
|
||||
; ================================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС СТРОКИ
|
||||
; R2 - ДЛИНА СТРОКИ (МЛ.Б.),СИМВ.ОГРАНИЧ.(СТ.Б.)
|
||||
|
||||
|
||||
MCTSTR: MOV R0,-(SP)
|
||||
|
||||
MOV R2,R5 ; ПОДГОТОВКА ОГРАНИЧ.
|
||||
SWAB R5
|
||||
BIC #177400,R2
|
||||
MOV R2,-(SP)
|
||||
|
||||
1$: EMT CTKOD ; ЧТЕНИЕ СИМВОЛА
|
||||
CMPB R0,#30 ;- АНС
|
||||
BNE 2$
|
||||
CMP R2,(SP)
|
||||
BEQ 1$
|
||||
DEC R1
|
||||
ADD #2,R2
|
||||
BR 3$
|
||||
2$: MOVB R0,(R1)+
|
||||
3$: EMT FSIM
|
||||
|
||||
CMPB R0,R5 ; ПРОВЕРКА ОГРАНИЧ.
|
||||
BEQ KCTSTR
|
||||
SOB R2,1$
|
||||
|
||||
KCTSTR: MOV (SP)+,R0
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ===================================
|
||||
; ***** МОДУЛЬ УСТАНОВКИ КЛЮЧЕЙ *****
|
||||
; ===================================
|
||||
|
||||
|
||||
; ВХОД: R0 - НОМЕР КЛЮЧА
|
||||
; R1 - АДРЕС ТЕКСТА КЛЮЧА
|
||||
|
||||
|
||||
MUKLC: TST R0 ; ПРОВЕРКА НОМЕРА КЛЮЧА
|
||||
BLE KUKLC
|
||||
CMP R0,#12
|
||||
BHI KUKLC
|
||||
BNE 1$
|
||||
CLR R0
|
||||
|
||||
1$: ASL R0
|
||||
MOV R1,AKLC(R0) ; УСТАНОВКА КЛЮЧА
|
||||
|
||||
KUKLC: RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; **** БИБЛИОТЕКА ПОДПРОГРАММ DKLAW ****
|
||||
; ======================================
|
||||
|
||||
|
||||
|
||||
; ----------------------
|
||||
; ** 0.1. ЧТЕНИЕ КОДА **
|
||||
; ----------------------
|
||||
|
||||
PCTK: TST SCUIND ; УСТ. ИНДИКАТОРОВ
|
||||
BEQ 4$
|
||||
JSR PC,PUINDR
|
||||
4$: MOV #177777,SCKOD
|
||||
|
||||
PSIGN: MOV #50,R2 ; СИГНАЛ
|
||||
MOV #100,R3
|
||||
3$: MOV #320,@#ASPORT ;- 1
|
||||
MOV R3,R0
|
||||
1$: SOB R0,1$
|
||||
MOV #220,@#ASPORT ;- 0
|
||||
MOV R3,R0
|
||||
2$: SOB R0,2$
|
||||
DEC R3
|
||||
SOB R2,3$
|
||||
MOV @#ASPORT,R0 ;- СБРОС ПРИЗН. СТОП
|
||||
|
||||
MOVB @#ARDKL,R0 ;- ЧТЕНИЕ КОДА
|
||||
RTS PC
|
||||
|
||||
|
||||
; ------------------------------
|
||||
; ** 0.2. ЗАПИСЬ КОДА В БУФЕР **
|
||||
; ------------------------------
|
||||
|
||||
PZKBUF: TSTB PRZKB ; ЗАПИСЬ КОДА В БУФ.
|
||||
BNE PZKB2
|
||||
MOVB R0,BUFKL
|
||||
PZKB1: INCB PRZKB
|
||||
|
||||
PZKB2: MOV @#APOPKL,R5 ; ПЕРЕДАЧА УПР. ПО ПРЕРЫВАНИЮ
|
||||
BEQ KZKBUF
|
||||
JSR PC,(R5)
|
||||
|
||||
KZKBUF: RTS PC
|
||||
|
||||
|
||||
; -----------------------------------------------
|
||||
; ** 0.3. ОПРЕДЕЛЕНИЕ ПОЗИЦИИ СИМВОЛА В СТРОКЕ **
|
||||
; -----------------------------------------------
|
||||
|
||||
POPSIM: MOV NOMSIM,R1 ; ПОДГ. СЧ. ПОЗ.
|
||||
BIC #177700,R1
|
||||
TSTB PRCW
|
||||
BEQ 1$
|
||||
ASR R1
|
||||
|
||||
1$: MOV R1,R2 ; ОПРЕД. ПОЗ. В СЛОВЕ
|
||||
BIC #177760,R2
|
||||
INC R2
|
||||
CLR R0
|
||||
SEC
|
||||
2$: ROL R0
|
||||
SOB R2,2$
|
||||
|
||||
BIC #177717,R1 ; ОПРЕД. СЛОВА
|
||||
ASR R1
|
||||
ASR R1
|
||||
ASR R1
|
||||
|
||||
RTS PC
|
1182
ROM sources/BK-0010 driver module/D3.MAC
Normal file
1182
ROM sources/BK-0010 driver module/D3.MAC
Normal file
File diff suppressed because it is too large
Load Diff
820
ROM sources/BK-0010 driver module/D4.MAC
Normal file
820
ROM sources/BK-0010 driver module/D4.MAC
Normal file
@ -0,0 +1,820 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; ***** МОДУЛЬ ФОРМИРОВАНИЯ СТРОКИ *****
|
||||
; ======================================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС СТРОКИ
|
||||
; R2 - ДЛИНА СТРОКИ (МЛ.Б.)
|
||||
; - СИМВОЛ - ОГРАНИЧИТЕЛЬ (СТ.Б.)
|
||||
|
||||
|
||||
MFSTR: MOV R0,-(SP)
|
||||
MOV R3,-(SP)
|
||||
|
||||
MOV R2,R3 ; ПОДГОТОВКА ОГРАНИЧИТЕЛЕЙ
|
||||
SWAB R3
|
||||
BIC #177400,R2
|
||||
|
||||
1$: MOVB (R1)+,R0 ; ЗАПИСЬ СТРОКИ
|
||||
JSR PC,MFSIM
|
||||
CMPB R0,R3
|
||||
BEQ KMFSTR
|
||||
SOB R2,1$
|
||||
|
||||
KMFSTR: MOV (SP)+,R3
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; ***** МОДУЛЬ ЗАПИСИ СИМВОЛА В СС *****
|
||||
; ======================================
|
||||
|
||||
|
||||
; ВХОД: R0 - КОД СИМВОЛА (0 - СБРОС СТРОКИ)
|
||||
; R1 - НОМЕР ПОЗИЦИИ В СС
|
||||
|
||||
|
||||
MZSSS: JSR R4,PSREG
|
||||
|
||||
TST R0
|
||||
BNE 1$
|
||||
|
||||
JSR PC,PFSSTR ; СБРОС СС
|
||||
BR KMZSSS
|
||||
|
||||
1$: CMPB R0,#177 ; ПОДГОТ. АДР. ИЗОБРАЖ.
|
||||
BHI 3$
|
||||
CMPB R0,#10
|
||||
BNE 4$
|
||||
MOV #21,R0
|
||||
4$: SUB #20,R0
|
||||
BMI KMZSSS
|
||||
BR 5$
|
||||
3$: CMPB R0,#237
|
||||
BLOS KMZSSS
|
||||
SUB #60,R0
|
||||
|
||||
5$: JSR PC,PFSSS ; ФОРМИРОВАНИЕ СИМВОЛА
|
||||
|
||||
KMZSSS: JSR R4,PWREG
|
||||
RTS PC
|
||||
|
||||
|
||||
; ----------------------------------
|
||||
; ** 1. ФОРМИРОВАНИЕ СИМВОЛА В СС **
|
||||
; ----------------------------------
|
||||
|
||||
PFSSS: MOV R1,-(SP) ; R0 - СМЕЩЕНИЕ ИЗОБРАЖЕНИЯ
|
||||
MOV R2,-(SP) ; R1 - НОМЕР ПОЗИЦИИ В СТРОКЕ
|
||||
|
||||
TSTB PRCW ; ПОДГ. АДР.
|
||||
BEQ 1$
|
||||
ASL R1
|
||||
1$: BIC #177700,R1
|
||||
ADD BAZVP,R1
|
||||
SUB #1700,R1
|
||||
BIC #140000,R1
|
||||
ADD ANVP,R1
|
||||
|
||||
MOV AS,-(SP) ; ФОРМИРОВАНИЕ СИМВОЛА
|
||||
MOV R1,AS
|
||||
BIC #177400,R0
|
||||
JSR PC,PFSIM
|
||||
MOV (SP)+,AS
|
||||
|
||||
KFSSS: MOV (SP)+,R2
|
||||
MOV (SP)+,R1
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ==============================================
|
||||
; ***** МОДУЛЬ УСТАНОВКИ КООРДИНАТ КУРСОРА *****
|
||||
; ==============================================
|
||||
|
||||
|
||||
; ВХОД: R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
|
||||
MUSTKK: JSR R4,PSREG
|
||||
JSR PC,PSTK
|
||||
MOV 2(SP),R1
|
||||
MOV 4(SP),R2
|
||||
|
||||
TSTB PRCW ; ПОДГ. КООРД. X
|
||||
BEQ 1$
|
||||
ASL R1
|
||||
|
||||
1$: MOV #6,R0 ; ПОДГ. КООРД. Y
|
||||
2$: ASL R2
|
||||
SOB R0,2$
|
||||
|
||||
TSTB PRGRAF
|
||||
BNE PUKGK
|
||||
|
||||
|
||||
; ------------------------------------------------
|
||||
; ** 1. УСТАНОВКА КООРДИНАТ СИМВОЛЬНОГО КУРСОРА **
|
||||
; ------------------------------------------------
|
||||
|
||||
PUKSK: BIC #177700,R1 ; ПОДГ. КООРД. X
|
||||
|
||||
1$: SUB KSVP,R2 ; ПОДГ. КООРД. Y
|
||||
BPL 1$
|
||||
2$: ADD KSVP,R2
|
||||
BMI 2$
|
||||
|
||||
ADD R1,R2 ; ФОРМ. АДР. СИМВОЛА
|
||||
MOV R2,NOMSIM
|
||||
CLR R5
|
||||
JSR PC,PFASIM
|
||||
|
||||
BR KUSTKK
|
||||
|
||||
|
||||
; -------------------------------------------------
|
||||
; ** 2. УСТАНОВКА КООРДИНАТ ГРАФИЧЕСКОГО КУРСОРА **
|
||||
; -------------------------------------------------
|
||||
|
||||
PUKGK: BIC #177000,R1 ; ПОДГ. КООРД. X
|
||||
1$: MOV R1,R3
|
||||
ASR R1
|
||||
ASR R1
|
||||
ASR R1
|
||||
|
||||
MOVB NMPGT,R0 ; ПОДГ. MASPGT
|
||||
BIC #177770,R3
|
||||
BEQ 2$
|
||||
3$: ASL R0
|
||||
SOB R3,3$
|
||||
2$: MOVB R0,MASPGT
|
||||
|
||||
4$: SUB DGPB,R2 ; ПОДГ. КООРД. Y
|
||||
BPL 4$
|
||||
5$: ADD DGPB,R2
|
||||
BMI 5$
|
||||
|
||||
ADD R1,R2 ; ВЫЧИСЛЕНИЕ AGTVP
|
||||
MOV R2,AGTVP
|
||||
|
||||
CLR R1 ; ВЫЧ. AGT
|
||||
CLR R2
|
||||
JSR PC,PFAGT
|
||||
|
||||
KUSTKK: JSR PC,PFK
|
||||
JSR R4,PWREG
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ==========================================
|
||||
; ***** МОДУЛЬ С'ЕМА КООРДИНАТ КУРСОРА *****
|
||||
; ==========================================
|
||||
|
||||
|
||||
; ВЫХОД: R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
|
||||
MSKK: MOV R0,-(SP)
|
||||
|
||||
TSTB PRGRAF
|
||||
BNE PSKGK
|
||||
|
||||
|
||||
; -------------------------------------------
|
||||
; ** 1. С'ЕМ КООРДИНАТ СИМВОЛЬНОГО КУРСОРА **
|
||||
; -------------------------------------------
|
||||
|
||||
PSKSK: MOV NOMSIM,R1 ; КООРД. X
|
||||
MOV R1,R2
|
||||
BIC #177700,R1
|
||||
|
||||
BR PSK1
|
||||
|
||||
|
||||
; --------------------------------------------
|
||||
; ** 2. С'ЕМ КООРДИНАТ ГРАФИЧЕСКОГО КУРСОРА **
|
||||
; --------------------------------------------
|
||||
|
||||
PSKGK: MOV AGTVP,R1 ; КООРД. X
|
||||
MOV R1,R2
|
||||
BIC #177700,R1
|
||||
ASL R1
|
||||
ASL R1
|
||||
ASL R1
|
||||
MOVB MASPGT,R0
|
||||
2$: ASR R0
|
||||
BCS PSK1
|
||||
INC R1
|
||||
BR 2$
|
||||
|
||||
PSK1: TSTB PRCW
|
||||
BEQ 3$
|
||||
ASR R1
|
||||
|
||||
3$: BIC #77,R2 ; КООРД. Y
|
||||
MOV #6,R0
|
||||
4$: ASR R2
|
||||
SOB R0,4$
|
||||
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =====================================
|
||||
; ***** МОДУЛЬ ФОРМИРОВАНИЯ ТОЧКИ *****
|
||||
; =====================================
|
||||
|
||||
|
||||
; ВХОД: R0 - 1-ЗАПИСЬ, 0-СТИРАНИЕ
|
||||
; R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
|
||||
MFTCK: MOV R1,BUFX ; СОХР. КООРД.
|
||||
MOV R2,BUFY
|
||||
MOVB R0,PRZTCK
|
||||
|
||||
MFTCK1: JSR R4,PSREG ; СОХР. РЕГ.
|
||||
|
||||
TSTB PRCW ; ПОДГ. КООРД. X
|
||||
BEQ 1$
|
||||
ASL R1
|
||||
BCS KMFTCK
|
||||
1$: CMP R1,#1000
|
||||
BHIS KMFTCK
|
||||
|
||||
MOV #6,R0 ; ПОДГ. КООРД. Y
|
||||
2$: ASL R2
|
||||
BCS KMFTCK
|
||||
SOB R0,2$
|
||||
CMP R2,DGPB
|
||||
BHIS KMFTCK
|
||||
|
||||
MOV R1,R3 ; ФОРМ. АДР. ТОЧКИ
|
||||
ASR R1
|
||||
ASR R1
|
||||
ASR R1
|
||||
ADD R2,R1
|
||||
ADD BAZVP,R1
|
||||
BIC #140000,R1
|
||||
ADD ANVP,R1
|
||||
|
||||
MOVB NMPGT,R2 ; ФОРМИРОВАНИЕ МАСКИ ТОЧКИ
|
||||
BIC #177770,R3
|
||||
BEQ 3$
|
||||
4$: ASL R2
|
||||
SOB R3,4$
|
||||
|
||||
3$: MOVB (R1),R0 ; ФОРМИРОВАНИЕ ТОЧКИ
|
||||
BICB R2,R0
|
||||
MOV MASCW,R3
|
||||
TSTB PRZTCK
|
||||
BNE 5$
|
||||
MOV FON,R3
|
||||
5$: COM R2
|
||||
BIC R2,R3
|
||||
BISB R3,R0
|
||||
MOVB R0,(R1)
|
||||
|
||||
KMFTCK: JSR R4,PWREG ; ВОССТ. РЕГ.
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =======================================
|
||||
; ***** МОДУЛЬ ФОРМИРОВАНИЯ ВЕКТОРА *****
|
||||
; =======================================
|
||||
|
||||
|
||||
; ВХОД: R0 - 1-ЗАПИСЬ, 0-СТИРАНИЕ
|
||||
; R1 - КООРДИНАТА X
|
||||
; R2 - КООРДИНАТА Y
|
||||
|
||||
|
||||
MFWEKT: JSR R4,PSREG
|
||||
MOVB R0,PRZTCK
|
||||
|
||||
MOV R1,R3 ; ЗАМЕНА КООРДИНАТ
|
||||
MOV R2,R4
|
||||
MOV BUFX,R1
|
||||
MOV BUFY,R2
|
||||
MOV R3,BUFX
|
||||
MOV R4,BUFY
|
||||
|
||||
CLR R0 ; ОПРЕД. DX И НАПРАВЛЕНИЯ
|
||||
SUB R1,R3
|
||||
BMI 1$
|
||||
BEQ 2$
|
||||
INC R0
|
||||
BR 2$
|
||||
1$: DEC R0 ;- НАПРАВЛЕНИЕ
|
||||
NEG R3 ;- DX
|
||||
|
||||
2$: CLR R5 ; ОПРЕД. DY И НАПРАВЛЕНИЯ
|
||||
SUB R2,R4
|
||||
BMI 3$
|
||||
BEQ 4$
|
||||
INC R5
|
||||
BR 4$
|
||||
3$: DEC R5 ;- НАПРАВЛЕНИЕ
|
||||
NEG R4 ;- DY
|
||||
|
||||
4$: CMP R4,R3 ; ОПРЕД. ДЛИННОЙ КООРД.
|
||||
BHI 5$
|
||||
MOV R5,-(SP) ;- DX >= DY
|
||||
CLR -(SP)
|
||||
MOV R3,R5
|
||||
MOV R4,R3
|
||||
MOV R5,R4 ;- R4 - ДЛИННАЯ КООРД.
|
||||
CLR R5
|
||||
BR 6$
|
||||
5$: CLR -(SP) ;- DX < DY
|
||||
MOV R0,-(SP)
|
||||
CLR R0 ;- R0,R5 - DСЕГМ. (SP) - DКООРД.
|
||||
|
||||
6$: CLR -(SP) ; ОПРЕД. ПАРАМ. ВЕКТОРА
|
||||
TST R3
|
||||
BNE 7$
|
||||
INC R3 ;- ОСЕВОЙ ВЕКТОР
|
||||
SUB #12,SP
|
||||
BR 8$
|
||||
7$: SUB R3,R4 ;- ВЫЧИСЛЕНИЕ ДЛИНЫ СЕГМ.
|
||||
BMI 9$
|
||||
INC (SP) ;- ДЛИНА СЕГМЕНТА
|
||||
BR 7$
|
||||
9$: ADD R3,R4 ;- R3 - СЧ. СЕГМ. R4 - ОСТАТОК
|
||||
MOV R3,-(SP) ;- КОЛИЧ. СЕГМ.
|
||||
MOV R3,-(SP)
|
||||
ASR (SP) ;- КОЛИЧ. СЕГМ./2
|
||||
MOV R4,-(SP) ;- ОСТАТОК
|
||||
CLR -(SP)
|
||||
CLR -(SP)
|
||||
CLR R4
|
||||
|
||||
11$: ADD 4(SP),2(SP) ; ОПРЕД. ДЛИНЫ СЕГМ.
|
||||
BEQ 10$
|
||||
CMP 2(SP),6(SP)
|
||||
BLE 10$
|
||||
INC R4
|
||||
SUB 10(SP),2(SP)
|
||||
10$: ADD 12(SP),R4
|
||||
MOV R4,(SP)
|
||||
ASR R4
|
||||
SUB R4,(SP) ;- ДЛИНА 2-ГО ПОЛУСЕГМ.
|
||||
|
||||
JSR PC,PFSEGM ;- ФОРМ. 1-ГО ПОЛУСЕГМ.
|
||||
ADD 14(SP),R1
|
||||
ADD 16(SP),R2
|
||||
MOV (SP),R4
|
||||
8$: JSR PC,PFSEGM ;- ФОРМ. 2-ГО ПОЛУСЕГМ.
|
||||
|
||||
SOB R3,11$ ; КОНЕЦ ФОРМ. СЕГМ.
|
||||
|
||||
ADD #20,SP
|
||||
JSR R4,PWREG
|
||||
RTS PC
|
||||
|
||||
PFSEGM: TST R4 ; ФОРМИРОВАНИЕ СЕГМЕНТА
|
||||
BEQ KFSEGM
|
||||
1$: ADD R0,R1
|
||||
ADD R5,R2
|
||||
JSR PC,MFTCK1
|
||||
SOB R4,1$
|
||||
KFSEGM: RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =============================
|
||||
; ***** МОДУЛЬ ЧТЕНИЯ ССД *****
|
||||
; =============================
|
||||
|
||||
|
||||
; ВЫХОД: R0 - СЛОВО СОСТОЯНИЯ ДИСПЛЕЯ
|
||||
|
||||
|
||||
MCTSSD: MOV R1,-(SP)
|
||||
|
||||
CLR R0 ; ПОДГ. ПАРАМ.
|
||||
MOV #SYSPR,R1
|
||||
|
||||
1$: SEC ; УСТАНОВКА ФЛАЖКОВ
|
||||
2$: ROR R0
|
||||
BCS KCTSSD
|
||||
TSTB (R1)+
|
||||
BNE 1$
|
||||
BR 2$
|
||||
|
||||
KCTSSD: MOV (SP)+,R1
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================================
|
||||
; **** БИБЛИОТЕКА ПОДПРОГРАММ DTVMN ****
|
||||
; ======================================
|
||||
|
||||
|
||||
|
||||
; -------------------------------
|
||||
; ** 0.1. СОХРАНЕНИЕ РЕГИСТРОВ **
|
||||
; -------------------------------
|
||||
|
||||
|
||||
PSREG0: MOV #220,@#ASPORT ;- СБРОС ГТ. ТЛГ.
|
||||
|
||||
PSREG: MOV R3,-(SP)
|
||||
MOV R2,-(SP)
|
||||
MOV R1,-(SP)
|
||||
MOV R0,-(SP)
|
||||
MOV R4,-(SP)
|
||||
|
||||
RTS R4
|
||||
|
||||
|
||||
; -----------------------------------
|
||||
; ** 0.2. ВОССТАНОВЛЕНИЕ РЕГИСТРОВ **
|
||||
; -----------------------------------
|
||||
|
||||
PWREG: MOV (SP)+,R0
|
||||
MOV (SP)+,R0
|
||||
MOV (SP)+,R1
|
||||
MOV (SP)+,R2
|
||||
MOV (SP)+,R3
|
||||
|
||||
RTS R4
|
||||
|
||||
|
||||
; ----------------
|
||||
; ** 0.3. СБРОС **
|
||||
; ----------------
|
||||
|
||||
PSBR: JSR PC,PFINDT ; УСТ.ИНД.ТАБ.
|
||||
|
||||
CLR NOMSIM ; ФОРМ. AS
|
||||
JSR PC,PFASIM
|
||||
|
||||
MOV FON,R0 ; СБРОС VP
|
||||
MOV AS,R3
|
||||
MOV DGPB,R2
|
||||
ASR R2
|
||||
1$: MOV R0,(R3)+
|
||||
TST R3
|
||||
BPL 2$
|
||||
SUB DVPB,R3
|
||||
2$: SOB R2,1$
|
||||
|
||||
PSBR1: CLR R5 ; ФОРМ. AGT
|
||||
JSR PC,PFAGT1
|
||||
CLR SCTVS
|
||||
MOVB NMPGT,MASPGT
|
||||
|
||||
JSR PC,PFK ; ФОРМ. КУРСОРА
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ----------------------------------------
|
||||
; ** 0.4. ФОРМИРОВАНИЕ СЛУЖЕБНОЙ СТРОКИ **
|
||||
; ----------------------------------------
|
||||
|
||||
PFSSTR: JSR PC,PFINDT ; ФОРМ. ИНД. ТАБ.
|
||||
|
||||
MOV MCWSS,R1 ; ФОРМИР. ЧЕРТЫ
|
||||
JSR PC,PZTVSW
|
||||
|
||||
MOV FONSS,R1 ; СБРОС ИНДИКАТОРОВ
|
||||
MOV #KTVSSS-4,R4
|
||||
1$: JSR PC,PZTVSW
|
||||
SOB R4,1$
|
||||
|
||||
PUINDR: CLR R0 ; УСТАНОВКА ИНДИКАТОРОВ
|
||||
CLR SCKOD
|
||||
MOV #6,R2
|
||||
2$: MOV R0,-(SP)
|
||||
MOV R2,-(SP)
|
||||
JSR PC,PFINDR
|
||||
MOV (SP)+,R2
|
||||
MOV (SP)+,R0
|
||||
INC R0
|
||||
SOB R2,2$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -----------------------------------------
|
||||
; ** 0.5. ФОРМИРОВАНИЕ ИНДИКАТОРА РЕЖИМА **
|
||||
; -----------------------------------------
|
||||
|
||||
PFINDR: INC SCUIND ; УСТ. ПРИЗН. ФОРМ. ИНД.
|
||||
TST SCKOD
|
||||
BNE KFINDR
|
||||
CLR SCUIND
|
||||
|
||||
MOV #PRRUS,R1 ; ВХОД: R0 - НОМЕР ИНД.
|
||||
ADD R0,R1
|
||||
ASL R0
|
||||
ADD R0,PC
|
||||
BR 1$
|
||||
BR 2$
|
||||
BR 3$
|
||||
BR 4$
|
||||
BR 5$
|
||||
BR 6$
|
||||
|
||||
1$: MOV #LAT,R3 ; РУС/ЛАТ
|
||||
TSTB (R1)
|
||||
BEQ 7$
|
||||
MOV #RUS,R3
|
||||
BR 7$
|
||||
|
||||
2$: TSTB (R1) ; ПОДЧ.
|
||||
BEQ 8$
|
||||
MOV #PODC,R3
|
||||
BR 7$
|
||||
|
||||
3$: TSTB (R1) ; ИНВ. С.
|
||||
BEQ 8$
|
||||
MOV #INW,R3
|
||||
BR 7$
|
||||
|
||||
4$: TSTB (R1) ; ИНД. СУ
|
||||
BEQ 8$
|
||||
MOV #ISU,R3
|
||||
BR 7$
|
||||
|
||||
5$: TSTB (R1) ; БЛОК. РЕД.
|
||||
BEQ 8$
|
||||
MOV #BLR,R3
|
||||
BR 7$
|
||||
|
||||
6$: TSTB (R1) ; ГРАФ/ЗАП/СТИР
|
||||
BEQ 8$
|
||||
TSTB PRZAP
|
||||
BEQ 9$
|
||||
MOV #ZAP,R3
|
||||
BR 7$
|
||||
9$: MOV #GRAF,R3
|
||||
TSTB PRSTIR
|
||||
BEQ 7$
|
||||
MOV #STIR,R3
|
||||
BR 7$
|
||||
|
||||
8$: MOV #SBRIND,R3 ; СБРОС ИНДИК.
|
||||
|
||||
7$: ASL R0 ; ПОДГ. ПАРАМ. ИНД.
|
||||
ADD #4,R0
|
||||
MOV #100,R1
|
||||
TSTB PRCWSS
|
||||
BEQ 10$
|
||||
ASR R1
|
||||
10$: SUB R0,R1
|
||||
MOV #4,R2
|
||||
|
||||
MOV FON,-(SP) ; СОХРАНЕНИЕ ПРИЗНАКОВ
|
||||
MOV MASCW,-(SP)
|
||||
MOV PRCW,-(SP)
|
||||
MOV PRPODC,-(SP)
|
||||
|
||||
MOV FONSS,FON ; УСТАНОВКА ПРИЗНАКОВ СС
|
||||
MOV MCWSS,MASCW
|
||||
MOVB PRCWSS,PRCW
|
||||
MOV PRPSSS,PRPODC
|
||||
|
||||
11$: MOVB (R3)+,R0 ; ФОРМИРОВАНИЕ ИНДИКАТОРА
|
||||
MOV R3,-(SP)
|
||||
JSR PC,PFSSS
|
||||
MOV (SP)+,R3
|
||||
INC R1
|
||||
SOB R2,11$
|
||||
|
||||
MOV (SP)+,PRPODC ; ВОССТ. ПРИЗНАКОВ
|
||||
MOV (SP)+,PRCW
|
||||
MOV (SP)+,MASCW
|
||||
MOV (SP)+,FON
|
||||
|
||||
KFINDR: RTS PC
|
||||
|
||||
|
||||
; --------------------------------------------
|
||||
; ** 0.6. ФОРМИРОВАНИЕ ИНДИКАТОРА ТАБУЛЯЦИИ **
|
||||
; --------------------------------------------
|
||||
|
||||
PFINDT: MOV FONSS,R1 ; СБРОС ИНДИКАТОРА
|
||||
MOV BAZVP,R3
|
||||
ADD ANVP,R3
|
||||
MOV #3,R4
|
||||
10$: JSR PC,PZTVSW
|
||||
SOB R4,10$
|
||||
|
||||
MOV #20,R4 ; УСТ. ДЛИНЫ СЛОВА
|
||||
TSTB PRCW
|
||||
BEQ 1$
|
||||
ASL R4
|
||||
|
||||
1$: CLR R5 ; ПОИСК ПОЗИЦИИ ТАБУЛЯЦИИ
|
||||
7$: CLR R2
|
||||
MOV MTAB(R5),R0
|
||||
4$: ROR R0
|
||||
BCS 2$
|
||||
BEQ 3$
|
||||
6$: INC R2
|
||||
BR 4$
|
||||
|
||||
2$: MOV R2,R1 ; УСТАНОВКА ИНДИКАТОРА
|
||||
TSTB PRCW
|
||||
BNE 5$
|
||||
ADD R3,R1
|
||||
MOVB MCWSS,(R1)
|
||||
BR 6$
|
||||
5$: ASL R1
|
||||
ADD R3,R1
|
||||
MOV MCWSS,(R1)
|
||||
BR 6$
|
||||
|
||||
3$: ADD #2,R5 ; ИЗМЕНЕНИЕ АДРЕСОВ
|
||||
ADD R4,R3
|
||||
BIT #77,R3
|
||||
BNE 7$
|
||||
SUB #100,R3
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -------------------------------
|
||||
; ** 0.7. ФОРМИРОВАНИЕ КУРСОРА **
|
||||
; -------------------------------
|
||||
|
||||
PFK: ; ФОРМИР. И СТИР. КУРСОРА
|
||||
PSTK: TSTB PRGRAF
|
||||
BNE 1$
|
||||
JSR PC,PFSK ; СИМВ. КУРСОР
|
||||
MOV #KPOWTS,BKPOWT
|
||||
BR KFK
|
||||
1$: JSR PC,PFGK ; ГРАФ. КУРСОР
|
||||
MOV #KPOWTG,BKPOWT
|
||||
|
||||
KFK: RTS PC
|
||||
|
||||
|
||||
; ---------------------------------------------
|
||||
; ** 0.8. РЕДАКТИРОВАНИЕ СИМВОЛЬНОГО КУРСОРА **
|
||||
; ---------------------------------------------
|
||||
|
||||
PREDSK: JSR PC,PSTSK
|
||||
CLR R5
|
||||
JSR PC,PFASIM
|
||||
JSR PC,PFSK
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ------------------------
|
||||
; ** 0.9. СБРОС СИМВОЛА **
|
||||
; ------------------------
|
||||
|
||||
PSBRS: MOV FON,R0 ; ПОДГ. ПАРАМ.
|
||||
MOV AS,R3
|
||||
MOV #12,R2
|
||||
|
||||
3$: TSTB PRCW ; ЗАПИСЬ ФОНА
|
||||
BNE 1$
|
||||
MOVB R0,(R3)
|
||||
BR 2$
|
||||
1$: MOV R0,(R3)
|
||||
|
||||
2$: JSR PC,PFTAN ; ИЗМЕНЕНИЕ АДР.
|
||||
SOB R2,3$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ---------------------------------------------
|
||||
; ** 0.10. ФОРМИРОВАНИЕ ТЕКУЩЕГО АДРЕСА ВНИЗ **
|
||||
; ---------------------------------------------
|
||||
|
||||
PFTAN: ADD #DTVSTB,R3
|
||||
BPL KFTAN
|
||||
SUB DVPB,R3
|
||||
|
||||
KFTAN: RTS PC
|
||||
|
||||
|
||||
; --------------------------------------
|
||||
; ** 0.11. ЗАПОЛНЕНИЕ TV-СТРОКИ ВВЕРХ **
|
||||
; --------------------------------------
|
||||
|
||||
PZTVSW: MOV #DTVSTS,R2 ; R1 - ФОН, R3 - АДРЕС
|
||||
CMP R3,ANVP
|
||||
BHI 1$
|
||||
ADD DVPB,R3
|
||||
1$: MOV R1,-(R3)
|
||||
SOB R2,1$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -------------------------------------
|
||||
; ** 0.12. ЗАПОЛНЕНИЕ TV-СТРОКИ ВНИЗ **
|
||||
; -------------------------------------
|
||||
|
||||
PZTVSN: MOV #DTVSTS,R2 ; R1 - ФОН, R3 - АДРЕС
|
||||
TST R3
|
||||
BPL 1$
|
||||
SUB DVPB,R3
|
||||
1$: MOV R1,(R3)+
|
||||
SOB R2,1$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -----------------------
|
||||
; ** 0.13. СДВИГ ВВЕРХ **
|
||||
; -----------------------
|
||||
|
||||
PSDWW: MOV R1,R3 ; ПОДГОТОВКА АДРЕСОВ
|
||||
SUB #DSSTRB,R3
|
||||
CMP R3,ANVP
|
||||
BHIS 1$
|
||||
ADD DVPB,R3
|
||||
|
||||
1$: TST R2 ; ПОСЛЕДНЯЯ СТРОКА
|
||||
BEQ PSBRSN
|
||||
|
||||
5$: MOV #DTVSTS,R4 ; СДВИГ
|
||||
2$: MOV (R1)+,(R3)+
|
||||
SOB R4,2$
|
||||
TST R1
|
||||
BPL 3$
|
||||
SUB DVPB,R1
|
||||
BR 4$
|
||||
3$: TST R3
|
||||
BPL 4$
|
||||
SUB DVPB,R3
|
||||
4$: SOB R2,5$
|
||||
|
||||
PSBRSN: MOV #KTVSS,R4 ; СБРОС СТРОКИ ВНИЗ
|
||||
MOV FON,R1
|
||||
1$: JSR PC,PZTVSN
|
||||
SOB R4,1$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ----------------------
|
||||
; ** 0.14. СДВИГ ВНИЗ **
|
||||
; ----------------------
|
||||
|
||||
PSDWN: MOV R1,R3 ; ПОДГ. АДРЕСОВ
|
||||
ADD #DSSTRB,R3
|
||||
CMP R1,ANVP
|
||||
BHI 11$
|
||||
ADD DVPB,R1
|
||||
11$: CMP R3,#100000
|
||||
BLOS 1$
|
||||
SUB DVPB,R3
|
||||
|
||||
1$: TST R2 ; ПОСЛЕДНЯЯ СТРОКА
|
||||
BEQ PSBRSW
|
||||
|
||||
5$: MOV #DTVSTS,R4 ; СДВИГ
|
||||
2$: MOV -(R1),-(R3)
|
||||
SOB R4,2$
|
||||
CMP R1,ANVP
|
||||
BHI 3$
|
||||
ADD DVPB,R1
|
||||
BR 4$
|
||||
3$: CMP R3,ANVP
|
||||
BHI 4$
|
||||
ADD DVPB,R3
|
||||
4$: SOB R2,5$
|
||||
|
||||
PSBRSW: MOV #KTVSS,R4 ; СБРОС СТРОКИ ВВЕРХ
|
||||
MOV FON,R1
|
||||
1$: JSR PC,PZTVSW
|
||||
SOB R4,1$
|
||||
|
||||
RTS PC
|
263
ROM sources/BK-0010 driver module/D5.MAC
Normal file
263
ROM sources/BK-0010 driver module/D5.MAC
Normal file
@ -0,0 +1,263 @@
|
||||
|
||||
|
||||
|
||||
|
||||
; ======================
|
||||
; **** トタヘヘロナ DTVMN ****
|
||||
; ======================
|
||||
|
||||
|
||||
; ----------------
|
||||
; ** ネヘトネハタメホミロ **
|
||||
; ----------------
|
||||
|
||||
LAT: .BYTE 20,274,261,304
|
||||
RUS: .BYTE 20,302,305,303
|
||||
PODC: .BYTE 300,277,264,316
|
||||
INW: .BYTE 271,276,307,20
|
||||
ISU: .BYTE 271,303,305,20
|
||||
BLR: .BYTE 262,274,302,20
|
||||
GRAF: .BYTE 267,302,261,266
|
||||
ZAP: .BYTE 312,261,300,20
|
||||
STIR: .BYTE 303,304,271,302
|
||||
SBRIND: .BYTE 20,20,20,20
|
||||
|
||||
|
||||
; -----------
|
||||
; ** フタムハネ **
|
||||
; -----------
|
||||
|
||||
MASPOZ: .WORD 177777 ; フタムハネ マホヌネヨネネ
|
||||
.WORD 140000
|
||||
.WORD 030000
|
||||
.WORD 006000
|
||||
.WORD 001400
|
||||
.WORD 000300
|
||||
.WORD 000060
|
||||
.WORD 000014
|
||||
.WORD 000003
|
||||
|
||||
KMASCW: .WORD 177777 ; フタムハネ ヨツナメタ (ハ/ヌ/ム/ラ)
|
||||
.WORD 125252
|
||||
.WORD 052525
|
||||
.WORD 000000
|
||||
|
||||
|
||||
; --------------------------
|
||||
; ** ネヌホチミタニナヘネナ ムネフツホヒホツ **
|
||||
; --------------------------
|
||||
|
||||
IZSIM: .WORD 160777,156735,176741,176775,177777 ; ^P
|
||||
.WORD 000000,002010,002176,000010,000000 ; フヒ
|
||||
.WORD 000577,006475,022425,000501,000000 ; フヘン
|
||||
.WORD 037000,016010,004052,004010,000000 ; ムメミ.ツ.
|
||||
.WORD 004000,004010,016052,037010,000000 ; ムメミ.ヘ.
|
||||
.WORD 000000,042110,002176,000010,000000 ; ヘム
|
||||
.WORD 000000,005022,005176,000022,000000 ; ムネフ.ヒ.
|
||||
.WORD 000000,021022,021176,000022,000000 ; ムネフ.マ.
|
||||
.WORD 000000,022050,022176,000050,000000 ; タヘム
|
||||
.WORD 000000,020020,020176,000020,000000 ; フマ
|
||||
.WORD 004000,025034,004010,004010,000000 ; フツ
|
||||
.WORD 004000,004010,025010,004034,000000 ; フヘ
|
||||
.WORD 017000,005006,020022,000100,000000 ; フヒツ
|
||||
.WORD 074000,050140,002110,000002,000000 ; フマツ
|
||||
.WORD 000000,002002,050110,074140,000000 ; フマヘ
|
||||
.WORD 000000,020100,005022,017006,000000 ; フヒヘ
|
||||
|
||||
.WORD 000000,000000,000000,000000,000000 ; マミホチナヒ
|
||||
.WORD 004000,004010,004010,004000,000000 ; !
|
||||
.WORD 022000,011044,000000,000000,000000 ; "
|
||||
.WORD 012000,037024,037024,012024,000000 ; #
|
||||
.WORD 021000,021034,021042,021034,000000 ; $
|
||||
.WORD 003000,010046,002010,030062,000000 ; %
|
||||
.WORD 004000,012024,025014,026022,000000 ; &
|
||||
.WORD 014000,002010,000000,000000,000000 ; '
|
||||
.WORD 010000,002010,002004,010010,000000 ; (
|
||||
.WORD 002000,010010,010020,002010,000000 ; )
|
||||
.WORD 000000,025010,025034,000010,000000 ; *
|
||||
.WORD 000000,004010,004076,000010,000000 ; +
|
||||
.WORD 000000,000000,000000,006014,002010 ; ,
|
||||
.WORD 000000,000000,000076,000000,000000 ; -
|
||||
.WORD 000000,000000,000000,006014,000000 ; .
|
||||
.WORD 000000,010040,002010,000002,000000 ; /
|
||||
.WORD 016000,031042,023052,016042,000000 ; 0
|
||||
.WORD 004000,005014,004010,037010,000000 ; 1
|
||||
.WORD 016000,020042,002030,037002,000000 ; 2
|
||||
.WORD 037000,010040,020030,016042,000000 ; 3
|
||||
.WORD 010000,012030,037022,010020,000000 ; 4
|
||||
.WORD 037000,017002,020040,016042,000000 ; 5
|
||||
.WORD 034000,001004,021036,016042,000000 ; 6
|
||||
.WORD 037000,010040,002010,002004,000000 ; 7
|
||||
.WORD 016000,021042,021034,016042,000000 ; 8
|
||||
.WORD 016000,021042,020074,007020,000000 ; 9
|
||||
.WORD 000000,006000,000014,006014,000000 ; :
|
||||
.WORD 000000,006000,000014,006014,002010 ; ;
|
||||
.WORD 010000,002010,002002,010010,000000 ; <
|
||||
.WORD 000000,037000,037000,000000,000000 ; =
|
||||
.WORD 002000,010010,010040,002010,000000 ; >
|
||||
.WORD 016000,020042,004020,004000,000000 ; ?
|
||||
|
||||
.WORD 016000,025062,035052,016002,000000 ; @
|
||||
.WORD 004000,021024,037042,021042,000000 ; A
|
||||
.WORD 017000,021042,021036,017042,000000 ; B
|
||||
.WORD 016000,001042,001002,016042,000000 ; C
|
||||
.WORD 017000,022044,022044,017044,000000 ; D
|
||||
.WORD 037000,001002,001036,037002,000000 ; E
|
||||
.WORD 037000,001002,001036,001002,000000 ; F
|
||||
.WORD 016000,001042,031002,036042,000000 ; G
|
||||
.WORD 021000,021042,021076,021042,000000 ; H
|
||||
.WORD 016000,004010,004010,016010,000000 ; I
|
||||
.WORD 034000,010020,010020,006022,000000 ; J
|
||||
.WORD 021000,005022,005006,021022,000000 ; K
|
||||
.WORD 001000,001002,001002,037002,000000 ; L
|
||||
.WORD 021000,025066,021052,021042,000000 ; M
|
||||
.WORD 021000,023042,031052,021042,000000 ; N
|
||||
.WORD 016000,021042,021042,016042,000000 ; O
|
||||
.WORD 017000,021042,001036,001002,000000 ; P
|
||||
.WORD 016000,021042,025042,026022,000000 ; Q
|
||||
.WORD 017000,021042,005036,021022,000000 ; R
|
||||
.WORD 016000,001042,020034,016042,000000 ; S
|
||||
.WORD 037000,004010,004010,004010,000000 ; T
|
||||
.WORD 021000,021042,021042,016042,000000 ; U
|
||||
.WORD 021000,021042,012024,004010,000000 ; V
|
||||
.WORD 021000,021042,025052,012052,000000 ; W
|
||||
.WORD 021000,012042,012010,021042,000000 ; X
|
||||
.WORD 021000,012042,004010,004010,000000 ; Y
|
||||
.WORD 037000,010040,002010,037002,000000 ; Z
|
||||
.WORD 016000,002004,002004,016004,000000 ; [
|
||||
.WORD 000000,002002,010010,000040,000000 ; \
|
||||
.WORD 016000,010020,010020,016020,000000 ; ]
|
||||
.WORD 000000,037000,020040,000000,000000 ; ^
|
||||
.WORD 000000,000000,000000,000000,000076 ; _
|
||||
|
||||
.WORD 006000,010010,000000,000000,000000 ; ^'
|
||||
.WORD 000000,016000,036040,056042,000000 ; SA
|
||||
.WORD 001000,015002,021046,015046,000000 ; SB
|
||||
.WORD 000000,016000,001042,016042,000000 ; SC
|
||||
.WORD 020000,026040,021062,026062,000000 ; SD
|
||||
.WORD 000000,016000,037042,036002,000000 ; SE
|
||||
.WORD 014000,002044,002016,002004,000000 ; SF
|
||||
.WORD 000000,026000,021062,026062,016040 ; SG
|
||||
.WORD 001000,015002,021046,021042,000000 ; SH
|
||||
.WORD 004000,006000,004010,016010,000000 ; SI
|
||||
.WORD 010000,010000,010020,010020,006022 ; SJ
|
||||
.WORD 001000,021002,007022,021022,000000 ; SK
|
||||
.WORD 006000,004010,004010,016010,000000 ; SL
|
||||
.WORD 000000,013000,025052,025052,000000 ; SM
|
||||
.WORD 000000,015000,021046,021042,000000 ; SN
|
||||
.WORD 000000,016000,021042,016042,000000 ; SO
|
||||
.WORD 000000,015000,021046,015046,001002 ; SP
|
||||
.WORD 000000,026000,021062,026062,020040 ; SQ
|
||||
.WORD 000000,015000,001046,001002,000000 ; SR
|
||||
.WORD 000000,016000,016002,017040,000000 ; SS
|
||||
.WORD 002000,007004,002004,014044,000000 ; ST
|
||||
.WORD 000000,021000,021042,026062,000000 ; SU
|
||||
.WORD 000000,021000,021042,004024,000000 ; SV
|
||||
.WORD 000000,021000,025042,012052,000000 ; SW
|
||||
.WORD 000000,021000,004024,021024,000000 ; SX
|
||||
.WORD 000000,021000,021042,004024,001004 ; SY
|
||||
.WORD 000000,037000,004020,037004,000000 ; SZ
|
||||
.WORD 030000,004010,004006,030010,000000 ; F[
|
||||
.WORD 004000,004010,004010,004010,000000 ; ^I
|
||||
.WORD 003000,004010,004060,003010,000000 ; F]
|
||||
.WORD 000076,000000,000000,000000,000000 ; ^_
|
||||
.WORD 037000,037076,037076,037076,000000 ; ヌチ
|
||||
|
||||
.WORD 037100,012025,012024,021024,000000 ; マネ
|
||||
.WORD 004010,004010,000377,000000,000000 ; _I
|
||||
.WORD 033000,077577,037177,004010,000000 ; ラナミツタ
|
||||
.WORD 000000,000000,004017,004010,004010 ; ^テ
|
||||
.WORD 004010,007410,007410,004010,004010 ; =I
|
||||
.WORD 004010,004010,004370,004010,004010 ; I-
|
||||
.WORD 004010,004010,000370,000000,000000 ; L
|
||||
.WORD 000000,177400,177400,000000,000000 ; =
|
||||
.WORD 000000,177400,177400,004010,004010 ; T-
|
||||
.WORD 004000,037034,077577,037034,000000 ; マネハタ
|
||||
.WORD 000000,000000,004370,004010,004010 ; テ
|
||||
.WORD 000000,000000,004377,004010,004010 ; T
|
||||
.WORD 012024,012024,000377,000000,000000 ; _II
|
||||
.WORD 004000,004010,025010,004034,000000 ; ムヘ
|
||||
.WORD 004010,004010,004377,004010,004010 ; +
|
||||
.WORD 012024,012024,012024,012024,012024 ; II
|
||||
.WORD 004010,004010,004017,004010,004010 ; -I
|
||||
.WORD 000000,002010,002176,000010,000000 ; ムヒ
|
||||
.WORD 012024,177424,177424,012024,012024 ; ++
|
||||
.WORD 004000,025034,004010,004010,000000 ; ムツ
|
||||
.WORD 016000,065434,065577,016010,000000 ; ハミナムメタ
|
||||
.WORD 000000,000000,000377,000000,000000 ; -
|
||||
.WORD 012024,012024,012377,012024,012024 ; -II
|
||||
.WORD 004010,004010,004010,004010,004010 ; I
|
||||
.WORD 004000,037034,037177,004034,000000 ; チモチヘタ
|
||||
.WORD 004010,004010,000017,000000,000000 ; ^L
|
||||
.WORD 004010,177410,177410,004010,004010 ; /=
|
||||
.WORD 000000,000000,012377,012024,012024 ; マ
|
||||
.WORD 004010,177410,177400,000000,000000 ; __I
|
||||
.WORD 004010,174010,174010,004010,004010 ; I=
|
||||
.WORD 000000,020020,020176,000020,000000 ; ムマ
|
||||
.WORD 031714,031714,031714,031714,031714 ; ムナミロノ ヌタチホノ
|
||||
|
||||
.WORD 000000,031000,047112,031112,000000 ; ム゙
|
||||
.WORD 000000,016000,036040,056042,000000 ; ムタ
|
||||
.WORD 020000,001034,021036,016042,000000 ; ムチ
|
||||
.WORD 000000,011000,011022,037022,000040 ; ムヨ
|
||||
.WORD 000000,036000,022044,077044,000102 ; ムト
|
||||
.WORD 000000,016000,037042,036002,000000 ; ムナ
|
||||
.WORD 000000,004000,025076,037052,004010 ; ムヤ
|
||||
.WORD 000000,037000,001042,001002,000000 ; ムテ
|
||||
.WORD 000000,021000,004024,021024,000000 ; ムユ
|
||||
.WORD 000000,021000,025062,021046,000000 ; ムネ
|
||||
.WORD 016000,021000,025062,021046,000000 ; ムノ
|
||||
.WORD 000000,021000,007022,021022,000000 ; ムハ
|
||||
.WORD 000000,034000,022044,021044,000000 ; ムヒ
|
||||
.WORD 000000,021000,025066,021042,000000 ; ムフ
|
||||
.WORD 000000,021000,037042,021042,000000 ; ムヘ
|
||||
.WORD 000000,016000,021042,016042,000000 ; ムホ
|
||||
.WORD 000000,037000,021042,021042,000000 ; ムマ
|
||||
.WORD 000000,036000,036042,021044,000000 ; ム゚
|
||||
.WORD 000000,015000,021046,015046,001002 ; ムミ
|
||||
.WORD 000000,016000,001042,016042,000000 ; ムム
|
||||
.WORD 000000,037000,004010,004010,000000 ; ムメ
|
||||
.WORD 000000,021000,021042,004024,001004 ; ムモ
|
||||
.WORD 000000,025000,016052,025052,000000 ; ムニ
|
||||
.WORD 000000,017000,017042,017042,000000 ; ムツ
|
||||
.WORD 000000,001000,017002,017042,000000 ; ムワ
|
||||
.WORD 000000,041000,047102,047122,000000 ; ムロ
|
||||
.WORD 000000,017000,014040,017040,000000 ; ムヌ
|
||||
.WORD 000000,025000,025052,037052,000000 ; ムリ
|
||||
.WORD 000000,017000,036040,017040,000000 ; ムン
|
||||
.WORD 000000,025000,025052,077052,000100 ; ムル
|
||||
.WORD 000000,021000,037042,020040,000000 ; ムラ
|
||||
.WORD 000000,003400,036005,036104,000000 ; ム'ワ
|
||||
|
||||
.WORD 031000,045112,045116,031112,000000 ; ゙
|
||||
.WORD 004000,021024,037042,021042,000000 ; A
|
||||
.WORD 037000,001002,021036,017042,000000 ; チ
|
||||
.WORD 021000,021042,021042,077042,000100 ; ヨ
|
||||
.WORD 036000,022044,022044,077044,000102 ; ト
|
||||
.WORD 037000,001002,001036,037002,000000 ; E
|
||||
.WORD 004000,025076,025052,004076,000000 ; ヤ
|
||||
.WORD 037000,001042,001002,001002,000000 ; テ
|
||||
.WORD 021000,012042,012010,021042,000000 ; ユ
|
||||
.WORD 021000,031042,023052,021042,000000 ; ネ
|
||||
.WORD 000034,031042,023052,021042,000000 ; ノ
|
||||
.WORD 021000,005022,005006,021022,000000 ; ハ
|
||||
.WORD 034000,022044,022044,021044,000000 ; ヒ
|
||||
.WORD 021000,025066,021052,021042,000000 ; フ
|
||||
.WORD 021000,021042,021076,021042,000000 ; ヘ
|
||||
.WORD 016000,021042,021042,016042,000000 ; ホ
|
||||
.WORD 037000,021042,021042,021042,000000 ; マ
|
||||
.WORD 036000,021042,024074,021044,000000 ; ゚
|
||||
.WORD 017000,021042,001036,001002,000000 ; ミ
|
||||
.WORD 016000,001042,001002,016042,000000 ; ム
|
||||
.WORD 037000,004010,004010,004010,000000 ; メ
|
||||
.WORD 021000,021042,004024,001004,000000 ; モ
|
||||
.WORD 025000,025052,025034,025052,000000 ; ニ
|
||||
.WORD 017000,021042,021036,017042,000000 ; ツ
|
||||
.WORD 001000,001002,021036,017042,000000 ; ワ
|
||||
.WORD 041000,041102,051116,047122,000000 ; ニ
|
||||
.WORD 016000,020042,020030,016042,000000 ; ヌ
|
||||
.WORD 021000,025052,025052,037052,000000 ; リ
|
||||
.WORD 007000,020020,020074,007020,000000 ; ン
|
||||
.WORD 021000,025052,025052,077052,000100 ; ル
|
||||
.WORD 021000,021042,020076,020040,000000 ; ラ
|
||||
.WORD 003400,002005,042074,036104,000000 ; 'ワ
|
789
ROM sources/BK-0010 driver module/D6.MAC
Normal file
789
ROM sources/BK-0010 driver module/D6.MAC
Normal file
@ -0,0 +1,789 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ************************************************
|
||||
; * *
|
||||
; * Д Р А Й В Е Р М А Г Н И Т О Ф О Н А *
|
||||
; * *
|
||||
; ************************************************
|
||||
|
||||
|
||||
|
||||
; ======================
|
||||
; *** КОНСТАНТЫ DMAG ***
|
||||
; ======================
|
||||
|
||||
ASPORT = 177716 ;- АДРЕС СИСТЕМНОГО ПОРТА
|
||||
APSTOP = 4 ;- АДРЕС ПЕРЕХОДА ПО "СТОП"
|
||||
|
||||
KDBIT0 = 100 ;- ДЛИНА БИТА НА ЗАПИСЬ
|
||||
KDBIT1 = 400 ;
|
||||
DRAZBR = 4 ;- ДИАПАЗОН РАЗБРОСА Н.П.
|
||||
|
||||
KPUSK = 20 ;- КОНС. ПУСК
|
||||
KSTOP = 220 ;- КОНС. СТОП
|
||||
KBIT00 = 20 ;- КОНС. -0
|
||||
KBIT10 = 60 ;- КОНС. -1
|
||||
KBIT01 = 160 ;- КОНС. +0
|
||||
KBIT11 = 120 ;- КОНС. +1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ==================================
|
||||
; ***** МОДУЛЬ УПРАВЛЕНИЯ DMAG *****
|
||||
; ==================================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС БЛОКА ПАРАМЕТРОВ
|
||||
|
||||
; R3 - АДРЕС ПОРТА
|
||||
|
||||
MDMAG: JSR R4,PSREG
|
||||
|
||||
MOV R1,ABP ; ПОДГ. ПАРАМ
|
||||
MOV #ASPORT,R3
|
||||
CLRB PROH
|
||||
CLR PRFCT
|
||||
|
||||
MOV @#APSTOP,-(SP) ; ПОДГ. ВЫХ. ПО "СТОП"
|
||||
MOV #AWDMAG,@#APSTOP
|
||||
MOV SP,BUFSP
|
||||
|
||||
MOVB (R1),R0 ; АНАЛИЗ КОМАНДЫ
|
||||
|
||||
BNE 1$ ;- СТОП
|
||||
MOV #KSTOP,(R3)
|
||||
BR KMDMAG
|
||||
|
||||
1$: DEC R0 ;- ПУСК
|
||||
BNE 2$
|
||||
MOV #KPUSK,(R3)
|
||||
BR KMDMAG
|
||||
|
||||
2$: DEC R0 ;- ЗАПИСЬ МАССИВА
|
||||
BNE 3$
|
||||
JSR PC,BZMAS
|
||||
BR KMDMAG
|
||||
|
||||
3$: DEC R0 ;- ЧТЕНИЕ МАССИВА
|
||||
BNE 4$
|
||||
5$: JSR PC,BCTMAS
|
||||
BR KMDMAG
|
||||
|
||||
4$: INC PRFCT ;- ФИКТИВНОЕ ЧТЕНИЕ МАССИВА
|
||||
DEC R0
|
||||
BEQ 5$
|
||||
|
||||
MOV #KDBIT0,DLBIT0 ;- УСТАНОВКА СКОРОСТИ ЗАПИСИ
|
||||
MOV #KDBIT1,DLBIT1
|
||||
BR 6$
|
||||
7$: ASR DLBIT0
|
||||
ASR DLBIT1
|
||||
6$: SOB R0,7$
|
||||
BR KMDMAG
|
||||
|
||||
AWDMAG: MOV BUFSP,SP ; АВАРИЙНЫЙ ВЫХОД ИЗ DMAG
|
||||
MOVB #4,PROH
|
||||
MOV #KSTOP,(R3) ;- ОСТАНОВ ДВИГАТЕЛЯ
|
||||
|
||||
KMDMAG: MOV ABP,R1 ; ВЫХОД
|
||||
MOVB PROH,1(R1)
|
||||
MOV (SP)+,@#APSTOP
|
||||
|
||||
JSR R4,PWREG
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
; ==============================
|
||||
; *** 1. БЛОК ЗАПИСИ МАССИВА ***
|
||||
; ==============================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС БЛОКА ПАРАМЕТРОВ
|
||||
|
||||
BZMAS: MOV #KPUSK,(R3) ; ПУСК ДВИГАТЕЛЯ
|
||||
|
||||
MOV 2(R1),R5 ; ПОДСЧЕТ КОНТРОЛЬНОЙ СУММЫ
|
||||
MOV 4(R1),R4
|
||||
BEQ 1$
|
||||
CLR R0
|
||||
2$: CLR R2
|
||||
BISB (R5)+,R2
|
||||
ADD R2,R0
|
||||
ADC R0
|
||||
SOB R4,2$
|
||||
MOV R0,BUFKS
|
||||
|
||||
MOV #11,R4 ; ЗАПИСЬ НАСТРОЕЧНОЙ ПОСЛЕДОВАТЕЛЬНОСТИ
|
||||
MOV #10000,R0
|
||||
BR 3$
|
||||
4$: MOV R4,R0
|
||||
3$: JSR PC,PZNP
|
||||
SOB R4,4$
|
||||
|
||||
MOV (R1)+,R0 ; ЗАПИСЬ ИМЕНИ
|
||||
MOV #24,R2
|
||||
JSR PC,PZBL
|
||||
|
||||
MOV ABP,R1 ; ЗАПИСЬ МАССИВА
|
||||
MOV 4(R1),R2
|
||||
MOV 2(R1),R1
|
||||
JSR PC,PZBL
|
||||
|
||||
MOV #BUFKS,R1 ; ЗАПИСЬ KS
|
||||
MOV #10,R2
|
||||
JSR PC,PZBL
|
||||
|
||||
1$: MOV #KSTOP,(R3) ;- ОСТАНОВ ДВИГАТЕЛЯ
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ------------------------------------------------
|
||||
; ** 1.1. ЗАПИСЬ НАСТРОЕЧНОЙ ПОСЛЕДОВАТЕЛЬНОСТИ **
|
||||
; ------------------------------------------------
|
||||
|
||||
; ВХОД: R0 - СЧЕТЧИК НУЛЕВЫХ ИМПУЛЬСОВ
|
||||
|
||||
; ВЫХОД: C = 0
|
||||
|
||||
; R0,R5 - РАБОЧИЕ
|
||||
|
||||
PZNP: BCS 1$
|
||||
|
||||
2$: JSR PC,PZ0P ; ЗАПИСЬ 0 В ЦИКЛЕ
|
||||
1$: JSR PC,PZ0M
|
||||
SOB R0,2$
|
||||
|
||||
JSR PC,PZ1P ; ЗАПИСЬ МАРКЕРА(+1,-1)
|
||||
JSR PC,PZ1M
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -----------------------
|
||||
; ** 1.2. ЗАПИСЬ БЛОКА **
|
||||
; -----------------------
|
||||
|
||||
; ВХОД: R1 - АДРЕС БЛОКА
|
||||
; R2 - ДЛИНА БЛОКА
|
||||
|
||||
; R0 - R2,R4,R5 - РАБОЧИЕ
|
||||
|
||||
PZBL: MOV #20,R0 ; ЗАПИСЬ БУФ. ПОСЛЕД.
|
||||
JSR PC,PZNP
|
||||
|
||||
PZBL1: BISB (R1)+,R0 ;- ПОДГОТОВКА БАЙТА
|
||||
MOV #10,R4
|
||||
|
||||
PZB: BCS PZMBIT ; ЗАПИСЬ БАЙТА
|
||||
|
||||
ASR R0
|
||||
BCS 1$
|
||||
JSR PC,PZ0P ;- ЗАПИСЬ +0
|
||||
BR KZB
|
||||
|
||||
1$: JSR PC,PZ1P ;- ЗАПИСЬ +1
|
||||
BR KZB
|
||||
|
||||
PZMBIT: ASR R0
|
||||
BCS 1$
|
||||
JSR PC,PZ0M ;- ЗАПИСЬ -0
|
||||
BR KZB
|
||||
|
||||
1$: JSR PC,PZ1M ;- ЗАПИСЬ -1
|
||||
BR KZB
|
||||
|
||||
KZB: SOB R4,PZB ; КОНЕЦ ЗАПИСИ БАЙТА
|
||||
|
||||
KZBL: SOB R2,PZBL1 ; КОНЕЦ ЗАПИСИ БЛОКА
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ----------------------
|
||||
; ** 1.3. ЗАПИСЬ БИТА **
|
||||
; ----------------------
|
||||
|
||||
PZ0P: MOV #KBIT01,(R3) ; ЗАПИСЬ +0
|
||||
MOV DLBIT0,R5
|
||||
1$: SOB R5,1$
|
||||
SEC
|
||||
RTS PC
|
||||
|
||||
PZ0M: MOV #KBIT00,(R3) ; ЗАПИСЬ -0
|
||||
MOV DLBIT0,R5
|
||||
1$: SOB R5,1$
|
||||
CLC
|
||||
RTS PC
|
||||
|
||||
|
||||
PZ1P: MOV #KBIT11,(R3) ; ЗАПИСЬ +1
|
||||
MOV DLBIT1,R5
|
||||
1$: SOB R5,1$
|
||||
SEC
|
||||
RTS PC
|
||||
|
||||
PZ1M: MOV #KBIT10,(R3) ; ЗАПИСЬ -1
|
||||
MOV DLBIT1,R5
|
||||
1$: SOB R5,1$
|
||||
CLC
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
; ==============================
|
||||
; *** 2. БЛОК ЧТЕНИЯ МАССИВА ***
|
||||
; ==============================
|
||||
|
||||
|
||||
; R0 - R5 - РАБОЧИЕ
|
||||
; R5 - МАСКА ИНФОРМАЦИОННОГО РАЗРЯДА
|
||||
|
||||
BCTMAS: MOV #40,R5 ; ПОДГ.ПАРАМ. И ПУСК ДВИГАТЕЛЯ
|
||||
MOV #KPUSK,(R3)
|
||||
MOV #1,INCADR
|
||||
|
||||
CLR PROH
|
||||
JSR PC,PPNF ; ПОИСК НАЧАЛА ФАЙЛА
|
||||
|
||||
JSR PC,PCTIM ; ЧТЕНИЕ IMMAS
|
||||
TSTB PROH
|
||||
BNE KCTMAS
|
||||
|
||||
JSR PC,PCTMAS ; ЧТЕНИЕ БЛОКА ИНФОРМАЦИИ
|
||||
MOV #KSTOP,(R3)
|
||||
|
||||
KCTMAS: RTS PC
|
||||
|
||||
|
||||
; -----------------------------
|
||||
; ** 2.1. ПОИСК НАЧАЛА ФАЙЛА **
|
||||
; -----------------------------
|
||||
|
||||
PPNF: MOV #2000,R2 ; ПОИСК НУЛЕЙ
|
||||
CLR R0
|
||||
|
||||
4$: CLR R4 ;- ЧТЕНИЕ ИМПУЛЬСА
|
||||
1$: BIT R5,(R3)
|
||||
BEQ 1$
|
||||
2$: INC R4
|
||||
BIT R5,(R3)
|
||||
BNE 2$
|
||||
|
||||
SUB R4,R0 ; ОПРЕДЕЛЕНИЕ РАЗБРОСА
|
||||
BMI 3$
|
||||
CMP R0,#DRAZBR
|
||||
BHI PPNF
|
||||
3$: MOV R4,R0
|
||||
SOB R2,4$
|
||||
|
||||
CLR R0 ; НАСТРОЙКА НА СКОРОСТЬ
|
||||
MOV #100,R2
|
||||
5$: JSR PC,PCTBIT ;- СЧЕТ ИМПУЛЬСОВ
|
||||
ADD R4,R0
|
||||
SOB R2,5$
|
||||
|
||||
MOV #5,R2 ;- ВЫЧИСЛЕНИЕ ГРАНИЦЫ 0
|
||||
6$: ASR R0
|
||||
SOB R2,6$
|
||||
ADD #4,R0
|
||||
MOV R0,GRDL0
|
||||
|
||||
JSR PC,PPM ; ПРОВЕРКА КЛЮЧА
|
||||
MOV #20,R0
|
||||
11$: MOV R0,R2
|
||||
10$: JSR PC,PCTBIT
|
||||
BCS PPNF
|
||||
SOB R2,10$
|
||||
JSR PC,PCTBIT
|
||||
BCC PPNF
|
||||
JSR PC,PCTBIT
|
||||
BCC PPNF
|
||||
DEC R0
|
||||
SOB R0,11$
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; -------------------------------
|
||||
; ** 2.2. ЧТЕНИЕ ИМЕНИ МАССИВА **
|
||||
; -------------------------------
|
||||
|
||||
PCTIM: MOV ABP,R1 ; ЧТЕНИЕ ИМЕНИ
|
||||
ADD #26,R1
|
||||
MOV #24,R2
|
||||
JSR PC,PCTBL
|
||||
|
||||
MOV #10,R2
|
||||
2$: CMP -(R1),-24(R1) ; СРАВНЕНИЕ ИМЕН
|
||||
BNE 1$
|
||||
SOB R2,2$
|
||||
|
||||
MOV -(R1),BUFDL ;- УСТ. ДЛИНЫ МАССИВА
|
||||
MOV -26(R1),BUFSTA ;- УСТ. СТАРТ. АДРЕСА
|
||||
BNE KCTIM
|
||||
MOV -(R1),BUFSTA
|
||||
BR KCTIM
|
||||
|
||||
1$: INCB PROH
|
||||
|
||||
KCTIM: RTS PC
|
||||
|
||||
|
||||
; -------------------------
|
||||
; ** 2.3. ЧТЕНИЕ МАССИВА **
|
||||
; -------------------------
|
||||
|
||||
PCTMAS: MOV BUFSTA,R1 ; ЧТЕНИЕ МАССИВА
|
||||
MOV BUFDL,R2
|
||||
SUB PRFCT,INCADR
|
||||
BNE 1$
|
||||
MOV #BUFKS,R1 ;- ФИКТИВНОЕ ЧТЕНИЕ
|
||||
1$: JSR PC,PCTBL
|
||||
MOV R0,-(SP)
|
||||
|
||||
MOV #BUFKS,R1 ; ЧТЕНИЕ KS
|
||||
MOV #2,R2
|
||||
MOV #1,INCADR
|
||||
JSR PC,PCTBL
|
||||
|
||||
CMP (SP)+,BUFKS ; СРАВНЕНИЕ KS
|
||||
BEQ KCTM
|
||||
MOVB #2,PROH
|
||||
|
||||
KCTM: RTS PC
|
||||
|
||||
|
||||
; -----------------------
|
||||
; ** 2.4. ЧТЕНИЕ БЛОКА **
|
||||
; -----------------------
|
||||
|
||||
; ВХОД: R1 - АДРЕС ОЗУ
|
||||
; R2 - ДЛИНА БЛОКА
|
||||
|
||||
; ВЫХОД: R0 - КОНТРОЛЬНАЯ СУММА
|
||||
|
||||
PCTBL: JSR PC,PPM ; ПОИСК МАРКЕРА
|
||||
CLR -(SP)
|
||||
|
||||
2$: MOV #10,R0 ; ЧТЕНИЕ БЛОКА
|
||||
|
||||
1$: JSR PC,PCTBIT ; ЧТЕНИЕ БАЙТА
|
||||
RORB (R1)
|
||||
SOB R0,1$
|
||||
|
||||
BISB (R1),R0 ;- ПОДСЧЕТ KS
|
||||
ADD R0,(SP)
|
||||
ADC (SP)
|
||||
|
||||
ADD INCADR,R1 ;- ИЗМЕНЕНИЕ АДРЕСА
|
||||
SOB R2,2$
|
||||
|
||||
MOV (SP)+,R0
|
||||
KCTBL: RTS PC
|
||||
|
||||
|
||||
; ----------------------
|
||||
; ** 2.5. ЧТЕНИЕ БИТА **
|
||||
; ----------------------
|
||||
|
||||
; ВЫХОД: C = 0 - 0 БИТ
|
||||
; C = 1 - 1 БИТ
|
||||
|
||||
; R4 - РАБОЧИЙ
|
||||
|
||||
PCTBIT: CLR R4 ; СЧЕТЧИК ДЛИНЫ БИТА
|
||||
|
||||
BIT R5,(R3)
|
||||
BEQ 1$
|
||||
|
||||
2$: INC R4 ; +
|
||||
BIT R5,(R3)
|
||||
BNE 2$
|
||||
BR 3$
|
||||
|
||||
1$: INC R4 ; -
|
||||
BIT R5,(R3)
|
||||
BEQ 1$
|
||||
|
||||
3$: CMP GRDL0,R4 ;- УСТАНОВКА БИТА C
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
; ------------------------
|
||||
; ** 2.6. ПОИСК МАРКЕРА **
|
||||
; ------------------------
|
||||
|
||||
; R4 - РАБОЧИЙ
|
||||
|
||||
PPM: JSR PC,PCTBIT
|
||||
BCC PPM
|
||||
JSR PC,PCTBIT
|
||||
BCC PPM
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; **********************************************
|
||||
; * *
|
||||
; * Д Р А Й В Е Р Т Л Г - К А Н А Л А *
|
||||
; * *
|
||||
; **********************************************
|
||||
|
||||
|
||||
|
||||
; ======================
|
||||
; *** КОНСТАНТЫ DTLG ***
|
||||
; ======================
|
||||
|
||||
|
||||
ASPORT = 177716 ;- АДРЕС СИСТЕМНОГО ПОРТА
|
||||
|
||||
KTLG0 = 200 ;- КОНС. УСТАНОВКИ 0
|
||||
KTLG1 = 220 ;- КОНС. УСТАНОВКИ 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =====================================
|
||||
; ***** МОДУЛЬ ИНИЦИАЛИЗАЦИИ DTLG *****
|
||||
; =====================================
|
||||
|
||||
|
||||
; ВХОД: R0 - НОМЕР ЗНАЧЕНИЯ СКОРОСТИ
|
||||
|
||||
|
||||
MIDTLG: ASL R0
|
||||
MOV KDLBIT(R0),DLBIT
|
||||
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =================================
|
||||
; ***** МОДУЛЬ ПЕРЕДАЧИ БАЙТА *****
|
||||
; =================================
|
||||
|
||||
|
||||
; ВХОД: R0 - МЛ. БАЙТ
|
||||
|
||||
|
||||
MPDBYT:
|
||||
|
||||
|
||||
|
||||
; ===========================
|
||||
; *** БЛОК ПЕРЕДАЧИ БАЙТА ***
|
||||
; ===========================
|
||||
|
||||
|
||||
BPDB: MOV R0,-(SP)
|
||||
MOV R4,-(SP)
|
||||
|
||||
BIS #1400,R0 ; ПОДГ. ПАРАМЕТРОВ
|
||||
MOV #13,R4
|
||||
|
||||
6$: BIT #200,@#ASPORT ; ОЖ. ГОТОВНОСТИ
|
||||
BEQ 6$
|
||||
|
||||
CLC ; УСТАНОВКА БИТА
|
||||
BR 1$
|
||||
4$: ASR R0
|
||||
1$: BCC 2$
|
||||
MOV #KTLG1,@#ASPORT
|
||||
BR 3$
|
||||
2$: MOV #KTLG0,@#ASPORT
|
||||
BR 3$
|
||||
|
||||
3$: MOV DLBIT,R5 ; ЦИКЛ ПЕРЕДАЧИ БИТА
|
||||
5$: SOB R5,5$
|
||||
|
||||
SOB R4,4$
|
||||
|
||||
MOV (SP)+,R4
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ===============================
|
||||
; ***** МОДУЛЬ ПРИЕМА БАЙТА *****
|
||||
; ===============================
|
||||
|
||||
|
||||
; ВЫХОД: R0 - МЛ. БАЙТ
|
||||
|
||||
|
||||
MPRBYT:
|
||||
|
||||
|
||||
|
||||
; =========================
|
||||
; *** БЛОК ПРИЕМА БАЙТА ***
|
||||
; =========================
|
||||
|
||||
|
||||
BPRB: MTPS #0 ;- РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ
|
||||
MOV R3,-(SP)
|
||||
MOV R4,-(SP)
|
||||
|
||||
MOV #ASPORT,R3 ; ПОДГ. ПАРАМ.
|
||||
MOV #20,R4 ;- СЧЕТЧИК БАЙТА
|
||||
CLR R0
|
||||
|
||||
1$: BIT R4,(R3) ; ПОИСК СТАРТОВОГО БИТА
|
||||
BEQ 1$
|
||||
11$: MOV #260,(R3) ;- УСТ. ГОТОВН. ПРИЕМА
|
||||
BIT R4,(R3)
|
||||
BNE 11$
|
||||
MTPS #200 ;- ЗАПРЕТ ПРЕРЫВАНИЙ
|
||||
|
||||
MOV DLBIT,R5 ; ПОИСК СЕРЕД. СТ. БИТА
|
||||
ASR R5
|
||||
2$: SOB R5,2$
|
||||
ASR R4
|
||||
|
||||
6$: MOV DLBIT,R5 ;- ЧТЕНИЕ БАЙТА
|
||||
3$: SOB R5,3$
|
||||
BIT #20,(R3)
|
||||
BNE 4$
|
||||
CLC
|
||||
BR 5$
|
||||
4$: SEC
|
||||
BR 5$
|
||||
5$: RORB R0
|
||||
SOB R4,6$
|
||||
MOV #220,(R3) ;- СБРОС ГОТОВН. ПРИЕМА
|
||||
|
||||
MOV (SP)+,R4
|
||||
MOV (SP)+,R3
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ===================================
|
||||
; ***** МОДУЛЬ ПЕРЕДАЧИ МАССИВА *****
|
||||
; ===================================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС МАССИВА
|
||||
; R2 - ДЛИНА МАССИВА В БАЙТАХ
|
||||
|
||||
|
||||
MPDMAS: MOV R0,-(SP)
|
||||
|
||||
1$: MOVB (R1)+,R0 ; ПЕРЕДАЧА МАССИВА
|
||||
JSR PC,BPDB
|
||||
SOB R2,1$
|
||||
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; =================================
|
||||
; ***** МОДУЛЬ ПРИЕМА МАССИВА *****
|
||||
; =================================
|
||||
|
||||
|
||||
; ВХОД: R1 - АДРЕС ПАМЯТИ ДЛЯ МАССИВА
|
||||
; R2 - ДЛИНА МАССИВА В БАЙТАХ
|
||||
|
||||
|
||||
MPRMAS: MOV R0,-(SP)
|
||||
|
||||
1$: JSR PC,BPRB ; ПРИЕМ МАССИВА
|
||||
MOVB R0,(R1)+
|
||||
SOB R2,1$
|
||||
|
||||
MOV (SP)+,R0
|
||||
RTS PC
|
||||
|
||||
|
||||
|
||||
; ===================
|
||||
; *** ДАННЫЕ DTLG ***
|
||||
; ===================
|
||||
|
||||
|
||||
KDLBIT: ; КОНСТАНТЫ ДЛИНЫ БИТА
|
||||
DL9600: .WORD 14
|
||||
DL4800: .WORD 36
|
||||
DL2400: .WORD 103
|
||||
DL1200: .WORD 213
|
||||
DL600: .WORD 435
|
||||
DL300: .WORD 1100
|
||||
DL200: .WORD 1542
|
||||
DL150: .WORD 2206
|
||||
DL110: .WORD 3300
|
||||
DL75: .WORD 4422
|
||||
DL50: .WORD 6633
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ================================
|
||||
; ***** БЛОК ПЕРЕМЕННЫХ DMBK *****
|
||||
; ================================
|
||||
|
||||
|
||||
.ASECT
|
||||
|
||||
|
||||
; ===============================
|
||||
; *** СИСТЕМНЫЕ ПРИЗНАКИ DMBK ***
|
||||
; ===============================
|
||||
|
||||
. = 40
|
||||
|
||||
SYSPR:
|
||||
PRCW: .BYTE 0 ;- ПРИЗНАК ЦВЕТНОГО РЕЖИМА
|
||||
PRINWF: .BYTE 0 ;- ПРИЗНАК ИНВЕРСИИ ФОНА
|
||||
PRRP: .BYTE 0 ;- ПРИЗНАК РАСШИРЕННОЙ ПАМЯТИ
|
||||
PRRUS: .BYTE 0 ;- ПРИЗНАК РУССКОГО РЕГИСТРА
|
||||
PRPODC: .BYTE 0 ;- ПРИЗНАК ПОДЧЕРКИВАНИЯ СИМВОЛА
|
||||
PRINWS: .BYTE 0 ;- ПРИЗНАК ИНВЕРСИИ СИМВОЛА
|
||||
PRISU: .BYTE 0 ;- ПРИЗНАК ИНДИКАЦИИ СУ
|
||||
PRBLR: .BYTE 0 ;- ПРИЗНАК БЛОКИРОВКИ РЕДАКТИРОВАНИЯ
|
||||
PRGRAF: .BYTE 0 ;- ПРИЗНАК ГРАФИЧЕСКОГО РЕЖИМА
|
||||
PRZAP: .BYTE 0 ;- ПРИЗНАК РЕЖИМА ЗАПИСИ
|
||||
PRSTIR: .BYTE 0 ;- ПРИЗНАК РЕЖИМА СТИРАНИЯ
|
||||
PRCWSS: .BYTE 0 ;- ПРИЗНАК ЦВЕТНОГО РЕЖИМА В СС
|
||||
PRPSSS: .BYTE 0 ;- ПРИЗНАК ПОДЧЕРКИВАНИЯ СИМВОЛА В СС
|
||||
PRISSS: .BYTE 0 ;- ПРИЗНАК ИНВЕРСИИ СИМВОЛА В СС
|
||||
PRGAHK: .BYTE 0 ;- ПРИЗНАК ГАШЕНИЯ КУРСОРА
|
||||
|
||||
|
||||
|
||||
; ========================
|
||||
; *** ПЕРЕМЕННЫЕ DKLAW ***
|
||||
; ========================
|
||||
|
||||
. = 100
|
||||
|
||||
WPTM: .WORD 0 ;- ВЕКТОР ПРЕРЫВАНИЯ ТАЙМЕРА
|
||||
SSPTM: .WORD 0 ;- СЛОВО СОСТОЯНИЯ ПРЦ
|
||||
|
||||
BUFKL: .BYTE 0 ;- БУФЕР КЛАВИАТУРЫ
|
||||
PRZKB: .BYTE 0 ;- ПРИЗНАК ЗАПИСИ КОДА В БУФЕР
|
||||
BKPOWT: .WORD 0 ;- БУФЕР КОНСТАНТЫ ПОВТОРА
|
||||
PRPOWT: .BYTE 0 ;- ПРИЗНАК ПОВТОРА КОДА
|
||||
|
||||
SCTAB: .BYTE 0 ;- СЧЕТЧИК ТАБУЛЯЦИИ
|
||||
MTAB: .BLKW 4 ;- МАСКА ТАБУЛЯЦИИ
|
||||
|
||||
SCKLC: .BYTE 0 ;- СЧЕТЧИК КЛЮЧА
|
||||
.EVEN
|
||||
TAKLC: .WORD 0 ;- ТЕКУЩИЙ АДРЕС КЛЮЧА
|
||||
AKLC: .BLKW 12 ; АДРЕСА КЛЮЧЕЙ
|
||||
|
||||
|
||||
|
||||
; ========================
|
||||
; *** ПЕРЕМЕННЫЕ DTVMN ***
|
||||
; ========================
|
||||
|
||||
|
||||
PRNRUL: .BYTE 0 ;- ПРИЗНАК НАРУШЕНИЯ РУЛОНА
|
||||
|
||||
PRZTCK: .BYTE 0 ;- ПРИЗНАК ЗАПИСИ ТОЧКИ
|
||||
MASPGT: .BYTE 0 ;- МАСКА ПОЗИЦИИ ГТ
|
||||
NMPGT: .BYTE 0 ;- НАЧАЛЬНАЯ МАСКА ПОЗИЦИИ ГТ
|
||||
|
||||
NOMSIM: .WORD 0 ;- НОМЕР СИМВОЛА НА ЭКРАНЕ
|
||||
AS: .WORD 0 ;- АДРЕС СИМВОЛА
|
||||
DSIMB: .WORD 0 ;- ДЛИНА СИМВОЛА В БАЙТАХ
|
||||
KSVP: .WORD 0 ;- КОЛИЧЕСТВО СИМВОЛОВ НА ЭКРАНЕ
|
||||
|
||||
AGTVP: .WORD 0 ;- АДРЕС ГТ НА ЭКРАНЕ
|
||||
AGT: .WORD 0 ;- АДРЕС ГТ
|
||||
DGW: .WORD 0 ;- ДЛИНА ГРАФИЧЕСКОГО ВЕКТОРА
|
||||
SCTVS: .WORD 0 ;- СЧЕТЧИК TV-СТРОК
|
||||
BUFX: .WORD 0 ;- БУФЕР КООРДИНАТЫ X
|
||||
BUFY: .WORD 0 ;- БУФЕР КООРДИНАТЫ Y
|
||||
|
||||
ANVP: .WORD 0 ;- АДРЕС НАЧАЛА ВИДЕОПАМЯТИ
|
||||
BAZVP: .WORD 0 ;- БАЗА ВИДЕОПАМЯТИ
|
||||
DVPB: .WORD 0 ;- ДЛИНА ВИДЕОПАМЯТИ В БАЙТАХ
|
||||
DGPB: .WORD 0 ;- ДЛИНА ГРАФ. ПАМЯТИ В БАЙТАХ
|
||||
|
||||
FON: .WORD 0 ;- ФОН ЭКРАНА
|
||||
MASCW: .WORD 0 ;- МАСКА ЦВЕТА
|
||||
FONSS: .WORD 0 ;- ФОН СС
|
||||
MCWSS: .WORD 0 ;- МАСКА ЦВЕТА СС
|
||||
|
||||
SCKOD: .WORD 0 ;- СЧЕТЧИК КОДОВ
|
||||
SCUIND: .WORD 0 ;- СЧЕТЧИК УСТАНОВКИ ИНДИКАТОРОВ
|
||||
|
||||
|
||||
|
||||
; =======================
|
||||
; *** ПЕРЕМЕННЫЕ DMAG ***
|
||||
; =======================
|
||||
|
||||
. = 300
|
||||
|
||||
PROH: .BYTE 0 ;- ПРИЗНАК ОШИБКИ
|
||||
.EVEN
|
||||
PRFCT: .WORD 0 ;- ПРИЗНАК ФИКТИВНОГО ЧТЕНИЯ
|
||||
INCADR: .WORD 0 ;- ИНКРЕМЕНТ АДРЕСА МАССИВА
|
||||
|
||||
ABP: .WORD 0 ;- АДРЕС БЛОКА ПАРАМЕТРОВ
|
||||
BUFSP: .WORD 0 ;- БУФЕР УКАЗАТЕЛЯ СТЕКА
|
||||
BUFKS: .WORD 0 ;- БУФЕР КОНТРОЛЬНОЙ СУММЫ
|
||||
|
||||
GRDL0: .WORD 0 ;- ГРАНИЦА ДЛИНЫ 0
|
||||
|
||||
. = 320
|
||||
|
||||
BPDMAG: ; БЛОК ПАРАМЕТРОВ DMAG
|
||||
KOM: .BYTE 0 ;- КОМАНДА
|
||||
OTWET: .BYTE 0 ;- ОТВЕТ
|
||||
ADRMAS: .WORD 0 ;- АДРЕС МАССИВА
|
||||
DLMAS: .WORD 0 ;- ДЛИНА МАССИВА НА ЗАПИСЬ
|
||||
IMMAS: .BLKB 20 ;- ИМЯ МАССИВА
|
||||
ADRTM: .WORD 0 ;- АДРЕС ТЕКУЩЕГО МАССИВА
|
||||
DLTMAS: .WORD 0 ;- ДЛИНА ТЕКУЩЕГО МАССИВА
|
||||
IMTMAS: .BLKB 20 ;- ИМЯ ТЕКУЩЕГО МАССИВА
|
||||
|
||||
|
||||
|
||||
; =================================
|
||||
; *** СИСТЕМНЫЕ ПЕРЕМЕННЫЕ DMBK ***
|
||||
; =================================
|
||||
|
||||
|
||||
. = 250
|
||||
|
||||
DLBIT0: .WORD 0 ;- ДЛИНА 0 DMAG
|
||||
DLBIT1: .WORD 0 ;- ДЛИНА 1 DMAG
|
||||
DLBIT: .WORD 0 ;- ДЛИНА БИТА DTLG
|
||||
KPORT: .WORD 0 ;- КОПИЯ ПОРТА
|
||||
APOPKL: .WORD 0 ;- АДР.ПРОГР.ОБР.ПРЕР.ОТ КЛАВ.
|
||||
PRWK: .WORD 0 ;- ПРИЗНАК КОДА ВК
|
||||
BUFSTA: .WORD 0 ;- БУФЕР СТАРТОВОГО АДРЕСА
|
||||
BUFDL: .WORD 0 ;- БУФЕР ДЛИНЫ МАССИВА
|
||||
|
||||
|
||||
|
||||
.END
|
BIN
ROM sources/BK-0011 driver module/120000.SAV
Normal file
BIN
ROM sources/BK-0011 driver module/120000.SAV
Normal file
Binary file not shown.
BIN
ROM sources/BK-0011 driver module/140000.SAV
Normal file
BIN
ROM sources/BK-0011 driver module/140000.SAV
Normal file
Binary file not shown.
324
ROM sources/BK-0011 driver module/BCIRCL.MAC
Normal file
324
ROM sources/BK-0011 driver module/BCIRCL.MAC
Normal file
@ -0,0 +1,324 @@
|
||||
.Mcall .Module
|
||||
.Module BCIRCL,Release=X02, Version=02, Comment=<BK0011 Circle Drawing>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl Point,Vector
|
||||
.Psect $CodOvr
|
||||
.SbTtl Circle Routine (Circle Drawing)
|
||||
;
|
||||
; This Routine draws the circle or circle arc with parameters specified.
|
||||
; Routine Uses All the registers (R0..R5).
|
||||
; Input parametres are in static memory area:
|
||||
;
|
||||
; $XC - X coordinate of arc center
|
||||
; $YC - Y coordinate of arc center
|
||||
; $RAD - circle or arc radius
|
||||
; $BEG - Start angle
|
||||
; $END - End angle
|
||||
; $CX - X-Coordinate concise coeffitient
|
||||
; $CY - Y-Coordinate concise coeffitient
|
||||
;
|
||||
;$BEG and $END - Integer number 0...77777 (Octal)
|
||||
;0 -> 0
|
||||
;77777 -> 2*pi
|
||||
;
|
||||
;If number given less than <0, absolute value of parameter
|
||||
;is angle, appropriate point of arc concatenated with arc center.
|
||||
;
|
||||
;$CX, $CY - 0..177777, If equal zero than no concise, else
|
||||
; Real Coordinate X = X * $CX / 2 ** 16
|
||||
; Real Coordinate Y = Y * $CY / 2 ** 16
|
||||
;
|
||||
CIRCLE::
|
||||
Clr $LB ; Clear LE and LB (Sign Flags)
|
||||
ClrB $LE
|
||||
Clr $INV
|
||||
Mov #BufOut,R0 ; Clear "BufOut" Buffer
|
||||
Mov #4,R1
|
||||
10$: Clr (R0)+
|
||||
Sob R1,10$
|
||||
Mov $BEG,R1 ; Test initial angle
|
||||
Bpl 20$
|
||||
Neg R1 ; Get absolute value
|
||||
IncB $LB ; and set flag
|
||||
20$: Mov R1,-(SP) ; store initial angle
|
||||
Call Octet ; Compute octet and coordinate
|
||||
Mov R1,$$BEG ; Store initial coordinate
|
||||
Mov R5,R4 ; and octet No
|
||||
Mov $END,R1 ; Process ending point
|
||||
Bpl 30$
|
||||
Neg R1
|
||||
IncB $LE
|
||||
30$: Mov R1,-(SP) ; Store End point
|
||||
Call Octet
|
||||
Mov R1,$$END ; Ending coordinate
|
||||
BisB #2,BufOut(R4) ; Mark begin
|
||||
Cmp R4,R5 ; End sector=Begin sector?
|
||||
Bne 40$ ; No...
|
||||
Cmp (SP)+,(SP)+ ; Compare End and Begin Coordinates
|
||||
Bgt 60$ ; End > Begin - normal direction
|
||||
Inc $INV ; Mark Inverse Direction
|
||||
Br 50$
|
||||
40$: Cmp (SP)+,(SP)+ ; Clear Stack
|
||||
50$: Inc R4 ; Increase octet No
|
||||
Bic #^C7,R4
|
||||
Cmp R4,R5 ; last octet?
|
||||
Beq 60$ ; Yes
|
||||
BisB #200,BufOut(R4) ; Set "Always write" Flag
|
||||
Br 50$
|
||||
60$: BisB #4,BufOut(R4) ; Set "Test the end" Flag
|
||||
.SbTtl Second part of Routine - Drawing proper
|
||||
;
|
||||
;Register are:
|
||||
; R1- Relative X
|
||||
; R2- Relative Y
|
||||
; R5- Sector's Counter
|
||||
; R0- D
|
||||
; R3 and R4 are working
|
||||
;
|
||||
Clr R1 ; X=0
|
||||
Mov $RAD,R2 ; Y=R
|
||||
Mov R2,R0
|
||||
Asl R0
|
||||
Neg R0
|
||||
Add #3,R0 ; D=3-2*R
|
||||
|
||||
.SbTtl Main Loop of Drawing Algorithm
|
||||
|
||||
70$: Cmp R1,R2
|
||||
Bgt 100$ ; If(X>Y) - Than Exit
|
||||
; Else {
|
||||
Call DRAW8 ; Write eigth points of circle
|
||||
Tst R0 ; If D<0
|
||||
Bge 80$
|
||||
Mov R1,R3 ; Then D = D+4*X+6
|
||||
Asl R3
|
||||
Asl R3
|
||||
Add #6,R3
|
||||
Add R3,R0
|
||||
Br 90$
|
||||
80$: Mov R1,R3 ; Else D = D+4*(X-Y)+10.
|
||||
Sub R2,R3 ;; X - Y
|
||||
Asl R3
|
||||
Asl R3
|
||||
Add #10.,R3
|
||||
Add R3,R0
|
||||
Dec R2 ; Y--
|
||||
90$: ;/* EndIf*/
|
||||
Inc R1 ; X++
|
||||
Br 70$
|
||||
|
||||
100$: Return
|
||||
.SbTtl DRAW8 - Selective drawing of arc points
|
||||
;
|
||||
;Input:
|
||||
;R1 - Relative X-coordinate of point
|
||||
;R2 - Relative Y-coordinate of point
|
||||
;
|
||||
;This routine also uses $XC, $YC, $BEG, $END, $CX, $CY and Bufout Data
|
||||
;
|
||||
DRAW8: Mov R0,-(SP) ;Save R0 Thru r2
|
||||
Mov R1,-(SP)
|
||||
Mov R2,-(SP)
|
||||
Mov #7,R5 ;sektor No
|
||||
;
|
||||
;Sector's Loop
|
||||
;
|
||||
10$: Clr R4 ; Clear "Radius Drawing" flag
|
||||
Mov (SP),R2 ;Restore original Y
|
||||
Mov 2(SP),R1 ; and X Coordinates
|
||||
MovB BufOut(R5),R0 ;Test Flags for sector processing
|
||||
Beq 90$ ; == 0 --> skip this sector
|
||||
Bmi 30$ ; < 0 --> Draw All points
|
||||
Call @TTAB-2(R0) ; > 0 --> Check Cordinates
|
||||
Bcs 90$ ; Not draw this point
|
||||
30$: Bit #2,R5 ; swap Coordinates ?
|
||||
Beq 40$ ; No...
|
||||
Mov R1,R3
|
||||
Mov R2,R1 ; Swap(X,Y)
|
||||
Mov R3,R2
|
||||
40$: Mov R5,-(SP) ; Store temporary
|
||||
Mov $CX,R3 ; X-Scaling
|
||||
Beq 50$ ; not used...
|
||||
Call CMul ; Used...
|
||||
50$: Mov $CY,R3 ; Y-Scaling processing
|
||||
Beq 60$
|
||||
Mov R1,-(SP)
|
||||
Mov R2,R1
|
||||
Call CMul
|
||||
Mov R1,R2
|
||||
Mov (SP)+,R1
|
||||
60$: Mov (SP)+,R5 ; Restore Octet No
|
||||
MovB SIGS(R5),R0 ; Table of signs
|
||||
Bpl 70$ ; X-Sign
|
||||
Neg R1 ; is "-"
|
||||
70$: AslB R0 ; Y-Sign
|
||||
Bpl 80$ ; "+"
|
||||
Neg R2 ; "-"
|
||||
80$: Add $XC,R1 ; Get Absolute coordinates
|
||||
Add $YC,R2 ; ....
|
||||
Call Point ;Draw the point
|
||||
Tst R4 ;Radius Drawing?
|
||||
Beq 90$ ;No
|
||||
Mov $XC,R1
|
||||
Mov $YC,R2
|
||||
Call Vector ;Write Vector
|
||||
90$: Dec R5 ;Goto the Next Octet
|
||||
Bpl 10$
|
||||
Mov (SP)+,R2 ;All done, Restore registers and exit
|
||||
Mov (SP)+,R1
|
||||
Mov (SP)+,R0
|
||||
Return
|
||||
TTAB: .Word TBeg, TEnd, TAll
|
||||
;
|
||||
;Octet Signs Table
|
||||
;
|
||||
SigS: .BYTE 100, 300, 300, 200; mask 200 - "-X"
|
||||
.BYTE 200, 0, 0, 100 ; mask 100 - "-Y"
|
||||
.Enabl LSB
|
||||
.SbTtl Points Testing ROutines
|
||||
TBEG: Mov $$BEG,R3 ; Bound Value
|
||||
Call TEST
|
||||
Bgt 20$ ; Not Draw
|
||||
Bne 10$ ; not at bound, Draw
|
||||
TstB $LB ; Initial Radius Drawing ?
|
||||
15$: Beq 10$ ; No
|
||||
Inc R4 ; Yes, Mark...
|
||||
10$: Tst (PC)+
|
||||
20$: SeC
|
||||
Return
|
||||
|
||||
TEND: Mov $$END,R3
|
||||
Call TEST
|
||||
BlT 20$
|
||||
Bne 10$
|
||||
TstB $LE
|
||||
Br 15$
|
||||
|
||||
TALL: Clr R0
|
||||
Call TBEG
|
||||
Adc R0
|
||||
Call TEND
|
||||
Adc R0 ;Now R0=0
|
||||
Sub $INV,R0
|
||||
Bgt 20$
|
||||
Br 10$
|
||||
|
||||
TEST:
|
||||
Bit #1,R5 ; Sector Writting Direction
|
||||
Bne 30$
|
||||
Cmp R1,R3
|
||||
Return
|
||||
30$: Cmp R3,R1
|
||||
Return
|
||||
.Dsabl LSB
|
||||
.SbTtl Octet Computing Routine
|
||||
;
|
||||
; Input:
|
||||
;R2 = Positive Angle value.
|
||||
; Output:
|
||||
;R5 = Octet No
|
||||
;R1 = Initial coordinate of Octet @r5
|
||||
;R4 Not Changed.
|
||||
;Uses MySin Routine
|
||||
;
|
||||
Octet: Mov R1,R5
|
||||
Bic #^C70000,R5 ;Octet No bits
|
||||
Bic R5,R1 ;R1 = internal octet angle
|
||||
Asr R5 ;111 000 000 000 00
|
||||
Asr R5 ;111 000 000 000 0
|
||||
Asr R5 ;111 000 000 000
|
||||
Asr R5 ;111 000 000 00
|
||||
Swab R5 ;111
|
||||
Dec R5
|
||||
Bic #^C7,R5 ;R5=Octet No
|
||||
Bit #1,R5 ;Internal Coordinate direction must be
|
||||
;changed ?
|
||||
Bne 10$ ; No
|
||||
Neg R1
|
||||
Add #7777,R1
|
||||
10$: Call MySin ; R1=$RAD*Sin(R1/10000*Pi/4)
|
||||
Return
|
||||
|
||||
.SbTtl Sine function approcsimation
|
||||
; R1 = $RAD*Sin(R1/10000*Pi/4) where R1=0..7777
|
||||
;
|
||||
; It's the simpliest realization - linear approcsimation used:
|
||||
;R1=R1/10000*Sin(Pi/4)
|
||||
;
|
||||
;R4 and R5 are unchanged.
|
||||
;
|
||||
SinPi4 = 132404
|
||||
MySin:
|
||||
Mov R4,-(SP)
|
||||
Mov R5,R2 ;Save R4 and R5
|
||||
Asl R1
|
||||
Asl R1
|
||||
Asl R1
|
||||
Asl R1 ;Fix decimal point at the left of MSB
|
||||
Mov $Rad,R3 ;and Scale R1
|
||||
Call CMul
|
||||
Mov #SinPi4,R3 ;Sin(Pi/4)
|
||||
Call CMul
|
||||
Mov R2,R5 ;Restore R5
|
||||
Mov (SP)+,R4 ;and R4
|
||||
Return
|
||||
|
||||
.SbTtl CMul R1 to R3 Scaling procedure
|
||||
;
|
||||
;Computes R1=R1*R3/2**16
|
||||
;
|
||||
;R0, R3, R4 and R5 are changed
|
||||
;
|
||||
CMul:
|
||||
Mov R2,-(SP)
|
||||
Mov R1,R0 ;Multiplier
|
||||
Clr R1
|
||||
Clr R2
|
||||
Clr R5
|
||||
10$: Ror R0 ;Shift out the following Bit (C == 0)
|
||||
Bcc 20$
|
||||
Add R5,R1 ;Most significant part
|
||||
Add R3,R2 ;LSP
|
||||
Adc R1
|
||||
20$: Asl R3
|
||||
Rol R5
|
||||
Tst R0 ;All Done?
|
||||
Bne 10$ ;No, Continue
|
||||
Mov (SP)+,R2 ;Restore R2
|
||||
Return ;And Exit
|
||||
.Psect $Ram
|
||||
CrcBlk::
|
||||
$XC: .BlkW ; X0
|
||||
$YC: .BlkW ; Y0
|
||||
$RAD: .BlkW ; radius
|
||||
$BEG: .BlkW ; Initial Main Coordinate
|
||||
$END: .BlkW ; Ending Main Coordinate
|
||||
$CX: .BlkW ; X-Scaling factor
|
||||
$CY: .BlkW ; Y-Scaling factor
|
||||
|
||||
$$BEG: .BlkW ;
|
||||
$$END: .BlkW ;
|
||||
$INV: .BlkW ;
|
||||
$LB: .BlkB ;
|
||||
$LE: .BlkB ;Must be folow $LB
|
||||
BufOut: .BlkB 8. ;Circle definition table
|
||||
.Even
|
||||
.END
|
91
ROM sources/BK-0011 driver module/BKCLR.MAC
Normal file
91
ROM sources/BK-0011 driver module/BKCLR.MAC
Normal file
@ -0,0 +1,91 @@
|
||||
.Mcall .Module
|
||||
.Module BKCLR,Release=X02, Version=01, Comment=<BK0011 Color Routines>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BkHead"
|
||||
.Globl SavRg, RetEmt, PutUBt, GetUBt
|
||||
ClrCU == 177762
|
||||
.Psect $CodOvr
|
||||
.SbTtl $BGcolor - Exam Color Map
|
||||
$BGCOL::
|
||||
Tst ClrFlg ;Test Color Control Device
|
||||
Beq Nocol
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5
|
||||
Mov #ClrLng,R1
|
||||
Mov #ClrTab,R4
|
||||
10$: MovB (R4)+,R0
|
||||
Call PutUBt
|
||||
Sob R1,10$
|
||||
Jmp RetEmt
|
||||
Nocol: SeC
|
||||
Return
|
||||
.SbTtl $BScolor - Set Color Map
|
||||
$BSCOL::
|
||||
Tst ClrFlg
|
||||
Beq Nocol
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5
|
||||
Mov #ClrLng,R1
|
||||
Clr R3
|
||||
Clr R4
|
||||
Mov #ClrCU,R2
|
||||
10$: Call GetUBt
|
||||
MovB R0,ClrTab(R4)
|
||||
Bis R3,R0
|
||||
Mov R0,@R2
|
||||
Add #400,R3
|
||||
Sob R1,10$
|
||||
Jmp RetEmt
|
||||
.Psect $Code
|
||||
.SbTtl ClrIni Color Control Unit Initialization Routine
|
||||
ClrIni::
|
||||
Mov @#Vec4,ClrFlg
|
||||
Mov #10$,@#Vec4
|
||||
Clr ClrCU
|
||||
Mov ClrFlg,@#Vec4
|
||||
Mov #ClrTb0,R0
|
||||
Mov #ClrTab,R1
|
||||
Mov #ClrLng,R2
|
||||
Clr R3
|
||||
Mov #ClrCU,R5
|
||||
20$: MovB (R0)+,R4
|
||||
Bis R3,R4
|
||||
MovB R4,(R1)+
|
||||
MovB R4,@R5
|
||||
Add #400,R3
|
||||
Sob R2,20$
|
||||
Return
|
||||
10$: Mov ClrFlg,@#Vec4
|
||||
Cmp (SP)+,(SP)+
|
||||
Clr ClrFlg
|
||||
Sec
|
||||
Return
|
||||
.Psect $RAM
|
||||
ClrFlg::0
|
||||
ClrTab::.BlkB 16. ;Color Map
|
||||
ClrLng=.-ClrTab
|
||||
.Psect $Const
|
||||
ClrTb0::
|
||||
.Byte 0
|
||||
.Rept 15.
|
||||
.Byte -1
|
||||
.EndR
|
||||
.Even
|
||||
.End
|
187
ROM sources/BK-0011 driver module/BKCOMM.MAC
Normal file
187
ROM sources/BK-0011 driver module/BKCOMM.MAC
Normal file
@ -0,0 +1,187 @@
|
||||
.Mcall .Module
|
||||
.Module BKCOMM,Release=X02,Version=02,Comment=<BK0011 Common Routines>
|
||||
;
|
||||
; Copyright (c) 1986 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl USPSav,ScrSel
|
||||
.SbTtl General Register Save/Restore Routines
|
||||
;
|
||||
;Routine Saves R0..R4
|
||||
;Calling sequence:
|
||||
; Jsr R0,SavRg
|
||||
; Resault Stack:
|
||||
;
|
||||
; +---------------+
|
||||
; ! Old R5 !
|
||||
; +---------------+
|
||||
; ! $B... RetAdr !
|
||||
; +---------------+
|
||||
; ! Old R0 !
|
||||
; +---------------+
|
||||
; ! Old R1 !
|
||||
; +---------------+
|
||||
; ! Old R2 !
|
||||
; +---------------+
|
||||
; ! Old R3 !
|
||||
; +---------------+
|
||||
; ! Old R4 !
|
||||
; +---------------+
|
||||
;
|
||||
SavRg:: Mov R1,-(SP)
|
||||
Mov R2,-(SP)
|
||||
Mov R3,-(SP)
|
||||
Mov R4,-(SP)
|
||||
Mov 10(SP),-(SP) ;Old R0
|
||||
Rts R0 ;Exit to User Program
|
||||
;
|
||||
;Routine Restores R0..R4 and issues RTS PC Command
|
||||
;Calling Sequence:
|
||||
; Jmp RetEmt
|
||||
;
|
||||
RetEmt::Mov (SP)+,R4
|
||||
Mov (SP)+,R3
|
||||
Mov (SP)+,R2
|
||||
Mov (SP)+,R1
|
||||
Mov (SP)+,R0
|
||||
Return
|
||||
.SbTtl Emt Get ARGumet Routine
|
||||
;
|
||||
;This Routine Extracts Args from User Stack
|
||||
;
|
||||
;Calling Sequence:
|
||||
; Jsr R0,GetArg
|
||||
;
|
||||
;Old Stack:
|
||||
;
|
||||
; +---------------+
|
||||
; ! Arg 1 !
|
||||
; ! Arg 2 !
|
||||
; +---------------+ <----UspSav
|
||||
;
|
||||
; +---------------+
|
||||
; ! Old R5 ! 4
|
||||
; !$B.... RetAdr ! 2
|
||||
; ! Old R0 ! 0
|
||||
; +---------------+
|
||||
;
|
||||
; Output Stack:
|
||||
; +---------------+
|
||||
; ! Old R5 ! 14
|
||||
; ! $B.... RetAdr ! 12
|
||||
; ! Old R0 ! 10
|
||||
; ! Old R1 ! 6
|
||||
; ! Old R2 ! 4
|
||||
; ! Old R3 ! 2
|
||||
; ! Old R4 ! 0
|
||||
; +---------------+
|
||||
;
|
||||
; R0 = Arg 1
|
||||
; R1 = Arg 2
|
||||
;
|
||||
$OffR0 == 10 ;Offset to R0
|
||||
|
||||
|
||||
GetArg::
|
||||
Mov R1,-(SP) ;Save R0..R4
|
||||
Mov R2,-(SP)
|
||||
Mov R3,-(SP)
|
||||
Mov R4,-(SP)
|
||||
Mov R0,TmpR0 ;Save Return Address
|
||||
Mov @#UspSav,R0
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Mov (R0)+,R1 ;Second Arg
|
||||
Mov (R0)+,R0 ;First Arg
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Add #4,@#UspSav
|
||||
Jmp @TmpR0
|
||||
.Save
|
||||
.Psect $RAM
|
||||
TmpR0: .BlkW
|
||||
.Restore
|
||||
|
||||
.SbTtl Put R0 Word to (R5)+ in User Space
|
||||
PutUWd::Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov R0,(R5)+
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
|
||||
.SbTtl Put R0 Byte to (R5)+ in User Space
|
||||
PutUBt::Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
MovB R0,(R5)+
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
|
||||
.SbTtl Get (R5)+ Byte from User Space
|
||||
GetUBt::Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
MovB (R5)+,R0
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Bic #^C377,R0
|
||||
Return
|
||||
|
||||
.SbTtl Get (R5)+ Word from User Space
|
||||
GetUWd::Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov (R5)+,R0
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Tst R0
|
||||
Return
|
||||
.SbTtl Character Check and GO routine
|
||||
;
|
||||
;Calling Sequence:
|
||||
;
|
||||
; Mov Switch,R0
|
||||
; Jsr R0,ChrGo
|
||||
;A:
|
||||
; .Byte <Addr-A>/2,Code
|
||||
;................
|
||||
; .Byte <Exit-A>/2,0
|
||||
;
|
||||
; This routine uses R1,R2.
|
||||
; R0 Contents is unchanged.
|
||||
;
|
||||
ChrGo:: Mov R0,R1 ;Table Address
|
||||
10$: Clr R2
|
||||
BisB (R1)+,R2 ;Routine Address Offset
|
||||
TstB @R1
|
||||
Beq 20$ ;End of List
|
||||
CmpB (R1)+,@SP ;Check Character
|
||||
Bne 10$
|
||||
20$: Asl R2
|
||||
Add R2,R0
|
||||
Rts R0
|
||||
.SbTtl Screen Mapping/Unmaping Routines
|
||||
SeTScS::Mov @#$$UsrS,-(SP)
|
||||
Bic #^C<TapMsk!ScrMsk>,@SP
|
||||
Bis ScrSel,(SP)
|
||||
Mov (SP)+,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
SeTScX::Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
|
||||
.End
|
211
ROM sources/BK-0011 driver module/BKCTRL.MAC
Normal file
211
ROM sources/BK-0011 driver module/BKCTRL.MAC
Normal file
@ -0,0 +1,211 @@
|
||||
.Mcall .Module
|
||||
.Module BKCTRL,Release=X02,Version=00,Comment=<BK0011 Control Codes Proc.>
|
||||
;
|
||||
; Copyright (c) 1986 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl CursX, CursY, AWrp$$, TtoFlg, StrLen, ScrBot
|
||||
.Globl ScrlDw, MaxLin, CrsAdr, BkGnd, NxTVLn, FfLng
|
||||
.Globl Lat$$, MixO$$, ScrlUp, SetScS, SetScX
|
||||
|
||||
|
||||
.Macro Control Code, Indication, Function
|
||||
.Save
|
||||
.Psect $Const
|
||||
.=IsgTab+<Code>
|
||||
.Byte Indication
|
||||
.=CtrTab+<<Code>*2>
|
||||
.IF Nb <Function>
|
||||
.Globl Function
|
||||
.Word Function
|
||||
.IFf
|
||||
.Word 0
|
||||
.EndC
|
||||
.Restore
|
||||
.EndM
|
||||
.Save
|
||||
.Psect $Const
|
||||
IsgTab::
|
||||
.Blkb 32.
|
||||
CtrTab::
|
||||
.BlkW 32.
|
||||
.Restore
|
||||
.SbTtl Control Code Tables
|
||||
Control 0, '@-40 ;
|
||||
Control 1, 'A-40, SetDbl ;Set Double Width
|
||||
Control 2, 'B-40, SetSng ;Set Single Width
|
||||
Control 3, 'C-40 ;
|
||||
Control 4, 'D-40 ;
|
||||
Control 5, 'E-40 ;
|
||||
Control 6, 'F-40 ;
|
||||
Control 7, 'G-40, Bell ;Ring the Bell
|
||||
Control 10, -33, Bs ;BackSpace <---
|
||||
Control 11, 'I-40, Ht ;Horizontal Tab
|
||||
Control 12, -34, Lf ;Line Feed !___
|
||||
Control 13, 'K-40, Vt ;Deleol
|
||||
Control 14, 'L-40, Ff ;Clear Screen
|
||||
Control 15, 'M-40, Cr ;Carriage Return
|
||||
Control 16, 'N-40, So ;Set Cyrillic
|
||||
Control 17, 'O-40, Si ;Set Latin
|
||||
Control 20, 'P-40 ;
|
||||
Control 21, 'Q-40 ;
|
||||
Control 22, 'R-40, Dc2 ;Home
|
||||
Control 23, 'S-40 ;
|
||||
Control 24, 'T-40, Dc4 ;Set Mixed Char. Set
|
||||
Control 25, 'U-40, Nak ;New Line
|
||||
Control 26, -20 ;(In GetLine Only) <--!
|
||||
Control 27, -21 ; !-->
|
||||
Control 30, -35 ; <-!-
|
||||
Control 31, -32, Em ;Cursor Right ---->
|
||||
Control 32, -30, Sub ;Cursor Up ^
|
||||
Control 33, -31, Esc ;Cursor Down \/
|
||||
Control 34, '\-40 ;
|
||||
Control 35, ']-40, ClrGet ;Color Setting Seq.
|
||||
Control 36, '^-40, Dc3 ;Reverse LF
|
||||
Control 37, '_-40 ;
|
||||
.SbTtl Bell and Sound Routines - Ring the Bell and Sound
|
||||
.Psect $Code
|
||||
Bell::
|
||||
Mov #300.,R0 ;Sound length
|
||||
Mov #100.,R1 ;Sound tone
|
||||
Sound:: ;Sound Routine (R1 pulses of R0 width)
|
||||
Mov @#$$SysS,R2
|
||||
Mov #Keflg,R4
|
||||
Xor R2,R4
|
||||
|
||||
10$: Mov R4,@#Sel1
|
||||
Mov R1,R3
|
||||
Sob R3,.
|
||||
Mov R2,@#Sel1
|
||||
Mov R1,R3
|
||||
Sob R3,.
|
||||
Sob R0,10$
|
||||
Tst @#Sel1 ; Clear Write Flag
|
||||
Return
|
||||
|
||||
.SbTtl BS - BackSpace Routine
|
||||
.Psect $CodOvr
|
||||
BS::
|
||||
DecB CursX ; Move character left
|
||||
Bpl 3$ ; BS at middle of the line
|
||||
Bit #AWrp$$,TtoFlg ; BS across the line boundary
|
||||
Bne 10$ ; Jump if not allowed
|
||||
DecB CursY ; To the end of the previous line
|
||||
Bpl SetCr1 ;
|
||||
ClrB CursY ; Clear "CursX" and "CursY"
|
||||
10$: ClrB CursX ; Otherwice nope
|
||||
3$: Return ;
|
||||
SetCr1: MovB StrLen,CursX ;
|
||||
DecB CursX ;
|
||||
Return
|
||||
.SbTtl HT - Move the Cursor to the Next Tab Stop
|
||||
|
||||
HT:: MovB StrLen,R1
|
||||
Sub #8.,R1
|
||||
CmpB CursX,R1
|
||||
Blo 10$ ; <= 72 ==> Modulo 8
|
||||
IncB CursX ; else one position right
|
||||
Br 20$ ;
|
||||
10$: BicB #7,CursX ;
|
||||
Add #8.,CursX ;
|
||||
20$: CmpB CursX,StrLen ; Line overflow
|
||||
Bhis SetCr1 ;
|
||||
Return
|
||||
.SbTtl LF Line/Feed Operation
|
||||
LF:
|
||||
IncB CursY
|
||||
CmpB CursY,MaxLin
|
||||
Blo 10$
|
||||
DecB CursY
|
||||
Call ScrlDw
|
||||
10$: Return
|
||||
.Psect $Code
|
||||
.SbTtl VT delete the end of line
|
||||
VT: Mov CrsAdr,R0
|
||||
Mov R0,-(SP) ;Old CrsAdr
|
||||
Mov #9.,R5 ; TV-Line counter
|
||||
Call SetScS ;Map Screen
|
||||
10$: Mov CrsAdr,R1 ;Deleted Byte Address
|
||||
20$: MovB Bkgnd,(R1)+
|
||||
Bit #77,R1 ;End Of Line ?
|
||||
Bne 20$ ;No, Delete byte
|
||||
Call NxTVLn ;Yes, Goto next Line
|
||||
Sob R5,10$
|
||||
Call SetScX ;Unmap Screen
|
||||
Mov (SP)+,CrsAdr ;Restore Cursor Address
|
||||
Return
|
||||
.SbTtl FF Clear Screen
|
||||
|
||||
FF: Mov ScrBot,R0 ;Clear All Screen
|
||||
Mov FfLng,R1
|
||||
Mov Bkgnd,R2
|
||||
Call SetScS ;Map Screen
|
||||
10$: Mov R2,(R0)+
|
||||
Bis #100000,R0
|
||||
Bic #40000,R0
|
||||
20$: Sob R1,10$
|
||||
Call SetScX ;UnMap Screen
|
||||
Jmp DC2
|
||||
|
||||
.SbTtl DC2 Home Routine
|
||||
.Psect $CodOvr
|
||||
DC2: Clr CursX
|
||||
|
||||
.SbTtl CR Carriage Return
|
||||
CR: ClrB CursX
|
||||
Return
|
||||
|
||||
.SbTtl SO Set Latin
|
||||
SO:
|
||||
Bis #Lat$$,TtoFlg
|
||||
Bic #MixO$$,TtoFlg
|
||||
Return
|
||||
.SbTtl SI Set Cyrillic
|
||||
SI:
|
||||
Bic #MixO$$!Lat$$,TtoFlg
|
||||
Return
|
||||
.SbTtl DC4 Set the Mixed Character Set
|
||||
DC4:
|
||||
Bis #MixO$$,TtoFlg
|
||||
Bic #Lat$$,TtoFlg
|
||||
Return
|
||||
.SbTtl SUB Cursor up
|
||||
SUB: DecB CursY
|
||||
Bgt 10$
|
||||
ClrB CursY
|
||||
10$: Return
|
||||
|
||||
.SbTtl DC3 Reverse "LF"
|
||||
DC3:
|
||||
DecB CursY
|
||||
Bpl 10$
|
||||
ClrB CursY
|
||||
Call ScrlUp
|
||||
10$: Return
|
||||
.SbTtl ESC Cursor down
|
||||
ESC: IncB CursY
|
||||
CmpB CursY,MaxLin
|
||||
Blo 10$
|
||||
DecB CursY
|
||||
10$: Return
|
||||
|
||||
.SbTtl NAK New Line
|
||||
CLFRtn::
|
||||
NAK: ClrB CursX
|
||||
Br LF
|
||||
.End
|
706
ROM sources/BK-0011 driver module/BKDEB.MAC
Normal file
706
ROM sources/BK-0011 driver module/BKDEB.MAC
Normal file
@ -0,0 +1,706 @@
|
||||
.Mcall .Module
|
||||
.Module MON11,Release=X02, Version=03, Comment=<BK0011 Debugger>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl BootRX, LinTap, TtoFlg, Block$, SetWid
|
||||
.Globl $MixAs, $Ascii, KbMode, MixO$$, AscO$$, KbdCsr
|
||||
.Globl KbdDbr, Screen
|
||||
|
||||
.Macro Command Code,Addr
|
||||
.Psect $CnsOvr
|
||||
.If NB <Code>
|
||||
.Byte Code
|
||||
.Psect $Adrtab
|
||||
.Even
|
||||
.Word Addr
|
||||
.IfF
|
||||
.Byte 0
|
||||
.EndC
|
||||
.EndM
|
||||
|
||||
TBit = 20 ;T-Bit MASK - STATUS REGISTER
|
||||
BptVec = 14 ;BPT interrupt vector
|
||||
BLKR = 204
|
||||
.Radix 2
|
||||
Opnf$$ = 1 ; "Open" flag
|
||||
Byte$$ = 10 ; Byte mode Mask
|
||||
Semi$$ = 100 ; Semicolon found flag
|
||||
SemN$$ = 1000 ; nnn; flag
|
||||
Mins$$ = 10000 ; nnn+-mmm Minus flag
|
||||
Rgn$$ = 100000 ; nnn+-mmm Flag
|
||||
RsOf$$ = 1000000 ; "RS" Open flag
|
||||
Num$$ = ^O200 ; Number was found (Must be 200!!)
|
||||
RSFl$$ = 100000000 ; "RS" found flag
|
||||
RnnF$$ = 1000000000 ; Number after "Rn" Flag
|
||||
RnFl$$ = 10000000000 ; "Rn" was found
|
||||
Rfl$$ = 100000000000 ; "R" was found
|
||||
SyFl$$ = 1000000000000 ; System address space flag
|
||||
.Radix 8.
|
||||
|
||||
.Psect $Code
|
||||
.SbTtl User's Trap to 4 Handler
|
||||
O.Tr4U::
|
||||
Mov @#$$UsrS,-(SP)
|
||||
Bic #^C<ScrMsk!TapMsk>,@SP
|
||||
Bis #SysSel,@SP
|
||||
Mov @SP,@#$$SysS ;Set System Allocation
|
||||
Mov (SP)+,@#Sel1
|
||||
Tst $UsrTrp ;User Trap To 4 Processing ?
|
||||
Beq Debug ;No
|
||||
Mov R0,@#$Svare ;Yes, Save R0
|
||||
Mov $UsrTrp,R0 ;and clear Routine address
|
||||
Clr $UsrTrp ;
|
||||
Mov @#$$UsrS,Sel1 ;Set User Allocation
|
||||
Tst Sel1
|
||||
Clr -(SP) ;Set PS and PC and
|
||||
Mov R0,-(SP) ;
|
||||
Mov @#$Svare,R0 ;
|
||||
Rtt ;Process user routine
|
||||
|
||||
.SbTtl BPT Breakpoint Handler
|
||||
.SbTtl Entry Point
|
||||
Debug::
|
||||
O.BpT::
|
||||
Mov #O.Tr4S,@#Vec4 ;Set system interrupt
|
||||
Mov #340,@#Vec4+2
|
||||
Mov (SP)+,@#$SavPC ;Save status and PC from stack
|
||||
Mov (SP)+,@#$SavPS
|
||||
Jsr 0,SavReg ;And Save Registers (Mainly SP)
|
||||
.BTtyou #25 ;New line
|
||||
Mov O.UPC,R0
|
||||
ClC
|
||||
Call OctTyp ;Print user's PC
|
||||
MovB Screen,R0
|
||||
Swab R0
|
||||
ComB R0
|
||||
.Bbufset ;Set Screen for indication
|
||||
Bic #Byte$$!Opnf$$!Semi$$!Num$$!Rgn$$,R4 ;Clear flags
|
||||
Clr R3
|
||||
Jmp O.Dcd
|
||||
.Dsabl Lsb
|
||||
|
||||
.SbTtl System Trap To 4
|
||||
O.Tr4S::
|
||||
Cmp (SP)+,(SP)+
|
||||
Mov @#$$SysS,@#Sel1
|
||||
;;; Mov @#$$UsrS,@#UsrSav
|
||||
Mov @#$$SysS,@#$$UsrS
|
||||
Tst @#Sel1
|
||||
Mov CurAdr,R5 ;Restore CurAdr
|
||||
Mov DebFlg,R4 ; and DebFlg
|
||||
Tst @#KbdDbr
|
||||
Clr @#KbdCsr
|
||||
Jmp O.Err
|
||||
.SbTtl Command Decoder entry point
|
||||
.Psect $CodOvr
|
||||
O.DCD: Call ClsCRL ;Type <CR><LF>@
|
||||
O.Scan: Call GetC ;Get a char, return in R0
|
||||
CmpB #'0,R0 ;Compare with Ascii 0
|
||||
Bhi 30$ ;Check legality if non-numeric
|
||||
CmpB #'7,R0 ;Compare with Ascii 7
|
||||
Blo 30$ ;Check legality if not octal
|
||||
Bit #Rfl$$,R4 ;"R" in progress ?
|
||||
Beq 20$ ; No
|
||||
Bit #RnFl$$,R4 ;"Rn" in progress ?
|
||||
Bne 10$ ; Yes, "Rnn"
|
||||
Bis #RnFl$$,R4 ; No, set "Rn" flag
|
||||
Br 20$
|
||||
10$: Bis #RnnF$$,R4 ;Set Rnn flag
|
||||
20$: Bic #^C7,R0 ;Convert to binary
|
||||
Asl R3 ; Make room
|
||||
Asl R3 ; in
|
||||
Asl R3 ; R3
|
||||
Bis R0,R3 ;Pack three bits in Number
|
||||
Bis #Num$$,R4 ;Set numeric flag
|
||||
Br O.Scan ; and try again
|
||||
|
||||
.SbTtl Table Search
|
||||
30$: Bit #RSFl$$,R4 ;"RS" in progress ?
|
||||
Bne 40$ ;Yes
|
||||
Bit #Rfl$$,R4 ;"R" in progress ?
|
||||
Beq 40$ ;No
|
||||
CmpB R0,#'S
|
||||
Beq O.RS ;"RS" Operation
|
||||
40$: Mov #CodTab,R1 ;Set table pointer
|
||||
50$: TstB @R1 ;Is the search done?
|
||||
Beq O.Err ;Yes, not match
|
||||
CmpB R0,(R1)+ ;Do the codes match?
|
||||
Bne 50$ ;Re-Loop if no
|
||||
Sub #CodTab+1,R1 ;Get table offset
|
||||
Asl R1 ;Multiply by two
|
||||
Jmp @GoTab(R1) ;Go to proper routine
|
||||
|
||||
.SbTtl Error Processing
|
||||
|
||||
O.Err: Mov #DStack,SP ;Set up stack
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Bic #Block$,TtoFlg
|
||||
.BTtyou #'? ; ? to be typed
|
||||
Br O.DCD
|
||||
|
||||
.SbTtl Reset the Monitor
|
||||
ClsCRL: .BPrint #LFAT ;Type <LF>@
|
||||
Clr R3 ;Clear argument buffer
|
||||
Bic #Opnf$$!Rgn$$!Num$$!Semi$$!Semn$$,R4
|
||||
Return
|
||||
.Psect $Const
|
||||
LFAT: .Byte 25,'@,200
|
||||
|
||||
.SbTtl Command Table
|
||||
.Psect $CnsOvr
|
||||
CodTab:
|
||||
.Psect $AdrTab
|
||||
GoTab:
|
||||
|
||||
Command 220,O.Step ; <Step> Execute one command
|
||||
Command 12,O.Cret ; <Enter> Close location
|
||||
Command 1,O.Ctrl ; Double Width
|
||||
Command 2,O.Ctrl ; Single Width
|
||||
Command 14,O.Ctrl ; Control Code, Type it
|
||||
Command 10,O.Orrb ; <Left Arrow> Open related, rel. branch
|
||||
Command 31,O.Orpc ; <Right Arrow>Open related, index - PC.
|
||||
Command 32,O.Back ; <Up Arrow> Open Previous
|
||||
Command 33,O.Next ; <Down Arrow> Modify, Close, Open next
|
||||
Command '$,O.Reg ; $ Register Ops
|
||||
Command '-,O.Mins ; - Set Save/Load Region
|
||||
Command '+,O.Plus ; + Set Save/Load Region
|
||||
Command '/,O.Wrd ; / Open word
|
||||
Command 73,O.Semi ; ; Semicolon
|
||||
Command '@,O.Oind ; @ Open Indirect
|
||||
Command 'B,O.Boot ; B Boot from disk
|
||||
Command 'G,O.Go ; G Go to address nnnnn
|
||||
Command 'C,O.Conn ; C Connect memory page
|
||||
Command 'L,O.Load ; L Load Binary File
|
||||
Command 'M,O.Motor ; M On/Off Taperecorder Motor
|
||||
Command 'P,O.Proc ; P Proceed
|
||||
Command 'R,O.Reg ; R Register Ops
|
||||
Command 'U,O.Unlo ; U Unload Binary File
|
||||
Command '_,O.Orpc ; <Underline> Open related, index - PC.
|
||||
Command '\,O.Byt ; \ Open byte -back slash
|
||||
Command 233,O.Wdth ; Lw/";" Width Setting (One byte More)
|
||||
Command ']-100,O.Clr ; Ctrl/"\" Color Setting Sequence
|
||||
Command ;END OF Command TABLE
|
||||
|
||||
.Psect $Const
|
||||
WdtCd: .Byte 10,40,10,200
|
||||
|
||||
.Psect $CodOvr
|
||||
O.Clr: .Bttyou
|
||||
Mtps #0
|
||||
10$: .BinKey
|
||||
Bcs 10$
|
||||
.Bttyou
|
||||
20$: .BinKey
|
||||
Bcs 20$
|
||||
Mtps #340
|
||||
.Bttyou
|
||||
.Bttyou #25
|
||||
Br O.Scan
|
||||
O.Wdth: .Bprint #WdtCd ;BackSpace
|
||||
Mtps #0
|
||||
10$: .BinKey
|
||||
Bcs 10$
|
||||
Mtps #340
|
||||
Bic #^C3,R0
|
||||
Mov R1,-(SP)
|
||||
Mov R2,-(SP)
|
||||
Mov R3,-(SP)
|
||||
Mov R4,-(SP)
|
||||
Mov R5,-(SP)
|
||||
Call SetWid ;Width Setting
|
||||
Mov (SP)+,R5
|
||||
Mov (SP)+,R4
|
||||
Mov (SP)+,R3
|
||||
Mov (SP)+,R2
|
||||
Mov (SP)+,R1
|
||||
Br O.Scan
|
||||
O.Ctrl: .Bttyou
|
||||
Br O.Scan
|
||||
.SbTtl <+><-> Set Save/Load Region
|
||||
.Enabl LSB
|
||||
O.Plus: Bic #Mins$$,R4 ;Reset "Minus" Flag
|
||||
Br 10$
|
||||
O.Mins: Bis #Mins$$,R4 ;Set Flag
|
||||
10$: TstB R4 ;Check for number
|
||||
Bpl O.Err
|
||||
Mov R3,Begadr ;Save Start Address Of Save/Load
|
||||
Bic #Num$$,R4 ;Reset Number
|
||||
Clr R3 ;
|
||||
Bis #Rgn$$,R4 ;Set Region flag
|
||||
O.Scn2: Br O.Scan ;and go
|
||||
.Dsabl LSB
|
||||
.SbTtl RS State Register Ops
|
||||
|
||||
O.Rs: Bit #RnFl$$,R4 ;"Rn" operation ?
|
||||
Bne O.Err ;Yes, Error
|
||||
Bic #Byte$$!Semi$$!Opnf$$!Rgn$$!Rfl$$!RnFl$$!Num$$!RnnF$$!RsOf$$,R4
|
||||
Bis #RSfl$$!SyFl$$,R4 ;Set "RS" flag and System space
|
||||
Clr R3 ;
|
||||
Br O.Scn2
|
||||
|
||||
.SbTtl <B> - Boot from disk
|
||||
O.Boot: Clr R0 ;Default unit No = 0
|
||||
TstB R4 ;Test number flag
|
||||
Bpl 10$ ;No Number
|
||||
Mov R3,R0 ;Present ==> set unit No.
|
||||
10$: Call BootRX
|
||||
Br O.Err ;Error booting operating system
|
||||
.SbTtl <R>,<$> - Register Ops
|
||||
O.Reg:
|
||||
Bic #Semi$$!Byte$$!Opnf$$!Rgn$$!RSFl$$!Num$$!RnFl$$!RnnF$$!RsOf$$,R4
|
||||
Clr R3 ;
|
||||
Bis #SyFl$$!Rfl$$,R4 ;Set Register Flags
|
||||
Br O.Scn2 ;
|
||||
.Psect $Code
|
||||
.SbTtl <G> Go to address nnnnn; <P> - Proceed
|
||||
O.Go:: Clr @#O.UPS ;
|
||||
TstB R4 ;
|
||||
Bmi 10$ ;No Number flag
|
||||
Mov @#UserPC,R3 ;Default
|
||||
Beq O.ERR9 ;
|
||||
10$: Bit #1,R3 ;Check for odd address ?
|
||||
Bne O.ERR9 ;
|
||||
Mov R3,O.UPC ;Set up new PC
|
||||
O.Proc: Bic #TBit,@#O.UPS ;Clear T-bit
|
||||
O.Prc2: Mov O.UPC,@#$SavPC ;
|
||||
Mov O.UPS,@#$SavPS ;
|
||||
Mov #O.Tr4U,@#Vec4 ;Set User's vector
|
||||
Mov #2340,@#Vec4+2 ;And status
|
||||
Jsr R0,ResReg ;Restore registers, Set User Allocation
|
||||
Mov @#$SavPS,-(SP) ; status
|
||||
Mov @#$SavPC,-(SP) ; and PC
|
||||
Rtt ; Then GOTO...
|
||||
|
||||
.SbTtl Process <Step> - Execute One Command
|
||||
|
||||
O.Step: Bis #TBit,@#O.UPS
|
||||
Mov #O.BPT,@#BptVec
|
||||
Mov #2340,@#Bptvec+2
|
||||
Br O.Prc2
|
||||
.SbTtl Process C Connect memory page
|
||||
|
||||
O.Conn::Bit #Semi$$,R4 ;Test semicolon found flag
|
||||
Beq O.ERR9 ;Clear ==> Error
|
||||
TstB R4
|
||||
Bpl O.ERR9 ;No Number
|
||||
Mov @#UsrSav,@#$$UsrS
|
||||
Mov SP,SPTMP
|
||||
Mov O.USP,SP
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
.BSETPG R2,R3
|
||||
Mov @#$$SysS,@#Sel1 ;Connect memory page
|
||||
Mov SPTMP,SP
|
||||
Bcs 10$ ;Error
|
||||
Mov @#$$UsrS,UsrSav ;
|
||||
Mov @#$$SysS,@#$$UsrS
|
||||
Tst @#Sel1
|
||||
Jmp O.Dcd ;Normal return
|
||||
10$: Mov @#$$SysS,@#$$UsrS
|
||||
Tst @#Sel1
|
||||
O.ERR9: Jmp O.Err ;Error Return
|
||||
|
||||
.SbTtl Semicolon processing
|
||||
.Psect $CodOvr
|
||||
|
||||
O.Semi: TstB R4 ;A semi-colon has been received
|
||||
Bpl O.Err1
|
||||
Bis #Semi$$,R4 ;Numeric flag to Semi$$,
|
||||
Mov R3,R2 ;Number to SemNum
|
||||
Bit #Rgn$$,R4 ;Is "Region" flag found
|
||||
Beq 10$ ;No
|
||||
Mov R3,Lngth ;Second Region bound ?
|
||||
Beq O.Err1 ;Not found, Error
|
||||
Bit #Mins$$,R4 ;
|
||||
Beq 10$ ;"+"
|
||||
Sub BegAdr,Lngth ;"-"
|
||||
10$: Clr R3
|
||||
Bic #Num$$,R4
|
||||
Br O.Scn1 ;Go back for more
|
||||
O.Err1: Jmp O.Err
|
||||
.SbTtl Process / and \ - Open Word or Byte
|
||||
.Enabl LSB
|
||||
;Input - If Num$$ is ON a new rexp has been typed in
|
||||
;Input - -address of word to be opened is in R3
|
||||
|
||||
O.Wrd: Bic #Byte$$,R4 ;Open word
|
||||
Br 20$
|
||||
O.Byt: Bit #RnnF$$,R4
|
||||
Bne 10$
|
||||
Bit #Rfl$$!RnFl$$!RSFl$$,R4 ;
|
||||
Bne O.Err1 ;Illegal byte operation
|
||||
10$: Bis #Byte$$,R4 ;Open byte
|
||||
20$: Bit #RsFl$$,R4 ;
|
||||
Bne 50$ ;Open RS
|
||||
TstB R4 ;Set Address if Num$$ is non-zero
|
||||
Bpl 70$ ;skip otherwise - reopen previous location
|
||||
Bit #RnFl$$,R4 ;"Rn" operation ?
|
||||
Bne 30$ ;Yes
|
||||
Bic #SyFl$$,R4 ;Clear System State Address flag
|
||||
30$: Bic #RsOf$$,R4 ;
|
||||
Bit #RnnF$$,R4 ;"Rnn/" ?
|
||||
Beq 40$ ;No
|
||||
Bic #Rfl$$!RnFl$$!RnnF$$!Syfl$$!RsOf$$,R4
|
||||
;Clear R, Rn, Rnn, Syst.Addr
|
||||
40$: Bit #Rfl$$,R4 ;"Rn/" ?
|
||||
Beq 60$ ;No
|
||||
Asl R3 ;Generate Register Address
|
||||
Add #O.UR0,R3 ;
|
||||
Br 60$ ;
|
||||
50$: Mov #O.UPS,R3 ;Yes, set appropriate address
|
||||
Bis #SyFL$$!RsOf$$,R4 ;Set "RS Open flag"
|
||||
Bic #RSFl$$,R4 ;Clear "RS" flag
|
||||
60$: Mov R3,R5 ;Save new current address
|
||||
Open:
|
||||
70$: Call TypWB ;Get Word or Byte and type it
|
||||
O.Scn1: Jmp O.Scan ; Wait for another char
|
||||
.Dsabl LSB
|
||||
.SbTtl Process <Enter> - Close Location
|
||||
|
||||
O.Cret: Call Close ;Close Location
|
||||
Br O.DcD1 ;Return to decoder
|
||||
|
||||
.SbTtl <Down Arrow> Modify, Close, Open next
|
||||
O.Next: Call Close ;Close location
|
||||
Bit #RsOf$$,R4 ;Was it PS?
|
||||
Bne O.DcD1 ;Yes, exit
|
||||
Bit #Byte$$,R4 ;Byte operation ?
|
||||
Bne 10$ ;Yes
|
||||
Inc R5 ;Modify Address
|
||||
10$: Inc R5 ;
|
||||
O.Nxt1: .BTtyou #25 ;New Line
|
||||
.BTtyou #40
|
||||
Bit #Rfl$$,R4 ;"R" operation ?
|
||||
Beq 10$ ;No
|
||||
.BTtyou #'R ;
|
||||
Sub #O.UR0,R5 ;Correct Register Address
|
||||
Bic #^C16,R5 ;
|
||||
Mov R5,R0 ;
|
||||
Add #O.UR0,R5 ;
|
||||
Asr R0 ;Get register number
|
||||
Add #'0,R0
|
||||
.BTtyou
|
||||
.BTtyou #40
|
||||
Br 20$
|
||||
10$: Mov R5,R0
|
||||
Clc
|
||||
Call OctTyp ;Print Address
|
||||
20$: Mov #"/\,R0
|
||||
Bit #Byte$$,R4
|
||||
Beq 30$
|
||||
Swab R0
|
||||
30$: .BTtyou
|
||||
Br Open ;And open location
|
||||
|
||||
.SbTtl <Up Arrow> Open Previous Location
|
||||
O.Back: Call Close ;Close location
|
||||
Bit #RsOf$$,R4 ;Was it PS ?
|
||||
Bne O.DcD1 ;Yes, exit
|
||||
Bit #Byte$$,R4 ;Byte operation ?
|
||||
Bne 10$ ;Yes
|
||||
Dec R5 ;Modify Address
|
||||
10$: Dec R5 ;
|
||||
Br O.Nxt1 ;Go do the rest
|
||||
.SbTtl Process @ - Open Indirect
|
||||
.Enabl LSB
|
||||
|
||||
O.Oind: Call Close ;Close current location
|
||||
Bit #Byte$$,R4 ;Test for byte mode
|
||||
Bne O.Dcd1 ;Byte is illegal
|
||||
Call GetWB ;Get the word
|
||||
Bic #RsOf$$!SyFl$$!Rfl$$!Rnfl$$!RnnF$$,R4 ;Clear flags
|
||||
Br 10$ ;
|
||||
O.Dcd1: Jmp O.DcD
|
||||
|
||||
.SbTtl Underline Handler - Open Indexed on the PC
|
||||
|
||||
O.Orpc: Call O.TCls ;Test mode and close
|
||||
Bcs O.DcD1 ;Illegal
|
||||
Add R5,R0 ;Compute
|
||||
Add #2,R0 ; new address
|
||||
10$: Mov R0,R5 ;Update current address
|
||||
Br O.Nxt1 ;Go finish up
|
||||
|
||||
.SbTtl Process > - Open Related, Rel. Branch
|
||||
|
||||
O.Orrb: Call O.TCls ;Test mode and close
|
||||
Bcs O.DcD1 ;Illegal
|
||||
MovB R0,R0 ;Extend the sign
|
||||
Asl R0 ;R0=2(@CurAdr)
|
||||
Inc R0 ; +2
|
||||
Inc R0
|
||||
Add R5,R0 ; +PC
|
||||
Br 10$
|
||||
.Dsabl LSB
|
||||
O.TCls: Call Close ;Close current location
|
||||
Bit #SyFl$$!Byte$$,R4 ;System Register or Byte
|
||||
Beq 10$ ;No
|
||||
SeC ;Yes, Error
|
||||
Return
|
||||
10$: Call GetWB
|
||||
ClC
|
||||
Return
|
||||
.DSABL LSB
|
||||
.SbTtl GetWB - General Word or Byte Get Routine
|
||||
.Psect $Code
|
||||
GetWB: Mov R5,CurAdr
|
||||
Mov R4,DebFlg
|
||||
Bit #SyFl$$,R4 ;User's memory ?
|
||||
Bne 10$ ;No
|
||||
Bit #SyFl$$,R4 ;User's memory ?
|
||||
Bne 10$ ;No
|
||||
Cmp R5,#160000
|
||||
Bhis 10$ ;No
|
||||
Mov @#UsrSav,@#$$UsrS
|
||||
Mov @#UsrSav,@#Sel1
|
||||
10$: Bit #Byte$$,R4 ;Byte mode ?
|
||||
Bne 20$
|
||||
Bic #1,R5
|
||||
Mov @R5,R0 ;No, get the word
|
||||
Br 30$
|
||||
20$: MovB @R5,R0 ;Yes, get the byte
|
||||
30$: Mov @#$$SysS,@#$$UsrS
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
.SbTtl TypWB - General Word or Byte Typing
|
||||
.Psect $CodOvr
|
||||
TypWB: Call GetWB ;Get Word or Byte
|
||||
Mov R0,-(SP)
|
||||
Bit #Byte$$,R4 ;Byte mode?
|
||||
Beq 10$ ;No
|
||||
SeC
|
||||
10$: Call OctTyp ;and type it
|
||||
Clr R3 ;Reset numeric arg
|
||||
Bic #Semi$$!Rgn$$!Num$$,R4
|
||||
Bis #Opnf$$,R4 ;Set "Open" mode
|
||||
Mov (SP)+,R0
|
||||
Return ;and exit
|
||||
|
||||
.SbTtl PutWB - General Word or Byte Put Routine
|
||||
.Psect $Code
|
||||
PutWB: Mov R5,CurAdr
|
||||
Mov R4,DebFlg
|
||||
Mov R3,R1 ;Number to we written
|
||||
Mov @#UsrSav,@#$$UsrS
|
||||
Bit #SyFl$$,R4 ;User's memory ?
|
||||
Bne 10$ ;No
|
||||
Cmp R5,#160000
|
||||
Bhis 10$ ;No
|
||||
Cmp R5,#100000
|
||||
Blo 15$
|
||||
Bit #RomMsk,@#$$UsrS
|
||||
Beq 15$
|
||||
Clr @#140000 ;Trap to 4 Simulation
|
||||
15$: Mov @#UsrSav,@#Sel1
|
||||
Tst @#Sel1
|
||||
10$: Bit #Byte$$,R4 ;Byte mode ?
|
||||
Bne 20$
|
||||
Mov R1,@R5 ;No, write the word
|
||||
Br 30$
|
||||
20$: MovB R1,@R5 ;Yes, write the byte
|
||||
30$: Mov @#$$SysS,@#Sel1
|
||||
Mov @#$$UsrS,UsrSav
|
||||
Mov @#$$SysS,@#$$UsrS
|
||||
Tst @#Sel1
|
||||
Return
|
||||
|
||||
.SbTtl Location Close Routine
|
||||
.Psect $CodOvr
|
||||
Close: TstB R4 ;Was the number ?
|
||||
Bpl 20$ ;No
|
||||
Bit #Opnf$$,R4 ;Was location open ?
|
||||
Beq 20$ ;No
|
||||
Bit #RsOf$$,R4 ;Was it PS ?
|
||||
Beq 10$ ;No
|
||||
Bic #^C357,R3 ;Yes, Clear T-bit etc.
|
||||
10$: Call PutWB ;Put word or byte
|
||||
20$: Bic #Opnf$$,R4 ;Clear "Open" flag
|
||||
Return ;And exit
|
||||
.SbTtl Type Out Contents of Word or Byte
|
||||
.Psect $Code
|
||||
OctTyp::Mov R3,-(SP)
|
||||
Mov R4,DebFlg ; and DebFlg
|
||||
Mov #6,R3 ;# of digits
|
||||
Mov #-2,R4 ;# of bits first-3
|
||||
Bcc 10$ ;See if word mode
|
||||
;Branch if so
|
||||
Asr R3 ;Only do 3 digits
|
||||
Inc R4 ;do 2 bits first
|
||||
Swab R0 ;And turn R0 around
|
||||
10$: Mov R0,-(SP) ;Save R0
|
||||
20$: Add #3,R4 ;Compute the number of bits to do
|
||||
Clr R0
|
||||
30$: Rol (SP) ;Get a bit
|
||||
Rol R0 ;Store it away
|
||||
Sob R4,30$ ;Loop if more bits needed
|
||||
Add #'0,R0 ;Convert to Ascii
|
||||
.BTtyou ;Type it
|
||||
SoB R3,20$ ;Loop if more digits to do
|
||||
Tst (SP)+ ;Get rid of junk
|
||||
Mov DebFlg,R4
|
||||
Mov (SP)+,R3
|
||||
.BTtyou #40 ;Type trailing space
|
||||
Return
|
||||
.SbTtl L - Load Binary File
|
||||
O.Load: Clr R1
|
||||
Clr R0
|
||||
TstB R4 ;Load Address ?
|
||||
Bpl O.Ld1 ;No
|
||||
Mov R3,R0 ;Yes, Move to R0
|
||||
O.Ld1: Mov R5,-(SP)
|
||||
Call LINTAP
|
||||
Mov $$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov (SP)+,R5
|
||||
Clr R4
|
||||
Jmp O.DcD
|
||||
.Psect $CodOvr
|
||||
.SbTtl U - Unload From Memory to Binary File
|
||||
O.Unlo: Call TstRgn
|
||||
Mov #1,R1
|
||||
Jmp O.Ld1
|
||||
O.Err2: Jmp O.Err
|
||||
TstRgn: Bit #Semi$$,R4 ;nnn+-mmm;xxxLU
|
||||
Beq O.Err2 ;No ";", Error
|
||||
Clr R0
|
||||
TstB R4 ;Start Address ?
|
||||
Bpl 10$ ;No
|
||||
Mov R3,R0
|
||||
Beq O.Err2 ;Illegal address
|
||||
Cmp R0,Begadr
|
||||
Blo O.Err2
|
||||
Mov BegAdr,R3
|
||||
Add Lngth,R3
|
||||
Cmp R0,R3
|
||||
Bhis O.Err2
|
||||
10$: Return
|
||||
|
||||
.SbTtl M - On/Off Taperecorder Motor
|
||||
|
||||
O.Motor:Clr R0
|
||||
TstB R4 ;Numeric Argument Found?
|
||||
Bpl 10$ ;No
|
||||
Mov R3,R0 ;Yes, get it
|
||||
Bis #MOT$$$,@#$$SysS
|
||||
Bis #MOT$$$,@#$$UsrS
|
||||
Bis #MOT$$$,@#UsrSav
|
||||
10$: Tst R0 ;Motor ON ?
|
||||
Beq 20$ ;No, OFF
|
||||
Bic #MOT$$$,@#$$SysS;Set motor on
|
||||
Bic #MOT$$$,@#$$UsrS;Set motor on
|
||||
Bic #MOT$$$,@#UsrSav;Set motor on
|
||||
20$: Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Jmp O.DcD1 ;And exit
|
||||
.SbTtl General Character Input Routine
|
||||
;
|
||||
; Character input goes to R0
|
||||
;
|
||||
Getc: Mov R5,CurAdr ;Save CurAdr
|
||||
Mov R4,DebFlg ; and DebFlg
|
||||
Mtps #0
|
||||
10$: .BinKey ;Get character
|
||||
Bcs 10$
|
||||
Mtps #340
|
||||
Bis #Block$,TtoFlg
|
||||
.BTtyou
|
||||
Bic #Block$,TtoFlg
|
||||
Return
|
||||
|
||||
.SbTtl Set System State, Save Registers R0-R6
|
||||
.Psect $Code
|
||||
SavReg: Mov R0,@#$Svare ;Save Return Address
|
||||
Mov @#$$UsrS,R0
|
||||
Bic #^C<ScrMsk!TapMsk>,R0
|
||||
Bis #SysSel,R0
|
||||
Mov R0,@#$$SysS
|
||||
Mov (SP)+,R0 ;Restore R0
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov SP,O.USP ;Save User Stack Address
|
||||
Mov #DStack,SP ;Set Debugger Stack
|
||||
Mov R0,O.UR0
|
||||
Tst @#Sel1
|
||||
Mov @#$$UsrS,UsrSav ;
|
||||
Mov @#$$SysS,@#$$UsrS ;
|
||||
Mov @#$SavPS,O.UPS ;Save User's PS
|
||||
Mov @#$SavPC,O.UPC ;Save User's PC
|
||||
Mov #O.UR0+2,R0 ;Set to Internal Save Area
|
||||
Mov R1,(R0)+ ;Save
|
||||
Mov R2,(R0)+ ; registers
|
||||
Mov R3,(R0)+ ;1
|
||||
Mov R4,(R0)+ ; thru
|
||||
Mov R5,(R0)+ ; 5
|
||||
Mov CurAdr,R5 ;Restore CurAdr
|
||||
Mov DebFlg,R4 ; and DebFlg
|
||||
; Mov KbMode,KbmSav ;Save mode
|
||||
; Bis #$MixAs!$Ascii,KbMode
|
||||
; Bis #MixO$$!AscO$$,TtoFlg
|
||||
Jmp @$Svare ;Exit
|
||||
|
||||
.SbTtl Restore Registers R0-R6
|
||||
|
||||
ResReg: Mov R0,@#$Svare ;Return Address
|
||||
Mov @#UsrSav,@#$$UsrS ;
|
||||
Mov R5,CurAdr ;Save CurAdr
|
||||
Mov R4,DebFlg ; and DebFlg
|
||||
; Mov KbmSav,R0 ;
|
||||
; Bic #^C$MixAs!$Ascii,R0
|
||||
; Bic #^C$MixAs!$Ascii,KbMode
|
||||
; Bis R0,KbMode ;Restore keyboard status
|
||||
Mov #O.UR0+2,R0 ;Set Savearea Pointer
|
||||
Mov (R0)+,R1 ;
|
||||
Mov (R0)+,R2 ;
|
||||
Mov (R0)+,R3 ;Restore
|
||||
Mov (R0)+,R4 ;registers
|
||||
Mov (R0)+,R5 ;0
|
||||
Mov (R0)+,SP ;thru 6
|
||||
Mov O.UR0,R0 ;
|
||||
Mov @#$$UsrS,@#Sel1 ;
|
||||
Tst @#Sel1
|
||||
Jmp @$Svare ;and EXIT
|
||||
|
||||
.SbTtl Working Cells
|
||||
.Psect $RAM
|
||||
KbmSav: .BlkW ;KbMode Save Area
|
||||
$UsrTrp:: .BlkW ;User's Trap to 4 Routine
|
||||
BegAdr:: .BlkW ;nnnn+-mmmmm Address
|
||||
Lngth:: .BlkW ;nnnn+-mmmmm Address
|
||||
DebFlg: .BlkW ;Internal flags
|
||||
CurAdr: .BlkW ;Current location address Save Area
|
||||
UsrSav:: .BlkW ;
|
||||
O.UPS: .BlkW ; PS
|
||||
O.UR0: .BlkW ;User R0
|
||||
O.UR1: .BlkW ; R1
|
||||
O.UR2: .BlkW ; R2
|
||||
O.UR3: .BlkW ; R3
|
||||
O.UR4: .BlkW ; R4
|
||||
O.UR5: .BlkW ; R5
|
||||
O.USP: .BlkW ; SP
|
||||
O.UPC: .BlkW ; PC
|
||||
SPTMP:: .BlkW
|
||||
.Psect $Stack
|
||||
.BlkW 300
|
||||
Dstack::
|
||||
.Psect $Const
|
||||
.Even
|
||||
.Psect $CnsOvr
|
||||
.Even
|
||||
.End
|
776
ROM sources/BK-0011 driver module/BKDISK.MAC
Normal file
776
ROM sources/BK-0011 driver module/BKDISK.MAC
Normal file
@ -0,0 +1,776 @@
|
||||
.Mcall .Module
|
||||
.Module BKDSK,Release=X02, Version=07, Comment=<BK0011 Floppy-Disk Handler>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl SavRg, RetEmt, GetUWD, PutUWD, UsrSav,PrePare,SelTbl,AdrSel
|
||||
.Globl Window
|
||||
.Iif NDF MY6021, MY6021=1
|
||||
.SbTtl MY-Compatible Mini floppy disk Handler Request Block
|
||||
;
|
||||
; for Read/Write
|
||||
; +-------+-------+
|
||||
; !Sid,Un.! 0 ! 0 Operation Code=0
|
||||
; +-------+-------+
|
||||
; ! Track ! Sector! 2
|
||||
; +-------+-------+
|
||||
; ! Memory Address! 4 User Buffer Address
|
||||
; +-------+-------+
|
||||
; ! Pag1 ! Pag0 ! 6 Page No ( Upper wind, Lower wind.
|
||||
; +-------+-------+ < 0==>Current)
|
||||
; ! Length (Bytes)! 10 Buffer Length (WORDS!!)
|
||||
; +---------------+
|
||||
;
|
||||
;
|
||||
; for Parameter Setting
|
||||
; +-------+-------+
|
||||
; !Par No ! 1 ! 0
|
||||
; +-------+-------+
|
||||
; ! Par Value ! 2
|
||||
; +---------------+
|
||||
;
|
||||
;
|
||||
; for Formatting
|
||||
; +-------+-------+
|
||||
; !Sid,Un.! 123 ! 0
|
||||
; +-------+-------+
|
||||
; ! Track ! ! 2
|
||||
; +---------------+
|
||||
;
|
||||
;
|
||||
ArgLng = 12/2 ;Word Counter of Arg Block
|
||||
;
|
||||
; CODE is the operation code:
|
||||
;
|
||||
ReWrit = 0 ;Read or Write
|
||||
PrmSet = 1 ;Parameter Setting
|
||||
Format = 123 ;Format Track
|
||||
MYInit = 377 ;Initialize Handler
|
||||
;
|
||||
;Error Codes returns in ErrByt as:
|
||||
;
|
||||
$.WlCC = 1 ;Write lock or data CRC Error
|
||||
$.CcId = 2 ;Id CrC Error
|
||||
$.Nhom = 3 ;Home Error
|
||||
$.Seek = 4 ;Seek Error
|
||||
$.Snfn = 5 ;Sector not found
|
||||
$.Stop = 6 ;No Disk Motion
|
||||
$.Tr4 = 7 ;NonExistent RAM error
|
||||
$.NfAM = 10 ;Address Mark not found
|
||||
$.NfDM = 11 ;Data Mark not found
|
||||
$.Nstd = 12 ;Non-Standard disk format
|
||||
|
||||
.SbTtl Minifloppy Controller (1801WP1-097) Registers
|
||||
Csr097 = 177130 ;State Register
|
||||
Dat097 = 177132 ;Data Register
|
||||
;
|
||||
;Read ==> Write Off
|
||||
;Write ==> Write ON
|
||||
;
|
||||
;
|
||||
;Csr Bit Masks
|
||||
;
|
||||
;Write only
|
||||
;
|
||||
DS0 = 1 ;Device Select Bits
|
||||
DS1 = 2 ;
|
||||
DS2 = 4 ;
|
||||
DS3 = 10 ;
|
||||
Msw = 20 ;Motor On switch
|
||||
USide = 40 ;Upper Disk Side
|
||||
Dir = 100 ;Step Direction (0 ==> Inside)
|
||||
Step = 200 ;Step
|
||||
GoR = 400 ;Go Reading Process (Clear Sh. Reg and
|
||||
;wait for index mark
|
||||
WM = 1000 ;Write Index Mark
|
||||
Rez = 2000 ;Compensation switching
|
||||
;
|
||||
;Read Only
|
||||
;
|
||||
Tr0 = 1 ;Track 0 (Home)
|
||||
Rdy = 2 ;Ready (Not Used)
|
||||
Wrp = 4 ;Write Protect
|
||||
Drdy = 200 ;Data Ready
|
||||
CRC = 40000 ;Crc Error
|
||||
Ind = 100000 ;Indeks Mark
|
||||
;
|
||||
.SbTtl Disk Format Constants
|
||||
$4E4E = 047116 ;Gap Code
|
||||
$A1A1 = 120641 ;Mark Data
|
||||
$A1FB = 120773 ;Normal data mark
|
||||
$FBA1 = 175641
|
||||
$A1F8 = 120770 ;Deleted data mark
|
||||
$F8A1 = 174241
|
||||
$FEA1 = 177241 ;Sector id mark
|
||||
$A1FE = 120776
|
||||
SecLen = 400
|
||||
Gap3 = 18. ;Gap3 Length
|
||||
Gap4 = 84. ;Gap4 Length
|
||||
MaxSec = 10. ;Max Sector No
|
||||
.SbTtl Floppy-Handler initialization
|
||||
.Psect $Code
|
||||
.Enabl LSB
|
||||
RXini::
|
||||
Clr GmdFlg
|
||||
Mov @#Vec4,Ini4S
|
||||
Mov #Ini4V,@#Vec4
|
||||
Clr @#Csr097 ;
|
||||
Call StpAll ;Stop all units
|
||||
Br 10$
|
||||
Ini4V: Mov #-1,GmdFlg
|
||||
Cmp (SP)+,(SP)+
|
||||
10$: Mov Ini4S,@#Vec4 ;Restore vector
|
||||
Mov #TrkTab,R0 ;Forget all Track Numbers
|
||||
Mov #-1,(R0)+
|
||||
Mov #-1,(R0)+
|
||||
.If EQ MY6021
|
||||
Mov #6240.,TimUp ;Head Up Time for 6121
|
||||
Mov #700.,TimTrk ;Track to track =
|
||||
MovB #80.,TrkCor ;No Correction Switching
|
||||
.IfF
|
||||
Mov #10000.,TimUp ;Head Up =
|
||||
Mov #5000.,TimTrk ;Track to Track =
|
||||
MovB #24.,TrkCor ;Correction at track 24.
|
||||
.EndC
|
||||
Ror GmdFlg ;No disk ==> C=1
|
||||
Return
|
||||
.Dsabl LSB
|
||||
.Save
|
||||
.Psect $RAM
|
||||
GmdFlg: .BlkW
|
||||
Ini4S: .BlkW
|
||||
.Restor
|
||||
|
||||
.SbTtl Routine to Dismount All Units, Stop Motor
|
||||
StpAll: Tst GmdFlg
|
||||
Bne 10$
|
||||
Clr CsrW ;Clear All Units
|
||||
Mov CsrW,@#Csr097 ;
|
||||
Tst @#Dat097 ;Disable Writing
|
||||
10$: Return
|
||||
.Psect $CodOvr
|
||||
BootRX::
|
||||
Mov #Btab,R1
|
||||
Bic #^C3,R0 ;Unit No
|
||||
Swab R0
|
||||
Mov R0,(R1)+ ;Unit No, Side
|
||||
Mov #1,(R1)+
|
||||
Mov #1000,(R1)+ ;Address
|
||||
Mov #-1,(R1)+ ;Pages
|
||||
Mov #400,(R1)+ ;400 Words
|
||||
.Bdisk #Btab
|
||||
Bcs 10$
|
||||
Cmp @#1000,#240
|
||||
Bne 10$
|
||||
Call @#1000
|
||||
Sec
|
||||
10$: Return
|
||||
Btab == 2000
|
||||
.SbTtl $BDisk (EMT 70) Routine (Floppy-Disk Request)
|
||||
.Psect $CodOvr
|
||||
$Bdisk::
|
||||
Jsr R0,SavRg ;Save Registers
|
||||
ClrB ErrFlg ;Error flag
|
||||
ClrB @#ErrByt ;Clear Error code
|
||||
Mov @#Vec4,Sav4 ;Save Vector 4
|
||||
Mov #DskV4,@#Vec4 ;And Set Temporary Vector
|
||||
Mov SP,SPSave ;Save stack pointer value
|
||||
Tst GmdFlg
|
||||
Bne IllCmd ;No disk controller
|
||||
Mov #ArgLng,R1 ;Byte Counter of Arg Block
|
||||
Mov #Code,R2 ;System Working Area for handler
|
||||
Mov R0,R5 ;Argument Block Address
|
||||
10$: Call GetUWd
|
||||
Mov R0,(R2)+ ;Move Arg Block to System Area
|
||||
Sob R1,10$
|
||||
MovB Code,R0 ;Command Code
|
||||
Mov #TabFnc,R1
|
||||
20$: Mov (R1)+,R2
|
||||
Tst @R1
|
||||
Beq IllCmd
|
||||
CmpB R0,R2
|
||||
Beq 30$
|
||||
Tst (R1)+
|
||||
Br 20$
|
||||
30$: Call @(R1)+
|
||||
Jmp Exit
|
||||
|
||||
.Save
|
||||
.Psect $CnsOvr
|
||||
TabFnc: .Word ReWrit, $Rewr, PrmSet, $Prmt, Format, $Frmt
|
||||
.Word MYInit, RXIni, 0, 0
|
||||
.Restore
|
||||
|
||||
IllCmd: Clr R0 ;Error 0
|
||||
Jmp ErrExt ;Illegal Command
|
||||
.SbTtl Parameter Setting Command
|
||||
$Prmt: MovB Code+1,R0
|
||||
Asl R0
|
||||
Cmp R0,#MaxPrm
|
||||
Bhi IllCmd
|
||||
Tst Code+2
|
||||
Beq IllCmd
|
||||
Mov Code+2,@PrmTab(R0) ;Set Parameter
|
||||
Return
|
||||
.Psect $Code
|
||||
DskV4: MovB #$.Tr4,R0 ;Set Error Code
|
||||
ErrExt: MovB #-1,ErrFlg
|
||||
Mov @#$$SysS,@#Sel1 ;
|
||||
Mov SPSave,SP ;Restore Stack Pointer
|
||||
MovB R0,@#ErrByt
|
||||
Exit: Call StpAll ;Stop all Units
|
||||
Mov Sav4,@#Vec4 ;Restore Vestor 4
|
||||
RorB ErrFlg
|
||||
Jmp RetEmt
|
||||
.SbTtl Track Formatting
|
||||
.Psect $CodOvr
|
||||
$Frmt: Call SelUni ;Select Unit Desired
|
||||
Call Seek ;Seek track
|
||||
Call SetDev ;Set Correction
|
||||
Bit #Wrp,@R4 ;Write protection ?
|
||||
Beq 20$ ;No
|
||||
Mov #$.WlCC,R0 ;Yes, Set Error Code
|
||||
10$: Jmp ErrExt
|
||||
20$: Swab SidTrk ;Side*400+Track;Prepare Code for Write
|
||||
30$: MovB #MaxSec,R3 ;Sector Counter No
|
||||
Mov #2*400+1,R2 ;Sect No, Length code
|
||||
Clr R0
|
||||
40$: Tst @R4 ;Index ?
|
||||
Bpl 60$ ;No
|
||||
Sob R0,40$ ;Sometime wait
|
||||
;Index hole too large or no index -- No disk Motion
|
||||
50$: Tst @R5 ;Reset Writing
|
||||
Mov #$.Stop,R0
|
||||
Br 10$ ;And exit
|
||||
;Write not Index Zone By 4E4E (Hex)
|
||||
60$: Clr R0 ;Write track by 4E4E
|
||||
Mov #$4E4E,@R5
|
||||
70$: Tst @R4 ;Index ?
|
||||
Bmi 90$ ;Yes
|
||||
80$: TstB @R4 ;Wait for Ready
|
||||
Bpl 80$
|
||||
Mov #$4E4E,@R5 ;And write data
|
||||
Sob R0,70$ ;Check for finitivity
|
||||
Br 50$ ;Track too long
|
||||
90$: Mov #16.,R0 ;Index Founded, Write 32* "4E"
|
||||
Mov #$FEA1,DatTyp ;Marker = Address mark
|
||||
FrmSec: Call WrtId ;Write 4E4E and Mark
|
||||
10$: TstB @R4 ;Wait for Ready
|
||||
Bpl 10$
|
||||
Mov SidTrk,@R5 ;Write Track No, Side
|
||||
Mov CsrW,@R4 ;Clear WM bit
|
||||
20$: TstB @R4 ;Wait for Ready
|
||||
Bpl 20$
|
||||
Mov R2,@R5 ;Sector No, Length code
|
||||
Mov #11.,R0 ;Gap Length
|
||||
Mov #$FBA1,DatTyp ;
|
||||
30$: Bit #CRC,@R4 ;Wait for CRC writing
|
||||
Beq 30$
|
||||
Call WrtId ;Write gap and data mark
|
||||
Mov #SecLen-1,R0 ;Sector Length
|
||||
40$: TstB @R4
|
||||
Bpl 40$
|
||||
Mov #"@@,@R5 ;Write sector with filler
|
||||
Mov CsrW,@R4
|
||||
50$: TstB @R4
|
||||
Bpl 50$
|
||||
Mov #"@@,@R5
|
||||
Sob R0,50$
|
||||
Inc R2 ;Next sec
|
||||
Mov #Gap3,R0 ;Gap Length
|
||||
Mov #$FEA1,DatTyp ;Data code
|
||||
60$: Bit #CRC,@R4 ;Write CRC
|
||||
Beq 60$
|
||||
Sob R3,FrmSec ;Count Sectors
|
||||
Efrmt: TstB @R4 ;End of Track Writing
|
||||
Bpl Efrmt
|
||||
Mov #$4E4E,@R5 ;Write 4E4E
|
||||
Tst @R4 ;Index ?
|
||||
Bpl Efrmt ;No, write Again
|
||||
Mov #5,R0 ;Write 5*4E4E
|
||||
10$: TstB @R4
|
||||
Bpl 10$
|
||||
Mov #$4E4E,@R5
|
||||
Sob R0,10$
|
||||
Tst @R5 ;Set writing OFF
|
||||
Retu: Return ;and exit
|
||||
.SbTtl Read/write Processing
|
||||
$ReWr: Mov #20.,Retry ;Retry Counter
|
||||
ClrB WrtFlg ;Write flag
|
||||
TstB Sectr ;Sector Number
|
||||
Beq Nstd
|
||||
CmpB Sectr,#MaxSec
|
||||
Bhi Nstd
|
||||
Tst Wcnt
|
||||
Beq Retu ;Nothing to read/write
|
||||
Bpl 10$ ;Read
|
||||
Neg Wcnt
|
||||
IncB WrtFlg ;Set Write Flag
|
||||
Mov #$FBA1,DatTyp ;Normal Data mark
|
||||
10$: Mov Address,R1 ;User Bus Address
|
||||
Mov Wcnt,R2 ;Word to Byte Counter
|
||||
Asl R2
|
||||
Mov SelS,R5 ;Sel Address
|
||||
Call Prepare
|
||||
Bcc 20$
|
||||
Mov #13,R0 ;$.Tr4,R0
|
||||
Br Err2
|
||||
20$: Mov Address,R2
|
||||
Bic #140000,R2
|
||||
Mov #SelTbl+2,AdrSel
|
||||
Call SelUni ;Select Unit
|
||||
TstB WrtFlg
|
||||
Beq 30$
|
||||
Bit #Wrp,@R4 ;Write Protected ?
|
||||
Beq 30$ ;No
|
||||
Mov #$.WlCC,R0 ;Write Lock Error
|
||||
Br Err2
|
||||
30$: Call Seek ;Seek Track
|
||||
Call SetDev ;Set Unit Parameters
|
||||
.SbTtl Sector Id Get Routine
|
||||
MovB #$.NfAM,Flags ;Prepare Diag
|
||||
40$: Call SearAm ;Search for Address Mark
|
||||
Bcc 50$ ;OK
|
||||
MovB Flags,R0 ;AM Not Found (Turns...)
|
||||
Br Err2
|
||||
50$: Call TwoWrd ;Read two words of header
|
||||
Call CrcChk ;Check Crc
|
||||
Bne 60$
|
||||
MovB #$.CcId,Flags
|
||||
Br 40$ ;CRC Error
|
||||
60$: Bic #^C3,R1 ;Sector Length Code
|
||||
CmpB R1,#2 ;Normal
|
||||
Bne Nstd
|
||||
Jmp ReaCom ;No, Error
|
||||
Nstd: Mov #$.Nstd,R0 ;Non Standard Format
|
||||
Err2: Jmp ErrExt
|
||||
|
||||
.SbTtl Track Seting done, Format Checked
|
||||
.Psect $Code
|
||||
ReaCom:
|
||||
10$:
|
||||
;
|
||||
;;;; Mov #20.,Retry
|
||||
;
|
||||
Cmp Wcnt,#SecLen ;Sector Length
|
||||
Blo 20$ ;Single-Sector operation
|
||||
Clr SkpCnt ;More then one Sector
|
||||
Br 30$
|
||||
20$: Mov #SecLen,SkpCnt ;Set Counter for
|
||||
Sub Wcnt,SkpCnt ;Data words to skip
|
||||
30$: Call SearAM ;Address Mark Search
|
||||
Bcc 40$
|
||||
35$: Dec Retry
|
||||
Bpl 30$ ;Retry once more
|
||||
Mov #$.SnFn,R0
|
||||
Br ErrExt
|
||||
40$: TstB @R4 ;Wait for Data Ready
|
||||
Bpl 40$
|
||||
Cmp SidTrk,@R5 ;It's needed track/Side ?
|
||||
Beq 50$ ;Side+<Track*400>
|
||||
MovB #-1,@CurTrk
|
||||
Br 35$ ;No, Again
|
||||
50$: TstB @R4 ;Wait for data ready
|
||||
Bpl 50$
|
||||
Mov @R5,R1 ;Get Sector Number, Length
|
||||
Swab R1
|
||||
CmpB Sectr,R1 ;Compare sector No
|
||||
Bne 30$ ;Not Equal, Once more
|
||||
Mov #SecLen,R1 ;Length word to skip
|
||||
Sub SkpCnt,R1 ;Words to read
|
||||
Call CrcChk ;Check for legal CRC
|
||||
Bne SecPrc ;OK, Process sector
|
||||
Mov #$.CcId,R0 ;Id CRC Error
|
||||
Br ErrExt
|
||||
.SbTtl Sector Procesing Routine
|
||||
SecPRC: Mov @AdrSel,@#Sel1
|
||||
TstB WrtFlg ;Write ?
|
||||
Bne WRICom ;Yes
|
||||
.SbTtl Read Sector Routine
|
||||
Call RdZero ;No, Search for Zero
|
||||
TstB ErrCnt ;Founded
|
||||
Beq 20$ ;No, Error - No data mark
|
||||
Call StrtRd ;Set Go Reading
|
||||
Mov #200.,R0
|
||||
10$: TstB @R4 ;Wait for data Ready
|
||||
Bmi 30$
|
||||
Sob R0,10$
|
||||
20$: Mov #$.NfDM,R0 ;Data mark not found
|
||||
Br ErrExt
|
||||
30$: Tst @R5 ;Skip A1A1 data
|
||||
40$: TstB @R4 ;Wait for data ready
|
||||
Bpl 40$
|
||||
Mov @R5,R0 ;Data mark
|
||||
Cmp #$A1FB,R0 ;Normal ?
|
||||
Beq 50$ ;Yes
|
||||
Cmp #$A1F8,R0 ;Deleted data ?
|
||||
Bne 20$ ;No, Error
|
||||
50$: Call ReaWrd ;Read Word to User Buffer
|
||||
Call CrcChk ;Check CRC
|
||||
Bne ChkAll ;OK
|
||||
Mov #$.WlCC,R0 ;Data CRC Error
|
||||
Br ErrExt ;
|
||||
|
||||
.SbTtl Multi-Sector Operations
|
||||
ChkAll: Mov @#$$SysS,@#Sel1
|
||||
Sub #SecLen,Wcnt ;All data processed ?
|
||||
Bhi NxtSec ;No, Process next Sector
|
||||
ClrB ErrByt
|
||||
Return ;Yes, Exit
|
||||
NxtSec: IncB Sectr ;Next Sect No
|
||||
CmpB Sectr,#MaxSec ;Next Track ?
|
||||
Blos 30$ ;no
|
||||
Bit #USide,CsrW ;Upper side ?
|
||||
Bne 10$ ;Yes
|
||||
IncB SidTrk ;No, Skip to upper side
|
||||
Bis #USide,CsrW ;Reset Side Flag
|
||||
MovB #20.,Turns ;Max Turn Number
|
||||
Br 20$ ;Side+<Track*400>
|
||||
10$: Bic #USide,CsrW ;Reset Side Flag
|
||||
IncB Track ;Go next Track
|
||||
Call Seek ;Seek Track
|
||||
MovB Track,SidTrk+1 ;
|
||||
ClrB SidTrk ;Clear Side flag
|
||||
20$: MovB #1,Sectr ;Sector = 1
|
||||
Call SetDev ;Set Correction
|
||||
30$: Jmp ReaCom
|
||||
.SbTtl Write Commands processing
|
||||
WRICom: Mov #11.,R0 ;"4E4E" Counter
|
||||
Call WrtId ;Write Data Id Mark
|
||||
Call WriUwd ;Write User Word
|
||||
Mov CsrW,@R4 ;Command code
|
||||
Dec R1 ;Loop Counter for Sector
|
||||
Beq 20$ ;
|
||||
10$: Call WriUwd
|
||||
Sob R1,10$ ;and Loop
|
||||
|
||||
.SbTtl Sector end Zero filling
|
||||
20$: Mov SkpCnt,R1 ;Filling Space Counter
|
||||
Beq 40$ ;No Filling
|
||||
30$: TstB @R4 ;Write a word of Zero
|
||||
Bpl 30$ ;
|
||||
Mov #0,@R5 ;
|
||||
Sob R1,30$ ;
|
||||
|
||||
40$: Bit #CRC,@R4 ;Wait for CRC Writing
|
||||
Beq 40$
|
||||
Mov #$4E4E,@R5 ;Write GAP
|
||||
50$: TstB @R4
|
||||
Bpl 50$
|
||||
Tst @R5 ;And Set Writing OFF
|
||||
Br ChkAll ;Check for operation Complete
|
||||
.SbTtl Read until Not Zero
|
||||
.Psect $Code
|
||||
RdZero: Tst @R5 ;Skip Data
|
||||
MovB #100.,ErrCnt ;Time counter
|
||||
10$: TstB @R4
|
||||
Bpl 10$
|
||||
Mov @R5,R0 ;Get Data
|
||||
Beq 20$ ;Zero, Exit
|
||||
Inc R0
|
||||
Beq 20$ ;Complement Zero
|
||||
DecB ErrCnt
|
||||
Bne 10$ ;time count
|
||||
20$: Return
|
||||
.SbTtl Routine to read two disk words
|
||||
.Psect $CodOvr
|
||||
TwoWrd:
|
||||
10$: TstB @R4 ;Wait for Data Ready
|
||||
Bpl 10$
|
||||
Mov @R5,R0 ;Read data Word
|
||||
20$: TstB @R4
|
||||
Bpl 20$
|
||||
Mov @R5,R1 ;Read another word
|
||||
Return
|
||||
.SbTtl Address Mark Search Routine
|
||||
.Psect $Code
|
||||
SearAm: Mov #15.,R0 ;Time counter
|
||||
10$: Tst @R5 ;Clear Data
|
||||
Sob R0,10$ ;timeout
|
||||
.SbTtl Initial Zero skiping (not index)
|
||||
Clr R1 ;Index Flag
|
||||
Clr IndTim ;Time of Index
|
||||
Clr Index
|
||||
.SbTtl Check for Data
|
||||
20$: Call ChkInd
|
||||
Bcs 100$
|
||||
Beq 20$ ;Zero, skip it
|
||||
Com R0
|
||||
Beq 20$ ;---"----"-----
|
||||
30$: Call ChkInd
|
||||
Bcs 100$
|
||||
Beq 40$
|
||||
Com R0
|
||||
Bne 30$
|
||||
.SbTtl Real Adress mark Checking
|
||||
40$: MovB #3,ErrCnt ;Retry Counter
|
||||
50$: Mov @R5,R0 ;Data = Zero ?
|
||||
Beq 60$ ;Yes,
|
||||
Com R0 ;Inverted Zero ?
|
||||
Bne 20$ ;No
|
||||
60$: DecB ErrCnt ;Yes, Wait once more
|
||||
Bne 50$
|
||||
Call StrtRd ;Set GoR
|
||||
Mov #20.,R0
|
||||
70$: TstB @R4 ;Wait for Data ready
|
||||
Bmi 80$ ;Ready
|
||||
Sob R0,70$ ;Not Ready, Timeout
|
||||
Br 20$
|
||||
80$: Tst @R5 ;Skip Data
|
||||
90$: TstB @R4 ;Wait for data ready
|
||||
Bpl 90$
|
||||
Cmp #$A1FE,@R5 ;Is it Address mark ?
|
||||
Bne 20$ ;No, Repeat once more all program
|
||||
ClC
|
||||
100$: Return
|
||||
|
||||
.SbTtl Check for Index
|
||||
ChkInd: Mov Index,R1
|
||||
Mov @R4,R0 ;Index ?
|
||||
Bpl Ind0 ;It's No Index
|
||||
;It's Index
|
||||
Tst Index
|
||||
Bne Ind11
|
||||
Ind01:
|
||||
Clr IndTim ;Time of Index
|
||||
Mov @PC,Index
|
||||
DecB Turns
|
||||
Bne ExChk
|
||||
Sec
|
||||
Return
|
||||
|
||||
ExChk: ClC
|
||||
Mov @R5,R0
|
||||
Return
|
||||
|
||||
Ind0: Tst Index
|
||||
Beq Ind00
|
||||
Ind10: Clr IndTim
|
||||
Clr Index
|
||||
Br ExChk
|
||||
;Old Index
|
||||
Ind00:
|
||||
Ind11: Inc IndTim
|
||||
Cmp IndTim,#65500.
|
||||
Blos ExChk
|
||||
Mov #$.Stop,R0
|
||||
Jmp ErrExt
|
||||
|
||||
.SbTtl INTERNAL PROCEDURES
|
||||
.SbTtl Check CRC-Bit
|
||||
CrcChk: MovB #15.,ErrCnt
|
||||
10$: Bit #CRC,@R4 ;CRC OK ?
|
||||
Bne 20$ ;Yes
|
||||
DecB ErrCnt ;No, Wait
|
||||
Bne 10$ ;Exit on time-Out
|
||||
20$: Return
|
||||
|
||||
.SbTtl (R0)* "4E4E", 6*"0000","A1A1",Dattyp Writing Routine
|
||||
WrtId: Mov #$4E4E,@R5 ;Write 4E4E
|
||||
10$: TstB @R4
|
||||
Bpl 10$
|
||||
Mov #$4E4E,@R5 ;.....
|
||||
Sob R0,10$ ;Write R0 Times
|
||||
Mov #6.,R0
|
||||
20$: TstB @R4
|
||||
Bpl 20$
|
||||
Mov #0000,@R5 ;Write Zeroes
|
||||
Sob R0,20$
|
||||
Bis #WM,CsrW ;Write Mark
|
||||
30$: TstB @R4
|
||||
Bpl 30$
|
||||
Mov #$A1A1,@R5
|
||||
Mov CsrW,@R4
|
||||
Bic #WM,CsrW ;Prepare for MW clearing
|
||||
40$: TstB @R4
|
||||
Bpl 40$
|
||||
Mov DatTyp,@R5 ;Write mark
|
||||
Return
|
||||
.SbTtl Start of Read Sequence
|
||||
StrtRd: Bis #GoR,CsrW ;Set and Clear GoR
|
||||
Mov CsrW,@R4 ;Set..
|
||||
Bic #GoR,CsrW
|
||||
Mov #8.,R0
|
||||
Sob R0,.
|
||||
Mov CsrW,@R4 ;Clear..
|
||||
Return
|
||||
.SbTtl Read Disk Word, Write to User
|
||||
ReaWrd:
|
||||
10$: TstB @R4 ;Wait for data
|
||||
Bpl 10$
|
||||
Mov @R5,R0 ;Get Disk Word
|
||||
Swab R0
|
||||
Mov R0,Window(R2)
|
||||
Tst (R2)+ ;and store it
|
||||
Bit #140000,R2 ;Check Window Address
|
||||
Beq 20$
|
||||
Add #2,AdrSel
|
||||
Bic #140000,R2
|
||||
Mov @AdrSel,@#Sel1
|
||||
20$: Sob R1,10$ ;Loop until all done
|
||||
Mov SkpCnt,R1
|
||||
Beq 40$
|
||||
30$: TstB @R4 ;Skip sector Rest
|
||||
Bpl 30$
|
||||
Tst @R5
|
||||
Sob R1,30$
|
||||
40$: Return
|
||||
.SbTtl Read User Word, Write to Disk
|
||||
WriUwd:
|
||||
10$: TstB @R4 ;Wait for data
|
||||
Bpl 10$
|
||||
Mov Window(R2),@R5 ;Get User Word
|
||||
Tst (R2)+
|
||||
Bit #140000,R2 ;Check Window Address
|
||||
Beq 20$
|
||||
Add #2,AdrSel
|
||||
Bic #140000,R2
|
||||
Mov @AdrSel,@#Sel1
|
||||
20$: Return
|
||||
.SbTtl Track Seek Routine
|
||||
.Psect $CodOvr
|
||||
Seek:
|
||||
.Enabl LSB
|
||||
TstB Track ;Home ?
|
||||
Beq Home
|
||||
TstB @CurTrk ;Known Track ?
|
||||
Bpl 10$ ;Yes
|
||||
Call Home ;No, Home
|
||||
10$: CmpB @CurTrk,Track ;Where are we ?
|
||||
Beq 30$ ;It's OK
|
||||
Bhi 20$ ;We are at the center
|
||||
Call PlStep ;
|
||||
Br 10$
|
||||
20$: Call MiStep ;Issue step
|
||||
Br 10$
|
||||
30$: Mov #10000.,R0 ;Time-Out
|
||||
Sob R0,.
|
||||
Seek1: MovB #20.,Turns ;Max Turn Number
|
||||
Return
|
||||
|
||||
.SbTtl Step Routines
|
||||
PlStep: IncB @CurTrk ;Forward step
|
||||
Bmi 40$
|
||||
Bit #Dir,CsrW
|
||||
Bne KwkStp
|
||||
Bis #Dir,CsrW
|
||||
Br Lstp
|
||||
40$: Mov #$.Seek,R0
|
||||
Jmp ErrExt
|
||||
|
||||
MiStep: DecB @CurTrk
|
||||
Bit #Tr0,@R4
|
||||
Beq 50$
|
||||
ClrB @CurTrk
|
||||
Return
|
||||
50$: Bit #Dir,CsrW
|
||||
Beq KwkStp
|
||||
Bic #Dir,CsrW
|
||||
LStp: Mov #200.,R0
|
||||
Br 60$
|
||||
KwkStp: Mov #1,R0
|
||||
60$: Mov CsrW,@R4
|
||||
Sob R0,.
|
||||
Bis #Step,CsrW
|
||||
Mov CsrW,@R4
|
||||
Mov TimTrk,R0
|
||||
Bic #Step,CsrW
|
||||
Sob R0,.
|
||||
Return
|
||||
.Dsabl LSB
|
||||
|
||||
.SbTtl Home Routine
|
||||
Home: MovB #128.,@CurTrk
|
||||
10$: Call MiStep ;Backward step
|
||||
Bit #Tr0,@R4 ;We are home ?
|
||||
Bne 20$ ;Yes, OK
|
||||
TstB @CurTrk ;No, Step
|
||||
Bne 10$
|
||||
Mov #$.NHom,R0 ;No Home
|
||||
Jmp ErrExt
|
||||
20$: ClrB @CurTrk
|
||||
Br Seek1
|
||||
.SbTtl Unit Setting and Head Moving Routine
|
||||
SetDev: CmpB TrkCor,@CurTrk ;Correction switching needed ?
|
||||
Bhi 10$
|
||||
Bis #Rez,CsrW ;Yes
|
||||
Br 20$
|
||||
10$: Bic #Rez,CsrW
|
||||
20$: Mov CsrW,@R4
|
||||
Return
|
||||
.SbTtl Unit and Side Select Routine
|
||||
SelUni: Mov #Csr097,R4
|
||||
Clr SidTrk ;Side+<Track*400>
|
||||
Mov R4,R5
|
||||
Tst (R5)+ ;Pointer to Dat097
|
||||
Bic #<Uside+Ds0+Ds1+Ds2+Ds3>,CsrW ;Clear unit, side bits
|
||||
MovB Code+1,R1 ;Unit,Side
|
||||
Bit #4,R1 ;Upper Side ?
|
||||
Beq 10$ ;No
|
||||
Bis #USide,CsrW ;Yes, Upper Side
|
||||
Mov #1,SidTrk ;Set Side at SidTrk
|
||||
10$: Bic #^C3,R1 ;Unit No
|
||||
20$: Bis #Msw,CsrW ;Set Motor On
|
||||
Mov CsrW,@R4 ;
|
||||
Clr R0
|
||||
Sob R0,.
|
||||
Sob R0,. ;Wait for Motor On
|
||||
BisB SelTAB(R1),CsrW ;Setup New Unit bits
|
||||
Mov CsrW,@R4 ;And set Unit On
|
||||
Add #TrkTab,R1 ;Track Table Offset ??
|
||||
Mov R1,CurTrk ;And store in CurTrk
|
||||
30$: Mov TimUp,R0 ;Wait for Head Down
|
||||
Sob R0,.
|
||||
MovB Track,SidTrk+1
|
||||
Return
|
||||
.Psect $CnsOvr
|
||||
SelTab: .Byte Ds0,Ds1,Ds2,Ds3
|
||||
PrmTab: .Word TimTrk,TimUp,TrkCor
|
||||
Maxprm=.-PrmTab-2
|
||||
|
||||
.Psect $RAM
|
||||
Sav4: .BlkW
|
||||
SPSave: .BlkW
|
||||
CsrW: .BlkW ;Csr097 Write only Copy
|
||||
TimUp: .BlkW ;;Head Up Time
|
||||
TimTrk: .BlkW ;Track ot track Time
|
||||
TrkCor: .BlkB ;Correction switching track
|
||||
ErrFlg: .BlkB ;Error Flag (For C-bit)
|
||||
CurTrk: .BlkW ;Current Track Pointer
|
||||
TrkTab: .BlkB 4 ;Current Tracks for Units
|
||||
DatTyp: .BlkW ;Id Data
|
||||
SidTrk: .BlkW ;Side+<Track*400>
|
||||
TrnNum: .BlkW
|
||||
ErrCnt: .BlkB ;Temporary Error Counter
|
||||
WrtFlg: .BlkB ;Write Commands flag
|
||||
IndTim: .BlkW
|
||||
SkpCnt: .BlkW ;Words to skip Counter
|
||||
Turns: .BlkB
|
||||
Flags: .BlkB
|
||||
Index: .BlkW
|
||||
Retry: .BlkW
|
||||
|
||||
Code: .BlkB
|
||||
.BlkB
|
||||
Sectr: .BlkB
|
||||
Track: .BlkB
|
||||
AddRess:.BlkW
|
||||
SelS: .BlkW
|
||||
Wcnt: .BlkW
|
||||
.End
|
218
ROM sources/BK-0011 driver module/BKEMT.MAC
Normal file
218
ROM sources/BK-0011 driver module/BKEMT.MAC
Normal file
@ -0,0 +1,218 @@
|
||||
.Mcall .Module
|
||||
.Module BKEMT, Release=X02, Version=07, Comment=<BK0011 Emt Handler>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl ErrByt,Debug,$UsrTrp,SysFlg,PutUwd,UsrBuf
|
||||
|
||||
.Macro Command Routine,Number,Comment
|
||||
.Iif NDF HigEmt, HigEmt==0
|
||||
.=EmtTbl+Number
|
||||
.Globl Routine
|
||||
.Word Routine
|
||||
.Iif GT <Number-HigEmt> HigEmt==Number
|
||||
.=EmtTbl+HigEmt+2
|
||||
.EndM
|
||||
.SbTtl EMT Entry Point
|
||||
EmtInt::
|
||||
Mov (SP)+,$SavPC ;EMT PC And PS
|
||||
Mov (SP)+,$SavPS ;
|
||||
Mov SP,$SavSP ;SP Save Area
|
||||
Mov R5,$SvAre
|
||||
Mov $SavPC,R5 ;Emt Address+2
|
||||
Mov -(R5),R5 ;Get EMT Request code
|
||||
Mov $$UsrS,-(SP)
|
||||
Bic #^C<TapMsk!ScrMsk>,@SP ;Unused Bits
|
||||
Bis #SysSel,@SP
|
||||
Mov (SP)+,@#$$SysS
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov #SStack,SP ;Setup new stack
|
||||
Mov $SavSP,USPSav ;User SP Save Area
|
||||
Mov $SavPS,UPSSav ;User PS Save Area
|
||||
Mov $SavPC,UPCSav ;User PC Save Area
|
||||
Mov $SvAre,-(SP) ;Save Old R5 Register
|
||||
Mov @#Vec4,SavV4
|
||||
Mov #EmtV4,@#Vec4 ;Emt Vec 4 Routine
|
||||
Bit #1,R5 ;Check for Even Request code
|
||||
Bne IllEmt ;Illegal
|
||||
Bic #^C376,R5 ;Clear Unused bits
|
||||
Cmp R5,#HigEmt ;Check Request Legality
|
||||
Bhi IllEmt ;This Emt is Illegal
|
||||
ClrB SysFlg ;For Disk/Tape Handlers
|
||||
Call @EmtTbl(R5) ;Call Appropriate Routine
|
||||
MfPS R5 ;Set User PS N,Z,V and C
|
||||
EmExt: Mov SavV4,@#Vec4
|
||||
Mov USPSav,$SavSP ;User SP Save Area
|
||||
Mov UPSSav,$SavPS ;User PS Save Area
|
||||
Mov UPCSav,$SavPC ;User PC Save Area
|
||||
Bic #17,$SavPS ;Set NZVC
|
||||
Bic #^C17,R5 ;
|
||||
Bis R5,$SavPS ;
|
||||
EmtExi: Mov (SP)+,$SvAre ;R5 Save Area
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1 ;Set User Allocation
|
||||
Mov $SavSP,SP
|
||||
Mov $SavPS,-(SP)
|
||||
Mov $SavPC,-(SP)
|
||||
Mov $SvAre,R5
|
||||
Rtt ;And return
|
||||
.Save
|
||||
.Psect $RAM
|
||||
SavV4:: .BlkW
|
||||
.Restore
|
||||
EmtV4: Mov SavV4,@#Vec4
|
||||
Mov USPSav,$SavSP ;User SP Save Area
|
||||
Mov UPSSav,$SavPS ;User PS Save Area
|
||||
Mov UPCSav,$SavPC ;User PC Save Area
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1 ;Set User Allocation
|
||||
Mov $SavSP,SP
|
||||
Mov $SavPS,-(SP)
|
||||
Mov $SavPC,-(SP)
|
||||
Jmp @Vec4 ;Go User Trap to 4
|
||||
|
||||
.SbTtl Illegal EMT Processing
|
||||
$BRsrv: Tst (SP)+
|
||||
IllEmt: Mov #ErrEmt,EmtPri
|
||||
.SbTtl Illegal Command Entry Point
|
||||
IllBrk::
|
||||
Mov SysErr,R5 ;User's EMT-Error processing?
|
||||
Beq Ill1 ;No
|
||||
Sub #2,@#UspSav ;Yes,...
|
||||
Mov @#USPSav,R5 ;Address
|
||||
Mov R0,-(SP)
|
||||
Mov UpcSav,R0
|
||||
Call PutUwd ;Put onto User Stack (for RETURN)
|
||||
Mov (SP)+,R0
|
||||
Mov SysErr,UpcSav
|
||||
Clr SysErr ;Reset Mode
|
||||
Mov @#UPSSav,R5 ;New PS=OLD
|
||||
Br EmExt
|
||||
|
||||
Ill1: Mov @#$$UsrS,@#UsrBuf ;Save...
|
||||
Mov @#$$SysS,@#$$UsrS
|
||||
Mov R0,-(SP)
|
||||
Mov EmtPri,R0
|
||||
Call $Bprint
|
||||
Mov (SP)+,R0
|
||||
Mov @#UsrBuf,@#$$UsrS ;Restore User Sel
|
||||
Ill2: Mov USPSav,$SavSP ;User SP Save Area
|
||||
Mov UPSSav,$SavPS ;User PS Save Area
|
||||
Mov UPCSav,$SavPC ;User PC Save Area
|
||||
Mov (SP)+,$SvAre ;R5 Save Area
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1 ;Set User Allocation
|
||||
Mov $SavSP,SP
|
||||
Mov $SavPS,-(SP)
|
||||
Mov $SavPC,-(SP)
|
||||
Mov $SvAre,R5
|
||||
Jmp Debug ;And exit to Keyboard Monitor
|
||||
.SbTtl $BEmtset (EMT 114) Routine (Illegal Emt Processing)
|
||||
$BEmtset::
|
||||
Mov R0,@#SysErr ;Set Illegal Emt Routine Address
|
||||
Return
|
||||
|
||||
.SbTtl $Bexit (EMT 0) Routine (Exit from Users Program)
|
||||
$Bexit::
|
||||
Tst (SP)+
|
||||
Tst R0
|
||||
Bne Ill2
|
||||
Call $Binit ;System initialization
|
||||
Br Ill2
|
||||
|
||||
.SbTtl $Btrpset (EMT 112) Routine (User's HALT Processing)
|
||||
$BtrpSet::
|
||||
Mov R0,$Usrtrp ;Set User's Routine Address
|
||||
Return
|
||||
.Psect $Const
|
||||
|
||||
ErrEmt: .Byte 25
|
||||
.Ascii /?BK-ILLEGAL EMT /<200>
|
||||
.Even
|
||||
.SbTtl EMT-Requests Address Table
|
||||
|
||||
EmtTbl:
|
||||
|
||||
.SbTtl General Purpose Requests
|
||||
Command $Bexit 0 <Exit from Users Program>
|
||||
Command $Binit 14 <Computer Initialization>
|
||||
Command $Btrpset 112 <User's HALT Processing>
|
||||
Command $BEmtset 114 <Illegal Emt Processing>
|
||||
|
||||
.SbTtl Memory Management Requests
|
||||
Command $Bsetpg 52 <Connect Memory Page>
|
||||
Command $Bjsr 54 <Jsr to Memory Page>
|
||||
Command $Bjmp 56 <Jmp to Memory Page>
|
||||
Command $Bpeek 60 <Get the Word from Memory Page>
|
||||
Command $BpokB 62 <Put the Byte to Memory Page>
|
||||
Command $Bpoke 120 <Put the Word to Memory Page>
|
||||
Command $Btest 72 <Get Memory page status>
|
||||
|
||||
.SbTtl Keyboard Handler Requests
|
||||
Command $Bkbini 4 <Initialize Keyboard>
|
||||
Command $Bttyin 6 <Get One Character from Keyboard>
|
||||
Command $Bgtlin 10 <Get String from Keyboard>
|
||||
Command $Bfunct 12 <Set Function Switch>
|
||||
Command $Bedit 66 <Edit the String>
|
||||
Command $Bkset 100 <Set Keyboard Handler Mode>
|
||||
Command $Bkget 116 <Read Keyboard Handler Mode>
|
||||
Command $Binkey 102 <Get character Without Waiting>
|
||||
|
||||
.SbTtl TV-Set Handler Requests
|
||||
Command $BTtyoy 16 <Type One Character>
|
||||
Command $Bprint 20 <Type Character String>
|
||||
Command $Bssout 22 <Type at Special String>
|
||||
Command $Blocat 24 <Set Cursor Coordinates>
|
||||
Command $Bpos 26 <Get Cursor Coordinates>
|
||||
Command $Bpoint 30 <Set Graphics Point>
|
||||
Command $Bgetpnt 104 <Get TV-Point Color>
|
||||
Command $Bvect 32 <Draw Vector or .....>
|
||||
Command $Bbufset 74 <Switch Screen Buffers>
|
||||
Command $BtvSet 64 <Set TV-set Handler Mode>
|
||||
Command $BtvGet 34 <Get TV-set Handler Mode>
|
||||
Command $BGcolor 106 <Exam Color Map>
|
||||
Command $BScolor 76 <Set Color Map>
|
||||
Command $Bscroll 110 <TV-Line Scrolling>
|
||||
Command $Bcircl 130 <Draw the Circle>
|
||||
.SbTtl Sound Requests
|
||||
Command $Bsound 124 <Sound Generation>
|
||||
|
||||
.SbTtl Peripherals Requests
|
||||
Command $BDisk 70 <Floppy-Disk Request>
|
||||
Command $BMtb10 36 <BK0010-compatible tape handler Request>
|
||||
|
||||
.SbTtl Reserved Requests
|
||||
Command $BRsrv 132 <Msx Cassette-Tape Request $BMtMsx>
|
||||
Command $BRsrv 122 <Draw Language $Bdraw>
|
||||
Command $BRsrv 126 <Change color at TV-Screen $Bchclr>
|
||||
Command $BRsrv 40
|
||||
Command $BRsrv 42
|
||||
Command $BRsrv 44
|
||||
Command $BRsrv 46
|
||||
Command $BRsrv 50
|
||||
Command $BRsrv 2
|
||||
|
||||
.Psect $RAM
|
||||
.Even
|
||||
SysErr:: .BlkW
|
||||
UPCSav:: .BlkW
|
||||
UPSSav:: .BlkW
|
||||
USPSav:: .BlkW
|
||||
EmtPri:: .BlkW
|
||||
.End
|
1114
ROM sources/BK-0011 driver module/BKGRP2.MAC
Normal file
1114
ROM sources/BK-0011 driver module/BKGRP2.MAC
Normal file
File diff suppressed because it is too large
Load Diff
366
ROM sources/BK-0011 driver module/BKGSUB.MAC
Normal file
366
ROM sources/BK-0011 driver module/BKGSUB.MAC
Normal file
@ -0,0 +1,366 @@
|
||||
.Mcall .Module
|
||||
.Module BKGSub, Release=X02, Version=02, Comment=<BK0011 Graphics Routines>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl GetUWd,RetEmt,Shifts,ScrBot,$OffR0,Xcoord,Ycoord
|
||||
.Globl RstrMX,Shiftm,Color,SavRg,ScrSel,SetScS,SetScX
|
||||
.Globl Circle,CrcBlk,GetArg,Sound
|
||||
.SbTtl $Bgetpnt (EMT 104) Routine (Get TV-Point Color)
|
||||
$Bgetpnt::
|
||||
Jsr R0,SavRG
|
||||
Clr $OffR0(SP) ;Prepare Zero
|
||||
Mov R0,R5 ;Argument Block Address
|
||||
Tst (R5)+ ;Skip the first word
|
||||
Call Coord ;Get Coordinates and Compute Address
|
||||
Bcs 30$
|
||||
Call SetScS ;Map Screen
|
||||
MovB @R0,R3 ;Get Byte
|
||||
Com R1 ;Inverted mask
|
||||
Bic R1,R3 ;Clear Unused Bits
|
||||
Tst R2 ;Shift Counter
|
||||
Beq 20$ ;No Shift Needed
|
||||
10$: Asr R3
|
||||
Sob R2,10$
|
||||
20$: Mov R3,$OffR0(SP) ;Mov Result to Stack
|
||||
ClC
|
||||
Call SetScX
|
||||
30$: Jmp RetEmt
|
||||
.SbTtl $Bpoint (EMT 30) Routine (Set Graphics Point)
|
||||
$Bpoint::
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5
|
||||
Call GetUwd ;Color for Drawing
|
||||
Mov R0,PntBuf ;
|
||||
Call Coord
|
||||
$Bpoi1: Bcs 40$
|
||||
Call SetScS
|
||||
MovB PntBuf,R3
|
||||
Bpl 10$
|
||||
Mov Color,R3
|
||||
10$: Tst R2
|
||||
Beq 30$ ;No shifting
|
||||
20$: Asl R3
|
||||
Sob R2,20$
|
||||
30$: BicB R1,@R0 ;Clear Points in Screen
|
||||
Com R1
|
||||
BicB R1,R3 ;Clear Unused Point
|
||||
BisB R3,@R0
|
||||
Call SetScX
|
||||
40$: Jmp RetEmt
|
||||
.SbTtl Coordinate processing Routine
|
||||
Coord: Call GetUwd ;X
|
||||
Mov R0,Xcoord
|
||||
Call GetUwd
|
||||
Mov R0,R1
|
||||
Mov R1,Ycoord
|
||||
Mov Xcoord,R0
|
||||
CoordX: Cmp R1,RstrMx ;Maximum Raster No
|
||||
Bhi 20$ ;Illegal line No
|
||||
Mov R1,R2 ;Get Y coordinate
|
||||
Swab R2 ;*400
|
||||
ClrB R2
|
||||
Ror R2 ;*200
|
||||
Ror R2 ;Y-Address (*100)
|
||||
Add ScrBot,R2 ;
|
||||
Cmp R0,#511. ;X Max ?
|
||||
Bhi 20$
|
||||
Mov R0,R1
|
||||
Clc
|
||||
Bic #^C7,R1 ;Lower Bits of X
|
||||
Asr R0
|
||||
Asr R0
|
||||
Asr R0 ;In Bytes
|
||||
Add R2,R0 ;Screen address
|
||||
Bic #40000,R0
|
||||
Bis #100000,R0
|
||||
Mov R1,R2 ;Lower 3 Bits
|
||||
Asl R1
|
||||
Asl R1 ;*4
|
||||
BisB Shifts,R1
|
||||
MovB PntTab(R1),R1 ;Get Point Mask
|
||||
Bic #^C377,R1
|
||||
MovB Shiftm,R3
|
||||
Dec R3
|
||||
Bic R3,R2
|
||||
Clr R3
|
||||
Tst (PC)+
|
||||
20$: Sec
|
||||
Return
|
||||
.Psect $Const
|
||||
PntTab:
|
||||
;
|
||||
; 512 256 128 Points
|
||||
;
|
||||
.Byte 1, 3, 17,
|
||||
.Byte 2, 3, 17,
|
||||
.Byte 4, 14, 17,
|
||||
.Byte 10, 14, 17,
|
||||
.Byte 20, 60, 360,
|
||||
.Byte 40, 60, 360,
|
||||
.Byte 100, 300, 360,
|
||||
.Byte 200, 300, 360,
|
||||
.Even
|
||||
.Psect $RAM
|
||||
PntBuf::.BlkW
|
||||
X0:: .BlkW
|
||||
Y0:: .BlkW
|
||||
XK:: .BlkW
|
||||
YK:: .BlkW
|
||||
.Psect $Code
|
||||
.SbTtl $Bvect (EMT 32) Routine (Draw Vector or .....)
|
||||
$Bvect::
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5 ;Arg Block Address
|
||||
Mov #PntBuf,R4
|
||||
Mov #5,R3
|
||||
10$: Call GetUwd
|
||||
Mov R0,(R4)+
|
||||
Sob R3,10$
|
||||
Vect1: Mov #1,Flag
|
||||
MovB PntBuf,R4 ;Color
|
||||
Bpl 20$ ;Normal
|
||||
Mov Color,R4
|
||||
20$: MovB Shiftm,R0
|
||||
Sec
|
||||
Rol R0
|
||||
MovB R0,Lmsk1
|
||||
Com R0
|
||||
Mov R4,R3
|
||||
Bic R0,R4
|
||||
MovB R4,Lmsk0
|
||||
MovB ShiftM,R0
|
||||
MovB #200,R1
|
||||
30$: Dec R0
|
||||
Beq 40$
|
||||
AsrB R1
|
||||
Br 30$
|
||||
40$: MovB R1,Rmsk1
|
||||
Com R1
|
||||
Bic R1,R3
|
||||
MovB R3,Rmsk0
|
||||
Mov X0,X00
|
||||
MovB Shiftm,R4
|
||||
Mov R4,StepXX
|
||||
Dec R4
|
||||
Bic R4,X00
|
||||
MovB Shifts,R3
|
||||
2$: Dec R3
|
||||
Bmi 1$
|
||||
Asr X0
|
||||
Asr XK
|
||||
Br 2$
|
||||
.Sbttl Linear Interpolation
|
||||
1$: Mov XK,R4
|
||||
Mov YK,R2
|
||||
50$: Mov #1,DirX
|
||||
Sub X0,R4 ;R4=DX=Xnew-Xold
|
||||
Bge 60$ ;DX>=0 ==> Forward
|
||||
Neg XK ;DX
|
||||
Neg DirX ;X Direction (+-)
|
||||
Neg StepXX
|
||||
60$: Mov #1,DirY
|
||||
Mov #100,YIncr ;Y-Address Increment
|
||||
Sub Y0,R2 ;R2=DY=Ynew-Yold
|
||||
Bge 70$
|
||||
Neg R2
|
||||
Neg DirY ;Y Direction (+-)
|
||||
Neg YIncr ;Y Direction (+-)
|
||||
70$: Mov R2,R3
|
||||
Add R4,R3 ;R3=Dstn=DX+DY
|
||||
Clr R0 ;Function=0
|
||||
Cmp R4,R2 ;DX,DY
|
||||
Beq 80$
|
||||
Bge 90$ ;DX>DY
|
||||
Mov #-1,R0 ;DX<DY
|
||||
Br 90$
|
||||
80$: Tst R4 ;DX=DY
|
||||
Beq 210$ ;DX=DY=0==> Exit
|
||||
90$: Clr Stp
|
||||
Br 120$
|
||||
|
||||
100$: Clr Stp
|
||||
Tst R0 ;
|
||||
Bmi 110$ ;DX<DY
|
||||
;
|
||||
;X-Step
|
||||
;
|
||||
IncB Stp
|
||||
Sub R2,R0 ;F=F-DY
|
||||
Add DirX,X0
|
||||
Add StepXX,X00
|
||||
Br 120$
|
||||
;
|
||||
;Y-Step
|
||||
;
|
||||
110$: IncB Stp+1
|
||||
Add R4,R0 ;F=F+DX
|
||||
Add DirY,Y0 ;Y-Step
|
||||
|
||||
120$: Tst Y0
|
||||
Bpl 121$
|
||||
Tst DirY
|
||||
Bmi 210$
|
||||
Br 130$
|
||||
121$: Cmp Y0,RstrMX
|
||||
Ble 122$
|
||||
Tst DirY
|
||||
Bpl 210$
|
||||
Br 130$
|
||||
122$: Tst X0
|
||||
Bpl 123$
|
||||
Tst DirX
|
||||
Bmi 210$
|
||||
Br 130$
|
||||
123$: Cmp X0,#512.
|
||||
Blt 140$ ;Draw...
|
||||
Tst DirX
|
||||
Bpl 210$
|
||||
130$: Inc Flag ;Not Draw
|
||||
Br 200$
|
||||
|
||||
140$: Tst Flag
|
||||
Beq 150$
|
||||
Call Coor1
|
||||
Br 190$
|
||||
|
||||
150$: TstB Stp+1
|
||||
Beq 160$
|
||||
Add YIncr,XYAddr
|
||||
160$: MovB Shiftm,R1 ;Shifts Number
|
||||
Clc
|
||||
TstB Stp ;X-Step
|
||||
Beq 190$
|
||||
Tst DirX
|
||||
Bpl 180$
|
||||
170$: RorB ClrMap
|
||||
Sob R1,170$
|
||||
Bcc 190$
|
||||
MovB Lmsk1,ClrMap
|
||||
MovB Lmsk0,ClrCod
|
||||
Dec XYAddr
|
||||
Br 190$
|
||||
180$: RolB ClrMap
|
||||
Sob R1,180$
|
||||
Bcc 190$
|
||||
MovB Rmsk1,ClrMap
|
||||
MovB Rmsk0,ClrCod
|
||||
Inc XYAddr
|
||||
190$: Mov XYAddr,R1
|
||||
Bis #100000,R1
|
||||
Bic #40000,R1
|
||||
Call SetScS
|
||||
BicB ClrMap,@R1
|
||||
BisB ClrCod,@R1
|
||||
Call SetScX
|
||||
200$: Dec R3
|
||||
Bne 100$
|
||||
210$: Jmp RetEmt
|
||||
Coor1: Jsr R0,SavRg
|
||||
Mov X00,R0
|
||||
Mov Y0,R1
|
||||
Call CoordX
|
||||
Mov R0,XYAddr ;New Screen Address
|
||||
Mov PntBuf,R3
|
||||
10$: Tst R2
|
||||
Beq 30$ ;No shifting
|
||||
20$: Asl R3
|
||||
Sob R2,20$
|
||||
30$: MovB R1,ClrMap
|
||||
Com R1
|
||||
BicB R1,R3 ;Clear Unused Point
|
||||
MovB R3,ClrCod
|
||||
Jmp RetEmt
|
||||
.Psect $RAM
|
||||
X00:: .BlkW
|
||||
StepXX: .Blkw
|
||||
XYAddr: .BlkW
|
||||
Stp: .BlkW
|
||||
ClrMap: .BlkB
|
||||
ClrCod: .BlkB
|
||||
DirX: .BlkW
|
||||
DirY: .BlkW
|
||||
YIncr: .BlkW
|
||||
Flag: .BlkW
|
||||
Lmsk0: .BlkB
|
||||
Lmsk1: .BlkB
|
||||
Rmsk0: .BlkB
|
||||
Rmsk1: .BlkB
|
||||
.Even
|
||||
PntC: .BlkW
|
||||
XC: .BlkW
|
||||
YC: .BlkW
|
||||
.Psect $CodOvr
|
||||
.SbTtl $Bcircl (EMT 130) Routine (write circle or arc)
|
||||
$Bcircl::
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5
|
||||
Call GetUwd ;Color
|
||||
Mov R0,Pntc ;
|
||||
Mov #CrcBlk,R1
|
||||
Mov #7,R2
|
||||
20$: Call GetUwd
|
||||
Mov R0,(R1)+
|
||||
Sob R2,20$
|
||||
Call Circle
|
||||
ClC
|
||||
Jmp RetEmt
|
||||
.SbTtl Point Drawing Routine for $BCircle
|
||||
;
|
||||
;Input:
|
||||
;R1 = X
|
||||
;R2 = Y
|
||||
;
|
||||
Point:: Jsr R0,SavRg
|
||||
Mov R1,XCoord
|
||||
Mov R1,XC
|
||||
Mov R2,Ycoord
|
||||
Mov R2,YC
|
||||
Mov R1,R0
|
||||
Mov R2,R1
|
||||
Mov PntC,PntBuf
|
||||
Call CoordX ;Compute coordinates
|
||||
Jmp $Bpoi1
|
||||
.SbTtl Vector Drawing Routine for $BCircle
|
||||
;
|
||||
;Input:
|
||||
;R1 = XEnd
|
||||
;R2 = YEnd
|
||||
;Xcoord and Ycoord
|
||||
Vector::Jsr R0,SavRg
|
||||
Mov Xc,XK
|
||||
Mov Yc,YK
|
||||
Mov R1,X0
|
||||
Mov R2,Y0
|
||||
Mov PntC,PntBuf
|
||||
Jmp Vect1
|
||||
;.SbTtl $Bchcl (EMT 126) Routine (Change colors)
|
||||
;.Psect $Code
|
||||
;$Bchcl::
|
||||
;.SbTtl $Bdraw (EMT 122) Routine (Draw interpreter)
|
||||
;$Bdraw::
|
||||
; Sec
|
||||
; Return
|
||||
.SbTtl $Bsound (EMT 124) Sound Generation Routine
|
||||
.Psect $CodOvr
|
||||
$Bsound::
|
||||
Jsr R0,GetArg ;One tone generation
|
||||
Call Sound
|
||||
Jmp RetEmt
|
||||
.End
|
28
ROM sources/BK-0011 driver module/BKGTAB.MAC
Normal file
28
ROM sources/BK-0011 driver module/BKGTAB.MAC
Normal file
@ -0,0 +1,28 @@
|
||||
.TITLE SYMTAB
|
||||
.IDENT /X02.00/
|
||||
.SBTTL BK0011 SYMBOL GENERATORS TABLE
|
||||
.INCLUDE "BKHEAD"
|
||||
;
|
||||
.ENABL GBL
|
||||
.PSECT $CNSOVR
|
||||
|
||||
SYMGTB:: ; 0-37 ; 40-77 ;100-137;140-177;200-237;240-277;300-337;340-377;
|
||||
; ĘÎČ-7H0
|
||||
LAT: .WORD SYM$0, SYM$1, SYM$2, SYM$3, SYM$0, SYM$1, SYM$6, SYM$7
|
||||
; ĘÎČ-7H1
|
||||
RUS: .WORD SYM$0, SYM$1, SYM$6, SYM$7, SYM$0, SYM$1, SYM$2, SYM$3
|
||||
; ĘÎČ-7H2
|
||||
RUSLAT: .WORD SYM$0, SYM$1, SYM$2, SYM$7, SYM$0, SYM$1, SYM$6, SYM$3
|
||||
;ĎŃĹÂÄÎĂĐŔÔČĘŔ.
|
||||
PSGRAF: .WORD SYM$0, SYM$0, SYM$4, SYM$5, SYM$0, SYM$1, SYM$6, SYM$7
|
||||
;
|
||||
.WORD SYM$0, SYM$1, SYM$2, SYM$3, SYM$4, SYM$5, SYM$6, SYM$7
|
||||
;
|
||||
.WORD SYM$0, SYM$1, SYM$2, SYM$3, SYM$4, SYM$5, SYM$6, SYM$7
|
||||
SYMGMT::
|
||||
LAT2: .WORD SYM$81, SYM$81, SYM$82, SYM$83, SYM$81, SYM$81, SYM$86, SYM$87
|
||||
RUS2: .WORD SYM$81, SYM$81, SYM$86, SYM$87, SYM$81, SYM$81, SYM$82, SYM$83
|
||||
RUSLT2: .WORD SYM$81, SYM$81, SYM$82, SYM$87, SYM$81, SYM$81, SYM$86, SYM$83
|
||||
|
||||
.END
|
||||
|
368
ROM sources/BK-0011 driver module/BKGTL.MAC
Normal file
368
ROM sources/BK-0011 driver module/BKGTL.MAC
Normal file
@ -0,0 +1,368 @@
|
||||
.Mcall .Module
|
||||
.Module BKGTL,Release=X02, Version=01, Comment=<BK0011 Line Edit Routines>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl GetArg, RetEmt, TtoFlg,KbdCsr
|
||||
.Globl Block$$,GetUbt, TStCrs, StrLen,$Bttyou,$Bprint
|
||||
.Globl PutUBt, GetUbt, Crsr$$, ChrGo,$Binkey
|
||||
.Globl TtyPrg, Curadr, SavRg
|
||||
|
||||
BufLng = 256.
|
||||
Bell = 7
|
||||
.Macro Command Code Routine
|
||||
.Byte <Routine-CdT>/2,Code
|
||||
.EndM
|
||||
.Psect $CodOvr
|
||||
.SbTtl $Bgtlin (EMT 10) Routine (Get String from Keyboard)
|
||||
.Enabl LSB
|
||||
$Bgtlin::
|
||||
Jsr R0,GetArg ;Get Arguments to R0,R1
|
||||
Mov R0,AdrLine ;User Buffer Address
|
||||
Cmp R1,#BufLng
|
||||
Blos 10$
|
||||
Mov #BufLng,R1
|
||||
10$: Dec R1
|
||||
Mov R1,Length ;User Buffer Length
|
||||
Newline:Mov #StrBuf,R4 ;System Buffer Address
|
||||
Mov #StrBuf,NewEnd ;End of Buffer (The Byte of 200)
|
||||
Clr BytCnt ;Byte Counter
|
||||
|
||||
GetCH: Bit #Crsr$$,TtoFlg
|
||||
Beq 99$
|
||||
Bic #Crsr$$,TtoFlg
|
||||
Call TstCrs
|
||||
|
||||
99$: Call InByte
|
||||
Call TstCrs
|
||||
Bis #Crsr$$,TtoFlg
|
||||
Bit #140,R0 ;Control Code ?
|
||||
Beq 50$ ;Yes
|
||||
|
||||
PutCH: Clr OldEnd ;Flag for <WS>
|
||||
TstB Insrt$$ ;Insert mode ?
|
||||
Bne InsMd ;Yes
|
||||
Cmp R4,NewEnd ;We are at the end of line ?
|
||||
Bne 30$ ;No
|
||||
Cmp BytCnt,Length ;Buffer or String owverflow ?
|
||||
Beq 40$ ;String overflow
|
||||
20$: Inc NewEnd ;1-st Unused Byte
|
||||
Inc BytCnt
|
||||
Br 30$
|
||||
;
|
||||
;Replace or Insert Character at The End of Line
|
||||
;
|
||||
30$: MovB R0,(R4)+ ;Write Byte
|
||||
Call Ttuo ;Output Character
|
||||
Br GetCh ;
|
||||
;
|
||||
;Insert Character
|
||||
;
|
||||
InsMd: Cmp BytCnt,Length
|
||||
Beq 40$ ;Line Overflow
|
||||
Cmp R4,NewEnd ;We are at the end of line?
|
||||
Beq 20$ ;Yes
|
||||
Mov #1,R3 ;
|
||||
Call Ins
|
||||
Br GetCH
|
||||
|
||||
40$: MovB #Bell,R0
|
||||
Call Sttyo
|
||||
Br GetCH
|
||||
;
|
||||
;0-37, 200-237 Codes
|
||||
;
|
||||
50$:
|
||||
Bit #Block$$,@#TtoFlg
|
||||
Bne PutCh
|
||||
|
||||
60$: Jsr R0,ChrGo
|
||||
Cdt=.
|
||||
Command 10 Left ;<--
|
||||
Command 12 Enter ;Enter
|
||||
Command 13 Dleol ;DelEol
|
||||
Command 14 ClrScr ;Clear Screen
|
||||
Command 23 WS ;WS
|
||||
Command 26 DelChr ;<--!
|
||||
Command 27 InsChr ;!-->
|
||||
Command 30 Delete ;<-!-
|
||||
Command 210 DelLine ;Lower/<-!-
|
||||
Command 31 Right ;-->
|
||||
Command 32 Up ;/\
|
||||
Command 33 Down ;\/
|
||||
Command 230 Insrt ;Insert
|
||||
Command 0 Ctrl ;Other Control Characters
|
||||
|
||||
Insrt: ComB Insrt$$
|
||||
GetCh2: Br GetCh
|
||||
Ctrl: Br Putch
|
||||
|
||||
Left: Cmp R4,#StrBuf+1 ;Check for legality
|
||||
Blo GetCh ;Illegal
|
||||
Dec R4
|
||||
GetCH1: Call Sttyo
|
||||
Br Getch2
|
||||
|
||||
Right: Cmp R4,NewEnd
|
||||
Beq Getch
|
||||
Inc R4
|
||||
Br GetCH1
|
||||
|
||||
Up: MovB StrLen,R1
|
||||
Sub R1,R4
|
||||
Cmp R4,#StrBuf
|
||||
Bhis Getch1
|
||||
Add R1,R4
|
||||
Br GetCH2
|
||||
|
||||
Down: MovB StrLen,R1
|
||||
Add R1,R4
|
||||
Cmp R4,NewEnd
|
||||
Blos GetCh1
|
||||
Sub R1,R4
|
||||
Br GetCH2
|
||||
|
||||
InsChr: Mov #40,R0
|
||||
Mov #1,R3
|
||||
Clr OldEnd ;Flag for <WS>
|
||||
Call Ins
|
||||
Mov #10,R0
|
||||
Br Left
|
||||
|
||||
Delete: Cmp R4,#StrBuf
|
||||
Beq Getch2
|
||||
Mov #10,R0 ;Backspace
|
||||
Call Sttyo
|
||||
Dec R4
|
||||
Del1: Dec BytCnt
|
||||
Mov R4,R1
|
||||
70$: MovB 1(R1),(R1)+
|
||||
CmpB R1,NewEnd
|
||||
Blo 70$
|
||||
Dec NewEnd
|
||||
Mov #1,R3
|
||||
Call PriEOL
|
||||
Clr OldEnd ;Flag for <WS>
|
||||
Br GetCh2
|
||||
DelChr: Cmp R4,NewEnd
|
||||
Beq Getch2
|
||||
Br Del1
|
||||
Dleol:
|
||||
Mov NewEnd,R1
|
||||
Sub R4,R1
|
||||
Beq Getch2
|
||||
Tst BytCnt
|
||||
Beq GetCh2
|
||||
Mov NewEnd,OldEnd
|
||||
Mov BytCnt,OldCnt
|
||||
Mov R1,R2
|
||||
80$: Mov #40,R0
|
||||
Call $Bttyou
|
||||
Sob R1,80$
|
||||
Sub R2,BytCnt
|
||||
Mov R4,NewEnd
|
||||
Mov #10,R0
|
||||
90$: Call Sttyo
|
||||
Sob R2,90$
|
||||
Br Getch2
|
||||
|
||||
DelLine:
|
||||
Mov R4,R3 ;Old Addr
|
||||
Call Bline
|
||||
Bcs Getch2
|
||||
Mov R3,R1 ;Old Addr
|
||||
Sub R4,R3 ;-New Addr=Delete Length !!!
|
||||
Sub R3,BytCnt ;BCNT=BCNT-R3+R4
|
||||
Sub R3,NewEnd ;Line Length
|
||||
Mov BytCnt,R2
|
||||
Beq 999$
|
||||
100$: MovB (R1)+,(R4)+
|
||||
Sob R2,100$
|
||||
Mov #StrBuf,R4
|
||||
999$: Call PriEOL
|
||||
Clr OldEnd ;Flag for <WS>
|
||||
Br GetCH2
|
||||
|
||||
ClrScr: Call Sttyo
|
||||
ClrSc1: Mov NewEnd,R4 ;
|
||||
MovB #200,@NewEnd
|
||||
Mov TtoFlg,-(SP)
|
||||
Bis #Block$$,TtoFlg
|
||||
Mov #StrBuf,R0
|
||||
Call PrinPr
|
||||
Mov (SP)+,@#TToflg
|
||||
GetCh3: Jmp GetCh2
|
||||
WS:
|
||||
Tst BytCnt
|
||||
Beq 110$
|
||||
Call Bline
|
||||
Bcc Getch3
|
||||
Br ClrSc1
|
||||
110$: Tst OldEnd
|
||||
Beq ClrSc1
|
||||
Mov OldEnd,NewEnd
|
||||
Mov OldCnt,BytCnt
|
||||
ClrSc2: Br ClrSc1
|
||||
.Dsabl LSB
|
||||
Enter:
|
||||
Mov NewEnd,R1
|
||||
Mov R1,OldEnd
|
||||
Mov BytCnt,OldCnt
|
||||
Sub R4,R1
|
||||
Beq 20$
|
||||
Mov #31,R0
|
||||
10$: Call Sttyo
|
||||
Sob R1,10$
|
||||
20$: Mov #25,R0
|
||||
Call Sttyo
|
||||
Mov #StrBuf,R4 ;System Buffer Address
|
||||
Mov AdrLine,R5 ;User Buffer Address
|
||||
Mov BytCnt,R3 ;Number of Bytes to Send
|
||||
Beq 40$
|
||||
30$: MovB (R4)+,R0
|
||||
Call PutUBt ;Put Byte to User Memory (R5)+
|
||||
Sob R3,30$
|
||||
40$: Clr R0
|
||||
Call PutUBt
|
||||
Bic #Crsr$$,TtoFlg
|
||||
Call TstCrs
|
||||
Jmp RetEmt
|
||||
.SbTtl $Bedit (EMT 66) Routine (Edit the String)
|
||||
$Bedit::
|
||||
Jsr R0,GetArg
|
||||
Mov R0,AdrLine ;User Buffer Address
|
||||
Mov R0,R5
|
||||
Cmp R1,#BufLng
|
||||
Blos 9$
|
||||
Mov #BufLng,R1
|
||||
9$: Dec R1
|
||||
Mov R1,Length ;User Buffer Length
|
||||
Mov #StrBuf,R2
|
||||
Clr R3
|
||||
10$: Call GetUbt ;Get User Byte
|
||||
Inc R3
|
||||
Cmp R3,Length
|
||||
Bhi 20$ ;Line too Long
|
||||
MovB R0,(R2)+
|
||||
Bne 10$
|
||||
Dec R2
|
||||
20$: Dec R3
|
||||
Mov R3,BytCnt
|
||||
Mov R2,NewEnd
|
||||
Br ClrSc2
|
||||
Sttyo: Mov TtoFlg,-(SP)
|
||||
Bic #Block$$,TtoFlg
|
||||
Br Ttt1
|
||||
|
||||
Ttuo: Mov TtoFlg,-(SP)
|
||||
Bis #Block$$,TtoFlg
|
||||
Ttt1: Mov R0,-(SP)
|
||||
Call $Bttyou
|
||||
Mov (SP)+,R0
|
||||
Mov (SP)+,TToflg
|
||||
Return
|
||||
|
||||
Ins: Inc NewEnd
|
||||
Inc BytCnt
|
||||
Mov NewEnd,R1
|
||||
Mov R1,R2
|
||||
Dec R1
|
||||
10$: MovB -(R1),-(R2)
|
||||
Cmp R1,R4
|
||||
Bhi 10$
|
||||
MovB R0,(R4)+
|
||||
Call Ttuo
|
||||
|
||||
PriEOL::Mov NewEnd,R1
|
||||
Sub R4,R1 ;Number of bytes for print
|
||||
MovB #200,@NewEnd
|
||||
Mov TtoFlg,-(SP)
|
||||
Bis #Block$$,TtoFlg
|
||||
Mov R4,R0
|
||||
Call PrinPr
|
||||
Bic #Block$$,TtoFlg
|
||||
Add R3,R1
|
||||
5$: MovB #40,R0
|
||||
Call $Bttyou
|
||||
Sob R3,5$
|
||||
10$: Mov #10,R0 ;Backspace
|
||||
Call $Bttyou ;Return Cursor Place
|
||||
Sob R1,10$
|
||||
Mov (SP)+,TToflg
|
||||
Return
|
||||
|
||||
Bline: Mov R4,R1
|
||||
Sub #StrBuf,R1
|
||||
Beq 10$
|
||||
Sub R1,R4
|
||||
Mov #10,R0
|
||||
100$: Call Sttyo
|
||||
Sob R1,100$
|
||||
Tst (PC)+
|
||||
10$: SeC
|
||||
Return
|
||||
.Psect $Code
|
||||
|
||||
PrinPr: Jsr R0,SavRg ;Save R0..R4
|
||||
Mov R0,R5
|
||||
Call TStCrs ;Set Cursor Off
|
||||
2$: MovB (R5)+,R0
|
||||
Beq 11$ ;It's 0
|
||||
CmpB R0,#200
|
||||
Beq Retpri ;Code is 200
|
||||
Mov R5,-(SP)
|
||||
Call TtyPrg ;Type character
|
||||
Mov (SP)+,R5
|
||||
Br 2$
|
||||
11$: Mov #25,R0
|
||||
Call TtyPrg ;issue <CR><LF> Routine
|
||||
Retpri: Call Curadr
|
||||
Call TStCrs ;Set Cursor ON
|
||||
Jmp RetEmt
|
||||
|
||||
InByte:
|
||||
199$: Call $BinKey
|
||||
Bcc 99$ ;Get one Character into R0
|
||||
Mov @#$$UsrS,BUsrS
|
||||
Mov Vec4,BVec4
|
||||
Mov #Btrp,Vec4
|
||||
Mov $$SysS,$$UsrS
|
||||
Mtps #0
|
||||
Nop
|
||||
Mtps #340
|
||||
Mov BUsrS,@#$$UsrS
|
||||
Mov BVec4,Vec4
|
||||
Br 199$
|
||||
99$: Return
|
||||
Btrp: Mov BUsrS,@#$$UsrS
|
||||
Mov BVec4,Vec4
|
||||
Jmp @Vec4
|
||||
.Psect $RAM
|
||||
BVec4: .BlkW
|
||||
BUsrS: .BlkW
|
||||
NewEnd: .BlkW
|
||||
OldEnd::.Word 0
|
||||
OldCnt::.Word 0
|
||||
BytCnt: .Word 0
|
||||
AdrLine:.Word 0
|
||||
Length: .Word 0
|
||||
StrBuf: .BlkB BufLng ;Input buffer Length
|
||||
Insrt$$::.Byte 0 ;Insertion Flag
|
||||
.Even
|
||||
.End
|
67
ROM sources/BK-0011 driver module/BKHEAD.MAC
Normal file
67
ROM sources/BK-0011 driver module/BKHEAD.MAC
Normal file
@ -0,0 +1,67 @@
|
||||
.NList
|
||||
;
|
||||
; Copyright (c) 1986 by
|
||||
; C-11 Special Interes Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Dsabl GBL
|
||||
.Enabl MCL
|
||||
;
|
||||
;System Page (At 40000)
|
||||
;
|
||||
.Psect $RAM D,RW
|
||||
.Psect $Stack D,RW
|
||||
;
|
||||
;Switched ROM Page (At 120000)
|
||||
;
|
||||
.Psect $CodOvr I,RO
|
||||
.Psect $CnsOvr D,RO
|
||||
;
|
||||
;Resident ROM Page (At 140000)
|
||||
;
|
||||
.Psect $Code I,RO
|
||||
.Psect $Const D,RO
|
||||
.Psect $AdrTab D,RO
|
||||
|
||||
SEL1 == 177716 ;System Register
|
||||
SEL2 == 177714 ;System Port
|
||||
UStack == 1000 ;Initial User Stack Pointer
|
||||
.Globl SStack
|
||||
;
|
||||
;SEL1 Bit masks
|
||||
;
|
||||
WrEnS == 4000 ;Write Enable Mask
|
||||
ROMMSK == 1!2!10!20 ;ROM Connection
|
||||
SysROM == 2 ;System ROM Mask
|
||||
SysRam == 50000 ;System Rom Page Constant
|
||||
SysPag == 7 ;System Page Number
|
||||
Mot$$$ == 200 ;Taperecorder motor OFF
|
||||
ScrMsk == 4 ;Selected Screen mask
|
||||
TapMsk == Mot$$$!100!40 ;Taperecorder bits mask
|
||||
SysSel == SysRAM!SysROM!Mot$$$!WrEnS ;System Sel1
|
||||
KeFlg == 100 ;keyklick, key not pressed flag
|
||||
|
||||
.Library "BKLIB.MLB"
|
||||
UserPC == 40
|
||||
ErrByt == 52
|
||||
$$SysS == 64 ;System allocation SEL1
|
||||
$$UsrS == 66 ;User allocation SEL1
|
||||
$SavPC == 250 ;System save area for PC
|
||||
$SavPS == 252 ;System save area for PS
|
||||
$SavSP == 114 ;System save area for SP
|
||||
$Svare == 116 ;System save area
|
||||
.Psect $Code
|
||||
.List
|
441
ROM sources/BK-0011 driver module/BKKBD.MAC
Normal file
441
ROM sources/BK-0011 driver module/BKKBD.MAC
Normal file
@ -0,0 +1,441 @@
|
||||
.Mcall .Module
|
||||
.Module BKKBD,Release=X02, Version=04, Comment=<Keyboard Handler>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl GetArg, RetEmt, SavRg, PutUWd, TtoFlg, Sound
|
||||
.Globl Block$$,$Setss, LatSS, GetUbt, FncOut, PutUBt, FlInit
|
||||
.Globl OldEnd, OldCnt, ChrGo, Insrt$$,BlrSS, KbdSS
|
||||
.Globl $Bsetpg,GetUwd
|
||||
|
||||
|
||||
KbUvc = 60
|
||||
KbLvc = 274
|
||||
KbdCsr == 177660
|
||||
KbdDbr == 177662
|
||||
BfrLen = 200
|
||||
;
|
||||
; Keyboard Mode Word (KbMode) format:
|
||||
;
|
||||
; +---^---+---+---^---+---+---^---+---+---^---+---+---^---+---+---^
|
||||
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
||||
; +---^---+---+---^---+---+---^---+---+---^---+---+---^---+---+---^
|
||||
; ! ! ! ! ! !
|
||||
; ! ! ! ! ! !
|
||||
; ! +---------------------+ ! ! ! !
|
||||
; ! ! ! ! ! !
|
||||
; +---------------------+ ! ! ! ! !
|
||||
; ! ! ! ! ! !
|
||||
$Cyril == 100000 ;<--+ ! ! ! ! !
|
||||
;1 ==> RUS ! ! ! ! !
|
||||
;0 ==> "LAT" ! ! ! ! !
|
||||
RptFg = 040000 ;<------+ ! ! ! !
|
||||
;1==> "Repeat ! ! ! !
|
||||
;processing ! ! ! !
|
||||
; ! ! ! !
|
||||
;Width Sequence ! ! ! !
|
||||
$Keykl == 200 ;<---------------+ ! ! !
|
||||
;1 ==> Disable KeyKlick ! ! !
|
||||
$KklCm == 100 ;<-------------------+ ! !
|
||||
;1 ==> Disable KeyKlick before ! !
|
||||
; Completion Routine ! !
|
||||
$MixAs == 4 ;<-------------------------------------+ !
|
||||
;In Ascii Mode 1 ==> Mixed mode !
|
||||
; (Big Cyrillic and Big Latin) !
|
||||
$Ascii == 1 ;<---------------------------------------------+
|
||||
;0 ==> UAscii, 1 ==> Ascii
|
||||
|
||||
.Macro Command Code Routine
|
||||
.Byte <Routine-CdT>/2,Code
|
||||
.EndM
|
||||
.SbTtl $Bkset (EMT 100) Routine (Set Keyboard Handler Mode)
|
||||
$Bkset::
|
||||
Jsr R0,SavRg
|
||||
Mov R0,R5 ;Get User Address
|
||||
Call GetUwd ;Get Word
|
||||
MovB R0,@#KBMode ;And Set New KeyBoard Mode
|
||||
Call GetUwd
|
||||
Mov R0,@#KbAddr ;Address
|
||||
Beq 10$
|
||||
Call GetUwd
|
||||
Bic #ScrMsk!TapMsk,R0
|
||||
Bis #WrEnS,R0
|
||||
Mov R0,@#KbSel ;Sel Value
|
||||
Call GetUwd
|
||||
Mov R0,@#KbStC ;Stack Pointer
|
||||
10$: Jmp RetEmt
|
||||
|
||||
.SbTtl $Bkbini (EMT 4) Routine (Initialize Keyboard)
|
||||
KbdIni::
|
||||
Clr KbMode
|
||||
$Bkbini::
|
||||
Jsr R0,SavRg ;Save User'S Registers
|
||||
Mov #UKbInt,@#KbUvc ;Set Upper Case Vector
|
||||
Mov #340,@#KbUvc+2
|
||||
Mov #LKbInt,@#KbLvc ;Set Lower Case Vector
|
||||
Mov #340,@#KbLvc+2
|
||||
Clr KbSel ;Reset Completion Routine
|
||||
Clr KbAddr
|
||||
Mov #Ustack,KbStC
|
||||
Bic #^C<$Cyril>,KbMode ;Reset Mode Word
|
||||
Call ClrFnc ;Clear Function Keys
|
||||
Clr @#KbdCsr ;Set Interrupt Enable
|
||||
Mov #TtiBuf-2,R5 ;Input Buffer Initialization
|
||||
Mov #Ibufr,R4
|
||||
Mov R4,(R5)+ ;Write Address
|
||||
Clr (R5)+ ;Byte Counter
|
||||
Mov R4,(R5)+ ;Read Address
|
||||
Mov #-1,REptfl
|
||||
Clr OldEnd
|
||||
Clr OldCnt
|
||||
ClrB Insrt$$ ;Gtlin Insertion Mode
|
||||
Tst FlInit
|
||||
Beq 10$ ;Uninitialized TTO handler...
|
||||
Call KbdSS
|
||||
10$: Jmp RetEmt ;And Return
|
||||
|
||||
.SbTtl $Bkget (EMT 116) Routine (Read Keyboard Handler Mode)
|
||||
$BkGet::
|
||||
Mov R0,R5
|
||||
Mov KbMode,R0
|
||||
Call PutUWd
|
||||
Mov KbAddr,R0
|
||||
Call PutUWd
|
||||
Mov KbSel,R0
|
||||
Call PutUWd
|
||||
Mov KbStC,R0 ;Stack Pointer
|
||||
Call PutUwd
|
||||
Return
|
||||
.SbTtl Upper-Case Keyboard Interrupt Entry Point
|
||||
.Enabl LSB
|
||||
UKbInt::
|
||||
Jsr R5,$Inten
|
||||
Call Klick ;Issue KeyKlick
|
||||
MovB @#KbdDbr,R0
|
||||
CmpB R0,#100 ;Is it Letter ?
|
||||
Blo 20$ ;No, Not Modify
|
||||
Bit #$Ascii,KbMode
|
||||
Bne CmnC1 ;Ascii
|
||||
;Uascii
|
||||
10$: Bit #$Cyril,KbMode
|
||||
Beq CmnC1
|
||||
Bis #200,R0 ;Set Cyrillic Bit for Uascii Letter
|
||||
CmnC1: Jmp CmnCod
|
||||
;
|
||||
;0..40 codes
|
||||
;
|
||||
20$:
|
||||
Jsr R0,ChrGo ;Check for special char's
|
||||
Cdt=.
|
||||
Command 16 Rus ;Rus
|
||||
Command 17 Lat ;Lat
|
||||
Command 0 CmnCod ;Other Chars ==> Write
|
||||
Lat: Bic #$Cyril,KbMode
|
||||
Br RusLat
|
||||
Rus: Bis #$Cyril,KbMode
|
||||
RusLat:
|
||||
Mov R0,-(SP)
|
||||
Call LatSS ;Special Line Indication
|
||||
Mov (SP)+,R0
|
||||
Bit #$Ascii,KbMode ;Is code Ascii
|
||||
Beq Ign1 ;No, Uascii, Ignore Char.
|
||||
Bit #$MixAs,KbMode ;Mixed ???
|
||||
Beq CmnCod ;No, write
|
||||
Ign1: Br CmnIgn ;Yes, ignore
|
||||
.SbTtl Lower-Case Keyboard Interrupt Entry Point
|
||||
.Enabl LSB
|
||||
LKbInt::
|
||||
Jsr R5,$Inten
|
||||
Call Klick ;Issue KeyKlick
|
||||
MovB @#KbdDbr,R0 ;Get Character From Keyboard
|
||||
CmpB R0,#100 ;
|
||||
Blo 10$
|
||||
;
|
||||
;Semi-Graphics Symbols (100-177)
|
||||
;
|
||||
Bis #240,R0
|
||||
Bic #100,R0 ;Convert to 240-277
|
||||
Br CmnCod ;And Store
|
||||
10$: ;Check codes 0..77
|
||||
Bit #40,R0
|
||||
Bne 30$
|
||||
;
|
||||
;000..037 Code Processing
|
||||
;
|
||||
Cmp R0,#20
|
||||
Blo 20$ ;0..17
|
||||
;
|
||||
;020..037 ==> 200..217
|
||||
;
|
||||
Add #200-20,R0
|
||||
Br CmnCod ;Store Code
|
||||
20$:
|
||||
;
|
||||
;000..017 ==> 220..237
|
||||
;
|
||||
|
||||
TstB R0
|
||||
Beq Rstep
|
||||
Jsr R0,ChrGo
|
||||
Cdt=.
|
||||
Command 1 Repeat
|
||||
Command 2 Isu
|
||||
Command 4 Blr
|
||||
Command 11 CmnCod ;HT
|
||||
Command 13 CmnCod ;DelEol
|
||||
Command 0 RNop
|
||||
|
||||
Repeat:
|
||||
Tst REptfl ;Was Character Typed ?
|
||||
Bmi CmnExi ;No, Ignore "Repeat"
|
||||
Bis #Rptfg,KbMode ;Set "Repeat flag"
|
||||
Br CmnExi
|
||||
Rstep: Mov #220,R0
|
||||
Br CmnCod
|
||||
Isu: Call $SetSS ;Set/Clear Screen Special String Area
|
||||
Br CmnIgn
|
||||
Blr: Mov #Block$$,R0
|
||||
xOr R0,@#TToFlg ;Set/Clear BlockRed Flag
|
||||
Call BlrSS
|
||||
Br CmnIgn
|
||||
30$:
|
||||
;
|
||||
; 40..77 Processing
|
||||
;
|
||||
Jsr R0,ChrGo
|
||||
Cdt=.
|
||||
.Irp XX,<60,61,62,63,64,65,66,67,70,71>
|
||||
Command XX FunKey
|
||||
.EndR
|
||||
Command 0 Rnop
|
||||
Rnop: Bic #40,R0
|
||||
Bis #220,R0
|
||||
Br CmnCod ;Store Code
|
||||
|
||||
;
|
||||
;Function Key Processing
|
||||
;
|
||||
FunKey: Bic #Rptfg,KbMode ;Clear Repeat Flag
|
||||
Bic #^C17,R0 ;Function Number
|
||||
Bne 40$
|
||||
Add #10.,R0
|
||||
40$: Asl R0
|
||||
Mov FncTb-2(R0),FncO;Get Function string Address
|
||||
Call Klick
|
||||
Tst FncO
|
||||
Beq CmnExi ;No String, Ignore
|
||||
50$: MovB @FncO,R0
|
||||
Beq 60$
|
||||
Inc FncO ;End of String
|
||||
Call ChrWri ;Write Code to Buffer
|
||||
Br 50$
|
||||
60$: Clr FncO
|
||||
Br CmnExi
|
||||
.Dsabl Lsb
|
||||
CmnCod: Call ChrWri ;Write Code to Buffer
|
||||
CmnIgn: Bic #Rptfg,KbMode ;Clear Repeat Flag
|
||||
CmnExi: Jmp RetEmt ;Exit To Retint
|
||||
.SbTtl Klick Routine
|
||||
Klick: Bit #$Keykl,KbMode
|
||||
Bne 30$ ;KeyKlick is disabled
|
||||
Mov #60,R0 ;Sound Length
|
||||
Mov #60,R1 ;Tone
|
||||
Call Sound
|
||||
30$: Mov #7000,R0
|
||||
Sob R0,.
|
||||
Return
|
||||
.SbTtl Common Character Buffering/Completion Routine Call Program
|
||||
ChrWri: Bic #^C377,R0
|
||||
Mov R0,REptfl ;Set Flag
|
||||
Mov KbAddr,R2 ;Completion Routine Found ?
|
||||
Beq 30$ ;No
|
||||
|
||||
.SbTtl Completion Routine Procesing
|
||||
|
||||
Bic #^C<WrEnS!ScrMsk!TapMsk>,$$UsrS
|
||||
Bis KbSel,$$UsrS ;New Sel1
|
||||
Mov SP,SpCmpl ;Internal
|
||||
Mov KbStC,SP ;And User Stack
|
||||
Mov @#$$UsrS,@#Sel1 ;Set Allocation
|
||||
Call @R2 ;And Issue Call
|
||||
Rol R0 ;Save Carry in R0[00]
|
||||
;Character Accepted
|
||||
Mtps #340 ;Disable Interrupt
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov #$$UsrS,@#$$SysS
|
||||
Mov SpCmpl,SP ;Restore Original Stack Ptr
|
||||
Mov @#$$UsrS,-(SP)
|
||||
Bic #^C<ScrMsk!TapMsk>,@SP
|
||||
Bic #ScrMsk!TapMsk,KbdUSS ;Saved UsrS
|
||||
Bis (SP)+,KbdUSS ;
|
||||
Ror R0 ;Restore C And R0
|
||||
Bcc 50$ ;Not Write
|
||||
.SbTtl Character BUfferization
|
||||
30$: Mov #TTiBuf,R5 ;Input Buffer Header Address
|
||||
Cmp @R5,#Bfrlen-1 ;Number of Bytes accepted
|
||||
Bhis 50$ ;Buffer Overflow
|
||||
Inc @R5 ;Byte Counter
|
||||
Inc -(R5) ;Write Address
|
||||
Cmp @R5,#Bfrend ;End of Buffer ?
|
||||
Blo 40$ ;No
|
||||
Sub #Bfrlen,@R5 ;Skip around Buffer bound
|
||||
40$: MovB R0,@(R5) ;Put Byte
|
||||
Tst (PC)+
|
||||
50$: SeC ;O.K.
|
||||
Return
|
||||
.SbTtl Common Interrupt Entry Point Routine
|
||||
$Inten::
|
||||
;
|
||||
;At this point Stack is:
|
||||
;
|
||||
;Old PS
|
||||
;Old SP
|
||||
;Old R5 <----SP
|
||||
;
|
||||
;State is Unknown !!!
|
||||
;
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov SP,KbdSP ;Save User Stack
|
||||
Mov #KbStk,SP ;Set Keybord Stack Pointer
|
||||
Mov @#$$UsrS,@#KbdUSS ;Save UsrS
|
||||
Mov @#$$SysS,@#$$UsrS ;And Set System
|
||||
Mov #Retint,-(SP) ;Return Address (For Return)
|
||||
Jsr R0,SavRg ;Save Registers R0..R4
|
||||
Tst @#KbdDbr
|
||||
Jmp @R5 ;and Exit
|
||||
.SbTtl Common Interrupt Exit Routine
|
||||
Retint:
|
||||
Mov @#KbdUSS,@#$$UsrS ;UsrS
|
||||
Mov KbdSP,SP ;Restore Stack
|
||||
Mov @#$$UsrS,@#Sel1 ;Restore Sel1
|
||||
Mov (SP)+,R5 ;Restore R5
|
||||
Rti ;And Exit
|
||||
.SbTtl $Binkey (EMT 102) Routine (Get character Without Waiting)
|
||||
.Enabl LSB
|
||||
$Binkey::
|
||||
Mov #Ttibuf,R5 ;Buffer Byte Counter Ptr
|
||||
Tst (R5)+ ;Check Buffer
|
||||
Beq Noinpt ;Is empty...
|
||||
Inc @R5 ;Increment Read Address
|
||||
Cmp @R5,#Bfrend
|
||||
Blo 10$
|
||||
Sub #Bfrlen,@R5 ;Ring Buffer Bound
|
||||
10$: MovB @(R5),R0 ;Get The byte
|
||||
Dec -(R5) ;Decrease Byte Counter
|
||||
20$: Bic #^C377,R0 ;Clear Upper Byte and Exit
|
||||
Tst (PC)+
|
||||
30$: Sec
|
||||
Return
|
||||
|
||||
Noinpt: Bit #Rptfg,KbMode ;Test "Repeat flag"
|
||||
Beq 30$ ;Is reset, Exit
|
||||
Bit #Keflg,@#SEL1 ;Pressed ?
|
||||
Bne 30$ ;No
|
||||
Mov @#KbdDbr,R5 ;Pressed, Clear Interrupt Request
|
||||
Mov #40$,-(SP)
|
||||
Jsr R0,SavRg ;Save Registers
|
||||
Call Klick ;Klick
|
||||
Jmp RetEmt ;-------+
|
||||
40$: Mov REptfl,R0 ;<------+
|
||||
Bpl 20$ ;Put Character
|
||||
Clr R0 ;Else Clear Buffer
|
||||
Br 30$
|
||||
.Dsabl LSB
|
||||
.SbTtl $Bttyin (EMT 6) Routine (Get One Character from Keyboard)
|
||||
$Bttyin::
|
||||
Mov @#$$UsrS,@#UsTTy ;Save Usrs for
|
||||
Mov @#Vec4,@#TTYV4 ;Normal Completion Routine
|
||||
Mov #12$,@#Vec4 ;Initialization
|
||||
Mov @#$$SysS,@#$$UsrS ;(At Lower priority Must be
|
||||
5$: Call $BinKey ;"User" State !!!)
|
||||
Bcc 10$ ;OK
|
||||
MtPS #0 ;No Character
|
||||
Nop ;Wait for Ready...
|
||||
Mtps #340
|
||||
Br 5$
|
||||
|
||||
10$: Mov @#UsTty,@#$$UsrS
|
||||
Mov @#TTYV4,@#Vec4
|
||||
TstB R0
|
||||
Return
|
||||
|
||||
12$: Mov @#UsTTY,@#$$UsrS
|
||||
Mov @#TTYV4,@#Vec4
|
||||
Jmp @Vec4
|
||||
.SbTtl $Bfunct (EMT 12) Routine (Set Function Switch)
|
||||
$Bfunct::
|
||||
Jsr R0,GetArg
|
||||
Tst R0 ;Key Number
|
||||
Beq 40$ ;Reset All Keys
|
||||
CmpB R0,#10.
|
||||
Bhi 20$ ;Illegal Key Number
|
||||
Dec R0 ;0..9
|
||||
Mov R0,R2
|
||||
Swab R2 ;
|
||||
Asr R2 ;
|
||||
Asr R2 ;R2=Key Number Mod 100
|
||||
Asl R0 ;Key Number * 2
|
||||
Add #FncMem,R2 ;
|
||||
Mov R2,FncTb(R0) ;Save Internal String Address
|
||||
Mov #100-1,R3 ;Byte Counter
|
||||
Mov R1,R5 ;User String Address
|
||||
Mov R0,R4 ;
|
||||
10$: Call GetUbt ;Get User's Byte (R5)+
|
||||
MovB R0,(R2)+ ;And store it
|
||||
Beq 20$ ;End Of String
|
||||
Sob R3,10$ ;Go next Byte
|
||||
ClrB (R2)+ ;Last Byte
|
||||
20$: Cmp R3,#100-1 ;String size
|
||||
Bne 30$ ;
|
||||
Clr FncTb(R4) ;Null String ==> Reset
|
||||
30$: Call FncOut ;Output Special string
|
||||
ClC
|
||||
Jmp RetEmt
|
||||
40$: Call ClrFnc
|
||||
Br 30$
|
||||
|
||||
ClrFnc: Mov #FncTb,R0
|
||||
Mov #10.,R5
|
||||
10$: Clr (R0)+ ;Clear All Function Keys
|
||||
Sob R5,10$
|
||||
Return
|
||||
.Psect $Stack
|
||||
.BlkW 100
|
||||
KbStk:: ;Keybord Initial Stack Pointer
|
||||
.Psect $RAM
|
||||
KbdSP:: .BlkW ;Save Area for User SP
|
||||
KbdUSS::.BlkW ;$$UsrS Interrupt Buffer
|
||||
UsTty: .BlkW
|
||||
SpCmpl: .BlkW
|
||||
FncO: .BlkW
|
||||
TTYV4: .BlkW
|
||||
KbMode::.BlkW ;Mode Flags
|
||||
KbAddr: .BlkW ; Address
|
||||
KbSel: .BlkW ;Completion Routine Sel1
|
||||
KbStC: .BlkW ;Stack Pointer
|
||||
REptfl: .BlkW ;Repeat Buffer
|
||||
.BlkW ;Write Address
|
||||
TtiBuf: .BlkW ;Byte Counter
|
||||
.BlkW ;Read Address
|
||||
FncTb:: .BlkW 10. ;Function Key String Address
|
||||
FncMem::.BlkB 10.*100 ;Function Key String Buffer
|
||||
Ibufr:: .BlkB BfrLen
|
||||
Bfrend:
|
||||
.Even
|
||||
.End
|
392
ROM sources/BK-0011 driver module/BKLIB.MAC
Normal file
392
ROM sources/BK-0011 driver module/BKLIB.MAC
Normal file
@ -0,0 +1,392 @@
|
||||
;
|
||||
; COPYRIGHT (C) 1986 BY
|
||||
; C-11 SPECIAL INTEREST GROUP, LENINGRAD STATE UNIVERSITY.
|
||||
; ALL RIGHTS RESERVED.
|
||||
;
|
||||
; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
|
||||
; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
|
||||
; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
|
||||
; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
|
||||
; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
|
||||
; TRANSFERED.
|
||||
;
|
||||
; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
|
||||
; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY C-11 GROUP.
|
||||
;
|
||||
; C-11 ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
||||
; SOFTWARE ON EQUIPMENT WHICH IS NOT SUBMITTED BY C-11.
|
||||
;
|
||||
.MACRO .BMACS
|
||||
.MCALL ..BCM0,..BCM1,..BCM2,..BCM3
|
||||
...B1=1
|
||||
.ENDM
|
||||
;
|
||||
; STARG ---> STACK
|
||||
;
|
||||
.MACRO ..BCM0 ARG,INS
|
||||
.IF B <ARG>
|
||||
CLR -(SP)
|
||||
.IFF
|
||||
.IF IDN <ARG>,#0
|
||||
CLR -(SP)
|
||||
.IFF
|
||||
.IIF IDN <ARG> <0> .ERROR ;?BKLIB-W-INVALID ARGUMENT, USE #0, NOT 0;
|
||||
MOV ARG,-(SP)
|
||||
.ENDC
|
||||
.ENDC
|
||||
.IIF NB <INS> EMT ^O<INS>
|
||||
.ENDM
|
||||
|
||||
;
|
||||
; <LOW>+<HIGH*400> --> R0
|
||||
;
|
||||
.MACRO ..BCM1 LOW,HIGH,INS
|
||||
.IF NB <HIGH>
|
||||
.NTYPE ...V2,HIGH
|
||||
.IF EQ ...V2-^O27
|
||||
MOV HIGH*^O400,R0
|
||||
.IFF
|
||||
MOV HIGH,R0
|
||||
SWAB R0
|
||||
CLRB R0
|
||||
.ENDC
|
||||
.IIF DIF <LOW>,<#0> BISB LOW,R0
|
||||
.IFF
|
||||
.IF NB <LOW>
|
||||
CLR R0
|
||||
BISB LOW,R0
|
||||
.ENDC
|
||||
.ENDC
|
||||
.IIF NB <INS> EMT ^O<INS>
|
||||
.ENDM
|
||||
|
||||
;
|
||||
; ARG --> R0 (DEFAULT 0)
|
||||
;
|
||||
.MACRO ..BCM2 ARG,INS
|
||||
.IF B <ARG>
|
||||
CLR R0
|
||||
.IFF
|
||||
.IIF DIF <ARG>,R0 MOV ARG,R0
|
||||
.ENDC
|
||||
.IIF NB <INS> EMT ^O<INS>
|
||||
.ENDM
|
||||
|
||||
;
|
||||
; ARG --> R0
|
||||
;
|
||||
.MACRO ..BCM3 ARG,INS,BB
|
||||
.IF NB <ARG>
|
||||
.IIF DIF <ARG>,R0 MOV'BB ARG,R0
|
||||
.ENDC
|
||||
.IIF NB <INS> EMT ^O<INS>
|
||||
.ENDM
|
||||
|
||||
.MACRO .BEXIT ARG
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM2 ARG,0
|
||||
.ENDM
|
||||
|
||||
.MACRO .BINIT
|
||||
EMT 14
|
||||
.ENDM
|
||||
|
||||
.MACRO .BSETPG PAGE,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM1 PAGE,ADDRESS,52
|
||||
.ENDM
|
||||
|
||||
.MACRO .BJSR PAGE,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 PAGE
|
||||
..BCM0 ADDRESS,54
|
||||
.ENDM
|
||||
|
||||
.MACRO .BJMP PAGE,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 PAGE
|
||||
..BCM0 ADDRESS,56
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPEEK PAGE,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 PAGE
|
||||
..BCM0 ADDRESS,60
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPOKB PAGE,ADDRESS,DATA
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 DATA,,B
|
||||
..BCM0 PAGE
|
||||
..BCM0 ADDRESS,62
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPOKE PAGE,ADDRESS,DATA
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 DATA
|
||||
..BCM0 PAGE
|
||||
..BCM0 ADDRESS,120
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTEST PAGE
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 PAGE,72
|
||||
.ENDM
|
||||
|
||||
.MACRO .BKBINI
|
||||
EMT 4
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTTYIN ADDRESS
|
||||
EMT 6
|
||||
.IF NB <ADDRESS>
|
||||
.IIF DIF ADDRESS,R0 MOVB R0,ADDRESS
|
||||
.ENDC
|
||||
.ENDM
|
||||
|
||||
.MACRO .BGTLIN ADDRESS,LENGTH
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 ADDRESS
|
||||
..BCM0 LENGTH,10
|
||||
.ENDM
|
||||
|
||||
.MACRO .BFUNCT KEY,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 KEY
|
||||
..BCM0 ADDRESS,12
|
||||
.ENDM
|
||||
|
||||
.MACRO .BEDIT ADDRESS,LENGTH
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 ADDRESS
|
||||
..BCM0 LENGTH,66
|
||||
.ENDM
|
||||
.MACRO .BKSET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,100
|
||||
.ENDM
|
||||
|
||||
.MACRO .BINKEY
|
||||
EMT 102
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTTYOU CODE
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 CODE,16,B
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPRINT ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,20
|
||||
.ENDM
|
||||
|
||||
.MACRO .BSSOUT CODE,ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 CODE
|
||||
..BCM0 ADDRESS,22
|
||||
.ENDM
|
||||
|
||||
.MACRO .BLOCAT LINE,POSITION
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM1 POSITION,LINE,24
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPOS ADDRESS
|
||||
EMT 26
|
||||
.IF NB <ADDRESS>
|
||||
.IIF DIF ADDRESS,R0 MOV R0,ADDRESS
|
||||
.ENDC
|
||||
.ENDM
|
||||
|
||||
.MACRO .BPOINT ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,30
|
||||
.ENDM
|
||||
|
||||
.MACRO .BGETPNT ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,104
|
||||
.ENDM
|
||||
|
||||
.MACRO .BVECT ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,32
|
||||
.ENDM
|
||||
|
||||
.MACRO .BBUFSET VIDEO,WRITE
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM1 WRITE,VIDEO,74
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTVSET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,64
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTVGET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,34
|
||||
.ENDM
|
||||
|
||||
.MACRO .BSCOLOR ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,76
|
||||
.ENDM
|
||||
|
||||
.MACRO .BGCOLOR ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,106
|
||||
.ENDM
|
||||
|
||||
.MACRO .BSCROLL NUMBER,SCREEN
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM0 SCREEN
|
||||
..BCM0 NUMBER,110
|
||||
.ENDM
|
||||
|
||||
.MACRO .BTRPSET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,112
|
||||
.ENDM
|
||||
.MACRO .BEMTSET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,114
|
||||
.ENDM
|
||||
.MACRO .BKGET ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,116
|
||||
.ENDM
|
||||
.MACRO .BDISK ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,70
|
||||
.ENDM
|
||||
.MACRO .BMTB10 ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,36
|
||||
.ENDM
|
||||
.MACRO .BCIRCL ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,130
|
||||
.ENDM
|
||||
|
||||
.MACRO .BDRAW ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,122
|
||||
.ENDM
|
||||
.MACRO .BSPRITE ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,124
|
||||
.ENDM
|
||||
.MACRO .BCHCLR OLD,NEW
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM1 OLD,NEW,126
|
||||
.ENDM
|
||||
.MACRO .BCTMSX ADDRESS
|
||||
.IF NDF ...B1
|
||||
.MCALL .BMACS
|
||||
.BMACS
|
||||
.ENDC
|
||||
..BCM3 ADDRESS,132
|
||||
.ENDM
|
564
ROM sources/BK-0011 driver module/BKMT.MAC
Normal file
564
ROM sources/BK-0011 driver module/BKMT.MAC
Normal file
@ -0,0 +1,564 @@
|
||||
.Mcall .Module
|
||||
.Module BKMTBK, Release=X02, Version=06, Comment=<BK0010-Compatible Tape>
|
||||
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
|
||||
.Include "BKHEAD"
|
||||
.Globl SavRg, RetEmt, GetUbt, PutUbt,UsrSav,PrePare,SelTbl,AdrSel
|
||||
.Globl Window
|
||||
;
|
||||
;Bk0010-Compatible Handler Request Table format:
|
||||
;
|
||||
; +-------+-------+
|
||||
; ! ! CODE !
|
||||
; +-------+-------+
|
||||
; ! Memory Address!
|
||||
; +-------+-------+
|
||||
; ! Length (Bytes)!
|
||||
; +---------------+
|
||||
; ! Filename !\
|
||||
; . . . . ] 16 Bytes
|
||||
; ! !/
|
||||
; +---------------+
|
||||
; ! Page1 ! Page0 !
|
||||
; +-------+-------+
|
||||
; ! Memory Address! 2 Real
|
||||
; +---------------+
|
||||
; ! Length (Bytes)! 4 Real
|
||||
; +---------------+
|
||||
; ! Name ! 16B Realfilename
|
||||
; +---------------+
|
||||
;
|
||||
; CODE is the operation code:
|
||||
;
|
||||
TapeOF = 0 ;Set Tape-Recorder Off
|
||||
TapeOn = 1 ;Set Tape-Recorder On
|
||||
Writape = 2 ;Write File
|
||||
Reatap = 3 ;Read File
|
||||
Fictp = 4 ;Fictious Reading
|
||||
ReaNxt = 5 ;Read NExt File
|
||||
DirFil = 6 ;Directory Operation
|
||||
|
||||
;
|
||||
;Error Code Returns in Errbyt as:
|
||||
;
|
||||
NoErr = 0 ;Illegal Command
|
||||
FilNfd = 1 ;Another file Name
|
||||
ChkErr = 2 ;CheckSum Error
|
||||
MemErr = 3 ;Memory Error
|
||||
StpErr = 4 ;Manual interrupt
|
||||
|
||||
;
|
||||
;Sel1 Tape Output Data Bit Mask
|
||||
;
|
||||
Dat00 =0 ;-0
|
||||
Dat11 =140 ;+0
|
||||
BitDat =140
|
||||
;
|
||||
;Timing Constants
|
||||
;
|
||||
LNG0 = 37.
|
||||
LNG1 = 74.
|
||||
Snc0 = 35.
|
||||
Snc1 = 34.
|
||||
Snc2 = 161.
|
||||
Snc3 = 153.
|
||||
LNGM = 147.
|
||||
;
|
||||
TapBit = 40 ;Sel1 Tape Data input bit
|
||||
DspRd = 2 ;Maximum pulse dispersion during read
|
||||
.SbTtl MtIni Routine Cassette-Tape Initialization
|
||||
MtIni:: Bis #Mot$$$,@#$$UsrS
|
||||
Bis #Mot$$$,@#$$UsrS
|
||||
Bic #BitDat,@#$$UsrS
|
||||
Bic #BitDat,@#$$SysS
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Return
|
||||
|
||||
.SbTtl $BMtb10 (EMT 36) Routine (BK0010-compatible tape handler)
|
||||
;
|
||||
;BK0010-Compatible cassette-Tape handler Entry Point
|
||||
;
|
||||
.Psect $CodOvr
|
||||
$BMtb10::
|
||||
Jsr R0,SavRg ;Save Registers
|
||||
Mov R0,R5
|
||||
Mov R0,ArgAdr ;Save Arg Block Address
|
||||
Mov #ArgLng,R1 ;Byte Counter of Arg Block
|
||||
Mov #Bk10Scm,R2 ;System Working Area for tape handler
|
||||
10$: Call GetUbt
|
||||
MovB R0,(R2)+ ;Move Arg Block to System Area
|
||||
Sob R1,10$
|
||||
ClrB @#ErrByt ;Clear Error Flag
|
||||
ClrB ErrFlg
|
||||
ClrB Phase ;Clear Tape Phase Flag
|
||||
ClrB NxtFlg
|
||||
ClrB DirFlg
|
||||
Clr Noread ;Clear "Not real Read" Flag
|
||||
Mov @#Vec4,Sav4 ;Save Vector 4
|
||||
Mov #TapV4,@#Vec4 ;And Set Temporary Vector
|
||||
Mov SP,SPSave ;Save stack pointer value
|
||||
MovB Code,R0 ;Command Code
|
||||
Cmp R0,#MaxCmd
|
||||
Bhis 20$
|
||||
Asl R0
|
||||
Jmp @CmdTab(R0)
|
||||
20$: Jmp IllCmd ;Illegal Command
|
||||
CmdTab: .Word CmdOff ;Set Tape-Recorder Off ;0
|
||||
.Word CmdOn ;Set Tape-Recorder On ;1
|
||||
.Word CmdWri ;Write Block ;2
|
||||
.Word CmdRd ;Read Block ;3
|
||||
.Word CmdFct ;Fictious Reading ;4
|
||||
.Word CmdRnx ;Read NExt File ;5
|
||||
.Word CmdDir ;Directory Operation ;6
|
||||
MaxCmd = <.-CmdTab>/2
|
||||
|
||||
.Psect $Code
|
||||
Err3: MovB #3,@#ErrByt
|
||||
IllCmd: IncB ErrFlg
|
||||
Jmp Exit ;Error 0
|
||||
TapV4: Mov SPSave,SP ;Restore Stack Pointer
|
||||
Mov @#$$SysS,@#Sel1 ;
|
||||
MovB #StpErr,@#ErrByt;And Set Error Code
|
||||
MovB #1,ErrFlg
|
||||
Jmp CmdOff
|
||||
CmdOff: Call Mtini ;Stop Taperecorder
|
||||
Br Exit ;And Exit
|
||||
CmdOn: Bic #BitDat!Mot$$$,$$UsrS
|
||||
Bic #BitDat!Mot$$$,$$SysS
|
||||
.SbTtl Exit Routine
|
||||
Exit: Mov @#$$SysS,@#Sel1
|
||||
Mov Sav4,@#Vec4 ;Restore Vestor 4
|
||||
Mov ArgAdr,R5
|
||||
Mov #ResLng,R2
|
||||
Mov #Bk10Scm,R3
|
||||
10$: MovB (R3)+,R0
|
||||
Call PutUbt
|
||||
Sob R2,10$
|
||||
RorB ErrFlg
|
||||
Jmp RetEmt
|
||||
.SbTtl Checksum computing Routine
|
||||
ChkSum: Mov AdrSel,R4
|
||||
Mov (R4)+,@#Sel1 ;Initial User Sel1 Value
|
||||
Clr R0 ;Accumulator
|
||||
Br 20$
|
||||
10$: Bit #140000,R1 ;Check Region No
|
||||
Beq 30$
|
||||
Mov (R4)+,@#Sel1 ;Set New Value
|
||||
20$: Bic #140000,R1
|
||||
30$: Clr R3 ;R1=addr., R2=Length (Bytes)
|
||||
BisB Window(R1),R3
|
||||
Add R3,R0
|
||||
Adc R0
|
||||
Inc R1
|
||||
Sob R2,10$ ;R0 = Computed CheckSum
|
||||
Mov SelTbl,@#Sel1
|
||||
Return
|
||||
|
||||
.SbTtl SetTpe - Taperecorder preparing
|
||||
SetTpe: Mov #SelTbl,AdrSel ;Initial Sel1 Value
|
||||
Mov @AdrSel,R3
|
||||
Mov R3,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov #0,R0
|
||||
Sob R0,. ;Pause after taperecorder ON
|
||||
Return
|
||||
.SbTtl Write Command
|
||||
CmdWri:
|
||||
;
|
||||
;This ROutine Writes Tape file from User's memory.
|
||||
;File Name is from CmdNam Buffer,
|
||||
;Start Address is "StAddr", File length is "Lngth" bytes
|
||||
;
|
||||
Mov StAddr,R1 ;Initial Read/Write Address
|
||||
Mov Lngth,R2 ;File Length
|
||||
Mov UsSel,R5
|
||||
Call Prepare ;Set Tape On, Prepare Buffer
|
||||
Bcc 10$
|
||||
Jmp Err3 ;Illegal Region specification
|
||||
10$: Mov #SelTbl+2,AdrSel;Initial Sel Address
|
||||
Mov StAddr,R1
|
||||
Mov Lngth,R2
|
||||
Call ChkSum ;Compute CheckSum
|
||||
Mov R0,SumBuf ;And store it
|
||||
Call SetTpe ;Prepare Arguments and Taperecorder
|
||||
Mov #4096.,R0 ;Write Initial synchronization
|
||||
Clr R4
|
||||
Mov #256.,R5
|
||||
Call OutSnc
|
||||
Mov #StAddr,R1 ;Header Address
|
||||
Mov #2.+2.+16.,R2 ;Header Length
|
||||
Mov SelTbl,R3 ;System Sel1
|
||||
Call OutDat ;Write Data
|
||||
Add #2,AdrSel ;to 1-st User Sel1
|
||||
Mov @AdrSel,R3 ;New Sel1 Value
|
||||
Mov StAddr,R1 ;Data Array Address
|
||||
Mov Lngth,R2 ;Data Array Length
|
||||
Call OutDat
|
||||
Mov #SumBuf,R1 ;Write 2 Bytes of Checksum
|
||||
Mov SelTbl,R3
|
||||
Mov R3,@#Sel1 ;System Sel1
|
||||
Mov #2,R2 ;Data Length (2 Bytes)
|
||||
Call OutDt1 ;Write without Buffer Seq.
|
||||
Mov #256.,R0 ;Write Final Synchronization
|
||||
Mov R0,R4
|
||||
Mov R0,R5
|
||||
Call OutSnc
|
||||
Jmp CmdOFF ;Stop Tape and Exit
|
||||
.SbTtl Initial and final Synchronization Writing
|
||||
;
|
||||
;Input:
|
||||
;
|
||||
;R0= Pulse Counter
|
||||
;R3= Sel1 Value without Data bits
|
||||
;Uses R0, R5
|
||||
;Output Carry=0
|
||||
;
|
||||
OutSnc:
|
||||
10$: Bis #Dat11,R3 ;Write "0" ! *
|
||||
Mov R3,@#Sel1 ; ! *
|
||||
Add #Snc0,R5 ;U=UMAX ! *
|
||||
Sob R5,. ; ! *
|
||||
Bic #Dat11,R3 ;U=0 !*
|
||||
Mov R3,@#Sel1 ; !*
|
||||
Add #LNG0-2,R4 ; !*
|
||||
Sob R4,. ; !*
|
||||
Sob R0,10$ ;Count Pulses
|
||||
OutSn1:
|
||||
Bis #Dat11,R3 ;Write Marker ! *
|
||||
Mov R3,@#Sel1 ; ! *
|
||||
Mov #Snc2,R5 ;U=0.75 ! *
|
||||
Sob R5,. ; ! *
|
||||
Bic #Dat11,R3 ; ; *
|
||||
Mov R3,@#Sel1 ; ! *
|
||||
Mov #Snc3,R5 ; ! *
|
||||
Sob R5,. ; ! *
|
||||
Inc R4 ;R4=1
|
||||
Mov R2,R0 ;Temporary Storage of R2
|
||||
Mov R4,R2 ;R2=1 (1 byte, 1 bit)
|
||||
Call OutBt1 ;Output bit of One
|
||||
Mov R0,R2 ;And Restore R2
|
||||
Return
|
||||
.SbTtl Data Array Output
|
||||
;
|
||||
;Input:
|
||||
;R1=Initial Buffer Address
|
||||
;R2=Buffer length
|
||||
;
|
||||
OutDat: Mov #8.,R0 ;Write Buffer Sequence.
|
||||
Call OutSnc
|
||||
OutDt1: Br OutDt3
|
||||
OutDt2: Inc R1
|
||||
Bit #140000,R1
|
||||
Beq 10$
|
||||
Add #2,AdrSel
|
||||
Mov @AdrSel,R3
|
||||
Mov R3,@#Sel1
|
||||
10$:
|
||||
OutDt3: Bic #140000,R1
|
||||
MovB Window(R1),R0 ;Data Byte
|
||||
Mov #8.,R4 ;Bit per Byte counter
|
||||
Outbit: Asr R0 ;Shift out the next bit
|
||||
Bcs OutBt1
|
||||
OutBt0: Bis #Dat11,R3
|
||||
Mov R3,@#Sel1
|
||||
Mov #LNG0,R5 ;Write 0; U=1 ! *
|
||||
Sob R5,. ; ! *
|
||||
Bic #Dat11,R3 ;U=0 !*
|
||||
Mov R3,@#Sel1 ; !*
|
||||
Mov #LNG0-1,R5 ; !*
|
||||
Sob R5,. ; !*
|
||||
Br OutSsi ; !*
|
||||
OutBt1: Bis #Dat11,R3
|
||||
Mov R3,@#Sel1
|
||||
Mov #LNG1+3,R5 ;U=0.75 ! *
|
||||
Sob R5,. ; ! *
|
||||
Bic #Dat11,R3 ; ! *
|
||||
Mov R3,@#Sel1 ;U=0.25 ! *
|
||||
Mov #LNG1+3,R5 ; ! *
|
||||
Sob R5,. ; ! *
|
||||
;Synchro-Pulse writing
|
||||
OutSsi: Bis #Dat11,R3 ;U=MAX ! *
|
||||
Mov R3,@#Sel1 ; ! *
|
||||
Mov #LNG0,R5 ; ! *
|
||||
Sob R5,. ; ! *
|
||||
Bic #Dat11,R3 ;U=0 !*
|
||||
Mov R3,@#Sel1 ; !*
|
||||
Mov #LNG0-2,R5 ; !*
|
||||
Sob R5,. ; !*
|
||||
Sob R4,Outbit ;Bit per Byte Loop
|
||||
Dec R2
|
||||
Bne OutDt2 ;Byte per Block Loop
|
||||
Return
|
||||
.SbTtl Tape Reading Routines
|
||||
CmdDir: MovB #1,DirFlg ;Dir Operation
|
||||
CmdRnX: MovB #1,NxtFlg
|
||||
Br CmdRd
|
||||
CmdFct: Inc Noread ;Set "Disable Reading Flag"
|
||||
CmdRd: Clr R1 ;Initial Buffer Address
|
||||
Mov #140000,R2 ;Buffer Length
|
||||
Mov UsSel,R5
|
||||
Call Prepare
|
||||
Mov #TapBit,R5 ;Input Data bit mask
|
||||
Mov #1,IncADR ;Address Increment
|
||||
Mov #Sel1,R3 ;Sel1 Address
|
||||
.SbTtl Synchronization Search Loop
|
||||
Again: Mov #SelTbl,AdrSel ;Set System Sel1 Value
|
||||
Mov SelTbl,@R3 ;Map System Page Twice, Set Tape On
|
||||
Call GetSnc ;Initial Read Syncronization
|
||||
Mov SelTbl,@R3 ;Map System Page Twice, Set Tape On
|
||||
Call GetLbl ;Read file Label (Header)
|
||||
Bcs 20$ ;Header Error - Illegal file name
|
||||
TstB DirFLg
|
||||
Bne 20$
|
||||
10$: Call GetFil ;Read Data
|
||||
Mov @#$$SysS,@#Sel1 ;Set Normal System Sel1
|
||||
Call MtIni
|
||||
Jmp Exit ;And Exit
|
||||
20$: BisB #1,ErrFlg ;Set "Illegal File Name" Flag
|
||||
Jmp Exit ;and Exit
|
||||
.SbTtl Initial Synchronization Search Routine
|
||||
GetSnc: ClrB Phase ;Inverted Phase Flag
|
||||
10$: Mov #4000,R2 ;Loop Counter
|
||||
Clr R0 ;Initial pulse width value
|
||||
20$: Clr R4 ;Counter for one pulse time
|
||||
30$: Bit R5,@R3 ;Wait for bit of "1"
|
||||
Beq 30$ ;
|
||||
40$: Inc R4 ;Count time of "1"
|
||||
Bit R5,@R3 ;R4 = "1" Time
|
||||
Bne 40$
|
||||
Sub R4,R0 ;Compute Pulse Dispersion
|
||||
Bmi 50$ ;
|
||||
Cmp R0,#DspRd ;Dispersion greater ==>
|
||||
Bhi 10$ ;new search
|
||||
50$: Mov R4,R0 ;Wait another time (2048 Times)
|
||||
Sob R2,20$
|
||||
|
||||
.SbTtl Phase and speed determination
|
||||
Clr R0 ;Speed value
|
||||
Mov #128.,R2 ;Pulse Counter
|
||||
60$: Call GetBit ;R4= one Pulse width
|
||||
Add R4,R0
|
||||
Sob R2,60$ ;R0= T(128 pulses)
|
||||
Mov #7,R2 ;
|
||||
70$: Asr R0
|
||||
Sob R2,70$ ;R0=Average pulse width
|
||||
Mov R0,R4 ;
|
||||
Asr R4
|
||||
Add R4,R0
|
||||
Mov R0,BitLng ; 1.5*Pulse width
|
||||
.SbTtl Phase detection
|
||||
;First Long pulse state=1 ==> Direct, =0 ==> Invert phase
|
||||
80$: Clr R4 ;Initialize time counter
|
||||
90$: Inc R4 ;Count time
|
||||
Bit R5,@R3 ;What's this
|
||||
Bne 90$ ;It's One, Count time
|
||||
Cmp R4,R0 ;Time of One is Long (>1.5t) ?
|
||||
Bhi 110$ ;Yes, direct phase
|
||||
Clr R4 ;No, Wait another one
|
||||
100$: Inc R4 ;Count Time of zero
|
||||
Bit R5,@R3
|
||||
Beq 100$
|
||||
Cmp R4,R0 ;Time of 0 is long ?
|
||||
Blo 80$ ;No, Wait once more
|
||||
IncB Phase ;Long Zero ==> set Inverse flag
|
||||
110$: Asl R0
|
||||
;End of tuning operations
|
||||
;
|
||||
Cmp R4,R0 ;pulse too long (Direct Current) ?
|
||||
Bhi GetSnc ;Yes, Ignore tuning operations, Go Again
|
||||
Call GetBit ;Else Skip one bit and Return
|
||||
Return
|
||||
UNSYN1: Cmp (SP)+,(SP)+ ;Repeat search Once more
|
||||
Br AGAIN
|
||||
.SbTtl File Header Read Routine
|
||||
GetLbl: Mov SelTbl,@R3 ;Set System Sel1
|
||||
Mov #<ResBlk&<^C140000>>,R1 ;Real Header Buffer
|
||||
Mov #16.+2.+2.,R2 ;Byte Counter
|
||||
Call GetBlk ;Read Tape block
|
||||
TstB NxtFlg
|
||||
Bne 30$ ;Ill. File Name ==> Read Data
|
||||
Mov #8.,R2 ;Compare Names
|
||||
Mov #ResNam,R1
|
||||
10$: Cmp CmdNam-ResNam(R1),(R1)+
|
||||
Bne 20$ ;Different Filenames
|
||||
Sob R2,10$
|
||||
Br 30$
|
||||
20$: MovB #1,@#ErrByt ;Another file Found
|
||||
Br 40$
|
||||
30$: Tst (PC)+
|
||||
40$: Sec
|
||||
Return
|
||||
.SbTtl Data Block Read Routine
|
||||
GetFil: Mov Rlngth,R2 ;File Length = Byte Counter
|
||||
Mov #SumBuf,R1 ;Fictive Read Buffer Address
|
||||
Mov #SelTbl,AdrSel ;And Sel1 Value
|
||||
Sub Noread,IncAdr ;Fictive Read Operation ?
|
||||
Beq 10$ ;Yes
|
||||
Call ReAdr ;Get Read Address
|
||||
10$: Bic #140000,R1 ;Get WIndow Address
|
||||
Mov @AdrSel,@R3 ;Map Window
|
||||
Call GetBlk ;Read Data Block
|
||||
Mov #SelTbl,AdrSel ;
|
||||
Mov @AdrSel,@R3 ;Set System Sel1
|
||||
Mov #SumBuf&<^C140000>,R1 ;Checksum Address
|
||||
Mov #2,R2 ;Block Size
|
||||
Call GetDat ;Get CheckSum
|
||||
Tst Noread ;Fictive Read ?
|
||||
Bne 20$ ;Yes, Skip Computing
|
||||
Call ReAdr ;Read Addr to R1, Prepare Sel1
|
||||
Mov RLNGTH,R2 ;File Length
|
||||
Call ChkSum ;Compute CheckSum
|
||||
Cmp R0,SumBuf
|
||||
Beq 20$ ;Checksum OK
|
||||
MovB #CHKERR,@#ErrByt;
|
||||
IncB ErrFlg
|
||||
Sec
|
||||
Return
|
||||
20$: Clc
|
||||
Return
|
||||
|
||||
ReAdr: Mov StAddr,R1 ;User Read Address
|
||||
Bne 10$
|
||||
Mov Raddr,R1 ;Not Found, Get from Label
|
||||
10$: Mov R1,R0
|
||||
Rol R0 ;
|
||||
Rol R0 ;1
|
||||
Rol R0 ;11
|
||||
Rol R0 ;111
|
||||
Bic #^C6,R0 ;Region No
|
||||
Add #SelTbl+2,R0
|
||||
Mov R0,AdrSel ;Correct No
|
||||
Return
|
||||
.SbTtl Block Get Routine
|
||||
;
|
||||
;Input Data:
|
||||
;R1=Read Address (inside Memory window)
|
||||
;R2=Byte Counter
|
||||
;R3=Sel1 Adress
|
||||
;R5=Input Data bit mask
|
||||
;
|
||||
GetBlk: Mov BitLng,R0 ;Speed-Depended value
|
||||
TstB Phase ;What phase ?
|
||||
Bne 30$ ;Inverted
|
||||
;
|
||||
;Direct Phase Read Operation
|
||||
;
|
||||
10$: Clr R4 ;Time Counter
|
||||
20$: Inc R4
|
||||
Bit R5,@R3
|
||||
Bne 20$
|
||||
Cmp R4,R0 ;What's about width?
|
||||
Blo 10$ ;Too small, skip Sync-bit
|
||||
Br 50$ ;It's Data, Compouse
|
||||
;
|
||||
;Inverted phase read
|
||||
;
|
||||
30$: Clr R4
|
||||
40$: Inc R4
|
||||
Bit R5,@R3
|
||||
Beq 40$
|
||||
Cmp R4,R0 ;Sync-Bit?
|
||||
Blo 30$ ;Yes, Skip it
|
||||
|
||||
50$: Asl R0 ;R0 = Max time
|
||||
Cmp R4,R0 ;Pulse too long ?
|
||||
Bhi UNSYN1 ;Yes, Error (No Data)
|
||||
Call GetBit ;Read One bit of data to sinchronize
|
||||
Br GetDat
|
||||
.SbTtl Bit to byte assembling, Read Data
|
||||
GetDaX: Add IncADR,R1 ;Go next Address
|
||||
Bit #140000,R1
|
||||
Beq 10$
|
||||
Add #2,AdrSel
|
||||
Mov @AdrSel,@R3 ;Set New Sel1 Value
|
||||
10$:
|
||||
GetDat: Bic #140000,R1
|
||||
Mov #8.,R0 ;Bit per Byte Counter
|
||||
10$: Call GetBit ;Get Data bit
|
||||
Cmp R4,BitLng ;Check bit Value
|
||||
Bhi 20$
|
||||
Tst (PC)+ ;Zero, Clear Carry
|
||||
20$: SeC ;One, Set Carry
|
||||
30$: RorB Window(R1) ;Shift Data bit in
|
||||
Sob R0,10$ ;Byte loop
|
||||
Sob R2,GetDaX ;Data Block Loop
|
||||
Return
|
||||
.SbTtl Bit Reading Routine
|
||||
GetBit: Clr R4 ;
|
||||
TstB Phase ;Inverted phase?
|
||||
Bne 50$ ;Yes
|
||||
;
|
||||
;Direct Phase Read Routine
|
||||
;
|
||||
10$: Bit R5,@R3 ;Wait for 1 to 0 edge
|
||||
Bne 10$
|
||||
20$: Bit R5,@R3 ;Rising edge wait loop
|
||||
Beq 20$
|
||||
30$: Inc R4
|
||||
Bit R5,@R3
|
||||
Bne 30$
|
||||
40$: Inc R4
|
||||
Bit R5,@R3
|
||||
Beq 40$
|
||||
Return ;R4 = Pulse width
|
||||
;
|
||||
;Invert phase read routine
|
||||
;
|
||||
50$: Bit R5,@R3
|
||||
Beq 50$
|
||||
60$: Bit R5,@R3
|
||||
Bne 60$
|
||||
70$: Inc R4
|
||||
Bit R5,@R3
|
||||
Beq 70$
|
||||
80$: Inc R4
|
||||
Bit R5,@R3
|
||||
Bne 80$
|
||||
Return ;R4= Pulse width
|
||||
.Psect $Ram
|
||||
ArgAdr: .BlkW ;User Arg Block address
|
||||
|
||||
Bk10Scm: ;Handler Working Buffer of Arg Block
|
||||
Code: .BlkB ;Op Code
|
||||
.Even
|
||||
StAddr: .BlkW ;Memory Address
|
||||
Lngth: .BlkW ;File Length
|
||||
CmdNam: .BlkB 16. ;File Name
|
||||
UsSel: .BlkW ;Pages...
|
||||
ArgLng=.-Bk10Scm
|
||||
ResBlk:
|
||||
Raddr: .BlkW
|
||||
Rlngth: .BlkW
|
||||
ResNam: .BlkB 16. ;Real Filename
|
||||
ResLng=.-Bk10Scm
|
||||
|
||||
.SbTtl Internal Working Cells
|
||||
Phase: .BlkB ;Tape Phase flag
|
||||
ErrFlg: .BlkB
|
||||
NxtFlg: .BlkB
|
||||
DirFlg: .BlkB
|
||||
.Even
|
||||
Noread: .BlkW ;Fictious Reading Flag
|
||||
SPSave: .BlkW ;Stack Pointer Save Area
|
||||
Sav4: .BlkW ;Vector 4 Save Area
|
||||
SumBuf: .BlkW ;CheckSum Buffer
|
||||
IncADR: .BlkW
|
||||
BitLng: .BlkW ;Bit pulse width
|
||||
.End
|
122
ROM sources/BK-0011 driver module/BKSOUT.MAC
Normal file
122
ROM sources/BK-0011 driver module/BKSOUT.MAC
Normal file
@ -0,0 +1,122 @@
|
||||
.Mcall .Module
|
||||
.Module OutSym,Release=X02,Version=00,Comment=<BK0011 Symbol Generation>
|
||||
;
|
||||
; Copyright (c) 1986 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl UndLn$,InvCh$$,ShiftM,ScrSel
|
||||
.Globl Color,BkGnd,TtoFlg,NxTvLn,CrsAdr
|
||||
|
||||
.Psect $Code
|
||||
.SbTtl Symbol Generation
|
||||
;
|
||||
; R0= Symbol code, R5= SymTab Address
|
||||
;
|
||||
; Symtab is the table with 9 bytes per symbol
|
||||
;
|
||||
OutSym::
|
||||
Bic #^C377,R0
|
||||
Mov @#$$UsrS,-(SP) ;Save Current User Sel1
|
||||
Mov @SP,-(SP) ;Save Current User Sel1
|
||||
Bic #^C<ScrMsk!TapMsk>,@SP
|
||||
Mov ScrSel,@#$$UsrS ;Sel for Screen
|
||||
Bic #TapMsk!ScrMsk,$$UsrS ;(Without tape and screen)
|
||||
Bis (SP)+,@#$$UsrS ;Prepare SEL1 register for screen mapping
|
||||
Mov R0,-(SP)
|
||||
Asl R0 ; Compute the table offset
|
||||
Asl R0 ; *4
|
||||
Asl R0 ; *8 SymTab Shift
|
||||
Add (SP)+,R0 ; *7
|
||||
Add 2(R5),R0 ; Add SymTab Address
|
||||
Mov CrsAdr,R1 ; Current Address
|
||||
Mov R1,-(SP) ;Not Delete this Command !!!!!
|
||||
;Addr Must be in R1 !!!
|
||||
Mov @R5,-(SP) ;SymTab Map Constant
|
||||
Bic #<TapMsk!ScrMsk>,@SP ;Set Current Taperecorder Bits
|
||||
Mov @#$$SysS,R2 ;In Symtab Sel1
|
||||
Bic #^C<TapMsk!ScrMsk>,R2;
|
||||
Bis R2,@SP ;New screen and tape bits
|
||||
Mov #9.,R2 ; Raster counter
|
||||
|
||||
.SbTtl Get SymTab Byte to R3
|
||||
10$: Mov CrsAdr,R1 ; Current Address
|
||||
20$: Mov @SP,@#Sel1 ;Set Symtab Map
|
||||
MovB (R0)+,R3 ;Get Character From Symtab
|
||||
Mov @#$$SysS,@#Sel1 ;And Restore System Maping
|
||||
Tst @#Sel1
|
||||
Cmp R2,#1
|
||||
Bne 30$
|
||||
Bit #Undln$,TtoFlg
|
||||
Beq 30$
|
||||
Com R3
|
||||
30$: Call PutChr ;And Put Character to Screen
|
||||
Sob R2,10$ ;Loop until 9 Rasters done
|
||||
Tst (SP)+ ;Clear stack
|
||||
Mov (SP)+,CrsAdr ;Restore Screen Address
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov (SP)+,@#$$UsrS ;Restore User Mapping
|
||||
Return
|
||||
.SbTtl Routine to put character raster line to TV-Screen Buffer
|
||||
PutChr:
|
||||
Mov @#$$UsrS,@#Sel1 ;Set Screen Mapping
|
||||
Tst @#Sel1 ;
|
||||
Bit #InvCh$$,TtoFlg ; Inverted ?
|
||||
Beq 10$ ;No, Do Nothing
|
||||
Com R3 ; Yes, Invert code
|
||||
10$: Mov #8.,-(SP) ;Bit per char counter
|
||||
Mov R3,-(SP) ;Save symbol Code
|
||||
20$: MovB Shiftm,R4 ;Character width
|
||||
Dec R4 ;
|
||||
Beq 50$ ;1 bit/Point, Do nothing
|
||||
Ror @SP ;Else expand byte to 1 or Two words
|
||||
Ror R5 ;Get new bit
|
||||
Ror R3 ;(Second Word)
|
||||
30$: Asr R5 ;Expand the sign bit
|
||||
Ror R3 ;
|
||||
Sob R4,30$ ;And loop
|
||||
Dec 2(SP) ;Bit per Byte Counter
|
||||
Bne 20$ ;
|
||||
Mov R5,R4 ;Set Color for 1-st Word
|
||||
Call ClSet ;
|
||||
CmpB Shiftm,#2 ;256 Points ?
|
||||
Bne 40$ ;No, 128
|
||||
Mov R4,@R1 ;Write Word to Screen
|
||||
Br 60$
|
||||
40$: Mov R4,2(R1) ;Write First and
|
||||
Mov R3,R4 ;Second Words
|
||||
Call ClSet ;For 128 Points
|
||||
Mov R4,@R1
|
||||
Br 60$
|
||||
50$: Mov R3,R4 ;Process 512 Points/Line Code
|
||||
Call ClSet
|
||||
MovB R4,@R1 ;Write Byte to screen
|
||||
60$: Cmp (SP)+,(SP)+ ;Clear Stack Space
|
||||
Call NxTVLn ;And Move TV-Raster line down
|
||||
Return
|
||||
.SbTtl Color Mapping Routine for symbol generation
|
||||
ClSet: Mov BkGnd,-(SP)
|
||||
Bic R4,@SP ;Clear Unused
|
||||
Com R4
|
||||
Mov Color,-(SP)
|
||||
Bic R4,@SP
|
||||
Bis (SP)+,@SP
|
||||
Mov (SP)+,R4
|
||||
Return
|
||||
|
||||
.End
|
80
ROM sources/BK-0011 driver module/BKSTRT.MAC
Normal file
80
ROM sources/BK-0011 driver module/BKSTRT.MAC
Normal file
@ -0,0 +1,80 @@
|
||||
.Mcall .Module
|
||||
.Module BKSTRT, Release=X02, Version=03, Comment=<BK0011 Starting Routine>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl Debug, IniBK, BootRX, GetUwd
|
||||
|
||||
|
||||
MYcsr == 177130 ;MY: Control state register
|
||||
.SbTtl General Initialization Routine
|
||||
|
||||
Start:: MtPS #340
|
||||
Mov #UStack,SP ;Set initiial Stack pointer
|
||||
Tst -(SP) ;
|
||||
Call IniBK ;Call Initialization Routine
|
||||
Mov #UStack,SP ;Set initiial Stack pointer
|
||||
Mov @#Vec4,SvaXX ;
|
||||
Mov #1$,@#Vec4 ;
|
||||
Clr @#MYcsr ;Test for MY: Disk controller
|
||||
Mov @#SvaXX,@#Vec4 ;Restore vector
|
||||
.Rem *
|
||||
Clr -(SP) ;
|
||||
2$: Mov @SP,R0 ;Get Unit No
|
||||
Call BootRX ;Attempt to Boot the System
|
||||
Bcs 1$ ;No Device
|
||||
Inc @SP ;Go next unit
|
||||
Cmp @SP,#3 ;
|
||||
Blos 2$ ;
|
||||
*
|
||||
1$: Mov #UStack,SP ;Initialize Stack
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov @#SvaXX,@#Vec4 ;Restore vector
|
||||
Mov #13,SvaX1 ;The last ROM page number
|
||||
5$: .BsetPg SvaX1,#1 ;Connect ROM
|
||||
Bcs 3$ ;This ROM is illegal
|
||||
Mov @#100000,R0 ;Read Word
|
||||
Cmp #NOP,R0 ;Test for program
|
||||
Bne 3$ ;Illegal ROM
|
||||
Call @#100000 ;Call ROM program
|
||||
3$: Mov @#$$SysS,@#Sel1
|
||||
Mov @#$$SysS,@#$$UsrS
|
||||
Tst @#Sel1
|
||||
Dec SvaX1 ;Illegal ROM, check the next
|
||||
Cmp SvaX1,#10 ;
|
||||
Bhis 5$ ;
|
||||
Mov #Mot$$$!WrEnS!<1*400>!<20*400>,@#$$UsrS
|
||||
Mov #UStack,SP ;
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Tst @#Sel1
|
||||
.Bprint #IniTxt
|
||||
Clr -(SP) ;Original PC, PS = 0
|
||||
Clr -(SP) ;
|
||||
Jmp Debug
|
||||
|
||||
.Psect $Stack
|
||||
.Blkw 200.
|
||||
SStack::
|
||||
.Psect $RAM
|
||||
SvaXX: .Blkw
|
||||
SvaX1: .Blkw
|
||||
.Psect $Const
|
||||
IniTxt: .AsciZ /BK0011 Keyboard Monitor/
|
||||
.Even
|
||||
.End Start
|
868
ROM sources/BK-0011 driver module/BKTV.MAC
Normal file
868
ROM sources/BK-0011 driver module/BKTV.MAC
Normal file
@ -0,0 +1,868 @@
|
||||
.Mcall .Module
|
||||
.Module BKTV, Release=X02, Version=05, Comment=<BK0011 TV-Set Handler>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl SavRg,SymTab,SymG00,RetEmt,GetArg,IsgTab,CtrTab
|
||||
.Globl KbMode,$MixAs,$Cyril,FncTb,OutSym,NAK,FF,SetScS,SetScX
|
||||
.Globl GetUbt,GetUwd,PutUwd
|
||||
|
||||
.SbTtl Data Field Definitions and Constants
|
||||
MemBeg = 100000
|
||||
MemEnd = 140000
|
||||
Scroll == 177664
|
||||
; Symtab Format:
|
||||
;
|
||||
; 000 - 037 Space, !"#$%&'()*+,-./0123456789:;<=>?
|
||||
; 040 - 077 @, UPPER CASE A-Z [\]^_
|
||||
; 100 - 137 "`", lower case a-z{|}~,Rubout
|
||||
; 140 - 177 Lower case Cyrillic
|
||||
; 200 - 237 Upper case Cyrillic
|
||||
;
|
||||
;
|
||||
;TtoFlg Word Definition:
|
||||
;
|
||||
.Radix 2
|
||||
SSflg$ == 1000000000000000 ;100000 ;Special Line Disabled
|
||||
Block$ == 100000000000000 ;40000 ;Control Characters Indication
|
||||
Crsr$$ == 10000000000000 ;20000 ;Cursor indication Disabled
|
||||
AWrp$$ == 1000000000000 ;10000 ;Auto Wrap Mode OFF
|
||||
UndLn$$ == 100000000000 ;4000 ;Character Underlinning
|
||||
InvCh$$ == 10000000000 ;2000 ;Character Inversion
|
||||
Lat$$ == 1000000000 ;1000 ;Ascii ==> Latin Flag
|
||||
MixO$$ == 100000000 ;400 ;Ascii ==> Mixed Mode
|
||||
AscO$$ == 10000000 ;200 ;0==> UAscii, 1==> Ascii
|
||||
|
||||
D$Wid$ == 100 ;1 ==> Double Width Characters
|
||||
WdtMsk == 11 ;Line Width Mask:
|
||||
.Radix 8.
|
||||
;
|
||||
;0 ==> 128 Points per line
|
||||
;1 ==> 256
|
||||
;2 ==> 512
|
||||
;3 ==> 256
|
||||
.SbTtl TtyPrg - Symbol Output Routine
|
||||
;
|
||||
;
|
||||
;
|
||||
; This routine outputs one byte from R0 to TV-Set screen.
|
||||
; If "AWrp$$" flag isn't set, automatical "Newline" operation is issued
|
||||
; after printing character at the right margin.
|
||||
; Otherwise the next symbol will be printed at the same place.
|
||||
;
|
||||
; Symbols are accepted in code, determined by the TtoFlg word flags
|
||||
;
|
||||
;
|
||||
.If EQ 1
|
||||
Symbol Codes:
|
||||
----------------------------------------------------------------------
|
||||
! Codes !Block$!AscO$$!MixO$$!Lat$$! Indication !
|
||||
----------------------------------------------------------------------
|
||||
! 0..37 ! 0 ! X ! X ! X !Control Char Processing !
|
||||
! ! 1 ! X ! X ! X !Inverted Latin Or Graphics !
|
||||
! 40..77 ! X ! X ! X ! X !Numeric and Special Codes !
|
||||
!100..137 ! X ! 0 ! X ! X !Big Latin Letters !
|
||||
! ! X ! 1 ! 0 ! 0 !Small Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 1 !Big Latin Letters !
|
||||
! ! X ! 1 ! 1 ! X !Big Latin Letters !
|
||||
!140..177 ! X ! 0 ! X ! X !Small Latin Letters !
|
||||
! ! X ! 1 ! 0 ! 0 !Big Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 1 !Small Latin Letters !
|
||||
! ! X ! 1 ! 1 ! X !Big Cyrillic Letters !
|
||||
!200..237 ! 0 ! X ! X ! X !Unused !
|
||||
! ! 1 ! X ! X ! X !Inverted Symbols !
|
||||
!240..277 ! X ! X ! X ! X !Semi-Graphics !
|
||||
!300..337 ! X ! 0 ! X ! X !Small Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 0 !Small Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 1 !Big Latin Letters !
|
||||
! ! X ! 1 ! 1 ! X !Big Latin Letters !
|
||||
!340..377 ! X ! 0 ! X ! X !Big Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 0 !Big Cyrillic Letters !
|
||||
! ! X ! 1 ! 0 ! 1 !Big Latin Letters !
|
||||
! ! X ! 1 ! 1 ! X !Big Cyrillic Letters !
|
||||
----------------------------------------------------------------------
|
||||
.EndC
|
||||
.Psect $CodOvr
|
||||
;
|
||||
;Input And Output State == System RAM, System ROM
|
||||
;
|
||||
TtyPrg::
|
||||
Jsr R0,SavRg ;
|
||||
Bic #^C377,R0
|
||||
Tst Prefix ;Multi-Char Sequence ?
|
||||
Beq 10$ ;No
|
||||
Call @Prefix ;Yes, Process it
|
||||
Br TtoExi
|
||||
10$: Mov #AlpTab,R5 ;Symtab Address
|
||||
Mov R0,R1
|
||||
Asl R1
|
||||
Asl R1
|
||||
Asl R1
|
||||
Swab R1
|
||||
Bic #^C7,R1
|
||||
Asl R1
|
||||
Jmp @SelSym(R1)
|
||||
.Save
|
||||
.Psect $CnsOvr
|
||||
SelSym: .Word S000,S001,S010,S011,S100,S101,S110,S111
|
||||
.Restore
|
||||
|
||||
S100: Add #140-40-200,R0 ;Small latin
|
||||
Bit #Block$,Ttoflg
|
||||
Beq TtoExi
|
||||
|
||||
S000: Bit #Block$,TtoFlg ;Control Codes
|
||||
Beq 30$
|
||||
Mov #InvCh$$,R1
|
||||
Xor R1,TtoFlg
|
||||
MovB ISGTab(R0),R0
|
||||
Bpl 20$
|
||||
Mov #GrpTab,R5
|
||||
Neg R0 ;
|
||||
20$: Call OutSym
|
||||
Mov #InvCh$$,R1
|
||||
Xor R1,TtoFlg
|
||||
Br StepCr ;Cursor Right
|
||||
|
||||
30$: Asl R0
|
||||
Mov CtrTab(R0),R0
|
||||
Beq TtoExi
|
||||
Call @R0 ;Control Char. Processing
|
||||
Call CurAdr ;Compute Cursor Address
|
||||
Jmp RetEmt ;And Exit
|
||||
|
||||
S101: Mov #GrpTab,R5
|
||||
S001: Bic #^C37,R0
|
||||
Br SymOut
|
||||
S010:
|
||||
S011:
|
||||
S110:
|
||||
S111: Bit #AscO$$,TtoFlg
|
||||
Bne 1$
|
||||
TstB R0
|
||||
Bpl 2$
|
||||
Sub #100,R0
|
||||
2$: Sub #40,R0
|
||||
Br SymOut
|
||||
1$: Bic #^C177,R0
|
||||
Bit #MixO$$,TtoFlg
|
||||
Beq 3$
|
||||
Bit #40,R0
|
||||
Beq 2$
|
||||
5$: Add #40,R0
|
||||
Br SymOut
|
||||
3$: Bit #Lat$$,TtoFlg
|
||||
Beq 5$
|
||||
Br 2$
|
||||
.SbTtl Common Printing Symbol Output
|
||||
EM:: Tst (SP)+
|
||||
Br StepCr
|
||||
SymOut: Call OutSym ;and output symbol
|
||||
StepCr: IncB CursX ;Step
|
||||
MovB Shiftm,R0
|
||||
Add R0,CrsAdr
|
||||
Cmpb CursX,StrLen
|
||||
Blo TtoExi
|
||||
Bit #AWrp$$,TtoFlg
|
||||
Beq 100$
|
||||
DecB CursX
|
||||
Sub R0,CrsAdr
|
||||
Br TtoExi
|
||||
100$: Call NAK ;New Line
|
||||
Call CurAdr
|
||||
TtoExi: Jmp RetEmt
|
||||
.Psect $Code
|
||||
.SbTtl Common Routines
|
||||
.SbTtl Next TV-Line Routine
|
||||
NxTVLn::
|
||||
Add #100,CrsAdr ; One TV-line down
|
||||
Bic #40000,CrsAdr
|
||||
Bis #100000,CrsAdr
|
||||
Return
|
||||
.SbTtl Alphanumeric Cursor Address Computation
|
||||
;
|
||||
CurAdr::
|
||||
;
|
||||
; Line Addr=Y*100*11+ScrBot
|
||||
;
|
||||
MovB CursY,R1
|
||||
SwaB R1 ; *100*4
|
||||
ClrB R1
|
||||
Mov R1,R0
|
||||
Ror R0 ; *2*100
|
||||
Ror R0 ; *1*100
|
||||
Rol R1 ; *10*100
|
||||
Add R1,R0 ; *11*100
|
||||
Add ScrBot,R0 ; R0= TV-Line Address
|
||||
Mov R0,CrsAdr
|
||||
MovB CursX,R0
|
||||
Bic #^C377,R0 ; X-Coordinate
|
||||
MovB Shifts,R1
|
||||
Beq 1$
|
||||
2$: Asl R0
|
||||
Sob R1,2$
|
||||
1$: Add R0,CrsAdr
|
||||
Bic #40000,CrsAdr
|
||||
Bis #100000,CrsAdr
|
||||
Return
|
||||
.SbTtl Symbol Line Down Scroll
|
||||
ScrlDw::
|
||||
Mov ScrBot,R0 ;Screen Bottom (Upper Left Corner)
|
||||
Mov R0,R1
|
||||
Add #9.*100,R1 ;New Bottom
|
||||
Bic #40000,R1
|
||||
Bis #100000,R1
|
||||
Mov R1,ScrBot ;Store it
|
||||
Add #9.,@SclWri ;Scroll Register Address
|
||||
Call SetScl
|
||||
Call SetScS ;Map Screen
|
||||
Cmp R0,#MemBeg
|
||||
Bne 20$
|
||||
Add #40000,R0
|
||||
20$: Cmp R1,#MemBeg
|
||||
Bhi 30$
|
||||
Add #40000,R1
|
||||
;
|
||||
;Special Line Scroll
|
||||
;
|
||||
30$: Mov SpcLng,R2 ;Special Line Length (TV lines)
|
||||
40$: Mov #100/2,R3
|
||||
50$: Mov -(R0),-(R1)
|
||||
Sob R3,50$
|
||||
Cmp R0,#MemBeg
|
||||
Bhi 60$
|
||||
Add #40000,R0
|
||||
60$: Cmp R1,#MemBeg
|
||||
Bhi 70$
|
||||
Add #40000,R1
|
||||
70$: Sob R2,40$
|
||||
Mov #9.,R2 ;String Counter
|
||||
Mov Bkgnd,R0
|
||||
80$: Mov #100/2,R3 ;Word Counter
|
||||
90$: Mov R0,-(R1)
|
||||
Sob R3,90$
|
||||
Cmp R1,#MemBeg
|
||||
Bhi 100$
|
||||
Add #40000,R1
|
||||
100$: Sob R2,80$
|
||||
Call SetScX ;Unmap Screen
|
||||
Return
|
||||
.SbTtl Symbol Line Up Scroll
|
||||
ScrlUp::
|
||||
Mov ScrBot,R0
|
||||
Sub #9.*100,R0
|
||||
Cmp R0,#MemBeg
|
||||
Bhis 10$
|
||||
Add #40000,R0
|
||||
10$: Mov R0,ScrBot
|
||||
Sub #9.,@SclWri
|
||||
Call SetScl
|
||||
Add ScrLng,R0
|
||||
Mov R0,R1
|
||||
Add #9.*100,R1 ;Read Address
|
||||
Call SetScs ;Map Screen
|
||||
20$: Mov SpcLng,R2
|
||||
30$: Bic #40000,R1
|
||||
Bis #100000,R1
|
||||
Bic #40000,R0
|
||||
Bis #100000,R0
|
||||
Mov #100/2,R3
|
||||
40$: Mov (R1)+,(R0)+
|
||||
Sob R3,40$
|
||||
Sob R2,30$
|
||||
Mov #9.,R2
|
||||
Mov Bkgnd,R1
|
||||
50$: Bic #40000,R0
|
||||
Bis #100000,R0
|
||||
Mov #100/2,R3
|
||||
60$: Mov R1,(R0)+
|
||||
Sob R3,60$
|
||||
Sob R2,50$
|
||||
Call SetScX ;Unmap Screen
|
||||
Return
|
||||
.SbTtl $Bscroll (EMT 110) Routine (TV-Line Scrolling)
|
||||
$Bscroll::
|
||||
Mov R0,-(SP)
|
||||
Call TstCrs
|
||||
Add R0,@SclWri
|
||||
Call SetScl
|
||||
Swab R0
|
||||
ClrB R0
|
||||
Asr R0
|
||||
Asr R0
|
||||
Add ScrBot,R0
|
||||
Bis #100000,R0
|
||||
Bic #40000,R0
|
||||
Mov R0,Scrbot
|
||||
Call CurAdr
|
||||
Call TstCrs
|
||||
Mov (SP)+,R0
|
||||
Return
|
||||
.Psect $CodOvr
|
||||
.SbTtl Color Setting Routine
|
||||
ClrGet::
|
||||
Mov #10$,Prefix
|
||||
Return
|
||||
10$: Mov #20$,Prefix
|
||||
Call Mult
|
||||
Mov R0,Color
|
||||
Return
|
||||
20$: Clr Prefix
|
||||
Call Mult
|
||||
Mov R0,BkGnd
|
||||
Return
|
||||
Mult: Bic #^C17,R0
|
||||
Mov R0,R1
|
||||
Asl R0
|
||||
Asl R0
|
||||
Asl R0
|
||||
Asl R0
|
||||
Bis R1,R0
|
||||
Mov R0,R1
|
||||
Swab R0
|
||||
Bis R1,R0
|
||||
Return
|
||||
.SbTtl Cursor Set/ Reset routine
|
||||
.Psect $Code
|
||||
;
|
||||
;Input State: System RAM, System ROM
|
||||
;
|
||||
TStCrs::
|
||||
Bit #Crsr$$,TtoFlg ; Cursor Off ?
|
||||
Beq 10$ ; No
|
||||
Return ; Yes, Exit
|
||||
10$: Jsr R0,SavRg ; Save Registers R0..R4
|
||||
Mov R5,-(SP) ; And R5
|
||||
Mov CrsAdr,-(SP) ; Get Cursor Address
|
||||
Call SetScS ; Map Screen...
|
||||
Mov Color,R5 ;
|
||||
Mov Bkgnd,R4 ;
|
||||
Xor R5,R4 ;Color Change Mask in R4
|
||||
Mov #9.,R5 ;Line Counter
|
||||
30$: MovB Shiftm,R3
|
||||
Mov CrsAdr,R2 ;Cursor Address
|
||||
50$: MovB @R2,R1
|
||||
Xor R4,R1
|
||||
MovB R1,(R2)+
|
||||
Sob R3,50$
|
||||
Call NxTVLn ;Go next TV line
|
||||
Sob R5,30$
|
||||
Call SetScX ;UnMap Screen, Map System Rom, Ram
|
||||
Mov (SP)+,CrsAdr
|
||||
Mov (SP)+,R5
|
||||
Jmp RetEmt ;Restore R0..R4 and Exit
|
||||
.SbTtl Screen Width Setting Routine
|
||||
.Psect $Code
|
||||
;
|
||||
;R0 Consists Width Code = 0 - 128, 1 - 256, 2 - 512, 3 - 256
|
||||
;
|
||||
SetWid::
|
||||
Call TstCrs
|
||||
Call SetSng
|
||||
Bic #D$Wid$!WdtMsk,TtoFlg
|
||||
Bic #^C3,R0
|
||||
CmpB R0,#3
|
||||
Bne 1$
|
||||
Clr R0
|
||||
1$: Mov R0,-(SP)
|
||||
Asl R0
|
||||
Add (SP)+,R0
|
||||
Asl R0
|
||||
Add #WdtTab,R0
|
||||
MovB Shifts,R1 ;0 - 512 1 - 256 2 - 128
|
||||
MovB (R0)+,Shifts
|
||||
MovB (R0)+,Shiftm
|
||||
BisB (R0)+,TtoFlg
|
||||
MovB (R0)+,StrLen
|
||||
MovB (R0)+,LenFnc
|
||||
MovB (R0)+,SpcFnc
|
||||
MovB Shifts,R0
|
||||
Sub R0,R1
|
||||
Beq 10$
|
||||
Bmi 20$
|
||||
11$: AslB CursX
|
||||
Sob R1,11$
|
||||
Br 10$
|
||||
20$: Neg R1
|
||||
21$: IncB CursX
|
||||
AsrB CursX
|
||||
Sob R1,21$
|
||||
10$: Clr BkGnd
|
||||
Mov #-1,Color
|
||||
Mov #SsFlg$,R0
|
||||
Xor R0,TtoFlg
|
||||
Call TstCrs
|
||||
Jmp $SetSS
|
||||
.Psect $Const
|
||||
SveAr: .Word SvBuf0,SvBuf1
|
||||
SclTb: .Word SclAd0,SclAd1
|
||||
SelTb: .Word 1*400,7*400
|
||||
;
|
||||
;Width Table
|
||||
; Shifts Shiftm Ttoflg StrLen
|
||||
WdtTab: .Byte 2, 4, 0, 16., 1, 0
|
||||
.Byte 1, 2, 1, 32., 2, 1
|
||||
.Byte 0, 1, 2, 64., 5, 1
|
||||
.Byte 1, 2, 1, 32., 2, 1
|
||||
.Even
|
||||
.Psect $CodOvr
|
||||
.SbTtl Single and Double Width Setting
|
||||
|
||||
SetDbl::Bit #WdtMsk,TtoFlg
|
||||
Beq 10$
|
||||
Bit #D$Wid$,TtoFlg
|
||||
Bne 10$
|
||||
Bis #D$Wid$,TtoFlg
|
||||
AsrB StrLen
|
||||
IncB Shifts
|
||||
AslB Shiftm
|
||||
IncB CursX
|
||||
AsrB CursX
|
||||
Cmpb CursX,StrLen
|
||||
Blo 10$
|
||||
Bit #AWrp$$,TtoFlg
|
||||
Beq 100$
|
||||
DecB CursX
|
||||
Br 10$
|
||||
100$: Jmp NAK ;New Line
|
||||
10$: Return
|
||||
SetSng::Bit #D$Wid$,TtoFlg
|
||||
Beq 10$
|
||||
Bic #D$Wid$,TtoFlg
|
||||
AslB CursX
|
||||
AslB StrLen
|
||||
DecB Shifts
|
||||
AsrB Shiftm
|
||||
10$: Return
|
||||
.SbTtl Special Line Processing
|
||||
.SbTtl Special Line ON/OFF Routine
|
||||
.Psect $Code
|
||||
$SETSS::Mov #SSFlg$,R0
|
||||
Xor R0,TtoFlg
|
||||
Bit R0,TtoFlg
|
||||
Beq 30$ ;Special Line ON
|
||||
;Special Line OFF
|
||||
Mov ScrBot,R0
|
||||
Add #9.*24.*100,R0 ;Screen Length
|
||||
Mov #256.-<9.*24.>,R1 ;Number of TV-lines
|
||||
Mov BkGnd,R2
|
||||
10$: Bis #100000,R0
|
||||
Bic #40000,R0 ;Begin of Line
|
||||
Mov #100/2,R3
|
||||
Call SetScS ;Map Screen
|
||||
20$: Mov R2,(R0)+
|
||||
Sob R3,20$
|
||||
Sob R1,10$
|
||||
Call SetScX ;Unmap Screen
|
||||
Mov #256.-<<256./9.>*9.>,SpcLng
|
||||
Mov #<256./9.>,MaxLin
|
||||
Mov #<<256./9.>*9.>*100,ScrLng
|
||||
Mov #40000/2,FfLng
|
||||
Mov #255.,RstrMx
|
||||
Return
|
||||
;Special Line ON
|
||||
30$: MovB CursY,R0
|
||||
Sub #24.,R0
|
||||
Bmi 50$ ;OK
|
||||
;Need to do Scrolling
|
||||
Mov R0,-(SP)
|
||||
40$: Call ScrlDw
|
||||
Dec @SP
|
||||
Bpl 40$
|
||||
Tst (SP)+
|
||||
MovB #23.,CursY
|
||||
Call Curadr
|
||||
50$: Call SetScS ;Map Screen
|
||||
Mov ScrBot,R0
|
||||
Add #9.*24.*100,R0 ;First Address
|
||||
Mov #256.-<9.*24.>,R3
|
||||
Mov Color,R1
|
||||
60$: Bic #40000,R0
|
||||
Bis #100000,R0
|
||||
Mov #100/2,R2
|
||||
70$: Mov R1,(R0)+ ;Horizontal Line
|
||||
Sob R2,70$
|
||||
Mov BkGnd,R1
|
||||
Sob R3,60$
|
||||
Mov #9.*24.*100,ScrLng
|
||||
Mov #24.,MaxLin
|
||||
Mov #256.-<9.*24.>,SpcLng
|
||||
Mov #<9.*24.*100>/2,FfLng
|
||||
Mov #9.*24.-1,RstrMx
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Call SetScX ;Unmap Screen
|
||||
Call KbdSS
|
||||
Return
|
||||
|
||||
.SbTtl Special Line Rus/Lat/Mix Output
|
||||
.Psect $CodOvr
|
||||
KbdSS::
|
||||
|
||||
Call LatSS ;Output Keyboard-oriented Words
|
||||
Call FncOut ;to Special Line
|
||||
BlrSS::
|
||||
Mov #BlrCns,R4
|
||||
Bit #Block$,TtoFlg
|
||||
Bne 10$
|
||||
Mov #Spaces,R4
|
||||
10$: MovB #-7,R1
|
||||
Br SSO2
|
||||
LATSS::
|
||||
Mov #RusCns,R4
|
||||
Bit #$Cyril,KbMode
|
||||
Bne 10$
|
||||
Mov #LatCns,R4
|
||||
10$: Mov #-3,R1 ;Coordinate
|
||||
SSO2: Mov #3,R2 ;Byte Counter
|
||||
Jmp StrSS ;String to SS
|
||||
.SbTtl Functional Key Special String Output
|
||||
FncOut::
|
||||
Mov #10.,R5 ;Key Counter
|
||||
Mov #FncTb,FncAd ;String Address Table
|
||||
Mov #400,R1 ;Coordinates
|
||||
10$: Mov @FncAd,R4 ;String Address
|
||||
Bne 20$
|
||||
Mov #Spaces,R4
|
||||
20$: MovB LenFnc,R2 ;Char. Number
|
||||
Call StrSS ;Output String
|
||||
MovB SpcFnc,R0
|
||||
Add R0,R1
|
||||
Add #2,FncAd
|
||||
Sob R5,10$
|
||||
Return
|
||||
|
||||
.SbTtl Output Symbol String to Special Line
|
||||
StrSS:
|
||||
Mov R5,-(SP)
|
||||
Mov TtoFlg,-(SP)
|
||||
Bit #D$Wid$,@SP
|
||||
Beq 5$
|
||||
AslB StrLen
|
||||
DecB Shifts
|
||||
AsrB Shiftm
|
||||
5$: Tst R1
|
||||
Bpl 6$
|
||||
MovB StrLen,R3
|
||||
Add R3,R1 ;Coordinate
|
||||
6$: Bic #<UndLn$$!InvCh$$!Lat$$!MixO$$!AscO$$!D$Wid$>,TtoFlg
|
||||
10$: MovB (R4)+,R0
|
||||
Bne 11$
|
||||
Dec R4
|
||||
MovB #40,R0
|
||||
11$: Call SsOutS ;Write Char
|
||||
Inc R1
|
||||
Sob R2,10$
|
||||
Bit #D$Wid$,@SP
|
||||
Beq 15$
|
||||
AsrB StrLen
|
||||
IncB Shifts
|
||||
AslB Shiftm
|
||||
15$: Mov (SP)+,TtoFlg
|
||||
Mov (SP)+,R5
|
||||
Return
|
||||
.Save
|
||||
.Psect $Const
|
||||
LatCns: .Ascii /Lat/
|
||||
RusCns: .Byte 'r+200,'U+200,'S+200
|
||||
BlrCns: .Ascii /Blk/
|
||||
Spaces: .AsciZ / /
|
||||
.Even
|
||||
.Restore
|
||||
.SbTtl Special Line Symbol Output
|
||||
SsOutS::
|
||||
;
|
||||
;At This Point R0 Contains Symbol Code
|
||||
;R1 Contains Coordinates: Y*400+X
|
||||
;Preserves Registers R0..R4
|
||||
;
|
||||
Bit #SsFlg$,TtoFlg ;Special Line On ?
|
||||
Bne 10$ ;No, Exit
|
||||
Jsr R0,SavRg ;Save R0..R4
|
||||
Mov CrsAdr,@#SSCad ;Save Cursor Coordinates
|
||||
Mov CursX,@#CrsSS ;
|
||||
Mov TtoFlg,@#SSTtFg
|
||||
Mov @#Vec4,@#SSVec4 ;Save Vec4
|
||||
Mov #5$,@#Vec4 ;and set new
|
||||
Bic #<Lat$$!MixO$$!AscO$$>,TtoFlg
|
||||
Bis #Block$,TtoFlg
|
||||
Mov R0,-(SP)
|
||||
Mov R1,CursX ;
|
||||
Call CurAdr ;Compute Address
|
||||
Add #<9.*24.*100>+100,CrsAdr ;
|
||||
Bis #100000,CrsAdr
|
||||
Bic #40000,CrsAdr
|
||||
Clr CursX ;To disable Wrapping
|
||||
Mov (SP)+,R0
|
||||
Call TtyPrg
|
||||
|
||||
Mov @#SSCad,CrsAdr ;Restore All
|
||||
Mov @#CrsSS,CursX ;
|
||||
Mov @#SSTtFg,TtoFlg ;
|
||||
Mov @#SSVec4,@#Vec4 ;
|
||||
Jmp RetEmt ;Restore Registers and Exit
|
||||
10$: Return
|
||||
5$: Mov @#SSCad,CrsAdr ;Trap to 4
|
||||
Mov @#CrsSS,CursX ;
|
||||
Mov @#SSTtFg,TtoFlg ;Restore All and Exit
|
||||
Mov @#SSVec4,@#Vec4 ;
|
||||
Jmp @Vec4 ;
|
||||
.Save
|
||||
.Psect $RAM
|
||||
SSCad: .BlkW
|
||||
CrsSS: .BlkW
|
||||
SSTtFg: .BlkW
|
||||
SSVec4: .BlkW
|
||||
.Restore
|
||||
|
||||
.SbTtl $Bbufset (EMT 74) Routine (Switch Screen Buffers)
|
||||
$Bbufset::
|
||||
Jsr R0,SavRg
|
||||
MovB R0,R3
|
||||
ClrB R0
|
||||
Swab R0 ;Upper Byte = Video Area
|
||||
MovB Screen,R4
|
||||
CmpB R3,R4 ;It's Current Screen ?
|
||||
Beq 5$ ;Yes, Not Modify
|
||||
CmpB R3,#1
|
||||
Bhi 5$ ;Too Big, Not Modify
|
||||
MovB R3,Screen
|
||||
Asl R3
|
||||
Asl R4
|
||||
Mov SclTb(R3),SclWri;Scroll Temp Memory Address
|
||||
Mov ScrSel,R5 ;
|
||||
Bic #7*400,R5 ;Clear Screen Page bits
|
||||
Bis SelTb(R3),R5 ;And Set New Value
|
||||
Mov R5,ScrSel
|
||||
Mov SveAr(R3),R3 ;Read Area Address
|
||||
Mov SveAr(R4),R4 ;Old Screen Save Area
|
||||
Mov #ScrAre,R1 ;Start of Work Area
|
||||
Mov #ScrCnt,R2 ;Area Length
|
||||
44$: Mov @R1,(R4)+ ;Save Old
|
||||
Mov (R3)+,(R1)+ ;Restore New
|
||||
Sob R2,44$
|
||||
Mov R0,-(SP)
|
||||
Call KbdSS
|
||||
Mov (SP)+,R0
|
||||
5$: Asl R0
|
||||
Cmp R0,#2
|
||||
Bhi 56$
|
||||
Beq 55$
|
||||
Bic #4,@#$$SysS
|
||||
Bic #4,@#$$UsrS
|
||||
Bic #4,ScrSel
|
||||
Br 57$
|
||||
55$: Bis #4,@#$$UsrS
|
||||
Bis #4,@#$$SysS
|
||||
Bis #4,ScrSel
|
||||
57$: Mov SclTb(R0),SclVid
|
||||
56$: Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Mov @SclVid,@#Scroll ;Set Real Scrolling Address
|
||||
Jmp RetEmt
|
||||
|
||||
SetScl: Bic #^C377,@SclWri
|
||||
Bis #1000,@SclWri
|
||||
Mov @SclVid,@#Scroll ;Set Real Scrolling Address
|
||||
Return
|
||||
.SbTtl Terminal Output Initialization Routine
|
||||
.Psect $Code
|
||||
TtoIni::
|
||||
Mov #ScrAre,R0 ;Write Address
|
||||
Mov #3,R3 ;Screen Counter
|
||||
2$: Mov #Scopy,R2 ;Read Address
|
||||
Mov #ScrCnt,R1 ;Word Counter
|
||||
1$: Mov (R2)+,(R0)+
|
||||
Sob R1,1$
|
||||
Sob R3,2$
|
||||
Clr Screen ;Current screen =0
|
||||
Mov #SclAd0,SclVid
|
||||
Mov #SclAd0,SclWri
|
||||
Mov #1330,SclAd0
|
||||
Mov #1330,SclAd1
|
||||
Mov #1330,@#Scroll
|
||||
Mov #<SysRam!400!WrEnS!Mot$$$>,ScrSel
|
||||
Mov #1,FlInit ;Enable SS Output
|
||||
Mov #1,R0
|
||||
Call $Bbufset ;Set Screen 1
|
||||
Call TtoIn1
|
||||
Clr R0
|
||||
Call $Bbufset ;Set Screen 0
|
||||
TtoIn1::
|
||||
Mov #0,TtoFlg
|
||||
ClrB Shifts
|
||||
Mov #1,R0
|
||||
Call SetWid ;Set Width, Special Line
|
||||
Call FF
|
||||
Jmp TstCrs
|
||||
.SbTtl Work Areas
|
||||
.Psect $RAM
|
||||
ScrSel::.BlkW
|
||||
FlInit::.Blkw
|
||||
|
||||
ScrAre::
|
||||
CursX:: .BlkB
|
||||
CursY:: .BlkB
|
||||
CrsAdr::.BlkW
|
||||
ScrBot::.BlkW
|
||||
Shifts::.BlkB
|
||||
Shiftm::.BlkB
|
||||
StrLen::.BlkB
|
||||
LenFnc::.BlkB
|
||||
SpcFnc::.BlkB
|
||||
.Even
|
||||
PrefiX::.BlkW
|
||||
TtoFlg::.BlkW
|
||||
ScrLng::.BlkW
|
||||
FfLng:: .BlkW
|
||||
MaxLin::.BlkW
|
||||
SpcLng::.BlkW
|
||||
AlpTab::.BlkW 2
|
||||
GrpTab::.BlkW 2
|
||||
Color:: .BlkW
|
||||
BkGnd:: .BlkW
|
||||
XCoord::.BlkW
|
||||
YCoord::.BlkW
|
||||
RstrMx::.BlkW
|
||||
ScrCnt==<.-ScrAre>/2
|
||||
|
||||
SvBuf0::.BlkW ScrCnt
|
||||
SvBuf1::.BlkW ScrCnt
|
||||
|
||||
FncAd:: .BlkW
|
||||
Screen::.BlkW
|
||||
SclVid::.BlkW
|
||||
SclWri::.BlkW
|
||||
SclAd0::.BlkW
|
||||
SclAd1::.BlkW
|
||||
.Psect $Const
|
||||
Scopy::
|
||||
.Byte 0 ;CursX
|
||||
.Byte 0 ;CursY
|
||||
.Word MemBeg ;CrsAdr
|
||||
.Word MemBeg ;ScrBot
|
||||
.Byte 1 ;Shifts
|
||||
.Byte 2 ;Shiftm
|
||||
.Byte 32. ;StrLen
|
||||
.Byte 2 ;LenFnc
|
||||
.Byte 1 ;StrFnc
|
||||
.Even
|
||||
.Word 0 ;Prefix
|
||||
.Word 0 ;TtoFlg
|
||||
.Word 9.*24.*100 ;ScrLng
|
||||
.Word <9.*24.*100>/2 ;FfLng
|
||||
.Word 24. ;MaxLin
|
||||
.Word 256.-<9.*24.> ;SpcLng
|
||||
.Word SysSel,SymTab ;AlpTab
|
||||
.Word SysSel,SymG00 ;GrpTab
|
||||
.Word 177777 ;Color
|
||||
.Word 0 ;BkGnd
|
||||
.Word 0,0 ;Xcoord,Ycoord
|
||||
.Word 24.*9.-1 ;RstrMx
|
||||
.Psect $CodOvr
|
||||
.SbTtl $BtvSet (EMT 64) Routine (Set TV-set Handler Mode)
|
||||
$BtvSet::
|
||||
Jsr R0,SavRg ;Save User's Registers
|
||||
Mov R0,R5 ;User Table Address
|
||||
Call GetUWd ;New User TtoFlg
|
||||
Mov TtoFlg,R2 ;Get old TtoFlg
|
||||
Mov R5,-(SP)
|
||||
Mov R0,-(SP) ;Temporary copy of R0
|
||||
Bic #<SSflg$!Crsr$$!D$Wid$!WdtMsk>,R0 ;Special bits are ignored
|
||||
Bic #^C<SSflg$!Crsr$$!D$Wid$!WdtMsk>,R2
|
||||
Bis R0,R2 ;Set Appropriate bits
|
||||
Mov R2,TtoFlg ;And REstore Ttoflg
|
||||
Mov @SP,R0
|
||||
Bic #^C<SSflg$!Crsr$$!D$Wid$!WdtMsk>,R0 ;Only Special Bits
|
||||
Mov R2,-(SP) ;Copy of TtoFlg
|
||||
Bic #^C<SSflg$!Crsr$$!D$Wid$!WdtMsk>,@SP ;Only Special Bits
|
||||
Xor R0,@SP ;Only Changed bits Are set
|
||||
Mov #Crsr$$,R0
|
||||
Bit R0,@SP ;Cursor state changed ?
|
||||
Beq 10$ ;No
|
||||
Call TstCrs ;Reset Cursor
|
||||
Xor R0,TtoFlg ;Change State
|
||||
Call TstCrs ;And set it Again
|
||||
10$: Bit #SSflg$,@SP
|
||||
Beq 20$
|
||||
Call $SETSS ;Change Special string State
|
||||
20$: Bit #WdtMsk,@SP
|
||||
Beq 30$
|
||||
MovB 2(SP),R0
|
||||
Bic #^C<WdtMsk>,R0
|
||||
Call Setwid ;Set Appropriate Width
|
||||
30$: Bit #D$Wid$,@SP
|
||||
Bne 50$
|
||||
Bit #D$Wid$,2(SP) ;New mode is set ?
|
||||
Bne 40$ ;Yes
|
||||
Call SetSng
|
||||
Br 50$
|
||||
40$: Call SetDbl
|
||||
50$: Cmp (SP)+,(SP)+
|
||||
Mov (SP)+,R5 ;Restore User TAble Pointer
|
||||
Call GetUwd
|
||||
Beq 60$
|
||||
Mov R0,AlpTab ;Alp. Table
|
||||
Call GetUwd
|
||||
Mov R0,AlpTab+2
|
||||
Br 70$
|
||||
60$: Mov #SysSel,AlpTab
|
||||
Mov #SymTab,AlpTab+2
|
||||
Call GetUwd
|
||||
70$: Call GetUwd
|
||||
Beq 80$
|
||||
Mov R0,GrpTab
|
||||
Call GetUwd
|
||||
Mov R0,GrpTab+2
|
||||
Br 90$
|
||||
80$: Mov #SysSel,GrpTab
|
||||
Mov #SymG00,GrpTab+2
|
||||
Call GetUwd
|
||||
90$: Call GetUbt
|
||||
TstB R0
|
||||
Bmi 100$
|
||||
Call Mult
|
||||
Mov R0,Color
|
||||
100$: Call GetUbt
|
||||
TstB R0
|
||||
Bmi 110$
|
||||
Call Mult
|
||||
Mov R0,BkGnd
|
||||
110$: ClC
|
||||
Jmp RetEmt
|
||||
.SbTtl $BtvGet (EMT 34) Routine (Get TV-set Handler Mode)
|
||||
$BtvGet::Jsr R0,SavRg
|
||||
Mov R0,R5 ;User TAble Adress
|
||||
Mov TtoFlg,R0
|
||||
Call PutUWd
|
||||
Mov AlpTab,R0
|
||||
Call PutUWd
|
||||
Mov AlpTab+2,R0
|
||||
Call PutUWd
|
||||
Mov GrpTab,R0
|
||||
Call PutUWd
|
||||
Mov GrpTab+2,R0
|
||||
Call PutUwd
|
||||
MovB BkGnd,R0
|
||||
Swab R0
|
||||
ClrB R0
|
||||
BisB Color,R0
|
||||
Call PutUwd
|
||||
ClC
|
||||
Jmp RetEmt
|
||||
.End
|
18
ROM sources/BK-0011 driver module/BMAP.MAC
Normal file
18
ROM sources/BK-0011 driver module/BMAP.MAC
Normal file
@ -0,0 +1,18 @@
|
||||
.IF EQ 0
|
||||
.Psect $Code I,RO
|
||||
.Psect $Const D,RO
|
||||
.Psect $CodOvr I,RO
|
||||
.Psect $CnsOvr D,RO
|
||||
.Psect $AdrTab D,RO
|
||||
.Psect $RAM D,RW
|
||||
.Psect $Stack D,RW
|
||||
.IFF
|
||||
.Psect $Stack D,RW
|
||||
.Psect $RAM D,RW
|
||||
.Psect $CodOvr I,RO
|
||||
.Psect $CnsOvr D,RO
|
||||
.Psect $Code I,RO
|
||||
.Psect $Const D,RO
|
||||
.Psect $AdrTab D,RO
|
||||
.ENDC
|
||||
.End
|
271
ROM sources/BK-0011 driver module/LINTAP.MAC
Normal file
271
ROM sources/BK-0011 driver module/LINTAP.MAC
Normal file
@ -0,0 +1,271 @@
|
||||
.Mcall .Module
|
||||
.Module LINTAP,Release=X02, Version=07, Comment=<BK0011 Line/Tape Handler>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
DlvCsr == 176560
|
||||
Namlng = 16.+2.
|
||||
.Globl UsrSav, BegAdr, Lngth, SavRg, RetEmt, OctTyp
|
||||
.Globl TtoFlg, Block$, SysFlg, $BPrint,$Bttyou,$BgtLin
|
||||
.Globl $BMtb10,ROMTab, RAM0Tb, RAM1Tb
|
||||
|
||||
.SbTtl Main Routine
|
||||
;
|
||||
; At this point R1 consists the type of operation:
|
||||
; =0 ==> Load;
|
||||
; =1 ==> Unload.
|
||||
;
|
||||
;BegAdr and Lngth words consist Start and End address of array
|
||||
;to be written. R0 Consists file Load Address (For Read) Or file Start
|
||||
;Address (For Write)
|
||||
;
|
||||
.Psect $CodOvr
|
||||
LinTap::Jsr R0,SavRg
|
||||
Mov R0,StAddr ;Start Or load Address
|
||||
.Bprint #Prmpt
|
||||
.BGtlin #Buffer,#NamLng ;Read file name
|
||||
TstB Buffer ;Tape or line
|
||||
Bne 10$
|
||||
Jmp Line ;Line Input
|
||||
10$: Mov #Buffer,R0
|
||||
MovB (R0)+,R2
|
||||
BicB #240,R2 ;Device Name
|
||||
CmpB (R0)+,#':
|
||||
Bne ErrNam ;Illegal Filename
|
||||
CmpB R2,#'B ;BK0010 Format ?
|
||||
Bne MsxTap ;No, MSX
|
||||
.SbTtl BK0010-Tape processing
|
||||
Tst R1 ;Read Or write ?
|
||||
Beq BkRead ;Read
|
||||
BkWrit: Mov #2,R5 ;Operation Code=Write (From Debug)
|
||||
Call Set10B ;Set Argument Block
|
||||
Call BkReq
|
||||
Bcc Ret ;OK
|
||||
Mov #UnlErr,R0
|
||||
ErRet: .BPrint
|
||||
Ret: Mov @#$$SysS,@#Sel1
|
||||
Tst @#Sel1
|
||||
Jmp RetEmt
|
||||
ErrNam: Mov #TypTxt,R0
|
||||
Br ErRet
|
||||
.SbTtl BK0010-Format Read or Dir Command
|
||||
BkRead: Mov #3,R5 ;Operation Code=Read
|
||||
Mov StAddr,BegAdr ;Start Or load Address
|
||||
CmpB @R0,#'?
|
||||
Beq DirBK ;Directory Operation
|
||||
TstB @R0 ;Next File ?
|
||||
Bne 5$ ;No, FileName Specified
|
||||
Mov #5,R5 ;Next File Read Operation
|
||||
5$: Call Set10B
|
||||
10$: Call BkReq
|
||||
Call PRiBK
|
||||
CmpB @#ErrByt,#1
|
||||
Beq 10$ ;Another FIle Name
|
||||
Br Ret
|
||||
DirBK: Mov #6,SysCom ;Dir Operation
|
||||
Call BkReq ;Read File
|
||||
Call PriBK
|
||||
CmpB @#ErrByt,#4 ;Manual Interrupt ?
|
||||
Bne DirBK
|
||||
Br Ret ;Yes, Exit
|
||||
|
||||
PriBK: Bcc 10$ ;Print File Params
|
||||
MovB @#ErrByt,R1 ;Error Code
|
||||
Asl R1
|
||||
.BPrint ErrBK-2(R1) ;Print Error Message
|
||||
CmpB @#ErrByt,#4
|
||||
Beq 30$
|
||||
Br 11$
|
||||
10$: CmpB SysCom,#6 ;Dir Function ?
|
||||
Beq 11$ ;Yes
|
||||
Mov ResSta,@#UserPC
|
||||
11$: .BPrint #Fname ;Filename:
|
||||
Mov #ResNam,R1
|
||||
Mov #16.,R2
|
||||
Mov TtoFlg,-(SP)
|
||||
Bis #Block$,TtoFlg
|
||||
20$: MovB (R1)+,R0
|
||||
.Bttyou ;Print File Name
|
||||
Sob R2,20$
|
||||
Mov (SP)+,TtoFlg
|
||||
.BPrint #MemTxt
|
||||
Mov ResStA,R0 ;Start Address
|
||||
ClC
|
||||
Call OctTyp
|
||||
.BPrint #TLngth
|
||||
Mov ResSta,R0
|
||||
Add ResLng,R0
|
||||
ClC
|
||||
Call OctTyp
|
||||
30$: .Bttyou #25
|
||||
Return
|
||||
MsxTap:
|
||||
;;;
|
||||
;;;
|
||||
;;;
|
||||
;;;Call @50
|
||||
;;;
|
||||
Jmp RET
|
||||
BkReq: Mov UsrSav,R5 ;User Sel1
|
||||
Bic #^C070000,R5 ;Only Page 40000-100000
|
||||
SwaB R5 ;Page ...
|
||||
Mov #RAM0Tb,R0
|
||||
10$: CmpB R5,(R0)+
|
||||
Bne 10$
|
||||
Sub #Ram0Tb+1,R0
|
||||
MovB R0,UsSel ;Lower Page
|
||||
Mov UsrSav,R5
|
||||
Bit #RomMsk,R5 ;It's ROM ?
|
||||
Bne 30$
|
||||
Bic #^C7*400,R5
|
||||
SwaB R5
|
||||
Mov #Ram1Tb,R0
|
||||
20$: CmpB R5,(R0)+
|
||||
Bne 20$
|
||||
Sub #Ram1Tb+1,R0
|
||||
MovB R0,UsSel+1
|
||||
Br 50$
|
||||
30$: Bic #^CRomMsk,R5
|
||||
Mov #RomTab,R0
|
||||
40$: CmpB R5,(R0)+
|
||||
Bne 40$
|
||||
Sub #RomTab+1-10,R0
|
||||
MovB R0,UsSel+1
|
||||
50$: Mov #SysCom,R0
|
||||
Call $BMtb10 ;Read File
|
||||
Return
|
||||
Line: Call TstLine
|
||||
Jmp RET
|
||||
|
||||
.SbTtl Special Routines
|
||||
|
||||
Set10B: Mov #SysCom,R1
|
||||
Mov R5,(R1)+ ;Command Code
|
||||
Mov BegAdr,(R1)+
|
||||
Mov Lngth,(R1)+
|
||||
Mov #16.,R2
|
||||
5$: MovB (R0)+,R4
|
||||
Beq 10$
|
||||
MovB R4,(R1)+
|
||||
Sob R2,5$
|
||||
Return
|
||||
10$: MovB #40,(R1)+
|
||||
Sob R2,10$
|
||||
Return
|
||||
|
||||
.SbTtl Line Type Detrmination
|
||||
|
||||
TstLine:Mov @#Vec4,-(SP)
|
||||
Mov #20$,@#Vec4
|
||||
Tst @#DlvCsr
|
||||
Mov (SP)+,@#Vec4
|
||||
Mov #DlvGet,@#GetAdr ;DLV is present
|
||||
Mov #DlvPut,@#PutAdr
|
||||
Mov #DlvClr,@#ClrAdr
|
||||
Br 10$
|
||||
20$: Cmp (SP)+,(SP)+ ;Trap to 4
|
||||
Mov (SP)+,@#Vec4 ;Restore vector
|
||||
Mov #PrtGet,@#GetAdr ;DLV is absent
|
||||
Mov #PrtPut,@#PutAdr
|
||||
Mov #PrtClr,@#ClrAdr
|
||||
10$: Return
|
||||
|
||||
.SbTtl DLV-11 Byte Get/Put and Clear Routines
|
||||
DlvGet: Tstb @#DlvCsr
|
||||
Bpl DlvGet
|
||||
MovB @#DlvCsr+2,R0
|
||||
Return
|
||||
DlvPut: Tstb @#DlvCsr+4
|
||||
Bpl DlvPut
|
||||
MovB R0,@#DlvCsr+6
|
||||
Return
|
||||
DlvClr: TstB @#DlvCsr+2
|
||||
Clr DlvCsr+6
|
||||
Return
|
||||
.SbTtl Port Byte Get/Put and Clear Routines
|
||||
PrtGet:
|
||||
10$: Tst @#Sel2 ;Wait for Ready
|
||||
Bmi 10$
|
||||
Movb @#Sel2,R0
|
||||
Comb R0
|
||||
Bic #^C377,R0
|
||||
Bis #40000,BufS2
|
||||
Mov BufS2,@#Sel2
|
||||
20$: Tst @#Sel2
|
||||
Bpl 20$
|
||||
Bic #40000,BufS2
|
||||
Mov BufS2,@#Sel2 ;Set Request
|
||||
Return
|
||||
|
||||
PrtPut: Comb R0
|
||||
MovB R0,BufS2
|
||||
10$: Bit #40000,@#Sel2 ;Wait for Request
|
||||
Bne 10$
|
||||
Bic #100000,BufS2
|
||||
Mov BufS2,@#Sel2
|
||||
20$: Bit #40000,BufS2
|
||||
Beq 20$
|
||||
Bis #100377,BufS2
|
||||
Mov BufS2,@#Sel2
|
||||
Comb R0 ;Restore original R0
|
||||
Return
|
||||
|
||||
PrtClr: Mov #137777,BufS2
|
||||
Mov BufS2,@#Sel2
|
||||
Return
|
||||
|
||||
|
||||
.Psect $CnsOvr
|
||||
ErrBK: .Word BKER1,BKER2,BKER3,BKER4
|
||||
BKER1: .Byte 0
|
||||
BKER2: .BYTE 25
|
||||
.AsciZ /CHECKSUM ERROR/
|
||||
BKER3: .BYTE 25
|
||||
.AsciZ /ILLEGAL PARAMETER VALUE/
|
||||
BKER4: .BYTE 25
|
||||
.AsciZ /MANUAL INTERRUPT OR TRAP TO 4/
|
||||
Prmpt: .Byte 25
|
||||
.Ascii / FILE NAME ? /<200>
|
||||
Fname: .Byte 25
|
||||
.Ascii /FILE: /<200>
|
||||
MemTxt: .Byte 25,40,200
|
||||
TLngth: .Ascii /- /<200>
|
||||
|
||||
|
||||
TYPTXT: .BYTE 25
|
||||
.AsciZ /ILLEGAL DEVICE NAME/
|
||||
UnlErr: .Byte 25
|
||||
.Ascii /WRITE ERROR/
|
||||
.Psect $RAM
|
||||
BufS2: .Word 0
|
||||
Buffer: .BlkB Namlng+1
|
||||
.Even
|
||||
GetAdr: .BlkW
|
||||
PutAdr: .BlkW
|
||||
ClrAdr: .BlkW
|
||||
StAddr: .BlkW
|
||||
SysCom: .BlkW ;Code
|
||||
.BlkW ;Address
|
||||
.BlkW ;Length
|
||||
.BlkB 16. ;Name
|
||||
UsSel:: .BlkW
|
||||
ResStA: .BlkW
|
||||
ResLng: .BlkW
|
||||
ResNAm: .BlkB 16. ;Resault Name
|
||||
.End
|
321
ROM sources/BK-0011 driver module/MEMEMT.MAC
Normal file
321
ROM sources/BK-0011 driver module/MEMEMT.MAC
Normal file
@ -0,0 +1,321 @@
|
||||
.Mcall .Module
|
||||
.Module MEMEMT, Release=X02, Version=09, Comment=<BK0011 Memory Management>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest Group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl O.Tr4U, TTOini, KBDini, RXini, MTini, ClrIni
|
||||
.Globl GetArg, Debug, RetEmt, $OffR0, EmtInt, FlInit
|
||||
.Globl EmtPri, IllBrk, PutUwd, USPSav, UPSSav, UPCSav
|
||||
.Globl SysErr, $UsrTrp,SavV4
|
||||
|
||||
U.Vec = 100
|
||||
U.Vec2 = 270
|
||||
EmtVec = 30
|
||||
.Psect $Code
|
||||
IniBK::
|
||||
MtPS #340
|
||||
Clr R1 ;Vector Area Pointer
|
||||
Mov (PC)+,(R1)+ ;Write "Exit" Sequence
|
||||
Clr R0
|
||||
Mov (PC)+,(R1)+ ;
|
||||
EMT 0
|
||||
Mov #<400-4>/4,R2
|
||||
10$: Mov #O.Tr4U,(R1)+ ;Set vectors 4-374
|
||||
Mov #2341,(R1)+
|
||||
Sob R2,10$
|
||||
Mov #4340,@#Vec4+2 ;"HALT" Vector
|
||||
Mov #EmtInt,@#EmtVec;"EMT" Vector
|
||||
Mov #4340,@#EmtVec+2;"EMT" Vector
|
||||
Mov #U.Vec+2,@#U.Vec;Disable User Interrupts
|
||||
Mov #Rti,@#U.Vec+2 ;
|
||||
Mov #U.Vec2+2,@#U.Vec2
|
||||
Mov #Rti,@#U.Vec2+2
|
||||
.SbTtl Check for ROMs Available
|
||||
Clr R0 ;All Pages Unavailable
|
||||
Mov #ROMTab,R1 ;
|
||||
Mov #40$,@#Vec4
|
||||
20$: MovB (R1)+,R2
|
||||
Beq 50$
|
||||
Bis #SysRam!WrEnS!Mot$$$,R2 ;Set Write Enable flag
|
||||
Mov R2,@#SEL1 ;Connect ROM
|
||||
Tst @#100000 ;Check ROM module
|
||||
BisB R2,R0 ;Set ROM Available Flag
|
||||
30$: Br 20$
|
||||
40$: Cmp (SP)+,(SP)+ ;Clear Stack
|
||||
Br 20$ ;And test the next ROM
|
||||
50$: MovB R0,MemFlg ;Save to Memory Pages Flag
|
||||
Mov #SysSel!Mot$$$,@#$$SysS
|
||||
Mov #SysSel!Mot$$$,@#$$UsrS
|
||||
|
||||
;
|
||||
;Attention !!!
|
||||
; $Binit routine must be at this point
|
||||
;
|
||||
.SbTtl $Binit (EMT 14) Routine (Computer Initialization)
|
||||
$Binit::Mov #SysSel!Mot$$$,R0 ;Set System Sel1
|
||||
Mov R0,@#$$SysS
|
||||
Mov R0,@#Sel1
|
||||
Clr $UsrTrp ;Reset User's Trap to 4
|
||||
Clr SysErr ;Reset Illegal EMT Processing
|
||||
Call ClrIni ;Color Control Unit Initialization
|
||||
Clr FlInit ;Set Flag for disabling special line
|
||||
Call KBDini ;Keyboard initialization
|
||||
Call TTOini ;TV-Set
|
||||
Call RXini ;Disk
|
||||
Call MTini ;Tape
|
||||
Clr @#SEL2 ;Port
|
||||
Return
|
||||
.SbTtl $Bsetpg (EMT 52) Routine (Connect Memory Page)
|
||||
$BsetPg::
|
||||
Mov R0,-(SP) ;Save R0
|
||||
MovB R0,R5 ;Get Lsb, Extend sign !!
|
||||
ClrB R0
|
||||
SwaB R0 ;Determine the Address Window
|
||||
Cmp R5,#77 ;System ROM Page ?
|
||||
Beq 50$ ;Yes, Connect System Rom
|
||||
Cmp R5,#177 ;System RAS Page ?
|
||||
Bne 5$ ;No
|
||||
Mov #7,R5
|
||||
Br 6$
|
||||
5$: Cmp R5,#13 ;Check Page Number
|
||||
Bhi Err0 ;Jump if illegal
|
||||
Cmp R5,#7 ;Is it RAM ?
|
||||
Bhi 30$ ;Jump if ROM
|
||||
Beq Err2 ;System Page, Error
|
||||
6$: TstB R0 ;Determine Address Region
|
||||
Beq 10$ ;Lower Region
|
||||
MovB RAM1Tb(R5),R5 ; Upper (100000-140000)
|
||||
Mov #7,R0 ;Bit Mask
|
||||
Bic #ROMMSK,@#$$UsrS;Reset ROM
|
||||
Br 20$
|
||||
10$: MovB RAM0Tb(R5),R5 ;40000-100000
|
||||
Mov #7*20,R0
|
||||
20$: BicB R0,@#$$UsrS+1 ;Modify User SEL1
|
||||
BisB R5,@#$$UsrS+1
|
||||
Br Nerr
|
||||
.SbTtl Rom Page Connecting
|
||||
30$: BitB RomTab-10(R5),MEMFLG
|
||||
Beq Err0
|
||||
40$: TstB R0
|
||||
Beq Err1
|
||||
MovB ROMTab-10(R5),R5
|
||||
Bic #^C<ROMMSK>,R5
|
||||
Bic #ROMMSK,@#$$UsrS
|
||||
Bis R5,@#$$UsrS
|
||||
Br Nerr
|
||||
50$: Mov #11,R5 ;System ROM Page No
|
||||
Br 40$
|
||||
Err0: ClrB @#ErrByt ;Illegal Page Number or Nonexisting
|
||||
Br Err
|
||||
Err1: MovB #1,@#ErrByt
|
||||
Br Err
|
||||
Err2: MovB #2,@#ErrByt
|
||||
Br Err
|
||||
Nerr: Tst (PC)+
|
||||
Err: SeC
|
||||
Mov (SP)+,R0
|
||||
Return
|
||||
.SbTtl $Btest (EMT 72) Routine (Get Memory page status)
|
||||
$Btest::
|
||||
Mov R1,-(SP)
|
||||
Mov R0,R5
|
||||
Clr R0
|
||||
Cmp R5,#7
|
||||
Bhi 60$ ;It's ROM
|
||||
Beq 50$ ;System RAM Page ==> 1
|
||||
10$: MovB @#$$UsrS+1,R1 ;User SEL1
|
||||
Bic #^C<7*20>,R1
|
||||
CmpB RAM0Tb(R5),R1
|
||||
Bne 20$ ;Not Conected
|
||||
Bis #1,R0 ;Connected to 40000
|
||||
20$: Bit #ROMMSK,@#$$UsrS ;ROM Connected ?
|
||||
Bne 40$ ;Yes, Exit
|
||||
MovB @#$$UsrS+1,R1 ;Test for 100000-140000
|
||||
Bic #^C7,R1
|
||||
CmpB RAM1Tb(R5),R1
|
||||
Bne 40$ ;Not Connected
|
||||
30$: Bis #2,R0 ;Connected to 100000
|
||||
40$: Mov (SP)+,R1
|
||||
Return
|
||||
50$: Bis #4,R0
|
||||
Br 40$
|
||||
.SbTtl Rom Connecting Checking
|
||||
60$:
|
||||
Cmp R5,#13 ;Check Page Number
|
||||
Bhi 50$ ;Illegal Page Number
|
||||
BitB RomTab-10(R5),MEMFLG
|
||||
Beq 50$ ;Non-existing
|
||||
BitB ROMTab-10(R5),@#$$UsrS
|
||||
Bne 40$
|
||||
Br 30$
|
||||
.SbTtl $Bjmp (EMT 56) Routine (Jmp to Memory Page)
|
||||
$BJmp::
|
||||
Jsr R0,GetArg ;Reorganize Stack
|
||||
Tst R1 ;Address
|
||||
Bpl 10$
|
||||
Add #400,R0 ;Inc MSB Of R0
|
||||
10$: Call $BSetPg ;Connect Memory Page
|
||||
Bcs ErrJmp ;Unable to Connect, Error
|
||||
Mov R1,UPCSav ;New PC=Address
|
||||
Jmp RetEmt
|
||||
|
||||
.SbTtl $Bjsr (EMT 54) Routine (Jsr PC to Memory Page)
|
||||
$BJsr::
|
||||
Mov @#$$UsrS,@#UsrBuf ;Save UsrS
|
||||
Jsr R0,GetArg ;Reorganize Stack
|
||||
Tst R1 ;Address
|
||||
Bpl 10$
|
||||
Add #400,R0
|
||||
10$: Call $BSetPg ;Test Memory Page
|
||||
Bcs ErrJmp ;Unable to Connect
|
||||
Mov (SP)+,R4 ;Restore
|
||||
Mov (SP)+,R3 ; R2 to
|
||||
Mov (SP)+,R2 ; R4
|
||||
; Mov @#UsrBuf,@#$$UsrS ;Old USER SEL1 ???
|
||||
Sub #5*2,@#USPSav
|
||||
Mov @#USPSav,R5 ;User Stack Pointer
|
||||
Mov R1, R0 ;User Addr
|
||||
Call PutUwd
|
||||
Mov @#UPSSav,R0 ;User PS
|
||||
Call PutUwd
|
||||
Mov #JsrRet, R0 ;RetAddr
|
||||
Call PutUwd
|
||||
Mov @#UPCSav,R0 ;Old PC
|
||||
Call PutUwd
|
||||
Mov @#UsrBuf,R0 ;Old $$USRS
|
||||
Call PutUwd
|
||||
;+
|
||||
; At This Point User's Stack is:
|
||||
;
|
||||
; Old Sel1
|
||||
; Old PC
|
||||
; JsrRet
|
||||
; Users PS
|
||||
; Routine Address
|
||||
;-
|
||||
Mov (SP)+,R1 ;From System Stack
|
||||
Mov (SP)+,R0
|
||||
Tst (SP)+ ;Emt Return
|
||||
Mov (SP)+,R5 ;
|
||||
Mov @#USPSav,SP ;Restore User SP
|
||||
Mov @#SavV4,@#Vec4 ;Vector 4
|
||||
Mov @#$$UsrS,@#Sel1 ;Set User's SEL
|
||||
Rti ;Go...
|
||||
;+
|
||||
; .BJsr Return Routine
|
||||
;Stack is:
|
||||
;
|
||||
; Old User Sel1 2
|
||||
; Old PC 0
|
||||
;
|
||||
JsrRet::
|
||||
MFPS -(SP) ;Save Status (User Stack)
|
||||
Bic #^C<ScrMsk!TapMsk>,@#$$UsrS
|
||||
Bic #TapMsk!ScrMsk,4(SP)
|
||||
Bis 4(SP),@#$$UsrS ;Restore User Sel1
|
||||
Mov @SP,4(SP) ;And Modify Stack (PS)
|
||||
Tst (SP)+ ;Stack is clean Now
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
Rtt ;And Return to User
|
||||
|
||||
.SbTtl Error in .Bjsr/.Bjmp
|
||||
|
||||
ErrJmp: Mov (SP)+,R4
|
||||
Mov (SP)+,R3
|
||||
Mov (SP)+,R2
|
||||
Mov (SP)+,R1
|
||||
Mov (SP)+,R0
|
||||
Tst (SP)+
|
||||
Mov #ErJmp,EmtPri
|
||||
Jmp IllBrk
|
||||
|
||||
.SbTtl $Bpeek (EMT 60) Routine (Get the Word from Memory Page)
|
||||
$Bpeek::
|
||||
Jsr R0,GetArg ;Reorganize Stack
|
||||
Bic #^C17,R0
|
||||
Bic #^C37777,R1 ;Address in Page
|
||||
CmpB R0,#SysPag
|
||||
Bne 10$
|
||||
Mov 40000(R1),R0 ;Read from system page
|
||||
Br 30$
|
||||
10$: Call PgSet ;Connect Page
|
||||
Bcs 40$
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
20$: Mov 100000(R1),R0 ;Get from window
|
||||
Mov @#$$SysS,@#Sel1
|
||||
Mov @#UsRBuf,@#$$UsrS
|
||||
30$: Mov R0,$OffR0(SP)
|
||||
40$: Jmp RetEmt
|
||||
|
||||
.SbTtl Internal Page Setting Routine
|
||||
PgSet:: Mov @#$$UsrS,@#UsRBuf
|
||||
Bis #400,R0
|
||||
Call $BSetPg
|
||||
Return
|
||||
|
||||
.SbTtl $BpokB (EMT 62) Routine (Put the Byte to Memory Page)
|
||||
$BpokB::
|
||||
Jsr R0,GetArg ;Reorganize Stack
|
||||
Bic #^C17,R0 ;Page No
|
||||
Bic #^C37777,R1 ;Address in Page
|
||||
CmpB R0,#SysPag ;System Page ?
|
||||
Bne 10$ ;No
|
||||
MovB $OffR0(SP),40000(R1);Yes, Write it into System Page
|
||||
Br PokE1
|
||||
10$: Call PgSet ;Connect Page
|
||||
Bcs PokE1
|
||||
Mov $OffR0(SP),R0
|
||||
Mov @#$$UsrS,@#Sel1
|
||||
MovB R0,100000(R1) ;Write Byte
|
||||
PokExi: Mov @#$$SysS,@#Sel1
|
||||
Mov @#UsRBuf,@#$$UsrS
|
||||
PokE1: Jmp RetEmt
|
||||
|
||||
.SbTtl $Bpoke (EMT 120) Routine (Put the Word to Memory Page)
|
||||
$Bpoke::
|
||||
Jsr R0,GetArg ;Reorganize Stack
|
||||
Bic #^C17,R0
|
||||
Bic #^C37777,R1 ;Address in Page
|
||||
CmpB R0,#SysPag
|
||||
Bne 10$
|
||||
Mov $OffR0(SP),40000(R1)
|
||||
Br PokE1
|
||||
10$: Call PgSet ;Connect Page
|
||||
Bcs PokE1
|
||||
Mov $OffR0(SP),R0
|
||||
Mov @#$$UsrS,Sel1
|
||||
Mov R0,100000(R1)
|
||||
Br PokExi
|
||||
.Psect $RAM
|
||||
MEMFLG:: .Byte 0 ;System Memory Available Flags
|
||||
.Even
|
||||
UsRBuf::.Word 0
|
||||
|
||||
.Psect $Const
|
||||
ROMTab::.Byte 1,2,10,20,0 ;ROM Connecting Table
|
||||
;
|
||||
; Pages 0 1 2 3 4 5 6 7
|
||||
;
|
||||
RAM0Tb::.Byte 6*20, 0, 2*20, 3*20, 4*20, 1*20, 7*20, 5*20
|
||||
RAM1Tb::.Byte 6, 0, 2, 3, 4, 1, 7, 5
|
||||
|
||||
ERJMP: .Byte 25
|
||||
.Ascii /ILLEGAL .BJMP OR .BJSR FROM PC = /<200>
|
||||
.Even
|
||||
.End
|
95
ROM sources/BK-0011 driver module/TTEMT.MAC
Normal file
95
ROM sources/BK-0011 driver module/TTEMT.MAC
Normal file
@ -0,0 +1,95 @@
|
||||
.Mcall .Module
|
||||
.Module TTEMT,Release=X02, Version=01, Comment=<BK0011 Terminal Emt Routines>
|
||||
;
|
||||
; Copyright (c) 1986,1987 by
|
||||
; C-11 Special Interest group, Leningrad State University.
|
||||
; All rights reserved.
|
||||
;
|
||||
; This software is furnished under a license and may be used and copied
|
||||
; only in accordance with the terms of such license and with the
|
||||
; inclusion of the above copyright notice. This software or any other
|
||||
; copies thereof may not be provided or otherwise made available to any
|
||||
; other person. No title to and ownership of the software is hereby
|
||||
; transfered.
|
||||
;
|
||||
; The information in this software is subject to change without notice
|
||||
; and should not be construed as a commitment by C-11 group.
|
||||
;
|
||||
; C-11 assumes no responsibility for the use or reliability of its
|
||||
; software on equipment which is not submitted by C-11.
|
||||
;
|
||||
.Include "BKHEAD"
|
||||
.Globl SavRg,RetEmt,TStCrs,GetUBt,StrLen,GetArg
|
||||
.Globl CursX,CursY,MaxLin,TtyPrg,CurAdr,SsOutS
|
||||
|
||||
.Psect $CodOvr
|
||||
.SbTtl $BTtyou (EMT 16) Routine (Type One Character)
|
||||
;
|
||||
; This routine outputs one symbol from R0 to TV-monitor screen
|
||||
; at the place determined by current cursor coordinates.
|
||||
; Cursor moved to the next position.
|
||||
;
|
||||
$Bttyou::
|
||||
Call TStCrs ;Reset Cursor If it need
|
||||
Call TtyPrg ;Call Output Routine
|
||||
Call TStCrs ;Set Cursor ON (If it need)
|
||||
ClC
|
||||
Return
|
||||
.SbTtl $Bprint (EMT 20) Routine (Type Character String)
|
||||
;
|
||||
;Input: R0=Character string Address.
|
||||
;
|
||||
;String must be folowwed by Zero or 200 byte.
|
||||
;The code of Zero causes <CR><LF> sequence to output after the last
|
||||
;byte.
|
||||
;The code of <200> causes terminating of typing characters without any
|
||||
;extra chars.
|
||||
;
|
||||
$Bprint::
|
||||
Jsr R0,SavRg ;Save R0..R4
|
||||
Mov R0,R5
|
||||
Call TStCrs ;Set Cursor Off
|
||||
2$: Call GetUBt ;Get Byte from User Space
|
||||
Beq 11$ ;It's 0
|
||||
CmpB R0,#200
|
||||
Beq Retpri ;Code is 200
|
||||
Mov R5,-(SP)
|
||||
Call TtyPrg ;Type character
|
||||
Mov (SP)+,R5
|
||||
Br 2$
|
||||
11$: Mov #25,R0
|
||||
Call TtyPrg ;issue <CR><LF> Routine
|
||||
Retpri: Call Curadr
|
||||
Call TStCrs ;Set Cursor ON
|
||||
ClC ;Clear Carry bit
|
||||
Jmp RetEmt ;Restore registers and exit
|
||||
.SbTtl $Bpos (EMT 26) Routine (Get Cursor Coordinates)
|
||||
$Bpos:: Mov @#CursX,R0 ;Get Cursor Coordinates
|
||||
Return ;And Exit
|
||||
|
||||
.SbTtl $Blocat (EMT 24) Routine (Set Cursor Coordinates)
|
||||
$Blocat::
|
||||
Jsr R0,SavRg
|
||||
Call TStCrs ;Set Cursor Off
|
||||
Mov R0,R5
|
||||
CmpB R0,StrLen ;Check Position
|
||||
Bhi 10$
|
||||
MovB R0,@#CursX ;Right...
|
||||
10$: SwaB R5
|
||||
CmpB R5,MaxLin ;Check Line No
|
||||
Bhis Retpri
|
||||
MovB R5,@#CursY
|
||||
Br Retpri
|
||||
.SbTtl $Bssout (EMT 22) Routine (Type at Special String)
|
||||
$Bssout::
|
||||
MaxSS = <256./9.-24.> ;Max Special Zone Line No
|
||||
Jsr R0,GetArg
|
||||
Cmp R1,#MaxSS*400 ;Check Y-Coordinate
|
||||
Bhis 10$ ;Is Illegal
|
||||
CmpB R1,StrLen
|
||||
Bhis 10$ ;Is Illegal
|
||||
Call SsOutS
|
||||
Tst (PC)+
|
||||
10$: Sec
|
||||
Jmp RetEmt
|
||||
.End
|
BIN
ROMs/b11m_bos.rom
Normal file
BIN
ROMs/b11m_bos.rom
Normal file
Binary file not shown.
BIN
ROMs/b11m_ext.rom
Normal file
BIN
ROMs/b11m_ext.rom
Normal file
Binary file not shown.
BIN
ROMs/b11m_mstd.rom
Normal file
BIN
ROMs/b11m_mstd.rom
Normal file
Binary file not shown.
BIN
ROMs/basic10_1.rom
Normal file
BIN
ROMs/basic10_1.rom
Normal file
Binary file not shown.
BIN
ROMs/basic10_2.rom
Normal file
BIN
ROMs/basic10_2.rom
Normal file
Binary file not shown.
BIN
ROMs/basic10_3.rom
Normal file
BIN
ROMs/basic10_3.rom
Normal file
Binary file not shown.
BIN
ROMs/basic11m_0.rom
Normal file
BIN
ROMs/basic11m_0.rom
Normal file
Binary file not shown.
BIN
ROMs/basic11m_1.rom
Normal file
BIN
ROMs/basic11m_1.rom
Normal file
Binary file not shown.
BIN
ROMs/disk_253.rom
Normal file
BIN
ROMs/disk_253.rom
Normal file
Binary file not shown.
BIN
ROMs/disk_326.rom
Normal file
BIN
ROMs/disk_326.rom
Normal file
Binary file not shown.
BIN
ROMs/disk_327.rom
Normal file
BIN
ROMs/disk_327.rom
Normal file
Binary file not shown.
BIN
ROMs/focal.rom
Normal file
BIN
ROMs/focal.rom
Normal file
Binary file not shown.
BIN
ROMs/monit10.rom
Normal file
BIN
ROMs/monit10.rom
Normal file
Binary file not shown.
BIN
ROMs/tests.rom
Normal file
BIN
ROMs/tests.rom
Normal file
Binary file not shown.
BIN
Subtitles/100000z5x.lst
Normal file
BIN
Subtitles/100000z5x.lst
Normal file
Binary file not shown.
BIN
Subtitles/disk_326.lst
Normal file
BIN
Subtitles/disk_326.lst
Normal file
Binary file not shown.
BIN
Tests/791323
Normal file
BIN
Tests/791323
Normal file
Binary file not shown.
BIN
Tests/791323.bin
Normal file
BIN
Tests/791323.bin
Normal file
Binary file not shown.
BIN
Tests/791401
Normal file
BIN
Tests/791401
Normal file
Binary file not shown.
BIN
Tests/791401.bin
Normal file
BIN
Tests/791401.bin
Normal file
Binary file not shown.
BIN
Tests/791404
Normal file
BIN
Tests/791404
Normal file
Binary file not shown.
BIN
Tests/791404.bin
Normal file
BIN
Tests/791404.bin
Normal file
Binary file not shown.
BIN
Tests/loadtest.bin
Normal file
BIN
Tests/loadtest.bin
Normal file
Binary file not shown.
31
Tests/loadtest.mac
Normal file
31
Tests/loadtest.mac
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
; Скопировать загрузчик 00200 байт с адреса 01000 на адрес 022000
|
||||
000000: 012700 MOV #022000, R0
|
||||
022000
|
||||
000004: 012701 MOV #001000, R1
|
||||
001000
|
||||
000010: 012702 MOV #000100, R2
|
||||
000100
|
||||
000014: 012120 MOV (R1)+, (R0)+
|
||||
077202 SOB R2, $-2
|
||||
|
||||
; Продолжаем работу загрузчика уже на адресах 022000+
|
||||
000020: 000137 JMP #022024
|
||||
022024
|
||||
|
||||
; Скопировать тест 020000 байт с адреса 02000 на адрес 000000
|
||||
000024: 005000 CLR R0 ; Этот код уже исполняется с адреса 022024
|
||||
012701 MOV #002000, R1
|
||||
000030: 002000
|
||||
012702 MOV #010000, R2
|
||||
000034: 010000
|
||||
012120 MOV (R1)+, (R0)+
|
||||
000040: 077202 SOB R2, $-2
|
||||
|
||||
; Очистить PSW и запустить тест с адреса 0200
|
||||
000042: 005000 CLR R0
|
||||
106400 MTPS R0
|
||||
000046: 000137 JMP #000200
|
||||
000200
|
||||
000052:
|
||||
;-- END
|
16
Tests/readme.txt
Normal file
16
Tests/readme.txt
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
791404 Тест прерываний
|
||||
791323 Тест памяти
|
||||
791401 Основной тест команд
|
||||
|
||||
|
||||
http://bk0010.org/forum/?id=3716&page=
|
||||
|
||||
? anonymous - 11.12.2009 23:39
|
||||
Первые два - из комплекта сдаточных тестов ВМ1, тест инструкций процессора и тест прерываний, третий - расширенный тест ОЗУ. Они обругают, если что-то не так съемулировано. Загружаются с адреса 0, диагностику выводят на учительскую машину через блок ИРПС. ИРПС эмулировать не сложно, там 4 регистра, перемычкой их адрес задается 0176560..0176567 для школьного бейсика и 0177560..0177567 для школьного фокала, последний вариант - стандартные адреса терминала в pdp11, на этих адресах и следует добавить эмуляцию с выводом в соседнее, например, окно, или в файл. В *560м регистре имеются два бита, 6й и 7й. 7 бит *560го регистра устанавливается, если во входной регистр *562 поступил новый байт, а если перед приемом байтов установить в 1 6й бит *560го регистра, то произойдет прерывание с вектором, адрес которого читается из регистра *566. *562й регистр - буфер приемника, оттуда считывается последний принятый байт, по записи регистр ничего не делает. В регистре *564 имеются тоже два бита, 6й и 7й, с тем же назначением, что и у приемника, 7й бит устанавливается в 0, когда процессор пишет байт в буфер передатчика, *566, и устанавливается в 1, когда заканчивается передача, т.е. когда буфер готов к приему следующего байта. Если при установке 7го бита был установлен 6й, то по готовности передатчика возникает прерывание с вектором, на 4 бОльшим, чем считываемое из регистра *566 значение. Регистр *566 - по записи - буфер передатчика, по чтению - регистр вектора прерывания, при установке адресов 0176560..0176567 вектор считывается 0360, приемник прерывает работу по 0360му вектору, а передатчик - по 0364му, при установке адресов 0177560..0177567 - адрес вектора 060 для приемника и 064 для передатчика.
|
||||
По команде процессора reset все биты в регистрах приемника обнуляются, а в регистре передатчика устанавливается бит 7 - готовности к передаче.
|
||||
? anonymous - 11.12.2009 23:44
|
||||
тесты (расширение .256 у них от программатора осталось, т.к. я их в пзу жег)
|
||||
http://qbus.narod.ru/791401.256
|
||||
http://qbus.narod.ru/791401.256
|
||||
http://qbus.narod.ru/791323.256
|
72
Tests/test791401.txt
Normal file
72
Tests/test791401.txt
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
|
||||
002550 000205 RTS R5
|
||||
000520 006402 MARK R2 ; Тестируемая команда; ИСПРАВЛЕНО
|
||||
002400 100003 BPL 002410
|
||||
002402 001002 BNE 002410
|
||||
002404 102001 BVC 002410
|
||||
002406 103404 BLO 002420
|
||||
002420 022705 CMP #000404, R5
|
||||
002424 001404 BEQ 002436 ; Тут идет неправильный переход
|
||||
002426 012743 MOV #000057, -(R3)
|
||||
002432 005243 INC -(R3)
|
||||
002434 000000 HALT
|
||||
|
||||
|
||||
|
||||
007042 012704 MOV #177777, R4
|
||||
007046 160304 SUB R3, R4
|
||||
007050 004737 JSR PC, @#017164
|
||||
|
||||
017164 100403 BMI 017174
|
||||
017166 001002 BNE 017174
|
||||
017170 102401 BVS 017174
|
||||
017172 103004 BHIS 017204
|
||||
017204 000207 RTS PC
|
||||
|
||||
007054 021527 CMP (R5), #000053
|
||||
007060 001032 BNE 007146 ; Тут OK
|
||||
|
||||
007062 005215 INC (R5) ; R5=000404 (R5)=000053
|
||||
007064 012701 MOV #177777, R1
|
||||
007070 005000 CLR R0
|
||||
007072 106400 MTPS R0 ; Тестируемая команда
|
||||
007074 004737 JSR PC, @#017062
|
||||
|
||||
017062 003402 BLE 017070
|
||||
017064 100401 BMI 017070
|
||||
017066 103004 BHIS 017100
|
||||
017100 000207 RTS PC
|
||||
|
||||
007100 106701 MFPS R1
|
||||
007102 001404 BEQ 007114 ; Тут идет неправильный переход; ИСПРАВЛЕНО
|
||||
007104 012745 MOV #000201, -(R5)
|
||||
007110 005245 INC -(R5)
|
||||
007112 000000 HALT
|
||||
|
||||
|
||||
|
||||
016736 000004 IOT
|
||||
|
||||
017020 132737 BITB #000040, @#000421
|
||||
017026 001012 BNE 017054
|
||||
017030 017603 MOV @000000(SP), R3
|
||||
017034 105713 TSTB (R3)
|
||||
017036 001406 BEQ 017054
|
||||
017040 105777 TSTB @000446
|
||||
017044 100375 BPL 017040
|
||||
017046 112377 MOVB (R3)+, @000450
|
||||
...
|
||||
017034 105713 TSTB (R3)
|
||||
017036 001406 BEQ 017054
|
||||
017040 105777 TSTB @000446
|
||||
017044 100375 BPL 017040
|
||||
017046 112377 MOVB (R3)+, @000450
|
||||
017052 000770 BR 017034
|
||||
017034 105713 TSTB (R3)
|
||||
017036 001406 BEQ 017054
|
||||
|
||||
017054 062716 ADD #000002, (SP)
|
||||
017060 000006 RTT
|
||||
000016 000000 HALT ; Неправильный переход; ИСПРАВЛЕНО
|
||||
|
128
Tests/test791404.txt
Normal file
128
Tests/test791404.txt
Normal file
@ -0,0 +1,128 @@
|
||||
|
||||
|
||||
010522 MOV #000500, SP ; R5=177777
|
||||
010526 MOV #010600, 000014 ; Вектор 14 PC = 010600
|
||||
010534 CLR #000016 ; Вектор 14 PSW = 000000
|
||||
010540 CLR #000022 ; Вектор 20 PSW = 000000
|
||||
010544 MOV #010616, 000020 ; Вектор 20 PC = 010616
|
||||
010552 MOV #000020, -(SP) ; PSW для возврата по RTT, бит T=1
|
||||
010556 MOV #010564, -(SP) ; PC для возврата по RTT
|
||||
010562 RTT ; PC := (SP)+; IF (PC>=1600008) THEN PSW[8:0] := (SP)+ ELSE PSW[7:0] := (SP)+
|
||||
|
||||
010564 IOT ; бит T=1; –(SP) := CPSW; –(SP) := CPC; PC := (20); PSW := (22)
|
||||
|
||||
010600 INC R5 ; R5=177777
|
||||
010602 BEQ 010522 ; Возврат к началу цикла
|
||||
|
||||
010522 MOV #000500, SP
|
||||
010526 MOV #010600, 000014
|
||||
010534 CLR #000000
|
||||
010540 CLR #000000
|
||||
010544 MOV #010616, 000020
|
||||
010552 MOV #000020, -(SP)
|
||||
010556 MOV #010564, -(SP)
|
||||
010562 RTT ; бит T=1;
|
||||
010564 IOT
|
||||
|
||||
010600 INC R5 ; R5=000000
|
||||
010602 BEQ 010522 ; Тут детектирована ошибка; ИСПРАВЛЕНО
|
||||
010604 MOV #000223, @#000402
|
||||
010612 INC (R2)
|
||||
010614 HALT
|
||||
|
||||
|
||||
|
||||
010750 MOV #000500, SP
|
||||
010754 MOV #000020, -(SP) ; PSW для возврата по RTI, бит T=1
|
||||
010760 MOV #010774, -(SP) ; PC для возврата по RTI
|
||||
010764 MOV #011010, 000014 ; Вектор 14 PC = 011010
|
||||
010772 RTI ; Проверяется, что RTI с битом T=1 приведет к прерыванию по вектору 14
|
||||
|
||||
011010 MOV #000016, 000014 ; Вектор 14 PC = 000016
|
||||
011016 CLR 000016 ; Вектор 14 PSW = 000000
|
||||
011022 INC @#000404
|
||||
011026 CMP #000063, @#000404
|
||||
011034 BNE 011150
|
||||
|
||||
011036 TSTB @#177564
|
||||
011042 BPL 011036 ; Ожидание установки бита 7 - готовности к передаче
|
||||
|
||||
011044 MOV #000500, SP
|
||||
011050 MOV #000340, 013076
|
||||
011056 MTPS 013076 ; 340 -> PSW -- разрешение прерываний
|
||||
011062 MOV #011132, 000064 ; Вектор 64 PC = 011132 - Адрес прерывания по завершению передачи байта (на ошибку 227)
|
||||
011070 MOV #000100, 177564 ; Установка флага прерываний по завершению передачи байта, готовность байта к передаче
|
||||
011076 MOV #011144, 000034 ; Вектор 34 PC = 011144 - Адрес прерывания TRAP (на ошибку 230)
|
||||
011104 MOV #011156, 000064 ; Вектор 64 PC = 011156 - Адрес прерывания по завершению передачи байта (на продолжение теста)
|
||||
011112 MOV #000340, 000036 ; Вектор 34 PSW = 340 \
|
||||
011120 CLR 013076 ; +- Окно в которое должно сработать прерывание
|
||||
011124 MTPS 013076 ; 0 -> PSW -- запрет прерываний /
|
||||
011130 TRAP 000000
|
||||
|
||||
011132 MOV #000227, @#000402
|
||||
011140 INC (R2)
|
||||
011142 HALT
|
||||
|
||||
011144 MOV #000230, @#000402
|
||||
011152 INC (R2)
|
||||
011154 HALT
|
||||
|
||||
011156 CLR 000036
|
||||
011162 INC @#000404
|
||||
011166 CMP #000064, @#000404
|
||||
011174 BNE 011316
|
||||
|
||||
011176 BIC #000100, 177564 ; Снятие флага прерываний по завершению передачи байта, готовность байта к передаче
|
||||
011204 MOV #000500, SP
|
||||
011210 MOV #000340, 013076
|
||||
011216 MTPS 013076 ; 340 -> PSW
|
||||
011222 MOV #000100, 177564 ; Установка флага прерываний по завершению передачи байта, готовность байта к передаче
|
||||
011230 MOV #011262, 000034 ; Вектор 34 PC = 011262 - Адрес прерывания TRAP (на IOT и ошибку 231)
|
||||
011236 MOV #011276, 000064 ; Вектор 64 PC = 011276 - Адрес прерывания по завершению передачи байта (на продолжение теста)
|
||||
011244 MOV #011264, 000020 ; Вектор 20 PC = 011264 - Адрес прерывания IOT (на ошибку 231)
|
||||
011252 MOV #000340, 000022 ; Вектор 20 PSW = 340
|
||||
011260 TRAP 000000
|
||||
011262 IOT
|
||||
|
||||
011264 MOV #000231, @#000402
|
||||
011272 INC (R2)
|
||||
|
||||
011276 CLR 000022
|
||||
011302 CLR 000066
|
||||
011306 MOV #000066, 000064
|
||||
011314 MOV #000036, 000034
|
||||
011322 MOV #000022, 000020
|
||||
011330 INC @#000404
|
||||
011334 CMP #000065, @#000404
|
||||
011342 BNE 011420
|
||||
011344 MTPS #000340
|
||||
011350 MOV #000100, 177564
|
||||
011356 MOV #000100, 177560
|
||||
011364 RESET
|
||||
011366 BIT #000100, 177564
|
||||
011374 BEQ 011410
|
||||
|
||||
011410 BIT #000100, 177560
|
||||
011416 BEQ 011432
|
||||
|
||||
011432 INC @#000404
|
||||
011436 CMP #000066, @#000404
|
||||
011444 BNE 011520
|
||||
|
||||
011446 MOV #000500, SP
|
||||
011452 MOV #011510, 000014 ; Вектор 14 PC = 011510 - Адрес прерывания по T-разряду
|
||||
011460 MOV #000020, -(SP) ; PSW на стек, бит T установлен
|
||||
011464 MOV #011472, -(SP) ; PC на стек
|
||||
011470 RTT
|
||||
011472 RESET ; !!! Сразу после этого 000066 HALT
|
||||
|
||||
011510 CLR 013076
|
||||
011514 MTPS 013076
|
||||
011520 MOV #000016, 000014
|
||||
011526 CLR 000016
|
||||
011532 INC @#000404
|
||||
011536 CMP #000067, @#000404
|
||||
011544 BNE 011722
|
||||
011546 RESET
|
||||
|
||||
|
2130
to-bk-1994-3.pdf
Normal file
2130
to-bk-1994-3.pdf
Normal file
File diff suppressed because it is too large
Load Diff
1597
to-bk-1994-4.pdf
Normal file
1597
to-bk-1994-4.pdf
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user