#define	org .org
#define end .end
#define defb .byte


	org	$4082

	defb	$76
	defb	$76

start:	ld	ix,relog
	ld	(iy+$34),$ff
	ret

hor:	defb	$00
min:	defb	$00
seg:	defb	$00

relog:	ld	a,r		;normal screen
	ld	bc,$1901
	ld	a,$f5
	call	$02b5		;processa o arquivo de tela (Dfile)
	call	$0292		;retorna para a aplicação
	call	$0220		;VSYNC

	in	a,($fe)		;determina se é 50 ou 60hz
	rl	a		;bit 6 = 0 => 60hz 
	rl	a		;bit 6 = 1 => 50hz
	sbc	a,a
	and	$0a
	add	a,$c3
	ld	c,a
	ld	a,($4034)	;FRAMES
	cp	c
	jr	nz,prtrl
	ld	(iy+$34),$ff
	ld	a,(seg)
	inc	a
	cp	$3c		;60 segundos?
	ld	(seg),a
	jr	c,prtrl
	xor	a
	ld	(seg),a
	ld	a,(min)
	inc	a
	cp	$3c		;60 minutos?
	ld	(min),a
	jr	c,prtrl
	xor	a
	ld	(min),a
	ld	a,(hor)
	inc	a
	cp	$18		;24 horas?
	ld	(hor),a
	jr	c,prtrl
	xor	a
	ld	(hor),a

prtrl:	ld	hl,($400c)	;imprime o relógio
	ld	de,$0018
	add	hl,de
	ld	a,(hor)
	call	prtnr
	ld	(hl),$0e
	ld	a,(min)
	call	prtnr
	ld	(hl),$0e
	ld	a,(seg)
	call	prtnr
	ld	ix,relog	;salva o vetor da interrupção em ix
	jp	$02a4		;retorna para a aplicação

prtnr:	ld	e,a		;imprime dois dígitos
	inc	hl
	ex	de,hl
	ld	bc,$0a
	call	prtdig
	ld	bc,$01
	call	prtdig
	ex	de,hl
	ret

prtdig:	sub	a
	ld	a,$1c
jp1:	sbc	hl,bc
	jr	c,jp2
	inc	a
	jr	jp1
jp2:	add	hl,bc
	ld	(de),a
	inc	de
	ret

	end
