home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
falcon
/
utility
/
monpatch
/
monpatch.s
< prev
next >
Wrap
Text File
|
1993-11-10
|
17KB
|
555 lines
*≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
* MonTT FalconPATCH 3.6 *
*≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
;
;Si votre version de MonTT n'est pas la 3.01 mais comporte encore
;des problèmes vidéo, et que le patch complet ne marche pas, voici
;la marche à suivre:
; o Réperer les points où MonTT se sert des registres vidéos
; (le plus simple: $8260).
; o Regarder le code qui est autour, pour patch1, patch3 et patch4
; il y a une comparaison de type cmpi.w #2,xx(a6). Il suffit de
; remplacer le détecteur de patch (les 4 mots longs de comparaison),
; par ce que vous trouvez A PARTIR de ce cmpi.w #2,xx(a6).
; o Pour patch2, le point de repère est un tst.w xx(a6) (le xx est
; le même que ci-dessus). Il est repérable car suivi de près par
; des adresses vidéos $820d, $8240, etc...
;
;En espérant un peu, tout ceci ne changera pas beaucoup sur d'éventuelles
;versions antérieures de MonTT. En attendant un MonFalcon, bien sûr !!!.
;
;Nullos, DNT-Crew 1993.
;
;PS: comme d'habitude, Tab Settings=11 (tabulation de 11), sinon le
; source prendra un air apocalyptique...
include tos_030.s
include hard_sys.s
section text
StartUp ;Message de bienvenue
dc.w $a00a ;
pea message(pc) ;
Gemdos Cconws ;
.open clr.w -(sp) ;Ouvre le fichier original
pea inname(pc) ;de MonTT 3.01
Gemdos Fopen ;
move.w d0,d7 ;
bmi openerr ;
pea MonTT(pc) ;Puis on le lit
clr.l -(sp) ;
addq.b #1,(sp) ;
move.w d0,-(sp) ;
Gemdos Fread ;
move.l d0,MonTTsize ;conserve la taille du fichier
bmi readerr ;
move.w d7,-(sp) ;
Gemdos Fclose ;
.getkey Gemdos Crawcin ;Demande de presser une touche
subi.b #'1',d0 ;
bmi.s .getkey ;
subq.b #1,d0 ;
bgt.s .getkey ;
beq.s .2 ;
.1 bsr.s megapatch ;
bra.s finito ;
.2 bsr.s minipatch ;
finito clr.w -(sp) ;
pea outname ;Maintenant, créer et sauver
Gemdos Fcreate ;le fichier patché.
move.w d0,d7 ;
bmi createrr ;
pea MonTT(pc) ;
move.l MonTTsize(pc),-(sp) ;
move.w d0,-(sp) ;
Gemdos Fwrite ;
cmp.l MonTTsize(pc),d0 ;
bne writerr ;
move.w d7,-(sp) ;
Gemdos Fclose ;
dc.w $a009 ;
Gemdos Pterm0 ;
minipatch lea debug(pc),a0 ;Simple débuggage
move.l #debugsize,d2 ;
bracode bra mon_patch ;
megapatch lea patch1(pc),a0 ;Code de comparaison
move.l #patch1size,d2 ;Taille à patcher
bsr mon_patch ;Cherche et remplace
move.l a1,-(sp) ;
moveq #1,d0 ;On écrase tout jusqu'au
.m0 move.w #$4e71,(a1)+ ;deuxième bra (le 1er fait
cmpi.b #$60,(a1) ;partie du code remplacé)
bne.s .m0 ;
subq.w #1,d0 ;
bpl.s .m0 ;
lea patch2(pc),a0 ;
move.l #patch2size,d2 ;
bsr mon_patch ;
move.l a1,-(sp) ;
lea patch3(pc),a0 ;
move.l #patch3size,d2 ;
bsr mon_patch ;
move.l a1,-(sp) ;
lea patch4(pc),a0 ;
move.l #patch4size,d2 ;
bsr mon_patch ;
move.l a1,-(sp) ;
moveq #2,d0 ;Idem: on écrase tout le
.m1 move.w #$4e71,(a1)+ ;vieux code devenu inutile,
cmpi.w #$6100,(a1) ;en ne conservant que les
bne.s .m1 ;2 derniers bsr.w (qui servent
subq.w #1,d0 ;à MonTT pour se recalibrer)
bpl.s .m1 ;
lea patch5(pc),a0 ;
move.l #patch5size,d2 ;
bsr mon_patch ;
lea patch6(pc),a0 ;
move.l #patch6size,d2 ;
bsr mon_patch ;
move.l #EndPatch-MonReloc,d0 ;Taille du déplacement
lea MonTT+2(pc),a0 ;
lea MonTT+$1c(pc),a2 ;
move.l a2,a1 ;Zone à déplacer.
adda.l (a0)+,a2 ;Chercher le début de la
adda.l (a0),a2 ;zone symboles&relocation
adda.l 8(a0),a2 ;Après les symbols (y'en a pas,
move.l (a2),d1 ;mais bon..).
beq.s .ok ;Y'a une table de relocation ?
add.l d0,(a2)+ ;Alors on la reloge (!)
moveq #0,d2 ;
.m2 add.l d2,d1 ;
add.l d0,(a1,d1.l) ;Reloge les offsets aussi.
.m3 move.b (a2)+,d2 ;
beq.s .ok ;
cmpi.b #1,d2 ;
bne.s .m2 ;
addi.l #254,d1 ;
bra.s .m3 ;
.ok lea (a2,d0.l),a3 ;On se place comifo.
.move move.b -(a2),-(a3) ;
cmpa.l a2,a1 ;
bne.s .move ;hoplaboum
lea EndPatch(pc),a2 ;
lea MonReloc(pc),a1 ;
.copy move.b -(a2),-(a3) ;Maintenant, place le code
cmpa.l a1,a2 ;et les buffers.
bne.s .copy ;
add.l d0,-(a0) ;Et augmente la taille...
add.l d0,MonTTsize ;
move.l (sp)+,a1 ;Maintenant, reloge les
lea -6(a1,d0.l),a1 ;jsr (xxxxxxxx.l,pc)
move.l a3,a2 ;(depl. longs nécessaires)
sub.l a1,a2 ;
lea Mon2Mon-MonReloc(a2),a2;
move.l a2,2(a1) ;
move.l (sp)+,a1 ;
lea -6(a1,d0.l),a1 ;
move.l a3,a2 ;
sub.l a1,a2 ;
lea Mon2User-MonReloc(a2),a2;
move.l a2,2(a1) ;
move.l (sp)+,a1 ;
lea -6(a1,d0.l),a1 ;
move.l a3,a2 ;
sub.l a1,a2 ;
lea User2Mon-MonReloc(a2),a2;
move.l a2,2(a1) ;
move.l (sp)+,a1 ;
lea -6(a1,d0.l),a1 ;
move.l a3,a2 ;
sub.l a1,a2 ;
lea GetMonMode-MonReloc(a2),a2;
move.l a2,2(a1) ;
rts ;C'est fini !!
mon_patch lea MonTT-2(pc),a1 ;
.bcl move.l a0,a2 ;
addq.l #2,a1 ;
move.l a1,a3 ;Recherche sur a2 et a3
cmpm.l (a3)+,(a2)+ ;Comparaison du tag, pour
bne.s .bcl ;trouver le bon emplacement
cmpm.l (a3)+,(a2)+ ;
bne.s .bcl ;
cmp.l (a3)+,(a2)+ ;
bne.s .bcl ;
cmp.l (a3)+,(a2)+ ;
bne.s .bcl ;
move.b (a2)+,(a1)+ ;On a trouvé: recopie le
subq.w #1,d2 ;patch directement dans le code
bne.s *-4 ;
rts ;
openerr pea oe(pc) ;Différents messages d'erreur
bra.s break ;
readerr pea re(pc) ;
bra.s break ;
createrr pea ce(pc) ;
bra.s break ;
writerr pea we(pc) ;
break Gemdos Cconws ;
Gemdos Crawcin ;
dc.w $a009 ;
Gemdos Pterm0 ;
debug dc.l $3d788242,$00820c6e ;chaine à trouver dans le
dc.l $0002012c,$66061d78 ;fichier
debugbeg dc.l $3d788242,$00820c6e ;
dc.l $0002012c,$66081d78 ;
debugsize equ *-debugbeg
patch1 dc.l $0c6e0002,$012c6606
dc.l $10388262,$60041038
patch1beg jsr (patch1beg.l,pc) ;->GetMonMode
patch1size equ *-patch1beg
patch2 dc.l $4a6e012c,$67061d78
dc.l $820d007b,$1d788201
patch2beg jmp (patch2beg.l,pc) ;->User2Mon
patch2size equ *-patch2beg
patch3 dc.l $0c6e0002,$012c6608
dc.l $11ee0086,$82626006
patch3beg jmp (patch3beg.l,pc) ;->Mon2User
patch3size equ *-patch3beg
patch4 dc.l $1e2e0084,$0c6e0002
dc.l $012c6622,$be3c0006
patch4beg jsr (patch4beg.l,pc) ;->Mon2Mon
patch4size equ *-patch4beg
patch5 dc.l $00030140,$00c80002
dc.l $028000c8,$00010280
patch5beg dc.l $00030140,$00c80002 ;Agrandissement de la
dc.l $02800100 ;fenêtre en 640*256 55Hz
patch5size equ *-patch5beg
patch6 dc.l $d0c03803,$11901000 ;Correction pour le mode
dc.l $41e8ff60,$51cbfff6 ;640*256, l'écran fait plus
patch6beg adda.l d0,a0 ;de 32ko,donc il faut mettre
patch6size equ *-patch6beg ;un adda.w en version longue..
*≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
*≈≈≈≈≈≈≈≈≈≈Routines de gestion du screen timer pour Falcon 030≈≈≈≈≈≈≈≈≈≈≈*
*≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
MonReloc movem.l d0/a0-a1,-(sp) ;On se place en tête du code,
move.l 16(sp),a0 ;donc la page de base n'est
lea MonBP(pc),a1 ;plus à 256 octets sous le
move.l a1,(a1)+ ;programme-> on en fait une
addq.l #4,a0 ;copie juste sous lui.
moveq #255/4-1,d0 ;
move.l (a0)+,(a1)+ ;
dbf d0,*-2 ;-> on devient totalement
movem.l (sp)+,d0/a0-a1 ;invisible.
bra.w MonCode ;
;;;;;;;;;;;
;En entrée, D0=7 si capture palette User
; =0 sinon
;A0=adresse de sauvegarde des paramètres du Videl
;A1=------- -- ---------- des couleurs
GetVidel movem.l d0-d2/a0-a3,-(sp) ;
; bsr.s GetSync ;Attendre Vsync (superflu?)
lea VidelOrder(pc),a2 ;
moveq #6-1,d1 ;6 groupes
.gv_bcl move.w (a2)+,a3 ;Adresse Videl
move.w (a2)+,d2 ;Nombre de registres
move.w (a3)+,(a0)+ ;Sauver bêtement
dbf d2,*-2 ;
dbf d1,.gv_bcl ;
move.b v_resol.w,(a0)+ ;ffff8260 et ffff8265 à part:
move.b v_hscroll.w,(a0)+ ;ce sont des octets
lea v_color.w,a2 ;
tst.w d0 ;Ecran MonTT
beq.s .gv_end ;-->(pas besoin de palette)
move.l (a2)+,(a1)+ ;
dbf d0,*-2 ;
lea v_color030.w,a2 ;
move.l (a2)+,(a1)+ ;Puis la palette Falcon,
subq.b #1,d0 ;ça peut servir
bcc.s *-4 ;
.gv_end movem.l (sp)+,d0-d2/a0-a3 ;
rts ;
VidelOrder
dc.w v_HHT,6-1 ;6 reg. à partir de ffff8282
dc.w v_VFT,6-1 ;
dc.w v_Wide,2-1 ;etc..
dc.w v_Mode,1-1 ;
dc.w v_CO,1-1 ;
dc.w v_SpShift,1-1 ;
GetSync move.w sr,-(sp) ;On se sert de la VBL système.
move.w #$2300,sr ;ATTENTION: comme d'habitude,si
move.l _frclock.w,d1 ;vous avez installé votre VBL,
.gs_wait cmp.l _frclock.w,d1 ;il FAUT gérer l'incrémentation
beq.s .gs_wait ;de _frclock=$466, sinon ce
move.w (sp)+,sr ;test, ceux de MonTT et ceux du
rts ;système, vont coincer...
;;;;;;;;;;;
;En entrée, D0=7 si restauration palette User
; =0 sinon
;A0=adresse de sauvegarde des paramètres du Videl
;A1=------- -- ---------- des couleurs
;A2=Routine indiquant la résolution au format Vsetmode.
SetVidel movem.l d0-d2/a0-a3,-(sp) ;
bsr.s GetSync ;Synchro VBL (indispensable!)
lea VidelOrder(pc),a2 ;
moveq #5-1,d1 ;Idem, mais laisser ffff8266
.sv_bcl move.w (a2)+,a3 ;
move.w (a2)+,d2 ;
move.w (a0)+,(a3)+ ;
dbf d2,*-2 ;
dbf d1,.sv_bcl ;
move.w (a2)+,a3 ;Récupère fffff8266
clr.w (a3) ;EFFACER D'ABORD
move.w (a0)+,d1 ;
beq.s .sv_1_2_4 ;Vraiment nul ?
.sv_8_16 move.w d1,(a3) ;Non, alors fixer
bra.s .sv_next ;
.sv_1_2_4 move.w #-1,-(sp) ;Il faut récupérer la
jsr ([22.w,sp]) ;valeur...
addq.l #2,sp ;
moveq #7,d1 ;
and.w d0,d1 ;Isole le nb de couleurs
subq.w #3,d1 ;
bge.s .sv_next ;¿BUG?:8266=0 -> nb_coul<256 !!
addq.w #2,d1 ;
bgt.s .sv_4 ;
beq.s .sv_2 ;
.sv_1 move.b #2,$60-$66(a3) ;Ecran monochrome, ici...
bra.s .sv_next ;(mono en VGA/RGB -> 8266<>0)
.sv_2 move.b #1,$60-$66(a3) ;
andi.w #$90,d0 ;Si 2 bitplans, alors refixer
cmpi.w #$90,d0 ;v_Mode, OR 1 si VGA&Comp.STE
seq d0 ;
andi.w #1,d0 ;
or.w -6(a0),d0 ;
move.w d0,$c2-$66(a3) ;
bra.s .sv_next ;
.sv_4 tst.b d0 ;WARNING: le mode 16 couleurs
bpl.s .sv_next ;est totalement chiatique
clr.b $60-$66(a3) ;Si Comp.STE, annuler $8260,
lsr.w #5,d0 ;et refixer v_Mode OR 1 si
bcc.s .sv_next ;c'est du VGA.
ori.w #1,$c2-$66(a3) ;
;Sécurité: refixer Wide&Wrap, parfois effacé (en rgb 1280 p.ex)
.sv_next move.l -10(a0),$0e-$66(a3) ;
move.b 1(a0),-(a3) ;Finalement, le décalage,
lea v_color.w,a2 ;
move.l (sp),d0 ;Selon MonTT ou User,
beq.s .sv_mon ;remet la palette.
.sv_user move.l (a1)+,(a2)+ ;
dbf d0,*-2 ;
lea v_color030.w,a2 ;
move.l (a1)+,(a2)+ ;
subq.b #1,d0 ;
bcc.s *-4 ;
.sv_end movem.l (sp)+,d0-d2/a0-a3 ;
rts ;
.sv_mon move.l (a1)+,(a2) ;
move.l (a1)+,v_color030.w ;
move.l (a1)+,v_color030+4.w ;
bra.s .sv_end ;
;;;;;;;;;;;
;Détermine les modes possibles et autorisés pour MonTT...
GetMonMode movem.l d0-d2/a0-a2,-(sp) ;
lea UserVidel(pc),a0 ;Prend les paramètres de
lea UserColor(pc),a1 ;l'écran d'arrivée
moveq #7,d0 ;
bsr GetVidel ;
Xbios mon_type ;
cmpi.w #3,d0 ;TV ?
bne.s *+4 ;
moveq #1,d0 ;Oui, idem RGB
mulu #20*2,d0 ;
lea .preset(pc,d0.w),a0 ;Récupère les paramètres
move.w (a0)+,d0 ;du Videl, selon le type
move.b d0,$84(a6) ;de moniteur of course.
lea MonMode(pc),a1 ;
move.w (a0)+,(a1) ;
lea MonVidel(pc),a1 ;
move.l a0,(a1) ;
move.w #$7fff,-(sp) ;
trap #14 ;Demande l'adresse de
addq.l #2,sp ;la table des routines.
lea InVsetmode(pc),a1 ;
move.l 88*4(a0),a2 ;
move.l a2,(a1) ;Sauve l'adresse VsetMode.
movem.l (sp)+,d0-d2/a0-a2 ;
rts ;
;ATTENTION: NE TOUCHEZ EN AUCUN CAS A CES DONNEES AU HASARD, VOUS RISQUEZ
;DE GRILLER L'ELECTRONIQUE DE VOTRE MONITEUR !!!!.
.preset dc.w 2,$0088 ;640*400 1 bitplan, écran monochrome
dc.w $001a,$0000,$0000,$020f,$000c,$0014
dc.w $03e9,$0000,$0000,$0043,$0363,$03e7
dc.w $0000,$0028,$0008,$0080,$0000,$0200
dc.w 1,_640x|_4c|_ste ;640*256 2 bitplans 55Hz, écran RGB/TV
dc.w $003e,$0032,$0009,$023f,$001c,$0034
dc.w $0241,$0235,$002f,$0034,$0232,$023b
dc.w $0000,$0050,$0004,$0081,$0000,$0100
dc.w 4,_640x|_16c|_vga ;640*480 4 bitplans, écran VGA
dc.w $00c6,$008d,$0015,$02a3,$007c,$0096
dc.w $0419,$03ff,$003f,$003f,$03ff,$0415
dc.w $0000,$00a0,$0008,$0186,$0000,$0000
;;;;;;;;;;;
User2Mon movem.l d0-d1/a0-a2,-(sp) ;
move.l v_base.w,d0 ;
lsl.w #8,d0 ;
move.b v_base_l.w,d0 ;
lsl.l #8,d0 ;
lsr.l #8,d0 ;
move.l d0,$78(a6) ;
cmp.l $70(a6),d0 ;C'est l'écran MonTT ???
beq.s .fini ;
;Petite remarque: lorsque l'on trace un programme, MonTT effectue un saut
;dans cette routine, même s'il ne tient pas à faire un swap écran. J'avoue
;ne pas bien avoir saisi l'astuce... car à ma connaissance, on ne peut pas
;tracer un programme à partir de l'écran User... Allô la terre ?
move.l d0,$74(a6) ;On est bien sur User
lea UserVidel(pc),a0 ;
lea UserColor(pc),a1 ;->Conserve les infos de
moveq #7,d0 ;résolution.
bsr GetVidel ;
movea.l MonVidel(pc),a0 ;
lea MonColor(pc),a1 ;Maintenant, remet le
lea LameMon(pc),a2 ;Videl pour MonTT.
moveq #0,d0 ;
bsr SetVidel ;
move.l $70(a6),d0 ;et fini de ré-installer
move.b d0,$ffff820d.w ;ses paramètres.
lsr.w #8,d0 ;
move.l d0,$ffff8200.w ;
.fini movem.l (sp)+,d0-d1/a0-a2 ;
rts ;
;;;;;;;;;;;
Mon2User movem.l d0/a0-a2,-(sp) ;
lea UserVidel(pc),a0 ;Remet nos paramètres
lea UserColor(pc),a1 ;
movea.l InVsetmode(pc),a2 ;
moveq #7,d0 ;
bsr SetVidel ;
move.l $74(a6),d0 ;
move.b d0,$ffff820d.w ;
lsr.w #8,d0 ;
move.l d0,$ffff8200.w ;R.A.S
movem.l (sp)+,d0/a0-a2 ;
rts ;
;;;;;;;;;;;
Mon2Mon movem.l d0/a0-a2,-(sp) ;
lea MonColor+12(pc),a1 ;
move.l -(a1),d0 ;
move.l -(a1),4(a1) ;Inverse les couleurs de
move.l d0,(a1) ;l'écran du debugger, tant
move.l -(a1),d0 ;qu'on y est.
swap d0 ;
move.l d0,(a1) ;
movea.l MonVidel(pc),a0 ;Re-installe MonTT par la
lea LameMon(pc),a2 ;force.
moveq #0,d0 ;
bsr SetVidel ;
move.l $70(a6),d0 ;
move.b d0,$ffff820d.w ;
lsr.w #8,d0 ;
move.l d0,$ffff8200.w ;
movem.l (sp)+,d0/a0-a2 ;
moveq #0,d7 ;Si on oublie ça, y'a comme
move.b $84(a6),d7 ;un malaise...
rts ;
;;;;;;;;;;;
LameMon move.w MonMode(pc),d0 ;Le système n'est pas au
rts ;courant...
InVsetmode ds.l 1 ;Tout ça pour nous...
MonMode ds.w 1 ;
MonVidel ds.l 1 ;
MonColor dc.w $0000 ;Couleur de fond \
dc.w $0EEE ;------- de 1er plan /STE
dc.l $00000000 ;
dc.l $ECEC00EC ;Idem, mais en VGA
;Rappel: sur STE c'est xxxx RRRR GGGG BBBB (sur un mot)
; sur Falcon RRRRRRxx GGGGGGxx xxxxxxxx BBBBBBxx (sur un mot-long)
;Démerdez vous pour créer votre palette favorite.
UserVidel ds.w 6+6+2+1+1+1+1 ;
UserColor ds.w 16 ;
hello dc.b "Ceci est une version de MonTT patché pour le Falcon 030 grâce à",$d,$a
dc.b "MONPATCH 3.6, programmé par NulloS/DNT-Crew le 04/11/1993.",$d,$a
dc.b $d,$a
dc.b "Je vous remercie d'avoir utilisé ce programme de patch, qui vous a",$d,$a
dc.b "donc permis de transformer un MonTT explosant votre moniteur à la",$d,$a
dc.b "moindre occasion, en un superbe débugger tournant dans toutes les",$d,$a
dc.b "résolutions possibles et imaginables, même celles créées à l'aide",$d,$a
dc.b "de FalconScreen (du style 832*440 en 65Hz !).",$d,$a
dc.b $d,$a
dc.b "Bref, je suis génial !!",$d,$a
dc.b $d,$a
dc.b "En fait, je me tape ce texte minable parce que j'ai 1ko à rajouter",$d,$a
dc.b "en fin du code de MonTT, et que c'est plus smart que de remplir avec",$d,$a
dc.b "de bêtes $00... J'en profite donc pour vous dire que ce patch m'a demandé",$d,$a
dc.b "pas moins de 1 semaine de recherche, pour les 2 premières versions, et",$d,$a
dc.b "autant pour la version 3.6 (haaa, les joies du Videl: salooooooope !).",$d,$a
dc.b "Donc plein de travail, mais ça en valait la peine.",$d,$a
dc.b $d,$a
dc.b "En plus maintenant, dans la version 3, ce n'est pas 1ko, mais carrément",$d,$a
dc.b "1,25ko, c'est l'inflation permanente... Enfin bon, cela reste assez",$d,$a
dc.b "raisonnable. Putain, vivement un vrai débugger Falcon, sans risques de",$d,$a
dc.b "plantage dûs au côté bidouille du patch",$d,$a
dc.b $d,$a
dc.b "Allez, j'arrive au bout. Bon débuggage, et que vive le Falcon !!",0
dcb.b 1024+256-(*-hello),$88
MonBP equ hello+1024
MonCode equ *
EndPatch equ * ;Fin du mégapatch
*≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
section data
message dc.b 27,"E+-----------------------------------------+",$d,$a
dc.b "| MonTT-FalconPatch 3.6 |",$d,$a
dc.b "+-----------------------------------------+",$d,$a
dc.b " «(C)oderight NulloS//DNT-Crew 1993»",$d,$a
dc.b $a,$a,"Votre choix: 1) Patch complet spécial Falcon030",$d,$a
dc.b " 2) Débuggage simple de MonTT",$d,$a
dc.b ">?",$d,$a,0
oe dc.b "Impossible d'ouvrir le fichier "
inname dc.b "mon_ori.prg",0
ce dc.b "Impossible de créer le fichier "
outname dc.b "mon_f030.prg",0
re dc.b "Erreur de lecture !",$d,$a,0
we dc.b "Erreur d'écriture: disque plein ?",$d,$a,0
even
section bss
MonTTsize ds.l 1
MonTT ds.b 80000
stack ds.w 256