public void Update() { switch (m_state) { case FLASHSTATE.UP: if (m_timer.UpdateAndTest()) { m_state = FLASHSTATE.HOLD; m_timer = new Timer(Mathf.Clamp(m_holdTime - Random.Range(0f, m_holdTime * m_chanceForFLash), 0f, m_holdTime)); } break; case FLASHSTATE.HOLD: if (m_timer.UpdateAndTest()) { m_state = FLASHSTATE.DOWN; m_timer = new Timer(Mathf.Clamp(m_rampDownTime - Random.Range(0f, m_holdTime * m_chanceForFLash), 0f, m_rampDownTime)); } break; case FLASHSTATE.DOWN: if (m_timer.UpdateAndTest()) { m_state = FLASHSTATE.OFF; m_timer = null; } break; } }
public void Update() { switch (state) { case FLASHSTATE.UP: if (timer.UpdateAndTest()) { state = FLASHSTATE.HOLD; timer = new Timer(holdTime); } break; case FLASHSTATE.HOLD: if (timer.UpdateAndTest()) { state = FLASHSTATE.DOWN; timer = new Timer(rampDownTime); } break; case FLASHSTATE.DOWN: if (timer.UpdateAndTest()) { state = FLASHSTATE.OFF; timer = null; } break; } }
public static byte flashRead(UInt32 address) { address &= 0xFFFF; switch (flashReadState) { case FLASHSTATE.FLASH_READ_ARRAY: return(flashSaveMemory[(flashBank << 16) + address]); case FLASHSTATE.FLASH_AUTOSELECT: switch (address & 0xFF) { case 0: return(flashManufacturerID); case 1: return(flashDeviceID); } break; case FLASHSTATE.FLASH_ERASE_COMPLETE: flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; return(0xFF); } ; return(0); }
public static void reset() { //SRAM = new Byte[65536]; flashSaveMemory = new byte[SIZE_FLASH1M]; for (int i = 0; i < flashSaveMemory.Length; i++) { flashSaveMemory[i] = 0xFF; } flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; flashSize = SIZE_FLASH512; flashDeviceID = 0x1b; flashManufacturerID = 0x32; flashBank = 0; }
public void ClashFlash() { m_timer = new Timer(Mathf.Clamp(m_rampUpTime - Random.Range(0f, m_rampUpTime * m_chanceForFLash), 0f, m_rampUpTime)); m_state = FLASHSTATE.UP; //Debug.Log("Flash Called from Clash"); }
public static object flashWrite(UInt32 address, byte data) { address &= 0xFFFF; switch (flashState) { case FLASHSTATE.FLASH_READ_ARRAY: if (address == 0x5555 && data == 0xAA) { flashState = FLASHSTATE.FLASH_CMD_1; } break; case FLASHSTATE.FLASH_CMD_1: if (address == 0x2AAA && data == 0x55) { flashState = FLASHSTATE.FLASH_CMD_2; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_CMD_2: if (address == 0x5555) { if (data == 0x90) { flashState = FLASHSTATE.FLASH_AUTOSELECT; flashReadState = FLASHSTATE.FLASH_AUTOSELECT; } else if (data == 0x80) { flashState = FLASHSTATE.FLASH_CMD_3; } else if (data == 0xF0) { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } else if (data == 0xA0) { flashState = FLASHSTATE.FLASH_PROGRAM; } else if (data == 0xB0 && flashSize == SIZE_FLASH1M) { flashState = FLASHSTATE.FLASH_SETBANK; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_CMD_3: if (address == 0x5555 && data == 0xAA) { flashState = FLASHSTATE.FLASH_CMD_4; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_CMD_4: if (address == 0x2AAA && data == 0x55) { flashState = FLASHSTATE.FLASH_CMD_5; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_CMD_5: // SECTOR ERASE if (data == 0x30) { for (int i = 0; i < 0x1000; i++) { flashSaveMemory[(flashBank << 16) + (address & 0xF000) + i] = 0xFF; } flashReadState = FLASHSTATE.FLASH_ERASE_COMPLETE; } else if (data == 0x10) // CHIP ERASE { for (int i = 0; i < flashSaveMemory.Length; i++) { flashSaveMemory[i] = 0xFF; } flashReadState = FLASHSTATE.FLASH_ERASE_COMPLETE; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_AUTOSELECT: if (data == 0xF0) { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } else if (address == 0x5555 && data == 0xAA) { flashState = FLASHSTATE.FLASH_CMD_1; } else { flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; } break; case FLASHSTATE.FLASH_PROGRAM: flashSaveMemory[(flashBank << 16) + address] = data; flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; break; case FLASHSTATE.FLASH_SETBANK: if (address == 0) { flashBank = (byte)(data & 1); } flashState = FLASHSTATE.FLASH_READ_ARRAY; flashReadState = FLASHSTATE.FLASH_READ_ARRAY; break; } return(0); }