nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 17:08



Reply to topic  [ 20 posts ]  Go to page Previous  1, 2
(Без)умная идея 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
Так, что всё, что требуется сделать, чтобы вообще не возиться с клавиатурой, - это перехватывать точку INKEY (узнать её адрес можно из PRN листинга трансляции).

При этом (т.е без полноценной эмуляции клавиатуры) будут работать почти все игры адаптированные от РК86, т.к они обычно читают клавиатуру вызовом п/п-ммы C81B.

Откровенно говоря, это не совсем так.
Довольно большое количество оригинальных программ управляли портом клавиатуры и опрашивали
его сами.
Ну и C81B опять же было не во всяком системном ПЗУ.

Ну а игры от РК86 на "Специалисте" это несколько нонсенс - для чего тогда у "Специалиста" графика
384х256 точек, которой не было ни у РК86, ни у Микроши, как и у всех им подобных?

_________________
iLavr


28 Apr 2018 07:17
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Lavr wrote:
Откровенно говоря, это не совсем так. Довольно большое количество оригинальных программ управляли портом клавиатуры и опрашивали его сами.

Конечно. Почти все приличные игры написанные специально для Специалиста клавиатуру опрашивают прямым доступом к ППА клавиатуры. Я потому и написал, что только игры от РК будут работать при такой упрощённой эмуляции клавиатуры.

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

Проблема была в том, что п/п-мму INKEY (аналог эр-кашной п/п-ммы F81B) для Специалиста не стандартизовали, хотя физически она есть. А т.к игры в подавляющем большинстве писались так, чтобы работать только при наличии одного ПЗУ, т.наз. загрузчика (не требуя на C800 наличия эр-ка подобных входов), то по причине отсутствия в загрузчике п/п-ммы "чтения на лету" (F81B), и приходилось писать свой опрос матрицы.

А вот игры от РК конвертировались уже почти всегда с использованием входов C800, потому нужды в собственном опросе не было. И даже РК-игры, в которых был собственный опрос с бегущим нулём, приходилось переделывать на стандартный опрос с использованием C81B (т.к без наличия диодов в схеме матрицы сканирование нулём не работало).

Кстати, чтобы введя ПЗУ C800 не требовалось переделывать РК-программы, достаточно было применить 2 диода, чтобы по адресу F800...F8FF читалось ПЗУ C800...C8FF.

Image

Но в данном контексте речь шла о том, чтобы для начала получить хотя бы частично работающую версию этой конструкции. Всегда полезно, когда есть промежуточные успехи (добавляет энтузиазм). Глупо стремиться сразу всё сделать хорошо и идеально. Это как при разработке программы. Сначала на большинство функций ставятся бутафорские заглушки или имитация. Благодаря чему отлаживается ядро программы, основная петля. А затем уже бутафория заменяется на реально работающие процедуры.

Lavr wrote:
Ну и C81B опять же было не во всяком системном ПЗУ.

Теоретически да, но на практике нет. Да, игры в основном грамотно делали так, чтобы они работали при наличии только загрузчика (т.к не все были настолько богаты, чтобы позволить себе истратить лишние 3-5 рублей на покупку второй 573 РФ2). Но я и предлагал перехватывать точку внутри загрузчика, а не вход C81B.

Но для системных программ это не так. Потому что, что ни говори, а базовый загрузчик Волкова/Зверкова имеет три фатальных недостатка и множество мелких.

Во-первых, C037 ради крошечного ускорения выводит по OR без очистки знакоместа. Таким образом при выводе на нечистый экран на экран выводится просто мусор. Знакоместо очищает только Забой. Потому п/п-мма C809, чтобы не писать полностью новую процедуру вывода символа делает так. Она выводит забой, затем возвращает курсор на место и затем передает управление на C037. Потому системные программы, чтобы вывод был таким же как во всех остальных компьютерах в мире вызывают C809, а не C037.

Во-вторых, вообще нет ролика экрана. По выводу ВК в последней строке экрана, курсор перескакивает на первую строку. Потому Орлову пришлось писать свой ролик для подпрограммы C809 (причём он сделал его тормозным, т.е без использования стека).

Ясно, что для системных программ такое поведение неприемлемо. Потому все системные программы (кроме самого раннего бейсика) используют и требуют наличия ПЗУ C800 с орловским (или совместимым) монитором. Таким образом ПЗУ C800 это не монитор, а тоже ROM-BIOS, т.к содержит стандартные входные точки.

Получается, что если хочешь только играть в игры, тебе достаточно ПЗУ в 2 кб. Но если нужны системные программы, то без ПЗУ C800 не обойтись. Потому только самые несерьёзные пользователи Специалиста не имели ПЗУ C800.

Кстати, третий недостаток п/п-ммы C037 загрузчика в том, что она не обрабатывает искейп-коды. И даже прямое позиционирование курсора отсутствует, что вообще нонсенс. Отпозиционировать курсор можно только некорректно залезая в служебные ячейки ПЗУ POSX,POSY, но которые в свою очередь неудобные для программиста, т.к не абсолютные в значениях координат, а в виде абстрактных экранных данных.

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

В четвёртых, не обслуживаются упр.коды 8A, 8B позволяющие включить/выключить вывод символов в инверсии, что снова заставляет нагло напрямую лезть в служебные ячейки ПЗУ.

Все эти и другие ошибки базовых ПЗУ были исправлены в более грамотных версиях ПЗУ, причём при сохранении совместимости. Например, в ПЗУ C800 совмещены 18 стандартных и более 20 недокументированных (хотя иногда сдуру кое-кем используемых) входов в п/п-ммы ПЗУ.


Last edited by barsik on 28 Apr 2018 09:05, edited 5 times in total.



28 Apr 2018 08:27
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
Кстати, чтобы введя ПЗУ C800 не требовалось переделывать РК-программы, достаточно было применить 2 диода, чтобы по адресу F800...F8FF читалось ПЗУ C800...C8FF.

Был очень хороший вариант системного ПЗУ от кооператива из Барнаула, где по адресу F800
было ПЗУ, дублирующее вызовы, характерные для РК-86: F803, F806, F809 и т.д.
А С81В никакого не было...

Эту идею потом подхватили в RAMFOS (кстати, многое списали из DDT SP-580) они уже дублировали
и те и другие адреса: F803=С803, ... и т.д. Хотя и не все.

А вот 580ВВ55 сидела на разных адресах.
Так что подзапутана была эта проблема в "Специалисте"...

Как мне кажется, и как тут уже писали - если делается эмулятор аппаратный, то он должен поддерживать
имеющийся софт, а не софт же править под очередной эмулятор?

_________________
iLavr


28 Apr 2018 08:48
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 584
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
heavy wrote:
- только графический режим 384x256 (как у Специалиста), но адресация по-другому - вертикальными столбиками по 8 бит (точек) - будет удобно рисовать любые шрифты (даже разно-ширинные)

Странно, что никто не отреагировал на этот абзац.

Режим, когда экранный байт выводится не по горизонтали, а по вертикали никогда и нигде (во всём мире) ещё не использовался. Так работают принтеры (т.е годятся принтерные шрифты). Возможно это можно сделать в данном устройстве, где железо реализовано программно. А для реала это очень невыгодно, т.к развёртка в реале идёт по горизонтали, отчего при вертикальном размещении экранного байта частота доступа к ОЗУ увеличивается в 8 раз, т.е нужно 10-ти наносекундное ОЗУ. Потому таких видео-адаптеров в мире нет.

Гораздо более разумна организация экрана точно как у Специалиста (но с размером 512*256). В пользу этого важным доводом является наличие драйверов на все размеры шрифтов (D5, D6, D7, D8) для экрана Специалиста/Ориона (хотя большая часть, в том числе и моих драйверов написана для Z80, т.к драйвер для КР580 тормознее на 10%) и возможность отладки графики в эмуляторах Специалиста и ОРИОНА.

heavy wrote:
графический режим 384x256

Экран шириной в 384 точки очень невыгоден для текста. Байтовый шрифт 8*10 на экране 512*256 не только красивее, но главное, в три раза быстрее, чем шрифт 6*10 на экране в 384*256, несмотря на бОльший размер экрана (это из-за того, что в байтовых шрифтах отпадает чтение экрана, сдвиг фонта и маскирование). Лишь ролик экрана из-за большего размера экрана медленнее. Но для данной конструкции это не играет роли, т.к ролик можно делать встроенной функцией эмулятора на скорости 160 МГЦ.

Потому самым разумным форматом экрана является экран 512*256 с линейной вертикальной организацией точно как в Специалисте.

heavy wrote:
- ядро i8080

Если уж делать подобную конструкцию, основное применение которой - это CP/M, в которой больше программных пакетов для Z80 и наиболее полезные компиляторы требуют именно Z80, то и эмулировать разумно именно Z80. Если нет готового модуля для Z80, то более привлекательным изделие сделает даже частичный Z80, - достаточно добавить к блоку эмуляции 8080 JR-команды, 16-ти битовые SBC и загрузки двойных регистров.

В итоге получится очень простой и дешёвый CP/M-компьютер.


20 May 2018 14:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
barsik wrote:
Режим, когда экранный байт выводится не по горизонтали, а по вертикали никогда и нигде (во всём мире) ещё не использовался.

Почему же не использовался? :o Использовался и весьма популярен в LCD дисплеях типа Nokia 3310 и иже с ним.
Image

_________________
iLavr


20 May 2018 15:47
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 20 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: No registered users and 29 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.