M2.0 - основной монитор на Орион-128
Установка основного монитора М2 в Орион, описание встроенных функций
Программа МОНИТОР[1] (назовем ее МОНИТОР-1) предназначена, практически, только для отладочных целей при построении компьютера, а также первых (ознакомительных) шагов в его освоении. Мы надеемся, что этот этап у читателя закончился благополучно и предлагаем теперь заменить программу МОНИТОР, записанную в ППЗУ (DD22) на основной МОНИТОР (МОНИТОР-2), коды которого приведены в табл.1, а контрольные суммы блоков - в табл.2. (Внимание данный дамп не проверен), проверенная прошивка ниже, ее можите скачать.
0000 C3 42 F8 C3 C6 F3 C3 CD F9 C3 CC F3 C3 53 FA C3 *.B...........S..* 0010 34 FC C3 78 FA C3 1C F9 C3 37 F9 C3 EE FA C3 63 *4..э.....7.....ж* 0020 F9 C3 C9 F3 C3 7F F9 C3 36 F9 C3 41 F9 C3 EF F8 *.......6..A....* 0030 C3 6E F9 C3 6B F9 C3 78 F9 C3 72 F9 C3 5C F9 C3 *.м..й..э..п..\..* 0040 C3 F3 31 C0 F3 AF D3 F8 D3 F9 D3 FA 32 D3 F3 32 *..1.........2..2* 0050 D4 F3 32 DE F3 3E C3 32 C6 F3 32 C9 F3 32 CC F3 *..2..>.2..2..2..* 0060 32 C3 F3 21 40 60 22 DA F3 CD C8 F8 31 C0 F3 3E *2..!@ч".....1..>* 0070 8A 32 03 F4 3E 55 32 E7 F3 21 6C F8 22 D8 F3 AF *.2..>U2..!к."...* 0080 32 E5 F3 67 6F 3E 90 32 03 F5 CD C1 F8 4F 23 CD *2..цн>.2.....O#.* 0090 C1 F8 B9 C2 AD F8 21 A6 F8 CD 37 F9 CD 84 FA CD *......!...7.....* 00A0 7F F9 C2 96 F8 E9 1F 77 77 6F 64 3F 00 21 FF 07 *......ббнд?.!..* 00B0 11 FF BF CD C1 F8 12 1B 2B 7C B7 F2 B3 F8 C3 FD *........+щ......* 00C0 BF 22 01 F5 3A 00 F5 C9 21 C0 30 22 CF F3 21 00 *."..:...!.0"..!.* 00D0 F0 22 D1 F3 21 37 FC 22 CD F3 22 E1 F3 21 36 F9 *."..!7.".."..!6.* 00E0 22 CA F3 21 84 FA 22 C7 F3 21 33 FE 22 C4 F3 11 *"..!.."..!3."...* 00F0 4A FE 2A D1 F3 0E 07 AF 77 23 1A 07 07 07 E6 07 *J.*.....б#......* 0100 47 1A E6 1F 77 23 0D 78 A7 CA 10 F9 05 C3 01 F9 *G...б#.э........* 0110 13 7A A7 C8 79 A7 C2 FA F8 C3 F5 F8 F5 0F 0F 0F *.г..ш...........* 0120 0F CD 25 F9 F1 E6 0F FE 0A FA 2E F9 C6 07 C6 30 *..%............0* 0130 C5 4F CD 09 F8 C1 C9 7E A7 C8 CD 30 F9 23 C3 37 *.O.....в...0.#.7* 0140 F9 01 00 00 79 86 4F F5 CD 56 F9 CA 76 FA F1 78 *....ш.O..V..ф..э* 0150 8E 47 23 C3 44 F9 7C BA C0 7D BB C9 7D 07 07 6F *.G#.D.щ..ы..ы..н* 0160 22 D6 F3 2A D6 F3 7D 0F 0F 6F C9 22 E3 F3 2A E3 *"..*..ы..н."..*.* 0170 F3 C9 D3 F9 71 C3 7B F9 D3 F9 4E AF D3 F9 C9 3E *....ъ.ь...N....>* 0180 FF CD B4 F9 22 EE F3 EB CD B2 F9 EB E5 CD CB F9 *...."...........* 0190 77 CD 56 F9 23 C2 8D F9 CD CB F9 CD B2 F9 CD B2 *б.V.#...........* 01A0 F9 44 4D E1 C5 CD 41 F9 D1 60 69 CD 56 F9 2A EE *.DM...A..чх.V.*.* 01B0 F3 C9 3E 08 CD CD F9 67 CD CB F9 6F C9 3A DA F3 *..>....ц...н.:..* 01C0 C3 C6 F9 3A DB F3 3D C2 C6 F9 C9 3E 08 C5 D5 E5 *...:..=....>....* 01D0 0E 00 57 CD 45 FA 5F 00 00 00 00 79 E6 7F 07 4F *..W.E._....ш..O* 01E0 00 06 00 05 C2 F3 F9 00 00 00 00 00 00 00 00 00 *................* 01F0 C3 4F FA CD 45 FA BB CA E3 F9 00 B1 4F CD C3 F9 *.O..E.......O...* 0200 CD 45 FA 5F B2 F2 39 FA 00 00 00 00 00 00 00 00 *.E._..9.........* 0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................* 0220 00 00 00 00 00 00 00 3E E6 91 CA 34 FA 3E 19 91 *.......>...4.>..* 0230 C2 DB F9 2F 32 DC F3 16 09 15 C2 DB F9 3A DC F3 *.../2........:..* 0240 A9 E1 D1 C1 C9 3A 02 F4 0F 0F 0F 0F E6 01 C9 2A *.....:.........** 0250 D8 F3 E9 F5 C5 06 08 00 00 00 00 00 79 07 4F 3E *............ш.O>* 0260 01 A9 32 02 F4 CD BD F9 3E 00 A9 32 02 F4 CD BD *..2.....>..2....* 0270 F9 05 C2 5C FA C1 F1 C9 AF 32 00 F4 3A 01 F4 3C *...\.....2..:..<* 0280 C8 3E FF C9 C5 D5 E5 CD EE FA FE FF C2 92 FA 32 *.>.............2* 0290 E6 F3 16 00 13 1D 1C CC 72 FD CD EE FA 3C CA 94 *........п....<..* 02A0 FA F5 7A 0F D4 72 FD F1 3D F2 CE FA 11 40 55 21 *..г..п..=....@U!* 02B0 E5 F3 7E 2F 77 32 02 F4 A7 7A CA BE FA 7B 32 E7 *..в/б2...г...ь2.* 02C0 F3 CD EE FA 3C C2 C1 FA CD 72 FD C3 92 FA 5F 16 *....<....п...._.* 02D0 14 21 E6 F3 BE CA E3 FA 15 CA E3 FA CD EE FA BB *.!..............* 02E0 CA D8 FA CD 3F F8 73 CD 72 FD 7B C3 00 FD C5 D5 *....?.я.п.ь.....* 02F0 E5 21 00 FD E5 06 00 16 09 0E FE 79 32 00 F4 07 *.!.........ш2...* 0300 4F 3A 01 F4 FE FF CA 1A FB 5F 21 00 06 2B 7C B5 *O:......._!..+щ.* 0310 C2 0D FB 3A 01 F4 BB CA 2D FB 78 C6 08 47 15 C2 *...:....-.э..G..* 0320 FB FA 3A 02 F4 E6 80 3E FE C8 3C C9 04 1F DA 2C *..:....>..<....,* 0330 FB 78 E6 3F FE 10 DA 97 FB FE 3F 47 3E 20 C8 3A *.э.?......?G> .:* 0340 02 F4 4F E6 40 C2 4C FB 78 E6 1F C9 3A E5 F3 A7 *..O.@.L.э...:...* 0350 C2 7B FB 79 E6 20 78 CA 67 FB FE 1C FA 73 FB FE *.ь.ш. э.ц....я..* 0360 20 FA 75 FB C3 73 FB FE 1C DA 75 FB FE 20 DA 73 * .с..я....с.. .я* 0370 FB C6 20 C6 10 C6 10 E1 C3 00 FD 79 E6 20 78 CA *.. ........ш. э.* 0380 8F FB FE 1C FA 73 FB FE 20 FA 75 FB C3 71 FB FE *.....я.. .с..ъ..* 0390 1C FA 75 FB C3 73 FB 21 A0 FB 4F 06 00 09 7E C9 *..с..я.!..O...в.* 03A0 0C 1F 1B 00 01 02 03 04 09 0A 0D 7F 08 19 18 1A *...............* 03B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 *..............@.* 03C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................* 03D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................* 03E0 00 00 00 00 00 00 00 80 00 80 00 00 00 00 00 80 *................* 03F0 00 40 00 40 00 00 00 00 00 00 00 40 00 40 00 00 *.@.@.......@.@..* 0400 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 00 *...........@....* 0410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................* 0420 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 *................* 0430 00 00 00 00 C5 4F 06 C5 D5 E5 F5 79 FE 1B 3E F0 *.....O.....ш..>.* 0440 CA 8A FD 3A DE F3 A7 C2 90 FD 79 FE 7F C2 5A FC *...:......ш..Z.* 0450 3A D3 F3 2F 32 D3 F3 C3 FF FC 26 20 94 DA A4 FC *:../2.....& ....* 0460 6F 29 29 29 EB 2A D1 F3 19 EB CD 44 FD EB 3E 16 *н))).*.....D..>.* 0470 F5 E5 3A D3 F3 AE E6 3F 6F 3A DD F3 3D 26 00 29 *..:....?н:..=&.)* 0480 29 3C C2 7F FC EB 78 AE A6 B2 77 24 79 AE A6 B3 *)<...э...б$ш...* 0490 77 25 2C EB E1 23 F1 D6 03 F2 70 FC 21 05 FD FE *б%,..#....о.!...* 04A0 F8 C2 70 FC 2A D6 F3 CD 04 FD 09 7C FE 19 DA FC *..о.*......щ....* 04B0 FC C2 FA FC 14 62 CA FC FC E5 21 00 00 39 22 DF *.....а....!..9".* 04C0 F3 3A D0 F3 47 3A CF F3 67 3A D4 F3 6F CD 6A FD *.:..G:..ц:..н.и.* 04D0 4F 79 C6 0A 6F F9 69 3E F0 D1 73 2C 72 2C D1 73 *Oш..н.х>..я,п,.я* 04E0 2C 72 2C BD D2 D9 FC 3A D3 F3 33 77 2C C2 EA FC *,п,....:..3б,...* 04F0 24 05 C2 D1 FC 2A DF F3 F9 E1 26 18 22 D6 F3 F1 *$....*....&."...* 0500 E1 D1 C1 C9 01 00 01 51 3C CC EC FD CA 3F FD FE *.......Q<....?..* 0510 EB C8 15 C6 05 C8 14 06 FF 3C C8 0E FC FE EF C8 *.........<......* 0520 01 00 00 FE F0 C2 2F FD 7D E6 E0 C6 20 6F C9 0E *....../.ы... н..* 0530 04 3C C8 FE EF CA 3F F8 C6 0B CA 40 FD 3C C0 62 *.<....?....@.<.а* 0540 6A 42 4A C9 2A D6 F3 7D 0F 6F 0F 85 47 6C 3A CF *иBJ.*..ы.н..Gк:.* 0550 F3 67 78 25 24 D6 04 D2 54 FD 32 DD F3 E5 21 FC *.цэ%$...T.2...!.* 0560 00 29 29 3C C2 61 FD 44 4D E1 7D 07 07 07 85 85 *.))<.ю.DM.ы.....* 0570 6F C9 CD 44 FD C6 09 6F 78 AE 77 24 79 AE 77 25 *н..D...нэ.б$ш.б%* 0580 C9 79 FE 59 C2 9E FD 3E 02 B0 32 DE F3 C3 FF FC *.ш.Y...>..2.....* 0590 47 E6 03 CA 81 FD 3D CA D3 FD 3D CA E1 FD AF 32 *G.....=...=....2* 05A0 DE F3 79 FE 4A CA F6 FD FE 4B CA 1E FE 21 4A FC *..ш.J....K...!J.* 05B0 E5 0E 18 FE 43 C8 0C FE 41 C8 0C FE 42 C8 0E 08 *....C...A...B...* 05C0 FE 44 C8 0E 0C FE 48 C8 0E 1F FE 45 C8 B9 C8 E1 *.D....H....E....* 05D0 C3 FF FC 79 D6 20 07 07 E6 FC 32 D6 F3 AF C3 8A *...ш. ....2.....* 05E0 FD 79 D6 20 32 D7 F3 3E F1 C3 8A FD C5 D5 E5 F5 *.ш. 2..>........* 05F0 3A D4 F3 C3 FA FD 3A D7 F3 3C FE 19 D2 FF FC 6F *:.....:..<.....н* 0600 CD 6A FD 4F 3A CF F3 67 3A D0 F3 47 25 24 69 3A *.и.O:..ц:..G%$х:* 0610 D3 F3 77 2C C2 12 FE 05 C2 0D FE C3 FF FC 2A D6 *..б,..........*.* 0620 F3 E5 45 0E 20 CD 37 FC 3E 04 80 47 C2 25 FE E1 *..E. .7.>..G.%..* 0630 C3 FC FC 0E 15 3A E7 F3 FB 3D C2 38 FE 3A E7 F3 *.....:...=.8.:..* 0640 F3 3D C2 40 FE 0D C2 35 FE C9 C0 84 00 04 4A 60 *.=.@...5......Jч* 0650 2A 1F 0A 1F 2A 11 0E 51 0E 11 18 19 02 04 08 13 **...*..Q........* 0660 03 04 2A 0C 15 12 0D 26 02 04 40 02 04 48 04 02 *..*....&..@..H..* 0670 08 04 42 04 08 00 04 15 0E 15 04 00 00 24 1F 24 *..B..........$.$* 0680 00 40 2C 04 08 40 1F 40 80 2C 00 01 02 04 08 10 *.@,..@.@.,......* 0690 00 0E 11 13 15 19 11 0E 04 0C 64 0E 0E 11 01 06 *..........д.....* 06A0 08 10 1F 1F 01 02 06 01 11 0E 02 06 0A 12 1F 22 *..............."* 06B0 1F 10 1E 21 11 0E 07 08 10 1E 31 0E 1F 01 02 04 *...!......1.....* 06C0 48 0E 31 0E 31 0E 0E 31 0F 01 02 1C 00 2C 20 2C *H.1.1..1....., ,* 06D0 2C 00 2C 04 08 02 04 08 10 08 04 02 20 1F 00 1F *,.,......... ...* 06E0 20 08 04 02 01 02 04 08 0E 11 01 02 04 00 04 0E * ...............* 06F0 11 13 15 17 10 0E 04 0A 31 1F 31 1E 31 1E 31 1E *........1.1.1.1.* 0700 0E 11 50 11 0E 1E 89 1E 1F 30 1E 30 1F 1F 30 1E *..P......0.0..0.* 0710 50 0E 11 30 13 11 0F 51 1F 51 0E 84 0E 61 31 0E *P..0...Q.Q...ю1.* 0720 11 12 14 18 14 12 11 90 11 1F 11 1B 35 51 31 19 *............5Q1.* 0730 15 13 31 0E 91 0E 1E 31 1E 50 0E 51 15 12 0D 1E *..1....1.P.Q....* 0740 31 1E 14 12 11 0E 11 10 0E 01 11 0E 1F A4 B1 0E *1...............* 0750 51 2A 24 51 55 0A 31 0A 04 0A 31 31 0A 64 1F 01 *Q*$QU.1...11.д..* 0760 02 0E 08 10 1F 0E 88 0E 00 10 08 04 02 01 00 0E *................* 0770 82 0E 0E 11 80 A0 1F 12 35 1D 35 12 04 0A 31 1F *........5.5...1.* 0780 31 1F 30 1E 31 1E 92 1F 01 06 6A 1F 11 1F 30 1E *1.0.1.....и...0.* 0790 30 1F 04 1F 35 1F 24 1F 11 90 31 0A 04 0A 31 31 *0...5.$...1...11* 07A0 13 15 19 31 15 11 13 15 19 31 11 12 14 18 14 12 *...1.....1......* 07B0 11 07 89 19 11 1B 35 51 51 1F 51 0E 91 0E 1F B1 *......5QQ.Q.....* 07C0 0F 31 0F 05 09 11 1E 31 1E 50 0E 11 50 11 0E 1F *.1.....1.P..P...* 07D0 A4 51 0A 04 08 10 11 35 0E 35 11 1E 31 1E 31 1E *.Q.....5.5..1.1.* 07E0 50 1E 31 1E 51 19 35 19 0E 11 01 06 01 11 0E 11 *P.1.Q.5.........* 07F0 95 1F 0E 11 01 07 01 11 0E 95 1F 01 51 1F 41 52 *............Q.AR*
Скачать прошивку можно здесь...
Таблица 2.
0000 - 00FF E853
0100 - 01FF C72E
0200 - 02FF 48CF
0300 - 03FF FB9B
0400 - 04FF 1A93
0500 - 05FF 0885
0600 - 06FF D9BE
0700 - 07FF C6F3
Необходимость такого "ступенчатого" освоения компьютера продиктована
тем, что МОНИТОР-2 не имеет в своем составе никаких средств, позволяющих
хотя бы приблизительно определить неисправность компьютера. На начальном
этапе отладки и освоения компьютера действительно были необходимы такие
операции, как просмотр и модификация ячеек памяти, возможность ручного
переключения экранных режимов дисплея, проверка правильного
функционирования клавиатуры, проверка канала чтения/записи на
магнитофон. Именно для этих целей и был разработан МОНИТОР-1, хотя с
самого начала подразумевалось, что диалог пользователь-компьютер должен
осуществлять не МОНИТОР, а операционная система (ОС). МОНИТОР же при
этом должен представлять собой набор драйверов, обслуживающих аппаратную
часть и иметь загрузчик первоначального ("холодного") запуска
операционной системы при включении компьютера. Естественно, что
совмещение в одном двухкилобайтном ППЗУ функций управления и набора
системных драйверов (и к тому же еще знакогенератора) невозможно без
значительного упрощения "МОНИТОРА".
Теперь же наступило время разделить эти функции так, как это делается в
большинстве современных систем: основное ППЗУ будет выполнять функции
мощного драйвера аппаратных средств, а диалог с пользователем станет
поддерживать операционная система. На низовом уровне это ОС
ORDOS. Она
предназначена как для профессионалов, так и для начинающих пользователей
- тех, кто только входит в мир операционных систем. Для запуска ОР
ДОС необходим РОМ ДИСК.
В среде ORDOS возможно решение широкого круга прикладных задач в без
дисковом варианте ПРК "Орион-128".
На более высоком уровне - ОС
СР/М-80. Эта операционная система может
быть адаптирована в двух вариантах: с использованием в качестве внешней
памяти внутреннего квазидиска (второй страницы памяти) или накопителя на
гибких магнитных дисках, правда, во втором случае необходимо еще
дополнительное устройство - плата контроллера дисковода.
Во всех случаях при работе с ОС (независимо от уровня) "МОНИТОР" должен
выполнять роль (или же дополнять) BIOS (базовая система ввода-вывода), а
также содержать первоначальный ("холодный") загрузчик операционной
системы или другой программы, поддерживающей диалог с пользователем.
МОНИТОР-2 занимает в ПЗУ 2 Кбайта и устанавливается в ПРК вместо
МОНИТОРА-1. При включении компьютера или нажатии кнопки "СБРОС"
МОНИТОР-2 производит инициализацию портов, служебных ячеек, распаковку
знакогенератора и другие служебные операции, а затем проверяет,
подключен ли ROM-диск к порту 0F500H (ХЗ). Если он не подключен, то
экран дисплея очищается и в его верхнем левом углу выводится сообщение -
"ввод?", свидетельствующее о том, что МОНИТОР-2 готов к вводу программы
с магнитной ленты.
Считанная информация размещается по адресам, записанным
на магнитной ленте. Если контрольная сумма совпадает, то управление
передается в начальный адрес считанной программы, т. е. производится ее
самозапуск. При обнаружении ошибки считывания - сообщение "ввод?"
выводится повторно: - МОНИТОР готов к повторному вводу.
На программном уровне МОНИТОР-2 полностью совместим (снизу вверх) с
программой МОНИТОР-1, т. е. все программы, рассчитанные на работу с
МОНИТОРОМ-1, будут работать и с МОНИТОРОМ-2, но не наоборот. Разумеется,
это справедливо только в том случае, если программы пользователя
обращаются корректно к стандартным подпрограммам через таблицу,
расположенную в начальных адресах монитора, а также используют служебные
ячейки) объявленные авторами в [1]. Добавим, что программы, которые мы
предполагаем публиковать впредь будут, в основном, работать при наличии
МОНИТОРА-2. Это вызвано тем, что МОНИТОР-1 (из-за упрощений) не может
обеспечить их функционирование. О том, что программа может работать
только с одним монитором, мы будем предупреждать читателя.
Таблица входов в стандартные подпрограммы нового МОНИТОРА почти
полностью совпадает с той, что приведена в [1], поэтому нет
необходимости приводить ее полностью. Расскажем только о дополнениях и
изменениях.
Так как загрузчики ОС содержат свои необходимые драйверы для записи
файлов на магнитную ленту, из таблицы исключена функция по адресу 0F827H
- "запись файла (массива) на магнитофон" и вход заблокирован командой
RET.
Вход 0F821H (ранее не использовался) определен как универсальный,
программно переключаемый вход в программы-драйверы пользователя. В
исходном состоянии заблокирован командой RET. Использовать этот вход
можно для работы с драйвером печатающего устройства, однако этим его
применение не ограничивается. В дальнейшем мы расскажем, как
пользоваться переключаемыми входами.
Дополнительно появился новый вход: 0F83FH - подпрограмма генерирования
звукового сигнала. Эта подпрограмма не имеет входных параметров и
формирует звуковой сигнал постоянной длительности. "Высоту" сигнала
можно изменять, если его значение записывать в служебную ячейку по
адресу 0F3E7H.
Особенностью построения таблицы МОНИТОРА-2 является возможность подмены
некоторых внутренних драйверов периферийных устройств внешними. Такое
переключение можно производить с помощью программных переключателей. Для
переключения доступны драйверы клавиатуры (OF803H), дисплея (OF809H),
формирователя звукового сигнала (0F83FH) и универсальный вход в
программы-драйверы пользователя (0F821H).
Пользователь может написать свой драйвер для обслуживания выше
перечисленных устройств и переключить на пего управление, при этом вход
в программу будет оставаться прежним, стандартным. Такое переключение на
"подставной" драйвер осуществляется занесением адреса входа нового
драйвера в специальную ячейку-ключ. Адреса ячеек-ключей для выше
означенных драйверов следующие:
клавиатура - 0F3C7-0F3C8H,
дисплей - 0F3CD-0F3CEH,
формирователь звукового сигнала - 0F3C4-0F3C5H,
универсальный вход - 0F3CA-0F3CBH.
Приведем примеры. Допустим, вы написали свой драйвер дисплея, который
выполняет другие функции, чем имеющиеся в МОНИТОРЕ-2. Желательно такой
драйвер (как и все сменные драйверы) разместить в области 0А800Н -
0AFFFH. Это исключит возможные конфликты с загружаемыми командами
операционной системой. Чтобы к этому драйверу можно было обращаться из
программ пользователя по стандартному адресу - 0F809H, необходимо адрес
входа в ваш драйвер занести в ячейки 0F3CD-0F3CEH. Естественно, теперь
по адресу 0F809H внутренний драйвер монитора уже будет недоступен,
поэтому для такой ситуации имеется второй вход в драйвер дисплея
монитора - 0F80FH (напомним, выводимый символ находится в регистре "А").
Такой подход позволяет работать одновременно с двумя драйверами дисплея.
Подобным образом можно поступить и с драйвером клавиатуры, подменив его,
например, программой, обслуживающей джойстик и формирующей коды
управления курсором. Это позволит игровые программы, работающие с
клавиатурой, перевести на управление джойстиком, не меняя ничего в самой
программе игры. Адрес входа в драйвер джойстика необходимо занести в
ячейки 0F3CA- 0F3CBH.
Относительно третьего драйвера мы ограничимся лишь замечанием, оставив
придумывать варианты читателю. Внутренний драйвер формирования звука
очень упрощен и рассчитан на обслуживание клавиатуры. Формировать с его
помощью серьезные фонограммы нельзя, поэтому и предусмотрена возможность
его подмены.
Что касается универсального входа в программы-драйверы пользователя, то
он не имеет специального определения в назначении и используется для
служебных целей в программах, где необходимо через один вход
(стандартный) обращаться к своим подпрограммам-драйверам. Переключение
производится через ячейку-ключ. Возможен, например, такой вариант: вы
написали драйвер вывода символа (или строки символов) на печатающее
устройство, которым располагаете. Нет необходимости этот драйвер
"прицеплять" к каждой прикладной программе, в том числе и к БЕЙСИКУ,
РЕДАКТОРУ, АССЕМБЛЕРУ и другим программам. Достаточно разместить его в
свободной области памяти (желательно 0А800- 0AFFFH) и через ячейку-ключ
переключить на него управление. Теперь все программы будут обращаться к
драйверу печати по одному адресу - 0F821H. Такой подход позволяет не
специализировать прикладные программы под один тип принтера.
Вернемся к драйверу дисплея. Его функциональные возможности значительно
расширены. Мы уже говорили о том, что драйвер дисплея игнорирует символы
с кодами 00-1FH, вернее интерпретирует их как пробел. Исключение
составляют коды управления работой дисплея:
08Н - перемещение курсора на одну позицию влево.
09Н - горизонтальная табуляция. Установка курсора в ближайшую позицию в
строке, кратную четырем.
0АН - перемещение курсора вниз на одну строку в той же позиции. Если
такой переход происходит в самой нижней строке, то включается режим
"Скроллинг" (смещение всего изображения экрана на одну строку вверх).
0СН - установка курсора в левый верхний угол экрана.
0DH - установка курсора в первую позицию строки.
18Н-перемещение курсора на одну позицию вправо.
19Н - перемещение курсора на одну позицию вверх.
1АН - перемещение курсора на одну позицию вниз.
1FH - стирание экрана, курсор установить в верхний левый угол.
7FH - переключение вывода символов на экран дисплея в инверсном виде
(белый фон, черные символы). Выключение - повторный ввод кода 7FH.
МОНИТОР-2 имеет расширенный набор функций, вызываемых с помощью
управляющего кода 1ВН (АР2). В программе МОНИТОР-1 эти функции
отсутствуют:
1ВН+41Н - сместить курсор на одну позицию вверх.
1ВН+42Н - сместить курсор на одну позицию вниз.
1ВН+43Н - сместить курсор на одну позицию вправо.
1ВН+44Н - сместить курсор на одну позицию влево.
1ВН+45Н - стирание экрана.
1ВН+48Н - установить курсор в верхний левый угол.
1BH+4AH - стирание экрана нг, с курсора.
1ВН+4ВН - стирание строки правее курсора.
1BH+59H+(X+20H)+(Y+20H) - установить курсор в позицию Х (номер строки -
0-19Н), Y (номер позиции - 0-3FH).
Драйвер дисплея использует несколько установочных констант, которые
хранятся в области служебных ячеек и поэтому доступных для оперативного
изменения.
0F3CFH - старший байт адреса начала строки. При инициализации МОНИТОР
заносит значение 0С0Н (0С000Н - начальный адрес области ОЗУ экрана №1 ).
Если записывать промежуточные значения (0С0-0Е0Н), то будет происходить
смещение начала строки вправо. Для включения экранов №2, №3 и №4 заносят
(помимо соответствующего кода в системный порт №3) соответственно коды
80Н, 40Н, 00Н. Данная константа влияет на начальную позицию первого
символа в строке.
0F3D0H - ширина поля, в котором производятся операции "Скроллинг" и
гашение экрана. Исходное значение З0Н, т. е. 48 байт в строке (не
символов). Программно сдвигая экран вправо, необходимо пропорционально
укорачивать эту константу, в противном случае функции гашение экрана и
"Скроллинг" будут "влезать" в служебную область МОНИТОРА (для экрана №1)
- поле знакогенератора. На длину символьной строки данная константа не
влияет.
0F3D4H - номер строки, с которой действуют функции стирания экрана, а
также "Скроллинг". Отсчет ведется от верхней строки. Если в ячейку
занести код 05Н, к примеру, то верхние пять строк не будут стираться по
коду 1FH (или 1ВН+45Н) и не попадут под действие режима "Скроллинг". Для
возврата в исходное состояние, необходимо восстановить начальное
значение констант.
Оперируя этими константами, можно оперативно защитить часть экрана от
стирания и "Скроллинга", т. е. без дополнительных программных средств
имитировать "окно". Однако следует помнить, что изменение констант, а
также переключение экранов требуют аккуратного и продуманного порядка
действий. Драйвер дисплея не имеет "защиты от дурака", и установка
констант, при которых "окно" выйдет за границы дисплейной области ОЗУ,
скорее всего приведет к выходу программы из-под контроля.
В заключение следует сказать, что в программе МОНИТОР-2 есть "пустые"
места. Это сделано не случайно. Авторы предусмотрели возможность
модификации МОНИТОРА под другие типы клавиатур, расширению
функциональных возможностей драйвера ввода с магнитофона.
В. СУГОНЯКО, В. САФРОНОВ Московская обл.
ЛИТЕРАТУРА
Сугоняко, В. Сафронов, К. Коненков. Персональный радиолюбительский
компьютер "Орион-128". Программное обеспечение. -
Радио, 1990, № 2, с.
46.
На предыдущую страницу На главную страницу На следующую страницу