From: cuz Date: Sat, 6 Nov 2004 13:27:38 +0000 (+0000) Subject: Add the irq entry point X-Git-Tag: V2.12.0~555 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=dc781be7f91b5ce6bdec5d068a2265fb540a6665;p=cc65 Add the irq entry point git-svn-id: svn://svn.cc65.org/cc65/trunk@3280 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/c64/c64-hitjoy.s b/libsrc/c64/c64-hitjoy.s index 72e2ff13d..028d480fe 100755 --- a/libsrc/c64/c64-hitjoy.s +++ b/libsrc/c64/c64-hitjoy.s @@ -30,16 +30,17 @@ .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 $0315 - cli - lda #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 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 diff --git a/libsrc/c64/c64-numpad.s b/libsrc/c64/c64-numpad.s index 9d8df253a..a224be57a 100644 --- a/libsrc/c64/c64-numpad.s +++ b/libsrc/c64/c64-numpad.s @@ -32,16 +32,17 @@ .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 diff --git a/libsrc/c64/c64-ptvjoy.s b/libsrc/c64/c64-ptvjoy.s index 60950ff59..e7db810f1 100755 --- a/libsrc/c64/c64-ptvjoy.s +++ b/libsrc/c64/c64-ptvjoy.s @@ -30,16 +30,17 @@ .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 diff --git a/libsrc/cbm510/cbm510-stdjoy.s b/libsrc/cbm510/cbm510-stdjoy.s index 82962c35d..5b7ec56a2 100644 --- a/libsrc/cbm510/cbm510-stdjoy.s +++ b/libsrc/cbm510/cbm510-stdjoy.s @@ -12,7 +12,7 @@ .include "joy-error.inc" .include "cbm510.inc" .include "extzp.inc" - + .macpack generic @@ -33,16 +33,17 @@ .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 diff --git a/libsrc/nes/nes-stdjoy.s b/libsrc/nes/nes-stdjoy.s index 3803c95f8..21ca7cfb6 100644 --- a/libsrc/nes/nes-stdjoy.s +++ b/libsrc/nes/nes-stdjoy.s @@ -36,10 +36,11 @@ ; Jump table. - .word INSTALL - .word UNINSTALL - .word COUNT - .word READJOY + .addr INSTALL + .addr UNINSTALL + .addr COUNT + .addr READJOY + .addr 0 ; IRQ entry unused ; ------------------------------------------------------------------------ ; Constants diff --git a/libsrc/plus4/plus4-stdjoy.s b/libsrc/plus4/plus4-stdjoy.s index 45282bbda..4fe269a03 100644 --- a/libsrc/plus4/plus4-stdjoy.s +++ b/libsrc/plus4/plus4-stdjoy.s @@ -31,16 +31,17 @@ .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 diff --git a/libsrc/vic20/vic20-stdjoy.s b/libsrc/vic20/vic20-stdjoy.s index 80d51d136..e352950cf 100644 --- a/libsrc/vic20/vic20-stdjoy.s +++ b/libsrc/vic20/vic20-stdjoy.s @@ -32,16 +32,17 @@ .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