Previous 199869 Revisions Next

r29515 Thursday 10th April, 2014 at 19:33:52 UTC by Tafoid
(MESS) PVE500.c:  Work on keyboard, 7-seg display and maincpu (z80) daisy chaining.  Added declaration of DIP switches.  [Felipe Sanches]
[src/mess/drivers]pve500.c

trunk/src/mess/drivers/pve500.c
r29514r29515
6464
6565static Z80CTC_INTERFACE( external_ctc_intf )
6666{
67   DEVCB_NULL, /* interrupt handler */
67   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* interrupt handler */
6868   DEVCB_NULL, /* ZC/TO0 callback */
6969   DEVCB_NULL, /* ZC/TO1 callback */
7070   DEVCB_NULL  /* ZC/TO2 callback */
r29514r29515
7272
7373static const z80sio_interface external_sio_intf =
7474{
75   DEVCB_NULL, /* interrupt handler */
76   DEVCB_NULL, /* DTR changed handler */
75   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), /* interrupt handler */
76  DEVCB_NULL, /* DTR changed handler */
7777   DEVCB_NULL, /* RTS changed handler */
7878   DEVCB_NULL, /* BREAK changed handler */
7979   DEVCB_NULL, /* transmit handler */
8080   DEVCB_NULL  /* receive handler */
8181};
8282
83static const z80_daisy_config maincpu_daisy_chain[] =
84{
85   { "external_ctc" },
86   { "external_sio" },
87   { NULL }
88};
89
90
8391static ADDRESS_MAP_START(maincpu_io, AS_IO, 8, pve500_state)
8492   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("external_sio", z80sio_device, read, write)
8593   AM_RANGE(0x08, 0x0B) AM_DEVREADWRITE("external_ctc", z80ctc_device, read, write)
r29514r29515
106114}
107115
108116static INPUT_PORTS_START( pve500 )
109   PORT_START("keyboard")
110   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_NAME("TODO") PORT_CODE(KEYCODE_A)
117   PORT_START("SCAN0")
118   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS")       PORT_CODE(KEYCODE_5)
119   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A/B")         PORT_CODE(KEYCODE_4)
120   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("FROM TO")     PORT_CODE(KEYCODE_3)
121   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2")          PORT_CODE(KEYCODE_2)
122   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1")          PORT_CODE(KEYCODE_1)
123   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
124   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
125   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY")       PORT_CODE(KEYCODE_SPACE)
126
127   PORT_START("SCAN1")
128   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ALL STOP")    PORT_CODE(KEYCODE_M)
129   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LAST EDIT")   PORT_CODE(KEYCODE_I)
130   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUDIO SPLIT") PORT_CODE(KEYCODE_T)
131   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A2")          PORT_CODE(KEYCODE_9)
132   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ASMBL")       PORT_CODE(KEYCODE_6)
133   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("V")           PORT_CODE(KEYCODE_7)
134   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A1")          PORT_CODE(KEYCODE_8)
135   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY")       PORT_CODE(KEYCODE_SPACE)
136
137   PORT_START("SCAN2")
138   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RVW/JUMP")    PORT_CODE(KEYCODE_N)
139   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUTO EDIT")   PORT_CODE(KEYCODE_B)
140   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PREVIEW")     PORT_CODE(KEYCODE_V)
141   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-FF")        PORT_CODE(KEYCODE_R)
142   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-REW")       PORT_CODE(KEYCODE_E)
143   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-STILL")     PORT_CODE(KEYCODE_W)
144   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-PLAY")      PORT_CODE(KEYCODE_Q)
145   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY")       PORT_CODE(KEYCODE_SPACE)
146
147   PORT_START("SCAN3")
148   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-OUT")       PORT_CODE(KEYCODE_K)
149   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-IN")        PORT_CODE(KEYCODE_J)
150   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("GO TO")       PORT_CODE(KEYCODE_H)
151   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-OUT")       PORT_CODE(KEYCODE_G)
152   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P-IN")        PORT_CODE(KEYCODE_F)
153   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM+")       PORT_CODE(KEYCODE_U)
154   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRIM-")       PORT_CODE(KEYCODE_Y)
155   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY")       PORT_CODE(KEYCODE_SPACE)
156
157   PORT_START("SCAN4")
158   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-FF")        PORT_CODE(KEYCODE_OPENBRACE)
159   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-REW")       PORT_CODE(KEYCODE_QUOTE)
160   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-STILL")     PORT_CODE(KEYCODE_P)
161   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-PLAY")      PORT_CODE(KEYCODE_O)
162   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EDIT")        PORT_CODE(KEYCODE_EQUALS)
163   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("REC")         PORT_CODE(KEYCODE_MINUS)
164   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
165   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ENTRY")       PORT_CODE(KEYCODE_SPACE)
166
167   PORT_START("SCAN5")
168      PORT_DIPNAME( 0x03, 0x02, "R-EDIT REF" )
169      PORT_DIPSETTING(    0x02, "TC" )
170      PORT_DIPSETTING(    0x00, "RTC" )
171      PORT_DIPSETTING(    0x01, "CTL" )
172
173      PORT_DIPNAME( 0x0C, 0x08, "P2-EDIT REF" )
174      PORT_DIPSETTING(    0x08, "TC" )
175      PORT_DIPSETTING(    0x00, "RTC" )
176      PORT_DIPSETTING(    0x04, "CTL" )
177
178      PORT_DIPNAME( 0x30, 0x20, "P1-EDIT REF" )
179      PORT_DIPSETTING(    0x20, "TC" )
180      PORT_DIPSETTING(    0x00, "RTC" )
181      PORT_DIPSETTING(    0x10, "CTL" )
182
183   PORT_START("SCAN6")
184      PORT_DIPNAME( 0x03, 0x02, "SYNCHRO" )
185      PORT_DIPSETTING(    0x02, "ON/CF" )
186      PORT_DIPSETTING(    0x00, "ON" )
187      PORT_DIPSETTING(    0x01, "OFF" )
188
189      PORT_DIPNAME( 0x0C, 0x08, "PREROLL" )
190      PORT_DIPSETTING(    0x08, "7" )
191      PORT_DIPSETTING(    0x00, "5" )
192      PORT_DIPSETTING(    0x04, "3" )
193
194   PORT_START("SCAN7")
195   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOTAL")       PORT_CODE(KEYCODE_CLOSEBRACE)
196   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LEARN")       PORT_CODE(KEYCODE_L)
197   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-1F")    PORT_CODE(KEYCODE_Z)
198   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-10F")   PORT_CODE(KEYCODE_X)
199   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TRANS-100F")  PORT_CODE(KEYCODE_C)
200   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("R-RESET")     PORT_CODE(KEYCODE_A)
201   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P2-RESET")    PORT_CODE(KEYCODE_S)
202   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P1-RESET")    PORT_CODE(KEYCODE_D)
111203INPUT_PORTS_END
112204
113205void pve500_state::machine_start()
r29514r29515
119211   io_KY = 0;
120212
121213   for (int i=0; i<27; i++)
122      output_set_digit_value(i, 0xff);
214      output_set_digit_value(i, 0x00);
123215}
124216
125217void pve500_state::machine_reset()
r29514r29515
162254      case IO_EXPANDER_PORTB:
163255         return io_LE;
164256      case IO_EXPANDER_PORTC:
257         io_KY = 0x00;
258         if (io_SC & 0x01) io_KY |= ioport("SCAN0")->read();
259         if (io_SC & 0x02) io_KY |= ioport("SCAN1")->read();
260         if (io_SC & 0x04) io_KY |= ioport("SCAN2")->read();
261         if (io_SC & 0x08) io_KY |= ioport("SCAN3")->read();
262         if (io_SC & 0x10) io_KY |= ioport("SCAN4")->read();
263         if (io_SC & 0x20) io_KY |= ioport("SCAN5")->read();
264         if (io_SC & 0x40) io_KY |= ioport("SCAN6")->read();
265         if (io_SC & 0x80) io_KY |= ioport("SCAN7")->read();
165266         return io_KY;
166267      case IO_EXPANDER_PORTD:
167268         return io_LD;
r29514r29515
192293         io_SEL = data;
193294         for (int i=0; i<4; i++){
194295            if (io_SEL & (1 << i)){
195               switch (io_SC){
196                  case 1:   output_set_digit_value(8*i + 0, io_LD & 0x7F); break;
197                  case 2:   output_set_digit_value(8*i + 1, io_LD & 0x7F); break;
198                  case 4:   output_set_digit_value(8*i + 2, io_LD & 0x7F); break;
199                  case 8:   output_set_digit_value(8*i + 3, io_LD & 0x7F); break;
200                  case 16:  output_set_digit_value(8*i + 4, io_LD & 0x7F); break;
201                  case 32:  output_set_digit_value(8*i + 5, io_LD & 0x7F); break;
202                  case 64:  output_set_digit_value(8*i + 6, io_LD & 0x7F); break;
203                  case 128: output_set_digit_value(8*i + 7, io_LD & 0x7F); break;
204                  default:
205                     /*software should not do it.
206               any idea how to emulate that in case it does? */ break;
296               for (int j=0; j<8; j++){
297                  if (io_SC & (1<<j)){
298                     output_set_digit_value(8*i + j, BITSWAP8(io_LD & 0x7F, 7, 0, 1, 2, 3, 4, 5, 6));
299                     printf("io_expander_w PORTE data=%02X\n", data);
300                  }
207301               }
208302            }
209303         }
r29514r29515
217311   MCFG_CPU_ADD("maincpu", TLCS_Z80, XTAL_12MHz / 2) /* TMPZ84C015BF-6 (TOSHIBA TLCS-Z80) */
218312   MCFG_CPU_PROGRAM_MAP(maincpu_prg)
219313   MCFG_CPU_IO_MAP(maincpu_io)
314   MCFG_CPU_CONFIG(maincpu_daisy_chain)
220315   MCFG_Z80CTC_ADD("external_ctc", XTAL_12MHz / 2, external_ctc_intf)
221316   MCFG_Z80SIO_ADD("external_sio", XTAL_12MHz / 2, external_sio_intf)
222317

Previous 199869 Revisions Next


© 1997-2024 The MAME Team