-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathprintScore.asm
97 lines (76 loc) · 2.99 KB
/
printScore.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
; * imprime a pontuação, adaptado da rotina de escrita de números de 16-bit
; * orginal de Milos "baze" Bazelides <baze_at_baze_au_com> e disponível em:
; * http://baze.au.com/misc/z80bits.html
; *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
clearScore:
proc
ld hl,0 ; zera o valor da pontuação
ld (score),hl ; armazeno o novo valor
ret ; sai da rotina
endp
incrementScore:
proc
ld hl,(score) ; recupero o valor atual da pontuação
rept 5
inc hl ; incremento a pontuação em +5
endm
ld (score),hl ; armazeno a pontuação
call printScore ; atualiza na tela a pontuação
ret ; sai da rotina
endp
printScore:
proc
local printHiScore
ld de,framebuff3 ; área temporária para escrever
call printNumber ; escrevo os números lá
ld bc,5 ; até 5 dígitos
ld de,6144+7 ; posição na tela
ld hl,framebuff3
call LDIRVM ; atualizo a pontuação na tela
ld hl,(hiScore) ; leio o recorde
ld de,(score) ; leio novamenre a pontuação
sbc hl,de ; subtraio um com o outro
jr nc,printHiScore ; o recorde não é maior
ld (hiScore),de ; armazeno o novo recorde
printHiScore:
ld hl,(hiScore)
ld de,framebuff3 ; área temporária para escrever
call printNumber
ld bc,5 ; até 5 dígitos
ld de,6144+24 ; posição na tela
ld hl,framebuff3
call LDIRVM ; atualizo o recorde na tela
ld a,12
ld (ringRing),a ; habilita o som da pontuação
ret ; sai da rotina
endp
beforeZero: equ 176
printNumber:
proc
local formatDigit
local formatDigitLoop
ld bc,-10000
call formatDigit
ld bc,-1000
call formatDigit
ld bc,-100
call formatDigit
ld c,-10
call formatDigit
ld c,b
formatDigit:
ld a,beforeZero ; o caracter anterior ao '0'
formatDigitLoop:
inc a
add hl,bc
jr c,formatDigitLoop
sbc hl,bc
ld (de),a
inc de
ret ; sai da rotina
endp