// Hardware addresses for C64 #if not(CBM_64) && not(CBM_64_COMPAT) #warn c64_vic module should be only used on C64-compatible targets #endif // VIC-II byte vic_spr0_x @$D000 byte vic_spr0_y @$D001 byte vic_spr1_x @$D002 byte vic_spr1_y @$D003 byte vic_spr2_x @$D004 byte vic_spr2_y @$D005 byte vic_spr3_x @$D006 byte vic_spr3_y @$D007 byte vic_spr4_x @$D008 byte vic_spr4_y @$D009 byte vic_spr5_x @$D00A byte vic_spr5_y @$D00B byte vic_spr6_x @$D00C byte vic_spr6_y @$D00D byte vic_spr7_x @$D00E byte vic_spr7_y @$D00F byte vic_spr_hi_x @$D010 byte vic_cr1 @$D011 volatile byte vic_raster @$D012 byte vic_lp_x @$D013 byte vic_lp_y @$D014 byte vic_spr_ena @$D015 byte vic_cr2 @$D016 byte vic_spr_exp_y @$D017 byte vic_mem @$D018 volatile byte vic_irq @$D019 volatile byte vic_irq_ena @$D01A byte vic_spr_dp @$D01B byte vic_spr_mcolor @$D01C byte vic_spr_exp_x @$D01D byte vic_spr_ss_col @$D01E byte vic_spr_sd_col @$D01F byte vic_border @$D020 byte vic_bg_color0 @$D021 byte vic_bg_color1 @$D022 byte vic_bg_color2 @$D023 byte vic_bg_color3 @$D024 byte vic_spr_color1 @$D025 byte vic_spr_color2 @$D026 byte vic_spr0_color @$D027 byte vic_spr1_color @$D028 byte vic_spr2_color @$D029 byte vic_spr3_color @$D02A byte vic_spr4_color @$D02B byte vic_spr5_color @$D02C byte vic_spr6_color @$D02D byte vic_spr7_color @$D02E array vic_spr_coord [16] @$D000 array vic_spr_color [8] @$D027 macro void vic_enable_multicolor() { vic_cr2 |= 0x10 } macro void vic_disable_multicolor() { vic_cr2 &= 0xEF } macro void vic_enable_bitmap() { vic_cr1 |= 0x20 } macro void vic_disable_bitmap() { vic_cr1 &= 0xDF } macro void vic_24_rows() { vic_cr1 &= 0xF7 } macro void vic_25_rows() { vic_cr1 |= 8 } macro void vic_38_columns() { vic_cr2 &= 0xF7 } macro void vic_40_columns() { vic_cr2 |= 8 } macro void vic_disable_irq() { vic_irq_ena = 0 vic_irq += 1 } // base: divisible by $400, $0000-$3C00 allowed //macro void vic_screen(word const base) { // vic_mem = (vic_mem & $0F) | (base >> 6) //} macro void vic_charset_0000() { vic_mem = (vic_mem & $F1) } macro void vic_charset_0800() { vic_mem = (vic_mem & $F1) | 2 } macro void vic_charset_1000() { vic_mem = (vic_mem & $F1) | 4 } macro void vic_charset_1800() { vic_mem = (vic_mem & $F1) | 6 } macro void vic_charset_2000() { vic_mem = (vic_mem & $F1) | 8 } macro void vic_charset_2800() { vic_mem = (vic_mem & $F1) | $A } macro void vic_charset_3000() { vic_mem = (vic_mem & $F1) | $C } macro void vic_charset_3800() { vic_mem = (vic_mem & $F1) | $E } macro void vic_bitmap_0000() { vic_mem &= $F7 } macro void vic_bitmap_2000() { vic_mem |= 8 } macro void set_bg_color(byte color) { vic_bg_color0 = color } macro void set_border(byte color) { vic_border = color } // x, y < 8 // default: x=0, y=3 void vic_set_scroll(byte x, byte y) { vic_cr1 = (vic_cr1 & $F8) | y vic_cr2 = (vic_cr2 & $F8) | x } const byte black = 0 const byte white = 1 const byte red = 2 const byte cyan = 3 const byte purple = 4 const byte green = 5 const byte blue = 6 const byte yellow = 7 const byte orange = 8 const byte brown = 9 const byte light_red = 10 const byte dark_grey = 11 const byte dark_gray = 11 const byte medium_grey = 12 const byte medium_gray = 12 const byte light_green = 13 const byte light_blue = 14 const byte light_grey = 15 const byte light_gray = 15