Advertisement
xerpi

psp font

Sep 27th, 2013
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.36 KB | None | 0 0
  1. #include <stdarg.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <pspsdk.h>
  5. #include <pspkernel.h>
  6. #include <pspdebug.h>
  7. #include <pspthreadman.h>
  8. #include <pspdisplay.h>
  9.  
  10. PSP_MODULE_INFO("psp8x8font", PSP_MODULE_USER, 1, 1);
  11. PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
  12.  
  13. const char vincent_font_data[] = {
  14.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  15.     0x00, 0x3E, 0x41, 0x55, 0x41, 0x55, 0x49, 0x3E,
  16.     0x00, 0x3E, 0x7F, 0x6B, 0x7F, 0x6B, 0x77, 0x3E,
  17.     0x00, 0x22, 0x77, 0x7F, 0x7F, 0x3E, 0x1C, 0x08,
  18.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08,
  19.     0x00, 0x08, 0x1C, 0x2A, 0x7F, 0x2A, 0x08, 0x1C,
  20.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C,
  21.     0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
  22.     0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0xC1, 0xE3, 0xFF,
  23.     0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00,
  24.     0xFF, 0xFF, 0xE3, 0xDD, 0xDD, 0xDD, 0xE3, 0xFF,
  25.     0x00, 0x0F, 0x03, 0x05, 0x39, 0x48, 0x48, 0x30,
  26.     0x00, 0x08, 0x3E, 0x08, 0x1C, 0x22, 0x22, 0x1C,
  27.     0x00, 0x18, 0x14, 0x10, 0x10, 0x30, 0x70, 0x60,
  28.     0x00, 0x0F, 0x19, 0x11, 0x13, 0x37, 0x76, 0x60,
  29.     0x00, 0x08, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x08,
  30.     0x00, 0x60, 0x78, 0x7E, 0x7F, 0x7E, 0x78, 0x60,
  31.     0x00, 0x03, 0x0F, 0x3F, 0x7F, 0x3F, 0x0F, 0x03,
  32.     0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x08,
  33.     0x00, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66,
  34.     0x00, 0x3F, 0x65, 0x65, 0x3D, 0x05, 0x05, 0x05,
  35.     0x00, 0x0C, 0x32, 0x48, 0x24, 0x12, 0x4C, 0x30,
  36.     0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F,
  37.     0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x3E,
  38.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x1C, 0x1C, 0x1C,
  39.     0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x3E, 0x1C, 0x08,
  40.     0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08,
  41.     0x00, 0x08, 0x18, 0x3F, 0x7F, 0x3F, 0x18, 0x08,
  42.     0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x7F, 0x7F,
  43.     0x00, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
  44.     0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x3E, 0x7F, 0x7F,
  45.     0x00, 0x7F, 0x7F, 0x3E, 0x3E, 0x1C, 0x1C, 0x08,
  46.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  47.     0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18,
  48.     0x00, 0x36, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00,
  49.     0x00, 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36,
  50.     0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08,
  51.     0x00, 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06,
  52.     0x00, 0x3C, 0x66, 0x3C, 0x28, 0x65, 0x66, 0x3F,
  53.     0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
  54.     0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60,
  55.     0x00, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06,
  56.     0x00, 0x00, 0x36, 0x1C, 0x7F, 0x1C, 0x36, 0x00,
  57.     0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
  58.     0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x60,
  59.     0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,
  60.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
  61.     0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
  62.     0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C,
  63.     0x00, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E,
  64.     0x00, 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E,
  65.     0x00, 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C,
  66.     0x00, 0x0C, 0x1C, 0x2C, 0x4C, 0x7E, 0x0C, 0x0C,
  67.     0x00, 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C,
  68.     0x00, 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C,
  69.     0x00, 0x7E, 0x66, 0x0C, 0x0C, 0x18, 0x18, 0x18,
  70.     0x00, 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C,
  71.     0x00, 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C,
  72.     0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00,
  73.     0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
  74.     0x00, 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06,
  75.     0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00,
  76.     0x00, 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60,
  77.     0x00, 0x3C, 0x66, 0x06, 0x1C, 0x18, 0x00, 0x18,
  78.     0x00, 0x38, 0x44, 0x5C, 0x58, 0x42, 0x3C, 0x00,
  79.     0x00, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
  80.     0x00, 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C,
  81.     0x00, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C,
  82.     0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C,
  83.     0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E,
  84.     0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60,
  85.     0x00, 0x3C, 0x66, 0x60, 0x60, 0x6E, 0x66, 0x3C,
  86.     0x00, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
  87.     0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C,
  88.     0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
  89.     0x00, 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66,
  90.     0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E,
  91.     0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63,
  92.     0x00, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63, 0x63,
  93.     0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C,
  94.     0x00, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60,
  95.     0x00, 0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x06,
  96.     0x00, 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66,
  97.     0x00, 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C,
  98.     0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18,
  99.     0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E,
  100.     0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18,
  101.     0x00, 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63,
  102.     0x00, 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63,
  103.     0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18,
  104.     0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E,
  105.     0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E,
  106.     0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00,
  107.     0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78,
  108.     0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00,
  109.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
  110.     0x00, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00,
  111.     0x00, 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E,
  112.     0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C,
  113.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C,
  114.     0x00, 0x06, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E,
  115.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C,
  116.     0x00, 0x1C, 0x36, 0x30, 0x30, 0x7C, 0x30, 0x30,
  117.     0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C,
  118.     0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66,
  119.     0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C,
  120.     0x00, 0x0C, 0x00, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
  121.     0x00, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66,
  122.     0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
  123.     0x00, 0x00, 0x00, 0x63, 0x77, 0x7F, 0x6B, 0x6B,
  124.     0x00, 0x00, 0x00, 0x7C, 0x7E, 0x66, 0x66, 0x66,
  125.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C,
  126.     0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60,
  127.     0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3C, 0x0D, 0x0F,
  128.     0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x60, 0x60,
  129.     0x00, 0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C,
  130.     0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18,
  131.     0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E,
  132.     0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18,
  133.     0x00, 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x6B, 0x3E,
  134.     0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66,
  135.     0x00, 0x00, 0x00, 0x66, 0x66, 0x3E, 0x06, 0x3C,
  136.     0x00, 0x00, 0x00, 0x3C, 0x0C, 0x18, 0x30, 0x3C,
  137.     0x00, 0x0E, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0E,
  138.     0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18,
  139.     0x00, 0x70, 0x18, 0x18, 0x0C, 0x18, 0x18, 0x70,
  140.     0x00, 0x00, 0x00, 0x3A, 0x6C, 0x00, 0x00, 0x00,
  141.     0x00, 0x08, 0x1C, 0x36, 0x63, 0x41, 0x41, 0x7F
  142. };
  143.  
  144.  
  145. #define SCREEN_HEIGHT 272
  146. #define SCREEN_WIDTH  512
  147. #define LINESIZE    512             //in long
  148. #define FRAMESIZE  0xAA000          //in byte
  149.  
  150. unsigned long drawframe;
  151. unsigned char *vramtop=(unsigned char *)0x04000000;
  152. int run = 1;
  153.  
  154. int exit_callback(int arg1, int arg2, void *common);
  155. int CallbackThread(SceSize args, void *argp);
  156. int SetupCallbacks(void);
  157.  
  158. void draw_plot(int x, int y, u32 color);
  159. void font_draw_char(int x, int y, char c, u32 color);
  160. void font_draw_string(int x, int y, char *string, u32 color);
  161. void font_draw_stringf(int x, int y, u32 color, char *s, ...);
  162. unsigned char *GetVramAddr(unsigned long x,unsigned long y);
  163. void Fillvram(unsigned long color);
  164. void changeBuffer();
  165. void initScreen();
  166.  
  167. int main(int argc, char* argv[]) {
  168.     SetupCallbacks();
  169.    
  170.     initScreen();
  171.    
  172.     while(run) {
  173.         Fillvram(0);
  174.         font_draw_string(20, 20, "ola k aseeeeeee!!\naki salto de linea\taqui tabulador", 0xFF0000FF);
  175.         changeBuffer();
  176.     }
  177.    
  178.     return 0;
  179. }
  180.  
  181. void draw_plot(int x, int y, u32 color)
  182. {
  183.     *((u32*)GetVramAddr(x, y)) = color;
  184. }
  185.  
  186. void font_draw_char(int x, int y, char c, u32 color)
  187. {
  188.     if(c == ' ') return;
  189.     int offset_pos = c * 8;
  190.     int i, j, b;
  191.     for(i = 0; i < 8; i++) {
  192.         b = vincent_font_data[offset_pos + i];
  193.         for(j = 0; j < 8; j++) {
  194.             if(b & (1<<j)) {
  195.                 draw_plot(x+(7-j), y+i, color);
  196.             }
  197.         }
  198.     }
  199. }
  200.  
  201. void font_draw_string(int x, int y, char *string, u32 color)
  202. {
  203.     if(!string) return;
  204.     int startx = x;
  205.     const char *s = string;
  206.     while(*s) {
  207.         if(*s == '\n') {
  208.             x = startx;
  209.             y+=8;
  210.         } else if(*s == '\t') {
  211.             x+=8*4;
  212.         } else {
  213.             font_draw_char(x, y, *s, color);
  214.             x+=8;
  215.         }
  216.         s++;
  217.     }
  218. }
  219.  
  220. void font_draw_stringf(int x, int y, u32 color, char *s, ...)
  221. {
  222.     char buffer[256];
  223.     va_list args;
  224.     va_start(args, s);
  225.     vsnprintf(buffer, 256, s, args);
  226.     font_draw_string(x, y, buffer, color);
  227.     va_end(args);
  228. }
  229.  
  230.  
  231. // get vram address for character position
  232. unsigned char *GetVramAddr(unsigned long x,unsigned long y)
  233. {
  234.     return vramtop+(drawframe?FRAMESIZE:0)+x*4+y*LINESIZE*4+0x40000000;
  235. }
  236.  
  237. // clear video ram
  238. void Fillvram(unsigned long color)
  239. {
  240.     unsigned char *vptr0;       //pointer to vram
  241.     unsigned long i;
  242.  
  243.     vptr0=GetVramAddr(0,0);
  244.  
  245.     for (i=0; i<(FRAMESIZE/4); i++)
  246.     {
  247.         *(unsigned long *)vptr0=color;
  248.         vptr0+=4;
  249.     }
  250. }
  251.  
  252. void changeBuffer()
  253. {
  254.     sceDisplayWaitVblankStart();
  255.  
  256.     sceDisplaySetFrameBuf( (void*)GetVramAddr(0,0), 512,
  257.         PSP_DISPLAY_PIXEL_FORMAT_8888, 0);
  258.  
  259.     drawframe = (drawframe?0:1);
  260. }
  261.  
  262. void initScreen()
  263. {
  264.     drawframe = 0;
  265.     sceDisplaySetMode(0,SCREEN_WIDTH,SCREEN_HEIGHT);
  266.  
  267.     sceDisplaySetFrameBuf((void*)vramtop, 512,
  268.         PSP_DISPLAY_PIXEL_FORMAT_8888, 1);
  269. }
  270.  
  271.  
  272. /* Exit callback */
  273. int exit_callback(int arg1, int arg2, void *common)
  274. {
  275.     run = 0;
  276.     sceKernelExitGame();
  277.     return 0;
  278. }
  279.  
  280. /* Callback thread */
  281. int CallbackThread(SceSize args, void *argp)
  282. {
  283.     int cbid;
  284.  
  285.     cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
  286.     sceKernelRegisterExitCallback(cbid);
  287.     sceKernelSleepThreadCB();
  288.  
  289.     return 0;
  290. }
  291.  
  292. /* Sets up the callback thread and returns its thread id */
  293. int SetupCallbacks(void)
  294. {
  295.     int thid = 0;
  296.     thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
  297.     if(thid >= 0) {
  298.         sceKernelStartThread(thid, 0, 0);
  299.     }
  300.     return thid;
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement