#include "boot.h"

#define VID_CMD    0x80
#define VID_DAT    0x81
#define VID_CMD_SET_TEXT_MODE       0
#define VID_CMD_SET_PIXEL_MODE      1
#define VID_CMD_CLR                 2
#define VID_CMD_TEXT_POS_X          3
#define VID_CMD_TEXT_POS_Y          5
#define VID_CMD_PIXEL_POS_X         4
#define VID_CMD_PIXEL_POS_Y         6

void putc(char c){
    io_out(VID_DAT, c);
}

void puts(char * s){
    while(*s){
        putc(*s);
        s++;
    }
}

void main(void)
{
    delay_ms(100);

    for(;;){
        io_out(VID_CMD, VID_CMD_TEXT_POS_X);
        io_out(VID_DAT, 0);
        io_out(VID_CMD, VID_CMD_TEXT_POS_Y);
        io_out(VID_DAT, 0);
        io_out(VID_CMD, VID_CMD_SET_TEXT_MODE);
        io_out(VID_CMD, VID_CMD_CLR);


        for(uint8_t i=0; i<18; i++){
            putc('0'+i);
            puts("\r\n");
        }

        delay_ms(2000);


        io_out(VID_CMD, VID_CMD_SET_PIXEL_MODE);
        io_out(VID_CMD, VID_CMD_CLR);

        for(uint8_t y=0; y<255; y++){
            uint16_t py = 160 + y;
            uint16_t px = 256;

            io_out(VID_CMD, VID_CMD_PIXEL_POS_X);
            io_out(VID_DAT, px&0xff);
            io_out(VID_DAT, px>>8);
            io_out(VID_CMD, VID_CMD_PIXEL_POS_Y);
            io_out(VID_DAT, py&0xff);
            io_out(VID_DAT, py>>8);
            io_out(VID_CMD, VID_CMD_SET_PIXEL_MODE);
            for(uint8_t x=0; x<32; x++)
                io_out(VID_DAT, 0xff);
        }

        delay_ms(2000);
    }
}
