OSDN Git Service

[VM][FM7][LIBNEWDEV] Add some devices to libCSPcommon_dev.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 8 Feb 2017 16:55:14 +0000 (01:55 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Wed, 8 Feb 2017 16:55:14 +0000 (01:55 +0900)
source/build-cmake/cmake/config_commonsource.cmake
source/build-cmake/cmake/config_x1.cmake
source/src/vm/fm7/CMakeLists.txt
source/src/vm/fm7/dummydevice.cpp
source/src/vm/fm7/dummydevice.h
source/src/vm/fm7/fm7.cpp
source/src/vm/fm7/hd6844.cpp
source/src/vm/fm7/hd6844.h
source/src/vm/fm7/mb61vh010.cpp
source/src/vm/fm7/mb61vh010.h

index 9916045..f2f3f2a 100644 (file)
@@ -16,9 +16,13 @@ if(USE_DEVICES_SHARED_LIB)
   set(MC6809_CPPS 
        libcpu_newdev/libcpu_mc6809/mc6809.cpp
   )
+  set(MCS48_CPPS
+       libcpu_newdev/mcs48.cpp
+  )
 else()
   set(I386_CPPS i386.cpp)
   set(MC6809_CPPS mc6809.cpp)
+  set(MCS48_CPPS mcs48.cpp)
   set(VMFILES ${VMFILES} ${VMFILES_LIB})
 endif()
 
@@ -37,7 +41,9 @@ endif()
 if(FLAG_USE_MC6809)
   set(VMFILES ${VMFILES} ${MC6809_CPPS})
 endif()
-
+if(FLAG_USE_MCS48)
+  set(VMFILES ${VMFILES} ${MCS48_CPPS})
+endif()
 if(USE_DEVICES_SHARED_LIB)
   set(VMFILES ${VMFILES}   libcpu_newdev/device.cpp)
 endif()
index 09bf97a..3c37672 100644 (file)
@@ -15,29 +15,33 @@ set(WITH_MOUSE ON)
 
 set(VMFILES
                   z80.cpp
-                  mcs48.cpp
                   
-                  beep.cpp
                   hd46505.cpp
                   i8255.cpp
-#                 ym2151.cpp
-#                 ym2203.cpp
-#                 ay_3_891x.cpp
                   mb8877.cpp
                   upd1990a.cpp
                   z80ctc.cpp
-#                 z80pio.cpp
+
                   z80sio.cpp
                   
                   prnfile.cpp
                   datarec.cpp
                   disk.cpp
                   event.cpp
+                  
                   io.cpp
-#                 memory.cpp
                   prnfile.cpp
                   mz1p17.cpp
 )
+set(VMFILES_LIB
+                  mcs48.cpp
+                  beep.cpp
+                  z80pio.cpp
+                  ym2151.cpp
+                  ym2203.cpp
+                  ay_3_891x.cpp
+)
+set(FLAG_USE_MCS48 ON)
 
 set(BUILD_X1 OFF CACHE BOOL "Build for X1")
 set(BUILD_X1TURBO OFF CACHE BOOL "Build for X1 Turbo")
index de6d1a2..597b90d 100644 (file)
@@ -12,27 +12,30 @@ set(VM_FM7_LIB_SRCS
        fm7_mainio.cpp
        fm7_mainmem.cpp
        kanjirom.cpp
-       dummydevice.cpp
+#      dummydevice.cpp
        fm7.cpp
 )
 
-if(FM77AV_VARIANTS)
-       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS} mb61vh010.cpp)
-endif()
 if(BUILD_FM8)
        set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS} fm_bubblecasette.cpp)
 endif()
 
-if(BUILD_FM77AV20EX)
-       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
-elseif(BUILD_FM77AV40)
-       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
-elseif(BUILD_FM77AV40EX)
-       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
-elseif(BUILD_FM77AV40SX)
-       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
+if(USE_DEVICES_SHARED_LIB)
+else()
+       if(FM77AV_VARIANTS)
+               set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS} mb61vh010.cpp)
+       endif()
+       if(BUILD_FM77AV20EX)
+               set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
+       elseif(BUILD_FM77AV40)
+               set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
+       elseif(BUILD_FM77AV40EX)
+               set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
+       elseif(BUILD_FM77AV40SX)
+               set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS}  hd6844.cpp)
+       endif()
+       set(VM_FM7_LIB_SRCS ${VM_FM7_LIB_SRCS} dummydevice.cpp)
 endif()
-
 add_library(vm_fm7
        ${VM_FM7_LIB_SRCS}
 )
index 39ab015..e22ca46 100644 (file)
@@ -8,21 +8,9 @@
  *
  */
 
-#include "emu.h"
+//#include "emu.h"
 #include "dummydevice.h"
 
-DUMMYDEVICE::DUMMYDEVICE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
-{
-       status = 0x00000000;
-       clear_on_reset = true;
-       clear_with_zero = true;
-       p_emu = parent_emu;
-}
-
-DUMMYDEVICE::~DUMMYDEVICE()
-{
-}
-
 uint32_t DUMMYDEVICE::read_signal(int id)
 {
 
index 02ddc9b..7682d21 100644 (file)
@@ -50,17 +50,21 @@ enum {
        SIG_DUMMYDEVICE_CLEAR_ON_RESET,
        SIG_DUMMYDEVICE_CLEAR_WITH_ZERO,
 };
+class VM;
 class EMU;
-
 class DUMMYDEVICE : public DEVICE {
 private:
-       EMU *p_emu;
        uint32_t status;
        bool clear_on_reset;
        bool clear_with_zero;
 public:
-       DUMMYDEVICE(VM *parent_vm, EMU *parent_emu);
-       ~DUMMYDEVICE();
+       DUMMYDEVICE(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               status = 0x00000000;
+               clear_on_reset = true;
+               clear_with_zero = true;
+       }
+       ~DUMMYDEVICE() {}
 
        uint32_t read_signal(int id);
        void write_signal(int id, uint32_t data, uint32_t mask);
index 2c7a1be..85b435c 100644 (file)
@@ -375,6 +375,7 @@ void VM::connect_bus(void)
 #if defined(_FM77AV_VARIANTS)
        display->set_context_alu(alu);
        alu->set_context_memory(display);
+       alu->set_direct_access_offset(DISPLAY_VRAM_DIRECT_ACCESS);
 #endif 
        // Palette, VSYNC, HSYNC, Multi-page, display mode. 
        mainio->set_context_display(display);
index 030695c..7a76732 100644 (file)
@@ -8,31 +8,13 @@
  *
  */
 
-#include "../memory.h"
-#include "../vm.h"
-#include "../../emu.h"
+//#include "../memory.h"
+//#include "../vm.h"
+//#include "../../emu.h"
 
 #include "hd6844.h"
 
 
-HD6844::HD6844(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
-{
-       int i;
-       p_emu = parent_emu;
-       p_vm = parent_vm;
-       for(i = 0; i < 4; i++) {
-               src[i] = dest[i] = NULL;
-               initialize_output_signals(&(interrupt_line[i]));
-       }
-       initialize_output_signals(&(drq_line[0]));
-       initialize_output_signals(&(drq_line[1]));
-       set_device_name(_T("HD6844 DMAC"));
-}
-
-HD6844::~HD6844()
-{
-}
-
 void HD6844::reset()
 {
        int ch;
index 2157f83..d42ed5c 100644 (file)
@@ -16,7 +16,6 @@
 
 class EMU;
 class VM;
-
 enum {
        HD6844_EVENT_START_TRANSFER = 0,
        HD6844_EVENT_DO_TRANSFER = 4,
@@ -47,13 +46,9 @@ enum {
        HD6844_ACK_DRQ2,
 
 };
-
+class VM;
+class EMU;
 class HD6844: public DEVICE {
-
- protected:
-       EMU *p_emu;
-       VM *p_vm;
-       
  private:
        DEVICE *src[4];
        DEVICE *dest[4];
@@ -83,9 +78,18 @@ class HD6844: public DEVICE {
 
        void do_transfer(int ch);
  public:
-       HD6844(VM *parent_vm, EMU *parent_emu);
-       ~HD6844();
-
+       HD6844(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               int i;
+               for(i = 0; i < 4; i++) {
+                       src[i] = dest[i] = NULL;
+                       initialize_output_signals(&(interrupt_line[i]));
+               }
+               initialize_output_signals(&(drq_line[0]));
+               initialize_output_signals(&(drq_line[1]));
+               set_device_name(_T("HD6844 DMAC"));
+       }
+       ~HD6844(){}
        void event_callback(int event_id, int err);
        void write_data8(uint32_t id, uint32_t data);
        uint32_t read_data8(uint32_t addr);
index 00c1e00..493b221 100644 (file)
 
 #include "mb61vh010.h"
 
-
-MB61VH010::MB61VH010(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
-{
-       p_emu = parent_emu;
-       p_vm = parent_vm;
-       target = NULL;
-       set_device_name(_T("MB61VH010 ALU"));
-}
-
-MB61VH010::~MB61VH010()
-{
-}
-
 uint8_t MB61VH010::do_read(uint32_t addr, uint32_t bank)
 {
        uint32_t raddr;
@@ -32,11 +19,11 @@ uint8_t MB61VH010::do_read(uint32_t addr, uint32_t bank)
        if(is_400line) {
                if((addr & 0xffff) < 0x8000) {
                        raddr = (addr  & 0x7fff) | (0x8000 * bank);
-                       return target->read_data8(raddr + DISPLAY_VRAM_DIRECT_ACCESS);
+                       return target->read_data8(raddr + direct_access_offset);
                }
        } else {
                raddr = (addr & 0x3fff) | (0x4000 * bank);
-               return target->read_data8(raddr + DISPLAY_VRAM_DIRECT_ACCESS);
+               return target->read_data8(raddr + direct_access_offset);
        }
        return 0xff;
 }
@@ -64,11 +51,11 @@ void MB61VH010::do_write(uint32_t addr, uint32_t bank, uint8_t data)
        if(is_400line) {
                if((addr & 0xffff) < 0x8000) {
                        raddr = (addr & 0x7fff) | (0x8000 * bank);
-                       target->write_data8(raddr + DISPLAY_VRAM_DIRECT_ACCESS, readdata);
+                       target->write_data8(raddr + direct_access_offset, readdata);
                }
        } else {
                raddr = (addr & 0x3fff) | (0x4000 * bank);
-               target->write_data8(raddr + DISPLAY_VRAM_DIRECT_ACCESS, readdata);
+               target->write_data8(raddr + direct_access_offset, readdata);
        }
        return;
 }
@@ -871,7 +858,7 @@ uint32_t MB61VH010::read_data8(uint32_t id)
                                }
                                do_alucmds_dmyread(raddr);
                                raddr = (id - ALU_WRITE_PROXY) % 0xc000;
-                               dmydata = target->read_data8(raddr + DISPLAY_VRAM_DIRECT_ACCESS);
+                               dmydata = target->read_data8(raddr + direct_access_offset);
                                return dmydata;
                        }
                        return 0xffffffff;
index 1542ad9..0b8cd15 100644 (file)
@@ -13,8 +13,8 @@
 
 
 #include "../device.h"
-#include "../memory.h"
-#include "fm7_common.h"
+//#include "../memory.h"
+//#include "fm7_common.h"
 
 enum {
        ALU_CMDREG = 0,
@@ -57,11 +57,10 @@ enum {
        EVENT_MB61VH010_BUSY_OFF
 };
 
+class VM;
+class EMU;
 class MB61VH010: public DEVICE {
-
  protected:
-       EMU *p_emu;
-       VM *p_vm;
        DEVICE *target;
        
        // Registers
@@ -73,7 +72,7 @@ class MB61VH010: public DEVICE {
        uint8_t bank_disable_reg;   // D41B (RW)
        uint8_t tile_reg[4];        // D41C-D41F (WO)
        uint8_t multi_page;
-       
+       uint32_t direct_access_offset;  
        pair_t  line_addr_offset; // D420-D421 (WO)
        pair_t  line_pattern;     // D422-D423 (WO)
        pair_t  line_xbegin;      // D424-D425 (WO)
@@ -112,8 +111,13 @@ class MB61VH010: public DEVICE {
        // LINE
        void do_line(void);
  public:
-       MB61VH010(VM *parent_vm, EMU *parent_emu);
-       ~MB61VH010();
+       MB61VH010(VM *parent_vm, EMU *parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               target = NULL;
+               direct_access_offset = 0;
+               set_device_name(_T("MB61VH010 ALU"));
+       }
+       ~MB61VH010() {}
 
        void save_state(FILEIO *state_fio);
        bool load_state(FILEIO *state_fio);
@@ -130,6 +134,10 @@ class MB61VH010: public DEVICE {
        {
                target = p;
        }
+       void set_direct_access_offset(uint32_t offset)
+       {
+               direct_access_offset = offset;  
+       }
 };