Previous 199869 Revisions Next

r25400 Monday 23rd September, 2013 at 18:30:29 UTC by Carl
(mess) mc1502: cassette output, printer WIP, serial WIP, minor keyboard fix [shattered]
[src/emu/imagedev]serial.h
[src/mess/drivers]pc.c
[src/mess/includes]pc.h
[src/mess/machine]kb_7007_3.h pc.c

trunk/src/emu/imagedev/serial.h
r25399r25400
66
77****************************************************************************/
88
9#ifndef __SERIAL_H__
10#define __SERIAL_H__
9#ifndef __IMAGEDEV_SERIAL_H__
10#define __IMAGEDEV_SERIAL_H__
1111
1212
1313/***************************************************************************
r25399r25400
102102
103103
104104#define MCFG_SERIAL_ADD(_tag,_config) \
105   MCFG_DEVICE_ADD(_tag, SERIAL, 0) \
105 MCFG_DEVICE_ADD(_tag, SERIAL, 0) \
106106   MCFG_DEVICE_CONFIG(_config)
107#endif /* __SERIAL_H__ */
107#endif /* __IMAGEDEV_SERIAL_H__ */
trunk/src/mess/includes/pc.h
r25399r25400
88#define PC_H_
99
1010#include "machine/ins8250.h"
11#include "machine/i8251.h"
1112#include "machine/i8255.h"
1213#include "machine/am9517a.h"
1314#include "machine/serial.h"
r25399r25400
1920#include "machine/ram.h"
2021#include "machine/pic8259.h"
2122#include "machine/pit8253.h"
23#include "machine/ctronics.h"
2224
2325class pc_state : public driver_device
2426{
r25399r25400
3234      m_pc_kbdc(*this, "pc_kbdc"),
3335      m_speaker(*this, "speaker"),
3436      m_cassette(*this, "cassette"),
37      m_centronics(*this, "centronics"),
3538      m_ram(*this, RAM_TAG) { }
3639
3740   required_device<cpu_device> m_maincpu;
r25399r25400
4144   optional_device<pc_kbdc_device>  m_pc_kbdc;
4245   optional_device<speaker_sound_device> m_speaker;
4346   optional_device<cassette_image_device> m_cassette;
47   optional_device<centronics_device> m_centronics;
4448   optional_device<ram_device> m_ram;
4549
4650   /* U73 is an LS74 - dual flip flop */
r25399r25400
120124   DECLARE_WRITE_LINE_MEMBER(pcjr_pic8259_set_int_line);
121125   DECLARE_WRITE_LINE_MEMBER(ibm5150_pit8253_out1_changed);
122126   DECLARE_WRITE_LINE_MEMBER(ibm5150_pit8253_out2_changed);
127   DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out1_changed);
128   DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out2_changed);
123129   DECLARE_WRITE_LINE_MEMBER(pc_com_interrupt_1);
124130   DECLARE_WRITE_LINE_MEMBER(pc_com_interrupt_2);
125131   DECLARE_READ8_MEMBER(ibm5160_ppi_porta_r);
r25399r25400
127133   DECLARE_WRITE8_MEMBER(ibm5160_ppi_portb_w);
128134   DECLARE_READ8_MEMBER(pc_ppi_porta_r);
129135   DECLARE_WRITE8_MEMBER(pc_ppi_portb_w);
130   DECLARE_READ8_MEMBER(mc1502_ppi_porta_r);
131136   DECLARE_WRITE8_MEMBER(mc1502_ppi_porta_w);
132137   DECLARE_WRITE8_MEMBER(mc1502_ppi_portb_w);
133138   DECLARE_READ8_MEMBER(mc1502_ppi_portc_r);
134139   DECLARE_READ8_MEMBER(mc1502_kppi_porta_r);
140   DECLARE_READ8_MEMBER(mc1502_kppi_portc_r);
135141   DECLARE_WRITE8_MEMBER(mc1502_kppi_portb_w);
136142   DECLARE_WRITE8_MEMBER(mc1502_kppi_portc_w);
137143   DECLARE_WRITE8_MEMBER(pcjr_ppi_portb_w);
r25399r25400
199205extern const i8255_interface ibm5160_ppi8255_interface;
200206extern const i8255_interface pc_ppi8255_interface;
201207extern const i8255_interface pcjr_ppi8255_interface;
208extern const i8251_interface mc1502_i8251_interface;
202209extern const i8255_interface mc1502_ppi8255_interface;
203210extern const i8255_interface mc1502_ppi8255_interface_2;
204211
trunk/src/mess/drivers/pc.c
r25399r25400
6262#include "cpu/i86/i86.h"
6363#include "cpu/i86/i286.h"
6464#include "sound/speaker.h"
65#include "sound/wave.h"
6566
6667#include "machine/i8255.h"
6768#include "machine/ins8250.h"
r25399r25400
9091#include "imagedev/harddriv.h"
9192#include "imagedev/cassette.h"
9293#include "imagedev/cartslot.h"
94#include "imagedev/serial.h"
9395#include "formats/mfi_dsk.h"
9496#include "formats/pc_dsk.h"
9597#include "formats/asst128_dsk.h"
r25399r25400
13391341   NULL
13401342};
13411343
1344static const serial_image_interface mc1502_serial =
1345{
1346   9600, 8, 1, SERIAL_PARITY_NONE, 1, "upd8251"
1347};
1348
13421349static MACHINE_CONFIG_START( ibmpcjr, tandy_pc_state )
13431350   /* basic machine hardware */
13441351   MCFG_CPU_PC(ibmpcjr, ibmpcjr, I8088, 4900000, pcjr_frame_interrupt) /* TODO: Get correct cpu frequency, probably XTAL_14_31818MHz/3 */
r25399r25400
14261433
14271434static MACHINE_CONFIG_START( mc1502, pc_state )
14281435   /* basic machine hardware */
1429//  MCFG_CPU_PC(mc1502, mc1502, I8088, XTAL_16MHz/3, pcjr_frame_interrupt)  /* check frame_interrupt */
14301436   MCFG_CPU_ADD("maincpu", I8088, XTAL_16MHz/3)
14311437   MCFG_CPU_PROGRAM_MAP(mc1502_map)
14321438   MCFG_CPU_IO_MAP(mc1502_io)
r25399r25400
14411447   MCFG_I8255_ADD( "ppi8255", mc1502_ppi8255_interface )       /* not complete */
14421448   MCFG_I8255_ADD( "ppi8255n2", mc1502_ppi8255_interface_2 )   /* not complete */
14431449
1444   MCFG_I8251_ADD( "upd8251", default_i8251_interface )
1450   MCFG_I8251_ADD( "upd8251", mc1502_i8251_interface )
1451   MCFG_SERIAL_ADD("irps", mc1502_serial)
14451452
1446   /* video hardware */
1447   MCFG_FRAGMENT_ADD( pcvideo_mc1502 )             /* only 1 chargen, CGA_FONT dip always 1 */
1453   /* video hardware (only 1 chargen in ROM; CGA_FONT dip always 1 */
1454   MCFG_FRAGMENT_ADD( pcvideo_mc1502 )
14481455   MCFG_GFXDECODE(ibmpcjr)
14491456
14501457   /* sound hardware */
14511458   MCFG_SPEAKER_STANDARD_MONO("mono")
1459   MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
14521460   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
14531461   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
14541462
1455   /* printer */
1456//  MCFG_PC_LPT_ADD("lpt_0", pc_lpt_config)             /* TODO: non-standard */
1463   MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
1464   MCFG_CASSETTE_ADD( "cassette", mc1502_cassette_interface )
14571465
1458   /* cassette */
1459   MCFG_CASSETTE_ADD( "cassette", mc1502_cassette_interface )    // has no motor control
1460
14611466   MCFG_FD1793x_ADD("vg93", XTAL_16MHz / 16)
14621467   MCFG_FLOPPY_DRIVE_ADD("fd0", mc1502_floppies, "525qd", pc_state::floppy_formats)
14631468   MCFG_FLOPPY_DRIVE_ADD("fd1", mc1502_floppies, "525qd", pc_state::floppy_formats)
trunk/src/mess/machine/kb_7007_3.h
r25399r25400
1111   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
1212   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
1313   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
14   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_HOME)
15   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_UP)
16   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) PORT_CODE(KEYCODE_PGUP)
14   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) // PORT_CODE(KEYCODE_HOME)
15   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) // PORT_CODE(KEYCODE_UP)
16   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) // PORT_CODE(KEYCODE_PGUP)
1717
1818   PORT_START("Y2")
1919   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) /* ??2 */
r25399r25400
2121   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* ??? */
2222   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT)         /* ??? */
2323   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_RALT)     /* ??? */
24   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) PORT_CODE(KEYCODE_INSERT) /* ??? */
24   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) // PORT_CODE(KEYCODE_INSERT) /* ??? */
2525   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete") PORT_CODE(KEYCODE_DEL_PAD)       /* ???? */
2626   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD)
2727
r25399r25400
3131   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
3232   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
3333   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))    /* ???? */
34   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_END)
35   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_DOWN)
36   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_PGDN)
34   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) // PORT_CODE(KEYCODE_END)
35   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) // PORT_CODE(KEYCODE_DOWN)
36   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) // PORT_CODE(KEYCODE_PGDN)
3737
3838   PORT_START("Y4")
3939   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
r25399r25400
4141   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
4242   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
4343   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
44   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_LEFT)
44   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) // PORT_CODE(KEYCODE_LEFT)
4545   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD)
46   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_RIGHT)
46   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) // PORT_CODE(KEYCODE_RIGHT)
4747
4848   PORT_START("Y5")
4949   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F2") PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
trunk/src/mess/machine/pc.c
r25399r25400
1717
1818#include "machine/i8255.h"
1919#include "machine/ins8250.h"
20#include "machine/i8251.h"
2021#include "machine/mc146818.h"
2122#include "machine/pic8259.h"
2223
r25399r25400
409410
410411/* MC1502 uses single XTAL for everything -- incl. CGA? check */
411412
413const i8251_interface mc1502_i8251_interface =
414{
415   DEVCB_NULL,   /* XXX RxD data are accessible via PPI port C, bit 7 */
416   DEVCB_NULL,
417   DEVCB_NULL,
418   DEVCB_NULL,
419   DEVCB_NULL,
420   DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir7_w),   /* default handler does nothing */
421   DEVCB_DEVICE_LINE_MEMBER("pic8259", pic8259_device, ir7_w),
422   DEVCB_NULL,
423   DEVCB_NULL   /* XXX SYNDET triggers NMI */
424};
425
426WRITE_LINE_MEMBER(pc_state::mc1502_pit8253_out1_changed)
427{
428   machine().device<i8251_device>("upd8251")->txc_w(state);
429   machine().device<i8251_device>("upd8251")->rxc_w(state);
430}
431
432WRITE_LINE_MEMBER(pc_state::mc1502_pit8253_out2_changed)
433{
434   pc_speaker_set_input( state );
435   m_cassette->output(state ? 1 : -1);
436}
437
412438const struct pit8253_interface mc1502_pit8253_config =
413439{
414440   {
r25399r25400
419445      }, {
420446         XTAL_16MHz/12,              /* serial port */
421447         DEVCB_NULL,
422         DEVCB_NULL
448         DEVCB_DRIVER_LINE_MEMBER(pc_state,mc1502_pit8253_out1_changed)
423449      }, {
424450         XTAL_16MHz/12,              /* pio port c pin 4, and speaker polling enough */
425451         DEVCB_NULL,
426         DEVCB_DRIVER_LINE_MEMBER(pc_state,ibm5150_pit8253_out2_changed)
452         DEVCB_DRIVER_LINE_MEMBER(pc_state,mc1502_pit8253_out2_changed)
427453      }
428454   }
429455};
r25399r25400
886912
887913static struct {
888914   UINT8       pulsing;
889   UINT8       latch;      /* keyboard scan code */
890915   UINT16      mask;       /* input lines */
891916   emu_timer   *keyb_signal_timer;
892917} mc1502_keyb;
r25399r25400
930955   }
931956}
932957
933READ8_MEMBER(pc_state::mc1502_ppi_porta_r)
934{
935//  DBG_LOG(1,"mc1502_ppi_porta_r",("= %02X\n", mc1502_keyb.latch));
936   return mc1502_keyb.latch;
937}
938
939958WRITE8_MEMBER(pc_state::mc1502_ppi_porta_w)
940959{
941//  DBG_LOG(1,"mc1502_ppi_porta_w",("( %02X )\n", data));
942   mc1502_keyb.latch = data;
943   if (mc1502_keyb.pulsing)
944      mc1502_keyb.pulsing--;
945   m_pic8259->ir1_w(0);
960   m_centronics->write(space, 0, data);
946961}
947962
948963WRITE8_MEMBER(pc_state::mc1502_ppi_portb_w)
r25399r25400
950965//  DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data));
951966   m_ppi_portb = data;
952967   machine().device<pit8253_device>("pit8253")->gate2_w(BIT(data, 0));
953   pc_speaker_set_spkrdata( data & 0x02 );
968   pc_speaker_set_spkrdata(BIT(data, 1));
969   m_centronics->strobe_w(BIT(data, 2));
970   m_centronics->autofeed_w(BIT(data, 3));
971   m_centronics->init_prime_w(BIT(data, 4));
954972}
955973
974READ8_MEMBER(pc_state::mc1502_kppi_portc_r)
975{
976   UINT8 data = 0;
977
978   data |= m_centronics->fault_r() << 4;
979   data |= m_centronics->pe_r() << 5;
980   data |= m_centronics->busy_r() << 6;
981   data |= m_centronics->ack_r() << 7;
982
983   return data;
984}
985
956986READ8_MEMBER(pc_state::mc1502_ppi_portc_r)
957987{
958988   int timer2_output = machine().device<pit8253_device>("pit8253")->get_output(2);
r25399r25400
10971127
10981128I8255_INTERFACE( mc1502_ppi8255_interface )
10991129{
1100   DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_porta_r),
1130   DEVCB_NULL,
11011131   DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_porta_w),
11021132   DEVCB_NULL,
11031133   DEVCB_DRIVER_MEMBER(pc_state,mc1502_ppi_portb_w),

Previous 199869 Revisions Next


© 1997-2024 The MAME Team