home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / disk / cdrom / amicdfs / src / stackswap.asm < prev   
Assembly Source File  |  1995-02-27  |  849b  |  63 lines

  1. MINSTACKSIZE    EQU    2400
  2.  
  3.     section    text,code
  4.  
  5.  
  6.     xdef __stackswap
  7. __stackswap
  8.     MOVE.L    4,A0
  9.     MOVE.L    $114(A0),A0
  10.     MOVE.L    $3A(A0),A1
  11.     CMP.L    SP,A1
  12.     BCC.S    1$
  13.     CMP.L    $3E(A0),SP
  14.     BHI.S    1$
  15.     ADD.L    #MINSTACKSIZE,A1
  16.     CMP.L    SP,A1
  17.     BCC.S    1$
  18.     MOVE.L    4(SP),A0
  19.     JMP    (A0)
  20.  
  21. 1$    MOVEM.L    D2/A4/A5,-(SP)
  22.     MOVE.L    4,A5
  23.     MOVEQ    #0,D1
  24.     MOVE.L    #MINSTACKSIZE,D0
  25.     EXG    A5,A6
  26.     JSR    -$C6(A6)
  27.     EXG    A5,A6
  28.     MOVE.L    D0,A4
  29.     MOVE.L    A4,D0
  30.     BNE.S    3$
  31.     MOVEQ    #0,D2
  32. 2$    MOVE.L    D2,D0
  33.     MOVEM.L    (SP)+,D2/A4/A5
  34.     RTS
  35.  
  36. 3$    LEA    MINSTACKSIZE(A4),A1
  37.     LEA    -8(A1),A0
  38.     MOVE.L    A1,-(A0)
  39.     MOVE.L    A4,-(A0)
  40.     MOVE.L    A0,8(A0)
  41.     MOVE.L    A0,A4
  42.     EXG    A5,A6
  43.     JSR    -$2DC(A6)
  44.     EXG    A5,A6
  45.     MOVE.L    8(A4),A0
  46.     LEA    $3C(A0),A0
  47.     MOVEQ    #10,D0
  48. 4$    MOVE.L    -(A0),-(SP)
  49.     DBRA    D0,4$
  50.     MOVE.L    (SP),A0
  51.     JSR    (A0)
  52.     MOVE.L    D0,D2
  53.     MOVE.L    A4,A0
  54.     EXG    A5,A6
  55.     JSR    -$2DC(A6)
  56.     MOVE.L    (A4),A1
  57.     MOVE.L    #MINSTACKSIZE,D0
  58.     JSR    -$D2(A6)
  59.     EXG    A5,A6
  60.     BRA.S    2$
  61.  
  62.     end
  63.