18
18
Known Issues:
19
19
* Some features used by the AWP games such as reels are not emulated.
20
20
* Timing for reels, and other opto devices is controlled by a generated clock
21
- in a weird daisychain setup.
21
+ in a weird daisychain setup. We're using the later direct drive approach for now
22
22
23
23
AWP game notes:
24
24
The byte at 0x81 of the EVEN 68k rom appears to be some kind of
@@ -245,31 +245,32 @@ void jpmsys5_state::reel_0123_w(offs_t offset, uint16_t data, uint16_t mem_mask)
245
245
{
246
246
logerror (" %s: reel_0123_w %04x %04x\n " , machine ().describe_context (), data, mem_mask);
247
247
248
+
248
249
// only writes 0/1/2/3 to each reel?
249
250
if (data & 0xcccc )
250
251
popmessage (" reel_0123_w upper bits set" , data & 0xcccc );
251
252
252
253
if (m_reel[0 ])
253
254
{
254
- m_reel[0 ]->update ((data >> 0 ) & 0x03 );
255
+ m_reel[0 ]->update (reel_interface_table[ (data >> 0 ) & 0x03 ] );
255
256
awp_draw_reel (machine (), " reel1" , *m_reel[0 ]);
256
257
}
257
258
258
259
if (m_reel[1 ])
259
260
{
260
- m_reel[1 ]->update ((data >> 4 ) & 0x03 );
261
+ m_reel[1 ]->update (reel_interface_table[ (data >> 4 ) & 0x03 ] );
261
262
awp_draw_reel (machine (), " reel2" , *m_reel[1 ]);
262
263
}
263
264
264
265
if (m_reel[2 ])
265
266
{
266
- m_reel[2 ]->update ((data >> 8 ) & 0x03 );
267
+ m_reel[2 ]->update (reel_interface_table[ (data >> 8 ) & 0x03 ] );
267
268
awp_draw_reel (machine (), " reel3" , *m_reel[2 ]);
268
269
}
269
270
270
271
if (m_reel[3 ])
271
272
{
272
- m_reel[3 ]->update ((data >> 12 ) & 0x03 );
273
+ m_reel[3 ]->update (reel_interface_table[ (data >> 12 ) & 0x03 ] );
273
274
awp_draw_reel (machine (), " reel4" , *m_reel[3 ]);
274
275
}
275
276
}
@@ -283,23 +284,23 @@ void jpmsys5_state::reel_4567_w(offs_t offset, uint16_t data, uint16_t mem_mask)
283
284
284
285
if (m_reel[4 ])
285
286
{
286
- m_reel[4 ]->update ((data >> 0 ) & 0x03 );
287
+ m_reel[4 ]->update (reel_interface_table[ (data >> 0 ) & 0x03 ] );
287
288
awp_draw_reel (machine (), " reel5" , *m_reel[4 ]);
288
289
}
289
290
if (m_reel[5 ])
290
291
{
291
- m_reel[5 ]->update ((data >> 4 ) & 0x03 );
292
+ m_reel[5 ]->update (reel_interface_table[ (data >> 4 ) & 0x03 ] );
292
293
awp_draw_reel (machine (), " reel6" , *m_reel[5 ]);
293
294
}
294
295
#if 0
295
296
if (m_reel[6])
296
297
{
297
- m_reel[6]->update(data >> 8) & 0x03);
298
+ m_reel[6]->update(reel_interface_table[( data >> 8) & 0x03] );
298
299
awp_draw_reel(machine(), "reel6", *m_reel[6]);
299
300
}
300
301
if (m_reel[7])
301
302
{
302
- m_reel[7]->update((data >> 12) & 0x03);
303
+ m_reel[7]->update(reel_interface_table[ (data >> 12) & 0x03] );
303
304
awp_draw_reel(machine(), "reel7", *m_reel[7]);
304
305
}
305
306
#endif
@@ -850,20 +851,17 @@ void jpmsys5v_state::jpmsys5v(machine_config &config)
850
851
851
852
void jpmsys5_state::reels (machine_config &config)
852
853
{
853
- // probably incorrect reel types, but they do seem to only require 2 bits to write?
854
- // forcing 200 steps keeps j5fair main reels aligned, so probably needs a type
855
- // with the same write patterns as MPU3_48STEP_REEL, but with 200 steps defining?
856
- REEL (config, m_reel[0 ], MPU3_48STEP_REEL, 1 , 3 , 0x00 , 2 , 200 );
854
+ REEL (config, m_reel[0 ], SYS5_100STEP_REEL, 1 , 3 , 0x00 , 2 , 200 );
857
855
m_reel[0 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<0 >));
858
- REEL (config, m_reel[1 ], MPU3_48STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
856
+ REEL (config, m_reel[1 ], SYS5_100STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
859
857
m_reel[1 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<1 >));
860
- REEL (config, m_reel[2 ], MPU3_48STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
858
+ REEL (config, m_reel[2 ], SYS5_100STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
861
859
m_reel[2 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<2 >));
862
- REEL (config, m_reel[3 ], MPU3_48STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
860
+ REEL (config, m_reel[3 ], SYS5_100STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
863
861
m_reel[3 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<3 >));
864
- REEL (config, m_reel[4 ], MPU3_48STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
862
+ REEL (config, m_reel[4 ], SYS5_100STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
865
863
m_reel[4 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<4 >));
866
- REEL (config, m_reel[5 ], MPU3_48STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
864
+ REEL (config, m_reel[5 ], SYS5_100STEP_REEL , 1 , 3 , 0x00 , 2 , 200 );
867
865
m_reel[5 ]->optic_handler ().set (FUNC (jpmsys5_state::reel_optic_cb<5 >));
868
866
}
869
867
@@ -953,7 +951,7 @@ INPUT_PORTS_START( popeye )
953
951
PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(" Back door" ) PORT_CODE(KEYCODE_R) PORT_TOGGLE
954
952
PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(" Cash door" ) PORT_CODE(KEYCODE_T) PORT_TOGGLE
955
953
PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME(" Refill key" ) PORT_CODE(KEYCODE_Y) PORT_TOGGLE
956
- PORT_DIPNAME( 0x08 , 0x00 , " Direct 0x08" ) // These are the % key, at least for popeye?
954
+ PORT_DIPNAME( 0x08 , 0x00 , " Direct 0x08" ) // These are the % key, at least for popeye? But there's a pin missing if so, usually these have 4 bits
957
955
PORT_DIPSETTING( 0x08 , DEF_STR( Off ) )
958
956
PORT_DIPSETTING( 0x00 , DEF_STR( On ) )
959
957
PORT_DIPNAME( 0x10 , 0x10 , " Direct 0x10" )
@@ -968,29 +966,73 @@ INPUT_PORTS_START( popeye )
968
966
PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_CUSTOM )
969
967
970
968
PORT_START(" COINS" )
969
+ PORT_BIT( 0x03 , IP_ACTIVE_LOW, IPT_UNUSED )
971
970
PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME(" 10p" )
972
971
PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME(" 20p" )
973
972
PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME(" 50p" )
974
973
PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME(" 100p" )
975
- PORT_BIT( 0xc3 , IP_ACTIVE_LOW, IPT_UNUSED )
974
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_COIN5 ) PORT_NAME(" Token" )
975
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_UNUSED )
976
976
977
977
PORT_START(" STROBE0" )
978
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
978
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME(" 00" )
979
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME(" 01" )
980
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME(" 02" )
981
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME(" 03" )
982
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME(" 04" )
983
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME(" 05" )
984
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME(" 06" )
985
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME(" 07" )
979
986
980
987
PORT_START(" STROBE1" )
981
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
988
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 08" )
989
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 09" )
990
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 10" )
991
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 11" )
992
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 12" )
993
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 13" )
994
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 14" )
995
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 15" )
982
996
983
997
PORT_START(" STROBE2" )
984
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
998
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME(" Start" )
999
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME(" Exchange" )
1000
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME(" Collect" )
1001
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME(" Hold 3/Lo" )
1002
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME(" Hold 2/Hi" )
1003
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME(" Hold 1" )
1004
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME(" Cancel" )
1005
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 23" )
985
1006
986
1007
PORT_START(" STROBE3" )
987
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
1008
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 24" )
1009
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 25" )
1010
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 26" )
1011
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 27" )
1012
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 28" )
1013
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 29" )
1014
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 30" )
1015
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 31" )
988
1016
989
1017
PORT_START(" STROBE4" )
990
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
1018
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 32" )
1019
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 33" )
1020
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 34" )
1021
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 35" )
1022
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 36" )
1023
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 37" )
1024
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 38" )
1025
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 39" )
991
1026
992
1027
PORT_START(" STROBE5" )
993
- PORT_BIT(0xFF , IP_ACTIVE_LOW, IPT_UNKNOWN)
1028
+ PORT_BIT( 0x01 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 40" )
1029
+ PORT_BIT( 0x02 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 41" )
1030
+ PORT_BIT( 0x04 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 42" )
1031
+ PORT_BIT( 0x08 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 43" )
1032
+ PORT_BIT( 0x10 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 44" )
1033
+ PORT_BIT( 0x20 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 45" )
1034
+ PORT_BIT( 0x40 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 46" )
1035
+ PORT_BIT( 0x80 , IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME(" 47" )
994
1036
995
1037
PORT_START(" UNKNOWN_PORT" )
996
1038
PORT_DIPNAME( 0x0001 , 0x0000 , " Unknown 0x0001" ) // if this and 0x0008 are on then j5popeye boots, what is it? something opto related?
0 commit comments