示例#1
0
static void Mint_CloseAudio(_THIS)
{
	void *oldpile;

	/* Stop replay */
	oldpile=(void *)Super(0);
	DMAAUDIO_IO.control=0;
	Super(oldpile);

	DEBUG_PRINT((DEBUG_NAME "closeaudio: replay stopped\n"));

	/* Disable interrupt */
	Jdisint(MFP_DMASOUND);

	DEBUG_PRINT((DEBUG_NAME "closeaudio: interrupt disabled\n"));

	/* Wait if currently playing sound */
	while (SDL_MintAudio_mutex != 0) {
	}

	DEBUG_PRINT((DEBUG_NAME "closeaudio: no more interrupt running\n"));

	/* Clear buffers */
	if (SDL_MintAudio_audiobuf[0]) {
		Mfree(SDL_MintAudio_audiobuf[0]);
		SDL_MintAudio_audiobuf[0] = SDL_MintAudio_audiobuf[1] = NULL;
	}

	DEBUG_PRINT((DEBUG_NAME "closeaudio: buffers freed\n"));
}
示例#2
0
/* 
	Adds a key to the buffer based on the passed in scancode.
*/
void add_key( SCANCODE bCode )
{
	int old_ssp = Super( 1 );
	int old_ipl;
	
	if( USER_MODE == old_ssp )
		old_ssp = Super( 0 );
	
	old_ipl = set_ipl( KEYBOARD_INTERRUPT_MASK );
	
	if( cFill < MAX_BUFFER_SIZE )
	{
		cKYBDBuffer[ cBffrTail ].bScanCode 		= bCode;
		cKYBDBuffer[ cBffrTail ].bValid  		= true;
		cFill++;
		cBffrTail++;
		
		cMakeTable[ bCode ].bMakeReceived 	= true;
		cMakeTable[ bCode ].wDuration 		= STARTING_DURATION;
	}
	
	set_ipl( old_ipl );
	
	if( SUPER_MODE != old_ssp )
		Super( old_ssp );
}
示例#3
0
/*
	Function for updating the keyboard buffer and pushing back codes that haven't
	received a break code yet.
*/
void update_input_buffer( UINT8 bTimeElapsed )
{
	UINT8 bIndex = 0;
	int old_ssp = Super( 1 );
	int old_ipl;
	
	if( USER_MODE == old_ssp )
		old_ssp = Super( 0 );
	
	old_ipl = set_ipl( KEYBOARD_INTERRUPT_MASK );
	
	for( bIndex; bIndex < cHotKeyCount; bIndex++ )
	{
		if( cMakeTable[ bHotKeys[ bIndex ] ].bMakeReceived )
		{
			cMakeTable[ bHotKeys[ bIndex ] ].wDuration -= bTimeElapsed;
			
			if( cMakeTable[ bHotKeys[ bIndex ] ].wDuration == 0 || 
				cMakeTable[ bHotKeys[ bIndex ] ].wDuration > STARTING_DURATION )
			{
				add_key( bHotKeys[ bIndex ] );
				cMakeTable[ bHotKeys[ bIndex ] ].wDuration = SUBSEQUENT_DURATION;
			}
		}
	}
	
	set_ipl( old_ipl );
	
	if( SUPER_MODE != old_ssp )
		Super( old_ssp );
}
示例#4
0
/*---------------------------------------------------*/
void* get_tabele()
{
long old_stack;
cookie *keks;

old_stack=Super(0L);	/* Cookie holen im Supervisormode */
keks =(cookie*)(*(long*)0x5a0);
while ((keks->value!='BLOW') && (keks->value!=0))
{
/*	char str[6];
	
	memcpy(str,&(keks->value),4);
	str[4]=0;
	printf("%s \n",str);*/ 
	keks++;
}
if (keks->value=='BLOW')
{
	char *adr;
	
/*	puts("BlowBoot found!");*/
	adr = (char*)keks->param;
	Super((void *) old_stack); 
	return adr;
}
Super((void *) old_stack); 
return 0L;
}
示例#5
0
/* --------------------
	 | Get cookie value |
	 -------------------- */
int get_cookie(unsigned long cookie, unsigned long *value)
{
long old_stack;
long *jar;

old_stack=Super(0L);
jar = *((long **)0x5a0L);
Super((void *)old_stack);

if (!jar)
	return 0;

do
	{
	if (*jar == cookie)
		{
		if (value)
			*value=jar[1];

		return 1;
		}
	else
		jar= &(jar[2]);

	}while(*jar);

return 0;
}
示例#6
0
void SDL_AtariXbios_InstallVectors(int vectors_mask)
{
	void *oldpile;

	/* Clear variables */
	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;
}
示例#7
0
static void
MINTSTFA_LockDevice(_THIS)
{
    /* Stop replay */
    void *oldpile = (void *) Super(0);
    cookie_stfa->sound_enable = STFA_PLAY_DISABLE;
    Super(oldpile);
}
示例#8
0
static void
MINTSTFA_UnlockDevice(_THIS)
{
    /* Restart replay */
    void *oldpile = (void *) Super(0);
    cookie_stfa->sound_enable = STFA_PLAY_ENABLE | STFA_PLAY_REPEAT;
    Super(oldpile);
}
示例#9
0
long get_time( )
{
    int old_ssp = Super( 0 );
    long lClockTick = *cc_ClockPtr;

    Super( old_ssp );

    return lClockTick;
}
示例#10
0
static void Mint_LockAudio(_THIS)
{
	void *oldpile;

	/* Stop replay */
	oldpile=(void *)Super(0);
	DMAAUDIO_IO.control=0;
	Super(oldpile);
}
示例#11
0
long timer( void )
{
  void * ssp;
  long ret;
  ssp = (void *)Super( NULL );
  ret = *((long *)0x4BA);
  Super( ssp );
  return ret;
}
示例#12
0
static void Mint_UnlockAudio(_THIS)
{
	void *oldpile;

	/* Restart replay */
	oldpile=(void *)Super(0);
	DMAAUDIO_IO.control=3;
	Super(oldpile);
}
示例#13
0
/*
	Purpose: write a value to a register on the sound chip
	Input  : number of the register (0-15) and the value to write (maximum 12 bit)
	Returns: nothing
	Assume : nothing
*/
void write_psg(int reg, char val)
{
	long old_ssp = Super(0);
	if (reg < 16 && val < MAX_12_BIT)
	{
		*PSG_reg_select = reg;
		*PSG_reg_write = val;
	}
	Super(old_ssp);
}
示例#14
0
/* Restitution de l'ancienne palette
*/
void RestPalette(void)
{   int *Old=OldPalette,*Hard=(int *)(0xFFFF8240);
    int n=16;
    long OldSSP=Super(NULL);
    
    while (n--) *Hard++=*Old++;
    *(char *)(0xFFFF8260)=OldRes;
    
    Super((void *)OldSSP);
}
示例#15
0
/*
 * Get a long value after switching to supervisor mode
 */
long get_protected_l(long addr)
{
   long oldstack, v;

   oldstack = (long)Super(0L);
   v = *(long *)addr;
   Super((void *)oldstack);

   return v;
}
示例#16
0
/* Initialisation de l'adresse vid‚o
*/
void SetScreenPtr(void *ad)
{   longchar t;
    long OldSSP=Super(NULL);

    t.p=ad;
    HIGPTR=t.c[1];
    MEDPTR=t.c[2];
    LOWPTR=t.c[3];
    Super((void *)OldSSP);
}
示例#17
0
/*
 * Top level;
 * we get control from the desktop.
 *
 */
main()
{
    long *cookptr;	/* pointer to AHDI cookie */

    running = TRUE;
    appl_init();
    phys_handle = graf_handle(&gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox);
    wind_get(0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk);
    open_vwork();
    wi_handle = wind_create(WI_KIND, xdesk, ydesk, wdesk, hdesk);
  
    hidden = FALSE;
    butdown = TRUE;
  
    if (!rsrc_load(RESOURCEFILE)) {
	errs("[2][", RESOURCEFILE, "][ OK ]");
	goto punt;
    }
  
    graf_mouse(ARROW, 0L);
  
    /* display menu bar */
    if (getalladdr() == ERROR) {
	errs("[2][", RESOURCEFILE, "][ OK ]");
	goto punt;
    }
  
    ostack = Super(NULL);	/* Superuser mode for low memory access */
    pun = (int *)(*(long *)PUNPTR);
    Super(ostack);		/* back to User mode */

    if (!pun || !(*pun)) {	/* if no unit exists */
	err(noavdrv);		/* return error */
	goto punt;
    }

    cookptr = (long *)((char *)pun + 2 + 16 + 16*4);
    if (*cookptr != AHDI || cookptr != *(long *)(cookptr + 1))
	vernum = 0L;
    else
	vernum = (int *)(cookptr + 2);

    menu_bar(menubar, 1);	/* put up menu bar */
  
    while (running)
	domulti();
    
    menu_bar(menubar, 0);	/* erase menu bar */
  
punt:
    wind_delete(wi_handle);	/* close window on screen */
    v_clsvwk(handle);		/* close virtual workstation */
    appl_exit();		/* exit application HDX */
    Pterm(0);			/* terminate process */
}
示例#18
0
void SDL_SYS_TimerQuit(void)
{
	/* Uninstall RunTimer vbl vector */
	if (timer_installed) {
		void *old_stack = (void *)Super(0);
		SDL_AtariVblUninstall(SDL_ThreadedTimerCheck);
		Super(old_stack);
		timer_installed = SDL_FALSE;
	}
	read_hz200_from_vbl = SDL_FALSE;
}
示例#19
0
void SDL_StartTicks(void)
{
	void *oldpile;

	/* Set first ticks value */
	oldpile=(void *)Super(0);
	start=*((volatile long *)_hz_200);
	Super(oldpile);

	start *= 5;	/* One _hz_200 tic is 5ms */
}
示例#20
0
/*
 * Read or set the word at FLIPLOC
 * set - flag to signify whether we are setting or reading the bit.
 *     - 1 means setting the word with the given value.
 *     - 0 means reading the word and returning the value.
 */
void
flip(int set, int *val)
{
	long ostack;		/* old stack value */
	
	ostack = Super(0L);
	if (set)
		*FLIPLOC = *val;
	else
		*val = *FLIPLOC;
	Super(ostack);
}
示例#21
0
文件: natfeats.c 项目: r-type/hatari
void nf_shutdown(void)
{
	long id;
	if(nf_ok && (id = nf_id("NF_SHUTDOWN"))) {
		void *sup = (void*)Super(0);
		/* needs to be called in supervisor mode */
		nf_call(id);
		Super(sup);
	} else {
		Cconws("NF_SHUTDOWN unavailable!\r\n");
	}
}
示例#22
0
Vector install_vector(int num, Vector vector){
	Vector orig;
	Vector *vectp = (Vector *)((long)num << 2);
	long old_sp = Super(0);
	
	orig = *vectp;
	*vectp = vector;
	
	Super(old_sp);
	
	return orig;
}
示例#23
0
/*
	Purpose: reads the value of the register you choose
	Input  : register to read from
	Returns: value at the register that was read
	Assume : nothing
*/
char read_psg(int reg)
{
	char psg;
	long old_ssp = Super(0);
	if (reg < 16)
	{
		*PSG_reg_select = reg;
		psg = *PSG_reg_write;
	}
	Super(old_ssp);
	return psg;
}
示例#24
0
/*
    Purpose: get the current time on the clock
    Input  : nothing
    Returns: current clock time
    Assume : nothing
*/
long clockGet()
{
    long *timer = 0x462;
    long c_time;
    long old_ssp;

    old_ssp = Super(0);
    c_time = *timer;
    Super(old_ssp);

    return c_time;
}
示例#25
0
void SDL_SYS_TimerQuit(void)
{
	void *oldpile;

	if (timer_installed) {
		/* Uninstall RunTimer vbl vector */
		oldpile=(void *)Super(0);
		SDL_AtariVblUninstall(RunTimer);
		Super(oldpile);
		timer_installed = SDL_FALSE;
	}
}
示例#26
0
void laser()
{
	volatile char *PSG_reg_select = 0xFF8800;
	volatile char *PSG_reg_write  = 0xFF8802;

	long old_ssp = Super(0);
    /*figure out how to have two channels playing at the same time.
	  Can't make channel b stop playing static. Channel b got stuck on forever 
	  after this function was called. 
	*/
	Super(old_ssp);
}
示例#27
0
/* Lecture de l'adresse vid‚o
*/
void *GetScreenPtr(void)
{   longchar t;
    long OldSSP=Super(NULL);

    t.l=0;
    t.c[1]=HIGPTR;
    t.c[2]=MEDPTR;
    t.c[3]=LOWPTR;
    
    Super((void *)OldSSP);
    return t.p;
} 
示例#28
0
void stop_music()
{
	long old_ssp = Super(0);
	*PSG_reg_select = A_VOLUME;		/* set channel A volume = 8 */
	*PSG_reg_write  = 0;
	*PSG_reg_select = B_VOLUME;		/* set channel B volume = 8 */
	*PSG_reg_write  = 0;
	*PSG_reg_select = C_VOLUME;		/* set channel C volume = 8 */
	*PSG_reg_write  = 0;
	
	Super(old_ssp);
}
示例#29
0
void force_mediach(const char *path)
{
	int drive, p = *path;

	if (   p == 0
	    || !(isalnum(p) && path[1] == ':')		/* HR 271102: alnum */
	   )
		return;

	drive =   isalpha(p)
	        ? tolower(p) - 'a'			/* HR 271102 */
	        : p - '0' + 'z' - 'a'  + 2;

#if _MINT_			/* HR 151102 */
	if (mint)
	{
		if (Dlock(1, drive) == 0)
			Dlock(0, drive);
	}
	else
#endif
	{
		void *stack;
		static char fname[] = "X:\\X";
		long r;

		stack = (void *)Super(0L);

		chdrv = drive;
		Oldrwabs = *((Func *)0x476L);
		Oldgetbpb = *((Func *)0x472L);
		Oldmediach = *((Func *)0x47eL);

		*((Func *)0x476L) = Newrwabs;
		*((Func *)0x472L) = Newgetbpb;
		*((Func *)0x47eL) = Newmediach;

		fname[0] = drive + 'A';
		r = Fopen(fname, 0);
		if (r >= 0)
			Fclose((int)r);

		if (*((Func *)0x476L) == Newrwabs)
		{
			*((Func *)0x472L) = Oldgetbpb;
			*((Func *)0x476L) = Oldrwabs;
			*((Func *)0x47eL) = Oldmediach;
		}

		Super(stack);
	}
}
示例#30
0
LONG
unhook_xbra( WORD vecnum, LONG app_id )
{
    XBRA *rx;
    LONG vecadr, *stepadr, savessp, lret = 0L;

    vecadr = (LONG)Setexc( vecnum, VEC_INQUIRE );
    rx = (XBRA *)(vecadr - sizeof( XBRA ));

    if( (vecadr >= 0x00E00000 && vecadr <= 0x00EFFFFF)
	|| (vecadr >= 0x00FA0000 && vecadr <= 0x00FEFFFF) )
    {
	/* It's a ROM vector */
	return 0L;
    }

    /* Set supervisor mode for search just in case. */
    savessp = Super( SUP_SET );

    /* do we have an XBRA-structure? */
    if( rx->xbra_id != 'XBRA' )
    {
    	Super( savessp );
    	return 0L;
    }

    /* Special Case: Vector to remove is first in chain. */
    if( rx->xbra_id == 'XBRA' && rx->app_id == app_id )
    {
	Super( savessp );
        (void)Setexc( vecnum, rx->oldvec );
        return vecadr;
    }

    stepadr = (LONG *)&rx->oldvec;

    rx = (XBRA *)((LONG)rx->oldvec - sizeof( XBRA ));
    while( rx!=0 && rx->oldvec!=0 && rx->xbra_id == 'XBRA' )
    {
        if( rx->app_id == app_id )
        {
            *stepadr = lret = (LONG)rx->oldvec;
            break;
        }

        stepadr = (LONG *)&rx->oldvec;
        rx = (XBRA *)((LONG)rx->oldvec - sizeof( XBRA ));
    }

    Super( savessp );
    return lret;
}