processor 6502 include "vcs.h" include "macro.h" include "xmacro.h" seg.u Variables org $80 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; seg Code org $f000 Start CLEAN_START NextFrame VERTICAL_SYNC TIMER_SETUP 37 ; Set playfield foreground and background lda #$FF sta COLUBK lda #$F0 sta COLUPF TIMER_WAIT ldy #192 ScanLoop ; WSYNC and store playfield registers sta WSYNC lda PFBitmap0,y sta PF0 ; store first playfield byte lda PFBitmap1,y sta PF1 ; store 2nd byte lda PFBitmap2,y sta PF2 ; store 3rd byte ; Here's the asymmetric part -- by this time the TIA clock ; is far enough that we can rewrite the same PF registers ; and display new data on the right side of the screen nop nop nop ; pause to let playfield finish drawing lda PFBitmap3,y sta PF0 ; store 4th byte lda PFBitmap4,y sta PF1 ; store 5th byte lda PFBitmap5,y sta PF2 ; store 6th byte dey bne ScanLoop ; repeat until all scanlines drawn ; Reset playfield SLEEP 14 ; give time to finish drawing scanline lda #0 sta PF0 sta PF1 sta PF2 ; clear playfield TIMER_SETUP 29 TIMER_WAIT jmp NextFrame ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; BITMAP DATA - Ada Lovelace PFBitmap0 hex 00 hex a070d0b0d0b0e050f0d0b0f050f060b0 hex f0d070b060f050f0a0f050f050f0d070 hex d0b0d0b0d0b050f050f0a0f0a0f060b0 hex e0b0e0d0f0d0b0f0a070d070d0b0e0b0 hex 60f0a0f050f0b0d0f0d0f0d0f0d0f0f0 hex e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 hex f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 hex f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0 hex f0f0e0f0f0f0e0f0f0f0f0d0f0f0e0f0 hex d0f0b0f070b0f0d0f0d0b0d0f0d0b0d0 hex f0d0b0f0a0f0e0b0e050f0d0b070a0f0 hex b0b0e0b070d070f050f0b0f060f0b0f0 PFBitmap1 hex 00 hex fedf7fdf7fdfbeffde7ffe5fff5fffaf hex 77b7dfafff5fef7faf77ef5ff7ae7fae hex f75eef7aaff6dfb7de775ff65ff6affe hex aeff5efe5efebe7efefefffefe7efefe hex fefefefefefefefefdfefefefefefefe hex fcfef6fefcfefefefef6fef6fef6eef7 hex eefeeffffffffeffbfffffdfffdeffdf hex fefefffeff7fffffffbfffbfbfbfbe9f hex bfbfffffffffffffffffffffffffffff hex fffffffffbffbdf75ff55ff56ff55ff5 hex 5ff55ff55ff55ef75af7de75dff5de77 hex de75dff5dffbaefbaffb6edbbeef55ff PFBitmap2 hex 00 hex 375f555f2f55975b4729430103000101 hex 00010000010000000000000001000108 hex 05040a0409040414242834041c040e06 hex 04020200010401040406140a1a0c0a05 hex 04010001000001000000000000000000 hex 00000000000000000000000081020104 hex 050e060d8e0d0f0f070605800009060e hex 85060404040406070303030000000000 hex 00000000000000000000000100010001 hex 01010101010101030303030703030706 hex 070d0f0a1b1307050b9ff5f7f7e5cf8d hex 1f153e7bf6fbfdd7fab7bdf7adffaaff PFBitmap3 hex 00 hex f0f0f0f0e0f0e0e0d0a0d0a0d0c0d0c0 hex c0a08080408000808080808000000000 hex 00000000000080008000800080808000 hex 80808000808080008000800080000000 hex 00000000000000000000000000000000 hex 0000000080c0104040e0c0c0e0c0e0c0 hex 70e060a000804090706050200090a0c0 hex e0706030000000000000000000000000 hex 00000000000000000000000000000000 hex 00000000000000000000000000008080 hex 80400000808080c0e0f0f0f0f0f07030 hex 00000080f0f0f0f0f0f0f0f0f0f0e0f0 PFBitmap4 hex 00 hex fffffffffbfffbfffdfffffefffffeff hex ffffffffffffffffffffffffffffff7f hex ffffffffffffffffffffffffffffffff hex ffffffffffffffffffffffffffffffff hex ffffffffffffff7fff7fff7f7f7f7f7f hex 7f7f7f7f7f3d7fbfbfffbfbf3fbf3d1f hex 3f1f3f1f3f1f1f3f1f5f1f9f1f9f1f1f hex 1f1f1f0f1f0f1f1f1f1f3f1f3f1f3f3f hex 3f3f3f3e3e3f3f3f7e3c7c3c7d3c7c38 hex 7879797872787270f262e0e3c3cb9b39 hex 327a79fafafaf0e1e1e0c185cd0c9d3c hex 3efeffffffffffffffffffffffffffff PFBitmap5 hex 00 hex ffffffffffffffffffffffffffffffff hex fffffeffffffffffffffffffffffffff hex fffffffffbffffffffffffffffffffff hex ffffffffffffffffffffffffffffffff hex ffffffffffffffffffffff7fffffffff hex ffffffffffffffffffff7fffffffffff hex ffffffffffffffffffffffffffffffff hex ffffffffffffffffffbf3f3fbf1fbf9f hex bf9efb8ddf9098c1c0c8c1d0b080b080 hex 9080918ccac4c2c2c2e0c2c2d2808190 hex 80a0e0f0e0f0f1e2e1c1c0c0e2c1e0e1 hex e9f9fafafcf8fcfeffffffffffffffff ; Epilogue org $fffc .word Start .word Start