|
11 | 11 | - f1gp2's hardware is very similar to Lethal Crash Race, main difference
|
12 | 12 | being an extra 68000.
|
13 | 13 |
|
14 |
| - TODO: |
15 |
| - - Hook up link for Multi Player game mode. Currently they boot with |
16 |
| - link set to multiple, but the ID changes every boot (and will black |
17 |
| - out if a multiplayer game is started). |
18 |
| -
|
19 | 14 | f1gp:
|
20 | 15 | - gfxctrl register not understood - handling of fg/sprite priority to fix
|
21 | 16 | "continue" screen is just a kludge.
|
|
34 | 29 | #include "vsystem_spr.h"
|
35 | 30 | #include "vsystem_spr2.h"
|
36 | 31 |
|
| 32 | +#include "bus/rs232/rs232.h" |
| 33 | + |
37 | 34 | #include "cpu/m68000/m68000.h"
|
38 | 35 | #include "cpu/z80/z80.h"
|
39 | 36 | #include "machine/6850acia.h"
|
@@ -84,6 +81,8 @@ class f1gp_state : public driver_device
|
84 | 81 | m_palette(*this, "palette"),
|
85 | 82 | m_soundlatch(*this, "soundlatch"),
|
86 | 83 | m_acia(*this, "acia"),
|
| 84 | + m_rs232_out(*this, "com_out"), |
| 85 | + m_rs232_in(*this, "com_in"), |
87 | 86 | m_rozgfxram(*this, "rozgfxram"),
|
88 | 87 | m_spr_old(*this, "vsystem_spr_old%u", 1U)
|
89 | 88 | { }
|
@@ -120,6 +119,8 @@ class f1gp_state : public driver_device
|
120 | 119 | required_device<palette_device> m_palette;
|
121 | 120 | optional_device<generic_latch_8_device> m_soundlatch; // not f1gpbl
|
122 | 121 | required_device<acia6850_device> m_acia;
|
| 122 | + required_device<rs232_port_device> m_rs232_out; |
| 123 | + required_device<rs232_port_device> m_rs232_in; |
123 | 124 |
|
124 | 125 | void sh_bankswitch_w(uint8_t data);
|
125 | 126 | uint8_t soundlatch_pending_r();
|
@@ -742,6 +743,14 @@ static INPUT_PORTS_START( f1gp2 )
|
742 | 743 | PORT_DIPUNUSED( 0x001e, 0x001e )
|
743 | 744 | INPUT_PORTS_END
|
744 | 745 |
|
| 746 | +static DEVICE_INPUT_DEFAULTS_START( linkplay ) |
| 747 | + DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_78125 ) |
| 748 | + DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_78125 ) |
| 749 | + DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 ) |
| 750 | + DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_EVEN ) |
| 751 | + DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 ) |
| 752 | +DEVICE_INPUT_DEFAULTS_END |
| 753 | + |
745 | 754 |
|
746 | 755 |
|
747 | 756 | static GFXDECODE_START( gfx_f1gp )
|
@@ -826,9 +835,18 @@ void f1gp_state::f1gp(machine_config &config)
|
826 | 835 |
|
827 | 836 | ACIA6850(config, m_acia, 0);
|
828 | 837 | m_acia->irq_handler().set_inputline("sub", M68K_IRQ_3);
|
829 |
| - m_acia->txd_handler().set("acia", FUNC(acia6850_device::write_rxd)); // loopback for now |
| 838 | + m_acia->txd_handler().set("com_out", FUNC(rs232_port_device::write_txd)); |
| 839 | + |
| 840 | + // dual DE-9 ports |
| 841 | + // COM-IN (inner) and COM-OUT (outer) according to manual |
| 842 | + rs232_port_device &rs232out(RS232_PORT(config, "com_out", default_rs232_devices, nullptr)); |
| 843 | + rs232out.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(linkplay)); |
830 | 844 |
|
831 |
| - clock_device &acia_clock(CLOCK(config, "acia_clock", 1'000'000)); // guessed |
| 845 | + rs232_port_device &rs232in(RS232_PORT(config, "com_in", default_rs232_devices, nullptr)); |
| 846 | + rs232in.rxd_handler().set("acia", FUNC(acia6850_device::write_rxd)); |
| 847 | + rs232in.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(linkplay)); |
| 848 | + |
| 849 | + clock_device &acia_clock(CLOCK(config, "acia_clock", 20_MHz_XTAL / 16)); // 78125 baud |
832 | 850 | acia_clock.signal_handler().set(m_acia, FUNC(acia6850_device::write_txc));
|
833 | 851 | acia_clock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc));
|
834 | 852 |
|
@@ -888,12 +906,22 @@ void f1gp_state::f1gpbl(machine_config &config)
|
888 | 906 |
|
889 | 907 | ACIA6850(config, m_acia, 0);
|
890 | 908 | m_acia->irq_handler().set_inputline("sub", M68K_IRQ_3);
|
891 |
| - m_acia->txd_handler().set("acia", FUNC(acia6850_device::write_rxd)); // loopback for now |
| 909 | + m_acia->txd_handler().set("com_out", FUNC(rs232_port_device::write_txd)); |
| 910 | + |
| 911 | + // dual DE-9 ports |
| 912 | + // COM-IN (inner) and COM-OUT (outer) according to manual |
| 913 | + rs232_port_device &rs232out(RS232_PORT(config, "com_out", default_rs232_devices, nullptr)); |
| 914 | + rs232out.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(linkplay)); |
892 | 915 |
|
893 |
| - clock_device &acia_clock(CLOCK(config, "acia_clock", 1'000'000)); // guessed |
| 916 | + rs232_port_device &rs232in(RS232_PORT(config, "com_in", default_rs232_devices, nullptr)); |
| 917 | + rs232in.rxd_handler().set("acia", FUNC(acia6850_device::write_rxd)); |
| 918 | + rs232in.set_option_device_input_defaults("null_modem", DEVICE_INPUT_DEFAULTS_NAME(linkplay)); |
| 919 | + |
| 920 | + clock_device &acia_clock(CLOCK(config, "acia_clock", 20_MHz_XTAL / 16)); // 78125 baud |
894 | 921 | acia_clock.signal_handler().set(m_acia, FUNC(acia6850_device::write_txc));
|
895 | 922 | acia_clock.signal_handler().append(m_acia, FUNC(acia6850_device::write_rxc));
|
896 | 923 |
|
| 924 | + |
897 | 925 | // video hardware
|
898 | 926 | screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
899 | 927 | screen.set_refresh_hz(60);
|
@@ -1162,9 +1190,9 @@ ROM_END
|
1162 | 1190 | } // anonymous namespace
|
1163 | 1191 |
|
1164 | 1192 |
|
1165 |
| -GAME( 1991, f1gp, 0, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 1)", MACHINE_NO_COCKTAIL | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // censored banners, US McO'River release? |
1166 |
| -GAME( 1991, f1gpa, f1gp, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 2)", MACHINE_NO_COCKTAIL | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) |
1167 |
| -GAME( 1991, f1gpb, f1gp, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 3)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // supposed to be the earliest version dumped and only work with steering wheel |
1168 |
| -GAME( 1991, f1gpbl, f1gp, f1gpbl, f1gp, f1gp_state, empty_init, ROT90, "bootleg (Playmark)", "F-1 Grand Prix (Playmark bootleg)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // PCB marked 'Super Formula II', manufactured by Playmark. |
| 1193 | +GAME( 1991, f1gp, 0, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // censored banners, US McO'River release? |
| 1194 | +GAME( 1991, f1gpa, f1gp, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
| 1195 | +GAME( 1991, f1gpb, f1gp, f1gp, f1gp, f1gp_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix (set 3)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // supposed to be the earliest version dumped and only work with steering wheel |
| 1196 | +GAME( 1991, f1gpbl, f1gp, f1gpbl, f1gp, f1gp_state, empty_init, ROT90, "bootleg (Playmark)", "F-1 Grand Prix (Playmark bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // PCB marked 'Super Formula II', manufactured by Playmark. |
1169 | 1197 |
|
1170 |
| -GAME( 1992, f1gp2, 0, f1gp2, f1gp2, f1gp2_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix Part II", MACHINE_NO_COCKTAIL | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) |
| 1198 | +GAME( 1992, f1gp2, 0, f1gp2, f1gp2, f1gp2_state, empty_init, ROT90, "Video System Co.", "F-1 Grand Prix Part II", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) |
0 commit comments