Subversion Repositories HelenOS

Rev

Rev 1787 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "font-8x16.h"
  2.  
  3. #define FB_REG "r8"
  4. #define SCAN_REG "r9"
  5.  
  6. #define ADDR_REG "r10"
  7. #define FG_REG "r11"
  8. #define BG_REG "r12"
  9.  
  10. #define FG_COLOR 0xffffffff
  11. #define BG_COLOR 0x00000000
  12.  
  13. #define BPP 4
  14.  
  15. void print_macro_init(void) {
  16.     printf(".macro DEBUG_INIT\n");
  17.     printf("#ifdef CONFIG_DEBUG\n");
  18.     printf("\tlis %s, %d\n", FG_REG, FG_COLOR >> 16);
  19.     printf("\tori %s, %s, %d\n", FG_REG, FG_REG, FG_COLOR & 0xffff);
  20.     printf("\t\n");
  21.     printf("\tlis %s, %d\n", BG_REG, BG_COLOR >> 16);
  22.     printf("\tori %s, %s, %d\n", BG_REG, BG_REG, BG_COLOR & 0xffff);
  23.     printf("\t\n");
  24.     printf("\tmr %s, %s\n", ADDR_REG, FB_REG);
  25.     printf("#endif\n");
  26.     printf(".endm\n");
  27. }
  28.  
  29. void print_macro(const char *name) {
  30.     printf(".macro DEBUG_%s\n", name);
  31.     printf("#ifdef CONFIG_DEBUG\n");
  32.    
  33.     unsigned int y;
  34.     for (y = 0; y < FONT_SCANLINES; y++) {
  35.         printf("\t\n");
  36.        
  37.         if (y > 0)
  38.             printf("\tadd %s, %s, %s\n", ADDR_REG, ADDR_REG, SCAN_REG);
  39.        
  40.         unsigned int i;
  41.         for (i = 0; name[i] != 0; i++) {
  42.             char c = name[i];
  43.            
  44.             unsigned int x;
  45.             for (x = 0; x < FONT_WIDTH; x++) {
  46.                 if (((fb_font[c * FONT_SCANLINES + y] >> (FONT_WIDTH - x)) & 1) == 1)
  47.                     printf("\tstw %s, %d(%s)\n", FG_REG, (i * FONT_WIDTH + x) * BPP, ADDR_REG);
  48.                 else
  49.                     printf("\tstw %s, %d(%s)\n", BG_REG, (i * FONT_WIDTH + x) * BPP, ADDR_REG);
  50.             }
  51.         }
  52.     }
  53.    
  54.     printf("#endif\n");
  55.     printf(".endm\n");
  56. }
  57.  
  58. int main(int argc, char *argv[]) {
  59.     print_macro_init();
  60.    
  61.     int i;
  62.     for (i = 1; i < argc; i++) {
  63.         printf("\n");
  64.         print_macro(argv[i]);
  65.     }
  66.    
  67.     return 0;
  68. }
  69.