]> git.sur5r.net Git - cc65/commitdiff
Add the irq entry point
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 6 Nov 2004 13:27:38 +0000 (13:27 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 6 Nov 2004 13:27:38 +0000 (13:27 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3280 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c64/c64-hitjoy.s
libsrc/c64/c64-numpad.s
libsrc/c64/c64-ptvjoy.s
libsrc/cbm510/cbm510-stdjoy.s
libsrc/nes/nes-stdjoy.s
libsrc/plus4/plus4-stdjoy.s
libsrc/vic20/vic20-stdjoy.s

index 72e2ff13d672511db0a24525fc3e6a86f9c977fe..028d480fe551b50781383d2c7c7d4a1be4b610f5 100755 (executable)
         .byte   $04                     ; JOY_LEFT
         .byte   $08                     ; JOY_RIGHT
         .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
+        .byte   $00                     ; JOY_FIRE2 unavailable
         .byte   $00                     ; Future expansion
         .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-        .word   INSTALL
-        .word   DEINSTALL
-        .word   COUNT
-        .word   READ
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READ
+        .addr   IRQ
 
 ; ------------------------------------------------------------------------
 ; Constants
@@ -64,124 +65,104 @@ temp4:    .byte 0
 ;
 
 INSTALL:
-        sei
-        lda $0314
-        sta irqjmp+1
-        lda $0315
-        sta irqjmp+2
-        lda #<pollirq
-        sta $0314
-        lda #>pollirq
-        sta $0315
-        cli
-
         lda     #<JOY_ERR_OK
         ldx     #>JOY_ERR_OK
 
-        rts
+;       rts             ; Run into UNINSTALL instead
 
 ; ------------------------------------------------------------------------
-; DEINSTALL routine. Is called before the driver is removed from memory.
+; UNINSTALL routine. Is called before the driver is removed from memory.
 ; Can do cleanup or whatever. Must not return anything.
 ;
 
-DEINSTALL:
-        sei
-        lda irqjmp+1
-        sta $0314
-        lda irqjmp+2
-        sta $0315
-        cli
+UNINSTALL:
         rts
 
 ; ------------------------------------------------------------------------
-; we must use an irq here since we need timers
-; which otherwhise would conflict with system-irq
-pollirq:
-         ; cia 2 setup
-
-         ldy #$00  ; port b direction
-         sty $dd03 ; => input
-
-         sty $dd05 ; cia2 timer a highbyte
-         sty $dc05 ; cia1 timer a highbyte
-         iny
-         sty $dd04 ; cia2 timer a lowbyte
-         sty $dc04 ; cia1 timer a lowbyte
-
-         lda #%00010001
-         sta $dd0e ; control register a
-                   ; timer: start
-                   ;        continous
-                   ;        forced load
-                   ; serial port: input
-
-         ; cia 1 setup
-         lda #%01010001
-         sta $dc0e ; control register a
-                   ; timer: start
-                   ;        continous
-                   ;        forced load
-                   ; serial port: output
-
-
-         ; read directions 3
-         lda $dd01 ;read cia 2 port b
-         and #$0f
-         sta temp3
-
-         ; read button 3
-         lda $dd02      ;cia 2 port a
-         and #%11111011 ;data direction
-         sta $dd02      ;=> bit 2 input
-
-         lda $dd00      ;read cia 2 p.A
-         and #%00000100 ;check bit 2
-         asl a
-         asl a
-         ora temp3
-         sta temp3
-
-         ; read directions 4
-         lda $dd01 ;read cia 2 port b
-         lsr a
-         lsr a
-         lsr a
-         lsr a
-         sta temp4
-
-         ; read button 4
-         ldx #$ff ;serial data register
-         stx $dc0c;=> writing $ff causes
-                  ;cia to output some
-                  ;count signals at cnt1
-
-         ldx $dd0c ;read cia 2 serial in
-         beq fire  ;button press if zero
-
-         lda temp4
-         ora #%00010000
-         sta temp4
+; IRQ entry point. Is called from the C layer as a subroutine in the 
+; interrupt.
+
+IRQ:    ; cia 2 setup
+
+        ldy     #$00            ; port b direction
+        sty     $dd03           ; => input
+
+        sty     $dd05           ; cia2 timer a highbyte
+        sty     $dc05           ; cia1 timer a highbyte
+        iny
+        sty     $dd04           ; cia2 timer a lowbyte
+        sty     $dc04           ; cia1 timer a lowbyte
+
+        lda     #%00010001
+        sta     $dd0e           ; control register a
+                                ; timer: start
+                                ;        continous
+                                ;        forced load
+                                ; serial port: input
+
+        ; cia 1 setup
+        lda     #%01010001
+        sta     $dc0e           ; control register a
+                                ; timer: start
+                                ;        continous
+                                ;        forced load
+                                ; serial port: output
+
+        ; read directions 3
+        lda     $dd01           ;read cia 2 port b
+        and     #$0f
+        sta     temp3
+
+        ; read button 3
+        lda     $dd02           ;cia 2 port a
+        and     #%11111011      ;data direction
+        sta     $dd02           ;=> bit 2 input
+
+        lda     $dd00           ;read cia 2 p.A
+        and     #%00000100      ;check bit 2
+        asl     a
+        asl     a
+        ora     temp3
+        sta     temp3
+
+        ; read directions 4
+        lda     $dd01           ;read cia 2 port b
+        lsr     a
+        lsr     a
+        lsr     a
+        lsr     a
+        sta     temp4
+
+        ; read button 4
+        ldx     #$ff            ;serial data register
+        stx     $dc0c           ;=> writing $ff causes
+                                ;cia to output some
+                                ;count signals at cnt1
+
+        ldx     $dd0c           ;read cia 2 serial in
+        beq     fire            ;button press if zero
+
+        lda     temp4
+        ora     #%00010000
+        sta     temp4
 
 fire:
+        ; Default Value: $40/64 on PAL
+        ;                    $42/66 on NTSC
+        lda     #$41
+        sta     $dc05
+        ; Default Value: $25/37 on PAL
+        ;                    $95/149 on NTSC
+        lda     #0
+        sta     $dc04
 
-         ; Default Value: $40/64 on PAL
-         ;                $42/66 on NTSC
-         lda #$41
-         sta $dc05
-         ; Default Value: $25/37 on PAL
-         ;                $95/149 on NTSC
-         lda #0
-         sta $dc04
-
-irqjmp:  jmp $dead
+        rts
 
 ; ------------------------------------------------------------------------
 ; COUNT: Return the total number of available joysticks in a/x.
 ;
 
-COUNT:
-        lda     #<JOY_COUNT
+COUNT:  lda     #<JOY_COUNT
         ldx     #>JOY_COUNT
         rts
 
@@ -189,13 +170,12 @@ COUNT:
 ; READ: Read a particular joystick passed in A.
 ;
 
-READ:
-        tax            ; Joystick number into X
+READ:   tax            ; Joystick number into X
         bne joy2
 
-         ; Read joystick 1
-joy1:
-        lda #$7F
+; Read joystick 1
+
+joy1:   lda #$7F
         sei
         sta CIA1_PRA
         lda CIA1_PRB
@@ -204,9 +184,9 @@ joy1:
         eor #$1F
         rts
 
-        ; Read joystick 2
-joy2:
-        dex
+; Read joystick 2
+
+joy2:   dex
         bne joy3
 
         ; ldx  #0
@@ -223,20 +203,17 @@ joy2:
 
         ; Read joystick 3
 
-joy3:
-        dex
-        bne joy4
+joy3:   dex
+        bne     joy4
 
-        lda temp3
+        lda     temp3
         eor    #$1F
-        ldx #0
         rts
 
         ; Read joystick 4
 
-joy4:
-        lda temp4
+joy4:   lda     temp4
         eor    #$1F
-        ldx #0
+        ldx     #0
         rts
 
index 9d8df253a13da2ea999d59bc7d9e773f9977a92e..a224be57a859e913013f7e265b8a44122a185236 100644 (file)
        .byte   $20                     ; JOY_LEFT      "4"
        .byte   $08                     ; JOY_RIGHT     "6"
        .byte   $04                     ; JOY_FIRE      "5" ENTER
-       .byte   $00                     ; Future expansion
+       .byte   $00                     ; JOY_FIRE2 unavailable
        .byte   $00                     ; Future expansion
        .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-       .word   INSTALL
-       .word   UNINSTALL
-       .word   COUNT
-       .word   READ
+               .addr   INSTALL
+               .addr   UNINSTALL
+               .addr   COUNT
+               .addr   READ
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
@@ -63,13 +64,12 @@ JOY_COUNT   = 1             ; Number of joysticks we support
 ;
 
 INSTALL:
-       lda     VIC_CLK_128
-       cmp     #$FF
-       bne     @C128
-       lda     #JOY_ERR_NO_DEVICE
-       .byte   $2C
-@C128: lda     #JOY_ERR_OK
-       ldx     #0
+        lda     #JOY_ERR_OK             ; Assume we have a joystick
+        ldx     VIC_CLK_128             ; Test for a C128
+        cpx     #$FF
+        bne     @C128                   ; Jump if we have one
+        lda     #JOY_ERR_NO_DEVICE      ; No C128 -> no numpad
+@C128:  ldx     #0                      ; Set high byte
 
 ;      rts                     ; Run into UNINSTALL instead
 
index 60950ff5920ebc47e675e04d16c98faef2bfcb17..e7db810f1d2cf1033dd24560572645e55b7b72de 100755 (executable)
         .byte   $04                     ; JOY_LEFT
         .byte   $08                     ; JOY_RIGHT
         .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
+        .byte   $00                     ; JOY_FIRE2 unavailable
         .byte   $00                     ; Future expansion
         .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   COUNT
-        .word   READ
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READ
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
index 82962c35d19d053ec488b8d6c72efb156ce040cf..5b7ec56a21192578f716ca66329ad83caebfb814 100644 (file)
@@ -12,7 +12,7 @@
         .include        "joy-error.inc"
         .include        "cbm510.inc"
         .include        "extzp.inc"
-                                   
+
         .macpack        generic
 
 
         .byte   $04                     ; JOY_LEFT
         .byte   $08                     ; JOY_RIGHT
         .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
+        .byte   $00                     ; JOY_FIRE2 unavailable
         .byte   $00                     ; Future expansion
         .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   COUNT
-        .word   READ
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READ
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
index 3803c95f830e6af345eff431358577bed27a1661..21ca7cfb629ba4a4a3e94f9e0d518d1193b8b32e 100644 (file)
 
 ; Jump table.
 
-       .word   INSTALL
-       .word   UNINSTALL
-       .word   COUNT
-       .word   READJOY
+               .addr   INSTALL
+               .addr   UNINSTALL
+               .addr   COUNT
+               .addr   READJOY
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
index 45282bbda059ae8ede821dc25e5399050272313a..4fe269a03dcbe9acea8d35605a3d05e4ace08e38 100644 (file)
         .byte   $04                     ; JOY_LEFT
         .byte   $08                     ; JOY_RIGHT
         .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
+        .byte   $00                     ; JOY_FIRE2 unavailable
         .byte   $00                     ; Future expansion
         .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   COUNT
-        .word   READ
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READ
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants
index 80d51d13601aa5e98a5cf047af968cced3a07245..e352950cf37e3de3ad58dc9f95259bba81138afb 100644 (file)
         .byte   $08                     ; JOY_LEFT
         .byte   $80                     ; JOY_RIGHT
         .byte   $10                     ; JOY_FIRE
-        .byte   $00                     ; Future expansion
+        .byte   $00                     ; JOY_FIRE2 unavailable
         .byte   $00                     ; Future expansion
         .byte   $00                     ; Future expansion
 
 ; Jump table.
 
-        .word   INSTALL
-        .word   UNINSTALL
-        .word   COUNT
-        .word   READ
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READ
+        .addr   0                       ; IRQ entry unused
 
 ; ------------------------------------------------------------------------
 ; Constants