trunk/src/mess/drivers/crvision.c
r17623 | r17624 | |
497 | 497 | TMS9928a_interface tms9918_intf |
498 | 498 | -------------------------------------------------*/ |
499 | 499 | |
500 | | static WRITE_LINE_DEVICE_HANDLER(crvision_vdp_interrupt) |
| 500 | static TMS9928A_INTERFACE( vdp_intf ) |
501 | 501 | { |
502 | | cputag_set_input_line(device->machine(), M6502_TAG, INPUT_LINE_IRQ0, state); |
503 | | } |
504 | | |
505 | | static TMS9928A_INTERFACE(crvision_tms9928a_interface) |
506 | | { |
507 | | "screen", |
| 502 | SCREEN_TAG, |
508 | 503 | 0x4000, |
509 | | DEVCB_LINE(crvision_vdp_interrupt) |
| 504 | DEVCB_CPU_INPUT_LINE(M6502_TAG, INPUT_LINE_IRQ0) |
510 | 505 | }; |
511 | 506 | |
512 | 507 | /*------------------------------------------------- |
r17623 | r17624 | |
616 | 611 | DEVCB_DRIVER_MEMBER(crvision_state, pia_pa_r), // input A |
617 | 612 | DEVCB_DRIVER_MEMBER(crvision_state, pia_pb_r), // input B |
618 | 613 | DEVCB_LINE_VCC, // input CA1 (+5V) |
619 | | DEVCB_DEVICE_LINE(SN76489_TAG, sn76496_ready_r), // input CB1 |
| 614 | DEVCB_DEVICE_LINE_MEMBER(SN76489_TAG, sn76496_base_device, ready_r), // input CB1 |
620 | 615 | DEVCB_LINE_VCC, // input CA2 (+5V) |
621 | 616 | DEVCB_LINE_VCC, // input CB2 (+5V) |
622 | 617 | DEVCB_DRIVER_MEMBER(crvision_state, pia_pa_w), // output A |
623 | | DEVCB_DEVICE_HANDLER(SN76489_TAG, sn76496_w), // output B |
| 618 | DEVCB_DEVICE_MEMBER(SN76489_TAG, sn76496_base_device, write), // output B |
624 | 619 | DEVCB_NULL, // output CA2 |
625 | 620 | DEVCB_NULL, // output CB2 (SN76489 pin CE_) |
626 | 621 | DEVCB_NULL, // irq A |
r17623 | r17624 | |
723 | 718 | READ_LINE_MEMBER( laser2001_state::pia_cb1_r ) |
724 | 719 | { |
725 | 720 | /* actually this is a diode-AND (READY & _BUSY), but ctronics.c returns busy status if printer image is not mounted -> Manager won't boot */ |
726 | | return sn76496_ready_r(m_psg) & (m_centronics->not_busy_r() | m_pia->ca2_output_z()); |
| 721 | return m_psg->ready_r() && (m_centronics->not_busy_r() || m_pia->ca2_output_z()); |
727 | 722 | } |
728 | 723 | |
729 | 724 | WRITE_LINE_MEMBER( laser2001_state::pia_cb2_w ) |
730 | 725 | { |
731 | 726 | if (m_pia->ca2_output_z()) |
732 | 727 | { |
733 | | if (!state) sn76496_w(m_psg, 0, m_keylatch); |
| 728 | if (!state) m_psg->write(m_keylatch); |
734 | 729 | } |
735 | 730 | else |
736 | 731 | { |
r17623 | r17624 | |
808 | 803 | DEVCB_DEVICE_LINE_MEMBER(PIA6821_TAG, pia6821_device, cb1_w) |
809 | 804 | }; |
810 | 805 | |
| 806 | /*------------------------------------------------- |
| 807 | sn76496_config psg_intf |
| 808 | -------------------------------------------------*/ |
| 809 | |
| 810 | static const sn76496_config psg_intf = |
| 811 | { |
| 812 | DEVCB_NULL |
| 813 | }; |
| 814 | |
811 | 815 | /*************************************************************************** |
812 | 816 | MACHINE INITIALIZATION |
813 | 817 | ***************************************************************************/ |
r17623 | r17624 | |
972 | 976 | |
973 | 977 | // sound hardware |
974 | 978 | MCFG_SPEAKER_STANDARD_MONO("mono") |
975 | | MCFG_SOUND_ADD(SN76489_TAG, SN76489, XTAL_2MHz) |
| 979 | MCFG_SOUND_ADD(SN76489_TAG, SN76489A_NEW, XTAL_2MHz) |
| 980 | MCFG_SOUND_CONFIG(psg_intf) |
976 | 981 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
977 | 982 | |
978 | 983 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, CASSETTE_TAG) |
r17623 | r17624 | |
1000 | 1005 | |
1001 | 1006 | static MACHINE_CONFIG_DERIVED( ntsc, creativision ) |
1002 | 1007 | // video hardware |
1003 | | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9918, crvision_tms9928a_interface ) |
1004 | | MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" ) |
| 1008 | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9918, vdp_intf ) |
| 1009 | MCFG_TMS9928A_SCREEN_ADD_NTSC( SCREEN_TAG ) |
1005 | 1010 | MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9918_device, screen_update ) |
1006 | 1011 | MACHINE_CONFIG_END |
1007 | 1012 | |
r17623 | r17624 | |
1011 | 1016 | |
1012 | 1017 | static MACHINE_CONFIG_DERIVED_CLASS( pal, creativision, crvision_pal_state ) |
1013 | 1018 | // video hardware |
1014 | | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9929, crvision_tms9928a_interface ) |
1015 | | MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" ) |
| 1019 | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9929, vdp_intf ) |
| 1020 | MCFG_TMS9928A_SCREEN_ADD_PAL( SCREEN_TAG ) |
1016 | 1021 | MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9929_device, screen_update ) |
1017 | 1022 | MACHINE_CONFIG_END |
1018 | 1023 | |
r17623 | r17624 | |
1022 | 1027 | |
1023 | 1028 | static MACHINE_CONFIG_START( lasr2001, laser2001_state ) |
1024 | 1029 | // basic machine hardware |
1025 | | MCFG_CPU_ADD(M6502_TAG, M6502, 17734470/9) |
| 1030 | MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_17_73447MHz/9) |
1026 | 1031 | MCFG_CPU_PROGRAM_MAP(lasr2001_map) |
1027 | 1032 | |
1028 | 1033 | // devices |
r17623 | r17624 | |
1032 | 1037 | MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, lasr2001_centronics_intf) |
1033 | 1038 | |
1034 | 1039 | // video hardware |
1035 | | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9929A, crvision_tms9928a_interface ) |
1036 | | MCFG_TMS9928A_SCREEN_ADD_PAL( "screen" ) |
| 1040 | MCFG_TMS9928A_ADD( TMS9929_TAG, TMS9929A, vdp_intf ) |
| 1041 | MCFG_TMS9928A_SCREEN_ADD_PAL( SCREEN_TAG ) |
1037 | 1042 | MCFG_SCREEN_UPDATE_DEVICE( TMS9929_TAG, tms9929a_device, screen_update ) |
1038 | 1043 | |
1039 | 1044 | // sound hardware |
1040 | 1045 | MCFG_SPEAKER_STANDARD_MONO("mono") |
1041 | | MCFG_SOUND_ADD(SN76489_TAG, SN76489A, 17734470/9) |
| 1046 | MCFG_SOUND_ADD(SN76489_TAG, SN76489A_NEW, XTAL_17_73447MHz/9) |
| 1047 | MCFG_SOUND_CONFIG(psg_intf) |
1042 | 1048 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
1043 | 1049 | |
1044 | 1050 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, CASSETTE_TAG) |