mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-08-28 12:29:33 +00:00
63 lines
3.6 KiB
C
63 lines
3.6 KiB
C
|
|
#include <string.h>
|
|
|
|
typedef unsigned char byte;
|
|
typedef signed char sbyte;
|
|
typedef unsigned short word;
|
|
|
|
__sfr __at (0x2) bitshift_offset;
|
|
volatile __sfr __at (0x3) bitshift_read;
|
|
__sfr __at (0x4) bitshift_value;
|
|
__sfr __at (0x6) watchdog_strobe;
|
|
|
|
byte __at (0x2400) vidmem[224][32]; // 256x224x1 video memory
|
|
|
|
void main();
|
|
// start routine @ 0x0
|
|
// set stack pointer, enable interrupts
|
|
void start() {
|
|
__asm
|
|
LD SP,#0x2400
|
|
DI
|
|
__endasm;
|
|
main();
|
|
}
|
|
|
|
const byte bitmap1[] =
|
|
{9,56,/*{w:72,h:56,bpp:1,xform:"rotate(-90deg)"}*/
|
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0x80,0xFB,0xFF,0xF0,0x01,0x00,0x00,0x00,0x00,0x40,0x04,0x80,0xF3,0x01,0x00,0x00,0x00,0x00,0xB8,0x00,0x00,0xFA,0x01,0x00,0x00,0x00,0x00,0x06,0xFE,0x03,0xFA,0x01,0x00,0x00,0x00,0x00,0x83,0xFF,0x03,0xFD,0x01,0x80,0x00,0x00,0x00,0x81,0xCF,0x00,0xDC,0x00,0x80,0x01,0xC0,0x9F,0x01,0x00,0x00,0xDC,0x00,0x80,0x01,0x30,0xE0,0x00,0x00,0x00,0xD8,0x00,0xC0,0x01,0x0C,0x84,0x41,0x00,0x00,0x98,0x01,0xC0,0x07,0x04,0xF8,0xC2,0x00,0x00,0x38,0x03,0xC0,0x07,0x06,0x00,0x43,0x00,0x00,0x72,0x02,0xC0,0x07,0x02,0x80,0x00,0xF8,0x0F,0xE4,0x02,0xE0,0xFF,0x04,0xF8,0x00,0xFE,0x1F,0xE8,0x04,0xE0,0x03,0x07,0x80,0x00,0xBE,0x0F,0xEC,0x05,0xE0,0x01,0x06,0x80,0x00,0x3C,0x00,0x92,0x05,0xE0,0x00,0x0A,0xFF,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x24,0x08,0x01,0x00,0x00,0x00,0x07,0x60,0x00,0xC6,0x88,0x01,0x00,0x00,0x00,0x07,0x60,0x00,0x02,0x7E,0x03,0x00,0x00,0x80,0x07,0x60,0x00,0xFE,0x27,0x02,0x00,0x00,0x80,0x07,0x60,0x00,0xC1,0x43,0x02,0x00,0x00,0xC0,0x07,0x70,0xC0,0xC0,0x43,0x04,0x00,0x00,0xC0,0x03,0x70,0x40,0xC1,0x67,0x08,0x00,0x00,0xE0,0x03,0x70,0x00,0xE1,0x7F,0x10,0x00,0x1C,0xF0,0x01,0xF0,0x00,0xFA,0xFF,0xA0,0x01,0x7F,0xFE,0x00,0xF0,0x00,0xE2,0x1F,0xC1,0x60,0xFE,0x7F,0x00,0xE0,0x81,0x87,0x0F,0x82,0x81,0xFE,0x3F,0x00,0xE0,0x83,0xC8,0x0F,0x02,0xA5,0xFE,0x0F,0x00,0xE0,0x7F,0xF9,0xBF,0x13,0x9F,0xFD,0x00,0x00,0xE0,0x03,0x81,0xFF,0x1F,0x61,0x00,0x00,0x06,0xE0,0x03,0x02,0xFE,0x8F,0x01,0x00,0x6C,0x04,0x80,0x01,0x02,0xFC,0x83,0x01,0x00,0xC0,0x04,0x80,0x01,0x03,0x0E,0x81,0x00,0x04,0x80,0x03,0x80,0x01,0xFE,0x01,0x62,0x50,0x08,0x00,0x00,0x80,0x01,0x48,0x00,0x1C,0x80,0x08,0x00,0x00,0x80,0x03,0x50,0x00,0x1C,0x00,0x07,0x00,0x00,0x80,0x03,0x50,0x00,0x34,0x00,0x00,0x00,0x00,0x80,0x03,0x50,0x00,0x24,0x00,0x00,0x00,0x00,0x80,0x07,0x90,0x00,0x3A,0x00,0x00,0x00,0x00,0x80,0x0F,0x98,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x3F,0x0C,0x07,0x10,0x00,0x00,0x00,0x00,0x00,0xC1,0x03,0x18,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
|
|
;
|
|
|
|
void draw_shifted_sprite(const byte* src, byte x, byte y) {
|
|
byte i,j;
|
|
byte* dest = &vidmem[x][y>>3];
|
|
byte w = *src++;
|
|
byte h = *src++;
|
|
bitshift_offset = y & 7;
|
|
for (j=0; j<h; j++) {
|
|
bitshift_value = 0;
|
|
for (i=0; i<w; i++) {
|
|
bitshift_value = *src++;
|
|
*dest++ = bitshift_read;
|
|
}
|
|
bitshift_value = 0;
|
|
*dest++ = bitshift_read;
|
|
dest += 31-w;
|
|
}
|
|
}
|
|
|
|
void clrscr() {
|
|
memset(vidmem, 0, sizeof(vidmem));
|
|
}
|
|
|
|
void main() {
|
|
byte x;
|
|
// TODO: clear memory
|
|
clrscr();
|
|
for (x=0; x<255; x++) {
|
|
draw_shifted_sprite(bitmap1, x, x);
|
|
watchdog_strobe++;
|
|
}
|
|
main();
|
|
}
|