r15633 Friday 20th July, 2012 at 06:37:43 UTC by Fabio Priuli
mc1502: added cassette input, keyboard input fix. [shattered]

iskr1031, ec1841: split machine descriptions from pc16, remove hacks from pc16 and
ibm5550. [shattered]

ec1841: mirror chargen memory at b800:1000 -- fixes video test 501 on TPS (diagnostics)
disk. [shattered]

ec1841: implement memory controller (only for 1 board yet), no support for remapping
banks inside the board. Memory test in POST passes. [shattered]
[src/emu/video]pc_cga.c
[src/mess/drivers]pc.c
[src/mess/includes]pc.h
[src/mess/machine]kb_7007_3.h pc.c

src/emu/video/pc_cga.c
r15632r15633
12271227               break;
12281228         }
12291229         space_prg->install_legacy_readwrite_handler(0xb8000, 0xb87ff, FUNC(char_ram_r),FUNC(char_ram_w), mask );
1230         space_prg->install_legacy_readwrite_handler(0xb9000, 0xb97ff, FUNC(char_ram_r),FUNC(char_ram_w), mask );
12301231      } else {
12311232         if (cga.videoram_size== 0x4000) {
12321233            space_prg->install_readwrite_bank(0xb8000, 0xbbfff, 0, 0x04000, "bank11" );
src/mess/machine/kb_7007_3.h
r15632r15633
8383   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
8484   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cursor down") PORT_CODE(KEYCODE_DOWN)
8585   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cursor up") PORT_CODE(KEYCODE_UP)
86   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('\\') PORT_CHAR('|')
86   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
8787
8888   PORT_START("Y9")
8989   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F5") PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
src/mess/machine/pc.c
r15632r15633
7070      } \
7171   } while (0)
7272
73/*
74 * EC-1841 memory controller.  The machine can hold four memory boards;
75 * each board has a control register, its address is set by a DIP switch
76 * on the board itself.
77 *
78 * Only one board should be enabled for read, and one for write.
79 * Normally, this is the same board.
80 *
81 * Each board is divided into 4 banks, internally numbererd 0..3.
82 * POST tests each board on startup, and an error (indicated by
83 * I/O CH CK bus signal) causes it to disable failing bank(s) by writing
84 * 'reconfiguration code' (inverted number of failing memory bank) to
85 * the register.
86
87 * bit 1-0   'reconfiguration code'
88 * bit 2   enable read access
89 * bit 3    enable write access
90 */
91
92READ8_MEMBER(pc_state::ec1841_memboard_r)
93{
94   pc_state *st = space.machine().driver_data<pc_state>();
95   return st->m_memboard[(offset % 4)];
96}
97
98WRITE8_MEMBER(pc_state::ec1841_memboard_w)
99{
100   pc_state *st = space.machine().driver_data<pc_state>();
101   address_space *program = space.machine().device("maincpu")->memory().space(AS_PROGRAM);
102   running_machine &machine = space.machine();
103   UINT8 current;
104
105   DBG_LOG(1,"ec1841_memboard_w",("(%d) <- %02X at %s\n", offset, data, machine.describe_context()));
106
107   // for now, handle only board 0
108   if (offset > 0) {
109      st->m_memboard[offset] = data;
110      return;
111   }
112
113   current = st->m_memboard[offset];
114
115   if (BIT(current, 2) && !BIT(data, 2)) {
116      // disable read access
117      program->unmap_read(0, 0x7ffff);
118      DBG_LOG(1,"ec1841_memboard_w",("unmap_read(%d)\n", offset));
119   }
120
121   if (BIT(current, 3) && !BIT(data, 3)) {
122      // disable write access
123      program->unmap_write(0, 0x7ffff);
124      DBG_LOG(1,"ec1841_memboard_w",("unmap_write(%d)\n", offset));
125   }
126
127   if (!BIT(current, 2) && BIT(data, 2)) {
128      // enable read access
129      program->install_read_bank(0, 0x7ffff, "bank10");
130      DBG_LOG(1,"ec1841_memboard_w",("map_read(%d)\n", offset));
131   }
132
133   if (!BIT(current, 3) && BIT(data, 3)) {
134      // enable write access
135      program->install_write_bank(0, 0x7ffff, "bank10");
136      DBG_LOG(1,"ec1841_memboard_w",("map_write(%d)\n", offset));
137   }
138
139   st->m_memboard[offset] = data;
140}
141
73142/*************************************************************************
74143 *
75144 *      PC DMA stuff
r15632r15633
842911
843912
844913static struct {
914   UINT8      pulsing;
845915   UINT8      latch;      /* keyboard scan code */
846916   UINT16      mask;      /* input lines */
847917   emu_timer   *keyb_signal_timer;
r15632r15633
867937   key |= machine.root_device().ioport("Y10")->read();
868938   key |= machine.root_device().ioport("Y11")->read();
869939   key |= machine.root_device().ioport("Y12")->read();
870   DBG_LOG(1,"mc1502_k_s_c",("= %02X%s\n", key, key ? " will IRQ" : ""));
940   DBG_LOG(1,"mc1502_k_s_c",("= %02X (%d) %s\n", key, mc1502_keyb.pulsing,
941      (key || mc1502_keyb.pulsing) ? " will IRQ" : ""));
871942
943   /*
944      If a key is pressed and we're not pulsing yet, start pulsing the IRQ1;
945      keep pulsing while any key is pressed, and pulse one time after all keys
946      are released.
947    */
872948   if (key) {
873      pic8259_ir1_w(st->m_pic8259, 1);
949      if (mc1502_keyb.pulsing < 2) {
950         mc1502_keyb.pulsing += 2;
951      }
874952   }
953
954   if (mc1502_keyb.pulsing) {
955      pic8259_ir1_w(st->m_pic8259, (mc1502_keyb.pulsing & 1));
956      mc1502_keyb.pulsing--;
957   }
875958}
876959
877960static READ8_DEVICE_HANDLER ( mc1502_ppi_porta_r )
878961{
879962   running_machine &machine = device->machine();
963
880964   DBG_LOG(1,"mc1502_ppi_porta_r",("= %02X\n", mc1502_keyb.latch));
881965   return mc1502_keyb.latch;
882966}
883967
884968static WRITE8_DEVICE_HANDLER ( mc1502_ppi_porta_w )
885969{
970   pc_state *st = device->machine().driver_data<pc_state>();
886971   running_machine &machine = device->machine();
972
887973   DBG_LOG(1,"mc1502_ppi_porta_w",("( %02X )\n", data));
888974   mc1502_keyb.latch = data;
975   if (mc1502_keyb.pulsing)
976      mc1502_keyb.pulsing--;
977   pic8259_ir1_w(st->m_pic8259, 0);
889978}
890979
980static WRITE8_DEVICE_HANDLER ( mc1502_ppi_portb_w )
981{
982   pc_state *st = device->machine().driver_data<pc_state>();
983   running_machine &machine = device->machine();
984
985   DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data));
986   st->m_ppi_portb = data;
987   pit8253_gate2_w(device->machine().device("pit8253"), BIT(data, 0));
988   pc_speaker_set_spkrdata( device->machine(), data & 0x02 );
989}
990
991static READ8_DEVICE_HANDLER ( mc1502_ppi_portc_r )
992{
993   running_machine &machine = device->machine();
994   pc_state *st = device->machine().driver_data<pc_state>();
995   int timer2_output = pit8253_get_output( device->machine().device("pit8253"), 2 );
996   int data = 0xff;
997   double tap_val = (device->machine().device<cassette_image_device>(CASSETTE_TAG)->input());
998
999//   0x80 -- serial RxD
1000//   0x40 -- CASS IN, also loops back T2OUT (gated by CASWR)
1001   data = ( data & ~0x40 ) | ( tap_val < 0 ? 0x40 : 0x00 ) | ( (BIT(st->m_ppi_portb, 7) && timer2_output) ? 0x40 : 0x00 );
1002//   0x20 -- T2OUT
1003   data = ( data & ~0x20 ) | ( timer2_output ? 0x20 : 0x00 );
1004//   0x10 -- SNDOUT
1005   data = ( data & ~0x10 ) | ( (BIT(st->m_ppi_portb, 1) && timer2_output) ? 0x10 : 0x00 );
1006
1007   DBG_LOG(2,"mc1502_ppi_portc_r",("= %02X (tap_val %f t2out %d) at %s\n",
1008      data, tap_val, timer2_output, machine.describe_context()));
1009   return data;
1010}
1011
8911012static READ8_DEVICE_HANDLER ( mc1502_kppi_porta_r )
8921013{
8931014   running_machine &machine = device->machine();
r15632r15633
9061027   if (mc1502_keyb.mask & 0x0400) { key |= machine.root_device().ioport("Y11")->read(); }
9071028   if (mc1502_keyb.mask & 0x0800) { key |= machine.root_device().ioport("Y12")->read(); }
9081029   key ^= 0xff;
909   DBG_LOG(1,"mc1502_kppi_porta_r",("= %02X\n", key));
1030   DBG_LOG(2,"mc1502_kppi_porta_r",("= %02X\n", key));
9101031   return key;
9111032}
9121033
r15632r15633
9201041      mc1502_keyb.mask |= 1 << 11;
9211042   else
9221043      mc1502_keyb.mask &= ~(1 << 11);
923   DBG_LOG(1,"mc1502_kppi_portb_w",("( %02X -> %04X )\n", data, mc1502_keyb.mask));
1044   DBG_LOG(2,"mc1502_kppi_portb_w",("( %02X -> %04X )\n", data, mc1502_keyb.mask));
9241045}
9251046
9261047static WRITE8_DEVICE_HANDLER ( mc1502_kppi_portc_w )
r15632r15633
9291050
9301051   mc1502_keyb.mask &= ~(7 << 8);
9311052   mc1502_keyb.mask |= ((data ^ 7) & 7) << 8;
932   DBG_LOG(1,"mc1502_kppi_portc_w",("( %02X -> %04X )\n", data, mc1502_keyb.mask));
1053   DBG_LOG(2,"mc1502_kppi_portc_w",("( %02X -> %04X )\n", data, mc1502_keyb.mask));
9331054}
9341055
9351056
r15632r15633
10241145   DEVCB_HANDLER(mc1502_ppi_porta_r),
10251146   DEVCB_HANDLER(mc1502_ppi_porta_w),
10261147   DEVCB_NULL,
1027   DEVCB_HANDLER(pcjr_ppi_portb_w),   // hack
1028   DEVCB_NULL,
1148   DEVCB_HANDLER(mc1502_ppi_portb_w),
1149   DEVCB_HANDLER(mc1502_ppi_portc_r),
10291150   DEVCB_NULL
10301151};
10311152
r15632r15633
12571378DRIVER_INIT( mc1502 )
12581379{
12591380   mess_init_pc_common(machine, 0, NULL, pc_set_irq_line);
1260   memset(&mc1502_keyb, 0, sizeof(mc1502_keyb));
12611381}
12621382
12631383static READ8_HANDLER( input_port_0_r ) { return space->machine().root_device().ioport("IN0")->read(); }
r15632r15633
13351455   st->m_dma8237 = NULL;
13361456   st->m_pit8253 = machine.device("pit8253");
13371457
1458   /*
1459           Keyboard polling circuit holds IRQ1 high until a key is
1460           pressed, then it starts a timer that pulses IRQ1 low each
1461           40ms (check) for 20ms (check) until all keys are released.
1462           Last pulse causes BIOS to write a 'break' scancode into port 60h.
1463    */
1464   pic8259_ir1_w(st->m_pic8259, 1);
1465   memset(&mc1502_keyb, 0, sizeof(mc1502_keyb));
13381466   mc1502_keyb.keyb_signal_timer = machine.scheduler().timer_alloc(FUNC(mc1502_keyb_signal_callback));
1339   mc1502_keyb.keyb_signal_timer->adjust( attotime::from_msec(40), 0, attotime::from_msec(40) );
1467   mc1502_keyb.keyb_signal_timer->adjust( attotime::from_msec(20), 0, attotime::from_msec(20) );
13401468}
13411469
13421470
r15632r15633
13641492   st->m_pc_spkrdata = 0;
13651493   st->m_pc_input = 0;
13661494   st->m_dma_channel = 0;
1495   memset(st->m_memboard,0xc,sizeof(st->m_memboard));   // check
13671496   memset(st->m_dma_offset,0,sizeof(st->m_dma_offset));
13681497   st->m_ppi_portc_switch_high = 0;
13691498   st->m_ppi_speaker = 0;
r15632r15633
14661595      pc_keyboard();
14671596}
14681597
1469
14701598/*
14711599ibm xt bios
14721600-----------
src/mess/includes/pc.h
r15632r15633
3333   /* Q2 is set by OUT1 from the 8253 and goes to DRQ1 on the 8237 */
3434   UINT8   m_u73_q2;
3535   UINT8   m_out1;
36   UINT8   m_memboard[4];      /* used only by ec1840 and ec1841 */
3637   int m_dma_channel;
3738   UINT8 m_dma_offset[2][4];
3839   UINT8 m_pc_spkrdata;
r15632r15633
6465   DECLARE_WRITE8_MEMBER(pc_EXP_w);
6566   DECLARE_READ8_MEMBER(pc_EXP_r);
6667   DECLARE_READ8_MEMBER(unk_r);
68   DECLARE_READ8_MEMBER(ec1841_memboard_r);
69   DECLARE_WRITE8_MEMBER(ec1841_memboard_w);
6770};
6871
6972/*----------- defined in machine/pc.c -----------*/
r15632r15633
120123TIMER_DEVICE_CALLBACK( pc_frame_interrupt );
121124TIMER_DEVICE_CALLBACK( pc_vga_frame_interrupt );
122125TIMER_DEVICE_CALLBACK( pcjr_frame_interrupt );
126TIMER_DEVICE_CALLBACK( null_frame_interrupt );
123127
124128
125129
src/mess/drivers/pc.c
r15632r15633
123123   AM_RANGE(0xf0000, 0xfffff) AM_ROM
124124ADDRESS_MAP_END
125125
126static ADDRESS_MAP_START( iskr1031_map, AS_PROGRAM, 16, pc_state )
127   ADDRESS_MAP_UNMAP_HIGH
128   AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")
129   AM_RANGE(0xa0000, 0xbffff) AM_NOP
130   AM_RANGE(0xc0000, 0xc7fff) AM_ROM
131   AM_RANGE(0xc8000, 0xcffff) AM_ROM
132   AM_RANGE(0xd0000, 0xeffff) AM_NOP
133   AM_RANGE(0xf0000, 0xfffff) AM_ROM
134ADDRESS_MAP_END
135
136static ADDRESS_MAP_START( ec1841_map, AS_PROGRAM, 16, pc_state )
137   ADDRESS_MAP_UNMAP_HIGH
138   AM_RANGE(0x00000, 0x7ffff) AM_RAMBANK("bank10")   // up to 4 banks
139   AM_RANGE(0xa0000, 0xbffff) AM_NOP
140   AM_RANGE(0xc0000, 0xc7fff) AM_ROM
141   AM_RANGE(0xc8000, 0xcffff) AM_ROM
142   AM_RANGE(0xdc000, 0xdffff) AM_RAM      // monochrome chargen
143   AM_RANGE(0xf0000, 0xfffff) AM_ROM
144ADDRESS_MAP_END
145
126146static ADDRESS_MAP_START( mc1502_map, AS_PROGRAM, 8, pc_state )
127147   ADDRESS_MAP_UNMAP_HIGH
128148   AM_RANGE(0x00000, 0x97fff) AM_RAMBANK("bank10")   /* 96K on mainboard + 512K on extension card */
r15632r15633
205225   AM_RANGE(0x0200, 0x0207) AM_READWRITE8_LEGACY(pc_JOY_r,   pc_JOY_w, 0xffff)
206226   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
207227   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE8_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w, 0xffff)
208   AM_RANGE(0x02b0, 0x02bf) AM_RAM // needed for EC-18xx
209228   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
210229   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE8("ins8250_1", ins8250_device, ins8250_r, ins8250_w, 0xffff)
211230   AM_RANGE(0x0340, 0x0357) AM_NOP /* anonymous bios should not recogniced realtimeclock */
r15632r15633
217236ADDRESS_MAP_END
218237
219238
239static ADDRESS_MAP_START(ec1841_io, AS_IO, 16, pc_state)
240   ADDRESS_MAP_UNMAP_HIGH
241   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
242   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
243   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
244   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
245   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
246   AM_RANGE(0x00a0, 0x00a1) AM_WRITE8( pc_nmi_enable_w, 0x00ff )
247   AM_RANGE(0x0210, 0x0217) AM_NOP   // expansion chassis interface
248//   AM_RANGE(0x0230, 0x021f)    // mouse
249   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
250   AM_RANGE(0x02b0, 0x02b3) AM_READWRITE8(ec1841_memboard_r, ec1841_memboard_w, 0xffff);
251//   AM_RANGE(0x02f8, 0x02f8) AM_DEVREADWRITE8_LEGACY("upd8251_1", i8251_device, data_r, data_w, 0x00ff)
252//   AM_RANGE(0x02f9, 0x02f9) AM_DEVREADWRITE8_LEGACY("upd8251_1", i8251_device, status_r, control_w, 0xff00)
253   AM_RANGE(0x0378, 0x037f) AM_DEVREADWRITE8_LEGACY("lpt_0", pc_lpt_r, pc_lpt_w, 0xffff)
254   AM_RANGE(0x03f0, 0x03f7) AM_READWRITE8_LEGACY(pc_fdc_r,            pc_fdc_w, 0xffff)
255//   AM_RANGE(0x03f8, 0x03f9) AM_DEVREADWRITE8_LEGACY("upd8251_0", i8251_device, data_r, data_w, 0x00ff)
256//   AM_RANGE(0x03f8, 0x03f9) AM_DEVREADWRITE8_LEGACY("upd8251_0", i8251_device, status_r, control_w, 0xff00)
257ADDRESS_MAP_END
258
259
260static ADDRESS_MAP_START(iskr1031_io, AS_IO, 16, pc_state)
261   ADDRESS_MAP_UNMAP_HIGH
262   AM_RANGE(0x0000, 0x000f) AM_DEVREADWRITE8_LEGACY("dma8237", i8237_r, i8237_w, 0xffff)
263   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
264   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
265   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
266   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
267   AM_RANGE(0x00a0, 0x00a1) AM_WRITE8( pc_nmi_enable_w, 0x00ff )
268//   AM_RANGE(0x0200, 0x0207) AM_READWRITE8_LEGACY(pc_JOY_r,   pc_JOY_w, 0xffff)
269   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
270//   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
271   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE8("ins8250_1", ins8250_device, ins8250_r, ins8250_w, 0xffff)
272   AM_RANGE(0x0340, 0x0357) AM_NOP /* anonymous bios should not recogniced realtimeclock */
273   AM_RANGE(0x0378, 0x037f) AM_DEVREADWRITE8_LEGACY("lpt_0", pc_lpt_r, pc_lpt_w, 0xffff)
274//   AM_RANGE(0x03e8, 0x03ef) AM_DEVREADWRITE8("ins8250_2", ins8250_device, ins8250_r, ins8250_w, 0xffff)
275   AM_RANGE(0x03f0, 0x03f7) AM_READWRITE8_LEGACY(pc_fdc_r,            pc_fdc_w, 0xffff)
276   AM_RANGE(0x03f8, 0x03ff) AM_DEVREADWRITE8("ins8250_0", ins8250_device, ins8250_r, ins8250_w, 0xffff)
277ADDRESS_MAP_END
278
279
220280static ADDRESS_MAP_START( ibm5550_map, AS_PROGRAM, 16, pc_state )
221281   ADDRESS_MAP_UNMAP_HIGH
222282   AM_RANGE(0x00000, 0x9ffff) AM_RAMBANK("bank10")
r15632r15633
235295   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
236296   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
237297   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
238   AM_RANGE(0x0070, 0x007f) AM_RAM // needed for Poisk-2
239298   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
240299   AM_RANGE(0x00a0, 0x00a1) AM_READWRITE8(unk_r, pc_nmi_enable_w, 0x00ff )
241300   AM_RANGE(0x0200, 0x0207) AM_READWRITE8_LEGACY(pc_JOY_r, pc_JOY_w, 0xffff)
242301   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
243302   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE8_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w, 0xffff)
244   AM_RANGE(0x02b0, 0x02bf) AM_RAM // needed for EC-18xx
245303   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
246304   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE8("ins8250_1", ins8250_device, ins8250_r, ins8250_w, 0xffff)
247305   AM_RANGE(0x0340, 0x0357) AM_NOP /* anonymous bios should not recogniced realtimeclock */
r15632r15633
11671225   NULL
11681226};
11691227
1228static const cassette_interface mc1502_cassette_interface =
1229{
1230   cassette_default_formats,
1231   NULL,
1232   (cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED),
1233   NULL,
1234   NULL
1235};
1236
11701237static MACHINE_CONFIG_START( ibmpcjr, pc_state )
11711238   /* basic machine hardware */
11721239   MCFG_CPU_PC(ibmpcjr, ibmpcjr, I8088, 4900000, pcjr_frame_interrupt)   /* TODO: Get correct cpu frequency, probably XTAL_14_31818MHz/3 */
r15632r15633
12481315
12491316static MACHINE_CONFIG_START( mc1502, pc_state )
12501317   /* basic machine hardware */
1251   MCFG_CPU_PC(mc1502, mc1502, I8088, XTAL_16MHz/3, pcjr_frame_interrupt)
1318//   MCFG_CPU_PC(mc1502, mc1502, I8088, XTAL_16MHz/3, pcjr_frame_interrupt)   /* check frame_interrupt */
1319   MCFG_CPU_ADD("maincpu", I8088, XTAL_16MHz/3)
1320   MCFG_CPU_PROGRAM_MAP(mc1502_map)
1321   MCFG_CPU_IO_MAP(mc1502_io)
1322   MCFG_CPU_CONFIG(i86_address_mask)
12521323
12531324   MCFG_MACHINE_START(mc1502)
12541325   MCFG_MACHINE_RESET(pc)
r15632r15633
12751346//  MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config)             /* TODO: non-standard */
12761347
12771348   /* cassette */
1278   MCFG_CASSETTE_ADD( CASSETTE_TAG, ibm5150_cassette_interface )   /* TODO: verify */
1349   MCFG_CASSETTE_ADD( CASSETTE_TAG, mc1502_cassette_interface )   // has no motor control
12791350
12801351   MCFG_FD1793_ADD( "vg93", default_wd17xx_interface_2_drives )
12811352   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(ibmpc_floppy_interface)
r15632r15633
12861357MACHINE_CONFIG_END
12871358
12881359
1360static MACHINE_CONFIG_START( ec1841, pc_state )
1361   /* basic machine hardware */
1362   MCFG_CPU_PC(ec1841, ec1841, I8086, 4096000, pc_frame_interrupt)   // correct but slow
1363//   MCFG_CPU_PC(ec1841, ec1841, I8086, 4772720, pc_frame_interrupt)
12891364
1365   MCFG_QUANTUM_TIME(attotime::from_hz(60))
1366
1367   MCFG_MACHINE_START(pc)
1368   MCFG_MACHINE_RESET(pc)
1369
1370   MCFG_PIT8253_ADD( "pit8253", ibm5150_pit8253_config )
1371
1372   // maybe XTAL_12_288MHz
1373   MCFG_I8237_ADD( "dma8237", XTAL_14_31818MHz/3, ibm5150_dma8237_config )
1374
1375   MCFG_PIC8259_ADD( "pic8259", ibm5150_pic8259_config )
1376
1377   MCFG_I8255_ADD( "ppi8255", ibm5160_ppi8255_interface )
1378
1379//   MCFG_I8251_ADD( "upd8251_0", default_i8251_interface )   // modeled after BSC adapter?
1380//   MCFG_I8251_ADD( "upd8251_1", default_i8251_interface )
1381
1382   /* video hardware -- supports font uploads */
1383   MCFG_FRAGMENT_ADD( pcvideo_cga )
1384   MCFG_GFXDECODE(ibm5150)
1385
1386   /* sound hardware */
1387   MCFG_SPEAKER_STANDARD_MONO("mono")
1388   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
1389   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
1390
1391   /* printer */
1392   MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config)
1393
1394   MCFG_UPD765A_ADD("upd765", pc_fdc_upd765_not_connected_interface)
1395
1396   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(ibmpc_floppy_interface)
1397
1398   /* keyboard -- needs dump */
1399   MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
1400   MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270, NULL)
1401
1402   /* internal ram -- up to 4 banks of 512K */
1403   MCFG_RAM_ADD(RAM_TAG)
1404   MCFG_RAM_DEFAULT_SIZE("512K")
1405//   MCFG_RAM_EXTRA_OPTIONS("640K,1024K,1576K,2048K")
1406MACHINE_CONFIG_END
1407
1408
12901409static MACHINE_CONFIG_START( iskr1031, pc_state )
12911410   /* basic machine hardware */
1292   MCFG_CPU_PC(pc16, pc16, I8086, 4772720, pc_frame_interrupt)
1411   MCFG_CPU_PC(iskr1031, iskr1031, I8086, 4772720, pc_frame_interrupt)
12931412
12941413   MCFG_QUANTUM_TIME(attotime::from_hz(60))
12951414
r15632r15633
20232142
20242143ROM_START( mc1502 )
20252144   ROM_REGION16_LE(0x100000,"maincpu", 0)
2145   ROM_DEFAULT_BIOS("v52")
20262146   ROM_LOAD( "basic.rom",        0xe8000, 0x8000, CRC(173d69fa) SHA1(003f872e12f00800e22ab6bbc009d36bfde67b9d))
20272147   ROM_SYSTEM_BIOS(0, "v50", "v5.0")
20282148   ROMX_LOAD( "monitor_5_0.rom",  0xfc000, 0x4000, CRC(9e97c6a0) SHA1(16a304e8de69ec4d8b92acda6bf28454c361a24f),ROM_BIOS(1))
r15632r15633
21312251COMP( 1989, iskr1030m,  ibm5150,    0,          iskr1031,   pccga,      pccga,      "Schetmash", "Iskra 1030M", GAME_NOT_WORKING)
21322252COMP( 1992, iskr3104,   ibm5150,    0,          iskr3104,   pcega,      pccga,      "Schetmash", "Iskra 3104", GAME_NOT_WORKING)
21332253COMP( 1987, ec1840,     ibm5150,    0,          iskr1031,   pccga,      pccga,      "<unknown>", "EC-1840", GAME_NOT_WORKING)
2134COMP( 1987, ec1841,     ibm5150,    0,          iskr1031,   pccga,      pccga,      "<unknown>", "EC-1841", GAME_NOT_WORKING)
2254COMP( 1987, ec1841,     ibm5150,    0,          ec1841,     pccga,      pccga,      "<unknown>", "EC-1841", GAME_NOT_WORKING)
21352255COMP( 1989, ec1845,     ibm5150,    0,          iskr1031,   pccga,      pccga,      "<unknown>", "EC-1845", GAME_NOT_WORKING)
21362256COMP( 1989, mk88,       ibm5150,    0,          iskr1031,   pccga,      pccga,      "<unknown>", "MK-88", GAME_NOT_WORKING)
21372257COMP( 1990, poisk1,     ibm5150,    0,          iskr1031,   pccga,      pccga,      "<unknown>", "Poisk-1", GAME_NOT_WORKING)

Previous 5015994 RevisionsNext 50


© 1998-2012 The MESS Team