1;ACME 0.96.4 2 3!ifdef lib_cbm_c64_vic_a !eof 4lib_cbm_c64_vic_a = 1 5 6; This is from Christian Bauer's VIC text: { 7; 6566: designed for static RAM, never used in C64/128 8; 6567/8562: C64, NTSC 9; 6569/8565: C64, PAL 10; 6572: Drean C64, PAL-N 11; 8564: C128, NTSC 12; 8566: C128, PAL 13; PAL chips generate 312 lines with 63 cycles per line. 14; PAL-N chips generate 312 lines with 65 cycles per line. 15; NTSC chips generate 263 lines with 65 cycles per line. 16; Very early NTSC chips (6567R56A) have an off-by-one 17; error, they generate 262 lines with 64 cycles per line. 18; } 19 20; The c128 version is officially called "VIC-IIe". 21; It has two additional registers and more pins. 22 23; color codes 24viccolor_BLACK = $0 25viccolor_WHITE = $1 26viccolor_RED = $2 27viccolor_CYAN = $3 28viccolor_PURPLE = $4 29viccolor_GREEN = $5 30viccolor_BLUE = $6 31viccolor_YELLOW = $7 32viccolor_ORANGE = $8 33viccolor_BROWN = $9 34viccolor_LRED = $a 35viccolor_GRAY1 = $b 36viccolor_GRAY2 = $c 37viccolor_LGREEN = $d 38viccolor_LBLUE = $e 39viccolor_GRAY3 = $f 40 41!addr vic_base = $d000 42 ; sprite coordinates: 43 vic_xs0 = vic_base + $00 44 vic_ys0 = vic_base + $01 45 vic_xs1 = vic_base + $02 46 vic_ys1 = vic_base + $03 47 vic_xs2 = vic_base + $04 48 vic_ys2 = vic_base + $05 49 vic_xs3 = vic_base + $06 50 vic_ys3 = vic_base + $07 51 vic_xs4 = vic_base + $08 52 vic_ys4 = vic_base + $09 53 vic_xs5 = vic_base + $0a 54 vic_ys5 = vic_base + $0b 55 vic_xs6 = vic_base + $0c 56 vic_ys6 = vic_base + $0d 57 vic_xs7 = vic_base + $0e 58 vic_ys7 = vic_base + $0f 59 vic_msb_xs = vic_base + $10 ; bit 8 of x position (one bit per sprite) 60 vic_controlv = vic_base + $11 ; vertical control and other stuff: 61 ; %7....... "bit 8" of $d012 62 ; %.6...... extended background color mode (1=on) 63 ; %..5..... 0 = text mode, 1 = bitmap mode 64 ; %...4.... display enable: 0 = disable (border only), 1 = enable VIC only checks this once per frame! 65 ; %....3... lines: 0 = 24, 1 = 25 ; if set, upper and lower border gain 4 pixels each 66 ; %.....210 vertical smooth scroll (default %011), screen contents are moved down by this amount 67 vic_line = vic_base + $12 ; raster line (also see bit 7 of $d011) reading returns current value, writing sets interrupt value 68 vic_xlp = vic_base + $13 ; light pen coordinates, x (only half the resolution) 69 vic_ylp = vic_base + $14 ; light pen coordinates, y 70 vic_sactive = vic_base + $15 ; sprite enable (one bit per sprite) 71 vic_controlh = vic_base + $16 ; horizontal control and other stuff: 72 ; %76...... always set 73 ; %..5..... "test", should be 0 74 ; %...4.... 0 = hires, 1 = multicolor 75 ; %....3... columns: 0 = 38, 1 = 40 ; if set, left border gains 7 pixels and right border gains 9 pixels 76 ; %.....210 horizontal smooth scroll (default %000), screen contents are moved to the right by this amount 77 vic_sdy = vic_base + $17 ; sprites, double height (one bit per sprite) 78 vic_ram = vic_base + $18 ; RAM pointer 79 ; %7654.... which K of VIC bank is video ram (default %0001) 80 ; %....321. text: which 2K of VIC bank is character set (default %010) 81 ; %.......0 text: unused 82 ; %....3... bitmap: which 8K of VIC bank is bitmap 83 ; %.....210 bitmap: unused 84 vic_irq = vic_base + $19 ; writing back acknowledges! 85 ; %7....... 1: VIC requested interrupt 86 ; %.654.... always set 87 ; %....3... 1: light pen active 88 ; %.....2.. 1: sprite-sprite collision 89 ; %......1. 1: sprite-data collision 90 ; %.......0 1: raster interrupt 91 vic_irqmask = vic_base + $1a 92 ; %7654.... always set 93 ; %....3... 1: enable lightpen interrupt 94 ; %.....2.. 1: enable sprite-sprite collision interrupt 95 ; %......1. 1: enable sprite-data collision interrupt 96 ; %.......0 1: enable raster interrupt 97 vic_sback = vic_base + $1b ; sprites, background (one bit per sprite) 98 vic_smc = vic_base + $1c ; sprites, multicolor (one bit per sprite) 99 vic_sdx = vic_base + $1d ; sprites, double width (one bit per sprite) 100 vic_ss_collided = vic_base + $1e ; sprites, sprite collision (one bit per sprite) reading clears register! 101 vic_sd_collided = vic_base + $1f ; sprites, data collision (one bit per sprite) reading clears register! 102 ; color registers (high nibbles are always %1111): 103 vic_cborder = vic_base + $20 ; border color 104 vic_cbg = vic_base + $21 ; general background color 105 vic_cbg0 = vic_base + $21 106 vic_cbg1 = vic_base + $22 ; background color 1 (for EBC and MC text mode) 107 vic_cbg2 = vic_base + $23 ; background color 2 (for EBC and MC text mode) 108 vic_cbg3 = vic_base + $24 ; background color 3 (for EBC mode) 109 vic_sc01 = vic_base + $25 ; sprite color for MC-bitpattern %01 110 vic_sc11 = vic_base + $26 ; sprite color for MC-bitpattern %11 111 ; individual sprite colors (in MC mode, these are used for bit pattern %10): 112 vic_cs0 = vic_base + $27 ; sprite 0 color 113 vic_cs1 = vic_base + $28 ; sprite 1 color 114 vic_cs2 = vic_base + $29 ; sprite 2 color 115 vic_cs3 = vic_base + $2a ; sprite 3 color 116 vic_cs4 = vic_base + $2b ; sprite 4 color 117 vic_cs5 = vic_base + $2c ; sprite 5 color 118 vic_cs6 = vic_base + $2d ; sprite 6 color 119 vic_cs7 = vic_base + $2e ; sprite 7 color 120; See <cbm/c128/vic.a> for the C128's two additional registers at $d02f/$d030. 121; They are accessible even in C64 mode and $d030 can garble the video output, 122; so be careful not to write to it accidentally in a C64 program! 123