Previous 199869 Revisions Next

r22872 Friday 17th May, 2013 at 18:05:57 UTC by Curt Coder
com8116: Fixed frequency divisors. [Curt Coder]
(MESS) exp85: Fixed terminal. [Curt Coder]
(MESS) ob68k1a: Fixed terminal. [Curt Coder]
(MESS) super6: Fixed terminal. [Curt Coder]
[src/emu/machine]com8116.c com8116.h
[src/mess/drivers]exp85.c kaypro.c ob68k1a.c super6.c xerox820.c xor100.c
[src/mess/includes]exp85.h super6.h
[src/mess/machine]s100_dj2db.c terminal.c

trunk/src/emu/machine/com8116.c
r22871r22872
8484
8585
8686//-------------------------------------------------
87//  device_reset - device-specific reset
88//-------------------------------------------------
89
90void com8116_device::device_reset()
91{
92   m_fr = 0;
93   m_ft = 0;
94}
95
96
97//-------------------------------------------------
8798//  device_timer - handler timer events
8899//-------------------------------------------------
89100
r22871r22872
110121//  str_w -
111122//-------------------------------------------------
112123
113WRITE8_MEMBER( com8116_device::str_w )
124void com8116_device::str_w(UINT8 data)
114125{
115   if (LOG) logerror("COM8116 '%s' Receiver Divider %01x\n", tag(), data & 0x0f);
116
117126   m_fr = data & 0x0f;
127   int fr_clock = clock() / m_fr_divisors[m_fr];
118128
119   m_fr_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_fr_divisors[m_fr] / 2));
129   if (LOG) logerror("COM8116 '%s' Receiver Divisor Select %01x: %u (%u Hz)\n", tag(), data & 0x0f, m_fr_divisors[m_fr], fr_clock);
130
131   m_fr_timer->adjust(attotime::from_nsec(3500), 0, attotime::from_hz(fr_clock));
120132}
121133
134WRITE8_MEMBER( com8116_device::str_w )
135{
136   str_w(data);
137}
122138
139
123140//-------------------------------------------------
124141//  stt_w -
125142//-------------------------------------------------
126143
127WRITE8_MEMBER( com8116_device::stt_w )
144void com8116_device::stt_w(UINT8 data)
128145{
129   if (LOG) logerror("COM8116 '%s' Transmitter Divider %01x\n", tag(), data & 0x0f);
130
131146   m_ft = data & 0x0f;
147   int ft_clock = clock() / m_ft_divisors[m_ft];
132148
133   m_ft_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_ft_divisors[m_ft] / 2));
149   if (LOG) logerror("COM8116 '%s' Transmitter Divisor Select %01x: %u (%u Hz)\n", tag(), data & 0x0f, m_ft_divisors[m_ft], ft_clock);
150
151   m_ft_timer->adjust(attotime::from_nsec(3500), 0, attotime::from_hz(ft_clock));
134152}
153
154WRITE8_MEMBER( com8116_device::stt_w )
155{
156   stt_w(data);
157}
trunk/src/emu/machine/com8116.h
r22871r22872
4242   const com8116_interface (name) =
4343
4444
45#define COM8116_DIVISORS_16X_5_0688MHz \
46   { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 }
4547
48#define COM8116_DIVISORS_16X_4_9152MHz \
49   { 6144, 4096, 2793, 2284, 2048, 1024, 512, 256, 171, 154, 128, 85, 64, 43, 32, 16 }
50
51#define COM8116_DIVISORS_32X_5_0688MHz \
52   { 3168, 2112, 1440, 1177, 1056, 792, 528, 264, 132, 88, 66, 44, 33, 22, 16, 8 }
53
54
55
4656///*************************************************************************
4757//  TYPE DEFINITIONS
4858///*************************************************************************
r22871r22872
7282   // construction/destruction
7383   com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
7484
85   void str_w(UINT8 data);
7586   DECLARE_WRITE8_MEMBER( str_w );
87   void stt_w(UINT8 data);
7688   DECLARE_WRITE8_MEMBER( stt_w );
7789
7890protected:
7991   // device-level overrides
8092   virtual void device_config_complete();
8193   virtual void device_start();
94   virtual void device_reset();
8295   virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr);
8396
8497private:
trunk/src/mess/machine/s100_dj2db.c
r22871r22872
6969   DEVCB_NULL,
7070   DEVCB_NULL, // S1602 RRC/TRC
7171   DEVCB_NULL,
72   { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 }, // from WD1943-00 datasheet
73   { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 },
72   COM8116_DIVISORS_16X_5_0688MHz, // receiver
73   COM8116_DIVISORS_16X_5_0688MHz // transmitter
7474};
7575
7676
trunk/src/mess/machine/terminal.c
r22871r22872
483483
484484INPUT_CHANGED_MEMBER(serial_terminal_device::update_frame)
485485{
486   device_reset();
487}
488
489void serial_terminal_device::device_reset()
490{
491   generic_terminal_device::device_reset();
492   m_rbit = 1;
493   if(m_slot)
494      m_owner->out_rx(m_rbit);
495   else
496      m_out_tx_func(m_rbit);
497
486498   UINT8 val = m_io_term_frame->read();
487499   set_tra_rate(rates[val & 0x0f]);
488500   set_rcv_rate(rates[val & 0x0f]);
r22871r22872
499511   }
500512}
501513
502void serial_terminal_device::device_reset()
503{
504   generic_terminal_device::device_reset();
505   m_rbit = 1;
506   if(m_slot)
507      m_owner->out_rx(m_rbit);
508   else
509      m_out_tx_func(m_rbit);
510}
511
512514void serial_terminal_device::send_key(UINT8 code)
513515{
514516   if(is_transmit_register_empty())
trunk/src/mess/includes/exp85.h
r22871r22872
1515         m_terminal(*this, TERMINAL_TAG),
1616         m_cassette(*this, "cassette"),
1717         m_speaker(*this, "speaker"),
18         m_rom(*this, I8085A_TAG)
18         m_rom(*this, I8085A_TAG),
19         m_tape_control(0)
1920   { }
2021
2122   required_device<cpu_device> m_maincpu;
trunk/src/mess/includes/super6.h
r22871r22872
4141         m_floppy0(*this, WD2793_TAG":0"),
4242         m_floppy1(*this, WD2793_TAG":1"),
4343         m_terminal(*this, TERMINAL_TAG),
44         m_rom(*this, Z80_TAG)
44         m_rom(*this, Z80_TAG),
45         m_j7(*this, "J7")
4546   { }
4647
4748   required_device<cpu_device> m_maincpu;
r22871r22872
5657   required_device<floppy_connector> m_floppy1;
5758   required_device<serial_terminal_device> m_terminal;
5859   required_memory_region m_rom;
60   required_ioport m_j7;
5961
6062   virtual void machine_start();
6163   virtual void machine_reset();
trunk/src/mess/drivers/exp85.c
r22871r22872
181181
182182/* Terminal Interface */
183183
184static DEVICE_INPUT_DEFAULTS_START( terminal )
185   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
186   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x10 ) // 7E1
187DEVICE_INPUT_DEFAULTS_END
188
184189static const serial_terminal_interface terminal_intf =
185190{
186191   DEVCB_NULL
r22871r22872
227232   MCFG_I8155_ADD(I8155_TAG, XTAL_6_144MHz/2, i8155_intf)
228233   MCFG_I8355_ADD(I8355_TAG, XTAL_6_144MHz/2, i8355_intf)
229234   MCFG_CASSETTE_ADD("cassette", exp85_cassette_interface)
230   MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf,9600)
235   MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 9600)
236   MCFG_DEVICE_INPUT_DEFAULTS(terminal)
231237
232238   /* internal ram */
233239   MCFG_RAM_ADD(RAM_TAG)
r22871r22872
260266
261267/* System Drivers */
262268/*    YEAR  NAME    PARENT  COMPAT  MACHINE  INPUT   INIT    COMPANY         FULLNAME        FLAGS */
263COMP( 1979, exp85,  0,      0,      exp85,   exp85, driver_device,  0,    "Netronics",    "Explorer/85", GAME_NOT_WORKING )
269COMP( 1979, exp85,  0,      0,      exp85,   exp85, driver_device,  0,    "Netronics",    "Explorer/85", 0 )
trunk/src/mess/drivers/xerox820.c
r22871r22872
502502   DEVCB_NULL,     /* fX/4 output */
503503   DEVCB_NULL,     /* fR output */
504504   DEVCB_NULL,     /* fT output */
505   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* receiver divisor ROM */
506   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* transmitter divisor ROM */
505   COM8116_DIVISORS_16X_5_0688MHz, // receiver
506   COM8116_DIVISORS_16X_5_0688MHz // transmitter
507507};
508508
509509WRITE8_MEMBER( xerox820_state::kbd_w )
trunk/src/mess/drivers/kaypro.c
r22871r22872
175175   DEVCB_NULL,     /* fX/4 output */
176176   DEVCB_NULL, //  DEVCB_DEVICE_LINE("z80sio", rx_tx_a_w), z80sio implementation has no clock pin
177177   DEVCB_NULL, // DEVCB_DEVICE_LINE("z80sio", rx_tx_b_w),
178   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* receiver divisor ROM */
179   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* transmitter divisor ROM */
178   COM8116_DIVISORS_16X_5_0688MHz, // receiver
179   COM8116_DIVISORS_16X_5_0688MHz // transmitter
180180};
181181
182182static COM8116_INTERFACE( kaypro2x_brg_intf )
r22871r22872
184184   DEVCB_NULL,     /* fX/4 output */
185185   DEVCB_NULL,//DEVCB_DEVICE_LINE("z80sio", rx_tx_a_w),
186186   DEVCB_NULL,//DEVCB_DEVICE_LINE("z80sio_2x", rx_tx_a_w),
187   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* receiver divisor ROM */
188   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* transmitter divisor ROM */
187   COM8116_DIVISORS_16X_5_0688MHz, // receiver
188   COM8116_DIVISORS_16X_5_0688MHz // transmitter
189189};
190190
191191
trunk/src/mess/drivers/super6.c
r22871r22872
255255
256256   */
257257
258   m_brg->str_w(space, 0, data & 0x0f);
259   m_brg->stt_w(space, 0, data >> 4);
258   m_brg->str_w(data & 0x0f);
259   m_brg->stt_w(data >> 4);
260260}
261261
262262
r22871r22872
305305
306306static INPUT_PORTS_START( super6 )
307307   PORT_START("J7")
308   PORT_DIPNAME( 0x0f, 0x0e, "SIO Channel A Baud Rate" ) PORT_DIPLOCATION("J7:1,2,3,4")
308   PORT_DIPNAME( 0x0f, 0x0f, "SIO Channel A Baud Rate" ) PORT_DIPLOCATION("J7:1,2,3,4")
309309   PORT_DIPSETTING(    0x00, "50" )
310310   PORT_DIPSETTING(    0x01, "75" )
311311   PORT_DIPSETTING(    0x02, "110" )
r22871r22872
460460   DEVCB_NULL,
461461   DEVCB_DRIVER_LINE_MEMBER(super6_state, fr_w),
462462   DEVCB_DEVICE_LINE(Z80DART_TAG, z80dart_rxtxcb_w),
463   { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 }, // from WD1943-00 datasheet
464   { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 },
463   COM8116_DIVISORS_16X_5_0688MHz, // receiver
464   COM8116_DIVISORS_16X_5_0688MHz // transmitter
465465};
466466
467467
r22871r22872
505505//  GENERIC_TERMINAL_INTERFACE( terminal_intf )
506506//-------------------------------------------------
507507
508static DEVICE_INPUT_DEFAULTS_START( terminal )
509   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x08 ) // 19200
510   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
511DEVICE_INPUT_DEFAULTS_END
512
508513WRITE8_MEMBER( super6_state::dummy_w )
509514{
510515   // handled in Z80DART_INTERFACE
r22871r22872
547552   m_bank0 = m_bank1 = 0;
548553
549554   bankswitch();
555
556   UINT8 baud = m_j7->read();
557
558   m_brg->str_w(baud & 0x0f);
559   m_brg->stt_w((baud >> 4) & 0x07);
550560}
551561
552562
r22871r22872
576586   MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, brg_intf)
577587   MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
578588   MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, NULL,   NULL, floppy_image_device::default_floppy_formats)
579   MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 4800)
589   MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 19200)
590   MCFG_DEVICE_INPUT_DEFAULTS(terminal)
580591
581592   // internal ram
582593   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/xor100.c
r22871r22872
149149
150150WRITE8_MEMBER( xor100_state::baud_w )
151151{
152   m_dbrg->str_w(space, 0, data & 0x0f);
153   m_dbrg->stt_w(space, 0, data >> 4);
152   m_dbrg->str_w(data & 0x0f);
153   m_dbrg->stt_w(data >> 4);
154154}
155155
156156WRITE8_MEMBER( xor100_state::i8251_b_data_w )
r22871r22872
378378   DEVCB_NULL,                 /* fX/4 output */
379379   DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_fr_w),   /* fR output */
380380   DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_ft_w),   /* fT output */
381   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, // WRONG?
382   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, // WRONG?
381   COM8116_DIVISORS_16X_5_0688MHz, // receiver
382   COM8116_DIVISORS_16X_5_0688MHz // transmitter
383383};
384384
385385/* Printer 8251A Interface */
r22871r22872
590590   MCFG_I8251_ADD(I8251_B_TAG, /*XTAL_8MHz/2,*/ terminal_8251_intf)
591591   MCFG_I8255A_ADD(I8255A_TAG, printer_8255_intf)
592592   MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf)
593   MCFG_COM8116_ADD(COM5016_TAG, 5000000, com5016_intf)
593   MCFG_COM8116_ADD(COM5016_TAG, XTAL_5_0688MHz, com5016_intf)
594594   MCFG_FD1795x_ADD(WD1795_TAG, XTAL_8MHz/4)
595595   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":0", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
596596   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":1", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
trunk/src/mess/drivers/ob68k1a.c
r22871r22872
5151
5252    TODO:
5353
54    - COM8116 dividers are wrong
5554    - interrupts
5655    - configuration switches
5756    - PIA odd/even byte access
r22871r22872
7372
7473WRITE8_MEMBER( ob68k1a_state::com8116_w )
7574{
76   m_dbrg->stt_w(space, 0, data & 0x0f);
77   m_dbrg->str_w(space, 0, data >> 4);
75   m_dbrg->stt_w(data & 0x0f);
76   m_dbrg->str_w(data >> 4);
7877}
7978
8079
r22871r22872
205204   DEVCB_NULL
206205};
207206
207
208208//-------------------------------------------------
209209//  ACIA6850_INTERFACE( acia0_intf )
210210//-------------------------------------------------
211211
212212static ACIA6850_INTERFACE( acia0_intf )
213213{
214   9600*16, // HACK for terminal
215   9600*16, // HACK for terminal
214   0,
215   0,
216216   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
217217   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
218   DEVCB_LINE_GND, // HACK for terminal
218   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r),
219219   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
220   DEVCB_LINE_GND, // HACK for terminal
220   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dcd_r),
221221   DEVCB_NULL
222222};
223223
r22871r22872
260260   DEVCB_NULL,     /* fX/4 output */
261261   DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_0_w),
262262   DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_1_w),
263   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* receiver divisor ROM */
264   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },         /* transmitter divisor ROM */
263   COM8116_DIVISORS_16X_5_0688MHz, // receiver
264   COM8116_DIVISORS_16X_5_0688MHz // transmitter
265265};
266266
267267
r22871r22872
322322
323323void ob68k1a_state::machine_reset()
324324{
325   address_space &program = m_maincpu->space(AS_PROGRAM);
326
327325   // initialize COM8116
328   com8116_w(program, 0, 0xee);
329//  m_dbrg->stt_w(program, 0, 0x01);
330//  m_dbrg->str_w(program, 0, 0x01);
326   m_dbrg->stt_w(0x0e);
327   m_dbrg->str_w(0x0e);
331328
332329   // set reset vector
333   void *ram = program.get_write_ptr(0);
330   void *ram = m_maincpu->space(AS_PROGRAM).get_write_ptr(0);
334331   UINT8 *rom = memregion(MC68000L10_TAG)->base();
335332
336333   memcpy(ram, rom, 8);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team