-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathread_one_key.asm
66 lines (53 loc) · 1.62 KB
/
read_one_key.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
; programme lisant une touche et l’affichant
; headers (voir helloworld pour plus d’information)
org 0x4000
db "AB"
dw init
db 00,00,00,00,00,00
init: ; init écran
call 0x006F
ld a, 32
ld (0xF3B0), a
main:
ld hl, message
call printf
call 0x009F ; on attend une entrée. Elle sera stockée dans a
ld b, a ; on sauvegarde a dans b pour l’afficher
call newLine
ld hl, messageTouche
call printf
call newLine
ld a, b ; on récupère la lettre
cp 0x71 ; on vérifie si ce n’est pas q (code ascii)
jp z, fin ; si oui, on arrete le programme
jr main
fin:
call newLine
ld hl, messageFin
call printf
di
halt
newLine: ; une nouvelle ligne = 13 (retour chariot)
ld a, 13 ; + 10 (nouvelle ligne)
call 0x00A2
ld a, 10
call 0x00A2
ret
printf:
ld a, (hl)
cp 1 ; si on tombe sur 1 dans la string, on affiche
jp z, printChar ; le caractère
cp 0
ret z
inc hl
call 0x00A2
jr printf
printChar:
ld a, b ; on reprend le caractère sauvegardé dans b
inc hl
call 0x00A2
jr printf
message: db 'Tapez sur une touche (q pour arreter): ', 0
messageFin: db 'Programme fini !', 0
messageTouche: db 'Vous avez tape sur: ', 1, 0
org 0xC000