Программное перемещение видеопамяти в РК-совместимых компах

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

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:На стандартном РК-86 можно попробовать интерполировать картинки верхушками букв стандартного шрифта (вроде на зхпк чото такое проскакивало уже):

Image
Это было 4 пикселов в высоту, а вот как если оставить 5 пикселов (60Гц):
Screenshot from 2024-03-23 21-43-59.png
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Для того, чтобы влезть в 50 Гц всё с теми же 5-пиксельными символами, надо увеличить количество текстовых строк:
Screenshot from 2024-03-23 21-57-01.png
Напомню что с 4-пиксельными символами влезть в 50 Гц кадровой частоты не получится - максимум 64 текстовых строк дадут почти 60 Гц (см. выше), что соответствует американскому телевизионному стандарту NTSC (а вот частота строк у PAL/SECAM и NTSC почти одинаковая).
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот 6-пиксельный вариант (тайлы 6х6 могут пригодиться в будущем, когда у меня появится программно подменяемый шрифт):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Пробую рисовать картинки 5-строчными кусочками стандартных символов:



Каждое знакоместо делим на 2 вертикальных половинки - в каждой будет 3*5=15 пикселов, которые могут изображать яркости от 0 до 15 (16 градаций серого), но не все комбинации яркостей таким образом можно изобразить (коих в пределе должно быть 256) - вот таблица того, какие пары покрывает стандартный знакогенератор РК будучи подрезан до 5 пикселов в высоту (первая яркость даёт вертикальное число, а вторая яркость - горизонтальное, а число в ячейке на пересечении говорит о том, сколько символов могут показать такую пару яркостей):

Code: Select all

  | 0 1 2 3 4 5 6 7 8 9 A B C D E F
-----------------------------------
0 | F 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1
1 | 0 0 0 1 2 2 2 0 0 0 0 0 0 0 0 0
2 | 0 0 3 2 0 0 2 3 2 0 0 0 0 0 0 0
3 | 1 0 2 2 0 1 2 1 0 0 0 0 1 0 0 1
4 | 0 0 0 0 1 3 4 2 2 0 1 0 0 0 0 0
5 | 1 0 1 3 0 4 3 8 0 2 2 0 0 0 0 0
6 | 0 0 0 1 3 0 2 5 4 1 0 1 0 0 0 0
7 | 0 0 0 0 0 3 3 3 0 1 0 0 0 0 0 0
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C | 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
D | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F | 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
Я сейчас пишу программу, которая будет выводить таким способом изображения в градациях серого с разрешением 128х50 путём подстановки кусочков символов стандартного знакогенератора высотой 5 пикселов с накапливанием и корректировкой ошибок.

P.S. Вот для каждой комбинации половинок какие символы (точнее верхние 5 строчек каждого символа) можно взять:

Code: Select all

00: 0x20
03: 0x04
05: !
06: '
0C: 0x02
0F: 0x06
13: /
14: ) >
15: 1 J
16: I ]
22: , : \
23: - ^
26: + ?
27: T Т З
28: 3 Э
30: 0x10
32: ( <
33: 0x14 "
35: Y
36: 2 7
37: *
3C: 0x12
3F: 0x16
44: ;
45: X Х У
46: & = S Д
47: Z Л
48: 4 9
4A: Я
50: L
52: [
53: % C С
55: G U V Ц
56: 6 O О
57: $ 5 8 A Q W А Ч
59: Ж Ш
5A: @ Щ
63: Ь
64: K Г К
66: D Ы
67: H N И Н П
68: 0 M Й М
69: Ю
6B: Ф
75: E F Е
76: P Б Р
77: B R В
79: #
C0: 0x01
C3: 0x05
CC: 0x03
CF: 0x07
F0: 0x11
F3: 0x15
FC: 0x13
FF: 0x17
Я пока выберу последний в каждой строчке...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Алгоритм может быть такой - идём по картинке слева-направо построчно беря пикселы парами:
- огрубляем яркость первого пиксела в паре до 16 градаций (если от предыдущего шага осталась ошибка, то прибавляем её);
- ищем соответствующую строчку в таблице (для некоторых яркостей точки входа нет - например для 8,9,10,11 берём 12, а для 13 и 14 - берём 15);
- далее выбираем нужное пересечения для второго пиксела в паре огрублённого до 16 градаций яркости (если точного соответствия нет - берём ближайший с меньшим значением);
- ставим соответствующий символ (пока первый подходящий, а потом можно попробовать выбирать лучший из имеющихся);
- считаем ошибку и передаём её дальше (возможно её надо разделить на число от 1.0 до 2.0, чтобы ряд сходился);
- берём следующую пару и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот чото сделал в первом приближении:
rk-pgraph.jpg
Если увеличить, то можно увидеть "детали":
Screenshot from 2024-03-31 05-09-10.png
Программульку в формате RKR можно взять тут (с исходниками в которых можно увидеть, что буфер экрана увеличен и перенесён на адрес 4000h, причём всё работает без спец-символов):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Универсальный конвертер практически готов :lol:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Решил поглядеть какой коэффициент "гашения" ошибки более предпочтителен (на картинке выше оно было 1.5):

 1.0
Начинаю с 1.0 (ошибка не размывается):
rk-pgraph-shaos-1_0.png

 1.1
Коэффициент 1.1:
rk-pgraph-shaos-1_1.png

 1.2
Коэффициент 1.2:
rk-pgraph-shaos-1_2.png

 1.3
Коэффициент 1.3:
rk-pgraph-shaos-1_3.png

 1.4
Коэффициент 1.4:
rk-pgraph-shaos-1_4.png

 1.5
Коэффициент 1.5 (как на картинках выше):
rk-pgraph-shaos-1_5.png

 1.7
Коэффициент 1.7:
rk-pgraph-shaos-1_7.png

 2.0
Коэффициент 2.0:
rk-pgraph-shaos-2_0.png

И теперь особый случай - ошибка не "гасится", но распространяется только на второе полузнакоместо:

 1.0-pair
rk-pgraph-shaos-1_0-pair.png

Особый случай имитирует алгоритм, который можно реализовать на самом РК для преобразования произвольных изображений в градациях яркости (16 уровней) в такую псевдографику, когда пара точек будет задавать один и только один символ, не распространяя ошибку далее по строке.

По итогам сравнения - как можно видеть коэффициент 1.0 совсем плох, а вот всё остальное (даже 2.0, когда ошибка делится на 2 перед применением к каждому пикселу) выглядит в-принципе ОК, так что я наверное оставлю коэффициент 1.5, которое легко можно изобразить вместо деления на 1.5 как умножение на 2 с дальнейшим делением на 3 т.е. оставаясь в арифметике целых чисел...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот исходник конвертера:

Code: Select all

/*
 rk-pgraph.c - Converting grayscale image 128x50 to RK86 pseudo-graphics by Shaos

 This code is PUBLIC DOMAIN! Use it on your own RISK!!!

 Build: gcc rk-pgraph.c -lpng -ork-pgraph

 http://www.nedopc.org/forum/viewtopic.php?f=93&t=22389&start=45

 24-MAR-2024 - started coding
 31-MAR-2024 - working version ready (ASM)
 02-APR-2024 - released version (ASM and BIN)

*/

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

//#define DEBUG

int count[8] = {
 0, // 000
 1, // 001
 1, // 010
 2, // 011
 1, // 100
 2, // 101
 2, // 110
 3  // 111
};

int hist[256],allz[16];
char chars[256][8];

int main(int argc, char **argv)
{
 int i,j,k,a,b,c,e,e1,e2,x,y,z,z1,z2,hh,h=5,m=0;
 FILE *f,*fb;
 if(argc<2)
 {
   printf("\nrk-pgraph filename.png [lines]\n\n");
   return 0;
 }
 if(argc>2) h=atoi(argv[2]);
 a = 256/(3*h+1);
 f = fopen("sgr.bin","rb");
 if(f==NULL){printf("\nNeed sgr.bin\n\n");return -1;}
 for(i=0;i<256;i++)
 {
   hist[i] = 0;
   for(j=0;j<8;j++) chars[i][j] = 0;
 }
 chars[0][0] = 0x20; // space for blank
 for(i=0;i<127;i++)
 {
   z1 = z2 = 0;
   for(j=0;j<8;j++)
   {
     c = (~fgetc(f))&63;
     if(j>=h) continue;
     if(i>=8 && i<=15) continue;
     if(i>=24 && i<=31) continue;
//     printf("%2.2X\n",c);
     z1 += count[c>>3];
     z2 += count[c&7];
   }
   c = (z1<<4)|z2;
   printf("%i) %i %i (%2.2X)\n",i,z1,z2,c);
   hist[c]++;
   if(c)
   {
     k = 0;
     while(chars[c][k])
     {
        if(++k==8){k=7;break;}
     }
     chars[c][k] = i;
   }
 }
 printf("\n");
 fclose(f);
 c = 0;
 for(j=0;j<16;j++)
 {
   if(j==0)
   {
     printf("  | 0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
     printf("-----------------------------------\n");
   }
   z = 0;
   for(i=0;i<16;i++)
   {
     if(i==0) printf("%X |",j);
     if(i!=0&&j!=0) if(hist[c]>m) m=hist[c];
     hh = hist[c++];
     printf(" %X",(hh>15)?15:hh);
     z += hh;
   }
   allz[j] = (z==0)?1:0;
   printf("\n");
 }
 printf("\nmax num: %i\n\n",m);
 c = 0;
 for(j=0;j<16;j++)
 {
   for(i=0;i<16;i++)
   {
     hh = hist[c];
     if(!hh){c++;continue;}
     printf("%2.2X:",c);
     for(k=0;k<8;k++)
     {
       m = chars[c][k];
       if(k==7) hist[c] = m;
       if(!m)
       {
         if(k) hist[c] = chars[c][k-1]; // choose last one
         break;
       }
       if(m<=0x20) printf(" 0x%2.2X",m);
       else if(m<0x60) printf(" %c",m);
       else switch(m)
       {
         case 0x60: printf(" Ю"); break;
         case 0x61: printf(" А"); break;
         case 0x62: printf(" Б"); break;
         case 0x63: printf(" Ц"); break;
         case 0x64: printf(" Д"); break;
         case 0x65: printf(" Е"); break;
         case 0x66: printf(" Ф"); break;
         case 0x67: printf(" Г"); break;
         case 0x68: printf(" Х"); break;
         case 0x69: printf(" И"); break;
         case 0x6A: printf(" Й"); break;
         case 0x6B: printf(" К"); break;
         case 0x6C: printf(" Л"); break;
         case 0x6D: printf(" М"); break;
         case 0x6E: printf(" Н"); break;
         case 0x6F: printf(" О"); break;
         case 0x70: printf(" П"); break;
         case 0x71: printf(" Я"); break;
         case 0x72: printf(" Р"); break;
         case 0x73: printf(" С"); break;
         case 0x74: printf(" Т"); break;
         case 0x75: printf(" У"); break;
         case 0x76: printf(" Ж"); break;
         case 0x77: printf(" В"); break;
         case 0x78: printf(" Ь"); break;
         case 0x79: printf(" Ы"); break;
         case 0x7A: printf(" З"); break;
         case 0x7B: printf(" Ш"); break;
         case 0x7C: printf(" Э"); break;
         case 0x7D: printf(" Щ"); break;
         case 0x7E: printf(" Ч"); break;
       }
     }
     printf("   \t--> #%2.2X\n",hist[c]);
     c++;
   }
 }
 printf("\n");
 f = fopen(argv[1],"rb");
 if(f==NULL) return -2;
 png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
 if(!png) return -3;
 png_infop info = png_create_info_struct(png);
 if(!info) return -4;
 if(setjmp(png_jmpbuf(png))) return -5;
 png_init_io(png,f);
 png_read_info(png,info);
 x = png_get_image_width(png,info);
 y = png_get_image_height(png,info);
 if(png_get_color_type(png,info)!=PNG_COLOR_TYPE_GRAY)
 {
   printf("\nERROR: PNG image must be gray! %i\n\n",png_get_color_type(png,info));
   return -6;
 }
 png_bytep* img = (png_bytep*)malloc(sizeof(png_bytep)*y);
 for(j=0;j<y;j++) img[j] = (png_byte*)malloc(png_get_rowbytes(png,info));
 png_read_image(png,img);
 fclose(f);
 f = fopen("rk-graph.asm","wt");
 if(f==NULL) return -7;
 fb = fopen("rk-graph.bin","wb");
 if(fb==NULL){fclose(f);return -8;}
 png_destroy_read_struct(&png, &info, NULL);
 for(j=0;j<6;j++)
 {
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<64;i++) fprintf(f,"0,");
   fprintf(f,"0,0,0,0,0 ; %i\n",j);
   for(i=0;i<78;i++) fputc(0,fb);
 }
 e = 0;
 for(j=0;j<y;j++)
 {
   if(j>=50) break;
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<9;i++) fputc(0,fb);
   for(i=0;i<x;i++)
   {
      if(i>=128) break;
      c = img[j][i];
      printf("%c"," .:-=+*#%vnmVNM@"[c>>4]);
      e<<=1;e/=3; // the same as /1.5
#ifdef DEBUG
printf(" (%i,%i) brightness before %2.2X e=%i\n",i,j,c,e);
#endif
      c += e;
      e = 0;
      while(c<0){c++;e--;}
      while(c>255){c--;e++;}
#ifdef DEBUG
printf(" (%i,%i) brightness after %2.2X e=%i\n",i,j,c,e);
#endif
      if(i&1)
      { // second pixel in pair
        z2 = c/a;
#ifdef DEBUG
printf(" (%i,%i) z2 before %X\n",i,j,z2);
#endif
        if(z2>=3*h+1) z2=3*h;
        if(hist[(z1<<4)|z2]==0)
        {
          b = -1;
          k = 3*h+1;
          for(z=0;z<=3*h;z++)
          { // test every possibility
            if(hist[(z1<<4)|z])
            {
              if(z > z2)
              {
                if(z-z2<k){k=z-z2;b=z;}
              }
              else
              {
                if(z2-z<k){k=z2-z;b=z;}
              }
            }
          }
          if(b<0) return -9;
          z2 = b;
        }
        e2 = c-z2*a;
        e += e2;
#ifdef DEBUG
printf(" (%i,%i) z2 after %X e=%i --> %i\n",i,j,z2,e2,e);
#endif
        fprintf(f,"%i,",hist[(z1<<4)|z2]);
        fputc(hist[(z1<<4)|z2],fb);
#ifdef DEBUG
printf(" (%i,%i) >>>>>>>>>>>>>>>>>>>>>>> %2.2X\n",i,j,hist[(z1<<4)|z2]);
#endif
      }
      else
      { // first pixel in pair
        z1 = c/a;
#ifdef DEBUG
printf(" (%i,%i) z1 before %X\n",i,j,z1);
#endif
        if(z1>=3*h+1) z1=3*h;
        while(allz[z1]) z1++;
        e1 = c-z1*a;
        e += e1;
#ifdef DEBUG
printf(" (%i,%i) z1 after %X e=%i --> %i\n",i,j,z1,e1,e);
#endif
      }
   }
   printf("\n");
   fprintf(f,"0,0,0,0,0 ; %i\n",j+6);
   for(i=0;i<5;i++) fputc(0,fb);
 }
 while(j<55)
 {
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<64;i++) fprintf(f,"0,");
   fprintf(f,"0,0,0,0,0 ; %i\n",j+6);
   for(i=0;i<78;i++) fputc(0,fb);
   j++;
 }
 fclose(f);
 return 0;
}
Также создал репу Super-86RK куда его и залил:

https://gitlab.com/shaos/super-86rk/-/blob/main/tools/rk-pgraph.c
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:

А теперь посжимаем бинарный образ этой картинки разными пакерами (и для сравнения - архиваторами):

Code: Select all

-rw-r--r-- 1 shaos shaos  4758 Apr  2 00:59 rk-graph.bin <<<<<< ORIGINAL 78x61
-rw-r--r-- 1 shaos shaos  1473 Apr  2 01:12 rk-graph.bff <<<<<< SHAFF0
-rw-r--r-- 1 shaos shaos  1464 Apr  2 00:59 rk-graph.bin.lz4
-rw-r--r-- 1 shaos shaos  1203 Apr  2 01:12 rk-graph.binFF <<<< SHAFF1
-rw-r--r-- 1 shaos shaos  1196 Apr  2 01:14 rk-graph.zip
-rw-r--r-- 1 shaos shaos  1157 Apr  2 01:13 rk-graph.bin.hst
-rw-r--r-- 1 shaos shaos  1151 Apr  2 01:13 rk-graph.bin.hrm
-rw-r--r-- 1 shaos shaos  1149 Apr  2 01:14 rk-graph.bin.zx7
-rw-r--r-- 1 shaos shaos  1148 Apr  2 00:59 rk-graph.bin.xz
-rw-r--r-- 1 shaos shaos  1143 Apr  2 01:13 rk-graph.bin.mlz
-rw-r--r-- 1 shaos shaos  1128 Apr  2 00:59 rk-graph.bin.bz2
-rw-r--r-- 1 shaos shaos  1127 Apr  2 01:14 rk-graph.bin.zx0
-rw-r--r-- 1 shaos shaos  1088 Apr  2 00:59 rk-graph.bin.gz
Депакер SHAFF0 для 8080 у меня уже имеется и если паковать им, то до 7600h влезет 20 таких картинок
Депакера SHAFF1 для 8080 у меня ещё нету, но если паковать им, то влезет уже 25 картинок
MegaLZ (кто-то уже делал депакер для 8080) даёт 26 картинок (столько же, сколько и самый лучше пакер ZX0)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

В программе есть теоретическая возможность использования других высот символов (вторым аргументом можно передать число отличное от 5), однако надо кое-что подпилить, чтобы оно полноценно работало - например матрица пар яркостей подразумевает, что их не больше 16, а при 8 линиях их уже будет 8*3+1=25, ну и правильное количество строк надо вычислять в зависимости от выбранной высоты символов (сейчас их всегда 61). Вот например такая матрица пар размером 13х13 получается при высоте символов в 4 пиксела:

Code: Select all

  | 0 1 2 3 4 5 6 7 8 9 A B C
-----------------------------
0 | F 0 0 1 2 0 1 0 0 0 0 0 4
1 | 0 1 0 2 1 2 0 0 0 0 0 0 0
2 | 0 1 3 3 0 4 5 2 0 0 0 0 0
3 | 0 0 0 2 6 1 1 1 0 0 0 0 0
4 | 1 0 1 4 4 7 2 6 3 0 0 0 0
5 | 0 0 1 2 2 2 6 3 0 0 0 0 0
6 | 0 0 0 0 0 4 5 0 0 0 0 0 0
7 | 0 0 0 0 0 0 0 0 0 0 0 0 0
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0
A | 0 0 0 0 0 0 0 0 0 0 0 0 0
B | 0 0 0 0 0 0 0 0 0 0 0 0 0
C | 4 0 0 0 0 0 0 0 0 0 0 0 4
и в 4-пиксельном по высоте варианте только 38 комбинаций вместо 56:

 4px

Code: Select all

00: 0x20        --> #20
03: /           --> #2F
04: ! J         --> #4A
06: '           --> #27
0C: 0x02 0x06 0x12 0x16         --> #16
11: ,           --> #2C
13: ) >         --> #3E
14: 1           --> #31
15: I ]         --> #5D
21: \           --> #5C
22: ( : <       --> #3C
23: - = ^       --> #5E
25: * + 4 ?     --> #3F
26: 2 7 T Т З           --> #7A
27: 3 Э         --> #7C
33: " ;         --> #3B
34: & A X Y А Х         --> #68
35: Д           --> #64
36: Л           --> #6C
37: Z           --> #5A
40: L           --> #4C
42: [           --> #5B
43: % C G С     --> #73
44: U V Ц У     --> #75
45: $ 6 O Q S W О       --> #6F
46: 8 И         --> #69
47: 0 9 @ Й Ж Ш         --> #7B
48: Ф Я Щ       --> #7D
52: Ь           --> #78
53: K К         --> #6B
54: Г Ы         --> #79
55: D N         --> #4E
56: # 5 H Н П Ч         --> #7E
57: M Ю М       --> #6D
65: E F Б Е     --> #65
66: B P R Р В           --> #77
C0: 0x01 0x05 0x11 0x15         --> #15
CC: 0x03 0x07 0x13 0x17         --> #17

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

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Shaos wrote:и в 4-пиксельном по высоте варианте только 38 комбинаций вместо 56
Как можно видеть ниже качество при 4-пиксельных символах получается хреновенькое:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

Программное перемещение видеопамяти в РК-совместимых компах

Post by Alikberov »

За использование Вашего набора символов под оттенки серого в этом видео в суд не подадите? :mrgreen:

(Со звуком ещё не разобрался - там всё сложнее.)
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Ну мой набор символов урезан до 5 пикселов в высоту (и каждый урезанный символ представляет собой пару серых пикселов - левый и правый - и каждый из этих "пикселов" способен передать 16 градаций серого), а на видео - полновесные буквы, да ещё и с дырками между символов :)

А в моих символах будет вот так :mrgreen:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Программное перемещение видеопамяти в РК-совместимых ком

Post by Shaos »

Вот ещё один кадр, в котором изначально есть градации серого, преобразованный в "мои" 5-пиксельные по высоте символы:
rk-pgraph5-BadApple2.jpg
P.S. И ещё один кадр с полутенями ;)
rk-pgraph5-BadApple3.jpg
P.S. Продолжение про видео перенесено в новую тему: viewtopic.php?f=93&t=22417
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net