1; 2; z88dk library: Generic VDP support code 3; 4; void set_vdp_reg(int reg, int value) 5; 6;============================================================== 7; Sets the value of a VDP register 8;============================================================== 9; 10; $Id: gen_set_vdp_reg.asm,v 1.3 2016-06-16 19:30:25 dom Exp $ 11; 12 13 SECTION code_clib 14 PUBLIC set_vdp_reg 15 PUBLIC _set_vdp_reg 16 EXTERN RG0SAV 17 EXTERN l_tms9918_disable_interrupts 18 EXTERN l_tms9918_enable_interrupts 19 20 INCLUDE "video/tms9918/vdp.inc" 21 22 23.set_vdp_reg 24._set_vdp_reg 25 ld hl, 2 26 add hl, sp 27 ld d, (hl) ; Value 28 inc hl 29 inc hl 30 call l_tms9918_disable_interrupts 31IF VDP_CMD < 0 32 ld a,d 33 ld (-VDP_CMD),a 34ELSE 35 ld bc,VDP_CMD 36 out (c),d 37ENDIF 38 39 ld e, (hl) ; Register # 40IF VDP_CMD < 0 41 ld a,e 42 ld (-VDP_CMD),a 43ELSE 44 out (c),e 45ENDIF 46 call l_tms9918_enable_interrupts 47 ld a,e 48 cp 8 49 ret nc ;REgister out of boundds 50 51.savereg 52 ld hl,RG0SAV 53 ld c,a 54 ld b,0 55 add hl,bc 56 ld (hl),d ; Value 57 58 ret 59