1; .title "CGB support" 2; .module CGB 3 4 MODULE set_sprite_palette_entry 5 6 PUBLIC set_sprite_palette_entry 7 PUBLIC _set_sprite_palette_entry 8 9 SECTION code_driver 10 11 INCLUDE "target/gb/def/gb_globals.def" 12 13; void __LIB__ set_sprite_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) __smallc; 14set_sprite_palette_entry: ; Banked 15_set_sprite_palette_entry: ; Banked 16 PUSH BC 17 PUSH DE 18 19 LD HL,sp+6 ; Skip return address and registers 20 LD C,(HL) ; BC = rgb_data 21 INC HL 22 LD B,(HL) 23 INC HL 24 LD D,(HL) ; D = pal_entry 25 INC HL 26 INC HL 27 LD E,(HL) ; E = first_palette 28 29 LD A,E ; E = first_palette 30 ADD A ; A *= 8 31 ADD A 32 ADD A 33 ADD D ; A += 2 * pal_entry 34 ADD D 35 LD E,A ; A = first BCPS data 36 37loop: 38 LDH A,(STAT) 39 AND 0x02 40 JR NZ,loop 41 42 LD A,E 43 LDH (OCPS),A 44 LD A,C 45 LDH (OCPD),A 46 INC E ; next BCPS 47 48 LD A,E 49 LDH (OCPS),A 50 LD A,B 51 LDH (OCPD),A 52 53 POP DE 54 POP BC 55 RET 56