trunk/src/mame/includes/bfm_sc5.h
| r22646 | r22647 | |
| 6 | 6 | public: |
| 7 | 7 | bfm_sc5_state(const machine_config &mconfig, device_type type, const char *tag) |
| 8 | 8 | : driver_device(mconfig, type, tag), |
| 9 | | m_maincpu(*this, "maincpu") |
| 9 | m_maincpu(*this, "maincpu"), |
| 10 | m_vfd0(*this, "vfd0") |
| 10 | 11 | { } |
| 11 | 12 | |
| 12 | 13 | protected: |
| 13 | 14 | |
| 15 | |
| 16 | public: |
| 17 | |
| 18 | |
| 14 | 19 | // devices |
| 15 | 20 | required_device<cpu_device> m_maincpu; |
| 16 | | public: |
| 21 | optional_device<bfm_bda_t> m_vfd0; |
| 22 | |
| 23 | // serial vfd |
| 24 | int vfd_enabled; |
| 25 | bool vfd_old_clock; |
| 26 | |
| 27 | UINT8 vfd_ser_value; |
| 28 | int vfd_ser_count; |
| 29 | |
| 17 | 30 | DECLARE_DRIVER_INIT(sc5); |
| 18 | 31 | DECLARE_WRITE_LINE_MEMBER(bfm_sc5_ym_irqhandler); |
| 19 | 32 | DECLARE_READ8_MEMBER( sc5_10202F0_r ); |
trunk/src/mame/drivers/bfm_sc5.c
| r22646 | r22647 | |
| 15 | 15 | #include "bfm_sc5.lh" |
| 16 | 16 | #include "video/awpvid.h" |
| 17 | 17 | |
| 18 | |
| 19 | |
| 20 | void bfm_sc5_reset_serial_vfd(running_machine &machine) |
| 21 | { |
| 22 | bfm_sc5_state *state = machine.driver_data<bfm_sc5_state>(); |
| 23 | |
| 24 | state->m_vfd0->reset(); |
| 25 | state->vfd_old_clock = false; |
| 26 | } |
| 27 | |
| 28 | void bfm_sc5_write_serial_vfd(running_machine &machine, bool cs, bool clock, bool data) |
| 29 | { |
| 30 | bfm_sc5_state *state = machine.driver_data<bfm_sc5_state>(); |
| 31 | |
| 32 | // if we're turned on |
| 33 | if ( cs ) |
| 34 | { |
| 35 | if ( !state->vfd_enabled ) |
| 36 | { |
| 37 | bfm_sc5_reset_serial_vfd(machine); |
| 38 | state->vfd_old_clock = clock; |
| 39 | state->vfd_enabled = true; |
| 40 | } |
| 41 | else |
| 42 | { |
| 43 | // if the clock line changes |
| 44 | if ( clock != state->vfd_old_clock ) |
| 45 | { |
| 46 | if ( !clock ) |
| 47 | { |
| 48 | //Should move to the internal serial process when DM01 is device-ified |
| 49 | // m_vfd0->shift_data(!data); |
| 50 | state->vfd_ser_value <<= 1; |
| 51 | if (data) state->vfd_ser_value |= 1; |
| 52 | |
| 53 | state->vfd_ser_count++; |
| 54 | if ( state->vfd_ser_count == 8 ) |
| 55 | { |
| 56 | state->vfd_ser_count = 0; |
| 57 | // if (machine.device("matrix")) |
| 58 | // { |
| 59 | // BFM_dm01_writedata(machine,state->vfd_ser_value); |
| 60 | // } |
| 61 | // else |
| 62 | { |
| 63 | state->m_vfd0->write_char(state->vfd_ser_value); |
| 64 | } |
| 65 | } |
| 66 | } |
| 67 | state->vfd_old_clock = clock; |
| 68 | } |
| 69 | } |
| 70 | } |
| 71 | else |
| 72 | { |
| 73 | state->vfd_enabled = false; |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | |
| 18 | 78 | static ADDRESS_MAP_START( sc5_map, AS_PROGRAM, 32, bfm_sc5_state ) |
| 19 | 79 | // ROM (max size?) |
| 20 | 80 | AM_RANGE(0x00000000, 0x002fffff) AM_ROM |
| r22646 | r22647 | |
| 159 | 219 | switch (offset) |
| 160 | 220 | { |
| 161 | 221 | case 0x0: |
| 222 | bfm_sc5_write_serial_vfd(machine(), (data &0x4)?1:0, (data &0x1)?1:0, (data&0x2) ? 0:1); |
| 223 | if (data&0xf8) printf("%s: sc5_10202F0_w %d - %02x\n", machine().describe_context(), offset, data); |
| 224 | break; |
| 162 | 225 | case 0x1: |
| 163 | 226 | case 0x2: |
| 164 | 227 | case 0x3: |