nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 14 Aug 2020 17:39



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

Joined: 19 Feb 2017 04:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Icer wrote:
Исходник вполне не плохо смотрелся бы в виде приложенного файла.
Я специально не использовал вложение. Рассчитывал через день-два просто удалить из поста ASM-исходник. Можно было бы это и не делать, но тэг {code} не имеет балки вертикальной прокрутки, а тэг {spoiler} уничтожает форматирование, что делает и саму такую выкладку бессмысленной. Изменил пост, теперь исходник не занимает место, но пришлось воспользоваться другим форумом, где я умею выкладывать исходник под спойлер. Кстати и вложение с конверторами мнемоник дополнил. Те трое, кто уже это скачал, можете перескачать.
Paguo-86PK wrote:
Oсмелюсь Вам возразить как программист: Ваш код расточительно расходует байт-код даже при беглом просмотре!
Код не мой, я даже в нём не особо разбирался, т.к изначально знал, что логику его работы менять нельзя. Это написал кто-то из авторов РК86, скорее всего Зелёнко, но м.быть Попов или Горшков. И их код очень даже хорош, тем более для 1986 года. По крайней мере он намного качественнее, чем код в ROM-BIOS МИКРОШИ.

Команда DEC на флаге ESC_FLAG это отнюдь не напрасный расход байтов, а идея хранить номер байта в принимаемой искейп-последовательности прямо во флаге ESC_FLAG - удачна, т.к позволила авторам с'экономить несколько байтов.
Paguo-86PK wrote:
тот код... затирает подпрограмму директивы «X»
Директива X совсем не нужна. Её включили по аналогии с Микро-80, т.к для него в 1982 году ещё не было отладчиков. Но в 1986 году они уже были. Да и полноценный отладчик программистом пишется всего за два дня. И, если есть доступ к CP/M (а он у авторов РК был), то оттуда без особых хлопот берётся отладчик DDT и встраивается в резидентное ПО машины (что и сделано в ИРИШЕ). Сомневаюсь, что хоть кто-то использовал директиву X и отлаживал программы на РК без нормального отладчика. И уж тем более сейчас, даже если бы не существовало отладчиков, директива X вообще бессмысленна, никто не отлаживает сейчас программы в реале.

Но убирание директивы X даёт выигрыш ~40 байтов и не может "спасти отца русской демократии", т.е позволить существенно доработать ПЗУ РК. Если надо делать существенную модификацию ПЗУ, то нет смысла надрываться и экономить байты. Архитектура РК рассчитана на расширение ПЗУ, как минимум, до 8 кб.

Если нет желания менять РФ2 на 2764 или 27256, то второе ПЗУ РФ2 можно ставить без затраты доп.логики, используя идею, что применил С.Зонов в своей плате "зона". Он использовал как третий сигнал выборки 2764 вход PGM и поданным туда адресом A13 выбирал то старшую ПЗУ 2764, то младшую (с'экономив тем самым дешифратор).

Я уже немножко соображаю в конфигах для эмуляторов EMU и EMU80. Если надо, то могу поделиться конфигом для эмуляторов РК86, где ПЗУ 8 кб (или даже куча страниц ПЗУ по 8 кб), а также, где есть ОЗУ 8400...BFFF (это ценно, хотя бы для отладчика, т.к тогда им можно отлаживать код для любых адресов) и где есть ещё 16 страниц ОЗУ в 32 кб каждая в области 0...7FFF.
Paguo-86PK wrote:
не МОНИТОР должен подстраивать[ся] под прихоти прикладного кода, а прикладной код должен уважать рабочую область МОНИТОР-а. И то, что 1…3 [программы] из сотни заглючат - ничего не меняет.
Если бы сейчас был 1986 или хотя бы 1987 год и Вы бы опубликовали доработанный монитор в журнале "Радио", то м.быть... Да и то внедрить, т.е распространить абсолютно новый ROM-BIOS всегда проблематично. Даже 100% совместимые новые ROM-BIOS-ы содержащие новые возможности почти невозможно внедрить... Вон в журнале Моделист-Конструктор опубликовали больше версий разных ROM-BIOS-ов для Специалиста, чем прикладных программ. И что толку от введённой там поддержки окон и т.п, если все программы Специалиста работают только с стандартным исходным ROM-BIOS.

А сейчас уж совсем бессмысленно. Во-первых нЕ для кого, а во-вторых, раз уже есть программы написанные "вредителями" более 30-ти лет назад, то любой новый ROM-BIOS должен с ними совмещаться. Поезд ушёл... и ещё 30 лет назад. На многих архивных сайтах, у людей уже есть такие написанные вредителями программы и удалить или заменить их уже никто не сможет.

Но я вообще не понимаю смысла в введении оконных параметров туда, где их изначально не было. Ну вот, что это даст пользователю? Хоть на одну программу у него станет больше. Или он заморочится с перепрошивкой РФ2 (м.быть даже сожгёт при этом несколько штук дефицитных РФ2), а вместо хоть в чём-то выигрыша, потеряет, думаю, с десяток РК-игр и весь остаток своей жизни ему придётся решать программа не сработала из-за несовместимости нового ROM-BIOS или она просто дохлая.

Как я уже писал, отлавливать на входе CONOUT символы и имитировать адресацию вывода в заданное окно это совсем немного байтов, так что встроить в программу, где это затребовано это вообще не проблема. Вот если бы имелась сотня игр, которые требуют именно такой ROM-BIOS... Да и тогда, если это несовместимо, надо ещё подумать, стоит ли менять "шило на мыло". Потому, если предлагается что-то несовместимое, то и обсуждать это не имеет смысла.

Но я не понимаю зачем цепляться за те ячейки, что использует оригинальный ROM-BIOS. Это можно считать драйвером низшего уровня. Напишите к нему надстройку со своими ячейками задающими оконность. И совместимость останется и весь ваш новый функционал тоже.
Icer wrote:
чем-то увлечь себя же надо!
Конечно, но Вы цель ваших модификаций ПЗУ так и не объяснили.


Last edited by barsik on 19 Dec 2019 07:46, edited 1 time in total.



19 Dec 2019 07:19
Profile
Doomed

Joined: 01 Oct 2007 11:30
Posts: 518
Location: Ukraine
Reply with quote
Рад за вас, Живы.

Сейчас второй втихаря подотрет. А потом будет радостно рапортовать, я тут двух ботов подтер, ой господи. Двух ботов, а сколько потер контента не ботов?

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


19 Dec 2019 07:41
Profile
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
Quote:
barsik wrote:
Paguo-86PK wrote:
Oсмелюсь Вам возразить как программист: Ваш код расточительно расходует байт-код даже при беглом просмотре!
Код не мой, я даже в нём не особо разбирался, т.к изначально знал, что логику его работы менять нельзя. Это написал кто-то из авторов РК86, скорее всего Зелёнко, но м.быть Попов или Горшков. И их код очень даже хорош, тем более для 1986 года. По крайней мере он намного качественнее, чем код в ROM-BIOS МИКРОШИ.
Нo я хорошо помню, что в моём КР-03 была одна DEC…
Причём…
 "Скриншот дампа эмулятора"
Attachment:
File comment: Скриншот фрагмента ПЗУ эмулятора
rk86-monitor32.png
rk86-monitor32.png [ 16.3 KiB | Viewed 1424 times ]
Совпадает с
 "Публикацией журнала тех лет"
Image

barsik wrote:
Команда DEC на флаге ESC_FLAG это отнюдь не напрасный расход байтов, а идея хранить номер байта в принимаемой искейп-последовательности прямо во флаге ESC_FLAG - удачна, т.к позволила авторам с'экономить несколько байтов.
Да, я так и делал в соседней ветке. Там даже ввёл паузу до 127 символов на Esc-флаге, чтобы до 127 символов не отправлялось на печать, а уходили в некий драйвер (принтера). И параметры задавались десятичными ASCII-символами. Но в рамках того листинга - расточительство!
barsik wrote:
Директива X совсем не нужна. Её включили по аналогии с Микро-80, т.к для него в 1982 году ещё не было отладчиков. Но в 1986 году они уже были. Да и полноценный отладчик программистом пишется всего за два дня. И, если есть доступ к CP/M (а он у авторов РК был), то оттуда без особых хлопот берётся отладчик DDT и встраивается в резидентное ПО машины (что и сделано в ИРИШЕ). Сомневаюсь, что хоть кто-то использовал директиву X и отлаживал программы на РК без нормального отладчика. И уж тем более сейчас, даже если бы не существовало отладчиков, директива X вообще бессмысленна, никто не отлаживает сейчас программы в реале.

Но убирание директивы X даёт выигрыш ~40 байтов и не может "спасти отца русской демократии", т.е позволить существенно доработать ПЗУ РК.
Вот поэтому я её и оставил, как и директиву «R»…
barsik wrote:
Если надо делать существенную модификацию ПЗУ, то нет смысла надрываться и экономить байты. Архитектура РК рассчитана на расширение ПЗУ, как минимум, до 8 кб.
Вариант с простой заменой ПЗУ РФ2 более привлекателен, если рассматривать возможность рассылки ПЗУ почтой фанатам/бета-тестерам. На сайтах с нуля собирают РК до сих пор…

barsik wrote:
Я уже немножко соображаю в конфигах для эмуляторов EMU и EMU80. Если надо, то могу поделиться конфигом для эмуляторов РК86, где ПЗУ 8 кб (или даже куча страниц ПЗУ по 8 кб), а также, где есть ОЗУ 8400...BFFF (это ценно, хотя бы для отладчика, т.к тогда им можно отлаживать код для любых адресов) и где есть ещё 16 страниц ОЗУ в 32 кб каждая в области 0...7FFF.
По-моему он у меня был. Но вот вирусный бум последних лет часто вынуждал всякие exe'шки запускать под VMware, что меня изрядно утомило и я целиком ушёл в вэб-кодинг…
И сам я писал в LCC-Win32 эмулятор РК с точной эмуляцией ВГ75, включая сколлинг из-за атрибутов. Но на моём Pentium-90MHz он чуток тормозил и я забросил.
Конфиг… Конечно высылайте!
barsik wrote:
А сейчас уж совсем бессмысленно. Во-первых нЕ для кого, а во-вторых, раз уже есть программы написанные "вредителями" более 30-ти лет назад, то любой новый ROM-BIOS должен с ними совмещаться. Поезд ушёл... и ещё 30 лет назад. На многих архивных сайтах, у людей уже есть такие написанные вредителями программы и удалить или заменить их уже никто не сможет.
На сайтах сообществ фанатов много…
barsik wrote:
Но я вообще не понимаю смысла в введении оконных параметров туда, где их изначально не было. Ну вот, что это даст пользователю? Хоть на одну программу у него станет больше. Или он заморочится с перепрошивкой РФ2 (м.быть даже сожгёт при этом несколько штук дефицитных РФ2)
Ячейки были зарезервированы. Значит, в конце-концов должна быть версия ПЗУ с их использованием… :roll:
Говорю же, что можно бизнес маленький организовать… :roll:
barsik wrote:
Но я не понимаю зачем цепляться за те ячейки, что использует оригинальный ROM-BIOS. Это можно считать драйвером низшего уровня. Напишите к нему надстройку со своими ячейками задающими оконность. И совместимость останется и весь ваш новый функционал тоже.
Раз подпрограмма - в ПЗУ, то и ячейки следует использовать из той же области.
А другие драйвера пусть используют какие хотят…
А теперь… По теме…

В самом начале темы я обозначил идею РК XXI века своей мечты… :roll:
Путаница вышла из-за названия топика.
Мною имелось ввиду, как можно было бы спроектировать РК на элементарной базе тех лет, но с опытом наших дней.
При этом, не оглядываясь на дефицит, а учитывать уже существующие технологии. То есть, в 1986 процессор i80386 уже существовал и теоретически его можно было использовать в РАДИО-86РК! :lol:
Но, я не такой энтузиаст, чтобы изучать распиновку i386… :roll:

Напомню идею…
Всем программам под чтение отдать все 65536 ячеек ОЗУ#1 и под запись ОЗУ#2.
А вот под цикл M1 для чтения кода команды самые верхние 256 ячеек сделать окном для переключений между ОЗУ с приложением и ПЗУ с БСВВ.
И тут проблема в формальностях, так как у i8080 набор команд скуднее, но есть возможность фиксить циклы доступа к стеку, а у z80 команд больше, но он сигнализирует лишь о регенерации ОЗУ и цикле M1.
Тем самым, для переключения ОЗУ/ПЗУ с i8080 стек можно аппаратно переключать с приложения на БСВВ. А вот с z80 это невозможно…
И я на этом уже споткнулся…

P.S.: От досады и впиливаю оконца в ПЗУ РК… :mrgreen:


19 Dec 2019 08:33
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
Нo я хорошо помню, что в моём КР-03 была одна DEC…
Тут Вы правы, память Вас не подвела. В оригинале вот такой код:
Code:
        LD      A,(ESC_F)
        DEC     A
        JP      M,NO_ESC        ; если ещё не в ESC-последовательности
        JP      Z,BYTE2         ; если второй байт ('Y')
        JP      PO,AFD73        ; если третий байт
        LD      A,C             ; четвёртый байт
Но если Вы вспомните, чем отличается Z80 от КР580, то станет ясно, что мой код правильный и эффективный, а оригинальный вариант кода от авторов РК86 работает только на КР580 и виснет на Z80. В заголовке исходника так и написано, что это совместимый с процессором Z80 вариант.
Paguo-86PK wrote:
у i8080 набор команд скуднее, но есть возможность фиксить циклы доступа к стеку, а у z80 команд больше, но он сигнализирует лишь о регенерации ОЗУ и цикле M1.
У КР580 есть кроме 12 недокументированных команд ещё штук 7 документированных, но абсолютно бесполезных команд пересылок. И КР580 позволяет легко отлавливать эти команды и переключать ими в железе всё что угодно, считая их префиксами и постфиксами.

Вот как я в 1987 году собирался эмулировать Z80 на КР580. Ставим 556РТ4 у которого 8 адресных входов, заводим на них шину данных. РТ4 служит дешифратором для отлова кодов 12-ти недопустимых команд КР580, что коды Z80. Когда код команды совпадает с одной из 12 команд Z80, то сигналом с выхода РТ4 взводится триггер и на шину данных в этом маш.такте выдаётся код CALL, а в следующих ещё 2 байта адреса перехода. Отчего процессор делает CALL FF00. Где стоит обработчик Z80 команд. Он берёт из стека адрес возврата, отнимает от него 3 (длина команды CALL) и считывает код Z80 команды. Затем уходит на процедуру эмуляции этой команды Z80.

В DEC-процессорах 1801 был такой же механизм позволяющий на слабом процессоре прогонять программы более развитого процессора TI11. Когда 1801 встречал недокументированную команду, он делал TRAP и уходил на процедуру её эмуляции. Это немного тормозит, но главное, что программа всё-же работает.

Ничто мешает так же отлавливать код бесполезных команд типа 'LD A,A' и по ним включать другие банки ОЗУ, что Вы и хотите, т.е оперативно менять архитектуру. А в макроассемблере просто добавляем макрокоманду. Я так понял, что Вы хотите аппаратно эмулировать префикс MB процессора КР580ВМ1, чтобы одна команда действовала на другую банку ОЗУ.

Отлавливая код команд можно на процессоре КР580 с'эмулировать систему команд более прогрессивного украинского процессора КР580ВМ1 (я такой CPU сдуру не купил в 1992, когда предлагали, - надо было тогда купить их пару сотен штук а сейчас продать за $100 винтажным коллекционерам, стал бы миллионером).

В украинском процессоре КР580ВМ1 есть два префикса MB (код $28) и RS (код $38), которые будучи поставленными перед некоторыми командами меняют их действие. Префикс RS (Register Set) приводит к тому, что все команды с регистрами HL относятся не к основной паре регистров HL, а к дополнительной паре HL (называемой H1L1). А префикс MB (Memory Bank) на время всего одной команды переключает текущий банк ОЗУ на второй банк (т.о второй банк можно использовать только для хранения данных). Строго говоря, теоретически есть ещё префикс CS (Carry Set), который имеет тот же код $28, что и префикс MB. Он добавляет/отнимает у результата в следующих за ним командах DSUB, DAD и DCMP флаг CY.

Но коды $28 и $38 несовместимы с Z80 (т.к в нём это JR-команды), а вот использование в качестве префиксов кодов бесполезных команд не нарушает совместимости с Z80 (точнее не лишает двух JR-команд).


Last edited by barsik on 19 Dec 2019 09:47, edited 4 times in total.



19 Dec 2019 09:21
Profile
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
B общем, этими выходными основательно занялся своей прошивкой и устранил пару багов.
Теперь «ЦИРК» и «КСОНИКС» работают корректно, а также и «ВУЛКАН» теперь играбельный.
Ещё сильнее ужал код, выбросив лишние команды и добавив заглушки.

После холодного старта МОНИТОР заглушает последовательность Esc с любым символом, отличным от «Y». :oidea:
Теперь код 1F очищает экран и делает дефолтный вьюпорт - 64×25, отчего «КСОНИКС» нормально себя ведёт. :idea:
Но также и Esc+1F поддерживается для очищения оконной области без изменения вьюпорта. Именно так и нужно очищать окошки… :exclaim:

P.S.: В общем, время свободное направил на бинарный труд и будто бы выиграл… :roll:


Attachments:
File comment: Windows'86РК - исправленный
Windows86.zip [4.26 KiB]
Downloaded 53 times
12 Jan 2020 10:18
Profile WWW
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
Ктo хоть чуточку знаком с процессором 6502, знает его краткую и причудливую мнемонику с очень краткой записью.
Так, вместо «MOV X,A» инженеры сократили обозначение до «TAX».
Давно я задавался вопросом применения подобного же подхода и к процессору i8080, так как в принципе его «STA» и «LHLD» не так уж концептуально далеки…

Сегодня я реализовал это.
Правда, вместо «TAM» за «MOV M,A» я использовал ещё более краткую форму - «MA», чтобы дампом вместо хекс-кода выводить эту «недо-мнемонику»…

Не буду тут занудствовать деталями, а просто выкладываю два скриншота.
Кому интересно - сам вникнет в логику…


Attachments:
File comment: NeDoDisAssembly
Dump_TinyCode.png
Dump_TinyCode.png [ 42.03 KiB | Viewed 1260 times ]
File comment: Классический дамп
Dump_Classic.png
Dump_Classic.png [ 41.19 KiB | Viewed 1260 times ]
15 Jan 2020 16:03
Profile WWW
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
Задумaлся над применением картриджа, как у NES, который мог бы вставляться в панельку оригинального РФ2…
Теоретически, если добавить парочку логик, то в области F800…FFFF можно разместить ПЗУ до 512 Кб из 256 страниц по 2 Кб. Линейно же, каждые 2 Кб должны повторяться JMP-командами, чтобы не разрушать API - F800…F834. А остальное содержимое может иметь произвольное конкретное назначение.
Так, директивы («M», «D», «I», «O», «G» и т.д.) не будут раскиданы по разным адресами в области 2 Кб, а будут иметь одну точку входа, но на разных страницах. А буква - лишь выбирает страницу. Причём, список директив можно расширить…
  • «A» - Ассемблер
  • «B» - BASIC
  • «E» - Emu80 (отладчик)
  • «H» - Help-страница
  • «J» - Java / C / C--
  • «K» - Калькулятор (mini-excel)
  • «N» - Net/Modem/Fido
  • «P» - Pascal
  • «Q» - Quick-DOS
  • «V» - Video-Test
  • «W» - Редактор WELL
  • «Z» - Zyxel (терминал работы с модемом)
И это - лишь 26 страниц по 2 Кб!
Тем самым, в БЕЙСИК под все токены можно выделить несколько страниц.

Конечно, сам эмулятор можно как-то отмодифицировать, чтобы область F800…FFFF стала страничной.
А также - продумать технику переключения страниц, так как на панельке сигнала ЗАПИСИ нету, а тянуть отдельный проводок было бы не очень хорошо…

Как вариант - ячейки FFF0…FFFF чтением заносят младшие 4 бита адреса в сдвиговый регистр страницы. А перенос кода страницы из сдвигового в активирующий - FF00…FFEF.

Для наглядности - просто приведу пример кода:
Code:
; Аккумулятор - код страницы
Page_Select:
   PUSH   PSW
   PUSH   H
   MVI   H,0FFh
   CALL   Page_Switch
   POP   H
   POP   PSW
   RET
Page_Switch:
   PUSH   PSW
   RRC
   RRC
   RRC
   RRC
   CALL   Page_Nibble
   POP   PSW
Page_Nibble:
   ORI   0F0h
   MOV   L,A
   CMP   M
   RET
Пример вызова подпрограммы печати байта:
Code:
   MVI   A,015h   ; Странница подпрограммы F815
   CALL   Page_Select
   MOV   A,M
   CALL   0FF00h   ; Вызов подпрограммы
Следует запоминать ещё и историю переключения страниц в стеке для обратного возврата. Но сам принцип вполне прост и понятен… :mrgreen:


Attachments:
File comment: Схема картриджа на ПЛМ
rk86-super-cartridge.png
rk86-super-cartridge.png [ 80.42 KiB | Viewed 1221 times ]
File comment: Общее представление картриджа эскизом
rk86-cartridge.png
rk86-cartridge.png [ 82.44 KiB | Viewed 1223 times ]
16 Jan 2020 12:28
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
Задумaлся над применением картриджа, как у NES, который мог бы вставляться в панельку оригинального РФ2… можно разместить ПЗУ до 512 Кб из 256 страниц по 2 Кб.
Если идея введения страничного ПЗУ F800 в окне 2 кб приемлема (не идеально для программирования, но проще в аппаратной доделке на уже готовом изделии), то идея введения картриджа в окне 2 кб - неудачна. Что мешает ввести окно в 16 кб или даже 32 кб. Коду картриджа лучше работать из ПЗУ. Не хочется называть обычную страничность F800 картриджем.

Страничность ПЗУ это лобовое расширение ПЗУ F800 в ОРИОНЕ. Я сам это делал как минимум 3 раза (я имею ввиду программы). А впервые я это сделал в ОРИОНЕ в самом начале 1991 года. Потому-что в ОРИОНЕ ПЗУ всего 2 кб, как и в РК, но в ОРИОНЕ её родная ОС (называемая ORDOS) в 2 кб должна по сбросу грузиться или с МГ-ленты или автоматически из ROM-диска. Потому, если для РК доп.ПЗУ в 2 кб не нужны, то в ОРИОНЕ это необходимость, иначе надо каждый раз грузить ORDOS с МГ-ленты, что при серъёзном использовании машины вообще не годится (т.к ORDOS при отладке программ гибнет и её надо снова грузить с МГ-ленты). А платы ROM-дисков ещё ни у кого не было, они появились в продаже лишь к лету 1991.

Помыкавшись пару месяцев без ROM-диска, я применил в ОРИОНЕ РФ2 на которую уже ранее была напаяна панелька на 24 ноги (так у меня было в Специалисте, там так в 2 этажа у меня стояло 6 ПЗУ РФ2). В нижнуюю ПЗУ прошил чуть переделанный Монитор-3 ОРИОНА, который по сбросу загружал ORDOS на B800 из второй РФ2 во второй странице (страницы комммутировал бит запасного порта). Получилось по сути расширение ПЗУ до 4 кб самыми простейшими средствами без вторжений в печ.плату и без расхода доп.микросхем.

И когда позднее в 1991 году я выпускал партию печ.плат для установки в ОРИОН процессора Z80 (называлась Z80CARD-I), то в ней как раз и использовалась эта идея двухстраничного ПЗУ F800 за счёт напайки на РФ2 панельки или даже самих двух РФ2 в два этажа (тогда нижнюю РФ2 не очистить УФ-лучами). Для такого расширенного ROM-BIOS был RAM-монитор (называемый М3-EXT, который правда из-за отсутствия у людей такой доработки получил гораздо большее распространение в виде RAM-версии, что менее удобно, т.к конфликтует по месту загрузки с ORDOS), а известные программисты Adelaide в 1992 написали резидентный отладчик для Z80. В платах Z80CARD-II двух этажей РФ2 уже не поддерживалось (к тому времени в этом уже не было нужды, печ.платы ROM-дисков расространились и были у всех, давая не 2 доп.кб, а 64). Но у меня на всех моих 5 платах ОРИОНА всегда стояло как минимум две страницы ПЗУ.

В 1994 г. я странслировал Shadowy-монитор, который прошивался уже не в РФ2, а в 27256 (окно то же) и поддерживал загрузку резидентных программ из 27256. В монитор добавлялась команда @n, где n - номер программы (обычно, отладчик, УФ-прошиватель, бейсик, редактор-ассемблер и холодный загрузчик с дисковода).

Потому на 3-х из 5 моих плат ОРИОНА на месте +12В преобразователя рядом с ПЗУ РФ2 стоит вторая панелька на 28 ног. Но последние 23 года я использовал как раз только двухэтажные РФ2 (т.к они вечные, тогда как 27256 портятся после нескольких десяткох перешивок). У меня и сейчас есть все исходники для двухэтажного ПЗУ и мой эмулятор ОРИОНА из 1998 года поддерживает именно две ПЗУ РФ2 в окне F800 (второе ПЗУ называется SHADOWY.DAT). Две ПЗУ F800 нужны для эмулятора РК86 на ОРИОНЕ (скорость эмуляции 150 КГЦ, но половина РК-игр играбельна), т.к при эмуляции в области F800 должно стоять именно ПЗУ РК (точнее РК-совместимое), а не ОРИОНА и переставлять их можно только программно.

Это я к тому, что когда в ПЗУ не мощный ROM-BIOS, а оно служит лишь для резидентного хранения, то без разницы, что окно доступа к ПЗУ маленькие. Хотя с картриджем для игровых консолей не так. Обычно программа работает в ПЗУ самого картриджа, а продвинутые картриджи Денди содержат и доп.ОЗУ в котором тоже программа работает). Но для РК другое дело, для него нет программ не умещающихся в 28 кб ОЗУ и не придвидится программ работающих из ПЗУ. Потому для РК это без разницы.

Картридж в окне C000...FFFF (или 8000...FFFF) и даже работа прямо из него возможна потому, что в ВГ75 на C000 и ВТ57 на E000 программа лезет (и то только граф.программа, меняющая число строк) только один раз, когда ставит режим ВГ75. А т.к делает установку режима и лезет в ППА клавиатуры или ПЗУ F800 ваша программа, то кто мешает ей скинуть фрагмент кода в ОЗУ и оттуда один раз записать байты режима в ВГ75 и ВТ57, а затем включить в окне выше C000 картридж и прогонять там сплошной код игры?
Paguo-86PK wrote:
каждые 2 Кб должны повторяться JMP-командами, чтобы не разрушать API - F800…F834
А вот эта мысль неудачна. Зачем дублировать стандартные входы?

Если в страничном ПЗУ просто переключаются разные версии 2-х килобайтовых мониторов, то там и эти входы есть и эти мониторы не переключают банки. А если используется свой уже изначально страничный ROM-BIOS, то короче удобнее специальный код межбанкового вызова подпрограмм. Ведь исполнительный код (например, п/п-мы вывода F809) всё равно остался в банке 0.

В ранних версиях я имел межстраничный вызов крошечным фрагментом в свободном ОЗУ F3F0...F3FF (в ОРИОНЕ это кусок ОЗУ отведённый на расширение именно ROM-BIOS, хотя нашлись уроды, которым и для программ в ОЗУ понадобилось эти ячейки использовать просто как рабочие, хотя для этого они имели ещё 60 кб других ячеек, из-за чего улучшенные версии ПЗУ висли на программах идиотов). Для РК такой угрозы нет, кто мешает занять 7FF4...7FFF?

Код межстраничного вызова в ОЗУ короче (ПЗУ экономится) и один на все страницы ПЗУ. Но из-за уродов на ОРИОНЕ, в версии ПЗУ из двух РФ2 которым я пользуюсь уже 25 лет для межбанковых переходов и вызовов используется вот такая конструкция:

 
В банке 0:
Code:
; ===============================================

R1CALL: EX      AF,AF
        LD      A,81H
        OUT     (0FCH), A       ; этот же код в банке 1
        EX      AF,AF
        LD      IY,R1_BAK       ; адрес возврата
        PUSH    IY
        JP      (IX)            ; в банке 1 здесь тоже стоит JP (IX)

; -------------------------------------------------

R1_BAK: EX      AF,AF
        LD      A,1
        OUT     (0FCH), A       ; этот же код в банке 1
        EX      AF,AF
        RET

; -------------------------------------------------

PROMPT: defb    13,10,'->',0

IX_JMP: EX      AF,AF
        JP      (IX)            ; в банке 1 здесь тоже стоит JP (IX)



В банке 1:
Code:
; ----------------------------------------------

if      $       gt R1CALL-6
        if1
          .printx *     R0CALL over ! *
        @OVER1  EQU     $-(R1CALL-6)
        endif
        @FREE1  EQU     0
   else
        @FREE1  EQU     R1CALL-6-$

        rept    @FREE1
        defb    0
        endm
endif

; ----------------------------------------------

LDHL1:  LD      A,0FFH          ; 2
LD_HL:  LD      IX,@LD_HL       ; 4

R0CALL: EX      AF,AF
        LD      A,0
        OUT     (0FCH), A       ; этот же код в банке 0
        EX      AF,AF
        LD      IY,R0_BAK       ; адрес возврата
        PUSH    IY
        JP      (IX)            ; в банке 0 здесь тоже стоит JP (IX)

; -------------------------------------------------

R0_BAK: EX      AF,AF
        LD      A,0
        OUT     (0FCH), A       ; этот же код в банке 0
        EX      AF,AF
        RET

; -------------------------------------------------

R0_JMP: EX      AF,AF
        LD      A,0
        OUT     (0FCH), A       ; этот же код в банке 0
if      $ ne    IX_JMP
        if1
          .printx *     IX_JMP shifted ! *
        endif
endif
        EX      AF,AF
        JP      (IX)            ; в банке 0 здесь тоже стоит JP (IX)

; -------------------------------------------------
YCONIN: LD      IX,AF803
        JR      R0CALL
; -------------------------------------------------
YCOUTC: LD      IX,AF809
        JR      R0CALL
; -------------------------------------------------
YHEX_A: LD      IX,AF815
        JR      R0CALL
; -------------------------------------------------
YCHSUM: LD      IX,AF82A
        JP      R0CALL
; -------------------------------------------------
YRRAM:  LD      IX,AF836
        JR      R0CALL
; -------------------------------------------------
YWRAM:  LD      IX,AF839
        JR      R0CALL
; -------------------------------------------------
YLDBYTE:       
        LD      IX,AF806
        JR      R0CALL
; -------------------------------------------------
YERROR: LD      IX,ERROR
        JR      R0CALL

Я сам уже не помню, но если подумать понять можно, как этот код работает. В обоих банках ПЗУ есть синхронные входы для вызова п/п-ммы в другой странице и синхронные выходы для возврата. В одной странице стоит OUT, что переключает страницы ПЗУ, в следующей команде оказываемся уже в другой странице, где стоит продолжение программы.
Paguo-86PK wrote:
сам эмулятор можно как-то отмодифицировать, чтобы область F800…FFFF стала страничной.
Какой у Вас эмулятор? Для РК86 предпочтительнее EMU80, т.к РК-КНГМД не поддержан в EMU. Я сам сейчас не использую, но знаю (т.к ранее уже делал) как составить страничность и в другом эмуляторе, что называется EMU.

Для страничности ПЗУ F800 при EMU80 нужен вот такой код. Здесь 8 страниц (ясно как сделать сколько надо), которые переключаются по записи в тот же адрес окна ПЗУ). Это удобнее всего, т.к после установки 555 ИД7 для РК-КНГМД по схеме из ж.Радио 01.1993, это единственный свободный чип селект на запись. Переключение страниц ПЗУ размером по 2 кб в окне F800...FFFF тут управляется записью чисел 0...7 (в адрес окна ПЗУ F800...FFFF). При нужде подставьте иной диапазон адресов области для переключателя.

 
Code:
.
@ROM_0 = "rk86/rom0.DAT"
@ROM_1 = "rk86/rom1.DAT"
@ROM_2 = "rk86/rom2.DAT"
@ROM_3 = "rk86/rom3.DAT"
@ROM_4 = "rk86/rom4.DAT"
@ROM_5 = "rk86/rom5.DAT"
@ROM_6 = "rk86/rom6.DAT"
@ROM_7 = "rk86/rom7.DAT"

Rom rom0 = @ROM_0,0x800
Rom rom1 = @ROM_1,0x800
Rom rom2 = @ROM_2,0x800
Rom rom3 = @ROM_3,0x800
Rom rom4 = @ROM_4,0x800
Rom rom5 = @ROM_5,0x800
Rom rom6 = @ROM_6,0x800
Rom rom7 = @ROM_7,0x800

AddrSpaceMapper rom = 8
rom.page = 0, &rom0
rom.page = 1, &rom1
rom.page = 2, &rom2
rom.page = 3, &rom3
rom.page = 4, &rom4
rom.page = 5, &rom5
rom.page = 6, &rom6
rom.page = 7, &rom7

PageSelector romPageSelector
romPageSelector.mapper = &rom

Translator romSelectorTranslator = &romPageSelector
romSelectorTranslator.writeAndMask = 0x7

addrSpace.writeRange = &romSelectorTranslator, 0xF800, 0xFFFF

addrSpace.writeRange = &dma, 0xE000, 0xE7FF
addrSpace.readRange = &rom, 0xF800, 0xFFFF
.


- - - Добавлено - - -

Ладно, зачем трахаться редактируя конфиг, если я это уже сделал. Вот просто возьмите этот эмулятор в котором конфиг, которым я пользуюсь. Этого конфига Вам хватит на все случаи совместимого развития РК86 (версию самого эмулятора можете заменить на более свежую, если у Вас не Win XP). Таймер ВИ53 на вывод звуков я убрал, а то он стоял не пойми где, мешался (добавить не проблема), а в реале ВИ53 пищит по сбросу случайными тонами, если его программно не инициализировать).

Два идентичных конфига Z80 / КР580, отличаются только строкой с CPU. Есть ПЗУ 9000...9FFF с отладчиком (его запуск командой G9000<ВК>), есть 32 страницы доп.ОЗУ по 8 кб в окне A000...BFFF (порт коммутации 8800, а запасной ППА D14 перенесён на 8400) и есть 16 страниц ПЗУ с окном 2 кб (коммутация портом F800). Прерывания, если надо могу добавить. В мониторе доп.директива <B> - загрузка с дисковода. Для реала есть версия ПЗУ, где загрузка дисковода начинается, если удерживать одну из спец.клавиш при нажатии на сброс, но для эмулятора это неудобно, т.к в нём для сброса нужны две руки, а третьей руки у многих нет.

Удобно отлаживать программы используя команду HALT. В исходнике её вставляете в том месте до которого программа прогоняется без ошибок и по запуску странслированной программы вылетаете в этом месте в отладчик (чтобы продолжить трассировку надо забить код 76 HALT-а нулём в окне 'A', или можно перешагнуть HALT просто увеличив регистр PC на 1, - к сожалению, команду U для прохода через команду HALT разработчик Pyk не добавил). Командой Z переключаете мнемоники, если кто привык к иным (жаль, что это не задаётся в конфиге, из-за чего при КР580 приходится переключать непривычную мнемонику).


Attachments:
Emu80.part03.rar [1.34 MiB]
Downloaded 52 times
Emu80.part02.rar [1.34 MiB]
Downloaded 51 times
Emu80.part01.rar [1.34 MiB]
Downloaded 54 times


Last edited by barsik on 17 Jan 2020 11:02, edited 11 times in total.

16 Jan 2020 23:58
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Что-то [spoiler-ы] как-то криво вставлены... :-?

_________________
iLavr


17 Jan 2020 00:04
Profile
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Эй, не надо быстро комментировать. Я же сам это увижу и исправлю. Сначала на время посмотрите. С первой же попытки никогда не получается. Просто в этом форуме надо писать spoiler=, а в других форумах "знак равно" не требуется. Кто как привык. Я доредактирую посты, те что побольше, ещё 15-20 минут после выкладки, исправляя грам.ошибки и опечатки.


17 Jan 2020 00:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
barsik wrote:
Эй, не надо быстро комментировать. Я же сам это увижу и исправлю. Сначала на время посмотрите. С первой же попытки никогда не получается.
"...не надо быстро комментировать"? :o Смешно... :wink: медленно надо комментировать? :roll:
А насчет с какой попытки не получается - так и хочется вспомнить поговорку про "плохого танцора... :lol:

 тест спойлера
Плохому танцору вечно что-то мешает... То время не то, то попыток мало... :-?
Неплохие танцоры в подобной ситуации пишут одно слово:"исправил".
Могут ещё слово "Спасибо" добавить - но это уж очень хорошие танцоры... :ewink:

_________________
iLavr


17 Jan 2020 01:27
Profile
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Не было ещё такого, чтобы я увидел ошибку и не исправил, даже крошечные ошибки стараюсь исправить. В отличие от многих.

Особенно много таких на форуме ZX-PK.ru, где некоторые пишут безобразно и неуважительно к читателям. Все ошибаются и опечатываются, но они мало того, что пишут на англо-молодёжно-уголовном суржике страшно уродуя даже его, но и ленятся исправить просто режущие глаза опечатки. Непонятно что читают иностранцы переводя такую бредятину гуглом. В иностранных форумах такого издевательства не бывает. Да и на отечественных форумах, где модераторы культурные и ответственные люди, запрещено сознательно уродовать слова.

Любому ясно, что ваш первый пост ни о чём. Без него и мой пост был бы тем же и топик стартер бы не огорчался засорением темы и админу не пришлось бы чистить тему от флейма.

Я обычно говорю спасибо, когда есть за что. Хотя за столь крошечные мелочи это не требуется, даже, если есть реальная помощь. Это же не большое усилие нацарапать несколько слов. И даже за много слов, если благодарить за комменты, то форум засорится.

И уж если о вежливости, то я уже просил одного "очень хорошего танцора" уважать читателей и не нажимать <Enter> в абзацах (ведь у всех выводится разное число символов в строке), отчего его посты длиннее двух строк выглядят неприятно читаемой лесенкой. На что, естественно был получен грубый ответ с прямым текстом "Парниша, не учите меня жить, на остальных людей мне плевать"".


17 Jan 2020 02:32
Profile
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
barsik wrote:
Если идея введения страничного ПЗУ F800 в окне 2 кб приемлема (не идеально для программирования, но проще в аппаратной доделке на уже готовом изделии), то идея введения картриджа в окне 2 кб - неудачна. Что мешает ввести окно в 16 кб или даже 32 кб. Коду картриджа лучше работать из ПЗУ.
Кажeтся, я не достаточно прозрачно обрисовал условие задачи расширения… :roll:
Paguo-86PK wrote:
Задумaлся над применением картриджа, как у NES,
который мог бы вставляться в панельку оригинального РФ2
То есть, дано - панелька под РФ2 (D17: D0…D7, A0…A10, CS, OE). Никаких других проводков ниоткуда подтягивать строго не рекомендуется. Так как суть задумки в том, чтобы выдернуть из панельки оригинальное ПЗУ и воткнуть свой псевдо-картридж.
Иными словами: Дизайн апгрейда для домохозяек… :idea:

Тем самым, окно - 2 Кб (F800…FFFF), зеркала - 6 Кб (E000…E7FF, E800…EFFF, F000…F7FF).
Никаких кнопочек и тумблеров - на ПЗУ не бывает тумблеров! :no:

Вот с этим и нужно работать!

Эскизняк
Так как в оригинальном РАДИО-86РК процессор 580ИК80А и 573РФ2, то условия прозрачны и жёстки…

У процессора коды DD, ED, FD - зеркала CD.
Тем самым, начальную область ПЗУ можно прописать вот так:
Code:
     .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
F800 C3 CD FD FD FD FD FD FD FD FD FD FD FD FD FD FD
F810 FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD
F820 FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD
F830 FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD
F840 FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD FD
F850 FD FD .. Таблица адресов подпрограмм API ... ..
F8?0 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
F8E0 .. .. .. .. .. .. .. .. .. Конец таблицы API ..
Где обслуживающий код может быть примерно таким:
Code:
    ORG  0FDCDh
Monitor_Start:
    . . .
    ORG  0FDFDh
Monitor_API_Entry:
;;;;;;;;;;;;;;;;; FDFD
    XTHL        ; Извлекаем индекс вызываемой подпрограммы
    PUSH PSW    ; Сохраняем слово АЛУ
    MOV  A,L    ; Индекс смещён на три байта
    ADD  A      ; Умножаем его вдвое
    ADI  04Ah   ; Потому начало таблицы не F850, а F84A
    MOV  L,A    ; Подготавливаем указатель
    MOV  A,M    ; Считываем младший байт адреса
    INX  H      ; Осталось лишь прочитать
    MOV  M,H    ; Старший байт адреса
    POP  PSW    ; Восстановить слово АЛУ
    XTHL        ; Восстановить HL из стека
    RET         ; И передать управление API функции
;;;;;;;;;;;;;;;;; FE09 - 13 байтов
Фокус в том, что в отличии от PC/M-80 или DOS код подфункции не передаётся через регистр, а задаётся конкретным адресом - классика РЛК. Но, в данном случае подпрограммы вызываются не адресами кратными трём, а более компактно:
Code:
    CALL 0F801h ;
    CALL 0F802h ;
    CALL 0F803h ; Ожидание нажатия клавиши
    CALL 0F804h ; Ожидание нажатия клавиши с эхом на экран
    CALL 0F805h ; Ввод строки символов с клавиатуры в буфер
    CALL 0F806h ; Ввод байта с магнитофона
    CALL 0F807h ; Ввод байта с COM-порта
    CALL 0F808h ; Вывод символа на экран (регистр A)
    CALL 0F809h ; Вывод символа на экран (регистр C)
    CALL 0F8..h ; Всего число функций расширилось до 80
    CALL 0F84Fh ; Завершение программы с кодом выхода


Нюансы
Если картридж оснащать ПЛМ, то механизм переключения страниц можно придумать несколько сложнее…
Так, если вход осуществляется аппаратно - через F800, то этот адрес (ПЗУ:0000) сбрасывает регистр страницы и мы всегда по сбросу гарантировано попадём в оригинальный МОНИТОР.
Так как директивой «DF800,FFFF» выдаёт дамп всех ячеек последовательно, нельзя допустить, чтобы банальный вывод дампа вдруг переключил страницы :exclaim:
Но, так как процессор всегда считывает данные из памяти в порядке инкремента, в логику ПЛМ можно добавить условие переключения страницы именно в исключительном случае - считывание двух последовательных ячеек в порядке декремента (как в x86 командой LODSB после STD).
Программно трюк реализует либо через код в ОЗУ, либо чтением наперёд:
Code:
    LDA  Ein_Moment
Ein_Moment:


Last edited by Paguo-86PK on 17 Jan 2020 09:00, edited 2 times in total.



17 Jan 2020 08:35
Profile WWW
Fanat

Joined: 10 Mar 2018 13:50
Posts: 50
Reply with quote
что-то можно опробовать? Перепрошить штатную РФ2 и проверить?


17 Jan 2020 08:38
Profile
Maniac
User avatar

Joined: 12 Apr 2011 21:43
Posts: 217
Location: Tashkent
Reply with quote
Shumadan wrote:
что-то можно опробовать? Перепрошить штатную РФ2 и проверить?
Eсли Вы про «Windows'86», то можно попробовать прошить её в РФ2 (запасную) и погонять там программы все…
(Учтите только, что код Windows'86 здесь мой может быть уже устаревшим, так как в свободное время я его дорабатываю…)

Ниже я представляю последнюю работающую версию…


Attachments:
File comment: Особенности:
Директива «G<start>,<break>» не портит ячейки отлаживаемой программы;
Неверная «Esc-последовательность» по-умолчанию сигнализируется «звонком»

Windows86-ROM-Dump.zip [1.36 KiB]
Downloaded 48 times


Last edited by Paguo-86PK on 17 Jan 2020 09:31, edited 2 times in total.

17 Jan 2020 08:57
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 208 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 14  Next

Who is online

Users browsing this forum: Bing [Bot], Majestic-12 [Bot] and 2 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.