Les Modes Egx1 Egx2

Les Modes EGX 1 et EGX2

Ce mode graphique a été vu pour la première fois dans Impérial Mahjong de Targhan & SuperSly.
Il a d'ailleurs été créé et développé par ce dernier.

Le principe en est fort simple. Il suffit en effet, d'intercaler un changement de mode graphique une ligne sur deux.

Ce mode a été ajouté dans iMPdraw via Martine par Sid & Tronic.

egx1-cpcplus.png?width=597&height=420

Le mode EGX1 et EGX2 n'est compatible qu'avec les images en .scr

Nous nous sommes servi d'un octet libre dans le boot de l'image.scr .

A l'adresse #1FF, nous avons ajouté un flag. Quand celui-ci est à 0, l'image affichée est normale.

01 : Mode 0-Mode 1
02 : Mode 1-Mode 0
03 : Mode 1-Mode 2
04 : Mode 2-Mode 1

Le jp #bb18 en #1FC est remplacé par un jp #7F10

;
; Egx 1 & 2 Martine/iMPdraw
; By Sid & Tronic
;
        di
        ld hl,(#38) ;on sauve l'adresse des interruptions
        ld (int),hl
        ld hl,#c9fb
        ld (#38),hl
        exx           ; sauves les registres
        ex af,af
        push af
        push bc
        push de
        push hl
        ld a,(#1ff) ; On teste le flag
        cp 1          ; mode 0-mode 1
        jr z,find1
        cp 2          ; mode 1-mode 0
        jr z,find2
        cp 3          ; mode 1-mode 2
        jr z,find3
        cp 4          ;mode 2-mode 1
        jr z,find4
;
; Mode 0 - Mode 1
;
find1
        ld hl,#8c8d
        jr rasterize
;
; Mode 1 - Mode 0
;
find2
        ld hl,#8d8c
        jr rasterize
;
; Mode 1 - Mode 2
;
find3 
        ld hl,#8d8e
        jr rasterize
;
; Mode 2 - Mode 1
;
find4
        ld hl,#8e8d
;
; On poke les 2 modes graphiques
;
rasterize
        ld a,h
        ld (modeline1+1),a
        ld a,l
        ld (modeline2+1),a
;
start
        ld b,#f5 ; attente vbl
vbl     in a,(c) 
        rra
        jp nc,vbl
;
        ld hl,#1F ; on perds un peu de temps histoire de synchroniser tout ça.
        jr lost_time
;
loop0
        defs 5,0
;
lost_time
        ld a,#0c
loop1    dec a 
        jr nz,loop1
;
        defs 3,0
        dec hl
        ld a,h
        or l
        jr nz,loop0
;
        ld hl,#0088
modeline1
        ld bc,#7f00 ; Ligne paire
        out (c),c
        8** ex (sp),hl
        jr   saut1
saut1   jr   saut2
saut2   nop
        nop
modeline2
        ld bc,#7f00 ; Ligne impaire
        out (c),c
        8** ex (sp),hl
        jr saut3
saut3
        dec hl
        ld a,h
        or l
        jr nz,modeline1
;
        call #822 ; Asic On-Copie Palette-Asic Off
;
        ld bc,#F40E ; teste clavier
        out(c),c
        ld bc,#f6c0
        out (c),c
        out (c),0
        ld bc,#F792
        out (c),c
        ld bc,#F645 ; ligne 5 du clavier
        out (c),c
        ld b,#f4
        in a,(c)
        ld bc,#F782
        out (c),c
        dec b
        out (c),0
        rla       ; on teste la barre espace
        jp c,start
;
        ld hl,tableout ; on réinitialise les registres du crtc à leurs valeurs d'origine
        ld a,5
        ld bc,#bdbe
loop3   outi
        ld b,c
        outi
        dec a
        jr nz,loop3
        ld hl,(int) ; restitue les interruptions
        ld (#38),hl
        pop hl     ;restitue la val des registres
        pop de
        pop bc
        pop af
        ex af,af'
        exx
        ei
        defs 17,0
        ret
;
int     defw 0 ; int sauvée ici
tbout   defw #0128,#022E,#0619,#071E,#0C30 ; raz des reg du crtc
;
        org #822
;
; Put Palette +
;
        ld bc,#7fb8
        out (c),c
        ld hl,#801 ; palette +
        ld de,#6400 ; i/o asic
        ld bc,#20
        ldir
        ld bc,#7fa0
        out(c),c
        ret
;
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License