Важная информация

User Tag List

Результаты опроса: Дорабатывать РАДИО-86РК в XXI веке

Голосовавшие
18. Вы ещё не участвовали в этом опросе
  • Дело интересное и увлекательное, когда руки прямые и паяльник горяч

    13 72.22%
  • Это всё хорошо в эмуляторах. А практически - уж слишком поздно

    3 16.67%
  • В эмуляторе это хотя бы реализовано?

    0 0%
  • Пора проснуться от ностальгии и ухватиться за все ядра современных технологий

    2 11.11%
Опрос с выбором нескольких вариантов ответа.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: В поисках утерянных возможностей…

  1. #1
    Member Аватар для Радио-86РК
    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    57
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb В поисках утерянных возможностей…

    Нa многих форумах я нарываюсь на критику со стороны, мол никак за пределы архитектуры «РАДИО-86РК», когда были ещё и «Специалист», и «Орион», и «ZX-Spectrum», и даже «IBM-PC/XT»…
    Однако, если глубоко вдуматься, то именно в РК заложен больший нереализованный потенциал.
    И это меня очень сильно привлекает.
    Давайте по порядку…

    ПДП
    У ПДП используется всего 1 канал, а остальные 3 навеки заземлены, хотя их можно было бы использовать.
    Так, если «Специалист» специально тормозился сигналом «WAIT» от контроллера НГМД, так как особенности архитектуры и жёсткая привязка к тактам не давала никакого шанса на вариации. То с помощью ПДП всё это можно было бы реализовать и без ВГ93…
    Если хорошенечко постараться, то и ввод с магнитофона можно было бы реализовать аппаратно.
    Даже опрос клавиатуры можно реализовать через ПДП, так как ВГ75 циклически только и запрашивает данные со всех адресов.
    Однако, в РАДИО-86РК лишь вывод «INTA» использован нетрадиционно. А в остальном - обычные типовые решения…

    ПДП+ВГ75
    Редчайший случай, но были игровые программы, которые загружались с ленты без гашения экрана, так как ПДП программировался на более короткие циклы и не мешал процессору.
    Конечно, у меня нет этой программы, так как на неё наткнулся один товарищ…
    Это говорит в пользу того, что ПДП - не зло, вопреки как, в частности - я, воспринимали его в своё время.

    Цикл M1: 48 Кб
    Теоретически, адресное пространство РК можно существенно расширить при помощи сигнала «M1»…
    Например, по сигналу «СБРОС» включается классическая адресация 16/32 Кб через D11/D13.
    Однако по адресам 8000…BFFF располагается дополнительное ОЗУ доступное только на запись, так как D14/D20 никуда пока не делись.
    Чтобы это ОЗУ стало доступным, достаточно прочитать команду в адресном диапазоне 8000…BFFF, что из-за недопустимого сигнала «M1» отключит D11, а D14/D20 переместятся на другие адреса и пространство ОЗУ расширится до 48 Кб. Естественно, само ПЗУ с классической программой «МОНИТОР» тоже переключается на более расширенный аналог…
    При этом, наряду с остальными схемами, никакие биты ВВ55 программировать не нужно для переключения адресации. Она переключается только по «M1» один раз до очередного сигнала «СБРОС»…

    Цикл M1: Префиксы
    Да, в отличии от Z80, ВМ80 не имеет префиксов. Однако, с помощью ЛА2 и «M1» можно поймать момент чтения команды «mov a,a» и аппаратно превратить её в префикс установкой специального триггера…
    Тогда, когда следующая команда «mov m,a»/«mov a,m» будет писать/читать данные уже без «M1», можно подставить другую страницу памяти и сбросить тот триггер…

    Цикл M1: 64 Кб
    Естественно, как уже очевидно, можно расширить адресное пространство ОЗУ до полных 64 Кб, а через префиксы подставлять «классическое пространство» со всеми D14/D20, ВГ75 и ПДП…
    При этом, адреса «E000…FFFF» можно читать и писать, но нельзя исполнять, так как это временно выключить режим 64 Кб и включит режим 48 Кб, чтобы выполнить подпрограмму ПЗУ. При этом, после «RET» управление передастся на более нижние адреса и включится снова режим 64 Кб…
    То есть, нижние 32 Кб присутствуют всегда. Режим 48 Кб включается по «jmp/call 8000…BFFF». А полные 64 Кб имеют ещё более хитрую схему переключения…

    P.S.: Есть ещё много разных набросков…

  2. Этот пользователь поблагодарил Радио-86РК за это полезное сообщение:

    Denn (10.12.2019)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    3,689
    Спасибо Благодарностей отдано 
    60
    Спасибо Благодарностей получено 
    174
    Поблагодарили
    130 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Цикл M1: Префиксы
    Да, в отличии от Z80, ВМ80 не имеет префиксов. Однако, с помощью ЛА2 и «M1» можно поймать момент чтения команды «mov a,a» и аппаратно превратить её в префикс установкой специального триггера…
    Тогда, когда следующая команда «mov m,a»/«mov a,m» будет писать/читать данные уже без «M1», можно подставить другую страницу памяти и сбросить тот триггер…
    Я делал нечто подобное на Орионе. Для ускорения чтения другой страницы. ИЧСХ работало, но не сохранил схемы. Хотя они восстанавливаются на ура.

  5. #3
    Master Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    603
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    У ПДП используется всего 1 канал, а остальные 3 навеки заземлены, хотя их можно было бы использовать.
    Кстати, из компьютеров, построенных на архитектуре РК, наиболее широко используется ПДП на Партнере - в нем реализован обмен данными с НГМД через ПДП, а также специальный режим регенерации памяти при отключенном ВГ75.

  6. #4
    Member Аватар для Радио-86РК
    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    57
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post Эскиз переключателя страниц

    Чтoбы примерно представить, что из себя это должно представлять, вот примерный эскиз узла под Z80.
    Три элемента «Исключающее ИЛИ» определяет именно код префикса - «mov b,b/c,c/d,d/e,e/h,h/l,l/a,a»…

    По сигналу СБРОС JK-триггер выбирает режим «BIOS».
    Если происходит переход на адрес FF00…FFFF, JK-триггер переключается между Приложением и БСВВ.

    Для БСВВ память представляется следующим образом:
    Код:
    ┌───────────────────────┐    ┌───────────────────────┐ ┌───────────────────────┐
    │Чтение команды M1-цикла│    │Чтение данных из памяти│ │Запись данных в память │
    ╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
    │        Триггер        │    │       Страница        │ │       Страница        │
    │       RAM «B/A»       │    │        RAM «B»        │ │        RAM «D»        │
    ├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
    │       Страница        │    │       Страница        │ │       Страница        │
    │        RAM «B»        │    │        RAM «B»        │ │        RAM «D»        │
    └───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
    Для прикладного кода она не так сильно отличается:
    Код:
    ┌───────────────────────┐    ┌───────────────────────┐ ┌───────────────────────┐
    │Чтение команды M1-цикла│    │Чтение данных из памяти│ │Запись данных в память │
    ╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
    │        Триггер        │    │       Страница        │ │       Страница        │
    │       RAM «A/B»       │    │        RAM «A»        │ │        RAM «D»        │
    ├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
    │       Страница        │    │       Страница        │ │       Страница        │
    │        RAM «A»        │    │        RAM «A»        │ │        RAM «D»        │
    └───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
    Под действием одного из префиксов память для БСВВ и приложения частично меняется:
    Код:
    ┌───────────────────────┐    ┌───────────────────────┐ ┌───────────────────────┐
    │Чтение команды M1-цикла│    │Чтение данных из памяти│ │Запись данных в память │
    ╞═══════════════════════╡FFFF╞═══════════════════════╡ ╞═══════════════════════╡
    │        Триггер        │    │       Страница        │ │       Страница        │
    │       RAM «A/B»       │    │        RAM «D»        │ │        RAM «A»        │
    ├───────────────────────┤FF00├───────────────────────┤ ├───────────────────────┤
    │       Страница        │    │       Страница        │ │       Страница        │
    │      RAM «A»/«B»      │    │        RAM «D»        │ │      RAM «A»/«B»      │
    └───────────────────────┘0000└───────────────────────┘ └───────────────────────┘
    (В схеме пока не реализовано…)
    Здесь:
    1. «Application»: Пространство приложения
    2. «BIOS»: Пространство БСВВ
    3. «Data»: Область Данных

    Где «A»/«B»/«D» - не просто регистры переключения 64 Кб, а комплекс регистров для переключения регионов по 16 Кб из 1 Мб памяти…
    (Аналогично примерно как «Защищённый Режим» x86 с Таблицей Дескрипторов…

    Пока я точно не знаю, годна ли такая модель памяти.
    Прежде всего, сложность вызывает стек, так как при переключении страниц область стека становится недоступна между режимами…
    Есть ещё идея изъять у процессора команду «lxi sp,a16», так как она используется крайне редко и её можно заменить на «sphl». А аппаратно код 31 использовать для других целей…
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	App_BIOS_pfx.jpg 
Просмотров:	49 
Размер:	26.1 Кб 
ID:	70971  

  7. #5
    Veteran Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    1,906
    Спасибо Благодарностей отдано 
    124
    Спасибо Благодарностей получено 
    238
    Поблагодарили
    163 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Есть ещё идея изъять у процессора команду «lxi sp,a16», так как она используется крайне редко и её можно заменить на «sphl». А аппаратно код 31 использовать для других целей…
    Использую эту команду достаточно активно! Суть в следующем:

    Код:
    LXI H,0
    DAD SP
    SHLD M_SAVE_SP
    
    ; цикл с использованием ускорения за счёт стековых операций
    
    M_SAVE_SP:EQU $+1
    LXI SP,0
    RET
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  8. #6
    Member
    Регистрация
    01.06.2005
    Адрес
    Москва
    Сообщений
    90
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    как-то костыльно всё...
    я не полный идиот, кой чего не хватает

  9. #7
    Member Аватар для Радио-86РК
    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    57
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Smile Аппаратная виртуализация инструкций и портов

    Eсли вдуматься, то сама по себе «lxi sp» лишняя, так как классический код (читайте: для военной техники с повышенным требованием к стабильности и без разных сомнительных трюков) совершать предустановку указателя стека должен всегда один раз.
    Ради интереса, я и ПДП программировал через «lxi sp,0E006h + push hl»…
    Если желаете обфусцировать всё и путать хакера - это всегда пожалуйста!

    Потому я и думаю, что теоретически код «31» аппаратно можно изъять и заменить на «rst 7» куда-то. То есть, искусственно симулировать прерывание без прерывания.

    Как это должно работать…
    Логика видит на шине «M1»+«MREQ»+«READ» и код «31». Тогда схема процессору «FF» и устанавливает специальный триггер, который при следующем «M1» включит к шине ПЗУ с «макрокодом», примерно таким:
    Код:
    3138 E3      |XTHL
    3139 D5      |PUSH DE
    313A 5E      |MOV E,M
    313B 23      |INX H
    313C 56      |MOV D,M
    313D 23      |INX H
    313E 33      |INX SP
    313F 33      |INX SP
    3140 E3      |XTHL
    3141 19      |DAD DE
    3142 3B      |DCX SP
    3143 3B      |DCX SP
    3144 D1      |POP DE
    3145 C9      |RET
    Тем самым, искусственно получим команду «DAD const_16».
    Естественно, ПЗУ с таким кодом имеет объём 64 Кб и старший байт адреса обозначает код инструкции. А младший байт - подключается к шине адреса процессора.
    То есть, при считывании любого кода по «M1» ПЗУ это всегда подключено и схема следит, какой код ПЗУ возвращает.
    Если код отличен от 00, то подключается это ПЗУ до команды C9 по всему пространству.

    В прикладном режиме можно перехватить и команды «in/out» таким же образом, чтобы БСВВ получала управление и виртуализировала порты.
    Например:
    Код:
    API-вызов / виртуальный порт
    CD 03 F8 --> DB 83
    CD 12 F8 --> DB 82
    CD 1B F8 --> DB 8B
    CD 15 F8 --> D3 85
    И даже если физически портовое пространство отсутствует, как в РК, то подобными трюками приложение его может заполучить.

  10. #8
    Member Аватар для Радио-86РК
    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    57
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post МОНИТОР предоставляет ОКНА

    Итaк, продолжаю тему…

    Наверное, все помнят статьи Драйвер оконного интерфейса или Монитор открывает окна?
    Меня с детства увлекал этот вопрос и как счастливый владелец РК я размышлял, а нельзя ли в саму ПЗУ РК подпрограмму вывода символа на экран подправить так, чтобы изменить регион активной области терминала?
    Ведь вывод в экранную область 78×30 через подпрограмму МОНИТОРа и так ограничивается фиксированным окном 64×25 с координатами 8:3.

    И вот, спустя 25 лет я этим вопросом активно занялся с помощью онлайн-эмулятора.
    Прежде всего, я устранил некоторые небрежности автора программы МОНИТОР.
    • А именно, заменил команды по адресам F830/F833 с «JMP» на «LHLD/SHLD», как это сделано в «ОРИОН-128»…
    • Подчистил операции начальной инициализации служебной области (F836…F86B), чем освободилось ещё 13 ячеек…

    Код:
         .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
    F800 C3 44 F8 C3 63 FE C3 98 FB C3 BA FC C3 46 FC C3
    F810 BA FC C3 01 FE C3 A5 FC C3 22 F9 C3 72 FE C3 7B
    F820 FA C3 7F FA C3 B6 FA C3 49 FB C3 16 FB C3 CE FA
    F830 2A 31 76 22 31 76 C9 ?? ?? ?? ?? ?? ?? ?? ?? ?? <-- целых 13 ячеек в резерве
    F840 ?? ?? ?? ?? 21 03 80 74 2B AF 77 7C FE 75 C2 48
    F850 F8 22 31 76 21 1D 22 22 2F 76 2A 6D F8 F9 CD CE
    F860 FA 21 52 FF CD 22 F9 3E C3 32 26 76 .. .. .. .. <-- логика не изменилась
    Прежде всего, параметры окна нужно где-то хранить. И есть ячейки, которые МОНИТОР не использует.
    • 7610 - левая граница окна (X1)
    • 7611 - верхняя граница окна (Y1)
    • 7612 - правая граница окна (X2)
    • 7613 - нижняя граница окна (Y2)

    Теперь нужно переписать саму подпрограмму по адресам FCBA…FE00 под «оконные амбиции»:
    Код:
         .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
    FCB0                               F5 E5 D5 2A 12 76 <-- 7612,7613 to C,B - X2,Y2
    FCC0 C5 44 4D 2A 02 76 EB 2A 00 76 3A 04 76 3D E3 7D <-- так как A читал Escape-статус, а C уже занят под X2,
    FCD0 E3 CD EB FC 22 00 76 21 01 C0 36 80 2B 73 72 EB <-- код символа извлекаем из стека через XTHL в A
    FCE0 CD 01 FE 22 02 76 C1 D1 E1 F1 C9 CA F4 FD E2 ?? <-- Escapes
    FCF0 ?? F2 ?? ?? E6 7F FE 08 CA 47 FD FE 0A CA 5A FD
    FD00 FE 0C CA E7 FD FE 0D CA EA FD FE 18 CA 89 FD FE
    FD10 19 CA AA FD FE 1A CA 91 FD FE 1F CA BA FD FE 07
    FD20 C2 51 FD 00 01 F0 05 78 FB 3D C2 28 FD 78 F3 3D <-- FD23: NOP
    FD30 C2 2E FD 0D C2 27 FD C9 C5 9F 47 EE 4E 90 4F 09 <-- универсальная подпрограмма - шаг вверх/вниз (по CF)
    FD40 78 87 3C 82 57 C1 C9 3A 10 76 BB D2 A3 FD 2B 1D <-- 7610
    FD50 C9 77 23 7B 1C B9 D8 CD EA FD 78 3D BA D2 38 FD
    FD60 D5 E5 CD EA FD 3A 11 76 2F 3C 80 57 79 93 5F 1C <-- 7611
    FD70 01 B2 FF D5 E5 14 AF 5E 77 09 7B 15 C2 77 FD E1 <-- скроллим только область окна
    FD80 D1 23 1D C2 73 FD E1 D1 C9 23 1C 7B B9 D8 CD EA
    FD90 FD AF CD 38 FD 3D B8 D8 3A 11 76 BA D0 CD 38 FD
    FDA0 C3 98 FD 23 1C 7B B9 C2 A3 FD 3A 11 76 BA DA 38
    FDB0 FD CD 38 FD B8 3F D2 B1 FD C9 A0 C2 D2 FD 21 08 <-- проверяем правую границу окна
    FDC0 03 22 10 76 21 47 1B 22 12 76 44 4D 21 C2 77 11 <-- если 0 - создаём стандартное окно
    FDD0 08 03 CD E7 FD AF CD 51 FD 7A B8 C2 D5 FD 7B B9 <-- очищаем только область окна
    FDE0 C2 D5 FD AF CD 51 FD CD 98 FD 3A 10 76 93 D0 1D
    FDF0 2B C3 EA FD CD E7 FD 3E 02 32 04 76 C9 ?? ?? ??
    FE00 ??
    Так как онлайн-эмулятор позволяет ассемблером писать прямо в ПЗУ, то после прошивки ПЗУ МОНИТОРа проверяем своё творчество и убеждаемся, что МОНИТОР запустился и скроллинг по «D»-директиве работает.
    Теперь с помощью директивы «M» можно поиграться с ячейками 7610…7612 и вручную изменить параметры окна, соблюдая крайную аккуратность, так как никакой защиты от дурака нет!

    Естественно, никакой речи о сохранении содержимого окон и речи быть не может!
    Нас должно интересовать лишь управление ограничивающей области вывода - не более…

    Естественно, игры «КСОНИКС», «ПИТОН», и «ЦИРК» уже нормально не отображаются из-за отсутствия реализации позиционирования курсора через «Esc+Y…», над чем ещё стоит попотеть…

    К тому же тот «NOP» по «FD23» меня беспокоит как растрачивание драгоценных ячеек.
    Да и саму BELL-подпрограмму трогать и перемещать нельзя ни в коем случае!
    Предстоит ещё много работы и отладки…

    Исходники на ассемблере пока не даю…
    (Да и нужны ли они здесь кому?)

    P.S.: Надеюсь, моё хобби не отталкивает…
    Спасибо!
    Последний раз редактировалось Радио-86РК; 14.12.2019 в 00:08. Причина: комментарии к коду

  11. #9
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    556
    Спасибо Благодарностей отдано 
    58
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    31 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Логика видит на шине «M1»+«MREQ»+«READ» и код «31». Тогда схема процессору «FF» и устанавливает специальный триггер, который при следующем «M1» включит к шине ПЗУ с «макрокодом»
    ...
    В прикладном режиме можно перехватить и команды «in/out» таким же образом, чтобы БСВВ получала управление и виртуализировала порты.
    Подобным образом я и хотел сделать для eZ80. Но у него нет M1.

  12. #10
    Veteran Аватар для rw6hrm
    Регистрация
    10.07.2005
    Адрес
    Ставрополь
    Сообщений
    1,030
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    6
    Поблагодарили
    6 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не забудьте реализовать загружаемый знакогенератор в ВГ75 дабы хоть игрушки делать более красивые. На этом форуме данный вопрос был рассмотрен и собран в реале, https://zx-pk.ru/threads/20714-pomec...l=1#post713206 . А то действительно революционная доделка, но про неё никто не в курсе...
    Последний раз редактировалось rw6hrm; 14.12.2019 в 09:05.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Расширение возможностей Evo SDK
    от alone в разделе Программирование
    Ответов: 30
    Последнее: 15.07.2014, 19:43
  2. В поисках 7P3K3PH0N MYZbIKN
    от ALKO в разделе Для начинающих
    Ответов: 4
    Последнее: 03.02.2014, 12:45
  3. Ответов: 11
    Последнее: 16.11.2012, 00:28
  4. Расширение возможностей Ленинград1
    от DVS в разделе Ленинград
    Ответов: 53
    Последнее: 24.05.2009, 18:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •