//Atari VCS Color Bars Program #pragma origin $F800 //2k Cartridge #include //TIA and RIOT Registers /* Generate Vertical Sync Signal */ void vtsync() { A=2; //Set Bit 2 (D1) WSYNC; //Wait for end of Scanline VSYNC=A; //Turn On Vertical Sync WSYNC; //Wait 2 More Scanlines WSYNC; A=0; //Clear Bit 2 (D1) WSYNC; //Wait for End of 3rd Scanline VSYNC=A; //Turn On Vertical Sync } /* Execute Vertical Blank Code */ void vtblnk() { X=37; //Delay 37 Scanlines do { WSYNC; //Wait for end of Scanline X--; } while (*); } /* Execute Kernel Code */ void kernel() { A=0; //Clear All Bits WSYNC; //Wait for end of Scanline VBLANK=A; //Turn Off Vertical Blank X=0; //Draw 192 Scanlines (256-64) do { if (X & 3) { WSYNC; //Wait for end of Scanline COLUBK = X; //Set Background Color } X--; } while (*); } /* Execute Overscan Code */ void ovrscn() { WSYNC; //Wait for end of Scanline VBLANK=2; //Turn On Vertical Blank X=27; //Delay 27 Scanlines do { WSYNC; //Wait for end of Scanline X--; } while(*); } start: asm("","SEI",""); asm("","CLD",""); A = 0; X = A; Y = A; do { X--; asm("","TXS",""); push A; } while (*); irqbrk: //Code to Execute when BRK Instruction is Encountered main: //Start of Program Code vtsync(); //Generate Vertical Sync Signal vtblnk(); //Generate Vertical Blank Signal kernel(); //Execute Kernal Code ovrscn(); //Execute Overscan Code goto main; #include //Finalization Code