ref: a8cb73b654af67bb3caad2c6d45edce7436032b1
dir: /home/palettes.asm/
; Functions dealing with palettes. UpdatePalsIfCGB: ; c2f ; update bgp data from BGPals ; update obp data from OBPals ; return carry if successful ; check cgb ld a, [hCGB] and a ret z UpdateCGBPals: ; c33 ; return carry if successful ; any pals to update? ld a, [hCGBPalUpdate] and a ret z ForceUpdateCGBPals: ; c37 ld a, [rSVBK] push af ld a, 5 ; BANK(BGPals) ld [rSVBK], a ld hl, BGPals ; 5:d080 ; copy 8 pals to bgpd ld a, %10000000 ; auto increment, index 0 ld [rBGPI], a ld c, rBGPD % $100 ld b, 4 ; NUM_PALS / 2 .bgp rept $10 ld a, [hli] ld [$ff00+c], a endr dec b jr nz, .bgp ; hl is now 5:d0c0 OBPals ; copy 8 pals to obpd ld a, %10000000 ; auto increment, index 0 ld [rOBPI], a ld c, rOBPD - rJOYP ld b, 4 ; NUM_PALS / 2 .obp rept $10 ld a, [hli] ld [$ff00+c], a endr dec b jr nz, .obp pop af ld [rSVBK], a ; clear pal update queue xor a ld [hCGBPalUpdate], a scf ret ; c9f DmgToCgbBGPals: ; c9f ; exists to forego reinserting cgb-converted image data ; input: a -> bgp ld [rBGP], a push af ld a, [hCGB] and a jr z, .end push hl push de push bc ld a, [rSVBK] push af ld a, 5 ld [rSVBK], a ; copy & reorder bg pal buffer ld hl, BGPals ; to ld de, Unkn1Pals ; from ; order ld a, [rBGP] ld b, a ; all pals ld c, 8 call CopyPals ; request pal update ld a, 1 ld [hCGBPalUpdate], a pop af ld [rSVBK], a pop bc pop de pop hl .end pop af ret ; ccb DmgToCgbObjPals: ; ccb ; exists to forego reinserting cgb-converted image data ; input: d -> obp1 ; e -> obp2 ld a, e ld [rOBP0], a ld a, d ld [rOBP1], a ld a, [hCGB] and a ret z push hl push de push bc ld a, [rSVBK] push af ld a, 5 ld [rSVBK], a ; copy & reorder obj pal buffer ld hl, OBPals ; to ld de, Unkn2Pals ; from ; order ld a, [rOBP0] ld b, a ; all pals ld c, 8 call CopyPals ; request pal update ld a, 1 ld [hCGBPalUpdate], a pop af ld [rSVBK], a pop bc pop de pop hl ret ; cf8 Functioncf8: ; cf8 ld [rOBP0], a push af ld a, [hCGB] and a jr z, .asm_d22 push hl push de push bc ld a, [rSVBK] push af ld a, $5 ld [rSVBK], a ld hl, $d0c0 ld de, MartPointer ld a, [rOBP0] ld b, a ld c, $1 call CopyPals ld a, $1 ld [hCGBPalUpdate], a pop af ld [rSVBK], a pop bc pop de pop hl .asm_d22 pop af ret ; d24 Functiond24: ; d24 ld [rOBP1], a push af ld a, [hCGB] and a jr z, .asm_d4e push hl push de push bc ld a, [rSVBK] push af ld a, $5 ld [rSVBK], a ld hl, $d0c8 ld de, $d048 ld a, [rOBP1] ld b, a ld c, $1 call CopyPals ld a, $1 ld [hCGBPalUpdate], a pop af ld [rSVBK], a pop bc pop de pop hl .asm_d4e pop af ret ; d50 CopyPals: ; d50 ; copy c palettes in order b from de to hl push bc ld c, 4 ; NUM_PAL_COLORS .loop push de push hl ; get pal color ld a, b and %11 ; color ; 2 bytes per color add a ld l, a ld h, 0 add hl, de ld e, [hl] inc hl ld d, [hl] ; dest pop hl ; write color ld [hl], e inc hl ld [hl], d inc hl ; next pal color srl b srl b ; source pop de ; done pal? dec c jr nz, .loop ; de += 8 (next pal) ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal add e jr nc, .ok inc d .ok ld e, a ; how many more pals? pop bc dec c jr nz, CopyPals ret ; d79 Functiond79: ; d79 ld a, [hCGB] and a ret z ld a, 1 ld [rVBK], a ld hl, VTiles0 ld bc, $2000 xor a call ByteFill ld a, 0 ld [rVBK], a ret ; d90 Functiond90: ; d90 ret ; d91 Functiond91: ; d91 ld a, [hCGB] and a ret z ld a, [rSVBK] push af ld a, 5 ; BANK(BGPals) ld [rSVBK], a ld hl, BGPals ld bc, $40 + $10 xor a call ByteFill pop af ld [rSVBK], a ld a, 1 ld [hCGBPalUpdate], a call DelayFrame ret ; db1 Functiondb1: ; db1 ld a, [hROMBank] push af ld a, BANK(Function4c000) rst Bankswitch call Function4c000 pop af rst Bankswitch ret ; dbd Functiondbd: ; dbd ld a, [hROMBank] push af ld a, BANK(Function4c03f) rst Bankswitch call Function4c03f pop af rst Bankswitch ret ; dc9