home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / game / wb / Klotz.lha / Klotz / src / JoyUtils.asm < prev    next >
Assembly Source File  |  1998-02-18  |  4KB  |  224 lines

  1. *
  2. *    $VER: JoyUtils.asm 0.11 (21.10.93)
  3. *            0.10 (8.10.93)
  4. *            0.8 (7.9.93) (Mehr als nen Monat nix dran getan)
  5. *
  6.  
  7. TestFire
  8. *
  9. *   Feuerknopfabfrage
  10. *
  11. *   =>    d0  : fire = -1
  12.     push    a0-a2/d1-d5
  13.  
  14.     lea     $dff000,a0    ; Customchips für 2. Feuerknopf
  15.     lea     $bfe001,a1    ; CIA          für 1.      "
  16.  
  17.     lea     FireStatus(a4),a2
  18. *   0(a2)   B vorher
  19. *   1(a2)   C vorher
  20. *   2(a2)   Signal reached main
  21. *   4(a2).w Feuer: B 1, C -1
  22.  
  23.     btst.b  #7,(a1)
  24.     seq     d4        ; Feuerknopf 1 gedrückt
  25.     move.w  $16(a0),d1
  26.     moveq   #14,d0
  27.     btst    d0,d1
  28.     seq     d5        ; Feuerknopf 2 gedrückt
  29. ; Tastenabfrage (2.4.96)
  30.     tst.l   ArgUseKeys(a4)
  31.     beq     .skipthis
  32. ;*   Pause nur mit aktiven Fenster durch Tastendruck zu verlassen
  33. ;    tst.b   IsSetup(a4)
  34. ;    bne     .weiter
  35. ;    tst.b   IsPause(a4)
  36. ;    beq     .weiter
  37. ;.weiter0
  38. ;    copy.l  IntBase,a0
  39. ;    move.l  ib_ActiveWindow(a0),a0
  40. ;    copy.l  CWindow,a1
  41. ;    cmpa.l  a1,a0
  42. ;    bne     .skipthis
  43. .weiter
  44.     move.b  $c00(a1),d0          ; Keycode
  45.     ror.b   #1,d0
  46.     not.b   d0
  47.     reloc.b d0,CKey
  48. ;    copy.b  CKey,d0
  49.  
  50.     cmp.b   KeyRotL(a4),d0
  51.     bne     .skip2
  52.     or.b    #-1,d4
  53. .skip2
  54.     cmp.b   KeyRotR(a4),d0
  55.     bne     .skip3
  56.     or.b    #-1,d5
  57. .skip3
  58. * no pause support
  59. ;    cmp.b   KeyPause(a4),d0
  60. ;    bne     .skipthis
  61. ;.ispause
  62. ;    on.b    IsPause
  63. ;    bra     l21
  64. .skipthis
  65.  
  66.     moveq   #0,D2
  67. * 'Tschuldigung für den folgenden Spaghetti-Code
  68. *  ( in C sah' das (nicht) viel übersichtlicher aus)
  69. *
  70.     tst.b   D4
  71.     beq     l2
  72. l1
  73.     tst.b   0(a2)
  74.     bne     l5
  75. l4
  76.     st        0(a2)
  77.     moveq   #-1,D2
  78.     sf        2(a2)
  79.     bra     l6
  80. l5
  81.     tst.b   2(a2)
  82.     bne     l8
  83. l7
  84.     moveq   #-1,D2
  85. l8
  86. l9
  87. l6
  88.     bra     l3
  89. l2
  90.     sf        0(a2)
  91.     tst.b   D5
  92.     beq     l11
  93. l10
  94.     tst.b   1(a2)
  95.     bne     l14
  96. l13
  97.     st        1(a2)
  98.     moveq   #-1,D2
  99.     sf        2(a2)
  100.     bra     l15
  101. l14
  102.     tst.b   2(a2)
  103.     bne     l17
  104. l16
  105.     moveq   #-1,D2
  106. l17
  107. l18
  108. l15
  109.     bra     l12
  110. l11
  111.     sf        1(a2)
  112. l12
  113. l3
  114.     move.l  D2,D0
  115.     beq     l20
  116.     ext.w   d4
  117.     neg.b   d5
  118.     ext.w   d5
  119.     add.w   d4,d5
  120.     beq     l21
  121.     move.w  d5,4(a2)
  122. l20
  123.     pop     d1-d5/a0-a2
  124.     rts
  125. l21
  126.     moveq   #0,d0
  127.     bra     l20
  128.  loc.w FireStatus
  129. *    dc.b    0,0
  130.  loc.w FirePressed
  131. *    dc.b    0,0
  132.  loc.w Fire
  133. *    dc.w    0
  134. *    cnop    0,4
  135. TestJoy
  136. *
  137. * Routine wird vom Interrupt aufgerufen
  138. *
  139. *   =>    d0 : keine Bewegung=0 joy bewegt=-1 joy noch immer bewegt=1
  140. *
  141.     push    a0-a2/d1-d4
  142.     sf        d1
  143.     moveq   #0,d4
  144.     lea     $dff000,a0
  145. ;    move.b  $bfec01,d3  ; Keycode
  146. ;    ror.b   #1,d3
  147. ;    not.b   d3
  148.     copy.b  CKey,d3
  149. ;    on.b    CKey      ;  auf $ff setzen
  150. .CheckLeft
  151.     move.w  $C(a0),d2
  152.     btst    #9,d2
  153.     bne     .isleft
  154.     tst.l   ArgUseKeys(a4)
  155.     beq     .CheckRight
  156.     cmp.b   KeyMovL(a4),d3         ; Cursor left
  157.     bne     .CheckRight
  158. .isleft
  159.     subq.w  #1,d4
  160.     bra     .CheckDown
  161. .CheckRight
  162.     btst    #1,d2
  163.     bne     .isright
  164.     tst.l   ArgUseKeys(a4)
  165.     beq     .CheckDown
  166.     cmp.b   KeyMovR(a4),d3         ; Cursor right
  167.     bne     .CheckDown
  168. .isright
  169.     st        d1
  170.     addq.w  #1,d4
  171. .CheckDown
  172.     tst.l   ArgUseKeys(a4)
  173.     beq     .skip
  174.     cmp.b   KeyMovD(a4),d3
  175.     bne     .skip
  176.     st        d3
  177.     bra     .cont
  178. .skip
  179.     btst    #0,d2
  180.     sne     d3
  181.     eor.b   d1,d3
  182. .cont
  183.     lea     DownStick(a4),a2
  184.     tst.b   d3
  185.     sne     (a2)
  186. .CheckEnd
  187.     tst.w   d4
  188.     beq     .TestQDrop
  189.     lea     QDrop(a4),a0
  190.     clr.b   (a0)
  191.     lea     StickX(a4),a1
  192.     cmp.w   (a1),d4
  193.     bne     .JoyHasChanged
  194. .JoyIsOld
  195.     moveq   #1,d0
  196.     bra     .JoyEnd
  197. .NothingHappened
  198.     moveq   #0,d0
  199. .JoyEnd
  200.     pop     a0-a2/d1-d4
  201.     rts
  202. .TestQDrop
  203.     lea     DownStick(a4),a2
  204.     tst.b   (a2)
  205.     beq     .NothingHappened
  206.     lea     StickX(a4),a0
  207.     clr.w   (a0)
  208.     lea     QDrop(a4),a0
  209.     tst.b   (a0)
  210.     bne     .JoyIsOld
  211.     st        (a0)
  212.     moveq   #-1,d0
  213.     bra     .JoyEnd
  214. .JoyHasChanged
  215.     move.w  d4,(a1)
  216.     moveq   #-1,d0
  217.     bra     .JoyEnd
  218. * private data
  219.  loc.b DownStick  ; dc.b 0
  220. * public data
  221.  loc.b QDrop   ;dc.b 0
  222.  loc.w StickX  ;dc.w 0
  223.  
  224.