/** * mdp_host_reg_set_all_ym2612(): Set all YM2612 registers. * @param reg_struct Pointer to mdp_reg_ym2612_t struct to get the registers from. * @return MDP error code. */ static int mdp_host_reg_set_all_ym2612(void *reg_struct) { mdp_reg_ym2612_t *reg_ym2612 = (mdp_reg_ym2612_t*)reg_struct; int i; for (i = 0; i < 0x100; i++) { YM2612_Write(0, i); YM2612_Write(1, reg_ym2612->regs[0][i]); YM2612_Write(2, i); YM2612_Write(3, reg_ym2612->regs[1][i]); } return MDP_ERR_OK; }
//WRITE8_DEVICE_HANDLER( ym2612_w ) void ym2612_w(UINT8 ChipID, offs_t offset, UINT8 data) { //ym2612_state *info = get_safe_token(device); ym2612_state *info = &YM2612Data[ChipID]; switch(EMU_CORE) { case EC_MAME: ym2612_write(info->chip, offset & 3, data); break; #ifdef ENABLE_ALL_CORES case EC_GENS: YM2612_Write(info->chip, (unsigned char)(offset & 0x03), data); break; #endif } }
unsigned char *GYM_Next(unsigned char *gym_start, unsigned char *gym_pos, unsigned int gym_size, unsigned int gym_loop) { unsigned char c, c2; unsigned char dac_data[1600]; int *buf[2]; int dacMax = 0, i = 0; int oldPos = 0; double curPos = 0; double dacSize; int step; int *dacBuf[2]; int retCode = 1; YM_Buf[0] = PSG_Buf[0] = buf[0] = Seg_L; YM_Buf[1] = PSG_Buf[1] = buf[1] = Seg_R; YM_Len = PSG_Len = 0; memset(dac_data, 0, sizeof(dac_data)); if (!gym_pos) { return 0; } if ((unsigned int)(gym_pos - gym_start) >= gym_size) { if (gym_loop) { gym_pos = jump_gym_time_pos(gym_start, gym_size, gym_loop - 1); } else { return 0; } } do { c = *gym_pos++; switch(c) { case 0: if (YM2612_Enable) { // if dacMax is zero, dacSize will be NaN - so what, we won't // be using it in that case anyway :p dacSize = (double)Seg_Lenght / dacMax; for (i = 0; i < dacMax; i++) { oldPos = (int)curPos; YM2612_Write(0, 0x2A); YM2612_Write(1, dac_data[i]); if (i == dacMax - 1) { step = Seg_Lenght - oldPos; } else { curPos += dacSize; step = (int)curPos - oldPos; } dacBuf[0] = buf[0] + (int)oldPos; dacBuf[1] = buf[1] + (int)oldPos; YM2612_DacAndTimers_Update(dacBuf, step); } YM2612_Update(buf, Seg_Lenght); } if (PSG_Enable) { if (PSG_Improv) { PSG_Update_SIN(buf, Seg_Lenght); } else { PSG_Update(buf, Seg_Lenght); } } break; case 1: c2 = *gym_pos++; if (c2 == 0x2A) { c2 = *gym_pos++; dac_data[dacMax++] = c2; } else { YM2612_Write(0, c2); c2 = *gym_pos++; YM2612_Write(1, c2); } break; case 2: c2 = *gym_pos++; YM2612_Write(2, c2); c2 = *gym_pos++; YM2612_Write(3, c2); break; case 3: c2 = *gym_pos++; PSG_Write(c2); break; } } while (c); return gym_pos; }