Previous 199869 Revisions Next

r19155 Monday 26th November, 2012 at 16:03:03 UTC by Curt Coder
(MESS) xerox820: Modernized floppy. (nw)
[src/mess]mess.lst
[src/mess/drivers]xerox820.c
[src/mess/includes]xerox820.h

trunk/src/mess/includes/xerox820.h
r19154r19155
11#ifndef __XEROX820__
22#define __XEROX820__
33
4#include "emu.h"
5#include "cpu/z80/z80.h"
6#include "cpu/z80/z80daisy.h"
7#include "cpu/i86/i86.h"
8#include "machine/com8116.h"
49#include "machine/ram.h"
10#include "machine/sa1403d.h"
11#include "machine/scsibus.h"
12#include "machine/scsicb.h"
13#include "machine/scsihd.h"
14#include "machine/wd1772.h"
15#include "machine/z80pio.h"
516#include "machine/z80ctc.h"
17#include "machine/z80dart.h"
18#include "sound/speaker.h"
19#include "sound/beep.h"
620
721#define SCREEN_TAG      "screen"
822
923#define Z80_TAG         "u46"
10#define Z80KBPIO_TAG   "u105"
11#define Z80GPPIO_TAG   "u101"
24#define Z80PIO_KB_TAG   "u105"
25#define Z80PIO_GP_TAG   "u101"
26#define Z80PIO_RD_TAG   "u8"
1227#define Z80SIO_TAG      "u96"
1328#define Z80CTC_TAG      "u99"
29#define FD1771_TAG      "u109"
1430#define FD1797_TAG      "u109"
1531#define COM8116_TAG      "u76"
1632#define I8086_TAG      "i8086"
33#define SASIBUS_TAG      "sasi"
1734
1835#define XEROX820_VIDEORAM_SIZE   0x1000
1936#define XEROX820_VIDEORAM_MASK   0x0fff
r19154r19155
2340public:
2441   xerox820_state(const machine_config &mconfig, device_type type, const char *tag)
2542      : driver_device(mconfig, type, tag),
26   m_maincpu(*this, Z80_TAG),
27   m_kbpio(*this, Z80KBPIO_TAG),
28   m_ctc(*this, Z80CTC_TAG),
29   m_fdc(*this, FD1797_TAG),
30   m_speaker(*this, SPEAKER_TAG),
31   m_beeper(*this, BEEPER_TAG),
32   m_ram(*this, RAM_TAG),
33   m_floppy0(*this, FLOPPY_0),
34   m_floppy1(*this, FLOPPY_1),
35   m_video_ram(*this, "video_ram"){ }
43        m_maincpu(*this, Z80_TAG),
44        m_kbpio(*this, Z80PIO_KB_TAG),
45        m_ctc(*this, Z80CTC_TAG),
46        m_fdc(*this, FD1771_TAG),
47        m_ram(*this, RAM_TAG),
48        m_floppy0(*this, FD1771_TAG":0"),
49        m_floppy1(*this, FD1771_TAG":1"),
50        m_video_ram(*this, "video_ram")
51   { }
3652
3753   virtual void machine_start();
3854   virtual void machine_reset();
3955
4056   virtual void video_start();
41   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
57   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
4258
4359   required_device<cpu_device> m_maincpu;
4460   required_device<z80pio_device> m_kbpio;
4561   required_device<z80ctc_device> m_ctc;
46   required_device<device_t> m_fdc;
47   optional_device<device_t> m_speaker;
48   optional_device<device_t> m_beeper;
62   required_device<wd177x_t> m_fdc;
4963   required_device<ram_device> m_ram;
50   required_device<device_t> m_floppy0;
51   required_device<device_t> m_floppy1;
64   required_device<floppy_connector> m_floppy0;
65   required_device<floppy_connector> m_floppy1;
5266
5367   DECLARE_WRITE8_MEMBER( scroll_w );
5468   //DECLARE_WRITE8_MEMBER( x120_system_w );
r19154r19155
6074
6175   void scan_keyboard();
6276   void bankswitch(int bank);
63   void set_floppy_parameters(size_t length);
64   void common_kbpio_pa_w(UINT8 data);
77   void fdc_intrq_w(bool state);
78   void fdc_drq_w(bool state);
6579
6680   /* keyboard state */
6781   int m_keydata;                  /* keyboard data */
68   bool m_bit5;
6982
7083   /* video state */
7184   required_shared_ptr<UINT8> m_video_ram;                /* video RAM */
r19154r19155
7891   int m_chrom;                  /* character ROM index */
7992
8093   /* floppy state */
81   int m_fdc_irq;                  /* interrupt request */
82   int m_fdc_drq;                  /* data request */
94   bool m_fdc_irq;                  /* interrupt request */
95   bool m_fdc_drq;                  /* data request */
8396   int m_8n5;                     /* 5.25" / 8" drive select */
84   int m_dsdd;                     /* double sided disk detect */
85   TIMER_CALLBACK_MEMBER(bigboard_beepoff);
97   int m_400_460;                  /* double sided disk detect */
98
8699   TIMER_DEVICE_CALLBACK_MEMBER(xerox820_keyboard_tick);
87100   TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
88   DECLARE_WRITE_LINE_MEMBER(ctc_z0_w);
89   DECLARE_WRITE_LINE_MEMBER(ctc_z2_w);
90101};
91102
103class bigboard_state : public xerox820_state
104{
105public:
106   bigboard_state(const machine_config &mconfig, device_type type, const char *tag)
107      : xerox820_state(mconfig, type, tag),
108        m_beeper(*this, BEEPER_TAG)
109   { }
110
111   required_device<beep_device> m_beeper;
112
113   virtual void machine_reset();
114
115   DECLARE_WRITE8_MEMBER( kbpio_pa_w );
116
117   bool m_bit5;
118
119   TIMER_CALLBACK_MEMBER(bigboard_beepoff);
120};
121
92122class xerox820ii_state : public xerox820_state
93123{
94124public:
95125   xerox820ii_state(const machine_config &mconfig, device_type type, const char *tag)
96      : xerox820_state(mconfig, type, tag)
126      : xerox820_state(mconfig, type, tag),
127        m_speaker(*this, SPEAKER_TAG),
128        m_sasibus(*this, SASIBUS_TAG ":host")
97129   { }
98130
131   required_device<speaker_sound_device> m_speaker;
132   required_device<scsicb_device> m_sasibus;
133
99134   virtual void machine_reset();
100135
101136   DECLARE_WRITE8_MEMBER( bell_w );
r19154r19155
103138   DECLARE_WRITE8_MEMBER( chrom_w );
104139   DECLARE_WRITE8_MEMBER( lowlite_w );
105140   DECLARE_WRITE8_MEMBER( sync_w );
106   DECLARE_WRITE8_MEMBER( kbpio_pa_w );
107141
142   DECLARE_READ8_MEMBER( rdpio_pb_r );
143   DECLARE_WRITE8_MEMBER( rdpio_pb_w );
144   DECLARE_WRITE_LINE_MEMBER( rdpio_pardy_w );
145
108146   void bankswitch(int bank);
109147};
110148
trunk/src/mess/mess.lst
r19154r19155
18721872tiki100
18731873vcs80
18741874v1050
1875xerox820
1876xerox820ii
1877xerox168
1875x820
1876x820ii
1877x168
18781878xor100
18791879iq151
18801880pyl601
r19154r19155
20992099jupiter2
21002100jupiter3
21012101bigboard
2102mk82
21022103mk83
21032104bigbord2
21042105savia84
trunk/src/mess/drivers/xerox820.c
r19154r19155
1010
1111    TODO:
1212
13   - Xerox 820
14      - floppy (wd1772.c FM support)
1315    - Xerox 820-II
16       - floppy (read/write to FDC triggers Z80 WAIT)
17      - Winchester
18         - Shugart SA1004 (chs=256,4,40 ss=256)
19         - Shugart SA606 (chs=160,6, ss=256)
20         - Shugart SA1403D controller
1421    - Xerox 16/8
15    - Big Board (+ Italian version MK-82)
16    - Big Board II (+ Italian version MK-83) (see bigbord2.c)
1722    - Emerald Microware X120 board
1823    - type in Monitor v1.0 from manual
1924    - proper keyboard emulation (MCU?)
r19154r19155
2833*/
2934
3035
31#include "emu.h"
32#include "cpu/z80/z80.h"
33#include "cpu/z80/z80daisy.h"
34#include "cpu/i86/i86.h"
35#include "formats/basicdsk.h"
36#include "imagedev/flopdrv.h"
37#include "machine/ram.h"
38#include "machine/z80pio.h"
39#include "machine/z80ctc.h"
40#include "machine/z80dart.h"
41#include "machine/wd17xx.h"
42#include "machine/com8116.h"
43#include "sound/speaker.h"
44#include "sound/beep.h"
4536#include "includes/xerox820.h"
4637
4738/* Keyboard HACK */
r19154r19155
206197
207198WRITE8_MEMBER( xerox820ii_state::bell_w )
208199{
209   speaker_level_w(m_speaker, offset );
200   speaker_level_w(m_speaker, offset);
210201}
211202
212203WRITE8_MEMBER( xerox820ii_state::slden_w )
213204{
214   wd17xx_dden_w(m_fdc, offset ? CLEAR_LINE : ASSERT_LINE);
205   m_fdc->dden_w(offset);
215206}
216207
217208WRITE8_MEMBER( xerox820ii_state::chrom_w )
r19154r19155
248239   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff03) AM_DEVWRITE(COM8116_TAG, com8116_device, str_w)
249240   AM_RANGE(0x04, 0x04) AM_MIRROR(0xff02) AM_DEVREADWRITE_LEGACY(Z80SIO_TAG, z80dart_d_r, z80dart_d_w)
250241   AM_RANGE(0x05, 0x05) AM_MIRROR(0xff02) AM_DEVREADWRITE_LEGACY(Z80SIO_TAG, z80dart_c_r, z80dart_c_w)
251   AM_RANGE(0x08, 0x0b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80GPPIO_TAG, z80pio_device, read_alt, write_alt)
242   AM_RANGE(0x08, 0x0b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80PIO_GP_TAG, z80pio_device, read_alt, write_alt)
252243   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff03) AM_DEVWRITE(COM8116_TAG, com8116_device, stt_w)
253   AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY(FD1797_TAG, wd17xx_r, wd17xx_w)
244   AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_DEVREADWRITE(FD1771_TAG, wd177x_t, read, write)
254245   AM_RANGE(0x14, 0x14) AM_MIRROR(0xff03) AM_MASK(0xff00) AM_WRITE(scroll_w)
255246   AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
256   AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80KBPIO_TAG, z80pio_device, read_alt, write_alt)
247   AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80PIO_KB_TAG, z80pio_device, read_alt, write_alt)
257248ADDRESS_MAP_END
258249
259250static ADDRESS_MAP_START( xerox820ii_mem, AS_PROGRAM, 8, xerox820ii_state )
r19154r19155
385376   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RIGHT CTRL") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
386377INPUT_PORTS_END
387378
388TIMER_CALLBACK_MEMBER(xerox820_state::bigboard_beepoff)
379TIMER_CALLBACK_MEMBER( bigboard_state::bigboard_beepoff )
389380{
390381   beep_set_state(m_beeper, 0);
391382}
r19154r19155
409400
410401    */
411402
412   return (m_dsdd << 5) | (m_8n5 << 4) | (m_kbpio->rdy_b() << 3);
403    UINT8 data = 0;
404
405    // keyboard
406   data |= m_kbpio->rdy_b() << 3;
407
408   // floppy
409   data |= m_8n5 << 4;
410   data |= m_400_460 << 5;
411
412   return data;
413413};
414414
415void xerox820_state::common_kbpio_pa_w(UINT8 data)
415WRITE8_MEMBER( xerox820_state::kbpio_pa_w )
416416{
417417   /*
418418
r19154r19155
420420
421421        0       _DVSEL1         drive select 1
422422        1       _DVSEL2         drive select 2
423        2       _DVSEL3         side select
423        2       SIDE            side select
424424        3
425425        4
426426        5
r19154r19155
430430    */
431431
432432   /* drive select */
433   int dvsel1 = BIT(data, 0);
434   int dvsel2 = BIT(data, 1);
433   floppy_image_device *floppy = NULL;
435434
436   if (dvsel1) wd17xx_set_drive(m_fdc, 0);
437   if (dvsel2) wd17xx_set_drive(m_fdc, 1);
435   if (BIT(data, 0)) floppy = m_floppy0->get_device();
436   if (BIT(data, 1)) floppy = m_floppy1->get_device();
438437
439   floppy_mon_w(m_floppy0, !dvsel1);
440   floppy_mon_w(m_floppy1, !dvsel2);
438   m_fdc->set_floppy(floppy);
441439
442   floppy_drive_set_ready_state(m_floppy0, dvsel1, 1);
443   floppy_drive_set_ready_state(m_floppy1, dvsel2, 1);
440   if (floppy)
441   {
442      int _8n5 = (floppy->get_form_factor() == floppy_image::FF_8);
444443
445   /* side select */
446   wd17xx_set_side(m_fdc, BIT(data, 2));
444      if (m_8n5 != _8n5)
445      {
446         m_8n5 = _8n5;
447         
448         m_fdc->set_unscaled_clock((m_8n5 ? XTAL_20MHz/10 : XTAL_20MHz/20) *8);
449      }
447450
451      m_400_460 = floppy->twosid_r();
452
453      floppy->mon_w(0);
454     
455      floppy->ss_w(BIT(data, 2));
456   }
457
448458   /* display character set */
449459   m_ncset2 = !BIT(data, 6);
460
461   /* bank switching */
462   bankswitch(BIT(data, 7));
450463}
451464
452WRITE8_MEMBER( xerox820_state::kbpio_pa_w )
465WRITE8_MEMBER( bigboard_state::kbpio_pa_w )
453466{
454   common_kbpio_pa_w(data);
467   xerox820_state::kbpio_pa_w(space, offset, data);
455468
456   /* bank switching */
457   bankswitch(BIT(data, 7));
458
459469   /* beeper on bigboard */
460470   if (BIT(data, 5) & (!m_bit5))
461471   {
462      machine().scheduler().timer_set(attotime::from_msec(40), timer_expired_delegate(FUNC(xerox820_state::bigboard_beepoff),this));
463      beep_set_state(m_beeper, 1 );
472      machine().scheduler().timer_set(attotime::from_msec(40), timer_expired_delegate(FUNC(bigboard_state::bigboard_beepoff),this));
473      beep_set_state(m_beeper, 1);
464474   }
465475   m_bit5 = BIT(data, 5);
466476}
467477
468WRITE8_MEMBER( xerox820ii_state::kbpio_pa_w )
469{
470   common_kbpio_pa_w(data);
471
472   /* bank switching */
473   bankswitch(BIT(data, 7));
474}
475
476478READ8_MEMBER( xerox820_state::kbpio_pb_r )
477479{
478480   /*
r19154r19155
508510{
509511   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),      /* callback when change interrupt status */
510512   DEVCB_DRIVER_MEMBER(xerox820_state, kbpio_pa_r),   /* port A read callback */
511   DEVCB_DRIVER_MEMBER(xerox820ii_state, kbpio_pa_w),   /* port A write callback */
513   DEVCB_DRIVER_MEMBER(xerox820_state, kbpio_pa_w),   /* port A write callback */
512514   DEVCB_NULL,                                 /* portA ready active callback */
513515   DEVCB_DRIVER_MEMBER(xerox820_state, kbpio_pb_r),   /* port B read callback */
514516   DEVCB_NULL,                                 /* port B write callback */
r19154r19155
526528   DEVCB_NULL      /* portB ready active callback */
527529};
528530
531READ8_MEMBER( xerox820ii_state::rdpio_pb_r )
532{
533   /*
534   
535       bit     description
536   
537       0       NBSY
538       1       NMSG
539       2       NC/D
540       3       NREQ
541       4       NI/O
542       5       
543       6       LS74 Q
544       7       
545   
546   */
547
548   UINT8 data = 0;
549
550   data |= !m_sasibus->scsi_bsy_r();
551   data |= !m_sasibus->scsi_msg_r() << 1;
552   data |= !m_sasibus->scsi_cd_r() << 2;
553   data |= !m_sasibus->scsi_req_r() << 3;
554   data |= !m_sasibus->scsi_io_r() << 4;
555
556   return data;
557}
558
559WRITE8_MEMBER( xerox820ii_state::rdpio_pb_w )
560{
561   /*
562   
563       bit     description
564   
565       0       
566       1       
567       2       
568       3       
569       4       
570       5       NSEL
571       6       
572       7       NRST
573   
574   */
575
576   m_sasibus->scsi_sel_w(!BIT(data, 5));
577   m_sasibus->scsi_rst_w(!BIT(data, 7));
578}
579
580WRITE_LINE_MEMBER( xerox820ii_state::rdpio_pardy_w )
581{
582   // TODO
583}
584
585static Z80PIO_INTERFACE( rdpio_intf )
586{
587   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),   /* callback when change interrupt status */
588   DEVCB_DEVICE_MEMBER(SASIBUS_TAG ":host", scsicb_device, scsi_data_r),   /* port A read callback */
589   DEVCB_DEVICE_MEMBER(SASIBUS_TAG ":host", scsicb_device, scsi_data_w),   /* port A write callback */
590   DEVCB_DRIVER_LINE_MEMBER(xerox820ii_state, rdpio_pardy_w),      /* portA ready active callback */
591   DEVCB_DRIVER_MEMBER(xerox820ii_state, rdpio_pb_r),      /* port B read callback */
592   DEVCB_DRIVER_MEMBER(xerox820ii_state, rdpio_pb_w),      /* port B write callback */
593   DEVCB_NULL      /* portB ready active callback */
594};
595
529596/* Z80 SIO */
530597
531598static Z80DART_INTERFACE( sio_intf )
r19154r19155
551618
552619/* Z80 CTC */
553620
554TIMER_DEVICE_CALLBACK_MEMBER(xerox820_state::ctc_tick)
621TIMER_DEVICE_CALLBACK_MEMBER( xerox820_state::ctc_tick )
555622{
556623   m_ctc->trg0(1);
557624   m_ctc->trg0(0);
558625}
559626
560WRITE_LINE_MEMBER(xerox820_state::ctc_z0_w)
561{
562//  device_t *device = machine().device(Z80CTC_TAG);
563//  z80ctc_trg1_w(device, state);
564}
565
566WRITE_LINE_MEMBER(xerox820_state::ctc_z2_w)
567{
568//  device_t *device = machine().device(Z80CTC_TAG);
569
570//  z80ctc_trg3_w(device, state);
571}
572
573627static Z80CTC_INTERFACE( ctc_intf )
574628{
575629   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),   /* interrupt handler */
576   DEVCB_DRIVER_LINE_MEMBER(xerox820_state,ctc_z0_w),      /* ZC/TO0 callback */
577   DEVCB_DEVICE_LINE_MEMBER(Z80CTC_TAG, z80ctc_device, trg2),   /* ZC/TO1 callback */
578   DEVCB_DRIVER_LINE_MEMBER(xerox820_state,ctc_z2_w)      /* ZC/TO2 callback */
630   DEVCB_DEVICE_LINE_MEMBER(Z80CTC_TAG, z80ctc_device, trg1),   /* ZC/TO0 callback */
631   DEVCB_NULL,   /* ZC/TO1 callback */
632   DEVCB_DEVICE_LINE_MEMBER(Z80CTC_TAG, z80ctc_device, trg3)   /* ZC/TO2 callback */
579633};
580634
581635/* Z80 Daisy Chain */
r19154r19155
583637static const z80_daisy_config xerox820_daisy_chain[] =
584638{
585639   { Z80SIO_TAG },
586   { Z80KBPIO_TAG },
587   { Z80GPPIO_TAG },
640   { Z80PIO_KB_TAG },
641   { Z80PIO_GP_TAG },
588642   { Z80CTC_TAG },
589643   { NULL }
590644};
591645
592646/* WD1771 Interface */
593647
594WRITE_LINE_MEMBER( xerox820_state::intrq_w )
648static SLOT_INTERFACE_START( xerox820_floppies )
649   SLOT_INTERFACE( "sa400", FLOPPY_525_SSSD_35T ) // Shugart SA-400
650   SLOT_INTERFACE( "sa450", FLOPPY_525_DD ) // Shugart SA-450
651   SLOT_INTERFACE( "sa800", FLOPPY_8_SSDD ) // Shugart SA-800
652   SLOT_INTERFACE( "sa850", FLOPPY_8_DSDD ) // Shugart SA-850
653SLOT_INTERFACE_END
654
655void xerox820_state::fdc_intrq_w(bool state)
595656{
657   m_fdc_irq = state;
658
596659   int halt = m_maincpu->state_int(Z80_HALT);
597660
598   m_fdc_irq = state;
599
600   if (halt && state)
661   if (halt && (m_fdc_irq || m_fdc_drq))
601662      m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
602663   else
603664      m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
604665}
605666
606WRITE_LINE_MEMBER( xerox820_state::drq_w )
667void xerox820_state::fdc_drq_w(bool state)
607668{
669   m_fdc_drq = state;
670
608671   int halt = m_maincpu->state_int(Z80_HALT);
609672
610   m_fdc_drq = state;
611
612   if (halt && state)
673   if (halt && (m_fdc_irq || m_fdc_drq))
613674      m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
614675   else
615676      m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
616677}
617678
618static const wd17xx_interface fdc_intf =
619{
620   DEVCB_NULL,
621   DEVCB_DRIVER_LINE_MEMBER(xerox820_state, intrq_w),
622   DEVCB_DRIVER_LINE_MEMBER(xerox820_state, drq_w),
623   { FLOPPY_0, FLOPPY_1, NULL, NULL }
624};
625
626679/* COM8116 Interface */
627680
628681static COM8116_INTERFACE( com8116_intf )
r19154r19155
643696}
644697
645698
646UINT32 xerox820_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
699UINT32 xerox820_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
647700{
648701   UINT8 y,ra,chr,gfx;
649702   UINT16 sy=0,ma=(m_scroll + 1) * 0x80,x;
r19154r19155
656709
657710      for (ra = 0; ra < 10; ra++)
658711      {
659         UINT16 *p = &bitmap.pix16(sy++);
712         UINT32 *p = &bitmap.pix32(sy++);
660713
661714         for (x = ma; x < ma + 80; x++)
662715         {
r19154r19155
675728               gfx = 0xff;
676729
677730         /* Display a scanline of a character (7 pixels) */
678         *p++ = 0;
679         *p++ = BIT(gfx, 4) ^ 1;
680         *p++ = BIT(gfx, 3) ^ 1;
681         *p++ = BIT(gfx, 2) ^ 1;
682         *p++ = BIT(gfx, 1) ^ 1;
683         *p++ = BIT(gfx, 0) ^ 1;
684         *p++ = 0;
731         *p++ = RGB_MONOCHROME_WHITE[0];
732         *p++ = RGB_MONOCHROME_WHITE[BIT(gfx, 4) ^ 1];
733         *p++ = RGB_MONOCHROME_WHITE[BIT(gfx, 3) ^ 1];
734         *p++ = RGB_MONOCHROME_WHITE[BIT(gfx, 2) ^ 1];
735         *p++ = RGB_MONOCHROME_WHITE[BIT(gfx, 1) ^ 1];
736         *p++ = RGB_MONOCHROME_WHITE[BIT(gfx, 0) ^ 1];
737         *p++ = RGB_MONOCHROME_WHITE[0];
685738         }
686739      }
687740      ma+=128;
r19154r19155
689742   return 0;
690743}
691744
692void xerox820_state::set_floppy_parameters(size_t length)
693{
694   switch (length)
695   {
696   case 77*1*26*128: // 250K 8" SSSD
697      m_8n5 = 1;
698      m_dsdd = 0;
699      break;
700
701   case 77*1*26*256: // 500K 8" SSDD
702      m_8n5 = 1;
703      m_dsdd = 0;
704      break;
705
706   case 40*1*18*128: // 90K 5.25" SSSD
707      m_8n5 = 0;
708      m_dsdd = 0;
709      break;
710
711   case 40*2*18*128: // 180K 5.25" DSSD
712      m_8n5 = 0;
713      m_dsdd = 1;
714      break;
715   }
716}
717
718static void xerox820_load_proc(device_image_interface &image)
719{
720   xerox820_state *state = image.device().machine().driver_data<xerox820_state>();
721
722   state->set_floppy_parameters(image.length());
723}
724
725745/* Machine Initialization */
726746
727747void xerox820_state::machine_start()
728748{
729   // set floppy load procs
730   floppy_install_load_proc(m_floppy0, xerox820_load_proc);
731   floppy_install_load_proc(m_floppy1, xerox820_load_proc);
749   // floppy callbacks
750   m_fdc->setup_intrq_cb(wd177x_t::line_cb(FUNC(xerox820_state::fdc_intrq_w), this));
751   m_fdc->setup_drq_cb(wd177x_t::line_cb(FUNC(xerox820_state::fdc_drq_w), this));
732752
733   /* register for state saving */
753   // state saving
734754   save_item(NAME(m_keydata));
735755   save_item(NAME(m_scroll));
736756   save_item(NAME(m_ncset2));
r19154r19155
738758   save_item(NAME(m_fdc_irq));
739759   save_item(NAME(m_fdc_drq));
740760   save_item(NAME(m_8n5));
741   save_item(NAME(m_dsdd));
761   save_item(NAME(m_400_460));
742762}
743763
744764void xerox820_state::machine_reset()
745765{
746766   bankswitch(1);
767
768   m_fdc->reset();
769}
770
771void bigboard_state::machine_reset()
772{
773   bankswitch(1);
774
747775   /* bigboard has a one-pulse output to drive a user-supplied beeper */
748776   beep_set_state(m_beeper, 0);
749777   beep_set_frequency(m_beeper, 950);
778
779   m_fdc->reset();
750780}
751781
752782void xerox820ii_state::machine_reset()
753783{
754784   bankswitch(1);
785
786   m_fdc->reset();
755787}
756
788/*
757789static LEGACY_FLOPPY_OPTIONS_START( xerox820 )
758790   LEGACY_FLOPPY_OPTION( sssd8, "dsk", "8\" SSSD", basicdsk_identify_default, basicdsk_construct_default, NULL,
759791      HEADS([1])
r19154r19155
780812      SECTOR_LENGTH([128])
781813      FIRST_SECTOR_ID([1]))
782814LEGACY_FLOPPY_OPTIONS_END
815*/
783816
784static const floppy_interface xerox820_floppy_interface =
785{
786   DEVCB_NULL,
787   DEVCB_NULL,
788   DEVCB_NULL,
789   DEVCB_NULL,
790   DEVCB_NULL,
791   FLOPPY_STANDARD_5_25_DSDD,
792   LEGACY_FLOPPY_OPTIONS_NAME(xerox820),
793   NULL,
794   NULL
795};
796
797817/* F4 Character Displayer */
798818static const gfx_layout xerox820_charlayout =
799819{
r19154r19155
844864   MCFG_SCREEN_UPDATE_DRIVER(xerox820_state, screen_update)
845865   MCFG_SCREEN_RAW_PARAMS(XTAL_10_69425MHz, 700, 0, 560, 260, 0, 240)
846866   MCFG_GFXDECODE(xerox820)
847   MCFG_PALETTE_LENGTH(2)
848   MCFG_PALETTE_INIT(black_and_white)
849867
850868   /* keyboard */
851869   MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", xerox820_state, xerox820_keyboard_tick, attotime::from_hz(60))
852   MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", xerox820_state, ctc_tick, attotime::from_hz(XTAL_20MHz/8))
870   //MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", xerox820_state, ctc_tick, attotime::from_hz(XTAL_20MHz/8))
853871
854   /* sound hardware */
855   MCFG_SPEAKER_STANDARD_MONO("mono")
856   MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
857   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* bigboard only */
858
859872   /* devices */
860873   MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_20MHz/8, sio_intf)
861   MCFG_Z80PIO_ADD(Z80KBPIO_TAG, XTAL_20MHz/8, xerox820_kbpio_intf)
862   MCFG_Z80PIO_ADD(Z80GPPIO_TAG, XTAL_20MHz/8, gppio_intf)
874   MCFG_Z80PIO_ADD(Z80PIO_KB_TAG, XTAL_20MHz/8, xerox820_kbpio_intf)
875   MCFG_Z80PIO_ADD(Z80PIO_GP_TAG, XTAL_20MHz/8, gppio_intf)
863876   MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_20MHz/8, ctc_intf)
864   MCFG_FD1797_ADD(FD1797_TAG, fdc_intf)
865   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(xerox820_floppy_interface)
877   MCFG_FD1771x_ADD(FD1771_TAG, XTAL_20MHz/20 *8)
878   MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":0", xerox820_floppies, "sa400", NULL, floppy_image_device::default_floppy_formats)
879   MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":1", xerox820_floppies, "sa400", NULL, floppy_image_device::default_floppy_formats)
866880   MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, com8116_intf)
867881
868882   /* internal ram */
869883   MCFG_RAM_ADD(RAM_TAG)
870884   MCFG_RAM_DEFAULT_SIZE("64K")
885
886   // software lists
887   MCFG_SOFTWARE_LIST_ADD("flop_list", "xerox820")
871888MACHINE_CONFIG_END
872889
890static MACHINE_CONFIG_DERIVED_CLASS( bigboard, xerox820, bigboard_state )
891   /* sound hardware */
892   MCFG_SPEAKER_STANDARD_MONO("mono")
893   MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
894   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* bigboard only */
895MACHINE_CONFIG_END
896
873897static MACHINE_CONFIG_START( xerox820ii, xerox820ii_state )
874898   /* basic machine hardware */
875899   MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_16MHz/4)
r19154r19155
882906   MCFG_SCREEN_UPDATE_DRIVER(xerox820ii_state, screen_update)
883907   MCFG_SCREEN_RAW_PARAMS(XTAL_10_69425MHz, 700, 0, 560, 260, 0, 240)
884908   MCFG_GFXDECODE(xerox820ii)
885   MCFG_PALETTE_LENGTH(2)
886   MCFG_PALETTE_INIT(black_and_white)
887909
888910   /* keyboard */
889911   MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", xerox820_state, xerox820_keyboard_tick, attotime::from_hz(60))
890   MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", xerox820_state, ctc_tick, attotime::from_hz(XTAL_16MHz/4))
912   //MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc", xerox820_state, ctc_tick, attotime::from_hz(XTAL_16MHz/4))
891913
892914   /* sound hardware */
893915   MCFG_SPEAKER_STANDARD_MONO("mono")
894   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0) // xerox820ii and xerox168
916   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
895917   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
896918
897919   /* devices */
898920   MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_16MHz/4, sio_intf)
899   MCFG_Z80PIO_ADD(Z80KBPIO_TAG, XTAL_16MHz/4, xerox820ii_kbpio_intf)
900   MCFG_Z80PIO_ADD(Z80GPPIO_TAG, XTAL_16MHz/4, gppio_intf)
921   MCFG_Z80PIO_ADD(Z80PIO_KB_TAG, XTAL_16MHz/4, xerox820ii_kbpio_intf)
922   MCFG_Z80PIO_ADD(Z80PIO_GP_TAG, XTAL_16MHz/4, gppio_intf)
923   MCFG_Z80PIO_ADD(Z80PIO_RD_TAG, XTAL_20MHz/8, rdpio_intf)
901924   MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_16MHz/4, ctc_intf)
902   MCFG_FD1797_ADD(FD1797_TAG, fdc_intf)
903   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(xerox820_floppy_interface)
925   MCFG_FD1797x_ADD(FD1797_TAG, XTAL_16MHz/16*8)
926   MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":0", xerox820_floppies, "sa450", NULL, floppy_image_device::default_floppy_formats)
927   MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":1", xerox820_floppies, "sa450", NULL, floppy_image_device::default_floppy_formats)
904928   MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, com8116_intf)
929   
930   // SASI bus
931   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
932   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", SA1403D, SCSI_ID_0)
933   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
905934
906935   /* internal ram */
907936   MCFG_RAM_ADD(RAM_TAG)
908937   MCFG_RAM_DEFAULT_SIZE("64K")
938
939   // software lists
940   MCFG_SOFTWARE_LIST_ADD("flop_list", "xerox820ii")
909941MACHINE_CONFIG_END
910942
911943static MACHINE_CONFIG_DERIVED( xerox168, xerox820ii )
r19154r19155
925957
926958/* ROMs */
927959
928ROM_START( xerox820 )
929   ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASE00 )
960ROM_START( bigboard )
961   ROM_REGION( 0x1000, "monitor", 0 )
962   ROM_LOAD( "bigboard.u67", 0x0000, 0x0800, CRC(5a85a228) SHA1(d51a2cbd0aae80315bda9530275aabfe8305364e))
963   
964   ROM_REGION( 0x800, "chargen", 0 )
965   ROM_LOAD( "bigboard.u73", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c) )
966ROM_END
930967
968#define rom_mk82 rom_bigboard
969
970ROM_START( x820 )
931971   ROM_REGION( 0x1000, "monitor", 0 )
932972   ROM_DEFAULT_BIOS( "v20" )
933973   ROM_SYSTEM_BIOS( 0, "v10", "Xerox Monitor v1.0" )
r19154r19155
945985
946986   ROM_REGION( 0x800, "chargen", 0 )
947987   ROM_LOAD( "x820.u92", 0x0000, 0x0800, CRC(b823fa98) SHA1(ad0ea346aa257a53ad5701f4201896a2b3a0f928) )
988
989   ROM_REGION( 0x800, "keyboard", 0 )
990   ROM_LOAD( "keyboard", 0x0000, 0x0800, NO_DUMP )
948991ROM_END
949992
950ROM_START( xerox820ii )
993ROM_START( x820ii )
951994   ROM_REGION( 0x1800, "monitor", 0 )
952995   ROM_DEFAULT_BIOS( "v404" )
953996   ROM_SYSTEM_BIOS( 0, "v404", "Balcones Operating System v4.04" )
r19154r19155
9581001   ROM_REGION( 0x1000, "chargen", 0 )
9591002   ROM_LOAD( "x820ii.u57", 0x0000, 0x0800, CRC(1a50f600) SHA1(df4470c80611c14fa7ea8591f741fbbecdfe4fd9) )
9601003   ROM_LOAD( "x820ii.u58", 0x0800, 0x0800, CRC(aca4b9b3) SHA1(77f41470b0151945b8d3c3a935fc66409e9157b3) )
1004
1005   ROM_REGION( 0x800, "keyboard", 0 )
1006   ROM_LOAD( "keyboard", 0x0000, 0x0800, NO_DUMP )
9611007ROM_END
9621008
963ROM_START( xerox168 )
1009ROM_START( x168 )
9641010   ROM_REGION( 0x1800, "monitor", 0 )
9651011   ROM_DEFAULT_BIOS( "v404" )
9661012   ROM_SYSTEM_BIOS( 0, "v404", "Balcones Operating System v4.04" )
r19154r19155
9741020   ROM_REGION( 0x1000, "chargen", 0 )
9751021   ROM_LOAD( "x820ii.u57", 0x0000, 0x0800, CRC(1a50f600) SHA1(df4470c80611c14fa7ea8591f741fbbecdfe4fd9) )
9761022   ROM_LOAD( "x820ii.u58", 0x0800, 0x0800, CRC(aca4b9b3) SHA1(77f41470b0151945b8d3c3a935fc66409e9157b3) )
977ROM_END
9781023
979ROM_START( bigboard )
980   ROM_REGION( 0x1000, "monitor", 0 )
981   ROM_LOAD( "bigboard.u67", 0x0000, 0x0800, CRC(5a85a228) SHA1(d51a2cbd0aae80315bda9530275aabfe8305364e))
982   ROM_REGION( 0x800, "chargen", 0 )
983   ROM_LOAD( "bigboard.u73", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c) )
1024   ROM_REGION( 0x800, "keyboard", 0 )
1025   ROM_LOAD( "keyboard", 0x0000, 0x0800, NO_DUMP )
9841026ROM_END
9851027
9861028ROM_START( mk83 )
r19154r19155
9891031   ROM_REGION( 0x800, "chargen", 0 )
9901032   ROM_LOAD( "2716mk83.bin", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c))
9911033ROM_END
1034
9921035/* System Drivers */
9931036
9941037/*    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT       INIT    COMPANY                         FULLNAME        FLAGS */
995COMP( 1981, xerox820,   0,          0,      xerox820,   xerox820, driver_device,   0,      "Xerox",                        "Xerox 820",    GAME_NO_SOUND_HW)
996COMP( 1983, xerox820ii, xerox820,   0,      xerox820ii, xerox820, driver_device,   0,      "Xerox",                        "Xerox 820-II", GAME_NOT_WORKING )
997COMP( 1983, xerox168,   xerox820,   0,      xerox168,   xerox820, driver_device,   0,      "Xerox",                        "Xerox 16/8",   GAME_NOT_WORKING )
998COMP( 1980, bigboard,   0,          0,      xerox820,   xerox820, driver_device,   0,      "Digital Research Computers",   "Big Board",    GAME_NOT_WORKING )
999COMP( 198?, mk83,       0,          0,      mk83,       xerox820, driver_device,   0,      "Scomar",                       "MK-83",        GAME_NOT_WORKING | GAME_NO_SOUND_HW)
1038COMP( 1980, bigboard,   0,          0,      bigboard,   xerox820, driver_device,   0,      "Digital Research Computers",   "Big Board",       GAME_IMPERFECT_KEYBOARD )
1039COMP( 1981, x820,      bigboard,   0,      xerox820,   xerox820, driver_device,   0,      "Xerox",                        "Xerox 820",       GAME_IMPERFECT_KEYBOARD | GAME_NO_SOUND_HW )
1040COMP( 1982, mk82,      bigboard,   0,      bigboard,   xerox820, driver_device,   0,      "Scomar",                       "MK-82",          GAME_IMPERFECT_KEYBOARD )
1041COMP( 1983, x820ii,    0,         0,      xerox820ii, xerox820, driver_device,   0,      "Xerox",                        "Xerox 820-II",    GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD )
1042COMP( 1983, x168,      x820ii,    0,      xerox168,   xerox820, driver_device,   0,      "Xerox",                        "Xerox 16/8",      GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD )
1043COMP( 1983, mk83,       x820ii,    0,      mk83,       xerox820, driver_device,   0,      "Scomar",                       "MK-83",           GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD | GAME_NO_SOUND_HW )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team