www.cpcalive.com
Exemple de création d'une ROM Amstrad Cpc contenant des instructions BASIC programmables (Resident System eXtension)
.org 0C000h
.db 1
; 0C000h
Rom type=BackGround Rom
; version 1.23
.db 1
; 0C001h Rom
Mark Number
.db 2
; 0C002h
Rom Version Number
.db 3
; 0C003h Rom
Modif Level
.dw MnemoTb ; 0C004h adresse de la
table des noms qui seront
;
utilisés pour appeler
les routines via le BASIC
jp RomIni ;
0C006h 1er vecteur. Ce vecteur sera automatiquement
;
appelé à chaque
initialisation du système Cpc
jp commande1 ; 0C009h
2ème vecteur
jp commande2 ; 0C00Ch ...
; table des noms
MnemoTb .db
"ROMIN" ; |ROMINI
(appelle le sous-programme "RomIni")
.db 049h |
080h ; "I" or 080h
.db
"NOM"
; |NOM1 (appelle le sous-programme "commande1")
.db 031h |
080h ; "1" or 080h
.db
"NOM"
; |NOM2 (appelle le sous-programme "commande2")
.db 032h |
080h ; "2" or 080h
.db
0
; 0=marque "fin de table"
; remarque:
; La fin de chaque nom est indiquée grâce à la présence du bit 7 sur la dernière lettre.
; Pour appeler la commande, il suffira de taper le nom
précédé du signe "barre verticale | ", à
partir de l'interpréteur basic du CPC.
; Il est aussi possible de transférer des paramètres aux routines à partir du basic de la mème manière qu'avec l'instruction basic CALL. Voir pour cela le chapitre Appel d'un programme machine à partir de l'instruction Basic "CALL"
RomIni: push hl
ld
hl,IniMes
; message à afficher au démarrage
; terminé par 0
call TxtAffi
pop hl
scf
; carry = tout s'est bien passé
ret
commande1: ld
hl,Ok1Mes ;
message à afficher
call
TxtAffi
; afficher texte
ret
commande2: ld
hl,Ok2Mes ;
message à afficher
call
TxtAffi
; afficher texte
ret
IniMes .db " Programme V1.23",10,13,0
Ok1Mes .db "OK1",10,13,0
Ok2Mes .db "OK2",10,13,0
; ** AFFICHE TEXTE **
; <HL=offset 1er caractère
; rem: 0=marque de fin
TxtAffi: ld a,(hl)
inc hl
or
a
; fin du message ?
ret
z
; oui alors "retour"
call
0BB5Ah ; routine système "Afficher
caractère"
jr TxtAffi
.end