(論理編)ST7735S P(128x160)用のキャラクタージェネレータプロセッサを作って遊ぶ


x VGSZeroは、勝手に応援で発想を得た


目的
したいこと、最小限で文字8x8を表示する仕組み
あるいみST7735用VDPの様な物
ドットトレース方式で1ドット毎に文字のフォントROMを読み込む
表示する文字は、キャラクターRAMに入っている
水平方向は、x
垂直方向は、y

xを3ビットシフトしたのがキャラクターRAM
キャラクターRAMの内容を読み取って
8バイト刻みがフォントROMの先頭
yを0x07したのがフォントROMのライン

見たいな仕様

オンラインコンパイラで作って遊ぶ
まず24ドットx8ドット
フォントROMは、0123
キャラクターRAMは、123
ビット列は、76543210

いろいろ
夢にまで、でちったよ!!
8x8は、ちっちゃくて、みずらくて、気に食わないが
できそうなので作ってみる


![o_coq142.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/549a5f1b-0d4a-89bf-a13a-4ea82b3619d3.jpeg)


●とりま、0で埋める

```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    printf("\nSTART\n\n");
    for(int y=0;y<8;y++){
        for(int x=0;x<24;x++){
        
        
        printf("%d",0);
        
        
        }//for x
        printf("\n");
    }//for y
    
}//main


```

```


START

000000000000000000000000
000000000000000000000000
000000000000000000000000
000000000000000000000000
000000000000000000000000
000000000000000000000000
000000000000000000000000
000000000000000000000000


```

●フォントの内容を表示

```c++


//1234567890
int ch_data7[8 * 4] = {
  0x70, 0x88, 0x98, 0xa8, 0xc8, 0x70, 0x00, 0x00, //( 48) 0
  0x10, 0x30, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00, //( 49) 1
  0x70, 0x88, 0x08, 0x30, 0x40, 0xf8, 0x00, 0x00, //( 50) 2
  0x70, 0x88, 0x30, 0x08, 0x88, 0x70, 0x00, 0x00  //( 51) 3
};


#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    printf("\nSTART\n\n");
    int a;int ch;
    for(int y=0;y<8;y++){
        for(int x=0;x<24;x++){
        
        ch = 0;
        a = 0x80 & (ch_data7[ (y & 0x07 ) + (ch * 8) ] << ( x & 0x07) ) ;
        a = a >> 7;
        printf("%d ",a);
        
        }//for x
        printf("\n");
    }//for y
    
}//main


```


```


START

0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 
1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 
1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 
1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 0 1 0 0 0 
0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 


```

●キャラクターRAMの内容を表示


```c++



//1234567890
int ch_data7[8 * 4] = {
  0x70, 0x88, 0x98, 0xa8, 0xc8, 0x70, 0x00, 0x00, //( 48) 0
  0x10, 0x30, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00, //( 49) 1
  0x70, 0x88, 0x08, 0x30, 0x40, 0xf8, 0x00, 0x00, //( 50) 2
  0x70, 0x88, 0x30, 0x08, 0x88, 0x70, 0x00, 0x00  //( 51) 3
};

char st_p[3][8] = {
    {'1', '2', '3'},
    {' ', ' ', ' '}
};

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    printf("\nSTART\n\n");
    int a;int ch;
    for(int y=0;y<8;y++){
        for(int x=0;x<24;x++){
        
        ch = st_p[y >> 3][x >> 3] - '0';
        a = 0x80 & (ch_data7[ (y & 0x07 ) + (ch * 8) ] << ( x & 0x07) ) ;
        a = a >> 7;
        printf("%d ",a);
        
        }//for x
        printf("\n");
    }//for y
    
}//main



```


```


START

0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 
0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 
0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 
0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 
0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

```