Previous 15994 Revisions Next

r10179 Monday 24th January, 2011 at 10:51:06 UTC by Robbbert
[SOL20] Hooked up cursor dips, fixed a few errors.
[src/mess/drivers]ptcsol.c

src/mess/drivers/ptcsol.c
r10178r10179
1919    Note that the CONSOL rom is basically a dumb terminal program and doesn't
2020    do anything useful unless the MODE key (whatever that is) is pressed.
2121
22    Other OS ROMs to be dumped:
23      - CONSOL
24      - CUTER
25      - BOOTLOAD
26      - DPMON (3rd party)
22    CUTER is a relocatable cassette-based alternative to SOLOS.
2723
24    Need a dump of BOOTLOAD. Need a tape of CUTER. Need orginal dumps of
25    SOLOS, DPMON and CONSOL.
26
2827    Other roms needed:
2928      - Dump of the 2 character generators (motorola 6574 and 6575)
3029      - Dump of U18 in the keyboard
r10178r10179
4140      - The cassette format is totally identical, in fact tapes from one
4241        machine can be loaded on the other natively. They won't run of course.
4342      - Sorcerer monitor commands are almost identical to the SOLOS ones.
44        To illustrate some differences:
45        Run a program in memory  GO (sorcerer) EX (SOLOS)
46        Load a file from tape    LO (Sorcerer) GE (SOLOS)
47        Set tape operation to 300 baud  SE T=1 (sorcerer)  SE TA 1 (SOLOS)
43        example: to change tape speed to 300 baud:
44        SE T=1 (sorcerer)  SE TA 1 (SOLOS)
4845        Most other commands are identical. The EN command (enter bytes into
4946        memory) is rather primitive in SOLOS, better on Sorcerer.
5047      - Sol20 has "personality modules" where you could plug a new OS into
5148        a special socket on the motherboard. Sorcerer improved upon this by
5249        being the first computer to use cartridges.
5350      - Some circuits are completely different... the video and keyboard are
54        notable examples, while the address of ram on the basic machines is
55        another major difference.
51        notable examples, while the addresses of ram and bios on the basic
52        machines is another major difference.
5653****************************************************************************/
5754#define ADDRESS_MAP_MODERN
5855
r10178r10179
9592   required_device<device_t> m_uart;
9693   required_device<device_t> m_uart_s;
9794   required_device<device_t> m_terminal;
95   DECLARE_READ8_MEMBER( sol20_f9_r );
9896   DECLARE_READ8_MEMBER( sol20_fa_r );
9997   DECLARE_READ8_MEMBER( sol20_fb_r );
10098   DECLARE_READ8_MEMBER( sol20_fc_r );
99   DECLARE_WRITE8_MEMBER( sol20_f9_w );
101100   DECLARE_WRITE8_MEMBER( sol20_fa_w );
102101   DECLARE_WRITE8_MEMBER( sol20_fb_w );
103102   DECLARE_WRITE8_MEMBER( sol20_fe_w );
r10178r10179
105104   UINT8 m_sol20_fa;
106105   UINT8 m_sol20_fc;
107106   UINT8 m_sol20_fe;
108   UINT8 m_s4;
109107   const UINT8 *FNT;
110108   const UINT8 *m_videoram;
111109   UINT8 m_framecnt;
r10178r10179
217215   }
218216}
219217
218READ8_MEMBER( sol20_state::sol20_f9_r)
219{
220   UINT8 data = ay31015_get_received_data( m_uart_s );
221   ay31015_set_input_pin( m_uart_s, AY31015_RDAV, 0 );
222   ay31015_set_input_pin( m_uart_s, AY31015_RDAV, 1 );
223   return data;
224}
220225
221226READ8_MEMBER( sol20_state::sol20_fa_r )
222227{
r10178r10179
247252   return m_sol20_fc;
248253}
249254
255WRITE8_MEMBER( sol20_state::sol20_f9_w )
256{
257   ay31015_set_transmit_data( m_uart_s, data );
258}
259
250260WRITE8_MEMBER( sol20_state::sol20_fa_w )
251261{
252262   m_sol20_fa &= 1;
r10178r10179
292302static ADDRESS_MAP_START( sol20_io , ADDRESS_SPACE_IO, 8, sol20_state)
293303   ADDRESS_MAP_UNMAP_HIGH
294304   ADDRESS_MAP_GLOBAL_MASK(0xff)
305   AM_RANGE(0xf9, 0xf9) AM_READWRITE(sol20_f9_r,sol20_f9_w)
295306   AM_RANGE(0xfa, 0xfa) AM_READWRITE(sol20_fa_r,sol20_fa_w)
296307   AM_RANGE(0xfb, 0xfb) AM_READWRITE(sol20_fb_r,sol20_fb_w)
297308   AM_RANGE(0xfc, 0xfc) AM_READ(sol20_fc_r)
r10178r10179
359370   PORT_DIPSETTING(    0x80, "4800/9600")
360371
361372   PORT_START("S4") // these switches need to be checked for correct polarity
362   PORT_DIPNAME( 0x11, 0x00, "Parity")
363   PORT_DIPSETTING(    0x00, DEF_STR(None))
364   PORT_DIPSETTING(    0x10, "Odd")
365   PORT_DIPSETTING(    0x11, "Even")
373   PORT_DIPNAME( 0x11, 0x10, "Parity")
374   PORT_DIPSETTING(    0x00, "Even")
375   PORT_DIPSETTING(    0x01, "Odd")
376   PORT_DIPSETTING(    0x10, DEF_STR(None))
366377   PORT_DIPNAME( 0x06, 0x06, "Data Bits")
367378   PORT_DIPSETTING(    0x00, "5")
368379   PORT_DIPSETTING(    0x02, "6")
r10178r10179
462473   ay31015_set_receiver_clock( state->m_uart_s, s_clock);
463474   ay31015_set_transmitter_clock( state->m_uart_s, s_clock);
464475
465   // video dips
466   state->m_s4 = input_port_read(machine, "S1");
467
468476   // boot-bank
469477   memory_set_bank(machine, "boot", 1);
470478   timer_set(machine, ATTOTIME_IN_USEC(9), NULL, 0, sol20_boot);
r10178r10179
484492
485493static VIDEO_UPDATE( sol20 )
486494{
495// Visible screen is 64 x 16, with start position controlled by scroll register.
496// Note on blinking characters:
497// any character with bit 7 set will blink. With DPMON, do DA C000 C2FF to see what happens
498   UINT8 s1 = input_port_read(machine, "S1");
487499   sol20_state *state = screen->machine->driver_data<sol20_state>();
488/* visible screen is 64 x 16, with start position controlled by scroll register */
489500   UINT8 y,ra,chr,gfx;
490501   UINT16 sy=0,ma,x,inv;
491   UINT8 ctrl_off = state->m_s4 & 4;
492   UINT8 polarity = (state->m_s4 & 8) ? 0xff : 0;
502   UINT8 polarity = (s1 & 8) ? 0xff : 0;
493503
504   UINT8 cursor_inv = FALSE;
505   if ((s1 == 0x20) || ((s1 == 0x10) && (state->m_framecnt & 0x08)))
506      cursor_inv = TRUE;
507
494508   state->m_framecnt++;
495509
496510   ma = state->m_sol20_fe << 6; // scroll register
r10178r10179
506520            inv = polarity;
507521            chr = state->m_videoram[x & 0x3ff];
508522
509            /* Take care of flashing characters */
510            //if ((chr & 0x80) && (state->m_framecnt & 0x08))
511            if (chr & 0x80)
523            // cursor
524            if (BIT(chr, 7) && cursor_inv)
512525               inv ^= 0xff;
513526
514527            chr &= 0x7f;
515528
516            if ((ra == 0) || ((ctrl_off) && (chr < 0x20)))
529            if ((ra == 0) || ((s1 & 4) && (chr < 0x20)))
517530               gfx = inv;
518531            else
519532            if (ra < 10)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team