Previous 199869 Revisions Next

r24544 Sunday 28th July, 2013 at 10:46:38 UTC by Robbbert
(MESS) Kaypro : modernised floppy disk system (still doesn't work). This enables removal of yesterday's patch.
[src/mess/drivers]kaypro.c
[src/mess/includes]kaypro.h
[src/mess/machine]kaypro.c

trunk/src/mess/drivers/kaypro.c
r24543r24544
5353   AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
5454   AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_g", z80pio_device, read_alt, write_alt)
5555   AM_RANGE(0x0c, 0x0f) AM_DEVWRITE("brg", com8116_device, str_w)
56   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_r, wd17xx_w)
56   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
5757   AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80pio_s", z80pio_device, read_alt, write_alt)
5858ADDRESS_MAP_END
5959
r24543r24544
6464   AM_RANGE(0x04, 0x07) AM_READWRITE(kaypro_sio_r, kaypro_sio_w)
6565   AM_RANGE(0x08, 0x0b) AM_DEVWRITE("brg", com8116_device, stt_w)
6666   AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80sio_2x", z80sio_device, read, write)
67   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_r, wd17xx_w)
67   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
6868   AM_RANGE(0x14, 0x17) AM_READWRITE(kaypro2x_system_port_r,kaypro2x_system_port_w)
6969   AM_RANGE(0x18, 0x1b) AM_DEVWRITE("centronics", centronics_device, write)
7070   AM_RANGE(0x1c, 0x1c) AM_READWRITE(kaypro2x_status_r,kaypro2x_index_w)
r24543r24544
176176    Machine Driver
177177
178178************************************************************/
179#if 0
179180static LEGACY_FLOPPY_OPTIONS_START(kayproii)
180181   LEGACY_FLOPPY_OPTION(kayproii, "dsk", "Kaypro II disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
181182      HEADS([1])
r24543r24544
220221   NULL
221222};
222223
224FLOPPY_FORMATS_MEMBER( kaypro_state::kayproii_floppy_formats )
225   FLOPPY_KAYPROII_FORMAT
226FLOPPY_FORMATS_END
227
228FLOPPY_FORMATS_MEMBER( kaypro_state::kaypro2x_floppy_formats )
229   FLOPPY_KAYPRO2X_FORMAT
230FLOPPY_FORMATS_END
231#endif
232
233static SLOT_INTERFACE_START( kaypro_floppies )
234   SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
235SLOT_INTERFACE_END
236
237
223238static MACHINE_CONFIG_START( kayproii, kaypro_state )
224239   /* basic machine hardware */
225   MCFG_CPU_ADD("maincpu", Z80, XTAL_2_5MHz)
240   MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz / 8)
226241   MCFG_CPU_PROGRAM_MAP(kaypro_map)
227242   MCFG_CPU_IO_MAP(kayproii_io)
228243   MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state,  kay_kbd_interrupt)  /* this doesn't actually exist, it is to run the keyboard */
r24543r24544
250265
251266   /* devices */
252267   MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kayproii, "com,cpm", 3)
253   MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface )
254268   MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
255269   MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL)  // WD1943, SMC8116
256270   MCFG_Z80PIO_ADD( "z80pio_g", 2500000, kayproii_pio_g_intf )
257271   MCFG_Z80PIO_ADD( "z80pio_s", 2500000, kayproii_pio_s_intf )
258272   MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf )  /* start at 300 baud */
259273
260   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(kayproii_floppy_interface)
274   MCFG_FD1793x_ADD("fdc", XTAL_20MHz / 20)
275   MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
276   MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
261277   MCFG_SOFTWARE_LIST_ADD("flop_list","kayproii")
262278MACHINE_CONFIG_END
263279
r24543r24544
268284
269285static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
270286   /* basic machine hardware */
271   MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
287   MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
272288   MCFG_CPU_PROGRAM_MAP(kaypro_map)
273289   MCFG_CPU_IO_MAP(kaypro2x_io)
274290   MCFG_CPU_VBLANK_INT_DRIVER("screen", kaypro_state,  kay_kbd_interrupt)
r24543r24544
296312   /* devices */
297313   MCFG_MC6845_ADD("crtc", MC6845, "screen", 2000000, kaypro2x_crtc) /* comes out of ULA - needs to be measured */
298314   MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro2x, "com,cpm", 3)
299   MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface )
300315   MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics)
301316   MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL)  // WD1943, SMC8116
302317   MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf )
303318   MCFG_Z80SIO_ADD( "z80sio_2x", 4800, kaypro_sio_intf )   /* extra sio for modem and printer */
304
305   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(kaypro2x_floppy_interface)
319   MCFG_FD1793x_ADD("fdc", XTAL_16MHz / 16)
320   MCFG_FLOPPY_DRIVE_ADD("fdc:0", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
321   MCFG_FLOPPY_DRIVE_ADD("fdc:1", kaypro_floppies, "525dd", floppy_image_device::default_floppy_formats)
306322MACHINE_CONFIG_END
307323
308324static MACHINE_CONFIG_DERIVED( omni2, kaypro4 )
r24543r24544
310326   MCFG_SCREEN_UPDATE_DRIVER(kaypro_state, screen_update_omni2)
311327MACHINE_CONFIG_END
312328
329DRIVER_INIT_MEMBER( kaypro_state, kaypro )
330{
331   m_fdc->setup_intrq_cb(fd1793_t::line_cb(FUNC(kaypro_state::fdc_intrq_w), this));
332   m_fdc->setup_drq_cb(fd1793_t::line_cb(FUNC(kaypro_state::fdc_drq_w), this));
333}
334
335
313336/***********************************************************
314337
315338    Game driver
r24543r24544
399422   ROM_LOAD("81-817.u31",   0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) )
400423ROM_END
401424
402/*    YEAR  NAME      PARENT    COMPAT  MACHINE   INPUT    INIT         COMPANY                 FULLNAME */
403COMP( 1982, kayproii,   0,        0,    kayproii, kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro II - 2/83" , 0 )
404COMP( 1983, kaypro4,    kayproii, 0,    kaypro4,  kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro 4 - 4/83" , 0 ) // model 81-004
405COMP( 1983, kaypro4p88, kayproii, 0,    kaypro4,  kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro 4 plus88 - 4/83" , GAME_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
406COMP( 198?, omni2,      kayproii, 0,    omni2,    kay_kbd, driver_device, 0,      "Non Linear Systems",  "Omni II" , 0 )
407COMP( 1984, kaypro2x,   0,        0,    kaypro2x, kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro 2x" , GAME_NOT_WORKING ) // model 81-025
408COMP( 1984, kaypro4a,   kaypro2x, 0,    kaypro2x, kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro 4 - 4/84" , GAME_NOT_WORKING ) // model 81-015
425/*    YEAR  NAME      PARENT    COMPAT  MACHINE   INPUT    CLASS         INIT         COMPANY                 FULLNAME */
426COMP( 1982, kayproii,   0,        0,    kayproii, kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro II - 2/83" , 0 )
427COMP( 1983, kaypro4,    kayproii, 0,    kaypro4,  kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro 4 - 4/83" , 0 ) // model 81-004
428COMP( 1983, kaypro4p88, kayproii, 0,    kaypro4,  kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro 4 plus88 - 4/83" , GAME_NOT_WORKING ) // model 81-004 with an added 8088 daughterboard and rom
429COMP( 198?, omni2,      kayproii, 0,    omni2,    kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Omni II" , 0 )
430COMP( 1984, kaypro2x,   0,        0,    kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro 2x" , GAME_NOT_WORKING ) // model 81-025
431COMP( 1984, kaypro4a,   kaypro2x, 0,    kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro 4 - 4/84" , GAME_NOT_WORKING ) // model 81-015
409432// Kaypro 4/84 plus 88 goes here, model 81-015 with an added 8088 daughterboard and rom
410COMP( 1983, kaypro10,   0,        0,    kaypro2x, kay_kbd, driver_device, 0,      "Non Linear Systems",  "Kaypro 10" , GAME_NOT_WORKING ) // model 81-005
433COMP( 1983, kaypro10,   0,        0,    kaypro2x, kay_kbd, kaypro_state, kaypro, "Non Linear Systems",  "Kaypro 10" , GAME_NOT_WORKING ) // model 81-005
trunk/src/mess/machine/kaypro.c
r24543r24544
6060      membank("bank3")->set_base(memregion("rambank")->base());
6161   }
6262
63   wd17xx_dden_w(m_fdc, BIT(data, 5));
64
65   m_centronics->strobe_w(BIT(data, 4));
66
63   m_floppy = NULL;
6764   if (BIT(data, 0))
68      wd17xx_set_drive(m_fdc, 0);
69
65      m_floppy = m_floppy0->get_device();
66   else
7067   if (BIT(data, 1))
71      wd17xx_set_drive(m_fdc, 1);
68      m_floppy = m_floppy1->get_device();
7269
70   m_fdc->set_floppy(m_floppy);
71   m_fdc->dden_w(BIT(data, 5));
72
73   if (m_floppy)
74   {
75      m_floppy->mon_w(BIT(data, 6) ? 0 : 1); // motor on
76   }
77
7378   output_set_value("ledA", BIT(data, 0));     /* LEDs in artwork */
7479   output_set_value("ledB", BIT(data, 1));
7580
76   /* CLEAR_LINE means to turn motors on */
77   floppy_mon_w(floppy_get_device(machine(), 0), BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
78   floppy_mon_w(floppy_get_device(machine(), 1), BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
81   m_centronics->strobe_w(BIT(data, 4));
7982
8083   m_system_port = data;
8184}
r24543r24544
8588   common_pio_system_w(space, offset, data);
8689
8790   /* side select */
88   wd17xx_set_side(m_fdc, !BIT(data, 2));
91   m_floppy->ss_w(!BIT(data, 2));
8992}
9093
9194WRITE8_MEMBER( kaypro_state::kaypro4_pio_system_w )
r24543r24544
9396   common_pio_system_w(space, offset, data);
9497
9598   /* side select */
96   wd17xx_set_side(m_fdc, BIT(data, 2));
99   m_floppy->ss_w(BIT(data, 2));
97100}
98101
99102const z80pio_interface kayproii_pio_g_intf =
r24543r24544
172175      membank("bank3")->set_base(memregion("rambank")->base());
173176   }
174177
175   wd17xx_dden_w(m_fdc, BIT(data, 5));
176
177   m_centronics->strobe_w(BIT(data, 3));
178
178   m_floppy = NULL;
179179   if (BIT(data, 0))
180      wd17xx_set_drive(m_fdc, 0);
180      m_floppy = m_floppy0->get_device();
181181   else
182182   if (BIT(data, 1))
183      wd17xx_set_drive(m_fdc, 1);
183      m_floppy = m_floppy1->get_device();
184184
185   wd17xx_set_side(m_fdc, BIT(data, 2) ? 0 : 1);
185   m_fdc->set_floppy(m_floppy);
186   m_fdc->dden_w(BIT(data, 5));
186187
188   if (m_floppy)
189   {
190      m_floppy->mon_w(BIT(data, 6) ? 0 : 1); // motor on
191      m_floppy->ss_w(BIT(data, 2));
192   }
193
187194   output_set_value("ledA", BIT(data, 0));     /* LEDs in artwork */
188195   output_set_value("ledB", BIT(data, 1));
189196
190   /* CLEAR_LINE means to turn motors on */
191   // commented out because turning the motors on causes an assert... turning them off is ok though??
192   //floppy_mon_w(floppy_get_device(machine(), 0), BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
193   //floppy_mon_w(floppy_get_device(machine(), 1), BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
197   m_centronics->strobe_w(BIT(data, 3));
194198
195199   m_system_port = data;
196200}
r24543r24544
292296   }
293297}
294298
295WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_intrq_w )
299void kaypro_state::fdc_intrq_w (bool state)
300//WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_intrq_w )
296301{
297302   if (state)
298303      timer_set(attotime::from_usec(25), TIMER_FLOPPY);
r24543r24544
300305      m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
301306}
302307
303WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_drq_w )
308void kaypro_state::fdc_drq_w (bool state)
309//WRITE_LINE_MEMBER( kaypro_state::kaypro_fdc_drq_w )
304310{
305311   if (state)
306312      timer_set(attotime::from_usec(25), TIMER_FLOPPY);
r24543r24544
309315
310316}
311317
312const wd17xx_interface kaypro_wd1793_interface =
313{
314   DEVCB_NULL,
315   DEVCB_DRIVER_LINE_MEMBER(kaypro_state, kaypro_fdc_intrq_w),
316   DEVCB_DRIVER_LINE_MEMBER(kaypro_state, kaypro_fdc_drq_w),
317   {FLOPPY_0, FLOPPY_1, NULL, NULL}
318};
319318
320
321319/***********************************************************
322320
323321    Machine
trunk/src/mess/includes/kaypro.h
r24543r24544
55#include "machine/z80sio.h"
66#include "machine/com8116.h"
77#include "machine/ctronics.h"
8#include "machine/wd17xx.h"
9#include "formats/basicdsk.h"
108#include "imagedev/snapquik.h"
11#include "imagedev/flopdrv.h"
129#include "sound/beep.h"
1310#include "video/mc6845.h"
11#include "machine/wd_fdc.h"
1412
1513struct kay_kbd_t;
1614
r24543r24544
2422
2523   kaypro_state(const machine_config &mconfig, device_type type, const char *tag)
2624      : driver_device(mconfig, type, tag),
27   m_maincpu(*this, "maincpu"),
28   m_pio_g(*this, "z80pio_g"),
29   m_pio_s(*this, "z80pio_s"),
30   m_sio(*this, "z80sio"),
31   m_sio2x(*this, "z80sio_2x"),
32   m_centronics(*this, "centronics"),
33   m_fdc(*this, "wd1793"),
34   m_crtc(*this, "crtc"),
35   m_beep(*this, "beeper"),
36   m_p_videoram(*this, "p_videoram"){ }
25      m_p_videoram(*this, "p_videoram"),
26      m_maincpu(*this, "maincpu"),
27      m_pio_g(*this, "z80pio_g"),
28      m_pio_s(*this, "z80pio_s"),
29      m_sio(*this, "z80sio"),
30      m_sio2x(*this, "z80sio_2x"),
31      m_centronics(*this, "centronics"),
32      m_fdc(*this, "fdc"),
33      m_floppy0(*this, "fdc:0"),
34      m_floppy1(*this, "fdc:1"),
35      m_crtc(*this, "crtc"),
36      m_beep(*this, "beeper")
37   {}
3738
38   required_device<cpu_device> m_maincpu;
39   optional_device<z80pio_device> m_pio_g;
40   optional_device<z80pio_device> m_pio_s;
41   required_device<z80sio_device> m_sio;
42   optional_device<z80sio_device> m_sio2x;
43   required_device<centronics_device> m_centronics;
44   required_device<fd1793_device> m_fdc;
45   optional_device<mc6845_device> m_crtc;
46   required_device<beep_device> m_beep;
4739   DECLARE_READ8_MEMBER(kaypro2x_87_r);
4840   DECLARE_READ8_MEMBER(kaypro2x_system_port_r);
4941   DECLARE_READ8_MEMBER(kaypro2x_status_r);
r24543r24544
6052   DECLARE_WRITE_LINE_MEMBER(kaypro_fdc_drq_w);
6153   DECLARE_READ8_MEMBER(kaypro_videoram_r);
6254   DECLARE_WRITE8_MEMBER(kaypro_videoram_w);
63   const UINT8 *m_p_chargen;
64   required_shared_ptr<UINT8> m_p_videoram;
65   UINT8 m_system_port;
66   UINT8 m_mc6845_cursor[16];
67   UINT8 m_mc6845_reg[32];
68   UINT8 m_mc6845_ind;
69   UINT8 m_speed;
70   UINT8 m_flash;
71   UINT8 m_framecnt;
72   UINT16 m_cursor;
73   UINT16 m_mc6845_video_address;
74   kay_kbd_t *m_kbd;
75   void mc6845_cursor_configure();
76   void mc6845_screen_configure();
7755   DECLARE_MACHINE_START(kayproii);
7856   DECLARE_MACHINE_RESET(kayproii);
7957   DECLARE_VIDEO_START(kaypro);
8058   DECLARE_MACHINE_RESET(kaypro2x);
8159   DECLARE_PALETTE_INIT(kaypro);
8260   DECLARE_MACHINE_RESET(kay_kbd);
61   DECLARE_DRIVER_INIT(kaypro);
62   DECLARE_FLOPPY_FORMATS(floppy_formats);
8363   UINT32 screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
8464   UINT32 screen_update_kaypro2x(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
8565   UINT32 screen_update_omni2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
r24543r24544
8767   DECLARE_WRITE_LINE_MEMBER(kaypro_interrupt);
8868   DECLARE_READ8_MEMBER(kaypro_sio_r);
8969   DECLARE_WRITE8_MEMBER(kaypro_sio_w);
90   DECLARE_QUICKLOAD_LOAD_MEMBER(kayproii );
91   DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro2x );
70   DECLARE_QUICKLOAD_LOAD_MEMBER(kayproii);
71   DECLARE_QUICKLOAD_LOAD_MEMBER(kaypro2x);
72   const UINT8 *m_p_chargen;
73   UINT8 m_mc6845_cursor[16];
74   UINT8 m_mc6845_reg[32];
75   UINT8 m_mc6845_ind;
76   UINT8 m_speed;
77   UINT8 m_flash;
78   UINT8 m_framecnt;
79   UINT16 m_cursor;
80   required_shared_ptr<UINT8> m_p_videoram;
9281
9382protected:
9483   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
84private:
85   UINT8 m_system_port;
86   UINT16 m_mc6845_video_address;
87   kay_kbd_t *m_kbd;
88   floppy_image_device *m_floppy;
89   void mc6845_cursor_configure();
90   void mc6845_screen_configure();
91   void fdc_intrq_w(bool state);
92   void fdc_drq_w(bool state);
93   required_device<cpu_device> m_maincpu;
94   optional_device<z80pio_device> m_pio_g;
95   optional_device<z80pio_device> m_pio_s;
96   required_device<z80sio_device> m_sio;
97   optional_device<z80sio_device> m_sio2x;
98   required_device<centronics_device> m_centronics;
99   required_device<fd1793_t> m_fdc;
100   required_device<floppy_connector> m_floppy0;
101   required_device<floppy_connector> m_floppy1;
102   optional_device<mc6845_device> m_crtc;
103   required_device<beep_device> m_beep;
95104};
96105
97106
r24543r24544
110119extern const z80pio_interface kayproii_pio_s_intf;
111120extern const z80pio_interface kaypro4_pio_s_intf;
112121extern const z80sio_interface kaypro_sio_intf;
113extern const wd17xx_interface kaypro_wd1793_interface;
114122
115123/*----------- defined in video/kaypro.c -----------*/
116124

Previous 199869 Revisions Next


© 1997-2024 The MAME Team