home *** CD-ROM | disk | FTP | other *** search
/ Falcon 030 Power 2 / F030_POWER2.iso / ST_STE / MAGS / TOXIC_14.ARJ / toxic_14 / TOXIC_14.D_2 / LEONARD / LEO_ST.ZIP / ST_PC / SYSTEM / L_DEBUG6.S < prev    next >
Text File  |  1989-07-29  |  65KB  |  3,115 lines

  1.  
  2.  
  3. ;*****************************************************************
  4. ;*                                *
  5. ;*    68000 Desassembleur, RAM-Viewer, MEMORY looker        *
  6. ;*    and Break-Proof written by Leonard / OXYGENE.        *
  7. ;*                                *
  8. ;*****************************************************************
  9.  
  10.  
  11. ;    *********************************
  12. ;    *    Constantes:        *
  13. ;    *********************************
  14. PIC        equ    0
  15.  
  16. ;    *********************************
  17. ;    *    Partionnement Mémoire    *
  18. ;    *********************************
  19. TOP        equ    $400000
  20. SMEM1        equ    TOP-(32000*2)
  21.  
  22. ;**********************************************************
  23.     SECTION        TEXT
  24. ;**********************************************************
  25.  
  26.  
  27.  
  28.  
  29.  
  30. ;*****************************************************************************
  31. ;*****************************************************************************
  32. ;*****************************************************************************
  33.  
  34.  
  35. AA
  36. ;    *************************************************
  37. ;    *                        *
  38. ;    *    FLIP-O-Demo 2.                *
  39. ;    *    Debugger resident.            *
  40. ;    *    (C)oderight OXYGENE 1994.        *
  41. ;    *    Written by Leonard.            *
  42. ;    *                        *
  43. ;    *************************************************
  44.  
  45. ; FLIP-Debug-2 contient:
  46. ;  -Un viewer de RAM.
  47. ;  -"     "   de registres.
  48. ; Initialisation avec: JSR debug
  49. ; Appel avec retour avec TRAP #15
  50. ; ATTENTION: Flip-Debug utilise $200.w
  51.  
  52. TrueTOP        equ    $400000
  53. Place        equ    32000+(256*2*8)+256+16*80
  54. CoulCadre    equ    $7            ; Couleur des cadres.
  55.  
  56. D_Init        bra    .deb
  57.         dc.b    '"DD" v3.1 by Leonard/OXYGENE.'
  58.         dc.b    '68000-Desassembler,Register display, memory viewer '
  59.         dc.b    'and restart-code option. Contact us at: OXYGENE,'
  60.         dc.b    '22 rue Jean Mermoz, 91700 STE Genevieve des Bois,FRANCE.'
  61.         dc.b    'Or 3615 RTEL BAL "LEONHARD".'
  62.         even
  63.     .deb:    clr.w    $200.w
  64.         movem.l    d0-a6,-(sp)
  65.         lea    StartError(pc),a0
  66.         lea    $8.w,a1
  67.         move.w    #($60-$8)/4-1,d0
  68.     .Loop1:    move.l    a0,(a1)+
  69.         adda.l    #$01000000,a0
  70.         dbf    d0,.Loop1
  71.         lea    StartNormal(pc),a0
  72.         move.l    a0,$bc.w
  73.         lea    UnRte(pc),a0
  74.         move.l    a0,$64.w
  75.         move.l    a0,$68.w
  76.         movem.l    (sp)+,d0-a6
  77.         rts
  78. UnRte        rte
  79.  
  80.     ; Sauvegarde de la zone $000 à $200 pour afficher
  81.     ; la "vraie" RAM.
  82. SauveRAM    movem.l    d0/a0-a1,-(sp)
  83.         lea    LowRAM(pc),a1
  84.         suba.l    a0,a0
  85.         move.w    #$400/4-1,d0
  86.     .Loop1:    move.l    (a0)+,(a1)+
  87.         dbf    d0,.Loop1
  88.         movem.l    (sp)+,d0/a0-a1
  89.         rts
  90.  
  91. SauveContexte    movem.l    d0/a0-a1,-(sp)
  92.         lea    Contexte(pc),a1
  93.         movea.w    #$fa01,a0
  94.         moveq    #15,d0
  95.     .Loop1:    move.b    (a0),(a1)+
  96.         addq.w    #2,a0
  97.         dbf    d0,.Loop1
  98.         move.b    $ffff8260.w,(a1)+    ; Résolution
  99.         move.b    $ffff820a.w,(a1)+    ; Synchronisation écran
  100.         move.b    $ffff8201.w,(a1)+    ; Adresse vidΘo H
  101.         move.b    $ffff8203.w,(a1)+    ; Adresse vidΘo M
  102.         move.b    $ffff820d.w,(a1)+    ; Adresse vidΘo L (ste)
  103.         move.b    $ffff8265.w,(a1)+    ; DΘcalage (STE)
  104.         movea.w    #$8240,a0
  105.         moveq    #7,d0
  106.     .Loop2:    move.l    (a0)+,(a1)+
  107.         dbf    d0,.Loop2
  108.         moveq    #11,d0
  109.     .Loop3:    move.b    d0,$ffff8800.w
  110.         move.b    $ffff8800.w,(a1)+
  111.         or.l    d0,d0
  112.         dbf    d0,.Loop3
  113.         movem.l    (sp)+,d0/a0-a1
  114.         rts
  115.  
  116. Initialisations
  117.     ; Mise à jour de la table du clavier.
  118.         lea    Clavier(pc),a0
  119.         moveq    #128/4-1,d0
  120.     .cl:    clr.l    (a0)+
  121.         dbf    d0,.cl
  122.  
  123.     ; Construction des octets "graphique" pour affichage rapide.
  124.         move.l    LesOctets(pc),a1
  125.         lea    .table(pc),a2
  126.         move.w    #255,d7
  127.         moveq    #0,d6
  128.     .Loop1:    moveq    #0,d0
  129.         moveq    #0,d1
  130.         moveq    #$0f,d1
  131.         and.b    d6,d1
  132.         move.b    d6,d0
  133.         lsr.b    #4,d0
  134.         move.b    0(a2,d0.w),d0
  135.         move.b    0(a2,d1.w),d1
  136.         sub.b    #32,d0
  137.         sub.b    #32,d1
  138.         lsl.w    #3,d0
  139.         lsl.w    #3,d1
  140.         lea    Font88(pc),a0
  141.         movea.l    a0,a3
  142.         add.w    d0,a0
  143.         add.w    d1,a3
  144.         moveq    #7,d2
  145.     .Loop2:    move.b    (a0)+,(a1)+
  146.         move.b    (a3)+,(a1)+
  147.         dbf    d2,.Loop2
  148.         addq.w    #1,d6
  149.         dbf    d7,.Loop1
  150.         rts
  151.  
  152.     .table:    dc.b    '0123456789ABCDEF'
  153.         even
  154.  
  155. StartNormal    move.w    #$2700,sr
  156.         move.b    #'N',$200.w
  157.         bra.s    hop
  158. StartError    move.w    #$2700,sr
  159.         sf    $200.w
  160.  
  161. hop:        move.l    a0,$204.w
  162.         move.b    #1,$ffff8260.w        ; MED res.
  163.         lea    Registers(pc),a0
  164.         move.w    (sp),(a0)+        ; SR
  165.         move.l    2(sp),(a0)+        ; PC
  166.         movem.l    d0-a7,(a0)
  167.         cmpi.b    #'N',$200.w
  168.         beq.s    .yes
  169.  
  170. ; Récupération du vecteur d'erreur.
  171.         lea    StartError(pc),a1
  172.         move.l    a1,d0
  173.         rol.l    #8,d0
  174.         move.b    d0,$202.w            ; Numéro du vecteur.
  175.         cmpi.b    #1,d0
  176.         bhi.s    .yes
  177.         addq.l    #8,sp
  178.         move.w    (sp),-6(a0)
  179.         move.l    2(sp),-4(a0)
  180.     .yes:
  181.  
  182.     .yes2:    move.l    $204.w,32(a0)        ; Vrai "A0"
  183.         lea    16*4(a0),a0
  184.         move.l    usp,a1
  185.         move.l    a1,(a0)+
  186.         lea    MyStack(pc),sp
  187.         lea    VariablesPC(pc),a6
  188.         bsr    SauveContexte
  189.         clr.b    $ffff820a.w        ; 60Hz
  190.         move.l    #$08080000,$ffff8800.w
  191.         move.l    #$09090000,$ffff8800.w
  192.         move.l    #$0a0a0000,$ffff8800.w
  193.         move.l    #$0707ffff,$ffff8800.w
  194.         bsr    SauveRAM
  195.         bsr    SearchFree        ; Cherche la place en RAM.
  196.         bsr    SearchProcessor
  197.         lea    VariablesPC(pc),a6
  198.         bsr    Initialisations
  199.          bsr    My_ITs
  200.         move.b    #$ff,$201.w
  201.         clr.w    Xp(a6)
  202.         clr.w    Yp(a6)
  203.  
  204.     ; Récupération de l'adresse vidéo.
  205.         moveq    #0,d7
  206.         move.b    OldVdh(pc),d7
  207.         swap    d7
  208.         move.b    OldVdm(pc),d7
  209.         lsl.w    #8,d7
  210.         moveq    #0,d0
  211.         move.l    #TrueTOP-32000,d1
  212.         bsr    Clipping
  213.         lea    AD_Video(pc),a0
  214.         move.l    d7,(a0)
  215.  
  216.     ; Récupération du PC présumé.
  217.         move.l    LePC(pc),d7
  218.         moveq    #0,d0
  219.         move.l    #TOP-40,d1
  220.         bsr    Clipping
  221.         lea    RAM_Pointer(pc),a0
  222.         move.l    d7,(a0)
  223.  
  224.         move.b    #2,$ffff820a.w    ; 50Hz
  225.  
  226.         cmpi.b    #'N',$200.w
  227.         beq    HelpPage    ; Page d'aide pour commencer.
  228.         bsr    InitREG_Display
  229.         bra    REG_Display
  230.  
  231.  
  232. ;*********************************
  233. ; Définition des touches:    ;*
  234. KeyA    equ    $10        ;*
  235. KeyD    equ    $20        ;*
  236. KeyL    equ    $26        ;*
  237. KeyM    equ    $27        ;*
  238. KeyP    equ    $19        ;*
  239. KeyR    equ    $13        ;*
  240. KeyT    equ    $14        ;*
  241. KeyX    equ    $2d        ;*
  242. KeyAlt    equ    $38        ;*
  243. KeyUp    equ    $48        ;*
  244. KeyDown    equ    $50        ;*
  245. KeyRight =    $4d        ;*
  246. KeyLeft    equ    $4b        ;*
  247. KeyHelp    equ    $62        ;*
  248. KeyShift =    $36        ;*
  249. KeyShift2 =    $2a        ;*
  250. KeyPlus    equ    $4e        ;*
  251. KeyMoins =    $4a        ;*
  252. KeyCTRL    equ    $1d        ;*
  253. KeySpace =    57        ;*
  254. KeyBack    equ    $0e        ;*
  255. ;*********************************
  256.  
  257.  
  258. Cadre        ; Trace un cadre 2 plans:
  259.         ; D0,D1: Xd,Yd
  260.         ; D2,D3: Xf,Yf
  261. ;        lea    TOP-32000,a1
  262.         move.l    Ecran(pc),a1
  263.         sub.w    d1,d3        ; Delta Y
  264.         mulu.w    #160,d1
  265.         add.l    d1,a1
  266.         subq.w    #(2+1),d3    ; Ligne haut et bas + DBF.
  267.         bmi    .fin
  268.         sub.w    d0,d2        ; Nb de tranches.
  269.         lsl.w    #2,d0
  270.         add.w    d0,a1
  271.         move.w    d2,d0        ; Nb de tranches -1
  272.         lsl.w    #2,d0
  273.         bsr.s    .ligne
  274.     .Loop2:    ori.l    #$80008000,(a1)
  275.         ori.l    #$00010001,0(a1,d0.w)
  276.         lea    160(a1),a1
  277.         dbf    d3,.Loop2
  278.     .ligne:    move.w    d2,d1
  279.         movea.l    a1,a2
  280.     .Loop1:    move.l    #-1,(a2)+
  281.         dbf    d1,.Loop1
  282.         lea    160(a1),a1
  283.     .fin:    rts
  284.  
  285. Dispatch    suba.l    a0,a0
  286.         suba.l    a1,a1
  287.         lea    Clavier(pc),a5
  288.         tst.b    KeyR(a5)
  289.         beq.s    .non01
  290.         lea    InitREG_Display(pc),a0    ; Le JSR
  291.         lea    REG_Display(pc),a1    ; Le JUMP
  292.         bra.s    .hop
  293.     .non01:    tst.b    KeyHelp(a5)
  294.         beq.s    .non02
  295.         lea    $0.w,a0
  296.         lea    HelpPage(pc),a1        ; Le JUMP
  297.         bra.s    .hop
  298.     .non02:    tst.b    KeyM(a5)
  299.         beq.s    .non03
  300.         lea    InitRAM_Display(pc),a0
  301.         lea    RAM_Display(pc),a1
  302.         bra.s    .hop
  303.     .non03:    tst.b    KeyL(a5)
  304.         beq.s    .non04
  305.         lea    $0.w,a0
  306.         lea    RAM_Looker(pc),a1
  307.         bra.s    .hop
  308.     .non04:    tst.b    KeyD(a5)
  309.         beq.s    .non05
  310.         lea    InitDES_Display(pc),a0
  311.         lea    DES_Routine(pc),a1
  312.         bra.s    .hop
  313.     .non05:
  314.         nop
  315.     .hop:    cmpa.l    #0,a0
  316.         beq.s    .bra
  317.         pea    (a1)
  318.         jsr    (a0)
  319.         move.l    (sp)+,a1
  320.     .bra:    cmpa.l    #0,a1
  321.         beq.s    .rien
  322.         addq.l    #4,sp            ; Evite le RTS
  323.         jmp    (a1)
  324.     .rien:    rts
  325.  
  326.         ; Recherche d'une zone de (place) octets pour y placer
  327.         ; l'écran.
  328.  
  329. SearchFree
  330.         move.w    sr,-(sp)
  331.         move.w    #$2700,sr
  332.         movem.l    d0-d1/a0-a2,-(sp)
  333.         suba.l    a0,a0
  334.         clr.w    $ffff8240.w
  335.         move.l    #Place,d0        ; Place initiale.
  336.         lea    ((TrueTOP-Place)&-4),a1
  337.     .Loop2:    cmpa.l    a0,a1
  338.         beq.s    .NotFound
  339.         not.w    $ffff8240.w
  340.         move.l    d0,d1
  341.         movea.l    a0,a2            ; Adresse dispo.
  342.     .Loop1:    tst.l    (a0)+
  343.         bne.s    .Loop2
  344.         subq.l    #4,d1
  345.         bpl.s    .Loop1
  346.     .Yeah:    lea    255(a2),a2
  347.         move.l    a2,d0
  348.         clr.b    d0
  349.     .haha:    lea    Ecran(pc),a0
  350.         move.l    d0,(a0)
  351.         lea    LesOctets(pc),a0
  352.         add.l    #32000,d0
  353.         move.l    d0,(a0)
  354.         lea    BufferGraphique(pc),a0
  355.         add.l    #(256*2*8),d0
  356.         move.l    d0,(a0)
  357.         movem.l    (sp)+,d0-d1/a0-a2
  358.         rte
  359. .NotFound    movea.l    a1,a2
  360.         bra.s    .Yeah
  361.  
  362. SearchProcessor    move.w    sr,-(sp)
  363.         move.w    #$2700,sr
  364.         move.l    $10.w,d7
  365.         lea    .Back(pc),a0
  366.         move.l    a0,$10.w
  367.         move.l    a7,a5
  368.         moveq    #'0',d1            ; Num du processeur.
  369.         dc.w    $42c0    ; MOVE CCR,D0  P=10
  370.         moveq    #'1',d1
  371.         dc.w    $49c0    ; EXTB.L D0   P=20
  372.         moveq    #'2',d1
  373.         dc.l    $4e7a0002
  374.         bset    #9,d0
  375.         dc.l    $4e7b0002
  376.         dc.l    $4e7a0002
  377.         bclr    #9,d0
  378.         beq.s    .Back
  379.         moveq    #'3',d1
  380.         dc.l    $4e7b0002
  381.     .Back:    move.l    a5,sp
  382.         move.l    d7,$10.w
  383.         lea    Processor(pc),a0
  384.         move.w    d1,(a0)
  385.         rte
  386.  
  387. ;***************************************************************************
  388. ;    *********************************************************
  389. ;    *    Affichage des Registres.            *
  390. ;    *    Initialisation de l'écran.            *
  391. ;    *                            *
  392. ;    *********************************************************
  393. InitREG_Display    lea    Clavier(pc),a5
  394.     .Waitk:    tst.b    KeyR(a5)
  395.         bne.s    .Waitk
  396.         bsr    MedRes
  397. ;        lea    MyPal2(pc),a0
  398. ;        lea    $ffff8240.w,a1
  399. ;        move.l    (a0)+,(a1)+
  400. ;        move.l    (a0)+,(a1)+
  401. ;        move.l    Ecran(pc),a0
  402. ;        move.w    #(32000/4)-1,d0
  403. ;        moveq    #0,d1
  404. ;    .Cls:    move.l    d1,(a0)+
  405. ;        dbf    d0,.Cls
  406.         moveq    #3,d0
  407.         moveq    #37,d2
  408.         moveq    #9,d1
  409.         move.w    #30,d3
  410.         bsr    Cadre
  411.         moveq    #0,d0
  412.         moveq    #18,d2
  413.         moveq    #42,d1
  414.         move.w    #199,d3
  415.         bsr    Cadre
  416.         moveq    #20,d0
  417.         moveq    #39,d2
  418.         moveq    #42,d1
  419.         move.w    #199,d3
  420.         bsr    Cadre
  421.  
  422.         move.w    #8,Xp(a6)
  423.         move.w    #2,Yp(a6)
  424.         lea    .txt1(pc),a0
  425.         bsr    Print
  426.         move.w    #1,Xp(a6)
  427.         move.w    #6,Yp(a6)
  428.         lea    .txt2(pc),a0
  429.         bsr    Print
  430.         rts
  431.  
  432. .txt1:    dc.b    '"R"egister viewer. Press HELP for Infos.',-1
  433. .txt2:    dc.b    'ERROR-Status:',-1
  434.     even
  435.  
  436. ;    *********************************************************
  437. ;    *                            *
  438. ;    *    Code pour l'affichage des registres.        *
  439. ;    *                            *
  440. ;    *********************************************************
  441. REG_Display    move.w    #1,Xp(a6)
  442.         move.w    #7,Yp(a6)
  443.         cmpi.b    #'N',$200.w
  444.         bne.s    .non0
  445.         lea    .txt0(pc),a0
  446.         bsr    Print
  447.         bra    .cont
  448.     .non0:    moveq    #0,d0
  449.         move.b    $202.w,d0        ; Numéro d'exeption.
  450.         cmpi.b    #9,d0
  451.         bls.s    .exist
  452.         moveq    #0,d0
  453.     .exist:    lea    .TableTxt(pc),a1
  454.         add.w    d0,d0
  455.         add.w    d0,a1
  456.         lea    .txt1(pc),a0
  457.         add.w    (a1),a0
  458.         bsr    Print
  459. ; Affichage des registres de D0 à D7 et A0 à A7
  460.     .cont:    moveq    #1,d6
  461.         moveq    #9,d7
  462.         lea    D0D7(pc),a1
  463.         move.b    #'D',d0
  464.         bsr    PrintCol
  465.         moveq    #18,d6
  466.         moveq    #9,d7
  467.         lea    A0A7(pc),a1
  468.         move.b    #'A',d0
  469.         bsr    PrintCol
  470.  
  471. ; Affichage du registre USP
  472.         lea    (.reg0+5)(pc),a2
  473.         move.l    LeUSP(pc),d0
  474.         bsr    Fill
  475.         move.w    #17,Xp(a6)
  476.         move.w    #17,Yp(a6)
  477.         lea    (.reg0)(pc),a0
  478.         bsr    Print
  479.  
  480. ; Affichage du PC:
  481.         lea    .reg11(pc),a2
  482.         move.l    LePC(pc),d0
  483.         bsr    Fill
  484.         move.w    #1,Xp(a6)
  485.         move.w    #19,Yp(a6)
  486.         lea    .reg1(pc),a0
  487.         bsr    Print
  488.  
  489. ; Affichage du SR:
  490.         lea    .reg21(pc),a2
  491.         moveq    #0,d0
  492.         move.w    LeSR(pc),d0
  493.         bsr    Fill
  494.         move.w    #1,Xp(a6)
  495.         move.w    #20,Yp(a6)
  496.         lea    .reg2(pc),a0
  497.         bsr    Print
  498.  
  499. ; Affichage du processeur
  500.         move.w    Processor(pc),d0
  501.         lea    .Proc1(pc),a0
  502.         move.b    d0,(a0)
  503.         move.w    #1,Xp(a6)
  504.         move.w    #22,Yp(a6)
  505.         lea    .Proc(pc),a0
  506.         bsr    Print
  507.  
  508.  
  509. ; Affichage de l'adresse de relocation de RAM-Debug.
  510.         lea    .reg31(pc),a2
  511.         move.l    Ecran(pc),d0
  512.         bsr    Fill
  513.         move.w    #1,Xp(a6)
  514.         move.w    #23,Yp(a6)
  515.         lea    .reg3(pc),a0
  516.         bsr    Print
  517.  
  518.  
  519.     .loopf:    bsr    Vsync
  520.         bsr    Dispatch
  521.         bra.s    .loopf
  522.  
  523. .reg0        dc.b    'USP:$00000000',-1
  524. .reg1        dc.b    'PC:$'
  525. .reg11        dc.b    '00000000',-1
  526. .reg2        dc.b    'SR:$'
  527. .reg21        dc.b    '00000000',-1
  528. .reg3        dc.b    'Relocation ecran RAM-Debug:$'
  529. .reg31        dc.b    '00000000',-1
  530. .Proc        dc.b    'Processeur trouve: MC-680'
  531. .Proc1        dc.b    '00',-1
  532.         even
  533.  
  534. .TableTxt    dc.w    .txt1-.txt1
  535.         dc.w    .txt2-.txt1
  536.         dc.w    .txt3-.txt1
  537.         dc.w    .txt4-.txt1
  538.         dc.w    .txt5-.txt1
  539.         dc.w    .txt6-.txt1
  540.         dc.w    .txt7-.txt1
  541.         dc.w    .txt8-.txt1
  542.         dc.w    .txt9-.txt1
  543.         dc.w    .txt10-.txt1
  544. .txt0    dc.b    'Interruption manuelle.',-1
  545. .txt1    dc.b    '$08 Erreur BUS.',-1            00
  546. .txt2    dc.b    '$0C Adresse IMPAIR.',-1        01
  547. .txt3    dc.b    '$10 Instruction ILLEGAL.',-1        02
  548. .txt4    dc.b    '$14 Division par ZERO',-1        03
  549. .txt5    dc.b    '$18 Instruction CHK',-1        04
  550. .txt6    dc.b    '$1C Instruction TRAPV',-1        05
  551. .txt7    dc.b    '$20 Violation Privilege',-1        06
  552. .txt8    dc.b    '$24 Exception TRACE',-1        07
  553. .txt9    dc.b    '$28 Line A',-1                08
  554. .txt10    dc.b    '$2C Line F',-1                09
  555.         even
  556.  
  557. PrintCol    moveq    #7,d5        ; 8 registres
  558.         lea    .provis1(pc),a0
  559.         move.b    d0,(a0)
  560.         move.b    #'0',1(a0)
  561.     .loop1:    move.l    (a1)+,d0
  562.         lea    .provis2(pc),a2
  563.         bsr    Fill
  564.         move.w    d6,Xp(a6)
  565.         move.w    d7,Yp(a6)
  566.         lea    .provis1(pc),a0
  567.         bsr    Print
  568.         addq.b    #1,1(a0)
  569.         addq.w    #1,d7
  570.         dbf    d5,.loop1
  571.         rts
  572.  
  573. .provis1    dc.b    'D0:$'
  574. .provis2    dc.b    '00000000',-1
  575.         even
  576.  
  577. Fill        moveq    #7,d2
  578.     .loop2:    moveq    #$f,d1
  579.         rol.l    #4,d0
  580.         and.l    d0,d1
  581.         move.b    .table(pc,d1.w),(a2)+
  582.         dbf    d2,.loop2
  583.         rts
  584. .table:        dc.b    '0123456789ABCDEF'
  585.         even
  586.  
  587. ;***************************************************************************
  588. ;    *********************************************************
  589. ;    *    Affichage de la RAM                *
  590. ;    *    Initialisation de l'écran.            *
  591. ;    *                            *
  592. ;    *********************************************************
  593. InitRAM_Display    lea    Clavier(pc),a5
  594.     .Waitk:    tst.b    KeyM(a5)
  595.         bne.s    .Waitk
  596.         clr.b    $fffffa1b.w
  597.         bsr    MedRes
  598.         lea    MyPal2(pc),a0
  599.         lea    $ffff8240.w,a1
  600.         move.l    (a0)+,(a1)+
  601.         move.l    (a0)+,(a1)+
  602.         move.l    Ecran(pc),a0
  603.         move.w    #(32000/4)-1,d0
  604.         moveq    #0,d1
  605.     .Cls:    move.l    d1,(a0)+
  606.         dbf    d0,.Cls
  607.         moveq    #3,d0
  608.         moveq    #37,d2
  609.         moveq    #9,d1
  610.         move.w    #30,d3
  611.         bsr    Cadre
  612.         moveq    #0,d0
  613.         moveq    #39,d2
  614.         moveq    #52,d1
  615.         move.w    #199,d3
  616.         bsr    Cadre
  617.         move.w    #8,Xp(a6)
  618.         move.w    #2,Yp(a6)
  619.         lea    .txt1(pc),a0
  620.         bsr    Print
  621.  
  622.         moveq    #2,d6
  623.         moveq    #8,d7
  624.         moveq    #15,d5
  625.     .loop:    move.w    d6,Xp(a6)
  626.         move.w    d7,Yp(a6)
  627.         lea    .txt2(pc),a0
  628.         movem.w    d5-d7,-(sp)
  629.         bsr    Print
  630.         movem.w    (sp)+,d5-d7
  631.         addq.w    #1,d7
  632.         dbf    d5,.loop
  633.         bsr    Initialisations
  634.         rts
  635. .txt1:    dc.b    '"M"emory viewer. Use arrows keys, shift and CONTROL to scroll.',-1
  636. .txt2:    dc.b    '$',-1
  637.     even
  638. MyPal2        dc.w    $000,$777,$047,CoulCadre
  639.  
  640. ;    *********************************************************
  641. ;    *                            *
  642. ;    *    Code pour l'affichage de la RAM.        *
  643. ;    *                            *
  644. ;    *********************************************************
  645. RAM_Display    bsr    Vsync
  646.         bsr    Dispatch
  647.  
  648.         bsr    Put_RAM_Page
  649.  
  650.         move.l    RAM_Pointer(pc),d7    ; Position en RAM
  651.         moveq    #0,d0            ; Déplacement
  652.         moveq    #1,d1            ; Multiplicateur.
  653.  
  654.         lea    Clavier(pc),a5
  655.         tst.b    KeyA(a5)
  656.         beq.s    .non00
  657.         bsr    GetNumber
  658.         bra.s    RAM_Display
  659.     .non00:    tst.b    KeyT(a5)
  660.         beq.s    .non0
  661.         not.b    $201.w            ; VRAIE-Mémoire.
  662.     .non0:    tst.b    KeyShift(a5)
  663.         beq.s    .non1
  664.         move.w    #16,d1            ; Mutiplicateur sur 16
  665.     .non1:    tst.b    KeyShift2(a5)
  666.         beq.s    .non11
  667.         move.w    #16,d1            ; Mutiplicateur sur 16
  668.     .non11:    tst.b    KeyUp(a5)
  669.         beq.s    .non2
  670.         add.w    #-16,d0
  671.     .non2:    tst.b    KeyDown(a5)
  672.         beq.s    .non3
  673.         add.w    #16,d0
  674.     .non3:    tst.b    KeyLeft(a5)
  675.         beq.s    .non4
  676.         add.w    #-1,d0
  677.     .non4:    tst.b    KeyRight(a5)
  678.         beq.s    .non5
  679.         add.w    #1,d0
  680.     .non5:    tst.b    KeyCTRL(a5)
  681.         beq.s    .non6
  682.         move.w    #512,d1
  683.     .non6:
  684.         muls.w    d1,d0            ; DΘplacement * Multi.
  685.         add.l    d0,d7            ; Nouvelle position.
  686.  
  687.         moveq    #0,d0        ; Borne inférieure
  688.         move.l    #TOP-256,d1    ; Borne supérieure.
  689.         bsr    Clipping    ; Clippe D7
  690.         lea    RAM_Pointer(pc),a0
  691.         move.l    d7,(a0)
  692.  
  693. ;        lea    TOP-32000,a1
  694.         move.l    Ecran(pc),a1
  695.         lea    160*187+132(a1),a1
  696.         moveq    #$f,d0
  697.         and.b    $201.w,d0
  698.         move.b    d0,(a1)
  699.         move.b    d0,160(a1)
  700.         move.b    d0,320(a1)
  701.         move.b    d0,480(a1)
  702.         bra    RAM_Display
  703.  
  704.  
  705. Put_RAM_Page    move.l    RAM_Pointer(pc),a4
  706.         move.l    Ecran(pc),a1
  707.         move.l    LesOctets(pc),a2
  708.         lea    8*160*8(a1),a1
  709.         moveq    #15,d7            ; 16 lignes
  710.     .Loop1: lea    8+2(a1),a0
  711.         move.l    a4,d0
  712.         bsr    PrintLong        ; Affichage de l'adresse.
  713.         moveq    #15,d1            ; 16 colonnes.
  714.         lea    28(a1),a0
  715.         lea    68(a0),a5
  716.         move.l    #$fffe0002,d2
  717.         move.l    #$00030001,d3
  718.     .Loop2:    moveq    #0,d0
  719.         move.b    (a4)+,d0        ; Lecture de l'octet.
  720.         tst.b    $201.w
  721.         beq.s    .ok0
  722.         cmp.l    #$201,a4
  723.         bhi.s    .ok0
  724.         lea    LowRAM(pc),a3
  725.         add.l    a4,a3
  726.         move.b    -1(a3),d0
  727.     .ok0:
  728.         lsl.w    #4,d0
  729.         lea    0(a2,d0.w),a3
  730.         move.w    (a3)+,(a0)
  731. i        set    160
  732.         rept    7
  733.         move.w    (a3)+,i(a0)
  734. i        set    i+160
  735.         endr
  736.         addq.w    #4,a0
  737.         add.w    d2,a0
  738.         swap    d2
  739.  
  740.         lea    Font88(pc),a3
  741.         lsr.w    #4,d0
  742.  
  743.         cmpi.b    #' ',d0
  744.         bhs.s    .ok1
  745.         move.b    #'.',d0
  746.     .ok1:    cmpi.b    #'z',d0
  747.         bls.s    .ok2
  748.         move.b    #'.',d0
  749.     .ok2:
  750. ;        cmpi.b    #'q',d0
  751. ;        blo.s    .ok3
  752. ;        subq.w    #1,d0
  753. ;    .ok3:
  754.         subi.w    #32,d0
  755.         lsl.w    #3,d0
  756.  
  757.         add.w    d0,a3
  758.         move.b    (a3)+,(a5)
  759. i        set    160
  760.         rept    7
  761.         move.b    (a3)+,i(a5)
  762. i        set    i+160
  763.         endr
  764.         add.w    d3,a5
  765.         swap    d3
  766.  
  767.         dbf    d1,.Loop2
  768.  
  769.         lea    8*160(a1),a1
  770. ;        lea    16(a4),a4
  771.         dbf    d7,.Loop1
  772.         rts
  773.  
  774. Clipping    ; En entrée: D7 donnée à clipper.
  775.         ;            D0-D1: Bornes.
  776.         tst.l    d7
  777.         bpl.s    .ok0
  778.         moveq    #0,d7
  779.     .ok0:    cmp.l    d0,d7
  780.         bhs.s    .ok1            ; Op2>=Op1
  781.         move.l    d0,d7
  782.     .ok1:    cmp.l    d1,d7            ; Op2<=Op1
  783.         bls.s    .ok2
  784.         move.l    d1,d7
  785.     .ok2:    rts
  786.  
  787. ;*****************************************************************************
  788. ;    *********************************************************
  789. ;    *                            *
  790. ;    *    Code pour la page d'aide.            *
  791. ;    *                            *
  792. ;    *********************************************************
  793. HelpPage    lea    Clavier(pc),a5
  794.     .Waitk:    tst.b    KeyHelp(a5)
  795.         bne.s    .Waitk
  796.     .Help:    bsr    MedRes
  797.         move.w    #1,Xp(a6)
  798.         clr.w    Yp(a6)
  799.         lea    .txt1(pc),a0
  800.         bsr    Print
  801.         move.w    #1,Xp(a6)
  802.         move.w    #8,Yp(a6)
  803.         lea    .txt2(pc),a0
  804.         bsr    Print
  805.  
  806.     .Loop:    bsr    Vsync
  807.         bsr    Dispatch
  808.         lea    Clavier(pc),a5
  809.         tst.b    KeySpace(a5)
  810.         beq.s    .Loop
  811.     .Loop2:    tst.b    KeySpace(a5)
  812.         bne.s    .Loop2
  813.  
  814.         bsr    MedRes
  815.         move.w    #1,Xp(a6)
  816.         clr.w    Yp(a6)
  817.         lea    .txt3(pc),a0
  818.         bsr    Print
  819.  
  820.     .Loop3:    bsr    Vsync
  821.         bsr    Dispatch
  822.         lea    Clavier(pc),a5
  823.         tst.b    KeySpace(a5)
  824.         beq.s    .Loop3
  825.     .Loop4:    tst.b    KeySpace(a5)
  826.         bne.s    .Loop4
  827.         bra    .Help
  828.  
  829. .txt1:    dc.b    '            ****************************************************',10
  830.     dc.b    '            *                                                  *',10
  831.     dc.b    '            *              "DD" v3.1 (Demo-Debug)              *',10
  832.     dc.b    '            *             Code by Leonard / OXYGENE.           *',10
  833.     dc.b    '            *                                                  *',10
  834.     dc.b    '            ****************************************************',-1
  835.  
  836. .txt2:    dc.b    'Welcome in the "DD" v3.1. This demo-debugger contains:',10
  837.     dc.b    '  - An ASCCI "M"emory-Viewer.',10
  838.     dc.b    '  - A Graphic RAM-"L"ooker.',10
  839.     dc.b    '  - A "R"egisters displayer.',10
  840.     dc.b    '  - An MC-68000 "D"esassembler.',10,10
  841.     dc.b    'This utility was especially developped for the acheivement of this demo.',10
  842.     dc.b    'It was written with a powerfull SYSTEM (Who works with GEM when we  code',10
  843.     dc.b    'screens) wich is included in that demo. The SYSTEM  ( File  loader, Demo',10
  844.     dc.b    'installator, "DD" 3.1 and Packer) was develloped by OXYGENE.',10
  845.     dc.b    'If you are interrested by talking about it, or if you want to send  some',10
  846.     dc.b    'donations, write to:',10,10
  847.     dc.b    '                            OXYGENE,',10
  848.     dc.b    '                        22 Rue JEAN MERMOZ,',10
  849.     dc.b    '                   91700 STE-GENEVIEVE des BOIS.',10
  850.     dc.b    '                             FRANCE.                    (Space for next)'
  851.     dc.b    -1
  852.  
  853. .txt3:    dc.b    'If the "DD" is appared by a manual interrupt, the  demo  can  be  executed',10
  854.     dc.b    'again, just press ALTERNATE-X !!!',10,10
  855.     dc.b    '"DD" controls:',10
  856.     dc.b    '--------------',10,10
  857.     dc.b    '"M"emory assci viewer:',10
  858.     dc.b    '    Use arrows to scroll, SHIFT or CNTRL to make  faster. The',10
  859.     dc.b    '    "T" key toggle RAM between $0 and $200. (RAM before "DD" and "DD" RAM.',10
  860.     dc.b    '    "A" to go to "A"dress.',10
  861.     dc.b    '"L"ooker. (Graphics.)',10
  862.     dc.b    '    This mode show you Memory as Graphic-page.',10
  863.     dc.b    '    Use the cursor keys to scroll, SHIFT to make faster.  STE  owners  can',10
  864.     dc.b    '    move screen 2bytes by 2bytes. "P" to toggle palette.',10
  865.     dc.b    '"R"egisters-Display.',10
  866.     dc.b    '    You can see registers-status before ERROR or Manual-Interrupt.The "DD"',10
  867.     dc.b    '    tell you the ERROR type. (BUS, ILLEG etc...)',10
  868.     dc.b    '"D"esassembler.',10
  869.     dc.b    '    This is a true and powerfull 68000 desassembler. You  can  use  arrows',10
  870.     dc.b    '    to scroll (as always SHIFT to make it faster) and "A" to set Adress.',10,10
  871.     dc.b    '            And now press "D","L","M","R",HELP or ALTERNATE-X...'
  872.     dc.b    -1
  873.     even
  874.  
  875. ;    *********************************************************
  876. ;    *                            *
  877. ;    *    Code pour le looker de RAM.            *
  878. ;    *                            *
  879. ;    *********************************************************
  880. RAM_Looker    lea    Clavier(pc),a5
  881.     .Wait:    tst.b    KeyL(a5)
  882.         bne.s    .Wait
  883.         clr.b    $fffffa1b.w
  884.         bsr    LowRes
  885.         lea    PalType(pc),a0
  886.         clr.b    (a0)
  887.  
  888.     .Loop:    bsr    Vsync
  889.         bsr    Dispatch
  890.         move.l    AD_Video(pc),d7
  891.         move.l    d7,d0
  892.         lsr.w    #8,d0
  893.         move.l    d0,$ffff8200.w
  894.         move.b    d7,$ffff820d.w
  895.  
  896.         moveq    #0,d0
  897.         moveq    #1,d1
  898.         lea    Clavier(pc),a5
  899.         tst.b    KeyP(a5)
  900.         beq.s    .non0
  901.         lea    PalType(pc),a0
  902.         not.b    (a0)
  903.         clr.b    KeyP(a5)
  904.     .non0:    tst.b    KeyShift(a5)
  905.         beq.s    .non1
  906.         moveq    #16,d1            ; Mutiplicateur sur 16
  907.     .non1:    tst.b    KeyShift2(a5)
  908.         beq.s    .non11
  909.         moveq    #16,d1            ; Mutiplicateur sur 16
  910.     .non11:    tst.b    KeyUp(a5)
  911.         beq.s    .non2
  912.         add.w    #-160*8,d0
  913.     .non2:    tst.b    KeyDown(a5)
  914.         beq.s    .non3
  915.         add.w    #160*8,d0
  916.     .non3:    tst.b    KeyLeft(a5)
  917.         beq.s    .non4
  918.         add.w    #-2,d0
  919.     .non4:    tst.b    KeyRight(a5)
  920.         beq.s    .non5
  921.         add.w    #2,d0
  922.     .non5:
  923.         muls.w    d1,d0            ; DΘplacement * Multi.
  924.         add.l    d0,d7            ; Nouvelle position.
  925.     ; Clippe D7.
  926.         moveq    #0,d0
  927.         move.l    #TrueTOP-32000,d1
  928.         bsr    Clipping
  929.         lea    AD_Video(pc),a0
  930.         move.l    d7,(a0)
  931.  
  932.         lea    OldPal(pc),a2
  933.         lea    PalType(pc),a0
  934.         tst.b    (a0)
  935.         beq.s    .old
  936.         lea    PalSys(pc),a2
  937.     .old:    movea.w    #$8240,a1
  938.         moveq    #7,d0
  939.     .loopp:    move.l    (a2)+,(a1)+
  940.         dbf    d0,.loopp
  941.         bra    .Loop
  942.  
  943.  
  944. PrintAdresse    ; En entrée: A0 pointe sur écran
  945.         ;          D0 est l'adresse à afficher.
  946.  
  947.  
  948. PrintLong    ; En entrée: A0: Pointe sur l'écran.
  949.         ;           D0: Adresse à afficher.
  950.         movem.l    d1-d3/a1,-(sp)
  951.         moveq    #7,d1
  952.         move.l    #$00030001,d3
  953.     .Loop1:    moveq    #$f,d2
  954.         rol.l    #4,d0
  955.         and.w    d0,d2
  956.         move.b    .table(pc,d2.w),d2
  957.         subi.b    #32,d2
  958.         lea    Font88(pc),a1
  959.         lsl.w    #3,d2
  960.         add.w    d2,a1
  961.         move.b    (a1)+,(a0)
  962. i        set    160
  963.         rept    7
  964.         move.b    (a1)+,i(a0)
  965. i        set    i+160
  966.         endr
  967.         add.w    d3,a0
  968.         swap    d3
  969.         dbf    d1,.Loop1
  970.         movem.l    (sp)+,d1-d3/a1
  971.         rts
  972.  
  973.     .table:    dc.b    '0123456789ABCDEF'
  974.         even
  975. .provis        dc.b    '$'
  976. .provis2    dc.b    '00000000',-1,-1
  977.         even
  978.  
  979.  
  980. ;    *********************************************************
  981. ;    *    Affichage de l'ecran Debugger.            *
  982. ;    *    Initialisation de l'écran.            *
  983. ;    *                            *
  984. ;    *********************************************************
  985. InitDES_Display    lea    Clavier(pc),a5
  986.     .Waitk:    tst.b    KeyD(a5)
  987.         bne.s    .Waitk
  988.         bsr    MedRes
  989.         moveq    #0,d0
  990.         moveq    #39,d2
  991.         moveq    #4,d1
  992.         moveq    #20,d3
  993.         bsr    Cadre
  994.         moveq    #0,d0
  995.         moveq    #39,d2
  996.         moveq    #23,d1
  997.         move.w    #199,d3
  998.         bsr    Cadre
  999.         move.w    #8,Xp(a6)
  1000.         move.w    #1,Yp(a6)
  1001.         lea    .txt1(pc),a0
  1002.         bsr    Print
  1003.         bsr    Initialisations
  1004.         lea    RAM_Pointer(pc),a0
  1005.         move.l    (a0),d0
  1006.         bclr.l    #0,d0
  1007.         move.l    d0,(a0)
  1008.         lea    TailleInstruction(pc),a0    ; Implicitement
  1009.         move.w    #2,(a0)                ; on descend de 2
  1010.         rts                    ; octets.
  1011. .txt1:    dc.b    'MC68000 "D"esassembleur v1.0 by Leonard / OXYGENE.',-1
  1012.     even
  1013.  
  1014.  
  1015. ;************************************************************************
  1016. ;************************************************************************
  1017. ;************************************************************************
  1018. ;******                                  ******
  1019. ;******                                  ******
  1020. ;******                                  ******
  1021. ;******                                  ******
  1022. ;******                                  ******
  1023. ;******                                  ******
  1024. ;************************************************************************
  1025. ;************************************************************************
  1026. ;************************************************************************
  1027.  
  1028.  
  1029. DES_Routine
  1030.         bsr    DisasemblePage
  1031.     .LoopM:    moveq    #0,d3
  1032.         bsr    Dispatch
  1033.         move.l    RAM_Pointer(pc),d7    ; Position en RAM
  1034.         moveq    #0,d0            ; Déplacement
  1035.         moveq    #1,d1            ; Multiplicateur.
  1036.         lea    Clavier(pc),a5
  1037.         tst.b    KeyA(a5)
  1038.         beq.s    .non0
  1039.         bsr    GetNumber
  1040.         lea    RAM_Pointer(pc),a0
  1041.         andi.l    #-2,(a0)
  1042.         bra.s    DES_Routine
  1043.     .non0:    tst.b    KeyShift(a5)
  1044.         beq.s    .non1
  1045.         add.w    #16,d1            ; Mutiplicateur sur 16
  1046.     .non1:    tst.b    KeyShift2(a5)
  1047.         beq.s    .non11
  1048.         add.w    #16,d1            ; Mutiplicateur sur 16
  1049.     .non11:    tst.b    KeyUp(a5)
  1050.         beq.s    .non2
  1051.         subq.w    #4,d0
  1052.         moveq    #-1,d3
  1053.     .non2:    tst.b    KeyDown(a5)
  1054.         beq.s    .non3
  1055.         add.w    TailleInstruction(pc),d0
  1056.         moveq    #-1,d3
  1057.     .non3:    tst.b    KeyRight(a5)
  1058.         beq.s    .non4
  1059.         addq.w    #2,d0
  1060.         moveq    #-1,d3
  1061.     .non4:    tst.b    KeyLeft(a5)
  1062.         beq.s    .non5
  1063.         subq.w    #2,d0
  1064.         moveq    #-1,d3
  1065.     .non5:    tst.b    KeyCTRL(a5)
  1066.         beq.s    .non6
  1067.         add.w    #512,d1
  1068.     .non6:    muls.w    d1,d0            ; Déplacement * Multi.
  1069.         add.l    d0,d7            ; Nouvelle position.
  1070.         moveq    #0,d0            ; Borne inférieure
  1071.         move.l    #TOP-2,d1        ; Borne supérieure.
  1072.         bsr    Clipping        ; Clippe D7
  1073.         lea    RAM_Pointer(pc),a0
  1074.         move.l    d7,(a0)
  1075.         tst.l    d3
  1076.         beq    .LoopM
  1077.         bra    DES_Routine
  1078.  
  1079. DisasemblePage
  1080.         move.w    #20,-(sp)        ; Nb de lignes
  1081.         move.w    #4,Yp(a6)
  1082.         move.l    RAM_Pointer(pc),a0    ; Pointeur sur le code.
  1083.         lea    String(pc),a5        ; Pointeur en sortie.
  1084.         clr.w    Flag1(a6)
  1085.     .Loop:    move.l    a0,d7
  1086.         bsr    Sort32First
  1087.         bsr    Tab
  1088.         move.w    (a0)+,d0        ; Premier mot.
  1089.         move.w    #2,MaTaille(a6)
  1090.         bsr    DesassembleLine
  1091.         move.b    #10,(a5)+
  1092.         tst.w    Flag1(a6)
  1093.         bne.s    .non
  1094.         move.l    RAM_Pointer(pc),d0
  1095.         sub.l    a0,d0
  1096.         neg.l    d0
  1097.         lea    TailleInstruction(pc),a1
  1098.         move.w    d0,(a1)
  1099.         move.w    #-1,Flag1(a6)
  1100.     .non:    subq.w    #1,(sp)
  1101.         bne.s    .Loop
  1102.         addq.w    #2,sp
  1103.         move.b    #-1,(a5)
  1104.         move.l    Ecran(pc),a1
  1105.         move.w    #(20*8)-1,d1
  1106.         lea    4*8*160(a1),a1
  1107.         moveq    #0,d0
  1108.     .Loop0:
  1109. i        set    8*4
  1110.         rept    24
  1111.         move.w    d0,i(a1)
  1112. i        set    i+4
  1113.         endr
  1114.         lea    160(a1),a1
  1115.         dbf    d1,.Loop0
  1116.         move.w    #1,Xp(a6)
  1117.         move.w    #4,Yp(a6)
  1118.         lea    String(pc),a0
  1119.         bra    Print
  1120.  
  1121. NbLigne        dc.w    0
  1122. String        dcb.b    40*20,' '
  1123.         even
  1124.  
  1125. DesassembleLine
  1126.     ; Première étape: Dispatch selon le code opératoire.
  1127.     ; (Livre SYBEX page 119)
  1128.         move.w    d0,d1
  1129.         andi.w    #%1111000000000000,d1
  1130.         rol.w    #6,d1
  1131.         jmp    .Bras(pc,d1.w)
  1132.     .Bras:    bra    ManipulationDeBit    0000    *
  1133.         bra    LesMOVEs        0001    *
  1134.         bra    LesMOVEs        0010    *
  1135.         bra    LesMOVEs        0011    *
  1136.         bra    AutresInstructions    0100    *
  1137.         bra    Quick_Scc_DBcc        0101    *
  1138.         bra    Bcc_BSR            0110    *
  1139.         bra    InstMoveq        0111    *
  1140.         bra    OR_DIV_SBCD        1000    *
  1141.         bra    SUB_SUBX        1001    *
  1142.         bra    NotUsed            1010    *
  1143.         bra    CMP_EOR            1011    *
  1144.         bra    AND_MUL_ABCD_EXG    1100    *
  1145.         bra    ADD_ADDX        1101    *
  1146.         bra    Rotations        1110    *
  1147.         bra    NotUsed            1111    *
  1148.  
  1149. NotUsed
  1150. NotFound    lea    .TestDC(pc),a3
  1151.         bsr    SortSansEspace
  1152.         bsr    Tab
  1153.         move.w    d0,d7
  1154.         bra    Sort16
  1155.  
  1156. .TestDC        dc.b    'DC.W '
  1157.         even
  1158.  
  1159.  
  1160. ;**********************************************************************
  1161. ;
  1162. ;    ******  ******  ******  ******
  1163. ;    **  **  **  **  **  **  **  **
  1164. ;    **  **  **  **  **  **  **  **
  1165. ;    **  **  **  **  **  **  **  **
  1166. ;    ******  ******  ******  ******
  1167.  
  1168. ManipulationDeBit
  1169.         lea    .Table(pc),a1
  1170.         bra    Menu
  1171.     .Table:
  1172.         dc.w    %1111111111111111,%0000001000111100
  1173.         dc.w    InstANDI_To_CCR-s
  1174.         dc.b    'ANDI    '
  1175.         dc.w    %1111111111111111,%0000001001111100
  1176.         dc.w    InstANDI_To_SR-s
  1177.         dc.b    'ANDI    '
  1178.         dc.w    %1111000100111000,%0000000100001000
  1179.         dc.w    InstMOVEP-s
  1180.         dc.b    'MOVEP   '
  1181.         dc.w    %1111111100000000,%0000011000000000
  1182.         dc.w    InstADDI-s
  1183.         dc.b    'ADDI    '
  1184.         dc.w    %1111111100000000,%0000001000000000
  1185.         dc.w    InstANDI-s
  1186.         dc.b    'ANDI    '
  1187.         dc.w    %1111111111000000,%0000100001000000
  1188.         dc.w    InstBCHG_AE-s
  1189.         dc.b    'BCHG    '
  1190.         dc.w    %1111000111000000,%0000000101000000
  1191.         dc.w    InstBCHG_Dn-s
  1192.         dc.b    'BCHG    '
  1193.         dc.w    %1111111111000000,%0000100010000000
  1194.         dc.w    InstBCLR_AE-s
  1195.         dc.b    'BCLR    '
  1196.         dc.w    %1111000111000000,%0000000110000000
  1197.         dc.w    InstBCLR_Dn-s
  1198.         dc.b    'BCLR    '
  1199.         dc.w    %1111111111000000,%0000100011000000
  1200.         dc.w    InstBSET_AE-s
  1201.         dc.b    'BSET    '
  1202.         dc.w    %1111000111000000,%0000000111000000
  1203.         dc.w    InstBSET_Dn-s
  1204.         dc.b    'BSET    '
  1205.         dc.w    %1111111111000000,%0000100000000000
  1206.         dc.w    InstBTST_AE-s
  1207.         dc.b    'BTST    '
  1208.         dc.w    %1111000111000000,%0000000100000000
  1209.         dc.w    InstBTST_Dn-s
  1210.         dc.b    'BTST    '
  1211.         dc.w    %1111111100000000,%0000110000000000
  1212.         dc.w    InstCMPI-s
  1213.         dc.b    'CMPI    '
  1214.         dc.w    %1111111100000000,%0000101000000000
  1215.         dc.w    InstEORI-s
  1216.         dc.b    'EORI    '
  1217.         dc.w    %1111111100000000,%0000000000000000
  1218.         dc.w    InstORI-s
  1219.         dc.b    'ORI     '
  1220.         dc.w    %1111111100000000,%0000010000000000
  1221.         dc.w    InstSUBI-s
  1222.         dc.b    'SUBI    '
  1223.     ;EORI_To_CCR
  1224.     ;EORI_To_SR
  1225.     ;ORI_To_CCR
  1226.     ;ORI_To_SR
  1227.         dc.b    'LEO!'
  1228.         even
  1229.  
  1230.  
  1231.  
  1232. Menu
  1233.     .Loop:    move.w    d0,d1
  1234.         and.w    (a1)+,d1
  1235.         cmp.w    (a1)+,d1
  1236.         beq.s    .Find
  1237.         lea    14-4(a1),a1
  1238.         cmpi.l    #'LEO!',(a1)
  1239.         bne.s    .Loop
  1240.         bra    NotFound
  1241.     .Find:    move.w    (a1)+,d1
  1242.         jmp    0(a6,d1.w)
  1243.  
  1244.  
  1245. InstORI
  1246. InstSUBI
  1247. InstEORI
  1248. InstCMPI
  1249. InstANDI
  1250. InstADDI    movea.l    a1,a3
  1251.         bsr    SortSansEspace
  1252.         moveq    #6,d6
  1253.         bsr    TailleCLR
  1254.         cmpi.w    #1,MaTaille(a6)
  1255.         beq.s    .PointB
  1256.         cmpi.w    #2,MaTaille(a6)
  1257.         beq.s    .PointW
  1258.         move.l    (a0)+,d7
  1259.         bsr    Sort32Imm
  1260.         bra.s    .Suite
  1261. .PointB        move.w    (a0)+,d7
  1262.         bsr    Sort8Imm
  1263.         bra.s    .Suite
  1264. .PointW        move.w    (a0)+,d7
  1265.         bsr    Sort16Imm
  1266.     .Suite:    move.b    #',',(a5)+
  1267.         moveq    #0,d6
  1268.         move.w    #%101111111000,d5
  1269.         bra    ModeAdressage
  1270.  
  1271. InstBCLR_AE
  1272. InstBSET_AE
  1273. InstBTST_AE
  1274. InstBCHG_AE    movea.l    a1,a3
  1275.         bsr    SortSansEspace
  1276.         bsr    Tab
  1277.         move.w    #1,MaTaille(a6)
  1278.         move.w    (a0)+,d7
  1279.         bsr    Sort8Imm
  1280.         move.b    #',',(a5)+
  1281.         moveq    #0,d6
  1282.         move.w    #%101111111000,d5
  1283.         bra    ModeAdressage
  1284.  
  1285. InstBCLR_Dn
  1286. InstBSET_Dn
  1287. InstBTST_Dn
  1288. InstBCHG_Dn    movea.l    a1,a3
  1289.         bsr    SortSansEspace
  1290.         bsr    Tab
  1291.         move.w    #4,MaTaille(a6)
  1292.         moveq    #9,d6
  1293.         bsr    ModeDN
  1294.         move.b    #',',(a5)+
  1295.         moveq    #0,d6
  1296.         move.w    #%101111111000,d5
  1297.         bra    ModeAdressage
  1298.  
  1299. InstMOVEP    movea.l    a1,a3
  1300.         bsr    SortSansEspace
  1301.         moveq    #6,d6
  1302.         bsr    TailleEXT
  1303.         btst    #7,d0
  1304.         beq    .M_To_R
  1305.         moveq    #9,d6
  1306.         bsr    ModeDN
  1307.         move.b    #',',(a5)+
  1308.         move.w    (a0)+,d7
  1309.         bsr    Sort16
  1310.         moveq    #0,d6
  1311.         bra    Mode_AN
  1312. .M_To_R:    move.w    (a0)+,d7
  1313.         bsr    Sort16
  1314.         moveq    #0,d6
  1315.         bsr    Mode_AN
  1316.         move.b    #',',(a5)+
  1317.         moveq    #9,d6
  1318.         bra    ModeDN
  1319.  
  1320.  
  1321.  
  1322. InstANDI_To_CCR
  1323. InstANDI_To_SR
  1324.  
  1325.         bra    NotFound
  1326.  
  1327. ;***************************************************************
  1328.  
  1329. LesMOVEs    move.w    d0,d1
  1330.         lsr.w    #6,d1
  1331.         andi.w    #%111,d1
  1332.         cmpi.w    #%1,d1
  1333.         beq    InstMOVEA
  1334.         lea    .TextMove(pc),a3
  1335.         bsr    SortSansEspace
  1336.         moveq    #12,d6
  1337.         bsr    TailleMOVE
  1338.         moveq    #0,d6
  1339.         move.w    #%111111111111,d5
  1340.         bsr    ModeAdressage
  1341.         move.b    #',',(a5)+
  1342.         moveq    #6,d6
  1343.         move.w    #%101111111000,d5
  1344.         bra    RModeAdressage
  1345. .TextMove    dc.b    'MOVE '
  1346.         even
  1347.  
  1348. InstMOVEA    lea    .TextMOVEA(pc),a3
  1349.         bsr    SortSansEspace
  1350.         moveq    #12,d6
  1351.         bsr    TailleMOVE
  1352.         moveq    #0,d6
  1353.         move.w    #%111111111111,d5
  1354.         bsr    ModeAdressage
  1355.         move.b    #',',(a5)+
  1356.         moveq    #9,d6
  1357.         bra    ModeAN
  1358. .TextMOVEA    dc.b    'MOVEA '
  1359.         even
  1360.  
  1361. ;*****************************************************************
  1362. ;                                *
  1363. ;    ******    **  ******  ******                *
  1364. ;    **  **  ****  **  **  **  **                *
  1365. ;    **  **    **  **  **  **  **                *
  1366. ;    **  **    **  **  **  **  **                *
  1367. ;    ******    **  ******  ******                *
  1368.  
  1369. AutresInstructions
  1370.         lea    .Table(pc),a1
  1371.         bra    Menu
  1372.     .Table:    dc.w    %1111111111111111,$4E71
  1373.         dc.w    InstDirect-s
  1374.         dc.b    'NOP     '
  1375.         dc.w    %1111111111111111,$4AFC
  1376.         dc.w    InstDirect-s
  1377.         dc.b    'ILLEGAL '
  1378.         dc.w    %1111111111111111,%0100111001110000
  1379.         dc.w    InstDirect-s
  1380.         dc.b    'RESET   '
  1381.         dc.w    %1111111111111111,$4E73
  1382.         dc.w    InstDirect-s
  1383.         dc.b    'RTE     '
  1384.         dc.w    %1111111111111111,%0100111001110111
  1385.         dc.w    InstDirect-s
  1386.         dc.b    'RTR     '
  1387.         dc.w    %1111111111111111,$4E75
  1388.         dc.w    InstDirect-s
  1389.         dc.b    'RTS     '
  1390.         dc.w    %1111111111111111,%0100111001110010
  1391.         dc.w    InstSTOP-s
  1392.         dc.b    'STOP    '
  1393.         dc.w    %1111111111111111,%0100111001110110
  1394.         dc.w    InstDirect-s
  1395.         dc.b    'TRAPV   '
  1396.         dc.w    %1111111111111000,%0100111001010000
  1397.         dc.w    InstLINK-s
  1398.         dc.b    'LINK    '
  1399.         dc.w    %1111111111111000,%0100111001011000
  1400.         dc.w    InstUNLK-s
  1401.         dc.b    'UNLK    '
  1402.         dc.w    %1111111111111000,%0100100001000000
  1403.         dc.w    InstSWAP-s
  1404.         dc.b    'SWAP    '
  1405.         dc.w    %1111111111110000,%0100111001100000
  1406.         dc.w    InstMOVE_USP-s
  1407.         dc.b    'MOVE.L  '
  1408.         dc.w    %1111111111110000,%0100111001000000
  1409.         dc.w    InstTRAP-s
  1410.         dc.b    'TRAP    '
  1411.         dc.w    %1111111110111000,%0100100010000000
  1412.         dc.w    InstEXT-s
  1413.         dc.b    'EXT     '
  1414.         dc.w    %1111111111000000,%0100000011000000
  1415.         dc.w    InstMOVE_From_SR-s
  1416.         dc.b    'MOVE.W  '
  1417.         dc.w    %1111111111000000,%0100011011000000
  1418.         dc.w    InstMOVE_To_SR-s
  1419.         dc.b    'MOVE.W  '
  1420.         dc.w    %1111111111000000,%0100010011000000
  1421.         dc.w    InstMOVE_To_CCR-s
  1422.         dc.b    'MOVE.W  '
  1423.         dc.w    %1111111111000000,%0100111010000000
  1424.         dc.w    InstJSR-s
  1425.         dc.b    'JSR     '
  1426.         dc.w    %1111000111000000,%0100000110000000
  1427.         dc.w    InstCHK-s
  1428.         dc.b    'CHK.W   '
  1429.         dc.w    %1111111111000000,%0100111011000000
  1430.         dc.w    InstJUMP-s
  1431.         dc.b    'JMP     '
  1432.         dc.w    %1111111111000000,%0100100000000000
  1433.         dc.w    InstNBCD-s
  1434.         dc.b    'NBCD.B  '
  1435.         dc.w    %1111111111000000,%0100100001000000
  1436.         dc.w    InstPEA-s
  1437.         dc.b    'PEA     '
  1438.         dc.w    %1111111111000000,%0100101011000000
  1439.         dc.w    InstTAS-s
  1440.         dc.b    'TAS.B   '
  1441.         dc.w    %1111000111000000,%0100000111000000
  1442.         dc.w    InstLEA-s
  1443.         dc.b    'LEA     '
  1444.         dc.w    %1111111100000000,%0100001000000000
  1445.         dc.w    InstCLR-s
  1446.         dc.b    'CLR     '
  1447.         dc.w    %1111111100000000,%0100010000000000
  1448.         dc.w    InstNEG-s
  1449.         dc.b    'NEG     '
  1450.         dc.w    %1111111100000000,%0100000000000000
  1451.         dc.w    InstNEGX-s
  1452.         dc.b    'NEGX    '
  1453.         dc.w    %1111111100000000,%0100011000000000
  1454.         dc.w    InstNOT-s
  1455.         dc.b    'NOT     '
  1456.         dc.w    %1111111100000000,%0100101000000000
  1457.         dc.w    InstTST-s
  1458.         dc.b    'TST     '
  1459.     ; MOVEMs
  1460.         dc.w    %1111101110000000,%0100100010000000
  1461.         dc.w    InstMOVEM-s
  1462.         dc.b    'MOVEM   '
  1463.         dc.b    'LEO!'
  1464.  
  1465. InstMOVEM    move.l    a1,a3
  1466.         bsr    SortSansEspace
  1467.         moveq    #6,d6
  1468.         bsr    TailleEXT
  1469.         move.w    (a0)+,MasqueMOVEM(a6)
  1470.         btst.l    #10,d0
  1471.         beq    MOVEM_Reg_Mem
  1472.  
  1473. MOVEM_Mem_Reg    moveq    #0,d6
  1474.         move.w    #%001101111110,d5
  1475.         bsr    ModeAdressage
  1476.         move.b    #',',(a5)+
  1477.         move.w    MasqueMOVEM(a6),d7
  1478.         bra    ListeRegistre
  1479.  
  1480. MOVEM_Reg_Mem    move.w    MasqueMOVEM(a6),d7
  1481.         move.w    d0,d1
  1482.         lsr.w    #3,d1
  1483.         andi.w    #%111,d1    ; Mode
  1484.         cmpi.w    #%100,d1    ; Mode -(An) ??
  1485.         bne.s    .ok
  1486.         bsr    ReverseD7
  1487.     .ok:    bsr    ListeRegistre
  1488.         move.b    #',',(a5)+
  1489.         moveq    #0,d6
  1490.         move.w    #%001011111000,d5
  1491.         bra    ModeAdressage
  1492.  
  1493. ReverseD7    move.w    d7,d6
  1494.         moveq    #0,d7
  1495.         moveq    #15,d1
  1496.     .Loop1:    lsr.w    #1,d6
  1497.         addx.w    d7,d7
  1498.         dbf    d1,.Loop1
  1499.         rts
  1500.  
  1501. ListeRegistre    lea    .Registres(pc),a2
  1502.         moveq    #0,d1        ; Position
  1503.         moveq    #0,d2        ; Nb regs.
  1504.         moveq    #17-1,d3    ; Nb loop
  1505.     .Loop:    lsr.w    #1,d7
  1506.         bcc.s    .NoReg
  1507.         tst.w    d2
  1508.         bne.s    .yes
  1509.         move.w    d1,d4
  1510.     .yes:    addq.w    #1,d2        ; Un reg de plus
  1511.         bra.s    .Dbf
  1512.     .NoReg:    tst.w    d2        ; Pas de registres ??
  1513.         beq.s    .Dbf
  1514.         move.b    0(a2,d4.w),(a5)+
  1515.         move.b    1(a2,d4.w),(a5)+
  1516.         cmpi.w    #1,d2
  1517.         bne.s    .Plus
  1518.         move.b    #'/',(a5)+
  1519.         bra.s    .ret
  1520.     .Plus:    move.b    #'-',(a5)+
  1521.         subq.w    #1,d2
  1522.         add.w    d2,d2
  1523.         add.w    d4,d2
  1524.         move.b    0(a2,d2.w),(a5)+
  1525.         move.b    1(a2,d2.w),(a5)+
  1526.         move.b    #'/',(a5)+
  1527.     .ret:    moveq    #0,d2
  1528.     .Dbf:    addq.w    #2,d1        ; Position + 2
  1529.         dbf    d3,.Loop
  1530.         subq.l    #1,a5
  1531.         rts
  1532.  
  1533. .Registres    dc.b    'D0D1D2D3D4D5D6D7A0A1A2A3A4A5A6A7'
  1534.         even
  1535.  
  1536. InstDirect    move.l    a1,a3
  1537.         bra    SortSansEspace
  1538.  
  1539. InstMOVE_USP    move.l    a1,a3
  1540.         bsr    SortSansEspace
  1541.         bsr    Tab
  1542.         btst    #3,d0
  1543.         beq.s    .A_USP
  1544.         move.b    #'U',(a5)+
  1545.         move.b    #'S',(a5)+
  1546.         move.b    #'P',(a5)+
  1547.         move.b    #',',(a5)+
  1548.         moveq    #0,d6
  1549.         bra    ModeAN
  1550.     .A_USP:    moveq    #0,d6
  1551.         bsr    ModeAN
  1552.         move.b    #',',(a5)+
  1553.         move.b    #'U',(a5)+
  1554.         move.b    #'S',(a5)+
  1555.         move.b    #'P',(a5)+
  1556.         rts
  1557.  
  1558. InstMOVE_From_SR
  1559.         move.w    #2,MaTaille(a6)
  1560.         movea.l    a1,a3
  1561.         bsr    SortSansEspace
  1562.         bsr    Tab
  1563.         move.b    #'S',(a5)+
  1564.         move.b    #'R',(a5)+
  1565.         move.b    #',',(a5)+
  1566.         moveq    #0,d6
  1567.         move.w    #%101111111000,d5
  1568.         bra    ModeAdressage
  1569.  
  1570. InstMOVE_To_SR    move.w    #2,MaTaille(a6)
  1571.         movea.l    a1,a3
  1572.         bsr    SortSansEspace
  1573.         bsr    Tab
  1574.         moveq    #0,d6
  1575.         move.w    #%101111111111,d5
  1576.         bsr    ModeAdressage
  1577.         move.b    #',',(a5)+
  1578.         move.b    #'S',(a5)+
  1579.         move.b    #'R',(a5)+
  1580.         rts
  1581.  
  1582. InstMOVE_To_CCR    move.w    #2,MaTaille(a6)
  1583.         movea.l    a1,a3
  1584.         bsr    SortSansEspace
  1585.         bsr    Tab
  1586.         moveq    #0,d6
  1587.         move.w    #%101111111111,d5
  1588.         bsr    ModeAdressage
  1589.         move.b    #',',(a5)+
  1590.         move.b    #'C',(a5)+
  1591.         move.b    #'C',(a5)+
  1592.         move.b    #'R',(a5)+
  1593.         rts
  1594.  
  1595.  
  1596. InstCHK        move.w    #2,MaTaille(a6)
  1597.         movea.l    a1,a3
  1598.         bsr    SortSansEspace
  1599.         bsr    Tab
  1600.         moveq    #0,d6
  1601.         move.w    #%001001111110,d5
  1602.         bsr    ModeAdressage
  1603.         move.b    #',',(a5)+
  1604.         moveq    #9,d6
  1605.         bra    ModeAN
  1606.  
  1607. InstCLR        movea.l    a1,a3
  1608.         bsr    SortSansEspace
  1609.         moveq    #6,d6
  1610.         bsr    TailleCLR
  1611.         moveq    #0,d6
  1612.         move.w    #%101111111000,d5
  1613.         bra    ModeAdressage
  1614.  
  1615.  
  1616. InstEXT        movea.l    a1,a3
  1617.         bsr    SortSansEspace
  1618.         moveq    #6,d6
  1619.         bsr    TailleEXT
  1620.         moveq    #0,d6
  1621.         bra    ModeDN
  1622.  
  1623. InstJSR
  1624. InstPEA
  1625. InstJUMP
  1626.         movea.l    a1,a3
  1627.         bsr    SortSansEspace
  1628.         bsr    Tab
  1629.         move.w    #4,MaTaille(a6)
  1630.         moveq    #0,d6
  1631.         move.w    #%001001111110,d5
  1632.         bra    ModeAdressage
  1633.  
  1634.  
  1635. InstNBCD    movea.l    a1,a3
  1636.         bsr    SortSansEspace
  1637.         move.w    #1,MaTaille(a6)
  1638.         moveq    #0,d6
  1639.         move.w    #%101111111000,d5
  1640.         bra    ModeAdressage
  1641.  
  1642. InstNEGX
  1643. InstNOT
  1644. InstTST
  1645. InstNEG
  1646.         movea.l    a1,a3
  1647.         bsr    SortSansEspace
  1648.         moveq    #6,d6
  1649.         bsr    TailleCLR
  1650.         moveq    #0,d6
  1651.         move.w    #%101111111000,d5
  1652.         bra    ModeAdressage
  1653.  
  1654.  
  1655. InstLEA        move.w    #4,MaTaille(a6)
  1656.         movea.l    a1,a3
  1657.         bsr    SortSansEspace
  1658.         bsr    Tab
  1659.         moveq    #0,d6
  1660.         move.w    #%001001111110,d5
  1661.         bsr    ModeAdressage
  1662.         move.b    #',',(a5)+
  1663.         moveq    #9,d6
  1664.         bra    ModeAN
  1665.  
  1666. InstLINK    move.l    a1,a3
  1667.         bsr    SortSansEspace
  1668.         bsr    Tab
  1669.         moveq    #0,d6
  1670.         bsr    ModeAN
  1671.         move.b    #',',(a5)+
  1672.         move.w    (a0)+,d7
  1673.         bra    Sort16Imm
  1674.  
  1675. InstUNLK    move.l    a1,a3
  1676.         bsr    SortSansEspace
  1677.         bsr    Tab
  1678.         moveq    #0,d6
  1679.         bra    ModeAN
  1680.  
  1681. InstSTOP    move.l    a1,a3
  1682.         bsr    SortSansEspace
  1683.         bsr    Tab
  1684.         move.w    (a0)+,d7
  1685.         bra    Sort16Imm
  1686.  
  1687.  
  1688. InstSWAP    move.l    a1,a3
  1689.         bsr    SortSansEspace
  1690.         bsr    Tab
  1691.         moveq    #0,d6            ; Bit 0 pour le registre.
  1692.         bra    ModeDN
  1693.  
  1694. InstTAS        move.l    a1,a3
  1695.         bsr    SortSansEspace
  1696.         bsr    Tab
  1697.         move.w    #1,MaTaille(a6)
  1698.         moveq    #0,d6
  1699.         move.w    #%101111111000,d5
  1700.         bra    ModeAdressage
  1701.  
  1702. InstTRAP    move.l    a1,a3
  1703.         bsr    SortSansEspace
  1704.         bsr    Tab
  1705.         moveq    #%1111,d7
  1706.         and.w    d0,d7
  1707.         bra    Sort8Imm
  1708.  
  1709. ;*****************************************************************
  1710. ;
  1711. ;    ******    **      **    ******
  1712. ;    **  **  ****    ****    **  **
  1713. ;    **  **    **      **    **  **
  1714. ;    **  **    **      **    **  **
  1715. ;    ******  ******  ******  ******
  1716.  
  1717. Bcc_BSR        lea    .Table(pc),a1
  1718.         bra    Menu
  1719.  
  1720.     .Table:
  1721.         dc.w    %1111111100000000,%0110000000000000
  1722.         dc.w    InstBRA-s
  1723.         dc.b    'BRA     '
  1724.         dc.w    %1111111100000000,%0110000100000000
  1725.         dc.w    InstBSR-s
  1726.         dc.b    'BSR     '
  1727.         dc.w    %1111000000000000,%0110000000000000
  1728.         dc.w    InstBCC-s
  1729.         dc.b    'BCC     '
  1730.         dc.b    'LEO!'
  1731.  
  1732. InstBSR
  1733. InstBRA        movea.l    a1,a3
  1734.         bsr    SortSansEspace
  1735.         tst.b    d0
  1736.         beq.s    .Long
  1737.         move.b    #'.',(a5)+
  1738.         move.b    #'S',(a5)+
  1739.         bsr    Tab
  1740.         move.b    d0,d7
  1741.         ext.w    d7
  1742.         ext.l    d7
  1743.         add.l    a0,d7
  1744.         bra    Sort32
  1745.     .Long:    bsr    Tab
  1746.         move.w    (a0)+,d7
  1747.         ext.l    d7
  1748.         add.l    a0,d7
  1749.         subq.l    #2,d7
  1750.         bra    Sort32
  1751.  
  1752. InstBCC        move.b    #'B',(a5)+
  1753.         tst.b    d0
  1754.         beq.s    .Long
  1755.     .Short:    move.b    d0,d7
  1756.         ext.w    d7
  1757.         ext.l    d7
  1758.         add.l    a0,d7
  1759.         bra.s    .Ok
  1760.     .Long:    move.w    (a0)+,d7
  1761.         ext.l    d7
  1762.         add.l    a0,d7
  1763.         subq.l    #2,d7
  1764.     .Ok:    moveq    #8,d6
  1765.         bsr.s    Condition
  1766.         tst.b    d0
  1767.         beq.s    .non
  1768.         move.b    #'.',(a5)+
  1769.         move.b    #'S',(a5)+
  1770.     .non:    bsr    Tab
  1771.         bra    Sort32
  1772.  
  1773. Condition    move.w    d0,d1
  1774.         lsr.w    d6,d1
  1775.         andi.w    #%1111,d1
  1776.         add.w    d1,d1
  1777.         lea    .Table(pc,d1.w),a1
  1778.         move.b    (a1)+,(a5)+
  1779.         cmpi.b    #' ',(a1)
  1780.         beq.s    .ok
  1781.         move.b    (a1)+,(a5)+
  1782.     .ok:    rts
  1783. .Table        dc.b    'T ','F ','HI','LS'
  1784.         dc.b    'CC','CS','NE','EQ'
  1785.         dc.b    'VC','VS','PL','MI'
  1786.         dc.b    'GE','LT','GT','LE'
  1787.         even
  1788.  
  1789.  
  1790. ;*****************************************************************
  1791. ;
  1792. ;    ******    **    ******    **
  1793. ;    **  **  ****    **  **  ****
  1794. ;    **  **    **    **  **    **
  1795. ;    **  **    **    **  **    **
  1796. ;    ******  ******  ******  ******
  1797.  
  1798. Quick_Scc_DBcc    lea    .Table(pc),a1
  1799.         bra    Menu
  1800.  
  1801.     .Table:    dc.w    %1111000011111000,%0101000011001000
  1802.         dc.w    InstDBcc-s
  1803.         dc.b    'Leonard!'
  1804.         dc.w    %1111000011000000,%0101000011000000
  1805.         dc.w    InstScc-s
  1806.         dc.b    'Leonard!'
  1807.         dc.w    %1111000100000000,%0101000000000000
  1808.         dc.w    InstADDQ-s
  1809.         dc.b    'ADDQ    '
  1810.         dc.w    %1111000100000000,%0101000100000000
  1811.         dc.w    InstSUBQ-s
  1812.         dc.b    'SUBQ    '
  1813.         dc.b    'LEO!'
  1814.  
  1815. InstDBcc    move.b    #'D',(a5)+
  1816.         move.b    #'B',(a5)+
  1817.         moveq    #8,d6
  1818.         bsr    Condition
  1819.         bsr    Tab
  1820.         moveq    #0,d6
  1821.         bsr    ModeDN
  1822.         move.b    #',',(a5)+
  1823.         move.w    (a0)+,d7
  1824.         ext.l    d7
  1825.         add.l    a0,d7
  1826.         subq.l    #2,d7
  1827.         bra    Sort32
  1828.  
  1829. InstScc        move.b    #'S',(a5)+
  1830.         moveq    #8,d6
  1831.         bsr    Condition
  1832.         bsr    Tab
  1833.         moveq    #0,d6
  1834.         move.w    #%101111111000,d5
  1835.         bra    ModeAdressage
  1836.  
  1837. InstADDQ
  1838. InstSUBQ    movea.l    a1,a3
  1839.         bsr    SortSansEspace
  1840.         moveq    #6,d6
  1841.         bsr    TailleCLR
  1842.         move.w    d0,d7
  1843.         lsr.w    #8,d7
  1844.         lsr.w    #1,d7
  1845.         andi.w    #%111,d7
  1846.         bne.s    .yes
  1847.         moveq    #8,d7
  1848.     .yes:    bsr    Sort4Imm
  1849.         move.b    #',',(a5)+
  1850.         moveq    #0,d6
  1851.         move.w    #%111111111000,d5
  1852.         bra    ModeAdressage
  1853.  
  1854.  
  1855. ;*****************************************************************
  1856. ;
  1857. ;    ******    **      **      **
  1858. ;    **  **  ****    ****    ****
  1859. ;    **  **    **      **      **
  1860. ;    **  **    **      **      **
  1861. ;    ******  ******  ******  ******
  1862.  
  1863. InstMoveq    lea    .TextMOVEQ(pc),a3
  1864.         bsr    SortSansEspace
  1865.         bsr    Tab
  1866.         btst    #8,d0
  1867.         bne    Erreur
  1868.         move.b    d0,d7
  1869.         bsr    Sort8Imms
  1870.         move.b    #',',(a5)+
  1871.         moveq    #9,d6
  1872.         bra    ModeDN
  1873.  
  1874. .TextMOVEQ    dc.b    'MOVEQ '
  1875.         even
  1876.  
  1877.  
  1878. ;*****************************************************************
  1879. ;
  1880. ;      **    ******  ******  ******
  1881. ;    ****    **  **  **  **  **  **
  1882. ;      **    **  **  **  **  **  **
  1883. ;      **    **  **  **  **  **  **
  1884. ;    ******  ******  ******  ******
  1885.  
  1886. OR_DIV_SBCD    lea    .Table(pc),a1
  1887.         bra    Menu
  1888.  
  1889.     .Table:    dc.w    %1111000111110000,%1000000100000000
  1890.         dc.w    InstSBCD-s
  1891.         dc.b    'SBCD.B  '
  1892.         dc.w    %1111000111000000,%1000000011000000
  1893.         dc.w    InstDIVU-s
  1894.         dc.b    'DIVU    '
  1895.         dc.w    %1111000111000000,%1000000111000000
  1896.         dc.w    InstDIVS-s
  1897.         dc.b    'DIVS    '
  1898.         dc.w    %1111000000000000,%1000000000000000
  1899.         dc.w    InstOR-s
  1900.         dc.b    'OR      '
  1901.         dc.b    'LEO!'
  1902.  
  1903. InstSBCD    movea.l    a1,a3
  1904.         bsr    SortSansEspace
  1905.         bsr    Tab
  1906.         btst    #3,d0
  1907.         beq.s    .SBCD_DD
  1908.         moveq    #0,d6
  1909.         bsr    Mode_MoinsAN
  1910.         move.b    #',',(a5)+
  1911.         moveq    #9,d6
  1912.         bra    Mode_MoinsAN
  1913. .SBCD_DD    moveq    #0,d6
  1914.         bsr    ModeDN
  1915.         move.b    #',',(a5)+
  1916.         moveq    #9,d6
  1917.         bra    ModeDN
  1918.  
  1919. InstDIVS
  1920. InstDIVU    movea.l    a1,a3
  1921.         bsr    SortSansEspace
  1922.         bsr    Tab
  1923.         move.w    #2,MaTaille(a6)
  1924.         moveq    #0,d6
  1925.         move.w    #%101111111111,d5
  1926.         bsr    ModeAdressage
  1927.         move.b    #',',(a5)+
  1928.         moveq    #9,d6
  1929.         bra    ModeDN
  1930.  
  1931. InstOR        movea.l    a1,a3
  1932.         bsr    SortSansEspace
  1933.         moveq    #6,d6
  1934.         bsr    TailleCLR
  1935.         btst.l    #8,d0
  1936.         beq.s    .A_To_D
  1937.         moveq    #9,d6
  1938.         bsr    ModeDN
  1939.         move.b    #',',(a5)+
  1940.         moveq    #0,d6
  1941.         move.w    #%001111111000,d5
  1942.         bra    ModeAdressage
  1943. .A_To_D:    moveq    #0,d6
  1944.         move.w    #%101111111111,d5
  1945.         bsr    ModeAdressage
  1946.         move.b    #',',(a5)+
  1947.         moveq    #9,d6
  1948.         bra    ModeDN
  1949.  
  1950. ;*****************************************************************
  1951. ;
  1952. ;      **    ******  ******  ******
  1953. ;    ****    **  **  **  **  **  **
  1954. ;      **    **  **  **  **  **  **
  1955. ;      **    **  **  **  **  **  **
  1956. ;    ******  ******  ******  ******
  1957.  
  1958. SUB_SUBX    lea    .Table(pc),a1
  1959.         bra    Menu
  1960.  
  1961.     .Table:    dc.w    %1111000011000000,%1001000011000000
  1962.         dc.w    InstSUBA-s
  1963.         dc.b    'SUBA    '
  1964.         dc.w    %1111000100110000,%1001000100000000
  1965.         dc.w    InstSUBX-s
  1966.         dc.b    'SUBX    '
  1967.         dc.w    %1111000000000000,%1001000000000000
  1968.         dc.w    InstSUB-s
  1969.         dc.b    'SUB     '
  1970.         dc.b    'LEO!'
  1971.  
  1972. InstSUBA    movea.l    a1,a3
  1973.         bsr    SortSansEspace
  1974.         moveq    #8,d6
  1975.         bsr    TailleEXT
  1976.         moveq    #0,d6
  1977.         move.w    #%111111111111,d5
  1978.         bsr    ModeAdressage
  1979.         move.b    #',',(a5)+
  1980.         moveq    #9,d6
  1981.         bra    ModeAN
  1982.  
  1983. InstSUBX    movea.l    a1,a3
  1984.         bsr    SortSansEspace
  1985.         moveq    #6,d6
  1986.         bsr    TailleCLR
  1987.         btst    #3,d0
  1988.         beq.s    .SUBX_DD
  1989.         moveq    #0,d6
  1990.         bsr    Mode_MoinsAN
  1991.         move.b    #',',(a5)+
  1992.         moveq    #9,d6
  1993.         bra    Mode_MoinsAN
  1994. .SUBX_DD    moveq    #0,d6
  1995.         bsr    ModeDN
  1996.         move.b    #',',(a5)+
  1997.         moveq    #9,d6
  1998.         bra    ModeDN
  1999.  
  2000. InstSUB        movea.l    a1,a3
  2001.         bsr    SortSansEspace
  2002.         moveq    #6,d6
  2003.         bsr    TailleCLR
  2004.         btst.l    #8,d0
  2005.         beq.s    .A_To_D
  2006.         moveq    #9,d6
  2007.         bsr    ModeDN
  2008.         move.b    #',',(a5)+
  2009.         moveq    #0,d6
  2010.         move.w    #%111111111110,d5
  2011.         bra    ModeAdressage
  2012. .A_To_D        moveq    #0,d6
  2013.         move.w    #%111111111110,d5
  2014.         bsr    ModeAdressage
  2015.         move.b    #',',(a5)+
  2016.         moveq    #9,d6
  2017.         bra    ModeDN
  2018.  
  2019. ;**********************************************************
  2020. ;
  2021. ;      **    ******  ******  ******
  2022. ;    ****    **  **  **  **  **  **
  2023. ;      **    **  **  **  **  **  **
  2024. ;      **    **  **  **  **  **  **
  2025. ;    ******  ******  ******  ******
  2026.  
  2027. ADD_ADDX    lea    .Table(pc),a1
  2028.         bra    Menu
  2029.  
  2030.     .Table:    dc.w    %1111000011000000,%1101000011000000
  2031.         dc.w    InstSUBA-s
  2032.         dc.b    'ADDA    '
  2033.         dc.w    %1111000100110000,%1101000100000000
  2034.         dc.w    InstSUBX-s
  2035.         dc.b    'ADDX    '
  2036.         dc.w    %1111000000000000,%1101000000000000
  2037.         dc.w    InstSUB-s
  2038.         dc.b    'ADD     '
  2039.         dc.b    'LEO!'
  2040.  
  2041. ;**********************************************************
  2042. ;
  2043. ;      **    ******  ******  ******
  2044. ;    ****    **  **  **  **  **  **
  2045. ;      **    **  **  **  **  **  **
  2046. ;      **    **  **  **  **  **  **
  2047. ;    ******  ******  ******  ******
  2048.  
  2049. Rotations    lea    .Table(pc),a1
  2050.         bra    Menu
  2051.     .Table:    dc.w    %1111111011000000,%1110001011000000
  2052.         dc.w    InstLS_Mem-s
  2053.         dc.b    'LS      '
  2054.         dc.w    %1111111011000000,%1110000011000000
  2055.         dc.w    InstAS_Mem-s
  2056.         dc.b    'AS      '
  2057.         dc.w    %1111111011000000,%1110011011000000
  2058.         dc.w    InstRO_Mem-s
  2059.         dc.b    'RO      '
  2060.         dc.w    %1111111011000000,%1110010011000000
  2061.         dc.w    InstROX_Mem-s
  2062.         dc.b    'ROX     '
  2063.         dc.w    %1111000000011000,%1110000000001000
  2064.         dc.w    InstLS_Reg-s
  2065.         dc.b    'LS      '
  2066.         dc.w    %1111000000011000,%1110000000000000
  2067.         dc.w    InstAS_Reg-s
  2068.         dc.b    'AS      '
  2069.         dc.w    %1111000000011000,%1110000000011000
  2070.         dc.w    InstRO_Reg-s
  2071.         dc.b    'RO      '
  2072.         dc.w    %1111000000011000,%1110000000010000
  2073.         dc.w    InstROX_Reg-s
  2074.         dc.b    'ROX     '
  2075.         dc.b    'LEO!'
  2076.  
  2077. InstAS_Reg
  2078. InstRO_Reg
  2079. InstROX_Reg
  2080. InstLS_Reg    movea.l    a1,a3
  2081.         bsr    SortSansEspace
  2082.         move.b    #'L',(a5)+
  2083.         btst    #8,d0
  2084.         bne.s    .ok
  2085.         move.b    #'R',-1(a5)
  2086.     .ok:    moveq    #6,d6
  2087.         bsr    TailleCLR
  2088.         btst    #5,d0
  2089.         beq    .Imm
  2090.     .Reg:    moveq    #9,d6
  2091.         bsr    ModeDN
  2092.         move.b    #',',(a5)+
  2093.         moveq    #0,d6
  2094.         bra    ModeDN
  2095.     .Imm:    move.w    d0,d7
  2096.         lsr.w    #8,d7
  2097.         lsr.w    #1,d7
  2098.         andi.w    #%111,d7
  2099.         bne.s    .ok2
  2100.         moveq    #8,d7
  2101.     .ok2:    bsr    Sort4Imm
  2102.         move.b    #',',(a5)+
  2103.         moveq    #0,d6
  2104.         bra    ModeDN
  2105.  
  2106. InstAS_Mem
  2107. InstRO_Mem
  2108. InstROX_Mem
  2109. InstLS_Mem    movea.l    a1,a3
  2110.         bsr    SortSansEspace
  2111.         move.b    #'L',(a5)+
  2112.         btst.l    #8,d0
  2113.         bne.s    .ok
  2114.         move.b    #'R',-1(a5)
  2115.     .ok:    move.b    #'.',(a5)+
  2116.         move.b    #'W',(a5)+
  2117.         bsr    Tab
  2118.         move.w    #2,MaTaille(a6)
  2119.         move.b    #'#',(a5)+
  2120.         move.b    #'1',(a5)+
  2121.         move.b    #',',(a5)+
  2122.         moveq    #0,d6
  2123.         move.w    #%001111111000,d5
  2124.         bra    ModeAdressage
  2125.  
  2126. ;**********************************************************
  2127. ;
  2128. ;      **    ******  ******  ******
  2129. ;    ****    **  **  **  **  **  **
  2130. ;      **    **  **  **  **  **  **
  2131. ;      **    **  **  **  **  **  **
  2132. ;    ******  ******  ******  ******
  2133.  
  2134. CMP_EOR        lea    .Table(pc),a1
  2135.         bra    Menu
  2136.     .Table:    dc.w    %1111000011000000,%1011000011000000
  2137.         dc.w    InstCMPA-s
  2138.         dc.b    'CMPA    '
  2139.         dc.w    %1111000100000000,%1011000000000000
  2140.         dc.w    InstCMP-s
  2141.         dc.b    'CMP     '
  2142.         dc.w    %1111000100000000,%1011000100000000
  2143.         dc.w    InstEOR-s
  2144.         dc.b    'EOR     '
  2145.         dc.b    'LEO!'
  2146.  
  2147. InstEOR        movea.l    a1,a3
  2148.         bsr    SortSansEspace
  2149.         moveq    #6,d6
  2150.         bsr    TailleCLR
  2151.         moveq    #9,d6
  2152.         bsr    ModeDN
  2153.         move.b    #',',(a5)+
  2154.         moveq    #0,d6
  2155.         move.w    #%101111111000,d5
  2156.         bra    ModeAdressage
  2157.  
  2158. InstCMPA    movea.l    a1,a3
  2159.         bsr    SortSansEspace
  2160.         moveq    #8,d6
  2161.         bsr    TailleEXT
  2162.         moveq    #0,d6
  2163.         move.w    #%111111111111,d5
  2164.         bsr    ModeAdressage
  2165.         move.b    #',',(a5)+
  2166.         moveq    #9,d6
  2167.         bra    ModeAN
  2168.  
  2169. InstCMP        movea.l    a1,a3
  2170.         bsr    SortSansEspace
  2171.         moveq    #6,d6
  2172.         bsr    TailleCLR
  2173.         moveq    #0,d6
  2174.         move.w    #%111111111111,d5
  2175.         bsr    ModeAdressage
  2176.         move.b    #',',(a5)+
  2177.         moveq    #9,d6
  2178.         bra    ModeDN
  2179.  
  2180.  
  2181. ;**********************************************************
  2182. ;
  2183. ;      **    ******  ******  ******
  2184. ;    ****    **  **  **  **  **  **
  2185. ;      **    **  **  **  **  **  **
  2186. ;      **    **  **  **  **  **  **
  2187. ;    ******  ******  ******  ******
  2188.  
  2189. AND_MUL_ABCD_EXG
  2190.         lea    .Table(pc),a1
  2191.         bra    Menu
  2192.     .Table:
  2193.         dc.w    %1111000111110000,%1100000100000000
  2194.         dc.w    InstSBCD-s
  2195.         dc.b    'ABCD    '
  2196.         dc.w    %1111000111000000,%1100000011000000
  2197.         dc.w    InstDIVU-s
  2198.         dc.b    'MULU    '
  2199.         dc.w    %1111000111000000,%1100000111000000
  2200.         dc.w    InstDIVS-s
  2201.         dc.b    'MULS    '
  2202.         dc.w    %1111000100110000,%1100000100000000
  2203.         dc.w    InstEXG-s
  2204.         dc.b    'EXG     '
  2205.         dc.w    %1111000000000000,%1100000000000000
  2206.         dc.w    InstOR-s
  2207.         dc.b    'AND     '
  2208.         dc.b    'LEO!'
  2209.  
  2210. InstEXG        movea.l    a1,a3
  2211.         bsr    SortSansEspace
  2212.         bsr    Tab
  2213.         move.w    d0,d1
  2214.         lsr.w    #3,d1
  2215.         andi.w    #%11111,d1
  2216.         cmpi.w    #%01000,d1
  2217.         beq.s    .Dn_Dn
  2218.         cmpi.w    #%01001,d1
  2219.         beq.s    .An_An
  2220.         cmpi.w    #%10001,d1
  2221.         bne    Erreur
  2222.     .An_Dn:    moveq    #0,d6
  2223.         bsr    ModeAN
  2224.         move.b    #',',(a5)+
  2225.         moveq    #9,d6
  2226.         bra    ModeDN
  2227.     .An_An:    moveq    #0,d6
  2228.         bsr    ModeAN
  2229.         move.b    #',',(a5)+
  2230.         moveq    #9,d6
  2231.         bra    ModeAN
  2232.     .Dn_Dn:    moveq    #0,d6
  2233.         bsr    ModeDN
  2234.         move.b    #',',(a5)+
  2235.         moveq    #9,d6
  2236.         bra    ModeDN
  2237.  
  2238. ;*******************************************************************
  2239. ;*******************************************************************
  2240.  
  2241. ModeDN        move.w    d0,d7
  2242.         lsr.w    d6,d7
  2243.         andi.w    #%111,d7
  2244.         move.b    #'D',(a5)+
  2245.         addi.b    #'0',d7
  2246.         move.b    d7,(a5)+
  2247.         rts
  2248.  
  2249. ModeAN        move.w    d0,d7
  2250.         lsr.w    d6,d7
  2251.         andi.w    #%111,d7
  2252.         move.b    #'A',(a5)+
  2253.         addi.b    #'0',d7
  2254.         move.b    d7,(a5)+
  2255.         rts
  2256.  
  2257. Mode_AN        move.w    d0,d7
  2258.         lsr.w    d6,d7
  2259.         andi.w    #%111,d7
  2260.         addi.b    #'0',d7
  2261.         move.b    #'(',(a5)+
  2262.         move.b    #'A',(a5)+
  2263.         move.b    d7,(a5)+
  2264.         move.b    #')',(a5)+
  2265.         rts
  2266.  
  2267. Mode_ANPlus    bsr    Mode_AN
  2268.         move.b    #'+',(a5)+
  2269.         rts
  2270.  
  2271. Mode_MoinsAN    move.w    d0,d7
  2272.         lsr.w    d6,d7
  2273.         andi.w    #%111,d7
  2274.         addi.b    #'0',d7
  2275.         move.b    #'-',(a5)+
  2276.         move.b    #'(',(a5)+
  2277.         move.b    #'A',(a5)+
  2278.         move.b    d7,(a5)+
  2279.         move.b    #')',(a5)+
  2280.         rts
  2281.  
  2282. ModeD_AN    move.w    (a0)+,d7
  2283.         bsr    Sort16
  2284.         bra    Mode_AN
  2285.  
  2286. ModeD_AN_Xi    lea    .Text(pc),a3
  2287.         move.w    d0,d7
  2288.         lsr.w    d6,d7
  2289.         andi.w    #%111,d7
  2290.         addi.b    #'0',d7
  2291.         move.b    d7,2(a3)        ; Modifie "An"
  2292.         move.w    (a0)+,d1
  2293.         move.b    d1,d7
  2294.         bsr    Sort8s
  2295.         rol.w    #7,d1
  2296.         andi.w    #%1111100,d1
  2297.         move.l    LesRegs(pc,d1),4(a3)
  2298.         bra    SortSansEspace
  2299.     .Text:    dc.b    '(An,Rn.z) '
  2300.         even
  2301. LesRegs        dc.b    'D0.WD0.LD1.WD1.LD2.WD2.LD3.WD3.L'
  2302.         dc.b    'D4.WD4.LD5.WD5.LD6.WD6.LD7.WD7.L'
  2303.         dc.b    'A0.WA0.LA1.WA1.LA2.WA2.LA3.WA3.L'
  2304.         dc.b    'A4.WA4.LA5.WA5.LA6.WA6.LA7.WA7.L'
  2305.         even
  2306.  
  2307. ModeD_PC_Xi    lea    .Text(pc),a3
  2308.         move.w    (a0)+,d1
  2309.         move.b    d1,d7
  2310.         ext.w    d7
  2311.         ext.l    d7
  2312.         add.l    a0,d7
  2313.         subq.l    #2,d7
  2314.         bsr    Sort32
  2315.         rol.w    #7,d1
  2316.         andi.w    #%1111100,d1
  2317.         lea    LesRegs(pc),a1
  2318.         move.l    0(a1,d1.w),4(a3)
  2319.         bra    SortSansEspace
  2320.     .Text:    dc.b    '(PC,Rn.z) '
  2321.         even
  2322.         even
  2323.  
  2324.  
  2325. ModeABS_W    move.w    (a0)+,d7
  2326.         bpl.s    .ok
  2327.         ext.l    d7
  2328.         bsr    Sort32
  2329.         bra.s    .ok2
  2330.     .ok:    bsr    Sort16
  2331.     .ok2:    move.b    #'.',(a5)+
  2332.         move.b    #'W',(a5)+
  2333.         rts
  2334.  
  2335. ModeABS_L    move.l    (a0)+,d7
  2336.         bra    Sort32
  2337.  
  2338. ModeD_PC    move.l    a0,d1
  2339.         move.w    (a0)+,d7
  2340.         ext.l    d7
  2341.         add.l    d1,d7
  2342.         bsr    Sort32
  2343.         move.b    #'(',(a5)+
  2344.         move.b    #'P',(a5)+
  2345.         move.b    #'C',(a5)+
  2346.         move.b    #')',(a5)+
  2347.         rts
  2348.  
  2349.  
  2350.  
  2351. ModeImm        move.b    #'#',(a5)+
  2352.         move.w    MaTaille(a6),d7
  2353.         cmpi.w    #1,d7
  2354.         beq.s    .PointB
  2355.         cmpi.w    #2,d7
  2356.         beq.s    .PointW
  2357.         move.l    (a0)+,d7
  2358.         bra    Sort32
  2359.  
  2360. .PointW        move.w    (a0)+,d7
  2361.         bra    Sort16
  2362.  
  2363. .PointB        move.w    (a0)+,d7
  2364.         bra    Sort8
  2365.  
  2366.  
  2367.  
  2368.  
  2369. ; Affichage du mode d'adressage. En entrée: D6: numéro du bit du mode
  2370. ; d'adressage et D5=Masque des modes acceptés. (bit 11 pour DN et bit
  2371. ; 0 pour Imm.)
  2372.  
  2373. RModeAdressage    ; Mode "Registre_Mode"
  2374.         move.w    d0,d1
  2375.         lsr.w    d6,d1
  2376.         move.w    d1,d2
  2377.         andi.w    #%111,d1    ; Mode
  2378.         lsr.w    #3,d2
  2379.         andi.w    #%111,d2    ; Registre
  2380.         addq.w    #3,d6        ; Numéro du bit du registre
  2381.         bra.s    RegOk
  2382. ModeAdressage    ; Mode "Mode_Registre"
  2383.         move.w    d0,d1
  2384.         lsr.w    d6,d1
  2385.         move.w    d1,d2
  2386.         andi.w    #%111000,d1    ; Mode
  2387.         lsr.w    #3,d1
  2388.         andi.w    #%000111,d2    ; Registre
  2389.     RegOk:    cmpi.w    #%111,d1    ; Mode "111" ??
  2390.         bne.s    .ok
  2391.         moveq    #%1000,d1
  2392.         or.w    d2,d1        ; D1 contient le mode (0 à 15)
  2393.     .ok:    lsl.w    #2,d1        ; MULU #4,d1
  2394.         lea    .TableMod(pc,d1.w),a1
  2395.         and.w    (a1)+,d5    ; Mode autorisé ??
  2396.         beq    Erreur        ; non on se casse
  2397.         move.w    (a1)+,d1
  2398.         jmp    0(a6,d1.w)
  2399.  
  2400. .TableMod    dc.w    1<<11
  2401.         dc.w    ModeDN-s
  2402.         dc.w    1<<10
  2403.         dc.w    ModeAN-s
  2404.         dc.w    1<<9
  2405.         dc.w    Mode_AN-s
  2406.         dc.w    1<<8
  2407.         dc.w    Mode_ANPlus-s
  2408.         dc.w    1<<7
  2409.         dc.w    Mode_MoinsAN-s
  2410.         dc.w    1<<6
  2411.         dc.w    ModeD_AN-s
  2412.         dc.w    1<<5
  2413.         dc.w    ModeD_AN_Xi-s
  2414.         dc.w    -1,Erreur-s
  2415.  
  2416.         dc.w    1<<4
  2417.         dc.w    ModeABS_W-s
  2418.         dc.w    1<<3
  2419.         dc.w    ModeABS_L-s
  2420.         dc.w    1<<2
  2421.         dc.w    ModeD_PC-s
  2422.         dc.w    1<<1
  2423.         dc.w    ModeD_PC_Xi-s
  2424.         dc.w    1<<0
  2425.         dc.w    ModeImm-s
  2426.         dc.w    -1,Erreur-s,-1,Erreur-s
  2427.         dc.w    -1,Erreur-s,-1,Erreur-s
  2428.         even
  2429.  
  2430. Erreur        move.b    #'?',(a5)+
  2431.         move.b    #'?',(a5)+
  2432.         rts
  2433.  
  2434.  
  2435.  
  2436. SortSansEspace    move.b    (a3)+,(a5)+
  2437.         cmpi.b    #' ',(a3)
  2438.         bne.s    SortSansEspace
  2439.         rts
  2440.  
  2441. ;    *********************************************************
  2442. ;    *                            *
  2443. ;    *    Taille des instructions (.B,W ou L)        *
  2444. ;    *                            *
  2445. ;    *********************************************************
  2446.  
  2447. TailleEXT    move.w    d0,d7
  2448.         lsr.w    d6,d7
  2449.         andi.w    #%1,d7
  2450.         move.b    #'.',(a5)+
  2451.         move.b    .TextEXT(pc,d7.w),(a5)+
  2452.         add.w    d7,d7
  2453.         move.w    .Taille(pc,d7.w),MaTaille(a6)
  2454.         bra    Tab
  2455. .TextEXT:    dc.b    'WL'
  2456. .Taille        dc.w    2,4
  2457.         even
  2458.  
  2459. TailleCLR    move.w    d0,d7
  2460.         lsr.w    d6,d7
  2461.         andi.w    #%11,d7
  2462.         move.b    #'.',(a5)+
  2463.         cmpi.b    #%11,d7
  2464.         bne.s    .ok
  2465.         move.b    #'?',(a5)+
  2466.         move.b    #'?',(a5)+
  2467.         bra    Tab
  2468.     .ok:    move.b    .TextEXT(pc,d7.w),(a5)+
  2469.         add.w    d7,d7
  2470.         move.w    .Taille(pc,d7.w),MaTaille(a6)
  2471.         bra    Tab
  2472. .TextEXT:    dc.b    'BWL'
  2473.         even
  2474. .Taille        dc.w    1,2,4
  2475.         even
  2476.  
  2477. TailleMOVE    move.w    d0,d7
  2478.         lsr.w    d6,d7
  2479.         andi.w    #%11,d7
  2480.         move.b    #'.',(a5)+
  2481.         cmpi.b    #%00,d7
  2482.         bne.s    .ok
  2483.         move.b    #'?',(a5)+
  2484.         move.b    #'?',(a5)+
  2485.         bra    Tab
  2486.     .ok:    move.b    .TextEXT(pc,d7.w),(a5)+
  2487.         add.w    d7,d7
  2488.         move.w    .Taille(pc,d7.w),MaTaille(a6)
  2489.         bra    Tab
  2490.  
  2491. .TextEXT:    dc.b    ' BLW'
  2492.         even
  2493. .Taille        dc.w    2,1,4,2
  2494.         even
  2495.  
  2496. ;**************************************************************
  2497.  
  2498. GetNumber    lea    Clavier(pc),a5
  2499.     .Wait:    tst.b    KeyA(a5)
  2500.         bne.s    .Wait
  2501.  
  2502.     ; Dans un premier temps on efface un peu de place.
  2503.         bsr    Vsync
  2504.         move.l    Ecran(pc),a1
  2505.         lea    40+160*92(a1),a1
  2506.         move.l    BufferGraphique(pc),a2
  2507.         moveq    #15,d0
  2508.     .Loopy:    moveq    #19,d1
  2509.     .Loopx:    move.l    (a1),(a2)+
  2510.         clr.l    (a1)+
  2511.         dbf    d1,.Loopx
  2512.         lea    80(a1),a1
  2513.         dbf    d0,.Loopy
  2514.  
  2515.     ; Un petit cadre pour faire plus beau...
  2516.         move.l    Ecran(pc),a1
  2517.         lea    40+160*92(a1),a1
  2518.         lea    15*160(a1),a2
  2519.         moveq    #-1,d1
  2520.         moveq    #19,d0
  2521.     .lop0:    move.l    d1,(a1)+
  2522.         move.l    d1,(a2)+
  2523.         dbf    d0,.lop0
  2524.  
  2525.         move.l    Ecran(pc),a1
  2526.         lea    40+160*92(a1),a1
  2527.         moveq    #15,d0
  2528.     .lop1:    ori.l    #$80008000,(a1)
  2529.         ori.l    #$00010001,19*4(a1)
  2530.         lea    160(a1),a1
  2531.         dbf    d0,.lop1
  2532.  
  2533.         moveq    #0,d7        ; Position dans la chaine.
  2534.         lea    .Chaine(pc),a1
  2535.         moveq    #7,d5
  2536.     .l0:    move.b    #' ',(a1)+
  2537.         dbf    d5,.l0
  2538.         lea    .Chaine(pc),a1
  2539.         lea    .Corres(pc),a2
  2540.         moveq    #0,d5        ; Chaine
  2541.         moveq    #0,d6
  2542.  
  2543.     .MMl:    move.w    #22,Xp(a6)
  2544.         move.w    #12,Yp(a6)
  2545.         lea    .Chaine0(pc),a0
  2546.         bsr    Print
  2547.  
  2548.         lea    Clavier(pc),a5
  2549.     .Waitk:    tst.b    0(a5,d6.w)
  2550.         bne.s    .Waitk
  2551.  
  2552.     .Mloop:    lea    .Entree(pc),a0
  2553.         lea    Clavier(pc),a5
  2554.         moveq    #0,d0
  2555.     .Loop:    move.b    (a0)+,d0
  2556.         beq.s    .Mloop
  2557.         tst.b    0(a5,d0.w)
  2558.         bne.s    .KeyPressed
  2559.         addq.w    #1,a0
  2560.         bra.s    .Loop
  2561.  
  2562. .KeyPressed    move.b    d0,d6            ; Touche à attendre
  2563.         move.b    (a0)+,d0        ; Correspondance touche
  2564.         cmpi.b    #$12,d0
  2565.         beq    .Escape
  2566.         cmpi.b    #$11,d0
  2567.         beq.s    .BackSpace
  2568.         cmpi.b    #$10,d0
  2569.         beq.s    .FinDeRoutine
  2570.  
  2571. .Chiffre:    ext.w    d0
  2572.         lsl.l    #4,d5
  2573.         or.b    d0,d5
  2574.         move.b    0(a2,d0.w),d0
  2575.         move.b    d0,0(a1,d7.w)
  2576.         addq.w    #1,d7
  2577.         cmpi.w    #8,d7
  2578.         beq.s    .FinDeRoutine
  2579.         bra    .MMl
  2580.  
  2581. .BackSpace    tst.w    d7        ; Pas de caractère.
  2582.         beq    .MMl        ; alors on remonte.
  2583.         subq.w    #1,d7
  2584.         move.b    #' ',0(a1,d7.w)
  2585.         lsr.l    #4,d5
  2586.         bra    .MMl
  2587.  
  2588. .FinDeRoutine    move.l    d5,d7
  2589.         moveq    #0,d0
  2590.         move.l    #TrueTOP-80,d1
  2591.         bsr    Clipping
  2592.         lea    RAM_Pointer(pc),a0
  2593.         move.l    d7,(a0)
  2594. .Escape
  2595.     ; Enfin on restitue.
  2596.         bsr    Vsync
  2597.         move.l    Ecran(pc),a1
  2598.         lea    40+160*92(a1),a1
  2599.         move.l    BufferGraphique(pc),a2
  2600.         moveq    #15,d0
  2601.     .Lopy1:    moveq    #19,d1
  2602.     .Lopx1:    move.l    (a2)+,(a1)+
  2603.         dbf    d1,.Lopx1
  2604.         lea    80(a1),a1
  2605.         dbf    d0,.Lopy1
  2606.  
  2607.         lea    Clavier(pc),a5
  2608.     .Waik2:    tst.b    0(a5,d6.w)
  2609.         bne.s    .Waik2
  2610.         rts
  2611.  
  2612.  
  2613.  
  2614. .Entree        dc.w    $7000,$6d01,$6e02,$6f03,$6a04,$6b05,$6c06
  2615.         dc.w    $6707,$6808,$6909,$100a,$300b,$2e0c,$200d
  2616.         dc.w    $120e,$210f
  2617.         dc.w    $1c10,$7210    ; Return ou entrée.
  2618.         dc.w    $0e11        ; BackSpace
  2619.         dc.w    $0112        ; Escape.
  2620.         dc.w    0
  2621. .Chaine0:    dc.b    'Aller a l''Adresse:$'
  2622. .Chaine        dc.b    '        ',-1
  2623. .Corres        dc.b    '0123456789ABCDEF'
  2624.         even
  2625.  
  2626.  
  2627.  
  2628. Tab        ;moveq    #1-1,d7
  2629.         move.b    #9,(a5)+
  2630.         rts
  2631.  
  2632. Sort32First    move.b    #'$',(a5)+
  2633.         movem.l    d5-d6/a0,-(sp)
  2634.         moveq    #0,d4
  2635.         lea    Convert(pc),a0
  2636.         moveq    #8-1,d5
  2637.     .Loop:    rol.l    #4,d7
  2638.         moveq    #%1111,d6
  2639.         and.w    d7,d6
  2640.     .ok:    move.b    0(a0,d6.w),(a5)+
  2641.     .non:    dbf    d5,.Loop
  2642.         movem.l    (sp)+,d5-d6/a0
  2643.         rts
  2644.  
  2645.     ; Affichage de D7 en long.
  2646. Sort32Imm    move.b    #'#',(a5)+
  2647. Sort32        move.b    #'$',(a5)+
  2648.         movem.l    d4-d6/a0,-(sp)
  2649.         moveq    #0,d4
  2650.         lea    Convert(pc),a0
  2651.         moveq    #8-1,d5
  2652.     .Loop:    rol.l    #4,d7
  2653.         moveq    #%1111,d6
  2654.         and.w    d7,d6
  2655.         bne.s    .ok
  2656.         tst.w    d5            ; Dernier caractère ??
  2657.         beq.s    .ok            ; Oui alors affiche.
  2658.         tst.w    d4
  2659.         beq.s    .non
  2660.     .ok:    move.b    0(a0,d6.w),(a5)+
  2661.         moveq    #-1,d4
  2662.     .non:    dbf    d5,.Loop
  2663.         movem.l    (sp)+,d4-d6/a0
  2664.         rts
  2665.  
  2666.     ; Affichage de D7 en word signé.
  2667. Sort16Imm    move.b    #'#',(a5)+
  2668. Sort16        tst.w    d7
  2669.         bpl.s    .ok
  2670.         neg.w    d7
  2671.         move.b    #'-',(a5)+
  2672.     .ok:    move.b    #'$',(a5)+
  2673.         movem.l    d4-d6/a0,-(sp)
  2674.         lea    Convert(pc),a0
  2675.         moveq    #4-1,d5
  2676.         swap    d7
  2677.         moveq    #0,d4
  2678.     .Loop:    rol.l    #4,d7
  2679.         moveq    #%1111,d6
  2680.         and.w    d7,d6
  2681.         bne.s    .ok2
  2682.         tst.w    d5            ; Dernier caractère ??
  2683.         beq.s    .ok2            ; Oui alors affiche.
  2684.         tst.w    d4
  2685.         beq.s    .non
  2686.     .ok2:    move.b    0(a0,d6.w),(a5)+
  2687.         moveq    #-1,d4
  2688.     .non:    dbf    d5,.Loop
  2689.         movem.l    (sp)+,d4-d6/a0
  2690.         rts
  2691.  
  2692.  
  2693.     ; Affichage de D7 en Byte.
  2694. Sort8Imms    move.b    #'#',(a5)+
  2695. Sort8s        tst.b    d7
  2696.         bpl.s    .ok
  2697.         neg.b    d7
  2698.         move.b    #'-',(a5)+
  2699.     .ok:    move.b    #'$',(a5)+
  2700.         movem.l    d5-d6/a0,-(sp)
  2701.         lea    Convert(pc),a0
  2702.         moveq    #2-1,d5
  2703.         ror.l    #8,d7
  2704.     .Loop:    rol.l    #4,d7
  2705.         moveq    #%1111,d6
  2706.         and.w    d7,d6
  2707.         move.b    0(a0,d6.w),(a5)+
  2708.         dbf    d5,.Loop
  2709.         movem.l    (sp)+,d5-d6/a0
  2710.         rts
  2711.  
  2712.  
  2713.     ; Affichage de D7 en Byte.
  2714. Sort8Imm    move.b    #'#',(a5)+
  2715. Sort8        cmpi.b    #9,d7
  2716.         bgt.s    .Nanou
  2717.         cmpi.b    #-9,d7
  2718.         bge.s    .Nano
  2719.     .Nanou:    move.b    #'$',(a5)+
  2720.     .Nano:    movem.l    d5-d6/a0,-(sp)
  2721.         lea    Convert(pc),a0
  2722.         moveq    #2-1,d5
  2723.         ror.l    #8,d7
  2724.     .Loop:    rol.l    #4,d7
  2725.         moveq    #%1111,d6
  2726.         and.w    d7,d6
  2727.         move.b    0(a0,d6.w),(a5)+
  2728.         dbf    d5,.Loop
  2729.         movem.l    (sp)+,d5-d6/a0
  2730.         rts
  2731.  
  2732. Sort4Imm    move.b    #'#',(a5)+
  2733. Sort4        move.b    #'$',(a5)+
  2734.         movem.l    d5-d6/a0,-(sp)
  2735.         lea    Convert(pc),a0
  2736.         moveq    #%1111,d6
  2737.         and.w    d7,d6
  2738.         move.b    0(a0,d6.w),(a5)+
  2739.         movem.l    (sp)+,d5-d6/a0
  2740.         rts
  2741.  
  2742. Convert        dc.b    '0123456789ABCDEF'
  2743.         even
  2744.  
  2745. ;    *********************************************************
  2746. ;    *                            *
  2747. ;    *    Routine de PRINT                *
  2748. ;    *    Toujours sur Xp(a6),Yp(a6)            *
  2749. ;    *                            *
  2750. ;    *********************************************************
  2751. Print        movem.l    d0-a5,-(sp)
  2752.         move.w    Xp(a6),d0
  2753.         move.w    Yp(a6),d1
  2754.     .recom:
  2755. ;        lea    TOP-32000,a1
  2756.         move.l    Ecran(pc),a1
  2757.         move.w    d1,d2
  2758.         mulu.w    #160*8,d2
  2759.         add.l    d2,a1
  2760.         move.w    d0,d2
  2761.         ror.l    #1,d2        ; Bit de paritΘ de cotΘ
  2762.         add.w    d2,d2
  2763.         rol.l    #1,d2
  2764.         add.w    d2,a1        ; Abscisse X
  2765.  
  2766.     .LoopP:    moveq    #0,d2
  2767.         move.b    (a0)+,d2
  2768.         ble    .finp        ; Fin si <= 0
  2769.         cmpi.b    #$0a,d2        ; Retour chariot ??
  2770.         bne.s    .non1
  2771.         moveq    #1,d0
  2772.         addq.w    #1,d1        ; Yp+1
  2773.         bra.s    .recom
  2774.     .non1:    cmpi.b    #$09,d2        ; TAB ??
  2775.         bne.s    .non2
  2776.         addq.w    #8,d0
  2777.         andi.w    #-8,d0
  2778.         bra.s    .recom
  2779.     .non2:    lea    Font88(pc),a2
  2780.  
  2781. ;        cmpi.b    #'q',d2
  2782. ;        bne.s    .oup1
  2783. ;        move.b    #'.',d2
  2784. ;        bra.s    .oup2
  2785. ;    .oup1:    blo.s    .oup2
  2786. ;        subq.w    #1,d2
  2787. ;    .oup2:
  2788.  
  2789.         sub.b    #32,d2
  2790.         lsl.w    #3,d2
  2791.         add.w    d2,a2
  2792.         move.b    (a2)+,(a1)
  2793. i        set    160
  2794.         rept    7
  2795.         move.b    (a2)+,i(a1)
  2796. i        set    i+160
  2797.         endr
  2798.         addq.w    #1,d0            ; Xp+1
  2799.         addq.w    #1,a1
  2800.         btst    #0,d0
  2801.         bne.s    .yes
  2802.         addq.w    #2,a1
  2803.     .yes:    bra    .LoopP
  2804.     .finp:    move.w    d0,Xp(a6)
  2805.         move.w    d1,Yp(a6)
  2806.         movem.l    (sp)+,d0-a5
  2807.         rts
  2808.  
  2809.  
  2810. Vsync        move.w    #$2300,sr
  2811.         move.w    d0,-(sp)
  2812.         move.w    $468.w,d0
  2813.     .Wait:    cmp.w    $468.w,d0
  2814.         beq.s    .Wait
  2815.         move.w    (sp)+,d0
  2816.         rts
  2817.  
  2818.     ; Mise à jour des registres hardware.
  2819.     ; (Palette, ecran, MFP, clavier.)
  2820. My_ITs        lea    Vbl(pc),a0
  2821.         move.l    a0,$70.w
  2822.         lea    IT_Clavier(pc),a0
  2823.         move.l    a0,$118.w
  2824.         lea    Contexte(pc),a0
  2825.         lea    $fffffa01.w,a1
  2826.         moveq    #15,d0
  2827.     .Loop1:    move.b    (a0)+,(a1)
  2828.         addq.w    #2,a1
  2829.         dbf    d0,.Loop1
  2830.         clr.l    $fffffa06.w
  2831.         clr.l    $fffffa12.w
  2832.         bclr    #3,$fffffa17.w
  2833.     ; Initialisation du clavier.
  2834.         clr.b    $fffffa1b.w
  2835.         move.b    #%00000001,$fffffa07.w
  2836.         move.b    #%00000001,$fffffa13.w
  2837.         move.b    #%01000000,$fffffa09.w        ; IT clavier.
  2838.         move.b    #%01000000,$fffffa15.w
  2839.         move.b    #$03,$fffffc00.w
  2840.         move.b    #$96,$fffffc00.w
  2841.     .la:    btst    #1,$fffffc00.w
  2842.         beq.s    .la
  2843.         move.b    #$12,$fffffc02.w
  2844.         move.w    #$2300,sr
  2845.         bsr.s    MedRes
  2846.         rts
  2847.  
  2848. MedRes        moveq    #1,d0
  2849.         and.b    $ffff8260.w,d0
  2850.         bne.s    .already
  2851.         sf    $ffff820a.w
  2852.         move.b    #1,$ffff8260.w
  2853.         stop    #$2300
  2854.         stop    #$2300
  2855.         stop    #$2300
  2856.         move.b    #2,$ffff820a.w
  2857. .already:    move.l    Ecran(pc),a0
  2858.         move.l    a0,d0
  2859.         move.b    d0,$ffff820d.w
  2860.         lsr.w    #8,d0
  2861.         move.b    d0,$ffff8203.w
  2862.         swap    d0
  2863.         move.b    d0,$ffff8201.w
  2864.     IFEQ    PIC
  2865.         move.w    #32000/4-1,d0
  2866.     .Cls:    clr.l    (a0)+
  2867.         dbf    d0,.Cls
  2868.     ELSEIF
  2869.         lea    Picture(pc),a0
  2870.         bsr    DisplayIff
  2871.     ENDC
  2872.         lea    MyPalette(pc),a0
  2873.         movea.w    #$8240,a1
  2874.         move.l    (a0)+,(a1)+
  2875.         move.l    (a0)+,(a1)+
  2876.         rts
  2877.     IFNE    PIC
  2878. DisplayIff    cmpi.l    #'FORM',(a0)+
  2879.         bne    IffError
  2880.         lea    8(a0),a0
  2881.         cmpi.l    #'ILBM',-4(a0)
  2882.         bne    IffError
  2883.         move.l    #'BMHD',d0
  2884.         bsr    Search
  2885.         lea    8(a0),a0
  2886.         cmp.w    #640,(a0)+
  2887.         bne    IffError
  2888.         move.w    (a0)+,d7    ; Hauteur
  2889.         move.w    #200,d7
  2890.         cmp.b    #1,4(a0)    ; Nb plans
  2891.         bne    IffError
  2892.         move.l    #'BODY',d0
  2893.         bsr    Search
  2894.         lea    8(a0),a0
  2895.         subq.w    #1,d7
  2896.         move.l    Ecran(pc),a5
  2897.     .la:    bsr    Depak1Ligne
  2898.         dbf    d7,.la
  2899.         rts
  2900.  
  2901. Depak1Ligne    movem.l    a1-a3,-(sp)
  2902.         lea    MiniBuff(pc),a1
  2903.         lea    80(a1),a3
  2904.     .read:    cmpa.l    a1,a3
  2905.         bls    .Finlig
  2906.         moveq    #0,d0
  2907.         move.b    (a0)+,d0
  2908.         bpl.s    .Ok
  2909.         neg.b    d0
  2910.         move.b    (a0)+,d1
  2911.     .Loop1:    move.b    d1,(a1)+
  2912.         dbf    d0,.Loop1
  2913.         bra.s    .read
  2914.     .Ok:    move.b    (a0)+,(a1)+
  2915.         dbf    d0,.Ok
  2916.         bra.s    .read
  2917. .Finlig        movem.l    (sp)+,a1-a3
  2918.         lea    MiniBuff(pc),a1
  2919.         moveq    #80/2-1,d0
  2920.     .Loop:    clr.w    (a5)+
  2921.         move.w    (a1)+,(a5)+
  2922.         dbf    d0,.Loop
  2923.         rts
  2924. MiniBuff    dcb.b    160,0
  2925.  
  2926. IffError    moveq    #-1,d0
  2927.         rts
  2928. Search        cmp.l    (a0),d0
  2929.         beq.s    .Ok
  2930.         lea    2(a0),a0
  2931.         bra.s    Search
  2932.     .Ok:    rts
  2933.  
  2934.     ENDC
  2935.  
  2936.  
  2937. LowRes        clr.b    $ffff820a.w
  2938.         move.b    OldRes(pc),$ffff8260.w
  2939.         stop    #$2300
  2940.         stop    #$2300
  2941.         move.b    OldSync(pc),$ffff820a.w
  2942.         lea    OldPal(pc),a0
  2943.         movea.w    #$8240,a1
  2944.         moveq    #7,d0
  2945.     .Loop:    move.l    (a0)+,(a1)+
  2946.         dbf    d0,.Loop
  2947.         move.l    Ecran(pc),a0
  2948.         move.l    #Place,d1
  2949.         moveq    #0,d0
  2950.     .Loopc:    move.l    d0,(a0)+
  2951.         subq.l    #4,d1
  2952.         bpl.s    .Loopc
  2953.         rts
  2954.  
  2955. MyPalette    dc.w    $000
  2956.         dc.w    $677
  2957.         dc.w    $004
  2958.         dc.w    CoulCadre
  2959. PalSys        dc.w    $fff,$f00,$0f0,$ff0,$00f,$f0f,$0ff,$555
  2960.         dc.w    $333,$f33,$3f3,$ff3,$33f,$f3f,$3ff,$000
  2961. PalType        dc.w    0
  2962.  
  2963. IT_Clavier    movem.l    d0-d1/a0,-(sp)
  2964.         move.b    $fffffc02.w,d0
  2965.         move.b    d0,$308.w        ; Octet clavier.
  2966.         moveq    #0,d1
  2967.         btst    #7,d0
  2968.         bne.s    .rela
  2969.         moveq    #-1,d1
  2970.     .rela:    andi.w    #%01111111,d0
  2971.         lea    Clavier(pc),a0
  2972.         move.b    d1,0(a0,d0.w)
  2973.     .non:    movem.l    (sp)+,d0-d1/a0
  2974.         rte
  2975.  
  2976. Vbl        move.b    $fffffc02.w,$308.w
  2977.         pea    (a0)
  2978.         lea    VariablesPC(pc),a6
  2979.         clr.b    $fffffa1b.w
  2980.  
  2981.  
  2982.         lea    Clavier(pc),a0
  2983.         tst.b    KeyAlt(a0)
  2984.         beq.s    .non1
  2985.         tst.b    KeyX(a0)
  2986.         bne    Reprise
  2987. .non1:        move.l    (sp)+,a0
  2988.         addq.l    #1,$466.w
  2989.         rte
  2990.  
  2991.  
  2992. ;    *********************************************************
  2993. ;    *                            *
  2994. ;    *    Reprise de la démo en cours.            *
  2995. ;    *                            *
  2996. ;    *********************************************************
  2997. Reprise        move.w    #$2700,sr        ; Coupe tout.
  2998.         tst.b    $200.w            ; Plantage ??
  2999.         bne.s    .non
  3000.         move.l    $4.w,a0
  3001.         jmp    (a0)
  3002. .non:        move.b    #0,$ffff820a.w
  3003.         clr.l    $fffffa06.w
  3004.         clr.l    $fffffa12.w
  3005.         move.b    #7,$484.w
  3006.         clr.b    $308.w
  3007.         move.l    Ecran(pc),a0
  3008.         move.l    #Place,d1
  3009.         moveq    #0,d0
  3010.     .Loopc:    move.l    d0,(a0)+
  3011.         subq.l    #4,d1
  3012.         bpl.s    .Loopc
  3013.  
  3014. ; Remet la RAM de $8 à $400
  3015.         lea    $8.w,a1
  3016.         move.b    $200.w,d7
  3017.         lea    LowRAM+8(pc),a0
  3018.         move.w    #($400-$8)/4-1,d0
  3019.     .Loop1:    move.l    (a0)+,(a1)+
  3020.         dbf    d0,.Loop1
  3021.         move.b    d7,$200.w
  3022.  
  3023. ; Initialise Clavier.
  3024.         move.b    #$03,$fffffc00.w
  3025.         move.b    #$96,$fffffc00.w
  3026.     .la:    btst    #1,$fffffc00.w
  3027.         beq.s    .la
  3028.         move.b    #$12,$fffffc02.w
  3029. ; Initialise l'écran.
  3030.         move.b    OldRes(pc),$ffff8260.w
  3031.         move.b    OldVdh(pc),$ffff8201.w
  3032.         move.b    OldVdm(pc),$ffff8203.w
  3033.         move.b    OldVdl(pc),$ffff820d.w
  3034.         move.b    OldShift(pc),$ffff8265.w
  3035.         lea    OldPal(pc),a0
  3036.         movea.w    #$8240,a1
  3037.         moveq    #7,d0
  3038.     .Loop2:    move.l    (a0)+,(a1)+
  3039.         dbf    d0,.Loop2
  3040.  
  3041.         lea    Yamaha(pc),a0
  3042.         moveq    #11,d0
  3043.     .Loop3:    move.b    d0,$ffff8800.w
  3044.         move.b    (a0)+,$ffff8802.w
  3045.         dbf    d0,.Loop3
  3046.  
  3047. ; Initialise MFP
  3048.         lea    Contexte(pc),a0
  3049.         movea.w    #$fa01,a1
  3050.         moveq    #15,d0
  3051.     .Loop4:    move.b    (a0)+,(a1)
  3052.         addq.w    #2,a1
  3053.         dbf    d0,.Loop4
  3054.  
  3055. ; Initialise les registres généraux.
  3056.         move.l    LeUSP(pc),a0
  3057.         move.l    a0,usp
  3058.         movem.l    (LeSR+6)(pc),d0-d7/a0-a7
  3059.         move.b    OldSync(pc),$ffff820a.w
  3060.         sf    $200.w
  3061.         rte                    ; Retour du trap #15
  3062.  
  3063.  
  3064. ;    ************************************************************
  3065.  
  3066.         ds.l    64
  3067. MyStack        even
  3068.  
  3069. LowRAM        dcb.b    $400,0
  3070. RAM_Pointer    dc.l    0
  3071. AD_Video    dc.l    0
  3072. Ecran        dc.l    0
  3073. LesOctets    dc.l    0
  3074. BufferGraphique    dc.l    0
  3075. TailleInstruction    dc.w    2
  3076. Processor    dc.w    0
  3077. ;*********************************
  3078. Contexte    dcb.b    16,0    *    ; Registres MFP.
  3079. OldRes        dc.b    1
  3080. OldSync        dc.b    2
  3081. OldVdh        dc.b    $0f
  3082. OldVdm        dc.b    $80
  3083. OldVdl        dc.b    0
  3084. OldShift    dc.b    0
  3085. OldPal        dcb.b    32,0        ; Registres de couleur.
  3086. Yamaha        dcb.b    12,0    *
  3087.  
  3088. ;*********************************
  3089. Clavier        dcb.b    128,0
  3090. ;*********************************
  3091. Registers            *
  3092. LeSR        dc.w    $2300        ; SR
  3093. LePC        dc.l    0        ; PC
  3094. D0D7        dcb.l    8,0        ; D0-D7
  3095. A0A7        dcb.l    8,0        ; A0-A7
  3096. LeUSP        dc.l    0    *    ; USP
  3097. ;*********************************
  3098.     ; Variables adressables avec A6
  3099. s
  3100. VariablesPC    dcb.b    10,0
  3101. Xp        equ    0    W
  3102. Yp        equ    2    W
  3103. MaTaille    equ    4    W
  3104. Flag1        equ    6    W
  3105. MasqueMOVEM    equ    8    W
  3106.  
  3107. Font88        incbin    "a:\griff.fnt"
  3108.         even
  3109.     IFNE    PIC
  3110. Picture        incbin    "b:\ddv3_1.iff"
  3111.         even
  3112.     ENDC
  3113. BB
  3114.  
  3115.