home *** CD-ROM | disk | FTP | other *** search
/ M.u.C.S. Disc 2000 / MUCS2000.iso / falcon / monpatch / monpatch.s < prev    next >
Text File  |  1995-04-30  |  17KB  |  555 lines

  1. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  2. *                            MonTT FalconPATCH 3.6                       *
  3. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  4. ;
  5. ;Si votre version de MonTT n'est pas la 3.01 mais comporte encore
  6. ;des problèmes vidéo, et que le patch complet ne marche pas, voici
  7. ;la marche à suivre:
  8. ; o Réperer les points où MonTT se sert des registres vidéos
  9. ;   (le plus simple: $8260).
  10. ; o Regarder le code qui est autour, pour patch1, patch3 et patch4
  11. ;   il y a une comparaison de type cmpi.w #2,xx(a6). Il suffit de
  12. ;   remplacer le détecteur de patch (les 4 mots longs de comparaison),
  13. ;   par ce que vous trouvez A PARTIR de ce cmpi.w #2,xx(a6).
  14. ; o Pour patch2, le point de repère est un tst.w xx(a6)  (le xx est
  15. ;   le même que ci-dessus). Il est repérable car suivi de près par
  16. ;   des adresses vidéos $820d, $8240, etc...
  17. ;
  18. ;En espérant un peu, tout ceci ne changera pas beaucoup sur d'éventuelles
  19. ;versions antérieures de MonTT. En attendant un MonFalcon, bien sûr !!!.
  20. ;
  21. ;Nullos, DNT-Crew 1993.
  22. ;
  23. ;PS: comme d'habitude, Tab Settings=11  (tabulation de 11), sinon le
  24. ;    source prendra un air apocalyptique...
  25.  
  26.     include    tos_030.s
  27.     include    hard_sys.s
  28.  
  29.     section    text
  30.     
  31.     StartUp            ;Message de bienvenue
  32.     dc.w    $a00a        ;
  33.     pea    message(pc)    ;
  34.     Gemdos    Cconws        ;
  35.  
  36. .open    clr.w    -(sp)        ;Ouvre le fichier original
  37.     pea    inname(pc)        ;de MonTT 3.01
  38.     Gemdos    Fopen        ;
  39.     move.w    d0,d7        ;
  40.     bmi    openerr        ;
  41.     pea    MonTT(pc)        ;Puis on le lit
  42.     clr.l    -(sp)        ;
  43.     addq.b    #1,(sp)        ;
  44.     move.w    d0,-(sp)        ;
  45.     Gemdos    Fread        ;
  46.     move.l    d0,MonTTsize    ;conserve la taille du fichier
  47.     bmi    readerr        ;
  48.     move.w    d7,-(sp)        ;
  49.     Gemdos    Fclose        ;
  50.  
  51. .getkey    Gemdos    Crawcin        ;Demande de presser une touche
  52.     subi.b    #'1',d0        ;
  53.     bmi.s    .getkey        ;
  54.     subq.b    #1,d0        ;
  55.     bgt.s    .getkey        ;
  56.     beq.s    .2        ;
  57. .1    bsr.s    megapatch        ;
  58.     bra.s    finito        ;
  59. .2    bsr.s    minipatch        ;
  60. finito    clr.w    -(sp)        ;
  61.     pea    outname        ;Maintenant, créer et sauver
  62.     Gemdos    Fcreate        ;le fichier patché.
  63.     move.w    d0,d7        ;
  64.     bmi    createrr        ;
  65.     pea    MonTT(pc)        ;
  66.     move.l    MonTTsize(pc),-(sp)    ;
  67.     move.w    d0,-(sp)        ;
  68.     Gemdos    Fwrite        ;
  69.     cmp.l    MonTTsize(pc),d0    ;
  70.     bne    writerr        ;
  71.     move.w    d7,-(sp)        ;
  72.     Gemdos    Fclose        ;
  73.     dc.w    $a009        ;
  74.     Gemdos    Pterm0        ;
  75.  
  76. minipatch    lea    debug(pc),a0    ;Simple débuggage
  77.     move.l    #debugsize,d2    ;
  78. bracode    bra    mon_patch        ;
  79.     
  80.  
  81. megapatch    lea    patch1(pc),a0    ;Code de comparaison
  82.     move.l    #patch1size,d2    ;Taille à patcher
  83.     bsr    mon_patch        ;Cherche et remplace
  84.     move.l    a1,-(sp)        ;
  85.     moveq    #1,d0        ;On écrase tout jusqu'au
  86. .m0    move.w    #$4e71,(a1)+    ;deuxième bra (le 1er fait
  87.     cmpi.b    #$60,(a1)        ;partie du code remplacé)
  88.     bne.s    .m0        ;
  89.     subq.w    #1,d0        ;
  90.     bpl.s    .m0        ;
  91.  
  92.     lea    patch2(pc),a0    ;
  93.     move.l    #patch2size,d2    ;
  94.     bsr    mon_patch        ;
  95.     move.l    a1,-(sp)        ;
  96.  
  97.     lea    patch3(pc),a0    ;
  98.     move.l    #patch3size,d2    ;
  99.     bsr    mon_patch        ;
  100.     move.l    a1,-(sp)        ;
  101.  
  102.     lea    patch4(pc),a0    ;
  103.     move.l    #patch4size,d2    ;
  104.     bsr    mon_patch        ;
  105.     move.l    a1,-(sp)        ;
  106.     moveq    #2,d0        ;Idem: on écrase tout le
  107. .m1    move.w    #$4e71,(a1)+    ;vieux code devenu inutile,
  108.     cmpi.w    #$6100,(a1)    ;en ne conservant que les
  109.     bne.s    .m1        ;2 derniers bsr.w (qui servent
  110.     subq.w    #1,d0        ;à MonTT pour se recalibrer)
  111.     bpl.s    .m1        ;
  112.  
  113.     lea    patch5(pc),a0    ;
  114.     move.l    #patch5size,d2    ;
  115.     bsr    mon_patch        ;
  116.  
  117.     lea    patch6(pc),a0    ;
  118.     move.l    #patch6size,d2    ;
  119.     bsr    mon_patch        ;
  120.  
  121.     move.l    #EndPatch-MonReloc,d0    ;Taille du déplacement
  122.     lea    MonTT+2(pc),a0    ;
  123.     lea    MonTT+$1c(pc),a2    ;
  124.     move.l    a2,a1        ;Zone à déplacer.
  125.     adda.l    (a0)+,a2        ;Chercher le début de la
  126.     adda.l    (a0),a2        ;zone symboles&relocation
  127.     adda.l    8(a0),a2        ;Après les symbols (y'en a pas,
  128.     move.l    (a2),d1        ;mais bon..).
  129.     beq.s    .ok        ;Y'a une table de relocation ?
  130.     add.l    d0,(a2)+        ;Alors on la reloge (!)
  131.     moveq    #0,d2        ;
  132. .m2    add.l    d2,d1        ;
  133.     add.l    d0,(a1,d1.l)    ;Reloge les offsets aussi.
  134. .m3    move.b    (a2)+,d2        ;
  135.     beq.s    .ok        ;
  136.     cmpi.b    #1,d2        ;
  137.     bne.s    .m2        ;
  138.     addi.l    #254,d1        ;
  139.     bra.s    .m3        ;
  140.  
  141. .ok    lea    (a2,d0.l),a3    ;On se place comifo.
  142. .move    move.b    -(a2),-(a3)    ;
  143.     cmpa.l    a2,a1        ;
  144.     bne.s    .move        ;hoplaboum
  145.     lea    EndPatch(pc),a2    ;
  146.     lea    MonReloc(pc),a1    ;
  147. .copy    move.b    -(a2),-(a3)    ;Maintenant, place le code
  148.     cmpa.l    a1,a2        ;et les buffers.
  149.     bne.s    .copy        ;
  150.     add.l    d0,-(a0)        ;Et augmente la taille...
  151.     add.l    d0,MonTTsize    ;
  152.  
  153.     move.l    (sp)+,a1        ;Maintenant, reloge les
  154.     lea    -6(a1,d0.l),a1    ;jsr (xxxxxxxx.l,pc) 
  155.     move.l    a3,a2        ;(depl. longs nécessaires)
  156.     sub.l    a1,a2        ;
  157.     lea    Mon2Mon-MonReloc(a2),a2;
  158.     move.l    a2,2(a1)        ;
  159.  
  160.     move.l    (sp)+,a1        ;
  161.     lea    -6(a1,d0.l),a1    ;
  162.     move.l    a3,a2        ;
  163.     sub.l    a1,a2        ;
  164.     lea    Mon2User-MonReloc(a2),a2;
  165.     move.l    a2,2(a1)        ;
  166.  
  167.     move.l    (sp)+,a1        ;
  168.     lea    -6(a1,d0.l),a1    ;
  169.     move.l    a3,a2        ;
  170.     sub.l    a1,a2        ;
  171.     lea    User2Mon-MonReloc(a2),a2;
  172.     move.l    a2,2(a1)        ;
  173.  
  174.     move.l    (sp)+,a1        ;
  175.     lea    -6(a1,d0.l),a1    ;
  176.     move.l    a3,a2        ;
  177.     sub.l    a1,a2        ;
  178.     lea    GetMonMode-MonReloc(a2),a2;
  179.     move.l    a2,2(a1)        ;
  180.  
  181.     rts            ;C'est fini !!
  182.  
  183.  
  184.  
  185. mon_patch    lea    MonTT-2(pc),a1    ;
  186. .bcl    move.l    a0,a2        ;
  187.     addq.l    #2,a1        ;
  188.     move.l    a1,a3        ;Recherche sur a2 et a3
  189.     cmpm.l    (a3)+,(a2)+    ;Comparaison du tag, pour
  190.     bne.s    .bcl        ;trouver le bon emplacement
  191.     cmpm.l    (a3)+,(a2)+    ;
  192.     bne.s    .bcl        ;
  193.     cmp.l    (a3)+,(a2)+    ;
  194.     bne.s    .bcl        ;
  195.     cmp.l    (a3)+,(a2)+    ;
  196.     bne.s    .bcl        ;
  197.     move.b    (a2)+,(a1)+    ;On a trouvé: recopie le
  198.     subq.w    #1,d2        ;patch directement dans le code
  199.     bne.s    *-4        ;
  200.     rts            ;
  201.  
  202. openerr    pea    oe(pc)        ;Différents messages d'erreur
  203.     bra.s    break        ;
  204. readerr    pea    re(pc)        ;
  205.     bra.s    break        ;
  206. createrr    pea    ce(pc)        ;
  207.     bra.s    break        ;
  208. writerr    pea    we(pc)        ;
  209. break    Gemdos    Cconws        ;
  210.     Gemdos    Crawcin        ;
  211.     dc.w    $a009        ;
  212.     Gemdos    Pterm0        ;
  213.  
  214. debug    dc.l    $3d788242,$00820c6e    ;chaine à trouver dans le
  215.     dc.l    $0002012c,$66061d78    ;fichier
  216. debugbeg    dc.l    $3d788242,$00820c6e    ;
  217.     dc.l    $0002012c,$66081d78    ;
  218. debugsize    equ    *-debugbeg
  219.  
  220. patch1    dc.l    $0c6e0002,$012c6606
  221.     dc.l    $10388262,$60041038
  222. patch1beg    jsr    (patch1beg.l,pc)    ;->GetMonMode
  223. patch1size    equ    *-patch1beg
  224.  
  225. patch2    dc.l    $4a6e012c,$67061d78
  226.     dc.l    $820d007b,$1d788201
  227. patch2beg    jmp    (patch2beg.l,pc)    ;->User2Mon
  228. patch2size    equ    *-patch2beg
  229.  
  230. patch3    dc.l    $0c6e0002,$012c6608
  231.     dc.l    $11ee0086,$82626006
  232. patch3beg    jmp    (patch3beg.l,pc)    ;->Mon2User
  233. patch3size    equ    *-patch3beg
  234.  
  235. patch4    dc.l    $1e2e0084,$0c6e0002
  236.     dc.l    $012c6622,$be3c0006
  237. patch4beg    jsr    (patch4beg.l,pc)    ;->Mon2Mon
  238. patch4size    equ    *-patch4beg
  239.  
  240. patch5    dc.l    $00030140,$00c80002
  241.     dc.l    $028000c8,$00010280
  242. patch5beg    dc.l    $00030140,$00c80002    ;Agrandissement de la
  243.     dc.l    $02800100        ;fenêtre en 640*256 55Hz
  244. patch5size    equ    *-patch5beg
  245.  
  246. patch6    dc.l    $d0c03803,$11901000    ;Correction pour le mode
  247.     dc.l    $41e8ff60,$51cbfff6    ;640*256, l'écran fait plus
  248. patch6beg    adda.l    d0,a0        ;de 32ko,donc il faut mettre
  249. patch6size    equ    *-patch6beg    ;un adda.w en version longue..
  250.  
  251. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  252. *≈≈≈≈≈≈≈≈≈≈Routines de gestion du screen timer pour Falcon 030≈≈≈≈≈≈≈≈≈≈≈*
  253. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  254. MonReloc    movem.l    d0/a0-a1,-(sp)    ;On se place en tête du code,
  255.     move.l    16(sp),a0        ;donc la page de base n'est
  256.     lea    MonBP(pc),a1    ;plus à 256 octets sous le
  257.     move.l    a1,(a1)+        ;programme-> on en fait une
  258.     addq.l    #4,a0        ;copie juste sous lui.
  259.     moveq    #255/4-1,d0    ;
  260.     move.l    (a0)+,(a1)+    ;
  261.     dbf    d0,*-2        ;-> on devient totalement
  262.     movem.l    (sp)+,d0/a0-a1    ;invisible.
  263.     bra.w    MonCode        ;
  264. ;;;;;;;;;;;
  265. ;En entrée, D0=7  si capture palette User
  266. ;             =0  sinon
  267. ;A0=adresse de sauvegarde des paramètres du Videl
  268. ;A1=------- -- ---------- des couleurs
  269. GetVidel    movem.l    d0-d2/a0-a3,-(sp)    ;
  270. ;    bsr.s    GetSync        ;Attendre Vsync (superflu?)
  271.     lea    VidelOrder(pc),a2    ;
  272.     moveq    #6-1,d1        ;6 groupes
  273. .gv_bcl    move.w    (a2)+,a3        ;Adresse Videl
  274.     move.w    (a2)+,d2        ;Nombre de registres
  275.     move.w    (a3)+,(a0)+    ;Sauver bêtement
  276.     dbf    d2,*-2        ;
  277.     dbf    d1,.gv_bcl        ;
  278.     move.b    v_resol.w,(a0)+    ;ffff8260 et ffff8265 à part:
  279.     move.b    v_hscroll.w,(a0)+    ;ce sont des octets
  280.     lea    v_color.w,a2    ;
  281.     tst.w    d0        ;Ecran MonTT
  282.     beq.s    .gv_end        ;-->(pas besoin de palette)
  283.     move.l    (a2)+,(a1)+    ;
  284.     dbf    d0,*-2        ;
  285.     lea    v_color030.w,a2    ;
  286.     move.l    (a2)+,(a1)+    ;Puis la palette Falcon,
  287.     subq.b    #1,d0        ;ça peut servir
  288.     bcc.s    *-4        ;
  289. .gv_end    movem.l    (sp)+,d0-d2/a0-a3    ;
  290.     rts            ;
  291.  
  292. VidelOrder
  293.     dc.w    v_HHT,6-1        ;6 reg. à partir de ffff8282
  294.     dc.w    v_VFT,6-1        ;
  295.     dc.w    v_Wide,2-1        ;etc..
  296.     dc.w    v_Mode,1-1        ;
  297.     dc.w    v_CO,1-1        ;
  298.     dc.w    v_SpShift,1-1    ;
  299.  
  300. GetSync    move.w    sr,-(sp)        ;On se sert de la VBL système.
  301.     move.w    #$2300,sr        ;ATTENTION: comme d'habitude,si
  302.     move.l    _frclock.w,d1    ;vous avez installé votre VBL,
  303. .gs_wait    cmp.l    _frclock.w,d1    ;il FAUT gérer l'incrémentation
  304.     beq.s    .gs_wait        ;de _frclock=$466, sinon ce
  305.     move.w    (sp)+,sr        ;test, ceux de MonTT et ceux du
  306.     rts            ;système, vont coincer...
  307.  
  308. ;;;;;;;;;;;
  309. ;En entrée, D0=7  si restauration palette User
  310. ;             =0  sinon
  311. ;A0=adresse de sauvegarde des paramètres du Videl
  312. ;A1=------- -- ---------- des couleurs
  313. ;A2=Routine indiquant la résolution au format Vsetmode.
  314. SetVidel    movem.l    d0-d2/a0-a3,-(sp)    ;
  315.     bsr.s    GetSync        ;Synchro VBL (indispensable!)
  316.     lea    VidelOrder(pc),a2    ;
  317.     moveq    #5-1,d1        ;Idem, mais laisser ffff8266
  318. .sv_bcl    move.w    (a2)+,a3        ;
  319.     move.w    (a2)+,d2        ;
  320.     move.w    (a0)+,(a3)+    ;
  321.     dbf    d2,*-2        ;
  322.     dbf    d1,.sv_bcl        ;
  323.     move.w    (a2)+,a3        ;Récupère fffff8266
  324.     clr.w    (a3)        ;EFFACER D'ABORD
  325.     move.w    (a0)+,d1        ;
  326.     beq.s    .sv_1_2_4        ;Vraiment nul ?
  327. .sv_8_16    move.w    d1,(a3)        ;Non, alors fixer
  328.     bra.s    .sv_next        ;
  329. .sv_1_2_4    move.w    #-1,-(sp)        ;Il faut récupérer la
  330.     jsr    ([22.w,sp])    ;valeur...
  331.     addq.l    #2,sp        ;
  332.     moveq    #7,d1        ;
  333.     and.w    d0,d1        ;Isole le nb de couleurs
  334.     subq.w    #3,d1        ;
  335.     bge.s    .sv_next        ;¿BUG?:8266=0 -> nb_coul<256 !!
  336.     addq.w    #2,d1        ;
  337.     bgt.s    .sv_4        ;
  338.     beq.s    .sv_2        ;
  339. .sv_1    move.b    #2,$60-$66(a3)    ;Ecran monochrome, ici...
  340.     bra.s    .sv_next        ;(mono en VGA/RGB -> 8266<>0)
  341. .sv_2    move.b    #1,$60-$66(a3)    ;
  342.     andi.w    #$90,d0        ;Si 2 bitplans, alors refixer
  343.     cmpi.w    #$90,d0        ;v_Mode, OR 1 si VGA&Comp.STE
  344.     seq    d0        ;
  345.     andi.w    #1,d0        ;
  346.     or.w    -6(a0),d0        ;
  347.     move.w    d0,$c2-$66(a3)    ;
  348.     bra.s    .sv_next        ;
  349. .sv_4    tst.b    d0        ;WARNING: le mode 16 couleurs
  350.     bpl.s    .sv_next        ;est totalement chiatique
  351.     clr.b    $60-$66(a3)    ;Si Comp.STE, annuler $8260,
  352.     lsr.w    #5,d0        ;et refixer v_Mode OR 1 si
  353.     bcc.s    .sv_next        ;c'est du VGA.
  354.     ori.w    #1,$c2-$66(a3)    ;
  355.     ;Sécurité: refixer Wide&Wrap, parfois effacé (en rgb 1280 p.ex)
  356. .sv_next    move.l    -10(a0),$0e-$66(a3)    ;
  357.     move.b    1(a0),-(a3)    ;Finalement, le décalage,
  358.  
  359.     lea    v_color.w,a2    ;
  360.     move.l    (sp),d0        ;Selon MonTT ou User,
  361.     beq.s    .sv_mon        ;remet la palette.
  362. .sv_user    move.l    (a1)+,(a2)+    ;
  363.     dbf    d0,*-2        ;
  364.     lea    v_color030.w,a2    ;
  365.     move.l    (a1)+,(a2)+    ;
  366.     subq.b    #1,d0        ;
  367.     bcc.s    *-4        ;
  368. .sv_end    movem.l    (sp)+,d0-d2/a0-a3    ;
  369.     rts            ;
  370. .sv_mon    move.l    (a1)+,(a2)        ;
  371.     move.l    (a1)+,v_color030.w    ;
  372.     move.l    (a1)+,v_color030+4.w    ;
  373.     bra.s    .sv_end        ;
  374. ;;;;;;;;;;;
  375. ;Détermine les modes possibles et autorisés pour MonTT...
  376. GetMonMode    movem.l    d0-d2/a0-a2,-(sp)    ;
  377.     lea    UserVidel(pc),a0    ;Prend les paramètres de
  378.     lea    UserColor(pc),a1    ;l'écran d'arrivée
  379.     moveq    #7,d0        ;
  380.     bsr    GetVidel        ;
  381.  
  382.     Xbios    mon_type        ;
  383.     cmpi.w    #3,d0        ;TV ?
  384.     bne.s    *+4        ;
  385.     moveq    #1,d0        ;Oui, idem RGB
  386.     mulu    #20*2,d0        ;
  387.     lea    .preset(pc,d0.w),a0    ;Récupère les paramètres
  388.     move.w    (a0)+,d0        ;du Videl, selon le type
  389.     move.b    d0,$84(a6)        ;de moniteur of course.
  390.     lea    MonMode(pc),a1    ;
  391.     move.w    (a0)+,(a1)        ;
  392.     lea    MonVidel(pc),a1    ;
  393.     move.l    a0,(a1)        ;
  394.     
  395.     move.w    #$7fff,-(sp)    ;
  396.     trap    #14        ;Demande l'adresse de
  397.     addq.l    #2,sp        ;la table des routines.
  398.     lea    InVsetmode(pc),a1    ;
  399.     move.l    88*4(a0),a2    ;
  400.     move.l    a2,(a1)        ;Sauve l'adresse VsetMode.
  401.     movem.l    (sp)+,d0-d2/a0-a2    ;
  402.     rts            ;
  403.  
  404. ;ATTENTION: NE TOUCHEZ EN AUCUN CAS A CES DONNEES AU HASARD, VOUS RISQUEZ
  405. ;DE GRILLER L'ELECTRONIQUE DE VOTRE MONITEUR !!!!.
  406. .preset    dc.w    2,$0088        ;640*400 1 bitplan, écran monochrome
  407.     dc.w    $001a,$0000,$0000,$020f,$000c,$0014
  408.     dc.w    $03e9,$0000,$0000,$0043,$0363,$03e7
  409.     dc.w    $0000,$0028,$0008,$0080,$0000,$0200
  410.  
  411.     dc.w    1,_640x|_4c|_ste    ;640*256 2 bitplans 55Hz, écran RGB/TV
  412.     dc.w    $003e,$0032,$0009,$023f,$001c,$0034
  413.     dc.w    $0241,$0235,$002f,$0034,$0232,$023b
  414.     dc.w    $0000,$0050,$0004,$0081,$0000,$0100
  415.  
  416.     dc.w    4,_640x|_16c|_vga    ;640*480 4 bitplans, écran VGA
  417.     dc.w    $00c6,$008d,$0015,$02a3,$007c,$0096
  418.     dc.w    $0419,$03ff,$003f,$003f,$03ff,$0415
  419.     dc.w    $0000,$00a0,$0008,$0186,$0000,$0000
  420. ;;;;;;;;;;;
  421. User2Mon    movem.l    d0-d1/a0-a2,-(sp)    ;
  422.     move.l    v_base.w,d0    ;
  423.     lsl.w    #8,d0        ;
  424.     move.b    v_base_l.w,d0    ;
  425.     lsl.l    #8,d0        ;
  426.     lsr.l    #8,d0        ;
  427.     move.l    d0,$78(a6)        ;
  428.     cmp.l    $70(a6),d0        ;C'est l'écran MonTT ???
  429.     beq.s    .fini        ;
  430. ;Petite remarque: lorsque l'on trace un programme, MonTT effectue un saut
  431. ;dans cette routine, même s'il ne tient pas à faire un swap écran. J'avoue
  432. ;ne pas bien avoir saisi l'astuce... car à ma connaissance, on ne peut pas
  433. ;tracer un programme à partir de l'écran User... Allô la terre ?
  434.  
  435.     move.l    d0,$74(a6)        ;On est bien sur User
  436.     lea    UserVidel(pc),a0    ;
  437.     lea    UserColor(pc),a1    ;->Conserve les infos de
  438.     moveq    #7,d0        ;résolution.
  439.     bsr    GetVidel        ;
  440.  
  441.     movea.l    MonVidel(pc),a0    ;
  442.     lea    MonColor(pc),a1    ;Maintenant, remet le
  443.     lea    LameMon(pc),a2    ;Videl pour MonTT.
  444.     moveq    #0,d0        ;
  445.     bsr    SetVidel        ;
  446.     move.l    $70(a6),d0        ;et fini de ré-installer
  447.     move.b    d0,$ffff820d.w    ;ses paramètres.
  448.     lsr.w    #8,d0        ;
  449.     move.l    d0,$ffff8200.w    ;
  450. .fini    movem.l    (sp)+,d0-d1/a0-a2    ;
  451.     rts            ;
  452.  
  453. ;;;;;;;;;;;
  454. Mon2User    movem.l    d0/a0-a2,-(sp)    ;
  455.     lea    UserVidel(pc),a0    ;Remet nos paramètres
  456.     lea    UserColor(pc),a1    ;
  457.     movea.l    InVsetmode(pc),a2    ;
  458.     moveq    #7,d0        ;
  459.     bsr    SetVidel        ;
  460.     move.l    $74(a6),d0        ;
  461.     move.b    d0,$ffff820d.w    ;
  462.     lsr.w    #8,d0        ;
  463.     move.l    d0,$ffff8200.w    ;R.A.S
  464.     movem.l    (sp)+,d0/a0-a2    ;
  465.     rts            ;
  466.  
  467. ;;;;;;;;;;;
  468. Mon2Mon    movem.l    d0/a0-a2,-(sp)    ;
  469.     lea    MonColor+12(pc),a1    ;
  470.     move.l    -(a1),d0        ;
  471.     move.l    -(a1),4(a1)    ;Inverse les couleurs de
  472.     move.l    d0,(a1)        ;l'écran du debugger, tant
  473.     move.l    -(a1),d0        ;qu'on y est.
  474.     swap    d0        ;
  475.     move.l    d0,(a1)        ;
  476.     movea.l    MonVidel(pc),a0    ;Re-installe MonTT par la
  477.     lea    LameMon(pc),a2    ;force.
  478.     moveq    #0,d0        ;
  479.     bsr    SetVidel        ;
  480.     move.l    $70(a6),d0        ;
  481.     move.b    d0,$ffff820d.w    ;
  482.     lsr.w    #8,d0        ;
  483.     move.l    d0,$ffff8200.w    ;
  484.     movem.l    (sp)+,d0/a0-a2    ;
  485.     moveq    #0,d7        ;Si on oublie ça, y'a comme
  486.     move.b    $84(a6),d7        ;un malaise...
  487.     rts            ;
  488.  
  489. ;;;;;;;;;;;
  490. LameMon    move.w    MonMode(pc),d0    ;Le système n'est pas au
  491.     rts            ;courant...
  492.  
  493. InVsetmode    ds.l    1        ;Tout ça pour nous...
  494. MonMode    ds.w    1        ;
  495. MonVidel    ds.l    1        ;
  496. MonColor    dc.w    $0000        ;Couleur de fond    \
  497.     dc.w    $0EEE        ;------- de 1er plan    /STE
  498.     dc.l    $00000000        ;
  499.     dc.l    $ECEC00EC        ;Idem, mais en VGA
  500.     ;Rappel: sur STE c'est xxxx RRRR GGGG BBBB            (sur un mot)
  501.     ;     sur Falcon RRRRRRxx GGGGGGxx xxxxxxxx BBBBBBxx (sur un mot-long)
  502.     ;Démerdez vous pour créer votre palette favorite.
  503. UserVidel    ds.w    6+6+2+1+1+1+1    ;
  504. UserColor    ds.w    16        ;
  505. hello    dc.b    "Ceci est une version de MonTT patché pour le Falcon 030 grâce à",$d,$a
  506.     dc.b    "MONPATCH 3.6, programmé par NulloS/DNT-Crew le 04/11/1993.",$d,$a
  507.     dc.b    $d,$a
  508.     dc.b    "Je vous remercie d'avoir utilisé ce programme de patch, qui vous a",$d,$a
  509.     dc.b    "donc permis de transformer un MonTT explosant votre moniteur à la",$d,$a
  510.     dc.b    "moindre occasion, en un superbe débugger tournant dans toutes les",$d,$a
  511.     dc.b    "résolutions possibles et imaginables, même celles créées à l'aide",$d,$a
  512.     dc.b    "de FalconScreen (du style 832*440 en 65Hz !).",$d,$a
  513.     dc.b    $d,$a
  514.     dc.b    "Bref, je suis génial !!",$d,$a
  515.     dc.b    $d,$a
  516.     dc.b    "En fait, je me tape ce texte minable parce que j'ai 1ko à rajouter",$d,$a
  517.     dc.b    "en fin du code de MonTT, et que c'est plus smart que de remplir avec",$d,$a
  518.     dc.b    "de bêtes $00... J'en profite donc pour vous dire que ce patch m'a demandé",$d,$a
  519.     dc.b    "pas moins de 1 semaine de recherche, pour les 2 premières versions, et",$d,$a
  520.     dc.b    "autant pour la version 3.6 (haaa, les joies du Videl: salooooooope !).",$d,$a
  521.     dc.b    "Donc plein de travail, mais ça en valait la peine.",$d,$a
  522.     dc.b    $d,$a
  523.     dc.b    "En plus maintenant, dans la version 3, ce n'est pas 1ko, mais carrément",$d,$a
  524.     dc.b    "1,25ko, c'est l'inflation permanente... Enfin bon, cela reste assez",$d,$a
  525.     dc.b    "raisonnable. Putain, vivement un vrai débugger Falcon, sans risques de",$d,$a
  526.     dc.b    "plantage dûs au côté bidouille du patch",$d,$a
  527.     dc.b    $d,$a
  528.     dc.b    "Allez, j'arrive au bout. Bon débuggage, et que vive le Falcon !!",0
  529.     dcb.b    1024+256-(*-hello),$88
  530. MonBP    equ    hello+1024
  531. MonCode    equ    *
  532.  
  533. EndPatch    equ    *        ;Fin du mégapatch
  534. *≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈*
  535.     section    data
  536. message    dc.b    27,"E+-----------------------------------------+",$d,$a
  537.     dc.b        "|          MonTT-FalconPatch 3.6          |",$d,$a
  538.     dc.b        "+-----------------------------------------+",$d,$a
  539.     dc.b        "    «(C)oderight NulloS//DNT-Crew 1993»",$d,$a
  540.     dc.b    $a,$a,"Votre choix: 1) Patch complet spécial Falcon030",$d,$a
  541.     dc.b          "             2) Débuggage simple de MonTT",$d,$a
  542.     dc.b    ">?",$d,$a,0
  543. oe    dc.b    "Impossible d'ouvrir le fichier "
  544. inname    dc.b    "mon_ori.prg",0
  545. ce    dc.b    "Impossible de créer le fichier "
  546. outname    dc.b    "mon_f030.prg",0
  547. re    dc.b    "Erreur de lecture !",$d,$a,0
  548. we    dc.b    "Erreur d'écriture: disque plein ?",$d,$a,0
  549.     even
  550.     section    bss
  551. MonTTsize    ds.l    1
  552. MonTT    ds.b    80000
  553. stack    ds.w    256
  554.  
  555.