diff --git a/read_one_key.asm b/read_one_key.asm new file mode 100644 index 0000000..b075691 --- /dev/null +++ b/read_one_key.asm @@ -0,0 +1,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