Радио-86РК на SRAM 128K Alpha (2014) & Beta (2024)

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Радио-86РК на SRAM 128K Alpha

Post by Alikberov »

Shaos wrote:В пределах одной строки? Ну обычный текст где всё в кучу так без обработки не покажешь - надо либо специально текст готовить для такого вывода, расставляя E4/E5, либо на лету обрабатывать на предмет где надо контекст переключить будут вставляться пробелы с переключениями шрифтов типа на входе "Радио-86RK", а отобразится "Радио-86 RK" и т.д. Вобщем полезность сомнительная по-моему...
На практике, практически нигде не встречается дикое сочетание кириллицы и латиницы в одном слове.
А вот "Радио-86RK" можно отобразить и как "Радио 86RK" тоже.
Да, текст нужно будет предварительно обработать и где надо - вставить E4 (ASCII) или E5 (KOI-8).
Текст при этом станет красивее.
(В эмуляторе я этот трюк тоже проверил, но скриншот не сохранился.)

Для полноценного отображения документального текста эти "псевдо-атрибуты" - просто находка в каком-то смысле.
(В играх можно смешивать и тайлы: выбор из 256 тайлов - тоже хорошая перспектива)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Я подумаю на этот счёт

И всё же - откуда взялась эта схема как будто бы из журнала Радио, а на самом деле нет?

Кто автор?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Радио-86РК на SRAM 128K Alpha

Post by Alikberov »

Shaos wrote:Я подумаю на этот счёт

И всё же - откуда взялась эта схема как будто бы из журнала Радио, а на самом деле нет?

Кто автор?
"Автор" - MS-Paint, но только после многочасовых рукоплесканий мышкой. :D
(Конечно, без многодневных споров с Barsik'ом дело не обошлось и схема необходима была как иллюстрация самой идеи.)

P.S.: На своём КР-03 проверить пока руки не доходят...
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Понятно :ewink:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Shaos wrote:На zx-pk.ru мне пояснили, что тут цвет фона ещё заводится, который сохраняется в триггерах и задаётся он с помощью битов LA0, LA1 и LTEN, которые изначально были предназначены для отображения псевдографики - вот что про это написано в книжке "Домашний компьютер":

Image

и как можно видеть управлять этими битами из программы не так уж и просто, например есть псевдографика, где 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 плюс тут озвучены все остальные коды (хоть они и бесполезные) :)
8275-pseudogr.jpg
Тут горизонтальная линия через всё знакоместа называется "Underline", т.е. подчёркивание - выходит это курсор? Получается уровень курсора надо будет поднять до середины, чтобы оно таки заработало? Это же жутко неудобно...

А вот суть схемы вроде бы передана верно (но некоторые гейты другие - типа вместо NOR у наших стоит NAND и NOT после инверсии LA0 и LA1, что то же самое и NAND-ы вместо OR-ов на формирователе строчки псевдографики из кусочков):
8275-pseudogr-hardware.jpg
Вообще наверное можно попроще это сделать - например знакогенератор можно отрезать запретив ему /OE и псевдографику также через буфер можно подавать...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Shaos wrote:Я подумаю на этот счёт
Можно сделать так - у меня будет всё также 2 шрифта программно подменяемых в 2-килобайтном ОЗУ знаков/тайлов и активный шрифт всё также будет устанавливаться битом C1 с клавиатурной ВВ55, однако LA0 можно будет задействовать для переключения с основного шрифта на альтернативный и обратно в пределах экрана (по кадровому синхроимпульсу можно сбрасывать этот выбор возвращаясь в изначально выбранный) - команда #F5 может включать альтернативный шрифт, а #F4 - основной (например если изначально был установлен шрифт 0, то после #F5 установится шрифт 1, а после #F4 - опять 0, но если был установлен шрифт 1, то после #F5 установится шрифт 0, а после #F4 - снова 1). Кроме того LA0 может ещё и сбрасывать залипание "полутоновых" фонов (при использовании основного шрифта многократное применение #F4 не будет менять шрифт, но может быть использовано для чего-то ещё - в данном случае для сброса выбранного цвета фона) - так мы убъём всех зайцев одним выстрелом :lol:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Радио-86РК на SRAM 128K Alpha

Post by Alikberov »

Shaos wrote:
Shaos wrote:Я подумаю на этот счёт
Можно сделать так - у меня будет всё также 2 шрифта программно подменяемых в 2-килобайтном ОЗУ и активный шрифт всё также будет устанавливаться битом C1 с клавиатурной ВВ55, однако LA0 можно будет задействовать для переключения с основного шрифта на альтернативный и обратно в пределах экрана (по кадровому синхроимпульсу можно сбрасывать этот выбор возвращаясь в изначально выбранный) - команда #F5 может включать альтернативный шрифт, а #F4 - основной (например если изначально был установлен шрифт 0, то после #F5 установится шрифт 1, а после #F4 - опять 0, но если был установлен шрифт 1, то после #F5 установится шрифт 0, а после #F4 - снова 1). Кроме того LA0 может ещё и сбрасывать залипание "полутоновых" фонов (при использовании основного шрифта многократное применение #F4 не будет менять шрифт, но может быть использовано для чего-то ещё - в данном случае для сброса выбранного цвета фона) - так мы убъём всех зайцев одним выстрелом :lol:
Из "личных концептуальных размышлений" на тему, как бы я на макетке развёл бы схему РК...
  1. Удаляется D14 совсем, вместо которой ставится панелька под РФ4 (или под РУ8/РУ10)
  2. Микросхема D20 переносится на плату клавиатуры вместе с D21, что уменьшит число проводов к плате клавиатуры до 16. Правда, придётся добавить буфер, чтобы ВМ80 до ВВ55 мог "достучаться". Соответственного, разъём магнитофона перемещается на клавиатуру
  3. Микросхемы ПЗУ (Монитора и Знакогенератора) заменяются на РФ4
  4. К ВГ75 добавляется ТМ2 для поддержки трёх знакогенераторов
  5. Атрибуты цвета и инверсии - опционально
  6. Добавляется "аппаратная поддержка табуляции"
Собственно, пункт с "аппаратной поддержкой табуляции" тоже не менее любопытен, но схематических эскизов пока не имеет.
Из справочника, так как коды 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).
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

В следующей моей РК-шке клава будет прям на материнке :)

А так-то надо свой SRAM128K дособирать и там навесиком прицепить тайлы без полутонов (пока из ПЗУ)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Shaos wrote:P.P.S. Вот ещё чего у себя откопал - непомню откуда взял:

Image

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#post375381

P.P.P.P.S. На zx-pk.ru мне пояснили, что тут цвет фона ещё заводится, который сохраняется в триггерах и задаётся он с помощью битов LA0, LA1 и LTEN, которые изначально были предназначены для отображения псевдографики - вот что про это написано в книжке "Домашний компьютер":

Image

и как можно видеть управлять этими битами из программы не так уж и просто, например есть псевдографика, где 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 ещё можно атрибутом подчёркивания включить! т.е. так наверное будет работать :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Радио-86РК на SRAM 128K Alpha

Post by Alikberov »

Shaos wrote:Если пробовать раскрашивать фоны с помощью LA0, LA1 и LTEN, то скорее всего придётся защёлкивать LA0 на триггере, чтобы использовать предыдущее значение в логике (назовём его LA0*):
LA0*=0 LA0=0 LA1=0 - нормальная работа системы (классический РК86, где LTEN принимает значение 1 в момент вывода курсора);
LA0*=0 LA0=1 LA1=0 - у меня будет переключать шрифт (в зависимости от состояния HGL) и останавливать "залипание" полутоновых фонов, а также гасит все триггеры фоновых цветов (по идее их можно совместить с полутоновыми);
А каким образом будет переключаться шрифт в Вашей схеме?
И сколько символов в наборе будет доступно?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Я вот так планирую:
Shaos wrote:
Shaos wrote:Я подумаю на этот счёт
Можно сделать так - у меня будет всё также 2 шрифта программно подменяемых в 2-килобайтном ОЗУ знаков/тайлов и активный шрифт всё также будет устанавливаться битом C1 с клавиатурной ВВ55, однако LA0 можно будет задействовать для переключения с основного шрифта на альтернативный и обратно в пределах экрана (по кадровому синхроимпульсу можно сбрасывать этот выбор возвращаясь в изначально выбранный) - команда #F5 может включать альтернативный шрифт, а #F4 - основной (например если изначально был установлен шрифт 0, то после #F5 установится шрифт 1, а после #F4 - опять 0, но если был установлен шрифт 1, то после #F5 установится шрифт 0, а после #F4 - снова 1). Кроме того LA0 может ещё и сбрасывать залипание "полутоновых" фонов (при использовании основного шрифта многократное применение #F4 не будет менять шрифт, но может быть использовано для чего-то ещё - в данном случае для сброса выбранного цвета фона) - так мы убъём всех зайцев одним выстрелом :lol:
Вот только триггеры наверное придётся делать разные - отдельно будут триггеры на глобальный фон и отдельно - триггеры на локальный...

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, чтобы подкрашивания небыло...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Я вот сегодня ещё раз внимательно подумал и представил как будет прописываться шрифт в знакогенератор - 2К ОЗУ отключится от ВГ75 и сдвигового регистра и подключится к шине ВМ80 (либо битом в байте управления, либо по факту записи в адресное пространство E800...EFFF) - в результате экран будет показывать черноту (на самом деле думаю будет виден курсор и вообще любые знакоместа, где атрибут U равен 1 - по идее этого должно быть достаточно, чтобы показывать прогресс бар). А вот если поставить второе 2К ОЗУ, то их можно чередовать, чтобы картинка на экране не пропадала - как раз через C1 клавиатурной ВВ55, а вот уже внутри выбранного ОЗУ можно по E4/E5 переключать половинки! Правда корпусов мелкой логики это займёт неприлично много...
Я тут за главного - если что шлите мыло на me собака shaos точка net
emax
Novelist
Posts: 43
Joined: 15 Sep 2014 22:32
Location: Пермь

Re: Радио-86РК на SRAM 128K Alpha

Post by emax »

а может косвенно записывать? на шину данных озу регистр с Z-выходом, а адрес записи задавать аппаратным курсором ВГ75, за кадр - одну ячейку можно записать, 2048/50= 40 сек, долговато получается.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Радио-86РК на SRAM 128K Alpha

Post by Shaos »

Думаю начну с одной микросхемы ОЗУ 2КБ и буду писать туда прям как есть - байт за байтом. От ВГ75 отрезать и подключать к шине данных буду по сигналу /WR OR /CS_E800 - всё равно запись данных на окончании строба /WR происходит. Процесс заливки на экране буду отображать подчёркиваниями, которые мимо регистра сдвига выводятся, хотя надо прикинуть - временно отрубать видео или пока не залью весь шрифт? Заливка одного байта командой MOV M,A занимает 7 тактов из которых сама запись займёт от силы 2 - это полторы плашки знакоместа? И потом обрамление цикла с INX и передачей управления с проверкой на конец цикла - ещё порядка 20 знакомест? Наверное нестрашно - по экрану просто будет бегать чёрный снег, занимающий 10% площади экрана или меньше :)

Шрифт будет поджатый алгоритмом SHAFF0 - надо прикинуть размер (напомню, что у нас половина 8-килобайтного ПЗУ пустая, но всё равно непожатый шрифт туда класть как-то расточительно).

P.S. Склеил оригинальный шрифт РК и первую половинку шрифта Dinobyte как и планировал и прошёлся по ним своим SHAFF-ом:

Code: Select all

$ shaff fonts.bin 

SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>

Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF0
Minimal length to detect: 4 bytes
Prefix byte for references: 0xFF
Total number of blocks to encode: 1
Size of the last block: 2048

Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Number of matches: 218
Writing data to the file...
Number of references = 212
Number of literals = 859
Compression: 81% (2048 -> 1662)

Literal balance: 0 vs 859
Rarest literals: F4 E9 DA
You may get 101 bytes less (6%) if set rarest byte as a prefix (option -xF4)

Compressed file size: 1674 bytes (81%)
Working time: 0m07s
Good bye!
и пересжал с одним из самых редких байтов в качестве ключевого:

Code: Select all

$ shaff -xE9 fonts.bin 

SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>

Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF0
Minimal length to detect: 4 bytes
Prefix byte for references: 0xE9
Total number of blocks to encode: 1
Size of the last block: 2048

Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Number of matches: 218
Writing data to the file...
Number of references = 193
Number of literals = 935
Compression: 76% (2048 -> 1561)

Literal balance: 0 vs 935
Rarest literals: F4 E9 DA

Compressed file size: 1573 bytes (76%)
Working time: 0m06s
Good bye!
Получилось 1573 байта или 76% от оригинала.

SHAFF1 конечно получше сжимает, но его распаковщика для 8080 у меня ещё нету :)

Code: Select all

$ shaff -1 fonts.bin 

SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>

Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF1
Minimal length to detect: 2 bytes
Total number of blocks to encode: 1
Size of the last block: 2048

Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Number of matches: 427
Writing data to the file...
Number of references = 452
Number of literals = 307
Compression: 55% (2048 -> 1136)

Literal balance: 0 vs 307
Rarest literals: F4 E9 DA

Compressed file size: 1148 bytes (56%)
Working time: 0m12s
Good bye!
И для разнообразия сжал инвертированный шрифт (SHAFF1 может сжимать лучше инвертированные данные, если в оригинале было много байт со значениями >=128):

Code: Select all

$ shaff -1 fontsi.bin 

SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>

Opening input file 'fontsi.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fontsi.binFF'
Chosen method: SHAFF1
Minimal length to detect: 2 bytes
Total number of blocks to encode: 1
Size of the last block: 2048

Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Number of matches: 427
Writing data to the file...
Number of references = 435
Number of literals = 340
Compression: 53% (2048 -> 1096)

Literal balance: 340 vs 0
Rarest literals: FF FE FD

Compressed file size: 1108 bytes (54%)
Working time: 0m12s
Good bye!
Для сравнения ещё сжал LZ4, ZX0, ZX7, MegaLZ, Hrum и Hrust:

Code: Select all

-rw-r--r-- 1 shaos shaos 2048 Jan 23 21:48 fonts.bin
-rw-r--r-- 1 shaos shaos 1573 Jan 23 21:52 fonts.bff <<<<<<<<<<<< SHAFF0
-rw-r--r-- 1 shaos shaos 1501 Jan 23 21:48 fonts.bin.lz4
-rw-r--r-- 1 shaos shaos 1148 Jan 23 21:53 fonts.binFF <<<<<<<<<< SHAFF1
-rw-r--r-- 1 shaos shaos 1108 Jan 23 22:08 fontsi.binFF <<<<<<<<< SHAFF1 (inverted)
-rw-r--r-- 1 shaos shaos 1064 Jan 23 22:13 fonts.bin.zx7
-rw-r--r-- 1 shaos shaos 1056 Jan 23 21:56 fonts.bin.hrm
-rw-r--r-- 1 shaos shaos 1054 Jan 23 21:56 fonts.bin.mlz
-rw-r--r-- 1 shaos shaos 1021 Jan 23 21:56 fonts.bin.hst
-rw-r--r-- 1 shaos shaos 1019 Jan 23 22:13 fonts.bin.zx0
P.P.S. Надо попробовать ещё раскрашенные шрифты посжимать:

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Радио-86РК на SRAM 128K Alpha

Post by Alikberov »

Shaos wrote:P.P.P.S. Не - не будет E4 как чёрная дырка выглядеть - она будет выглядеть как Д с подчёркиванием (если верить эмулятору Emu80) т.к. там сигнал гашения VSP не выдаётся (а E5 будет выглядеть как Е с подчёркиванием да ещё из-за H=1 оно будет раскрашивать предыдущий символ в красный цвет по Толкалину либо в жёлтый по Акименко)
Именно потому я и элементом ИЛИ сигналы VSP и LA0 объединил, чтобы подавить знакогенератор и коды E4/E5 не отображались: Получается "пробел".