Skip to content

Instantly share code, notes, and snippets.

@JettMonstersGoBoom
Created July 4, 2020 16:41
Show Gist options
  • Save JettMonstersGoBoom/ec2ed458f5964593af649d4c2b46e574 to your computer and use it in GitHub Desktop.
Save JettMonstersGoBoom/ec2ed458f5964593af649d4c2b46e574 to your computer and use it in GitHub Desktop.
header file for easier working with C64 and VBCC
/* useful macros ( from cc65 ) */
#define POKE(addr,val) (*(unsigned char*) (addr) = (val))
#define POKEW(addr,val) (*(unsigned*) (addr) = (val))
#define PEEK(addr) (*(volatile unsigned char*) (addr))
#define PEEKW(addr) (*(unsigned*) (addr))
/* CIA1 */
#define cia1_pra 0xDC00
#define cia1_prb 0xDC01
#define cia1_ddra 0xDC02
#define cia1_ddrb 0xDC03
#define cia2_pra 0xDD00
#define cia2_prb 0xDD01
#define cia2_ddra 0xDD02
#define cia2_ddrb 0xDD03
#define vic_bank_0000() {\
POKE(cia2_ddra,(PEEK(cia2_ddra) & 0xfc) | 3);\
POKE(cia2_pra,(PEEK(cia2_pra) & 0xfc) | 3);\
}
#define vic_bank_4000() {\
POKE(cia2_ddra,(PEEK(cia2_ddra) & 0xfc) | 3);\
POKE(cia2_pra,(PEEK(cia2_pra) & 0xfc) | 2);\
}
#define vic_bank_8000() {\
POKE(cia2_ddra,(PEEK(cia2_ddra) & 0xfc) | 3);\
POKE(cia2_pra,(PEEK(cia2_pra) & 0xfc) | 1);\
}
#define vic_bank_C000() {\
POKE(cia2_ddra,(PEEK(cia2_ddra) & 0xfc) | 3);\
POKE(cia2_pra,(PEEK(cia2_pra) & 0xfc) | 0);\
}
#define vic_scroll_x(x) POKE(vic_cr1,(PEEK(vic_cr1)&0xf8) | x)
#define vic_scroll_y(y) POKE(vic_cr2,(PEEK(vic_cr2)&0xf8) | y)
/* VIC-II */
#define c64_screen_ram ((volatile unsigned char*)0x400)
#define c64_color_ram ((volatile unsigned char*)0xd800)
#define black 0
#define white 1
#define red 2
#define cyan 3
#define purple 4
#define green 5
#define blue 6
#define yellow 7
#define orange 8
#define brown 9
#define light_red 10
#define dark_grey 11
#define dark_gray 11
#define medium_grey 12
#define medium_gray 12
#define light_green 13
#define light_blue 14
#define light_grey 15
#define light_gray 15
#define vic_spr0_x 0xD000
#define vic_spr0_y 0xD001
#define vic_spr1_x 0xD002
#define vic_spr1_y 0xD003
#define vic_spr2_x 0xD004
#define vic_spr2_y 0xD005
#define vic_spr3_x 0xD006
#define vic_spr3_y 0xD007
#define vic_spr4_x 0xD008
#define vic_spr4_y 0xD009
#define vic_spr5_x 0xD00A
#define vic_spr5_y 0xD00B
#define vic_spr6_x 0xD00C
#define vic_spr6_y 0xD00D
#define vic_spr7_x 0xD00E
#define vic_spr7_y 0xD00F
#define vic_spr_hi_x 0xD010
#define vic_cr1 0xD011
#define vic_raster 0xD012
#define vic_lp_x 0xD013
#define vic_lp_y 0xD014
#define vic_spr_ena 0xD015
#define vic_cr2 0xD016
#define vic_spr_exp_y 0xD017
#define vic_mem 0xD018
#define vic_irq 0xD019
#define vic_irq_ena 0xD01A
#define vic_spr_dp 0xD01B
#define vic_spr_mcolor 0xD01C
#define vic_spr_exp_x 0xD01D
#define vic_spr_ss_col 0xD01E
#define vic_spr_sd_col 0xD01F
#define vic_border 0xD020
#define vic_bg_color0 0xD021
#define vic_bg_color1 0xD022
#define vic_bg_color2 0xD023
#define vic_bg_color3 0xD024
#define vic_spr_color1 0xD025
#define vic_spr_color2 0xD026
#define vic_spr0_color 0xD027
#define vic_spr1_color 0xD028
#define vic_spr2_color 0xD029
#define vic_spr3_color 0xD02A
#define vic_spr4_color 0xD02B
#define vic_spr5_color 0xD02C
#define vic_spr6_color 0xD02D
#define vic_spr7_color 0xD02E
#define vic_enable_multicolor() POKE(vic_cr2,PEEK(vic_cr2) | 0x10)
#define vic_disable_multicolor() POKE(vic_cr2,PEEK(vic_cr2) & 0xef)
#define vic_enable_bitmap() POKE(vic_cr1,PEEK(vic_cr1) | 0x20)
#define vic_disable_bitmap() POKE(vic_cr1,PEEK(vic_cr1) & 0xdf)
#define vic_24_rows() POKE(vic_cr1,PEEK(vic_cr1) & 0xf7)
#define vic_25_rows() POKE(vic_cr1,PEEK(vic_cr1) | 0x08)
#define vic_38_columns() POKE(vic_cr2,PEEK(vic_cr2) & 0xf7)
#define vic_40_columns() POKE(vic_cr2,PEEK(vic_cr2) | 0x08)
#define vic_charset_0000() POKE(vic_mem,PEEK(vic_mem) & 0xf1)
#define vic_charset_0800() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 2)
#define vic_charset_1000() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 4)
#define vic_charset_1800() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 6)
#define vic_charset_2000() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 8)
#define vic_charset_2800() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 10)
#define vic_charset_3000() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 12)
#define vic_charset_3800() POKE(vic_mem,(PEEK(vic_mem) & 0xf1) | 14)
#define vic_bitmap_0000() POKE(vic_mem,(PEEK(vic_mem) & 0xf7))
#define vic_bitmap_2000() POKE(vic_mem,(PEEK(vic_mem) | 0x8))
#define vic_screen(_scr_) POKE(vic_mem, (PEEK(vic_mem) & 0xf) | (_scr_>>6))
#define vic_disable_irq() {\
POKE(vic_irq_ena,0);\
POKE(vic_irq,PEEK(vic_irq)+1);\
}
#define cpu6510_ddr 0x0
#define cpu6510_port 0x1
#define c64_ram_only() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,0);\
}
#define c64_ram_io() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,5);\
}
#define c64_ram_io_kernal() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,6);\
}
#define c64_ram_io_basic() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,7);\
}
#define c64_ram_charset() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,1);\
}
#define c64_ram_charset_kernal() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,2);\
}
#define c64_ram_charset_basic() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,3);\
}
#define c64_ram_charset_basic() {\
POKE(cpu6510_ddr,7);\
POKE(cpu6510_port,3);\
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment