Les Extensions Ou Plug In

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.

extension_mode-5600d33.png

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


Retour Menu

Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License