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.

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
;