ref: 04da88a285b0d43192db4ecd5d49d86e5bfeaea3
parent: 6d29673a5fe731e4705f0f11e885d89b47eec927
author: yenatch <[email protected]>
date: Thu Aug 29 15:37:35 EDT 2013
move palette asm from main.asm to engine/palettes.asm
--- /dev/null
+++ b/engine/palettes.asm
@@ -1,0 +1,347 @@
+; 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
+
--- a/main.asm
+++ b/main.asm
@@ -131,354 +131,7 @@
INCLUDE "engine/decompress.asm"
-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
- ld [rSVBK], a
- ld hl, $d080
- ld bc, $0050
- 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, $13
- rst Bankswitch
-
- call $4000
- pop af
- rst Bankswitch
-
- ret
-; dbd
-
-Functiondbd: ; dbd
- ld a, [hROMBank]
- push af
- ld a, $13
- rst Bankswitch
-
- call $403f
- pop af
- rst Bankswitch
-
- ret
-; dc9
-
+INCLUDE "engine/palettes.asm"
Functiondc9: ; dc9