Voilà le code "corrigé" :
Code:
************************************************************************************************
* EQUATES
************************************************************************************************
GETCH EQU $E806 * routine getchar
KEY_ENTER EQU $0D * touche entrée
PUTC EQU $E803 * routine PUTC
SET_PALETTE EQU $EC00 * routine setpalette
PALETTE_SEL EQU $E7DB * selecteur de palette
PALETTE_REG EQU $E7DA * registre lecture/écriture palette
MESSAGE EQU $6280 * adresse du message text de Joshua. $6280, c'est à dire à l'offet 128
************************************************************************************************
** MACROS : DEBUT **********************************
PCHAR MACRO * Affiche un caractère
LDB \1
JSR PUTC
ENDM
PRINT MACRO * Affiche une chaine de caractères
LDX \1
BSR PRINT_STRING
ENDM
** MACROS : FIN ************************************
ORG $6200
DEBUT
PSHS Y,X,A
* PALETTE_BLACK : DEBUT
LDD #$0020
STB PALETTE_SEL
! STA PALETTE_REG ; STA est plus rapide que CLR
SUBB #$02
BNE <
* PALETTE_BLACK : FIN
LDX #$6200 * little trick
STX $601E * pour éviter l'écrasement du bootsector par PUTC, le méchant
* init graphique
PRINT #INIT
* reglage palette couleur 1 sur CYAN (FF0)
INCA * A vaut 0 à cet endroit, on y affecte donc la valeur 1
LDX #$FFF0
LDY #$0FF0
JSR SET_PALETTE
* affichage du texte
PRINT #MESSAGE
* attente clavier
BSR KEY_ECHO
PULS A,X,Y
FIN
RTS
********************************************************
* Routine : PRINT_STRING
* Affichage d'une chaine de caractères
* X contient l'adresse de la chaine, terminée par un $00
* Usage : LDX #STRING
* BSR PRINT_STRING
********************************************************
PRINT_STRING
PSHS B
! LDB ,X+
BEQ > * si B est égal à 0, on sort
JSR PUTC
CMPB #$0A * test retour chariot ?
BNE < * ce n'est pas un retour chariot, on reboucle
PCHAR #$0D * on ajoute le retour à la ligne
BRA <
! PULS B,PC * == RTS
********************************************************
********************************************************
* Routine : KEY_ECHO
* Affiche un curseur et toutes les touches saisie
* jusqu'à ce que le code KEY (equate) soit rencontré
* Usage : BSR KEY_ECHO
********************************************************
KEY_ECHO
PSHS B
! PCHAR #$7F * curseur carré
PCHAR #$08 * on revient un cran en arrière (pour l'écraser par la suite)
JSR GETCH * on attend une touche saisie B contient le caractère tapé
CMPB #KEY_ENTER * est-ce le caractère de sortie ?
BEQ > * on sort de la boucle
JSR PUTC * on l'affiche si ce n'était pas le caractère de sortie
BRA < * on boucle
! PULS B,PC * == RTS
********************************************************
**************************************************************************************
* DATA
**************************************************************************************
INIT
FCB $1B,$5B * passage en mode 80 colonnes. Oui PUTC peut faire ça
FCB $1B,$41,$1B,$50,$1B,$60 * screen 1,0,0
FCB $11,$0C,$00 * effacement du curseur, effacement de l'écran
**************************************************************************************
END
Je connaissais l'astuce du PULS ...,PC pour faire un RTS, mais j'avais oublié de le faire :-)
Et pour SUBB (et SUBBA), j'avais eu la flemme de cherche l'instruction, et je connaissais DECA :-)
Pour info, je me remets à peine à l'assembleur 6809