Радио-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:Ну тумблеры это для настройки окружения для старых программ, которые не знают на чём они запущены :)
Причём никто не мешает уже запустив программу начать щёлкать тумблерами, чтобы подобрать правильные цвета ;)
Потом можно тумблеры превратить в кнопки, управляющие установкой-сбросом триггеров, которые можно также программно устанавливать-сбрасывать - новые программы могут все эти ручные настройки сбросить во что нужно при старте - либо сделать возможным программно сброситься в основной режим работы нового компа (скажем сделать основным режим Апогея с регистром и серым 8Dh, что немного не по апогеевски, но очень уж не хочется терять восьмую комбинацию).
Кстати, имеется ещё одно предложение..
На оригинальной клавиатуре МС-7007 красная клавиша "Стоп" и серая "Сброс" - не так, как у КР-03. Это натолкнуло на некоторые додумки...

Использовать на Сброс кнопку двойного нажатия (можно, конечно, использовать и две отдельно - вопрос концептуальной эстетики), чтобы "реальный Сброс" производился при "сильном" нажатии. Тогда как при "лёгком" срабатывало бы нечто подобное "аппаратному прерыванию" (как Magic Button в ZX-Spectrum на NMI).
Так как в схеме РК отсутствует (и не нужен) ВН59, на уровне логики можно "искусственно" выработать код FD (недокументированный CALL из серии CD/DD/ED/FD) три раза, что спровоцирует "CALL FDFD" без самого прерывания (счётчик PC следует потом подправить) с передачей управления в некую "оболочку" (полезно иметь несколько ПЗУ или одно побольше, где вместе с Монитором будет некая "оболочка" в "теневой плоскости" ПЗУ, включаемой лишь по "мягкому Сбросу", где можно разместить всё хозяйство (контроль знакогенераторов, атрибутов и т.п.) с современным приятным интерфейсом (как BIOS) без всяческих "тумблеров" и "рубильников"... :roll:
Shaos wrote:По поводу трёх шрифтов - три шрифта всё таки много. Хотелось бы, чтобы с начала кадра оно не всегда с одного и того же набора стартовала, а с того, который программно выбран и далее переключать между двумя шрифтами через E4/E5, чтобы если подряд идут несколько E4, то шрифт бы оставался основным, но факт наличия E4 использовался бы для других целей - в моём случае для сброса цвета фона.
Лучше "больше", чем "меньше" (640 Кб хватит всем!)... :no:
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

По идее Толкалин и Акименко - это рудименты прошлого - так сказать промежуточные этапы на пути к варианту Апогея :)
Однако у людей они есть и люди пишут под них программы, поэтому их надобно поддержать :roll:
Другой вопрос надо ли их настраивать через биос-сетап? Не думаю - т.к. например факт необходимости включить Акименко или Толкалина вместо цветов Апогея (а также что нам нужен серый-на-чёрном вместо чёрный-на-чёрном, чтобы игра выглядела как в эмуляторе) может выясниться уже лишь после запуска игры - и тут тумблеры становятся незаменимым инструментом в руках пользователя ;)
Alikberov wrote:Лучше "больше", чем "меньше" (640 Кб хватит всем!)... :no:
"Лучше меньше, да лучше" :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:факт необходимости включить Акименко или Толкалина вместо цветов Апогея (а также что нам нужен серый-на-чёрном вместо чёрный-на-чёрном, чтобы игра выглядела как в эмуляторе) может выясниться уже лишь после запуска игры - и тут тумблеры становятся незаменимым инструментом в руках пользователя ;)
О чём я и говорю: Подобие Magic Button для РК, когда программа прерывается и через интерфейс "теневого ПЗУ" ставим/убираем галочки и меняем конфигурацию, после чего выполнение программ продолжается.
(И никаким рубильниками украшать схему РК не нужно! :wink: )
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Это слишком сложно :)

К тому же magic как пишут лажала часто - приводила к порче диска, ребуту и потере прогресса в игре 8)

А тумблеры лажать не могут :)

P.S. Кстати для magic button надо NMI (немаскируемое прерывание), которое есть на Z80 или 8085, но нет на 8080 (и вообще в схеме РК через выход запрещения-разрешения прерываний звук играется)
Я тут за главного - если что шлите мыло на 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:Можно перенести переключение фонтов/палитр с С1 клавиатурной ВВ55 в регистр, где совместить этот бит с тремя битами акцентов - и это всё совместить с битами выбора страницы памяти (до 4 битов могут выбирать 512 КБ) по адресу #F000, а клавиатурные C0 (мафон), С1 и С2 отдать под 3-битный звук :)
На зхпк мне Ведущий_специалист предлагает режим цветности Толкалин-Акименко-Апогей не только вручную устанавливать, но и программно - это 2 бита и они в #F000 уже не влезут.
Соответственно надо их отдельно заводить, и логично, что переключение шрифтов/палитр и акценты надо выносить туда же - придётся добавлять новый регистр #F001?
Кстати а имело бы смысл акценты делать разными для разных палитр? Или это уже слишком заморочено получается? Хотя наверное это всё надо перенести на потом...
Я тут за главного - если что шлите мыло на 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:
Shaos wrote:Подумал тут, а что если добавить акцентов нашим локальным цветам? ;)

Например завести 3-битный регистр, куда игровая программа может записать битики акцентирующие нулевые цветовые составляющие полутонами, если они есть в соответствующих позициях цветов переднего плана (не фоновых) - аппаратно это должно быть суперпросто реализовать. Теперь мы можем получить 8 разных наборов цветов под каждую палитру (акцент 000 означает неизменнённые цвета):
...
(палитра 1 получилась победнее, чем палитра 0, но тем не менее - хотя наверное можно попробовать не добавлять акценты в палитре 1, а вычитать)
Сделал вычитание акцентов в случае палитры 1 - теперь повеселее :)
...
Кроме того в палитре 1 пометил звёздочкой те цвета, которые также присутствуют в палитре 0.
...
Всего тут у нас получилось 23 разных цвета...
Пока решил без фоновых полутонов попробовать:
accents.png
Теперь тут только 20 цветов:

Code: Select all

     16 000000
      2 0000FF
      2 00AAAA
      4 00AAFF
      2 00FF00
      4 00FFAA
      2 00FFFF
      2 AA00AA
      4 AA00FF
      2 AAAA00
      2 AAAAFF
      4 AAFF00
      2 AAFFAA
      2 FF0000
      4 FF00AA
      2 FF00FF
      4 FFAA00
      2 FFAAAA
      2 FFFF00
     16 FFFFFF
Новая программа под спойлером:

 rk-color3-accents.c

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BLACKBACK

long cols[9]={0x0000FF,0x00FF00,0xFF0000,0xFFFFFF,0x0000AA,0x00AA00,0xAA0000,0x000000};

int main()
{
 char str[8],sta[8][8];
 int i,j,k,ii,jj;
 long l,ll[25];
 FILE *f;
 f = fopen("accents.htm","wt");
 if(f==NULL) return -1;
 ll[24] = 0xFFFFFF;
 fprintf(f,"<HTML><BODY BGCOLOR=#FFFFFF>\n");
 fprintf(f,"<h1>Colors of RK-tiles with accents</h1>\n");
 for(k=0;k<2;k++)
 {
   fprintf(f,"<h2>Palette %i</h2>\n",k);
   ii = 0;
   fprintf(f,"<table border=1 cellpadding=5>\n");
   for(j=0;j<9;j++)
   {
#ifdef BLACKBACK
      if(j==6) break;
#endif
      strcpy(str,"000");
      fprintf(f,"<tr>\n");
      for(i=0;i<10;i++)
      {
         if(i==0)
         {
           if(j==0) fprintf(f," <td> ");
           else if(j==1) fprintf(f," <td rowspan=4>Foreground");
           else if(j==5)
#ifdef BLACKBACK
                fprintf(f," <td>Background");
#else
                fprintf(f," <td rowspan=4>Background");
#endif
         }
         else if(i==1)
         {
           if(j==0) fprintf(f," <td>Accent-->");
           else
           {
#ifdef BLACKBACK
              if(j==5) fprintf(f," <td align=right>Attr XX",ii++);
              else
#endif
              fprintf(f," <td align=right>Attr %02d",ii++);
              if(ii==2) ii=10;
              if(ii==12) ii=0;
           }
         }
         else // i>=2
         {
           if(j==0)
           {
              fprintf(f," <td>%s",str);
              strcpy(sta[i-2],str);
              if(++str[2]=='2')
              {
                 str[2] = '0';
                 if(++str[1]=='2')
                 {
                    str[1] = '0';
                    str[0]++;
                 }
              }
           }
           else
           {
              jj = 25;
              l = cols[j-1];
              if(k)
              {
                if(l==0xFF0000) l=0x00FFFF;
                else if(l==0x00FF00) l=0xFF00FF;
                else if(l==0x0000FF) l=0xFFFF00;
                else if(l==0xAA0000) l=0x00AAAA;
                else if(l==0x00AA00) l=0xAA00AA;
                else if(l==0x0000AA) l=0xAAAA00;
                if(j<4) // subtract accents for palette 1
                {
                  if(sta[i-2][0]=='1'&&(l&0xFF0000)){l&=0x00FFFF;l|=0xAA0000;}
                  if(sta[i-2][1]=='1'&&(l&0x00FF00)){l&=0xFF00FF;l|=0x00AA00;}
                  if(sta[i-2][2]=='1'&&(l&0x0000FF)){l&=0xFFFF00;l|=0x0000AA;}
                }
                // compare colors with palette 0
                for(jj=0;jj<25;jj++) if(ll[jj]==l) break;
              }
              else if(j<4) // add accents for palette 0
              {
                if(sta[i-2][0]=='1'&&!(l&0xFF0000)) l|=0xAA0000;
                if(sta[i-2][1]=='1'&&!(l&0x00FF00)) l|=0x00AA00;
                if(sta[i-2][2]=='1'&&!(l&0x0000FF)) l|=0x0000AA;
                ll[((j-1)<<3)+i-2] = l; // store colors from paletter 0
              }
#ifdef BLACKBACK
              if(j==5) l=0;
#endif
              if(jj<25) fprintf(f," <td bgcolor=#%6.6X align=right>*",l);
              else fprintf(f," <td bgcolor=#%6.6X> ",l);
           }
         }
         fprintf(f,"</td>\n");
      }
      fprintf(f,"</tr>\n");
   }
   fprintf(f,"</table>\n");
 }
 fprintf(f,"<p>* Color is present in palette 0 as well.</b>\n");
 fprintf(f,"</BODY></HTML>\n");
 return 0;
}

В порту F000 можно оставить только переключение страниц ОЗУ, как сейчас.
В новом порту F001 будет 3 акцента RGB и 1 бит переключения шрифтов и палитр (а в будущем будут ещё 2 бита выбора способа обычной РК-раскраски наряду с тумблером).

Команды E4 и E5 будут переключать в основной шрифт и в альтернативный соответственно (вместе с палитрой) - также надо будет сделать трюк как сделал Alikberov - складывать VSP с LA0 по OR и далее использовать это как гашение (чтобы E4 не показывался как Д с подчёркиванием, а E5 - как E с подчёркиванием).

Цветной фон можно будет сделать путём включения цвета по Апогею с инверсией - в этом случае фон окрасится в выбранный цвет (это может быть даже серый AAAAAA), а чёрный цвет символов будет перебит цветами тайла - тут у нас как бы получаются тайлы с прозрачностью - или это слишком сложно? А вообще локальные цвета из тайла будут иметь больший приоритет, чем глобальные цвета так что без инверсии РК-шные цвета раскраски будут перебиты цветами из тайла и тайл будет нарисован на чёрном фоне.
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 »

Вот такая схема тайлов с 2 палитрами и 8 акцентами получается (без полутоновых заливок):
rk-color3a.png
По копусам выходит 8:

Code: Select all

 4 x XOR  -> 1
12 x AND  -> 3
 8 x NAND -> 2
 7 x OR   -> 2
Плюс ещё надо будет корпуса 3 на согласование с обычной схемой цветности РК (которая сама по себе будучи универсальной весит 10 корпусов), чтобы сделать возможным просвечивание фона сквозь тайлы либо сделать тайлы всегда на чёрном фоне - это будет чуть полегче...
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 »

Вот вроде с полутоновыми заливками получилось:
rk-color4.png
Выходит порядка 10 корпусов:

Code: Select all

 4 x NOT  -> 1
 4 x XOR  -> 1
 4 x NAND -> 1
11 x AND  -> 3
 6 x AND3 -> 2
 7 x OR   -> 2
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 »

Возвращаю обратно полутоновые заливки:
accents.png
И это снова 23 цвета:

Code: Select all

     16 000000
      8 0000AA
      2 0000FF
      8 00AA00
     10 00AAAA
      4 00AAFF
      2 00FF00
      4 00FFAA
      2 00FFFF
      8 AA0000
     10 AA00AA
      4 AA00FF
     10 AAAA00
      2 AAAAFF
      4 AAFF00
      2 AAFFAA
      2 FF0000
      4 FF00AA
      2 FF00FF
      4 FFAA00
      2 FFAAAA
      2 FFFF00
     16 FFFFFF
(без AAAAAA, AAFFFF, FFAAFF и FFFFAA)

И вот программа, которая генерирует такой HTML файл:

 rk-color4-accents.c

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

long cols[9]={0x0000FF,0x00FF00,0xFF0000,0xFFFFFF,0x0000AA,0x00AA00,0xAA0000,0x000000};

int main()
{
 char str[8],sta[8][8];
 int i,j,k,ii,jj;
 long l,ll[25];
 FILE *f;
 f = fopen("accents.htm","wt");
 if(f==NULL) return -1;
 ll[24] = 0xFFFFFF;
 fprintf(f,"<HTML><BODY BGCOLOR=#FFFFFF>\n");
 fprintf(f,"<h1>Colors of RK-tiles with accents</h1>\n");
 for(k=0;k<2;k++)
 {
   fprintf(f,"<h2>Palette %i</h2>\n",k);
   ii = 0;
   fprintf(f,"<table border=1 cellpadding=5>\n");
   for(j=0;j<9;j++)
   {
      strcpy(str,"000");
      fprintf(f,"<tr>\n");
      for(i=0;i<10;i++)
      {
         if(i==0)
         {
           if(j==0) fprintf(f," <td> ");
           else if(j==1) fprintf(f," <td rowspan=4 align=center>Foreground<br>color<br>over black");
           else if(j==5) fprintf(f," <td rowspan=4 align=center>Special case<br>(all ones)");
         }
         else if(i==1)
         {
           if(j==0) fprintf(f," <td>Accent-->");
           else
           {
              fprintf(f," <td align=right>Attr %02d",ii++);
              if(ii==2) ii=10;
              if(ii==12) ii=0;
           }
         }
         else // i>=2
         {
           if(j==0)
           {
              fprintf(f," <td>%s",str);
              strcpy(sta[i-2],str);
              if(++str[2]=='2')
              {
                 str[2] = '0';
                 if(++str[1]=='2')
                 {
                    str[1] = '0';
                    str[0]++;
                 }
              }
           }
           else
           {
              jj = 25;
              l = cols[j-1];
              if(k)
              {
                if(l==0xFF0000) l=0x00FFFF;
                else if(l==0x00FF00) l=0xFF00FF;
                else if(l==0x0000FF) l=0xFFFF00;
                else if(l==0xAA0000) l=0x00AAAA;
                else if(l==0x00AA00) l=0xAA00AA;
                else if(l==0x0000AA) l=0xAAAA00;
                if(j<4) // subtract accents for palette 1
                {
                  if(sta[i-2][0]=='1'&&(l&0xFF0000)){l&=0x00FFFF;l|=0xAA0000;}
                  if(sta[i-2][1]=='1'&&(l&0x00FF00)){l&=0xFF00FF;l|=0x00AA00;}
                  if(sta[i-2][2]=='1'&&(l&0x0000FF)){l&=0xFFFF00;l|=0x0000AA;}
                }
                // compare colors with palette 0
                for(jj=0;jj<25;jj++) if(ll[jj]==l) break;
              }
              else if(j<4) // add accents for palette 0
              {
                if(sta[i-2][0]=='1'&&!(l&0xFF0000)) l|=0xAA0000;
                if(sta[i-2][1]=='1'&&!(l&0x00FF00)) l|=0x00AA00;
                if(sta[i-2][2]=='1'&&!(l&0x0000FF)) l|=0x0000AA;
                ll[((j-1)<<3)+i-2] = l; // store colors from paletter 0
              }
              if(jj<25) fprintf(f," <td bgcolor=#%6.6X align=right>*",l);
              else fprintf(f," <td bgcolor=#%6.6X> ",l);
           }
         }
         fprintf(f,"</td>\n");
      }
      fprintf(f,"</tr>\n");
   }
   fprintf(f,"</table>\n");
 }
 fprintf(f,"<p>* Color is present in palette 0 as well.</b>\n");
 fprintf(f,"</BODY></HTML>\n");
 return 0;
}

P.S. Теперь можно рисовать вот такие цветные шрифты :)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на 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 »

Кстати, здесь редактор знакогенератора с поддержкой "светового пера" (в эмуляторе мышкой легко рисовать символы).
(Делал специально для опытов.)

К сожалению, исходник временно утерян: Код довольно компактен.
(В эмуляторе я в режиме реального времени все цвета видел.)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

А он редактирует прямо знакогенератор дырками по 4 байта?

Надо будет приспособить под моё железо :)

И чтобы обе половинки мог редактировать ;)
Я тут за главного - если что шлите мыло на 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:А он редактирует прямо знакогенератор дырками по 4 байта?

Надо будет приспособить под моё железо :)

И чтобы обе половинки мог редактировать ;)
Нет, данный вариант - публичный (для EEPROM-программаторов) и просто редактирует символы в ОЗУ.
Тот (что работал с "дырками") - промежуточный вариант сугубо для внутренних нужд (работал через MOV-префиксы те самые).

Этот код - очень компактный и интерфейс спартанский.
Хотя, можно там добавить реакцию на клавишу, чтобы из ОЗУ переносить данные в память знакогенератора. Но по причинам "компактности" я ничего не добавлял.
(Типа, на АР2 вместо выхода в Монитор повесить адрес на свой код, который и будет знакогенератор перезаписывать.)
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:Вот вроде с полутоновыми заливками получилось:



Выходит порядка 10 корпусов:

Code: Select all

 4 x NOT  -> 1
 4 x XOR  -> 1
 4 x NAND -> 1
11 x AND  -> 3
 6 x AND3 -> 2
 7 x OR   -> 2
Получается так:
  • тайлы без полутонов - 3 корпуса
  • тайлы с полутноами - 7 корпусов
  • тайлы без полутонов, но с акцентами - 8 корпусов
  • тайлы с полутонами и с акцентами - 10 корпусов (?)
P.S. Надо чтоли уже закончить софтину, которая будет брать логисимовский дизайн и строить из него топологию печатной платы с мелкой логикой ТТЛ :lol:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

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

Post by vital72 »

Shaos wrote:Шрифт будет поджатый алгоритмом SHAFF0 - надо прикинуть размер (напомню, что у нас половина 8-килобайтного ПЗУ пустая, но всё равно непожатый шрифт туда класть как-то расточительно).
мне интересно посмотреть на код распаковщика шрифта, сжатого твоим алгоритмом, а самое главное -- сколько времени он будет распаковывать? проведи измерения.
я также сделал сжатие шрифтов и в первой своей реализации использовал честный алгоритм Хаффмана. но когда я увидел с какой скоростью он у меня распаковывает шрифты, слегка расстроился. переосмыслил алгоритм и сделал максимально упрощенный алгоритм на основе того же Хаффмана и теперь распаковка 4 килобайтного шрифта (4 шрифта по 1к) происходит почти незаметно на глаз.
некоторые данные моего способа сжатия: шрифт в 2 килобайта (два шрифта, один для латинских букв, второй для русских в обоих регистрах, первые 64 символа у них идентичные) шириной 6 пикселов сжимается в 1201 байт плюс 43 байта алфавит. тоже самое для шрифта шириной 8 пикселов -- сжатые данные 1314 байта плюс 63 байта алфавит.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

По степени сжатия я там приводил размеры:

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
По скорости SHAFF0 должен быть относительно быстрым ибо он байт-ориентированный, а не бит-ориентированный как SHAFF1 - на Z80 я написал для SHAFF0 два депакера - простой (перемещаемый) и навороченный, который можно настраивать ключиками, чтоб он был турбо и супертурбо :)
viewtopic.php?p=159961#p159961
Скорости там были такие (на примере LD-библиотекаря написанного в кодах Z80 и в сравниении с LDIR, т.е. инструкцией Z80 для копирования блоков памяти):

Code: Select all

49t/byte (2.33*LDIR) - распаковка непакуемых данных перемещаемым депакером (104 байта)
48t/byte (2.30*LDIR) - распаковка LD перемещаемым депакером (104 байта)
40t/byte (1.89*LDIR) - распаковка LD турбо депакером (241 байт)
39t/byte (1.86*LDIR) - распаковка LD полнотурбированным депакером (398 байт)
35t/byte (1.66*LDIR) - распаковка непакуемых данных турбо депакерами (241 и 398 байтов)
(а вот SHAFF1 на Z80 декодил тот же LD со скоростью 470.5 тактов на байт или 22.4*LDIR, что в 12 раз медленнее, чем SHAFF0 - см. тут)
Я тут за главного - если что шлите мыло на me собака shaos точка net