void SDL_AtariXbios_InstallVectors(int vectors_mask) { void *oldpile; /* Clear variables */ SDL_AtariXbios_mouselock = SDL_AtariXbios_mouseb = SDL_AtariXbios_mousex = SDL_AtariXbios_mousey = SDL_AtariXbios_joystick = atari_prevmouseb = 0; if (vectors_mask==0) { SDL_AtariXbios_enabled=0; return; } /* Read IKBD vectors base */ kbdvecs=Kbdvbase(); /* Go to supervisor mode */ oldpile=(void *)Super(0); /* Install our vectors */ SDL_AtariXbios_Install( kbdvecs, (vectors_mask & ATARI_XBIOS_MOUSEEVENTS) ? SDL_AtariXbios_MouseVector : NULL, (vectors_mask & ATARI_XBIOS_JOYSTICKEVENTS) ? SDL_AtariXbios_JoystickVector : NULL ); /* Back to user mode */ Super(oldpile); SDL_AtariXbios_enabled=1; }
void SDL_AtariXbios_RestoreVectors(void) { void *oldpile; if (SDL_AtariXbios_enabled==0) { return; } /* Read IKBD vectors base */ kbdvecs=Kbdvbase(); /* Go to supervisor mode */ oldpile=(void *)Super(NULL); /* Reinstall system vector */ SDL_AtariXbios_Restore(kbdvecs); /* Back to user mode */ Super(oldpile); }
void sethooks( void ) { unsigned int wOriginalValue; int i; /* find out if we're on Stacy */ wOriginalValue = *SHADOW; for(i=0; (i<NPATTERNS)&&(isStacy); ++i){ *SHADOW = wPattern[i]; isStacy = ((*SHADOW & 0xF) == wPattern[i]); } *SHADOW = wOriginalValue; ma_info->stacy = isStacy; #ifdef CLICK_CONFIG /* get kbshift address */ if( sysbase->os_version == 0x100 ) kbshift = KBS10; else kbshift = sysbase->kbshift; #endif /* install maccel vectors */ kbase = Kbdvbase(); mvloc = &kbase->kb_mousevec; /* IPL7();*/ oldrvec = resvector; oldrval = resvalid; resvector = myreset; resvalid = RESMAGIC; oldmvec = kbase->kb_mousevec; kbase->kb_mousevec = mouse; oldkbd = kbase->kb_kbdsys; kbase->kb_kbdsys = ikbd; oldrs = Setexc( 76, rs232 ); vbentry = VBLQUEUE; while( *(++vbentry) ); /* skip the VDI entry */ *(void(**)())vbentry = myvbl; /* IPL_RESTORE();*/ }