nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Apr 2024 04:03



Reply to topic  [ 204 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 14  Next
Paguo-86PK - XXI BEK 
Author Message
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
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.



27 Jan 2020 00:09
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
А Вы, когда рисуете рамки, то хотя бы режим в 30 строк используйте, чтобы вертикальных межстрочных разрывов в рамках не было. Рамки в режиме на 25 строк это нонсенс, если у Вас фонт не доработан до высоты знакомест в 10 линий.
Попалaсь мне как-то игра «BALL», где разрывов между строками не было. Благодаря журналу РАДИО со статьёй о программировании режима отображения курсора и той игре, я написал унифицированную подпрограмму и при запуске игр её запускал: И курсор отключал, и разрывы устранял.
А ещё делал режимы 64×25 с очень длинным периодом гашения строки, что сильно напрягало мой телевизор. А так же и режим 80×64 с символами 6×4 и буфером 80×128 (два дублирующих кадра ПДП чередовались и получались мерцающие полутона в местах различий - моя первая демосцена).
Если магнитные биты остались, можно было бы вспомнить все мои опыты и выложить тут…
barsik wrote:
Конечно, т.к так делал на ZX-48K в 1988, чтобы посмотреть коды. За три минуты вводим программку в больших номерах строк и запускаем, чтобы увидеть коды защищённых программ. Это на РК и Специалисте есть монитор, а на ZX нет.
Хотя бы файл загрузили в эмулятор! :lol:
Там таблица знакогенератора РК 6×8 и куча кода на ассемблере с выводом текста с шагом в 1 пиксель :idea:
(Это я на спор написал год назад для одного форума…)
barsik wrote:
Чтобы не быть голословным, нацарапал кое-как в бейсике на PC: вот в Power Basic, вот в Quick Basic. Это заняло 25 минут, просто потому что я 100 лет не пользовался бейсиком и вынужден был читать HELP, чтобы хоть что-то вспомнить. На РК это вдвое проще, там есть подпрограмма HEX_A на F815.
Уделите минутку и проверьте мой ZX-файл :ebiggrin:
barsik wrote:
Кладите ссылку, всем будет интересно почитать.
Читал давно - сейчас не гуглится. Надо локально попытаться сыскать…
barsik wrote:
Какие окольные? Наоборот лобовые. Главное с'экономить труд и детали, простота реализации. А Вы что доп.микросхему буфера для подключения джойстика предлагаете? И важно, чтобы джойстик не мешал тем программам, что о нём не знают.
Задача какая?
Я думал, мы здесь пытаемся обсудить способы предоставления пользователю (пытливому) большей свободы.
То есть, по максимуму разгрузить все биты ППА и т.п…
barsik wrote:
Какая унификация, когда пользователей единицы, да и те лишь железячники-музейщики, им наоборот, не надо ничего сверх базового варианта, а на улучшения плевать.
Забудем в этом контексте про XXI век и попытаемся почувствовать себя Джобсами! :twisted:
barsik wrote:
Не сочиняйте. Для рамок и инверсии я предлагаю припаять один проводок. Существенно улучшать платформу никому не надо, это обсуждали много раз. Поболтали и забыли, выяснилось, что всем плевать. Точнее железячникам плевать, а число программистов кому это интересно нулевое. Расширение ОЗУ и ПЗУ в дырках области В/У не меняет архитектуру, т.к нужно лишь для получения DOS или лучшего сервиса. Для программ по прежнему 32 кб и в лучшем случае ещё один альтернативный фонт.
Потому я и рассматривал вариант, где в области E000…FFFF 8 Кб SRAM - типа 537РУ8 или 537РУ17…
barsik wrote:
Есть стандартные коды 0E и 0F, они переключают в 7-ми битовых машинах ASCII (большие и маленькие) на русские буквы (большие и маленькие).
Это да.
Но мой принцип не требует спец.кодов. Он просто адаптивно переключает половинки знакогенератора:
Code:
«ЭТО ТЕКСТ. ДЕМОНСТРАЦИЯ» -> «Это текст. Демонстрация»


27 Jan 2020 05:11
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
.
При 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-ю - также будут пустыми. Благодаря этому в символах псевдографики вертикальные линии получатся сплошными без разрывов.

Image


Вообще я собираюсь когда-нибудь странслировать альтернативный 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-диска отдельно тоже есть, он в корпус не влезает), правда уже много лет его не включал.


27 Jan 2020 09:05
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
У меня нет эмулятора ZX-Spectrum и я никогда его не использовал и, соответственно, не знаю как им пользоваться. Хотя у меня есть реальный ZX-Spectrum 48К на зоновской плате (сейчас без TR-DOS, зато с джойстиком, впрочем рабочий контроллер Beta-диска отдельно тоже есть, он в корпус не влезает), правда уже много лет его не включал.
Вoт на реальном и можно проверить! В том же WinAmp'е есть плагин для озвучивания Спектрумских файлов… :idea:
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 блока ПЗУ…
Кстати, это можно проделать и с клавиатурой! :roll: Как в 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, клавиатура должна быть настраиваемой и поддерживать залипание управляющих клавиш… :idea:
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
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
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.



27 Jan 2020 15:33
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Чота блин, я не нашёл этой точки, т.к цепочек
Этo цепочка от меня. Смотрите спойлер
barsik wrote:
Попробую... может 1 байт удастся выиграть.
Предварительный код мой - 120 байтов…
barsik wrote:
В этой подпрограмме заменой маскирования на сдвиг и простейшей перестановкой сходу освобождается 5 байтов.
Угу, есть такое. В подпрограмме парсинга хекс в буфере я так и сделал…
barsik wrote:
Кстати из этой подпрограммы видно как ROM-BIOS РК обращается с портом C, в котором только младшая половина PCL запрограммирована на вывод. Светодиод зажигается побитовой командой, что пишется в РУС ППА, а вот зачем-то вначале в порт C пишется 0. Я думаю, что это лишнее, но не могу проверить в реале (а это экономия аж 3-х байтов).
Призраки прошлого… :roll:

Помню, столько писалось про дребезг клавиш и их программном сглаживании. Но мне кажется, это - излишнее…
Опрос клавиатуры - и так медленный, любое дребезжание сгладится само…
Или я ошибаюсь?
В эмуляторах сложно проверить…
А на своём КР-03 я тогда ничего странного не заметил…
Подозреваю, что завод-производитель начхал на дребезг, так как в ПЗУ таблица раскладки клавиатуры нанимала около сотни байт. И ничего - программировал и не мучался дребезжанием каким-то фантомным… :idea:

P.S.: Ни в одном из эмуляторов световое перо не эмулируется: В разных эмуляторах читаются разные значения…
Хотя было бы здорово, чтобы позиция указателя мыши отражалась в регистрах и кнопка мыши читалась бы неким битом ППА… :roll:
На программное обеспечение можно было бы иначе посмотреть…
(Сейчас онлайн-эмулятор попробую ковырнуть легонько…)


27 Jan 2020 16:02
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Ну вот, использовал некоторые наводки и уплющил базовый монитор РК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.



27 Jan 2020 19:24
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Чтoбы народ не грузился, состряпал демку:

(Демонстрация "окошек" и "светового пера" ВГ75)


27 Jan 2020 20:08
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
.
Раз уж пошла такая пьянка, что речь уже не только о программах, но и железяках, то вот копия моего поста о способе как поиметь две страницы ПЗУ 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).

Image


28 Jan 2020 03:34
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Oпять Вы йогой пытаетесь меня увлечь: Чесать правое ухо мизинцем левой ноги :mrgreen:

Повторяю: Наелся я статьями про ППА клавиатуры для переключения кодовых страниц знакогенератора и т.д…
Не хотите вот понять, что переключать ПЗУ-страницы без дополнительных проводков - иная прелесть!

Кстати, хочу вот свой КР-03 достать из шкафа и подключить к карте захвата видео…
Всегда любопытно было поглядеть на структуру сигнала при срыве синхронизации при ошибках программ.
За одно и ПЗУ считать хочу, чтобы посмотреть на драйвер опроса той клавиатуры…

И эмулятор ПЗУ в сети откопал…
Правда, это несколько не то: Мне нужно на лету перепрошивать через USB…
Думаю, без ATMega не обойтись…
Или же добыть аналог RET или подобного:oidea:
Или вот такое?


29 Jan 2020 04:18
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Использование имеющихся битов - это вполне в тему, ведь и Вас и всех людей волнует экономия деталей и минимализм доработок.
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.



29 Jan 2020 08:03
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Однакo, мой код короче :mrgreen:
 Get HL
Code:
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 я подключал вот такую
 Трёхкнопочная
Image
и несколько часов потратил на разбор сигналов. Написал простую программу позиционирования курсора, но дальше - не продвинулся: Опыта организации интерактивных интерфейсов не было…
barsik wrote:
Что значит "на лету"? Не вынимая ПЗУ из РК86? Т.е USB-кабелем соединяем PC и РК86 и заливаем прошивку. Это Вы размечтались.
Разве?
barsik wrote:
Чем Вам вариант использования современных "Electrically Erasable and Programmable CMOS ROM", для которых даже прошиватель не нужен, т.к у них поведение точно такое же как у обычного ОЗУ, но после выключения питания данные сохраняются, а время доступа 15-20 НСЕК. Или (что по использованию то же самое) - обычное статическое ОЗУ 62256/621024 с припаянной пуговичной батарейкой и резистором привязки на /CS.
«Горячая перезапись» поддерживается?
Ну, например, чтобы тот же знакогенератор РФ1 на лету перепрошивать?
barsik wrote:
И логика у Вас отсутствует, - значит для расширения ПЗУ F800 припаять проводок нельзя, а для расширения фонтов соединять проводами атрибуты ВГ75 с адресами ПЗУ с фонтом - можно.
Логика таки есть, но вы отказываетесь её воспринимать за логику и причисляете к маразму (моему) :P

Кстати, я тот (нелюбимый Вами) онлайн эмулятор внешним плагином доработал.
Исправил программирование ВГ75, сняв заглушки автора «return 255».
Добавил чтение позиции светового пера и бит статуса LP: Теперь, если указатель мыши за пределами экрана, бит сброшен.
Доработал «дешифрацию памяти»: Теперь ППА клавиатуры и ВГ75 по всему пространству 8000-9FFF и C000-DFFF соответственно.

Вот только клик мышки (имитация кнопки светового пера) как программе отдавать - не знаю.
Через бит ППА клавиатуры - схему КР-03 моего нужно доставать, чтобы свериться…
(На реальном проверить хочется же…) :idea:

P.S.: Сейчас планирую подползти к ПЗУ и попытаться организовать мою страничную карусель…


Last edited by Paguo-86PK on 29 Jan 2020 11:07, edited 1 time in total.



29 Jan 2020 08:42
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
А тут - всего два байта отыграл
Подпрограмму INC_HL я убрал две недели назад (между версией с экономией в 200 и 209 байт). Также в этой подпрограмме две INC SP заменяются на один POP AF, т.к тут AF сохранять не надо.

А вот за LD BC,ERROR : PUSH BC и последующие цепочки RET FLAG, - спасибо, это, кажется, даст выигрыш в четыре байта.


29 Jan 2020 11:04
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
A вот с «G» зря так… У меня она такая:
 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сь я тормоза сыграл! :lol:
barsik wrote:
А вот за LD BC,ERROR : PUSH BC ... RET FLAG... - спасибо, это, кажется, даст выигрыш в четыре байта.
Чур посты не тереть - читающий должны иметь возможность проследить взаимный обмен технологиями! :roll:

P.S.: Я выше второй вариант выложил - ещё короче…
(Хотя и «CP 20H» можно выбросить тоже!) :twisted:


29 Jan 2020 11:19
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
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,59,LN+20,COL+20 - прямое позиционирование курсора

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.



29 Jan 2020 13:57
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 204 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 14  Next

Who is online

Users browsing this forum: vital72 and 19 guests


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.