[VM][EVENT] Add remove_context_cpu().This may not effect to MAIN_CPU(id==0).
message("* vm/common_vm")
-SET(THIS_LIB_VERSION 2.18.1)
+SET(THIS_LIB_VERSION 2.18.2)
#include(cotire)
set(s_vm_common_vm_srcs
virtual void __FASTCALL do_dma() { }
// cpu
- virtual int run(int clock)
+ virtual int __FASTCALL run(int clock)
{
// when clock == -1, run one opecode
return (clock == -1 ? 1 : clock);
return d_cpu[num].device->run(arg)
-int EVENT::run_cpu(uint32_t num, int cycles)
+int __FASTCALL EVENT::run_cpu(uint32_t num, int cycles)
{
if(num < MAX_CPU) {
uint32_t dom_num = cpu_type[num];
void mix_sound(int samples);
void* get_event(int index);
- int run_cpu(uint32_t num, int cycles);
+ int __FASTCALL run_cpu(uint32_t num, int cycles);
#ifdef _DEBUG_LOG
bool initialize_done;
int rechannel_sound_in_data(int32_t*dst, int16_t* src, int dst_channels, int src_channels, int samples);
template <class T>
- void set_context_cpu(T* device, uint32_t clocks = CPU_CLOCKS)
+ int set_context_cpu(T* device, uint32_t clocks = CPU_CLOCKS)
{
assert(dcount_cpu < MAX_CPU);
int index = dcount_cpu++;
d_cpu[index].accum_clocks = 0;
set_cpu_type(device, index);
for(int k = 0; k < 6; k++) cpu_update_clocks[index][k] = d_cpu[index].update_clocks * k;
+ return index;
+ }
+ template <class T>
+ bool remove_context_cpu(T* device, int num)
+ {
+ if(num <= 0) return false; // Number one must not be removed.
+ if(num >= MAX_CPU) return false;
+ if(num >= dcount_cpu) return false;
+ if(dcount_cpu <= 1) return false;
+ // Note: This function is dangerous.
+ if(d_cpu[num].device != device) return false;
+ if(d_cpu[num].device == NULL) return false;
+ if(dcount_cpu == 2) {
+ d_cpu[1].device = (DEVICE *)NULL;
+ d_cpu[1].cpu_clocks = 0;
+ d_cpu[1].accum_clocks = 0;
+ cpu_type[1] = EVENT_CPUTYPE_GENERIC;
+ dcount_cpu = 1;
+ for(int k = 0; k < 6; k++) cpu_update_clocks[1][k] = d_cpu[1].update_clocks * k;
+ } else {
+ for(int i = num; i < (dcount_cpu - 1); i++) {
+ d_cpu[i].device = d_cpu[i + 1].device;
+ d_cpu[i].cpu_clocks = d_cpu[i + 1].cpu_clocks;
+ d_cpu[i].accum_clocks = d_cpu[i + 1].accum_clocks;
+ cpu_type[i] = cpu_type[i + 1];
+ }
+ int n = dcount_cpu - 1;
+ d_cpu[n].device = (DEVICE *)NULL;
+ d_cpu[n].cpu_clocks = 0;
+ d_cpu[n].accum_clocks = 0;
+ cpu_type[n] = EVENT_CPUTYPE_GENERIC;
+ for(int i = 1; i < dcount_cpu; i++) {
+ for(int k = 0; k < 6; k++) cpu_update_clocks[i][k] = d_cpu[i].update_clocks * k;
+ }
+ dcount_cpu = dcount_cpu - 1;
+ }
+ return true;
}
void set_secondary_cpu_clock(DEVICE* device, uint32_t clocks)
{
virtual void initialize();
virtual void release();
virtual void reset();
- virtual int run(int clock);
+ virtual int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc();
uint32_t get_next_pc();
void initialize();
void release();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
bool process_state(FILEIO* state_fio, bool loading);
#ifdef USE_DEBUGGER
void initialize();
void release();
void reset();
- int run(int icount);
+ int __FASTCALL run(int icount);
uint32_t __FASTCALL read_signal(int id);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
void set_intr_line(bool line, bool pending, uint32_t bit);
void initialize();
void release();
void reset();
- int run(int cycles);
+ int __FASTCALL run(int cycles);
uint32_t __FASTCALL read_signal(int id);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
void set_intr_line(bool line, bool pending, uint32_t bit);
/* ---------------------------------------------------------------------------
opecodes
--------------------------------------------------------------------------- */
- void run_one_opecode();
+ void __FASTCALL run_one_opecode();
void check_interrupt();
//void OP(uint8_t code);
public:
// common functions
void initialize();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
bool process_state(FILEIO* state_fio, bool loading);
~I8080_BASE() {}
virtual void initialize();
virtual void reset();
- virtual int run(int clock);
+ virtual __FASTCALL int run(int clock);
virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t __FASTCALL read_signal(int ch);
void set_intr_line(bool line, bool pending, uint32_t bit);
virtual void initialize();
virtual void release();
virtual void reset();
- virtual int run(int icount);
+ virtual int __FASTCALL run(int icount);
virtual uint32_t __FASTCALL read_signal(int id);
virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
virtual void set_intr_line(bool line, bool pending, uint32_t bit);
virtual void __FASTCALL do_dma() {}
// cpu
- virtual int run(int clock)
+ virtual int __FASTCALL run(int clock)
{
// when clock == -1, run one opecode
return (clock == -1 ? 1 : clock);
// common functions
virtual void initialize();
virtual void reset();
- virtual int run(int clock);
+ virtual int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
void set_intr_line(bool line, bool pending, uint32_t bit)
~M6502() {}
void initialize();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
bool process_state(FILEIO* state_fio, bool loading);
};
~N2A03() {}
void initialize();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
bool process_state(FILEIO* state_fio, bool loading);
};
// common functions
virtual void initialize();
virtual void reset();
- virtual int run(int clock);
+ virtual int __FASTCALL run(int clock);
virtual void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc()
void initialize() override;
void release();
void reset() override;
- int run(int clock) override;
+ int __FASTCALL run(int clock) override;
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask) override;
bool process_state(FILEIO* state_fio, bool loading);
// common functions
void reset();
virtual void initialize();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
bool process_state(FILEIO* state_fio, bool loading);
virtual void initialize();
virtual void release();
void reset();
- virtual int run(int icount);
+ virtual int __FASTCALL run(int icount);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc();
uint32_t get_next_pc();
~MCS48() {}
void initialize();
void release();
- int run(int icount);
+ int __FASTCALL run(int icount);
bool process_state(FILEIO* state_fio, bool loading);
#ifdef USE_DEBUGGER
bool is_cpu()
// common functions
void initialize();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc()
{
// common functions
void initialize();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc()
{
void initialize();
void release();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc();
uint32_t get_next_pc();
void initialize();
void release();
void reset();
- int run(int clock);
+ int __FASTCALL run(int clock);
void __FASTCALL write_signal(int id, uint32_t data, uint32_t mask);
uint32_t get_pc();
uint32_t get_next_pc();
virtual void initialize();
virtual void release();
virtual void reset();
- virtual int run(int icount);
+ virtual int __FASTCALL run(int icount);
virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
};
virtual void initialize();
virtual void reset();
void event_frame();
- int run(int clock);
+ int __FASTCALL run(int clock);
virtual bool process_state(FILEIO* state_fio, bool loading);
~Z80();
void initialize();
void reset();
- int run(int clock) override;
+ int __FASTCALL run(int clock) override;
int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
#ifdef USE_DEBUGGER