home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / wsrv / wsrvasm.s < prev    next >
Text File  |  1996-01-13  |  4KB  |  237 lines

  1. * for 030 1993 Ko, Taka2
  2.  
  3.             .text                            *.data    1991 COR.
  4.  
  5. _ShellProcessPSP        .ds.l    1
  6. _SuperSP                .ds.l    1
  7.  
  8. *    èäéΦì₧é▌âGâôâgâè Trap #0 âGâôâgâè
  9. *
  10. *    d0 : âvâìâZâXéhéc
  11. *    d1 : âtâ@âôâNâVâçâôö╘ìå
  12. *    a0 : âpâëâüü[â^âAâhâîâX    (î┬Éö,ê°Éö1,ê°Éö2 ... )
  13.  
  14.         .xdef    _IntEntry
  15.         .xdef    _IntEntry030
  16. _IntEntry:
  17. _IntEntry030:
  18. * for 030 read sr        1993 Ko, Taka2
  19.         cmp.w    #$101,d0
  20.         bne        SKIPISU
  21.     SRRET:
  22.         move.w    (sp),d0
  23.         rte
  24.     SKIPISU:
  25.         move.w    (sp)+,d2
  26.         move.l    (sp)+,a1
  27.         addq.l    #2,sp                * patch for X680x0
  28.     .if X30.eq.0
  29.         bra        SKIPADD
  30.  
  31.         .xdef    _IntEntry000
  32. _IntEntry000:
  33.         cmp.w    #$101,d0
  34.         beq        SRRET
  35.         move.w    (sp)+,d2
  36.         move.l    (sp)+,a1
  37.  
  38.                         .if 0
  39. * for 030 adjust sp        1993 Ko, Taka2
  40.                             .if X30.eq.0
  41.                                 tst.b    $cbc.w            * is030 1994 COR.
  42.                                 beq        SKIPADD
  43.                             .endif
  44.                                 addq.l    #2,sp            * patch for X680x0
  45.                         .endif
  46.     .endif
  47.     SKIPADD:
  48.  
  49.         move.w    d2,sr
  50.         move.l    a1,-(sp)
  51.  
  52.         cmp.w    #$100,d0
  53.         beq        _EventWait            * éαé╡ô═é⌐é╚é¡é╚é┴é╜éτë║é╠2ìsé╔û▀é╖
  54. *        bne        SKIP0
  55. *        jmp        _EventWait
  56. ********* ê°Éöé═ÄQÅ╞é╡é─éóé╚é⌐é┴é╜é╠é┼üAé╜é╛é╠âWâââôâvé╔é╡é╜ COR.
  57. *        clr.l    -(sp)
  58. *        jsr        _EventWait
  59. *        addq.l    #4,sp
  60. *        rts
  61.  
  62.     SKIP0:
  63.         cmp.l    _StackTop,sp
  64.         bgt        SKIP1
  65.         cmp.l    __PSP,sp
  66.         blt        SKIP1
  67.         pea        STACKOVER(pc)        *    move.l    #STACKOVER,-(sp)
  68.         move.l    _WindowError,a0
  69.         jsr        (a0)
  70.  
  71.     SKIP1:
  72.         move.l    a0,-(sp)
  73.         move.l    d1,-(sp)
  74.         move.l    d0,-(sp)
  75.         bsr        _GetRequest
  76.         lea.l    12(sp),sp
  77.         rts
  78.  
  79.     STACKOVER:
  80.         .dc.b    'âXâ^âbâNâIü[âoü[âtâìü[',0
  81.         .even
  82.  
  83. *    âNâëâCâAâôâgî─é╤Åoé╡
  84. *
  85. *    d0 : Ä└ìsâAâhâîâX
  86. *    d1 : âEâCâôâhâEâ|âCâôâ^(wp)
  87. *    a0 : âCâxâôâgÅεò±(info)
  88.  
  89.         .text
  90.         .xdef    __CallClient
  91. __CallClient
  92.  
  93.         move.l    4(sp),a1        * 12
  94.         movem.l    8(sp),d0-d1/a0    * 12+4x3=24 +12=36
  95.         jmp        (a1)            * 8            = 44
  96.  
  97. *        move.l    4(sp),a1
  98. *        move.l    8(sp),d0
  99. *        move.l    12(sp),d1
  100. *        move.l    16(sp),a0        * 12x4= 48
  101. *        jsr        (a1)            * 16
  102. *        rts                        * 16        = 80
  103.  
  104.  
  105. *
  106. *    âCâxâôâgæ╥é┐âïü[âv
  107. *
  108. SP_DOSCALL    equ    0
  109.         .text
  110.         .xdef    _EventWaitLoop
  111. _EventWaitLoop
  112.         .if SP_DOSCALL
  113.             clr.l    -(sp)
  114.             dc.w    $ff20            * SUPER
  115.             move.l    d0,_SuperSP
  116.             move.l    d0,-(sp)
  117.             dc.w    $ff20            * SUPER
  118.             move.l    __SEND,sp
  119.         .else
  120.             clr.l    a1
  121.             moveq.l    #$81,d0            * B_SUPER
  122.             trap    #15
  123.             move.l    d0,_SuperSP
  124.             move.l    d0,a1
  125.             moveq.l    #$81,d0
  126.             trap    #15
  127.             move.l    __SEND,sp
  128.         .endif
  129. Loop1
  130.         bsr        _TopLevelExec
  131.         bsr        _EventWait
  132.         bra        Loop1
  133.  
  134. *        clr.l    -(sp)
  135. *        bsr        _EventWait
  136. *        addq.l    #4,sp
  137. *        bra        Loop1
  138.  
  139.  
  140. *
  141. *    âgâbâvâîâxâïé╔û▀éΘ
  142. *
  143. * Modified 1995 COR.
  144. *
  145.         .text
  146.  
  147.         .xdef    _GotoTopLevel
  148.         .xdef    _OSQuit
  149.  
  150.         .xref    _DefaultAbortEntry
  151.         .xref    _InChildFlag
  152.  
  153. _GotoTopLevel:
  154.         tst.l    _InChildFlag
  155.         beq        WinAbort
  156.         move.l    _DefaultAbortEntry,-(sp)
  157.         rts
  158.  
  159. WinAbort:
  160.         dc.w    $ff51        *GETPDB
  161.         cmp.l    __PSP,d0
  162.         beq        TopLevel
  163.  
  164. _OSQuit:
  165.         moveq.l    #$FD,d0
  166.         trap    #15
  167.         moveq.l    #$FF,d0
  168.         trap    #15
  169.  
  170. TopLevel
  171.         clr.l    -(sp)
  172.         dc.w    $ff20        * SUPER
  173.         move.l    _SuperSP(pc),sp
  174.         move.w    #0,SR
  175.         move.l    __SEND,sp
  176.         bsr        _EventStackClear
  177.         bra        Loop1
  178.  
  179. *
  180. *    è╓Éöî─é╤Åoé╡ (îïï╟é▄é╜ GetRequest é⌐éτî─é╤Åoé│éΩéΘ)
  181. *
  182. *    old static    int        CallFunction( flag, func, id, count, arg )
  183. *    new static    int        CallFunction( args(flag), arg, func, id )
  184. *
  185. * 1992 10/6 H.Ogasawara (COR.)
  186. * 1995 12/20 COR.
  187.     .xdef    _CallFunction
  188. _CallFunction:
  189.  
  190.     link    a6,#0
  191.     movem.l    8(a6),d2/a0-a2
  192.     move.l    (a0)+,d0            * args
  193.  
  194. .if X30
  195.         beq        no_copy
  196.         lea.l    (a0,d0.l*4),a0
  197.         subq.l    #1,d0
  198.     arg_copy_loop:
  199.         move.l    -(a0),-(sp)
  200.         dbra    d0,arg_copy_loop
  201.     no_copy:
  202.  
  203. .else
  204.         add.w    d0,d0            * x2
  205.         move.w    d0,d1
  206.         add.w    d1,d1            * x4
  207.         add.w    d1,a0            * +x4
  208.         neg.w    d0
  209.         jmp        _PushTblLast(pc,d0.w)
  210.  
  211.         move.l    -(a0),-(sp)        * MAX args = 12
  212.         move.l    -(a0),-(sp)
  213.         move.l    -(a0),-(sp)
  214.         move.l    -(a0),-(sp)
  215.         move.l    -(a0),-(sp)
  216.         move.l    -(a0),-(sp)
  217.         move.l    -(a0),-(sp)
  218.         move.l    -(a0),-(sp)
  219.         move.l    -(a0),-(sp)
  220.         move.l    -(a0),-(sp)
  221.         move.l    -(a0),-(sp)
  222.         move.l    -(a0),-(sp)
  223.     _PushTblLast:
  224.  
  225. .endif
  226.  
  227.     tst.b    d2
  228.     beq        SKIP2
  229.     move.l    a2,-(sp)
  230. SKIP2:
  231.  
  232.     jsr        (a1)
  233.     unlk    a6
  234.     rts
  235.  
  236. *:vi:se ts=4 sw=4:
  237.