home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / game / wb / Klotz.lha / Klotz / src / JoyUtilsLL.asm < prev    next >
Assembly Source File  |  1998-03-08  |  5KB  |  267 lines

  1. *
  2. *   $VER: JoyUtilsLL.asm 0.5 (16.1.97) Ende mit << >>
  3. *             0.4 (23.12.95)
  4. *             0.3 (24.8.95) Tastatur-Steuerung
  5. *             0.2 (5.8.95)
  6. *        LowLevel-support
  7. *  by __
  8. *    //_)
  9. *   //__) WARE (of mad programmer :-)
  10. JOYPORT equ 1
  11.  
  12.  include 'libraries/lowlevel.i'
  13. * include 'intuition/intuitionbase.i'
  14. *ib_ActiveWindow EQU 52
  15. CLEV macro
  16.     copy.l  LowLevelBase,a6
  17.     CALL    \1
  18.     endm
  19. GETTYPE macro
  20.     rol.l   #4,\1
  21.     and.w   #$f,\1
  22.     endm
  23.  
  24.  
  25. InitJoy
  26. * => d0 : 0 ok
  27.     lea     LowLevelName(pc),a1
  28.     moveq   #40,d0
  29.     CSYS    OpenLibrary
  30.     reloc.l d0,LowLevelBase
  31.     beq     nolllib
  32.     move.l  d0,a6
  33.     moveq   #JOYPORT,d0
  34.     CALL    ReadJoyPort
  35.     move.l  d0,d1
  36.     GETTYPE d1
  37.     beq     ExitJoy
  38.     moveq   #0,d0
  39.     rts
  40. ExitJoy
  41.     copy.l  LowLevelBase,a6
  42.     move.l  a6,a1
  43.     CSYS    CloseLibrary
  44. nolllib
  45.     moveq   #-1,d0
  46.     rts
  47.  
  48.  loc.b    StatusRed
  49.  loc.b    StatusBlue
  50.  loc.b    FirePressed
  51.  loc.b    PressedBlue
  52.  loc.w    Fire
  53.  
  54. TestFire
  55. *
  56.     push    a0-a2/a6/d1-d5
  57.     moveq   #JOYPORT,d0
  58.     CLEV    ReadJoyPort
  59.     move.l  #JPF_BUTTON_FORWARD|JPF_BUTTON_REVERSE|JPF_BUTTON_YELLOW,d1
  60.     move.l  d1,d2
  61.     and.l   d0,d1
  62.     cmp.l   d1,d2
  63.     bne.s   skip0
  64. quickexit
  65. * << und >> sind gedrückt -> Tschüß
  66.     move.l  #SIGBREAKF_CTRL_C,d0
  67.     copy.l  OwnTask,a1
  68.     CSYS    Signal
  69.     bra     l21
  70. skip0
  71.     moveq   #JPB_BUTTON_RED,d1
  72.     btst    d1,d0
  73.     sne     d4
  74.     moveq   #JPB_BUTTON_BLUE,d1
  75.     btst    d1,d0
  76.     sne     d5
  77.     moveq   #JPB_BUTTON_GREEN,d1
  78.     btst    d1,d0
  79.     beq.s   .skip1
  80.     or.b    #-1,d5
  81. .skip1
  82.     moveq   #JPB_BUTTON_PLAY,d1
  83.     btst    d1,d0
  84.     bne     .ispause
  85.     tst.l   ArgUseKeys(a4)
  86.     beq.s   .skipthis
  87. *   Pause nur mit aktiven Fenster durch Tastendruck zu verlassen
  88.     tst.b   IsSetup(a4)
  89.     bne.s   .weiter
  90.     tst.b   IsPause(a4)
  91.     beq.s   .weiter
  92. .weiter0
  93.     copy.l  IntBase,a0
  94.     move.l  ib_ActiveWindow(a0),a0
  95.     copy.l  CWindow,a1
  96.     cmpa.l  a1,a0
  97.     bne     .skipthis
  98. .weiter
  99.     CALL    GetKey
  100.     cmpi.b  #$45,d0     ; Ende mit ESC
  101.     beq.s   quickexit
  102.     cmp.b   KeyRotL(a4),d0
  103.     bne.s   .skip2
  104.     or.b    #-1,d4
  105. .skip2
  106.     cmp.b   KeyRotR(a4),d0
  107.     bne.s   .skip3
  108.     or.b    #-1,d5
  109. .skip3
  110.     cmp.b   KeyPause(a4),d0
  111.     bne.s   .skipthis
  112. .ispause
  113.     on.b    IsPause
  114.     bra     l21
  115. .skipthis
  116. .nopause
  117.     lea     StatusRed(a4),a2
  118.     moveq   #0,D2
  119. * 'Tschuldigung für den folgenden Spaghetti-Code
  120. *  ( in C sah' das (nicht) viel übersichtlicher aus)
  121. *
  122.     tst.b   D4
  123.     beq.s   l2
  124. l1
  125.     tst.b   0(a2)
  126.     bne.s   l5
  127. l4
  128.     st        0(a2)
  129.     moveq   #-1,D2
  130.     sf        2(a2)
  131.     bra.s   l6
  132. l5
  133.     tst.b   2(a2)
  134.     bne.s   l8
  135. l7
  136.     moveq   #-1,D2
  137. l8
  138. l9
  139. l6
  140.     bra     l3
  141. l2
  142.     sf        0(a2)
  143.     tst.b   D5
  144.     beq.s   l11
  145. l10
  146.     tst.b   1(a2)
  147.     bne.s   l14
  148. l13
  149.     st        1(a2)
  150.     moveq   #-1,D2
  151.     sf        2(a2)
  152.     bra.s   l15
  153. l14
  154.     tst.b   2(a2)
  155.     bne.s   l17
  156. l16
  157.     moveq   #-1,D2
  158. l17
  159. l18
  160. l15
  161.     bra.s   l12
  162. l11
  163.     sf        1(a2)
  164. l12
  165. l3
  166.     move.l  D2,D0
  167.     beq.s   l20
  168.     ext.w   d4
  169.     neg.b   d5
  170.     ext.w   d5
  171.     add.w   d4,d5
  172.     beq.s   l21
  173.     move.w  d5,4(a2)
  174. l20
  175.     pop     d1-d5/a0-a2/a6
  176.     rts
  177. l21
  178.     moveq   #0,d0
  179.     bra.s   l20
  180.  
  181. TestJoy
  182.     push    a0-a2/a6/d1-d4
  183.     moveq   #0,d4
  184.     moveq   #JOYPORT,d0
  185.     CLEV    ReadJoyPort
  186.     move.l  d0,d2
  187.     CALL    GetKey
  188.     move.w  d0,d3
  189.  
  190.     sf        d1
  191.     moveq   #0,d4
  192. .CheckLeft
  193.     moveq   #JPB_JOY_LEFT,d0
  194.     btst.l  d0,d2
  195.     bne.s   .isleft
  196.     tst.l   ArgUseKeys(a4)
  197.     beq.s   .CheckRight
  198.     cmp.b   KeyMovL(a4),d3         ; Cursor left
  199.     bne.s   .CheckRight
  200. .isleft
  201.     subq.w  #1,d4
  202.     bra.s   .CheckDown
  203. .CheckRight
  204.     moveq   #JPB_JOY_RIGHT,d0
  205.     btst.l  d0,d2
  206.     bne     .isright
  207.     tst.l   ArgUseKeys(a4)
  208.     beq.s   .CheckDown
  209.     cmp.b   KeyMovR(a4),d3         ; Cursor right
  210.     bne.s   .CheckDown
  211. .isright
  212.     st        d1
  213.     addq.w  #1,d4
  214. .CheckDown
  215.     tst.l   ArgUseKeys(a4)
  216.     beq.s   .skip
  217.     cmp.b   KeyMovD(a4),d3
  218.     bne.s   .skip
  219.     st        d3
  220.     bra.s   .cont
  221. .skip
  222.     moveq   #JPB_JOY_DOWN,d0
  223.     btst.l  d0,d2
  224.     sne     d3
  225. .cont
  226.     lea     DownStick(a4),a2
  227.     tst.b   d3
  228.     sne     (a2)
  229. .CheckEnd
  230.     tst.w   d4
  231.     beq.s   .TestQDrop
  232.     lea     QDrop(a4),a0
  233.     clr.b   (a0)
  234.     lea     StickX(a4),a1
  235.     cmp.w   (a1),d4
  236.     bne.s   .JoyHasChanged
  237. .JoyIsOld
  238.     moveq   #1,d0
  239.     bra.s   .JoyEnd
  240. .NothingHappened
  241.     moveq   #0,d0
  242. .JoyEnd
  243.     pop     a0-a2/a6/d1-d4
  244.     rts
  245. .TestQDrop
  246.     lea     DownStick(a4),a2
  247.     tst.b   (a2)
  248.     beq.s   .NothingHappened
  249.     lea     StickX(a4),a0
  250.     clr.w   (a0)
  251.     lea     QDrop(a4),a0
  252.     tst.b   (a0)
  253.     bne.s   .JoyIsOld
  254.     st        (a0)
  255.     moveq   #-1,d0
  256.     bra.s   .JoyEnd
  257. .JoyHasChanged
  258.     move.w  d4,(a1)
  259.     moveq   #-1,d0
  260.     bra.s     .JoyEnd
  261. * private data
  262.  loc.b DownStick  ; dc.b 0
  263. * public data
  264.  loc.b QDrop   ;dc.b 0
  265.  loc.w StickX  ;dc.w 0
  266.  
  267.