barsik wrote:Большинство из ваших планов улучшения ПЗУ я не понял, но не волнует.
- Директива «G» позволяет запустить основную и вспомогательную программы. В таком случае, тот же опрос клавиатуры активирует режим переключения между ними
- Так как на обращение к подпрограммам опроса клавиатуры и печати на экран отводится существенный процент времени, можно опрашивать статус ВГ75 и вести отсчёт какого-то времени с какой-то точностью. А так как, в отличии от ZX-Spectrum, Сброс не обнуляет память, время можно худо-бедно отсчитывать беспрерывно, пусть и с погрешностями
- Клавишам F1…F4 (в КР-03 - К1…К5) можно выделить одноимённые коды - 0xF1…0xF5. Та же Рус/Lat имеет же код EF… В сочетании с УС/СС можно расширить до F5…F8 и Табуляции дать код F9. Да и курсорные клавиши расширить, а то сильно не хватает тех же Delete/End/Insert для текста
- Управление ПДП/ВГ75 проработать и унифицировать, выделив отдельные рабочие ячейки, чтобы приложение могло запросить Монитор сменить режим экрана. Тогда и форму курсора менять можно без срыва экрана, но только под нормальным софтом и нашим
- В нижней части экрана отдельной функцией Монитора показывать подсказку с функциональными клавишами. Причём, сами клавиши, как и в DOS, могут предобрабатываться самим Монитором без сигнализирования приложению. Например, выводить снимок экрана в файл
- Точки входа в основные подпрограммы можно размазать по всему ПЗУ с условием, что они должны иметь выровненные адреса. Например, F803 - FE00, F82D - FE40, F818 - FE80 и т.д…
barsik wrote:А вообще, чтобы не заморачиваться экономией байтов, надо делать ПЗУ размером в 4 кб (неважно двухстраничное с окном 2 кб или в виде сплошного ПЗУ F000...FFFF).
Экономить всегда надо, пока мы есть!
(Поколение индусов с их искусством программирования Калькулятора весом в гигабайты нас не должно волновать!)
Мой КР-03 имеет 16 Кб! И это важно для меня, так как в перспективе придётся весь свой софт перегонять под 16 Кб…
Можно в ПЗУ сразу выделить зону POP-RET операций, чтобы все подпрограммы в конце выходили именно оттуда.
Можно даже и PUSH'ы оформить в подпрограмму и не беда, что придётся поплясать со стеком.
Главное - чтобы был план…
barsik wrote:Некоторые услышав о многозадачности на РК86 начнут крутить пальцами у виска. Но ничто не мешает обсуждать методы введения многозадачности в РК. Особенно, если придумать для чего это надо и что полезного даст пользователю.
Ещё на Поиске под DOS 3.1 страдал тем, что выходя из среды Borland C в DOS-сеанс я справочник читал в Volcov Commander с примерами на Си по F4 и долго искал позицию, где остановился. Так как ни Copy-Paste тогда не существовало, ни Alt+Tab…
В пору было писать резидентный драйвер, чтобы по Print Screen экран копировал в файл, а потом в сочетании с Shift его отображал…
Это я к тому, что даже в тех же 32 Кб две задачи могут разделять один банк ОЗУ и экрана.
Совершенно незачем двум классическим программам РК работать одновременно…
barsik wrote:Понятно, что для архитектуры РК с доп.страницами ОЗУ по 32 кб легко ввести многозадачность. Но многозадачность не в том смысле, что программы работают одновременно, а в смысле, что можно запустить несколько программ и вручную прерывать их переключаясь на другую программу. Для этого достаточно дополнить п/п-мму ПЗУ F81B (которую вызывают все РК-программы) процедурой переключения на другую задачу. Для каждой задачи выделяется своё окно ОЗУ в 32 кб (со своим экраном, естественно).
В своём примере я это и попытался сделать…
Клавиатура МС-7007 имеет достаточно клавиш, которые можно было бы перепрограммировать. В КР-03 некоторые затёрты и все выдают код Пробела.
(Кстати, сам «МС 0511 УКНЦ» у меня есть, но без БП. От современного БП он не запустился: Видимо на рынке лом уже был…)
barsik wrote:Например, одновременно нажимаем <УС>, <СС> и <Fn>. По такому сочетанию переключается страница ОЗУ в адресах 0...7FFF. Теоретически, сколько в конкретном РК есть таких полубанок ОЗУ, столько РК-программ можно запустить.
Это всё хорошо. Но мы ещё с «Супер-РФ2» даже ещё не договорились!
Потому, аппаратную сторону вопроса отложим пока в сторону
barsik wrote:Но увы, мышь нужна только в графической машине, где возможен GUI интерфейс, а для чисто текстовой машины GUI ещё никто не сделал.
А как же тот же Volcov Commander, где мышь - всего лишь оранжевый атрибут на текстовом экране?
А как же
Scream Tracker с текстовым режимом, где указатель мыши - всего лишь символы с оперативной перерисовкой?
Когда изучал премудрости программирования псевдографики в DOS, свой знакогенератор тоже делал с узорными рамками и мышкой…
Да, в РК такое провернуть тяжелее. Но, если решать в лоб, можно знакогенератор разбить на 48 страниц, где по сигналу отображения курсора включается нужная страница. Можно курсор позиционировать с точностью до пикселя!
И Вы здесь - лукавите!
Для РК мышь таки была с резисторами/1006ВИ1-таймером и даже драйвер для Бейсика!
А в центральных пунктах милиции в СССР (я выше уже писал) терминалы снабжались световыми перьями…
barsik wrote:Непонятно от какого наглого поведения программ возможна защита. От обращения в нестандартные точки внутри ПЗУ F800 ничто не защитит кроме совместимости по внутренним точкам.
Игра КСОНИКС для отображения в нижней части экрана строки статуса нагло вписывает адрес в ячейки 7600/7601.
Монитор мог бы проверять целостность своих ячеек от внешней модификации особой подпрограммой…
barsik wrote:А чем эти паузы кому-то мешают?
Через процедуру вывода байтов и так проходит весь файл. Не так и дорого по тактам будет организовать накопление контрольной суммы отдельными служебными ячейками…
barsik wrote:Да, это позволит в п/п-мме GETLIN с'экономить целых три байта за счёт исключения одной команды CALL COUT_C. При этом полезно переделать несколько игр и системных программ, что нагло вызывают п/п-мму GETLIN (F8EE) и некоторые из них, возможно, сдуру предполагают, что буфер ввода находится на 7633.
Мы оба запутались в трёх соснах!
С одной стороны - обсуждали вариант Монитора без обратной совместимости.
С другой стороны - вопросы совместимости выскакивают как пузыри на новых обоях!
Немного теории
В эпоху восьмибитников никто не волновался про выравнивание указателей. Тогда как уже в 8086 16-битное слово рекомендовали в памяти хранить по чётным адресам, так как нечётные невыровненные требуют лишних тактов и могут
заползать на соседние сегменты. С технологиями MMX/SSE всё стало ещё строже и хороший программист должен выравнивать адреса до 16 байтов. Хотя в последних процессорах это уже не актуально, но ради приличия - рекомендуется.
В РАДИО-86РК с выравниванием адресов вообще беда.
Указатель стека - изначально 76CF, тогда как PUSH использует предекремент и ячейка 76CF никогда не используется. Это безобразие я всегда хотел исправить, но из-за совместимости с программами с автозапуском пока ничего не трогал.
Те же константы скорости ввода-вывода (762F), граница ОЗУ (7631), буфер строки (7633) и «G»-адрес запуска (7627) - всё
сбито.
С одной стороны, это доказывает Вашу правоту, что Монитор авторы писали не голым дампом: В ассемблере кое-как накидали карту рабочих ячеек.
С другой стороны, тут то и полезно разбираться в дампах и бить код ровнее. Что я пытаюсь делать по мере своей квалификации бинариста…
P.S.: А прокрутка экрана через стек - не универсальна: К «окошкам» тяжело применить!

У меня через стек прокрутилось 44 полных кадров - за минуту.
Через мою оконную прокрутку 78×30 того же объёма - за 112 секунд.
Разница - менее, чем в 2 два через 1320 (30×44) символов 0A.
Так как
грязная разница - даже не в полные 2 раза, то метод сомнительный для оконных операций.
Только для игр

Честно - я ожидал большего!

Может мой алгоритм не так оптимален? Тогда поделитесь своим!
P.P.S.: Горизонтальная прокрутка легче:
Code: Select all
REP: LD SP,076D0H
LD DE,2340
LOOP:EX HL,(SP)
INC SP
DEC DE
INC D
DEC D
JP P,LOOP
JP REP
You do not have the required permissions to view the files attached to this post.