home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / here / crash / simcrashboot.s < prev   
Text File  |  1995-02-27  |  5KB  |  278 lines

  1.  
  2. Temp        = $100
  3. Temp2        = $104
  4. _MyWinRPort    = $108
  5. _IntBase    = $10c
  6. IT_Yps        = $110
  7.  
  8.     
  9. boot:    dc.b    'DOS',0
  10.     dc.l    0
  11.     dc.l    $370
  12.  
  13.     movem.l    d0-d7/a0-a6,-(a7)
  14.     bsr.w    GetTopFast    
  15.  
  16.     move.l    4,a6            ;alloc chipmem for bootblock
  17.     move.l    #$480,d0
  18.     move.l    #$10002,d1
  19.     jsr    -198(a6)
  20.     move.l    d0,Temp2
  21.  
  22.     move.l    #0,IT_Yps
  23.  
  24.     bsr.w    OpenWin
  25.     lea    Info(pc),a0
  26.     bsr.w    PrintLine
  27.     add.l    #18,IT_Yps
  28.  
  29.     lea    Load(pc),a0
  30.     bsr.w    PrintLine
  31.  
  32.     movem.l    (a7),d0-d7/a0-a6        ;load simbug
  33.     move.w    #2,$1c(a1)    ;command
  34.     move.l    #$c000,$24(a1)    ;length
  35.     move.l    Temp,$28(a1)    ;load address
  36.     move.l    #$800,$2c(a1)    ;disk address
  37.     jsr    -$1c8(a6)
  38.     
  39.     movem.l    (a7),d0-d7/a0-a6
  40.     lea    ELoad(pc),a0
  41.     tst.b    31(a1)
  42.     bne.w    Fatal
  43.  
  44.     bsr.w    InitComms
  45.  
  46.     lea    Ins(pc),a0
  47.     bsr.w    PrintLine
  48.     
  49. .loop    btst    #6,$bfe001
  50.     bne.b    .loop
  51.  
  52.     lea    Load2(pc),a0
  53.     bsr.w    PrintLine
  54.  
  55.     movem.l    (a7),d0-d7/a0-a6    ;read new bootblock
  56.     move.w    #2,$1c(a1)
  57.     move.l    #$400,$24(a1)    ;length
  58.     move.l    Temp2,$28(a1)    ;load address
  59.     move.l    #$000,$2c(a1)    ;disk address
  60.     jsr    -$1c8(a6)
  61.  
  62.     lea    Exec(pc),a0
  63.     bsr.w    PrintLine
  64.             
  65.     movem.l    (a7),d0-d7/a0-a6
  66.     move.l    a0,Temp
  67.     move.l    Temp2,a0
  68.     pea    12(a0)
  69.     move.l    Temp,a0
  70.     rts
  71.     
  72. Fatal:    add.l    #18,IT_Yps
  73.     bsr.w    PrintLine
  74. .x    bra.s    .x
  75.  
  76.     *----------*
  77.  
  78. GetTopFast:
  79.     move.l    4,a6
  80.     move.l    322(a6),a0        ; memlist
  81.     
  82. .loop    move.w    14(a0),d0
  83.     and.w    #4,d0
  84.     beq.b    .chip
  85.  
  86. .get    sub.l    #$c000,24(a0)    ;upper
  87.     sub.l    #$c000,28(a0)    ;free
  88.     move.l    24(a0),Temp
  89.     rts
  90.     
  91. .chip    move.l    0(a0),a0
  92.     tst.l    (a0)
  93.     bne.b    .loop
  94.  
  95.     lea    GetTopChip(pc),a0
  96.     sub.l    #$a000,2(a0)
  97.  
  98.     move.l    322(a6),a0        ; memlist
  99.     bra    .get
  100.     
  101.     *----------*
  102.     
  103. InitComms:
  104.     bsr.b    Comms_ConfigMem
  105.     
  106.     bsr.w    GetTopChip
  107.     move.l    Temp,a6
  108.     move.l    a1,0(a6)        ;chipmem display
  109.     ;move.l    #0,4(a6)        ;chipmem backup
  110.     ;move.l    #0,264(a6)        ;current VBR
  111.     
  112.     Lea    VecList(pc),a1
  113.     Lea    0,a4
  114. .setup    movem.w    (a1)+,d0/d1
  115.     add.l    a6,d1
  116.     move.l    d1,(a4,d0.w)
  117.     tst.w    (a1)
  118.     bpl.b    .setup
  119.  
  120.     rts    
  121.  
  122.     *--------------------------------------------*
  123.  
  124. Comms_ConfigMem:
  125.  
  126.     move.l    4,a6
  127.     move.l    322(a6),a0        ; memlist
  128.     move.l    Temp,a1
  129.     lea    $7b72(a1),a1
  130.     move.l    a1,-(a7)
  131.     
  132.     move.w    #5,d3
  133.             
  134. .loop    move.l    20(a0),d1        ; lower
  135.     and.l    #$fffff000,d1
  136.     move.l    d1,(a1)+
  137.     move.l    24(a0),(a1)+    ; upper
  138.  
  139.     sub.w    #1,d3
  140.     beq.b    .max
  141.  
  142.     move.l    0(a0),a0
  143.     tst.l    (a0)
  144.     bne.b    .loop
  145.     
  146. .max    move.l    (a7)+,a1
  147.     move.l    a1,a0
  148. .chiploop
  149.     tst.l    (a0)
  150.     bne.b    .notchip
  151.     
  152.     ;put chipmem first is memlist
  153.     
  154.     move.l    (a0),d0
  155.     move.l    (a1),(a0)
  156.     move.l    d0,(a1)
  157.     lea    4(a0),a0
  158.     lea    4(a1),a1
  159.     move.l    (a0),d0
  160.     move.l    (a1),(a0)
  161.     move.l    d0,(a1)        
  162.     rts    
  163.  
  164. .notchip
  165.     lea    8(a0),a0
  166.     add.w    #1,d3
  167.     cmp.w    #5,d3
  168.     bne.b    .chiploop
  169.  
  170.     rts
  171.     
  172.     *--------------------------------------------*
  173.  
  174. GetTopChip:    
  175.     lea    $200000-$8000,a1
  176. .loop    move.l    4,a6
  177.     jsr    -534(a6)        ;TypeOfMem
  178.     tst.l    d0
  179.     bne.b    .ok
  180.     sub.l    #$5000,a1
  181.     bra.b    .loop
  182. .ok    rts
  183.     
  184.     *--------------------------------------------*
  185.     
  186. OpenWin:
  187.     move.l    4,a6
  188.     Lea    IntName(pc),A1
  189.     jsr    -408(a6)        ;OldOpenLibrary
  190.     tst.l    d0
  191.     Beq.b    .Err
  192.     move.l    d0,_IntBase
  193.     move.l    d0,a6
  194.  
  195.     lea    SimWindow(pc),a0
  196.     move.l    a1,32(a0)
  197.     jsr    -204(a6)        ;OpenWindow
  198.     move.l    d0,a0
  199.     Move.l    $32(A0),_MyWinRPort
  200.  
  201.     move.l    Temp2,a1
  202.     lea    $400(a1),a1
  203.     moveq.l    #1,d0
  204.     move.l    d0,d1
  205.     move.l    d0,d2
  206.     move.l    d0,d3
  207.     jsr    -270(a6)        ;SetPointer
  208.  
  209. .Err    moveq.l    #0,d0
  210.     rts
  211.  
  212.     *-------------------------------*
  213.  
  214. PrintLine:
  215.     lea    IText(pc),a1
  216.     move.l    a0,12(a1)
  217.     move.l    _MyWinRPort,a0
  218.     move.l    #0,d0        
  219.     move.l    IT_Yps,d1
  220.     move.l    _IntBase,a6
  221.     jsr    -216(a6)
  222.     rts    
  223.         
  224.     *-------------------------------*
  225.  
  226. VecList:    dc.w    $08,24    ;Bus Error
  227.     dc.w    $0C,28    ;Address Error
  228.     dc.w    $10,32    ;Illegal Instruction
  229.     dc.w    $14,36    ;Zero Divide
  230.     dc.w    $18,40    ;CHK/CHK2 Instruction
  231.     dc.w    $1C,44    ;cpTRAPcc, TRAPcc, TRAPV Instructions
  232.     dc.w    $24,52    ;Trace Exception
  233.     dc.w    $28,56    ;Line-A Emulator (1010)
  234.     dc.w    $2C,60    ;Line-F Emulator (1111) & Coprocessor Instructions
  235.     dc.l    -1
  236.  
  237.     *-------------------------------*
  238.  
  239. IntName:
  240.     dc.b    "intuition.library"
  241.     even
  242. SimWindow:
  243.     dc.w    0,0        ;window XY origin relative to TopLeft of screen
  244.     dc.w    640,200        ;window width and height
  245.     dc.b    0,1        ;detail and block pens
  246.     dc.l    0        ;IDCMP flags
  247.     dc.l    $21040        ;other window flags
  248.     dc.l    0        ;first gadget in gadget list
  249.     dc.l    0        ;custom CHECKMARK imagery
  250.     dc.l    0        ;window title
  251.     dc.l    0        ;custom screen pointer
  252.     dc.l    0        ;custom bitmap
  253.     dc.w    5,5        ;minimum width and height
  254.     dc.w    -1,-1        ;maximum width and height
  255.     dc.w    1        ;destination screen type
  256.  
  257. IText:    dc.b    1,0,1,0    ;front and back text pens, drawmode and fill byte
  258.     dc.w    12,8    ;XY origin relative to container TopLeft
  259.     dc.l    0    ;font pointer or NULL for default
  260.     dc.l    0    ;pointer to text
  261.     dc.l    0    ;next IntuiText structure
  262.  
  263. Info:    dc.b    "Simbug Exception Handler v0.1 By Shagratt/LSD",0
  264. Load:    dc.b    "Loading Simbug....",0
  265. Ins:    dc.b    "Insert disk and press LMB",0
  266. Load2:    dc.b    "Loading new bootblock..  ",0
  267. Exec:    dc.b    "Executing new bootblock..",0
  268. ELoad:    dc.b    "Error reading disk",0
  269.  
  270.     even
  271.     ds.l    1000
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.