#include "williams.h" //#link "williams.c" // 256x304x4bpp video memory #define LOCHAR 0x21 #define HICHAR 0x5e const byte font8x8[HICHAR-LOCHAR+1][8] = { { 0x18,0x18,0x18,0x18,0x00,0x00,0x18,0x00 }, { 0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00 }, { 0x66,0x66,0xff,0x66,0xff,0x66,0x66,0x00 }, { 0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00 }, { 0x62,0x66,0x0c,0x18,0x30,0x66,0x46,0x00 }, { 0x3c,0x66,0x3c,0x38,0x67,0x66,0x3f,0x00 }, { 0x06,0x0c,0x18,0x00,0x00,0x00,0x00,0x00 }, { 0x0c,0x18,0x30,0x30,0x30,0x18,0x0c,0x00 }, { 0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x00 }, { 0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00 }, { 0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00 }, { 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30 }, { 0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00 }, { 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00 }, { 0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0x00 }, { 0x3c,0x66,0x6e,0x76,0x66,0x66,0x3c,0x00 }, { 0x18,0x18,0x38,0x18,0x18,0x18,0x7e,0x00 }, { 0x3c,0x66,0x06,0x0c,0x30,0x60,0x7e,0x00 }, { 0x3c,0x66,0x06,0x1c,0x06,0x66,0x3c,0x00 }, { 0x06,0x0e,0x1e,0x66,0x7f,0x06,0x06,0x00 }, { 0x7e,0x60,0x7c,0x06,0x06,0x66,0x3c,0x00 }, { 0x3c,0x66,0x60,0x7c,0x66,0x66,0x3c,0x00 }, { 0x7e,0x66,0x0c,0x18,0x18,0x18,0x18,0x00 }, { 0x3c,0x66,0x66,0x3c,0x66,0x66,0x3c,0x00 }, { 0x3c,0x66,0x66,0x3e,0x06,0x66,0x3c,0x00 }, { 0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00 }, { 0x00,0x00,0x18,0x00,0x00,0x18,0x18,0x30 }, { 0x0e,0x18,0x30,0x60,0x30,0x18,0x0e,0x00 }, { 0x00,0x00,0x7e,0x00,0x7e,0x00,0x00,0x00 }, { 0x70,0x18,0x0c,0x06,0x0c,0x18,0x70,0x00 }, { 0x3c,0x66,0x06,0x0c,0x18,0x00,0x18,0x00 }, { 0x3c,0x66,0x6e,0x6e,0x60,0x62,0x3c,0x00 }, { 0x18,0x3c,0x66,0x7e,0x66,0x66,0x66,0x00 }, { 0x7c,0x66,0x66,0x7c,0x66,0x66,0x7c,0x00 }, { 0x3c,0x66,0x60,0x60,0x60,0x66,0x3c,0x00 }, { 0x78,0x6c,0x66,0x66,0x66,0x6c,0x78,0x00 }, { 0x7e,0x60,0x60,0x78,0x60,0x60,0x7e,0x00 }, { 0x7e,0x60,0x60,0x78,0x60,0x60,0x60,0x00 }, { 0x3c,0x66,0x60,0x6e,0x66,0x66,0x3c,0x00 }, { 0x66,0x66,0x66,0x7e,0x66,0x66,0x66,0x00 }, { 0x3c,0x18,0x18,0x18,0x18,0x18,0x3c,0x00 }, { 0x1e,0x0c,0x0c,0x0c,0x0c,0x6c,0x38,0x00 }, { 0x66,0x6c,0x78,0x70,0x78,0x6c,0x66,0x00 }, { 0x60,0x60,0x60,0x60,0x60,0x60,0x7e,0x00 }, { 0x63,0x77,0x7f,0x6b,0x63,0x63,0x63,0x00 }, { 0x66,0x76,0x7e,0x7e,0x6e,0x66,0x66,0x00 }, { 0x3c,0x66,0x66,0x66,0x66,0x66,0x3c,0x00 }, { 0x7c,0x66,0x66,0x7c,0x60,0x60,0x60,0x00 }, { 0x3c,0x66,0x66,0x66,0x66,0x3c,0x0e,0x00 }, { 0x7c,0x66,0x66,0x7c,0x78,0x6c,0x66,0x00 }, { 0x3c,0x66,0x60,0x3c,0x06,0x66,0x3c,0x00 }, { 0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x00 }, { 0x66,0x66,0x66,0x66,0x66,0x66,0x3c,0x00 }, { 0x66,0x66,0x66,0x66,0x66,0x3c,0x18,0x00 }, { 0x63,0x63,0x63,0x6b,0x7f,0x77,0x63,0x00 }, { 0x66,0x66,0x3c,0x18,0x3c,0x66,0x66,0x00 }, { 0x66,0x66,0x66,0x3c,0x18,0x18,0x18,0x00 }, { 0x7e,0x06,0x0c,0x18,0x30,0x60,0x7e,0x00 }, { 0x3c,0x30,0x30,0x30,0x30,0x30,0x3c,0x00 }, { 0x00,0x60,0x30,0x18,0x0c,0x06,0x03,0x00 }, { 0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00 }, { 0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x18 } }; const byte sprite1[] = { 8,16, 0x00,0x09,0x99,0x00,0x00,0x99,0x90,0x00, 0x00,0x94,0x94,0x90,0x09,0x49,0x49,0x00, 0x04,0x49,0x49,0x90,0x09,0x94,0x94,0x90, 0x94,0x99,0x94,0x90,0x09,0x49,0x99,0x49, 0x99,0x99,0x49,0x93,0x39,0x94,0x99,0x99, 0x04,0x49,0x99,0x94,0x49,0x99,0x94,0x90, 0x00,0x94,0x94,0x43,0x34,0x49,0x49,0x00, 0x00,0x09,0x43,0x94,0x49,0x34,0x90,0x00, 0x00,0x90,0x00,0x39,0x93,0x00,0x09,0x00, 0x00,0x09,0x83,0x33,0x33,0x33,0x90,0x00, 0x00,0x09,0x32,0x23,0x32,0x23,0x90,0x00, 0x00,0x03,0x03,0x23,0x82,0x30,0x30,0x00, 0x03,0x30,0x00,0x33,0x33,0x00,0x03,0x30, 0x00,0x30,0x03,0x00,0x00,0x30,0x03,0x00, 0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x00, 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, }; void draw_char(char ch, byte x, byte y, byte color) { byte data[8][4]; const byte* src = &font8x8[ch-LOCHAR][0]; int i,j,pixels; if (ch < LOCHAR || ch > HICHAR) return; for (i=0; i<8; i++) { byte b = *src++; for (j=0; j<4; j++) { pixels = 0; if (b & 0x80) pixels |= color & 0xf0; if (b & 0x40) pixels |= color & 0x0f; data[i][j] = (byte)pixels; b <<= 2; } } blit_copy(x, y, 4, 8, (byte*)data); } void draw_string(const char* str, byte x, byte y, byte color) { char ch; do { ch = *str++; draw_char(ch, x, y, color); x += 4; } while (ch); } int main(void) { byte i; rom_select = 1; blit_solid(0, 0, 152, 255, 0x00); for (i=0; i<16; i++) palette[i] = (byte)(i*7); for (i=0; i<152; i++) { vidmem[0][i] = 16; vidmem[i][2] = 32; draw_pixel(i, i, 0x77); draw_pixel(i+1, i, 0x33); } while (1) { watchdog0x39 = 0x39; blit_sprite(sprite1, 35, 20); blit_sprite_solid(sprite1, 55, 20, 0x24); blit_solid(75, 20, 40, 20, 0x35); draw_string("HELLO WORLD", 20, 5, 0x88); } return 0; }