home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / debug / Debugger / ScypMon / Source / scypmonv1.8.s < prev   
Text File  |  1995-06-25  |  145KB  |  7,536 lines

  1.          output    work:scypmon
  2. ;Used Assembler: Devpac 3.02 by HiSoft
  3.         OPT o+,ow-
  4. RSave        macro
  5.         movem.l    a0-a6/d0-d7,-(sp)
  6.         endm
  7. RLoad        macro
  8.         movem.l    (sp)+,a0-a6/d0-d7
  9.         endm
  10. Push        macro
  11.         movem.l    \1,-(sp)
  12.         endm
  13. Pull        macro
  14.         movem.l    (sp)+,\1
  15.         endm
  16. CALL        macro
  17.         jsr    _LVO\1(a6)
  18.         endm
  19. FlushCursor    macro
  20.         move.w    rp_cp_x(a5),FlushCursorX(a4)
  21.         endm
  22.  
  23. ;        KNOWN BUGS:
  24. ;        Slowdown (Scrolling) bei laengerer Benutzung?
  25.  
  26. ;        IDEAS:
  27. ;        More Windows
  28. ;        (Own Pubscreen?)
  29. ;        f3: wie f1, doch adressen*4 (BPTR)
  30.  
  31.  
  32.         incdir    "system:devpac/include/"
  33.         ;include    "exec/io.i"
  34.         ;include    "exec/memory.i"
  35.         ;include    "devices/console_lib.i"
  36.         ;include "exec/exec_lib.i"
  37.         ;include    "exec/execbase.i"
  38.         ;include    "devices/inputevent.i"
  39.         ;include "intuition/intuition.i"
  40.         ;include    "intuition/intuition_lib.i"
  41.         ;include "libraries/dos_lib.i"
  42.         ;include    "libraries/dosextens.i"
  43.         ;include    "libraries/dos.i"
  44.         ;include    "graphics/graphics_lib.i"
  45.         ;include    "graphics/gfxbase.i"
  46.         ;include    "df0:source/dis_lib.i"
  47.         include    "other/dis_lib.i"
  48.         include    "libraries/diskfont_lib.i"
  49.         include    "dos/filehandler.i"
  50.  
  51. StackSize    equ    4000
  52. MInPos        equ    11
  53. DInPos        equ    11
  54. DirAdress    equ    60
  55. DOpPos        equ    23
  56. SmallestHeight    equ    5*8-2
  57. HistorySize    equ    $400
  58. MyDisPrefs    equ    DF_68030!DF_68020!DF_68851!DF_68881!DF_HexMode0!DF_HexMode1!DF_ShortInst!DF_LineX!DF_LowerInst!DF_LowerHex!DF_LowerReg!DF_AdrPC!DF_NoEACheck!DF_Bcc_S!DF_UseFlags
  59.  
  60. Startup        cmp.b    #"?",(a0)
  61.         bne    NoInfoPrint
  62.         suba.l    a1,a1
  63.         move.l    $0004.w,a6
  64.         CALL    FindTask
  65.         move.l    d0,a0
  66.         move.l    pr_COS(a0),d7
  67.         lea    DosName,a1
  68.         moveq    #0,d0
  69.         CALL    OpenLibrary
  70.         move.l    d0,a6
  71.         move.l    d7,d1
  72.         lea    ShortHelp,a0
  73.         move.l    a0,d2
  74.         move.l    #ShortHelpe-ShortHelp,d3
  75.         CALL    Write
  76.         move.l    a6,a1
  77.         move.l    $0004.w,a6
  78.         CALL    CloseLibrary
  79.         moveq.l    #0,d0
  80.         rts
  81.  
  82. NoInfoPrint    movem.l    d0-d7/a0-a7,RegisterSave
  83.         move.l    $0004.w,a6
  84.         move.l    ThisTask(a6),a1
  85.         tst.l    pr_CLI(a1)
  86.         bne.s    CliStart
  87.         lea    pr_MsgPort(a1),a2
  88.         move.l    a2,a0
  89.         CALL    WaitPort
  90.         move.l    a2,a0
  91.         CALL    GetMsg
  92.         move.l    d0,d2
  93.         jmp    MainWB
  94.  
  95. CliStart    moveq    #RETURN_FAIL,d7
  96.         lea    DosName,a1
  97.         moveq    #0,d0
  98.         CALL    OpenLibrary
  99.         move.l    d0,d6
  100.         beq    DetError1
  101.         move.l    #ML_SIZE+ME_SIZE,d0
  102.         move.l    #MEMF_CLEAR,d1
  103.         CALL    AllocMem
  104.         tst.l    d0
  105.         beq    DetError2
  106.         clr.l    d5    ;test
  107.         move.l    d0,a2
  108.         move.l    ThisTask(a6),a0
  109.         move.l    pr_CurrentDir(a0),d1
  110.         beq    NoDupLock    ;test
  111.         exg    d6,a6
  112.         CALL    DupLock
  113.         exg    d6,a6
  114.         move.l    d0,d5
  115.         beq.s    DetError4
  116. NoDupLock    move.w    #1,ML_NUMENTRIES(a2)
  117.         lea    PARTII-8,a3
  118.         move.l    a3,(ML_ME+ME_ADDR)(a2)
  119.         move.l    (a3),(ML_ME+ME_LENGTH)(a2)
  120.         lea    ProgramName,a0
  121.         move.l    a0,d1
  122.         moveq    #0,d2
  123.         lea    MainCLI-4,a0
  124.         move.l    a0,d3
  125.         lsr.l    #2,d3
  126.         move.l    #StackSize,d4
  127.         CALL    Forbid
  128.         exg    d6,a6    ; DOSBase/SysBase umtauschen
  129.         CALL    CreateProc
  130.         exg    d6,a6
  131.         tst.l    d0
  132.         beq.s    DetError3
  133.         clr.l    (Startup-4)        ;2.ten Teil anhaengen
  134.         move.l    d0,a0
  135.         move.l    d5,(pr_CurrentDir-pr_MsgPort)(a0)
  136.         lea    (TC_MEMENTRY-pr_MsgPort)(a0),a0
  137.         move.l    a2,a1
  138.         CALL    AddHead
  139.         CALL    Permit
  140.         moveq    #RETURN_OK,d7
  141.         bra.s    DetachOK
  142. DetError3    CALL    Permit
  143.         exg    d6,a6
  144.         move.l    d5,d1    ;test
  145.         beq    NoDup2
  146.         CALL    UnLock
  147. NoDup2        exg    d6,a6
  148. DetError4    move.l    a2,a1
  149.         moveq    #ML_SIZE+ME_SIZE,d0
  150.         CALL    FreeMem
  151. DetError2    ;
  152. DetachOK    move.l    d6,a1
  153.         CALL    CloseLibrary
  154. DetError1    tst.w    StatusLine ;auf Auswertung der paramter warten
  155.         beq.s    DetError1
  156.         move.l    d7,d0
  157.         rts
  158.  
  159.         section    Program
  160.  
  161. PARTII        ;
  162.  
  163. DoNotDetach    ;
  164. MainCLI        moveq    #0,d2
  165. MainWB        moveq    #RETURN_FAIL,d3
  166.  
  167.         ;*** Installations ***
  168. MonitorStart    move.l    $0004.w,a6
  169.         move.l    a7,d0
  170.         sub.l    #$800,d0    ;Damit echter und Trace-Stack nicht
  171.         move.l    d0,USPstack    ;so leicht kollidieren
  172.         lea    MonStart(pc),a5
  173.         CALL    Supervisor
  174.         bra.s    MainProgramm
  175. MonStart    move.w    SR,d0
  176.         and.w    #$dfff,d0
  177.         move.w    d0,SRregister
  178.         move.l    a7,SSPstack
  179.         moveq    #0,d0
  180.         btst.b    #AFB_68010,(AttnFlags+1)(A6)
  181.         beq.s    StandardVBR
  182.         dc.w    $4e7a,$0801    ;movec    VBR,d0
  183. StandardVBR    move.l    d0,VBRreg
  184.         rte
  185. MainProgramm    move.l    $0004.w,a6
  186.         move.l    #GesLen,d0
  187.         move.l    #MEMF_CLEAR,d1
  188.         CALL    AllocMem    ;Speicher für Zeropage
  189.         move.l    d0,ZeroSpeicher
  190.         beq    ErrorTotal2
  191.         move.l    d0,d1
  192.         add.l    #ZeroPage,d0
  193.         move.l    d0,ZeroPageMem
  194.         move.l    ZeroPageMem,a4
  195.         move.l    ThisTask(a6),a0
  196.         move.l    a0,OwnTask(a4)
  197.         move.l    d2,WBMessage(a4)
  198.         move.l    d3,ReturnCode(a4)
  199.         move.l    VBRreg,a0
  200.         move.l    $bc(a0),OLDTRAP15(a4)
  201.         move.l    a7,BaseStack(a4)
  202.         move.l    d1,d7
  203.         lea    ConName(pc),a0
  204.         moveq.l #-1,d0
  205.                 lea    IORequest(a4),a1
  206.                 moveq.l #0,d1
  207.                 CALL    OpenDevice
  208.                 tst.l   d0
  209.                 bne     ErrorTotal
  210.                 move.l  (IO_DEVICE+IORequest)(a4),ConDevice(a4)
  211.         move.l    d7,d1
  212.         move.l    d1,FileLocker(a4)
  213.         add.l    #FindBufferR,d1
  214.         move.l    d1,FindBuffer(a4)
  215.         add.l    #MaskBufferR-FindBufferR,d1
  216.         move.l    d1,MaskBuffer(a4)
  217.         add.l    #OutDeviceR-MaskBufferR,d1
  218.         move.l    d1,a0
  219.         move.l    d1,OutDevice(a4)
  220.         add.l    #VariableBuff-OutDeviceR,d1
  221.         move.l    d1,VarBuff(a4)
  222.         add.l    #CommandHist-VariableBuff,d1
  223.         move.l    d1,HistoryMem(a4)
  224.         move.l    d1,HistPointStart(a4)
  225.         move.l    d1,HistPointAct(a4)
  226.         addq.l    #1,d1
  227.         move.l    d1,HistPointEnd(a4)
  228.         add.l    #HistorySize-1,d1
  229.         move.l    d1,HistoryEnd(a4)
  230.  
  231.         lea    OutDeviceTx(pc),a1
  232.         move.w    #$04,d0
  233. InstallNames    move.b    (a1)+,(a0)+        ;prt:
  234.         dbf    d0,InstallNames
  235.         ;Test for Batchfile
  236.         move.l    RegisterSave+32,a0
  237.         move.w    #8000,TextWidth2(a4)    ;Nur damit GetTextString geht
  238. LetCross    tst.b    (a0)
  239.         beq    NoBatchFile
  240. RetryOption    cmp.b    #" ",(a0)
  241.         bne.s    GotChar
  242.         addq.l    #1,a0
  243.         bra.s    LetCross
  244. GotChar        cmp.b    #"-",(a0)    ;Test for options
  245.         bne    Normalmake
  246. OtherOptions    addq.l    #1,a0
  247.         tst.b    (a0)
  248.         beq    NoBatchFile
  249.         cmp.b    #"b",(a0)
  250.         beq    ScreenToBackOpt
  251.         cmp.b    #"p",(a0)
  252.         beq    Dontpatch
  253.         cmp.b    #"f",(a0)
  254.         beq.s    ParseFont
  255.         cmp.b    #"P",(a0)
  256.         beq    NewPosition
  257.         cmp.b    #"S",(a0)
  258.         beq    NewSize
  259.         cmp.b    #"s",(a0)
  260.         beq    PubScreen
  261.         cmp.b    #"d",(a0)
  262.         beq    UseDisLib
  263.         cmp.b    #"-",(a0)
  264.         beq.s    OtherOptions
  265.         cmp.b    #" ",(a0)
  266.         bne    NoBatchFile    ;Option Error=> Ignore Rest!
  267.         addq.l    #1,a0
  268.         tst.b    (a0)
  269.         beq    NoBatchFile
  270.         bra.s    RetryOption
  271.  
  272. ParseFont    Push    d0-d7/a1-a6
  273.         clr.b    NewFontName(a4)
  274.         move.l    a0,-(sp)
  275.         moveq.l    #1,d5
  276.         move.l    a0,a1
  277.         bsr    GetTextString
  278.         beq    WrongOp
  279.         cmp.w    #40,d0
  280.         bcc    WrongOp
  281.         lea    NewFontName(a4),a3
  282.         bsr    InsertText
  283. WrongOp        move.l    (sp)+,a0
  284.         add.l    d5,a0
  285.         move.l    a0,-(sp)
  286.         moveq.l    #0,d5
  287.         move.l    a0,a1
  288.         bsr    GetDezNum
  289.         move.w    d0,NewFontSize(a4)
  290.         move.l    (sp)+,a0
  291.         add.l    d5,a0
  292.         Pull    d0-d7/a1-a6
  293.         bra    RetryOption
  294.  
  295.  
  296. FirstChar    cmp.b    #" ",(a0)
  297.         bne.s    FCharFound
  298.         tst.b    (a0)
  299.         beq.s    FCharFound
  300.         addq    #1,a0
  301.         bra.s    FirstChar
  302. FCharFound    rts
  303.  
  304. NewPosition    Push    d0-d7/a1-a6
  305.         addq    #1,a0
  306.         bsr    FirstChar
  307.         move.l    a0,-(sp)
  308.         moveq.l    #0,d5
  309.         move.l    a0,a1
  310.         bsr    GetDezNum
  311.         move.w    d0,WindowDefs
  312.         move.w    d0,WindowDefs2
  313.         move.l    (sp)+,a0
  314.         add.l    d5,a0
  315.         bsr    FirstChar
  316.         move.l    a0,-(sp)
  317.         moveq.l    #0,d5
  318.         move.l    a0,a1
  319.         bsr    GetDezNum
  320.         move.w    d0,WindowDefs+2
  321.         move.w    d0,WindowDefs2+2
  322.         move.l    (sp)+,a0
  323.         add.l    d5,a0
  324.         Pull    d0-d7/a1-a6
  325.         bra    RetryOption
  326.  
  327. NewSize        Push    d0-d7/a1-a6
  328.         addq    #1,a0
  329.         bsr    FirstChar
  330.         move.l    a0,-(sp)
  331.         moveq.l    #0,d5
  332.         move.l    a0,a1
  333.         bsr    GetDezNum
  334.         move.w    d0,WindowDefs+4
  335.         move.l    (sp)+,a0
  336.         add.l    d5,a0
  337.         bsr    FirstChar
  338.         move.l    a0,-(sp)
  339.         moveq.l    #0,d5
  340.         move.l    a0,a1
  341.         bsr    GetDezNum
  342.         move.w    d0,WindowDefs+6
  343.         move.l    (sp)+,a0
  344.         add.l    d5,a0
  345.         Pull    d0-d7/a1-a6
  346.         bra    RetryOption
  347.  
  348.  
  349. PubScreen    Push    d0-d7/a1-a6
  350.         clr.b    PubName(a4)
  351.         move.l    a0,-(sp)
  352.         moveq.l    #1,d5
  353.         move.l    a0,a1
  354.         bsr    GetTextString
  355.         beq    WrongOps
  356.         cmp.w    #40,d0
  357.         bcc    WrongOps
  358.         lea    PubName(a4),a3
  359.         bsr    InsertText
  360. WrongOps    move.l    (sp)+,a0
  361.         add.l    d5,a0
  362.         Pull    d0-d7/a1-a6
  363.         bra    LetCross
  364.  
  365. ScreenToBackOpt move.l    WindowFlags,d0
  366.         and.l    #~ACTIVATE,d0
  367.         move.l    d0,WindowFlags
  368.         bra    OtherOptions
  369. Dontpatch    move.w    #1,PatchFlag(a4)
  370.         lea    PatchitFlag(pc),a1
  371.         or.w    #CHECKED,(a1)
  372.         bra    OtherOptions
  373. UseDisLib    lea    UseDisFlag(pc),a1
  374.         eor.w    #CHECKED,(a1)
  375.         bsr    SwitchDislib
  376.         bra    OtherOptions
  377. SwitchDislib    RSave
  378.         lea    UseDisFlag(pc),a1
  379.         move.w    (a1),d0
  380.         and.w    #CHECKED,d0
  381.         bne.s    DisUse
  382. OtherOptionsx    tst.l    DislibBase(a4)
  383.         beq.s    DunnoClose
  384.         move.l    DislibBase(a4),a1
  385.         CALL    CloseLibrary
  386. DunnoClose    clr.l    DislibBase(a4)
  387.         lea    UseDisFlag(pc),a1
  388.         and.w    #$ffff-CHECKED,(a1)
  389.         lea    ConfigVal(pc),a1
  390.         and.w    #~ITEMENABLED,(a1)
  391.         RLoad
  392.         rts
  393. DisUse        move.l    a0,-(sp)
  394.         lea    DisLibText(pc),a1
  395.         move.l    $0004.w,a6
  396.         moveq    #2,d0
  397.         CALL    OpenLibrary
  398.         move.l    (sp)+,a0
  399.         tst.l    d0
  400.         beq.s    OldVersion
  401.         move.l    d0,DislibBase(a4)
  402.         move.l    d0,a6
  403.         CALL     GetDisPrefs
  404.         lea    DisStruct(a4),a3
  405.         move.l    d0,dl_InFlags(a3)
  406.         lea    ConfigVal(pc),a1
  407.         or.w    #ITEMENABLED,(a1)
  408.         RLoad
  409.         rts
  410. OldVersion    move.l    a0,-(sp)
  411.         lea    DisLibText(pc),a1
  412.         move.l    $0004.w,a6
  413.         moveq    #1,d0
  414.         CALL    OpenLibrary
  415.         move.l    (sp)+,a0
  416.         tst.l    d0
  417.         beq.s    OtherOptionsx
  418.         move.l    d0,DislibBase(a4)
  419.         lea    DisStruct(a4),a3
  420.         move.l    #MyDisPrefs,dl_InFlags(a3)
  421.         RLoad
  422.         rts
  423.         
  424.  
  425. Normalmake    move.l    FindBuffer(a4),a3
  426.         clr.b    (a3)
  427.         moveq.l    #0,d5
  428.         move.l    a0,a1
  429.         bsr    GetTextString
  430.         beq    NoBatchFile
  431.         cmp.w    #80,d0
  432.         bcc    NoBatchFile
  433.         bsr    InsertText
  434.         move.l    FindBuffer(a4),a3
  435.         tst.b    (a3)
  436.         beq.s    NoBatchFile
  437.         move.l    a3,BatchFile(a4)
  438.  
  439. NoBatchFile    move.w    #1,StatusLine    ;jetzt kann der andere Proc weg!
  440.  
  441.  
  442. Skippy        move.l    $0004.w,a6
  443.         lea    IntuitionName(pc),a1
  444.         moveq.l    #36,d0
  445.         CALL    OpenLibrary
  446.         tst.l    d0
  447.         beq.s    OpenOlder
  448.         move.w    #1,V36OK(a4)
  449.         bra.s    V36Done
  450.  
  451. OpenOlder    lea    IntuitionName(pc),a1
  452.         moveq.l    #0,d0
  453.         CALL    OpenLibrary
  454. V36Done        move.l    d0,IntBase(a4)
  455.  
  456.         bsr    OpenDisplay
  457.  
  458.         move.l    $0004.w,a6
  459.         lea    DosName(pc),a1
  460.         moveq.l    #0,d0
  461.         CALL    OpenLibrary
  462.         move.l    d0,DosBase(a4)
  463.  
  464.         move.l    #StackBase+64,RoundStackPos(a4)
  465.  
  466.         bsr    InitVektors
  467.         FlushCursor
  468.         move.b    #$0c,d0
  469.         bsr    Print
  470.         lea    EinschaltTxt(pc),a2
  471.         bsr    PrintText
  472.  
  473.         tst.l    BatchFile(a4)
  474.         beq.s    NoOpenBatch
  475.         bset    #2,SetError(a4)
  476.         move.l    DosBase(a4),a6
  477.         move.l    FindBuffer(a4),d1
  478.         move.l    #MODE_OLDFILE,d2
  479.         CALL    Open
  480.         tst.l    d0
  481.         beq.s    NoOpenBatch
  482.         move.l    d0,a1
  483.         CALL    Close
  484.         bclr    #2,SetError(a4)
  485.  
  486. NoOpenBatch    move.b    SetError(a4),d6
  487.         beq.s    NoErrorsSet
  488.         lea    ErrorsOccured(pc),a2
  489.         bsr    PrintText
  490.         ror.b    #1,d6
  491.         bcc.s    SkipEE1
  492.         lea    StartError1(pc),a2
  493.         bsr    PrintText
  494.         lea    NewFontName(a4),a2
  495.         bsr    PrintText
  496.  
  497. SkipEE1        ror.b    #1,d6
  498.         bcc.s    SkipEE2
  499.         lea    StartError2(pc),a2
  500.         bsr    PrintText
  501.         lea    NewFontName(a4),a2
  502.         bsr    PrintText
  503.  
  504. SkipEE2        ror.b    #1,d6
  505.         bcc.s    SkipEE3
  506.         lea    StartError3(pc),a2
  507.         bsr    PrintText
  508.         move.l    FindBuffer(a4),a2
  509.         bsr    PrintText
  510.  
  511. SkipEE3        ror.b    #1,d6
  512.         bcc.s    SkipEE4
  513.         lea    StartError4(pc),a2
  514.         bsr    PrintText
  515. SkipEE4        
  516.  
  517.         move.b    #$0a,d0
  518.         bsr    Print
  519.  
  520. NoErrorsSet    or.l    #SIGBREAKF_CTRL_C,SignalMask(a4)
  521.         tst.l    BatchFile(a4)
  522.         beq    RegisterComm
  523.         
  524.         move.l    DosBase(a4),a6
  525.         move.l    FindBuffer(a4),d1
  526.         move.l    #MODE_OLDFILE,d2
  527.         CALL    Open
  528.         move.l    d0,BatchHandle(a4)
  529.         beq    RegisterComm
  530.  
  531.         ;*** Mainroutine ***
  532.  
  533. EmptyLine    move.l    WDRastPort(a4),a5
  534.         tst.w    PrinterFlag(a4)
  535.         beq.s    NOCLOSE
  536.         bmi.s    NOCLOSE
  537.         bsr    PrExecute
  538. NOCLOSE        clr.w    PrinterFlag(a4)
  539.         bsr    PrintReturn
  540.         move.b    #".",d0
  541.         bsr    Print
  542. ReKey        move.l    BaseStack(a4),a7
  543.         tst.l    BatchHandle(a4)
  544.         beq.s    NoBatch
  545.         move.l    BatchHandle(a4),d1
  546.         move.l    FindBuffer(a4),d2
  547.         moveq.l    #1,d3
  548.         move.l    DosBase(a4),a6
  549.         CALL    Read
  550.         move.l    d0,d1
  551.         move.l    FindBuffer(a4),a0
  552.         move.b    (a0),d0
  553.         tst.l    d1
  554.         bne.s    DoBatch
  555.         move.l    BatchHandle(a4),d1
  556.         CALL    Close
  557.         clr.l    BatchHandle(a4)
  558. NoBatch        bsr    ExorCursor
  559.         bsr    WaitForKey
  560.         bsr    ExorCursor
  561. DoBatch        lea    SpecialFunkt(pc),a0
  562.         bsr    SearchCodea0
  563.         beq.s    NoSpecial
  564.         lea    SpecialJMP(pc),a0
  565.         jmp    (a0,d1)
  566. NoSpecial    bsr    PrintInsPoss
  567.         bra.s    ReKey
  568.  
  569. SpecialFunkt    dc.b    $0a,$90,$91,$81,$82,$94,$95,$83,$84,$9c,0    ;SpecialTasten
  570.         even
  571. SpecialJMP    bra.w    LineAuswertung
  572.         bra.w    CursorUpSpecial
  573.         bra.w    CursorDnSpecial
  574.         bra.w    BlaetternUp
  575.         bra.w    BlaetternDn
  576.         bra.w    JsrDissIn
  577.         bra.w    JsrDissOut
  578.         bra.w    HistUP
  579.         bra.w    HistDN
  580.         bra.w    ChangeVMode
  581.  
  582. HistDN        move.l    HistPointAct(a4),a0
  583. ScanForw    bsr    IncIt
  584.         cmp.l    HistPointEnd(a4),a0
  585.         beq    ReKey
  586.         tst.b    (a0)
  587.         bne.s    ScanForw
  588.         bra    BothHister
  589.  
  590. HistUP        move.l    HistPointAct(a4),a0
  591. DoScanBack    cmp.l    HistPointStart(a4),a0
  592.         beq    ReKey
  593.         cmp.l    HistoryMem(a4),a0
  594.         bne.s    CanScan
  595.         move.l    HistoryEnd(a4),a0
  596. CanScan        subq.l    #1,a0
  597.         tst.b    (a0)
  598.         bne    DoScanBack
  599. BothHister    move.l    a0,HistPointAct(a4)
  600.         bsr    IncIt
  601.         move.l    a0,-(sp)
  602.         bsr    Return
  603.         bsr    ClearRight
  604.         move.b    #".",d0
  605.         bsr    Print
  606.         move.l    (sp)+,a0
  607.         cmp.l    HistPointEnd(a4),a0
  608.         beq    ReKey
  609. HistPLoop    move.b    (a0),d0
  610.         beq.s    PrintHiste
  611.         bsr    Print
  612.         bsr    IncIt
  613.         bra.s    HistPLoop
  614. PrintHiste    bsr    TextFlush
  615.         bsr    Return
  616.         bsr    CursorRight
  617.         bsr    TextFlush
  618.         bra    ReKey
  619.  
  620. BlaetternUp    bsr    GetScrollCodeUp
  621.         lea    BlaetterJMP(pc),a0
  622.         moveq.l    #-1,d4
  623.         jmp    (a0,d1)
  624.  
  625. CursorUpSpecial    move.w    Y0Pos(a4),d4
  626.         cmp.w    rp_cp_y(a5),d4
  627.         bne    NoSpecial
  628.         bsr    Print
  629.         bsr    GetScrollCodeUp
  630.         moveq.l    #-1,d4    ;Sign For Up
  631. OtherSCR    move.w    rp_cp_x(a5),-(sp)
  632.         lea    ScrollJMP(pc),a0
  633.         jsr    (a0,d1)
  634.         bsr    TextFlush
  635.         move.w    (sp)+,rp_cp_x(a5)
  636.         FlushCursor
  637.         bra    ReKey
  638.  
  639. GetScrollCodeUp    moveq.l    #1,d5
  640.         moveq.l    #0,d4
  641.         move.l    TextScreen(a4),a1
  642. TryAnother    move.b    (a1,d5),d0
  643.         lea    ScrollCodes(pc),a0
  644.         bsr    SearchCodea0
  645.         bne.s    ScrollCodeFound
  646. TryAnother1    add.w    TextWidth(a4),d5
  647.         addq    #1,d4
  648.         cmp.w    TextHeight(a4),d4
  649.         bcs.s    TryAnother
  650.         move.l    (sp)+,d0
  651.         bra    ReKey
  652. ScrollCodeFound    move.l    d5,-(sp)
  653.         addq    #1,d5
  654.         bsr    TestAdressGueltig
  655.         move.l    (sp)+,d5
  656.         tst.l    d0
  657.         bne.s    TryAnother1
  658.         subq    #1,d5
  659.         add.l    d5,a1
  660.         moveq    #2,d5
  661.         rts
  662.  
  663. BlaetternDn    bsr    GetScrollCodeDn
  664.         lea    BlaetterJMP(pc),a0
  665.         moveq    #1,d4
  666.         jmp    (a0,d1)
  667.  
  668. CursorDnSpecial    move.w    rp_cp_y(a5),d4
  669.         add.w    Y0Rest(a4),d4
  670.         cmp.w    maxY(a4),d4
  671.         bne    NoSpecial
  672.         bsr    Print
  673.         bsr    GetScrollCodeDn
  674.         moveq.l    #1,d4    ;Sign for Down
  675.         bra    OtherSCR
  676.  
  677. GetScrollCodeDn    moveq.l    #0,d5
  678.         move.w    TextHeight(a4),d5
  679.         subq.l    #1,d5
  680.         mulu    TextWidth(a4),d5
  681.         addq    #1,d5
  682.         moveq.l    #0,d4
  683.         move.l    TextScreen(a4),a1
  684. TryAnother2    move.b    (a1,d5),d0
  685.         lea    ScrollCodes(pc),a0
  686.         bsr    SearchCodea0
  687.         bne.s    ScrollCodeF2
  688. TryAnother3    sub.w    TextWidth(a4),d5
  689.         addq    #1,d4
  690.         cmp.w    TextHeight(a4),d4
  691.         bcs.s    TryAnother2
  692.         move.l    (sp)+,d0
  693.         bra    ReKey
  694. ScrollCodeF2    move.l    d5,-(sp)
  695.         addq    #1,d5
  696.         bsr    TestAdressGueltig
  697.         move.l    (sp)+,d5
  698.         tst.l    d0
  699.         bne.s    TryAnother3
  700.         subq    #1,d5
  701.         add.l    d5,a1
  702.         moveq    #2,d5
  703.         rts
  704.  
  705. GetAMemAdr    suba.l    a3,a3
  706.         cmp.b    #":",d0
  707.         bne    OverParse
  708.         addq    #1,d5
  709.         bsr    GetHexAdress
  710.         move.l    d0,a3
  711.         move.w    rp_cp_x(a5),d5
  712.         divu    FontX(a4),d5
  713.         bsr    GetHexAdress
  714.         lsl.l    #8,d0
  715.         lsl.l    #8,d0
  716.         move.l    d0,d4
  717.         bsr    GetHexAdress
  718.         move.w    d0,d4
  719.         move.l    d4,a2
  720.         moveq    #0,d7
  721.         bra    Formem
  722. OverParse    move.w    rp_cp_x(a5),d5
  723.         divu    FontX(a4),d5
  724.         bsr    GetHexAdress
  725.         move.l    d0,a0
  726.         bra    DochM
  727.  
  728. ChangeVMode    bsr    SearchFirstChar
  729.         beq    ReKey
  730.         cmp.b    #",",d0
  731.         beq    SwitchToMem
  732.         cmp.b    #":",d0
  733.         bne    SwitchToDiss
  734.         addq    #1,d5
  735.         bsr    GetHexAdress
  736.         move.l    d0,a0
  737.         bra    LikeOtherDXX
  738. SwitchToMem    addq    #1,d5
  739.         bsr    GetHexAdress
  740.         move.l    d0,a0
  741.         bra    DochM
  742. SwitchToDiss    move.w    rp_cp_x(a5),d5
  743.         divu    FontX(a4),d5
  744.         bsr    GetHexAdress
  745.         move.l    d0,a0
  746.         bra    LikeOtherDXX
  747.         
  748.  
  749. JsrDissIn    bsr    SearchFirstChar
  750.         beq    ReKey
  751.         cmp.b    #",",d0
  752.         bne    GetAMemAdr
  753.         addq    #1,d5
  754.         bsr    GetHexAdress
  755.         move.l    d0,a3
  756.         move.w    #DOpPos,d5
  757.         bsr    SearchNextChar
  758.         beq    ReKey
  759.         cmp.b    #"#",d0
  760.         bne.s    NormNum
  761.         addq    #1,d5
  762. NormNum        cmp.b    #"-",d0
  763.         bne.s    PosNum
  764.         addq    #1,d5
  765.         moveq.l    #0,d0
  766.         bsr    GetHexNum
  767.         neg.l    d0
  768.         bra.s    NegNum
  769. PosNum        moveq.l    #0,d0
  770.         bsr    GetHexNum
  771. NegNum        move.l    d0,a2
  772.         bsr    SearchNextChar
  773.         cmp.b    #"(",d0
  774.         bne.s    EhKlar
  775.         addq    #1,d5
  776.         bsr    SearchNextChar
  777.         cmp.b    #"p",d0
  778.         beq.s    EhKlar
  779.         cmp.b    #"a",d0
  780.         bne.s    EhKlar
  781.         addq    #1,d5
  782.         bsr    GetHexNum
  783.         and.l    #$07,d0
  784.         lsl.w    #2,d0
  785.         lea    RegisterSave(pc),a0
  786.         add.l    32(a0,d0),a2
  787.         bsr    SearchNextChar
  788.         cmp.b    #",",d0
  789.         bne.s    EhKlar
  790.         addq    #1,d5
  791.         bsr    SearchNextChar
  792.         move.l    d0,d4
  793.         addq    #1,d5
  794.         bsr    GetHexNum
  795.         and.l    #$07,d0
  796.         lsl.w    #2,d0
  797.         cmp.b    #"a",d4
  798.         beq.s    AdressJsr
  799.         add.l    #8*4,d0
  800. AdressJsr    add.l    (a0,d0),a2
  801. EhKlar        moveq    #-1,d7
  802. Formem        move.l    RoundStackPos(a4),a0
  803.         move.l    a3,-(a0)
  804.         cmp.l    #StackBase,a0
  805.         bne.s    BaseNotReached
  806.         move.l    #StackBase+64,a0
  807. BaseNotReached    move.l    a0,RoundStackPos(a4)
  808.         move.l    a0,d1
  809.         sub.l    #StackBase,d1
  810.         lsr.w    #2,d1
  811.         move.l    StackKind(a4),d2
  812.         bclr    d1,d2
  813.         tst    d7
  814.         bmi.s    KeepCleard
  815.         bset    d1,d2
  816. KeepCleard    move.l    d2,StackKind(a4)
  817.         move.l    a2,d0
  818.         and.l    #$fffffffe,d0
  819.         move.l    d0,a0
  820.         cmp.b    #"b",DInPos(a1)
  821.         beq.s    LikeOtherD
  822.         cmp.b    #"j",DInPos(a1)
  823.         beq.s    LikeOtherDXX
  824. DochM        move.w    #$0c,d0
  825.         bsr    Print
  826.         move.l    a0,d1
  827.         and.l    #$fffffffe,d1
  828.         move.l    d1,a0
  829.         moveq.l    #0,d0
  830.         move.w    TextHeight(a4),d0
  831.         subq    #1,d0
  832.         lsl.w    #4,d0
  833.         add.l    d0,d1
  834.         move.l    d1,OutPutStop(a4)
  835. PrintNextDD    bsr    PrintMemLine
  836.         bsr    PrintReturn
  837.         cmp.l    OutPutStop(a4),a0
  838.         bcs.s    PrintNextDD
  839.         bsr    TextFlush
  840.         move.w    #MInPos,d0
  841.         bsr    SetCursorX
  842.         bra.s    LikeOtherD2
  843. LikeOtherD    cmp.b    #".",(DInPos+3)(a1)
  844.         bne.s    DochM
  845. LikeOtherDXX    bsr    OneDissPage
  846.         bsr    TextFlush
  847.         move.w    #DInPos,d0
  848.         bsr    SetCursorX
  849. LikeOtherD2    FlushCursor
  850.         move.w    Y0Pos(a4),rp_cp_y(a5)
  851.         bra    ReKey
  852.  
  853. JsrDissOut    move.l    RoundStackPos(a4),a1
  854.         cmp.l    #StackBase+64,a1
  855.         bcs.s    KeepJsrDiss
  856.         move.l    #StackBase,a1
  857. KeepJsrDiss    tst.l    (a1)
  858.         beq    ReKey
  859.         move.l    (a1),a0
  860.         move.l    a1,d0
  861.         clr.l    (a1)+
  862. DoView        sub.l    #StackBase,d0
  863.         lsr.w    #2,d0
  864.         move.l    a1,RoundStackPos(a4)
  865.         move.l    StackKind(a4),d1
  866.         btst.l    d0,d1
  867.         beq.s    LikeOtherDXX
  868.         bra    DochM
  869.  
  870.  
  871. LineAuswertung    bsr    SearchFirstChar
  872.         beq    EmptyLine
  873.         bsr    InsertHistLine
  874. SecondAuswert    lea    BefehlsCodes(pc),a0
  875.         bsr    SearchCodea0
  876.         beq    FrageZeichen
  877.         addq    #1,d5
  878.         lea    BefehlsJMP(pc),a0
  879.         jmp    (a0,d1)
  880.  
  881. ScrollCodes    dc.b    ":;,",0
  882.         even
  883. ScrollJMP    bra.w    SMemory
  884.         bra.w    SASCII
  885.         bra.w    SDizzy
  886.  
  887. BlaetterJMP    bra.w    BMemory
  888.         bra.w    BASCII
  889.         bra.w    BDizzy
  890.  
  891. BefehlsCodes    dc.b    "x^$#%&m?i:dwflLs,aoDtgr'c<>VBTAFSCbOpPeMh",0
  892.         even
  893. BefehlsJMP    bra.w    EndeDesPrg
  894.         bra.w    EvalVar
  895.         bra.w    CalcExpression
  896.         bra.w    CalcExpression
  897.         bra.w    CalcExpression
  898.         bra.w    CalcExpression
  899.         bra.w    MemoryBefehl
  900.         bra.w    CalcExpression2
  901.         bra.w    ASCIIOutput
  902.         bra.w    ChangeMemory
  903.         bra.w    DisAssemble
  904.         bra.w    WriteASCII
  905.         bra.w    FindSomething
  906.         bra.w    LoadFile
  907.         bra.w    LoadFile
  908.         bra.w    SaveFile
  909.         bra.w    Assemble
  910.         bra.w    InstAssembler
  911.         bra.w    Occupy
  912.         bra.w    DirectoryLoad
  913.         bra.w    Transfer
  914.         bra.w    GotoCommand
  915.         bra.w    RegisterComm
  916.         bra.w    GetRegister
  917.         bra.w    CompareSth
  918.         bra.w    DiskLoad
  919.         bra.w    DiskSave
  920.         bra.w    ChangeDevice
  921.         bra.w    BreakCommand
  922.         bra.w    TraceCommand
  923.         bra.w    AllocSegment
  924.         bra.w    FreeSegment
  925.         bra.w    SegmentList
  926.         bra.w    BlockCheckSumm
  927.         bra.w    BootCheckSumm
  928.         bra.w    OutPutDevice
  929.         bra.w    PrintThemOut
  930.         bra.w    PrintThatText
  931.         bra.w    ExamineTask
  932.         bra.w    CheckFreeMem
  933.         bra.w    ShowHistory
  934.  
  935. ShowHistory    move.l    HistPointStart(a4),a0
  936. HistL1        cmp.l    HistPointEnd(a4),a0
  937.         beq    ReKey
  938.         bsr    TestBreak
  939.         move.b    (a0),d0
  940.         beq    CNEXT
  941.         bsr    Print
  942.         bsr    IncIt
  943.         bra.s    HistL1
  944. CNEXT        move.b    #$0a,d0
  945.         bsr    Print
  946.         move.b    #".",d0
  947.         bsr    Print
  948.         bsr    IncIt
  949.         bra    HistL1
  950.  
  951. InsertHistLine    RSave
  952.         move.w    TextWidth2(a4),d7
  953. FindSize    subq    #1,d7
  954.         cmp.b    #" ",(a1,d7)
  955.         dbne    d7,FindSize
  956.         addq    #2,d7
  957.         move.l    HistPointEnd(a4),a3
  958. CopH        move.b    (a1,d5),d0
  959.         bsr    PutHistByte
  960.         addq    #1,d5
  961.         cmp.w    d7,d5
  962.         bcs.s    CopH
  963.         move.l    a3,HistPointAct(a4)
  964.         clr.l    d0
  965.         bsr    PutHistByte
  966.         move.l    a3,HistPointEnd(a4)
  967.         RLoad
  968.         rts
  969.  
  970. PutHistByte    cmp.l    HistoryEnd(a4),a3
  971.         bne.s    NoOverHist
  972.         move.l    HistoryMem(a4),a3
  973. NoOverHist    cmp.l    HistPointStart(a4),a3
  974.         beq.s    PushOnStart
  975. GotHist        move.b    d0,(a3)+
  976.         rts
  977. PushOnStart    move.l    a3,a0
  978. SeekOn        bsr    IncIt
  979.         tst.b    (a0)
  980.         bne.s    SeekOn
  981.         move.l    a0,HistPointStart(a4)
  982.         bra.s    GotHist
  983.  
  984. IncIt        lea    1(a0),a0
  985.         cmp.l    HistoryEnd(a4),a0
  986.         bcs.s    NoOverHist2
  987.         move.l    HistoryMem(a4),a0
  988. NoOverHist2    rts
  989.  
  990.         
  991.         ; *** Calculation-Befehle ***
  992.  
  993. CalcExpression    subq    #1,d5
  994. CalcExpression2    bsr    CalcRoutine
  995.  
  996. ZuweisungOut    bsr    PrintReturn
  997.         move.b    #"$",d0
  998.         bsr    Print
  999.         move.l    RechenSpeicher(a4),d0
  1000.         bsr    PrintLong
  1001.         move.b    #"=",d0
  1002.         bsr    Print
  1003.         move.l    RechenSpeicher(a4),d0
  1004.         bsr    PrintDezimal
  1005.         move.b    #"=",d0
  1006.         bsr    Print
  1007.         move.b    #"%",d0
  1008.         bsr    Print
  1009.         move.l    RechenSpeicher(a4),d0
  1010.         bsr    PrintBinaer32
  1011.         move.b    #"=",d0
  1012.         bsr    Print
  1013.         move.b    #$22,d0
  1014.         bsr    Print
  1015.         lea    RechenSpeicher(a4),a0
  1016.         moveq    #3,d4
  1017.         bsr    CharacLoop
  1018.         move.b    #$22,d0
  1019.         bsr    Print
  1020.         bra    EmptyLine
  1021.  
  1022. CalcRoutine    move.l    FileLocker(a4),a2;Buffer für die Berechnung
  1023.         move.b    #1,(a2)+
  1024. GetCalcStream    bsr    GetAnyExpression ;Stream umkopieren
  1025.         bsr    SearchNextChar
  1026.         bne.s    GetCalcStream
  1027.         move.b    #2,(a2)+
  1028.         move.l    FileLocker(a4),a0
  1029.         sub.l    a0,a2
  1030.         move.l    a2,d7        ;Laenge des Buffers
  1031.         moveq.l    #0,d0
  1032.         moveq.l    #0,d1
  1033.         moveq.l    #0,d2
  1034. CheckKlammer    move.b    (a0,d0),d2    ;Klammer Auf/Zu pruefen
  1035.         bne.s    StandardTok
  1036.         addq    #4,d0
  1037. StandardTok    cmp.b    #1,d2        ;=Klammer auf
  1038.         bne.s    NoKlOn
  1039.         addq    #1,d1
  1040. NoKlOn        cmp.b    #2,d2        ;=Klammer zu
  1041.         bne.s    NoKlOff
  1042.         subq    #1,d1
  1043. NoKlOff        addq    #1,d0
  1044.         cmp.w    d7,d0
  1045.         bcs.s    CheckKlammer
  1046.         tst.w    d1
  1047.         bne    FrageZeichen    ;Klammer Mismatch
  1048.  
  1049.         moveq.l    #0,d0
  1050.         moveq.l    #0,d3
  1051.         bsr    CalculateEx
  1052.         move.l    d3,RechenSpeicher(a4)    ;Ergebnis
  1053.         rts
  1054.  
  1055. CalculateEx    move.b    (a0,d0),d2
  1056.         bne.s    Anders
  1057.         addq    #1,d0
  1058.         bsr    GetValueD3
  1059.         bra.s    CalculateEx
  1060. Anders        cmp.b    #1,d2
  1061.         bne.s    ParseOn
  1062.         moveq.l    #0,d3
  1063.         moveq.w    #5,d2
  1064.         bra.s    IntoPlus
  1065. ParseOn        cmp.b    #2,d2
  1066.         bne.s    ParseOn1
  1067.         addq    #1,d0
  1068.         rts
  1069. ParseOn1    cmp.b    #3,d2        ;mal
  1070.         bne.s    ParseOn2
  1071.         move.l    d3,-(sp)
  1072.         bsr    GetNextVal
  1073.         move.l    (sp)+,d4
  1074.         movem.l    d0-d2/d4,-(sp)
  1075.         move.l    d4,d0
  1076.         move.l    d3,d1
  1077.         bsr    Mult32Bit
  1078.         bra.s    CalMDEnd
  1079.  
  1080. ParseOn2    cmp.b    #4,d2        ;geteilt
  1081.         bne.s    ParseOn3
  1082.         move.l    d3,-(sp)
  1083.         bsr    GetNextVal
  1084.         move.l    (sp)+,d4
  1085.         movem.l    d0-d2/d4,-(sp)
  1086.         move.l    d4,d0
  1087.         move.l    d3,d1
  1088.         bsr    Div32Bit
  1089. CalMDEnd    move.l    d0,d3
  1090.         movem.l    (sp)+,d0-d2/d4
  1091.         cmp.b    #5,(a0,d0)
  1092.         bcs.s    CalculateEx
  1093.         rts
  1094. IntoPlus    ;
  1095. ParseOn3    move.w    d2,-(sp)    ;+ and -
  1096.         move.l    d3,-(sp)
  1097.         bsr    GetNextVal
  1098.         cmp.b    #4,(a0,d0)
  1099.         beq.s    SpecC
  1100.         cmp.b    #3,(a0,d0)
  1101.         bne.s    NoSpecC
  1102. SpecC        bsr    CalculateEx
  1103.  
  1104.         move.l    (sp)+,d4
  1105.         move.w    (sp)+,d2
  1106.         cmp.b    #5,d2        ;plus
  1107.         bne.s    ParseOn4_
  1108.         add.l    d4,d3
  1109.         bra.s    BothMiPl_
  1110. ParseOn4_    cmp.b    #6,d2        ;minus
  1111.         bne    FrageZeichen    ;won't happen
  1112.         sub.l    d3,d4
  1113.         move.l    d4,d3
  1114. BothMiPl_    cmp.b    #2,-1(a0,d0)
  1115.         bne    CalculateEx
  1116.         rts
  1117.  
  1118. NoSpecC        move.l    (sp)+,d4
  1119.         move.w    (sp)+,d2
  1120.         cmp.b    #5,d2        ;plus
  1121.         bne.s    ParseOn4
  1122.         add.l    d4,d3
  1123.         bra.s    BothMiPl
  1124. ParseOn4    cmp.b    #6,d2        ;minus
  1125.         bne    FrageZeichen    ;won't happen
  1126.         sub.l    d3,d4
  1127.         move.l    d4,d3
  1128. BothMiPl    bra    CalculateEx
  1129.  
  1130. GetNextVal    addq    #1,d0
  1131.         move.b    (a0,d0),d2
  1132.         cmp.b    #1,d2
  1133.         bne.s    MustVal2
  1134.         bsr    CalculateEx
  1135. LikeMiBev    rts
  1136. MustVal2    tst.b    d2
  1137.         bne    FrageZeichen
  1138.         addq    #1,d0
  1139.         bsr    GetValueD3
  1140.         bra.s    LikeMiBev
  1141.  
  1142. GetValueD3    move.b    3(a0,d0),d3
  1143.         lsl.l    #8,d3
  1144.         move.b    2(a0,d0),d3
  1145.         lsl.l    #8,d3
  1146.         move.b    1(a0,d0),d3
  1147.         lsl.l    #8,d3
  1148.         move.b    (a0,d0),d3
  1149.         addq    #4,d0
  1150.         rts
  1151.  
  1152. PushD1ToRight    move.w    d7,d3
  1153. PushD1To    move.b    (a0,d3),1(a0,d3)
  1154.         subq    #1,d3
  1155.         cmp.w    d1,d3
  1156.         bcc.s    PushD1To
  1157.         addq.w    #1,d7
  1158.         rts
  1159.  
  1160. ;d0*d1 in 32 Bit
  1161. Mult32Bit    move.l    d0,d2
  1162.         move.l    d0,d3
  1163.         move.l    d1,d4
  1164.         swap    d3
  1165.         swap    d4
  1166.         mulu    d1,d0
  1167.         mulu    d3,d1
  1168.         mulu    d4,d2
  1169.         mulu    d4,d3
  1170.         swap    d0
  1171.         add.w    d1,d0
  1172.         moveq.l    #0,d4
  1173.         addx.l    d4,d3
  1174.         add.w    d2,d0
  1175.         addx.l    d4,d3
  1176.         swap    d0
  1177.         move.l    d0,d4
  1178.         rts
  1179.  
  1180. ;d0/d1 in 32 Bit
  1181. Div32Bit    tst.l    d1
  1182.         beq    FrageZeichen
  1183.         moveq.l    #0,d3
  1184.         divu    d1,d0
  1185.         bvc.s    V_Null
  1186.         move.l    d0,d2
  1187.         clr.w    d0
  1188.         swap    d0
  1189.         divu    d1,d0
  1190.         move.w    d0,d3
  1191.         move.w    d2,d0
  1192.         divu    d1,d0
  1193. V_Null        move.l    d0,d1
  1194.         swap    d0
  1195.         move.w    d3,d0
  1196.         swap    d0
  1197.         clr.w    d1
  1198.         swap    d1
  1199.         rts
  1200.  
  1201. GetAnyExpression    ;
  1202.         bsr    SearchNextChar
  1203.         cmp.b    #"0",d0
  1204.         bcs.s    NoNumberNN
  1205.         cmp.b    #"9"+1,d0
  1206.         bcc.s    NoNumberNN
  1207.         moveq.l    #0,d1
  1208.         bra.s    GetDezNumDo
  1209. NoNumberNN    lea    ZahlenFormate(pc),a0
  1210.         bsr    SearchCodea0
  1211.         beq    FrageZeichen
  1212.         addq    #1,d5
  1213.         cmp.w    #$1c,d1
  1214.         bcc.s    Arithmics
  1215. GetDezNumDo    lea    ZahlenJSR(pc),a0
  1216.         jsr    (a0,d1)
  1217.         clr.b    (a2)+
  1218. PutLong        move.b    d0,(a2)+
  1219.         lsr.l    #8,d0
  1220.         move.b    d0,(a2)+
  1221.         lsr.l    #8,d0
  1222.         move.b    d0,(a2)+
  1223.         lsr.l    #8,d0
  1224.         move.b    d0,(a2)+
  1225.         rts
  1226. Arithmics    sub.w    #$18,d1
  1227.         lsr.w    #2,d1
  1228.         move.b    d1,(a2)+
  1229.         rts
  1230.  
  1231. ZahlenFormate    dc.b    "#$%&'",$22,"^()*/+-",0
  1232.         even
  1233. ZahlenJSR    bra.w    GetDezNum
  1234.         bra.w    GetHexNum
  1235.         bra.w    GetBinNum
  1236.         bra.w    GetHexNumAdr
  1237.         bra.w    GetMax4Char
  1238.         bra.w    GetMax4Char
  1239.         bra.w    GetVarVal
  1240.  
  1241. GetHexNumAdr    bsr    GetHexNum
  1242.         and.l    #$fffffffe,d0
  1243.         move.l    d0,a0
  1244.         move.l    (a0),d0
  1245.         rts
  1246.  
  1247. GetMax4Char    moveq.l    #0,d4
  1248.         moveq.l    #4,d3
  1249. GetMax4C    bsr    SearchNextChar
  1250.         addq    #1,d5
  1251.         cmp.b    #$22,d0
  1252.         beq.s    Strover
  1253.         cmp.b    #"'",d0
  1254.         beq.s    Strover
  1255.         lsl.l    #8,d4
  1256.         move.b    d0,d4
  1257.         dbf    d3,GetMax4C
  1258.         bra    FrageZeichen
  1259. Strover        move.l    d4,d0
  1260.         rts        
  1261.  
  1262. GetVarVal    bsr    SearchNextChar
  1263.         addq    #1,d5
  1264.         ;bclr    #5,d0
  1265.         cmp.b    #"a",d0        ;Kleinbuchstaben: normale Variablen
  1266.         bcs.s    SpecialVars
  1267.         cmp.b    #"z"+1,d0
  1268.         bcc.s    SpecialVars
  1269.         subq    #1,d0
  1270. GetVald0    and.l    #$1f,d0
  1271.         lsl.l    #2,d0
  1272.         move.l    VarBuff(a4),a0
  1273.         add.l    d0,a0
  1274.         move.l    (a0),d0
  1275.         rts
  1276. SpecialVars    cmp.b    #"S",d0
  1277.         beq.s    SegmentVars
  1278.         cmp.b    #"L",d0
  1279.         beq.s    SegmentLens
  1280.         cmp.b    #"A",d0
  1281.         beq.s    AdrRegVars
  1282.         cmp.b    #"D",d0
  1283.         beq.s    DatRegVars
  1284.         bra    FrageZeichen
  1285. SegmentVars    bsr    SearchNextChar
  1286.         addq    #1,d5
  1287.         cmp.b    #"0",d0
  1288.         bcs    FrageZeichen
  1289.         cmp.b    #"8",d0
  1290.         bcc    FrageZeichen
  1291.         sub.w    #"0",d0
  1292.         lsl.w    #3,d0
  1293.         move.l    d7,-(sp)
  1294.         move.l    d0,d7
  1295.         move.l    AllocSegs(a4,d7.w),d0
  1296.         tst.l    AllocLength(a4,d7.w)
  1297.         bpl.s    NormalSegX
  1298.         addq.l    #1,d0
  1299.         lsl.l    #2,d0
  1300. NormalSegX    suba.l    a0,a0    ;keine Zuweisung moeglich
  1301.         move.l    (sp)+,d7
  1302.         rts
  1303. SegmentLens    bsr    SearchNextChar
  1304.         addq    #1,d5
  1305.         cmp.b    #"0",d0
  1306.         bcs    FrageZeichen
  1307.         cmp.b    #"8",d0
  1308.         bcc    FrageZeichen
  1309.         sub.w    #"0",d0
  1310.         lsl.w    #3,d0
  1311.         move.l    d7,-(sp)
  1312.         move.l    d0,d7
  1313.         move.l    AllocSegs(a4,d7.w),d0
  1314.         tst.l    AllocLength(a4,d7.w)
  1315.         bpl.s    NormalLenX
  1316.         lsl.l    #2,d0
  1317.         move.l    d0,a0
  1318.         move.l    -4(a0),d0
  1319.         subq    #8,d0    ;Len und NextHunk zaehlen nicht
  1320.         bra.s    SpecialAL
  1321. NormalLenX    move.l    AllocLength(a4,d7.w),d0
  1322. SpecialAL    suba.l    a0,a0    ;keine Zuweisung moeglich
  1323.         move.l    (sp)+,d7
  1324.         rts
  1325. AdrRegVars    ;    -ni-
  1326. DatRegVars    bra    FrageZeichen
  1327.  
  1328. EvalVar        bsr    GetVarVal
  1329.         move.l    a0,-(sp)
  1330.         bsr    SearchNextChar
  1331.         cmp.b    #"=",d0
  1332.         beq    Zuweisung
  1333. BackOneMore    subq    #1,d5
  1334.         bsr    SearchNextChar
  1335.         cmp.b    #"^",d0
  1336.         bne.s    BackOneMore
  1337.         addq    #1,d5
  1338.         bra    CalcExpression
  1339. Zuweisung    addq    #1,d5
  1340.         bsr    CalcRoutine
  1341.         move.l    (sp)+,a0
  1342.         move.l    d3,(a0)
  1343.         bra    ZuweisungOut
  1344.  
  1345.  
  1346.     ;******** Examine Task - based on ZZAs printtask *******
  1347.  
  1348. ExamineTask    move.l    $0004.w,a6
  1349.         bsr    SearchNextChar
  1350.         beq    FrageZeichen
  1351.         cmp.b    #$22,d0
  1352.         bne.s    HexedTask
  1353.         bsr    GetNameToBuffer
  1354.         move.l    FindBuffer(a4),a1
  1355.         CALL    Forbid
  1356.         CALL    FindTask
  1357.         move.l    D0,D4
  1358.         bne.s    DoPrintTask
  1359.         CALL    Permit
  1360. TaskUnfound    lea    TaskNotFound(pc),a0
  1361.         bsr    PrintText0
  1362.         bra    EmptyLine
  1363.  
  1364. HexedTask    bsr    GetHexAdress
  1365.         and.l    #$ffffffe,d0
  1366.         move.l    d0,d4
  1367.         CALL    Forbid
  1368. DoPrintTask    move.l    D4,A0
  1369.         bsr    GetTaskInfo
  1370.         CALL    Permit
  1371.         tst.l    d0
  1372.         bmi.s    TaskUnfound
  1373.         bra    EmptyLine
  1374.  
  1375. GetTaskInfo    RSave
  1376.         move.l    A0,A2
  1377.         lea    ProcessName(pc),a0
  1378.         cmp.b    #NT_PROCESS,LN_TYPE(a2)
  1379.         beq.s    TypeOKP
  1380.         cmp.b    #NT_TASK,LN_TYPE(A2)
  1381.         beq.s    TypeOKT
  1382.         RLoad
  1383.         moveq    #-1,D0
  1384.         rts
  1385.  
  1386. TypeOKT        lea    TaskNameTxt(pc),a0
  1387. TypeOKP        bsr    PrintText0
  1388.         move.l    LN_NAME(A2),a0
  1389.         move.l    a0,d0
  1390.         bne.s    HasName
  1391.         lea    Str_Unset(PC),A0
  1392. HasName        bsr    PrintText0
  1393.         lea    AdressTxt(pc),a0
  1394.         bsr    PrintText0
  1395.         move.l    A2,D0
  1396.         bsr    PrintLong
  1397.         lea    PriorityTxt(pc),a0
  1398.         bsr    PrintText0
  1399.         move.b    LN_PRI(A2),D0
  1400.         ext.w    D0
  1401.         ext.l    d0
  1402.         RSave
  1403.         bsr    PrintDezimal
  1404.         RLoad
  1405.  
  1406.         lea    Sign1(pc),a0
  1407.         bsr    PrintText0
  1408.         move.l    TC_SIGRECVD(A2),d0
  1409.         bsr    PrintBinaer32
  1410.         lea    Sign2(pc),a0
  1411.         bsr    PrintText0
  1412.         move.l    TC_SIGWAIT(A2),d0
  1413.         bsr    PrintBinaer32
  1414.         lea    Sign3(pc),a0
  1415.         bsr    PrintText0
  1416.         move.l    TC_SIGALLOC(A2),d0
  1417.         bsr    PrintBinaer32
  1418.         lea    Stack1(pc),a0
  1419.         bsr    PrintText0
  1420.         move.l    TC_SPUPPER(A2),d0
  1421.         bsr    PrintLong
  1422.         lea    Stack2(pc),a0
  1423.         bsr    PrintText0
  1424.         move.l    TC_SPREG(A2),d0
  1425.         bsr    PrintLong
  1426.         lea    Stack3(pc),a0
  1427.         bsr    PrintText0
  1428.         move.l    TC_SPLOWER(A2),d0
  1429.         bsr    PrintLong
  1430.  
  1431.     ;    CLI
  1432.         cmp.b    #NT_PROCESS,LN_TYPE(a2)
  1433.         bne.s    NoCLI
  1434.         move.l    pr_CLI(A2),D0
  1435.         beq.s    NoCLI
  1436.         lea    Str_Command(PC),A0
  1437.         bsr    PrintText0
  1438. PrtCmdL        move.l    D0,A0
  1439.         add.l    A0,A0
  1440.         lea    Str_None(PC),A1
  1441.         move.l    cli_CommandName(A0,A0.l),D0
  1442.         beq.s    HasNoCmd
  1443.         move.l    D0,A1
  1444.         add.l    A1,A1
  1445.         add.l    A1,A1
  1446. HasNoCmd    moveq    #0,D1
  1447.         move.b    (A1)+,D1
  1448.         bra.s    EnterPrtCNL
  1449. PrtCNL        move.b    (A1)+,d0
  1450.         bsr    Print
  1451. EnterPrtCNL    dbf    D1,PrtCNL
  1452.         move.b    #"'",d0
  1453.         bsr    Print
  1454.         bsr    PrintReturn
  1455. NoCLI        RLoad
  1456.         clr.l    d0
  1457.         rts
  1458.  
  1459. BLIINK        Push    d0-d1
  1460.         move.w    #$001,d0
  1461. Blink2        move.w    #$ffff,d1
  1462. Blink1        move.w    d1,$dff180
  1463.         dbf    d1,Blink1
  1464.         dbf    d0,Blink2
  1465.         Pull    d0-d1
  1466.         rts
  1467.  
  1468.     ;******** DISK - I/O  ************
  1469.  
  1470.         ;*** SAVE ***
  1471.  
  1472. SaveFile    bsr    GetNameToBuffer
  1473.         bsr    GetHexAdress
  1474.         move.l    d0,OutPutStart(a4)
  1475.         bsr    GetHexAdress
  1476.         sub.l    OutPutStart(a4),d0
  1477.         move.l    d0,OutPutStop(a4)
  1478.         bmi    FrageZeichen
  1479.         lea    SavingText(pc),a2
  1480.         bsr    PrintText
  1481.         move.l    OutPutStart(a4),d0
  1482.         bsr    PrintLong
  1483.         move.w    #"-",d0
  1484.         bsr    Print
  1485.         move.l    OutPutStop(a4),d0
  1486.         add.l    OutPutStart(a4),d0
  1487.         bsr    PrintLong
  1488.         bsr    TextFlush
  1489.         move.l    DosBase(a4),a6
  1490.         move.l    FindBuffer(a4),d1
  1491.         move.l    #MODE_NEWFILE,d2
  1492.         CALL    Open
  1493.         move.l    d0,d7
  1494.         beq    FileError
  1495.         move.l    d0,d1
  1496.         move.l    OutPutStart(a4),d2
  1497.         move.l    OutPutStop(a4),d3
  1498.         CALL    Write
  1499.         tst.l    d0
  1500.         bmi    FileError
  1501.         move.l    d7,d1
  1502.         CALL    Close
  1503.         bra    EmptyLine
  1504.  
  1505.         ;*** LOAD ***
  1506.  
  1507. LoadFile    cmp.b    #"d",(a1,d5)
  1508.         beq    AmDosLoad
  1509.         bsr    SearchNextChar
  1510.         beq    FrageZeichen
  1511.         bsr    GetNameToBuffer
  1512.         bsr    GetHexAdress
  1513.         move.l    d0,OutPutStart(a4)
  1514.         move.l    #$7fffffff,d6    ;load all
  1515.         bsr    SearchNextChar
  1516.         cmp.b    #"!",d0
  1517.         beq.s    UnControlledX
  1518.         move.l    OutPutStart(a4),a0
  1519.         bsr    TopsRoutine
  1520.         move.l    d0,d6
  1521. UnControlledX    move.l    OutPutStart(a4),d0
  1522.         lea    LoadingText(pc),a2
  1523.         bsr    PrintText
  1524.         moveq.l    #"S"-"A",d0
  1525.         bsr    GetVald0
  1526.         move.l    OutPutStart(a4),d0
  1527.         move.l    d0,(a0)
  1528.         bsr    PrintLong
  1529.         move.w    #"-",d0
  1530.         bsr    Print
  1531.         bsr    TextFlush
  1532.         move.l    DosBase(a4),a6
  1533.         move.l    FindBuffer(a4),d1
  1534.         move.l    #MODE_OLDFILE,d2
  1535.         CALL    Open
  1536.         move.l    d0,d7
  1537.         beq    FileNotFound
  1538.         move.l    d0,d1
  1539.         move.l    OutPutStart(a4),d2
  1540.         move.l    d6,d3
  1541.         CALL    Read
  1542.         tst.l    d0
  1543.         bmi    FileError
  1544.         add.l    OutPutStart(a4),d0
  1545.         move.l    d0,OutPutStop(a4)
  1546.         move.l    d7,d1
  1547.         move.l    FileLocker(a4),d2
  1548.         move.l    #1,d3
  1549.         CALL    Read
  1550.         tst.l    d0
  1551.         bmi    FileError
  1552.         move.l    d0,d6
  1553.         move.l    d7,d1
  1554.         CALL    Close
  1555.  
  1556.         moveq.l    #"E"-"A",d0
  1557.         bsr    GetVald0
  1558.         move.l    OutPutStop(a4),d0
  1559.         move.l    d0,(a0)
  1560.         bsr    PrintLong
  1561.         tst.l    d6
  1562.         bne    Incomplete
  1563.         bra    EmptyLine
  1564. Incomplete    lea    ExceededText(pc),a2
  1565.         bsr    PrintText
  1566.         bra    EmptyLine
  1567.  
  1568. FileNotFound    move.l    d7,d1
  1569.         CALL    Close
  1570.         lea    FILENFText(pc),a2
  1571. IntoFNF        bsr    PrintText
  1572.         bra    EmptyLine
  1573. FileError    move.l    d7,d1
  1574.         CALL    Close
  1575. DiskError2_    lea    FileErrText(pc),a2
  1576.         bra.s    IntoFNF
  1577.  
  1578. DiskError2    lea    FileErrText(pc),a2
  1579. StandardNumErr    bsr    PrintText
  1580.         move.l    d7,d0
  1581.         bsr    PrintDezimal
  1582.         bra    EmptyLine
  1583. CouldNotOpenDev    lea    OpenDevErr(pc),a2
  1584.         bra.s    StandardNumErr
  1585.  
  1586.  
  1587.         ;*** DIRECTORY ***
  1588.  
  1589. DirectoryLoad    move.l    FindBuffer(a4),a3
  1590.         clr.b    (a3)
  1591.         bsr    SearchNextChar
  1592.         beq.s    CurrentMake
  1593.         bsr    GetTextString
  1594.         beq.s    CurrentMake
  1595.         bsr    InsertText
  1596. CurrentMake    movem.l    d0-d7/a0-a2/a4-a6,-(sp)
  1597.         move.l    DosBase(a4),a6
  1598.         moveq.l    #ACCESS_READ,d2
  1599.         move.l    FindBuffer(a4),d1
  1600.         CALL    Lock
  1601.         move.l    d0,d7
  1602.         beq    DiskError2
  1603.         cmp.b    #":",-2(a3)
  1604.         beq.s    KeepSo
  1605.         cmp.b    #"/",-2(a3)
  1606.         beq.s    KeepSo
  1607.         move.b    #"/",-1(a3)
  1608.         clr.b    (a3)
  1609. KeepSo        move.l    d0,d1
  1610.         move.l    FileLocker(a4),d2
  1611.         CALL    Examine
  1612.         tst.l    d0
  1613.         beq    DirEnde
  1614.         move.l    FileLocker(a4),a0
  1615.         tst.l    4(a0)
  1616.         bmi.s    DirEnde2
  1617.         moveq.l    #0,d0
  1618.         bsr    PrintReturn
  1619. DirectoryLoop    suba.l    a0,a0
  1620.         move.l    d7,d1
  1621.         move.l    FileLocker(a4),d2
  1622.         CALL    ExNext
  1623.         tst.l    d0
  1624.         beq    DirEnde
  1625.         bsr    PrintDirLine
  1626.         bsr    TestBreak2
  1627.         bra.s    DirectoryLoop
  1628. DirEnde2    bsr    PrintReturn
  1629.         move.b    #" ",d0
  1630.         bsr    Print
  1631.         bsr    Print
  1632.         move.l    FindBuffer(a4),a2
  1633.         clr.b    -(a3)
  1634.         bsr    PrintText
  1635.         move.l    FileLocker(a4),a2
  1636.         bsr    OverName
  1637. DirEnde        move.l    d7,d1
  1638.         CALL    UnLock
  1639.         movem.l    (sp)+,d0-d7/a0-a2/a4-a6
  1640.         bra    EmptyLine
  1641.  
  1642. PrintDirLine    moveq.l    #0,d0
  1643.         move.b    #$05,d0    ;Clear rest of line
  1644.         bsr    Print
  1645.         move.b    #" ",d0
  1646.         bsr    Print
  1647.         bsr    Print
  1648.         move.l    FindBuffer(a4),a2
  1649.         bsr    PrintText
  1650.         move.l    FileLocker(a4),a2
  1651.         moveq.l    #0,d4
  1652. PrintDirName    move.b    8(a2,d4),d0
  1653.         beq.s    OverName
  1654.         bsr    Print
  1655.         addq    #1,d4
  1656.         bra.s    PrintDirName
  1657. OverName    bsr    TextFlush
  1658.         move.w    #DirAdress,d0
  1659.         bsr    SetCursorX
  1660.         FlushCursor
  1661.         tst.l    4(a2)
  1662.         bmi.s    ItsAFile
  1663.         lea    DirTXT(pc),a2
  1664.         bsr    PrintText
  1665.         bra.s    ThisWasDir
  1666. ItsAFile    move.b    124(a2),d1
  1667.         bsr    PrintHex
  1668.         move.b    125(a2),d1
  1669.         bsr    PrintHex
  1670.         move.b    126(a2),d1
  1671.         bsr    PrintHex
  1672.         move.b    127(a2),d1
  1673.         bsr    PrintHex
  1674. ThisWasDir    bra    PrintReturn
  1675.  
  1676. ChangeDirectory    addq    #1,d5
  1677.         bsr    SearchNextChar
  1678.         beq.s    PrintCurrentDir
  1679.         bsr    GetTextString
  1680.         beq.s    PrintCurrentDir
  1681.         move.l    FindBuffer(a4),a3
  1682.         bsr    InsertText
  1683.         movem.l    d0-d7/a0-a2/a4-a6,-(sp)
  1684.         move.l    DosBase(a4),a6
  1685.         moveq.l    #ACCESS_READ,d2
  1686.         move.l    FindBuffer(a4),d1
  1687.         CALL    Lock
  1688.         move.l    d0,d7
  1689.         beq    DiskError2
  1690.         move.l    d0,d1
  1691.         CALL    CurrentDir
  1692.         move.l    d0,d1
  1693.         CALL    UnLock
  1694.         movem.l    (sp)+,d0-d7/a0-a2/a4-a6
  1695.         bra    EmptyLine
  1696.  
  1697. PrintCurrentDir    bra    EmptyLine
  1698.  
  1699.     ;*** DIRECT DISK ACCESS ***
  1700.  
  1701. DiskLoad    bsr    CheckDevThere
  1702.         bsr    SearchNextChar
  1703.         beq    FrageZeichen
  1704.         addq    #1,d5
  1705.         cmp.b    #"b",d0
  1706.         beq.s    ByBlockNrRead
  1707.         cmp.b    #"o",d0
  1708.         beq.s    ByOffsetRead
  1709.         cmp.b    #"t",d0
  1710.         bne    FrageZeichen
  1711.         bsr    GetHexAdress
  1712.         cmp.w    TextWidth2(a4),d5
  1713.         bcc    FrageZeichen
  1714.         move.l    d0,d6
  1715.         mulu    DESurfaces(a4),d6
  1716.         mulu    DEBlocksPerTrack(a4),d6
  1717.         bsr    GetHexAdress
  1718.         cmp.w    DESurfaces(a4),d0
  1719.         bcc    FrageZeichen
  1720.         mulu    DEBlocksPerTrack(a4),d0
  1721.         add.l    d0,d6
  1722.         bsr    GetHexAdress
  1723.         cmp.w    DEBlocksPerTrack(a4),d0
  1724.         bcc    FrageZeichen
  1725.         add.l    d0,d6
  1726.         bra.s    InsideRead
  1727. ByOffsetRead    bsr    GetHexAdress
  1728.         divu    DESizeBlock(a4),d0
  1729.         move.l    d0,d6
  1730.         bra.s    InsideRead
  1731. ByBlockNrRead    bsr    GetHexAdress
  1732.         move.l    d0,d6
  1733. InsideRead    bsr    GetThemTwo2
  1734.         move.l    OutPutStop(a4),d4
  1735.         move.l    OutPutStart(a4),a3
  1736.         tst.l    d4
  1737.         bne.s    DoLoadb
  1738.         clr.l    d0
  1739.         move.w    DESizeBlock(a4),d4
  1740. DoLoadb        bsr    LoadBlock
  1741.         bra    EmptyLine
  1742.  
  1743. DiskSave    bsr    CheckDevThere
  1744.         bsr    SearchNextChar
  1745.         beq    FrageZeichen
  1746.         addq    #1,d5
  1747.         cmp.b    #"b",d0
  1748.         beq.s    ByBlockNrWrite
  1749.         cmp.b    #"o",d0
  1750.         beq.s    ByOffsetWrite
  1751.         cmp.b    #"t",d0
  1752.         bne    FrageZeichen
  1753.         bsr    GetHexAdress
  1754.         cmp.w    TextWidth2(a4),d5
  1755.         bcc    FrageZeichen
  1756.         move.l    d0,d6
  1757.         mulu    DESurfaces(a4),d6
  1758.         mulu    DEBlocksPerTrack(a4),d6
  1759.         bsr    GetHexAdress
  1760.         cmp.w    DESurfaces(a4),d0
  1761.         bcc    FrageZeichen
  1762.         mulu    DEBlocksPerTrack(a4),d0
  1763.         add.l    d0,d6
  1764.         bsr    GetHexAdress
  1765.         cmp.w    DEBlocksPerTrack(a4),d0
  1766.         bcc    FrageZeichen
  1767.         add.l    d0,d6
  1768.         bra.s    InsideBlockW
  1769. ByOffsetWrite    bsr    GetHexAdress
  1770.         divu    DESizeBlock(a4),d0
  1771.         move.l    d0,d6
  1772.         bra.s    InsideBlockW
  1773. ByBlockNrWrite    bsr    GetHexAdress
  1774.         move.l    d0,d6
  1775. InsideBlockW    bsr    GetThemTwo
  1776.         move.b    #1,Uncontrolled(a4)
  1777.         move.l    OutPutStop(a4),d4
  1778.         move.l    OutPutStart(a4),a3
  1779.         tst.l    d4
  1780.         bne.s    DoSaveb
  1781.         clr.l    d4
  1782.         move.w    DESizeBlock(a4),d4
  1783. DoSaveb        bsr    SaveBlock
  1784.         bra    EmptyLine
  1785.  
  1786. ; Block laden, Blocknummer in d6, d4:Len a3:Adr
  1787. LoadBlock    move.w    #CMD_READ,d5
  1788.         bra.s    DiskDoings
  1789. ; Block speichern, Blocknummer in d6, d4:Len a3:Adr
  1790. SaveBlock    move.w    #CMD_WRITE,d5
  1791.  
  1792. DiskDoings    clr.l    d0
  1793.         move.w    DESizeBlock(a4),d0
  1794.         neg.l    d0
  1795.         and.l    d0,d4    ;auf volle Blocks anden
  1796.         move.l    d6,d0
  1797.         divu    DEBlocksPerTrack(a4),d0    ;Ganze Seiten
  1798.         swap    d0
  1799.         tst.w    d0    ;Rest = Sectoren
  1800.         beq.s    GanzerTrack
  1801.         clr.l    d2
  1802.         move.w    DEBlocksPerTrack(a4),d2
  1803.         sub.w    d0,d2
  1804.         mulu    DESizeBlock(a4),d2
  1805.         cmp.l    d2,d4
  1806.         bcs.s    GanzerTrack
  1807.         sub.l    d2,d4
  1808.         bra.s    LSF2
  1809.  
  1810. GanzerTrack    move.l    d4,d2
  1811.         cmp.l    DEBytesPerTrack(a4),d2
  1812.         bcs.s    LessThanFull
  1813.         move.l    DEBytesPerTrack(a4),d2
  1814. LessThanFull    sub.l    DEBytesPerTrack(a4),d4
  1815. LSF2        RSave
  1816.         move.l    d2,d7
  1817.         bsr    PrintReturn
  1818.         lea    TrackTxt(pc),a2
  1819.         bsr    PrintText
  1820.         move.l    d6,d0
  1821.         divu    DEBlocksPerTrack(a4),d0
  1822.         and.l    #$ffff,d0
  1823.         divu    DESurfaces(a4),d0
  1824.         bsr    PrintWord
  1825.         bsr    PrintSpace
  1826.         move.l    d6,d0
  1827.         divu    DEBlocksPerTrack(a4),d0
  1828.         and.l    #$ffff,d0
  1829.         divu    DESurfaces(a4),d0
  1830.         swap    d0
  1831.         bsr    PrintWord
  1832.         bsr    PrintSpace
  1833.         move.l    d6,d0
  1834.         divu    DEBlocksPerTrack(a4),d0
  1835.         swap    d0
  1836.         bsr    PrintWord
  1837.         tst.b    Uncontrolled(a4)
  1838.         bne    MemOK
  1839.         movem.l    d1-d7/a0-a6,-(sp)
  1840.         move.l    a3,a0
  1841.         bsr    TopsRoutine
  1842.         movem.l    (sp)+,d1-d7/a0-a6
  1843.         cmp.l    d0,d7
  1844.         bcs.s    MemOK
  1845.         lea    ExceededText(pc),a2
  1846.         bsr    PrintText
  1847.         bra    EmptyLine
  1848.  
  1849. MemOK        lea    AtTEXT(pc),a2
  1850.         bsr    PrintText
  1851.         move.l    a3,d0
  1852.         bsr    PrintLong
  1853.         move.b    #"-",d0
  1854.         bsr    Print
  1855.         move.l    a3,d0
  1856.         add.l    d7,d0
  1857.         bsr    PrintLong
  1858.         RLoad
  1859.         move.l    $0004.w,a6
  1860.         lea    Readreply(a4),a1
  1861.         move.l    OwnTask(a4),MP_SIGTASK(a1)
  1862.         CALL    AddPort
  1863.         lea    DiskIO(a4),a1
  1864.         move.l    DeviceUnit(a4),d0
  1865.         move.l    DeviceFlags(a4),d1
  1866.         move.l    DeviceName(a4),a0
  1867.         CALL    OpenDevice
  1868.         move.l    d0,d7
  1869.         bne    CouldNotOpenDev
  1870.         lea    DiskIO(a4),a1
  1871.         lea    Readreply(a4),a0
  1872.         move.l    a0,MN_REPLYPORT(a1)
  1873.         move.w    d5,IO_COMMAND(a1)
  1874.         move.l    a3,IO_DATA(a1)
  1875.         move.l    d2,IO_LENGTH(a1)
  1876.         move.l    d6,d1
  1877.         lsl.l    #8,d1
  1878.         lsl.l    #1,d1
  1879.         move.l    d1,IO_OFFSET(a1)
  1880.         CALL    DoIO
  1881.         move.l    d0,d7
  1882.         bne.s    DoError
  1883.         lea    DiskIO(a4),a1
  1884.         move.w    #CMD_UPDATE,IO_COMMAND(a1)
  1885.         CALL    DoIO
  1886.         move.l    d0,d7
  1887.         bne.s    DoError
  1888.         lea    DiskIO(a4),a1
  1889.         move.w    #TD_MOTOR,IO_COMMAND(a1)
  1890.         move.l    #0,IO_LENGTH(a1)
  1891.         CALL    DoIO
  1892. DoError        lea    Readreply(a4),a1
  1893.         CALL    RemPort
  1894.         lea    DiskIO(a4),a1
  1895.         CALL    CloseDevice
  1896.         tst.l    d7
  1897.         bne    DiskError2
  1898.         bsr    TestBreak2
  1899.         add.l    d2,a3
  1900.         lsr.l    #8,d2
  1901.         lsr.l    #1,d2
  1902.         add.l    d2,d6
  1903.         tst.l    d4
  1904.         beq.s    Overtooo
  1905.         bpl    DiskDoings
  1906. Overtooo    rts
  1907.  
  1908. df0name        dc.b    "df0"
  1909.         even
  1910. diskio        ds.l 20
  1911. ;readreply    ds.l 8
  1912.  
  1913. CheckDevThere    tst.l    DeviceName(a4)
  1914.         beq.s    NeedToSet
  1915.         rts
  1916. NeedToSet    move.w    #3,d0
  1917.         lea    df0name(pc),a0
  1918.         bsr    DII
  1919.         bsr    TextFlush
  1920.         bsr    CursorUp
  1921.         bsr    CursorUp
  1922.         bsr    SearchFirstChar
  1923.         addq    #1,d5
  1924.         bsr    CursorDown
  1925.         bsr    CursorDown
  1926.         rts
  1927.  
  1928. ChangeDevice    bsr    GetTextString
  1929.         beq    FrageZeichen
  1930.         bsr    DII
  1931.         bra    EmptyLine
  1932.  
  1933. DII        move.l    FindBuffer(a4),a3
  1934.         bsr    InsertText
  1935.         move.l    DosBase(a4),a0
  1936.         move.l    dl_Root(a0),a0
  1937.         move.l    rn_Info(a0),d0
  1938.         lsl.l    #2,d0
  1939.         move.l    d0,a0
  1940.         move.l    di_DevInfo(a0),d0
  1941.         lsl.l    #2,d0
  1942.         move.l    d0,a0
  1943. FindThemLoop    cmp.l    #DLT_DEVICE,dvi_Type(a0)
  1944.         bne    NoFoundMe
  1945.         move.l    dvi_Name(a0),d0
  1946.         lsl.l    #2,d0
  1947.         move.l    d0,a1
  1948.         move.l    FindBuffer(a4),a3
  1949.         move.b    (a1)+,d2    ;Len
  1950.         beq    NoFoundMe
  1951. RetryDevC    move.b    (a1)+,d3
  1952.         move.b    (a3)+,d1
  1953.         or.w    #$20,d3
  1954.         or.w    #$20,d1
  1955.         cmp.b    d3,d1
  1956.         bne    NoFoundMe
  1957.         subq    #1,d2
  1958.         bne.s    RetryDevC
  1959.         tst.b    (a3)
  1960.         bne    NoFoundMe
  1961.         move.l    dvi_Startup(a0),d0    ;FSSM
  1962.         lsl.l    #2,d0
  1963.         move.l    d0,a0
  1964.         move.l    fssm_Unit(a0),DeviceUnit(a4)
  1965.         move.l    fssm_Device(a0),d0
  1966.         lsl.l    #2,d0
  1967.         addq    #1,d0
  1968.         move.l    d0,DeviceName(a4)
  1969.         move.l    fssm_Flags(a0),DeviceFlags(a4)
  1970.         move.l    fssm_Environ(a0),d0
  1971.         lsl.l    #2,d0
  1972.         move.l    d0,a0
  1973.         move.l    de_SizeBlock(a0),d0
  1974.         lsl.l    #2,d0
  1975.         move.w    d0,DESizeBlock(a4)
  1976.         move.l    de_BlocksPerTrack(a0),d1
  1977.         move.w    d1,DEBlocksPerTrack(a4)
  1978.         mulu    d0,d1
  1979.         move.l    d1,DEBytesPerTrack(a4)
  1980.         move.l    de_Surfaces(a0),d0
  1981.         move.w    d0,DESurfaces(a4)
  1982.         move.l    de_LowCyl(a0),DELowCyl(a4)
  1983.         move.l    de_HighCyl(a0),DEHighCyl(a4)
  1984.         lea    DevInf1(pc),a2
  1985.         bsr    PrintText
  1986.         move.l    DeviceName(a4),a2
  1987.         bsr    PrintText
  1988.         lea    DevInf2(pc),a2
  1989.         bsr    PrintText
  1990.         move.l    DeviceUnit(a4),d0
  1991.         bsr    PrintDezimal
  1992.         lea    DevInf3(pc),a2
  1993.         bsr    PrintText
  1994.         clr.l    d0
  1995.         move.w    DESizeBlock(a4),d0
  1996.         bsr    PrintDezimal
  1997.         lea    DevInf4(pc),a2
  1998.         bsr    PrintText
  1999.         clr.l    d0
  2000.         move.w    DESurfaces(a4),d0
  2001.         bsr    PrintDezimal
  2002.         lea    DevInf5(pc),a2
  2003.         bsr    PrintText
  2004.         clr.l    d0
  2005.         move.w    DEBlocksPerTrack(a4),d0
  2006.         bsr    PrintDezimal
  2007.         lea    DevInf6(pc),a2
  2008.         bsr    PrintText
  2009.         move.l    DELowCyl(a4),d0
  2010.         bsr    PrintDezimal
  2011.         lea    DevInf7(pc),a2
  2012.         bsr    PrintText
  2013.         move.l    DEHighCyl(a4),d0
  2014.         bsr    PrintDezimal
  2015.         rts
  2016.         
  2017. NoFoundMe    move.l    dol_Next(a0),d0
  2018.         beq.s    DevSearchOver
  2019.         lsl.l    #2,d0
  2020.         move.l    d0,a0
  2021.         bra    FindThemLoop
  2022.  
  2023. DevSearchOver    lea    DeviceNotFound(pc),a2
  2024.         bra    PrintText
  2025.  
  2026.  
  2027. BlockCheckSumm    cmp.b    #"D",(a1,d5)
  2028.         beq    ChangeDirectory
  2029.  
  2030.         bsr    GetHexAdress
  2031.         move.l    d0,a0
  2032.         move.l    d0,a2
  2033.         clr.l    $14(a2)
  2034.         moveq.l    #0,d1
  2035.         move.w    #$7f,d0
  2036. BlockCheck2    add.l    (a0)+,d1
  2037.         dbf    d0,BlockCheck2
  2038.         neg.l    d1
  2039.         move.l    d1,$14(a2)
  2040.         bsr    PrintReturn
  2041.         move.w    #"=",d0
  2042.         bsr    Print
  2043.         move.l    d1,d0
  2044.         bsr    PrintLong
  2045.         bra    EmptyLine
  2046.  
  2047. BootCheckSumm    bsr    GetHexAdress
  2048.         move.l    d0,a0
  2049.         move.l    d0,a2
  2050.         clr.l    $04(a2)
  2051.         moveq.l    #0,d1
  2052.         move.b    #$10,CCR
  2053.         move.w    #$ff,d0
  2054. BootCheck3    move.l    (a0)+,d2
  2055.         addx.l    d2,d1
  2056.         dbf    d0,BootCheck3
  2057.         moveq.l    #0,d2
  2058.         addx.l    d2,d1
  2059.         neg.l    d1
  2060.         move.l    d1,$04(a2)
  2061.         bsr    PrintReturn
  2062.         move.w    #"=",d0
  2063.         bsr    Print
  2064.         move.l    d1,d0
  2065.         bsr    PrintLong
  2066.         bra    EmptyLine
  2067.  
  2068.     ;*** Printer Output ***
  2069.  
  2070. OutPutDevice    bsr    SearchNextChar
  2071.         bne.s    NewDefined
  2072.         bsr    PrintReturn
  2073.         move.l    OutDevice(a4),a2
  2074.         bsr    PrintText
  2075.         bra    EmptyLine
  2076. NewDefined    RSave
  2077.         move.l    DosBase(a4),a6
  2078.         move.l    OutDHandle(a4),d1
  2079.         beq.s    NoFileYet
  2080.         CALL    Close
  2081.         clr.l    OutDHandle(a4)
  2082. NoFileYet    RLoad
  2083.         bsr    GetTextString
  2084.         move.l    OutDevice(a4),a3
  2085.         bsr    InsertText
  2086.         bra    EmptyLine
  2087.  
  2088. PrintThemOut    move.w    #-1,PrinterFlag(a4)
  2089.         bsr    SearchNextChar
  2090.         beq    EmptyLine
  2091.         bra    SecondAuswert
  2092.  
  2093.     ;*** Amiga-Dos-Things ***
  2094.  
  2095. CheckFreeMem    move.l    $0004.w,a6
  2096.         bsr    GetHexAdress
  2097.         beq    FrageZeichen
  2098.         move.l    d0,a0
  2099.         bsr    TopsRoutine
  2100.         move.l    d0,-(sp)
  2101.         lea    FreeBText(pc),a2
  2102.         bsr    PrintText
  2103.         move.l    (sp)+,d0
  2104.         bsr    PrintLong
  2105.         bra    EmptyLine
  2106.  
  2107. TopsRoutine    move.l    $0004.w,a1
  2108.         move.l    MemList(a1),a1
  2109.         bra.b    .HeaderLoopS
  2110. .HeaderLoop    cmp.l    MH_LOWER(a1),a0
  2111.         blo.b    .NextHeader
  2112.         cmp.l    MH_UPPER(a1),a0
  2113.         blo.b    .FoundHeader
  2114. .NextHeader    move.l    d0,a1
  2115. .HeaderLoopS    move.l    (a1),d0
  2116.         bne.b    .HeaderLoop
  2117.         bra.b    .End
  2118. .FoundHeader    move.l    MH_FIRST(a1),d0
  2119.         beq.b    .End
  2120. .ChunkLoop    cmp.l    d0,a0
  2121.         blo.b    .Fail
  2122.         move.l    d0,a1
  2123.         add.l    MC_BYTES(a1),d0
  2124.         sub.l    a0,d0
  2125.         bhs.s    .End
  2126.         move.l    (a1),d0
  2127. .ChunkLoopS    bne.b    .ChunkLoop
  2128. .Fail        moveq    #0,d0
  2129. .End        rts
  2130.  
  2131.  
  2132. AllocSegment    move.l    $0004.w,a6
  2133.         bsr    GetHexAdress
  2134.         cmp.w    #08,d0        ;segmente 0-7
  2135.         bcc    FrageZeichen
  2136.         lsl.w    #3,d0
  2137.         move.w    d0,d7
  2138.         bsr    GetHexAdress
  2139.         move.l    d0,OutPutStart(a4)
  2140.         tst.l    AllocSegs(a4,d7.w)
  2141.         beq.s    SegmentUnUsed
  2142.         bsr    DeAllocSeg
  2143. SegmentUnUsed    bsr    SearchNextChar
  2144.         beq.s    AllocGeneral
  2145.         cmp.b    #"C",d0
  2146.         beq.s    DoAllocChip
  2147.         cmp.b    #"F",d0
  2148.         beq.s    DoAllocFast
  2149.         cmp.b    #"P",d0
  2150.         beq.s    DoAllocPublic
  2151.         bsr    GetHexNum
  2152.         beq    FrageZeichen
  2153.         move.l    d0,OutPutStop(a4)
  2154.         move.l    OutPutStart(a4),a1
  2155.         CALL    AllocAbs
  2156.         tst.l    d0
  2157.         beq    MemoryError
  2158.         move.l    d0,AllocSegs(a4,d7.w)
  2159.         move.l    OutPutStop(a4),AllocLength(a4,d7.w)
  2160.         bra    EmptyLine
  2161. DoAllocFast    move.l    #MEMF_FAST,d1
  2162.         bra.s    AllocGen2
  2163. DoAllocChip    move.l    #MEMF_CHIP,d1
  2164.         bra.s    AllocGen2
  2165. DoAllocPublic    ;
  2166. AllocGeneral    move.l    #MEMF_PUBLIC,d1
  2167. AllocGen2    move.l    OutPutStart(a4),d0
  2168.         CALL    AllocMem
  2169.         tst.l    d0
  2170.         beq    MemoryError
  2171.         move.l    d0,AllocSegs(a4,d7.w)
  2172.         move.l    OutPutStart(a4),AllocLength(a4,d7.w)
  2173.         bra    EmptyLine
  2174. MemoryError    lea    MemError(pc),a2
  2175.         bsr    PrintText
  2176.         bra    EmptyLine
  2177.  
  2178. DeAllocSeg    move.l    $0004.w,a6
  2179.         move.l    AllocSegs(a4,d7.w),d1
  2180.         beq.s    NoDeAlloc
  2181.         move.l    AllocLength(a4,d7.w),d0
  2182.         cmp.l    #-1,d0
  2183.         beq.s    UnLoadSegment
  2184.         move.l    d1,a1
  2185.         CALL    FreeMem
  2186. ClearFromMM    clr.l    AllocSegs(a4,d7.w)
  2187.         clr.l    AllocLength(a4,d7.w)
  2188. NoDeAlloc    rts
  2189. UnLoadSegment    move.l    DosBase(a4),a6
  2190.         CALL    UnLoadSeg
  2191.         bra.s    ClearFromMM
  2192.  
  2193. FreeSegment    bsr    GetHexAdress
  2194.         cmp.w    #$08,d0
  2195.         bcc    FrageZeichen
  2196.         move.l    d0,d7
  2197.         lsl.w    #3,d7
  2198.         bsr    DeAllocSeg
  2199.         bra    EmptyLine        
  2200.         
  2201. SegmentList    bsr    SearchNextChar
  2202.         beq.s    TotalList
  2203.         bsr    GetHexAdress
  2204.         cmp.w    #$08,d0
  2205.         bcc    FrageZeichen
  2206.         lea    SegTxt2(pc),a2
  2207.         bsr    PrintText
  2208.         move.l    d0,d7
  2209.         lsl.w    #3,d7
  2210.         tst.l    AllocLength(a4,d7.w)
  2211.         bmi.s    SpecialList
  2212.         bsr    OneSegLine
  2213.         bra    EmptyLine
  2214. SpecialList    move.l    AllocSegs(a4,d7.w),d0
  2215.         lsl.l    #2,d0
  2216.         move.l    d0,a2
  2217.         moveq.l    #0,d6
  2218. NextADLine    bsr    PrintReturn
  2219.         move.w    d6,d1
  2220.         bsr    PrintHex
  2221.         bsr    PrintSpace
  2222.         move.l    a2,d0
  2223.         addq    #4,d0
  2224.         bsr    PrintLong
  2225.         bsr    PrintSpace
  2226.         move.l    -4(a2),d0
  2227.         bsr    PrintLong
  2228.         move.l    (a2),d0
  2229.         beq.s    LastSegment
  2230.         lsl.l    #2,d0
  2231.         addq    #1,d6
  2232.         move.l    d0,a2
  2233.         bsr    TestBreak2
  2234.         bra.s    NextADLine
  2235.         
  2236. LastSegment    bra    EmptyLine
  2237.         
  2238.  
  2239. TotalList    lea    SegTxt2(pc),a2
  2240.         bsr    PrintText
  2241.         moveq.l    #0,d7
  2242. PrintSegs    bsr    OneSegLine
  2243.         addq    #8,d7
  2244.         cmp.l    #8*8,d7
  2245.         bcs.s    PrintSegs
  2246.         bra    EmptyLine
  2247.  
  2248. OneSegLine    bsr    PrintReturn
  2249.         move.l    d7,d1
  2250.         lsr.w    #3,d1
  2251.         bsr    PrintHex
  2252.         bsr    PrintSpace
  2253.         move.l    AllocSegs(a4,d7.w),d0
  2254.         tst.l    AllocLength(a4,d7.w)
  2255.         bpl.s    NormalSeg
  2256.         addq.l    #1,d0
  2257.         lsl.l    #2,d0
  2258.         bsr    PrintLong
  2259.         lea    SegTxt(pc),a2
  2260.         bsr    PrintText
  2261.         bra.s    SpecialSeg
  2262. NormalSeg    bsr    PrintLong
  2263.         bsr    PrintSpace
  2264.         move.l    AllocLength(a4,d7.w),d0
  2265.         bsr    PrintLong
  2266. SpecialSeg    rts
  2267.  
  2268.  
  2269.  
  2270. AmDosLoad    addq    #1,d5
  2271.         bsr    SearchNextChar
  2272.         beq    FrageZeichen
  2273.         bsr    GetNameToBuffer
  2274.         bsr    GetHexAdress
  2275.         cmp.w    #$08,d0
  2276.         bcc    FrageZeichen
  2277.         move.l    d0,d7
  2278.         lsl.w    #3,d7
  2279.         bsr    DeAllocSeg
  2280.         move.l    FindBuffer(a4),d1
  2281.         move.l    DosBase(a4),a6
  2282.         CALL    LoadSeg
  2283.         tst.l    d0
  2284.         beq    DiskError2_
  2285.         move.l    d0,AllocSegs(a4,d7.w)
  2286.         move.l    #-1,AllocLength(a4,d7.w)
  2287.         bra    EmptyLine
  2288.  
  2289. PrintThatText    bsr    GetHexAdress
  2290.         move.l    d0,a2
  2291. PrintLimited    move.b    (a2)+,d0
  2292.         beq.s    EndeOfText
  2293.         cmp.b    #$c0,d0
  2294.         bcs.s    TakeNN
  2295.         sub.b    #$20,d0
  2296. TakeNN        bsr    Print
  2297.         bsr    TestBreak2
  2298.         bra.s    PrintLimited
  2299. EndeOfText    bra    EmptyLine
  2300.  
  2301. InsertText    subq    #1,d0
  2302. InsertString1    move.b    (a0)+,(a3)+
  2303.         dbf    d0,InsertString1
  2304.         clr.b    (a3)+
  2305.         rts
  2306.  
  2307.     ;*** Error und Ausnahmeroutinen ***
  2308.  
  2309. InitVektors    tst.w    PatchFlag(a4)
  2310.         beq.s    StopTHAT
  2311.         lea    $08.w,a0
  2312.         add.l    VBRreg,a0
  2313.         lea    Vektors(pc),a1
  2314.         move.w    #$09,d1
  2315. MakeAntiGuru    tst.l    (a1)
  2316.         beq.s    LeaveOut
  2317.         move.l    (a0),d0
  2318.         move.l    (a1),(a0)
  2319.         move.l    d0,(a1)
  2320. LeaveOut    tst.l    (a0)+
  2321.         tst.l    (a1)+
  2322.         dbf    d1,MakeAntiGuru
  2323. StopTHAT    rts
  2324.  
  2325. FrageZeichen    move.l    BaseStack(a4),a7
  2326.         mulu    FontX(a4),d5        ;Weil Zeiger im Textspeicher
  2327.         bsr    TextFlush
  2328.         move.l    d5,d0
  2329.         bsr    SetCursorX
  2330.         bsr    CursorRight
  2331.         FlushCursor
  2332.         move.b    #"?",d0
  2333.         bsr    Print
  2334.         bra    EmptyLine
  2335.  
  2336. Guru2        move.w    #2,d1
  2337.         bra.s    AllGuru
  2338. Guru3        move.w    #3,d1
  2339.         bra.s    AllGuru
  2340. Guru4        move.w    #4,d1
  2341.         bra.s    AllGuru
  2342. Guru5        move.w    #5,d1
  2343.         bra.s    AllGuru
  2344. Guru6        move.w    #6,d1
  2345.         bra.s    AllGuru
  2346. Guru7        move.w    #7,d1
  2347.         bra.s    AllGuru
  2348. Guru8        move.w    #8,d1
  2349.         bra.s    AllGuru
  2350. Guru9        move.w    #9,d1
  2351.         bra.s    AllGuru
  2352. Gurua        move.w    #$a,d1
  2353.         bra.s    AllGuru
  2354. Gurub        move.w    #$b,d1
  2355. AllGuru        move.l    ZeroPageMem,a4
  2356.         move.l    WDRastPort(a4),a5
  2357.         lea    ExceptionTX(pc),a2
  2358.         bsr    PrintText
  2359.         bsr    PrintHex
  2360.         lea    AtTEXT(pc),a2
  2361.         bsr    PrintText
  2362.         move.l    2(sp),d0
  2363.         bsr    PrintLong
  2364.         bsr    PrintSpace
  2365.         ;move.l    USP,a0
  2366.         ;move.l    (a0),d0
  2367.         ;bsr    PrintLong
  2368.         ;bsr    PrintSpace
  2369.         move.l    $0004.w,a6
  2370.         move.l    ThisTask(a6),a0
  2371.         move.l    OwnTask(a4),ThisTask(a6)
  2372.         bsr    GetTaskInfo
  2373.         tst.w    (sp)+
  2374.         tst.l    (sp)+
  2375.         move.w    #0,SR
  2376.         move.l    BaseStack(a4),a7
  2377.         move.l    IntBase(a4),a6
  2378.         move.l    MainWindow(a4),a0
  2379.         move.l    wd_WScreen,a0
  2380.         CALL    ScreenToFront
  2381.         move.l    MainWindow(a4),a0
  2382.         CALL    WindowToFront
  2383.         bra    EmptyLine
  2384.  
  2385. GotoCommand    bsr    SearchNextChar
  2386.         beq.s    NoFixAdress
  2387.         bsr    GetHexAdress
  2388.         and.l    #$fffffffe,d0
  2389.         move.l    d0,PCregister
  2390. NoFixAdress    move.l    PCregister,StartJsr+2
  2391.         lea    ChangeMon1(pc),a5
  2392.         move.l    $0004.w,a6
  2393.         move.l    USPstack,a0
  2394.         move.l    a7,USPstack
  2395.         move.l    a0,a7
  2396.         jmp    _LVOSupervisor(a6)
  2397. ChangeMon1    tst.l    (a7)+
  2398.         tst.w    (a7)+
  2399.         move.l    SSPstack,a0
  2400.         move.l    a7,SSPstack
  2401.         move.l    a0,a7
  2402.         move.w    SRregister,d0
  2403.         move.w    SR,d1
  2404.         and.w    #$dfff,d0    ;Supervisor off!
  2405.         move.w    d0,SR
  2406.         move.w    d1,SRregister
  2407.         movem.l    RegisterSave,d0-d7/a0-a7
  2408. StartJsr    jsr    $fffffff0.l
  2409.         movem.l    d0-d7/a0-a7,RegisterSave
  2410.         move.l    $0004.w,a6
  2411.         lea    ChangeMon2(pc),a5
  2412.         jmp    _LVOSupervisor(a6)
  2413. ChangeMon2    move.w    (sp),d1
  2414.         tst.l    (a7)+
  2415.         tst.w    (a7)+
  2416.         move.l    SSPstack,a0
  2417.         move.l    a7,SSPstack
  2418.         move.l    a0,a7
  2419.         move.w    SRregister,d0
  2420.         and.w    #$dfff,d0    ;clear supervisor
  2421.         move.w    d0,SR
  2422.         move.w    d1,SRregister
  2423.         move.l    USPstack,a0
  2424.         move.l    a7,USPstack
  2425.         move.l    a0,a7
  2426.         move.l    ZeroPageMem,a4
  2427.         bra    EmptyLine
  2428.  
  2429. BreakCommand    bsr    GetHexAdress
  2430.         and.l    #$fffffffe,d0
  2431.         move.l    d0,a0
  2432.         move.w    (a0),RememberTrap(a4)
  2433.         move.l    a0,RememberAdress(a4)
  2434.         move.w    #$4e4f,(a0)    ;Trap #15
  2435.         cmp.w    #$4e4f,(a0)    ;ROM ?
  2436.         bne    FrageZeichen
  2437.         lea    $bc.w,a2
  2438.         add.l    VBRreg,a2
  2439.         move.l    #BreakBack,ComeBackToMe
  2440.         bra    ExecuteTrace
  2441. BreakBack    sub.l    #2,PCregister
  2442.         move.l    RememberAdress(a4),a0
  2443.         move.w    RememberTrap(a4),(a0)
  2444.         bra    RegisterComm
  2445.  
  2446. TraceCommand    move.l    VBRreg,a0
  2447.         move.l    $24(a0),TraceSave
  2448.         bsr    SearchNextChar
  2449.         beq    TracePC
  2450.         bsr    GetHexAdress
  2451.         and.l    #$fffffffe,d0
  2452.         move.l    d0,PCregister
  2453.         lea    TraceStartText(pc),a2
  2454.         bsr    PrintText
  2455. TracePC        RSave
  2456.         bsr    PrintReturn
  2457.         move.l    PCregister,a0
  2458.         bsr    PrintDisLine
  2459.         bsr    TextFlush
  2460. WaitOnT        bsr    WaitForKey
  2461.         cmp.b    #$0a,d0        ;Naechsten Befehl ausführen
  2462.         beq    DoNextLine
  2463.         cmp.b    #"r",d0        ;Register anzeigen
  2464.         beq    RegisterSpec
  2465.         cmp.b    #"x",d0        ;Trace Beenden
  2466.         beq    ExitTrace
  2467.         cmp.b    #"j",d0        ;Jsr ausführen
  2468.         beq.s    JsrTracer    
  2469.         cmp.b    #"g",d0
  2470.         beq    GotoTrace
  2471.         cmp.b    #"n",d0        ;Einen Befehl überspringen
  2472.         bne.s    WaitOnT
  2473.         move.l    PCregister,a0
  2474.         add.l    d7,a0
  2475. JsrTrace2    move.w    (a0),RememberTrap(a4)
  2476.         move.l    a0,RememberAdress(a4)
  2477.         move.w    #$4e4f,(a0)    ;Trap #15
  2478.         cmp.w    #$4e4f,(a0)    ;ROM ?
  2479.         bne.s    WaitOnT
  2480.         RLoad
  2481.         lea    $bc.w,a2
  2482.         add.l    VBRreg,a2
  2483.         move.l    (a2),OLDTRAP15(a4)
  2484.         move.l    #TraceBack2,ComeBackToMe
  2485.         bra    ExecuteTrace
  2486. TraceBack2    move.l    VBRreg,a0
  2487.         move.l    OLDTRAP15(a4),$bc(a0)
  2488.         sub.l    #2,PCregister
  2489.         move.l    RememberAdress(a4),a0
  2490.         move.w    RememberTrap(a4),(a0)
  2491.         bra    TracePC
  2492. JsrTracer    lea    $24.w,a2
  2493.         add.l    VBRreg,a2
  2494.         or.w    #$8000,SRregister    ;TraceModeOn
  2495.         move.l    #TraceBack3,ComeBackToMe
  2496.         bra    ExecuteTrace
  2497. TraceBack3    move.l    VBRreg,a0
  2498.         move.l    TraceSave,$24(a0)
  2499.         move.l    USPstack,a0
  2500.         move.l    (a0),a0
  2501.         bra    JsrTrace2
  2502. GotoTrace    RLoad
  2503.         bra    NoFixAdress
  2504.  
  2505. RegisterSpec    bsr    PrintRegister
  2506.         bsr    TextFlush
  2507.         bra    WaitOnT
  2508. DoNextLine    RLoad
  2509.         lea    $24.w,a2
  2510.         add.l    VBRreg,a2
  2511.         or.w    #$8000,SRregister    ;TraceModeOn
  2512.         move.l    #TraceBack,ComeBackToMe
  2513.         bra    ExecuteTrace
  2514. TraceBack    move.l    VBRreg,a0
  2515.         move.l    TraceSave,$24(a0)
  2516.         bra    TracePC
  2517. ExitTrace    RLoad
  2518.         bra    EmptyLine
  2519.  
  2520. ExecuteTrace    move.l    $0004.w,a6
  2521.         lea    ChangeMon1br(pc),a5
  2522.         move.l    USPstack,a0
  2523.         move.l    a7,USPstack
  2524.         move.l    a0,a7
  2525.         jmp    _LVOSupervisor(a6)
  2526. ChangeMon1br    tst.l    (a7)+
  2527.         tst.w    (a7)+
  2528.         move.l    SSPstack,a0
  2529.         move.l    a7,SSPstack
  2530.         move.l    a0,a7
  2531.         move.l    PCregister,-(a7)
  2532.         move.w    SRregister,-(a7)
  2533.         move.w    SR,d1
  2534.         move.w    d1,SRregister
  2535.         move.l    #ReturnToMon,(a2)
  2536.         movem.l    RegisterSave,d0-d7/a0-a6
  2537.         rte
  2538.  
  2539. ReturnToMon    movem.l    d0-d7/a0-a7,RegisterSave
  2540.         move.w    (sp)+,d1
  2541.         move.l    (sp)+,PCregister
  2542.         move.l    SSPstack,a0
  2543.         move.l    a7,SSPstack
  2544.         move.l    a0,a7
  2545.         move.l    USP,a0
  2546.         move.l    a0,RegisterSave+60
  2547.         move.l    USPstack,a1
  2548.         move.l    a0,USPstack
  2549.         move.w    SRregister,d0
  2550.         and.w    #$0fff,d0    ;clear supervisor and trace
  2551.         and.w    #$7fff,d1
  2552.         move.w    d0,SR
  2553.         move.w    d1,SRregister
  2554.         move.l    a1,a7
  2555.         move.l    ZeroPageMem,a4
  2556.         move.l    WDRastPort(a4),a5
  2557.         move.l    ComeBackToMe,-(sp)
  2558.         rts
  2559. ComeBackToMe    dc.l    0
  2560.  
  2561. RegisterComm    bsr.s    PrintRegister
  2562.         bra    EmptyLine
  2563.  
  2564. PrintRegister    lea    RegisterSave(pc),a0
  2565.         move.w    #"d",d2
  2566.         bsr    DoRegLine
  2567.         move.w    #"a",d2
  2568.         bsr    DoRegLine2
  2569.         lea    RegText(pc),a2
  2570.         bsr    PrintText
  2571.         move.l    USPstack,d0
  2572.         bsr    PrintLong
  2573.         move.w    #" ",d0
  2574.         bsr    Print
  2575.         move.l    SSPstack,d0
  2576.         bsr    PrintLong
  2577.         move.w    #" ",d0
  2578.         bsr    Print
  2579.         move.l    PCregister,d0
  2580.         bsr    PrintLong
  2581.         bsr    PrintSpace
  2582.         move.w    SRregister,d0
  2583.         bra    PrintBinaer16
  2584.  
  2585. DoRegLine    move.w    #"0",d3
  2586.         bsr    PrintReturn
  2587. DDPrinter2    move.w    #6,d7
  2588.         bsr    PrintSpaces
  2589.         move.w    #"r",d0
  2590.         bsr    Print
  2591.         move.w    d3,d0
  2592.         bsr    Print
  2593.         addq    #1,d3
  2594.         cmp.w    #$38,d3
  2595.         bcs.s    DDPrinter2
  2596. DoRegLine2    bsr    PrintReturn
  2597.         move.w    #".",d0
  2598.         bsr    Print
  2599.         move.w    #"'",d0
  2600.         bsr    Print
  2601.         move.w    d2,d0
  2602.         bsr    Print
  2603.         move.w    #" ",d0
  2604.         bsr    Print
  2605.         move.w    #7,d7
  2606.         bra.s    SkipFirstspace
  2607. AdressRegs    move.b    #" ",d0
  2608.         bsr    Print
  2609. SkipFirstspace    move.l    (a0)+,d0
  2610.         bsr    PrintLong
  2611.         dbf    d7,AdressRegs
  2612.         rts
  2613.  
  2614. PrintSpaces    move.b    #$20,d0
  2615.         bsr    Print
  2616.         dbf    d7,PrintSpaces
  2617.         rts
  2618.  
  2619. GetRegister    bsr    SearchNextChar
  2620.         addq    #1,d5
  2621.         cmp.b    #"d",d0
  2622.         beq.s    DataMaker
  2623.         cmp.b    #"a",d0
  2624.         beq.s    AdressMaker
  2625.         cmp.b    #"p",d0
  2626.         bne    FrageZeichen
  2627. ProcessMaker    bsr    SearchNextChar
  2628.         beq    EmptyLine
  2629.         bsr    GetHexNum
  2630.         move.l    d0,USPstack
  2631.         bsr    SearchNextChar
  2632.         beq    EmptyLine
  2633.         bsr    GetHexNum
  2634.         move.l    d0,SSPstack
  2635.         bsr    SearchNextChar
  2636.         beq    EmptyLine
  2637.         bsr    GetHexNum
  2638.         move.l    d0,PCregister
  2639.         bsr    SearchNextChar
  2640.         beq    EmptyLine
  2641.         bsr    GetBinNum
  2642.         move.w    d0,SRregister
  2643.         bra    EmptyLine
  2644.  
  2645. DataMaker    lea    RegisterSave(pc),a0
  2646.         move.w    #7,d7
  2647. DataM2        bsr    SearchNextChar
  2648.         beq    EmptyLine
  2649.         bsr    GetHexNum
  2650.         move.l    d0,(a0)+
  2651.         dbf    d7,DataM2
  2652.         bra    EmptyLine
  2653.  
  2654. AdressMaker    lea    RegisterSave2(pc),a0
  2655.         move.w    #7,d7
  2656. AdrM2        bsr    SearchNextChar
  2657.         beq    EmptyLine
  2658.         bsr    GetHexNum
  2659.         move.l    d0,(a0)+
  2660.         dbf    d7,AdrM2
  2661.         bra    EmptyLine
  2662.  
  2663.         ;*** TRANSFER ***
  2664.  
  2665. Transfer    bsr    GetStartAndEnd
  2666.         move.l    d0,a2
  2667.         bsr    GetHexAdress
  2668.         move.l    d0,a3    ;Ziel
  2669.         move.l    OutPutStart(a4),a0
  2670.         move.w    #$ff,d6
  2671. TransLoop    move.b    (a0)+,(a3)+
  2672.         dbf    d6,NoBreakTry4
  2673.         bsr    TestBreak
  2674.         move.w    #$ff,d6
  2675. NoBreakTry4    cmp.l    a2,a0
  2676.         bcs.s    TransLoop
  2677.         bra    EmptyLine
  2678.  
  2679.         ;*** OCCUPY ***
  2680.  
  2681. Occupy        bsr    GetStartAndEnd
  2682.         move.l    FindBuffer(a4),a0
  2683.         moveq.l    #0,d7    ;Counter
  2684.         moveq.l    #0,d6    ;Actual Byte
  2685. ByteNotReady2    move.b    (a1,d5),d0
  2686.         cmp.b    #" ",d0
  2687.         bne.s    CharFoundoc
  2688.         addq    #1,d5
  2689.         cmp.w    TextWidth2(a4),d5
  2690.         bcs.s    ByteNotReady2
  2691.         bra.s    StringTakeOver2
  2692. CharFoundoc    bsr    TestAdressG2
  2693.         bne    FrageZeichen
  2694.         move.b    (a1,d5),d3
  2695.         moveq    #1,d1    ;One Nibble
  2696.         moveq.l    #0,d0
  2697.         bsr    ConvertNibble
  2698.         lsl.w    #4,d6
  2699.         or.w    d0,d6    ;InsertNibble
  2700.         lsl.w    #4,d4
  2701.         or.w    #$0f,d4
  2702.         addq    #1,d7
  2703.         btst    #0,d7
  2704.         bne.s    ByteNotReady2
  2705.         cmp.w    #$20,d7
  2706.         bcc.s    StringTakeOver2
  2707.         move.b    d6,(a0)+
  2708.         moveq.l    #0,d6
  2709.         bra.s    ByteNotReady2
  2710. StringTakeOver2    btst    #0,d7
  2711.         beq.s    JustFinishedB2
  2712.         lsl.w    #4,d6
  2713.         move.b    d6,(a0)+
  2714.         addq    #1,d7
  2715. JustFinishedB2    lsr.w    #1,d7    ;Real Number of Bytes
  2716.         move.l    FindBuffer(a4),a1
  2717.         move.l    OutPutStart(a4),a0
  2718. OccupyOn2    move.w    #$ff,d6
  2719. OccupyOn    moveq.l    #0,d1
  2720. OccupyThrough    move.b    (a1,d1),(a0)+
  2721.         cmp.l    OutPutStop(a4),a0
  2722.         bcc    EmptyLine
  2723.         addq    #1,d1
  2724.         cmp.w    d7,d1
  2725.         bcs.s    OccupyThrough
  2726.         dbf    d6,OccupyOn
  2727.         bsr    TestBreak
  2728.         bra.s    OccupyOn2
  2729.  
  2730.  
  2731.         ;*** FIND ***
  2732.  
  2733. FindSomething    bsr    SearchNextChar
  2734.         beq    FrageZeichen
  2735.         cmp.b    #"r",d0
  2736.         beq    FindRelative
  2737.         clr.w    SpecialFind(a4)
  2738.         cmp.b    #"d",d0
  2739.         bne.s    NormalFind
  2740.         addq    #1,d5
  2741.         move.w    #1,SpecialFind(a4)
  2742. NormalFind    bsr    GetStartAndEnd
  2743.         move.l    FindBuffer(a4),a0
  2744.         move.l    MaskBuffer(a4),a2
  2745.         moveq.l    #0,d7    ;Counter
  2746.         moveq.l    #0,d6    ;Actual Byte
  2747.         moveq.l    #0,d4    ;Actual Mask
  2748.  
  2749. ByteNotReady    bsr    SearchNextChar
  2750.         beq.s    StringTakeOver
  2751. CharFound    bsr    TestAdressG2
  2752.         bne.s    OtherCause
  2753.         move.b    (a1,d5),d3
  2754.         moveq    #1,d1    ;One Nibble
  2755.         moveq.l    #0,d0
  2756.         bsr    ConvertNibble
  2757.         lsl.w    #4,d6
  2758.         or.w    d0,d6    ;InsertNibble
  2759.         lsl.w    #4,d4
  2760.         or.w    #$0f,d4
  2761.         bra.s    NextNibble
  2762.  
  2763. OtherCause    cmp.b    #"*",(a1,d5)
  2764.         beq.s    JokerDO
  2765.         cmp.b    #$22,(a1,d5)
  2766.         beq.s    StringDo
  2767.         cmp.b    #"!",(a1,d5)
  2768.         bne    FrageZeichen
  2769.         move.b    (a1,d5),d0
  2770.         bra.s    StringTakeOver
  2771. StringDo    addq    #1,d5
  2772. StringLoopG    move.b    (a1,d5),d0
  2773.         addq    #1,d5
  2774.         cmp.b    #$22,d0
  2775.         beq.s    ByteNotReady
  2776.         move.b    d0,(a0)+
  2777.         move.b    #$ff,(a2)+
  2778.         addq    #2,d7
  2779.         cmp.w    #$30,d7
  2780.         bcc.s    StringTakeOver
  2781.         bra.s    StringLoopG
  2782. JokerDO        addq    #1,d5
  2783. Joker        lsl.w    #4,d6
  2784.         lsl.w    #4,d4
  2785. NextNibble    addq    #1,d7
  2786.         btst    #0,d7
  2787.         bne.s    ByteNotReady
  2788.         cmp.w    #$30,d7
  2789.         bcc.s    StringTakeOver
  2790.         move.b    d6,(a0)+
  2791.         move.b    d4,(a2)+
  2792.         moveq.l    #0,d6
  2793.         moveq.l    #0,d4
  2794.         bra    ByteNotReady
  2795. StringTakeOver    btst    #0,d7
  2796.         beq.s    JustFinishedB
  2797.         lsl.w    #4,d6
  2798.         lsl.w    #4,d4
  2799.         move.b    d6,(a0)+
  2800.         move.b    d4,(a2)+
  2801.         addq    #1,d7
  2802. JustFinishedB    lsr.w    #1,d7    ;Real Number of Bytes
  2803.         move.l    d0,-(sp)
  2804.         bsr    PrintReturn
  2805.         move.l    (sp)+,d0
  2806.         move.l    FindBuffer(a4),a1
  2807.         move.l    MaskBuffer(a4),a2
  2808.         move.l    OutPutStart(a4),a0
  2809.         move.w    #$ff,d6
  2810.         cmp.b    #"!",d0
  2811.         beq.s    NotSearch
  2812. CompareOn    moveq.l    #0,d1
  2813. CompareThrough    move.b    (a0,d1),d0
  2814.         and.b    (a2,d1),d0
  2815.         cmp.b    (a1,d1),d0
  2816.         bne.s    NotFound
  2817.         addq    #1,d1
  2818.         cmp.w    d7,d1
  2819.         bcs.s    CompareThrough
  2820.         tst.w    SpecialFind(a4)
  2821.         beq.s    NormalFind2
  2822.         move.l    a0,d0
  2823.         btst    #0,d0
  2824.         bne.s    NotFound
  2825.         RSave
  2826.         bsr    PrepareForLine
  2827.         bsr    PrintDisLine
  2828.         bsr    TextFlush
  2829.         RLoad
  2830.         bsr    WaitForKey
  2831.         cmp.b    #$03,d0
  2832.         beq    EmptyLine
  2833.         bra.s    NotFound
  2834. NormalFind2    bsr    PrintSpace
  2835.         bsr    PrintSpace
  2836.         move.l    a0,d0
  2837.         bsr    PrintLong
  2838.         bsr    TextFlush
  2839.         bsr    TestBreakDown
  2840. NotFound    addq.l    #1,a0
  2841.         dbf    d6,NoBreakTry
  2842.         bsr    TestBreak
  2843.         move.w    #$ff,d6
  2844. NoBreakTry    cmp.l    OutPutStop(a4),a0
  2845.         bcs.s    CompareOn
  2846.         bra    EmptyLine
  2847.  
  2848. NotSearch    moveq.l    #0,d1
  2849. CompareThrough3    move.b    (a0,d1),d0
  2850.         and.b    (a2,d1),d0
  2851.         cmp.b    (a1,d1),d0
  2852.         beq.s    NotFoundxx
  2853.         addq    #1,d1
  2854.         cmp.w    d7,d1
  2855.         bcs.s    CompareThrough3
  2856.         bsr    PrintSpace
  2857.         bsr    PrintSpace
  2858.         move.l    a0,d0
  2859.         bsr    PrintLong
  2860. NotFoundxx    addq.l    #1,a0
  2861.         dbf    d6,NoBreakTry2
  2862.         bsr    TestBreak
  2863.         move.w    #$ff,d6
  2864. NoBreakTry2    cmp.l    OutPutStop(a4),a0
  2865.         bcs.s    NotSearch
  2866.         bra    EmptyLine
  2867.  
  2868. FindRelative    addq    #1,d5
  2869.         bsr    GetStartAndEnd
  2870.         bsr    GetHexAdress
  2871.         move.l    d0,d6
  2872.         move.l    OutPutStart(a4),d0
  2873.         and.l    #$fffffffe,d0
  2874.         move.l    d0,a0
  2875.         bsr    PrintReturn
  2876.         move.w    #$ff,d4
  2877. FRelLoop    move.w    (a0),d0
  2878.         ext.l    d0
  2879.         add.l    a0,d0
  2880.         cmp.l    d6,d0
  2881.         bne.s    NoRelFound
  2882.         bsr    PrintSpace
  2883.         bsr    PrintSpace
  2884.         move.l    a0,d0
  2885.         bsr    PrintLong
  2886.         bsr    TestBreakDown
  2887. NoRelFound    dbf    d4,NoBreakTry3
  2888.         bsr    TestBreak
  2889.         move.w    #$ff,d4
  2890. NoBreakTry3    tst.w    (a0)+
  2891.         cmp.l    OutPutStop(a4),a0
  2892.         bcs.s    FRelLoop
  2893.         bra    EmptyLine    
  2894.  
  2895. TestBreakDown    Push    d0-d1
  2896.         clr.l    d0
  2897.         clr.l    d1
  2898.         move.w    rp_cp_x(a5),d0
  2899.         divu    FontX(a4),d0
  2900.         move.w    TextWidth2(a4),d1
  2901.         sub.w    #10,d1
  2902.         cmp.w    d0,d1
  2903.         bcc.s    CarrRet
  2904.         move.b    #$0a,d0
  2905.         bsr    Print
  2906.         bsr    TestBreak
  2907. CarrRet        Pull    d0-d1
  2908.         rts
  2909.  
  2910.         ;*** COMPARE ***
  2911.  
  2912. CompareSth    bsr    GetStartAndEnd
  2913.         bsr    SearchNextChar
  2914.         beq    FrageZeichen
  2915.         bsr    GetHexAdress
  2916.         move.l    d0,a0
  2917.         move.l    OutPutStart(a4),a1
  2918.         move.w    #$ff,d6
  2919.         bsr    PrintReturn
  2920. CompareThrough2    move.b    (a1),d0
  2921.         cmp.b    (a0)+,d0
  2922.         bne.s    CompareFound
  2923. CompT2        tst.b    (a1)+
  2924.         dbf    d6,NoBreakTry5
  2925.         bsr    TestBreak
  2926.         move.w    #$ff,d6
  2927. NoBreakTry5    cmp.l    OutPutStop(a4),a1
  2928.         bcs.s    CompareThrough2
  2929.         bra    EmptyLine
  2930.  
  2931. CompareFound    bsr    PrintSpace
  2932.         bsr    PrintSpace
  2933.         move.l    a1,d0
  2934.         bsr    PrintLong
  2935.         bsr    TestBreakDown
  2936.         bra.s    CompT2
  2937.  
  2938.         ; *** Memory - Befehle ***
  2939.  
  2940. BMemory        move.w    TextHeight(a4),d6
  2941.         subq    #1,d6
  2942.         lsl.w    #4,d6
  2943.         bsr    GetScrollParas
  2944.         bmi    ReKey
  2945.         move.l    d0,d1
  2946.         move.b    #$0c,d0
  2947.         bsr    Print
  2948.         move.l    a0,d0
  2949.         cmp.l    d0,d1
  2950.         bcc    RightBMem
  2951.         exg.l    d0,d1
  2952. RightBMem    move.l    d0,a0
  2953.         move.l    d1,OutPutStop(a4)
  2954.         bra    PrintNextLine2
  2955.  
  2956. SMemory        move.w    #$10,d6
  2957.         bsr    GetScrollParas
  2958.         bmi.s    ReKey2
  2959.         bsr    PrintMemLine
  2960. ReKey2        rts
  2961.  
  2962. MemoryBefehl    bsr    GetThemTwo
  2963. PrintNextLine    bsr    PrintReturn
  2964.         moveq.l    #0,d4
  2965. PrintNextLine2    tst.l    d4
  2966.         bpl.s    NoOverJ
  2967.         moveq.l    #0,d4
  2968.         lea    $10(a0),a0
  2969.         add.l    #$10,OutPutStop(a4)
  2970. NoOverJ        bsr    PrintMemLine
  2971.         bsr    TestBreak
  2972.         cmp.l    OutPutStop(a4),a0
  2973.         bcs.s    PrintNextLine
  2974.         bra    EmptyLine
  2975.  
  2976. PrintMemLine    move.w    #".",d0
  2977.         bsr    Print
  2978.         move.w    #":",d0
  2979.         bsr    Print
  2980.         move.l    a0,d0
  2981.         bsr    PrintLong
  2982.         moveq.l    #0,d4
  2983. MemOutDo    move.w    (a0,d4),d0
  2984.         bsr    PrintWord
  2985.         addq    #2,d4
  2986.         cmp.w    #$10,d4
  2987.         bcs.s    MemOutDo
  2988.         move.w    #$0f,d4
  2989.         bra    CharPartd4
  2990.  
  2991. ChangeMemory    bsr    GetHexAdress
  2992.         and.l    #$fffffffe,d0
  2993.         moveq    #$0f,d4
  2994.         move.l    d0,a2
  2995.         move.l    d0,a0
  2996. ChangMem2    bsr    SearchNextChar
  2997.         beq    RePrintLine
  2998.         bsr    GetHexByte
  2999.         beq    FrageZeichen
  3000.         move.b    d0,(a2)+
  3001.         dbf    d4,ChangMem2
  3002. RePrintLine    move.b    #$0d,d0
  3003.         bsr    Print
  3004.         bsr    PrintMemLine
  3005.         bra    EmptyLine
  3006.  
  3007.         ; *** ASCII - OUTPUT ***
  3008.  
  3009. BASCII        move.w    TextHeight(a4),d6
  3010.         subq    #1,d6
  3011.         lsl.w    #6,d6
  3012.         bsr    GetScrollParas
  3013.         bmi    ReKey
  3014.         move.l    d0,d1
  3015.         move.b    #$0c,d0
  3016.         bsr    Print
  3017.         move.l    a0,d0
  3018.         cmp.l    d0,d1
  3019.         bcc    RightBMem2
  3020.         exg.l    d0,d1
  3021. RightBMem2    move.l    d0,a0
  3022.         move.l    d1,OutPutStop(a4)
  3023.         bra    PrintNextAline2
  3024.  
  3025. SASCII        move.w    #$40,d6
  3026.         bsr    GetScrollParas
  3027.         bmi.s    ReKey3
  3028.         bsr    PrintASCIILine
  3029. ReKey3        rts
  3030.  
  3031. ASCIIOutput    bsr    GetThemTwo
  3032. PrintNextAline    bsr    PrintReturn
  3033.         moveq.l    #0,d4
  3034. PrintNextAline2    tst.l    d4
  3035.         bpl.s    NoOverJ2
  3036.         moveq.l    #0,d4
  3037.         lea    $40(a0),a0
  3038.         add.l    #$40,OutPutStop(a4)
  3039. NoOverJ2    bsr    PrintASCIILine
  3040.         bsr    TestBreak
  3041.         cmp.l    OutPutStop(a4),a0
  3042.         bcs.s    PrintNextAline
  3043.         bra    EmptyLine
  3044.  
  3045. PrintASCIILine    move.w    #".",d0
  3046.         bsr    Print
  3047.         move.w    #";",d0
  3048.         bsr    Print
  3049.         move.l    a0,d0
  3050.         bsr    PrintLong
  3051.         move.w    #$3f,d4
  3052.         bra    CharPartd4
  3053.  
  3054. CharPartd4    bsr    PrintSpace
  3055. CharacLoop    move.b    (a0)+,d0
  3056.         cmp.b    #$a0,d0
  3057.         bcc.s    NormPrint
  3058.         cmp.b    #$20,d0
  3059.         bcs.s    UnNormPrint
  3060.         cmp.b    #$7f,d0
  3061.         bcs.s    NormPrint
  3062. UnNormPrint    move.b    #$2e,d0
  3063. NormPrint    bsr    Print
  3064.         dbf    d4,CharacLoop
  3065.         rts
  3066.  
  3067.         ;*** WRITE ***
  3068.  
  3069. WriteASCII    bsr    GetHexAdress
  3070.         move.l    d0,a2
  3071.         bsr    GetTextString
  3072.         beq    FrageZeichen
  3073.         subq    #1,d0
  3074. InsertString    move.b    (a0)+,(a2)+
  3075.         dbf    d0,InsertString
  3076.         bsr    PrintReturn
  3077.         move.l    a2,d0
  3078.         bsr    PrintLong
  3079.         bra    EmptyLine
  3080.  
  3081.     ;*** Allgemeine Unterroutinen ***
  3082.  
  3083. ;back: d1: negative = up, positive = down
  3084. GetScrollParas    move.b    #$0d,d0
  3085.         bsr    Print
  3086.         bsr    SearchNextChar
  3087.         beq.s    ReKeyx2
  3088.         bsr    GetHexNum
  3089.         beq.s    ReKeyx2
  3090.         move.l    d4,-(sp)
  3091.         and.l    #$fffffffe,d0
  3092.         muls    d6,d4
  3093.         move.l    d4,d1
  3094.         add.l    d0,d4
  3095.         move.l    d4,a0
  3096.         move.l    d4,OutPutStop(a4)
  3097.         moveq.l    #0,d4
  3098. OtherO        movem.l    (sp)+,d4
  3099.         rts
  3100. ReKeyx2        moveq.l    #-1,d4
  3101.         bra.s    OtherO
  3102.  
  3103. GetNameToBuffer    bsr    SearchNextChar
  3104.         beq    FrageZeichen
  3105.         bsr    GetTextString
  3106.         beq    FrageZeichen
  3107.         move.l    FindBuffer(a4),a3
  3108.         bra    InsertText
  3109.  
  3110. GetThemTwo2    clr.b    Uncontrolled(a4)
  3111.         clr.l    OutPutStop(a4)
  3112.         bsr    GetHexAdress
  3113.         and.l    #$fffffffe,d0
  3114.         move.l    d0,OutPutStart(a4)
  3115.         bsr    SearchNextChar
  3116.         beq.s    MemoryDo
  3117.         cmp.b    #"!",d0
  3118.         beq.s    UncontLine
  3119.         bsr    GetHexNum
  3120.         move.l    d0,OutPutStop(a4)
  3121.         bsr    SearchNextChar
  3122.         cmp.b    #"!",d0
  3123.         bne.s    MemoryDo
  3124. UncontLine    move.b    #1,Uncontrolled(a4)
  3125.         bra.s    MemoryDo
  3126.  
  3127. GetThemTwo    bsr    GetHexAdress
  3128.         and.l    #$fffffffe,d0
  3129.         move.l    d0,OutPutStart(a4)
  3130.         bsr    SearchNextChar
  3131.         beq.s    OnlyOneLine
  3132.         bsr    GetHexAdress
  3133.         move.l    d0,OutPutStop(a4)
  3134.         bra.s    MemoryDo
  3135. OnlyOneLine    move.l    OutPutStart(a4),OutPutStop(a4)
  3136. MemoryDo    move.l    OutPutStart(a4),a0
  3137.         rts
  3138.  
  3139. GetStartAndEnd    bsr    GetHexAdress
  3140.         move.l    d0,OutPutStart(a4)
  3141.         bsr    SearchNextChar
  3142.         beq    FrageZeichen
  3143.         bsr    GetHexAdress
  3144.         move.l    d0,OutPutStop(a4)
  3145.         rts
  3146.  
  3147. GetTextString    bsr    SearchNextChar
  3148.         move.l    a1,a0
  3149.         cmp.b    #$22,d0    ;Anführungszeichen
  3150.         bne.s    NoQuotation
  3151.         addq    #1,d5
  3152.         add.l    d5,a0
  3153.         move.l    d5,d2
  3154. StringNotOver    move.b    (a1,d5),d0
  3155.         cmp.b    #$22,d0
  3156.         beq.s    EndeDesStrings
  3157.         cmp.b    #$0a,d0
  3158.         beq.s    EndeDesStrings
  3159.         addq    #1,d5
  3160.         cmp.w    TextWidth2(a4),d5
  3161.         bcs.s    StringNotOver
  3162.         bra    FrageZeichen
  3163. EndeDesStrings    move.w    d5,d0
  3164.         sub.w    d2,d0
  3165.         addq    #1,d5
  3166.         tst.w    d0
  3167.         rts
  3168. NoQuotation    add.l    d5,a0
  3169.         move.l    d5,d2
  3170. StringNO2    move.b    (a1,d5),d0
  3171.         cmp.b    #$20,d0
  3172.         beq.s    EndeDesStrings
  3173.         cmp.b    #$0a,d0
  3174.         beq.s    EndeDesStrings
  3175.         addq    #1,d5
  3176.         cmp.w    TextWidth2(a4),d5
  3177.         bcs.s    StringNO2
  3178.         bra    FrageZeichen
  3179.  
  3180. SearchFirstChar    Push    a0
  3181.         bsr    GetTextPos
  3182.         move.l    a0,a1
  3183.         Pull    a0
  3184.         moveq.l    #0,d5
  3185. SearchNextChar    move.l    d5,d2
  3186. LineNotOver    move.b    (a1,d5),d0
  3187.         cmp.b    #$20,d0
  3188.         beq.s    NextChar
  3189.         cmp.b    #$2e,d0
  3190.         beq.s    NextChar
  3191.         tst.b    d0
  3192.         rts
  3193. NextChar    addq    #1,d5
  3194.         cmp.w    TextWidth2(a4),d5
  3195.         bcs.s    LineNotOver
  3196.         move.l    d2,d5
  3197.         moveq.l    #0,d0
  3198.         rts
  3199.  
  3200. SearchCodea0    moveq.l    #0,d1
  3201. CodeRoutine    tst.b    (a0)
  3202.         beq.s    NoCode
  3203.         cmp.b    (a0)+,d0
  3204.         beq.s    CodeFound
  3205.         addq    #1,d1
  3206.         bra.s    CodeRoutine
  3207. CodeFound    lsl.w    #2,d1
  3208.         tst.b    d0
  3209. NoCode        rts
  3210.  
  3211.         ;***  Exit Befehl ***
  3212.  
  3213. EndeDesPrg    bsr    CloseHelp2
  3214.         tst.l    OutDHandle(a4)
  3215.         beq.s    NoClose2
  3216.         move.l    DosBase(a4),a6
  3217.         move.l    OutDHandle(a4),d1
  3218.         CALL    Close
  3219. NoClose2    tst.l    BatchHandle(a4)
  3220.         beq.s    EndeDes2
  3221.         move.l    DosBase(a4),a6
  3222.         move.l    BatchHandle(a4),d1
  3223.         CALL    Close
  3224.  
  3225. EndeDes2    moveq.l    #0,d7
  3226. FreeAll        bsr    DeAllocSeg
  3227.         addq    #8,d7
  3228.         cmp.l    #8*8,d7
  3229.         bcs.s    FreeAll
  3230.         bsr    InitVektors
  3231.  
  3232. Error3        bsr    CloseDisplay
  3233.  
  3234. ErrorScreen    move.l    $0004.w,a6
  3235.         tst.l    DislibBase(a4)
  3236.         beq.s    NoDislib
  3237.         move.l    DislibBase(a4),a1
  3238.         CALL    CloseLibrary
  3239. NoDislib    move.l    IntBase(a4),a1
  3240.         CALL    CloseLibrary
  3241.         move.l    GraphicsBase(a4),a6
  3242.         tst.w    FontOpen(a4)
  3243.         beq.s    Error1
  3244.         move.l    FontBase(a4),a1
  3245.         CALL    CloseFont
  3246. Error1        move.l    GraphicsBase(a4),a1
  3247.         move.l    $0004.w,a6
  3248.         CALL    CloseLibrary
  3249.         lea    IORequest(a4),a1
  3250.                 move.l    $0004.w,a6
  3251.                 CALL    CloseDevice
  3252. ErrorTotal    move.l    BaseStack(a4),a7
  3253.         move.l    WBMessage(a4),d2
  3254.         move.l    ReturnCode(a4),d3
  3255.         move.l    ZeroSpeicher,a1
  3256.         move.l    #GesLen,d0
  3257.         CALL    FreeMem
  3258. ErrorTotal2    tst.l    d2    ; WB-Start?
  3259.         beq.s    FromCLI
  3260.         move.l    d2,a1
  3261.         move.l    $0004.w,a6
  3262.         CALL    Forbid
  3263.         CALL    ReplyMsg
  3264.         rts
  3265. FromCLI        move.l    $0004.w,a6
  3266.         lea    DosName(pc),a1
  3267.         moveq    #0,d0
  3268.         CALL    OpenLibrary
  3269.         tst.l    d0
  3270.         beq.s    .NoDos
  3271.         move.l    ThisTask(a6),a0
  3272.         move.l    d0,d6
  3273.         exg    d6,a6
  3274.         move.l    pr_CurrentDir(a0),d1
  3275.         CALL    UnLock
  3276.         move.l    a6,a1
  3277.         move.l    d6,a6
  3278.         CALL    CloseLibrary
  3279. .NoDos        move.l    d3,d0
  3280.         rts
  3281.  
  3282. CloseDisplay    tst.l    TextScreen(a4)
  3283.         beq.s    Error2_1
  3284.         move.l    TextScreen(a4),a1
  3285.         move.l    TextSize(a4),d0
  3286.         move.l    $0004.w,a6
  3287.         CALL    FreeMem
  3288.         clr.l    TextScreen(a4)
  3289. Error2_1    tst.l    MainWindow(a4)
  3290.         beq.s    Error2
  3291.         move.l    IntBase(a4),a6
  3292.         move.l    MainWindow(a4),a0
  3293.         CALL    ClearMenuStrip
  3294.         move.l    MainWindow(a4),a0
  3295.         bsr    RemoveSignal
  3296.         CALL    CloseWindow
  3297.         clr.l    MainWindow(a4)
  3298. Error2        rts
  3299.  
  3300. OpenMyFont    move.l    a0,d5
  3301.         move.l    $0004.w,a6
  3302.         lea    GraphicsName(pc),a1
  3303.         moveq.l    #0,d0
  3304.         CALL    OpenLibrary
  3305.         move.l    d0,GraphicsBase(a4)
  3306.         move.l    d0,a6
  3307.         move.l    d5,d0
  3308.         tst.b    NewFontName(a4)
  3309.         beq    TakeThisFont
  3310.         lea    NewFontName(a4),a0
  3311.         move.l    a0,FontDefs
  3312.         move.w    NewFontSize(a4),FontSize
  3313.  
  3314. NoInsertNewF    move.l    $0004,a6
  3315.         lea    DiskFontName(pc),a1
  3316.         moveq.l    #0,d0
  3317.         CALL    OpenLibrary
  3318.         move.l    d0,a6
  3319.         beq.s    TryOrdinary
  3320.         lea    FontDefs(pc),a0
  3321.         CALL    OpenDiskFont
  3322.         move.l    d0,FontBase(a4)
  3323.         move.l    a6,a1
  3324.         move.l    $0004,a6
  3325.         CALL    CloseLibrary
  3326.         move.l    GraphicsBase(a4),a6
  3327.         move.l    FontBase(a4),d0
  3328.         bne    FontIsOk
  3329.         bra.s    ReTakeTopaz2
  3330.  
  3331. TryOrdinary    lea    FontDefs(pc),a0
  3332.         CALL    OpenFont
  3333.         move.l    d0,FontBase(a4)
  3334.         bne    FontIsOk
  3335. ReTakeTopaz2    bset    #0,SetError(a4)
  3336. ReTakeTopaz    lea    FontName(pc),a0
  3337.         move.l    a0,FontDefs
  3338.         move.w    #8,FontSize
  3339.         bra.s    TryOrdinary
  3340.  
  3341. FontIsOk    move.w    #1,FontOpen(a4)
  3342.         move.l    d0,a0
  3343.         btst.b    #FPB_PROPORTIONAL,tf_Flags(a0)
  3344.         beq.s    TakeThisFont
  3345.         bset    #1,SetError(a4)
  3346. ScreenErrorF    tst.w    FontOpen(a4)
  3347.         beq.s    ReTakeTopaz
  3348.         move.l    d0,a1
  3349.         CALL    CloseFont
  3350.         clr.w    FontOpen(a4)
  3351.         bra.s    ReTakeTopaz
  3352.  
  3353. TakeThisFont    move.l    d0,a0
  3354.         move.w    tf_YSize(a0),FontY(a4)
  3355.         move.w    tf_XSize(a0),FontX(a4)
  3356.         move.w    tf_Baseline(a0),Y0Pos(a4)
  3357.         move.w    FontY(a4),d0
  3358.         sub.w    tf_Baseline(a0),d0
  3359.         move.w    d0,Y0Rest(a4)
  3360.         rts
  3361.  
  3362. OpenDisplay    move.l    IntuitionBase(a4),a6
  3363.         tst.b    PubName(a4)
  3364.         beq.s    OpenWB
  3365.         tst.w    V36OK(a4)
  3366.         beq.s    OpenWB
  3367.         lea    PubName(a4),a0
  3368.         CALL    LockPubScreen
  3369.         tst.l    d0
  3370.         beq.s    OpenWB
  3371.         move.l    d0,WD_Screen
  3372.         move.w    #PUBLICSCREEN,SC_Type
  3373.         move.w    #PUBLICSCREEN,SC_Type2
  3374.         move.l    d0,WD_Screen2
  3375. OpenWB        lea    WindowDefs(pc),a0
  3376.         CALL    OpenWindow
  3377.         move.l    d0,MainWindow(a4)
  3378.         Push    d0/a0-a1
  3379.         tst.l    WD_Screen
  3380.         beq.s    DontUnlock
  3381.         move.l    WD_Screen,a1
  3382.         sub.l    a0,a0
  3383.         CALL    UnlockPubScreen
  3384. DontUnlock    Pull    d0/a0-a1
  3385.         tst.l    d0
  3386.         beq    Error3
  3387.         move.l    d0,a0
  3388.         move.l    wd_WScreen(a0),a1
  3389.         move.w    sc_Width(a1),wd_MaxWidth(a0)
  3390.         move.w    sc_Height(a1),wd_MaxHeight(a0)
  3391.         move.l    sc_Font(a1),ScreenFont(a4)
  3392.  
  3393.         RSave
  3394.         move.l    wd_RPort(a0),a1
  3395.         move.l    rp_Font(a1),a0
  3396.         move.l    a0,FontBase(a4)
  3397.         bsr    OpenMyFont
  3398.         RLoad
  3399.     
  3400.         move.w    FontX(a4),d0
  3401.         mulu    #76,d0            ;78 Zeichen solltens schon sein
  3402.         add.w    #24,d0    ;RAND
  3403.         cmp.w    wd_MaxWidth(a0),d0
  3404.         ble.s    ScreenReicht
  3405.  
  3406.         RSave
  3407.         move.l    GraphicsBase(a4),a6
  3408.         bset    #3,SetError(a4)
  3409.         move.l    FontBase(a4),d0
  3410.         bsr    ScreenErrorF
  3411.         RLoad
  3412.         move.w    FontX(a4),d0
  3413.         mulu    #76,d0
  3414.         add.w    #24,d0    ;RAND
  3415.  
  3416. ScreenReicht    move.w    d0,d6
  3417.         cmp.w    wd_Width(a0),d0
  3418.  
  3419.         bcs.s    WidthIsOk
  3420.  
  3421.         RSave
  3422.         sub.w    wd_Width(a0),d0
  3423.         clr.l    d1
  3424.         CALL    SizeWindow
  3425.         move.l    $0004,a6
  3426. NotThat2    move.l    MainWindow(a4),a0
  3427.         move.l    wd_UserPort(a0),a0
  3428.         CALL    WaitPort
  3429.         move.l    MainWindow(a4),a0
  3430.         move.l    wd_UserPort(a0),a0
  3431.         CALL    GetMsg
  3432.         tst.l    d0
  3433.         beq    NotThat2
  3434.         move.l    d0,a1
  3435.         CALL    ReplyMsg
  3436.         RLoad
  3437.  
  3438. WidthIsOk    move.w    d6,wd_MinWidth(a0)
  3439.  
  3440.         lea    WindowDefs2(pc),a2
  3441.         move.w    wd_Width(a0),d0
  3442.         move.w    d0,nw_Width(a2)
  3443.         move.w    d0,nw_MinWidth(a2)
  3444.         move.w    d0,nw_MaxWidth(a2)
  3445.         move.w    FontY(a4),d0
  3446.         mulu    #24,d0
  3447.         add.w    #16,d0
  3448.         move.w    d0,nw_Height(a2)
  3449.         move.w    d0,nw_MinHeight(a2)
  3450.         move.w    d0,nw_MaxHeight(a2)
  3451.  
  3452.         bsr    SetupScreen
  3453.  
  3454.         move.l    wd_RPort(a0),WDRastPort(a4)
  3455.         move.l    WDRastPort(a4),a5
  3456.         bsr    EnterSignal
  3457.  
  3458.         move.l    a0,-(sp)
  3459.         move.l    a5,a1
  3460.         move.l    FontBase(a4),a0
  3461.         move.l    GraphicsBase(a4),a6
  3462.         CALL    SetFont
  3463.         move.l    FontBase(a4),a0
  3464.         
  3465.  
  3466.         lea    FirstItem(pc),a2
  3467.         bsr    RepairMenues
  3468.  
  3469.         lea    HelpItem(pc),a2
  3470.         bsr    RepairMenues
  3471.  
  3472.         move.l    (sp)+,a0
  3473.         move.l    IntuitionBase(a4),a6
  3474.         lea    FirstMenu(pc),a1
  3475.         CALL    SetMenuStrip
  3476.  
  3477.         move.l    $0004.w,a6
  3478.         moveq.l    #0,d0
  3479.         move.l    MainWindow(a4),a0
  3480.         move.w    wd_MaxWidth(a0),d0
  3481.         divu    FontX(a4),d0
  3482.         move.w    d0,TextWidth(a4)
  3483.         move.w    wd_MaxHeight(a0),d1
  3484.         divu    FontY(a4),d1
  3485.         mulu    d1,d0
  3486.         move.l    d0,TextSize(a4)
  3487.         move.l    #MEMF_CLEAR,d1
  3488.         CALL    AllocMem
  3489.         move.l    d0,TextScreen(a4)
  3490.         beq    Error3
  3491.         bsr    ShowInsMode
  3492.         rts
  3493.  
  3494. RepairMenues    move.l    ScreenFont(a4),a0
  3495.         CALL    OpenFont
  3496.         move.l    d0,a1
  3497.  
  3498.         move.w    tf_XSize(a1),d3
  3499.         move.w    tf_YSize(a1),d4
  3500.         sub.w    tf_Baseline(a1),d4
  3501.         add.w    tf_YSize(a1),d4
  3502. ManageMenues    move.w    6(a2),d1
  3503.         mulu    d4,d1
  3504.         move.w    d1,6(a2)    ;Position
  3505.         move.w    d4,10(a2)    ;Height
  3506.         move.w    8(a2),d1
  3507.         mulu    d3,d1
  3508.         move.w    d1,8(a2)
  3509.         move.l    (a2),a2
  3510.         cmp.l    #0,a2
  3511.         bne.s    ManageMenues
  3512.         CALL    CloseFont
  3513.         rts
  3514.  
  3515.     ;******* Zahlenunterroutinen ******
  3516.  
  3517. TestAdressGueltig
  3518.         bsr    SearchNextChar
  3519. TestAdressG2    cmp.b    #"a",d0
  3520.         bcc.s    BuchSTT
  3521.         cmp.b    #"0",d0
  3522.         bcs.s    Ungueltig
  3523.         cmp.b    #"9"+1,d0
  3524.         bcc.s    Ungueltig
  3525. BuchSTTok    moveq.l    #0,d0
  3526.         rts
  3527. BuchSTT        cmp.b    #"g",d0
  3528.         bcs.s    BuchSTTok
  3529. Ungueltig    moveq    #1,d0
  3530.         rts
  3531.  
  3532. GetHexAdress    bsr    SearchNextChar
  3533.         beq    FrageZeichen
  3534.         cmp.b    #"^",d0
  3535.         beq.s    ScanVar
  3536.         cmp.b    #"&",d0
  3537.         beq.s    ScanRela
  3538.         bsr.s    GetHexNum
  3539.         beq    FrageZeichen
  3540.         rts
  3541. ScanVar        move.l    a0,-(sp)
  3542.         addq    #1,d5
  3543.         bsr    GetVarVal
  3544.         move.l    (sp)+,a0
  3545.         rts
  3546. ScanRela    move.l    a0,-(sp)
  3547.         addq    #1,d5
  3548.         bsr    GetHexNumAdr
  3549.         move.l    (sp)+,a0
  3550.         rts
  3551.  
  3552. GetHexNum    moveq.l    #0,d0
  3553.         moveq.l    #0,d1
  3554. GetHexNum2    move.b    (a1,d5),d3
  3555.         cmp.b    #" ",d3
  3556.         beq.s    StringOver
  3557.         cmp.b    #"A",d3
  3558.         bcc.s    BuchStb
  3559.         cmp.b    #"0",d3
  3560.         bcs.s    StringOver
  3561.         cmp.b    #"9"+1,d3
  3562.         bcc.s    StringOver
  3563.         sub.b    #"0",d3
  3564.         bra.s    Puttin
  3565. BuchStb        cmp.b    #"G",d3
  3566.         bcc.s    TakeTwo
  3567.         sub.b    #"A"-10,d3
  3568. Puttin        lsl.l    #4,d0
  3569.         or.b    d3,d0
  3570.         addq    #1,d1
  3571.         addq    #1,d5
  3572.         bra.s    GetHexNum2
  3573. StringOver    tst.l    d1
  3574.         rts
  3575. TakeTwo        cmp.b    #"a",d3
  3576.         bcs.s    StringOver
  3577.         cmp.b    #"g",d3
  3578.         bcc.s    StringOver
  3579.         sub.b    #"a"-10,d3
  3580.         bra.s    Puttin
  3581.  
  3582. GetHexByte    moveq.l    #0,d0
  3583.         moveq.l    #0,d1
  3584. GetHexByte2    move.b    (a1,d5),d3
  3585.         cmp.b    #" ",d3
  3586.         beq.s    StringOver3
  3587. ConvertNibble    cmp.b    #"a",d3
  3588.         bcc.s    BuchStb2
  3589.         cmp.b    #"0",d3
  3590.         bcs.s    StringOver3
  3591.         cmp.b    #"9"+1,d3
  3592.         bcc.s    StringOver3
  3593.         sub.b    #"0",d3
  3594.         bra.s    Puttin2
  3595. BuchStb2    cmp.b    #"g",d3
  3596.         bcc.s    StringOver3
  3597.         sub.b    #$57,d3
  3598. Puttin2        lsl.l    #4,d0
  3599.         or.b    d3,d0
  3600.         addq    #1,d1
  3601.         addq    #1,d5
  3602.         cmp.w    #$02,d1
  3603.         bcs.s    GetHexByte2
  3604. StringOver3    tst.l    d1
  3605.         rts
  3606.  
  3607. GetDezNum    moveq.l    #0,d0
  3608.         moveq.l    #0,d1
  3609.         moveq.l    #0,d2
  3610. GetDezNr    move.b    (a1,d5),d1
  3611.         cmp.b    #"0",d1
  3612.         bcs    StringOver2
  3613.         cmp.b    #"9"+1,d1
  3614.         bcc    StringOver2
  3615.         sub.w    #$30,d1
  3616.         movem.l    d1-d5,-(sp)
  3617.         move.l    #$0a,d1
  3618.         bsr    Mult32Bit
  3619.         movem.l    (sp)+,d1-d5
  3620.         add.l    d1,d0
  3621.         addq    #1,d5
  3622.         addq    #1,d2
  3623.         bra.s    GetDezNr
  3624. StringOver2    rts    
  3625.  
  3626. GetBinNum    moveq.l    #0,d1
  3627. GetBinLoop    bsr    SearchNextChar
  3628.         beq.s    NumOver
  3629.         lsl.l    #1,d1
  3630.         cmp.b    #"0",d0
  3631.         beq.s    PutNone
  3632.         cmp.b    #"1",d0
  3633.         bne.s    NumOver
  3634.         bset    #0,d1
  3635. PutNone        addq    #1,d5
  3636.         bra.s    GetBinLoop        
  3637. NumOver        move.l    d1,d0
  3638.         rts
  3639.  
  3640. PrintHex    move.b    d1,d2
  3641.         lsr.b    #4,d1
  3642.         bsr.s    GetNibble
  3643.         move.l    d1,d0
  3644.         bsr    Print
  3645.         move.b    d2,d1
  3646.         and.b    #$0f,d1
  3647.         bsr.s    GetNibble
  3648.         move.l    d1,d0
  3649.         bra    Print
  3650.  
  3651. GetNibble    cmp.b    #$0a,d1
  3652.         bcs.s    Number
  3653.         add.b    #"a"-$0a,d1
  3654.         rts
  3655. Number        add.b    #$30,d1
  3656.         rts
  3657.  
  3658. PrintWord    move.w    d0,d3
  3659.         bsr    PrintSpace
  3660. PrintWordN    move.l    d1,-(sp)
  3661.         move.w    d3,d1
  3662.         lsr.w    #8,d1
  3663.         bsr    PrintHex
  3664.         move.w    d3,d1
  3665.         bsr    PrintHex
  3666.         move.l    (sp)+,d1
  3667.         rts
  3668.  
  3669. PrintLong    movem.l    a0/d0-d2,-(sp)
  3670.         move.l    d0,LongTween(a4)
  3671.         moveq.l    #0,d1
  3672.         lea    LongTween(a4),a0
  3673.         move.b    0(a0),d1
  3674.         bsr    PrintHex
  3675.         move.b    1(a0),d1
  3676.         bsr    PrintHex
  3677.         move.b    2(a0),d1
  3678.         bsr    PrintHex
  3679.         move.b    3(a0),d1
  3680.         bsr    PrintHex
  3681.         movem.l    (sp)+,a0/d0-d2
  3682.         rts
  3683.  
  3684. PrintLongWithout movem.l    a0/d0-d2,-(sp)
  3685.         move.l    d3,LongTween(a4)
  3686.         moveq.l    #0,d1
  3687.         lea    LongTween(a4),a0
  3688.         move.b    0(a0),d1
  3689.         beq.s    PLW1
  3690.         bsr    PrintHex
  3691. PLW1        move.b    1(a0),d1
  3692.         tst.w    0(a0)
  3693.         beq.s    PLW2
  3694.         bsr    PrintHex
  3695. PLW2        move.b    2(a0),d1
  3696.         bne.s    PLW3
  3697.         tst.w    0(a0)
  3698.         beq.s    PLW4
  3699. PLW3        bsr    PrintHex
  3700. PLW4        move.b    3(a0),d1
  3701.         bsr    PrintHex
  3702.         movem.l    (sp)+,a0/d0-d2
  3703.         rts
  3704.  
  3705. PrintBinaer16    move.w    #15,d1
  3706.         swap    d0
  3707.         bra.s    PrintBinaerAll
  3708. PrintBinaer32    move.w    #31,d1
  3709. PrintBinaerAll    move.l    d0,d2
  3710. PrintBinaerLoop    move.w    #"0",d0
  3711.         lsl.l    #1,d2
  3712.         bcc.s    PrintAZero
  3713.         move.w    #"1",d0
  3714. PrintAZero    bsr    Print
  3715.         dbf    d1,PrintBinaerLoop
  3716.         rts
  3717.  
  3718. PrintDezimal    lea    DezTab(pc),a0
  3719.         move.l    d0,d1
  3720.         tst.l    d0
  3721.         bpl.s    PrDez0
  3722.         move.b    #"-",d0
  3723.         bsr    Print
  3724.         neg.l    d1
  3725. PrDez0        moveq.l    #0,d4    ;leading zeroes
  3726. PrDez        moveq.l    #0,d0
  3727.         move.l    (a0)+,d2
  3728.         beq.s    DivEnde
  3729.         move.l    d1,d3
  3730. PrDez2        sub.l    d2,d3
  3731.         bmi.s    ZifferOver
  3732.         move.l    d3,d1
  3733.         addq    #1,d0
  3734.         bra.s    PrDez2
  3735. ZifferOver    tst.w    d0
  3736.         bne.s    PrintAnyWay
  3737.         tst.w    d4
  3738.         beq.s    PrDez
  3739. PrintAnyWay    moveq    #1,d4
  3740.         add.w    #$30,d0
  3741.         bsr    Print
  3742.         bra.s    PrDez
  3743. DivEnde        tst.w    d4
  3744.         bne.s    DivE2
  3745.         move.b    #"0",d0
  3746.         bsr    Print
  3747. DivE2        rts
  3748.  
  3749. DezTab        dc.l    1000000000,100000000,10000000,1000000,100000,10000,1000,100,10,1,0
  3750.  
  3751.  
  3752. ;****************** Dissassembler *****************
  3753.  
  3754. BDizzy        tst.w    d4
  3755.         bmi.s    ComplexOne
  3756.         bsr    GetScrollParas
  3757.         bmi    ReKey
  3758.         move.l    d0,a0
  3759.         bsr.s    OneDissPage
  3760.         bra    EmptyLine
  3761.  
  3762. OneDissPage    move.b    #$0c,d0
  3763.         bsr    Print
  3764.         move.w    TextHeight(a4),d7
  3765.         subq    #2,d7
  3766.         bra.s    OnePD2
  3767. OnePageDown    bsr    PrintReturn
  3768. OnePD2        move.l    d7,-(sp)
  3769.         bsr    PrintDisLine
  3770.         move.l    (sp)+,d7
  3771.         dbf    d7,OnePageDown
  3772.         rts
  3773.  
  3774. ComplexOne    bsr    GetScrollParas
  3775.         bmi    ReKey
  3776.         move.l    d0,-(sp)
  3777.         move.b    #$0c,d0
  3778.         bsr    Print
  3779.         move.w    maxY(a4),d0
  3780.         sub.w    FontY(a4),d0
  3781.         sub.w    Y0Rest(a4),d0
  3782.         bsr    TextFlush
  3783.         move.w    d0,rp_cp_y(a5)
  3784.         move.l    (sp)+,d0
  3785.         addq.l    #2,d0
  3786. NextLineUPD    move.l    d0,d1
  3787.         sub.l    #$24,d0
  3788. TryToGetIt2    move.l    d0,a0
  3789.         movem.l    d0-d6/a0-a6,-(sp)
  3790.         bsr    GetCommandData
  3791.         movem.l    (sp)+,a0-a6/d0-d6
  3792.         ext.l    d7
  3793.         add.l    d7,d0
  3794.         cmp.l    d1,d0
  3795.         blt.s    TryToGetIt2
  3796.         move.l    a0,d0
  3797.         move.l    d0,OutPutStop(a4)
  3798.         RSave
  3799.         bsr    PrintDisLine
  3800.         move.b    #$0d,d0
  3801.         bsr    Print
  3802.         RLoad
  3803.         move.w    FontY(a4),d1
  3804.         sub.w    d1,rp_cp_y(a5)
  3805.         tst.w    rp_cp_y(a5)
  3806.         bpl.s    NextLineUPD
  3807.         move.w    maxY(a4),d1
  3808.         sub.w    FontY(a4),d1
  3809.         sub.w    Y0Rest(a4),d1
  3810.         move.w    d1,rp_cp_y(a5)
  3811.         bra    EmptyLine
  3812.  
  3813. SDizzy        move.b    #$0d,d0
  3814.         bsr    Print
  3815.         bsr    SearchNextChar
  3816.         beq.s    eKey2
  3817.         bsr    GetHexNum
  3818.         beq.s    eKey2
  3819.         and.l    #$fffffffe,d0
  3820.         tst.w    d4
  3821.         bpl.s    NormalDown
  3822.         move.l    d0,d1
  3823.         sub.l    #$24,d0
  3824. TryToGetIt    move.l    d0,a0
  3825.         movem.l    d0-d6/a0-a6,-(sp)
  3826.         bsr    GetCommandData
  3827.         movem.l    (sp)+,a0-a6/d0-d6
  3828.         ext.l    d7
  3829.         add.l    d7,d0
  3830.         cmp.l    d1,d0
  3831.         blt.s    TryToGetIt
  3832.         move.l    a0,d0
  3833.         bra.s    NewOne
  3834.  
  3835. NormalDown    movem.l    d0-d6/a0-a6,-(sp)
  3836.         move.l    d0,a0
  3837.         bsr    GetCommandData
  3838.         movem.l    (sp)+,a0-a6/d0-d6
  3839.         ext.l    d7
  3840.         add.l    d7,d0
  3841.         move.l    d0,a0
  3842. NewOne        move.l    d0,OutPutStop(a4)
  3843.         bsr    PrintDisLine
  3844. eKey2        rts
  3845.  
  3846. DisAssemble    bsr    GetThemTwo
  3847. PrintGain    bsr    PrepareForLine
  3848.         bsr    PrintDisLine
  3849.         bsr    TestBreak
  3850.         cmp.l    OutPutStop(a4),a0
  3851.         bcs.s    PrintGain
  3852.         bra    EmptyLine
  3853.  
  3854. PrepareForLine    bsr    PrintReturn
  3855.         Push    d0-d7/a0-a6
  3856.         bsr    ClearRight
  3857.         Pull    d0-d7/a0-a6
  3858.         rts
  3859.  
  3860. PrintDisLine    move.b    #".",d0
  3861.         bsr    Print
  3862.         move.b    #",",d0
  3863.         bsr    Print
  3864.         move.l    a0,d0
  3865.         and.l    #$fffffffe,d0
  3866.         move.l    d0,a0
  3867.         bsr    PrintLong
  3868.         bsr    TextFlush
  3869.         bsr    PrintSpace
  3870.         bsr    GetCommandData
  3871.         and.l    #$ff,d7
  3872.         add.l    d7,a0
  3873.         bsr    TextFlush
  3874.         move.w    #DInPos,d0
  3875.         bsr    SetCursorX
  3876.         FlushCursor
  3877.         move.l    d7,-(sp)
  3878.         bsr    PrintCommand
  3879.         move.l    (sp)+,d7
  3880.         rts
  3881.  
  3882. GetCommandData    tst.l    DislibBase(a4)
  3883.         beq.s    DoAsUsual
  3884.         movem.l    d0-d2/a0-a2/a6,-(sp)
  3885.         move.l    DislibBase(a4),a6
  3886.         move.l    a0,a1
  3887.         lea    DisStruct(a4),a2
  3888.         CALL    DisAsm
  3889.         clr.l    d7
  3890.         move.b    dl_ByteLen(a2),d7
  3891.         movem.l    (sp)+,d0-d2/a0-a2/a6
  3892.         rts
  3893.  
  3894. DoAsUsual    moveq.l    #0,d0
  3895.         move.b    (a0),d0
  3896.         move.w    d0,d2
  3897.         lea    DisJumpTab(pc),a2
  3898.         lsr.w    #4,d0
  3899.         lsl.w    #2,d0
  3900.         move.w    (a0),d1
  3901.         moveq.l    #0,d3
  3902.         moveq.l    #0,d5
  3903.         moveq.l    #0,d7
  3904.         jmp    (a2,d0)
  3905.  
  3906. DisJumpTab    bra.w    Code0000
  3907.         bra.w    Code0001
  3908.         bra.w    Code0010
  3909.         bra.w    Code0011
  3910.         bra.w    Code0100
  3911.         bra.w    Code0101
  3912.         bra.w    Code0110
  3913.         bra.w    Code0111
  3914.         bra.w    Code1000
  3915.         bra.w    Code1001
  3916.         bra.w    Code1010
  3917.         bra.w    Code1011
  3918.         bra.w    Code1100
  3919.         bra.w    Code1101
  3920.         bra.w    Code1110
  3921.         bra.w    Code1111
  3922.  
  3923. Code0000    tst.w    d1
  3924.         beq    SpecialORIB
  3925. NormalAsOne    lea    CommandList5(pc),a1
  3926.         bra    IdentifyCommand
  3927.  
  3928. SpecialORIB    move.w    2(a0),d0
  3929.         and.w    #$ff00,d0
  3930.         beq.s    NormalAsOne
  3931.         lea    DCW(pc),a2
  3932.         moveq    #AbsWordAdr,d3
  3933.         move.w    d1,d4
  3934.         moveq    #-1,d5
  3935.         moveq    #3,d2
  3936.         moveq.l    #2,d7        ;len 2
  3937.         rts
  3938.  
  3939. Code0001    ;    
  3940. Code0011    ;
  3941. Code0010    lea    CommandList4(pc),a1
  3942.         bra    IdentifyCommand
  3943.  
  3944. Code0100    lea    CommandList(pc),a1    
  3945.         bra    IdentifyCommand
  3946.  
  3947. Code0101    move.w    d1,d0
  3948.         and.w    #$c0,d0
  3949.         cmp.w    #$c0,d0
  3950.         beq    DecBranch
  3951.         lea    CommandList6(pc),a1
  3952.         bra    IdentifyCommand
  3953.         
  3954. Code0110    move.w    d1,d0
  3955.         lsr.w    #8,d0
  3956.         and.l    #$0f,d0
  3957.         lea    BranchText(pc),a2
  3958.         lea    Branches(pc),a1
  3959.         lsl.w    #1,d0
  3960.         add.l    d0,a1
  3961.         move.b    (a1),1(a2)
  3962.         move.b    1(a1),2(a2)    ;name
  3963.         moveq    #3,d2        ;no size
  3964.         moveq    #-1,d5        ;no dest
  3965.         move.w    d1,d0
  3966.         and.w    #$ff,d0
  3967.         move.l    a0,d4
  3968.         tst.w    d0
  3969.         beq.s    FarBranch
  3970.         moveq    #2,d7
  3971.         move.b    #"s",4(a2)
  3972.         ext.w    d0
  3973. BranchTogether    ext.l    d0
  3974.         add.l    d0,d4        ;source data
  3975.         addq.l    #2,d4
  3976.         moveq    #AbsLongAdr,d3    ;adr source
  3977.         rts
  3978. FarBranch    move.w    2(a0),d0
  3979.         move.b    #"w",4(a2)
  3980.         moveq    #4,d7
  3981.         bra.s    BranchTogether
  3982.  
  3983. Code0111    lea    CommandList10(pc),a1
  3984.         bra    IdentifyCommand
  3985.  
  3986. Code1000    lea    CommandList9(pc),a1
  3987.         bra    IdentifyCommand
  3988.  
  3989. Code1001    lea    CommandList11(pc),a1
  3990.         bra    IdentifyCommand
  3991.         
  3992. Code1010    lea    LineA(pc),a2
  3993.         bra    LineOther
  3994.  
  3995. Code1011    lea    CommandList8(pc),a1
  3996.         bra    IdentifyCommand    
  3997.  
  3998. Code1100    lea    CommandList7(pc),a1
  3999.         bra    IdentifyCommand
  4000.  
  4001. Code1101    lea    CommandList3(pc),a1
  4002.         bra    IdentifyCommand
  4003.  
  4004. Code1110    lea    CommandList2(pc),a1
  4005.         bra    IdentifyCommand
  4006.  
  4007. Code1111    lea    LineF(pc),a2
  4008. LineOther    move.w    #AbsWordAdr,d3    ;adr source
  4009.         move.w    (a0),d4        ;source data
  4010. LineOther2    moveq    #3,d2        ;no size
  4011.         moveq.l    #-1,d5        ;no destination
  4012.         moveq.l    #2,d7        ;len 2
  4013.         rts
  4014.  
  4015. Unknown        lea    UnknownCommand(pc),a2
  4016.         bra    LineOther
  4017.  
  4018. DecBranch    move.w    d1,d2
  4019.         lsr.w    #3,d2
  4020.         and.w    #$07,d2
  4021.         cmp.w    #$1,d2
  4022.         bne.s    SComm
  4023.         lea    DBranchText(pc),a2
  4024.         bsr    DBAndStext
  4025.         move.w    d1,d4
  4026.         move.w    #DirDataAdr,d3
  4027.         move.w    2(a0),d6
  4028.         ext.l    d6
  4029.         add.l    a0,d6
  4030.         addq.l    #2,d6
  4031.         move.w    #AbsLongAdr,d5
  4032.         moveq.l    #4,d7
  4033.         moveq.l    #3,d2
  4034.         rts
  4035. SComm        lea    Stext(pc),a2
  4036.         bsr    DBAndStext
  4037.         addq.l    #1,a2
  4038.         move.w    d1,d3
  4039.         moveq    #2,d7
  4040.         moveq    #3,d2
  4041.         moveq.l    #-1,d5
  4042.         and.l    #$3f,d3
  4043.         move.w    d3,d1
  4044.         bsr    CalcDataAndLen
  4045.         add    d0,d7
  4046.         move.l    d1,d4
  4047.         rts
  4048.  
  4049. DBAndStext    move.w    d1,d2
  4050.         lsr.w    #8,d2
  4051.         and.w    #$0f,d2
  4052.         cmp.w    #$02,d2
  4053.         bcc.s    OkBleib
  4054.         add.w    #$10,d2
  4055. OkBleib        lsl.w    #1,d2
  4056.         lea    Branches(pc),a1
  4057.         move.b    (a1,d2),2(a2)
  4058.         move.b    1(a1,d2),3(a2)
  4059.         rts
  4060.  
  4061. ;Label            Bin-Wert      Bezeichnung   printed as:
  4062. DirDataAdr    =    %000000        ; DataReg    dn
  4063. DirAdrsAdr    =    %001000        ; AdressReg    an
  4064. IndAdrsAdr    =    %100000        ; Adr Ind Pred    -(an)
  4065. IndAdrD16    =    %101000
  4066. AbsWordAdr    =    %111000        ; absolut kurz: xxxx
  4067. AbsLongAdr    =    %111001        ; absolut lang: xxxxxxxx
  4068. ImmAdr        =    %111100        ; unmittelbar : #xxxx
  4069.  
  4070. CalcDataAndLen    movem.l    a2/d7,-(sp)
  4071.         lea    AdressModes1(pc),a2
  4072.         move.w    d1,d0
  4073.         bmi.s    ThisNegSpecials
  4074.         and.w    #$38,d0
  4075.         cmp.w    #$38,d0
  4076.         bne.s    NormalAdrModes
  4077.         lea    AdressModes2(pc),a2
  4078.         move.w    d1,d0
  4079.         and.w    #$07,d0
  4080.         lsl.w    #3,d0
  4081. NormalAdrModes    lsr.w    #1,d0
  4082.         jsr    (a2,d0)
  4083.         movem.l    (sp)+,a2/d7
  4084.         rts
  4085. ThisNegSpecials    and.w    #$0f,d0
  4086.         lsl.w    #3,d0
  4087.         lea    AdressModes3(pc),a2
  4088.         bra.s    NormalAdrModes
  4089.  
  4090. AdressModes1    bra.w    ModdxDirect
  4091.         bra.w    ModaxDirect
  4092.         bra.w    ModaxIndirect
  4093.         bra.w    ModaxIndirectplus
  4094.         bra.w    ModaxIndirectmin
  4095.         bra.w    ModaxIndirectd16
  4096.         bra.w    ModaxIndirectd8rg
  4097.  
  4098. AdressModes2    bra.w    ModabsShort
  4099.         bra.w    ModabsLong
  4100.         bra.w    ModindPC
  4101.         bra.w    ModindPCreg
  4102.         bra.w    Modimmed
  4103.         bra.w    ModimmedSpec    ;101 !
  4104.         bra.w    Modimmed    ;110 ! unknowm usage
  4105.         bra.w    Modimmed    ;111 !
  4106.  
  4107. AdressModes3    bra.w    Modimmed    ;unused
  4108.         bra.w    ModdxDirect    ;CCR
  4109.         bra.w    ModdxDirect    ;SR
  4110.         bra.w    ModdxDirect    ;USP
  4111.         bra.w    ModMovem    ;Movem
  4112.  
  4113. ModdxDirect        ;    "
  4114. ModaxDirect        ; no extended data !
  4115. ModaxIndirect        ;    "
  4116. ModaxIndirectplus    ;    "
  4117. ModaxIndirectmin    moveq.l    #0,d0
  4118.             rts
  4119. ModindPC        move.w    (a0,d7),d1
  4120.             ext.l    d1
  4121.             ext.l    d7
  4122.             add.l    a0,d1
  4123.             add.l    d7,d1
  4124.             moveq    #2,d0
  4125.             rts
  4126. ModaxIndirectd8rg    ;
  4127. ModaxIndirectd16    ;
  4128. ModindPCreg        ;
  4129. ModabsShort        move.w    (a0,d7),d1
  4130.             moveq    #2,d0
  4131.             rts
  4132. ModabsLong        move.l    (a0,d7),d1
  4133.             moveq    #4,d0
  4134.             rts
  4135. Modimmed        cmp.w    #$02,d2
  4136.             beq.s    ModabsLong
  4137.             bra.s    ModabsShort
  4138. ModimmedSpec        move.w    #%111100,d3
  4139.             moveq.l    #0,d1
  4140.             move.w    d4,d1
  4141.             moveq.l    #0,d0
  4142.             rts
  4143. ModMovem        move.w    MovemRemember(a4),d1
  4144.             moveq.l    #0,d0
  4145.             rts
  4146.  
  4147.  
  4148. PrintCommand
  4149. ;a2 : Name des Befehls
  4150. ;d2 : Laenge des Operanden
  4151. ;d3 : Adressmodus Quelle
  4152. ;d4 : Daten für Quelle (falls nötig)
  4153. ;d5 : Adressmodus Ziel
  4154. ;d6 : Daten für Ziel (falls nötig)
  4155. ;d7 : ByteLänge des Befehls
  4156.         tst.l    DislibBase(a4)
  4157.         beq.s    Nodislibinst
  4158.         lea    DisStruct(a4),a1
  4159.         lea    dl_Instruction(a1),a2
  4160.         bsr    PrintText
  4161.         bsr    TextFlush
  4162.         move.w    #DOpPos,d0
  4163.         bsr    SetCursorX
  4164.         FlushCursor
  4165.         lea    dl_Operands(a1),a2
  4166.         bsr    PrintText
  4167.         rts
  4168.  
  4169. Nodislibinst    bsr    PrintText
  4170.         and.w    #$03,d2
  4171.         cmp.w    #$03,d2
  4172.         beq.s    NoLength
  4173.         move.w    #".",d0
  4174.         bsr    Print
  4175.         tst.b    d2
  4176.         beq.s    PointB
  4177.         cmp.w    #$01,d2
  4178.         beq.s    PointW
  4179.         move.w    #"l",d0
  4180.         bra    Further
  4181. PointW        move.w    #"w",d0
  4182.         bra    Further
  4183. PointB        move.w    #"b",d0
  4184. Further        bsr    Print
  4185. NoLength    bsr    TextFlush
  4186.         move.w    #DOpPos,d0
  4187.         bsr    SetCursorX
  4188.         FlushCursor
  4189.         move.w    d3,d0
  4190.         cmp.w    #$ffff,d0
  4191.         beq.s    NOSOURCE
  4192.         move.l    d3,d1
  4193.         move.l    d4,d7
  4194.         bsr    ExecuteMode
  4195.         tst.w    d5
  4196.         cmp.w    #$ffff,d5
  4197.         beq.s    NODEST
  4198.         move.w    #",",d0
  4199.         bsr    Print
  4200. NOSOURCE    move.w    d5,d0
  4201.         cmp.w    #$ffff,d0
  4202.         beq.s    NODEST
  4203.         move.l    d5,d1
  4204.         move.l    d6,d7
  4205.         bsr    ExecuteMode
  4206. NODEST        rts
  4207.  
  4208. ExecuteMode    lea    ModusTab1(pc),a2
  4209.         tst.w    d0
  4210.         bpl.s    Normals
  4211.         and.w    #$0f,d0
  4212.         lsl.w    #3,d0
  4213.         lea    ModusTab3(pc),a2
  4214.         bra.s    NormalAdrMod
  4215. Normals        and.w    #$3f,d0
  4216.         cmp.w    #%111000,d0
  4217.         bcc.s    SpecialMode
  4218.         and.w    #$38,d0
  4219.         bra.s    NormalAdrMod
  4220. SpecialMode    lea    ModusTab2(pc),a2
  4221.         and.w    #$07,d0
  4222.         lsl.w    #3,d0
  4223. NormalAdrMod    lsr.w    #1,d0
  4224.         jmp    (a2,d0)
  4225.  
  4226. ModusTab1    bra.w    dxDirect
  4227.         bra.w    axDirect
  4228.         bra.w    axIndirect
  4229.         bra.w    axIndirectplus
  4230.         bra.w    axIndirectmin
  4231.         bra.w    axIndirectd16
  4232.         bra.w    axIndirectd8rg
  4233. ModusTab2    bra.w    absShort
  4234.         bra.w    absLong
  4235.         bra.w    indPC
  4236.         bra.w    indPCreg
  4237.         bra.w    immed
  4238.         bra.w    immed    ;101 !
  4239.         bra.w    immed    ;110 ! unknowm usage
  4240.         bra.w    immed    ;111 !
  4241. ModusTab3    bra.w    immed    ; unused
  4242.         bra.w    ToCCRSpecial
  4243.         bra.w    ToSRSpecial
  4244.         bra.w    ToUSPSpecial
  4245.         bra.w    MovemSpezial
  4246.  
  4247. dxDirect    move.w    #"d",d0
  4248.         bsr    Print
  4249.         and.w    #$07,d7
  4250.         add.w    #$30,d7
  4251.         move.w    d7,d0
  4252.         bra    Print
  4253. axDirect    move.w    #"a",d0
  4254.         bsr    Print
  4255.         and.w    #$07,d7
  4256.         add.w    #$30,d7
  4257.         move.w    d7,d0
  4258.         bra    Print
  4259. axIndirect    move.w    #"(",d0
  4260.         bsr    Print
  4261.         bsr    axDirect
  4262.         move.w    #")",d0
  4263.         bra    Print
  4264. axIndirectplus    bsr    axIndirect
  4265.         move.w    #"+",d0
  4266.         bra    Print
  4267. axIndirectmin    move.w    #"-",d0
  4268.         bsr    Print
  4269.         bra    axIndirect
  4270. axIndirectd16    move.w    d7,d3
  4271.         bsr    PRWordNeg
  4272.         move.w    d1,d7
  4273.         bra    axIndirect
  4274. axIndirectd8rg    movem.l    d3/d4,-(sp)
  4275.         move.w    d1,d4
  4276.         move.w    d7,d1
  4277.         bsr    PRByteNeg
  4278.         move.w    #"(",d0
  4279.         bsr    Print
  4280.         exg.l    d7,d4
  4281.         bsr    axDirect
  4282.         move.l    d4,d7
  4283. InJumpPC    move.w    #",",d0
  4284.         bsr    Print
  4285.         lsr.w    #8,d7
  4286.         lsr.w    #4,d7
  4287.         btst    #3,d7
  4288.         bne.s    AdrReg
  4289.         bsr    dxDirect
  4290.         bra.s    Further2
  4291. AdrReg        bsr    axDirect
  4292. Further2    move.b    #".",d0
  4293.         bsr    Print
  4294.         btst    #11,d4
  4295.         beq.s    WordInside
  4296.         move.b    #"l",d0
  4297.         bra.s    FurtherX
  4298. WordInside    move.b    #"w",d0
  4299. FurtherX    bsr    Print
  4300.         move.w    #")",d0
  4301.         bsr    Print
  4302.         movem.l    (sp)+,d3/d4
  4303.         rts
  4304.         
  4305. immed        move.w    #"#",d0
  4306.         bsr    Print
  4307.         bra    PrintNumber
  4308.         
  4309. absShort    move.w    d7,d3
  4310.         bra    PrintWordN
  4311.  
  4312. absLong        move.l    d7,d0
  4313.         bra    PrintLong
  4314.  
  4315. indPC        movem.l    d3/d4,-(sp)
  4316.         move.l    d7,d0
  4317.         bsr    PrintLong
  4318.         move.b    #"(",d0
  4319.         bsr    Print
  4320.         move.b    #"p",d0
  4321.         bsr    Print
  4322.         move.b    #"c",d0
  4323.         bsr    Print
  4324.         move.b    #")",d0
  4325.         bsr    Print
  4326.         movem.l    (sp)+,d3/d4
  4327.         rts
  4328.  
  4329. indPCreg    movem.l    d3/d4,-(sp)
  4330.         move.w    d7,d1
  4331.         bsr    PrintHex
  4332.         move.b    #"(",d0
  4333.         bsr    Print
  4334.         move.b    #"p",d0
  4335.         bsr    Print
  4336.         move.b    #"c",d0
  4337.         bsr    Print
  4338.         move.w    d7,d4
  4339.         bra    InJumpPC
  4340.  
  4341. ToSRSpecial    move.w    #"s",d0
  4342.         bsr    Print
  4343.         move.w    #"r",d0
  4344.         bra    Print
  4345. ToUSPSpecial    move.w    #"u",d0
  4346.         bsr    Print
  4347.         move.w    #"s",d0
  4348.         bsr    Print
  4349.         move.w    #"p",d0
  4350.         bra    Print
  4351. ToCCRSpecial    move.w    #"c",d0
  4352.         bsr    Print
  4353.         bsr    Print
  4354.         move.w    #"r",d0
  4355.         bra    Print
  4356.  
  4357. MovemSpezial    movem.l    d0-d7,-(sp)
  4358.         move.w    d5,d0
  4359.         move.w    d7,d4
  4360.         and.w    #$38,d0
  4361.         cmp.w    #%100000,d0
  4362.         bne.s    NormalWayRound
  4363.  
  4364.         move.w    d4,d2        ;bits spiegeln für -(ax) adr- art
  4365.         move.w    #15,d0
  4366. umshift        roxr.w    d2
  4367.         roxl.w    d4
  4368.         dbra    d0,umshift
  4369.  
  4370. ;d2 : bitcounter
  4371. ;d4 : bits
  4372. ;d5 : flag for "/"
  4373.  
  4374. NormalWayRound    clr.w    d5
  4375.         moveq    #-1,d6
  4376.         moveq    #-1,d3
  4377.         clr.w    d2
  4378. PrintDRegs    btst    d2,d4
  4379.         beq.s    UnUsedD
  4380.         tst.w    d5
  4381.         beq.s    ErstesReg
  4382.         move.w    d2,d0
  4383.         subq    #1,d0
  4384.         cmp.w    d0,d6
  4385.         beq.s    FollowerD
  4386.         bsr    PrintSelected
  4387.         move.w    #"/",d0
  4388.         bsr    Print
  4389. ErstesReg    move.w    d2,d7
  4390.         move.w    d2,d3
  4391.         moveq    #1,d5
  4392.         bsr    PrintRightReg
  4393. FollowerD    move.w    d2,d6        ;Anfangs-Reg merken
  4394. UnUsedD        addq    #1,d2
  4395.         cmp.w    #8,d2
  4396.         beq.s    DataOver
  4397.         cmp.w    #16,d2
  4398.         bcs.s    PrintDRegs
  4399. DataOver    bsr    PrintSelected
  4400.         moveq    #-1,d6
  4401.         cmp.w    #16,d2
  4402.         bcs.s    PrintDRegs
  4403.         movem.l    (sp)+,d0-d7
  4404.         rts
  4405.  
  4406. PrintSelected    tst.w    d6
  4407.         bmi.s    NoPreFollow
  4408.         cmp.w    d6,d3
  4409.         beq.s    NoPreFollow
  4410.         move.w    #"-",d0
  4411.         bsr    Print
  4412.         move.w    d6,d7
  4413. PrintRightReg    cmp.w    #8,d7
  4414.         bcc    axDirect
  4415.         bra    dxDirect
  4416. NoPreFollow    rts
  4417.  
  4418. PrintNumber    movem.l    d0-d7/a0-a6,-(sp)
  4419.         tst.b    d2
  4420.         bne.s    SeemsNoByte
  4421.         and.l    #$ff,d7
  4422. SeemsNoByte    cmp.b    #$02,d2
  4423.         beq.s    LongWord
  4424. Word        bsr.s    PRWordNeg
  4425.         bra.s    EndNum
  4426. LongWord    bsr.s    PRLongNeg
  4427. EndNum        movem.l    (sp)+,d0-d7/a0-a6
  4428.         rts
  4429.         
  4430. PRByteNeg    move.l    d7,d1
  4431.         tst.b    d1
  4432.         bpl.s    NormalBB
  4433.         neg.b    d1
  4434.         move.b    #"-",d0
  4435.         bsr    Print
  4436. NormalBB    bra    PrintHex
  4437.  
  4438. PRWordNeg    move.l    d7,d3
  4439.         and.l    #$ffff,d3
  4440.         tst.w    d3
  4441.         bpl.s    NormalWW
  4442.         neg.w    d3
  4443.         move.w    #"-",d0
  4444.         bsr    Print
  4445. NormalWW    bra    PrintLongWithout
  4446.  
  4447. PRLongNeg    move.l    d7,d3
  4448.         tst.l    d3
  4449.         bpl.s    NormalLL
  4450.         neg.l    d3
  4451.         move.w    #"-",d0
  4452.         bsr    Print
  4453. NormalLL    bra    PrintLongWithout
  4454.  
  4455. IdentifyCommand    ;
  4456. NextCommand    move.w    d1,d0
  4457.         and.w    CAnd(a1),d0    ;Ausmaskieren
  4458.         cmp.w    CWord(a1),d0    ;Befehl erkannt ?
  4459.         beq.s    CommandFound
  4460. NextCommander    lea    CLen(a1),a1    ;add.l    ;Naechster Befehl
  4461.         tst.l    CName(a1)    ;Name Vorhanden?
  4462.         bne.s    NextCommand    ;dann naechster Befehl
  4463. CommandsOver    lea    DCW(pc),a2
  4464.         move.w    #AbsWordAdr,d3    ;adr source
  4465.         move.w    (a0),d4        ;source data
  4466.         moveq    #3,d2        ;no size
  4467.         moveq.l    #-1,d5        ;no destination
  4468.         moveq.l    #2,d7        ;len 2
  4469.         rts
  4470. CommandFound    move.l    CName(a1),a2    ;Name holen
  4471.         move.b    CModLen(a1),d0
  4472.         beq.s    NoLenHere
  4473.         move.w    d1,d2
  4474.         move.b    d0,d3
  4475.         and.w    #$0f,d3
  4476.         lsr.w    d3,d2
  4477.         and.w    #$03,d2
  4478.         lsr.b    #4,d0
  4479.         cmp.b    #1,d0
  4480.         beq.s    MurxLen
  4481.         cmp.b    #2,d0
  4482.         bne.s    OtherLens
  4483.         and.w    #1,d2
  4484.         addq    #1,d2
  4485.         bra.s    OtherLens
  4486. MurxLen        move.w    d2,d0
  4487.         moveq.l    #0,d2
  4488.         cmp.w    #1,d0
  4489.         beq.s    OtherLens
  4490.         move.w    #2,d2
  4491.         cmp.w    #2,d0
  4492.         beq.s    OtherLens
  4493.         move.w    #1,d2
  4494.         bra.s    OtherLens
  4495. NoLenHere    moveq    #3,d2
  4496. OtherLens    moveq.l    #2,d7    ;Grundlen = 2
  4497.         move.b    CSpecial(a1),d0
  4498.         cmp.b    #4,d0
  4499.         bne.s    NoMovemHere
  4500.         move.w    (a0,d7),MovemRemember(a4)
  4501.         addq    #2,d7
  4502. NoMovemHere    move.b    CModSource(a1),d0    ;SourceMode Byte
  4503.         beq    NoSource    ;no source = no dest
  4504.         bsr    OutMaskModes
  4505.         move.w    d1,d5    ;d1 retten 
  4506.         move.w    d3,d1
  4507.         bsr    CalcDataAndLen    ;Data and Len holen
  4508.         add    d0,d7
  4509.         move.l    d1,d4    ;data for source
  4510.         move.b    CModDest(a1),d0        ;DestMode Byte
  4511.         beq    NoDest
  4512.         movem.l    d3/d4,-(sp)
  4513.         move.l    d5,d3
  4514.         bsr    OutMaskModes2
  4515.         move.w    d3,d1
  4516.         move.w    d3,d5
  4517.         bsr    CalcDataAndLen
  4518.         add    d0,d7
  4519.         move.l    d1,d6
  4520.         movem.l    (sp)+,d3/d4
  4521.         rts
  4522.  
  4523. OutMaskModes    move.w    d1,d3
  4524. OutMaskModes2    move.b    d0,d4
  4525.         and.w    #$0f,d0
  4526.         lsr.w    d0,d3
  4527.         lsr.b    #2,d4
  4528.         and.w    #$3c,d4
  4529.         jmp    DissAssModes(pc,d4)
  4530.  
  4531. DissAssModes    bra.w    NormalMode
  4532.         bra.w    NormalMode
  4533.         bra.w    DatenMode
  4534.         bra.w    AdressMode
  4535.         bra.w    ImmedMode
  4536.         bra.w    TrapMode
  4537.         bra.w    CCRSRMovem
  4538.         bra.w    MoveSpecialTurn
  4539.         bra.w    ImmedInWord
  4540.         bra.w    Minusa0
  4541.         bra.w    a0Plus
  4542.         bra.w    MoveqSpec
  4543.         bra.w    MovepSpec
  4544.  
  4545. MoveSpecialTurn    and.w    #$3f,d3
  4546.         move.w    d3,d0
  4547.         lsr.w    #3,d0
  4548.         and.w    #$07,d3
  4549.         lsl.w    #3,d3
  4550.         or.w    d0,d3
  4551.         rts
  4552. MovepSpec    and.w    #$07,d3
  4553.         or.w    #%101000,d3
  4554.         rts
  4555. MoveqSpec    and.w    #$ff,d3
  4556.         bra.s    OtherWin
  4557. TrapMode    and.w    #$0f,d3
  4558.         bra.s    OtherWin
  4559. ImmedInWord    and.w    #$07,d3
  4560.         bne.s    OtherWin
  4561.         move.w    #$08,d3
  4562. OtherWin    move.w    d3,d4
  4563.         move.w    #%111101,d3
  4564.         rts
  4565. CCRSRMovem    moveq.l    #0,d3
  4566.         move.b    CSpecial(a1),d3
  4567.         or.w    #$8000,d3
  4568.         rts
  4569. Minusa0        and.w    #$07,d3
  4570.         or.w    #%100000,d3
  4571.         rts
  4572. a0Plus        and.w    #$07,d3
  4573.         or.w    #%011000,d3
  4574.         rts
  4575. ImmedMode    move.w    #ImmAdr,d3
  4576.         rts
  4577. AdressMode    and.w    #$07,d3
  4578.         or.w    #%001000,d3
  4579.         rts
  4580. DatenMode    and.w    #$07,d3
  4581.         rts
  4582. NormalMode    and.w    #$3f,d3
  4583.         rts
  4584.         
  4585. NoSource    moveq.l    #-1,d3
  4586.         moveq.l    #-1,d5
  4587.         moveq.l    #2,d7
  4588.         rts
  4589.  
  4590. NoDest        moveq.l    #-1,d5
  4591.         rts
  4592.  
  4593. TestHelp    move.l    $0004.w,a6
  4594.         tst.l    HelpWindow(a4)
  4595.         beq.s    NoMess
  4596.         move.l    HelpWindow(a4),a0
  4597.         move.l    wd_UserPort(a0),a0
  4598.         CALL    GetMsg
  4599.         tst.l    d0
  4600.         beq    NoMess
  4601.         move.l    d0,a1
  4602.         cmp.l    #CLOSEWINDOW,im_Class(a1)
  4603.         beq    CloseHelp
  4604.         cmp.l    #MOUSEBUTTONS,im_Class(a1)
  4605.         beq    CloseHelp
  4606.         CALL    ReplyMsg
  4607.         bra.s    TestHelp
  4608. NoMess        rts
  4609.  
  4610. PrintHelpScreen    RSave
  4611.         move.l    IntuitionBase(a4),a6
  4612.         lea    WindowDefs2(pc),a0
  4613.         CALL    OpenWindow
  4614.         move.l    d0,HelpWindow(a4)
  4615.         beq    HelpError
  4616.         move.l    d0,a0
  4617.         move.l    wd_RPort(a0),a5
  4618.         bsr    EnterSignal
  4619.         move.l    a5,a1
  4620.         move.l    FontBase(a4),a0
  4621.         move.l    GraphicsBase(a4),a6
  4622.         CALL    SetFont
  4623.         lea    HelpScreen(pc),a3
  4624.         bsr    Home
  4625.         move.w    #23,d7
  4626. PrintTheHelp    move.l    a3,a0
  4627.         move.w    #76,d0
  4628.         move.l    a5,a1
  4629.         move.l    GraphicsBase(a4),a6
  4630.         CALL    Text
  4631.         lea    76(a3),a3    ;add.l
  4632.         clr.w    rp_cp_x(a5)
  4633.         move.w    FontY(a4),d0
  4634.         add.w    d0,rp_cp_y(a5)
  4635.         dbf    d7,PrintTheHelp
  4636. HelpError    RLoad
  4637.         rts
  4638.  
  4639. CloseHelp    CALL    ReplyMsg
  4640.         bsr    CloseHelp2
  4641. NoClHelp    bra    TestHelp
  4642.  
  4643. CloseHelp2    
  4644.         tst.l    HelpWindow(a4)
  4645.         beq.s    NoClHelp
  4646.         move.l    HelpWindow(a4),a0
  4647.         bsr    RemoveSignal
  4648.         move.l    IntuitionBase(a4),a6
  4649.         CALL    CloseWindow
  4650.         clr.l    HelpWindow(a4)
  4651.         rts
  4652.  
  4653. EnterSignal    Push    d0-d1/a0
  4654.         move.l    wd_UserPort(a0),a0
  4655.         move.b    MP_SIGBIT(a0),d0
  4656.         moveq.l    #1,d1
  4657.         lsl.l    d0,d1
  4658.         or.l    d1,SignalMask(a4)
  4659.         Pull    d0-d1/a0
  4660.         rts
  4661.  
  4662. RemoveSignal    Push    d0-d1/a0
  4663.         move.l    wd_UserPort(a0),a0
  4664.         move.b    MP_SIGBIT(a0),d0
  4665.         moveq.l    #1,d1
  4666.         lsl.l    d0,d1
  4667.         eor.l    #$ffffffff,d1
  4668.         and.l    d1,SignalMask(a4)
  4669.         Pull    d0-d1/a0
  4670.         rts
  4671.  
  4672.     ;****** Bildschirm Routinen ******
  4673.  
  4674. TextFlush    movem.l    d0-d3/a0-a1/a6,-(sp)
  4675.         moveq.l    #0,d0
  4676.         move.w    FlushCursorX(a4),d0
  4677.         cmp.w    rp_cp_x(a5),d0
  4678.         beq.s    FlushNothing
  4679.         bsr    GetTextPos
  4680.         divu    FontX(a4),d0
  4681.         and.l    #$ffff,d0
  4682.         add.l    d0,a0
  4683.         moveq.l    #0,d2
  4684.         move.w    rp_cp_x(a5),d2
  4685.         move.w    FlushCursorX(a4),rp_cp_x(a5)
  4686.         divu    FontX(a4),d2
  4687.         and.l    #$ffff,d2
  4688.         sub.w    d0,d2    ;Anzahl der Zeichen
  4689.         move.w    d2,d0
  4690.         move.l    a5,a1
  4691.         move.l    GraphicsBase(a4),a6
  4692.         CALL    Text
  4693. FlushNothing    FlushCursor
  4694.         movem.l    (sp)+,d0-d3/a0-a1/a6
  4695.         rts
  4696.  
  4697. ExorCursor    bsr    TextFlush
  4698.         movem.l    d0-d3/a0/a6,-(sp)
  4699.         move.l    GraphicsBase(a4),a6
  4700.         move.l    a5,a1
  4701.         move.l    #RP_COMPLEMENT!RP_INVERSVID,d0
  4702.         CALL    SetDrMd
  4703.         move.l    a5,a1
  4704.         lea    AtTEXT(pc),a0    ;ist Space!
  4705.         moveq.l    #1,d0
  4706.         CALL    Text
  4707.         bsr    CursorLeft
  4708.         FlushCursor
  4709.         move.l    a5,a1
  4710.         move.l    #RP_JAM2,d0
  4711.         CALL    SetDrMd
  4712.         movem.l    (sp)+,d0-d3/a0/a6
  4713.         rts
  4714.  
  4715. PrintText0    movem.l    a2/d0,-(sp)
  4716.         move.l    a0,a2
  4717.         bra.s    PrintTextx2
  4718. PrintText    movem.l    a2/d0,-(sp)
  4719. PrintTextx2    moveq.l    #0,d0
  4720. PrintText2    move.b    (a2)+,d0
  4721.         beq.s    PrintTexte
  4722.         bsr    Print
  4723.         bra.s    PrintText2
  4724. PrintTexte    movem.l    (sp)+,a2/d0
  4725.         rts
  4726.  
  4727.         ;*print*
  4728. PrintInsPoss    tst.b    InsertMode(a4)
  4729.         beq.s    Print
  4730.         movem.l    d0-d5/a0-a2/a6,-(sp)
  4731.         and.l    #$ff,d0
  4732.         beq    Printe
  4733.         cmp.w    #$20,d0
  4734.         bcs.s    NormalChars2
  4735.         cmp.w    #$a0,d0
  4736.         bcc.s    NormalIns
  4737.         cmp.w    #$7f,d0
  4738.         bcc.s    NormalChars2
  4739. NormalIns    bsr    InsertChar
  4740.         bra.s    NormalChars
  4741. PrintReturn    move.w    #$0a,d0
  4742.         bra.s    Print
  4743. PrintSpace    move.w    #" ",d0
  4744. Print        movem.l    d0-d5/a0-a2/a6,-(sp)
  4745.         and.l    #$ff,d0
  4746.         beq    Printe
  4747.         cmp.w    #$20,d0
  4748.         bcs.s    NormalChars2
  4749.         cmp.w    #$a0,d0
  4750.         bcc.s    NormalChars
  4751.         cmp.w    #$7f,d0
  4752.         bcs.s    NormalChars
  4753. NormalChars2    lea    SpecialKeyTab(pc),a0
  4754.         bsr    SearchCodea0
  4755.         beq.s    Printe
  4756.         lea    SpecialKeyBra(pc),a0
  4757.         bsr    TextFlush
  4758.         jsr    (a0,d1)
  4759.         FlushCursor
  4760.         bra    Printe
  4761. NormalChars    bsr    GetTextPos
  4762.         move.b    d0,(a0,d1)
  4763.         bsr    CursorRight
  4764. Printe        movem.l    (sp)+,d0-d5/a0-a2/a6
  4765. CursorEnde    ;
  4766.         rts
  4767.  
  4768. CursorRight    move.w    FontX(a4),d0
  4769.         add.w    d0,rp_cp_x(a5)
  4770. ControlCRight    move.w    rp_cp_x(a5),d4
  4771.         cmp.w    maxX(a4),d4
  4772.         bcs.s    CursorEnde
  4773.         bra    CReturn
  4774.  
  4775. CursorLeft    move.w    FontX(a4),d0
  4776.         sub.w    d0,rp_cp_x(a5)
  4777.         bpl.s    CursorEnde
  4778.         move.w    maxX(a4),rp_cp_x(a5)
  4779.         move.w    FontX(a4),d0
  4780.         sub.w    d0,rp_cp_x(a5)
  4781.         bra    CursorUp
  4782.  
  4783. CursorUp    move.w    FontY(a4),d0
  4784.         sub.w    d0,rp_cp_y(a5)
  4785.         tst.w    rp_cp_y(a5)
  4786.         bpl.s    CursorEnde
  4787.         move.w    Y0Pos(a4),rp_cp_y(a5)
  4788.         bra    ScrollUp
  4789.  
  4790. CursorDown    move.w    FontY(a4),d0
  4791.         add.w    d0,rp_cp_y(a5)
  4792.         move.w    rp_cp_y(a5),d0
  4793.         sub.w    Y0Pos(a4),d0
  4794.         cmp.w    maxY(a4),d0
  4795.         bcs.s    CursorEnde
  4796.         move.w    FontY(a4),d0
  4797.         sub.w    d0,rp_cp_y(a5)
  4798.         bra    ScrollDown
  4799.  
  4800. CReturn        bsr    TextFlush
  4801.         tst.w    PrinterFlag(a4)
  4802.         beq.s    TotallyNormal
  4803.         bpl.s    PrintLineOut
  4804.         RSave
  4805.         move.w    #1,PrinterFlag(a4)
  4806.         tst.l    OutDHandle(a4)
  4807.         bne.s    FileAlreadyOpen
  4808.         move.l    DosBase(a4),a6
  4809.         move.l    OutDevice(a4),d1
  4810.         move.l    #MODE_NEWFILE,d2
  4811.         CALL    Open
  4812.         move.l    d0,OutDHandle(a4)
  4813. FileAlreadyOpen    RLoad
  4814.         bne.s    TotallyNormal
  4815. PrintError    clr.w    PrinterFlag(a4)
  4816. TotallyNormal    bsr.s    CursorDown
  4817. Return        move.w    #0,rp_cp_x(a5)
  4818.         FlushCursor
  4819.         rts
  4820. PrintLineOut    bsr    PrExecute
  4821.         bmi.s    PrintError
  4822.         bra.s    TotallyNormal
  4823.  
  4824. ShiftCRight    Push    d0/a0
  4825.         bsr    GetTextPos
  4826.         move.w    TextWidth2(a4),d0
  4827.         subq    #1,d0
  4828.         cmp.b    #" ",(a0,d0)
  4829.         bne.s    IsLast
  4830. SpaceDown    subq    #1,d0
  4831.         beq.s    KeepDown
  4832.         cmp.b    #" ",(a0,d0)
  4833.         beq.s    SpaceDown
  4834. KeepDown    addq    #1,d0
  4835. IsLast        bsr    SetCursorX
  4836.         Pull    d0/a0
  4837.         rts
  4838.  
  4839. ;BACK: a0: Adresse der Zeile, d1:Offset auf Cursor
  4840. GetTextPos    Push    d0
  4841.         moveq.l    #0,d0
  4842.         move.w    rp_cp_y(a5),d0
  4843.         divu    FontY(a4),d0
  4844.         mulu    TextWidth(a4),d0
  4845.         moveq    #0,d1
  4846.         move.w    rp_cp_x(a5),d1
  4847.         divu    FontX(a4),d1
  4848.         and.l    #$ffff,d1
  4849.         add.l    TextScreen(a4),d0
  4850.         move.l    d0,a0
  4851.         Pull    d0
  4852.         rts
  4853.  
  4854. ;d0:TextPos of Cursor
  4855. SetCursorX    Push    d0
  4856.         mulu    FontX(a4),d0
  4857.         move.w    d0,rp_cp_x(a5)
  4858.         Pull    d0
  4859.         rts
  4860.  
  4861. PrExecute    RSave
  4862.         move.l    OutDHandle(a4),d1
  4863.         beq.s    NoFileOpenNow
  4864.         bsr    GetTextPos
  4865.         move.l    a0,d2
  4866.         move.w    TextWidth2(a4),d3
  4867. SearchEnd    subq    #1,d3
  4868.         bmi.s    GiveAnyway
  4869.         cmp.b    #" ",(a0,d3)
  4870.         beq.s    SearchEnd
  4871. GiveAnyway    addq    #1,d3
  4872.         move.l    DosBase(a4),a6
  4873.         CALL    Write
  4874.         move.l    OutDHandle(a4),d1
  4875.         move.l    #Break,d2    ;'cause its a $0a
  4876.         move.l    #1,d3
  4877.         CALL    Write
  4878. NoFileOpenNow    tst.l    d0
  4879.         RLoad
  4880.         rts
  4881.  
  4882. DoTab        bsr    GetTextPos
  4883.         and.w    #$fff8,d0    ;alle 8 Zeichen ein Tab
  4884.         add.w    #8,d0
  4885.         bra    SetCursorX
  4886.  
  4887. BackSpace    bsr    CursorLeft
  4888. DeleteChar    bsr    GetTextPos
  4889. BackSpLoop    cmp.w    TextWidth2(a4),d1
  4890.         bcc.s    OutSloper
  4891.         move.b    1(a0,d1),(a0,d1)
  4892.         addq    #1,d1
  4893.         bra.s    BackSpLoop
  4894. OutSloper    move.b    #" ",(a0,d1)
  4895.         move.l    GraphicsBase(a4),a6
  4896.         move.l    a5,a1
  4897.         bsr    ClearReg
  4898.         move.w    FontX(a4),d0
  4899.         moveq.l    #0,d1
  4900.         move.w    rp_cp_x(a5),d2
  4901.         move.w    rp_cp_y(a5),d3
  4902.         sub.w    Y0Pos(a4),d3
  4903.         move.w    d3,d5
  4904.         add.w    FontY(a4),d5
  4905.         subq    #1,d5
  4906.         move.w    maxX(a4),d4
  4907.         CALL    ScrollRaster
  4908.         rts        
  4909.  
  4910. InsertModeSwitch eor.b    #$01,InsertMode(a4)
  4911.  
  4912. ShowInsMode    lea    Mode1(pc),a2
  4913.         tst.b    InsertMode(a4)
  4914.         bne.s    PrintMode1
  4915.         lea    Mode2(pc),a2
  4916. PrintMode1    lea    ScreenNameMode(pc),a0
  4917. InsertSName    move.b    (a2)+,(a0)+
  4918.         tst.b    (a2)
  4919.         bne.s    InsertSName
  4920.         move.l    IntuitionBase(a4),a6
  4921.         move.l    MainWindow(a4),a0
  4922.         lea    WindowName(pc),a1
  4923.         lea    ScreenName(pc),a2
  4924.         CALL    SetWindowTitles
  4925.         rts
  4926.  
  4927. InsertChar    move.l    d0,-(sp)
  4928.         bsr    GetTextPos
  4929.         move.w    TextWidth2(a4),d0
  4930. InsertCLoop    move.b    -1(a0,d0),(a0,d0)
  4931.         subq    #1,d0
  4932.         cmp.w    d1,d0
  4933.         bge.s    InsertCLoop
  4934.         move.b    #" ",(a0,d1)
  4935.         move.l    GraphicsBase(a4),a6
  4936.         move.l    a5,a1
  4937.         bsr    ClearReg
  4938.         move.w    FontX(a4),d0
  4939.         neg.l    d0
  4940.         moveq.l    #0,d1
  4941.         move.w    rp_cp_x(a5),d2
  4942.         move.w    rp_cp_y(a5),d3
  4943.         sub.w    Y0Pos(a4),d3
  4944.         move.w    d3,d5
  4945.         add.w    FontY(a4),d5
  4946.         subq    #1,d5
  4947.         move.w    maxX(a4),d4
  4948.         CALL    ScrollRaster
  4949.         move.l    (sp)+,d0
  4950.         rts        
  4951.  
  4952. ClearRight    bsr    GetTextPos
  4953. ClRightLoop    move.b    #" ",(a0,d1)
  4954.         addq    #1,d1
  4955.         cmp.w    TextWidth(a4),d1
  4956.         bcs.s    ClRightLoop
  4957.         move.l    GraphicsBase(a4),a6
  4958.         move.l    a5,a1
  4959.         CALL    ClearEOL
  4960. Dummy        rts
  4961.  
  4962. ScrollDown    movem.l    d0-d1/a0-a1,-(sp)
  4963.         clr.l    d1
  4964.         move.w    FontY(a4),d1
  4965.         bsr    DoScrolling
  4966.         moveq.l    #0,d0
  4967.         move.w    TextWidth(a4),d0
  4968.         move.l    TextScreen(a4),a0
  4969.         move.w    TextHeight(a4),d1
  4970.         subq    #1,d1
  4971.         mulu    d0,d1
  4972.         ;lsr.w    #2,d1 now move.b
  4973.         subq    #1,d1
  4974. MoveIt        move.b    (a0,d0),(a0)+
  4975.         dbf    d1,MoveIt
  4976.         move.w    TextWidth(a4),d1
  4977.         subq    #1,d1
  4978. ClearIt        move.b    #$20,(a0)+
  4979.         dbf    d1,ClearIt
  4980.         movem.l    (sp)+,d0-d1/a0-a1
  4981.         rts
  4982.  
  4983. ScrollUp    movem.l    d0-d1/a0-a1,-(sp)
  4984.         clr.l    d1
  4985.         move.w    FontY(a4),d1
  4986.         neg.l    d1
  4987.         bsr    DoScrolling
  4988.         moveq    #0,d0
  4989.         move.w    TextWidth(a4),d0
  4990.         move.l    TextScreen(a4),a0
  4991.         move.w    TextHeight(a4),d1
  4992.         subq    #1,d1
  4993.         mulu    d0,d1
  4994.         subq    #4,d1
  4995.         add.l    d1,a0
  4996.         ;lsr    #2,d1 now move.b
  4997. MoveIt2        move.b    -(a0),(a0,d0)
  4998.         dbf    d1,MoveIt2
  4999.         lea    (a0,d0),a0    ;add.l
  5000.         move.w    TextWidth(a4),d1
  5001.         subq    #1,d1
  5002. ClearIt2    move.b    #$20,-(a0)
  5003.         dbf    d1,ClearIt2
  5004.         movem.l    (sp)+,d0-d1/a0-a1
  5005.         rts
  5006.  
  5007. DoScrolling    move.l    GraphicsBase(a4),a6
  5008.         move.l    a5,a1
  5009.         moveq.l    #0,d0
  5010.         bsr    ClearReg
  5011.         move.w    #0,d2
  5012.         move.w    #0,d3
  5013.         move.w    maxX(a4),d4
  5014.         add.w    FontX(a4),d4
  5015.         move.w    maxY(a4),d5
  5016.         subq    #1,d5
  5017.         CALL    ScrollRaster
  5018.         rts
  5019.  
  5020. ClearPage    bsr    ClearGraph
  5021.         bsr    ClearTextScreen
  5022. Home        move.w    #0,rp_cp_x(a5)
  5023.         move.w    Y0Pos(a4),rp_cp_y(a5)
  5024.         rts
  5025. End        move.w    maxY(a4),rp_cp_y(a5)
  5026.         move.w    Y0Rest(a4),d0
  5027.         sub.w    d0,rp_cp_y(a5)
  5028.         rts
  5029.  
  5030. ClearGraph    move.l    GraphicsBase(a4),a6
  5031.         move.l    a5,a1
  5032.         moveq.l    #0,d0
  5033.         CALL    SetAPen
  5034.         move.l    a5,a1
  5035.         bsr    ClearReg
  5036.         move.w    #0,d0
  5037.         move.w    #0,d1
  5038.         move.l    MainWindow(a4),a0
  5039.         move.w    wd_GZZWidth(a0),d2
  5040.         move.w    wd_GZZHeight(a0),d3
  5041.         CALL    RectFill
  5042.         move.l    a5,a1
  5043.         moveq.l    #1,d0
  5044.         CALL    SetAPen
  5045.         rts
  5046.  
  5047. ClearReg    and.l    #$ffff,d0
  5048.         and.l    #$ffff,d1
  5049.         and.l    #$ffff,d2
  5050.         and.l    #$ffff,d3
  5051.         and.l    #$ffff,d4
  5052.         and.l    #$ffff,d5
  5053.         rts
  5054.  
  5055. ClearTextScreen    move.l    TextScreen(a4),a0
  5056.         move.l    TextSize(a4),d0
  5057.         subq    #1,d0
  5058. ClearScreenTX    move.b    #$20,(a0)+
  5059.         dbf    d0,ClearScreenTX
  5060.         rts
  5061.  
  5062. SpecialKeyTab    dc.b    $90,$91,$92,$93,$0b,$99,$9a,$08,$09,$0a,$7f,$0c,$0d
  5063.         dc.b    $9b,$01,$05,$00
  5064.         even
  5065. SpecialKeyBra    bra.w    CursorUp    ;$90
  5066.         bra.w    CursorDown    ;$91
  5067.         bra.w    CursorRight    ;$92
  5068.         bra.w    CursorLeft    ;$93
  5069.         bra.w    ClearRight    ;$0b
  5070.         bra.w    End        ;$99
  5071.         bra.w    Home        ;$9a
  5072.         bra.w    BackSpace    ;$08
  5073.         bra.w    DoTab        ;$09
  5074.         bra.w    CReturn        ;$0a
  5075.         bra.w    DeleteChar    ;$7f
  5076.         bra.w    ClearPage    ;$0c
  5077.         bra.w    Return        ;$0d
  5078.         bra.w    InsertChar    ;$9b
  5079.         bra.w    InsertModeSwitch;$01
  5080.         bra.w    ShiftCRight    ;$06
  5081.         
  5082.  
  5083.     ; ********** Keyboard Routinen **********
  5084.  
  5085. WaitForKey    movem.l    d1-d3/d7/a0-a4/a6,-(sp)
  5086.         tst.w    InBuffLen(a4)
  5087.         beq    WaitForKey3
  5088.         sub.w    #1,InBuffLen(a4)
  5089.         move.l    InBuffPoint(a4),a0
  5090.         move.b    (a0)+,d0
  5091.         move.l    d0,InBuffPoint(a4)
  5092. DoneForKey    movem.l    (sp)+,d1-d3/d7/a0-a4/a6
  5093.         rts
  5094. WaitForKey3    bsr    TestHelp
  5095.         moveq.l    #0,d7
  5096.         bsr    GetAMessage
  5097.         tst.l    d0
  5098.         bmi.s    WaitForKey3
  5099.         bne.s    DoneForKey
  5100.         move.l    $0004.w,a6
  5101.         move.l    SignalMask(a4),d0
  5102.         CALL    Wait
  5103.         btst    #SIGBREAKB_CTRL_C,d0
  5104.         bne    EndeDesPrg
  5105.         bra.s    WaitForKey3
  5106.  
  5107.  
  5108. GetAMessage    move.l    $0004.w,a6
  5109.         move.l    MainWindow(a4),a0
  5110.         move.l    wd_UserPort(a0),a0
  5111.         CALL    GetMsg
  5112.         tst.l    d0
  5113.         beq    WaitForKey2
  5114.         move.l    d0,a1
  5115.         cmp.l    #NEWSIZE,im_Class(a1)
  5116.         beq    VerifySize
  5117.         ;cmp.l    #REFRESHWINDOW,im_Class(a1)
  5118.         ;beq    RefreshMe
  5119.         cmp.l    #CLOSEWINDOW,im_Class(a1)
  5120.         beq    EndeDesPrg
  5121.         cmp.l    #MOUSEBUTTONS,im_Class(a1)
  5122.         beq    MouseToCursor
  5123.         cmp.l    #MENUPICK,im_Class(a1)
  5124.         beq    MenuPicked
  5125.         cmp.l    #RAWKEY,im_Class(a1)
  5126.         bne    ShutItUp
  5127.         moveq.l    #0,d3
  5128.         moveq.l    #0,d2
  5129.         move.w    im_Code(a1),ActRaw(a4)
  5130.         move.w    im_Qualifier(a1),ActQual(a4)
  5131.         move.l    im_IAddress(a1),a0
  5132.         move.l    (a0),ActIAdress(a4)
  5133.         CALL    ReplyMsg
  5134.         cmp.w    #$60,ActRaw(a4)
  5135.         bcc.s    WaitForKey4
  5136.         lea    KeyConv(pc),a0
  5137.         move.w    ActQual(a4),d2
  5138.         move.w    #$80,d0
  5139.         btst    #0,d2
  5140.         bne.s    ShiftPressed
  5141.         btst    #1,d2
  5142.         bne.s    ShiftPressed
  5143.         moveq.l    #0,d0
  5144. ShiftPressed    or.w    ActRaw(a4),d0
  5145.         btst    #4,d2
  5146.         bne    Alternate
  5147.         btst    #5,d2
  5148.         bne    Alternate
  5149. FindConv    tst.b    (a0)
  5150.         beq.s    ConvertKey
  5151.         cmp.b    (a0)+,d0
  5152.         beq.s    ConvertIt
  5153.         tst.b    (a0)+
  5154.         bra.s    FindConv
  5155. ConvertIt    moveq.l    #0,d0
  5156.         move.b    (a0)+,d0                
  5157. Arts        rts
  5158. WaitForKey2    moveq.l    #0,d0
  5159.         rts
  5160. WaitForKey4    moveq.l    #-1,d0
  5161.         rts
  5162. Alternate    cmp.b    #$4c,d0
  5163.         bne.s    OtherCK
  5164.         move.w    #$83,d0
  5165.         rts
  5166. OtherCK        cmp.b    #$4d,d0
  5167.         bne    ConvertKey
  5168.         move.w    #$84,d0
  5169.         rts
  5170.  
  5171. ConvertKey    move.l    ConDevice(a4),a6
  5172.         lea    InputEventStr(a4),a0    ;InputEvent
  5173.         move.l    FileLocker(a4),a1
  5174.         move.l    a1,a3
  5175.         move.w    ActQual(a4),ie_Qualifier(a0)
  5176.         move.w    ActRaw(a4),ie_Code(a0)
  5177.         move.b    #IECLASS_RAWKEY,ie_Class(a0)
  5178.         move.l    ActIAdress(a4),ie_EventAddress(a0)
  5179.         move.l    #256,d1
  5180.         sub.l    a2,a2
  5181.         CALL    RawKeyConvert
  5182.         tst.w    d0
  5183.         beq.s    WaitForKey4
  5184.         sub.w    #1,d0
  5185.         move.w    d0,InBuffLen(a4)
  5186.         move.b    (a3)+,d0
  5187.         move.l    a3,InBuffPoint(a4)
  5188.         rts
  5189.  
  5190. OnlyBreak    move.w    im_Code(a1),d4
  5191.         CALL    ReplyMsg
  5192.         cmp.w    #SELECTDOWN,d4
  5193.         bne.s    IgnoreIt
  5194. WaitOtherMsg    move.l    MainWindow(a4),a0
  5195.         move.l    wd_UserPort(a0),a0
  5196.         CALL    WaitPort
  5197.         move.l    MainWindow(a4),a0
  5198.         move.l    wd_UserPort(a0),a0
  5199.         CALL    GetMsg
  5200.         move.l    d0,a1
  5201.         move.w    im_Code(a1),d4
  5202.         move.l    20(a1),d2
  5203.         CALL    ReplyMsg
  5204.         cmp.l    #MOUSEBUTTONS,d2
  5205.         bne.s    WaitOtherMsg
  5206.         cmp.w    #SELECTUP,d4
  5207.         bne.s    WaitOtherMsg
  5208.         bra    GetAMessage
  5209.  
  5210. MouseToCursor    tst.l    d7
  5211.         bmi.s    OnlyBreak
  5212.         move.l    MainWindow(a4),a2
  5213.         clr.l    d0
  5214.         move.w    im_MouseX(a1),d2
  5215.         move.b    wd_BorderLeft(a2),d0
  5216.         sub.w    d0,d2
  5217.         move.w    im_MouseY(a1),d3
  5218.         move.b    wd_BorderTop(a2),d0
  5219.         sub.w    d0,d3
  5220.         move.w    im_Code(a1),d4
  5221.         CALL    ReplyMsg
  5222.         cmp.w    #SELECTDOWN,d4
  5223.         bne.s    IgnoreIt
  5224.         tst.w    NoCursorToMouseFlag(a4)
  5225.         beq.s    NoNoCursorToMouse
  5226.         sub.w    #1,NoCursorToMouseFlag(a4)
  5227. IgnoreIt    bra    GetAMessage
  5228.  
  5229. NoNoCursorToMouse 
  5230.         divu    FontX(a4),d2
  5231.         mulu    FontX(a4),d2
  5232.         divu    FontY(a4),d3
  5233.         addq    #1,d3
  5234.         mulu    FontY(a4),d3
  5235.         sub.w    Y0Rest(a4),d3
  5236.         bsr    ExorCursor
  5237.         move.w    d2,rp_cp_x(a5)
  5238.         move.w    d3,rp_cp_y(a5)
  5239.         FlushCursor
  5240.         cmp.w    maxY(a4),d3
  5241.         bcs.s    MTC2
  5242.         move.w    maxY(a4),rp_cp_y(a5)
  5243. MTC2        cmp.w    #0,d3
  5244.         bcc.s    MTC3
  5245.         move.w    #0,rp_cp_y(a5)
  5246. MTC3        bsr    ExorCursor
  5247.         ;bsr    ShowInsMode
  5248.         moveq.l    #0,d0
  5249.         rts
  5250.  
  5251.  
  5252. SetupScreen    RSave
  5253.         move.l    MainWindow(a4),a0
  5254.         clr.l    d0
  5255.         move.w    wd_GZZWidth(a0),d0
  5256.         subq    #1,d0
  5257.         divu    FontX(a4),d0
  5258.         move.w    d0,TextWidth2(a4)
  5259.         mulu    FontX(a4),d0
  5260.         move.w    d0,maxX(a4)
  5261.         clr.l    d0
  5262.         move.w    wd_GZZHeight(a0),d0
  5263.         divu    FontY(a4),d0
  5264.         move.w    d0,TextHeight(a4)
  5265.         mulu    FontY(a4),d0
  5266.         move.w    d0,maxY(a4)
  5267.         RLoad
  5268.         rts
  5269.  
  5270. VerifySize    bsr    SetupScreen
  5271.         bsr    ReDrawScreen
  5272. ShutItUp    CALL    ReplyMsg
  5273.         bra    GetAMessage
  5274.  
  5275. ;RefreshMe    bsr    SetupScreen
  5276. ;        bsr    ReDrawScreen
  5277. ;        bra.s    ShutItUp
  5278.  
  5279.  
  5280. ReDrawScreen    RSave
  5281.         move.w    rp_cp_x(a5),-(sp)
  5282.         move.w    rp_cp_y(a5),-(sp)
  5283.         bsr    ExorCursor
  5284.         bsr    ClearGraph
  5285.         clr.l    d7
  5286.         move.l    GraphicsBase(a4),a6
  5287.         move.l    TextScreen(a4),a3
  5288.         move.w    Y0Pos(a4),rp_cp_y(a5)
  5289. ReDrawLoop    move.w    #0,rp_cp_x(a5)
  5290.         move.l    a5,a1
  5291.         move.l    a3,a0
  5292.         clr.l    d0
  5293.         move.w    TextWidth2(a4),d0
  5294.         CALL    Text
  5295.         clr.l    d0
  5296.         move.w    TextWidth(a4),d0
  5297.         add.l    d0,a3
  5298.         move.w    FontY(a4),d0
  5299.         add.w    d0,rp_cp_y(a5)
  5300.         addq    #1,d7
  5301.         cmp.w    TextHeight(a4),d7
  5302.         bcs.s    ReDrawLoop
  5303.  
  5304.         move.w    (sp)+,rp_cp_y(a5)
  5305.         move.w    (sp)+,rp_cp_x(a5)
  5306.         move.w    rp_cp_y(a5),d0
  5307.         sub.w    Y0Pos(a4),d0
  5308.         cmp.w    maxY(a4),d0
  5309.         bcs.s    NoOUT
  5310.         move.w    maxY(a4),rp_cp_y(a5)
  5311.         move.w    Y0Rest(a4),d0
  5312.         sub.w    d0,rp_cp_y(a5)
  5313. NoOUT        bsr    ExorCursor
  5314.         RLoad
  5315.         rts
  5316.  
  5317. MenuPicked    move.w    im_Code(a1),d0
  5318.         move.w    d0,-(sp)
  5319.         CALL    ReplyMsg
  5320.         move.w    (sp)+,d0
  5321.         move.w    d0,d1
  5322.         and.w    #$1f,d0    ;Menu-nr
  5323.         lsr.w    #5,d1
  5324.         and.w    #$3f,d1    ;Item-nr
  5325.         tst.w    d0
  5326.         bne    HelpMenu
  5327.         tst.w    d1
  5328.         beq    InsertInterlace
  5329.         cmp.w    #1,d1
  5330.         beq    NowUseDislib
  5331.         cmp.w    #2,d1
  5332.         beq    NowPatchVektors
  5333.         cmp.w    #3,d1
  5334.         beq    ConfigDislib
  5335.         cmp.w    #4,d1
  5336.         beq    EndeDesPrg
  5337.         bra    IgnoreIt
  5338. InsertInterlace    ;any dummy here!
  5339.         bra    IgnoreIt
  5340. ConfigDislib    tst.l    DislibBase(a4)
  5341.         beq    IgnoreIt
  5342.         RSave
  5343.         move.l    DislibBase(a4),a6
  5344.         move.l    DisStruct(a4),a0
  5345.         lea    dl_InFlags(a0),a0
  5346.         clr.l    d0
  5347.         move.l    MainWindow(a4),a0
  5348.         move.l    wd_WScreen(a0),a1
  5349.         suba.l    a2,a2
  5350.         CALL    ConfigReq
  5351.         RLoad
  5352.         bra    IgnoreIt
  5353. NowUseDislib    bsr    SwitchDislib
  5354.         bra    IgnoreIt
  5355. NowPatchVektors    bsr    InitVektors
  5356.         eor.w    #1,PatchFlag(a4)
  5357.         bsr    InitVektors
  5358.         bra    IgnoreIt
  5359. HelpMenu    cmp.w    #1,d0
  5360.         bne    IgnoreIt
  5361.         tst.l    HelpWindow(a4)
  5362.         bne    IgnoreIt
  5363.         bsr    PrintHelpScreen
  5364.         bra    IgnoreIt
  5365.  
  5366. TestBreak    RSave
  5367.         moveq.l    #0,d7
  5368.         bra.s    TestBreak3
  5369. TestBreak2    RSave
  5370.         moveq    #-1,d7
  5371. TestBreak3    movem.l    d1-d7/a0-a6,-(sp)
  5372.         moveq.l    #-1,d7
  5373.         bsr    GetAMessage
  5374.         movem.l    (sp)+,a0-a6/d1-d7
  5375.         tst.l    d0
  5376.         beq.s    NothingThere2
  5377.         cmp.b    #" ",d0
  5378.         beq.s    WaitCauseSpace
  5379.         cmp.b    #$03,d0    ;ctrl-c
  5380.         bne.s    TestBreak3    ;Alle tasten aus dem Buffer holen!
  5381.         tst.l    d7
  5382.         beq.s    ComplexEnd
  5383.         RLoad
  5384.         move.l    BaseStack(a4),a7
  5385.         lea    Break(pc),a2
  5386.         bsr    PrintText
  5387.         bra    EmptyLine
  5388. NothingThere2    clr.l    d0
  5389. NothingThere    RLoad    
  5390.         rts
  5391. ComplexEnd    RLoad
  5392.         move.l    BaseStack(a4),a7
  5393.         lea    Break(pc),a2
  5394.         bsr    PrintText
  5395.         lea    AtTEXT(pc),a2
  5396.         bsr    PrintText
  5397.         move.l    a0,d0
  5398.         bsr    PrintLong
  5399.         bra    EmptyLine
  5400. WaitCauseSpace    bsr    WaitForKey
  5401.         bra.s    NothingThere2
  5402.  
  5403.     ;********** ASSEMBLER *************
  5404.  
  5405. InstAssembler    bsr    GetHexAdress
  5406.         move.l    d0,a3
  5407.         bra    AssembleStart
  5408.  
  5409. Assemble    bsr    GetHexAdress
  5410.         and.l    #$fffffffe,d0
  5411.         move.l    d0,AssembleAdr(a4)
  5412.         ;move.w    #DInPos,d5
  5413.         bsr    SearchNextChar
  5414.         beq    FrageZeichen
  5415.         move.l    FindBuffer(a4),a0
  5416.         moveq.l    #0,d1
  5417. NextCharA    move.b    (a1,d5),d0
  5418.         cmp.b    #".",d0
  5419.         beq.s    BefehlOver
  5420.         cmp.b    #" ",d0
  5421.         beq.s    WordSize    ;Bei Nichtangabe wird Word angenommen
  5422.         move.b    d0,(a0)+
  5423.         addq    #1,d1
  5424.         addq    #1,d5
  5425.         cmp.w    #20,d1
  5426.         bcs.s    NextCharA
  5427.         bra    FrageZeichen
  5428. BefehlOver    tst.w    d1
  5429.         beq    FrageZeichen
  5430.         addq    #1,d5
  5431.         move.b    (a1,d5),d0
  5432.         cmp.b    #"b",d0
  5433.         beq.s    ByteSize
  5434.         cmp.b    #"s",d0
  5435.         beq.s    ShortSize
  5436.         cmp.b    #"w",d0
  5437.         beq.s    WordSize
  5438.         cmp.b    #"l",d0
  5439.         bne    FrageZeichen
  5440. LongSize    move.w    #%10,d2
  5441.         bra.s    AllSizes
  5442. ShortSize    move.w    #%11,d2
  5443.         bra.s    AllSizes
  5444. ByteSize    moveq.l    #0,d2
  5445.         bra.s    AllSizes
  5446. WordSize    move.w    #%01,d2
  5447. AllSizes    move.w    d2,CommandSize(a4)
  5448.         clr.b    (a0)
  5449.         addq    #1,d5
  5450.         move.w    #-1,AdrModeSource(a4)
  5451.         move.w    #-1,AdrModeDest(a4)
  5452.         bsr    SearchNextChar
  5453.         beq    NothingFollows
  5454.         bsr    DissExpression
  5455.         bmi    FrageZeichen
  5456.         move.l    d6,AdrDataSource(a4)
  5457.         move.w    d7,AdrModeSource(a4)
  5458.         bsr    SearchNextChar
  5459.         beq    NothingFollows
  5460.         cmp.b    #",",d0
  5461.         bne    FrageZeichen
  5462.         addq    #1,d5
  5463.         bsr    SearchNextChar
  5464.         beq    FrageZeichen
  5465.         bsr    DissExpression
  5466.         bmi    FrageZeichen
  5467.         move.l    d6,AdrDataDest(a4)
  5468.         move.w    d7,AdrModeDest(a4)
  5469.  
  5470. NothingFollows    move.w    AdrModeSource(a4),d0
  5471.         bsr    CalcAdrMBit
  5472.         move.w    d1,ModeBitSource(a4)
  5473.         move.w    AdrModeDest(a4),d0
  5474.         bsr    CalcAdrMBit
  5475.         move.w    d1,ModeBitDest(a4)
  5476.         moveq.l    #0,d3
  5477.         move.l    FindBuffer(a4),a0
  5478.         cmp.b    #"b",(a0)
  5479.         beq    PossibleBranch
  5480.         cmp.b    #"d",(a0)
  5481.         beq    PossibleDBranch
  5482.         cmp.b    #"s",(a0)
  5483.         beq    PossibleSCond
  5484. ThisIsNoBr    lea    CommandList(pc),a2
  5485. CompareList    tst.l    (a2)
  5486.         bne.s    NextAvaible
  5487.         addq.l    #4,a2
  5488.         tst.l    (a2)        ;DoppelNuller = Echtes Ende
  5489.         beq    FrageZeichen    ;Unknown Command
  5490. NextAvaible    move.l    (a2),a3
  5491.         moveq.l    #0,d0
  5492. CompareString    move.b    (a0,d0),d1
  5493.         beq.s    StringEqual
  5494.         cmp.b    (a3,d0),d1
  5495.         bne.s    NextString
  5496.         addq    #1,d0
  5497.         bra.s    CompareString
  5498. NextString    lea    CLen(a2),a2    ;add.l
  5499.         bra.s    CompareList
  5500. StringEqual    cmp.b    (a3,d0),d1
  5501.         bne.s    NextString
  5502.         move.w    ModeBitSource(a4),d0
  5503.         move.w    CAdrSource(a2),d1    
  5504.         tst.w    d0
  5505.         bpl.s    SourceThere
  5506.         tst.w    d1
  5507.         bmi.s    NewSMode
  5508.         bne.s    NextString
  5509.         bra.s    Control1
  5510. NewSMode    cmp.b    CSpecial(a2),d0
  5511.         bne.s    NextString
  5512.         cmp.b    #4,d0
  5513.         bne.s    Control1
  5514.         cmp.w    #7,ModeBitDest(a4)
  5515.         bne.s    Control1
  5516.         move.l    AdrDataSource(a4),d0
  5517.         move.w    #15,d2
  5518. TurnItMV    roxr.w    d0
  5519.         roxl.w    d1
  5520.         dbf    d2,TurnItMV
  5521.         move.l    d1,AdrDataSource(a4)
  5522.         bra.s    Control1
  5523. SourceThere    btst    d0,d1
  5524.         beq.s    NextString
  5525.         bsr    TestByteAdr
  5526.         beq.s    NextString
  5527. Control1    
  5528.         move.w    ModeBitDest(a4),d0
  5529.         move.w    CAdrDest(a2),d1
  5530.         tst.w    d0
  5531.         bpl.s    DestThere
  5532.         tst.w    d1
  5533.         bmi.s    NewDMode
  5534.         bne.s    NextString
  5535.         bra.s    Control2
  5536. NewDMode    cmp.b    CSpecial(a2),d0
  5537.         bne    NextString
  5538.         bra.s    Control2
  5539. DestThere    btst    d0,d1
  5540.         beq    NextString
  5541.         bsr    TestByteAdr
  5542.         beq    NextString
  5543. Control2    move.b    CModLen(a2),d0
  5544.         beq.s    NoSizeAtAll
  5545.         move.w    CommandSize(a4),d6
  5546.         and.w    #$03,d6
  5547.         lsr.b    #4,d0
  5548.         tst.b    d6
  5549.         bne.s    Control3
  5550.         tst.b    d0
  5551.         beq.s    NoSizeAtAll
  5552.         cmp.b    #1,d0
  5553.         bne    NextString
  5554. LikeThis01    addq    #1,d6
  5555.         bra.s    NoSizeAtAll
  5556. Control3    cmp.b    #%01,d6
  5557.         beq.s    Control3a
  5558.         cmp.b    #%10,d6
  5559.         bne.s    Control4
  5560. Control3a    tst.b    d0
  5561.         beq.s    NoSizeAtAll
  5562.         cmp.b    #1,d0
  5563.         bne.s    Control3b
  5564.         cmp.b    #%10,d6
  5565.         beq.s    NoSizeAtAll
  5566.         moveq    #%11,d6
  5567.         bra.s    NoSizeAtAll
  5568. Control3b    cmp.b    #2,d0
  5569.         bne    NextString
  5570.         addq    #1,d6
  5571.         and.w    #1,d6    ;Angleichen für w,l sizes
  5572. Control4    cmp.b    #%11,d6
  5573.         bne.s    Control5
  5574.         cmp.b    #3,d0
  5575.         bne    NextString
  5576. Control5    ;
  5577. NoSizeAtAll    move.l    AssembleAdr(a4),a3
  5578.         addq.l    #2,a3
  5579.         cmp.w    #$8004,AdrModeDest(a4)
  5580.         bne.s    KeepNormalWay
  5581.         move.l    AdrDataDest(a4),d0
  5582.         move.w    d0,(a3)+
  5583.         move.w    #$8003,ModeBitDest(a4)
  5584. KeepNormalWay    move.w    CWord(a2),d7
  5585.         move.b    CModSource(a2),d0
  5586.         move.w    AdrModeSource(a4),d1
  5587.         move.l    AdrDataSource(a4),d2
  5588.         move.w    ModeBitSource(a4),d3
  5589.         bsr    GenerateOR
  5590.         move.b    CModDest(a2),d0
  5591.         move.w    AdrModeDest(a4),d1
  5592.         move.l    AdrDataDest(a4),d2
  5593.         move.w    ModeBitDest(a4),d3
  5594.         bsr    GenerateOR
  5595.         move.b    CModLen(a2),d0
  5596.         beq.s    NoSizeDoings
  5597.         and.w    #$0f,d0
  5598.         lsl.w    d0,d6
  5599.         or.w    d6,d7
  5600. NoSizeDoings    move.l    AssembleAdr(a4),a0
  5601.         move.w    d7,(a0)
  5602.         bsr    CursorUp
  5603.         bsr    GetCommandData
  5604.         bsr    PrepareForLine
  5605.         bsr    PrintDisLine
  5606. AssembleStart    bsr    PrintReturn
  5607.         move.b    #".",d0
  5608.         bsr    Print
  5609.         move.b    #",",d0
  5610.         bsr    Print
  5611.         move.l    a3,d0
  5612.         bsr    PrintLong
  5613.         bsr    TextFlush
  5614.         move.w    #DInPos,d0
  5615.         bsr    SetCursorX
  5616.         FlushCursor
  5617.         bra    ReKey
  5618.  
  5619. TestByteAdr    tst.w    CommandSize(a4)
  5620.         bne.s    SchonMalGut
  5621.         cmp.b    #10,d0
  5622. SchonMalGut    rts
  5623.  
  5624. GenerateOR    move.b    d0,d4
  5625.         lsr.b    #2,d4
  5626.         and.w    #$3c,d4
  5627.         lea    ModeBase(pc),a0
  5628.         jsr    (a0,d4)
  5629.         and.w    #$0f,d0
  5630.         lsl.w    d0,d1
  5631.         or.w    d1,d7
  5632.         move.w    d3,d4    
  5633.         bpl.s    KeepTruth
  5634.         moveq    #1,d4
  5635.         cmp.w    #$8004,d3
  5636.         beq.s    KeepTruth
  5637.         move.w    #10,d4
  5638. KeepTruth    lsl.w    #2,d4
  5639.         and.w    #$3c,d4
  5640.         lea    AdrMBase(pc),a0
  5641.         jsr    (a0,d4)
  5642.         rts
  5643.  
  5644. ModeBase    bra.w    NothingTH
  5645.         bra.w    Normal6
  5646.         bra.w    Normal3
  5647.         bra.w    Normal3
  5648.         bra.w    ImmediateToNext
  5649.         bra.w    Special9
  5650.         bra.w    CCRetc
  5651.         bra.w    Special6
  5652.         bra.w    Special8
  5653.         bra.w    Normal3
  5654.         bra.w    Normal3
  5655.         bra.w    Specialb
  5656.         bra.w    Normal3
  5657.  
  5658. ImmediateToNext    ;
  5659. CCRetc        ;
  5660. NothingTH    moveq.l    #0,d1
  5661.         rts
  5662. Normal6        and.w    #$3f,d1
  5663.         rts
  5664. Normal3        and.w    #$07,d1
  5665.         rts
  5666.  
  5667. Special6    and.w    #$3f,d1
  5668.         move.w    d1,d4
  5669.         lsr.w    #3,d4
  5670.         and.w    #$07,d1
  5671.         lsl.w    #3,d1
  5672.         or.w    d4,d1
  5673.         rts
  5674. Special8    move.w    d2,d1
  5675.         and.w    #$07,d1
  5676. LikeSpec8    and.w    #$0f,d0
  5677.         lsl.w    d0,d1
  5678.         or.w    d1,d7
  5679.         move.l    (sp)+,d0    ;Rücksprung Adress
  5680.         rts
  5681. Specialb    move.w    d2,d1
  5682.         and.w    #$ff,d1
  5683.         bra.s    LikeSpec8
  5684. Special9    move.w    d2,d1
  5685.         and.w    #$0f,d1
  5686.         bra.s    LikeSpec8
  5687.  
  5688. AdrMBase    bra.w    PutLikeLen    ;Immediate
  5689.         bra.w    PutAWord    ;xx(pc,xn)
  5690.         bra.w    PutAWord    ;xx(pc)
  5691.         bra.w    PutALong    ;$xxxxxxxx
  5692.         bra.w    PutAWord    ;$xxxx
  5693.         bra.w    PutAWord    ;xx(ax,xn)
  5694.         bra.w    PutAWord    ;xx(an)
  5695.         bra.w    NoExtraBB    ;-(an)
  5696.         bra.w    NoExtraBB    ;(an)+
  5697.         bra.w    NoExtraBB    ;(an)
  5698.         bra.w    NoExtraBB    ;an
  5699.         bra.w    NoExtraBB    ;dn
  5700.  
  5701.         bra.w    NoExtraBB
  5702.         bra.w    NoExtraBB
  5703.         bra.w    NoExtraBB
  5704.         bra.w    NoExtraBB
  5705.  
  5706. PutLikeLen    move.w    CommandSize(a4),d0
  5707.         and.w    #$03,d0
  5708.         cmp.b    #%10,d0
  5709.         beq.s    PutALong
  5710. PutAWord    move.w    d2,(a3)+
  5711.         rts
  5712. PutALong    move.l    d2,(a3)+
  5713. NoExtraBB    rts
  5714.  
  5715. AnalyseBranch    moveq.l    #0,d0
  5716. AnalyseBranch2    lea    Branches(pc),a2
  5717. BranchTryer    move.b    1(a0),d1
  5718.         cmp.b    (a2,d0),d1
  5719.         bne.s    NextBTry
  5720.         move.b    2(a0),d1
  5721.         cmp.b    1(a2,d0),d1
  5722.         beq.s    BranchFound
  5723. NextBTry    addq    #2,d0
  5724.         cmp.w    #$24,d0
  5725.         bcs.s    BranchTryer
  5726. NoBranch    moveq    #-1,d0
  5727.         rts
  5728. BranchFound    lsl.w    #7,d0
  5729.         rts
  5730.  
  5731.  
  5732. PossibleBranch    bsr.s    AnalyseBranch
  5733.         bmi    ThisIsNoBr
  5734.         cmp.w    #$1000,d0
  5735.         bcc    ThisIsNoBr
  5736.         or.w    #$6000,d0
  5737.         move.w    d0,d7
  5738.         tst.w    AdrModeDest(a4)
  5739.         bpl    ThisIsNoBr
  5740.         tst.b    3(a0)
  5741.         bne    ThisIsNoBr
  5742.         move.w    AdrModeSource(a4),d1
  5743.         move.l    AdrDataSource(a4),d0
  5744. OtherIBR    cmp.w    #%111000,d1
  5745.         beq.s    ReallyFound2
  5746.         cmp.w    #%111001,d1
  5747.         bne    ThisIsNoBr
  5748. ReallyFound2    move.l    AssembleAdr(a4),a3
  5749.         addq.l    #2,a3
  5750.         sub.l    a3,d0
  5751.         cmp.l    #-$7fff,d0
  5752.         bcc.s    TakeOkSoS
  5753.         cmp.l    #$8000,d0
  5754.         bcc    ThisIsNoBr
  5755. TakeOkSoS    and.l    #$ffff,d0
  5756.         cmp.w    #%11,CommandSize(a4)
  5757.         beq.s    ShortBranchTry
  5758. TakeItAsLong    move.w    d0,(a3)+
  5759.         bra    NoSizeDoings
  5760. ShortBranchTry    cmp.w    #-$7f,d0
  5761.         bcc    TakeOkSoL
  5762.         cmp.w    #$80,d0
  5763.         bcc.s    TakeItAsLong
  5764. TakeOkSoL    and.w    #$ff,d0
  5765.         or.w    d0,d7
  5766.         bra    NoSizeDoings
  5767.  
  5768. PossibleSCond    moveq    #2,d0
  5769.         bsr    AnalyseBranch2
  5770.         bmi    ThisIsNoBr
  5771.         and.w    #$f00,d0
  5772.          or.w    #$50c0,d0
  5773.         move.w    d0,d7
  5774.         tst.w    AdrModeDest(a4)
  5775.         bpl    ThisIsNoBr
  5776.         move.w    #%0000101111111000,d0
  5777.         move.w    ModeBitSource(a4),d3
  5778.         btst    d3,d0
  5779.         beq    ThisIsNoBr
  5780.         move.w    AdrModeSource(a4),d1
  5781.         or.w    d1,d7
  5782.         move.l    AssembleAdr(a4),a3
  5783.         move.w    d7,(a3)+
  5784.         move.b    CModSource(a2),d0
  5785.         move.l    AdrDataSource(a4),d2
  5786.         bsr    GenerateOR
  5787.         bra    NoSizeDoings
  5788.  
  5789. PossibleDBranch    cmp.b    #"b",1(a0)
  5790.         bne    ThisIsNoBr
  5791.         addq.l    #1,a0
  5792.         moveq    #2,d0
  5793.         bsr    AnalyseBranch2    
  5794.         bmi    ThisIsNoBr
  5795.         and.w    #$f00,d0
  5796.         subq.l    #1,a0
  5797.         or.w    #$50c8,d0
  5798.         move.w    d0,d7
  5799.         move.w    AdrModeSource(a4),d0
  5800.         cmp.w    #%001000,d0
  5801.         bcc    ThisIsNoBr
  5802.         or.w    d0,d7
  5803.         cmp.w    #%11,CommandSize(a4)
  5804.         beq    ThisIsNoBr
  5805.         move.w    AdrModeDest(a4),d1
  5806.         move.l    AdrDataDest(a4),d0
  5807.         bra    OtherIBR    
  5808.  
  5809. CalcAdrMBit    tst.w    d0
  5810.         bmi.s    NoModeHere
  5811.         cmp.w    #%111000,d0
  5812.         bcc.s    Part2Do
  5813.         lsr.w    #3,d0
  5814.         bra.s    TurnWord
  5815. Part2Do        and.w    #$7,d0
  5816.         addq    #7,d0
  5817. TurnWord    move.w    #11,d1
  5818.         sub.w    d0,d1
  5819.         rts
  5820. NoModeHere    move.w    d0,d1
  5821.         rts
  5822.         
  5823. DissExpression    moveq.l    #0,d6
  5824.         moveq.l    #0,d7
  5825.         cmp.b    #"#",d0
  5826.         beq.s    Dimmediate
  5827.         cmp.b    #"(",d0
  5828.         beq    Drelative
  5829.         cmp.b    #"d",d0
  5830.         beq    DdataRegPoss
  5831.         cmp.b    #"u",d0
  5832.         beq    USPposs
  5833.         cmp.b    #"c",d0
  5834.         beq    CCRposs
  5835.         cmp.b    #"s",d0
  5836.         beq    SRposs
  5837. NoSRUSPCCR    cmp.b    #"a",d0
  5838.         beq    DadressRegPoss
  5839.         cmp.b    #"-",d0
  5840.         beq    PreDekReg
  5841.         cmp.b    #"$",d0
  5842.         beq.s    Dnumber
  5843.         cmp.b    #"0",d0
  5844.         bcs.s    NoExpression
  5845.         cmp.b    #"g",d0
  5846.         bcc.s    NoExpression
  5847.         cmp.b    #"9"+1,d0
  5848.         bcs.s    Dnumber2
  5849.         cmp.b    #"a",d0
  5850.         bcc.s    Dnumber2
  5851. NoExpression    moveq    #-1,d0
  5852.         rts
  5853.  
  5854. Dimmediate    addq    #1,d5    ;Doppelkreuz
  5855.         cmp.b    #"$",(a1,d5)
  5856.         bne.s    TakeNumberSo
  5857.         addq    #1,d5
  5858. TakeNumberSo    cmp.b    #"-",(a1,d5)
  5859.         bne.s    SuchNormal
  5860.         addq    #1,d5
  5861.         cmp.b    #"$",(a1,d5)
  5862.         bne.s    TakeN2
  5863.         addq    #1,d5
  5864. TakeN2        bsr    GetHexNum
  5865.         sub.l    d0,d6
  5866.         bra.s    GoLike
  5867. SuchNormal    bsr    GetHexNum
  5868.         move.l    d0,d6        ;Data
  5869. GoLike        move.w    #ImmAdr,d7    ;Adressmode
  5870.         rts            ;111100 Immediate
  5871.  
  5872. NegativeNumber    cmp.b    #"$",(a1,d5)
  5873.         bne.s    KeepItWO
  5874.         addq    #1,d5
  5875. KeepItWO    bsr    GetHexNum
  5876.         sub.l    d0,d6
  5877.         bra.s    GoLike2
  5878. Dnumber        addq    #1,d5
  5879. Dnumber2    bsr    GetHexNum
  5880.         move.l    d0,d6        ;Data
  5881. GoLike2        bsr    SearchNextChar
  5882.         cmp.b    #"(",d0
  5883.         beq    Drelative
  5884.         cmp.l    #$10000,d6
  5885.         bcs.s    DabsShort    
  5886.         move.w    #%111001,d7    
  5887.         rts            ;111001    Absolut lang
  5888.  
  5889. DabsShort    move.w    #%111000,d7    
  5890.         rts            ;111000 Absolut kurz
  5891.  
  5892. DdataRegPoss    bsr    TestNextOnRegEnd
  5893.         bmi.s    Dnumber2t
  5894.         move.w    #DirDataAdr,d7
  5895.         or.w    d0,d7
  5896.         rts            ;000xxx Datenregister direkt
  5897.  
  5898. Dnumber2t    cmp.b    #"/",d0
  5899.         beq    MovemOnlyPoss
  5900.         cmp.b    #"-",d0
  5901.         bne    Dnumber2
  5902.         bra    MovemOnlyPoss
  5903.  
  5904. DadressRegPoss    bsr    TestNextOnRegEnd
  5905.         bmi.s    Dnumber2t
  5906.         move.w    #DirAdrsAdr,d7
  5907.         or.w    d0,d7
  5908.         rts            ;001xxx Adressregister direkt
  5909.  
  5910. CCRposs        cmp.b    #"c",1(a1,d5)
  5911.         bne    NoSRUSPCCR
  5912.         cmp.b    #"r",2(a1,d5)
  5913.         bne    NoSRUSPCCR
  5914.         addq    #3,d5
  5915.         move.w    #$8001,d7        ;CCR
  5916.         moveq.l    #0,d0
  5917.         rts
  5918.  
  5919. SRposs        cmp.b    #"r",1(a1,d5)
  5920.         bne    NoSRUSPCCR
  5921.         addq    #2,d5
  5922.         move.w    #$8002,d7        ;SR
  5923.         moveq.l    #0,d0
  5924.         rts
  5925.  
  5926. USPposs        cmp.b    #"s",1(a1,d5)
  5927.         bne    NoSRUSPCCR
  5928.         cmp.b    #"p",2(a1,d5)
  5929.         bne    NoSRUSPCCR
  5930.         addq    #3,d5
  5931.         move.w    #$8003,d7        ;USP
  5932.         moveq.l    #0,d0
  5933.         rts
  5934.  
  5935. Drelative    bsr    ShowNextChar
  5936.         cmp.b    #"a",d0
  5937.         beq.s    DadressRel
  5938.         cmp.b    #"p",d0
  5939.         bne    NoExpression
  5940.         bsr    ShowNextChar
  5941.         cmp.b    #"c",d0
  5942.         bne    NoExpression
  5943.         bsr    ShowNextChar
  5944.         cmp.b    #")",d0
  5945.         beq    DpcRel
  5946.         cmp.b    #",",d0
  5947.         bne    NoExpression
  5948.         move.w    #%111011,d7
  5949.         bra    PCinjump
  5950.  
  5951. DpcRel        move.l    AssembleAdr(a4),d0
  5952.         addq    #2,d0
  5953.         sub.l    d0,d6
  5954.         and.l    #$ffff,d6
  5955.         addq    #1,d5
  5956.         move.w    #%111010,d7
  5957.         rts            ;111010 PC Relative
  5958.  
  5959. DadressRel    bsr    TestNextOnRegEnd
  5960.         bmi    NoExpression
  5961.         move.w    d0,d7
  5962.         bsr    ShowThisChar
  5963.         cmp.b    #")",d0
  5964.         beq.s    IndOrIndPlus
  5965.         cmp.b    #",",d0
  5966.         bne    NoExpression
  5967.         or.w    #%110000,d7
  5968. PCinjump    and.w    #$ff,d6
  5969.         bsr    ShowNextChar
  5970.         cmp.b    #"d",d0
  5971.         beq.s    DataFollows
  5972.         cmp.b    #"a",d0
  5973.         bne    NoExpression
  5974.         or.w    #$8000,d6
  5975. DataFollows    bsr    TestNextOnRegEnd
  5976.         bmi    NoExpression
  5977.         lsl.w    #8,d0
  5978.         lsl.w    #4,d0
  5979.         or.w    d0,d6
  5980.         bsr    ShowThisChar
  5981.         cmp.b    #")",d0
  5982.         bne.s    PunktFollows
  5983.         addq    #1,d5
  5984.         rts            
  5985. PunktFollows    cmp.b    #".",d0
  5986.         bne    NoExpression
  5987.         bsr    ShowNextChar
  5988.         cmp.b    #"w",d0
  5989.         beq.s    WordequStay
  5990.         cmp.b    #"l",d0
  5991.         bne    NoExpression
  5992.         or.w    #$0800,d6
  5993. WordequStay    bsr    ShowNextChar
  5994.         cmp.b    #")",d0
  5995.         bne    NoExpression
  5996.         addq    #1,d5
  5997.         rts            ;110xxx Adr ind mit index + reg
  5998.  
  5999. IndOrIndPlus    bsr    ShowNextChar
  6000.         cmp.b    #"+",d0
  6001.         beq.s    IndPlus
  6002.         tst.w    d6
  6003.         beq.s    AdrMode3
  6004.         or.w    #%101000,d7    ;101xxx Adressreg ind +d16
  6005.         rts
  6006. AdrMode3    or.w    #%010000,d7
  6007.         rts            ;010xxx Adressregister indirekt
  6008.  
  6009. IndPlus        addq    #1,d5
  6010.         or.w    #%011000,d7
  6011.         rts            ;011xxx AdrReg ind postinc
  6012.  
  6013. PreDekReg    bsr    ShowNextChar
  6014.         cmp.b    #"(",d0
  6015.         bne    NegativeNumber
  6016.         bsr    ShowNextChar
  6017.         cmp.b    #"a",d0
  6018.         bne    NoExpression
  6019.         bsr    TestNextOnRegEnd
  6020.         bmi    NoExpression
  6021.         move.w    d0,d7
  6022.         bsr    ShowThisChar
  6023.         cmp.b    #")",d0
  6024.         bne    NoExpression
  6025.         addq    #1,d5
  6026.         or.w    #%100000,d7
  6027.         rts            ;100xxx Adressreg ind predec
  6028.  
  6029. ShowNextChar    addq    #1,d5
  6030. ShowThisChar    move.b    (a1,d5),d0
  6031.         rts
  6032.  
  6033. TestNextOnRegEnd
  6034.         bsr    ShowNextChar
  6035.         cmp.b    #"0",d0
  6036.         bcs.s    Miinuus
  6037.         cmp.b    #"8",d0
  6038.         bcc.s    Miinuus
  6039.         and.w    #$07,d0
  6040.         move.w    d0,d1
  6041.         bsr    ShowNextChar
  6042.         cmp.b    #",",d0
  6043.         beq.s    OKregTest
  6044.         cmp.b    #" ",d0
  6045.         beq.s    OKregTest
  6046.         cmp.b    #")",d0
  6047.         beq.s    OKregTest
  6048.         cmp.b    #".",d0
  6049.         beq.s    OKregTest 
  6050. Miinuus        subq    #1,d5
  6051.         moveq    #-1,d1
  6052.         rts
  6053. OKregTest    move.w    d1,d0
  6054.         rts
  6055.  
  6056. MovemOnlyPoss    subq    #2,d5
  6057.         moveq.l    #0,d1    ;Dort Bits Setzen
  6058. HauptSchl    bsr    ShowNextChar
  6059.         cmp.b    #"a",d0
  6060.         bne.s    DataPart
  6061.         bsr    GetNumberMV
  6062.         bmi    NoExpression
  6063.         addq    #8,d0
  6064.         move.w    d0,d2
  6065. DownEnde2    bsr    ShowNextChar
  6066.         cmp.b    #"-",d0
  6067.         beq.s    BisRoutine2
  6068.         cmp.b    #"/",d0
  6069.         beq.s    SetNTryAgain
  6070.         cmp.b    #",",d0
  6071.         beq.s    SetAndEnd
  6072.         cmp.b    #" ",d0
  6073.         bne    NoExpression
  6074.         bra.s    SetAndEnd
  6075.  
  6076. BisRoutine2    bsr    ShowNextChar
  6077.         cmp.b    #"a",d0
  6078.         bne    NoExpression
  6079.         bsr    GetNumberMV
  6080.         bmi    NoExpression
  6081.         addq    #8,d0
  6082.         cmp.b    d0,d2
  6083.         beq.s    DownEnde2
  6084.         bcc.s    CountUPD2
  6085. MakeSchleife2    bset    d2,d1
  6086.         addq    #1,d2
  6087.         cmp.b    d0,d2
  6088.         beq.s    DownEnde2
  6089.         bra.s    MakeSchleife2
  6090. CountUPD2    bset    d2,d1
  6091.         subq    #1,d2
  6092.         cmp.b    d0,d2
  6093.         beq.s    DownEnde2
  6094.         bra.s    CountUPD2
  6095.  
  6096. DataPart    cmp.b    #"d",d0
  6097.         bne    NoExpression
  6098.         bsr    GetNumberMV
  6099.         bmi    NoExpression
  6100.         move.w    d0,d2
  6101. DownEnde    bsr    ShowNextChar
  6102.         cmp.b    #"-",d0
  6103.         beq.s    BisRoutine
  6104.         cmp.b    #"/",d0
  6105.         beq.s    SetNTryAgain
  6106.         cmp.b    #",",d0
  6107.         beq.s    SetAndEnd
  6108.         cmp.b    #" ",d0
  6109.         bne    NoExpression
  6110. SetAndEnd    bset    d2,d1
  6111.         move.w    d1,d6
  6112.         move.w    #$8004,d7
  6113.         moveq.l    #0,d0
  6114.         rts
  6115. SetNTryAgain    bset    d2,d1
  6116.         bra    HauptSchl
  6117. BisRoutine    bsr    ShowNextChar
  6118.         cmp.b    #"d",d0
  6119.         bne    NoExpression
  6120.         bsr    GetNumberMV
  6121.         bmi    NoExpression
  6122.         cmp.b    d0,d2
  6123.         beq.s    DownEnde
  6124.         bcc.s    CountUPD
  6125. MakeSchleife    bset    d2,d1
  6126.         addq    #1,d2
  6127.         cmp.b    d0,d2
  6128.         beq.s    DownEnde
  6129.         bra.s    MakeSchleife
  6130. CountUPD    bset    d2,d1
  6131.         subq    #1,d2
  6132.         cmp.b    d0,d2
  6133.         beq.s    DownEnde
  6134.         bra.s    CountUPD
  6135.  
  6136. GetNumberMV    bsr    ShowNextChar
  6137.         cmp.b    #"0",d0
  6138.         bcs.s    Miinuus2
  6139.         cmp.b    #"8",d0
  6140.         bcc.s    Miinuus2
  6141.         and.w    #$07,d0
  6142.         rts
  6143. Miinuus2    moveq    #-1,d0
  6144.         rts
  6145.  
  6146. ;Versuch einer Tabelle mit deren Hilfe Assemble/Disassemble einfacher
  6147. ;zu lösen ist :
  6148. ;Aufbau
  6149. ;0-3  : Pointer auf Name
  6150. ;4-5  : Feste Bits
  6151. ;6-7  : Maske zum erkennen der Bits
  6152. ;8-9  : untere 12 bits : Adressmodes Source
  6153. ;10-11: untere 12 bits : Adressmodes Dest 
  6154. ;12   : Nibble 1: Mode , Nibble 2: Shift Source
  6155. ;13   : Nibble 1: Mode , Nibble 2: Shift Dest
  6156. ;14   : Nibble 1: LenMode , Nibble 2: Shift Len : $00 = No Len
  6157. ;15   : Extension für negative Adrmodes : $00 = Keine
  6158. ;                      $01 = CCR
  6159. ;                      $02 = SR
  6160. ;                      $03 = USP
  6161. ;                      $04 = MOVEM
  6162.  
  6163. ;Modes : 0 = No Source/Destination
  6164. ;     1 = Normale Adressierung mit effektivem Adressfeld 6 Bits
  6165. ;     2 = Datenregisterfeld mit 3 Bits
  6166. ;     3 = Adressregisterfeld mit 3 Bits
  6167. ;     4 = Immediate im naechsten Wort
  6168. ;     5 = trapspecial
  6169. ;     6 = CCR/SR
  6170. ;     7 = Special turn round for move
  6171. ;     8 = Special for addq/subq
  6172. ;     9 = -(a0)
  6173. ;     a = (a0)+
  6174. ;     b = Moveqspecial
  6175. ;     c = MovepSpecial
  6176.  
  6177. ;LenModes    0 = Normal b,w,l
  6178. ;        1 =        b,w,l +1
  6179. ;        2 = Normal w,l
  6180. ;        3 = Shortsize
  6181.  
  6182. CName        equ    0
  6183. CWord        equ    4
  6184. CAnd        equ    6
  6185. CAdrSource    equ    8
  6186. CAdrDest    equ    10
  6187. CModSource    equ    12
  6188. CModDest    equ    13
  6189. CModLen        equ    14
  6190. CSpecial    equ    15
  6191. CLen        equ    16
  6192.  
  6193.     ;******* Assembler Command Data ********
  6194.  
  6195.         ;All    %0100---- Commands
  6196. CommandList    dc.l    Lea                    ;4
  6197.         dc.w    %0100000111000000,%1111000111000000    ;8
  6198.         dc.w    %001001111110                ;10
  6199.         dc.w    %010000000000                ;12
  6200.         dc.b    $10,$39,$00                ;15
  6201.         dc.b    $00                    ;16
  6202.  
  6203.         dc.l    Chk
  6204.         dc.w    %0100000110000000,%1111000111000000
  6205.         dc.w    %101111111111
  6206.         dc.w    %100000000000
  6207.         dc.b    $10,$29,$00
  6208.         dc.b    $00
  6209.  
  6210.         dc.l    Clr
  6211.         dc.w    %0100001000000000,%1111111100000000
  6212.         dc.w    %101111111000
  6213.         dc.w    0
  6214.         dc.b    $10,$00,$06
  6215.         dc.b    $00
  6216.  
  6217.         dc.l    Nop
  6218.         dc.w    %0100111001110001,%1111111111111111
  6219.         dc.w    0
  6220.         dc.w    0
  6221.         dc.b    $00,$00,$00
  6222.         dc.b    $00
  6223.  
  6224.         dc.l    move    ;to SR
  6225.         dc.w    %0100011011000000,%1111111111000000
  6226.         dc.w    %101111111111
  6227.         dc.w    %1000000000000000
  6228.         dc.b    $10,$60,$00
  6229.         dc.b    2
  6230.  
  6231.         dc.l    Not
  6232.         dc.w    %0100011000000000,%1111111100000000
  6233.         dc.w    %101111111000
  6234.         dc.w    0
  6235.         dc.b    $10,$00,$06
  6236.         dc.b    $00
  6237.  
  6238.         dc.l    Swap
  6239.         dc.w    %0100100001000000,%1111111111111000
  6240.         dc.w    %100000000000
  6241.         dc.w    0
  6242.         dc.b    $20,$00,$00
  6243.         dc.b    0
  6244.     
  6245.         dc.l    Pea 
  6246.         dc.w    %0100100001000000,%1111111111000000
  6247.          dc.w    %001001111110
  6248.         dc.w    0
  6249.         dc.b    $10,$00,$00
  6250.         dc.b    $00
  6251.  
  6252.         dc.l    Ext
  6253.         dc.w    %0100100010000000,%1111111110111000
  6254.         dc.w    %100000000000
  6255.         dc.w    0
  6256.         dc.b    $20,$00,$26
  6257.         dc.b    $00
  6258.  
  6259.         dc.l    illegal
  6260.         dc.w    %0100101011111100,%1111111111111111
  6261.         dc.w    0
  6262.         dc.w    0
  6263.         dc.b    $00,$00,$00
  6264.         dc.b    $00
  6265.  
  6266.         dc.l    Jmp
  6267.         dc.w    %0100111011000000,%1111111111000000
  6268.         dc.w    %001001111110
  6269.         dc.w    0
  6270.         dc.b    $10,$00,$00
  6271.         dc.b    0
  6272.  
  6273.         dc.l    Jsr
  6274.         dc.w    %0100111010000000,%1111111111000000
  6275.         dc.w    %001001111110
  6276.         dc.w    0
  6277.         dc.b    $10,$00,$00
  6278.         dc.b    0
  6279.  
  6280.         dc.l    Link
  6281.         dc.w    %0100111001010000,%1111111111111000
  6282.         dc.w    %010000000000
  6283.         dc.w    %000000000001
  6284.         dc.b    $30,$40,$00
  6285.         dc.b    0
  6286.  
  6287.         dc.l    move    ;to CCR
  6288.         dc.w    %0100010011000000,%1111111111000000
  6289.         dc.w    %101111111111
  6290.         dc.w    %1000000000000000
  6291.         dc.b    $10,$60,$00
  6292.         dc.b    1
  6293.  
  6294.         dc.l    move    ;from SR
  6295.         dc.w    %0100000011000000,%1111111111000000
  6296.         dc.w    %1000000000000000
  6297.         dc.w    %101111111000
  6298.         dc.b    $60,$10,$00
  6299.         dc.b    2
  6300.  
  6301.         dc.l    move    ;USP
  6302.         dc.w    %0100111001100000,%1111111111111000
  6303.         dc.w    %010000000000
  6304.         dc.w    %1000000000000000
  6305.         dc.b    $30,$60,$00
  6306.         dc.b    3
  6307.  
  6308.         dc.l    move    ;USP
  6309.         dc.w    %0100111001101000,%1111111111111000
  6310.         dc.w    %1000000000000000
  6311.         dc.w    %010000000000
  6312.         dc.b    $60,$30,$00
  6313.         dc.b    3
  6314.  
  6315.         dc.l    Movem
  6316.         dc.w    %0100100010000000,%1111111110000000
  6317.         dc.w    %1000000000000000    
  6318.         dc.w    %001011111000
  6319.         dc.b    $60,$10,$26
  6320.         dc.b    4
  6321.  
  6322.         dc.l    Movem
  6323.         dc.w    %0100110010000000,%1111111110000000
  6324.         dc.w    %001101111000
  6325.         dc.w    %1000000000000000    
  6326.         dc.b    $10,$60,$26
  6327.         dc.b    4
  6328.         
  6329.         dc.l    Nbcd
  6330.         dc.w    %0100100000000000,%1111111111000000
  6331.         dc.w    %101111111000
  6332.         dc.w    0
  6333.         dc.b    $10,$00,$00
  6334.         dc.b    0
  6335.  
  6336.         dc.l    Neg
  6337.         dc.w    %0100010000000000,%1111111100000000
  6338.         dc.w    %101111111000
  6339.         dc.w    0
  6340.         dc.b    $10,$00,$06
  6341.         dc.b    0
  6342.  
  6343.         dc.l    NegX
  6344.         dc.w    %0100000000000000,%1111111100000000
  6345.         dc.w    %101111111000
  6346.         dc.w    0
  6347.         dc.b    $10,$00,$06
  6348.         dc.b    0
  6349.  
  6350.         dc.l    Reset
  6351.         dc.w    %0100111001110000,%1111111111111111
  6352.         dc.w    0
  6353.         dc.w    0
  6354.         dc.b    $00,$00,$00
  6355.         dc.b    0
  6356.  
  6357.         dc.l    Rte
  6358.         dc.w    %0100111001110011,%1111111111111111
  6359.         dc.w    0
  6360.         dc.w    0
  6361.         dc.b    $00,$00,$00
  6362.         dc.b    0
  6363.  
  6364.         dc.l    Rtr
  6365.         dc.w    %0100111001110111,%1111111111111111
  6366.         dc.w    0
  6367.         dc.w    0
  6368.         dc.b    $00,$00,$00
  6369.         dc.b    0
  6370.  
  6371.         dc.l    Rts
  6372.         dc.w    %0100111001110101,%1111111111111111
  6373.         dc.w    0
  6374.         dc.w    0
  6375.         dc.b    $00,$00,$00
  6376.         dc.b    0
  6377.  
  6378.         dc.l    Stop
  6379.         dc.w    %0100111001110010,%1111111111111111
  6380.         dc.w    %000000000001
  6381.         dc.w    0
  6382.         dc.b    $40,$00,$00
  6383.         dc.b    0
  6384.  
  6385.         dc.l    Tas
  6386.         dc.w    %0100101011000000,%1111111111000000
  6387.         dc.w    %101111111000
  6388.         dc.w    0
  6389.         dc.b    $10,$00,$00
  6390.         dc.b    0
  6391.  
  6392.         dc.l    Trap
  6393.         dc.w    %0100111001000000,%1111111111110000
  6394.         dc.w    %000000000001
  6395.         dc.w    0
  6396.         dc.b    $50,$00,$00
  6397.         dc.b    $00
  6398.  
  6399.         dc.l    Trapv
  6400.         dc.w    %0100111001110110,%1111111111111111
  6401.         dc.w    0
  6402.         dc.w    0
  6403.         dc.b    $00,$00,$00
  6404.         dc.b    $00
  6405.  
  6406.         dc.l    Tst
  6407.         dc.w    %0100101000000000,%1111111100000000
  6408.         dc.w    %101111111000
  6409.         dc.w    0
  6410.         dc.b    $10,$00,$06
  6411.         dc.b    $00
  6412.  
  6413.         dc.l    UnLink
  6414.         dc.w    %0100111001011000,%1111111111111000
  6415.         dc.w    %010000000000
  6416.         dc.w    0
  6417.         dc.b    $30,$00,$00
  6418.         dc.b    0
  6419.  
  6420.         dc.l    0
  6421.  
  6422.  
  6423.         ;All     %1110---- Commands
  6424. CommandList2    dc.l    Asl
  6425.         dc.w    %1110000111000000,%1111111111000000
  6426.         dc.w    %001111111000
  6427.         dc.w    0
  6428.         dc.b    $10,$00,$00
  6429.         dc.b    0
  6430.  
  6431.         dc.l    Asr
  6432.         dc.w    %1110000011000000,%1111111111000000
  6433.         dc.w    %001111111000
  6434.         dc.w    0
  6435.         dc.b    $10,$00,$00
  6436.         dc.b    0
  6437.  
  6438.         dc.l    Lsl
  6439.         dc.w    %1110001111000000,%1111111111000000
  6440.         dc.w    %001111111000
  6441.         dc.w    0
  6442.         dc.b    $10,$00,$00
  6443.         dc.b    0
  6444.  
  6445.         dc.l    Lsr
  6446.         dc.w    %1110001011000000,%1111111111000000
  6447.         dc.w    %001111111000
  6448.         dc.w    0
  6449.         dc.b    $10,$00,$00
  6450.         dc.b    0
  6451.  
  6452.         dc.l    Rol
  6453.         dc.w    %1110011111000000,%1111111111000000
  6454.         dc.w    %001111111000
  6455.         dc.w    0
  6456.         dc.b    $10,$00,$00
  6457.         dc.b    0
  6458.  
  6459.         dc.l    Ror
  6460.         dc.w    %1110011011000000,%1111111111000000
  6461.         dc.w    %001111111000
  6462.         dc.w    0
  6463.         dc.b    $10,$00,$00
  6464.         dc.b    0
  6465.  
  6466.         dc.l    Roxl
  6467.         dc.w    %1110010111000000,%1111111111000000
  6468.         dc.w    %001111111000
  6469.         dc.w    0
  6470.         dc.b    $10,$00,$00
  6471.         dc.b    0
  6472.  
  6473.         dc.l    Roxr
  6474.         dc.w    %1110010011000000,%1111111111000000
  6475.         dc.w    %001111111000
  6476.         dc.w    0
  6477.         dc.b    $10,$00,$00
  6478.         dc.b    0
  6479.  
  6480.         dc.l    Asl
  6481.         dc.w    %1110000100000000,%1111000100111000
  6482.         dc.w    %000000000001
  6483.         dc.w    %100000000000
  6484.         dc.b    $89,$20,$06
  6485.         dc.b    0
  6486.  
  6487.         dc.l    Asr
  6488.         dc.w    %1110000000000000,%1111000100111000
  6489.         dc.w    %000000000001
  6490.         dc.w    %100000000000
  6491.         dc.b    $89,$20,$06
  6492.         dc.b    0
  6493.         
  6494.         dc.l    Asl
  6495.         dc.w    %1110000100100000,%1111000100111000
  6496.         dc.w    %100000000000
  6497.         dc.w    %100000000000
  6498.         dc.b    $29,$20,$06
  6499.         dc.b    0
  6500.  
  6501.         dc.l    Asr
  6502.         dc.w    %1110000000100000,%1111000100111000
  6503.         dc.w    %100000000000
  6504.         dc.w    %100000000000
  6505.         dc.b    $29,$20,$06
  6506.         dc.b    0
  6507.  
  6508.         dc.l    Lsl
  6509.         dc.w    %1110000100001000,%1111000100111000
  6510.         dc.w    %000000000001
  6511.         dc.w    %100000000000
  6512.         dc.b    $89,$20,$06
  6513.         dc.b    0
  6514.  
  6515.         dc.l    Lsr
  6516.         dc.w    %1110000000001000,%1111000100111000
  6517.         dc.w    %000000000001
  6518.         dc.w    %100000000000
  6519.         dc.b    $89,$20,$06
  6520.         dc.b    0
  6521.         
  6522.         dc.l    Lsl
  6523.         dc.w    %1110000100101000,%1111000100111000
  6524.         dc.w    %100000000000
  6525.         dc.w    %100000000000
  6526.         dc.b    $29,$20,$06
  6527.         dc.b    0
  6528.  
  6529.         dc.l    Lsr
  6530.         dc.w    %1110000000101000,%1111000100111000
  6531.         dc.w    %100000000000
  6532.         dc.w    %100000000000
  6533.         dc.b    $29,$20,$06
  6534.         dc.b    0
  6535.         
  6536.         dc.l    Rol
  6537.         dc.w    %1110000100011000,%1111000100111000
  6538.         dc.w    %000000000001
  6539.         dc.w    %100000000000
  6540.         dc.b    $89,$20,$06
  6541.         dc.b    0
  6542.  
  6543.         dc.l    Ror
  6544.         dc.w    %1110000000011000,%1111000100111000
  6545.         dc.w    %000000000001
  6546.         dc.w    %100000000000
  6547.         dc.b    $89,$20,$06
  6548.         dc.b    0
  6549.         
  6550.         dc.l    Rol
  6551.         dc.w    %1110000100111000,%1111000100111000
  6552.         dc.w    %100000000000
  6553.         dc.w    %100000000000
  6554.         dc.b    $29,$20,$06
  6555.         dc.b    0
  6556.  
  6557.         dc.l    Ror
  6558.         dc.w    %1110000000111000,%1111000100111000
  6559.         dc.w    %100000000000
  6560.         dc.w    %100000000000
  6561.         dc.b    $29,$20,$06
  6562.         dc.b    0
  6563.  
  6564.         dc.l    Roxl
  6565.         dc.w    %1110000100010000,%1111000100111000
  6566.         dc.w    %000000000001
  6567.         dc.w    %100000000000
  6568.         dc.b    $89,$20,$06
  6569.         dc.b    0
  6570.  
  6571.         dc.l    Roxr
  6572.         dc.w    %1110000000010000,%1111000100111000
  6573.         dc.w    %000000000001
  6574.         dc.w    %100000000000
  6575.         dc.b    $89,$20,$06
  6576.         dc.b    0
  6577.         
  6578.         dc.l    Roxl
  6579.         dc.w    %1110000100110000,%1111000100111000
  6580.         dc.w    %100000000000
  6581.         dc.w    %100000000000
  6582.         dc.b    $29,$20,$06
  6583.         dc.b    0
  6584.  
  6585.         dc.l    Roxr
  6586.         dc.w    %1110000000110000,%1111000100111000
  6587.         dc.w    %100000000000
  6588.         dc.w    %100000000000
  6589.         dc.b    $29,$20,$06
  6590.         dc.b    0
  6591.  
  6592.         dc.l    0        
  6593.  
  6594.         ;All    %1101---- Commands
  6595. CommandList3    dc.l    Add    ;adda
  6596.         dc.w    %1101000011000000,%1111000011000000
  6597.         dc.w    %111111111111
  6598.         dc.w    %010000000000
  6599.         dc.b    $10,$39,$28
  6600.         dc.b    $00
  6601.         dc.l    Addx    ; -(ax),-(ay)
  6602.         dc.w    %1101000100001000,%1111000100111000
  6603.         dc.w    %000010000000
  6604.         dc.w    %000010000000
  6605.         dc.b    $90,$99,$06
  6606.         dc.b    $00
  6607.  
  6608.         dc.l    Addx    ; dx,dy    
  6609.         dc.w    %1101000100000000,%1111000100111000
  6610.         dc.w    %100000000000
  6611.         dc.w    %100000000000
  6612.         dc.b    $20,$29,$06
  6613.         dc.b    $00
  6614.  
  6615.         dc.l    Add
  6616.         dc.w    %1101000000000000,%1111000100000000
  6617.         dc.w    %111111111111
  6618.         dc.w    %100000000000
  6619.         dc.b    $10,$29,$06
  6620.         dc.b    $00
  6621.  
  6622.         dc.l    Add
  6623.         dc.w    %1101000100000000,%1111000100000000
  6624.         dc.w    %100000000000
  6625.         dc.w    %001111111000
  6626.         dc.b    $29,$10,$06
  6627.         dc.b    $00
  6628.             
  6629.         dc.l    0
  6630.  
  6631.         ;Move     Command
  6632. CommandList4    dc.l    move
  6633.         dc.w    %0000000000000000,%1100000000000000
  6634.         dc.w    %111111111111
  6635.         dc.w    %111111111000
  6636.         dc.b    $10,$76,$1c
  6637.         dc.b    $00
  6638.  
  6639.         dc.l    0
  6640.  
  6641.         ;All    %0000---- Commands
  6642. CommandList5    dc.l    Eor    ;ccr
  6643.         dc.w    %0000101000111100,%1111111111111111
  6644.         dc.w    %000000000001
  6645.         dc.w    %1000000000000000
  6646.         dc.b    $40,$60,$00
  6647.         dc.b    1
  6648.  
  6649.         dc.l    Eor    ;sr
  6650.         dc.w    %0000101001111100,%1111111111111111
  6651.         dc.w    %000000000001
  6652.         dc.w    %1000000000000000
  6653.         dc.b    $40,$60,$00
  6654.         dc.b    2
  6655.  
  6656.         dc.l    And    ;to CCR
  6657.         dc.w    %0000001000111100,%1111111111111111
  6658.         dc.w    %000000000001
  6659.         dc.w    %1000000000000000
  6660.         dc.b    $40,$60,$00
  6661.         dc.b    1
  6662.  
  6663.         dc.l    And    ;to SR
  6664.         dc.w    %0000001001111100,%1111111111111111
  6665.         dc.w    %000000000001
  6666.         dc.w    %1000000000000000
  6667.         dc.b    $40,$60,$00
  6668.         dc.b    2
  6669.  
  6670.         dc.l    Or    ;to CCR
  6671.         dc.w    %0000000000111100,%1111111111111111
  6672.         dc.w    %000000000001
  6673.         dc.w    %1000000000000000
  6674.         dc.b    $40,$60,$00
  6675.         dc.b    1
  6676.  
  6677.         dc.l    Or    ;to SR
  6678.         dc.w    %0000000001111100,%1111111111111111
  6679.         dc.w    %000000000001
  6680.         dc.w    %1000000000000000
  6681.         dc.b    $40,$60,$00
  6682.         dc.b    2
  6683.  
  6684.         dc.l    Add
  6685.         dc.w    %0000011000000000,%1111111100000000
  6686.         dc.w    %000000000001
  6687.         dc.w    %101111111000
  6688.         dc.b    $40,$10,$06
  6689.         dc.b    $00
  6690.  
  6691.         dc.l    And    ;andi
  6692.         dc.w    %0000001000000000,%1111111100000000
  6693.         dc.w    %000000000001
  6694.         dc.w    %101111111000
  6695.         dc.b    $40,$10,$06
  6696.         dc.b    0
  6697.  
  6698.         dc.l    movep
  6699.         dc.w    %0000000100001000,%1111000110111000
  6700.         dc.w    %000001000000
  6701.         dc.w    %100000000000
  6702.         dc.b    $c0,$29,$26
  6703.         dc.b    0
  6704.  
  6705.         dc.l    movep
  6706.         dc.w    %0000000110001000,%1111000110111000
  6707.         dc.w    %100000000000
  6708.         dc.w    %000001000000
  6709.         dc.b    $29,$c0,$26
  6710.         dc.b    0
  6711.  
  6712.         dc.l    Bchg
  6713.         dc.w    %0000000101000000,%1111000111000000
  6714.         dc.w    %100000000000
  6715.         dc.w    %101111111000
  6716.         dc.b    $29,$10,$00
  6717.         dc.b    0
  6718.  
  6719.         dc.l    Bchg
  6720.         dc.w    %0000100001000000,%1111111111000000
  6721.         dc.w    %000000000001
  6722.         dc.w    %101111111000
  6723.         dc.b    $40,$10,$00
  6724.         dc.b    0
  6725.  
  6726.         dc.l    Bclr
  6727.         dc.w    %0000000110000000,%1111000111000000
  6728.         dc.w    %100000000000
  6729.         dc.w    %101111111000
  6730.         dc.b    $29,$10,$00
  6731.         dc.b    0
  6732.  
  6733.         dc.l    Bclr
  6734.         dc.w    %0000100010000000,%1111111111000000
  6735.         dc.w    %000000000001
  6736.         dc.w    %101111111000
  6737.         dc.b    $40,$10,$00
  6738.         dc.b    0
  6739.  
  6740.         dc.l    Bset
  6741.         dc.w    %0000000111000000,%1111000111000000
  6742.         dc.w    %100000000000
  6743.         dc.w    %101111111000
  6744.         dc.b    $29,$10,$00
  6745.         dc.b    0
  6746.  
  6747.         dc.l    Bset
  6748.         dc.w    %0000100011000000,%1111111111000000
  6749.         dc.w    %000000000001
  6750.         dc.w    %101111111000
  6751.         dc.b    $40,$10,$00
  6752.         dc.b    0
  6753.  
  6754.         dc.l    Btst
  6755.         dc.w    %0000000100000000,%1111000111000000
  6756.         dc.w    %100000000000
  6757.         dc.w    %101111111000
  6758.         dc.b    $29,$10,$00
  6759.         dc.b    0
  6760.  
  6761.         dc.l    Btst
  6762.         dc.w    %0000100000000000,%1111111111000000
  6763.         dc.w    %000000000001
  6764.         dc.w    %101111111000
  6765.         dc.b    $40,$10,$00
  6766.         dc.b    0
  6767.  
  6768.         dc.l    Cmp
  6769.         dc.w    %0000110000000000,%1111111100000000
  6770.         dc.w    %000000000001
  6771.         dc.w    %101111111000
  6772.         dc.b    $40,$10,$06
  6773.         dc.b    0
  6774.         
  6775.         dc.l    Eor
  6776.         dc.w    %0000101000000000,%1111111100000000
  6777.         dc.w    %000000000001
  6778.         dc.w    %101111111000
  6779.         dc.b    $40,$10,$06
  6780.         dc.b    0
  6781.         
  6782.         dc.l    Or
  6783.         dc.w    %0000000000000000,%1111111100000000
  6784.         dc.w    %000000000001
  6785.         dc.w    %101111111000
  6786.         dc.b    $40,$10,$06
  6787.         dc.b    0
  6788.  
  6789.         dc.l    Sub
  6790.         dc.w    %0000010000000000,%1111111100000000
  6791.         dc.w    %000000000001
  6792.         dc.w    %101111111000
  6793.         dc.b    $40,$10,$06
  6794.         dc.b    0
  6795.  
  6796.  
  6797.         dc.l    0
  6798.  
  6799.         ;All    %0101---- Commands
  6800. CommandList6    dc.l    addq
  6801.         dc.w    %0101000000000000,%1111000100000000
  6802.         dc.w    %000000000001
  6803.         dc.w    %111111111000
  6804.         dc.b    $89,$10,$06
  6805.         dc.b    $00
  6806.  
  6807.         dc.l    subq
  6808.         dc.w    %0101000100000000,%1111000100000000
  6809.         dc.w    %000000000001
  6810.         dc.w    %111111111000
  6811.         dc.b    $89,$10,$06
  6812.         dc.b    0
  6813.         
  6814.         dc.l    0        
  6815.  
  6816.         ;All    %1100---- Commands
  6817. CommandList7    dc.l    Abcd
  6818.         dc.w    %1100000100000000,%1111000111111000
  6819.         dc.w    %100000000000
  6820.         dc.w    %100000000000
  6821.         dc.b    $20,$29,$00
  6822.         dc.b    0
  6823.  
  6824.         dc.l    Abcd
  6825.         dc.w    %1100000100001000,%1111000111111000
  6826.         dc.w    %000010000000
  6827.         dc.w    %000010000000
  6828.         dc.b    $90,$99,$00
  6829.         dc.b    0
  6830.  
  6831.         dc.l    Exg
  6832.         dc.w    %1100000101000000,%1111000111111000
  6833.         dc.w    %100000000000
  6834.         dc.w    %100000000000
  6835.         dc.b    $29,$20,$00
  6836.         dc.b    0
  6837.  
  6838.         dc.l    Exg
  6839.         dc.w    %1100000101001000,%1111000111111000
  6840.         dc.w    %010000000000
  6841.         dc.w    %010000000000
  6842.         dc.b    $39,$30,$00
  6843.         dc.b    0
  6844.  
  6845.         dc.l    Exg
  6846.         dc.w    %1100000110001000,%1111000111111000
  6847.         dc.w    %100000000000
  6848.         dc.w    %010000000000
  6849.         dc.b    $29,$30,$00
  6850.         dc.b    0
  6851.  
  6852.         dc.l    Muls
  6853.         dc.w    %1100000111000000,%1111000111000000
  6854.         dc.w    %101111111111
  6855.         dc.w    %100000000000
  6856.         dc.b    $10,$29,$00
  6857.         dc.b    0
  6858.  
  6859.         dc.l    Mulu
  6860.         dc.w    %1100000011000000,%1111000111000000
  6861.         dc.w    %101111111111
  6862.         dc.w    %100000000000
  6863.         dc.b    $10,$29,$00
  6864.         dc.b    0
  6865.  
  6866.         dc.l    And
  6867.         dc.w    %1100000000000000,%1111000100000000
  6868.         dc.w    %101111111111
  6869.         dc.w    %100000000000
  6870.         dc.b    $10,$29,$06
  6871.         dc.b    $00
  6872.  
  6873.         dc.l    And
  6874.         dc.w    %1100000100000000,%1111000100000000
  6875.         dc.w    %100000000000
  6876.         dc.w    %001111111000
  6877.         dc.b    $29,$10,$06
  6878.         dc.b    $00
  6879.  
  6880.  
  6881.         dc.l    0
  6882.  
  6883.         ;All    %1011---- Commands
  6884. CommandList8    dc.l    Cmp
  6885.         dc.w    %1011000011000000,%1111000011000000
  6886.         dc.w    %111111111111
  6887.         dc.w    %010000000000
  6888.         dc.b    $10,$39,$28
  6889.         dc.b    0
  6890.  
  6891.         dc.l    Cmp
  6892.         dc.w    %1011000000000000,%1111000100000000
  6893.         dc.w    %111111111111
  6894.         dc.w    %100000000000
  6895.         dc.b    $10,$29,$06
  6896.         dc.b    0
  6897.  
  6898.         dc.l    Cmp
  6899.         dc.w    %1011000100001000,%1111000100111000
  6900.         dc.w    %000100000000
  6901.         dc.w    %000100000000
  6902.         dc.b    $a0,$a9,$06
  6903.         dc.b    0
  6904.  
  6905.         dc.l    Eor
  6906.         dc.w    %1011000100000000,%1111000100000000
  6907.         dc.w    %100000000000
  6908.         dc.w    %101111111000
  6909.         dc.b    $29,$10,$06
  6910.         dc.b    0
  6911.  
  6912.         dc.l    0
  6913.  
  6914.         ;All    %1000---- Commands
  6915. CommandList9    dc.l    Divs
  6916.         dc.w    %1000000111000000,%1111000111000000
  6917.         dc.w    %101111111111
  6918.         dc.w    %100000000000
  6919.         dc.b    $10,$29,$00
  6920.         dc.b    0
  6921.  
  6922.         dc.l    Divu
  6923.         dc.w    %1000000011000000,%1111000111000000
  6924.         dc.w    %101111111111
  6925.         dc.w    %100000000000
  6926.         dc.b    $10,$29,$00
  6927.         dc.b    0
  6928.  
  6929.         dc.l    Sbcd
  6930.         dc.w    %1000000100000000,%1111000111111000
  6931.         dc.w    %100000000000
  6932.         dc.w    %100000000000
  6933.         dc.b    $20,$29,$00
  6934.         dc.b    0
  6935.  
  6936.         dc.l    Sbcd
  6937.         dc.w    %1000000100001000,%1111000111111000
  6938.         dc.w    %000010000000
  6939.         dc.w    %000010000000
  6940.         dc.b    $90,$99,$00
  6941.         dc.b    0
  6942.  
  6943.  
  6944.         dc.l    Or
  6945.         dc.w    %1000000000000000,%1111000100000000
  6946.         dc.w    %101111111111
  6947.         dc.w    %100000000000
  6948.         dc.b    $10,$29,$06
  6949.         dc.b    0
  6950.  
  6951.         dc.l    Or
  6952.         dc.w    %1000000100000000,%1111000100000000
  6953.         dc.w    %100000000000
  6954.         dc.w    %001111111000
  6955.         dc.b    $29,$10,$06
  6956.         dc.b    0
  6957.         
  6958.  
  6959.         dc.l    0
  6960.  
  6961.         ;All    %0111---- Commands
  6962. CommandList10    dc.l    Moveq
  6963.         dc.w    %0111000000000000,%1111000100000000
  6964.         dc.w    %000000000001
  6965.         dc.w    %100000000000
  6966.         dc.b    $b0,$29,$00
  6967.         dc.b    0
  6968.     
  6969.         dc.l    0
  6970.  
  6971.         ;All    %1001---- Commands
  6972. CommandList11    dc.l    Sub    ;Suba
  6973.         dc.w    %1001000011000000,%1111000011000000
  6974.         dc.w    %111111111111
  6975.         dc.w    %010000000000
  6976.         dc.b    $10,$39,$28
  6977.         dc.b    0
  6978.  
  6979.  
  6980.         dc.l    Subx
  6981.         dc.w    %1001000100000000,%1111000100111000
  6982.         dc.w    %100000000000
  6983.         dc.w    %100000000000
  6984.         dc.b    $20,$29,$06
  6985.         dc.b    0
  6986.  
  6987.         dc.l    Subx
  6988.         dc.w    %1001000100001000,%1111000100111000
  6989.         dc.w    %000010000000
  6990.         dc.w    %000010000000
  6991.         dc.b    $90,$99,$06
  6992.         dc.b    0
  6993.  
  6994.         dc.l    Sub
  6995.         dc.w    %1001000000000000,%1111000100000000
  6996.         dc.w    %111111111000
  6997.         dc.w    %100000000000
  6998.         dc.b    $10,$29,$06
  6999.         dc.b    0
  7000.  
  7001.         dc.l    Sub
  7002.         dc.w    %1001000100000000,%1111000100000000
  7003.         dc.w    %100000000000
  7004.         dc.w    %001111111000
  7005.         dc.b    $29,$10,$06
  7006.         dc.b    0
  7007.  
  7008.         dc.l    0
  7009.  
  7010.         dc.l    0
  7011.  
  7012. ;****** Assembler Mnemonics ******
  7013.  
  7014. Mnemonics    
  7015. Abcd        dc.b    "abcd",0
  7016. Add        dc.b    "add",0
  7017. addq        dc.b    "addq",0
  7018. Addx        dc.b    "addx",0
  7019. And        dc.b    "and",0
  7020. Asl        dc.b    "asl",0
  7021. Asr        dc.b    "asr",0
  7022. Chk        dc.b    "chk",0
  7023. Clr        dc.b    "clr",0
  7024. Cmp        dc.b    "cmp",0
  7025. Divs        dc.b    "divs",0
  7026. Divu        dc.b    "divu",0
  7027. Eor        dc.b    "eor",0
  7028. Exg        dc.b    "exg",0
  7029. Ext        dc.b    "ext",0
  7030. illegal        dc.b    "illegal",0
  7031. Jmp        dc.b    "jmp",0
  7032. Jsr        dc.b    "jsr",0
  7033. Lea        dc.b    "lea",0
  7034. Link        dc.b    "link",0
  7035. Lsl        dc.b    "lsl",0
  7036. Lsr        dc.b    "lsr",0
  7037. move        dc.b    "move",0
  7038. Movem        dc.b    "movem",0
  7039. movep        dc.b    "movep",0
  7040. Moveq        dc.b    "moveq",0
  7041. Muls        dc.b    "muls",0
  7042. Mulu        dc.b    "mulu",0
  7043. Nbcd        dc.b    "nbcd",0
  7044. Neg        dc.b    "neg",0
  7045. NegX        dc.b    "negx",0
  7046. Nop        dc.b    "nop",0
  7047. Not        dc.b    "not",0
  7048. Or        dc.b    "or",0
  7049. Pea        dc.b    "pea",0
  7050. Reset        dc.b    "reset",0
  7051. Rol        dc.b    "rol",0
  7052. Ror        dc.b    "ror",0
  7053. Roxl        dc.b    "roxl",0
  7054. Roxr        dc.b    "roxr",0
  7055. Rte        dc.b    "rte",0
  7056. Rtr        dc.b    "rtr",0
  7057. Rts        dc.b    "rts",0
  7058. Sbcd        dc.b    "sbcd",0
  7059. Stop        dc.b    "stop",0
  7060. Sub        dc.b    "sub",0
  7061. subq        dc.b    "subq",0
  7062. Subx        dc.b    "subx",0
  7063. Swap        dc.b    "swap",0
  7064. Tas        dc.b    "tas",0
  7065. Trap        dc.b    "trap",0
  7066. Trapv        dc.b    "trapv",0
  7067. Tst        dc.b    "tst",0
  7068. UnLink        dc.b    "unlk",0
  7069. LineA        dc.b    "linea",0
  7070. LineF        dc.b    "linef",0
  7071. DCW        dc.b    "dc.w",0
  7072. UnknownCommand    dc.b    "?????",0
  7073.         dc.b    0,0
  7074. Branches    dc.b    "rasr"    ;0000
  7075.         dc.b    "hils"    ;0010
  7076.         dc.b    "cccs"    ;0100
  7077.         dc.b    "neeq"    ;0110
  7078.         dc.b    "vcvs"    ;1000
  7079.         dc.b    "plmi"    ;1010
  7080.         dc.b    "gelt"    ;1100
  7081.         dc.b    "gtle"    ;1110
  7082.         dc.b    "t",0,"f",0    ;extras for db and s
  7083. DBranchText    dc.b    "dbxx",0
  7084. BranchText    dc.b    "bxx.x",0
  7085. Stext        dc.b    " sxx",0
  7086. BitText        ;
  7087. Btst        dc.b    "btst",0
  7088. Bchg        dc.b    "bchg",0
  7089. Bclr        dc.b    "bclr",0
  7090. Bset        dc.b    "bset",0
  7091.         even
  7092.  
  7093. ;******* Amiga-Dos Definitionen ******
  7094.  
  7095. Xwindow        equ    640
  7096. Ywindow        equ    200
  7097.  
  7098. WindowDefs    dc.w    0,0,Xwindow,Ywindow
  7099.         dc.b    0,1
  7100.         dc.l    RAWKEY!MOUSEBUTTONS!MENUPICK!NEWSIZE!CLOSEWINDOW!REFRESHWINDOW
  7101. WindowFlags    dc.l    ACTIVATE!WINDOWDRAG!WINDOWSIZING!WINDOWCLOSE!WINDOWDEPTH!GIMMEZEROZERO
  7102.         dc.l    0,0,WindowName
  7103. WD_Screen    dc.l    0,0
  7104.         dc.w    640,64,2000,2000
  7105. SC_Type        dc.w    WBENCHSCREEN
  7106.  
  7107. WindowDefs2    dc.w    0,0,Xwindow,Ywindow
  7108.         dc.b    0,1
  7109.         dc.l    MOUSEBUTTONS!CLOSEWINDOW
  7110.         dc.l    ACTIVATE!WINDOWDRAG!WINDOWCLOSE!GIMMEZEROZERO!WINDOWDEPTH
  7111.         dc.l    0,0,WindowName2
  7112. WD_Screen2    dc.l    0,0
  7113.         dc.w    Xwindow,Ywindow,Xwindow,Ywindow
  7114. SC_Type2    dc.w    WBENCHSCREEN
  7115.  
  7116.  
  7117. ScreenName    dc.b    "Scypmon V1.8",0
  7118. WindowName    dc.b    "Scypmon V1.8 by Jörg Bublath 13-Jan-94 - Mode: "
  7119. ScreenNameMode    dc.b    "         ",0
  7120. WindowName2    dc.b    "Scypmon V1.8 - Help Window",0
  7121.         even
  7122.  
  7123. IntuitionName    INTNAME
  7124. GraphicsName    dc.b    "graphics.library",0
  7125. DosName        DOSNAME
  7126. ConName        dc.b    "console.device",0
  7127. DisLibText    dc.b    "dis.library",0
  7128. DiskFontName    dc.b    "diskfont.library",0
  7129.         even
  7130. FontDefs    dc.l    FontName
  7131. FontSize    dc.w    8
  7132.         dc.b    0
  7133.         dc.b    FPF_ROMFONT!FPF_DISKFONT!FPF_TALLDOT!FPF_WIDEDOT
  7134. FontName    dc.b    "topaz.font",0
  7135.         even
  7136.  
  7137. ;******* eigene Definitionen *******
  7138.  
  7139. ProgramName    dc.b    "Scypmon 1.8",0
  7140. Mode1        dc.b    "Insert   ",0
  7141. Mode2        dc.b    "Overwrite",0
  7142. FILENFText    dc.b    $0a,"File not found",0
  7143. FileErrText    dc.b    $0a,"Error while disk-access #",0
  7144. LoadingText    dc.b    $0a,"Loading ",0
  7145. SavingText    dc.b    $0a,"Saving ",0
  7146. Break        dc.b    $0a,"Break",0
  7147. ExceptionTX    dc.b    $0a,"Exception #",0
  7148. DirTXT        dc.b    "dir",0
  7149. DirIs        dc.b    $0a,"directory:",0
  7150. AtTEXT        dc.b    " at ",0
  7151. RegText        dc.b    $0a,"       usp      ssp      pc    t-s--iii---xnzvc",$0a,".'p ",0
  7152. TrackTxt    dc.b    "T H S ",0
  7153. TraceStartText    dc.b    $0a,"TRACE: cr: execute, x: exit, r: register, n: next, j: execute jsr, g: go",0 
  7154. MemError    dc.b    $0a,"Memory Error",0
  7155. SegTxt        dc.b    "=PrgStart",0
  7156. SegTxt2        dc.b    $0a,"Sg Start    Len",0
  7157. EinschaltTxt    dc.b    $0a,"Scypmon Version 13-Jan-94, (c) by Jörg Bublath - This is Shareware !",$0a,0
  7158. Str_Unset    dc.b    "<unset>",0
  7159. TaskNameTxt    dc.b    $0a,"Task: '",0
  7160. ProcessName    dc.b    $0a,"Process: '",0
  7161. PriorityTxt    dc.b    "  Pri:",0
  7162. Sign1        dc.b    $0a,"Signals:",$0a,"Alloc=",0
  7163. Sign2        dc.b    $0a,"Wait =",0
  7164. Sign3        dc.b    $0a,"Set  =",0
  7165. Stack1        dc.b    $0a,"Stack:  Lower=",0
  7166. Stack2        dc.b    "  Reg=",0
  7167. Stack3        dc.b    "  Upper=",0
  7168. Str_Command    dc.b    $0a,"CLI:     Cmd  ='",0
  7169. Str_None    dc.b    6,"<none>"
  7170. TaskNotFound    dc.b    $0a,"Task not found!",0
  7171. AdressTxt    dc.b    "'  Adress:",0
  7172. FreeBText    dc.b    $0a,"Unused bytes: ",0
  7173. ExceededText    dc.b    $0a,"FreeMem exceeded - use ""!"" to override",0
  7174. ErrorsOccured    dc.b    $0a,"Errors occured:",$0
  7175. StartError1    dc.b    $0a,"Couldn't open your font: ",0
  7176. StartError2    dc.b    $0a,"Can't use proportional font: ",0
  7177. StartError3     dc.b    $0a,"Couldn't open batchfile: ",0
  7178. StartError4    dc.b    $0a,"Fontwidth too high!",0
  7179. OpenDevErr    dc.b    $0a,"Error opening device #",0
  7180. DeviceNotFound    dc.b    $0a,"Device not found!",0
  7181. DevInf1        dc.b    $0a,"Devicename: ",0
  7182. DevInf2        dc.b    "  Unit: ",0
  7183. DevInf3        dc.b    "  Blocksize: ",0
  7184. DevInf4        dc.b    $0a,"Surfaces: ",0
  7185. DevInf5        dc.b    "  Block per Track: ",0
  7186. DevInf6        dc.b    "  LowCyl: ",0
  7187. DevInf7        dc.b    "  HighCyl: ",0
  7188. VersionString    dc.b    "$VER: Scypmon 1.8 (13.1.94) by Jörg Bublath",0
  7189. ShortHelp    dc.b    $0a,"Usage: scypmon [-bdp] [-s <pubscreen>] [-f <fontname> <fontsize>]",$0a
  7190.         dc.b        "       [-P <xpos> <ypos>] [-S <xsize> <ysize>] [batchfile]",$0a
  7191.         dc.b    "-b : Background (do not activate)",$0a
  7192.         dc.b    "-d : Use dis.library V2 for disassembling",$0a
  7193.         dc.b    "-p : Patch exception vectors to catch gurus",$0a
  7194.         dc.b    "-f : Use another font",$0a
  7195.         dc.b    "-s : Open on a specified pubscreen",$0a
  7196.         dc.b    "-P : New position for the window",$0a
  7197.         dc.b    "-S : New size for the window",$0a    
  7198.         dc.b    "batchfile : Name of textfile with scypmon-instructions",$0a,$0a
  7199. ShortHelpe
  7200.         even
  7201.  
  7202. OutDeviceTx    dc.b    "prt:",0
  7203.         even
  7204.  
  7205. RegisterSave    ds.l    8    ;dataregs
  7206. RegisterSave2    ds.l    8    ;adrregs
  7207. USPstack    dc.l    0
  7208. SSPstack    dc.l    0
  7209. SRregister    dc.l    0
  7210. PCregister    dc.l    0
  7211. StatusLine    dc.w    0
  7212.  
  7213. ZeroSpeicher    dc.l    0
  7214. ZeroPageMem    dc.l    0
  7215. VBRreg        dc.l    0
  7216. TraceSave    dc.l    0
  7217. CurrDir        dc.l    0
  7218.  
  7219. Vektors        dc.l    Guru2
  7220.         dc.l    Guru3
  7221.         dc.l    Guru4
  7222.         dc.l    Guru5
  7223.         dc.l    Guru6
  7224.         dc.l    Guru7
  7225.         dc.l    0
  7226.         dc.l    Guru9
  7227.         dc.l    Gurua
  7228.         dc.l    Gurub
  7229.  
  7230. StackBase    ds.b    64
  7231.  
  7232. ;************ Jetzt wirds ernst..... : Menues:
  7233.  
  7234. FirstMenu    dc.l    SecMenu
  7235.         dc.w    10,0    ;LeftEdge,TopEdge
  7236.         dc.w    110,10    ;Width,Height
  7237.         dc.w    MENUENABLED    ;Flags
  7238.         dc.l    MenuName    ;Name
  7239.         dc.l    FirstItem
  7240.         ds.w    4        ;4 reservierte Woerter
  7241.  
  7242. SecMenu        dc.l    0
  7243.         dc.w    400,0    ;LeftEdge,TopEdge
  7244.         dc.w    100,10    ;Width,Height
  7245.         dc.w    MENUENABLED    ;Flags
  7246.         dc.l    HelpName    ;Name
  7247.         dc.l    HelpItem
  7248.         ds.w    4        ;4 reservierte Woerter
  7249.  
  7250.  
  7251. FirstItem    dc.l    MenuItem2
  7252.         dc.w    0,0
  7253.         dc.w    26,10
  7254. InterlaceFlag    dc.w    ITEMTEXT!HIGHCOMP!CHECKIT!MENUTOGGLE!COMMSEQ
  7255.         dc.l    0
  7256.         dc.l    IntuiText1,0
  7257.         dc.b    "I",0
  7258.         dc.l    0
  7259.         dc.w    0
  7260.  
  7261. MenuItem2    dc.l    MenuItem3
  7262.         dc.w    0,1
  7263.         dc.w    26,10
  7264. UseDisFlag    dc.w    ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!MENUTOGGLE!COMMSEQ
  7265.         dc.l    0
  7266.         dc.l    IntuiText2,0
  7267.         dc.b    "D",0
  7268.         dc.l    0
  7269.         dc.w    0
  7270.  
  7271. MenuItem3    dc.l    MenuItem4
  7272.         dc.w    0,2
  7273.         dc.w    26,10
  7274. PatchitFlag    dc.w    ITEMTEXT!ITEMENABLED!HIGHCOMP!CHECKIT!MENUTOGGLE!COMMSEQ
  7275.         dc.l    0
  7276.         dc.l    IntuiText3,0
  7277.         dc.b    "P",0
  7278.         dc.l    0
  7279.         dc.w    0
  7280.  
  7281. MenuItem4    dc.l    MenuItem5
  7282.         dc.w    0,3
  7283.         dc.w    26,10
  7284. ConfigVal    dc.w    ITEMTEXT!HIGHCOMP!COMMSEQ
  7285.         dc.l    0
  7286.         dc.l    IntuiText4,0
  7287.         dc.b    "C",0
  7288.         dc.l    0
  7289.         dc.w    0
  7290.  
  7291. MenuItem5    dc.l    0
  7292.         dc.w    0,4
  7293.         dc.w    26,10
  7294.         dc.w    ITEMTEXT!ITEMENABLED!HIGHCOMP!COMMSEQ
  7295.         dc.l    0
  7296.         dc.l    IntuiText5,0
  7297.         dc.b    "Q",0
  7298.         dc.l    0
  7299.         dc.w    0
  7300.  
  7301. HelpItem    dc.l    0
  7302.         dc.w    0,0
  7303.         dc.w    18,0
  7304.         dc.w    ITEMTEXT!ITEMENABLED!HIGHCOMP!COMMSEQ
  7305.         dc.l    0
  7306.         dc.l    IntuiHelp,0
  7307.         dc.b    "H",0
  7308.         dc.l    0
  7309.         dc.w    0
  7310.  
  7311. IntuiText1    dc.b    0,1    ;Front/back Pen
  7312.         dc.b    RP_JAM2,0
  7313.         dc.w    0,0    ;Left/Topedge
  7314.         dc.l    0    ;FontDefs
  7315.         dc.l    MenuText1
  7316.         dc.l    0
  7317.  
  7318. IntuiText2    dc.b    0,1    ;Front/back Pen
  7319.         dc.b    RP_JAM2,0    ;drawmode
  7320.         dc.w    0,0    ;Left/Topedge
  7321.         dc.l    0    ;FontDefs
  7322.         dc.l    MenuText2
  7323.         dc.l    0
  7324.  
  7325. IntuiText3    dc.b    0,1    ;Front/back Pen
  7326.         dc.b    RP_JAM2,0    ;drawmode
  7327.         dc.w    0,0    ;Left/Topedge
  7328.         dc.l    0    ;FontDefs
  7329.         dc.l    MenuText3
  7330.         dc.l    0
  7331.  
  7332. IntuiText4    dc.b    0,1    ;Front/back Pen
  7333.         dc.b    RP_JAM2,0    ;drawmode
  7334.         dc.w    0,0    ;Left/Topedge
  7335.         dc.l    0    ;FontDefs
  7336.         dc.l    MenuText4
  7337.         dc.l    0
  7338.  
  7339. IntuiText5    dc.b    0,1    ;Front/back Pen
  7340.         dc.b    RP_JAM2,0    ;drawmode
  7341.         dc.w    0,0    ;Left/Topedge
  7342.         dc.l    0    ;FontDefs
  7343.         dc.l    MenuText5
  7344.         dc.l    0
  7345.  
  7346. IntuiHelp    dc.b    0,1    ;Front/back Pen
  7347.         dc.b    RP_JAM2,0    ;drawmode
  7348.         dc.w    0,0    ;Left/Topedge
  7349.         dc.l    0    ;FontDefs
  7350.         dc.l    HelpText
  7351.         dc.l    0
  7352.  
  7353.  
  7354.  
  7355. MenuText1    dc.b    "   Pay Shareware",0
  7356. MenuText2    dc.b    "   Use dis.library",0
  7357. MenuText3    dc.b    "   Patch Exceptions",0
  7358. MenuText4    dc.b    "   Config dis.library",0
  7359. MenuText5    dc.b    "   Quit SCYPMON",0
  7360. MenuName    dc.b    "Options",0
  7361. HelpName    dc.b    "HELP!",0
  7362. HelpText    dc.b    "Help Window",0
  7363.  
  7364. HelpScreen    dc.b    "----------------------------------------------------------------------------"
  7365.         dc.b    "a=adress, l=length, s=segment(0-7), n=name, <>=required, []=optional, |=or  "
  7366.         dc.b    "DISK ACCESS-----------------------------------------------------------------"
  7367.         dc.b    "C <a>                :Block Checksum | b <a>                :BB Checksum    "
  7368.         dc.b    "<X <blockspec><a>[l] :Read Block(s)  | >X <blockspec><a>[l] :Write Block(s) "
  7369.         dc.b    "blockspecs:X=t :<track><head><sector>| D [n]                :Directory      "
  7370.         dc.b    "           X=b :<blocknumber>        | CD [n]               :Dir Change     "
  7371.         dc.b    "           X=o :<byteoffset>         | V [devicename]       :Choose Device  "
  7372.         dc.b    "INPUT/OUTPUT----------------------------------------------------------------"
  7373.         dc.b    "O [n]       :Output Dev/File | ld <n><s>   :Load Dos-File | p <comm>:Print  "
  7374.         dc.b    "l <n><a>[!] :Load File       | s <n><a><a> :Save File     | h       :History"
  7375.         dc.b    "MEMORY----------------------------------------------------------------------"
  7376.         dc.b    "F <s>       :FreeMem         | A <s><a><l>     :AllocAbs  | M <a> : Mem Free"
  7377.         dc.b    "S [s]       :Segment List    | A <s><l>[C|F|P] :AllocMem                    "
  7378.         dc.b    "MONITOR---------------------------------------------------------------------"
  7379.         dc.b    "a <a>    :Assemble     | c <a><a><a> :Compare   | d <a>[a]        :Dissass  "
  7380.         dc.b    "i <a>[a] :ASCII Dump   | m <a>[a]    :Hex Dump  | o <a><a><bytes> :Occupy   "
  7381.          dc.b    "P <a>    :Textout      | r    :Show Registers   | t <a><a><a>     :Transfer "
  7382.         dc.b    "w <a><n> :Text to Mem  | x    :Exit Program     | ? <arith.expr>  :Calc     "
  7383.         dc.b    "TRACING---------------------------------------------------------------------"
  7384.         dc.b    "B <a>    :Breakpoint   | e <n|a> :Examine Task  | g <a> :goto | T [a] :Trace"
  7385.         dc.b    "FIND------------------------------------------------------------------------"
  7386.         dc.b    "fd <a><a><findexpr>[!] :Find and Dissassemble   | f <a><a><findexpr>[!]:Find"
  7387.         dc.b    "fr <a><a><a>           :Find Relative                                       "
  7388.         dc.b    "----------------------------------------------------------------------------"
  7389.  
  7390. ;****** Zero-Page (Flags) ******
  7391.         rsreset
  7392. FileLockerR    rs.w    256
  7393. FindBufferR    rs.l    $20
  7394. MaskBufferR    rs.l    $20
  7395. OutDeviceR    rs.l    $20
  7396. VariableBuff    rs.l    26
  7397. CommandHist    rs.b    HistorySize
  7398.  
  7399. ZeroPage    rs.w    1
  7400.         rsreset
  7401.  
  7402. IntBase        rs.l    1
  7403. GraphicsBase    rs.l    1
  7404. DosBase        rs.l    1
  7405. DislibBase    rs.l    1
  7406. VarBuff        rs.l    1
  7407. HistoryMem    rs.l    1
  7408. HistoryEnd    rs.l    1
  7409. HistPointStart    rs.l    1
  7410. HistPointEnd    rs.l    1
  7411. HistPointAct    rs.l    1
  7412.  
  7413. AllocSegs    rs.l    16    ;8 Alloc-Segmente Pointer,Length
  7414. AllocLength    equ    AllocSegs+4
  7415.  
  7416. FlushCursorX    rs.w    1
  7417. MainWindow    rs.l    1
  7418. TextScreen    rs.l    1
  7419. RechenSpeicher    rs.l    1
  7420. OutPutStart    rs.l    1
  7421. OutPutStop    rs.l    1
  7422. BaseStack    rs.l    1
  7423. AssembleAdr    rs.l    1
  7424. AdrDataSource    rs.l    1
  7425. AdrModeSource    rs.w    1
  7426. AdrDataDest    rs.l    1
  7427. AdrModeDest    rs.w    1
  7428. ModeBitSource    rs.w    1
  7429. ModeBitDest    rs.w    1
  7430. CommandSize    rs.w    1
  7431. Uncontrolled    =    CommandSize    ;verwendung überschneidet nicht
  7432. MovemRemember    rs.w    1
  7433. OLDTRAP15    rs.l    1
  7434. ActIAdress    rs.l    1
  7435. DeviceUnit    rs.l    1    ;default: 0
  7436. DeviceName    rs.l    1    ;default: Zeiger auf trackdisk.device
  7437. DeviceFlags    rs.l    1    ;default: 0
  7438. DEBlocksPerTrack rs.w    1    ;default: 11
  7439. DEBytesPerTrack    rs.l    1    ;default: 512*11
  7440. DESizeBlock    rs.w    1    ;default: 512
  7441. DESurfaces    rs.w    1    ;default: 2
  7442. RememberTrap    rs.w    1
  7443. RememberAdress    rs.l    1
  7444. FileLocker    rs.l    1
  7445. FindBuffer    rs.l    1
  7446. MaskBuffer    rs.l    1
  7447. BatchFile    rs.l    1
  7448. BatchHandle    rs.l    1
  7449. RoundStackPos    rs.l    1
  7450. OutDevice    rs.l    1
  7451. WBMessage    rs.l    1
  7452. ReturnCode    rs.l    1
  7453. OwnTask        rs.l    1
  7454. StackKind    rs.l    1
  7455. PrinterFlag    rs.w    1
  7456. OutDHandle    rs.l    1
  7457. TextSize    rs.l    1
  7458. NoCursorToMouseFlag    rs.w    1
  7459. ConDevice    rs.l    1
  7460. WDRastPort    rs.l    1
  7461. FontBase    rs.l    1
  7462. ActRaw        rs.w    1
  7463. ActQual        rs.w    1
  7464. InBuffLen    rs.w    1
  7465. InBuffPoint    rs.l    1
  7466. LongTween    rs.l    1
  7467. HelpWindow    rs.l    1
  7468. SignalMask    rs.l    1
  7469. DELowCyl    rs.l    1
  7470. DEHighCyl    rs.l    1
  7471. InsertMode    rs.w    1
  7472. PatchFlag    rs.w    1
  7473. SpecialFind    rs.w    1
  7474. maxX        rs.w    1
  7475. maxY        rs.w    1
  7476. TextWidth    rs.w    1
  7477. TextWidth2    rs.w    1
  7478. TextHeight    rs.w    1
  7479. DisStruct    rs.b    sizeof_DisLine
  7480. NewFontName    rs.b    40
  7481. NewFontSize    rs.w    1
  7482. PubName        rs.b    40
  7483. FontX        rs.w    1
  7484. FontY        rs.w    1
  7485. Y0Pos        rs.w    1
  7486. Y0Rest        rs.w    1
  7487. SetError    rs.w    1
  7488. FontOpen    rs.w    1
  7489. V36OK        rs.w    1
  7490. ScreenFont    rs.l    1
  7491. IORequest    rs.b    IOSTD_SIZE
  7492. InputEventStr    rs.b    ie_SIZEOF
  7493. DiskIO        rs.b    IOSTD_SIZE
  7494. Readreply    rs.b    MP_SIZE
  7495. RelativesLen    rs.w    1
  7496.  
  7497. GesLen        equ    ZeroPage+RelativesLen
  7498.  
  7499. ;Keys without anything:
  7500. KeyConv dc.b    $41,$08    ;Backspace
  7501.     dc.b    $42,$09    ;Tab
  7502.     dc.b    $43,$0a ;Enter
  7503.     dc.b    $44,$0a ;Return
  7504.     dc.b    $46,$7f    ;Del
  7505.     dc.b    $4c,$90    ;Up
  7506.     dc.b    $4d,$91    ;Down
  7507.     dc.b    $4e,$92    ;Right
  7508.     dc.b    $4f,$93    ;Left
  7509.     dc.b    $50,$94,$51,$95    ;F1/F2
  7510.     dc.b    $52,$96    ;f3!!!
  7511.     dc.b    $58,$97,$59,$98    ;F9/F10-Keys
  7512.     dc.b    $5f,$0c    ;Help
  7513.  
  7514.     ;Shift:
  7515.  
  7516.     ;Numeric Keypad
  7517.     dc.b    $d0,$9c ;Shift + F1
  7518.     dc.b    $8f,$01    ;InsertMode
  7519.     dc.b    $9d,$99    ;End
  7520.     dc.b    $9e,$91    ;Down
  7521.     dc.b    $ad,$93    ;Left
  7522.     dc.b    $af,$92    ;Right
  7523.     dc.b    $bc,$7f    ;Del
  7524.     dc.b    $bd,$9a    ;Home
  7525.     dc.b    $be,$90    ;Up
  7526.  
  7527.     dc.b    $c3,$0d    ;Shift CR
  7528.     dc.b    $c4,$0d    ;Shift CR
  7529.     dc.b    $c6,$9b    ;Insert (Shift+Del)
  7530.     dc.b    $cc,$81    ;Blättern Up
  7531.     dc.b    $cd,$82    ;Blättern Down
  7532.     dc.b    $ce,$05    ;END Of Line
  7533.     dc.b    $cf,$0d    ;Start of Line
  7534.     dc.b    $df,$0b    ;Clear Line Right    
  7535.     dc.w    0
  7536.