home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / szadb21b / source / src / assist.s < prev    next >
Text File  |  1991-07-07  |  3KB  |  178 lines

  1.     .text
  2.     .globl    _trap2
  3.     .globl    _trap3
  4.     .globl    _trap4
  5.     .globl    _trap5
  6.     .globl    _trap6
  7.     .globl    _trap7
  8.     .globl    _trap8
  9.     .globl    _trap9
  10.     .globl    _trapx
  11.     .globl  _linsize    * so many long words + 6 bytes in _linbuf
  12.  
  13.     .data
  14. trapno:    .ds.w    1
  15. svmysp:    .ds.l    1
  16.  
  17.     .text
  18.  
  19. A7    equ    15*4
  20. PC    equ    A7+4
  21. SR    equ    PC+4
  22. XP    equ    SR+4
  23. SUPV    equ    $2000
  24.  
  25. _trap2:
  26.     move.w    #2,trapno
  27.  
  28. btrap:
  29.     move.w    (sp)+,_detail
  30.     move.l    (sp)+,_be_addr
  31.     move.w    (sp)+,_be_instr
  32.     bra    rtrap
  33.  
  34. _trap3:
  35.     move.w    #3,trapno
  36.     bra    btrap
  37.  
  38. _trap4:
  39.     move.w    #4,trapno
  40.  
  41. rtrap:
  42.     movem.l    d0-d7/a0-a6,_regbuf
  43.     move.w    (sp)+,d0    * SR
  44.     move.l    (sp)+,d1    * PC
  45.     tst.w    _running
  46.     beq    myerror
  47.  
  48.     move.w    d0,d2
  49.     and.w    #SUPV,d2
  50.     bne    frsupv
  51. *trap from user mode
  52.     move.l    a7,_regbuf+XP
  53.     move    usp,a0
  54.     move.l    a0,_regbuf+A7
  55.     bra    frproc
  56. *trap from supv mode
  57. frsupv:
  58.     move.l    a7,_regbuf+A7
  59.     move    usp,a0
  60.     move.l    a0,_regbuf+XP
  61.     
  62. frproc:
  63.     move.l    svmysp,sp
  64.     move.l    d1,-(sp)    * push PC
  65.     move.w    d0,-(sp)    * push SP
  66.     move.w    trapno,-(sp)    * push trapno
  67.     jsr    _trap
  68. myerror:
  69.     * stay with this stack
  70.     jsr    _trap
  71.  
  72. _trap5:
  73.     move.w    #5,trapno
  74.     bra    rtrap
  75.  
  76. _trap6:
  77.     move.w    #6,trapno
  78.     bra    rtrap
  79.  
  80. _trap7:
  81.     move.w    #7,trapno
  82.     bra    rtrap
  83.  
  84. _trap8:
  85.     move.w    #8,trapno
  86.     bra    rtrap
  87.  
  88. _trap9:
  89.     move.w    #9,trapno
  90.     bra    rtrap
  91.  
  92. _trapx:
  93.     move.w    #10,trapno
  94.     bra    rtrap
  95.  
  96.     .globl    _go
  97. _go:
  98.     move.l    sp,svmysp
  99.     move.w    _regbuf+SR+2,d0
  100.     move.w    d0,d2
  101.     and.w    #SUPV,d2
  102.     bne    gosupv
  103. * going to user mode - user's SSP in XP, user's USP in A7
  104.     move.l    _regbuf+A7,a0        *restore usp
  105.     move    a0,usp
  106.     move.l    _regbuf+XP,a7        *restore ssp
  107.     bra    gocom
  108. * going to system mode - user's SSP in A7, user's USP in XP
  109. gosupv:
  110.     move.l    _regbuf+XP,a0
  111.     move    a0,usp            *restore usp
  112.     move.l    _regbuf+A7,a7        *restore ssp
  113. gocom:
  114.     move.l    _regbuf+PC,-(sp)    *push user's PC
  115.     move.w    d0,-(sp)        *push user's SR
  116.     movem.l    _regbuf,d0-d7/a0-a6    *restore other regs
  117.     rte
  118.  
  119. ;
  120. ;  bcopy (from, to, num_of_bytes)
  121. ;  copy memory from 'from' to 'to' byte by byte
  122. ;  No check for ovelap or bounds, num_of_bytes has to fit into a word.
  123. ;
  124.  
  125.     .globl    _bcopy
  126. _bcopy:
  127.     move.l    4(sp),a1
  128.     move.l    8(sp),a0
  129.     move.w    12(sp),d0
  130.     bra    bcd
  131. bclp:
  132.     move.b    (a1)+,(a0)+
  133. bcd:
  134.     dbra    d0,bclp
  135.     rts
  136.  
  137. ;
  138. ;  lcopy (from, to, num_of_pieces)
  139. ;  copy memory from 'from' to 'to' in 16 byte pieces.
  140. ;  No check for ovelap or bounds, num_of_pieces has to fit into a word.
  141. ;
  142.  
  143.     .globl    _lcopy
  144. _lcopy:
  145.     move.l    4(sp),a1
  146.     move.l    8(sp),a0
  147.     move.w    12(sp),d0
  148.     bra    lcd
  149. lclp:
  150.     move.l    (a1)+,(a0)+
  151.     move.l    (a1)+,(a0)+
  152.     move.l    (a1)+,(a0)+
  153.     move.l    (a1)+,(a0)+
  154. lcd:
  155.     dbra    d0,lclp
  156.     rts
  157.  
  158. *    .globl    _getfonts
  159. *_getfonts:
  160. *    .dc.w    $0a000
  161. *    move.l    a1,d0
  162. *    rts
  163.  
  164.     .globl  _cleanlb
  165. _cleanlb:
  166.     move.w  _linsize,d0
  167.     move.l  #$20202020,d1        * four blanks
  168.     move.l  _linbuf,a0
  169. cblp:
  170.     move.l  d1,(a0)+
  171.     dbra    d0,cblp
  172.     rts
  173. .bss
  174. .even
  175. _linsize:
  176.     .ds.w    1
  177. .end
  178.