trunk/src/mame/drivers/nss.c
r17458 | r17459 | |
296 | 296 | #include "emu.h" |
297 | 297 | #include "cpu/z80/z80.h" |
298 | 298 | #include "machine/eeprom.h" |
| 299 | #include "video/m50458.h" |
299 | 300 | #include "includes/snes.h" |
300 | 301 | |
301 | 302 | |
r17458 | r17459 | |
529 | 530 | ---- ---x RTC /CS (0=Low/Select, 1=High/No) |
530 | 531 | */ |
531 | 532 | /* TODO */ |
| 533 | ioport("RTC_OSD")->write(data, 0xff); |
532 | 534 | } |
533 | 535 | |
534 | 536 | static ADDRESS_MAP_START( bios_io_map, AS_IO, 8, nss_state ) |
r17458 | r17459 | |
594 | 596 | PORT_BIT( 0x08, IP_ACTIVE_HIGH,IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit) |
595 | 597 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line) |
596 | 598 | |
| 599 | PORT_START("RTC_OSD") |
| 600 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("m50458", m50458_device, set_clock_line) |
| 601 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("m50458", m50458_device, write_bit) |
| 602 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("m50458", m50458_device, set_cs_line) |
| 603 | |
597 | 604 | PORT_START("SERIAL1_DATA1_L") |
598 | 605 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button A") PORT_PLAYER(1) |
599 | 606 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Button X") PORT_PLAYER(1) |
r17458 | r17459 | |
719 | 726 | 16*18 |
720 | 727 | }; |
721 | 728 | |
722 | | static const gfx_layout nss_char_layout_16x16 = |
723 | | { |
724 | | 16,16, |
725 | | RGN_FRAC(1,1), |
726 | | 1, |
727 | | { 0 }, |
728 | | { 0, 1, 2, 3, 4, 5, 6, 7,8,9,10,11,12,13,14,15 }, |
729 | | { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, |
730 | | 16*16 |
731 | | }; |
732 | 729 | |
733 | | |
734 | 730 | /* decoded for debugging purpose, this will be nuked in the end... */ |
735 | 731 | static GFXDECODE_START( nss ) |
736 | 732 | GFXDECODE_ENTRY( "chargen", 0x00000, nss_char_layout_16x18, 0, 1 ) |
737 | | GFXDECODE_ENTRY( "m50458_gfx", 0x00000, nss_char_layout_16x16, 0, 1 ) |
738 | 733 | GFXDECODE_END |
739 | 734 | |
740 | 735 | static MACHINE_CONFIG_START( snes, nss_state ) |
r17458 | r17459 | |
783 | 778 | |
784 | 779 | MCFG_EEPROM_ADD("eeprom", nss_eeprom_intf) |
785 | 780 | |
| 781 | MCFG_M50458_ADD("m50458",4000000) /* TODO: clock */ |
| 782 | |
786 | 783 | MCFG_GFXDECODE( nss ) |
787 | 784 | MCFG_PALETTE_LENGTH(2) |
788 | 785 | MCFG_MACHINE_START( nss ) |
r17458 | r17459 | |
806 | 803 | ROM_LOAD("m50458_char.bin", 0x0000, 0x1200, BAD_DUMP CRC(011cc342) SHA1(d5b9f32d6e251b4b25945267d7c68c099bd83e96) ) \ |
807 | 804 | ROM_REGION( 0x1000, "m50458_gfx", ROMREGION_ERASEFF ) \ |
808 | 805 | ROM_LOAD("m50458_char_mod.bin", 0x0000, 0x1000, BAD_DUMP CRC(8c4326ef) SHA1(21a63c5245ff7f3f70cb45e217b3045b19d0d799) ) \ |
809 | | ROM_REGION( 0x1000, "m50458_vram", ROMREGION_ERASE00 ) \ |
810 | 806 | ROM_REGION( 0x2000, "dspprg", ROMREGION_ERASEFF) \ |
811 | 807 | ROM_REGION( 0x800, "dspdata", ROMREGION_ERASEFF) |
812 | 808 | |
trunk/src/emu/video/m50458.c
r0 | r17459 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Mitsubishi M50458 OSD chip |
| 4 | |
| 5 | ***************************************************************************/ |
| 6 | |
| 7 | #include "emu.h" |
| 8 | #include "video/m50458.h" |
| 9 | |
| 10 | |
| 11 | |
| 12 | //************************************************************************** |
| 13 | // GLOBAL VARIABLES |
| 14 | //************************************************************************** |
| 15 | |
| 16 | // device type definition |
| 17 | const device_type M50458 = &device_creator<m50458_device>; |
| 18 | |
| 19 | |
| 20 | //************************************************************************** |
| 21 | // LIVE DEVICE |
| 22 | //************************************************************************** |
| 23 | |
| 24 | //------------------------------------------------- |
| 25 | // m50458_device - constructor |
| 26 | //------------------------------------------------- |
| 27 | |
| 28 | m50458_device::m50458_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 29 | : device_t(mconfig, M50458, "m50458", tag, owner, clock) |
| 30 | { |
| 31 | |
| 32 | } |
| 33 | |
| 34 | |
| 35 | //------------------------------------------------- |
| 36 | // device_validity_check - perform validity checks |
| 37 | // on this device |
| 38 | //------------------------------------------------- |
| 39 | |
| 40 | void m50458_device::device_validity_check(validity_checker &valid) const |
| 41 | { |
| 42 | } |
| 43 | |
| 44 | |
| 45 | //------------------------------------------------- |
| 46 | // device_start - device-specific startup |
| 47 | //------------------------------------------------- |
| 48 | |
| 49 | void m50458_device::device_start() |
| 50 | { |
| 51 | |
| 52 | } |
| 53 | |
| 54 | |
| 55 | //------------------------------------------------- |
| 56 | // device_reset - device-specific reset |
| 57 | //------------------------------------------------- |
| 58 | |
| 59 | void m50458_device::device_reset() |
| 60 | { |
| 61 | } |
| 62 | |
| 63 | |
| 64 | //************************************************************************** |
| 65 | // READ/WRITE HANDLERS |
| 66 | //************************************************************************** |
| 67 | |
| 68 | WRITE_LINE_MEMBER( m50458_device::write_bit ) |
| 69 | { |
| 70 | m_latch = state; |
| 71 | } |
| 72 | |
| 73 | WRITE_LINE_MEMBER( m50458_device::set_cs_line ) |
| 74 | { |
| 75 | m_reset_line = state; |
| 76 | |
| 77 | if(m_reset_line != CLEAR_LINE) |
| 78 | { |
| 79 | printf("Reset asserted\n"); |
| 80 | m_cmd_stream_pos = 0; |
| 81 | m_current_cmd = 0; |
| 82 | m_osd_state = OSD_SET_ADDRESS; |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | /* |
| 87 | 0x7e: "JUST A MOMENT" |
| 88 | 0x81: "NON SLOT" |
| 89 | */ |
| 90 | |
| 91 | WRITE_LINE_MEMBER( m50458_device::set_clock_line ) |
| 92 | { |
| 93 | if (m_reset_line == CLEAR_LINE) |
| 94 | { |
| 95 | if(state == 1) |
| 96 | { |
| 97 | //printf("%d\n",m_latch); |
| 98 | |
| 99 | m_current_cmd = (m_current_cmd >> 1) | ((m_latch<<15)&0x8000); |
| 100 | m_cmd_stream_pos++; |
| 101 | |
| 102 | if(m_cmd_stream_pos == 16) |
| 103 | { |
| 104 | switch(m_osd_state) |
| 105 | { |
| 106 | case OSD_SET_ADDRESS: |
| 107 | m_osd_addr = m_current_cmd; |
| 108 | m_osd_state = OSD_SET_DATA; |
| 109 | break; |
| 110 | case OSD_SET_DATA: |
| 111 | printf("%04x %04x\n",m_osd_addr,m_current_cmd); |
| 112 | |
| 113 | m_osd_addr++; |
| 114 | /* Presumably wraps at 0x127? */ |
| 115 | if(m_osd_addr > 0x127) { m_osd_addr = 0; } |
| 116 | break; |
| 117 | } |
| 118 | |
| 119 | m_cmd_stream_pos = 0; |
| 120 | m_current_cmd = 0; |
| 121 | } |
| 122 | } |
| 123 | } |
| 124 | } |
trunk/src/emu/video/m50458.h
r0 | r17459 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Mitsubishi M50458 OSD chip |
| 4 | |
| 5 | ***************************************************************************/ |
| 6 | |
| 7 | #pragma once |
| 8 | |
| 9 | #ifndef __M50458DEV_H__ |
| 10 | #define __M50458DEV_H__ |
| 11 | |
| 12 | |
| 13 | |
| 14 | //************************************************************************** |
| 15 | // INTERFACE CONFIGURATION MACROS |
| 16 | //************************************************************************** |
| 17 | |
| 18 | #define MCFG_M50458_ADD(_tag,_freq) \ |
| 19 | MCFG_DEVICE_ADD(_tag, M50458,_freq) \ |
| 20 | |
| 21 | |
| 22 | //************************************************************************** |
| 23 | // TYPE DEFINITIONS |
| 24 | //************************************************************************** |
| 25 | |
| 26 | typedef enum |
| 27 | { |
| 28 | OSD_SET_ADDRESS = 0, |
| 29 | OSD_SET_DATA |
| 30 | } m50458_state_t; |
| 31 | |
| 32 | |
| 33 | // ======================> m50458_device |
| 34 | |
| 35 | class m50458_device : public device_t |
| 36 | { |
| 37 | public: |
| 38 | // construction/destruction |
| 39 | m50458_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 40 | |
| 41 | // I/O operations |
| 42 | WRITE_LINE_MEMBER( write_bit ); |
| 43 | WRITE_LINE_MEMBER( set_cs_line ); |
| 44 | WRITE_LINE_MEMBER( set_clock_line ); |
| 45 | |
| 46 | protected: |
| 47 | // device-level overrides |
| 48 | virtual void device_validity_check(validity_checker &valid) const; |
| 49 | virtual void device_start(); |
| 50 | virtual void device_reset(); |
| 51 | |
| 52 | int m_latch; |
| 53 | int m_reset_line; |
| 54 | int m_clock_line; |
| 55 | int m_current_cmd; |
| 56 | int m_cmd_stream_pos; |
| 57 | UINT16 m_osd_addr; |
| 58 | |
| 59 | m50458_state_t m_osd_state; |
| 60 | }; |
| 61 | |
| 62 | |
| 63 | // device type definition |
| 64 | extern const device_type M50458; |
| 65 | |
| 66 | |
| 67 | |
| 68 | //************************************************************************** |
| 69 | // GLOBAL VARIABLES |
| 70 | //************************************************************************** |
| 71 | |
| 72 | |
| 73 | |
| 74 | #endif |