git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/libc/targets/sm83/cgb_palettes.s

      1 	.include	"global.s"
      2 
      3 	.title	"CGB support"
      4 	.module	CGB
      5 
      6 	.area	_CODE
      7 
      8 ; void set_sprite_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color_t *rgb_data) PRESERVES_REGS(b, c);
      9 _set_sprite_palette::		; Non-banked
     10 	ld d, c			; save C
     11 	ld c, #rOCPS
     12 	jr .set_palette
     13 
     14 ; void set_bkg_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color_t *rgb_data) PRESERVES_REGS(b, c);
     15 _set_bkg_palette::		; Non-banked
     16 	ld d, c			; save C
     17 	ld c, #rBCPS
     18 	
     19 	; first_palette is in A
     20 	; nb_palettes is in E
     21 	; rgb_data is on the stack
     22 .set_palette::
     23 	add a
     24 	add a
     25 	add a
     26 	or #OCPSF_AUTOINC	; Set auto-increment
     27 	ldh (c), a
     28 	inc c
     29 	
     30 	; E = nb_palettes * 8
     31 	ld a, e
     32 	add a
     33 	add a
     34 	add a
     35 	ld e, a			
     36 
     37 	; hl = rgb_data
     38 	ldhl sp, #2
     39 	ld a, (hl+)
     40 	ld h, (hl)
     41 	ld l, a
     42 0$:
     43 	WAIT_STAT
     44 	
     45 	ld a, (hl+)
     46 	ldh (c), a
     47 	dec e
     48 	jr nz, 0$
     49 
     50 	ld c, d			; restore C
     51 	pop hl			; get return address
     52 	pop af			; dummy pop
     53 	jp (hl)
     54 
     55 ; void set_sprite_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) PRESERVES_REGS(b, c);
     56 _set_sprite_palette_entry::
     57 	ld d, c			; save C
     58 	ld c, #rOCPS
     59 	jr .set_palette_entry
     60 
     61 ; void set_bkg_palette_entry(uint8_t palette, uint8_t entry, uint16_t rgb_data) PRESERVES_REGS(b, c);
     62 _set_bkg_palette_entry::
     63 	ld d, c			; save C
     64 	ld c, #rBCPS
     65 
     66 	; palette is in A
     67 	; entry is in E
     68 	; rgb_data is on the stack
     69 .set_palette_entry::
     70 	; A = palette * 8 + entry * 2
     71 	add a
     72 	add a
     73 	add e
     74 	add a
     75 	or #OCPSF_AUTOINC	; Set auto-increment
     76 	ldh (c), a
     77 	inc c
     78 	
     79 	ldhl sp, #2
     80 	ld a,(hl+)		; rgb_data
     81 	ld e,(hl)
     82 
     83 	WAIT_STAT_HL
     84 
     85 	ldh (c), a
     86 	ld a, e
     87 	ldh (c), a
     88 
     89 	ld c, d			; restore C
     90 	pop hl			; get return address
     91 	pop af			; dummy pop
     92 	jp (hl)

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.