home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / here / comms / comms.i
Text File  |  1995-02-27  |  9KB  |  534 lines

  1.     
  2.   *************************************************************************
  3.   *************************************************************************
  4.   **                                                                     **
  5.   **         Debugger handler v0.3 06/11/93 by Shagratt/LSD.             **
  6.   **         Symbol converter v0.2 31/10/93 by Shagratt/LSD.             **
  7.   **                                                                     **
  8.   **         SIMBUG © Stefan Walter                                      **
  9.   **                                                                     **
  10.   *************************************************************************
  11.   *************************************************************************
  12.  
  13. CommsSize    = 100*1000        ; Memory Allocation For Symbol List
  14.     
  15.     *--------------------------------------------*
  16.  
  17. InitComms:    bsr    AllocMem
  18.     beq    .Error
  19.  
  20.     bsr    Comms_ConfigMem
  21.     bsr    GetSymbols
  22.  
  23.     bsr    GetTopChip
  24.     lea    Comms_DebugCode,a6
  25.     move.l    a1,0(a6)        ;chipmem display
  26.     move.l    Comms_DebugBuff,4(a6)    ;chipmem backup
  27.     bsr    CommsGetVBR
  28.     move.l    a4,264(a6)        ;current VBR
  29.     
  30.     Lea    OldVecs,a0
  31.     Lea    VecList,a1
  32. .setup    movem.w    (a1)+,d0/d1
  33.     add.l    a6,d1
  34.     move.l    (a4,d0.w),(a0,d0.w)
  35.     move.l    d1,(a4,d0.w)
  36.     cmp.w    #-1,(a1)
  37.     bne    .setup
  38.  
  39. .Error    moveq.l    #0,d0
  40.     rts    
  41.  
  42.     *--------------------------------------------*
  43.  
  44. AllocMem:    move.l    #CommsSize,d0
  45.     move.l    #$10001,d1
  46.     move.l    4,a6
  47.     jsr    -198(a6)        ;AllocMem
  48.     move.l    d0,Comms_SymbBuff
  49.     
  50.     move.l    #$5000,d0
  51.     move.l    #$10001,d1
  52.     move.l    4,a6
  53.     jsr    -198(a6)        ;AllocMem
  54.     move.l    d0,Comms_DebugBuff
  55.     
  56.     move.l    Comms_SymbBuff,d0
  57.     or.l    Comms_DebugBuff,d0
  58.     rts
  59.     
  60.     *--------------------------------------------*
  61.  
  62. Comms_ConfigMem:
  63.  
  64.     move.l    4,a6
  65.     move.l    322(a6),a0        ; memlist
  66.     lea    Comms_DebugCode+$7b72,a1
  67.     
  68.     move.w    #5,d3
  69.             
  70. .loop    move.l    20(a0),d1        ; lower
  71.     and.l    #$fffff000,d1
  72.     move.l    d1,(a1)+
  73.     move.l    24(a0),(a1)+    ; upper
  74.  
  75.     sub.w    #1,d3
  76.     beq    .max
  77.  
  78.     move.l    0(a0),a0
  79.     tst.l    (a0)
  80.     bne    .loop
  81.     
  82. .max    lea    Comms_DebugCode+$7b72,a0
  83. .chiploop    tst.l    (a0)
  84.     bne    .notchip
  85.     
  86.     ;put chipmem first is memlist
  87.     
  88.     lea    Comms_DebugCode+$7b72,a1
  89.     move.l    (a0),d0
  90.     move.l    (a1),(a0)
  91.     move.l    d0,(a1)
  92.     lea    4(a0),a0
  93.     lea    4(a1),a1
  94.     move.l    (a0),d0
  95.     move.l    (a1),(a0)
  96.     move.l    d0,(a1)        
  97.     rts    
  98.  
  99. .notchip    lea    8(a0),a0
  100.     add.w    #1,d3
  101.     cmp.w    #5,d3
  102.     bne    .chiploop
  103.  
  104.     rts
  105.     
  106.     *--------------------------------------------*
  107.  
  108. KillComms:    bsr    CommsGetVBR
  109.     Lea    OldVecs,a0
  110.     Lea    VecList,a1
  111. .setup    movem.w    (a1)+,d0/d1
  112.     move.l    (a0,d0.w),(a4,d0.w)
  113.     cmp.w    #-1,(a1)
  114.     bne    .setup
  115.  
  116.     tst.l    Comms_SymbBuff
  117.     beq    .nomem1
  118.     move.l    Comms_SymbBuff,a1
  119.     move.l    #CommsSize,d0
  120.     move.l    4,a6
  121.     jsr    -210(a6)        ;FreeMem
  122.     move.l    #0,Comms_SymbBuff
  123.     
  124. .nomem1    tst.l    Comms_DebugBuff
  125.     beq    .nomem2
  126.     move.l    Comms_DebugBuff,a1
  127.     move.l    #$5000,d0
  128.     move.l    4,a6
  129.     jsr    -210(a6)        ;FreeMem
  130.     move.l    #0,Comms_DebugBuff
  131. .nomem2    rts
  132.  
  133.     *--------------------------------------------*
  134.  
  135. GetTopChip:    lea    $200000-$8000,a1
  136. .loop    move.l    4,a6
  137.     jsr    -534(a6)        ;TypeOfMem
  138.     tst.l    d0
  139.     bne    .ok
  140.     sub.w    #$8000,a1
  141.     bra    .loop
  142. .ok    rts
  143.     
  144.     *--------------------------------------------*
  145.  
  146. Comms:    btst    #2,$dff016
  147.     bne    .ret
  148.     
  149.     jsr    Comms_DebugCode+8
  150.     
  151. .wait    move.w    $dff006,$dff180
  152.     btst    #2,$dff016
  153.     beq    .wait
  154.  
  155. .ret    rts    
  156.     
  157.     *--------------------------------------------*
  158.  
  159. CommsGetVBR    move.l    a6,-(a7)
  160.     Move.l    4.w,A6
  161.     Moveq    #15,D7
  162.     And    296(A6),D7
  163.     Beq    .68000
  164.     Lea    .Find(Pc),A5
  165.     Jsr    -30(A6)
  166. .68000    Move.l    D7,a4
  167.     move.l    (a7)+,a6
  168.     Rts
  169.  
  170. .Find    dc.l    $4e7a7801        ;Movec.l    VBR,D7
  171.     Rte
  172.  
  173.     *--------------------------------------------*
  174.  
  175. GetSymbols:    Lea    Comms_DName,A1
  176.     Moveq    #0,D0
  177.     move.l    4,a6
  178.     jsr    -552(a6)        ;OpenLibrary
  179.     Move.l     D0,Comms_Dos
  180.     Beq    .err
  181.  
  182.     bsr    OpenSymb
  183.     tst.l    Comms_Handle
  184.     beq    .nofile
  185.         
  186.     move.l    Comms_SymbBuff,a0
  187.     move.l    #End,16(a0)
  188.     move.l    #Start,20(a0)
  189.  
  190.     lea    32(a0),a0        ;symbol list start
  191.     move.l    a0,Comms_SymbPtr
  192.     move.l    Comms_SymbBuff,Comms_DebugCode+236
  193.  
  194.     bsr    FindSymb
  195.     bsr    CloseSymb
  196.  
  197. .nofile    Move.l    Comms_Dos,a1
  198.     move.l    4,a6
  199.     jsr    -414(a6)        ;CloseLibrary
  200.     
  201. .err    rts
  202.  
  203.     *--------------------------------------------*
  204.  
  205. OpenSymb:    move.l    Comms_Dos,a6
  206.     move.l    #Comms_DBList,d1
  207.     move.l    #1005,d2
  208.     jsr    -30(a6)        ;Open
  209.     move.l    d0,Comms_Handle
  210.     
  211.     IFNE    COMBIG
  212.     tst.l    d0
  213.     beq    .err
  214.     
  215.     move.l    Comms_Handle,d1
  216.     move.l    #0,d2
  217.     move.l    #1,d3        ;OFFSET_END
  218.     jsr    -66(a6)        ;Seek
  219.     
  220.     move.l    Comms_Handle,d1
  221.     move.l    #0,d2
  222.     move.l    #-1,d3        ;OFFSET_BEGGINING
  223.     jsr    -66(a6)        ;Seek
  224.     move.l    d0,Comms_Len
  225.     
  226.     move.l    Comms_Len,d0
  227.     add.l    #4,d0
  228.     move.l    #$10001,d1
  229.     move.l    4,a6
  230.     jsr    -198(a6)        ;AllocMem
  231.     move.l    d0,Comms_TempBuff
  232.     tst.l    d0
  233.     beq    .err
  234.  
  235.     move.l    Comms_TempBuff,Comms_MemPtr
  236.     
  237.     move.l    Comms_Dos,a6    
  238.     move.l    Comms_Handle,d1
  239.     move.l    Comms_TempBuff,d2
  240.     move.l    Comms_TempBuff,d3
  241.     jsr    -42(a6)        ;Read
  242.     move.l    Comms_TempBuff,a0
  243.     lea    (a0,d0.l),a0
  244.     move.l    #-1,(a0)
  245.     
  246.     move.l    Comms_Handle,d1
  247.     move.l    #0,d2
  248.     move.l    #-1,d3        ;OFFSET_BEGGINING
  249.     jsr    -66(a6)        ;Seek
  250.     
  251.     ENDC
  252.     
  253. .err    rts
  254.  
  255.     *--------------------------------------------*
  256.  
  257. FindSymb:    bsr    ReadLong
  258.     cmp.l    #$3f3,d0
  259.     bne    .err
  260.  
  261.     bsr    ReadLong
  262.     cmp.l    #0,d0
  263.     bne    .err
  264.  
  265.     bsr    ReadLong        ;no of hunks
  266.     move.l    d0,d1
  267.     bsr    ReadLong        ;first hunk
  268.     bsr    ReadLong        ;last hunk
  269. .skip    bsr    ReadLong        ;bss for each hunk
  270.     sub.l    #1,d1
  271.     bne    .skip
  272.  
  273.     Lea    Comms_SymHunks,a0
  274.     move.l    #Start,(a0)+
  275.     lea    Start-4,a1
  276. .hunkloop    move.l    (a1),d0
  277.     beq    .done
  278.     asl.l    #2,d0
  279.     move.l    d0,a1
  280.     add.l    #4,d0
  281.     move.l    d0,(a0)+
  282.     bra    .hunkloop
  283.     
  284. .done    bsr    SymbProcHunk
  285. .err    rts
  286.  
  287.  
  288.     *--------------------------------------------*
  289.  
  290. ReadLong:    movem.l    d1-d7/a0-a6,-(a7)
  291.  
  292.     IFNE    COMBIG
  293.     tst.l    Comms_MemPtr
  294.     beq    .norm
  295.     
  296.     move.l    Comms_MemPtr,a0
  297.     move.l    (a0)+,d0
  298.     move.l    a0,Comms_MemPtr
  299.     move.w    d0,$dff180
  300.     movem.l    (a7)+,d1-d7/a0-a6
  301.     rts
  302.     ENDC
  303.     
  304. .norm    move.l    Comms_DebugBuff,a0
  305.     move.l    #-1,(a0)
  306.     move.l    Comms_Dos,a6        
  307.     move.l    Comms_Handle,d1
  308.     move.l    Comms_DebugBuff,d2
  309.     move.l    #4,d3
  310.     jsr    -42(a6)        ;Read
  311.     move.l    Comms_DebugBuff,a0
  312.     move.l    (a0),d0
  313.     move.w    d0,$dff180
  314.     movem.l    (a7)+,d1-d7/a0-a6
  315.     rts
  316.     
  317.     *--------------------------------------------*
  318.  
  319. SymbProcHunk:
  320.     move.l    #0,Comms_HunkNo
  321.  
  322. .loop    bsr    ReadLong
  323.     cmp.l    #-1,d0
  324.     beq    .err
  325.     
  326.     sub.l    #$3e7,d0
  327.     asl.l    #2,d0
  328.     lea    SymbHunkTab,a0
  329.     move.l    (a0,d0.l),a0
  330.     cmp.l    #0,a0
  331.     beq    .err
  332.     jsr    (a0)
  333.     bra    .loop
  334.     
  335. .err    rts
  336.  
  337.     *--------------------------------------------*
  338.  
  339. SeekNext:    movem.l    d1-d7/a0-a6,-(a7)
  340.  
  341.     IFNE    COMBIG
  342.     tst.l    Comms_MemPtr
  343.     beq    .norm
  344.     asl.l    #2,d0
  345.     add.l    d0,Comms_MemPtr
  346.     movem.l    (a7)+,d1-d7/a0-a6
  347.     rts
  348.     ENDC
  349.     
  350. .norm    move.l    Comms_Handle,d1
  351.     move.l    d0,d2
  352.     asl.l    #2,d2
  353.     move.l    #0,d3
  354.     move.l    Comms_Dos,a6
  355.     jsr    -66(a6)        ;Seek
  356.     movem.l    (a7)+,d1-d7/a0-a6
  357.     rts
  358.  
  359.     *--------------------------------------------*
  360.  
  361. CloseSymb:    move.l    Comms_Dos,a6
  362.  
  363.     move.l    Comms_Handle,d1
  364.     jsr    -36(a6)        ;Close
  365.     
  366.     move.l    #Comms_DBList,d1
  367.     jsr    -72(a6)        ;DeleteFile
  368.     
  369.     IFNE    COMBIG
  370.     tst.l    Comms_TempBuff
  371.     beq    .err
  372.     move.l    Comms_TempBuff,a1
  373.     move.l    Comms_Len,d0
  374.     add.l    #4,d0
  375.     move.l    4,a6
  376.     jsr    -210(a6)        ;AllocMem
  377.     move.l    #0,Comms_TempBuff
  378.     ENDC
  379. .err    rts    
  380.     
  381.     *--------------------------------------------*
  382.  
  383. HunkSymb:    move.l    Comms_SymbPtr,a0
  384.     
  385. .next    move.l    Comms_DebugBuff,a1
  386.     lea    8(a1),a1
  387.     bsr    ReadLong
  388.     beq    .err
  389.     move.l    d0,d1
  390.  
  391. .loop    bsr    ReadLong
  392.     move.l    d0,(a1)+
  393.     sub.l    #1,d1
  394.     bne    .loop
  395.     move.l    #0,(a1)+
  396.         
  397.     bsr    ReadLong
  398.     move.l    d0,d1
  399.     move.l    Comms_HunkNo,d2
  400.     asl.l    #2,d2
  401.     lea    Comms_SymHunks,a3
  402.     add.l    (a3,d2.l),d1
  403.     move.l    d1,(a0)+        ;Address
  404.     move.l    a0,a3
  405.     move.w    #0,(a0)+        ;skip length
  406.  
  407.     move.l    Comms_DebugBuff,a1
  408.     lea    8(a1),a1
  409.     move.w    #-1,d0    
  410. .len1    add.w    #1,d0
  411.     cmp.b    #0,(a1,d0.w)
  412.     bne    .len1
  413.     
  414.     move.b    d0,(a0)+        ;Len Byte
  415. .len2    move.b    (a1)+,d1
  416.     cmp.b    #"A",d1
  417.     blt    .ok
  418.     cmp.b    #"Z",d1
  419.     bgt    .ok
  420.     or.b    #32,d1
  421. .ok    move.b    d1,(a0)+        ;Symb Text
  422.     dbf    d0,.len2
  423.     
  424.     move.l    Comms_SymbBuff,a5
  425.     add.l    #1,4(a5)        ;no of symbols
  426.     
  427.     lea    -1(a0),a0
  428.     move.l    a0,d0
  429.     btst    #0,d0
  430.     beq    .even
  431.     move.b    #0,(a0)+
  432. .even    move.l    a0,d0
  433.     sub.l    a3,d0
  434.     move.w    d0,(a3)
  435.  
  436.     bra    .next
  437.  
  438. .err    add.l    #1,Comms_HunkNo
  439.     move.l    a0,Comms_SymbPtr
  440.  
  441.     rts
  442.     
  443.     *-------------------------------*
  444.  
  445. HunkBSS:    bra    ReadLong
  446.     
  447.     *-------------------------------*
  448.  
  449. HunkData:    bsr    ReadLong
  450.     bra    SeekNext
  451.     
  452.     *-------------------------------*
  453.     
  454. HunkReloc    bsr    ReadLong
  455.     cmp.l    #0,d0
  456.     beq    .end
  457.     move.l    d0,d7
  458.     bsr    ReadLong
  459.     move.l    d7,d0
  460.     bsr    SeekNext
  461.     bra    HunkReloc
  462.     
  463. .end    rts
  464.  
  465.     *-------------------------------*
  466.  
  467. HunkEnd:    rts
  468.  
  469.     *-------------------------------*
  470.  
  471. SymbHunkTab:    dc.l    0    ;$3e7
  472.         dc.l    0    ;$3e8
  473.         dc.l    HunkData    ;$3e9
  474.         dc.l    HunkData    ;$3ea
  475.         dc.l    HunkBSS    ;$3eb
  476.         dc.l    HunkReloc    ;$3ec
  477.         dc.l    HunkReloc    ;$3ed
  478.         dc.l    HunkReloc    ;$3ee
  479.         dc.l    HunkSymb    ;$3ef
  480.         dc.l    HunkSymb    ;$3f0
  481.         dc.l    HunkData    ;$3f1
  482.         dc.l    HunkEnd    ;$3f2
  483.         dc.l    0    ;$3f3
  484.         dc.l    0    ;$3f4
  485.         dc.l    0    ;$3f5
  486.         dc.l    HunkEnd    ;$3f6
  487.         dc.l    HunkReloc    ;$3f7    
  488.         dc.l    HunkReloc    ;$3f8    
  489.         dc.l    HunkReloc    ;$3f9    
  490.         dc.l    HunkBSS    ;$3fa    
  491.         dc.l    HunkData    ;$3fb    
  492.         dc.l    0    ;$3fc
  493.         dc.l    HunkReloc    ;$3fd    
  494.         dc.l    0    ;$3fe
  495.         dc.l    0    ;$3ff
  496.  
  497.  
  498.  
  499.     *--------------------------------------------*
  500.  
  501. OldVecs:    ds.l    256
  502.  
  503. VecList:    dc.w    $08,24    ;Bus Error
  504.     dc.w    $0C,28    ;Address Error
  505.     dc.w    $10,32    ;Illegal Instruction
  506.     dc.w    $14,36    ;Zero Divide
  507.     dc.w    $18,40    ;CHK/CHK2 Instruction
  508.     dc.w    $1C,44    ;cpTRAPcc, TRAPcc, TRAPV Instructions
  509.     dc.w    $24,52    ;Trace Exception
  510.     dc.w    $28,56    ;Line-A Emulator (1010)
  511.     dc.w    $2C,60    ;Line-F Emulator (1111) & Coprocessor Instructions
  512.     dc.l    -1
  513.  
  514. Comms_Dos        dc.l    0
  515. Comms_Handle:    dc.l    0
  516. Comms_HunkNo:    dc.l    0
  517. Comms_SymbPtr:    dc.l    0
  518. Comms_SymbBuff:    dc.l    0
  519. Comms_DebugBuff:    dc.l    0
  520. Comms_Len:        dc.l    0
  521. Comms_TempBuff:    dc.l    0
  522. Comms_MemPtr:    dc.l    0
  523.  
  524. Comms_DName        dc.b    "dos.library",0
  525. Comms_DBList:    dc.b    "ram:temp.exe",0
  526.         even
  527.             
  528. Comms_DebugCode:    incbin    "SimBug/sim.20"
  529. Comms_SymHunks:    ds.l    32
  530.  
  531.     *--------------------------------------------*
  532.  
  533. End:
  534.