Ejemplo n.º 1
0
void C64::ping()
{
    debug (1, "Pinging virtual C64\n");

    VirtualComponent::ping();
    putMessage(MSG_WARP, warp);
    putMessage(MSG_ALWAYS_WARP, alwaysWarp);
}
Ejemplo n.º 2
0
__interrupt void comUartRxISR( void )
{
	rx_byte = UCA0RXBUF;
	if( rx_byte == ENTER_CHAR ){

		if( rxBufferPointer == 0 ){
			return;
		}

		//send message to cli
		rxBuffer[rxBufferPointer] = '\0';
		rxBufferPointer = 0;

		if( getFreeMessage( &eMessage ) == queue_ok ){
			eMessage->source = com_uart_user;
			eMessage->destination = cli_user;
			eMessage->argument = rxArgBuffer;
			strcpy( ( char * ) eMessage->argument, ( const char * ) rxBuffer );
			putMessage( eMessage );
		}
	} else if( rxBufferPointer < ( COM_UART_RX_BUFFER_SIZE - 2 ) ){
		rxBuffer[rxBufferPointer] = rx_byte;
		if( rx_byte == BS_CHAR ){
			if(rxBufferPointer != 0){
				rxBufferPointer--;
				if( getFreeMessage( &eMessage ) == queue_ok ){
					eMessage->destination = com_uart_user;
					eMessage->source = com_uart_user;
					eMessage->event = echo_event;
					eMessage->id = (int) rx_byte;
					putMessage( eMessage );
				}
				if( getFreeMessage( &eMessage ) == queue_ok ){
					eMessage->destination = com_uart_user;
					eMessage->source = com_uart_user;
					eMessage->event = echo_event;
					eMessage->id = (int) SPACE_CHAR;
					putMessage( eMessage );
				}
			}
		} else {
			rxBufferPointer++;
		}

		//echo
		if( rxBufferPointer != 0 ){
			if( getFreeMessage( &eMessage ) == queue_ok ){
				eMessage->destination = com_uart_user;
				eMessage->source = com_uart_user;
				eMessage->event = echo_event;
				eMessage->id = (int) rx_byte;
				putMessage( eMessage );
			}
		}
	}

}
Ejemplo n.º 3
0
int main( void ){

	disableWDT();// Stop watchdog timer
	initQueue();
	initScheduler();

	initButton();
	initLed();
	initComUart();

	initInfo();

	mainTask.cmdName = cmdNameMain;
	mainTask.user = main_user;
	mainTask.handler = &mainHandler;
	registerTask( &mainTask );

	setDCOCLK( DCO_1M );
	setSMCLK( SMCLK_DCO, CLK_DIV_1 );

	if( getFreeMessage( &mainMessage ) == queue_ok ){
		mainMessage->source = main_user;
		mainMessage->destination = led_user;
		mainMessage->id = MSG_ID_LED_GREEN;
		mainMessage->priority = normal_priority;
		mainMessage->event = undef_event;
		putMessage( mainMessage );
	}

	if( getFreeMessage( &mainMessage ) == queue_ok){
		mainMessage->destination = com_uart_user;
		mainMessage->source = main_user;
		mainMessage->id = MSG_ID_UART_WELCOME;
		putMessage( mainMessage );
	}

	initCli();

	enableTimerA0CCInterrupt();
	setTimerA0Mode( TAMODE_CONT );
	setTimerA0ClockSource( TA_SMCLK );
	setTimerA0Divider( TA_DIV_1 );

	__enable_interrupt();

	__bis_SR_register( 0x18 );

	//__bis_SR_register( 0x18 ); // LPM0 with interrupts enabled

	while( 1 ){};

	return 0;
}
Ejemplo n.º 4
0
void
C64::setWarp(bool b)
{
	if (warp != b) {
		warp = b;
		restartTimer();
		putMessage(MSG_WARP, b);
	}
}
Ejemplo n.º 5
0
void
C64::setAlwaysWarp(bool b)
{
    if (alwaysWarp == b)
        return;
    
    if (alwaysWarp != b) {
        alwaysWarp = b;
        setWarp(b);
        putMessage(MSG_ALWAYS_WARP, b);
    }
}
Ejemplo n.º 6
0
bool
C64::loadRom(const char *filename)
{
    bool result = false;
    
    debug(1, "Trying to load ROM image %s\n", filename);
    
    suspend();
    bool wasRunnable = isRunnable();
    
    if (C64Memory::isBasicRom(filename)) {
        result = mem.loadBasicRom(filename);
        if (result) putMessage(MSG_ROM_LOADED, BASIC_ROM);
    }
    
    if (C64Memory::isCharRom(filename)) {
        result = mem.loadCharRom(filename);
        if (result) putMessage(MSG_ROM_LOADED, CHAR_ROM);
    }
    
    if (C64Memory::isKernelRom(filename)) {
        result = mem.loadKernelRom(filename);
        if (result) putMessage(MSG_ROM_LOADED, KERNEL_ROM);
    }
    
    if (VC1541Memory::is1541Rom(filename)) {
        result = floppy.mem.loadRom(filename);
        if (result) putMessage(MSG_ROM_LOADED, VC1541_ROM);
    }
    
    bool isNowRunnable = isRunnable();
    
    if (!wasRunnable && isNowRunnable) { // Good news! All ROMs are in place
        putMessage(MSG_ROM_COMPLETE);
    }
    resume();
    
    return result;
}
Ejemplo n.º 7
0
bool 
C64::loadRom(const char *filename)
{
	bool result = false; 
		
	suspend(); 
	
	bool wasRunnable = isRunnable();
	
	if (C64Memory::isBasicRom(filename)) {
		result = mem->loadBasicRom(filename);
		if (result) putMessage(MSG_ROM_LOADED, BASIC_ROM);
	}
	
	if (C64Memory::isCharRom(filename)) {
		result = mem->loadCharRom(filename);
		if (result) putMessage(MSG_ROM_LOADED, CHAR_ROM);
	}
	
	if (C64Memory::isKernelRom(filename)) {
		result = mem->loadKernelRom(filename);
		if (result) putMessage(MSG_ROM_LOADED, KERNEL_ROM);
	}
	
	if (VC1541Memory::is1541Rom(filename)) {
		result = floppy->mem->loadRom(filename);
		if (result) putMessage(MSG_ROM_LOADED, VC1541_ROM);
	}
			
	bool isNowRunnable = isRunnable();
	
	if (!wasRunnable && isNowRunnable) {
		// Last missing ROM was loaded
		putMessage(MSG_ROM_COMPLETE);
	}
	
	resume();
	return result;
}
Ejemplo n.º 8
0
__interrupt void timerA0ISR( void )
{
	timerCount = ( timerCount + 1 ) % 16;
	if ( timerCount == 0 ) {
		if( getFreeMessage( &mainMessage ) == queue_ok ){
			mainMessage->source = main_user;
			mainMessage->destination = led_user;
			mainMessage->id = MSG_ID_LED_GREEN;
			mainMessage->event = toggle_event;
			putMessage( mainMessage );
		} else {
			ledToggle( MSG_ID_LED_RED );
		}

	}
	scheduler();
}
Ejemplo n.º 9
0
/* -------------------------------------------------------------------- */
void SaveAideMess(void)
{
	char *temp;
    FILE *fd;

	if((temp = calloc(90, sizeof(char))) == NULL) {
		return;
	}

	flipFileLan(cfg->temppath,1);

	sprintf(temp, "%s\\%s", cfg->temppath, "aidemsg.tmp");

    if (aideFl == NULL) {
		flipFileLan(cfg->temppath,0);
		return;
    }
    fclose(aideFl);

    if ((fd = fopen(temp, "rb")) == NULL) {
        crashout("AIDEMSG.TMP file not found during aide message save!");
    }
    clearmsgbuf();

	GetStr(fd, msgBuf->mbtext, cfg->maxtext);

    fclose(fd);
    unlink(temp);

    aideFl = NULL;

	free(temp);

	flipFileLan(cfg->temppath,0);

	if (strlen(msgBuf->mbtext) < 10)
        return;

	strcpy(msgBuf->mbauth, cfg->nodeTitle);

    msgBuf->mbroomno = AIDEROOM;

    putMessage();
    noteMessage();
}
Ejemplo n.º 10
0
void 
C64::run() {
	
	if (isHalted()) {
		
		// Check for ROM images
		if (getMissingRoms()) {
			putMessage(MSG_ROM_MISSING, getMissingRoms());
			return;
		}

        // Power on sub components
		sid->run();

		// Start execution thread
		pthread_create(&p, NULL, runThread, (void *)this);	
	}
}
Ejemplo n.º 11
0
void C64::ping()
{
    debug (1, "Pinging virtual C64\n");
    
    putMessage(MSG_WARP, warp);

    mem->ping();
    cpu->ping();
    vic->ping();
    cia1->ping();
    cia2->ping();
    sid->ping();
    keyboard->ping();
    joystick1->ping();
    joystick2->ping();
    iec->ping();
    expansionport->ping();
    floppy->ping();
}
Ejemplo n.º 12
0
__interrupt void Port_1( void )
{
	P1IES ^= BIT3;
	P1IFG &= ~BIT3; // P1.3 IFG cleared

	if( getFreeMessage( &buttonMessage ) == queue_ok ){

		buttonMessage->source = button_user;
		buttonMessage->destination = com_uart_user;
		buttonMessage->id = MSG_ID_BUTTON;

		if( ( P1IN & BUTTON ) == 0x00 ){
			buttonMessage->event = on_event;
		} else {
			buttonMessage->event = off_event;
		}

		putMessage( buttonMessage );
	}
}
Ejemplo n.º 13
0
void
C64::setWarp(bool b)
{
    if (warp == b)
        return;
    
    warp = b;

    // Warping has the unavoidable drawback that audio playback gets out of sync. To cope with this issue,
    // we silence SID during warp mode and smoothly bring back sound when warping ends.
    
    if (warp) {
        // Quickly fade out SID
        sid.rampDown();
        
    } else {
        // Smoothly fade in SID
        sid.rampUp();
        restartTimer();
    }
    
    putMessage(MSG_WARP, b);
}
Ejemplo n.º 14
0
void confirmMessage(uint32_t msgId)
{
    putMessage(CONFIRMATION_MSG, sizeof(uint32_t), 0, (uint8_t *)&msgId);
}
Ejemplo n.º 15
0
 virtual void createFooter()
 { 
   putMessage("foobar_footer");
 }
Ejemplo n.º 16
0
 virtual void createBody()
 {
   putMessage("foo");
   putMessage("bar");
   putMessage("foobar");
 }
Ejemplo n.º 17
0
 virtual void createHeader()
 {
   putMessage("foobar_header");
 }
Ejemplo n.º 18
0
 virtual void createFooter()
 { 
   putMessage("<footer>foobar_footer</footer>");
 }
Ejemplo n.º 19
0
 virtual void createBody()
 {
   putMessage("<body>foo</body>");
   putMessage("<body>bar</body>");
   putMessage("<body>foobar</body>");
 }
Ejemplo n.º 20
0
 virtual void createHeader()
 {
   putMessage("<header>foobar_header</header>");
 }
Ejemplo n.º 21
0
/*
 * Set - set editor control variable
 */
vi_rc Set( char *name )
{
    char        fn[MAX_STR];
    vi_rc       rc = ERR_NO_ERR;
    int         j, i;
#ifndef VICOMP
#ifndef __WIN__
    int         tmp, tc;
    char        **vals = NULL;
    char        **list;
    int         longest;
#endif
#endif

    /*
     * get item to set
     */
#ifndef VICOMP
    msgFlag = FALSE;
    if( !EditFlags.ScriptIsCompiled ) {
#endif
        RemoveLeadingSpaces( name );
        j = strlen( name );
        for( i = 0; i < j; i++ ) {
            if( name[i] == '=' || name[i] == ',' ) {
                name[i] = ' ';
            }
        }
#ifndef VICOMP
    }
#endif

    if( NextWord1( name, fn ) <=0 ) {
#ifndef VICOMP
        if( !EditFlags.WindowsStarted ) {
            return( ERR_NO_ERR );
        }
#ifndef __WIN__
        tc = getSetInfo( &vals, &list, &longest );
        tmp = setw_info.y2;
        i = setw_info.y2 - setw_info.y1 + 1;
        if( setw_info.has_border ) {
            i -= 2;
        }
        if( tc < i ) {
            setw_info.y2 -= (i - tc);
        }
        rc = SelectItemAndValue( &setw_info, "Settings", list,
                          tc, SettingSelected, 1, vals, longest + 3 );
        setw_info.y2 = tmp;
        MemFreeList( tc, vals );
        MemFreeList( tc, list );
        ReDisplayScreen();
#endif
#endif /* VICOMP */
        return( rc );
    } else {
#ifndef VICOMP
        if( !EditFlags.Starting) {
            msgFlag = TRUE;
        }
#endif
        do {
#ifndef VICOMP
            if( !EditFlags.ScriptIsCompiled ) {
#endif
                if( tolower( fn[0] ) == 'n' && tolower( fn[1] ) == 'o' ) {
                    EliminateFirstN( fn, 2 );
                    i = -1;
                } else {
                    i = 1;
                }
                j = Tokenize( SetTokens1, fn, FALSE );
                if( j == TOK_INVALID ) {
                    j = Tokenize( SetTokens2a, fn, FALSE );
                    if( j == TOK_INVALID ) {
                        j = Tokenize( SetTokens2, fn, FALSE );
                        if( j == TOK_INVALID ) {
                            return( ERR_INVALID_SET_COMMAND );
                        }
                    }
                    j += SET1_T_;
                }
                j *= i;
#ifndef VICOMP
            } else {
                j = atoi( fn );
            }
#endif
            i = TRUE;
            rc = processSetToken( j, name, &i, FALSE );
            if( rc > ERR_NO_ERR ) {
                break;
            }
            RemoveLeadingSpaces( name );
        } while( NextWord1( name, fn ) > 0 );
#ifndef VICOMP
        if( msgFlag ) {
            putMessage();
        }
#endif
        return( rc );
    }

} /* Set */
Ejemplo n.º 22
0
void SkylivePluginSkeleton::sendMessage(SKMessage msg)
{
   msg.sender=SENDER;
   emit putMessage(msg);
}