Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Paguo-86PK wrote:
Этo слова XXI века! А тогда - и таким бы довольствовались
И тогда (в 80-тые годы) никто не довольствовался. А т.к ещё не знали как просто добавить альтернативный фонт кардинально улучшающий изобразительные возможности РК, потому и уходили на Ириши, Специалисты и Синклеры. Я это стал для себя использовать лишь с середины 90-тых, когда и сам РК86 давно вышел из моды. А фонт в моём РК не 6*8, а 9*10.
А Вы, когда рисуете рамки, то хотя бы режим в 30 строк используйте, чтобы вертикальных межстрочных разрывов в рамках не было. Рамки на РК всегда рисуют в таком режиме. Рамки в режиме на 25 строк это нонсенс, если у Вас фонт не доработан до высоты знакомест в 10 линий (что делается или допрошивкой РФ2 или с помощью КП11 коммутируемой сигналом LC3).
Paguo-86PK wrote:
barsik wrote:
фонт управляемый одним битом запасного ППА D14
Опять ППА! Атрибуты же есть!
Атрибуты истрачены на цвет.
Paguo-86PK wrote:
barsik wrote:
Дамп пишется на любом бейсике за 3 минуты и занимает всего несколько строк бейсика.
Вы уверены
Конечно, я так делал на ZX-48K, чтобы посмотреть коды. За три минуты вводим программку в больших номерах строк и запускаем, чтобы увидеть коды защищённых программ. Это на РК и Специалисте есть монитор, а на ZX нет.
Чтобы не быть голословным, нацарапал кое-как в бейсике на PC: вот в Power Basic, вот в Quick Basic. Это заняло 25 минут, просто потому что я 100 лет не пользовался бейсиком и вынужден был читать HELP, чтобы хоть что-то вспомнить. На РК это вдвое проще, там есть подпрограмма HEX_A на F815.
Paguo-86PK wrote:
Вам нужно почитать мемуары одного пользователя, который интерфейсами Радио-86РК и Специалист связал и не понимал, как другие на Спектруме редактируют текст 64x24 с вырви глаз фонтами 4x8 и тормозами, когда на ВГ75 всё быстро и красиво!
Кладите ссылку, всем будет интересно почитать.
Paguo-86PK wrote:
Опять окольные методы
Какие окольные? Наоборот лобовые. Главное с'экономить труд и детали, простота реализации. А Вы что доп.микросхему буфера для подключения джойстика предлагаете? И важно, чтобы джойстик не мешал тем программам, что о нём не знают.
Те кто хотел джойстик в начале 90-тых (когда они появились для ZX) ставили его в РК на один ряд сканирования (т.е общий провод, что у ZX-джойстика идёт на землю, тут идет на диод одной из линий порта А). Но всё-равно применять джойстик в лоб без переделок программ не получается. Ведь надо, чтобы кнопка "огонь" была включена на <пробеле> или <ВК>, а направления - на курсорных клавишах. А курсорные клавиши на другой линии сканирования, потому общая "земля" не получается.
Paguo-86PK wrote:
Давайте уже признаем, что в XXI веке нужно стремиться к унификации стандартов
Какая унификация, когда пользователей единицы, да и те лишь железячники-музейщики, им наоборот, не надо ничего сверх базового варианта, а на улучшения плевать (по крайней мере до тех пор пока количество и качество программ для модифицированной машины не превысит критическую величину).
Paguo-86PK wrote:
Вами же предлагается наворотить в открытой архитектуре многое из эпохи дефицита. В открытом дизайне нужно быть аккуратнее.
Не сочиняйте. Для рамок и инверсии я предлагаю припаять один проводок. Существенно улучшать платформу никому не надо, это обсуждали много раз. Поболтали и забыли, выяснилось, что всем плевать. Точнее железячникам плевать, а число программистов кому это интересно почти нулевое. Расширение ОЗУ и ПЗУ в дырках области В/У не меняет архитектуру, т.к нужно лишь для получения DOS или лучшего сервиса. Для программ по прежнему 32 кб и в лучшем случае ещё один альтернативный фонт.
Paguo-86PK wrote:
Код ТОЧКИ/Кавычек/Двоеточия сбрасывает триггер и включает верхний регистр знакогенератора
Есть стандартные коды 0E и 0F, они переключают в 7-ми битовых машинах ASCII (большие и маленькие) на русские буквы (большие и маленькие).
Last edited by barsik on 29 Jan 2020 03:25, edited 1 time in total.
А Вы, когда рисуете рамки, то хотя бы режим в 30 строк используйте, чтобы вертикальных межстрочных разрывов в рамках не было. Рамки в режиме на 25 строк это нонсенс, если у Вас фонт не доработан до высоты знакомест в 10 линий.
Попалaсь мне как-то игра «BALL», где разрывов между строками не было. Благодаря журналу РАДИО со статьёй о программировании режима отображения курсора и той игре, я написал унифицированную подпрограмму и при запуске игр её запускал: И курсор отключал, и разрывы устранял. А ещё делал режимы 64×25 с очень длинным периодом гашения строки, что сильно напрягало мой телевизор. А так же и режим 80×64 с символами 6×4 и буфером 80×128 (два дублирующих кадра ПДП чередовались и получались мерцающие полутона в местах различий - моя первая демосцена). Если магнитные биты остались, можно было бы вспомнить все мои опыты и выложить тут…
barsik wrote:
Конечно, т.к так делал на ZX-48K в 1988, чтобы посмотреть коды. За три минуты вводим программку в больших номерах строк и запускаем, чтобы увидеть коды защищённых программ. Это на РК и Специалисте есть монитор, а на ZX нет.
Хотя бы файл загрузили в эмулятор! Там таблица знакогенератора РК 6×8 и куча кода на ассемблере с выводом текста с шагом в 1 пиксель (Это я на спор написал год назад для одного форума…)
barsik wrote:
Чтобы не быть голословным, нацарапал кое-как в бейсике на PC: вот в Power Basic, вот в Quick Basic. Это заняло 25 минут, просто потому что я 100 лет не пользовался бейсиком и вынужден был читать HELP, чтобы хоть что-то вспомнить. На РК это вдвое проще, там есть подпрограмма HEX_A на F815.
Уделите минутку и проверьте мой ZX-файл
barsik wrote:
Кладите ссылку, всем будет интересно почитать.
Читал давно - сейчас не гуглится. Надо локально попытаться сыскать…
barsik wrote:
Какие окольные? Наоборот лобовые. Главное с'экономить труд и детали, простота реализации. А Вы что доп.микросхему буфера для подключения джойстика предлагаете? И важно, чтобы джойстик не мешал тем программам, что о нём не знают.
Задача какая? Я думал, мы здесь пытаемся обсудить способы предоставления пользователю (пытливому) большей свободы. То есть, по максимуму разгрузить все биты ППА и т.п…
barsik wrote:
Какая унификация, когда пользователей единицы, да и те лишь железячники-музейщики, им наоборот, не надо ничего сверх базового варианта, а на улучшения плевать.
Забудем в этом контексте про XXI век и попытаемся почувствовать себя Джобсами!
barsik wrote:
Не сочиняйте. Для рамок и инверсии я предлагаю припаять один проводок. Существенно улучшать платформу никому не надо, это обсуждали много раз. Поболтали и забыли, выяснилось, что всем плевать. Точнее железячникам плевать, а число программистов кому это интересно нулевое. Расширение ОЗУ и ПЗУ в дырках области В/У не меняет архитектуру, т.к нужно лишь для получения DOS или лучшего сервиса. Для программ по прежнему 32 кб и в лучшем случае ещё один альтернативный фонт.
Потому я и рассматривал вариант, где в области E000…FFFF 8 Кб SRAM - типа 537РУ8 или 537РУ17…
barsik wrote:
Есть стандартные коды 0E и 0F, они переключают в 7-ми битовых машинах ASCII (большие и маленькие) на русские буквы (большие и маленькие).
Это да. Но мой принцип не требует спец.кодов. Он просто адаптивно переключает половинки знакогенератора:
. При 30-ти видимых строках вертикальных межстрочных разрывов нет, а вот в основном режиме при 25-ти строках вертикальные разрывы присутствуют. Однако за счёт несложной доработки можно выводить сплошные рамочки псевдографикой без вертикальных разрывов при 25-ти строках, в том числе это избавляет от разрывов в инверсных окнах.
С помощью всего одной 555 ЛЛ1 (или КП11) и перезашивки фонта от межстрочных разрывов легко избавиться. Для этого достаточно, когда выводятся 9-я и 10-я линии знакоместа, т.е когда сигнал LC3=1, с помощью этого же сигнала LC3 сделать сигналы LC0, LC1, LC2 на входах ПЗУ равными единице, что приведёт к повторной выборке из фонта графики 8-й линии графики символа.
Идея заимствована из VGA-адаптера. Там встроенный фонт имеет матрицу 8*14 (или 8*16), но можно включить режим когда фонт выводится в матрице 9*14 (или 9*16), что достигается тем, что девятый горизонтальный пиксель знакоместа всегда повторяет 8-мой. Это приводит к тому, что горизонтальные линии начерченные псевдографикой выводятся без разрывов.
Здесь тоже самое, только по вертикали. Изменив фонт так, чтобы во всех буквенно-цифровых символах фонта 8-я линия была пустой, 9-тая и 10-тая линии повторяющие 8-ю - также будут пустыми. Благодаря этому в символах псевдографики вертикальные линии получатся сплошными без разрывов.
Вообще я собираюсь когда-нибудь странслировать альтернативный ROM-BIOS для РК86 для текста в режиме 30-ти строк. Это удобнее всего, если ПЗУ F800 двухстраничное в окне 2 кб (т.е две напаянных друг на друга РФ2). Тогда, например, по записи любого числа в FC00 включится альтернативное ПЗУ РК86 (по записи в F800 и сбросу - стандартное ПЗУ F800). Альтернативное ПЗУ будет идентичным стандартному, только экранный буфер будет размером в 38*78= 2964 байтов. Начало экрана вероятно будет на 7400, рабочие ячейки - на 7FA0...7FFF.
Можно также странслировать такое ПЗУ с драйвером на 30 строк и на E000 или 9000, тогда можно большую часть кода использовать из стандартного ПЗУ (добавляется векторизация входов для работы с экраном и клавиатурой).
Paguo-86PK wrote:
Paguo-86PK.tap 7 кб. - Хотя бы файл загрузили в эмулятор! Там таблица знакогенератора РК 6×8 и куча кода на ассемблере с выводом текста с шагом в 1 пиксель
У меня нет эмулятора ZX-Spectrum и я никогда его не использовал и, соответственно, не знаю как им пользоваться. Хотя у меня есть реальный ZX-Spectrum 48К на зоновской плате (сейчас без TR-DOS, зато с джойстиком, впрочем рабочий контроллер Beta-диска отдельно тоже есть, он в корпус не влезает), правда уже много лет его не включал.
У меня нет эмулятора ZX-Spectrum и я никогда его не использовал и, соответственно, не знаю как им пользоваться. Хотя у меня есть реальный ZX-Spectrum 48К на зоновской плате (сейчас без TR-DOS, зато с джойстиком, впрочем рабочий контроллер Beta-диска отдельно тоже есть, он в корпус не влезает), правда уже много лет его не включал.
Вoт на реальном и можно проверить! В том же WinAmp'е есть плагин для озвучивания Спектрумских файлов…
barsik wrote:
В РК86 это делается проще, т.к здесь под адресацию ППА выделен килограмм адресов. Реально ППА надо всего два адреса A0 и A1. Значит адреса A2...A12, т.е целых 10 адресов пригодны для адресации банок ROM-картриджа, что без расхода деталей даёт адресацию в 128 мегабайт.
Для примера, чтобы читать банку 0, читаем из A000, чтобы читать банку 1 читаем из A000 + 4*1, банку 2 из A000 + 4*2 и т.д. Расход деталей - ноль. Сигналы A2...A12 шины адреса CPU кусками проволоки МГТФ напрямую соединяются с адресами A16...A26 блока ПЗУ…
Кстати, это можно проделать и с клавиатурой! Как в ZX-Spectrum… Тогда у ППА канал A совсем освободится… Тем самым, получается матрица 11×8 - как на КР-03. Тут сижу и думаю, переписывать ли драйвер клавиатуры?
Например так
Code:
INKEY: ; Эскиз драйвера клавиатуры ; Поддерживается СС и УС ; Но Рус/Lat без триггера, как и СС/УС ; (Русские буквы только при зажатом Рус/Lat) PUSH HL PUSH DE PUSH BC LD BC,08000H LD D,B LD E,C LD H,C INC E DEC H LD A,E CPL LD L,C LD (BC),A CALL INKEY_MAIN INC E LD A,(DE) RRCA RRCA AND 020H LD C,A LD A,L OR H JP M,INKEY_END CP 010H JP C,INKEY_FNS CP 020H LD A,(DE) JP C,INKEY_NUM AND 040H ADD A,L XOR C CP 05FH JP NZ,INKEY_END LD A,020H JP INKEY_END INKEY_NUM: RRCA AND 010H ADD A,010H ADD A,L LD BC,000E6H ADD HL,BC LD L,B ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL XOR H JP INKEY_END INKEY_FNS: LD BC,INKEY_TBL ADD HL,BC LD A,(HL) INKEY_END: POP BC POP DE POP HL RET INKEY_LOOP: LD A,(BC) RLCA RET NC INC L INKEY_MAIN: LD (BC),A LD A,(DE) INC A JP Z,INKEY_LOOP DEC A INC H ADD HL,HL ADD HL,HL ADD HL,HL INKEY_SCAN: RRCA RET NC INC HL JP INKEY_SCAN INKEY_TBL: DEFB 00CH,01FH,01BH,001H,002H,003H,004H,005H DEFB 009H,00AH,00DH,07FH,008H,019H,018H,01AH ; Total - 120 bytes
На своём КР-03 я свой написал, который мог несколько зажатых клавиш по очереди выдавать (когда познакомился с ZX-играми). Но там матрица клавиатуры более ровнее и требует таблицы…
Вообще-то, так как я здесь продвигаю Windows'86, клавиатура должна быть настраиваемой и поддерживать залипание управляющих клавиш…
Code:
Биты флагов клавиатуры: ================ 7 6 5 4 3 2 1 0 ---------------- ? ? L S S C C ? ---------------- ? ? 0 ? ? ? ? ? - LAT ? ? 1 ? ? ? ? ? - RUS ? ? ? 0 0 ? ? ? - Normal ? ? ? 0 1 ? ? ? - SHIFT ? ? ? 1 0 ? ? ? - SHIFT(sticky) ? ? ? ? ? 0 0 ? - Normal ? ? ? ? ? 0 1 ? - CTRL ? ? ? ? ? 1 0 ? - CTRL (sticky) LD A,H ; Здесь код клавиши CP A,040H ; Если не буква - обходим LD A,L JP NZ,Sign AND A,020H ; Рус/Lat флаг OR A,H POP HL RET Sign: ADD A,008H ; Shift-флаг AND A,010H XOR A,H POP HL RET
LD BC,08000H LD D,B LD E,C INC BC ... LD (BC),A ; Вместо громоздкого LD (08000H),A ... LD A,(DE) ; Вместо громоздкого LD A,(08001H)
Авторы РК сэкономили пару PUSH/POP на входе/выходе п/п опроса клавиш. И здесь код можно ужать…
27 Jan 2020 10:40
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Paguo-86PK wrote:
Code:
LD BC,08000H LD D,B LD E,C INC BC ... LD (BC),A ; Вместо громоздкого LD (PA),A ... LD A,(DE) ; Вместо громоздкого LD A,(PB)
Чота блин, я не нашёл этой точки, т.к цепочек
Code:
LD (PA),A ... LD A,(PB)
- несколько.
Paguo-86PK wrote:
Авторы РК сэкономили пару PUSH/POP на входе/выходе п/п опроса клавиш. И здесь код можно ужать
Попробую... может 1 байт удастся выиграть.
Речь о исполнительной части п/п-ммы F81B. Она в оригинале вот такая:
Code:
XF81B: LD A,(PC) AND 10000000B JP NZ,AFE7D LD A,0FEH RET
AFE7D: XOR A LD (PA),A LD (PC),A LD A,(RUSLAT) AND 00000001B OR 00000110B LD (PU),A ; зажигаем/гасим светодиод LD A,(PB) INC A JP NZ,AFE97 DEC A RET
AFE97: PUSH HL LD HL,7 shl 8 + 1 ; *** изменено AFE9C: LD A,L RRCA LD L,A CPL LD (PA),A LD A,(PB) CPL OR A JP NZ,AFEB3 DEC H JP P,AFE9C AFEAF: LD A,255 POP HL RET
AFEB3: LD L,20H AFEB5: LD A,(PB) CPL OR A JP Z,AFEAF DEC L JP NZ,AFEB5 LD L,8 AFEC3: DEC L RLCA JP NC,AFEC3 LD A,H LD H,L LD L,A CP 1 JP Z,AFEFA JP C,AFEF3 RLCA RLCA RLCA ADD A,20H OR H CP 5FH JP NZ,AFF06 LD A,20H POP HL RET
AFEF3: LD A,H LD HL,TABK1 JP AFEFE
AFEFA: LD A,H LD HL,TABK2 AFEFE: ADD A,L LD L,A LD A,(HL) CP 40H POP HL RET C PUSH HL AFF06: LD L,A LD A,(PC) LD H,A AND 40H JP NZ,AFF1A LD A,L CP 40H JP M,AFF3F AND 1FH POP HL RET
AFF1A: LD A,(RUSLAT) OR A JP Z,AFF2A LD A,L CP 40H JP M,AFF2A OR 20H LD L,A AFF2A: LD A,H AND 20H JP NZ,AFF3F LD A,L CP 40H JP M,AFF3B LD A,L XOR 20H POP HL RET
AFF3B: LD A,L AND 2FH LD L,A AFF3F: LD A,L CP 40H POP HL RET P PUSH HL LD L,A AND 0FH CP 0CH LD A,L JP M,POPHL XOR 10H POPHL: POP HL RET .
В этой подпрограмме заменой маскирования на сдвиг и простейшей перестановкой уже в первом же фрагменте сходу освобождается 5 байтов. Вот так:
Code:
XF81B: LD A,(PC) RLA LD A,0FEH RET NC ; AFE7D: XOR A LD (PA),A LD (PC),A ; вот зачем это ? LD A,(RUSLAT) AND 00000001B OR 00000110B LD (PU),A ; зажигаем/гасим светодиод LD A,(PB) INC A JP NZ,AFE97 DEC A RET .
Кстати из этой подпрограммы видно как ROM-BIOS РК обращается с портом C, в котором только младшая половина PCL запрограммирована на вывод. Светодиод зажигается побитовой командой, что пишется в РУС ППА, а вот зачем-то вначале в порт C пишется 0. Я думаю, что это лишнее, но не могу проверить в реале (а это экономия аж 3-х байтов).
С одной стороны вывод нуля в порт С ППА клавиатуры это польза (т.к тогда на PC1, PC2 всегда 0, т.е если этими битами переключать фонт, то в базовом режиме всегда включается базовый фонт). Но когда мы работаем в альтернативном фонте, то как только мы опрашиваем клавиатуру, то тут же снова включается базовый фонт).
Это слегка мешает без модификации ПЗУ использовать биты PC1, PC2 для личных корыстных целей. Возможно не придётся вводить ячейки, в которых хранится содержимое битов PC1 и PC2. Скорее всего есть программы, что мигают светодиодом записывая байт в порт C. Вроде бы программ нет, что перепрограммируют режим клавиатуры (т.к зачем ?).
При WARMST в порт C запасного ППА пишется число $FF. Естественно это я убрал ещё в начале 90-тых. Думаю, что устройство, что было у авторов на порту С ППА D14 - это АЦПУ "Консул" и записывая в порт C ППА D14 все единицы, строб и выборка интерфейса деактивируются.
Last edited by barsik on 27 Jan 2020 16:24, edited 4 times in total.
В этой подпрограмме заменой маскирования на сдвиг и простейшей перестановкой сходу освобождается 5 байтов.
Угу, есть такое. В подпрограмме парсинга хекс в буфере я так и сделал…
barsik wrote:
Кстати из этой подпрограммы видно как ROM-BIOS РК обращается с портом C, в котором только младшая половина PCL запрограммирована на вывод. Светодиод зажигается побитовой командой, что пишется в РУС ППА, а вот зачем-то вначале в порт C пишется 0. Я думаю, что это лишнее, но не могу проверить в реале (а это экономия аж 3-х байтов).
Призраки прошлого…
Помню, столько писалось про дребезг клавиш и их программном сглаживании. Но мне кажется, это - излишнее… Опрос клавиатуры - и так медленный, любое дребезжание сгладится само… Или я ошибаюсь? В эмуляторах сложно проверить… А на своём КР-03 я тогда ничего странного не заметил… Подозреваю, что завод-производитель начхал на дребезг, так как в ПЗУ таблица раскладки клавиатуры нанимала около сотни байт. И ничего - программировал и не мучался дребезжанием каким-то фантомным…
P.S.: Ни в одном из эмуляторов световое перо не эмулируется: В разных эмуляторах читаются разные значения… Хотя было бы здорово, чтобы позиция указателя мыши отражалась в регистрах и кнопка мыши читалась бы неким битом ППА… На программное обеспечение можно было бы иначе посмотреть… (Сейчас онлайн-эмулятор попробую ковырнуть легонько…)
27 Jan 2020 16:02
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Ну вот, использовал некоторые наводки и уплющил базовый монитор РК86 уже до 223 свободных ячеек. Вот здесь исходник и коды. Там же и компилятор (достаточно запустить BAT-файл). Могу ещё увеличить это число на пяток байтов, если п/п-мму RIGHT4 (CR и курсор вправо на 4 позиции) заменю просто на CR. Нет смысла выдавать дамп и другие сообщения с отступом вправо. Некоторые системные программы делают вызов этой п/п-ммы. Но думаю, что её изменение не фатально повредит, просто вывод текстов будет левее.
- - - Добавлено - - -
Paguo-86PK wrote:
Ни в одном из эмуляторов световое перо не эмулируется... Хотя было бы здорово, чтобы позиция указателя мыши отражалась в регистрах и кнопка мыши читалась бы неким битом ППА
Наличие светового пера возможно лучше, чем джойстик заменило бы указатель типа мышь. А так для РК на роль заменителя мыши остаётся только джойстик.
Саму мышь подключить очень сложно: для мыши от PC - или сложный контроллер на 580 ВИ53+ВВ51 с дефицитными буферами 170-й серии (схема для ОРИОНА из ж.Радиолюбитель за 1994) или чуть попроще на небольшом МП-ядре на КМОП Z80 (2К ПЗУ, 1К ОЗУ) с программной реализацией интерфейса.
Просто подключается лишь советская мышь для 8-ми разрядок из начала 90-тых. Это вот такая мышь, называемая "Манипулятор ММ-8031". Она имеет параллельный вывод и её обслуга программно проста.
А я имел ввиду, что однобитовый сигнал со входа светового пера как-то отражается на содержимом статусных регистров внутри ВГ75 и вдруг его можно использовать как однобитовый порт ввода.
Last edited by barsik on 28 Jan 2020 15:23, edited 1 time in total.
. Раз уж пошла такая пьянка, что речь уже не только о программах, но и железяках, то вот копия моего поста о способе как поиметь две страницы ПЗУ F800 без доп.регистра или затраты на это запасного ППА D14. Хотя то, о чём будет речь прямо связано с модификацией ПЗУ F800.
Каждый из методов расширения ПЗУ имеет некоторые недостатки. Например, расширение ПЗУ в окне размером 8 кб конфликтует с РК-КНГМД включаемым в той же области E000. А установка двух или более страниц ПЗУ в маленьком окне F800...FFFF требует наличия сигналов управления переключающих страницы. Эти сигналы можно формировать отдельной схемой, например брать с доп.порта организованного на 1533ТМ9 или же использовать для этого биты запасного ППА D14, причём в последнем случае надо решать задачу, чтобы до запрограммирования режима ППА D14 и сразу после этого выбиралась нулевая страница ПЗУ.
До запрограммирования ППА у неё на всех выходах Z-состояние (что без резисторов привязки входами ПЗУ читается как уровень единицы). А после запрограммирования порта на вывод, на всех его выводах оказывается ноль. Эта проблема легко решается путём подключения к входам ПЗУ куда идёт управление от ППА D14 резистора 150 Ом на землю. Когда выходы ППА в Z-состоянии резистор утягивает адресные входы ПЗУ на землю обеспечивая выбор страницы 0. После запрограммирования данного порта ППА D14 на вывод, на его ножках возникают уровни 0, т.е выбор страницы ПЗУ 0 сохраняется.
Если страниц ПЗУ немного, например, всего две (две включённые в параллель РФ2), то ставить доп.регистры (что требует не только организации их сброса, но и узел для формирования сигналов записи в них) или же тратить на коммутацию ПЗУ запасной ППА D14 (которому есть более полезное применение в виде ROM-картриджа) - не оптимальные решения.
Вместе с тем, если посмотреть трезвым взглядом на использование клавиатурного ППА D20, то обнаружится, что два бита ППА клавиатуры, а именно PC1 и PC2 всегда запрограммированные на вывод не используются. Потому у всех изобретателей доработок РК86 давно тянутся их грязные ручонки к этим битам ППА с целью нагрузить их какой-нибудь полезной работой. Например, неплохо использовать их для выдачи трёхголосной программной классической музыки или же для одноголосной музыки, но зато с 8-ю уровнями громкости (используя и PC0 как третий канал или вес). Но одно дело придумать бесполезную железяку, а совершенно другое - поддержать это "изобрЕтение" программно.
Если использовать PC1 и PC2 для переключения страниц ПЗУ, то возникает проблема из-за того, что и базовое ПЗУ постоянно пишет в PC1 и PC2 нули и программы пользователя, что перенастраивают режим ППА также выводят нули на этих выводах. Т.о на этих выводах возникают единицы до установки режима ППА и нули после этого. Если учесть, что это всегда одинаковые сигналы, т.е или 11 или 00, то можно из двух этих выводов формировать один сигнал - номер страницы ПЗУ. При этом отпадает необходимость привязки на 0 (чтобы при выходах ППА в Z-состоянии была включена страница ПЗУ 0), хотя всё-равно желательна привязка на +5В, т.к нехорошо иметь Z-состояние на TTL-входах 1533 ЛП5.
Есть такой странный тип TTL-вентиля под названием 1533 ЛП5 (научно называется исключающее-ИЛИ). Он как раз даёт на выходе 0, когда оба входных сигнала равны и даёт на выходе единицу, когда на одном из входов ноль, а на другом единица. Т.к в имеющихся программах уровни сигналов на PC1 и PC2 всегда равны, то обеспечивается включение страницы 0, т.е базового ПЗУ РФ2 всегда в имеющихся программах. Но если программно (побитовой командой или даже байтом) вывести в PC1 (или в PC2) единицу, то включится альтернативная страница ПЗУ F800.
Таким образом не затрачивая запасное ППА D14 и не нагружая шину получаются две страницы ПЗУ и совместимость с имеющимися программами не нарушается. Но это возможно только переделав ПЗУ F800, т.к без модификации ПЗУ F800 при каждом вызове F81B, F812, F803 базовое ПЗУ РК86 от авторов РК принудительно устанавливает страницу ПЗУ 0 (т.к зачем-то кидает на порт C ППА клавиатуры байт 0).
Oпять Вы йогой пытаетесь меня увлечь: Чесать правое ухо мизинцем левой ноги
Повторяю: Наелся я статьями про ППА клавиатуры для переключения кодовых страниц знакогенератора и т.д… Не хотите вот понять, что переключать ПЗУ-страницы без дополнительных проводков - иная прелесть!
Кстати, хочу вот свой КР-03 достать из шкафа и подключить к карте захвата видео… Всегда любопытно было поглядеть на структуру сигнала при срыве синхронизации при ошибках программ. За одно и ПЗУ считать хочу, чтобы посмотреть на драйвер опроса той клавиатуры…
И эмулятор ПЗУ в сети откопал… Правда, это несколько не то: Мне нужно на лету перепрошивать через USB… Думаю, без ATMega не обойтись… Или же добыть аналог RET или подобного… Или вот такое?
29 Jan 2020 04:18
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Использование имеющихся битов - это вполне в тему, ведь и Вас и всех людей волнует экономия деталей и минимализм доработок.
Paguo-86PK wrote:
Наелся я статьями про ППА клавиатуры для переключения кодовых страниц знакогенератора и т.д...
Это Вы погорячились, таких статей про биты ППА клавиатуры ещё не было, никто это даже ещё не испытал на практике. Это и невозможно без модификации ПЗУ, а этим никто не озадачивался ранее.
Запасное ППА D14 - это да, - это ранее уже не раз предлагалось использовать для получения управляющих битов реконфигурации (т.к это точно лучше, чем использовать тумблер).
Я сам с середины 90-тых коммутировал фонт битом PC0 запасного ППА, благодаря чему имел в своём РК два фонта - стандартный и альтернативный, что давало мне рамки и инверсию знакомест, а позднее попробовал и графику 192*86 - 43 видимых строки (а всего 50+2 строк) высотой в 6 линий растра, 64 граф.символа (про возможность поиметь графику 192*102 я тогда не знал, т.к исходил из советского стандарта, где частота кадров 50 ГЦ).
Paguo-86PK wrote:
Не хотите вот понять, что переключать ПЗУ-страницы без дополнительных проводков - иная прелесть!
Если Вы о атрибутах ВГ75, то знаю я эту "вашу прелесть". Пробовал. А с возможностью переключать банки ПЗУ F800 сигналом /RD, Вы, как мы видим, - уже затрахались, не в силах преодолеть трудности. Программно это сложно, а по железу Вы горОдите нагромождение железа лишь ради того, чтобы не припаивать один проводок к ненавистному ППА.
А те, кто хвалят возможность оперативно (т.е по экрану) переключать фонты и режимы вывода атрибутами, сами ещё не пытались писать программы использующие атрибуты. Когда ко мне попал журнал "Радиолюбитель" 04.1992, то РК-цвет меня не взволновал (т.к имел лишь моно дисплей), а вот возможность поиметь инверсию знакомест - понравилась. Я сразу же припаял 155 ЛП5 и стал пробовать. Но оказалось, что чтобы удобно использовать инверсию атрибутом надо кардинально переписывать весь ROM-BIOS.
Инверсией в программах управляют так. На консоль выкидывается упр.код ESC,70, после чего все последующие выводы символов на CONOUT выдаются на экран в инверсии. А после выкидыша на CONOUT двух байтов ESC,71 восстанавливается вывод без инверсии.
Если в терминале управление инверсией такое, то всё в порядке, все фирменные программы будут с инверсией. А если в вашем терминале такой упр.код не поддерживается, то инверсии в фирменных программах у Вас никогда не будет, но Вы ещё и затрахаетесь, чтобы хоть как-то в своих программах использовать инверсию знакомест.
Атрибутом RVV несложно поиметь инверсию целиком всего экрана (и то только прямой записью в экран), но сделать инверсию на слово подпрограммой CONOUT не получится. Можно сделать инверсию на слово только прямой наглой записью в экранный буфер. Атрибут RVV можно использовать полностью переписав подпрограмму вывода так, чтобы (при позиционировании) позиции в экранном буфере не считались по формуле 76D0+Line*78+Colon, а позиция символа определялась сканированием строки с учётом атрибутов. Значит нужно иметь в ПЗУ два драйвера вывода, базовый и правильный поддерживающий атрибуты.
Чтобы с RVV иметь и совместимость и удобство программирования разумно сделать так. ВГ75 физически пусть выводит не экранный буфер с 76D0, а другой экранный буфер вне основного ОЗУ (расположенный, например, с 9000). А экран с 76D0 - как бы бутафорский, нужный лишь для совместимости и удобства программирования. Тогда, чтобы вывести символы в инверсии, выводим их на F809 с выставленным старшим битом (естественно, убрав сброс бита D7 в оригинальной п/п-мме F809).
Взведение бита D7 по флагу INVERSE делается двумя командами ассемблера (загрузить флаг INVERSE и сделать OR кода символа КОИ-7 с ним). А по прерыванию для визуализации несколько раз в секунду будем копировать программный экран 76D0...7FF4 в физический экран на 9000. Естественно, конвертируя строки с символами в которых бит D7=1 в строки с атрибутами.
В то время как инверсия фонтом программно обходится нам всего в две команды для маскирования кода символа с флагом INVERSE, совсем не тормозит и совместимо с CP/M. А попутно ещё и даёт нормальные рамки и легко позволяет встраивать инверсию в имеющиеся игры РК. Потому, хоть на моём РК эта 555ЛП5 на атрибуте RVV так и простояла десятки лет (в надежде, что найду 40 игр, что согласно статье в ж.Радиолюбитель имеются), но я это не использовал, т.к имел хоть и ограниченную, но простую и удобную для программиста, обошедшуюся всего в кусочек проволоки, инверсию фонтом.
Кстати, использование порта C запасного ППА для коммутации фонтов даже не мешает его использованию для ROM-диска - экран не мигает символами при загрузке из ROM-диска, если на экране нет русских букв.
Потому в РК86 намного разумнее потратиться на кусочек проволоки, чем тщетно мечтать о полезном и удобном применении атрибутов ВГ75. Вы собираетесь переписывать ROM-BIOS, чтобы в нём была поддержка инверсии атрибутом RVV?
И нет никаких причин отказываться от имеющихся портов или даже добавки дополнительных сист.регистров на запись (по STA или OUT). Ваш довод, что расширять ПЗУ надо непременно устройствами "Plug & Play" - просто надуманный, ничуть не обусловленный реальностью. Т.к любой, у кого сейчас есть РК86, непременно имеет электро-паяльник и в состоянии соединить одним проводком вывод ППА с выводом ПЗУ. И логика у Вас отсутствует, - значит для расширения ПЗУ F800 припаять проводок нельзя, а для расширения фонтов соединять проводами атрибуты ВГ75 с адресами ПЗУ с фонтом - можно.
Кстати, если использовать PC1 и PC2 ППА клавиатуры не для коммутации ПЗУ F800, а лишь для выбора фонта, то не обязательна ЛП5, т.к случайное переключение этих битов не приводит к улёту, а лишь к возврату к стандартному фонту и возможному искажению экранной картинки, которая нарисована под другой фонт. Что позволяет при аккуратном программировании поиметь 4 фонта вообще без расхода деталей (не считая, что под знакогенератор придётся применить 2732, т.к в одну РФ2 влезает всего 2 фонта).
Paguo-86PK wrote:
Мне нужно на лету перепрошивать через USB… Думаю, без ATMega не обойтись…
Что значит "на лету"? Не вынимая ПЗУ из РК86? Т.е USB-кабелем соединяем PC и РК86 и заливаем прошивку. Это Вы размечтались.
Чем Вас не устраивает вариант использования современных "Electrically Erasable and Programmable CMOS ROM" (русского термина нет, но я бы назвал ROM с интерфейсом RAM), для которых даже прошиватель не нужен, т.к у них поведение точно такое же как у обычного ОЗУ, но после выключения питания данные сохраняются, а время доступа 15-20 НСЕК. Или (что по использованию то же самое) - обычное статическое ОЗУ 62256/621024 с припаянной пуговичной батарейкой и резистором привязки на /CS.
Last edited by barsik on 29 Jan 2020 08:57, edited 5 times in total.
GET_HL: LD HL,0 ; 48 bytes AF95D: LD A,(DE) INC DE CP 00DH SCF RET Z CP 02CH RET Z CP 020H JP Z,AF95D LD BC,AFAAE PUSH BC SUB 030H RET M CP 017H RET NC CP 00AH JP C,AF97F CP 011H RET C SUB 007H AF97F: ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL RET C OR L LD L,A POP BC JP AF95D
Code:
F950 21 00 00 1A 13 FE F960 0D 37 C8 FE 2C C8 FE 20 CA 5D F9 01 AE FA C5 D6 F970 30 F8 FE 0A FA 7F F9 FE 11 F8 FE 17 F0 D6 07 29 F980 29 29 29 D8 B5 6F C1 C3 5D F9 <- 6 BYTES FREE->
Радикально и ещё короче:
Code:
GET_HL: LD HL,0 ; 45 bytes AF95D: LD A,(DE) INC DE CP 02CH RET Z CP 020H RET C JP Z,AF95D LD BC,AFAAE PUSH BC SUB 030H RET M CP 017H RET NC CP 00AH JP C,AF97C CP 011H RET C SUB 007H AF97C: ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL RET C OR L LD L,A POP BC JP AF95D
А тут - всего два байта отыграл:
Compare HL DE
Code:
ORG 0F990H CMP_HL_DE: LD A,H CP D RET NZ LD A,L CP E RET CMP_HL_DE_TEST: CALL PROMPT_BREAK CMP_HL_DE_LOOP: ; 9 bytes CALL CMP_HL_DE INC HL RET NZ DEC HL CMP_HL_DE_BREAK: INX SP INX SP RET
Code:
F990 7C BA C0 7D BB C9 CD A4 F9 CD 90 F9 23 C0 2B 33 F9A0 33 C9<2bytes>
barsik wrote:
Просто подключается лишь советская мышь для 8-ми разрядок из начала 90-тых. Это вот такая мышь, называемая "Манипулятор ММ-8031". Она имеет параллельный вывод и её обслуга программно проста.
Сeбе к D14 я подключал вот такую
Трёхкнопочная
и несколько часов потратил на разбор сигналов. Написал простую программу позиционирования курсора, но дальше - не продвинулся: Опыта организации интерактивных интерфейсов не было…
barsik wrote:
Что значит "на лету"? Не вынимая ПЗУ из РК86? Т.е USB-кабелем соединяем PC и РК86 и заливаем прошивку. Это Вы размечтались.
Чем Вам вариант использования современных "Electrically Erasable and Programmable CMOS ROM", для которых даже прошиватель не нужен, т.к у них поведение точно такое же как у обычного ОЗУ, но после выключения питания данные сохраняются, а время доступа 15-20 НСЕК. Или (что по использованию то же самое) - обычное статическое ОЗУ 62256/621024 с припаянной пуговичной батарейкой и резистором привязки на /CS.
«Горячая перезапись» поддерживается? Ну, например, чтобы тот же знакогенератор РФ1 на лету перепрошивать?
barsik wrote:
И логика у Вас отсутствует, - значит для расширения ПЗУ F800 припаять проводок нельзя, а для расширения фонтов соединять проводами атрибуты ВГ75 с адресами ПЗУ с фонтом - можно.
Логика таки есть, но вы отказываетесь её воспринимать за логику и причисляете к маразму (моему)
Кстати, я тот (нелюбимый Вами) онлайн эмулятор внешним плагином доработал. Исправил программирование ВГ75, сняв заглушки автора «return 255». Добавил чтение позиции светового пера и бит статуса LP: Теперь, если указатель мыши за пределами экрана, бит сброшен. Доработал «дешифрацию памяти»: Теперь ППА клавиатуры и ВГ75 по всему пространству 8000-9FFF и C000-DFFF соответственно.
Вот только клик мышки (имитация кнопки светового пера) как программе отдавать - не знаю. Через бит ППА клавиатуры - схему КР-03 моего нужно доставать, чтобы свериться… (На реальном проверить хочется же…)
P.S.: Сейчас планирую подползти к ПЗУ и попытаться организовать мою страничную карусель…
Last edited by Paguo-86PK on 29 Jan 2020 11:07, edited 1 time in total.
29 Jan 2020 08:42
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Paguo-86PK wrote:
А тут - всего два байта отыграл
Подпрограмму INC_HL я убрал две недели назад (между версией с экономией в 200 и 209 байт). Также в этой подпрограмме две INC SP заменяются на один POP AF, т.к тут AF сохранять не надо.
А вот за LD BC,ERROR : PUSH BC и последующие цепочки RET FLAG, - спасибо, это, кажется, даст выигрыш в четыре байта.
G - как Call с возвратом и остановом без порчи ячеек
Code:
ORG 0FA3FH THE_G: CALL CMP_HL_DE JP Z,THE_GO EX HL,DE LD A,(HL) LD (7625H),A LD (HL),0CDH INC HL LD SP,HL POP HL LD (7623H),HL LD HL,(THE_GON+1) PUSH HL THE_GO: LD SP,REGS_BC POP BC POP DE POP HL POP AL LD SP,HL LD HL,(7616H) CALL 07626H THE_GON:JP 0FFA2H DB 0FFH
barsik wrote:
Подпрограмму INC_HL я убрал две недели назад (между версией с экономией в 200 и 209 байт). Также в этой подпрограмме две INC SP заменяются на один POP AF, т.к тут AF сохранять не надо.
Здeсь я тормоза сыграл!
barsik wrote:
А вот за LD BC,ERROR : PUSH BC ... RET FLAG... - спасибо, это, кажется, даст выигрыш в четыре байта.
Чур посты не тереть - читающий должны иметь возможность проследить взаимный обмен технологиями!
P.S.: Я выше второй вариант выложил - ещё короче… (Хотя и «CP 20H» можно выбросить тоже!)
29 Jan 2020 11:19
barsik
Doomed
Joined: 19 Feb 2017 03:46 Posts: 584 Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Paguo-86PK wrote:
A вот с «G» зря так… У меня она такая: [~40 байт]
А у меня такая: JP (HL). Это всего один байт. Не нужна директива G с точкой останова. Для этого есть отладчик (в ПЗУ на 9000 или E000), да и в нём на реале никакой нужды нет, т.к отладка с тех пор как в 1998 появились эмуляторы РК86 намного удобнее в них.
По поводу отладочных директив, позже, когда (и если) буду транслировать ROM-BIOS размером в 8 кб (E000...FFFF), то вставлю директиву '.' (точка) - мини-DISASM Z80. Это у меня было на ОРИОНЕ в мониторе (загружаемое из ROM-диска расширение M3), и часто использовалось. Полноценный отладчик не нужен, но полезно, чтобы было что-то под рукой, чтобы сразу посмотреть, что в программе. Кстати, ROM-BIOS на E000 как раз можно сделать оконным (8-ми килобайт хватит).
В директиве G гораздо полезнее не точка стопа, а возврат на WARMST по RET и возможность передавать программе параметры. Я уже упоминал, что удаление DIR_X и стоп точки из G даёт выигрыш почти в 90 байт. И их стоило бы убрать даже, если бы это не освобождало место в ПЗУ.
Но вообще, Вы надрываетесь уплющивая код почти впустую, т.к это имеет смысл, если код сдвигать схлопывая пустоты, получая в итоге сплошное свободное место максимального размера в конце ПЗУ, как делаю я. Тогда туда можно что-то вставить. А что толку, если Вы выиграете 3 байта там, два байта здесь... Ну будут у Вас в ПЗУ местами встречаться по несколько сплошных байт FF, какая от этого польза? Поэтому я и предлагал редактировать исходник и забыть о модернизации в кодах по месту.
Вы так и не сформулировали решаемую задачу и никто не знает какова конечная цель вашей модификации п/п-мм ПЗУ. Известно лишь, что Вы собираетесь поиметь огромное ПЗУ F800 и прошить туда как в ROM-диск всё эр-ка-шное ПО. Но то же получается и при какой-нибудь DOS или контроллере microSD, причём без всяких хитростей.
Вот я, освободив в ПЗУ ~180 байтов, два года назад встроил в ПЗУ РК автостарт из ROM-диска (первой программы, прошитой в ROM-диск с нуля), директивы K и H, п/п-ммы F836/39 для доп.банок ОЗУ, клавиатурные прерывания (т.е переходы предустановленные и задаваемые пользователем) по сочетанию УС+СС+Fn. Что позволяет с клавиатуры переключать режимы драйвера, запускать резидентные программы, грузить DOS, управлять программами не тратя коды, или, например, сливать весь массив памяти в файл (наподобие Magic_Key, но без прерываний).
А сейчас заменил CCP на специалистовское (заодно заменил и пару директив). Что мне надо, чтобы в монитор встроить новые директивы - команды DOS. Пробел - запуск, D без параметров - каталог, S - SAVE, L - LOAD в ОЗУ, E (или K) - удаление, R - переименование файла. DOS может быть любая: RAMDOS, RK-DOS, CP/M и ещё несколько. Вообще-то это мне надо для Специалиста, но когда CCP одинаков и есть инверсия знакомест, то разницы нет.
А освободив ~300 ячеек ПЗУ удастся полностью выкинуть из RK-DOS его CCP и в выигранное там (в ПЗУ 4К) место включить код нескольких SYS-файлов, т.к от внешних SYS-файлов давно пора избавиться. Вот это реальная польза от выигранного места в ПЗУ F800.
Paguo-86PK wrote:
Я выше второй вариант выложил - ещё короче
Это тоже неплохо, при вставке ниббла из A в HL выигрыш на команде загрузки в регистр B нуля:
Code:
LD B,0 ..... LD C,A ADD HL,BC
на
Code:
OR L LD L,A
Paguo-86PK wrote:
Хотя и «CP 20H» можно выбросить тоже!
CP 20H нужно, чтобы делать SKIP (пропуск пробела после предыдущего разделителя, запятой или буквы команды). Чтобы ком.строка выглядела красивее. Сделано неправильно, если пробел поставить до запятой, то не только проигнорируется один параметр, но и следующий параметр окажется искажён (т.к в HL уже не 0).
Возможно это использую, - по обнаружению пробела после запятой это будет интерпретироваться, что следом за пробелом идёт имя файла и будет делаться CALL на подпрограмму формата FCB по имени в ком.строке.
PS. Вот основные из искейп-команд самого-самого нижнего уровня, что нужны для организации оконности. Это именно на это Вы замахнулись объявляя, что вводите оконность в драйвер вывода.
Code:
ESC,38 - установить русский регистр клавиатуры ESC,39 - установить латинский регистр клавиатуры ESC,3A - запретить отображение курсора ESC,3B - разрешить отображение курсора ESC,3C - вывод клика клавиатуры ESC,3D - запретить подзвучку клавиатуры ESC,3E - разрешить подзвучку клавиатуры ESC,3F,Y+20,X+20 - задать позицию вывода часов на экране
ESC,40 - включить режим INSERT при выводе символов (в режиме INSERT при вы- воде символа все символы этой строки, расположенные начиная с пози- ции курсора, включая символ в позиции курсора сдвигаются вправо).
ESC,4A - очистить от курсора до конца экрана (включая позицию курсора) ESC,4B - очистить от курсора до конца строки (включая позицию курсора) ESC,4C - вставить строку перед текущей. Сдвиг всех строк (включая текущую) вниз с образованием пустой строки на месте текущей. Курсор установ- ливается в начало образовавшейся строки. ESC,4D - удалить текущую строку. Ролик всех нижележащих строк вверх. Самая нижняя строка становится пустой. Курсор сдвигается в начало текущей строки. ESC,4E - затереть символ в позиции курсора путем сдвига расположенного спра- ва остатка строки влево, т.е строка укорачивается на 1 символ
ESC,4F - выйти из режима INSERT, включить обычный режим замены (Replace)
ESC,53 - ролик всего окна вверх (как при ВК в последней строке) ESC,54 - ролик всего окна вниз (аналог вставки новой строки сверху)
ESC,5C - включить вывод символов в КОИ-7 (ввод в КОИ-8) ESC,5D - установить КОИ-8 ESC,5E - установить АЛЬТ-кодировку
ESC,62 - очистить от начала экрана до курсора (включая позицию курсора) ESC,6C - очистить строку на которой стоит курсор. Курсор в начало строки. ESC,6F - очистить от начала строки до курсора (включая позицию курсора)
ESC,6A - запомнить текущую позицию курсора (только 1 позицию !) ESC,6B - вернуть курсор в позицию запомненную ранее по ESC,6A ESC,6E - возвращает поз.курсора с клавиатуры в виде пригодном для позиционирования с помощью п/п MSSG: ESC,Y,LN+20,COL+20
ESC,70 - включить режим Reverse Video ESC,71 - выключить режим Reverse Video (нормальный вывод)
ESC,74,N,строка - загрузить строку в тимплет символов (N длина строки) ESC,75,KEY,N,строка - запрограммировать клавишу для вывода строки
ESC,91 - чертит одинарную рамку по краю окна (окно не меняется) ESC,92 - чертит двойную рамку по краю окна (окно не меняется !)
ESC,94,мл,ст - задать адрес R1 для передачи парам-ров ESC,98 - установить время (из R1,R2) ESC,99 - получить время в R1,R2 ESC,9A,Y+20,X+20,dY,dX - установить окно (Y и X увеличены на 20 !)
ESC,9C - получить размер окна в байтах. Размер возвращается в R1 ESC,9D - сохранить содержимое окна по адресу HEAP передаваемому в R1. По выходе в R1 новый HEAP (на вершине параметры окна) ESC,9E - восстановить содержимое окна из HEAP заданного R1. На вершине HEAP должны лежать 4 байта описывающих окно. Если верхний байт FF, то это считается "дном" буфера, тогда возвращается R1=FFFF. Поэтому на случай "лишних" вызовов ESC,9E стоит заранее положить FF в ячейку ниже начала буфера. В противном случае возможен улёт, т.к экран будет задан случайным образом и возможно будет затерт сам драйвер или стек.
Last edited by barsik on 30 Jan 2020 04:45, edited 1 time in total.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum