Afin de pouvoir étendre les capacités d'iMPdraw v2, j'ai décidé de mettre en place un système de plug-in appelé "extension" dans le logiciel.
Celui ci se compose d'un petit programme que vous aurez au préalablement crée à partir de l'adresse #9800 (pour le moment!)
Qu'est-ce que les extensions ? quel est leur rôle ?
Imaginons que vous vouliez créer une image mélangeant les différents modes graphiques ou bien une image composée de rasters, de split-rasters, que sais je encore, une image qui affiche sur la même ligne 2 voire 3 mode écrans différents. Le mode 'extension' ou plug in est fort utile.
Il permet au programmeur de créer 'facilement' cet artifice. Le fichier devra ensuite être sauvegardé au format .bin pour être utilisé comme extension.
En mode fullscreen uniquement CTRL+E permet alors de charger cette extension et E d'exécuter ladite extension afin d'avoir le rendu final sur l'image.
Pour vous donner une idée de ce à quoi peut ressembler une extension, voici un exemple documenté.
Plug in Raster simple encre 1
;
; PLug In - Simple Raster dans l'image
; -----> AsT/iMPACT 07/04/2019
;
org #9800 ; adresse de départ de l'extension
;
main ei ; **TOUS les plug ins doivent commencer par l'instruction EI**
halt ;
di
ld b,#f5 ; attente vbl
vbl in a,(c)
rra
jr nc,vbl
;
ld b,0 ; Attente 32 lignes affichées
djnz $
djnz $
;
ld b,7 ; on attends un peu afin d'être bien synchro
djnz $
;
; La routine de raster débute en début de ligne iMPdraw x=0 y=0
;
ld hl,rastertable
ld bc,#7F01 ; le raster se fera dans l'encre 1
out (c),c
ld e,29 ; nombre de lignes de couleurs à afficher
rastloo ld a,(hl)
out (c),a
inc hl
defs 64-12,0 ; on attends quelques nops pour être bien synchro
dec e
jr nz,rastloo
;
; Attente appuie sur la touche espace
; **L'attente de touche est obligatoire pour avoir un visu avant qu'iMPdraw ne reprenne la main**
;
ld bc,#f40e
out(c),c
ld bc,#F6c0
out (c),c
out (c),0
ld bc,#f792
out (c),c
ld bc,#f645 ; ligne clavier 5
out (c),c
ld b,#f4
in a,(c)
ld bc,#f782
out (c),c
dec b
out (c),0
bit 7,a
jp nz,main
ret
;
; Ma table de rasters
;
rastertable
defb #44,#44,#44,#44
defb #55,#55,#55,#55
defb #57,#57,#57,#57
defb #53,#53,#4B,#4B
defb #4B,#4B
defb #49,#49
defb #4a,#4a,#4E,#4e
defb #4c,#4c,#4c,#4c
defb #54
Plugin IMPdraw - Changement de mode Graphique, rasters + retour "propre" à iMPdraw.
;
; PLug In - Simple Raster dans l'image
; -----> AsT/iMPACT 07/04/2019
;
ORG &9800 ; adresse de départ de l'extension
;
main ei ; **TOUS les plug ins doivent commencer par l'instruction EI**
halt ;
di
;
; On passe en Mode 1
;
ld bc,&7F84+1 ; &84 + Mode
out (c),c
;
ld b,&F5 ; attente vbl
vbl in a,(c)
rra
jr nc,vbl
;
ld b,0 ; Attente 32 lignes affichées
djnz $
djnz $
;
ld b,7 ; on attends un peu afin d'être bien synchro
djnz $
;
; La routine de raster débute en début de ligne iMPdraw x=0 y=0
;
ld hl,rastertable
ld bc,&7F01 ; le raster se fera dans l'encre 1
out (c),c
ld e,29 ; nombre de lignes de couleurs à afficher
rastloo ld a,(hl)
out (c),a
inc hl
FILL 64-12,0 ; on attends quelques nops pour être bien synchro
dec e
jr nz,rastloo
;
; On passe en mode 0
;
ld c,&84+0 ; &84 + Mode
out (c),c
;
; L'encre 1 sera en bleu (#44)
;
ld c,&4B ; encre bleu
out (c),c ; ink 1 en bleu
;
ld b,200 ; 200 lignes de mode 0
bc0 FILL 60,0
djnz bc0
;
; Attente appuie sur la touche espace
; **L'attente de touche est obligatoire pour avoir un visu avant qu'iMPdraw ne reprenne la main**
;
ld bc,&F40E
out (c),c
ld bc,&F6C0
out (c),c
out (c),0
ld bc,&F792
out (c),c
ld bc,&F645 ; ligne clavier 5
out (c),c
ld b,&F4
in a,(c)
ld bc,&F782
out (c),c
dec b
out (c),0
bit 7,a
jp nz,main
;
; retour iMPdraw "Propre"
;
i2_rom = &9148
ld a,(i2_rom) ; numero de rom i2
ld bc,&7F84 ; connexion rom haute
out (c),c
ld b,&DF ; selection rom i2
out (c),a
ei
ret
;
; Ma table de rasters
;
rastertable
BYTE &44,&44,&44,&44
BYTE &55,&55,&55,&55
BYTE &57,&57,&57,&57
BYTE &53,&53,&4B,&4B
BYTE &4B,&4B
BYTE &49,&49
BYTE &4A,&4A,&4E,&4E
BYTE &4C,&4C,&4C,&4C
BYTE &54
Plug in Raster+ dans iMPdraw.
;
; PLug In - Raster Palette + dans l'image
; -----> AsT/iMPACT 07/04/2019
;
ORG &9800 ; adresse de départ de l'extension
;
main ei ; **TOUS les plug ins doivent commencer par l'instruction EI**
halt ;
di
;
; On passe en Mode 1
;
ld bc,&7F84+1 ; &84 + Mode
out (c),c
;
ld b,&F5 ; attente vbl
vbl in a,(c)
rra
jr nc,vbl
;
ld b,0 ; Attente 32 lignes affichees
djnz $
djnz $
;
ld b,7 ; on attends un peu afin d'etre bien synchro
djnz $
;
; La routine de raster debute en debut de ligne iMPdraw x=0 y=0
; Asic ON
;
ld bc,&7FB8
out (c),c
;
ld hl,rastertable
ld bc,&6400 ; le raster se fera dans l'encre 0
ld e,29 ; nombre de lignes de couleurs a afficher
rastloo ld a,(hl) ;2;
ld (bc),a ;2;
inc hl ;2;
inc c ;1;
ld a,(hl) ;2;
ld (bc),a ;2;
inc hl ;2;
dec c ;1; => total 14 nops
FILL 64-4-14,0 ; on attends quelques nops pour
; etre bien synchro
dec e ;1;
jr nz,rastloo ;3; => total 4 nops
;
; Asic Off
;
ld bc,&7FA0
out (c),c
;
; On passe en mode 0
;
ld bc,&7F84+2 ; &84 + Mode
out (c),c
;
ld b,200 ; 200 lignes de mode 2
bc0 FILL 60,0
djnz bc0
;
; Attente appuie sur la touche espace
; **L'attente de touche est obligatoire pour avoir un visu avant qu'iMPdraw ne reprenne la main**
;
ld bc,&F40E
out (c),c
ld bc,&F6C0
out (c),c
out (c),0
ld bc,&F792
out (c),c
ld bc,&F645 ; ligne clavier 5
out (c),c
ld b,&F4
in a,(c)
ld bc,&F782
out (c),c
dec b
out (c),0
bit 7,a
jp nz,main
;
; retour iMPdraw "Propre"
;
i2_rom = &9148
ld a,(i2_rom) ; numero de rom i2
ld bc,&7F84 ; connexion rom haute
out (c),c
ld b,&DF ; selection rom i2
out (c),a
ei
ret
;
; Ma table de rasters
;
rastertable
WORD &01,&01,&02,&02
WORD &03,&03,&04,&04
WORD &05,&05,&06,&06
WORD &07,&07,&08,&08
WORD &07,&07
WORD &06,&06
WORD &05,&05,&04,&04
WORD &03,&02,&02,&01
WORD &00
Pour en finir sur le sujet des extensions, on peut générer facilement les extensions en sortant d'iMPdraw proprement via CTRL+B dans le mode éditeur. Il ne vous reste ensuite qu'à assembler ce bout de code sous Orgams. Ensuite on revient sous i2 grâce à |i, on passe en mode fullscreen copy et on appuie sur E, espace pour sortir du mode extension.

Le mode extension est par définition un mode qui se veut ouvert. N'hésitez pas à partager vos créations !