Created
September 11, 2016 02:23
-
-
Save christophediericx/79d9eb40a25332ec9a39c7951cbe54b2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define HSYNC 8 | |
#define VSYNC 16 | |
#define ROWS 261 | |
const byte buf[1][200] = { | |
{ 0, 5, 4, 3, 2, 1, 6, 7, 1, 2 , 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2 /* 100 */, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2, 0, 5, 4, 3, 2, 1, 6, 7, 1, 2 /* 200 */ } | |
}; | |
#define SETC(x) PORTB = (PORTB & ~7) | x | |
#define EXEC_NOP asm volatile ("nop\n\t") | |
#define EXEC_10_NOPS EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; | |
#define EXEC_50_NOPS EXEC_10_NOPS; EXEC_10_NOPS; EXEC_10_NOPS; EXEC_10_NOPS; EXEC_10_NOPS; | |
#define EXEC_100_NOPS EXEC_50_NOPS; EXEC_50_NOPS; | |
#define EXEC_LEFT_BLANKING_AND_OVERSCAN() { EXEC_50_NOPS; SETC(0); EXEC_10_NOPS; EXEC_NOP; EXEC_NOP; EXEC_NOP; } | |
#define EXEC_RIGHT_OVERSCAN_AND_BLANKING() { SETC(0); EXEC_50_NOPS; EXEC_50_NOPS; EXEC_10_NOPS; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; EXEC_NOP; } | |
#define EXEC_HSYNC() { PORTB |= HSYNC; EXEC_50_NOPS; EXEC_10_NOPS; EXEC_10_NOPS; EXEC_NOP; PORTB &= ~HSYNC; } | |
#define DRAW_PIXELS_FOR_LINE(i) { \ | |
SETC(buf[i][0]); \ | |
SETC(buf[i][1]); \ | |
SETC(buf[i][2]); \ | |
SETC(buf[i][3]); \ | |
SETC(buf[i][4]); \ | |
SETC(buf[i][5]); \ | |
SETC(buf[i][6]); \ | |
SETC(buf[i][7]); \ | |
SETC(buf[i][8]); \ | |
SETC(buf[i][9]); \ | |
SETC(buf[i][10]); \ | |
SETC(buf[i][11]); \ | |
SETC(buf[i][12]); \ | |
SETC(buf[i][13]); \ | |
SETC(buf[i][14]); \ | |
SETC(buf[i][15]); \ | |
SETC(buf[i][16]); \ | |
SETC(buf[i][17]); \ | |
SETC(buf[i][18]); \ | |
SETC(buf[i][19]); \ | |
SETC(buf[i][20]); \ | |
SETC(buf[i][21]); \ | |
SETC(buf[i][22]); \ | |
SETC(buf[i][23]); \ | |
SETC(buf[i][24]); \ | |
SETC(buf[i][25]); \ | |
SETC(buf[i][26]); \ | |
SETC(buf[i][27]); \ | |
SETC(buf[i][28]); \ | |
SETC(buf[i][29]); \ | |
SETC(buf[i][30]); \ | |
SETC(buf[i][31]); \ | |
SETC(buf[i][32]); \ | |
SETC(buf[i][33]); \ | |
SETC(buf[i][34]); \ | |
SETC(buf[i][35]); \ | |
SETC(buf[i][36]); \ | |
SETC(buf[i][37]); \ | |
SETC(buf[i][38]); \ | |
SETC(buf[i][39]); \ | |
SETC(buf[i][40]); \ | |
SETC(buf[i][41]); \ | |
SETC(buf[i][42]); \ | |
SETC(buf[i][43]); \ | |
SETC(buf[i][44]); \ | |
SETC(buf[i][45]); \ | |
SETC(buf[i][46]); \ | |
SETC(buf[i][47]); \ | |
SETC(buf[i][48]); \ | |
SETC(buf[i][49]); \ | |
SETC(buf[i][50]); \ | |
SETC(buf[i][51]); \ | |
SETC(buf[i][52]); \ | |
SETC(buf[i][53]); \ | |
SETC(buf[i][54]); \ | |
SETC(buf[i][55]); \ | |
SETC(buf[i][56]); \ | |
SETC(buf[i][57]); \ | |
SETC(buf[i][58]); \ | |
SETC(buf[i][59]); \ | |
SETC(buf[i][60]); \ | |
SETC(buf[i][61]); \ | |
SETC(buf[i][62]); \ | |
SETC(buf[i][63]); \ | |
SETC(buf[i][64]); \ | |
SETC(buf[i][65]); \ | |
SETC(buf[i][66]); \ | |
SETC(buf[i][67]); \ | |
SETC(buf[i][68]); \ | |
SETC(buf[i][69]); \ | |
SETC(buf[i][70]); \ | |
SETC(buf[i][71]); \ | |
SETC(buf[i][72]); \ | |
SETC(buf[i][73]); \ | |
SETC(buf[i][74]); \ | |
SETC(buf[i][75]); \ | |
SETC(buf[i][76]); \ | |
SETC(buf[i][77]); \ | |
SETC(buf[i][78]); \ | |
SETC(buf[i][79]); \ | |
SETC(buf[i][80]); \ | |
SETC(buf[i][81]); \ | |
SETC(buf[i][82]); \ | |
SETC(buf[i][83]); \ | |
SETC(buf[i][84]); \ | |
SETC(buf[i][85]); \ | |
SETC(buf[i][86]); \ | |
SETC(buf[i][87]); \ | |
SETC(buf[i][78]); \ | |
SETC(buf[i][89]); \ | |
SETC(buf[i][90]); \ | |
SETC(buf[i][91]); \ | |
SETC(buf[i][92]); \ | |
SETC(buf[i][93]); \ | |
SETC(buf[i][94]); \ | |
SETC(buf[i][95]); \ | |
SETC(buf[i][96]); \ | |
SETC(buf[i][97]); \ | |
SETC(buf[i][98]); \ | |
SETC(buf[i][99]); \ | |
SETC(buf[i][100]); \ | |
SETC(buf[i][101]); \ | |
SETC(buf[i][102]); \ | |
SETC(buf[i][103]); \ | |
SETC(buf[i][104]); \ | |
SETC(buf[i][105]); \ | |
SETC(buf[i][106]); \ | |
SETC(buf[i][107]); \ | |
SETC(buf[i][108]); \ | |
SETC(buf[i][109]); \ | |
SETC(buf[i][110]); \ | |
SETC(buf[i][111]); \ | |
SETC(buf[i][112]); \ | |
SETC(buf[i][113]); \ | |
SETC(buf[i][114]); \ | |
SETC(buf[i][115]); \ | |
SETC(buf[i][116]); \ | |
SETC(buf[i][117]); \ | |
SETC(buf[i][118]); \ | |
SETC(buf[i][119]); \ | |
SETC(buf[i][120]); \ | |
SETC(buf[i][121]); \ | |
SETC(buf[i][122]); \ | |
SETC(buf[i][123]); \ | |
SETC(buf[i][124]); \ | |
SETC(buf[i][125]); \ | |
SETC(buf[i][126]); \ | |
SETC(buf[i][127]); \ | |
SETC(buf[i][128]); \ | |
SETC(buf[i][129]); \ | |
SETC(buf[i][130]); \ | |
SETC(buf[i][131]); \ | |
SETC(buf[i][132]); \ | |
SETC(buf[i][133]); \ | |
SETC(buf[i][134]); \ | |
SETC(buf[i][135]); \ | |
SETC(buf[i][136]); \ | |
SETC(buf[i][137]); \ | |
SETC(buf[i][138]); \ | |
SETC(buf[i][139]); \ | |
SETC(buf[i][140]); \ | |
SETC(buf[i][141]); \ | |
SETC(buf[i][142]); \ | |
SETC(buf[i][143]); \ | |
SETC(buf[i][144]); \ | |
SETC(buf[i][145]); \ | |
SETC(buf[i][146]); \ | |
SETC(buf[i][147]); \ | |
SETC(buf[i][148]); \ | |
SETC(buf[i][149]); \ | |
SETC(buf[i][150]); \ | |
SETC(buf[i][151]); \ | |
SETC(buf[i][152]); \ | |
SETC(buf[i][153]); \ | |
SETC(buf[i][154]); \ | |
SETC(buf[i][155]); \ | |
SETC(buf[i][156]); \ | |
SETC(buf[i][157]); \ | |
SETC(buf[i][158]); \ | |
SETC(buf[i][159]); \ | |
SETC(buf[i][160]); \ | |
SETC(buf[i][161]); \ | |
SETC(buf[i][162]); \ | |
SETC(buf[i][163]); \ | |
SETC(buf[i][164]); \ | |
SETC(buf[i][165]); \ | |
SETC(buf[i][166]); \ | |
SETC(buf[i][167]); \ | |
SETC(buf[i][168]); \ | |
SETC(buf[i][169]); \ | |
SETC(buf[i][170]); \ | |
SETC(buf[i][171]); \ | |
SETC(buf[i][172]); \ | |
SETC(buf[i][173]); \ | |
SETC(buf[i][174]); \ | |
SETC(buf[i][175]); \ | |
SETC(buf[i][176]); \ | |
SETC(buf[i][177]); \ | |
SETC(buf[i][178]); \ | |
SETC(buf[i][179]); \ | |
SETC(buf[i][180]); \ | |
SETC(buf[i][181]); \ | |
SETC(buf[i][182]); \ | |
SETC(buf[i][183]); \ | |
SETC(buf[i][184]); \ | |
SETC(buf[i][185]); \ | |
SETC(buf[i][186]); \ | |
SETC(buf[i][187]); \ | |
SETC(buf[i][178]); \ | |
SETC(buf[i][189]); \ | |
SETC(buf[i][190]); \ | |
SETC(buf[i][191]); \ | |
SETC(buf[i][192]); \ | |
SETC(buf[i][193]); \ | |
SETC(buf[i][194]); \ | |
SETC(buf[i][195]); \ | |
SETC(buf[i][196]); \ | |
SETC(buf[i][197]); \ | |
SETC(buf[i][198]); \ | |
SETC(buf[i][199]); \ | |
} | |
#define DRAW_LINE(i) { \ | |
EXEC_LEFT_BLANKING_AND_OVERSCAN(); \ | |
DRAW_PIXELS_FOR_LINE(i); \ | |
EXEC_RIGHT_OVERSCAN_AND_BLANKING(); \ | |
EXEC_HSYNC(); \ | |
} | |
int row = ROWS; | |
void setup() { | |
DDRB = B111111; | |
PORTB &= ~(HSYNC | VSYNC | 7); | |
noInterrupts(); | |
} | |
void loop() { | |
DRAW_LINE(0); | |
switch (row++) { | |
case 225: | |
PORTB |= VSYNC; // VSYNC HIGH | |
break; | |
case 228: | |
PORTB &= ~VSYNC; // VSYNC LOW | |
break; | |
case 261: | |
row = 0; | |
break; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment