acsim_mios_c
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
acsim_mios_c [2006/09/12 00:46] – removed wrong DisplayInit() call audiocommander | acsim_mios_c [2007/11/17 16:46] (current) – move acsim.zip to "acsim" namespace smashtv | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | This page is part of the [[mios_c_simulator_-_debugger]] | ||
+ | [[acsim_console_h|ACSim_console.h]]\\ | ||
+ | [[acsim_console_c|ACSim_console.c]]\\ | ||
+ | |||
+ | [[acsim_mios_h|ACSim_mios.h]]\\ | ||
+ | **[[acsim_mios_c|ACSim_mios.c]]**\\ | ||
+ | |||
+ | [[acsim_toolbox_h|ACSim_toolbox.h]]\\ | ||
+ | [[acsim_toolbox_c|ACSim_toolbox.c]]\\ | ||
+ | [[acmididefines|ACMidiDefines.h]]\\ | ||
+ | \\ | ||
+ | This code is for viewing only and may not be up to date. You can download the files in a zip file {{acsim: | ||
+ | \\ | ||
+ | \\ | ||
+ | <code c> | ||
+ | /* | ||
+ | | ||
+ | | ||
+ | * | ||
+ | | ||
+ | | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | /* | ||
+ | * Released under GNU General Public License | ||
+ | * http:// | ||
+ | | ||
+ | * 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 TO USE IT WITHIN PROPRIETARY CLOSED-SOURCE PROJECTS | ||
+ | */ | ||
+ | |||
+ | |||
+ | #import < | ||
+ | |||
+ | #import " | ||
+ | #import " | ||
+ | #import " | ||
+ | |||
+ | |||
+ | |||
+ | #pragma mark Globals | ||
+ | // globals | ||
+ | debug_user_timer_t debug_user_timer; | ||
+ | |||
+ | 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 int debug_MIDI_byteNum = 0; | ||
+ | unsigned int debug_IIC_byteNum = 0; | ||
+ | |||
+ | unsigned char debug_bankstick_ctrl = 0x00; // 1st Bankstick preselected | ||
+ | debug_bankstick_t debug_bankstick[DEBUG_BANKSTICK_NUM]; | ||
+ | |||
+ | // " | ||
+ | __PORTCbits_t PORTCbits; | ||
+ | __PORTDbits_t PORTDbits; | ||
+ | __INTCONbits_t INTCONbits; | ||
+ | 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(" | ||
+ | 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(" | ||
+ | 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(" | ||
+ | extern void MIOS_LCD_PrintBCD2(unsigned char v) { printf(" | ||
+ | extern void MIOS_LCD_PrintBCD3(unsigned char v) { printf(" | ||
+ | extern void MIOS_LCD_PrintBCD4(unsigned int v) { printf(" | ||
+ | extern void MIOS_LCD_PrintBCD5(unsigned int v) { printf(" | ||
+ | extern void MIOS_LCD_PrintChar(unsigned char c) { | ||
+ | switch(c) { | ||
+ | case 0x00: printf(" | ||
+ | case 0x01: printf(" | ||
+ | case 0x02: printf(" | ||
+ | case 0x03: printf(" | ||
+ | case 0x04: printf(" | ||
+ | case 0x05: printf(" | ||
+ | case 0x06: printf(" | ||
+ | case 0x07: printf(" | ||
+ | default: | ||
+ | printf(" | ||
+ | } | ||
+ | } | ||
+ | extern void MIOS_LCD_PrintHex1(unsigned char h) { printf(" | ||
+ | extern void MIOS_LCD_PrintHex2(unsigned char h) { printf(" | ||
+ | extern void MIOS_LCD_PrintPreconfString(unsigned char len, code char *str[len]) { printf(" | ||
+ | extern void MIOS_LCD_PrintString(code char *str) { printf(" | ||
+ | extern void MIOS_LCD_PrintCString(code char *str) { printf(" | ||
+ | extern void MIOS_LCD_PrintMessage(code char *str) { printf(" | ||
+ | extern void MIOS_LCD_MessageStart(unsigned char delay) { | ||
+ | printf(" | ||
+ | } | ||
+ | extern void MIOS_LCD_MessageStop(void) { printf(" | ||
+ | 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(" | ||
+ | return 1; | ||
+ | } | ||
+ | if(addr > DEBUG_BANKSTICK_SIZE) { | ||
+ | printf(" | ||
+ | // | ||
+ | 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(" | ||
+ | // clear MIOS_BOX_STAT.BS_AVAILABLE on error | ||
+ | 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; | ||
+ | buffer[i] = MIOS_BANKSTICK_Read(addr + i); | ||
+ | } | ||
+ | // print buffer | ||
+ | printf(" | ||
+ | // | ||
+ | hexview(buffer, | ||
+ | // clear MIOS_BOX_STAT.BS_AVAILABLE on error | ||
+ | return *buffer; // return bs_content in readBuffer | ||
+ | } | ||
+ | |||
+ | 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(" | ||
+ | // errorcodes: | ||
+ | // | ||
+ | // | ||
+ | return 0; // 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; | ||
+ | MIOS_BANKSTICK_Write((addr + i), buffer[i]); | ||
+ | } | ||
+ | // print buffer | ||
+ | printf(" | ||
+ | // | ||
+ | hexview(buffer, | ||
+ | // errorcodes: | ||
+ | // | ||
+ | // | ||
+ | return 0; // no error | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | #pragma mark MIOS_MIDI | ||
+ | // MIOS_MIDI | ||
+ | extern void MIOS_MIDI_BeginStream(void) { | ||
+ | printf(" | ||
+ | debug_MIDI_byteNum = 0; | ||
+ | } | ||
+ | extern void MIOS_MIDI_TxBufferPut(unsigned char b) { | ||
+ | unsigned char ch; | ||
+ | printf(" | ||
+ | debug_MIDI_byteNum++; | ||
+ | #if DEBUG_MIDI_VERBOSE | ||
+ | switch(debug_MIDI_byteNum) { | ||
+ | case 1: | ||
+ | // Channel Voice | ||
+ | ch = (b & 0x0f) + 1; | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | if( (b> | ||
+ | // System Common | ||
+ | if( (b==MIDI_SYSEX) ) { printf(" | ||
+ | if( (b==MIDI_TIMECODE) ) { printf(" | ||
+ | if( (b==MIDI_SONG_POSITION_POINTER) ) { printf(" | ||
+ | if( (b==MIDI_SONG_SELECT) ) { printf(" | ||
+ | if( (b==MIDI_TUNE_REQUEST) ) { printf(" | ||
+ | if( (b==MIDI_EOX) ) { printf(" | ||
+ | // System Realtime | ||
+ | if( (b==MIDI_CLOCK) ) { printf(" | ||
+ | if( (b==MIDI_START) ) { printf(" | ||
+ | if( (b==MIDI_CONTINUE) ) { printf(" | ||
+ | if( (b==MIDI_STOP) ) { printf(" | ||
+ | if( (b==MIDI_ACTIVE_SENSING) ) { printf(" | ||
+ | if( (b==MIDI_RESET) ) { printf(" | ||
+ | break; | ||
+ | case 2: | ||
+ | case 3: | ||
+ | printf(" | ||
+ | break; | ||
+ | } | ||
+ | // reset counter for System Realtime Bytes | ||
+ | if(b >= MIDI_CLOCK) { debug_MIDI_byteNum = 0; } | ||
+ | #endif | ||
+ | } | ||
+ | extern void MIOS_MIDI_EndStream(void) { | ||
+ | debug_MIDI_byteNum = 0; | ||
+ | printf(" | ||
+ | } | ||
+ | |||
+ | extern unsigned char MIOS_MIDI_MergerGet(void) { return 0; } // not yet supported! | ||
+ | extern void MIOS_MIDI_MergerSet(unsigned char mode) { return; } // not yet supported! | ||
+ | |||
+ | /* | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | */ | ||
+ | |||
+ | #pragma mark MIOS_TIMER | ||
+ | // MIOS_TIMER | ||
+ | extern void MIOS_TIMER_Init(unsigned char mode, unsigned int period) { | ||
+ | debug_user_timer.TIMER_ENABLED = TRUE; | ||
+ | return; | ||
+ | } | ||
+ | extern void MIOS_TIMER_Start(void) { return; } | ||
+ | extern void MIOS_TIMER_Stop(void) { | ||
+ | debug_user_timer.TIMER_ENABLED = FALSE; | ||
+ | return; | ||
+ | } | ||
+ | extern void MIOS_TIMER_ReInit(unsigned char mode, unsigned int period) { | ||
+ | MIOS_TIMER_Init(mode, | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | |||
+ | #pragma mark MIOS_IIC | ||
+ | // MIOS_IIC | ||
+ | extern void MIOS_IIC_Start(void) { | ||
+ | debug_IIC_byteNum = 0; | ||
+ | printf(" | ||
+ | } | ||
+ | extern void MIOS_IIC_Stop(void) { | ||
+ | printf(" | ||
+ | } | ||
+ | extern unsigned char MIOS_IIC_ByteSend(unsigned char b) { | ||
+ | printf(" | ||
+ | #if DEBUG_SPEAKJET_VERBOSE | ||
+ | if(debug_IIC_byteNum == 1) { | ||
+ | // MSA controls | ||
+ | switch(b) { | ||
+ | case 0: case 1: case 2: case 3: case 4: case 5: case 6: printf(" | ||
+ | case 7: printf(" | ||
+ | case 8: printf(" | ||
+ | case 14: printf(" | ||
+ | case 15: printf(" | ||
+ | case 16: printf(" | ||
+ | case 20: printf(" | ||
+ | |||
+ | case 21: printf(" | ||
+ | case 22: printf(" | ||
+ | case 23: printf(" | ||
+ | case 24: printf(" | ||
+ | case 25: printf(" | ||
+ | case 26: printf(" | ||
+ | |||
+ | case 28: printf(" | ||
+ | case 29: printf(" | ||
+ | case 30: printf(" | ||
+ | case 31: printf(" | ||
+ | |||
+ | default: | ||
+ | if(b > 127) { | ||
+ | if(b < 200) { | ||
+ | printf(" | ||
+ | } else if(b < 255) { | ||
+ | printf(" | ||
+ | } else { | ||
+ | printf(" | ||
+ | } | ||
+ | } | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | // SCP controls | ||
+ | switch(b) { | ||
+ | case SCP_ESCAPE: | ||
+ | case SCP_EXIT: | ||
+ | case SCP_READY: | ||
+ | case SCP_CLEAR_BUFFER: | ||
+ | case SCP_START: | ||
+ | case SCP_STOP: | ||
+ | case SCP_MEMTYPE: | ||
+ | case SCP_MEMADDR: | ||
+ | case SCP_MEMWRT: | ||
+ | case SCP_RESET: | ||
+ | } | ||
+ | #endif | ||
+ | debug_IIC_byteNum++; | ||
+ | return 1; | ||
+ | } | ||
+ | extern unsigned char MIOS_IIC_ByteReceive(void) { | ||
+ | printf(" | ||
+ | return 1; | ||
+ | } | ||
+ | extern void MIOS_IIC_AckSend(void) { printf(" | ||
+ | extern void MIOS_IIC_NakSend(void) { printf(" | ||
+ | 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; | ||
+ | case 1: return 0xFD; | ||
+ | case 2: return 0xFB; | ||
+ | case 3: return 0xF7; | ||
+ | case 4: return 0xEF; | ||
+ | case 5: return 0xDF; | ||
+ | case 6: return 0xBF; | ||
+ | case 7: return 0x7F; | ||
+ | default: | ||
+ | return 0; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | extern unsigned char MIOS_HLP_GetBitORMask(unsigned char value) { | ||
+ | switch(value) { | ||
+ | case 0: return 0x1; | ||
+ | case 1: return 0x2; | ||
+ | case 2: return 0x4; | ||
+ | case 3: return 0x8; | ||
+ | case 4: return 0x10; | ||
+ | case 5: return 0x20; | ||
+ | case 6: return 0x40; | ||
+ | case 7: return 0x80; | ||
+ | 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-/ | ||
+ | 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(" | ||
+ | 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; | ||
+ | } | ||
+ | |||
+ | |||
+ | </ |