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