Fixed a problem when loading joystick drivers: When an install error occurred,
the driver wasn't removed from memory. git-svn-id: svn://svn.cc65.org/cc65/trunk@3752 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
dc569cad49
commit
878dcf4aa7
4 changed files with 44 additions and 16 deletions
|
@ -6,10 +6,10 @@
|
||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* (C) 2002 Ullrich von Bassewitz */
|
;/* (C) 2002-2006, Ullrich von Bassewitz */
|
||||||
;/* Wacholderweg 14 */
|
;/* Römerstraße 52 */
|
||||||
;/* D-70597 Stuttgart */
|
;/* D-70794 Filderstadt */
|
||||||
;/* EMail: uz@musoftware.de */
|
;/* EMail: uz@cc65.org */
|
||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* This software is provided 'as-is', without any expressed or implied */
|
;/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
@ -80,4 +80,5 @@ JOY_API_VERSION = $01
|
||||||
.global _joy_count
|
.global _joy_count
|
||||||
.global _joy_read
|
.global _joy_read
|
||||||
|
|
||||||
|
.global _joy_clear_ptr
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2002-2004 Ullrich von Bassewitz */
|
/* (C) 2002-2006, Ullrich von Bassewitz */
|
||||||
/* Römerstrasse 52 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
@ -72,6 +72,17 @@ extern joy_drv_header* joy_drv; /* Pointer to driver */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/* Code */
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void joy_clear_ptr (void);
|
||||||
|
/* Clear the joy_drv pointer */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* End of joy-kernel.h */
|
/* End of joy-kernel.h */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
; Common functions of the joystick API.
|
; Common functions of the joystick API.
|
||||||
;
|
;
|
||||||
|
|
||||||
.export joy_clear_ptr
|
|
||||||
|
|
||||||
.importzp ptr1
|
.importzp ptr1
|
||||||
.interruptor joy_irq ; Export as IRQ handler
|
.interruptor joy_irq ; Export as IRQ handler
|
||||||
|
|
||||||
|
@ -117,7 +115,7 @@ _joy_uninstall:
|
||||||
|
|
||||||
jsr joy_uninstall ; Call the driver routine
|
jsr joy_uninstall ; Call the driver routine
|
||||||
|
|
||||||
joy_clear_ptr: ; External entry point
|
_joy_clear_ptr: ; External entry point
|
||||||
lda #0
|
lda #0
|
||||||
sta _joy_drv
|
sta _joy_drv
|
||||||
sta _joy_drv+1 ; Clear the driver pointer
|
sta _joy_drv+1 ; Clear the driver pointer
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* (C) 2002-2003 Ullrich von Bassewitz */
|
/* (C) 2002-2006, Ullrich von Bassewitz */
|
||||||
/* Römerstrasse 52 */
|
/* Römerstrasse 52 */
|
||||||
/* D-70794 Filderstadt */
|
/* D-70794 Filderstadt */
|
||||||
/* EMail: uz@cc65.org */
|
/* EMail: uz@cc65.org */
|
||||||
/* */
|
/* */
|
||||||
/* */
|
/* */
|
||||||
/* This software is provided 'as-is', without any expressed or implied */
|
/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
@ -41,6 +41,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Use static local variables, since the module is not reentrant anyway */
|
||||||
|
#pragma staticlocals (on);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned char __fastcall__ joy_load_driver (const char* name)
|
unsigned char __fastcall__ joy_load_driver (const char* name)
|
||||||
/* Load a joystick driver and return an error code */
|
/* Load a joystick driver and return an error code */
|
||||||
{
|
{
|
||||||
|
@ -68,8 +73,21 @@ unsigned char __fastcall__ joy_load_driver (const char* name)
|
||||||
if (Res == MLOAD_OK) {
|
if (Res == MLOAD_OK) {
|
||||||
|
|
||||||
/* Check the driver signature, install the driver */
|
/* Check the driver signature, install the driver */
|
||||||
return joy_install (ctrl.module);
|
Res = joy_install (ctrl.module);
|
||||||
|
|
||||||
|
/* If the driver did not install correctly, remove it from
|
||||||
|
* memory again.
|
||||||
|
*/
|
||||||
|
if (Res != JOY_ERR_OK) {
|
||||||
|
/* Do not call mouse_uninstall here, since the driver is not
|
||||||
|
* correctly installed.
|
||||||
|
*/
|
||||||
|
mod_free (joy_drv);
|
||||||
|
joy_clear_ptr ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the error code */
|
||||||
|
return Res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue