; DELAY ROUTINES
;
; Written by Marco Maccaferri
; https://www.maccasoft.com
	
	psect	text
	
	global	_delay
	global	_ms_count
	
;
; void delay(int ms);
;
_delay:
	push	ix
	ld	ix,4
	add	ix,sp
	
	ld	l,(ix+0)
	ld	h,(ix+1)
	
1:	ld	bc,(_ms_count)
2:	dec	bc
	ld	a,b
	or	c
	jr	nz,2b
	
	dec	hl
	ld	a,h
	or	l
	jr	nz,1b
	
	pop	ix
	
	ret
	
	psect	data

_ms_count:
;       defw    770     ; 1ms @ 20.000 MHz
	defw	710	; 1ms @ 18.432 MHz
;	defw	280	; 1ms @ 7.3728 MHz
	
	psect	text
	
	global	_delay100us
	global	_us100_count
	
;
; void delay100us(int cnt);
;
_delay100us:
	push	ix
	ld	ix,4
	add	ix,sp
	
	ld	l,(ix+0)
	ld	h,(ix+1)
	
1:	ld	a,(_us100_count)
	ld	b,a
2:	djnz	2b
	
	dec	hl
	ld	a,h
	or	l
	jr	nz,1b
	
	pop	ix
	
	ret
	
	psect	data

_us100_count:
;	defw	139	; 100us @ 18.432 MHz
        defw    147     ; 100us @ 20.000 MHz