diff options
Diffstat (limited to 'src/mame/machine/dc-ctrl.cpp')
-rw-r--r-- | src/mame/machine/dc-ctrl.cpp | 96 |
1 files changed, 31 insertions, 65 deletions
diff --git a/src/mame/machine/dc-ctrl.cpp b/src/mame/machine/dc-ctrl.cpp index 56a14ca3b4f..eb2bdfbe241 100644 --- a/src/mame/machine/dc-ctrl.cpp +++ b/src/mame/machine/dc-ctrl.cpp @@ -5,23 +5,27 @@ /******************************* * - * Dreamcast Controller + * Common abstract class * ******************************/ -DEFINE_DEVICE_TYPE(DC_CONTROLLER, dc_controller_device, "dcctrl", "Dreamcast Controller") - -dc_controller_device::dc_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - maple_device(mconfig, DC_CONTROLLER, tag, owner, clock) +dc_common_device::dc_common_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : + maple_device(mconfig, type, tag, owner, clock) { memset(port_tag, 0, sizeof(port_tag)); +} - id = "Dreamcast Controller"; - license = "Produced By or Under License From SEGA ENTERPRISES,LTD."; - versions = "Version 1.010,1998/09/28,315-6211-AB ,Analog Module : The 4th Edition.5/8 +DF"; +void dc_common_device::device_start() +{ + maple_device::device_start(); + + for (int i = 0; i < 8; i++) + { + port[i] = ioport(port_tag[i]); + } } -void dc_controller_device::maple_w(const uint32_t *data, uint32_t in_size) +void dc_common_device::maple_w(const uint32_t *data, uint32_t in_size) { switch(data[0] & 0xff) { case 0x01: // Device request @@ -51,6 +55,22 @@ void dc_controller_device::maple_w(const uint32_t *data, uint32_t in_size) break; } } + +/******************************* + * + * Dreamcast Controller + * + ******************************/ + +DEFINE_DEVICE_TYPE(DC_CONTROLLER, dc_controller_device, "dcctrl", "Dreamcast Controller") + +dc_controller_device::dc_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + dc_common_device(mconfig, DC_CONTROLLER, tag, owner, clock) +{ + id = "Dreamcast Controller"; + license = "Produced By or Under License From SEGA ENTERPRISES,LTD."; + versions = "Version 1.010,1998/09/28,315-6211-AB ,Analog Module : The 4th Edition.5/8 +DF"; +} void dc_controller_device::fixed_status(uint32_t *dest) { @@ -94,16 +114,6 @@ void dc_controller_device::read(uint32_t *dest) ((port[7] ? port[7]->read() : 0x80) << 24); } -void dc_controller_device::device_start() -{ - maple_device::device_start(); - - for (int i = 0; i < 8; i++) - { - port[i] = ioport(port_tag[i]); - } -} - /******************************* * * Dreamcast Keyboard @@ -113,54 +123,20 @@ void dc_controller_device::device_start() DEFINE_DEVICE_TYPE(DC_KEYBOARD, dc_keyboard_device, "dckb", "Dreamcast Keyboard") dc_keyboard_device::dc_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - maple_device(mconfig, DC_KEYBOARD, tag, owner, clock) + dc_common_device(mconfig, DC_KEYBOARD, tag, owner, clock) { - memset(port_tag, 0, sizeof(port_tag)); - id = "92key Keyboard for JPN"; license = "Produced By or Under License From SEGA ENTERPRISES,LTD."; versions = "Version 1.000,1998/06/12,315-6215-AD ,Key Scan Module: The 1st Edition. 05/20"; } -void dc_keyboard_device::maple_w(const uint32_t *data, uint32_t in_size) -{ - switch(data[0] & 0xff) { - case 0x01: // Device request - reply_start(5, 0x20, 29); - fixed_status(reply_buffer+1); - reply_ready_with_delay(); - break; - - case 0x02: // All status request - reply_start(6, 0x20, 49); - fixed_status(reply_buffer+1); - free_status(reply_buffer+29); - reply_ready_with_delay(); - break; - - case 0x03: // reset - we're stateless where it matters - reply_start(7, 0x20, 0); - reply_ready_with_delay(); - break; - - case 0x09: // get condition - if(1 || (in_size >= 2 && data[1] == 0x01000000)) { - reply_start(8, 0x20, 4); - read(reply_buffer+1); - reply_ready_with_delay(); - } - break; - } -} - void dc_keyboard_device::fixed_status(uint32_t *dest) { - // 00000040 00102000 0800000000000000000 dest[0] = 0x40000000; // Keyboard dest[1] = 0x00201000; // 1st function dest[2] = 0x00000008; // No 2nd function dest[3] = 0x00000000; // No 3rd function - dest[4] = 0x00000002; // Japan region + dest[4] = 0x00000002; // Japan region, no expansion copy_with_spaces(((uint8_t *)dest) + 18, id, 30); copy_with_spaces(((uint8_t *)dest) + 48, license, 60); dest[27] = 0x0190015e; // standby 35mA, max 40mA @@ -187,13 +163,3 @@ void dc_keyboard_device::read(uint32_t *dest) ((port[7] ? port[7]->read() : 0) << 24); } -void dc_keyboard_device::device_start() -{ - maple_device::device_start(); - - for (int i = 0; i < 8; i++) - { - port[i] = ioport(port_tag[i]); - } -} - |