]> git.sur5r.net Git - cc65/blobdiff - libsrc/c64/joy/c64-hitjoy.s
tweak driver to no more use IRQ
[cc65] / libsrc / c64 / joy / c64-hitjoy.s
index 28495ee117d0ec2b4d081714b045209e19c848d6..3b4a0b9092cde9fbebac4b8c8bda830e7aedab56 100644 (file)
         .include "c64.inc"
 
         .macpack generic
+        .macpack module
+
 
 ; ------------------------------------------------------------------------
 ; Header. Includes jump table
 
-        .segment "JUMPTABLE"
+        module_header   _c64_hitjoy_joy
 
 ; Driver signature
 
 
         .addr   $0000
 
-; Button state masks (8 values)
-
-        .byte   $01                     ; JOY_UP
-        .byte   $02                     ; JOY_DOWN
-        .byte   $04                     ; JOY_LEFT
-        .byte   $08                     ; JOY_RIGHT
-        .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; JOY_FIRE2 unavailable
-        .byte   $00                     ; Future expansion
-        .byte   $00                     ; Future expansion
-
 ; Jump table.
 
         .addr   INSTALL
         .addr   UNINSTALL
         .addr   COUNT
         .addr   READ
-        .addr   IRQ
 
 ; ------------------------------------------------------------------------
 ; Constants
@@ -83,13 +73,22 @@ UNINSTALL:
         rts
 
 ; ------------------------------------------------------------------------
-; IRQ entry point. Is called from the C layer as a subroutine in the
-; interrupt. The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
+; COUNT: Return the total number of available joysticks in a/x.
+;
 
-IRQ:    ; cia 2 setup
+COUNT:  lda     #<JOY_COUNT
+        ldx     #>JOY_COUNT
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+readadapter:
+
+        sei
 
+        ; cia 2 setup
         ldy     #$00            ; port b direction
         sty     $dd03           ; => input
 
@@ -153,32 +152,24 @@ IRQ:    ; cia 2 setup
         sta     temp4
 
 fire:
-        ; Default Value: $40/64 on PAL
-        ;                    $42/66 on NTSC
+        ; FIXME: to be really 100% correct this should restore the correct timer
+        ;        values for the respective machine (PAL: $4025, NTSC: $4295)
+        ;        however, this should hardly be a problem in a real world program
+
         lda     #$41
         sta     $dc05
-        ; Default Value: $25/37 on PAL
-        ;                    $95/149 on NTSC
         lda     #0
         sta     $dc04
 
-        ; We do never "handle" the interrupt, we use it just as a timer.
-        clc
-        rts
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:  lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
+        cli
         rts
 
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
+READ:
+        pha
+        jsr readadapter
+        pla
 
-READ:   tax            ; Joystick number into X
+        tax            ; Joystick number into X
         bne joy2
 
 ; Read joystick 1
@@ -224,4 +215,3 @@ joy4:   lda     temp4
         eor     #$1F
         ldx     #0
         rts
-