Previous 199869 Revisions Next

r18839 Sunday 4th November, 2012 at 09:04:05 UTC by Curt Coder
(MESS) adam: Added floppy controller ROMs. [Geoff Oltmans]
[src/mess/drivers]adam.c
[src/mess/includes]adam.h

trunk/src/mess/includes/adam.h
r18838r18839
33#ifndef ADAM_H_
44#define ADAM_H_
55
6#include "emu.h"
7#include "cpu/z80/z80.h"
8#include "cpu/m6800/m6800.h"
9#include "formats/basicdsk.h"
10#include "formats/adam_cas.h"
11#include "imagedev/cartslot.h"
12#include "imagedev/cassette.h"
13#include "imagedev/flopdrv.h"
14#include "machine/coleco.h"
15#include "machine/ram.h"
16#include "machine/wd17xx.h"
17#include "sound/sn76496.h"
18#include "video/tms9928a.h"
19
620#define Z80_TAG         "u1"
721#define SN76489A_TAG   "u20"
822#define TMS9928A_TAG   "tms9928a"
trunk/src/mess/drivers/adam.c
r18838r18839
287287
288288    TODO:
289289
290   - floppy
291   - slot interface
292    - printer
293    - SPI
294    - sound (PSG RDY -> Z80 WAIT)
295
290296    http://drushel.cwru.edu/atm/atm.html
291297    http://rich.dirocco.org/Coleco/adam/ADAM.htm
292298    http://users.stargate.net/~drushel/pub/coleco/twwmca/index.html
293299
294    - fc75 GET_STATUS
295    - fbe7 MMR_MAC
296    - febe MMR_TR_REC
297    - ff0f MMR_TR_TCU
298
299****************************************************************************/
300
301/*
302
303    TODO:
304
305    - sound (PSG RDY -> Z80 WAIT)
306    - floppy ROM dump
307    - printer
308    - SPI
309
310300*/
311301
312
313#include "emu.h"
314#include "cpu/z80/z80.h"
315#include "cpu/m6800/m6800.h"
316#include "formats/basicdsk.h"
317#include "formats/adam_cas.h"
318#include "imagedev/cartslot.h"
319#include "imagedev/cassette.h"
320#include "imagedev/flopdrv.h"
321#include "machine/coleco.h"
322#include "machine/ram.h"
323#include "machine/wd17xx.h"
324#include "sound/sn76496.h"
325#include "video/tms9928a.h"
326302#include "includes/adam.h"
327303
328304
r18838r18839
11591135
11601136        bit     description
11611137
1162        0       some kind of optic sensor
1138        0       disk in place
11631139        1
11641140        2       FDC DRQ
11651141        3
r18838r18839
11701146
11711147    */
11721148
1173   UINT8 data = 0;
1149   UINT8 data = 0x01;
11741150
11751151   // floppy data request
11761152   data |= wd17xx_drq_r(m_fdc) << 2;
r18838r18839
12901266//  TIMER_DEVICE_CALLBACK_MEMBER( paddle_tick )
12911267//-------------------------------------------------
12921268
1293TIMER_DEVICE_CALLBACK_MEMBER(adam_state::paddle_tick)
1269TIMER_DEVICE_CALLBACK_MEMBER( adam_state::paddle_tick )
12941270{
12951271   // TODO: improve irq behaviour (see drivers/coleco.c)
12961272   if (coleco_scan_paddles(machine(), &m_joy_status0, &m_joy_status1))
r18838r18839
13681344//  AM_RANGE(0x5f, 0x5f) Optional Modem Control Status
13691345   AM_RANGE(0x60, 0x60) AM_MIRROR(0x1f) AM_READWRITE(mioc_r, mioc_w)
13701346   AM_RANGE(0x80, 0x80) AM_MIRROR(0x1f) AM_WRITE(paddle_w)
1371   AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1e) AM_DEVREADWRITE("tms9928a", tms9928a_device, vram_read, vram_write)
1372   AM_RANGE(0xa1, 0xa1) AM_MIRROR(0x1e) AM_DEVREADWRITE("tms9928a", tms9928a_device, register_read, register_write)
1347   AM_RANGE(0xa0, 0xa0) AM_MIRROR(0x1e) AM_DEVREADWRITE(TMS9928A_TAG, tms9928a_device, vram_read, vram_write)
1348   AM_RANGE(0xa1, 0xa1) AM_MIRROR(0x1e) AM_DEVREADWRITE(TMS9928A_TAG, tms9928a_device, register_read, register_write)
13731349   AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1f) AM_WRITE(joystick_w)
13741350   AM_RANGE(0xe0, 0xe0) AM_MIRROR(0x1f) AM_DEVWRITE(SN76489A_TAG, sn76489a_device, write)
13751351   AM_RANGE(0xe0, 0xe0) AM_MIRROR(0x1d) AM_READ(input1_r)
r18838r18839
16321608//  TMS9928a_interface tms9928a_interface
16331609//-------------------------------------------------
16341610
1635WRITE_LINE_MEMBER(adam_state::adam_vdp_interrupt)
1611WRITE_LINE_MEMBER( adam_state::adam_vdp_interrupt )
16361612{
16371613   if (state && !m_vdp_nmi)
16381614   {
1639      machine().device(Z80_TAG)->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
1615      m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
16401616   }
16411617
16421618   m_vdp_nmi = state;
16431619}
16441620
1645static TMS9928A_INTERFACE(adam_tms9928a_interface)
1621static TMS9928A_INTERFACE(vcd_intf)
16461622{
1647   "screen",
1623   SCREEN_TAG,
16481624   0x4000,
1649   DEVCB_DRIVER_LINE_MEMBER(adam_state,adam_vdp_interrupt)
1625   DEVCB_DRIVER_LINE_MEMBER(adam_state, adam_vdp_interrupt)
16501626};
16511627
16521628//-------------------------------------------------
r18838r18839
17231699{
17241700   if (state && !m_dma)
17251701   {
1726      UINT8 *ram = m_ram->pointer();
1727
17281702      if (!m_bwr)
17291703      {
17301704         //logerror("Master 6801 write to %04x data %02x\n", m_ba, m_data_in);
17311705
1732         ram[m_ba] = m_data_in;
1706         m_ram->pointer()[m_ba] = m_data_in;
17331707      }
17341708      else
17351709      {
1736         m_data_out = ram[m_ba];
1710         m_data_out = m_ram->pointer()[m_ba];
17371711
17381712         //logerror("Master 6801 read from %04x data %02x\n", m_ba, m_data_out);
17391713
r18838r18839
17601734
17611735void adam_state::machine_start()
17621736{
1763   // register for state saving
1737   // state saving
17641738   save_item(NAME(m_mioc));
17651739   save_item(NAME(m_game));
17661740   save_item(NAME(m_adamnet));
r18838r18839
18301804   MCFG_CPU_IO_MAP(master6801_io)
18311805   MCFG_CPU_CONFIG(master6801_intf)
18321806
1807   // keyboard
18331808   MCFG_CPU_ADD(M6801_KB_TAG, M6801, XTAL_4MHz)
18341809   MCFG_CPU_PROGRAM_MAP(kb6801_mem)
18351810   MCFG_CPU_IO_MAP(kb6801_io)
18361811
1812   // digital data pack
18371813   MCFG_CPU_ADD(M6801_DDP_TAG, M6801, XTAL_4MHz)
18381814   MCFG_CPU_PROGRAM_MAP(ddp6801_mem)
18391815   MCFG_CPU_IO_MAP(ddp6801_io)
1816   MCFG_CASSETTE_ADD(CASSETTE_TAG, adam_cassette_interface)
1817   MCFG_CASSETTE_ADD(CASSETTE2_TAG, adam_cassette_interface)
18401818
1819   // printer
18411820   MCFG_CPU_ADD(M6801_PRN_TAG, M6801, XTAL_4MHz)
18421821   MCFG_CPU_PROGRAM_MAP(printer6801_mem)
18431822   MCFG_CPU_IO_MAP(printer6801_io)
18441823   MCFG_DEVICE_DISABLE()
18451824
1825   // floppy
18461826   MCFG_CPU_ADD(M6801_FDC_TAG, M6801, XTAL_4MHz)
18471827   MCFG_CPU_PROGRAM_MAP(fdc6801_mem)
18481828   MCFG_CPU_IO_MAP(fdc6801_io)
1849   MCFG_DEVICE_DISABLE()
1829   MCFG_WD2793_ADD(WD2793_TAG, fdc_intf)
1830   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, adam_floppy_interface)
18501831
1832   // serial port interface
18511833   MCFG_CPU_ADD(M6801_SPI_TAG, M6801, XTAL_4MHz)
18521834   MCFG_DEVICE_DISABLE()
18531835
18541836   // video hardware
1855   MCFG_TMS9928A_ADD( "tms9928a", TMS9928A, adam_tms9928a_interface )
1856   MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
1857   MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
1837   MCFG_TMS9928A_ADD(TMS9928A_TAG, TMS9928A, vcd_intf)
1838   MCFG_TMS9928A_SCREEN_ADD_NTSC(SCREEN_TAG)
1839   MCFG_SCREEN_UPDATE_DEVICE(TMS9928A_TAG, tms9928a_device, screen_update)
18581840
18591841   // sound hardware
18601842   MCFG_SPEAKER_STANDARD_MONO("mono")
r18838r18839
18641846
18651847   // devices
18661848   MCFG_TIMER_DRIVER_ADD_PERIODIC("paddles", adam_state, paddle_tick, attotime::from_msec(20))
1867   MCFG_WD2793_ADD(WD2793_TAG, fdc_intf)
1868   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, adam_floppy_interface)
1869   MCFG_CASSETTE_ADD(CASSETTE_TAG, adam_cassette_interface)
1870   MCFG_CASSETTE_ADD(CASSETTE2_TAG, adam_cassette_interface)
18711849
18721850   // cartridge
18731851   MCFG_CARTSLOT_ADD("cart")
18741852   MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin")
18751853   MCFG_CARTSLOT_NOT_MANDATORY
1876    MCFG_CARTSLOT_INTERFACE("coleco_cart")
1854   MCFG_CARTSLOT_INTERFACE("coleco_cart")
18771855
18781856   // ROM expansion
18791857   MCFG_CARTSLOT_ADD("xrom")
18801858   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
18811859   MCFG_CARTSLOT_NOT_MANDATORY
1860   MCFG_CARTSLOT_INTERFACE("adam_xrom")
18821861
18831862   // internal ram
18841863   MCFG_RAM_ADD(RAM_TAG)
r18838r18839
18881867   // software lists
18891868   MCFG_SOFTWARE_LIST_ADD("colec_cart_list", "coleco")
18901869   MCFG_SOFTWARE_LIST_ADD("adam_cart_list", "adam_cart")
1870   //MCFG_SOFTWARE_LIST_ADD("xrom_list", "adam_xrom")
18911871   MCFG_SOFTWARE_LIST_ADD("cass_list", "adam_cass")
18921872   MCFG_SOFTWARE_LIST_ADD("flop_list", "adam_flop")
18931873MACHINE_CONFIG_END
r18838r18839
19331913   ROM_LOAD( "printer.u2", 0x000, 0x800, CRC(e8db783b) SHA1(32b40679749ad0317c2c9ee9ca619fad6d850ce7) )
19341914
19351915   ROM_REGION( 0x1000, M6801_FDC_TAG, 0 )
1936   ROM_LOAD( "floppy disk drive", 0x0000, 0x1000, NO_DUMP )
1916   ROM_LOAD( "320ta.u10", 0x0000, 0x1000, CRC(dcd865b3) SHA1(dde583e0d18ce4406e9ea44ab34d083e73ee30e2) ) // 320KB DSDD
1917   ROM_LOAD( "pmhdfdc.u10", 0x0000, 0x1000, CRC(fed4006c) SHA1(bc8dd00dd5cde9500a4cd7dc1e4d74330184472a) ) // PowerMate High-Density
1918   ROM_LOAD( "ad31_reva.u10", 0x0000, 0x1000, CRC(4b0b7143) SHA1(1cb68891c3af80e99efad7e309136ca37244f060) ) // Coleco original 160KB SSDD
19371919
19381920   ROM_REGION( 0x800, M6801_SPI_TAG, 0 )
19391921   ROM_LOAD( "spi.bin", 0x000, 0x800, CRC(4ba30352) SHA1(99fe5aebd505a208bea6beec5d7322b15426e9c1) )
r18838r18839
19451927//  SYSTEM DRIVERS
19461928//**************************************************************************
19471929
1948/*    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT       INIT    COMPANY         FULLNAME            FLAGS */
1949COMP( 1982, adam,      0,         coleco,   adam,      adam, driver_device,      0,      "Coleco",      "Adam",            GAME_NOT_WORKING )
1930//    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT       INIT                    COMPANY         FULLNAME            FLAGS
1931COMP( 1982, adam,      0,         coleco,   adam,      adam,       driver_device,   0,      "Coleco",      "Adam",            GAME_NOT_WORKING )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team