/*******************************************/ /* Modul : 16MHZ.C */ /* Aufgabe : Schaltet in 16MHZ-Modus mit */ /* eingeschaltetem Cache */ /*******************************************/ # include # include # include # include typedef struct { UBYTE id[4]; LONG value; } COOKIE_STRUCT; /* Prototypen */ LONG SuperOn( VOID ); VOID SuperOff( LONG adr ); WORD FindCookie( UBYTE *id, LONG *value ); WORD main( VOID ) { LONG cvalue, ret; /* COOKIE suchen */ if( !FindCookie( "_MCH", &cvalue ) ) return( -1 ); /* Kein STE ?? */ if( (WORD)(cvalue >> 16) != 1 ) return( -2 ); ret = SuperOn(); /* Modus umschalten */ *(BYTE *)0xFF8E21L = 3; SuperOff( ret ); puts( "\n\033p 16MHz \033q" ); puts( " by Markus H”vener \n\n" ); return( 0 ); } /********************************************/ /* Schaltet in den Supervisormode */ /********************************************/ LONG SuperOn( VOID ) { return( Super( (VOID*)1L ) ? 0L : Super( (VOID *)0L ) ); } /********************************************/ /* Schaltet ihn wieder aus */ /********************************************/ VOID SuperOff( LONG adr ) { if( adr ) Super( (VOID *)adr ); } /********************************************/ /* Sucht einen COOKIE */ /********************************************/ WORD FindCookie( UBYTE *id, LONG *value ) { COOKIE_STRUCT *jar; LONG i = 0, ret; /* Zeiger auf den Jar holen */ ret = SuperOn(); jar = (COOKIE_STRUCT *)(*((LONG **)0x5a0L)); SuperOff( ret ); /* Kein Jar vorhanden */ if( !jar ) return( 0 ); /* Solange der NULL-Cookie nicht erreicht ist */ while( *((LONG *)&jar[i]) ) if( !strncmp( jar[i].id, id, 4L ) ) { /* Wert des Cookies eintragen */ if( value != NULL ) *value = jar[i].value; return( 1 ); } else ++i; /* Nicht gefunden... */ return( 0 ); }