User Tools

Site Tools


acsim_mios_c

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
acsim_mios_c [2007/10/06 12:18]
stryd_one
acsim_mios_c [2007/11/17 16:46]
smashtv move acsim.zip to "acsim" namespace
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 {{acsim.zip|.zip file here}}. If you make any updates, please send them to stryd_one and he will update the zip for you. 
-\\ 
-\\ 
-<code c> 
-/* 
- ​* ​ ACSim_mios.c 
- ​* ​ v 0.0.7 
- * 
- ​* ​ 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 TO USE IT WITHIN PROPRIETARY CLOSED-SOURCE PROJECTS 
- */ 
- 
- 
-#import <​Stdio.h>​ 
- 
-#import "​ACMidiDefines.h"​ 
-#import "​ACSim_mios.h"​ 
-#import "​ACSim_toolbox.h"​ 
- 
- 
- 
-#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];​ 
- 
-// "​pic18f452.h"​ 
-__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("​\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("​%4.4i",​v);​ } 
-extern void MIOS_LCD_PrintBCD5(unsigned int v) { printf("​%5.5i",​v);​ } 
-extern void MIOS_LCD_PrintChar(unsigned char c) {  
- switch(c) { 
- case 0x00: printf("​_(0)"​);​ break; 
- case 0x01: printf("​_(1)"​);​ break; 
- case 0x02: printf("​-(2)"​);​ break; 
- case 0x03: printf("​-(3)"​);​ break; 
- case 0x04: printf("​-(4)"​);​ break; 
- case 0x05: printf("​-(5)"​);​ break; 
- case 0x06: printf("​=(6)"​);​ break; 
- case 0x07: printf("​=(7)"​);​ break; 
- default: 
- 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); } 
- // 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;​i<​64;​i++) { 
- buffer[i] = MIOS_BANKSTICK_Read(addr + i); 
- } 
- // print buffer 
- printf("​\n**MIOS_BANKSTICK_ReadPage at 0x%X \n", addr); 
- //​hexview(buffer,​ sizeof(buffer));​ 
- hexview(buffer,​ 64); 
- // 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("​\n**MIOS_BANKSTICK_Write(%X):​ %X", addr, value); } 
- // errorcodes:​ 0x00:​ no error 
- //​ 0x01:​ byte mismatch (write failed) -- only set if verify enabled 
- //​ 0x02:​ BankStick not available 
- 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;​i<​64;​i++) { 
- MIOS_BANKSTICK_Write((addr + i), buffer[i]); 
- } 
- // print buffer 
- printf("​\n**MIOS_BANKSTICK_WritePage at 0x%X \n", addr); 
- //​hexview(buffer,​ sizeof(buffer));​ 
- hexview(buffer,​ 64); 
- // errorcodes:​ 0x00:​ no error 
- //​ 0x01:​ byte mismatch (write failed) -- only set if verify enabled 
- //​ 0x02:​ BankStick not available 
- return 0; // no error 
-} 
- 
- 
- 
- 
-#pragma mark MIOS_MIDI 
-// MIOS_MIDI 
-extern void MIOS_MIDI_BeginStream(void) {  
- printf("​\n**MIOS_MIDI_BeginStream**"​); ​ 
- debug_MIDI_byteNum = 0; 
-} 
-extern void MIOS_MIDI_TxBufferPut(unsigned char b) {  
- unsigned char ch; 
- printf("​\n**MIOS_MIDI_TxBufferPut,​ %i", b); 
- debug_MIDI_byteNum++;​ 
-#if DEBUG_MIDI_VERBOSE 
- switch(debug_MIDI_byteNum) { 
- case 1: 
- // Channel Voice 
- ch = (b & 0x0f) + 1; 
- if( (b>​=MIDI_NOTE_OFF) && (b<​MIDI_NOTE_ON) ) { printf("​\t\t\tMIDI_NOTE_OFF,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_NOTE_ON) && (b<​MIDI_POLY_AFTER) ) { printf("​\t\t\tMIDI_NOTE_ON,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_POLY_AFTER) && (b<​MIDI_CC) ) { printf("​\t\t\tMIDI_POLY_AFTER,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_CC) && (b<​MIDI_PRG) ) { printf("​\t\t\tMIDI_CC,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_PRG) && (b<​MIDI_CH_AFTER) ) { printf("​\t\t\tMIDI_PRG,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_CH_AFTER) && (b<​MIDI_PITCH) ) { printf("​\t\t\tMIDI_CH_AFTER,​ CH %i",​ch);​ } 
- if( (b>​=MIDI_PITCH) && (b<​MIDI_SYSEX) ) { printf("​\t\t\tMIDI_NOTE_OFF,​ CH %i",​ch);​ } 
- // System Common 
- if( (b==MIDI_SYSEX) ) { printf("​\t\t\tMIDI_SYSEX"​);​ } 
- if( (b==MIDI_TIMECODE) ) { printf("​\t\t\tMIDI_TIMECODE"​);​ } 
- if( (b==MIDI_SONG_POSITION_POINTER) ) { printf("​\t\t\tMIDI_SONG_POSITION_POINTER"​);​ } 
- if( (b==MIDI_SONG_SELECT) ) { printf("​\t\t\tMIDI_SONG_SELECT"​);​ } 
- if( (b==MIDI_TUNE_REQUEST) ) { printf("​\t\t\tMIDI_TUNE_REQUEST"​);​ } 
- if( (b==MIDI_EOX) ) { printf("​\t\t\tMIDI_END_OF_SYSEX"​);​ } 
- // System Realtime 
- if( (b==MIDI_CLOCK) ) { printf("​\t\t\tMIDI_CLOCK"​);​ } 
- if( (b==MIDI_START) ) { printf("​\t\t\tMIDI_START"​);​ } 
- if( (b==MIDI_CONTINUE) ) { printf("​\t\t\tMIDI_CONTINUE"​);​ } 
- if( (b==MIDI_STOP) ) { printf("​\t\t\tMIDI_STOP"​);​ } 
- if( (b==MIDI_ACTIVE_SENSING) ) { printf("​\t\t\tMIDI_ACTIVE_SENSING"​);​ } 
- if( (b==MIDI_RESET) ) { printf("​\t\t\tMIDI_RESET"​);​ } 
- break; 
- case 2: 
- case 3: 
- printf("​\t\t\tMIDI_PARAM (BYTE #%i)", b); 
- 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("​\n**MIOS_MIDI_EndStream**"​); ​ 
-} 
- 
-extern unsigned char MIOS_MIDI_MergerGet(void) { return 0; } // not yet supported! 
-extern void MIOS_MIDI_MergerSet(unsigned char mode) { return; } // not yet supported! 
- 
-/* 
- ​extern void MIOS_MIDI_DeviceIDAutoSet(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_DeviceIDGet(void) __wparam; 
- ​extern void MIOS_MIDI_DeviceIDSet(unsigned char device_id) __wparam; 
- ​extern void MIOS_MIDI_Init(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_InterfaceGet(void) __wparam; 
- ​extern void MIOS_MIDI_InterfaceSet(unsigned char interface) __wparam; 
- ​extern void MIOS_MIDI_InterfaceAutoSet(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_RxBufferFree(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_RxBufferGet(void) __wparam; 
- ​extern void MIOS_MIDI_RxBufferPut(unsigned char b) __wparam; 
- ​extern unsigned char MIOS_MIDI_RxBufferUsed(void) __wparam; 
- ​extern void MIOS_MIDI_TxBufferFlush(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_TxBufferFree(void) __wparam; 
- ​extern unsigned char MIOS_MIDI_TxBufferGet(void) __wparam; 
- ​extern void MIOS_MIDI_TxBufferPut(unsigned char b) __wparam; 
- ​extern unsigned char MIOS_MIDI_TxBufferUsed(void) __wparam; 
- */ 
- 
-#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,​ period); 
- return; ​ 
-} 
- 
- 
-#pragma mark MIOS_IIC 
-// MIOS_IIC 
-extern void MIOS_IIC_Start(void) { 
- debug_IIC_byteNum = 0; 
- 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:​ 0x%x  \t %i  \t %c", b, b, b);  
-#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("​ \t MSA_PAUSE"​);​ break;​ 
- case 7: printf("​ \t MSA_NEXTFAST"​);​ break;​ 
- case 8: printf("​ \t MSA_NEXTSLOW"​);​ break;​ 
- case 14: printf("​ \t MSA_NEXTHIGH"​);​ break;​ 
- case 15: printf("​ \t MSA_NEXTLOW"​);​ break;​ 
- case 16: printf("​ \t MSA_WAIT"​);​ break;​ 
- case 20: printf("​ \t MSA_VOLUME"​);​ break;​ 
-  
- case 21: printf("​ \t MSA_SPEED"​);​ break;​ 
- case 22: printf("​ \t MSA_PITCH"​);​ break;​ 
- case 23: printf("​ \t MSA_BEND"​);​ break;​ 
- case 24: printf("​ \t MSA_PORTCTR"​);​ break;​ 
- case 25: printf("​ \t MSA_PORT"​);​ break;​ 
- case 26: printf("​ \t MSA_REPEAT"​);​ break;​ 
-  
- case 28: printf("​ \t MSA_CALLPHRASE"​);​ break;​ 
- case 29: printf("​ \t MSA_GOTOPHRASE"​);​ break;​ 
- case 30: printf("​ \t MSA_DELAY"​);​ break;​ 
- case 31: printf("​ \t MSA_RESET"​);​ break;​ 
-  
- default: 
- if(b > 127) { 
- if(b < 200) { 
- printf("​ \t MSA_SOUNDCODE_PHONEME"​);​ 
- } else if(b < 255) { 
- printf("​ \t MSA_SOUNDCODE_FX"​);​ 
- } else { 
- printf("​ \t MSA unknown: %i", b); 
- } 
- } 
- break; 
- } 
- } 
- // SCP controls 
- switch(b) { 
- case SCP_ESCAPE:​ printf("​ \t --- ENTER SCP MODE ---"​);​ break;​ 
- case SCP_EXIT:​ printf("​ \t --- LEAVE SCP MODE ___"​);​ break;​ 
- case SCP_READY:​ printf("​ \t READY"​);​ break;​ 
- case SCP_CLEAR_BUFFER:​ printf("​ \t CLEAR BUFFER"​);​ break;​ 
- case SCP_START:​ printf("​ \t START"​);​ break;​ 
- case SCP_STOP:​ printf("​ \t STOP"​);​ break;​ 
- case SCP_MEMTYPE:​ printf("​ \t  ^  MEMTYPE (REG:0 EEPROM_L:2 EEPROM_H:​3)"​);​ break;​ 
- case SCP_MEMADDR:​ printf("​ \t  ^  MEMADDR (freq:1-5 lvl:11-15 dist:6, vol:​7)"​);​ break;​ 
- case SCP_MEMWRT:​ printf("​ \t  ^  STORED"​);​ break;​ 
- case SCP_RESET:​ printf("​ \t RESET"​);​ break;​ 
- } 
-#endif 
- debug_IIC_byteNum++;​ 
- 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; 
-} 
- 
- 
-</​code>​ 
acsim_mios_c.txt ยท Last modified: 2007/11/17 16:46 by smashtv