Tester la syntaxe Z80

test de la coloration syntaxique

ORG &8000

start:
    LD HL, &C000        ; Début de la RAM vidéo
    LD BC, 256          ; Compteur
loop:
    LD (HL), &AA        ; Écriture du motif
    INC HL
    DEC BC
    JP NZ, loop
    RET
;;
;; Ce programme montre comment convertir le nombre dans HL en
;; ASCII et l'afficher.
;;

; Définir HL sur 0xffff
ld hl, 0
dec hl

; Afficher la valeur
call DispHLhex
halt

;
; Afficher un nombre 16 ou 8 bits en hexadécimal.
; La valeur à afficher doit être stockée dans HL
;
DispHLhex:

; afficher "0x" comme préfixe
ld a, '0'
out(1),a
ld a, 'x'
out(1),a

; Afficher la valeur haute
ld  c,h
call  OutHex8

; Afficher la valeur basse
ld  c,l
call OutHex8

; Retourner à l'appelant
ret

;
; Sortir la valeur hexadécimale du nombre 8 bits stocké dans C
;
OutHex8:
ld  a,c
rra
rra
rra
rra
call  Conv
ld  a,c
Conv:
and  $0F
add  a,$90
daa
adc  a,$40
daa
; Afficher la valeur.
out (1),a
ret

Super, ça va être utile.

Ouais, ça a l’air sympa. Je ne sais pas si c’est complet, mais au moins j’ai réussi quelque chose — j’ai dû créer et définir les règles de surbrillance à la main

Ok, donc il faudra peut-être jeter un œil pour compléter et ajouter des informations (registres / étiquettes / valeurs)…

Tu peux nous expliquer comment tu t’y prends pour qu’on puisse t’aider ?

Ouais, carrément.

Discourse utilise des composants — en gros, des scripts en arrière-plan — qui se rattachent aux thèmes (ce qui explique pourquoi certaines fonctionnalités peuvent marcher sur un thème et pas sur un autre).

Les colorateurs syntaxiques interceptent le texte brut avant le rendu pour y injecter du CSS.

Après, il y a un flou sur le fonctionnement exact d’un colorateur personnalisé : le z80 ne fait pas partie du groupe principal de langages pris en charge par le forum, il ne peut donc pas être choisi lorsque tu cites du code ; en principe, le bloc de code devrait commencer par « ```z80 » (deux espaces, trois accents graves), mais je l’ai déjà vu marcher sans cette déclaration ? Je ne suis vraiment pas sûr de mon coup sur ce point.

Quoi qu’il en soit, voici l’ajout au code du forum :

ÉDIT : après réflexion, si tu veux y jeter un œil, je peux te l’envoyer, c’est mieux de ne pas le laisser en ligne pour des raisons de sécurité.

Bizarre que RRA et DAA ne soient pas mis en valeur dans votre exemple… Ils font pourtant partie de vos mots-clés. Ou alors vous avez juste copié/collé le résultat dans votre message ? Ça expliquerait tout.

Pour intégrer pleinement le langage z80, j’ai trouvé ce lien : Configure which programming languages are available for syntax highlighting - Site Management - Discourse Meta

Et Google Gemini a proposé ceci pour highlightjs z80 :

const z80Language = function(hljs) {
return {
name: ‘z80’,
aliases: [‘z80asm’],
case_insensitive: true,
keywords: {
$pattern: ‘[a-zA-Z_][a-zA-Z0-9_]*’,
keyword: 'ld adc add and bit call ccf cp cpd cpdr cpi cpir cpl daa dec di djnz ei ex ’ +
‘exx halt im in ind indr ini inir jp jr ld ldd lddr ldi ldir neg nop or ’ +
‘otdr otir out outd outi pop push res ret reti retn rl rla rlc rlca rld ’ +
‘rr rra rrc rrca rrd rst sbc scf set sla sll sra srl sub xor’,
built_in: ‘a b c d e h l i r ix iy af bc de hl sp ixh ixl iyh iyl’ },
contains: [
hljs.COMMENT(’;’, ‘$’), // Comments starting with a semicolon
hljs.C_NUMBER_MODE, // Standard numbers
{
className: ‘number’,
begin: ‘\\b[0-9a-fA-F]+h\\b’ // Support for hexadecimal format “0ffh”
},
{
className: ‘symbol’,
begin: ‘^[a-zA-Z_][a-zA-Z0-9_]*:’ // Label detection (e.g., LOOP:) },
hljs.QUOTE_STRING_MODE // String literals ]
};
};

Pris avant que ça ne disparaisse :grin:

Ouais, je sèche sur le fait que les instances RRA et DDA ne soient pas mises en surbrillance. Je me dis qu’elles devraient l’être, mais bon…

Je vais jeter un œil à tes motifs, merci.

Peut-être qu’il utilise x86asm au lieu de z80… Cela expliquerait pourquoi cela fonctionne sans le ‘’'z80

Ah oui, c’est possible — bien qu’il me semble l’avoir vu étiqueté « z80 » lors de l’édition. Allez savoir ¯\_(ツ)_/¯

Je viens de publier quelques extraits de code Z80 et j’ai remarqué que les coloreurs de syntaxe disponibles ne proposent pas l’assembleur Zilog/Z80. J’ai finalement sélectionné avrasm parmi les options disponibles, car il semble être assez proche, mais toutes les instructions n’ont pas été correctement mises en évidence, à peu près comme dans votre extrait de test ci-dessus.

Lien ?

Ok, je jette un œil dès que j’ai fini avec le BASIC et les cartes de survol du firmware. Je n’ai pas réessayé depuis le push initial, mais j’en sais plus sur le fonctionnement interne du forum maintenant, donc je pourrai peut-être faire quelque chose.