Previous 199869 Revisions Next

r36131 Saturday 28th February, 2015 at 00:51:41 UTC by hap
cleanup + added Entex Baseball i/o
[src/mess/drivers]hh_tms1k.c

trunk/src/mess/drivers/hh_tms1k.c
r244642r244643
55  This driver is a collection of simple dedicated handheld and tabletop
66  toys based around the TMS1000 MCU series. Anything more complex or clearly
77  part of a series is (or will be) in its own driver.
8 
9  Let's use this driver for a list of known devices and their serials,
10  excluding TI's own products (see for example ticalc1x.c, tispeak.c)
811
12  serial   device   etc.
13--------------------------------------------------------------------
14 @MP0904A  TMS0970  1977, Milton Bradley Comp IV
15 @MP0905B  TMS0970  1977, Parker Brothers Codename Sector
16 @MP0914   TMS1000  1979, Entex Baseball
17 @MP1030   TMS1100  1980, APF Mathemagician
18 @MP3226   TMS1000  1978, Milton Bradley Simon
19 @MP3403   TMS1100  1978, unknown
20 @MP3404   TMS1100  1978, Parker Brothers Merlin
21 @MP3405   TMS1100  1979, Coleco Amaze-A-Tron
22 @MP3438A  TMS1100  1979, Kenner Star Wars Electronic Battle Command
23  MP3450A  TMS1100  1979, MicroVision cartridge: Blockbuster
24  MP3454   TMS1100  1979, MicroVision cartridge: Star Trek Phaser Strike
25  MP3455   TMS1100  1980, MicroVision cartridge: Pinball
26  MP3457   TMS1100  1979, MicroVision cartridge: Mindbuster
27  MP3474   TMS1100  1979, MicroVision cartridge: Vegas Slots
28  MP3475   TMS1100  1979, MicroVision cartridge: Bowling
29  MP3479   TMS1100  1980, MicroVision cartridge: Baseball
30  MP3481   TMS1100  1979, MicroVision cartridge: Connect Four
31  MP3496   TMS1100  1980, MicroVision cartridge: Sea Duel
32 @MP6100A  TMS0980  1979, Ideal Electronic Detective
33 @MP6101B  TMS0980  1979, Parker Brothers Stop Thief
34 @MP7313   TMS1400  1980, Parker Brothers Bank Shot
35 @MP7314   TMS1400  1980, Parker Brothers Split Second
36 *MP7332   TMS1400  1981, Milton Bradley Dark Tower
37 @MP7334   TMS1400  1981, Coleco Total Control 4
938
39  inconsistent:
40 
41  M34009   TMS1100  1981, MicroVision cartridge: Alien Raiders
42  M34017   TMS1100  1981, MicroVision cartridge: Cosmic Hunter
43  M34047   TMS1100  1982, MicroVision cartridge: Super Blockbuster
44
45  CD7282SL TMS1100  1981, Tandy-12 (serial is similar to TI Speak & Spell series?)
46
47  (* denotes not yet emulated by MESS, @ denotes it's in this driver)
48
1049***************************************************************************/
1150
1251#include "emu.h"
1352#include "cpu/tms0980/tms0980.h"
1453#include "sound/speaker.h"
1554
55// internal artwork
1656#include "amaztron.lh"
1757#include "bankshot.lh"
1858#include "cnsector.lh"
19#include "ebball.lh"
2059#include "elecdet.lh"
2160#include "comp4.lh"
2261#include "mathmagi.lh"
23#include "merlin.lh"
24#include "simon.lh"
62#include "merlin.lh" // clickable
63#include "simon.lh" // clickable
2564#include "splitsec.lh"
2665#include "starwbc.lh"
2766#include "stopthie.lh"
28#include "tandy12.lh"
67#include "tandy12.lh" // clickable
2968#include "tc4.lh"
3069
70// test-layouts - use external artwork
71#include "ebball.lh"
3172
73
3274class hh_tms1k_state : public driver_device
3375{
3476public:
r244642r244643
72114
73115   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
74116   void display_update();
117   void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
75118   
76119   // game-specific handlers
77120   void mathmagi_display();
r244642r244643
89132   DECLARE_WRITE16_MEMBER(tc4_write_r);
90133   DECLARE_WRITE16_MEMBER(tc4_write_o);
91134
135   void ebball_display();
136   DECLARE_READ8_MEMBER(ebball_read_k);
137   DECLARE_WRITE16_MEMBER(ebball_write_r);
138   DECLARE_WRITE16_MEMBER(ebball_write_o);
139
92140   DECLARE_READ8_MEMBER(elecdet_read_k);
93141   DECLARE_WRITE16_MEMBER(elecdet_write_r);
94142   DECLARE_WRITE16_MEMBER(elecdet_write_o);
r244642r244643
118166   DECLARE_WRITE16_MEMBER(stopthief_write_r);
119167   DECLARE_WRITE16_MEMBER(stopthief_write_o);
120168
121   void bankshot_display();
122169   DECLARE_READ8_MEMBER(bankshot_read_k);
123170   DECLARE_WRITE16_MEMBER(bankshot_write_r);
124171   DECLARE_WRITE16_MEMBER(bankshot_write_o);
125172
126   void splitsec_display();
127173   DECLARE_READ8_MEMBER(splitsec_read_k);
128174   DECLARE_WRITE16_MEMBER(splitsec_write_r);
129175   DECLARE_WRITE16_MEMBER(splitsec_write_o);
r244642r244643
139185};
140186
141187
188// machine_start/reset
189
142190void hh_tms1k_state::machine_start()
143191{
144192   // zerofill
r244642r244643
168216   save_item(NAME(m_power_on));
169217}
170218
171
172219void hh_tms1k_state::machine_reset()
173220{
174221   m_power_on = true;
175222}
176223
224
225
177226/***************************************************************************
178227
179228  Helper Functions
r244642r244643
243292   display_update();
244293}
245294
295void hh_tms1k_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
296{
297   m_display_maxx = maxx;
298   m_display_maxy = maxy;
246299
300   // update current state
301   for (int y = 0; y < maxy; y++)
302      m_display_state[y] = (sety >> y & 1) ? setx : 0;
303   
304   display_update();
305}
306
307
247308UINT8 hh_tms1k_state::read_inputs(int columns)
248309{
249   UINT8 k = 0;
310   UINT8 ret = 0;
250311
251312   // read selected input rows
252313   for (int i = 0; i < columns; i++)
253314      if (m_inp_mux >> i & 1)
254         k |= m_inp_matrix[i]->read();
315         ret |= m_inp_matrix[i]->read();
255316
256   return k;
317   return ret;
257318}
258319
259INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button)
260{
261   m_power_on = (bool)(FPTR)param;
262   m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
263}
264320
321// devices with a TMS0980 can auto power-off
322
265323WRITE_LINE_MEMBER(hh_tms1k_state::tms0980_auto_power_off)
266324{
267   // TMS0980 auto power-off opcode
268325   if (state)
269326   {
270327      m_power_on = false;
r244642r244643
272329   }
273330}
274331
332INPUT_CHANGED_MEMBER(hh_tms1k_state::tms0980_power_button)
333{
334   m_power_on = (bool)(FPTR)param;
335   m_maincpu->set_input_line(INPUT_LINE_RESET, m_power_on ? CLEAR_LINE : ASSERT_LINE);
336}
337
338
339
275340/***************************************************************************
276341
277342  Minidrivers (I/O, Inputs, Machine Config)
r244642r244643
331396   return read_inputs(6);
332397}
333398
334
335399WRITE16_MEMBER(hh_tms1k_state::mathmagi_write_r)
336400{
337401   // R3,R5-R7,R9,R10: input mux
r244642r244643
350414   m_o = data;
351415}
352416
417
353418/* physical button layout and labels is like this:
354419
355420    ON     ONE       [SEL] [NXT] [?]   [/]
r244642r244643
399464   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
400465INPUT_PORTS_END
401466
467// output PLA is not dumped
402468static const UINT16 mathmagi_output_pla[0x20] =
403469{
404470   lA+lB+lC+lD+lE+lF,      // 0
r244642r244643
435501   lA+lF+lE+lD+lC          // G
436502};
437503
438
439504static MACHINE_CONFIG_START( mathmagi, hh_tms1k_state )
440505
441506   /* basic machine hardware */
r244642r244643
626691void hh_tms1k_state::tc4_display()
627692{
628693   m_display_wait = 50;
629   m_display_maxy = 10;
630   m_display_maxx = 9;
631694   
632695   // R5,7,8,9 are 7segs
633   for (int y = 0; y < m_display_maxy; y++)
696   for (int y = 0; y < 10; y++)
634697      if (y >= 5 && y <= 9 && y != 6)
635698         m_7seg_mask[y] = 0x7f;
636699   
637700   // update current state (note: R6 as extra column!)
638   for (int y = 0; y < m_display_maxy; y++)
639      m_display_state[y] = (m_r >> y & 1) ? (m_o | (m_r << 2 & 0x100)) : 0;
640   
641   display_update();
701   display_matrix(9, 10, (m_o | (m_r << 2 & 0x100)), m_r);
642702}
643703
644704READ8_MEMBER(hh_tms1k_state::tc4_read_k)
r244642r244643
662722   m_inp_mux = data & 0x23f;
663723   
664724   // R6: led column 8
665   // +other: select leds
725   // +other columns
666726   m_r = data;
667727   tc4_display();
668728}
669729
670730WRITE16_MEMBER(hh_tms1k_state::tc4_write_o)
671731{
672   // O0-O7: leds/7segment
732   // O0-O7: led row
673733   m_o = data;
674734   tc4_display();
675735}
r244642r244643
745805  Entex Baseball
746806  * TMS1000NLP MP0914 (die labeled MP0914A)
747807
808  NOTE!: MESS external artwork is recommended
809
810  lamp translation table: led LDzz from game PCB = MESS lampyx:
811
812    LD0  = -        LD10 = lamp12   LD20 = lamp42   LD30 = lamp60
813    LD1  = lamp23   LD11 = lamp4    LD21 = lamp41   LD31 = lamp61
814    LD2  = lamp0    LD12 = lamp15   LD22 = lamp40   LD32 = lamp62
815    LD3  = lamp1    LD13 = lamp22   LD23 = lamp43   LD33 = lamp70
816    LD4  = lamp2    LD14 = lamp33   LD24 = lamp53   LD34 = lamp71
817    LD5  = lamp10   LD15 = lamp32   LD25 = lamp52
818    LD6  = lamp13   LD16 = lamp21   LD26 = lamp51
819    LD7  = lamp11   LD17 = lamp31   LD27 = lamp50
820    LD8  = lamp3    LD18 = lamp30   LD28 = lamp72
821    LD9  = lamp14   LD19 = lamp20   LD29 = lamp73
822
748823***************************************************************************/
749824
750// inputs
825void hh_tms1k_state::ebball_display()
826{
827   // R8 is a 7seg
828   m_7seg_mask[8] = 0x7f;
829   
830   display_matrix(7, 9, m_o, m_r);
831}
832
833READ8_MEMBER(hh_tms1k_state::ebball_read_k)
834{
835   // note: K8(Vss row) is always on
836   return m_inp_matrix[5]->read() | read_inputs(5);
837}
838
839WRITE16_MEMBER(hh_tms1k_state::ebball_write_r)
840{
841   // R1-R5: input mux
842   m_inp_mux = data >> 1 & 0x1f;
843   
844   // R9: speaker out
845   m_speaker->level_w(data >> 9 & 1);
846   
847   // R0-R8: led columns
848   m_r = data;
849   ebball_display();
850}
851
852WRITE16_MEMBER(hh_tms1k_state::ebball_write_o)
853{
854   // O0-O6: led row
855   // O7: N/C
856   m_o = data;
857   ebball_display();
858}
859
751860static INPUT_PORTS_START( ebball )
861   PORT_START("IN.0") // R1
862   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
863   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 )
864   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
865   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
866
867   PORT_START("IN.1") // R2
868   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 )
869   PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
870
871   PORT_START("IN.2") // R3
872   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 )
873   PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
874
875   PORT_START("IN.3") // R4
876   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON6 )
877   PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
878
879   PORT_START("IN.4") // R5
880   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON7 )
881   PORT_BIT( 0x0e, IP_ACTIVE_HIGH, IPT_UNUSED )
882
883   PORT_START("IN.5") // Vss!
884   PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_UNUSED )
885   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 )
752886INPUT_PORTS_END
753887
754// machine config
755888static MACHINE_CONFIG_START( ebball, hh_tms1k_state )
756889
757890   /* basic machine hardware */
758891   MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=43K, C=47pf -> ~350kHz
892   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, ebball_read_k))
893   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, ebball_write_r))
894   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, ebball_write_o))
759895
896   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
760897   MCFG_DEFAULT_LAYOUT(layout_ebball)
761898
762899   /* no video! */
r244642r244643
795932
796933WRITE16_MEMBER(hh_tms1k_state::elecdet_write_r)
797934{
798   m_display_maxy = 7;
799   m_display_maxx = 7;
935   // R7,R8: speaker on
936   m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
800937
801938   // R0-R6: select digit
802   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
803   for (int y = 0; y < m_display_maxy; y++)
804   {
939   for (int y = 0; y < 7; y++)
805940      m_7seg_mask[y] = 0x7f;
806      m_display_state[y] = (data >> y & 1) ? o : 0;
807   }
808941
809   display_update();
810
811   // R7,R8: speaker on
812   m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
942   display_matrix(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data);
813943}
814944
815945WRITE16_MEMBER(hh_tms1k_state::elecdet_write_o)
r244642r244643
833963*/
834964
835965static INPUT_PORTS_START( elecdet )
836   PORT_START("IN.0") // O0 pin18
966   PORT_START("IN.0") // O0
837967   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
838968   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
839969   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
840970   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Private Question")
841971   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
842972
843   PORT_START("IN.1") // O1 pin17
973   PORT_START("IN.1") // O1
844974   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
845975   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
846976   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
847977   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
848978   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
849979
850   PORT_START("IN.2") // O4 pin14
980   PORT_START("IN.2") // O4
851981   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
852982   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
853983   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
854984   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("I Accuse")
855985   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
856986
857   PORT_START("IN.3") // O6 pin12
987   PORT_START("IN.3") // O6
858988   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
859989   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
860990   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
r244642r244643
9081038
9091039void hh_tms1k_state::starwbc_display()
9101040{
911   m_display_maxy = 10;
912   m_display_maxx = 8;
913
914   UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f);
915   for (int y = 0; y < m_display_maxy; y+=2)
916   {
917      m_display_state[y] = (m_r >> y & 1) ? o : 0;
918     
919      // R6,R8 are 7segs
920      if (y == 6 || y == 8)
921         m_7seg_mask[y] = 0x7f;
922   }
923
924   display_update();
1041   // R6,R8 are 7segs
1042   m_7seg_mask[6] = m_7seg_mask[8] = 0x7f;
1043   
1044   display_matrix(8, 10, m_o, m_r);
9251045}
9261046
9271047READ8_MEMBER(hh_tms1k_state::starwbc_read_k)
r244642r244643
9341054   // R0,R1,R3,R5,R7: input mux
9351055   m_inp_mux = (data & 3) | (data >> 1 & 4) | (data >> 2 & 8) | (data >> 3 & 0x10);
9361056
937   // R9: piezo speaker
1057   // R9: speaker out
9381058   m_speaker->level_w(data >> 9 & 1);
9391059
940   // R0,R2,R4,R6,R8: leds
941   m_r = data;
1060   // R0,R2,R4,R6,R8: led columns
1061   m_r = data & 0x155;
9421062   starwbc_display();
9431063}
9441064
9451065WRITE16_MEMBER(hh_tms1k_state::starwbc_write_o)
9461066{
947   // O0-O7: leds state
948   m_o = data;
1067   // O0-O7: led row
1068   m_o = (data << 4 & 0xf0) | (data >> 4 & 0x0f);
9491069   starwbc_display();
9501070}
9511071
9521072
953
9541073/* physical button layout and labels is like this:
9551074
9561075    (reconnnaissance=yellow)        (tactical reaction=green)
r244642r244643
9961115static MACHINE_CONFIG_START( starwbc, hh_tms1k_state )
9971116
9981117   /* basic machine hardware */
999   MCFG_CPU_ADD("maincpu", TMS1100, 300000) // RC osc. R=51K, C=47pf -> ~300kHz
1118   MCFG_CPU_ADD("maincpu", TMS1100, 325000) // RC osc. R=51K, C=47pf -> ~325kHz
10001119   MCFG_TMS1XXX_READ_K_CB(READ8(hh_tms1k_state, starwbc_read_k))
10011120   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(hh_tms1k_state, starwbc_write_r))
10021121   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(hh_tms1k_state, starwbc_write_o))
r244642r244643
10291148  Refer to the official manual for more information.
10301149
10311150
1032  TODO:
1033  - MCU clock is unknown
1034
10351151***************************************************************************/
10361152
10371153READ8_MEMBER(hh_tms1k_state::comp4_read_k)
r244642r244643
10471163   // R2    R7
10481164   // R1    R6
10491165   // R0    R5
1050   m_display_maxx = 11;
1051   m_display_state[0] = data;
1052   display_update();
1166   m_r = data;
1167   display_matrix(11, 1, m_r, m_o);
10531168}
10541169
10551170WRITE16_MEMBER(hh_tms1k_state::comp4_write_o)
10561171{
1057   // O0: leds common (always writes 1)
10581172   // O1-O3: input mux
1173   m_inp_mux = data >> 1 & 7;
1174
1175   // O0: leds common
10591176   // other bits: N/C
1060   m_inp_mux = data >> 1 & 7;
1177   m_o = data;
1178   display_matrix(11, 1, m_r, m_o);
10611179}
10621180
10631181
r244642r244643
11051223  Milton Bradley Simon, created by Ralph Baer
11061224
11071225  Revision A hardware:
1108  * TMS1000 (has internal ROM), DS75494 lamp driver
1226  * TMS1000 (die labeled MP3226), DS75494 lamp driver
11091227
11101228  Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
11111229  This one has been decapped too, but we couldn't find an internal ROM.
r244642r244643
11291247   // R5 -> 75494 IN3 -> red lamp
11301248   // R6 -> 75494 IN5 -> yellow lamp
11311249   // R7 -> 75494 IN2 -> blue lamp
1132   m_display_maxx = 4;
1133   m_display_state[0] = data >> 4 & 0xf;
1134   display_update();
1250   display_matrix(4, 1, data >> 4, 1);
11351251
11361252   // R8 -> 75494 IN0 -> speaker
11371253   m_speaker->level_w(data >> 8 & 1);
r244642r244643
13381454   R7   R8   R9
13391455        R10
13401456   */
1341   m_display_maxx = 11;
1342   m_display_state[0] = data;
1343   display_update();
1457   display_matrix(11, 1, data, 1);
13441458}
13451459
13461460WRITE16_MEMBER(hh_tms1k_state::merlin_write_o)
r244642r244643
15371651
15381652***************************************************************************/
15391653
1540void hh_tms1k_state::bankshot_display()
1541{
1542   m_display_maxy = 11;
1543   m_display_maxx = 7;
1544   
1545   // update current state
1546   for (int y = 0; y < m_display_maxy; y++)
1547      m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
1548   
1549   display_update();
1550}
1551
15521654READ8_MEMBER(hh_tms1k_state::bankshot_read_k)
15531655{
15541656   return read_inputs(2);
15551657}
15561658
1557
15581659WRITE16_MEMBER(hh_tms1k_state::bankshot_write_r)
15591660{
15601661   // R0: speaker out
r244642r244643
15631664   // R2,R3: input mux
15641665   m_inp_mux = data >> 2 & 3;
15651666
1566   // R2-R10: led rows
1667   // R2-R10: led columns
15671668   m_r = data & ~3;
1568   bankshot_display();
1669   display_matrix(7, 11, m_o, m_r);
15691670}
15701671
15711672WRITE16_MEMBER(hh_tms1k_state::bankshot_write_o)
15721673{
1573   // O0-O6: led columns
1674   // O0-O6: led row
15741675   // O7: N/C
15751676   m_o = data;
1576   bankshot_display();
1677   display_matrix(7, 11, m_o, m_r);
15771678}
15781679
15791680
r244642r244643
16431744
16441745  *: higher number indicates higher difficulty
16451746
1646***************************************************************************/
1747  display layout, where number xy is lamp R(x),O(y)
16471748
1648
1649/* display layout, where number xy is lamp R(x),O(y)
1650
16511749       00    02    04
16521750    10 01 12 03 14 05 16
16531751       11    13    15
r244642r244643
16591757       71    73    75
16601758    50 60 52 62 54 64 56
16611759       70    72    74
1662*/
16631760
1664void hh_tms1k_state::splitsec_display()
1665{
1666   m_display_maxy = 8;
1667   m_display_maxx = 7;
1668   
1669   // update current state
1670   for (int y = 0; y < m_display_maxy; y++)
1671      m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
1672   
1673   display_update();
1674}
1761***************************************************************************/
16751762
16761763READ8_MEMBER(hh_tms1k_state::splitsec_read_k)
16771764{
r244642r244643
16861773   // R9,R10: input mux
16871774   m_inp_mux = data >> 9 & 3;
16881775
1689   // R0-R7: led rows
1776   // R0-R7: led columns
16901777   m_r = data;
1691   display_update();
1778   display_matrix(7, 8, m_o, m_r);
16921779}
16931780
16941781WRITE16_MEMBER(hh_tms1k_state::splitsec_write_o)
16951782{
1696   // O0-O6: led columns
1783   // O0-O6: led row
16971784   // O7: N/C
16981785   m_o = data;
1699   splitsec_display();
1786   display_matrix(7, 8, m_o, m_r);
17001787}
17011788
17021789static INPUT_PORTS_START( splitsec )
r244642r244643
17081795
17091796   PORT_START("IN.1") // R10
17101797   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY
1711   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select")
1712   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start")
1798   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SELECT )
1799   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START )
17131800   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
17141801INPUT_PORTS_END
17151802
r244642r244643
17661853
17671854void hh_tms1k_state::tandy12_display()
17681855{
1769   m_display_maxx = 13;
1770   
17711856   // O0-O7: button lamps 1-8, R0-R3: button lamps 9-12
1772   m_display_state[0] = (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00);
1773   display_update();
1857   display_matrix(13, 1, (m_o << 1 & 0x1fe) | (m_r << 9 & 0x1e00), 1);
17741858}
17751859
17761860READ8_MEMBER(hh_tms1k_state::tandy12_read_k)
r244642r244643
19972081
19982082ROM_START( amaztron )
19992083   ROM_REGION( 0x0800, "maincpu", 0 )
2000   ROM_LOAD( "tms1100nll_mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) )
2084   ROM_LOAD( "mp3405", 0x0000, 0x0800, CRC(9cbc0009) SHA1(17772681271b59280687492f37fa0859998f041d) )
20012085
20022086   ROM_REGION( 867, "maincpu:mpla", 0 )
20032087   ROM_LOAD( "tms1100_amaztron_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
r244642r244643
20102094
20112095ROM_START( tc4 )
20122096   ROM_REGION( 0x1000, "maincpu", 0 )
2013   ROM_LOAD( "tms1400nll_mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) )
2097   ROM_LOAD( "mp7334", 0x0000, 0x1000, CRC(923f3821) SHA1(a9ae342d7ff8dae1dedcd1e4984bcfae68586581) )
20142098
20152099   ROM_REGION( 867, "maincpu:mpla", 0 )
20162100   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
r244642r244643
20322116
20332117ROM_START( elecdet )
20342118   ROM_REGION( 0x1000, "maincpu", 0 )
2035   ROM_LOAD( "tms0980nll_mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) )
2119   ROM_LOAD( "mp6100a", 0x0000, 0x1000, CRC(6f396bb8) SHA1(1f104d4ca9bee0d4572be4779b7551dfe20c4f04) )
20362120
20372121   ROM_REGION( 1246, "maincpu:ipla", 0 )
20382122   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
r244642r244643
21202204
21212205ROM_START( stopthie )
21222206   ROM_REGION( 0x1000, "maincpu", 0 )
2123   ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
2207   ROM_LOAD( "mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
21242208
21252209   ROM_REGION( 1246, "maincpu:ipla", 0 )
21262210   ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
r244642r244643
21482232
21492233ROM_START( bankshot )
21502234   ROM_REGION( 0x1000, "maincpu", 0 )
2151   ROM_LOAD( "tms1400nll_mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) )
2235   ROM_LOAD( "mp7313", 0x0000, 0x1000, CRC(7a5016a9) SHA1(a8730dc8a282ffaa3d89e675f371d43eb39f39b4) )
21522236
21532237   ROM_REGION( 867, "maincpu:mpla", 0 )
21542238   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
r244642r244643
21592243
21602244ROM_START( splitsec )
21612245   ROM_REGION( 0x1000, "maincpu", 0 )
2162   ROM_LOAD( "tms1400nll_mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) )
2246   ROM_LOAD( "mp7314", 0x0000, 0x1000, CRC(e94b2098) SHA1(f0fc1f56a829252185592a2508740354c50bedf8) )
21632247
21642248   ROM_REGION( 867, "maincpu:mpla", 0 )
21652249   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) )
r244642r244643
21802264
21812265ROM_START( unk3403 )
21822266   ROM_REGION( 0x0800, "maincpu", 0 )
2183   ROM_LOAD( "tms1100nll_mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
2267   ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
21842268
21852269   ROM_REGION( 867, "maincpu:mpla", 0 )
21862270   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified


Previous 199869 Revisions Next


© 1997-2024 The MAME Team