1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-10 19:29:45 +00:00

Added code that disables C128 BASIC's sprite-motion interrupt-handler.

That lets the mouse drivers control a sprite directly through the VIC's registers.
This commit is contained in:
Greg King 2014-03-15 16:29:13 -04:00
parent e227a07c8f
commit e335d2564d
3 changed files with 54 additions and 9 deletions

View File

@ -2,7 +2,8 @@
; Driver for the 1351 proportional mouse. Parts of the code are from ; Driver for the 1351 proportional mouse. Parts of the code are from
; the Commodore 1351 mouse users guide. ; the Commodore 1351 mouse users guide.
; ;
; Ullrich von Bassewitz, 2003-12-29, 2009-09-26 ; 2009-09-26, Ullrich von Bassewitz
; 2014-03-15, Greg King
; ;
.include "zeropage.inc" .include "zeropage.inc"
@ -83,6 +84,8 @@ YMax: .res 2 ; Y2 value of bounding box
OldValue: .res 1 ; Temp for MoveCheck routine OldValue: .res 1 ; Temp for MoveCheck routine
NewValue: .res 1 ; Temp for MoveCheck routine NewValue: .res 1 ; Temp for MoveCheck routine
INIT_save: .res 1
.rodata .rodata
; Default values for above variables ; Default values for above variables
@ -107,6 +110,14 @@ NewValue: .res 1 ; Temp for MoveCheck routine
INSTALL: INSTALL:
; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
; That allows direct access to the VIC-IIe's sprite registers.
lda INIT_STATUS
sta INIT_save
lda #%11000000
sta INIT_STATUS
; Initialize variables. Just copy the default stuff over ; Initialize variables. Just copy the default stuff over
ldx #.sizeof(DefVars)-1 ldx #.sizeof(DefVars)-1
@ -133,13 +144,17 @@ INSTALL:
ldx #$00 ldx #$00
txa txa
rts ; Run into UNINSTALL instead rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
; UNINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; No return code required (the driver is removed from memory on return). ; No return code required (the driver is removed from memory on return).
UNINSTALL = HIDE ; Hide cursor on exit UNINSTALL:
jsr HIDE ; Hide cursor on exit
lda INIT_save
sta INIT_STATUS
rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages ; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages

View File

@ -1,7 +1,8 @@
; ;
; Driver for a "joystick mouse". ; Driver for a "joystick mouse".
; ;
; Ullrich von Bassewitz, 2004-04-05, 2009-09-26 ; 2009-09-26, Ullrich von Bassewitz
; 2014-03-15, Greg King
; ;
.include "zeropage.inc" .include "zeropage.inc"
@ -85,6 +86,8 @@ XMax: .res 2 ; X2 value of bounding box
YMax: .res 2 ; Y2 value of bounding box YMax: .res 2 ; Y2 value of bounding box
Buttons: .res 1 ; Button mask Buttons: .res 1 ; Button mask
INIT_save: .res 1
; Temporary value used in the int handler ; Temporary value used in the int handler
Temp: .res 1 Temp: .res 1
@ -113,6 +116,14 @@ Temp: .res 1
INSTALL: INSTALL:
; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
; That allows direct access to the VIC-IIe's sprite registers.
lda INIT_STATUS
sta INIT_save
lda #%11000000
sta INIT_STATUS
; Initialize variables. Just copy the default stuff over ; Initialize variables. Just copy the default stuff over
ldx #.sizeof(DefVars)-1 ldx #.sizeof(DefVars)-1
@ -145,7 +156,11 @@ INSTALL:
; UNINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; No return code required (the driver is removed from memory on return). ; No return code required (the driver is removed from memory on return).
UNINSTALL = HIDE ; Hide cursor on exit UNINSTALL:
jsr HIDE ; Hide cursor on exit
lda INIT_save
sta INIT_STATUS
rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages ; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages

View File

@ -1,8 +1,9 @@
; ;
; Driver for a potentiometer "mouse" e.g. Koala Pad ; Driver for a potentiometer "mouse", e.g. Koala Pad
; ;
; Ullrich von Bassewitz, 2004-03-29, 2009-09-26 ; 2006-08-20, Stefan Haubenthal
; Stefan Haubenthal, 2006-08-20 ; 2009-09-26, Ullrich von Bassewitz
; 2014-03-15, Greg King
; ;
.include "zeropage.inc" .include "zeropage.inc"
@ -82,6 +83,8 @@ XMax: .res 2 ; X2 value of bounding box
YMax: .res 2 ; Y2 value of bounding box YMax: .res 2 ; Y2 value of bounding box
Buttons: .res 1 ; Button mask Buttons: .res 1 ; Button mask
INIT_save: .res 1
; Temporary value used in the int handler ; Temporary value used in the int handler
Temp: .res 1 Temp: .res 1
@ -110,6 +113,14 @@ Temp: .res 1
INSTALL: INSTALL:
; Disable the BASIC interpreter's interrupt-driven sprite-motion code.
; That allows direct access to the VIC-IIe's sprite registers.
lda INIT_STATUS
sta INIT_save
lda #%11000000
sta INIT_STATUS
; Initialize variables. Just copy the default stuff over ; Initialize variables. Just copy the default stuff over
ldx #.sizeof(DefVars)-1 ldx #.sizeof(DefVars)-1
@ -142,7 +153,11 @@ INSTALL:
; UNINSTALL routine. Is called before the driver is removed from memory. ; UNINSTALL routine. Is called before the driver is removed from memory.
; No return code required (the driver is removed from memory on return). ; No return code required (the driver is removed from memory on return).
UNINSTALL = HIDE ; Hide cursor on exit UNINSTALL:
jsr HIDE ; Hide cursor on exit
lda INIT_save
sta INIT_STATUS
rts
;---------------------------------------------------------------------------- ;----------------------------------------------------------------------------
; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages ; HIDE routine. Is called to hide the mouse pointer. The mouse kernel manages