Skip to content

Instantly share code, notes, and snippets.

@JettMonstersGoBoom
Last active February 8, 2021 16:22
Show Gist options
  • Save JettMonstersGoBoom/2cbcf98ed0159afc7a15cb1ba593cd78 to your computer and use it in GitHub Desktop.
Save JettMonstersGoBoom/2cbcf98ed0159afc7a15cb1ba593cd78 to your computer and use it in GitHub Desktop.
// 16 color mode notes
// this sample shows using 16 color mode, with multiple palettes
// the colour ram is divided into 16 sets of colors $00-$0f set 0 $10-$1f set 1 etc.
.cpu _45gs02
// boot header
* = $2001
.var addrStr = toIntString(Entry)
.byte $09,$20 //End of command marker (first byte after the 00 terminator)
.byte $0a,$00 //10
.byte $fe,$02,$30,$00 //BANK 0
.byte <end, >end //End of command marker (first byte after the 00 terminator)
.byte $14,$00 //20
.byte $9e //SYS
.text addrStr
.byte $00
end:
.byte $00,$00 //End of basic terminators
*=$2020
Entry:
sei
lda #$35
sta $01
lda #$41
sta $00 //40 Mhz mode
// something to do with memory mapping, unclear
lda #$00
tax
tay
taz
map
eom
//Enable VIC IV
// use knock code
lda #$47
sta $D02F
lda #$53
sta $D02F
//Disable CIA and IRQ interrupts
lda #$7f
sta $DC0D
sta $DD0D
lda #$00
sta $D01A
//Interupt control register
// disable C65 rom
lda #$70
sta $D640
nop
//Turn Off H640 mode
lda $D031
and #%0111111
sta $D031
//Number of chars per ROW
lda #40
sta $D058
lda #20
sta $D05E
// or-ing for clarity
lda #$1 // enable CHR16 mode 2 bytes per char
ora #%00000110 // enable full colour for both <256 and >256
sta $D054
ldx #$00
xl1:
lda CHRMAP,x
sta $0800,x
lda CHRMAP+256,x
sta $0900,x
lda CHRMAP+512,x
sta $0A00,x
lda CHRMAP+768,x
sta $0B00,x
lda COLORMAP,x
sta $D800,x
lda COLORMAP+256,x
sta $D900,x
lda COLORMAP+512,x
sta $DA00,x
lda COLORMAP+768,x
sta $DB00,x
inx
bne xl1
// enable C64 MCM
// this allows us to use multiple palettes
lda $D016
ora #$10
sta $D016
ldx #$00
!:
// set colour ramp
// red
lda RED_PEN,x
sta $D100,x
// green
lda GREEN_PEN,x
sta $D200,x
// blue
lda BLUE_PEN,x
sta $D300,x
inx
cpx #64
bne !-
lda #$00
sta $D020 //set back color to index 0
sta $D021 //set back color to index 0
ldx #<irq1
ldy #>irq1
stx $FFFE
sty $FFFF
lda $D01A
ora #$01
sta $D01A
lda #$1B
sta $D011
asl $D019
cli
!:
jmp !-
irq1: {
pha
txa
pha
tya
pha
asl $D019
lda #$F0
sta $D012
pla
tay
pla
tax
pla
rti
}
RED_PEN:
.byte $00,$EE,$BB,$77,$44,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$EE,$BB,$99,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$AA,$00,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$AA,$44,$66,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
GREEN_PEN:
.byte $00,$EE,$BB,$77,$44,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$EE,$77,$66,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$EE,$99,$55,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$EE,$CC,$88,$44,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
BLUE_PEN:
.byte $00,$EE,$BB,$77,$33,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$99,$00,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$FF,$FF,$AA,$88,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$AA,$22,$55,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
// note this data is offset to char index $02 to base the chars at $8000
CHRMAP:
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $00, $02, $01, $02, $00, $02, $01, $02, $00, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $02, $02, $01, $02, $02, $02, $01, $02
.byte $02, $02, $01, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $00, $02
.byte $01, $02, $00, $02, $01, $02, $00, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $02, $02, $01, $02, $02, $02, $01, $02, $02, $02
.byte $01, $02, $01, $02, $01, $02, $01, $02, $01, $02, $01, $02
.byte $01, $02, $01, $02, $01, $02, $01, $02, $01, $02, $01, $02
.byte $01, $02, $01, $02, $01, $02, $01, $02, $01, $02, $01, $02
.byte $01, $02, $01, $02
// color data
// note $08 = enable 16 color mode
// $0f = palette zero ( but allow color 15 to be used )
// $1f = palette one.
// $2f = palette two etc.
COLORMAP:
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $0F, $08, $1F
.byte $08, $0F, $08, $1F, $08, $0F, $08, $1F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F
.byte $08, $2F, $08, $0F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $0F, $08, $2F, $08, $0F, $08, $2F, $08, $0F, $08, $2F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F
.byte $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $3F, $08, $0F, $08, $3F
.byte $08, $0F, $08, $3F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F
.byte $08, $6F, $08, $0F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $6F, $08, $0F, $08, $6F, $08, $0F, $08, $6F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F, $08, $0F
.byte $08, $0F, $08, $0F
* = $8000 "Chars"
.byte $11, $21, $21, $22, $22, $22, $22, $32
.byte $31, $33, $33, $33, $33, $33, $33, $43
.byte $31, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $31, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $00, $00, $00, $00, $00, $00, $00, $00
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $32, $33, $33, $33, $33, $33, $33, $43
.byte $43, $44, $44, $44, $44, $44, $44, $44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment