📄 video2.c
字号:
//video gen
//B.0 is sync:1000 ohm + diode to 75 ohm resistor
//D.7 is video:330 ohm + diode to 75 ohm resistor
//#include <Mega163.h>
#include "iom8515v.h"
#define lineTime 1014 //507 //cycles = 63.5 * 8
#define begin {
#define end }
#define ScreenTop 65 //25
#define ScreenBot 177 //225
char syncON, syncOFF, v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16;
int i,j,LineCount;
char screen[900];
const char bitmap[900]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF8,0x00,0x02,0x04,0x4C,0x20,0x00,0x00,0x02,0x12,0x00,0x21,0x00,0x00,0x00,0x1F,
0xFC,0x00,0x44,0xA,0x00,0x00,0x00,0x00,0x09,0x00,0x20,0x00,0x48,0x00,0x00,0x3F,
0xFC,0x00,0x81,0x88,0x00,0xE4,0x00,0x00,0x14,0x00,0x00,0x10,0x22,0x00,0x00,0x3F,
0xF8,0x00,0x14,0x04,0x01,0xE0,0x00,0x00,0x00,0x08,0x28,0x78,0x44,0x00,0x00,0x1F,
0xFA,0x00,0x05,0x00,0x03,0xF2,0x00,0x00,0x01,0xC4,0x11,0xF8,0x24,0x00,0x00,0x5F,
0xF8,0x00,0x18,0x08,0x05,0xE1,0x00,0x00,0x01,0xF0,0x7F,0xF7,0xE,0x00,0x00,0x1F,
0xF8,0x00,0x26,0x27,0x83,0xE0,0x00,0x00,0x03,0xFC,0x3F,0xCF,0xFF,0x00,0x00,0x1F,
0xF8,0x00,0xF,0xFF,0xC1,0xE0,0x84,0x00,0x21,0xFF,0xBC,0xF,0xFF,0x80,0x00,0x1F,
0xF8,0x00,0x3F,0xFF,0xF3,0xFF,0xFE,0x00,0x00,0xFF,0x78,0x2F,0x8F,0x80,0x00,0x1F,
0xF8,0x00,0x3E,0x8F,0xEB,0xFF,0xFF,0x00,0x44,0x46,0x00,0x17,0xA7,0xD0,0x00,0x1F,
0xF8,0x00,0x1C,0x47,0xD7,0xFF,0xFF,0x00,0x20,0xA0,0x3C,0x27,0x47,0x98,0x00,0x1F,
0xF8,0x00,0x50,0x9F,0xC7,0xC0,0xF,0x00,0x03,0x00,0x38,0x87,0x17,0xA2,0x00,0x1F,
0xF8,0x00,0x07,0x87,0x8F,0x72,0x3F,0x00,0x27,0xFE,0x18,0x27,0x67,0x44,0x00,0x1F,
0xF8,0x00,0xF,0xD7,0x1E,0x78,0x7E,0x00,0x47,0xFF,0x38,0x47,0x07,0x02,0x00,0x1F,
0xF8,0x00,0x17,0xEF,0x1C,0x78,0x7E,0x00,0x2F,0xCE,0x00,0x27,0xF,0x40,0x00,0x1F,
0xF8,0x00,0x23,0xFE,0x7C,0x78,0xFA,0x00,0x00,0xC,0x38,0x17,0x9E,0x00,0x00,0x1F,
0xF8,0x00,0x01,0xFE,0x28,0x7B,0xD4,0x00,0x00,0x1E,0x3C,0xF7,0x7E,0x00,0x00,0x1F,
0xF8,0x00,0xA,0x7E,0x28,0xF8,0x08,0x00,0x00,0x5C,0x7F,0xC7,0xFD,0x00,0x00,0x1F,
0xF8,0x00,0x05,0xFE,0x10,0xFE,0x10,0x00,0x00,0xC,0x7F,0xF,0xE0,0x00,0x00,0x1F,
0xF8,0x00,0x01,0xFF,0x00,0xFF,0x00,0x00,0x00,0xE,0x7C,0x87,0x40,0x00,0x00,0x1F,
0xF8,0x00,0x43,0xEF,0xC0,0xF7,0x84,0x00,0x00,0x1E,0x88,0x27,0x24,0x00,0x00,0x1F,
0xF8,0x00,0xF,0xD7,0xE1,0xE7,0xD0,0x00,0x00,0xC,0x04,0x47,0xA,0x00,0x00,0x1F,
0xF8,0x00,0x3F,0x81,0xD3,0xE3,0xF0,0x00,0x00,0xFC,0x00,0x27,0x20,0x00,0x00,0x1F,
0xF8,0x85,0xFF,0x00,0x27,0xC9,0xFC,0x21,0x3F,0xFF,0xFE,0x07,0x00,0x00,0x00,0x1F,
0xF8,0x03,0xFC,0x40,0x1F,0x80,0xFE,0xA0,0x7F,0xFF,0xFF,0xFF,0x00,0x81,0x00,0x1F,
0xF8,0x14,0x78,0x48,0x1F,0x00,0x7F,0xC1,0xFF,0xB4,0x7F,0xFF,0xFF,0xFF,0x00,0x1F,
0xF8,0x22,0xA,0x00,0x7E,0x02,0x3F,0xFA,0x7C,0x01,0x4F,0xFF,0xFF,0xFE,0x00,0x1F,
0xF8,0x58,0x00,0x01,0xFC,0x08,0x1F,0xFD,0xE2,0x50,0x00,0xFF,0xFF,0xFE,0x00,0x1F,
0xF8,0x21,0x44,0x4F,0xFD,0x02,0x8F,0xFA,0x58,0x81,0x08,0x5F,0xFF,0xFC,0x00,0x1F,
0xF8,0x00,0x88,0x3F,0xE8,0x14,0x27,0xF0,0x24,0x00,0x04,0x07,0xFF,0xFC,0x00,0x1F,
0xF8,0x00,0x00,0x3F,0x80,0x00,0x13,0xC0,0x10,0x08,0x00,0x10,0xFF,0xF0,0x00,0x1F,
0xF8,0x00,0x00,0x01,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x1F,
0xF8,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA4,0x10,0x00,0x1F,
0xF8,0x00,0x00,0x48,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x22,0x00,0x1F,
0xF8,0x00,0x00,0x11,0x82,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xC,0x20,0x00,0x1F,
0xF8,0x00,0x00,0x00,0x28,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,0x1F,
0xF8,0x00,0x00,0x40,0x85,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x21,0x40,0x00,0x1F,
0xF8,0x00,0x00,0xA,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x1B,0xB0,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x09,0x20,0x00,0x10,0x00,0x02,0x08,0x10,0x02,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x49,0x70,0x04,0x10,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x19,0xA0,0x20,0x10,0x20,0x20,0x10,0x08,0x90,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x09,0x70,0xF0,0x10,0x5F,0x83,0xE7,0xF0,0x7C,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0xA,0xA9,0xA,0x10,0xB0,0x94,0x62,0x58,0x53,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x00,0xA2,0x05,0x10,0x20,0x00,0x92,0x48,0x89,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x8E,0xB3,0xFE,0x10,0x60,0x09,0x12,0x68,0xFF,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0xA,0xC2,0x00,0x10,0x24,0x08,0x12,0x48,0x82,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x04,0x42,0x10,0x50,0x20,0x1D,0x12,0x4C,0x80,0x00,0x00,0x00,0x1F,
0xF8,0x00,0x00,0x04,0x42,0x04,0x18,0x28,0x00,0x36,0x48,0x85,0x00,0x00,0x00,0x1F,
0xFA,0x00,0x00,0x04,0x41,0x18,0x50,0x12,0xCC,0x32,0x4C,0x42,0x00,0x00,0x00,0x5F,
0xF8,0x00,0x00,0x04,0x42,0xF4,0xFE,0x1F,0x03,0xE7,0x6C,0x3C,0x00,0x00,0x00,0x1F,
0xFC,0x00,0x00,0x08,0x11,0x00,0x08,0x00,0x42,0xC8,0x20,0x42,0x00,0x00,0x00,0x3F,
0xFC,0x00,0x00,0x00,0x00,0x82,0x45,0x04,0x21,0x20,0x08,0x00,0x00,0x00,0x00,0x3F,
0xF8,0x00,0x00,0x04,0x00,0x08,0x10,0x00,0x04,0x00,0x00,0x41,0x00,0x00,0x00,0x1F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
void t1_cmpA(void)
{
PORTB = syncON; //start the Horizontal sync pulse
TCNT0=0; //count timer 0 at 1/usec
LineCount ++ ; //update the curent scanline number
if (LineCount==248) // 248-250 场同步脉冲
{
syncON = 0b00000001;
syncOFF = 0;
}
if (LineCount==251)
{
syncON = 0;
syncOFF = 0b00000001;
}
if (LineCount>=263) //场同步结束
LineCount = 1;
for(i=0;i<2;i++)
asm("nop");
PORTB = syncOFF;
}
void main(void)
{
OCR1A = lineTime; //One NTSC line
TCCR1B = 9; //full speed; clear-on-match
TCCR1A = 0x00; //turn off pwm and oc lines
TIMSK = 0x10; //enable interrupt
DDRD = 0xff; //video out and switches
DDRB =0xff;
TCCR0 = 2;
MCUCR =0x80;
LineCount = 1;
syncON = 0b00000000;
syncOFF = 0b00000001;
//initialize screen
/* for (i=0;i<799;i=i+16)
{
for(j=0;j<8;j=j+1)
screen[i+j]=0x0f;
for(j=0;j<8;j=j+1)
screen[i+j+8]=0x0f;
} */
for(i=0;i<899;i++)
screen[i]=bitmap[i];
MCUCR = 0b01000000;
asm ("sei"); // all interrupte enable
while(1)
{
if (LineCount<ScreenBot && LineCount>=ScreenTop)
{
i=(LineCount-ScreenTop)<<2 & 0xfff0; //i=0,0,16,16,32,32.....
}
MCUCR =0x80;
asm ("sleep");
if (LineCount<ScreenBot && LineCount>ScreenTop)
{
v1 = screen[i];
v2 = screen[i+1];
v3 = screen[i+2];
v4 = screen[i+3];
v5 = screen[i+4];
v6 = screen[i+5];
v7 = screen[i+6];
v8 = screen[i+7];
v9 = screen[i+8];
v10 = screen[i+9];
v11 = screen[i+10];
v12 = screen[i+11];
v13 = screen[i+12];
v14 = screen[i+13];
v15 = screen[i+14];
v16 = screen[i+15];
PORTD=v1*1;
PORTD=v1*2;
PORTD=v1*4;
PORTD=v1*8;
PORTD=v1*16;
PORTD=v1*32;
PORTD=v1*64;
PORTD=v1*128;
PORTD=v2*1;
PORTD=v2*2;
PORTD=v2*4;
PORTD=v2*8;
PORTD=v2*16;
PORTD=v2*32;
PORTD=v2*64;
PORTD=v2*128;
PORTD=v3*1;
PORTD=v3*2;
PORTD=v3*4;
PORTD=v3*8;
PORTD=v3*16;
PORTD=v3*32;
PORTD=v3*64;
PORTD=v3*128;
PORTD=v4*1;
PORTD=v4*2;
PORTD=v4*4;
PORTD=v4*8;
PORTD=v4*16;
PORTD=v4*32;
PORTD=v4*64;
PORTD=v4*128;
PORTD=v5*1;
PORTD=v5*2;
PORTD=v5*4;
PORTD=v5*8;
PORTD=v5*16;
PORTD=v5*32;
PORTD=v5*64;
PORTD=v5*128;
PORTD=v6*1;
PORTD=v6*2;
PORTD=v6*4;
PORTD=v6*8;
PORTD=v6*16;
PORTD=v6*32;
PORTD=v6*64;
PORTD=v6*128;
PORTD=v7*1;
PORTD=v7*2;
PORTD=v7*4;
PORTD=v7*8;
PORTD=v7*16;
PORTD=v7*32;
PORTD=v7*64;
PORTD=v7*128;
PORTD=v8*1;
PORTD=v8*2;
PORTD=v8*4;
PORTD=v8*8;
PORTD=v8*16;
PORTD=v8*32;
PORTD=v8*64;
PORTD=v8*128;
PORTD=v9*1;
PORTD=v9*2;
PORTD=v9*4;
PORTD=v9*8;
PORTD=v9*16;
PORTD=v9*32;
PORTD=v9*64;
PORTD=v9*128;
PORTD=v10*1;
PORTD=v10*2;
PORTD=v10*4;
PORTD=v10*8;
PORTD=v10*16;
PORTD=v10*32;
PORTD=v10*64;
PORTD=v10*128;
PORTD=v11*1;
PORTD=v11*2;
PORTD=v11*4;
PORTD=v11*8;
PORTD=v11*16;
PORTD=v11*32;
PORTD=v11*64;
PORTD=v11*128;
PORTD=v12*1;
PORTD=v12*2;
PORTD=v12*4;
PORTD=v12*8;
PORTD=v12*16;
PORTD=v12*32;
PORTD=v12*64;
PORTD=v12*128;
PORTD=v13*1;
PORTD=v13*2;
PORTD=v13*4;
PORTD=v13*8;
PORTD=v13*16;
PORTD=v13*32;
PORTD=v13*64;
PORTD=v13*128;
PORTD=v14*1;
PORTD=v14*2;
PORTD=v14*4;
PORTD=v14*8;
PORTD=v14*16;
PORTD=v14*32;
PORTD=v14*64;
PORTD=v14*128;
PORTD=v15*1;
PORTD=v15*2;
PORTD=v15*4;
PORTD=v15*8;
PORTD=v15*16;
PORTD=v15*32;
PORTD=v15*64;
PORTD=v15*128;
PORTD=v16*1;
PORTD=v16*2;
PORTD=v16*4;
PORTD=v16*8;
PORTD=v16*16;
PORTD=v16*32;
PORTD=v16*64;
PORTD=v16*128;
PORTD=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -