17 #define DISPLAY_WIDTH 160
18 #define DISPLAY_WIDTH_LONGS (DISPLAY_WIDTH/4)
22 static const uint32_t invisibleScale = (16 << 12) + 160;
23 static const uint32_t visibleScale = (4<<12) + 16;
24 static const uint32_t blankPixels = 640;
25 static const uint32_t syncPixels = 0x3FFC;
26 static const uint32_t HSyncColors = 0x01030103;
27 static const uint32_t VSyncColors = 0x00020002;
28 static const uint32_t HVSyncColors = 0x03030303;
30 static _COGMEM uint32_t *displayPtr;
31 static _COGMEM uint32_t refreshCounter = 0;
32 static _COGMEM uint32_t displayCounter = 0;
35 #define ConstPixels 0xE4
39 videoLine(uint32_t *lineptr)
45 for (i = 0; i < DISPLAY_WIDTH_LONGS; i++)
48 pixels |= HVSyncColors;
49 __builtin_propeller_waitvid(pixels, ConstPixels);
51 _VSCL = invisibleScale;
52 __builtin_propeller_waitvid(HSyncColors, syncPixels);
66 par->frameCounter = 100;
67 _VCFG = par->videoState;
68 _FRQA = par->frequencyState;
72 displayPtr = par->displayBuffer;
74 for (i = 0; i < NUMLINES; i++) {
76 for (j = 0; j < LINEREPEAT; j++) {
77 videoLine(displayPtr);
79 displayPtr += DISPLAY_WIDTH_LONGS;
83 par->frameCounter = ++refreshCounter;
86 for (i = 0; i < 11; i++) {
88 __builtin_propeller_waitvid(HSyncColors, 0);
89 _VSCL = invisibleScale;
90 __builtin_propeller_waitvid(HSyncColors, syncPixels);
94 for (i = 0; i < 4; i++) {
96 __builtin_propeller_waitvid(VSyncColors, 0);
97 _VSCL = invisibleScale;
98 __builtin_propeller_waitvid(VSyncColors, syncPixels);
102 for (i = 0; i < 32; i++) {
104 __builtin_propeller_waitvid(HSyncColors, 0);
105 _VSCL = invisibleScale;
106 __builtin_propeller_waitvid(HSyncColors, syncPixels);
111 _DIRA = par->directionState;