|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024)
Author |
Message |
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 329 Location: Tashkent
|
На практике, практически нигде не встречается дикое сочетание кириллицы и латиницы в одном слове. А вот "Радио-86RK" можно отобразить и как "Радио 86RK" тоже. Да, текст нужно будет предварительно обработать и где надо - вставить E4 (ASCII) или E5 (KOI-8). Текст при этом станет красивее. (В эмуляторе я этот трюк тоже проверил, но скриншот не сохранился.) Для полноценного отображения документального текста эти "псевдо-атрибуты" - просто находка в каком-то смысле. (В играх можно смешивать и тайлы: выбор из 256 тайлов - тоже хорошая перспектива)
|
21 Jan 2024 02:04 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Я подумаю на этот счёт
И всё же - откуда взялась эта схема как будто бы из журнала Радио, а на самом деле нет?
Кто автор?
|
21 Jan 2024 02:13 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 329 Location: Tashkent
|
"Автор" - MS-Paint, но только после многочасовых рукоплесканий мышкой. (Конечно, без многодневных споров с Barsik'ом дело не обошлось и схема необходима была как иллюстрация самой идеи.) P.S.: На своём КР-03 проверить пока руки не доходят...
|
21 Jan 2024 02:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Понятно
|
21 Jan 2024 02:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
| | | | Shaos wrote: На zx-pk.ru мне пояснили, что тут цвет фона ещё заводится, который сохраняется в триггерах и задаётся он с помощью битов LA0, LA1 и LTEN, которые изначально были предназначены для отображения псевдографики - вот что про это написано в книжке "Домашний компьютер": и как можно видеть управлять этими битами из программы не так уж и просто, например есть псевдографика, где LA0 принимает значение 1 во всю высь знакоместа, но вот для LA1 или LTEN такого нет (LTEN вообще подсвечивается либо как курсор внизу знакоместа, либо как часть псевдографики в середине знакоместа) - значит придётся не по одному, а иногда и по 2 псевдографических символа подряд выводить, чтобы сбросить триггер во всех строках знакоместа. Оно работает примерно так: - LA1=0 LA0=1 и HLG=1 сбрасывает все три триггера в 0; - LA1=1 LA0=0 устанавливает триггер R фона в 1; - LA1=1 LA0=1 устанавливает триггер G фона в 1 (одновременно в 1 они могут быть только в средней линии символа псевдографики); - LA1=0 LA0=1 и LTEN устанавливает триггер B фона в 1 (вот это по моим понятиям работать НЕ будет - см. выше почему). | | | | |
Решил я обратиться к первоисточнику (благо у меня имеется интеловский толмуд с описанием всего-всего-всего тех времён) - и таки да, в нашем переводе есть ошибки - не указана 1 для VSP в третьем случае кода 0011 и не указана 1 для LTEN во втором случае кода 1010 плюс тут озвучены все остальные коды (хоть они и бесполезные) Тут горизонтальная линия через всё знакоместа называется "Underline", т.е. подчёркивание - выходит это курсор? Получается уровень курсора надо будет поднять до середины, чтобы оно таки заработало? Это же жутко неудобно... А вот суть схемы вроде бы передана верно (но некоторые гейты другие - типа вместо NOR у наших стоит NAND и NOT после инверсии LA0 и LA1, что то же самое и NAND-ы вместо OR-ов на формирователе строчки псевдографики из кусочков): Вообще наверное можно попроще это сделать - например знакогенератор можно отрезать запретив ему /OE и псевдографику также через буфер можно подавать...
|
21 Jan 2024 03:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Можно сделать так - у меня будет всё также 2 шрифта программно подменяемых в 2-килобайтном ОЗУ знаков/тайлов и активный шрифт всё также будет устанавливаться битом C1 с клавиатурной ВВ55, однако LA0 можно будет задействовать для переключения с основного шрифта на альтернативный и обратно в пределах экрана (по кадровому синхроимпульсу можно сбрасывать этот выбор возвращаясь в изначально выбранный) - команда #F5 может включать альтернативный шрифт, а #F4 - основной (например если изначально был установлен шрифт 0, то после #F5 установится шрифт 1, а после #F4 - опять 0, но если был установлен шрифт 1, то после #F5 установится шрифт 0, а после #F4 - снова 1). Кроме того LA0 может ещё и сбрасывать залипание "полутоновых" фонов (при использовании основного шрифта многократное применение #F4 не будет менять шрифт, но может быть использовано для чего-то ещё - в данном случае для сброса выбранного цвета фона) - так мы убъём всех зайцев одним выстрелом
|
21 Jan 2024 04:04 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 329 Location: Tashkent
|
Из "личных концептуальных размышлений" на тему, как бы я на макетке развёл бы схему РК... - Удаляется D14 совсем, вместо которой ставится панелька под РФ4 (или под РУ8/РУ10)
- Микросхема D20 переносится на плату клавиатуры вместе с D21, что уменьшит число проводов к плате клавиатуры до 16. Правда, придётся добавить буфер, чтобы ВМ80 до ВВ55 мог "достучаться". Соответственного, разъём магнитофона перемещается на клавиатуру
- Микросхемы ПЗУ (Монитора и Знакогенератора) заменяются на РФ4
- К ВГ75 добавляется ТМ2 для поддержки трёх знакогенераторов
- Атрибуты цвета и инверсии - опционально
- Добавляется "аппаратная поддержка табуляции"
Собственно, пункт с "аппаратной поддержкой табуляции" тоже не менее любопытен, но схематических эскизов пока не имеет. Из справочника, так как коды F4-FF ВГ75 не рекомендуется использовать, есть мысль при чтении ПДП вместо них в ВГ75 отправлять 00 (или 1F - тоже "пробел") логической комбинаторикой, но при этом загружать младший ниббл в счётчик для частичного подавления циклов ПДП. То есть, например, если ВТ57 читает из памяти код F6, комбинаторика передаёт в ВГ75 код 00 (или 1F) и загружает в ИЕ7 код 6. Теперь, при каждом запросе от ВГ75 к ВТ57 логика у ИЕ7 подавляет запрос ПДП, а на ВГ75 искусственно выдаёт 00 (или 1F) до тех пор, пока ИЕ7 декрементом не обнулится. Что позволит кодом F6 пропустить 6 символов. Иначе говоря, вместо восьми пробелов в начале каждой строки буфера экрана ставим один код F8 и получаем 8 пробельных символов (противоположность коду F1).
|
21 Jan 2024 04:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
В следующей моей РК-шке клава будет прям на материнке А так-то надо свой SRAM128K дособирать и там навесиком прицепить тайлы без полутонов (пока из ПЗУ)
|
21 Jan 2024 05:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
| | | | Shaos wrote: P.P.S. Вот ещё чего у себя откопал - непомню откуда взял: P.P.P.S. По названию файла через яндекс нашёл первоисточник - это Rokl опубликовал (автор РК-шки на 8085) в 2011 году: https://zx-pk.ru/threads/13148-radio-rk-86-kompyuter-s-protsessorom-1821vm85.html?p=375381&viewfull=1#post375381P.P.P.P.S. На zx-pk.ru мне пояснили, что тут цвет фона ещё заводится, который сохраняется в триггерах и задаётся он с помощью битов LA0, LA1 и LTEN, которые изначально были предназначены для отображения псевдографики - вот что про это написано в книжке "Домашний компьютер": и как можно видеть управлять этими битами из программы не так уж и просто, например есть псевдографика, где LA0 принимает значение 1 во всю высь знакоместа, но вот для LA1 или LTEN такого нет (LTEN вообще подсвечивается либо как курсор внизу знакоместа, либо как часть псевдографики в середине знакоместа) - значит придётся не по одному, а иногда и по 2 псевдографических символа подряд выводить, чтобы сбросить триггер во всех строках знакоместа. Оно работает примерно так: - LA1=0 LA0=1 и HLG=1 сбрасывает все три триггера в 0; - LA1=1 LA0=0 устанавливает триггер R фона в 1; - LA1=1 LA0=1 устанавливает триггер G фона в 1 (одновременно в 1 они могут быть только в средней линии символа псевдографики); - LA1=0 LA0=1 и LTEN=1 устанавливает триггер B фона в 1 (вот это по моим понятиям работать НЕ будет - см. выше почему). P.P.P.P.P.S. Хотя возможно тут суть в том, что LA1 и LTEN могут выдавать 1 на уровне курсора (не одновременно), что будет включать раскрашивание вниз! Получается это не часть строки раскрашивает, а блок экрана во всю ширь с какой-то строки вниз пока не отключат - однако всё равно LA0=1 и LTEN=1 одновременно случиться не могут - значит для установки триггера B надо взять не LA0 из ВГ75, а скажем задержанное в регистре значение из предыдущего символа...
| | | | |
Если пробовать раскрашивать фоны с помощью LA0, LA1 и LTEN, то скорее всего придётся защёлкивать LA0 на триггере, чтобы использовать предыдущее значение в логике (назовём его LA0*): LA0*=0 LA0=0 LA1=0 - нормальная работа системы (классический РК86, где LTEN принимает значение 1 в момент вывода курсора); LA0*=0 LA0=1 LA1=0 - у меня будет переключать шрифт (в зависимости от состояния HGL) и останавливать "залипание" полутоновых фонов, а также гасит все триггеры фоновых цветов (по идее их можно совместить с полутоновыми); LA0*=0 LA0=0 LA1=1 - включает красный триггер в последней строке знакоместа; LA0*=0 LA0=1 LA1=1 - включает зелёный триггер в последней строке знакоместа; LA0*=1 LA0=0 LA1=0 LTEN=0 - нормальная работа системы после кода, сбросившего все триггеры; LA0*=1 LA0=0 LA1=0 LTEN=1 - включает синий триггер в последней строке знакоместа (в предыдущем знакоместе LA0=1 сбросил все триггеры поэтому синюю составляющую надо применять первой); LA0*=1 LA0=1 LA1=0 - ??? (в предыдущем знакоместе LA0=1 сбросил все триггеры); LA0*=1 LA0=0 LA1=1 - ??? (в предыдущем знакоместе LA0=1 сбросил все триггеры); LA0*=1 LA0=1 LA1=1 - ??? (в предыдущем знакоместе LA0=1 сбросил все триггеры); Последние 3 варианта можно под какие-то специальные способы раскраски фона отдать - типа шахматкой, в полосочку и т.д. И по кадровому синхроимпульсу эти триггеры фонов уже сбрасываются (чтобы заливка не перебиралась на начало следующего кадра). P.S. Либо можно отказаться от LTEN вовсе т.к. он также используется для подсветки курсора (подведя курсор к таким кодам можно сломать расцветку, по ошибке включив синюю заливку) - под включение синего триггера можно отдать LA0*=1 LA0=1 LA1=1, а две оставшиеся комбинации можно использовать для заливки шахматкой или скажем прореженной шахматкой... P.P.S. Кстати LTEN ещё можно атрибутом подчёркивания включить! т.е. так наверное будет работать
|
21 Jan 2024 18:53 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 329 Location: Tashkent
|
А каким образом будет переключаться шрифт в Вашей схеме? И сколько символов в наборе будет доступно?
|
23 Jan 2024 06:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Я вот так планирую: Вот только триггеры наверное придётся делать разные - отдельно будут триггеры на глобальный фон и отдельно - триггеры на локальный... P.S. Хотя о чём это я? Я же собираюсь останавливать и глобальные, и локальные фоны одной и той же командой с LA0=1 - значит триггеры одни и те же и для одного, и для другого. P.P.S. Кстати - знакоместо с LA0=1 будет выглядеть как чёрная дырка - наверное надо приделать логику, чтобы в течение этой дырки локальный фон бы продолжался как ни в чём не бывало и обрывался бы в конце этого знакоместа - тогда будет плавненько. P.P.P.S. Не - не будет E4 как чёрная дырка выглядеть - она будет выглядеть как Д с подчёркиванием (если верить эмулятору Emu80) т.к. там сигнал гашения VSP не выдаётся (а E5 будет выглядеть как Е с подчёркиванием да ещё из-за H=1 оно будет раскрашивать предыдущий символ в красный цвет по Толкалину либо в жёлтый по Акименко) - так что придётся своё гашение по LA0 городить аппаратно (самое простое это по ИЛИ объединить VSP и LA0 и пустить далее в схему как VSP) и выход HGLT придётся обнулять при ненулевом LA0, чтобы подкрашивания небыло...
|
23 Jan 2024 10:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Я вот сегодня ещё раз внимательно подумал и представил как будет прописываться шрифт в знакогенератор - 2К ОЗУ отключится от ВГ75 и сдвигового регистра и подключится к шине ВМ80 (либо битом в байте управления, либо по факту записи в адресное пространство E800...EFFF) - в результате экран будет показывать черноту (на самом деле думаю будет виден курсор и вообще любые знакоместа, где атрибут U равен 1 - по идее этого должно быть достаточно, чтобы показывать прогресс бар). А вот если поставить второе 2К ОЗУ, то их можно чередовать, чтобы картинка на экране не пропадала - как раз через C1 клавиатурной ВВ55, а вот уже внутри выбранного ОЗУ можно по E4/E5 переключать половинки! Правда корпусов мелкой логики это займёт неприлично много...
|
23 Jan 2024 19:54 |
|
|
emax
Novelist
Joined: 15 Sep 2014 22:32 Posts: 31 Location: Пермь
|
а может косвенно записывать? на шину данных озу регистр с Z-выходом, а адрес записи задавать аппаратным курсором ВГ75, за кадр - одну ячейку можно записать, 2048/50= 40 сек, долговато получается.
|
23 Jan 2024 22:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22828 Location: Silicon Valley
|
Думаю начну с одной микросхемы ОЗУ 2КБ и буду писать туда прям как есть - байт за байтом. От ВГ75 отрезать и подключать к шине данных буду по сигналу /WR OR /CS_E800 - всё равно запись данных на окончании строба /WR происходит. Процесс заливки на экране буду отображать подчёркиваниями, которые мимо регистра сдвига выводятся, хотя надо прикинуть - временно отрубать видео или пока не залью весь шрифт? Заливка одного байта командой MOV M,A занимает 7 тактов из которых сама запись займёт от силы 2 - это полторы плашки знакоместа? И потом обрамление цикла с INX и передачей управления с проверкой на конец цикла - ещё порядка 20 знакомест? Наверное нестрашно - по экрану просто будет бегать чёрный снег, занимающий 10% площади экрана или меньше Шрифт будет поджатый алгоритмом SHAFF0 - надо прикинуть размер (напомню, что у нас половина 8-килобайтного ПЗУ пустая, но всё равно непожатый шрифт туда класть как-то расточительно). P.S. Склеил оригинальный шрифт РК и первую половинку шрифта Dinobyte как и планировал и прошёлся по ним своим SHAFF-ом: и пересжал с одним из самых редких байтов в качестве ключевого: Получилось 1573 байта или 76% от оригинала. SHAFF1 конечно получше сжимает, но его распаковщика для 8080 у меня ещё нету И для разнообразия сжал инвертированный шрифт (SHAFF1 может сжимать лучше инвертированные данные, если в оригинале было много байт со значениями >=128): Для сравнения ещё сжал LZ4, ZX0, ZX7, MegaLZ, Hrum и Hrust: P.P.S. Надо попробовать ещё раскрашенные шрифты посжимать:
|
23 Jan 2024 22:52 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 329 Location: Tashkent
|
Именно потому я и элементом ИЛИ сигналы VSP и LA0 объединил, чтобы подавить знакогенератор и коды E4/E5 не отображались: Получается "пробел".
|
24 Jan 2024 03:34 |
|
|
Who is online |
Users browsing this forum: No registered users and 11 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
|
|