OSDN Git Service

[VM] Add vm_template.h . This class, VM_TEMPLATE:: must be mother of VM:: .See fm7...
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 29 Jul 2018 16:29:24 +0000 (01:29 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 29 Jul 2018 16:29:24 +0000 (01:29 +0900)
131 files changed:
source/src/vm/315-5124.h
source/src/vm/am9511.h
source/src/vm/and.h
source/src/vm/ay_3_891x.h
source/src/vm/beep.h
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/datarec.h
source/src/vm/debugger.h
source/src/vm/device.h
source/src/vm/event.h
source/src/vm/fm7/bubblecasette.h
source/src/vm/fm7/display.cpp
source/src/vm/fm7/dummydevice.h
source/src/vm/fm7/fm7.cpp
source/src/vm/fm7/fm7.h
source/src/vm/fm7/fm7_display.h
source/src/vm/fm7/fm7_keyboard.h
source/src/vm/fm7/fm7_mainio.cpp
source/src/vm/fm7/fm7_mainio.h
source/src/vm/fm7/fm7_mainmem.cpp
source/src/vm/fm7/fm7_mainmem.h
source/src/vm/fm7/fm8_mainio.cpp
source/src/vm/fm7/fm8_mainio.h
source/src/vm/fm7/fm_bubblecasette.cpp
source/src/vm/fm7/hd6844.h
source/src/vm/fm7/jcommcard.cpp
source/src/vm/fm7/jcommcard.h
source/src/vm/fm7/joystick.cpp
source/src/vm/fm7/joystick.h
source/src/vm/fm7/kanjirom.cpp
source/src/vm/fm7/kanjirom.h
source/src/vm/fm7/keyboard.cpp
source/src/vm/fm7/mb61vh010.h
source/src/vm/gamegear/keyboard.h
source/src/vm/hd146818p.h
source/src/vm/hd44102.h
source/src/vm/hd46505.h
source/src/vm/hd6301.h
source/src/vm/hd63484.h
source/src/vm/huc6280.h
source/src/vm/i286.h
source/src/vm/i386.h
source/src/vm/i8080.h
source/src/vm/i8080_base.h
source/src/vm/i8155.h
source/src/vm/i8237.cpp
source/src/vm/i8237.h
source/src/vm/i8251.h
source/src/vm/i8253.h
source/src/vm/i8255.h
source/src/vm/i8259.h
source/src/vm/i86.h
source/src/vm/io.h
source/src/vm/ld700.h
source/src/vm/libcpu_newdev/device.cpp
source/src/vm/libcpu_newdev/device.h
source/src/vm/libcpu_newdev/i386.h
source/src/vm/libcpu_newdev/i386_base.h
source/src/vm/libcpu_newdev/i86.h
source/src/vm/libcpu_newdev/i86_base.h
source/src/vm/libcpu_newdev/libcpu_i286/i286.cpp
source/src/vm/libcpu_newdev/libcpu_i286/i86.cpp
source/src/vm/libcpu_newdev/libcpu_i286/i86.h
source/src/vm/ls244.h
source/src/vm/ls393.h
source/src/vm/m6502.h
source/src/vm/mb8861.h
source/src/vm/mb8877.h
source/src/vm/mc6800.h
source/src/vm/mc6801.h
source/src/vm/mc6809.h
source/src/vm/mc6820.h
source/src/vm/mc6840.h
source/src/vm/mc6844.h
source/src/vm/mc6847.h
source/src/vm/mc6850.h
source/src/vm/mcs48.h
source/src/vm/memory.h
source/src/vm/msm5205.h
source/src/vm/msm5832.cpp
source/src/vm/msm58321.cpp
source/src/vm/msm58321.h
source/src/vm/mz1p17.h
source/src/vm/nand.h
source/src/vm/noise.h
source/src/vm/nor.h
source/src/vm/not.h
source/src/vm/or.h
source/src/vm/pc6031.h
source/src/vm/pc80s31k.h
source/src/vm/pcengine/pce.h
source/src/vm/pcm1bit.h
source/src/vm/prnfile.h
source/src/vm/ptf20.h
source/src/vm/rp5c01.h
source/src/vm/scsi_cdrom.h
source/src/vm/scsi_dev.h
source/src/vm/scsi_hdd.h
source/src/vm/scsi_host.h
source/src/vm/sn76489an.h
source/src/vm/sy6522.h
source/src/vm/t3444a.h
source/src/vm/tf20.h
source/src/vm/tms3631.h
source/src/vm/tms9918a.h
source/src/vm/tms9995.h
source/src/vm/upd16434.h
source/src/vm/upd1990a.h
source/src/vm/upd4991a.h
source/src/vm/upd71071.h
source/src/vm/upd7220.h
source/src/vm/upd765a.h
source/src/vm/upd7752.h
source/src/vm/upd7801.h
source/src/vm/upd7810.h
source/src/vm/v9938.cpp
source/src/vm/v9938.h
source/src/vm/v99x8.h
source/src/vm/vm_template.h [new file with mode: 0644]
source/src/vm/w3100a.h
source/src/vm/ym2151.h
source/src/vm/ym2203.h
source/src/vm/ym2413.h
source/src/vm/z80.cpp
source/src/vm/z80.h
source/src/vm/z80ctc.h
source/src/vm/z80dma.h
source/src/vm/z80pio.h
source/src/vm/z80sio.h
source/src/vm/z80tvgame/joystick.h
source/src/vm/z80tvgame/memory.h

index b60aae3..156e41f 100644 (file)
@@ -93,7 +93,7 @@ private:
        bool __315_5124_LIMIT_SPRITES;
 
 public:
-       _315_5124(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       _315_5124(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                set_device_name(_T("315-5124"));
index 202b44d..c20080c 100644 (file)
@@ -48,7 +48,7 @@ private:
        void apu_write_command ( uint8_t cmd );
        
 public:
-       AM9511(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       AM9511(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                _APU_CLOCK = 1.0e6;
                set_device_name(_T("AM9511"));
index 285e0ca..0125cff 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool prev, first;
        
 public:
-       AND(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       AND(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                bits_mask = bits_in = 0;
index 01ffdd7..c977617 100644 (file)
@@ -72,7 +72,7 @@ private:
        void update_event();
        
 public:
-       AY_3_891X(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       AY_3_891X(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 #ifdef SUPPORT_AY_3_891X_PORT
                for(int i = 0; i < 2; i++) {
index 1bae8d0..e80a775 100644 (file)
@@ -34,7 +34,7 @@ private:
        bool mute;
        
 public:
-       BEEP(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       BEEP(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                set_device_name(_T("Beep Generator"));
index 890143a..de2d4ec 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 1.5.0)
+SET(THIS_LIB_VERSION 1.6.0)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
@@ -121,6 +121,8 @@ set(s_vm_common_vm_srcs
 #  COTIRE_PREFIX_HEADER_IGNORE_PATH ${SRC_BASE_DIR}/vm/mame
 #)
 
+add_definitions(-D_LIBRARY_NAME=libCSPcommon_vm.${THIS_LIB_VERSION})
+
 if(WIN32)
 include (GenerateExportHeader)
 #add_library(CSPcommon_vm SHARED
index c747142..ea1f139 100644 (file)
@@ -106,7 +106,7 @@ private:
        int load_msx_cas_image();
        
 public:
-       DATAREC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       DATAREC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_ear);
                initialize_output_signals(&outputs_remote);
index 2144e01..002b80f 100644 (file)
@@ -60,7 +60,7 @@ private:
                }
        }
 public:
-       DEBUGGER(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       DEBUGGER(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                memset(&bp, 0, sizeof(bp));
                memset(&rbp, 0, sizeof(rbp));
index c7089e2..61a3511 100644 (file)
@@ -63,7 +63,7 @@ extern CSP_Logger *csp_logger;
 class DEVICE
 {
 protected:
-       VM* vm;
+       VM_TEMPLATE* vm;
        EMU* emu;
        OSD* osd;
 #if defined(_USE_QT)
@@ -72,7 +72,7 @@ protected:
 #endif
 
 public:
-       DEVICE(VM* parent_vm, EMU* parent_emu) : vm(parent_vm), emu(parent_emu)
+       DEVICE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : vm(parent_vm), emu(parent_emu)
        {
 #if defined(_USE_QT)
                osd = emu->get_osd();
index 65ada35..9247852 100644 (file)
@@ -201,7 +201,7 @@ private:
                }
        }
 public:
-       EVENT(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       EVENT(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                dcount_cpu = dcount_sound = 0;
                frame_event_count = vline_event_count = 0;
index 67df332..44c9670 100644 (file)
@@ -46,9 +46,6 @@ class csp_state_utils;
 
 class BUBBLECASETTE: public DEVICE {
 protected:
-       EMU *p_emu;
-       VM *p_vm;
-
        FILEIO* fio;
        
        bool is_wrote;
@@ -105,7 +102,7 @@ private:
        bool read_one_page(void);
        bool write_one_page(void);
 public:
-       BUBBLECASETTE(VM* parent_vm, EMU* parent_emu);
+       BUBBLECASETTE(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~BUBBLECASETTE();
 
        void initialize();
index bc5c853..6a84e82 100644 (file)
 #include "./kanjirom.h"
 #include "../../statesub.h"
 
-DISPLAY::DISPLAY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+DISPLAY::DISPLAY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
 {
-       p_vm = parent_vm;
-       p_emu = parent_emu;
        ins_led = NULL;
        kana_led = NULL;
        caps_led = NULL;
@@ -135,10 +133,10 @@ void DISPLAY::reset_some_devices()
 #endif
        if((display_mode == DISPLAY_MODE_8_400L) || (display_mode == DISPLAY_MODE_1_400L)) {
                usec = 0.33 * 1000.0; 
-               p_vm->set_vm_frame_rate(55.40);
+               vm->set_vm_frame_rate(55.40);
        } else {
                usec = 0.51 * 1000.0;
-               p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+               vm->set_vm_frame_rate(FRAMES_PER_SEC);
        }
        //usec = 16.0;
        //register_event(this, EVENT_FM7SUB_VSTART, usec, false, &vstart_event_id); // NEXT CYCLE_
@@ -531,7 +529,7 @@ void DISPLAY::enter_display(void)
                subclock = subclock / 3;
        }
        if(prev_clock != subclock) {
-               p_vm->set_cpu_clock(subcpu, subclock);
+               vm->set_cpu_clock(subcpu, subclock);
        }
        prev_clock = subclock;
 }
@@ -641,7 +639,7 @@ void DISPLAY::setup_400linemode(uint8_t val)
                                }
                        } else { // 200Line
                                
-                               p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                               vm->set_vm_frame_rate(FRAMES_PER_SEC);
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                emu->set_vm_screen_size(640, 200, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
                                for(int y = 0; y < 200; y++) {
@@ -1924,7 +1922,7 @@ void DISPLAY::write_signal(int id, uint32_t data, uint32_t mask)
                                if(oldmode != display_mode) {
                                        scrntype_t *pp;
                                        if(mode320 || mode256k) {
-                                               if(oldmode == DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                                               if(oldmode == DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(FRAMES_PER_SEC);
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                                emu->set_vm_screen_size(320, 200, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
                                                for(y = 0; y < 200; y++) {
@@ -1940,13 +1938,13 @@ void DISPLAY::write_signal(int id, uint32_t data, uint32_t mask)
                                                //emu->set_vm_screen_lines(200);
                                        } else if(display_mode == DISPLAY_MODE_8_400L) {
                                                emu->set_vm_screen_size(640, 400, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
-                                               if(oldmode != DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(55.40);
+                                               if(oldmode != DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(55.40);
                                                for(y = 0; y < 400; y++) {
                                                        pp = emu->get_screen_buffer(y);
                                                        if(pp != NULL) memset(pp, 0x00, 640 * sizeof(scrntype_t));
                                                }
                                        } else {
-                                               if(oldmode == DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                                               if(oldmode == DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(FRAMES_PER_SEC);
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                                emu->set_vm_screen_size(640, 200, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
                                                for(y = 0; y < 200; y++) {
@@ -2008,7 +2006,7 @@ void DISPLAY::write_signal(int id, uint32_t data, uint32_t mask)
                                                }
                                        } else { // 200Line
                                
-                                               p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                                               vm->set_vm_frame_rate(FRAMES_PER_SEC);
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                                emu->set_vm_screen_size(640, 200, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
                                                for(int y = 0; y < 200; y++) {
@@ -2050,7 +2048,7 @@ void DISPLAY::write_signal(int id, uint32_t data, uint32_t mask)
                                if(oldmode != display_mode) {
                                        scrntype_t *pp;
                                        if(mode320 || mode256k) {
-                                               if(oldmode == DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                                               if(oldmode == DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(FRAMES_PER_SEC);
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                                emu->set_vm_screen_size(320, 200, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_WIDTH_ASPECT, WINDOW_HEIGHT_ASPECT);
                                                for(y = 0; y < 200; y++) {
@@ -2066,9 +2064,9 @@ void DISPLAY::write_signal(int id, uint32_t data, uint32_t mask)
                                                //emu->set_vm_screen_lines(200);
                                        } else { // 200 lines, 8 colors.
                                                if(display_mode == DISPLAY_MODE_8_400L) {
-                                                       if(oldmode != DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(55.40);
+                                                       if(oldmode != DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(55.40);
                                                } else {
-                                                       if(oldmode == DISPLAY_MODE_8_400L) p_vm->set_vm_frame_rate(FRAMES_PER_SEC);
+                                                       if(oldmode == DISPLAY_MODE_8_400L) vm->set_vm_frame_rate(FRAMES_PER_SEC);
                                                }
 #if !defined(FIXED_FRAMEBUFFER_SIZE)
                                                int ymax =      (display_mode == DISPLAY_MODE_8_400L) ? 400 : 200;
index 7682d21..4682b66 100644 (file)
@@ -58,7 +58,7 @@ private:
        bool clear_on_reset;
        bool clear_with_zero;
 public:
-       DUMMYDEVICE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       DUMMYDEVICE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                status = 0x00000000;
                clear_on_reset = true;
index ef720b3..46bac32 100644 (file)
@@ -61,7 +61,7 @@
 #include "./jcommcard.h"
 #endif
 
-VM::VM(EMU* parent_emu): emu(parent_emu)
+VM::VM(EMU* parent_emu): VM_TEMPLATE(parent_emu)
 {
        
        first_device = last_device = NULL;
index 8a3cd20..a8f7ebb 100644 (file)
 //#include "../../config.h"
 #include "../../common.h"
 #include "../../fileio.h"
+#include "../vm_template.h"
 
 #ifdef USE_SOUND_VOLUME
 static const _TCHAR *sound_device_caption[] = {
@@ -454,12 +455,12 @@ class FM7_JCOMMCARD;
 #endif
 class csp_state_utils;
 
-class VM {
+class VM : public VM_TEMPLATE {
 protected:
-       EMU* emu;
+//     EMU* emu;
        
        // devices
-       EVENT* event;
+//     EVENT* event;
        
        DEVICE* dummycpu;
        MC6809* maincpu;
@@ -544,7 +545,7 @@ protected:
        bool connect_320kfdc;
        bool connect_1Mfdc;
 
-       csp_state_utils *state_entry;
+       //csp_state_utils *state_entry;
 public:
        // ----------------------------------------
        // initialize
@@ -567,7 +568,6 @@ public:
        // debugger
        DEVICE *get_cpu(int index);
 #endif
-       void initialize(void);
        void connect_bus(void);
 
        void update_dipswitch(void);
@@ -638,9 +638,9 @@ public:
        void set_cpu_clock(DEVICE *cpu, uint32_t clocks);
        // devices
        DEVICE* get_device(int id);
-       DEVICE* dummy;
-       DEVICE* first_device;
-       DEVICE* last_device;
+//     DEVICE* dummy;
+//     DEVICE* first_device;
+//     DEVICE* last_device;
 };
 
 #endif
index c3c41e8..fe468cc 100644 (file)
@@ -47,9 +47,6 @@ private:
        uint16_t bit_trans_table_5[256][8];
 #endif
 protected:
-       EMU *p_emu;
-       VM *p_vm;
-
        uint32_t (DISPLAY::*read_cpu_func_table[512])(uint32_t);
        uint32_t (DISPLAY::*read_dma_func_table[512])(uint32_t);
        void (DISPLAY::*write_cpu_func_table[512])(uint32_t, uint8_t);
@@ -420,7 +417,7 @@ protected:
        }
 
 public:
-       DISPLAY(VM *parent_vm, EMU *parent_emu);
+       DISPLAY(VM_TEMPLATE* parent_vm, EMU *parent_emu);
        ~DISPLAY();
        void event_callback(int event_id, int err);
        void write_signal(int id, uint32_t data, uint32_t mask);
index fdc1879..f49fd56 100644 (file)
@@ -22,8 +22,6 @@ class BEEP;
 #endif
 class KEYBOARD : public DEVICE {
  protected:
-       VM* p_vm;
-       EMU* p_emu;
        uint8_t get_keycode_high(void);
        uint8_t get_keycode_low(void);
        void turn_on_ins_led(void);
@@ -123,7 +121,7 @@ private:
        int repeat_time_long;
        
  public:
-       KEYBOARD(VM *parent_vm, EMU *parent_emu);
+       KEYBOARD(VM_TEMPLATE* parent_vm, EMU *parent_emu);
        ~KEYBOARD();
    
        void key_up(uint32_t vk);
index 52ac614..63c71fd 100644 (file)
 #endif
 #include "../../statesub.h"
 
-FM7_MAINIO::FM7_MAINIO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+FM7_MAINIO::FM7_MAINIO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
 {
        int i;
-       p_vm = parent_vm;
-       p_emu = parent_emu;
        for(i = 0; i < 3; i++) {
                opn[i] = NULL;
        }
index aed9c22..75501f5 100644 (file)
@@ -60,9 +60,6 @@ class FM7_MAINIO : public DEVICE {
        outputs_t firq_bus;
        outputs_t nmi_bus;
  protected:
-       VM* p_vm;
-       EMU* p_emu;
-       
        uint8_t io_w_latch[0x100];
    
        /* FD00: R */
@@ -500,7 +497,7 @@ class FM7_MAINIO : public DEVICE {
 
        void decl_state_opn(void);
 public:
-       FM7_MAINIO(VM* parent_vm, EMU* parent_emu);
+       FM7_MAINIO(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~FM7_MAINIO();
        void event_vline(int v, int clock);
 
index f888eb9..5df418f 100644 (file)
 #if defined(CAPABLE_DICTROM)
 #include "kanjirom.h"
 #endif
-FM7_MAINMEM::FM7_MAINMEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+FM7_MAINMEM::FM7_MAINMEM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
 {
-       p_vm = parent_vm;
-       p_emu = parent_emu;
 #if !defined(_FM77AV_VARIANTS)
        for(int i = 0; i < 8; i++) fm7_bootroms[i] = (uint8_t *)malloc(0x200);
 #endif
index f7925de..7f5ba5a 100644 (file)
@@ -78,9 +78,6 @@ class FM7_MAINMEM : public DEVICE
        bool boot_ram_write;
 #endif
  protected:
-       EMU *p_emu;
-       VM *p_vm;
-   
        uint8_t fm7_mainmem_omote[0x8000];
        uint8_t fm7_mainmem_ura[0x7c00];
        uint8_t fm7_mainmem_basicrom[0x7c00];
@@ -225,7 +222,7 @@ class FM7_MAINMEM : public DEVICE
                return static_cast<T *>(np)->read_dma_data8(addr);
        }
  public:
-       FM7_MAINMEM(VM* parent_vm, EMU* parent_emu);
+       FM7_MAINMEM(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~FM7_MAINMEM();
        uint32_t read_data8(uint32_t addr);
        uint32_t read_dma_data8(uint32_t addr);
index 3c5b316..9df5edc 100644 (file)
@@ -27,7 +27,7 @@
 #include "./fm7_mainmem.h"
 #include "bubblecasette.h"
 
-FM8_MAINIO::FM8_MAINIO(VM* parent_vm, EMU* parent_emu) : FM7_MAINIO(parent_vm, parent_emu)
+FM8_MAINIO::FM8_MAINIO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : FM7_MAINIO(parent_vm, parent_emu)
 {
     psg = NULL;
        bubble_casette[0] = NULL;
index 044d516..5bb3cd5 100644 (file)
@@ -44,7 +44,7 @@ class FM8_MAINIO : public FM7_MAINIO {
        uint8_t get_extirq_whg(void) override;
        uint8_t get_extirq_thg(void) override;
 public:
-       FM8_MAINIO(VM* parent_vm, EMU* parent_emu);
+       FM8_MAINIO(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~FM8_MAINIO();
        
        void write_data8(uint32_t addr, uint32_t data);
index c8d2656..bbbf65f 100644 (file)
@@ -11,7 +11,7 @@
 #include "../device.h"
 #include "./bubblecasette.h"
 
-BUBBLECASETTE::BUBBLECASETTE(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+BUBBLECASETTE::BUBBLECASETTE(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
 {
        fio = NULL;
        memset(image_path, 0x00, _MAX_PATH * sizeof(_TCHAR));
@@ -20,7 +20,6 @@ BUBBLECASETTE::BUBBLECASETTE(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm,
        memset(bubble_data, 0x00, 0x20000);
        bubble_inserted = false;
        read_access = write_access = false;
-       p_emu = parent_emu;
        set_device_name(_T("FM Bubble Casette"));
 
 }
index e87ac7c..21ce137 100644 (file)
@@ -92,7 +92,7 @@ protected:
        void do_transfer_end(int ch);
        void do_irq(void);
  public:
-       HD6844(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+       HD6844(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                int i;
                for(i = 0; i < 4; i++) {
index 3cd833e..523bd7d 100644 (file)
@@ -14,7 +14,7 @@
 #include "../mc6809.h"
 #include "./jcommcard.h"
 
-FM7_JCOMMCARD::FM7_JCOMMCARD(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+FM7_JCOMMCARD::FM7_JCOMMCARD(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
 {
        n_bank = 0;
        rcb_address = 0;
index 32db9dc..0c38c8e 100644 (file)
@@ -34,7 +34,7 @@ private:
        uint8_t p_ram[0x2000];
        
 public:
-       FM7_JCOMMCARD(VM *parent_vm, EMU *parent_emu);
+       FM7_JCOMMCARD(VM_TEMPLATE* parent_vm, EMU *parent_emu);
        ~FM7_JCOMMCARD();
        void initialize(void);
        void release(void);
index 583c4d4..ecba0d6 100644 (file)
 #include "../../config.h"
 #include "../../emu.h"
 
-JOYSTICK::JOYSTICK(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+JOYSTICK::JOYSTICK(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
 {
-       p_vm = parent_vm;
-       p_emu = parent_emu;
        rawdata = NULL;
        mouse_state = NULL;
        lpt_type = 0;
@@ -32,8 +30,8 @@ JOYSTICK::~JOYSTICK()
 
 void JOYSTICK::initialize()
 {
-       rawdata = p_emu->get_joy_buffer();
-       mouse_state = p_emu->get_mouse_buffer();
+       rawdata = emu->get_joy_buffer();
+       mouse_state = emu->get_mouse_buffer();
        emulate_mouse[0] = emulate_mouse[1] = false;
        joydata[0] = joydata[1] = 0xff;
        dx = dy = 0;
@@ -71,7 +69,7 @@ void JOYSTICK::reset()
                emulate_mouse[1] = false;
                break;
        }
-       mouse_state = p_emu->get_mouse_buffer();
+       mouse_state = emu->get_mouse_buffer();
 #endif 
        if(opn != NULL) {
                opn->write_signal(SIG_YM2203_PORT_A, 0xff, 0xff);
@@ -85,7 +83,7 @@ void JOYSTICK::event_frame()
        uint32_t retval = 0xff;
        uint32_t val;
 #if !defined(_FM8)
-       mouse_state = p_emu->get_mouse_buffer();
+       mouse_state = emu->get_mouse_buffer();
        if(mouse_state != NULL) {
                dx += mouse_state[0];
                dy += mouse_state[1];
@@ -107,7 +105,7 @@ void JOYSTICK::event_frame()
                if((stat & 0x02) == 0) mouse_button |= 0x20; // right
        }
 #endif 
-       rawdata = p_emu->get_joy_buffer();
+       rawdata = emu->get_joy_buffer();
        if(rawdata == NULL) return;
    
        for(ch = 0; ch < 2; ch++) {
index e9112cf..dccd9cd 100644 (file)
@@ -32,8 +32,6 @@ class JOYSTICK : public DEVICE {
        uint8_t lpmask;
        int lpt_type;
  protected:
-       VM* p_vm;
-       EMU* p_emu;
        DEVICE *opn;
        
  private:
@@ -41,7 +39,7 @@ class JOYSTICK : public DEVICE {
        void   update_strobe(bool flag);
        uint32_t mouse_type;
  public:
-       JOYSTICK(VM *parent_vm, EMU *parent_emu);
+       JOYSTICK(VM_TEMPLATE* parent_vm, EMU *parent_emu);
        ~JOYSTICK();
 
        void initialize(void);
index 443e389..170b6c0 100644 (file)
@@ -12,7 +12,7 @@
 #include "fm7_common.h"
 #include "kanjirom.h"
 
-KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(parent_vm, parent_emu)
+KANJIROM::KANJIROM(VM_TEMPLATE* parent_vm, EMU* parent_emu, bool type_2std): DEVICE(parent_vm, parent_emu)
 {
        FILEIO *fio;
        read_ok = false;
@@ -20,8 +20,6 @@ KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(paren
        fio = new FILEIO();
        memset(data_table, 0xff, 0x20000); 
        //      read_table[0].memory = data_table;
-       p_emu = parent_emu;
-
        if(type_2std) {
                class2 = true;
                if(fio->Fopen(create_local_path(_T(ROM_KANJI_CLASS2)), FILEIO_READ_BINARY)) {
index 7a15906..67703cc 100644 (file)
@@ -17,15 +17,13 @@ class EMU;
 class VM;
 class KANJIROM: public DEVICE {
 private:
-       EMU *p_emu;
-       
        uint8_t data_table[0x20000];
        bool read_ok;
        bool class2;
        pair_t kanjiaddr;
 
 public:
-       KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std);
+       KANJIROM(VM_TEMPLATE* parent_vm, EMU* parent_emu, bool type_2std);
        ~KANJIROM();
        void write_data8(uint32_t addr, uint32_t data);
        uint32_t read_data8(uint32_t addr);
index 94595ad..6c068ee 100644 (file)
@@ -1151,11 +1151,8 @@ void KEYBOARD::write_data8(uint32_t addr, uint32_t data)
        }
 }
 
-KEYBOARD::KEYBOARD(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+KEYBOARD::KEYBOARD(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
 {
-       p_vm = parent_vm;
-       p_emu = parent_emu;
-       
 #if defined(_FM77AV_VARIANTS)
        beep = NULL;
 #endif 
index fcacc2c..86789ab 100644 (file)
@@ -111,7 +111,7 @@ class MB61VH010: public DEVICE {
        // LINE
        void do_line(void);
  public:
-       MB61VH010(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+       MB61VH010(VM_TEMPLATE* parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                target = NULL;
                direct_access_offset = 0;
index 2e5d679..16fe364 100644 (file)
@@ -29,7 +29,7 @@ private:
        void update_keyboard();
        
 public:
-       KEYBOARD(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       KEYBOARD(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                set_device_name(_T("Keyboard"));
        }
index 1c68deb..cff9de1 100644 (file)
@@ -36,7 +36,7 @@ private:
        void update_intr();
        
 public:
-       HD146818P(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       HD146818P(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_intr);
                initialize_output_signals(&outputs_sqw);
index c0c1c63..13396ed 100644 (file)
@@ -42,7 +42,7 @@ private:
        inline void count_up_or_down();
        
 public:
-       HD44102(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       HD44102(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                _SCREEN_WIDTH = 192;
                _SCREEN_HEIGHT = 64;
index 7e045c2..81be796 100644 (file)
@@ -63,7 +63,7 @@ private:
        void set_hsync(bool val);
        
 public:
-       HD46505(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       HD46505(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_disp);
                initialize_output_signals(&outputs_vblank);
index 6a7702f..0e539ae 100644 (file)
@@ -54,7 +54,7 @@ protected:
        void illegal() override;
                
 public:
-       HD6301(VM* parent_vm, EMU* parent_emu) : MC6801(parent_vm, parent_emu)
+       HD6301(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MC6801(parent_vm, parent_emu)
        {
                set_device_name(_T("HD6301 MPU"));
        }
index 9f1fbf8..1259c5b 100644 (file)
@@ -50,7 +50,7 @@ private:
        void paint(int sx, int sy, int col);
        
 public:
-       HD63484(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
+       HD63484(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
                set_device_name(_T("HD63484 ACRTC"));
        }
        ~HD63484() {}
index 5e565f8..06bbab7 100644 (file)
@@ -37,7 +37,7 @@ protected:
        virtual int run_one_opecode();
        
 public:
-       HUC6280_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
+       HUC6280_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
                total_icount = prev_total_icount = 0;
                set_device_name(_T("HuC6280 CPU"));
        }
@@ -97,7 +97,7 @@ private:
 protected:
        int run_one_opecode() override;
 public:
-       HUC6280(VM* parent_vm, EMU* parent_emu) : HUC6280_BASE(parent_vm, parent_emu) {
+       HUC6280(VM_TEMPLATE* parent_vm, EMU* parent_emu) : HUC6280_BASE(parent_vm, parent_emu) {
                set_device_name(_T("HuC6280 CPU"));
        }
        ~HUC6280() {}
index 2cc17b8..d6378bb 100644 (file)
@@ -38,7 +38,7 @@ private:
        void *opaque;
        
 public:
-       I286(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I286(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 #ifdef I86_PSEUDO_BIOS
                d_bios = NULL;
index fd620d9..a443070 100644 (file)
@@ -40,7 +40,7 @@ private:
        void *opaque;
        
 public:
-       I386(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I386(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 #ifdef I386_PSEUDO_BIOS
                d_bios = NULL;
index dcb346d..9e30b53 100644 (file)
@@ -182,7 +182,7 @@ protected:
        void check_interrupt();
        //void OP(uint8_t code);
 public:
-       I8080(VM* parent_vm, EMU* parent_emu) : I8080_BASE(parent_vm, parent_emu)
+       I8080(VM_TEMPLATE* parent_vm, EMU* parent_emu) : I8080_BASE(parent_vm, parent_emu)
        {
 #ifdef HAS_I8085
                set_device_name(_T("i8085 CPU"));
index 67168f1..275737d 100644 (file)
@@ -110,7 +110,7 @@ protected:
        uint64_t total_count;
        uint64_t prev_total_count;
 public:
-       I8080_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8080_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                BUSREQ = false;
                SID = true;
index b058a2e..9d9f545 100644 (file)
@@ -58,7 +58,7 @@ private:
        void set_pio(int ch, uint8_t data);
        
 public:
-       I8155(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8155(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 3; i++) {
                        initialize_output_signals(&pio[i].outputs);
index 4ba0d30..7143cec 100644 (file)
@@ -13,7 +13,7 @@
 #include "i8237.h"
 
 
-I8237::I8237(VM* parent_vm, EMU* parent_emu) : I8237_BASE(parent_vm, parent_emu)
+I8237::I8237(VM_TEMPLATE* parent_vm, EMU* parent_emu) : I8237_BASE(parent_vm, parent_emu)
 {
        for(int i = 0; i < 4; i++) {
                dma[i].dev = vm->dummy;
index f903a69..bce58d4 100644 (file)
@@ -63,7 +63,7 @@ protected:
        uint32_t read_io(int ch);
        
 public:
-       I8237_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8237_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 4; i++) {
                        //dma[i].dev = vm->dummy;
@@ -141,7 +141,7 @@ private:
        DEVICE* d_dma;
 #endif
 public:
-       I8237(VM* parent_vm, EMU* parent_emu);
+       I8237(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~I8237();
 
        virtual void write_io8(uint32_t addr, uint32_t data);
index d9c59f8..bfdd694 100644 (file)
@@ -45,7 +45,7 @@ private:
        int recv_id, send_id;
        
 public:
-       I8251(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8251(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_out);
                initialize_output_signals(&outputs_rxrdy);
index c635d3d..3d644ea 100644 (file)
@@ -65,7 +65,7 @@ private:
        int get_next_count(int ch);
        
 public:
-       I8253(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8253(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 3; i++) {
                        initialize_output_signals(&counter[i].outputs);
index b07aa97..84ed477 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool __I8255_AUTO_HAND_SHAKE;
        
 public:
-       I8255(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8255(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 3; i++) {
                        initialize_output_signals(&port[i].outputs);
index 87736d0..e1a789b 100644 (file)
@@ -57,7 +57,7 @@ private:
        void update_intr();
        
 public:
-       I8259(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I8259(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_cpu = NULL;
                __I8259_MAX_CHIPS = 0;
index 06a9e35..509461c 100644 (file)
@@ -337,7 +337,7 @@ private:
        inline void _invalid();
        
 public:
-       I86(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I86(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_bios = NULL;
 #ifdef SINGLE_MODE_DMA
index f47b5a5..58ca66a 100644 (file)
@@ -48,7 +48,7 @@ private:
        uint32_t read_port32(uint32_t addr, bool is_dma);
        
 public:
-       IO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       IO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 #ifdef _IO_DEBUG_LOG
                cpu_index = 0;
index cb7968a..7113721 100644 (file)
@@ -62,7 +62,7 @@ private:
        void set_cur_track(int track);
        
 public:
-       LD700(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       LD700(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_exv);
                initialize_output_signals(&outputs_ack);
index ca62aa2..04c1dff 100644 (file)
@@ -16,7 +16,7 @@
 extern CSP_Logger *csp_logger;
 #endif
 
-DEVICE::DEVICE(VM* parent_vm, EMU* parent_emu) : vm(parent_vm), emu(parent_emu)
+DEVICE::DEVICE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : vm(parent_vm), emu(parent_emu)
 {
        vm = parent_vm;
        emu = parent_emu;
index bebc595..67ced3a 100644 (file)
 #define SIG_SCSI_ACK           309
 #define SIG_SCSI_RST           310
 
+#include "vm_template.h"
+
 class CSP_Logger;
 class csp_state_utils;
-class VM;
+class VM_TEMPLATE;
 class EMU;
 class OSD;
 class DEVICE
 {
 protected:
-       VM* vm;
+       VM_TEMPLATE* vm;
        EMU* emu;
        OSD* osd;
        csp_state_utils *state_entry;
        CSP_Logger *p_logger;
 public:
-       DEVICE(VM* parent_vm, EMU* parent_emu);
+       DEVICE(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        //ToDo: Will implement real destructor per real classes and below destructor decl. with "virtual".
        // This makes warning:
        //"deleting object of polymorphic class type 'DEVICE' which has non-virtual
@@ -515,7 +517,7 @@ public:
        {
                event_manager = device;
        }
-       virtual int get_event_manager_id();
+       int get_event_manager_id();
        virtual void register_event(DEVICE* device, int event_id, double usec, bool loop, int* register_id);
        virtual void register_event_by_clock(DEVICE* device, int event_id, uint64_t clock, bool loop, int* register_id);
        virtual void cancel_event(DEVICE* device, int register_id);
@@ -529,7 +531,7 @@ public:
        virtual uint32_t get_passed_clock_since_vline();
        virtual double get_passed_usec_since_vline();
        virtual int get_cur_vline();
-       virtual int get_cur_vline_clocks();
+       int get_cur_vline_clocks();
        virtual uint32_t get_cpu_pc(int index);
        virtual void request_skip_frames();
        virtual void set_frames_per_sec(double frames);
index 05e9df9..23b8023 100644 (file)
@@ -28,7 +28,7 @@ protected:
 #endif
 
 public:
-       I386(VM* parent_vm, EMU* parent_emu) : I386_BASE(parent_vm, parent_emu)
+       I386(VM_TEMPLATE* parent_vm, EMU* parent_emu) : I386_BASE(parent_vm, parent_emu)
        {
 #ifdef USE_DEBUGGER
                d_debugger = NULL;
index bf1a461..c1af566 100644 (file)
@@ -17,7 +17,7 @@
 #include "./device.h"
 #define SIG_I386_A20   1
 
-class VM;
+class VM_TEMPLATE;
 class EMU;
 class DEBUGGER;
 class I386_OPS_BASE;
@@ -31,7 +31,7 @@ protected:
        DEVICE *d_bios;
        DEVICE *d_dma;
 public:
-       I386_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I386_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_bios = NULL;
                d_dma = NULL;
index 2b20756..a3fb2e6 100644 (file)
@@ -47,7 +47,7 @@ private:
        void _0fpre();    /* Opcode 0x0f */
 #endif
 public:
-       I86(VM* parent_vm, EMU* parent_emu) : I86_BASE(parent_vm, parent_emu)
+       I86(VM_TEMPLATE* parent_vm, EMU* parent_emu) : I86_BASE(parent_vm, parent_emu)
        {
 #ifdef SINGLE_MODE_DMA
                d_dma = NULL;
index 4621caf..6526900 100644 (file)
@@ -331,7 +331,7 @@ protected:
        inline void _invalid();
        
 public:
-       I86_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       I86_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                busreq = false;
                d_bios = NULL;
index e2c121f..bfbc2a8 100644 (file)
@@ -239,7 +239,7 @@ const uint8_t i80286_cpu_device::m_i80286_timing[] =
 };
 
 
-i80286_cpu_device::i80286_cpu_device(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+i80286_cpu_device::i80286_cpu_device(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
 {
        memcpy(m_timing, m_i80286_timing, sizeof(m_i80286_timing));
        m_amask = 0xffffff;
index 89081cf..8efd582 100644 (file)
@@ -87,7 +87,7 @@ const uint8_t i8086_cpu_device::m_i8086_timing[] =
 
 /***************************************************************************/
 
-i8088_cpu_device::i8088_cpu_device(VM* parent_vm, EMU* parent_emu) : i8086_cpu_device(parent_vm, parent_emu)
+i8088_cpu_device::i8088_cpu_device(VM_TEMPLATE* parent_vm, EMU* parent_emu) : i8086_cpu_device(parent_vm, parent_emu)
 {
        memcpy(m_timing, m_i8086_timing, sizeof(m_i8086_timing));
        m_amask = 0x000fffff;
@@ -98,7 +98,7 @@ i8088_cpu_device::~i8088_cpu_device()
 }
 
 
-i8086_cpu_device::i8086_cpu_device(VM* parent_vm, EMU* parent_emu) : i8086_common_cpu_device(parent_vm, parent_emu)
+i8086_cpu_device::i8086_cpu_device(VM_TEMPLATE* parent_vm, EMU* parent_emu) : i8086_common_cpu_device(parent_vm, parent_emu)
 {
        memcpy(m_timing, m_i8086_timing, sizeof(m_i8086_timing));
        m_extra_cycles = 0;
@@ -343,7 +343,7 @@ void i8086_cpu_device::execute_run()
        m_extra_icount = 0;
 }
 
-i8086_common_cpu_device::i8086_common_cpu_device(VM* prev_vm, EMU* prev_emu)
+i8086_common_cpu_device::i8086_common_cpu_device(VM_TEMPLATE* prev_vm, EMU* prev_emu)
        : DEVICE(prev_vm, prev_emu)
        , m_ip(0)
        , m_TF(0)
index fa59941..bfbffe8 100644 (file)
@@ -34,7 +34,7 @@ class i8086_common_cpu_device : public DEVICE
 {
 public:
        // construction/destruction
-       i8086_common_cpu_device(VM *prev_vm, EMU* prev_emu);
+       i8086_common_cpu_device(VM_TEMPLATE* prev_vm, EMU* prev_emu);
        ~i8086_common_cpu_device();
 
        virtual void initialize();
@@ -417,7 +417,7 @@ class i8086_cpu_device : public i8086_common_cpu_device
 {
 public:
        // construction/destruction
-       i8086_cpu_device(VM* prev_vm, EMU* prev_emu);
+       i8086_cpu_device(VM_TEMPLATE* prev_vm, EMU* prev_emu);
        ~i8086_cpu_device();
 
        // device_memory_interface overrides
index fc5ee56..62e8b6a 100644 (file)
@@ -27,7 +27,7 @@ private:
        uint8_t din;
        
 public:
-       LS244(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       LS244(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                set_device_name(_T("74LS244 Octal 3-State Buffer"));
index f2a491e..5dd4fe2 100644 (file)
@@ -28,7 +28,7 @@ private:
        bool prev_in;
        
 public:
-       LS393(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       LS393(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 8; i++) {
                        initialize_output_signals(&outputs[i]);
index 8acbc1c..a998ef0 100644 (file)
@@ -50,7 +50,7 @@ protected:
        //void save_state_regs(FILEIO* state_fio);
        //void load_state_regs(FILEIO* state_fio);
 public:
-       M6502_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       M6502_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                total_icount = prev_total_icount = 0;
                busreq = false;
@@ -117,7 +117,7 @@ class M6502 : public M6502_BASE
 protected:
        void OP(uint8_t code);
 public:
-       M6502(VM* parent_vm, EMU* parent_emu) : M6502_BASE(parent_vm, parent_emu)
+       M6502(VM_TEMPLATE* parent_vm, EMU* parent_emu) : M6502_BASE(parent_vm, parent_emu)
        {
        }
        ~M6502() {}
@@ -135,7 +135,7 @@ class N2A03 : public M6502_BASE
 protected:
        void OP(uint8_t code);
 public:
-       N2A03(VM* parent_vm, EMU* parent_emu) : M6502_BASE(parent_vm, parent_emu)
+       N2A03(VM_TEMPLATE* parent_vm, EMU* parent_emu) : M6502_BASE(parent_vm, parent_emu)
        {
        }
        ~N2A03() {}
index 5cb4be3..a08b98d 100644 (file)
@@ -41,7 +41,7 @@ protected:
        void adx_ex();
 
 public:
-       MB8861(VM* parent_vm, EMU* parent_emu) : MC6800(parent_vm, parent_emu)
+       MB8861(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MC6800(parent_vm, parent_emu)
        {
                set_device_name(_T("MB8861 MPU"));
        }
index 489c2f8..448af6c 100644 (file)
@@ -148,7 +148,7 @@ private:
 
        void decl_state_fdc(int ch);
 public:
-       MB8877(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MB8877(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                initialize_output_signals(&outputs_drq);
index 545e004..51266b8 100644 (file)
@@ -307,7 +307,7 @@ protected:
 
        bool __USE_DEBUGGER;
 public:
-       MC6800(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6800(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_mem = NULL;
                d_debugger = NULL;
index 77d219a..197cec8 100644 (file)
@@ -136,7 +136,7 @@ protected:
 
 //#endif
 public:
-       MC6801(VM* parent_vm, EMU* parent_emu) : MC6800(parent_vm, parent_emu)
+       MC6801(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MC6800(parent_vm, parent_emu)
        {
                for(int i = 0; i < 4; i++) {
                        initialize_output_signals(&port[i].outputs);
index 15d7b27..478d108 100644 (file)
@@ -532,7 +532,7 @@ protected:
        int frames_count;
 
 public:
-       MC6809_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) 
+       MC6809_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) 
        {
 
                total_icount = prev_total_icount = 0;
@@ -699,7 +699,7 @@ class MC6809 : public MC6809_BASE
 {
 
  public:
-       MC6809(VM* parent_vm, EMU* parent_emu) : MC6809_BASE(parent_vm, parent_emu) 
+       MC6809(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MC6809_BASE(parent_vm, parent_emu) 
        {
        }
        ~MC6809() {}
index f97e41b..2a4b1b8 100644 (file)
@@ -39,7 +39,7 @@ private:
        } port[2];
        
 public:
-       MC6820(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6820(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 2; i++) {
                        initialize_output_signals(&port[i].outputs);
index 2acd6c2..dfdac98 100644 (file)
@@ -79,7 +79,7 @@ private:
        void set_clock(int idx, int state);
        
 public:
-       MC6840(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6840(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_ch0);
                initialize_output_signals(&outputs_ch1);
index a54c04e..db53417 100644 (file)
@@ -41,7 +41,7 @@ private:
        void update_irq();
        
 public:
-       MC6844(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6844(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                // TIP: if((DEVICE::prev_device == NULL) || (DEVICE::this_device_id == 0)) DEVICE must be DUMMY.
                // And, at this device, should not be FIRST DEVICE. 20170613 Ohta.
index c2c0078..478d4d3 100644 (file)
@@ -57,7 +57,7 @@ protected:
        virtual void draw_alpha();
        
 public:
-       MC6847_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6847_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_cpu = NULL;
                ag = as = intext = css = inv = false;
@@ -104,7 +104,7 @@ class MC6847 : public MC6847_BASE
 protected:
        void draw_alpha();
 public:
-       MC6847(VM* parent_vm, EMU* parent_emu) : MC6847_BASE(parent_vm, parent_emu)
+       MC6847(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MC6847_BASE(parent_vm, parent_emu)
        {
        }
        ~MC6847() {};
index ea4e6f2..56c6415 100644 (file)
@@ -37,7 +37,7 @@ private:
        void update_irq();
        
 public:
-       MC6850(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MC6850(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_out);
                initialize_output_signals(&outputs_rts);
index a53e4b7..3177e48 100644 (file)
@@ -112,7 +112,7 @@ class MCS48MEM : public DEVICE
 private:
        uint8_t ram[0x100];
 public:
-       MCS48MEM(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MCS48MEM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                memset(ram, 0, sizeof(ram));
                set_device_name(_T("MCS48 MEMORY BUS"));
@@ -472,7 +472,7 @@ protected:
        inline UINT8 opcode_fetch(mcs48_state *cpustate);
        int op_call(mcs48_state *);
 public:
-       MCS48_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MCS48_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_mem = d_io = d_intr = NULL;
                d_debugger = NULL;
@@ -736,7 +736,7 @@ private:
        
        
 public:
-       MCS48(VM* parent_vm, EMU* parent_emu) : MCS48_BASE(parent_vm, parent_emu)
+       MCS48(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MCS48_BASE(parent_vm, parent_emu)
        {
        }
        ~MCS48() {}
index 35bfa79..566850c 100644 (file)
@@ -41,7 +41,7 @@ private:
        uint8_t *wr_dummy;
        
 public:
-       MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                addr_max = MEMORY_ADDR_MAX;
                bank_size = MEMORY_BANK_SIZE;
index 0a411ae..5e52932 100644 (file)
@@ -61,7 +61,7 @@ private:
        int volume_l, volume_r;
        
 public:
-       MSM5205(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MSM5205(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&m_vclk_cb);
                volume_m = 1024;
index af9d1ac..7a5a8f8 100644 (file)
@@ -19,7 +19,7 @@
 DLL_PREFIX_I struct cur_time_s cur_time;
 #endif
 
-MSM5832::MSM5832(VM* parent_vm, EMU* parent_emu) : MSM58321_BASE(parent_vm, parent_emu)
+MSM5832::MSM5832(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MSM58321_BASE(parent_vm, parent_emu)
 {
                set_device_name(_T("MSM5832 RTC"));
 }
index 030dd7a..679a3da 100644 (file)
@@ -19,7 +19,7 @@
 DLL_PREFIX_I struct cur_time_s cur_time;
 #endif
 
-MSM58321::MSM58321(VM* parent_vm, EMU* parent_emu) : MSM58321_BASE(parent_vm, parent_emu)
+MSM58321::MSM58321(VM_TEMPLATE* parent_vm, EMU* parent_emu) : MSM58321_BASE(parent_vm, parent_emu)
 {
                initialize_output_signals(&outputs_busy);
                set_device_name(_T("MSM58321 RTC"));
index 5684482..eab9573 100644 (file)
@@ -47,7 +47,7 @@ protected:
        int start_day;
        int start_year;
 public:
-       MSM58321_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MSM58321_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_data);
                set_device_name(_T("MSM5832 RTC"));
@@ -80,7 +80,7 @@ protected:
        void write_to_cur_time();
        void set_busy(bool val);
 public:
-       MSM58321(VM* parent_vm, EMU* parent_emu);
+       MSM58321(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~MSM58321() {}
        
        void initialize();
@@ -98,7 +98,7 @@ protected:
        void set_busy(bool val);
 
 public:
-       MSM5832(VM* parent_vm, EMU* parent_emu);
+       MSM5832(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~MSM5832() {}
        
        void initialize();
index 994d020..85e0afd 100644 (file)
@@ -94,7 +94,7 @@ private:
        void finish_paper();
        
 public:
-       MZ1P17(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MZ1P17(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_busy);
                initialize_output_signals(&outputs_ack);
index 48d761a..d451328 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool prev, first;
        
 public:
-       NAND(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       NAND(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                bits_mask = bits_in = 0;
index b5046ef..2caa9f8 100644 (file)
@@ -31,7 +31,7 @@ private:
        void get_sample();
        
 public:
-       NOISE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       NOISE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                buffer_l = buffer_r = NULL;
                samples = 0;
index 4155f0e..3331c07 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool prev, first;
        
 public:
-       NOR(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       NOR(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                bits_in = 0;
index feed7d7..c217c2c 100644 (file)
@@ -25,7 +25,7 @@ private:
        bool prev, first;
        
 public:
-       NOT(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       NOT(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                prev = first = true;
index 84c5f81..b0df75b 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool prev, first;
        
 public:
-       OR(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       OR(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs);
                bits_in = 0;
index 485735e..6999aac 100644 (file)
@@ -78,7 +78,7 @@ private:
        unsigned char InD3H_60();
        
 public:
-       PC6031(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PC6031(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                d_noise_seek = NULL;
 //             d_noise_head_down = NULL;
index 568cc4c..3d09cdd 100644 (file)
@@ -33,7 +33,7 @@ private:
        bool _debug_pc80s31k;
        bool pc80s31k_no_wait;
 public:
-       PC80S31K(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PC80S31K(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                set_device_name(_T("PC-80S31K FDD"));
                
index ea93555..77c108e 100644 (file)
@@ -222,7 +222,7 @@ private:
 #endif
        
 public:
-       PCE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PCE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                set_device_name(_T("PC-Engine Core"));
index 2a7cb85..956b225 100644 (file)
@@ -32,7 +32,7 @@ private:
        bool realtime;
        
 public:
-       PCM1BIT(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PCM1BIT(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                set_device_name(_T("1BIT PCM SOUND"));
index 54c90be..3374ec1 100644 (file)
@@ -35,7 +35,7 @@ private:
        void close_file();
        
 public:
-       PRNFILE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PRNFILE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_busy);
                initialize_output_signals(&outputs_ack);
index cfec8ea..29a318d 100644 (file)
@@ -34,7 +34,7 @@ private:
        uint8_t* get_sector(int drv, int trk, int sec);
        
 public:
-       PTF20(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       PTF20(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_sio);
                set_device_name(_T("Pseudo TF-20 FDD"));
index 32223b9..dee4631 100644 (file)
@@ -42,7 +42,7 @@ private:
        void write_to_cur_time();
        
 public:
-       RP5C01(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       RP5C01(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_alarm);
                initialize_output_signals(&outputs_pulse);
index 15fd9c6..6b4a47b 100644 (file)
@@ -52,7 +52,7 @@ private:
 //     csp_state_utils *state_entry;
        
 public:
-       SCSI_CDROM(VM* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
+       SCSI_CDROM(VM_TEMPLATE* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
        {
                initialize_output_signals(&outputs_done);
                
index ecade57..689f058 100644 (file)
@@ -148,7 +148,7 @@ private:
        double next_req_usec;
        
 public:
-       SCSI_DEV(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       SCSI_DEV(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_dat);
                initialize_output_signals(&outputs_bsy);
index 6c5e0da..6e37a7e 100644 (file)
@@ -24,7 +24,7 @@ private:
 //     csp_state_utils *state_entry;
 
 public:
-       SCSI_HDD(VM* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
+       SCSI_HDD(VM_TEMPLATE* parent_vm, EMU* parent_emu) : SCSI_DEV(parent_vm, parent_emu) 
        {
                for(int i = 0; i < 8; i++) {
                        disk[i] = NULL;
index a51b2bc..ecc3c95 100644 (file)
@@ -36,7 +36,7 @@ private:
        void set_drq(bool value);
        
 public:
-       SCSI_HOST(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       SCSI_HOST(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                initialize_output_signals(&outputs_drq);
index f81b64c..0debbbc 100644 (file)
@@ -44,7 +44,7 @@ private:
        uint32_t _NOISE_DST_TAP;
        uint32_t _NOISE_SRC_TAP;
 public:
-       SN76489AN(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       SN76489AN(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
 //#ifdef HAS_SN76489
index def1160..91f035b 100644 (file)
@@ -109,7 +109,7 @@ private:
        uint8_t m_shift_counter;
 
 public:
-       SY6522(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       SY6522(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_a);
                initialize_output_signals(&outputs_b);
index c916122..3f66c27 100644 (file)
@@ -116,7 +116,7 @@ private:
 
        void decl_state_fdc(int ch);
 public:
-       T3444A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       T3444A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_rqm);
                d_noise_seek = NULL;
index fcf8dfe..4a7d469 100644 (file)
@@ -30,7 +30,7 @@ private:
        uint8_t* rbank[32];
        
 public:
-       TF20(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       TF20(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                drive_no = 0;
                set_device_name(_T("TF-20 FDD"));
index 9b12bcd..044b80e 100644 (file)
@@ -39,7 +39,7 @@ private:
        int volume_l, volume_r;
        
 public:
-       TMS3631(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       TMS3631(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                set_device_name(_T("TMS3631 SSG"));
index 104415c..64727e3 100644 (file)
@@ -61,7 +61,7 @@ private:
        inline void draw_screen_256_nonimpose();
        
 public:
-       TMS9918A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       TMS9918A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                vram = NULL;
index f7b26c9..363fcd2 100644 (file)
@@ -115,7 +115,7 @@ private:
        inline uint16_t setst_sla_laeco(uint16_t a, uint16_t c);
        
 public:
-       TMS9995(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       TMS9995(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                // init registers
 #ifdef USE_DEBUGGER
index d8b545b..d677a5f 100644 (file)
@@ -30,7 +30,7 @@ private:
        void update_pointer(uint8_t mode);
        
 public:
-       UPD16434(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
+       UPD16434(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
                set_device_name(_T("uPD16434 LCD Controller"));
        }
        ~UPD16434() {}
index ec68802..b582368 100644 (file)
@@ -44,7 +44,7 @@ private:
 //#endif
        bool __HAS_UPD4990A;    
 public:
-       UPD1990A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD1990A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_dout);
                initialize_output_signals(&outputs_tp);
index fcaf049..4f70f59 100644 (file)
@@ -29,7 +29,7 @@ private:
        void write_to_cur_time();
        
 public:
-       UPD4991A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
+       UPD4991A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
                set_device_name(_T("uPD4991A RTC"));
        }
        ~UPD4991A() {}
index 72700b4..f4a213e 100644 (file)
@@ -41,7 +41,7 @@ private:
 
        bool _SINGLE_MODE_DMA;
 public:
-       UPD71071(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD71071(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                // TIP: if((DEVICE::prev_device == NULL) || (DEVICE::this_device_id == 0)) DEVICE must be DUMMY.
                // And, at this device, should not be FIRST DEVICE. 20170613 Ohta.
index 9f46f33..5ced664 100644 (file)
@@ -124,7 +124,7 @@ protected:
        //virtual void draw_text();
        //virtual void draw_pset(int x, int y);
 public:
-       UPD7220_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD7220_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_drq);
                initialize_output_signals(&outputs_vsync);
@@ -242,7 +242,7 @@ private:
        void draw_text();
        void draw_pset(int x, int y);
 public:
-       UPD7220(VM* parent_vm, EMU* parent_emu) : UPD7220_BASE(parent_vm, parent_emu)
+       UPD7220(VM_TEMPLATE* parent_vm, EMU* parent_emu) : UPD7220_BASE(parent_vm, parent_emu)
        {
        }
        ~UPD7220() {}
index 3ad2629..368456c 100644 (file)
@@ -145,7 +145,7 @@ private:
 
        void decl_state_fdc(int ch);
 public:
-       UPD765A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD765A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                initialize_output_signals(&outputs_drq);
index 5817a93..0d64abb 100644 (file)
@@ -116,7 +116,7 @@ private:
        int volume_l, volume_r;
        
 public:
-       UPD7752(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD7752(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                set_device_name(_T("uPD7752 Voice Synthesizer"));
index e6b47c8..71b1fc5 100644 (file)
@@ -108,7 +108,7 @@ private:
        void OP74();
        
 public:
-       UPD7801(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD7801(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 
                total_count = prev_total_count = 0;
index f4c78ac..80283b3 100644 (file)
@@ -46,7 +46,7 @@ private:
 
        void decl_state_cpustate();
 public:
-       UPD7810(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       UPD7810(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
 #ifdef USE_DEBUGGER
                total_icount = prev_total_icount = 0;
index 136562d..82cc7e4 100644 (file)
@@ -94,7 +94,7 @@ at most 192 KiB RAM (128 KiB base, 64 KiB expansion).
 
 //v99x8_device::v99x8_device(const machine_config &mconfig, device_type type, const char *name, const char *shortname, const char *tag, device_t *owner, UINT32 clock)
 //:   device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
-v99x8_device::v99x8_device(VM* parent_vm, EMU* parent_emu)
+v99x8_device::v99x8_device(VM_TEMPLATE* parent_vm, EMU* parent_emu)
 :   DEVICE(parent_vm, parent_emu),
 //     device_memory_interface(mconfig, *this),
 //     device_video_interface(mconfig, *this),
@@ -132,7 +132,7 @@ v99x8_device::v99x8_device(VM* parent_vm, EMU* parent_emu)
 
 //v9938_device::v9938_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
 //: v99x8_device(mconfig, V9938, "V9938 VDP", "v9938", tag, owner, clock)
-v9938_device::v9938_device(VM* parent_vm, EMU* parent_emu)
+v9938_device::v9938_device(VM_TEMPLATE* parent_vm, EMU* parent_emu)
 : v99x8_device(parent_vm, parent_emu)
 {
        m_model = MODEL_V9938;
@@ -142,7 +142,7 @@ v9938_device::v9938_device(VM* parent_vm, EMU* parent_emu)
 
 //v9958_device::v9958_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
 //: v99x8_device(mconfig, V9938, "V9958 VDP", "v9958", tag, owner, clock)
-v9958_device::v9958_device(VM* parent_vm, EMU* parent_emu)
+v9958_device::v9958_device(VM_TEMPLATE* parent_vm, EMU* parent_emu)
 : v99x8_device(parent_vm, parent_emu)
 {
        m_model = MODEL_V9958;
index 4cbb7b1..5c3f2c7 100644 (file)
@@ -80,8 +80,8 @@ protected:
        int __SCREEN_WIDTH;
        int __SCREEN_HEIGHT;
        // construction/destruction
-       //v99x8_device(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu){}
-       v99x8_device(VM* parent_vm, EMU* parent_emu);
+       //v99x8_device(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu){}
+       v99x8_device(VM_TEMPLATE* parent_vm, EMU* parent_emu);
 
 public:
        //template<class _irq> void set_interrupt_callback(_irq irq) {
@@ -328,7 +328,7 @@ public:
 class v9938_device : public v99x8_device
 {
 public:
-       v9938_device(VM* parent_vm, EMU* parent_emu);
+       v9938_device(VM_TEMPLATE* parent_vm, EMU* parent_emu);
 
        //DECLARE_PALETTE_INIT(v9938);
 protected:
@@ -339,7 +339,7 @@ protected:
 class v9958_device : public v99x8_device
 {
 public:
-       v9958_device(VM* parent_vm, EMU* parent_emu);
+       v9958_device(VM_TEMPLATE* parent_vm, EMU* parent_emu);
 
        //DECLARE_PALETTE_INIT(v9958);
 
index 6fda707..c51bd7f 100644 (file)
@@ -162,7 +162,7 @@ private:
        
        void decl_state_v99x8();
 public:
-       V99X8(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       V99X8(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                set_device_name(_T("V99x8 VDP"));
diff --git a/source/src/vm/vm_template.h b/source/src/vm/vm_template.h
new file mode 100644 (file)
index 0000000..f2aa062
--- /dev/null
@@ -0,0 +1,147 @@
+#ifndef __CSP_VM_TEMPLATE_H
+#define __CSP_VM_TEMPLATE_H
+
+#include "common.h"
+
+class EMU;
+class EVENT;
+class DEVICE;
+class csp_state_utils;
+class VM_TEMPLATE {
+protected:
+       EMU* emu;
+       // devices
+       EVENT* event;
+       csp_state_utils *state_entry;
+       
+public:
+       VM_TEMPLATE(EMU* parent_emu) : emu(parent_emu)
+       {
+               emu = parent_emu;
+       }
+       ~VM_TEMPLATE() {}
+       // drive virtual machine
+       virtual void reset() { }
+       virtual void special_reset() { }
+       virtual void run() { }
+       virtual void notify_power_off() { }
+       
+       virtual double get_frame_rate() { return 59.94; }
+       virtual void get_screen_resolution(int *w, int *h) {
+               if(w != NULL) *w = 0;
+               if(h != NULL) *h = 0;
+       }
+
+       // debugger
+       virtual DEVICE *get_cpu(int num) { return NULL; }
+       virtual uint32_t get_cpu_pc() { return 0; }
+       virtual void initialize(void) { }
+       virtual void update_dipswitch(void) { }
+       
+       // draw screen
+       virtual void draw_screen() { }
+
+       // multimedia
+       virtual void movie_sound_callback(uint8_t *buffer, long size) { }
+       // sound generation
+       virtual void initialize_sound(int rate, int samples) { }
+       virtual uint16_t* create_sound(int* extra_frames) { return NULL; }
+       virtual int get_sound_buffer_ptr() { return 0; }
+       virtual void set_sound_device_volume(int ch, int decibel_l, int decibel_r) { }
+
+       // network
+       virtual void notify_socket_connected(int ch) { }
+       virtual void notify_socket_disconnected(int ch) { }
+       virtual uint8_t* get_socket_send_buffer(int ch, int* size)
+       {
+               if(size != NULL) *size = 0;
+               return NULL;
+       }
+       virtual void inc_socket_send_buffer_ptr(int ch, int size) { }
+       virtual uint8_t* get_socket_recv_buffer0(int ch, int* size0, int* size1) {
+               if(size0 != NULL) *size0 = 0;
+               if(size1 != NULL) *size1 = 0;
+               return NULL;
+       }
+       virtual uint8_t* get_socket_recv_buffer1(int ch) { return NULL; }
+       virtual void inc_socket_recv_buffer_ptr(int ch, int size) { }
+
+       // notify key
+       virtual void key_down(int code, bool repeat) { }
+       virtual void key_up(int code) { }
+       virtual bool get_caps_locked() { return false; }
+       virtual bool get_kana_locked() { return false; }
+       virtual uint32_t get_led_status() { return 0; }
+
+       
+       // user interface
+       virtual void open_floppy_disk(int drv, _TCHAR *file_path, int bank) { }
+       virtual void open_quick_disk(int drv, _TCHAR *file_path) { }
+       virtual void open_hard_disk(int drv, _TCHAR *file_path) { }
+       virtual void open_compact_disc(int drv, _TCHAR *file_path) { }
+       virtual void open_laser_disc(int drv, _TCHAR *file_path) { }
+       virtual void open_bubble_casette(int drv, _TCHAR *file_path, int bank) { }
+       virtual void open_cart(int drv, _TCHAR *file_path) { }
+       virtual void play_tape(int drv, _TCHAR *file_path) { }
+       virtual void rec_tape(int drv, _TCHAR *file_path) { }
+       virtual void load_binary(int drv, _TCHAR *file_path) { }
+       virtual void save_binary(int drv, _TCHAR *file_path) { }
+       
+       virtual void close_floppy_disk(int drv) { }
+       virtual void close_quick_disk(int drv) { }
+       virtual void close_hard_disk(int drv) { }
+       virtual void close_compact_disc() { }
+       virtual void close_laser_disc(int drv) { }
+       virtual void close_bubble_casette(int drv) { }
+       virtual void close_cart(int drv) { }
+       virtual void close_tape(int drv) { }
+       
+       virtual uint32_t is_floppy_disk_accessed() { return 0; }
+       virtual uint32_t is_quick_disk_accessed() { return 0; }
+       virtual uint32_t is_hard_disk_accessed() { return 0; }
+       virtual uint32_t is_compact_disc_accessed() { return 0; }
+       virtual uint32_t is_laser_disc_accessed() { return 0; }
+
+       virtual bool is_floppy_disk_inserted(int drv) { return false; }
+       virtual bool is_quick_disk_inserted(int drv) { return false; }
+       virtual bool is_hard_disk_inserted(int drv) { return false; }
+       virtual bool is_compact_disc_inserted(int drv) { return false; }
+       virtual bool is_laser_disc_inserted(int drv) { return false; }
+       virtual bool is_tape_inserted(int drv) { return false; }
+       
+       virtual void is_floppy_disk_protected(int drv, bool value) { }
+       virtual bool is_floppy_disk_protected(int drv) { return false; }
+       virtual void is_bubble_casette_protected(int drv, bool flag) { }
+       virtual bool is_bubble_casette_protected(int drv) { return false; }
+       
+       virtual bool is_tape_playing(int drv) { return false; }
+       virtual bool is_tape_recording(int drv) { return false; }
+       virtual int get_tape_position(int drv) { return 0; }
+       virtual const _TCHAR* get_tape_message(int drv) { return (const _TCHAR *) ""; }
+       
+       virtual void push_play(int drv) { }
+       virtual void push_stop(int drv) { }
+       virtual void push_fast_forward(int drv) { }
+       virtual void push_fast_rewind(int drv) { }
+       virtual void push_apss_forward(int drv) { }
+       virtual void push_apss_rewind(int drv) { }
+
+       virtual void update_config() { }
+       virtual void save_state(FILEIO* state_fio) { }
+       virtual bool load_state(FILEIO* state_fio) { }
+       virtual void decl_state(void) { }
+       
+       // devices
+       virtual void set_cpu_clock(DEVICE *cpu, uint32_t clocks) { }
+       virtual void set_vm_frame_rate(double fps) { }
+       virtual double get_vm_frame_rate() { return 59.94; }
+       virtual bool is_frame_skippable() { return false; }
+       virtual bool is_screen_changed() { return true; }
+       virtual int max_draw_ranges() { return 0; }
+       virtual DEVICE* get_device(int id) { return first_device; }
+       
+       DEVICE* dummy;
+       DEVICE* first_device;
+       DEVICE* last_device;
+};
+#endif /* __CSP_VM_TEMPLATE_H */
index 0fa0f5b..87495f6 100644 (file)
@@ -29,7 +29,7 @@ private:
        void process_status(uint16_t addr);
        
 public:
-       W3100A(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
+       W3100A(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {
                set_device_name(_T("W3100A TCP/IP"));
        }
        ~W3100A() {}
index ee41d07..bf6b538 100644 (file)
@@ -58,7 +58,7 @@ private:
        void update_interrupt();
        
 public:
-       YM2151(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       YM2151(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                initialize_output_signals(&outputs_irq);
                base_decibel = 0;
index cd12f5c..e198cb1 100644 (file)
@@ -114,7 +114,7 @@ private:
        void update_interrupt();
 //#endif
 public:
-       YM2203(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       YM2203(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                base_decibel_fm = base_decibel_psg = 0;
                decibel_vol = 0 + 5;
index 03f5f34..44c9a04 100644 (file)
@@ -34,7 +34,7 @@ private:
        bool __MSX;
        
 public:
-       YM2413(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       YM2413(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                volume_l = volume_r = 1024;
                __MSX = false;
index a8503b9..47041dd 100644 (file)
 } while(0)
 
 // main
-Z80::Z80(VM* parent_vm, EMU* parent_emu) : Z80_BASE(parent_vm, parent_emu)
+Z80::Z80(VM_TEMPLATE* parent_vm, EMU* parent_emu) : Z80_BASE(parent_vm, parent_emu)
 {
 #ifdef HAS_NSC800
        has_nsc800 = true;
index b3e84cc..7056e0e 100644 (file)
@@ -249,7 +249,7 @@ protected:
        int     nsc800_rstc_count;
 
 public:
-       Z80_BASE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       Z80_BASE(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                flags_initialized = false;
                busreq = false;
@@ -361,7 +361,7 @@ protected:
        void run_one_opecode() override;
        void debugger_hook(void) override;
 public:
-       Z80(VM* parent_vm, EMU* parent_emu);
+       Z80(VM_TEMPLATE* parent_vm, EMU* parent_emu);
        ~Z80();
        void initialize();
        void reset();
index b5a2ed3..5f6b297 100644 (file)
@@ -64,7 +64,7 @@ private:
        void update_intr();
        
 public:
-       Z80CTC(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       Z80CTC(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                memset(counter, 0, sizeof(counter));
                for(int i = 0; i < 4; i++) {
index f0a8fe9..4d779bd 100644 (file)
@@ -66,7 +66,7 @@ private:
        void update_intr();
        
 public:
-       Z80DMA(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       Z80DMA(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                for(int i = 0; i < 6 * 8 + 1 + 1; i++) {
                        regs.t[i] = 0;
index 4ec5dc4..49dae33 100644 (file)
@@ -60,7 +60,7 @@ private:
        void update_intr();
        
 public:
-       Z80PIO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       Z80PIO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                memset(port, 0, sizeof(port));
                for(int i = 0; i < 2; i++) {
index 11a4c97..1926fa3 100644 (file)
@@ -100,7 +100,7 @@ private:
        void update_intr();
        
 public:
-       Z80SIO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       Z80SIO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                memset(port, 0, sizeof(port));
                for(int i = 0; i < 2; i++) {
index cffbc9a..65292ac 100644 (file)
@@ -23,7 +23,7 @@ private:
        const uint32_t* joy_stat;
        
 public:
-       JOYSTICK(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       JOYSTICK(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                set_device_name(_T("Joystick I/F"));
        }
index f501db1..ced6f2d 100644 (file)
@@ -30,7 +30,7 @@ private:
        bool inserted;
        
 public:
-       MEMORY(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       MEMORY(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                set_device_name(_T("Memory Bus"));
        }