User Tools

Site Tools


acsim_mios_c

This is an old revision of the document!


This page is part of the mios_c_simulator_-_debugger

ACSim_console.h
ACSim_console.c

ACSim_toolbox.c

ACSim_mios.h
ACSim_mios.c


/*
 *  ACSim_mios.c
 *  v 0.0.5
 *
 *  2006 April 06 Created by Michael Markert, http://www.audiocommander.de
 *  mios simulator source for MIOS (c) by T. Klose, http://www.midibox.org
 *
 */
 
/*
 * Released under GNU General Public License
 * http://www.gnu.org/licenses/gpl.html
 * 
 * This program is free software; you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation
 *
 * YOU ARE ALLOWED TO COPY AND CHANGE 
 * BUT YOU MUST RELEASE THE SOURCE TOO (UNDER GNU GPL) IF YOU RELEASE YOUR PRODUCT 
 * YOU ARE NOT ALLOWED NOT USE IT WITHIN PROPRIETARY CLOSED-SOURCE PROJECTS
 */
 
 
#import <Stdio.h>
 
#import "ACSim_mios.h"
 
#import "ACSim_toolbox.c"
 
 
 
#pragma mark Globals
// globals
unsigned char		debug_ain_lastPin;
unsigned int		debug_ain_value[32];
unsigned char		debug_din_lastPin;
unsigned char		debug_din_value[32];
unsigned int		debug_enc_value[32];
 
unsigned char		debug_bankstick_ctrl = 0x00;	// 1st Bankstick preselected
debug_bankstick_t	debug_bankstick[DEBUG_BANKSTICK_NUM];
 
// "pic18f452.h"
__PORTCbits_t		PORTCbits;
__PORTDbits_t		PORTDbits;
mios_box_stat_t		MIOS_BOX_STAT;
// HLP
unsigned char		MIOS_PARAMETER1;
unsigned char		MIOS_PARAMETER2;
unsigned char		MIOS_PARAMETER3;
 
 
#pragma mark MIOS_AIN
// MIOS_AIN
extern void MIOS_AIN_DeadbandSet(unsigned char deadband) { return; }
extern void MIOS_AIN_Muxed(void) { return; }
extern void MIOS_AIN_UnMuxed(void) { return; }
extern void MIOS_AIN_NumberSet(unsigned char pots) { return; }
extern unsigned char MIOS_AIN_Pin7bitGet(unsigned char pin) { 
	debug_ain_lastPin = pin;
	// last ainValue is 10bit
	return debug_ain_value[pin] >> 3;
}
extern unsigned int MIOS_AIN_PinGet(unsigned char pin) { 
	debug_ain_lastPin = pin;
	return debug_ain_value[pin];
}
 
 
#pragma mark MIOS_DIN
// MIOS_DIN
extern unsigned char MIOS_DIN_PinGet(unsigned char pin) { 
	debug_din_lastPin = pin;
	if(DEBUG_PEDAL_PRESSED && (pin == DEBUG_BUTTON_AIN_PEDAL)) { 
		debug_din_value[pin] = 0;
		return 0; // Button pressed (0V)
	} else {
		return debug_din_value[pin];
	}
}
 
 
#pragma mark MIOS_DOUT
// MIOS_DOUT
extern unsigned char MIOS_SRIO_NumberGet(void) { return 16; }
extern void MIOS_SRIO_NumberSet(unsigned char number_sr) { return; }
extern unsigned char MIOS_SRIO_TS_SensitivityGet(void) { return 0; }
extern void MIOS_SRIO_TS_SensitivitySet(unsigned char update_frq) { return; }
extern unsigned char MIOS_SRIO_UpdateFrqGet(void) { return 10; }
extern void MIOS_SRIO_UpdateFrqSet(unsigned char update_frq) { return; }
extern unsigned char MIOS_SRIO_DebounceGet(void) { return 32; }
extern void MIOS_SRIO_DebounceSet(unsigned char debounce_value) { return; }
 
 
#pragma mark MIOS_ENC
extern void MIOS_ENC_Abs7bitAdd(unsigned char enc, char add) { 
	if((debug_enc_value[enc] == 127) && (add > 0)) { 
		debug_enc_value[enc] = 127; 
	} else if((debug_enc_value[enc] == 0) && (add < 0)) { 
		debug_enc_value[enc] = 0; 
	} else {
		debug_enc_value[enc] += add;
	}
	return; 
}
extern unsigned char MIOS_ENC_Abs7bitGet(unsigned char enc) { return debug_enc_value[enc]; }
extern void MIOS_ENC_Abs7bitSet(unsigned char enc, unsigned char value) { debug_enc_value[enc] = value; }
extern unsigned char MIOS_ENC_NumberGet(void) { return 32; }
extern unsigned char MIOS_ENC_SpeedGet(unsigned char enc) { return 0x01; }
extern void MIOS_ENC_SpeedSet(unsigned char enc, unsigned char mode, unsigned char parameter) { return; }
 
 
#pragma mark MIOS_LCD
// MIOS_LCD
extern void MIOS_LCD_Clear(void) { printf("\n"); }
extern void MIOS_LCD_Cmd(unsigned char cmd) { return; }
extern unsigned char MIOS_LCD_CursorGet(void) { return 0; }
extern void MIOS_LCD_CursorSet(unsigned char pos) { printf("\n**MIOS_LCD** 0x%x\t|", pos); }
extern void MIOS_LCD_Data(unsigned char data) { return; }
extern void MIOS_LCD_Init(void) { return; }
extern void MIOS_LCD_PrintBCD1(unsigned char v) { printf("%1.1i",v); }
extern void MIOS_LCD_PrintBCD2(unsigned char v) { printf("%2.2i",v); }
extern void MIOS_LCD_PrintBCD3(unsigned char v) { printf("%3.3i",v); }
extern void MIOS_LCD_PrintBCD4(unsigned int v) { printf("%i",v); }
extern void MIOS_LCD_PrintBCD5(unsigned int v) { printf("%i",v); }
extern void MIOS_LCD_PrintChar(unsigned char c) { 
	switch(c) {
		case 0x00: c = '_'; break;
		case 0x01: c = '_'; break;
		case 0x02: c = '_'; break;
		case 0x03: c = '-'; break;
		case 0x04: c = '-'; break;
		case 0x05: c = '-'; break;
		case 0x06: c = '='; break;
		case 0x07: c = '='; break;
	}
	printf("%c",c); 
}
extern void MIOS_LCD_PrintHex1(unsigned char h) { printf("%X",h); }
extern void MIOS_LCD_PrintHex2(unsigned char h) { printf("%X",h); }
extern void MIOS_LCD_PrintPreconfString(unsigned char len, code char *str[len]) { printf("%s",str); }
extern void MIOS_LCD_PrintString(code char *str) { printf("%s|",str); }
extern void MIOS_LCD_PrintCString(code char *str) { printf("%s|",str); }
extern void MIOS_LCD_PrintMessage(code char *str) { printf("%s|",str); }
extern void MIOS_LCD_MessageStart(unsigned char delay) { 
	printf("\n**MIOS_LCD: Output Message delayed for %i ticks", delay); 
}
extern void MIOS_LCD_MessageStop(void) { printf("\n**MIOS_LCD: Output Message stopped"); }
extern void MIOS_CLCD_SpecialCharInit(code char c_table) { return; }
extern void MIOS_CLCD_SpecialCharsInit(code unsigned char *c_table) { return; }
 
 
 
 
#pragma mark MIOS_BANKSTICK
// debug bankstick
unsigned char debug_check_bankstick(unsigned int addr) {
	MIOS_BOX_STAT.BS_AVAILABLE = (DEBUG_BANKSTICK_NUM > 0 ? 1 : 0);
	if(! MIOS_BOX_STAT.BS_AVAILABLE) { 
		printf("\n**MIOS_BANKSTICK: !!! ERROR !!! : NO BANKSTICK AVAILABLE!");
		return 1; 
	}
	if(addr > DEBUG_BANKSTICK_SIZE) {
		printf("\n**MIOS_BANKSTICK: !!! ERROR !!! : address overflow!");
		//MIOS_BOX_STAT.BS_AVAILABLE = 0;	// this is the default MIOS behavior on read error
		return 1;
	}
	return 0;	// no error
}
 
// MIOS_BANKSTICK
extern unsigned char MIOS_BANKSTICK_CtrlGet(void) { return debug_bankstick_ctrl; }
extern void MIOS_BANKSTICK_CtrlSet(unsigned char ctrl) { debug_bankstick_ctrl = ctrl; }
 
extern unsigned char MIOS_BANKSTICK_Read(unsigned int addr) {
	if(debug_check_bankstick(addr)) { return; }
	unsigned char buf = debug_bankstick[debug_bankstick_ctrl].buffer[addr];
	if(DEBUG_VERBOSE) { printf("\n**MIOS_BANKSTICK_Read(%X): %X", addr, buf); }
	return buf;
}
 
extern unsigned char MIOS_BANKSTICK_ReadPage(unsigned int addr, unsigned char *buffer) {
	if(debug_check_bankstick(addr)) { return; }
	int i;
	for(i=0;i<64;i++) {
		buffer[addr + i] = MIOS_BANKSTICK_Read(addr + i);
	}
	// print buffer
	hexview(buffer, sizeof(buffer));
	return 1;	// no error
}
 
extern unsigned char MIOS_BANKSTICK_Write(unsigned int addr, unsigned char value) {
	if(debug_check_bankstick(addr)) { return; }
	debug_bankstick[debug_bankstick_ctrl].buffer[addr] = value;	
	if(DEBUG_VERBOSE) { printf("\n**MIOS_BANKSTICK_Write(%X): %X", addr, value); }
	return 1;	// no error
}
 
extern unsigned char MIOS_BANKSTICK_WritePage(unsigned int addr, unsigned char *buffer) {
	if(debug_check_bankstick(addr)) { return; }
	int i;
	for(i=0;i<64;i++) {
		MIOS_BANKSTICK_Write((addr + i), buffer[i]);
	}
	// print buffer
	hexview(buffer, sizeof(buffer));
	return 1; // no error
}
 
 
 
 
#pragma mark MIOS_MIDI
// MIOS_MIDI
extern void MIOS_MIDI_BeginStream(void) { printf("\n**MIOS_MIDI_BeginStream**"); }
extern void MIOS_MIDI_TxBufferPut(unsigned char b) { printf("\n**MIOS_MIDI_TxBufferPut, %i", b); }
extern void MIOS_MIDI_EndStream(void) { 
	printf("\n**MIOS_MIDI_EndStream**"); 
	DISPLAY_Init();
}
 
 
#pragma mark MIOS_TIMER
// MIOS_TIMER
extern void MIOS_TIMER_Init(unsigned char mode, unsigned int period) { return; }
extern void MIOS_TIMER_Start(void) { return; }
extern void MIOS_TIMER_Stop(void) { return; }
extern void MIOS_TIMER_ReInit(unsigned char mode, unsigned int period) { return; }
 
 
#pragma mark MIOS_IIC
// MIOS_IIC
extern void MIOS_IIC_Start(void)				{ printf("\n**MIOS_IIC_Start**"); }
extern void MIOS_IIC_Stop(void)					{ printf("\n**MIOS_IIC_Stop**"); }
extern unsigned char MIOS_IIC_ByteSend(unsigned char b)	{ 
	printf("\n**MIOS_IIC_ByteSend: %x  \t %i  \t %c", b, b, b); 
	return 1;
}
extern unsigned char MIOS_IIC_ByteReceive(void) { 
	printf("\n**MIOS_IIC_ByteReceived**");
	return 1;
}
extern void MIOS_IIC_AckSend(void)				{ printf("\n**MIOS_IIC_ACK sent**"); }
extern void MIOS_IIC_NakSend(void)				{ printf("\n**MIOS_IIC_NAK sent**"); }
extern void MIOS_IIC_CtrlSet(unsigned char ctrl){ return; }
extern unsigned char MIOS_IIC_CtrlGet(void)		{ 
	return 0;	// not sure about this return value!
}
 
 
#pragma mark MIOS_HELP
extern unsigned char MIOS_HLP_GetBitANDMask(unsigned char value) {
	switch(value) {
		case 0:	return 0xFE;	break;
		case 1: return 0xFD;	break;
		case 2: return 0xFB;	break;
		case 3: return 0xF7;	break;
		case 4: return 0xEF;	break;
		case 5: return 0xDF;	break;
		case 6: return 0xBF;	break;
		case 7: return 0x7F;	break;
		default:
			return 0;
			break;
	}
}
extern unsigned char MIOS_HLP_GetBitORMask(unsigned char value) { 
	switch(value) {
		case 0:	return 0x1;		break;
		case 1: return 0x2;		break;
		case 2: return 0x4;		break;
		case 3: return 0x8;		break;
		case 4: return 0x10;	break;
		case 5: return 0x20;	break;
		case 6: return 0x40;	break;
		case 7: return 0x80;	break;
		default:
			return 0;
			break;
	}
}
extern unsigned char MIOS_HLP_16bitAddSaturate(char add_value, unsigned int *ptr, unsigned int max_value) {
	// saturate to 0 or MAX
	// returns 0 if saturated, 1 if in-/decreased
	int i = (int)(*ptr + add_value);
	if(i < 0) {
		*ptr = 0;
		return 0;
	} else if(i > (signed)max_value) { 
		*ptr = (unsigned char)max_value;
		return 0;
	} else {
		*ptr = (unsigned char)i;
		return 1;
	}
}
extern void MIOS_HLP_Dec2BCD(unsigned int value) { 
	// decimals to hex (eg 123456 to 0x12, 0x34, 0x56)
	MIOS_PARAMETER1 = 0x0;
	MIOS_PARAMETER2 = 0x0;
	MIOS_PARAMETER3 = 0x0;
	if(value > 999999) {
		printf("\nMIOS_HLP_Dec2BCD_ERROR: value exceeds 6 digits! ABORTING**");
		return;
	}
	unsigned char a;
	unsigned char b;
	// get 100.000
	a = (unsigned char)(value / 100000);
	b = (unsigned char)((value / 10000) - (a * 10));
	MIOS_PARAMETER3 = (a << 4) + b;
	// get 1.000
	value = value - (a * 100000 + b * 10000);
	a = (unsigned char)(value / 1000);
	b = (unsigned char)((value / 100) - (a * 10));
	MIOS_PARAMETER2 = (a << 4) + b;
	// get 10
	value = value - (a * 1000 + b * 100);
	a = (unsigned char)(value / 10);
	b = (unsigned char)(value - (a * 10));
	MIOS_PARAMETER1 = (a << 4) + b;
}
acsim_mios_c.1154463794.txt.gz · Last modified: 2006/10/15 09:35 (external edit)