mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
bus/nubus: Got rid of CRTC hacks in Macintosh Display Card emulation.
* Changed name of cards for slot selection to "mdc48" and "mdc824" as they're unrelated to the later 8*24 GC card. * Also cleaned up code substantially and got rid of artificial differences between Display Card 4*8 and 8*24. * Moved lists of NuBus and SE/30 PDS cards to a common place. * Got some class declarations out of headers to reduce recompiles.
This commit is contained in:
parent
a8b6bdfcac
commit
38fed2ff78
@ -2775,6 +2775,8 @@ end
|
||||
|
||||
if (BUSES["NUBUS"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/nubus/cards.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nubus/cards.h",
|
||||
MAME_DIR .. "src/devices/bus/nubus/nubus.cpp",
|
||||
MAME_DIR .. "src/devices/bus/nubus/nubus.h",
|
||||
MAME_DIR .. "src/devices/bus/nubus/nubus_48gc.cpp",
|
||||
|
@ -10,66 +10,66 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "bus/a2bus/cards.h"
|
||||
#include "cards.h"
|
||||
|
||||
#include "bus/a2bus/4play.h"
|
||||
#include "bus/a2bus/a2alfam2.h"
|
||||
#include "bus/a2bus/a2applicard.h"
|
||||
#include "bus/a2bus/a2arcadebd.h"
|
||||
#include "bus/a2bus/a2cffa.h"
|
||||
#include "bus/a2bus/a2corvus.h"
|
||||
#include "bus/a2bus/a2diskii.h"
|
||||
#include "bus/a2bus/a2diskiing.h"
|
||||
#include "bus/a2bus/a2dx1.h"
|
||||
#include "bus/a2bus/a2echoii.h"
|
||||
#include "bus/a2bus/a2iwm.h"
|
||||
#include "bus/a2bus/a2mcms.h"
|
||||
#include "bus/a2bus/a2memexp.h"
|
||||
#include "bus/a2bus/a2midi.h"
|
||||
#include "bus/a2bus/a2mockingboard.h"
|
||||
#include "bus/a2bus/a2parprn.h"
|
||||
#include "bus/a2bus/a2pic.h"
|
||||
#include "bus/a2bus/a2sam.h"
|
||||
#include "bus/a2bus/a2scsi.h"
|
||||
#include "bus/a2bus/a2softcard.h"
|
||||
#include "bus/a2bus/a2ssc.h"
|
||||
#include "bus/a2bus/a2superdrive.h"
|
||||
#include "bus/a2bus/a2swyft.h"
|
||||
#include "bus/a2bus/a2themill.h"
|
||||
#include "bus/a2bus/a2thunderclock.h"
|
||||
#include "bus/a2bus/a2ultraterm.h"
|
||||
#include "bus/a2bus/a2videoterm.h"
|
||||
#include "bus/a2bus/a2zipdrive.h"
|
||||
#include "bus/a2bus/byte8251.h"
|
||||
#include "bus/a2bus/computereyes2.h"
|
||||
#include "bus/a2bus/ccs7710.h"
|
||||
#include "bus/a2bus/excel9.h"
|
||||
#include "bus/a2bus/ezcgi.h"
|
||||
#include "bus/a2bus/grafex.h"
|
||||
#include "bus/a2bus/grappler.h"
|
||||
#include "bus/a2bus/laser128.h"
|
||||
#include "bus/a2bus/mouse.h"
|
||||
#include "bus/a2bus/prodosromdrive.h"
|
||||
#include "bus/a2bus/ramcard128k.h"
|
||||
#include "bus/a2bus/ramcard16k.h"
|
||||
#include "bus/a2bus/ssbapple.h"
|
||||
#include "bus/a2bus/ssprite.h"
|
||||
#include "bus/a2bus/suprterminal.h"
|
||||
#include "bus/a2bus/timemasterho.h"
|
||||
#include "bus/a2bus/transwarp.h"
|
||||
#include "bus/a2bus/uniprint.h"
|
||||
#include "bus/a2bus/booti.h"
|
||||
#include "bus/a2bus/q68.h"
|
||||
#include "bus/a2bus/pc_xporter.h"
|
||||
#include "bus/a2bus/cmsscsi.h"
|
||||
#include "bus/a2bus/a2vulcan.h"
|
||||
#include "bus/a2bus/uthernet.h"
|
||||
#include "bus/a2bus/a2hsscsi.h"
|
||||
#include "bus/a2bus/a2sd.h"
|
||||
#include "bus/a2bus/sider.h"
|
||||
#include "bus/a2bus/lancegs.h"
|
||||
#include "bus/a2bus/titan3plus2.h"
|
||||
#include "bus/a2bus/softcard3.h"
|
||||
#include "4play.h"
|
||||
#include "a2alfam2.h"
|
||||
#include "a2applicard.h"
|
||||
#include "a2arcadebd.h"
|
||||
#include "a2cffa.h"
|
||||
#include "a2corvus.h"
|
||||
#include "a2diskii.h"
|
||||
#include "a2diskiing.h"
|
||||
#include "a2dx1.h"
|
||||
#include "a2echoii.h"
|
||||
#include "a2iwm.h"
|
||||
#include "a2mcms.h"
|
||||
#include "a2memexp.h"
|
||||
#include "a2midi.h"
|
||||
#include "a2mockingboard.h"
|
||||
#include "a2parprn.h"
|
||||
#include "a2pic.h"
|
||||
#include "a2sam.h"
|
||||
#include "a2scsi.h"
|
||||
#include "a2softcard.h"
|
||||
#include "a2ssc.h"
|
||||
#include "a2superdrive.h"
|
||||
#include "a2swyft.h"
|
||||
#include "a2themill.h"
|
||||
#include "a2thunderclock.h"
|
||||
#include "a2ultraterm.h"
|
||||
#include "a2videoterm.h"
|
||||
#include "a2zipdrive.h"
|
||||
#include "byte8251.h"
|
||||
#include "computereyes2.h"
|
||||
#include "ccs7710.h"
|
||||
#include "excel9.h"
|
||||
#include "ezcgi.h"
|
||||
#include "grafex.h"
|
||||
#include "grappler.h"
|
||||
#include "laser128.h"
|
||||
#include "mouse.h"
|
||||
#include "prodosromdrive.h"
|
||||
#include "ramcard128k.h"
|
||||
#include "ramcard16k.h"
|
||||
#include "ssbapple.h"
|
||||
#include "ssprite.h"
|
||||
#include "suprterminal.h"
|
||||
#include "timemasterho.h"
|
||||
#include "transwarp.h"
|
||||
#include "uniprint.h"
|
||||
#include "booti.h"
|
||||
#include "q68.h"
|
||||
#include "pc_xporter.h"
|
||||
#include "cmsscsi.h"
|
||||
#include "a2vulcan.h"
|
||||
#include "uthernet.h"
|
||||
#include "a2hsscsi.h"
|
||||
#include "a2sd.h"
|
||||
#include "sider.h"
|
||||
#include "lancegs.h"
|
||||
#include "titan3plus2.h"
|
||||
#include "softcard3.h"
|
||||
|
||||
|
||||
void apple2_slot0_cards(device_slot_interface &device)
|
||||
|
@ -12,7 +12,7 @@
|
||||
#ifndef MAME_BUS_A2BUS_CARDS_H
|
||||
#define MAME_BUS_A2BUS_CARDS_H
|
||||
|
||||
#include "bus/a2bus/a2bus.h"
|
||||
#pragma once
|
||||
|
||||
void apple2_slot0_cards(device_slot_interface &device) ATTR_COLD;
|
||||
void apple2_cards(device_slot_interface &device) ATTR_COLD;
|
||||
|
62
src/devices/bus/nubus/cards.cpp
Normal file
62
src/devices/bus/nubus/cards.cpp
Normal file
@ -0,0 +1,62 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/***************************************************************************
|
||||
|
||||
NuBus and SE/30 PDS slot cards
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cards.h"
|
||||
|
||||
#include "bootbug.h"
|
||||
#include "laserview.h"
|
||||
#include "nubus_48gc.h"
|
||||
#include "nubus_asntmc3b.h"
|
||||
#include "nubus_cb264.h"
|
||||
#include "nubus_image.h"
|
||||
#include "nubus_m2hires.h"
|
||||
#include "nubus_m2video.h"
|
||||
#include "nubus_radiustpd.h"
|
||||
#include "nubus_spec8.h"
|
||||
#include "nubus_specpdq.h"
|
||||
#include "nubus_vikbw.h"
|
||||
#include "nubus_wsportrait.h"
|
||||
#include "pds30_30hr.h"
|
||||
#include "pds30_cb264.h"
|
||||
#include "pds30_mc30.h"
|
||||
#include "pds30_procolor816.h"
|
||||
#include "pds30_sigmalview.h"
|
||||
#include "quadralink.h"
|
||||
|
||||
|
||||
void mac_nubus_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("m2video", NUBUS_M2VIDEO); // Apple Macintosh II Video Card
|
||||
device.option_add("mdc48", NUBUS_MDC48); // Apple Macintosh Display Card 4•8
|
||||
device.option_add("mdc824", NUBUS_MDC824); // Apple Macintosh Display Card 8•24
|
||||
device.option_add("cb264", NUBUS_CB264); // RasterOps ColorBoard 264
|
||||
device.option_add("vikbw", NUBUS_VIKBW); // Moniterm Viking board
|
||||
device.option_add("image", NUBUS_IMAGE); // Disk Image Pseudo-Card
|
||||
device.option_add("specpdq", NUBUS_SPECPDQ); // SuperMac Spectrum PDQ
|
||||
device.option_add("m2hires", NUBUS_M2HIRES); // Apple Macintosh II Hi-Resolution Card
|
||||
device.option_add("spec8s3", NUBUS_SPEC8S3); // SuperMac Spectrum/8 Series III
|
||||
// device.option_add("thundergx", NUBUS_THUNDERGX); // Radius Thunder GX (not yet)
|
||||
device.option_add("radiustpd", NUBUS_RADIUSTPD); // Radius Two Page Display
|
||||
device.option_add("asmc3nb", NUBUS_ASNTMC3NB); // Asante MC3NB Ethernet card
|
||||
device.option_add("portrait", NUBUS_WSPORTRAIT); // Apple Macintosh II Portrait video card
|
||||
device.option_add("enetnb", NUBUS_APPLEENET); // Apple NuBus Ethernet
|
||||
device.option_add("bootbug", NUBUS_BOOTBUG); // Brigent BootBug debugger card
|
||||
device.option_add("quadralink", NUBUS_QUADRALINK); // AE Quadralink serial card
|
||||
device.option_add("laserview", NUBUS_LASERVIEW); // Sigma Designs LaserView monochrome video card
|
||||
}
|
||||
|
||||
|
||||
void mac_pds030_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("cb264", PDS030_CB264SE30); // RasterOps Colorboard 264/SE30
|
||||
device.option_add("pc816", PDS030_PROCOLOR816); // Lapis ProColor Server 8*16 PDS
|
||||
device.option_add("lview", PDS030_LVIEW); // Sigma Designs L-View
|
||||
device.option_add("30hr", PDS030_XCEED30HR); // Micron/XCEED Technology Color 30HR
|
||||
device.option_add("mc30", PDS030_XCEEDMC30); // Micron/XCEED Technology MacroColor 30
|
||||
}
|
17
src/devices/bus/nubus/cards.h
Normal file
17
src/devices/bus/nubus/cards.h
Normal file
@ -0,0 +1,17 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/***************************************************************************
|
||||
|
||||
NuBus and SE/30 PDS slot cards
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_BUS_NUBUS_CARDS_H
|
||||
#define MAME_BUS_NUBUS_CARDS_H
|
||||
|
||||
#pragma once
|
||||
|
||||
void mac_nubus_cards(device_slot_interface &device) ATTR_COLD;
|
||||
void mac_pds030_cards(device_slot_interface &device) ATTR_COLD;
|
||||
|
||||
#endif // MAME_BUS_NUBUS_CARDS_H
|
@ -126,7 +126,8 @@ void nubus_device::add_nubus_card(device_nubus_card_interface *card)
|
||||
m_device_list.append(*card);
|
||||
}
|
||||
|
||||
template<typename R, typename W> void nubus_device::install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask)
|
||||
template <typename R, typename W>
|
||||
void nubus_device::install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask)
|
||||
{
|
||||
int buswidth = m_space->data_width();
|
||||
switch(buswidth)
|
||||
@ -135,7 +136,7 @@ template<typename R, typename W> void nubus_device::install_device(offs_t start,
|
||||
m_space->install_readwrite_handler(start, end, rhandler, whandler, mask);
|
||||
break;
|
||||
case 64:
|
||||
m_space->install_readwrite_handler(start, end, rhandler, whandler, ((uint64_t)mask<<32)|mask);
|
||||
m_space->install_readwrite_handler(start, end, rhandler, whandler, (uint64_t(mask) << 32) | mask);
|
||||
break;
|
||||
default:
|
||||
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
|
||||
@ -155,7 +156,8 @@ template void nubus_device::install_device<read32s_delegate, write32s_delegate
|
||||
template void nubus_device::install_device<read32sm_delegate, write32sm_delegate >(offs_t start, offs_t end, read32sm_delegate rhandler, write32sm_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_device<read32smo_delegate, write32smo_delegate>(offs_t start, offs_t end, read32smo_delegate rhandler, write32smo_delegate whandler, uint32_t mask);
|
||||
|
||||
void nubus_device::install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask)
|
||||
template <typename R>
|
||||
void nubus_device::install_readonly_device(offs_t start, offs_t end, R rhandler, uint32_t mask)
|
||||
{
|
||||
int buswidth = m_space->data_width();
|
||||
switch(buswidth)
|
||||
@ -164,14 +166,28 @@ void nubus_device::install_readonly_device(offs_t start, offs_t end, read32_dele
|
||||
m_space->install_read_handler(start, end, rhandler, mask);
|
||||
break;
|
||||
case 64:
|
||||
m_space->install_read_handler(start, end, rhandler, ((uint64_t)mask<<32)|mask);
|
||||
m_space->install_read_handler(start, end, rhandler, (uint64_t(mask) << 32) | mask);
|
||||
break;
|
||||
default:
|
||||
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
|
||||
}
|
||||
}
|
||||
|
||||
void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask)
|
||||
template void nubus_device::install_readonly_device<read8_delegate >(offs_t start, offs_t end, read8_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read8s_delegate >(offs_t start, offs_t end, read8s_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read8sm_delegate >(offs_t start, offs_t end, read8sm_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read8smo_delegate >(offs_t start, offs_t end, read8smo_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read16_delegate >(offs_t start, offs_t end, read16_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read16s_delegate >(offs_t start, offs_t end, read16s_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read16sm_delegate >(offs_t start, offs_t end, read16sm_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read16smo_delegate>(offs_t start, offs_t end, read16smo_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read32_delegate >(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read32s_delegate >(offs_t start, offs_t end, read32s_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read32sm_delegate >(offs_t start, offs_t end, read32sm_delegate rhandler, uint32_t mask);
|
||||
template void nubus_device::install_readonly_device<read32smo_delegate>(offs_t start, offs_t end, read32smo_delegate rhandler, uint32_t mask);
|
||||
|
||||
template <typename W>
|
||||
void nubus_device::install_writeonly_device(offs_t start, offs_t end, W whandler, uint32_t mask)
|
||||
{
|
||||
int buswidth = m_space->data_width();
|
||||
switch(buswidth)
|
||||
@ -180,13 +196,26 @@ void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_de
|
||||
m_space->install_write_handler(start, end, whandler, mask);
|
||||
break;
|
||||
case 64:
|
||||
m_space->install_write_handler(start, end, whandler, ((uint64_t)mask<<32)|mask);
|
||||
m_space->install_write_handler(start, end, whandler, (uint64_t(mask) << 32) | mask);
|
||||
break;
|
||||
default:
|
||||
fatalerror("NUBUS: Bus width %d not supported\n", buswidth);
|
||||
}
|
||||
}
|
||||
|
||||
template void nubus_device::install_writeonly_device<write8_delegate >(offs_t start, offs_t end, write8_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write8s_delegate >(offs_t start, offs_t end, write8s_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write8sm_delegate >(offs_t start, offs_t end, write8sm_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write8smo_delegate >(offs_t start, offs_t end, write8smo_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write16_delegate >(offs_t start, offs_t end, write16_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write16s_delegate >(offs_t start, offs_t end, write16s_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write16sm_delegate >(offs_t start, offs_t end, write16sm_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write16smo_delegate>(offs_t start, offs_t end, write16smo_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write32_delegate >(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write32s_delegate >(offs_t start, offs_t end, write32s_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write32sm_delegate >(offs_t start, offs_t end, write32sm_delegate whandler, uint32_t mask);
|
||||
template void nubus_device::install_writeonly_device<write32smo_delegate>(offs_t start, offs_t end, write32smo_delegate whandler, uint32_t mask);
|
||||
|
||||
void nubus_device::install_bank(offs_t start, offs_t end, void *data)
|
||||
{
|
||||
// printf("install_bank: %s @ %x->%x\n", tag, start, end);
|
||||
|
@ -123,9 +123,9 @@ public:
|
||||
auto out_irqe_callback() { return m_out_irqe_cb.bind(); }
|
||||
|
||||
void add_nubus_card(device_nubus_card_interface *card);
|
||||
template<typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff);
|
||||
void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, uint32_t mask=0xffffffff);
|
||||
void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, uint32_t mask=0xffffffff);
|
||||
template <typename R, typename W> void install_device(offs_t start, offs_t end, R rhandler, W whandler, uint32_t mask=0xffffffff);
|
||||
template <typename R> void install_readonly_device(offs_t start, offs_t end, R rhandler, uint32_t mask=0xffffffff);
|
||||
template <typename W> void install_writeonly_device(offs_t start, offs_t end, W whandler, uint32_t mask=0xffffffff);
|
||||
void install_bank(offs_t start, offs_t end, void *data);
|
||||
void install_view(offs_t start, offs_t end, memory_view &view);
|
||||
void set_irq_line(int slot, int state);
|
||||
|
@ -5,8 +5,12 @@
|
||||
Apple Macitosh Display Card 4•8 (model 630-0400)
|
||||
Apple Macitosh Display Card 8•24
|
||||
|
||||
Cards have the same framebuffer, CRTC and clock synthesizers, but use
|
||||
different RAMDACs and ROMs.
|
||||
Cards have the same framebuffer, CRTC, clock synthesizer, and RAMDAC,
|
||||
but use different ROMs and support different monitor profiles.
|
||||
|
||||
The 4•8 shipped with less RAM by default, and as supplied it could not
|
||||
support higher bit depths. We always emulate it as though it has been
|
||||
upgraded to maximum supported RAM.
|
||||
|
||||
Monitor type changes take effect on had reset. The 8•24 defaults to the
|
||||
“Page-White Gamma” profile for the 21" and 16" color monitors, which
|
||||
@ -14,9 +18,7 @@
|
||||
“Uncorrected Gamma” profile if you don’t like it.
|
||||
|
||||
TODO:
|
||||
* Work out why some monitors need magic multiply or divide by two to
|
||||
get the right RAMDAC/CRTC clocks - inferring it from the reference
|
||||
clock modulus is definitely wrong.
|
||||
* RAM size configuration.
|
||||
* Interlaced modes.
|
||||
|
||||
***************************************************************************/
|
||||
@ -38,8 +40,98 @@
|
||||
#define GC48_SCREEN_NAME "screen"
|
||||
#define GC48_ROM_REGION "48gc_rom"
|
||||
|
||||
namespace {
|
||||
|
||||
static INPUT_PORTS_START( 48gc )
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> jmfb_device
|
||||
|
||||
class jmfb_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
protected:
|
||||
// construction/destruction
|
||||
jmfb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
// palette implementation
|
||||
uint32_t palette_entries() const override;
|
||||
|
||||
private:
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void update_crtc();
|
||||
|
||||
uint32_t jmfb_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
uint32_t crtc_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void jmfb_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
void crtc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
void ramdac_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
void clkgen_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
uint32_t rgb_unpack(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void rgb_pack(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
required_ioport m_monitor;
|
||||
memory_view m_vram_view;
|
||||
emu_timer *m_timer;
|
||||
|
||||
uint8_t m_monitor_type;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_vbl_disable, m_toggle;
|
||||
uint8_t m_sense;
|
||||
uint16_t m_preload;
|
||||
uint32_t m_base, m_stride;
|
||||
|
||||
uint8_t m_colors[3], m_count, m_clutoffs, m_mode;
|
||||
|
||||
uint16_t m_hactive, m_hbporch, m_hsync, m_hfporch;
|
||||
uint16_t m_vactive, m_vbporch, m_vsync, m_vfporch;
|
||||
uint16_t m_multiplier;
|
||||
uint16_t m_modulus;
|
||||
uint8_t m_pdiv;
|
||||
};
|
||||
|
||||
class nubus_48gc_device : public jmfb_device
|
||||
{
|
||||
public:
|
||||
nubus_48gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
void mac_48gc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
};
|
||||
|
||||
class nubus_824gc_device : public jmfb_device
|
||||
{
|
||||
public:
|
||||
nubus_824gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_START( 48gc )
|
||||
PORT_START("MONITOR")
|
||||
PORT_CONFNAME(0x0f, 0x06, u8"Attached monitor")
|
||||
PORT_CONFSETTING( 0x00, u8"Macintosh Two-Page Monitor (1152\u00d7870)")
|
||||
@ -52,7 +144,7 @@ static INPUT_PORTS_START( 48gc )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( 824gc )
|
||||
INPUT_PORTS_START( 824gc )
|
||||
PORT_START("MONITOR")
|
||||
PORT_CONFNAME(0x0f, 0x06, u8"Attached monitor")
|
||||
PORT_CONFSETTING( 0x00, u8"Mac 21\" Color Display (1152\u00d7870)")
|
||||
@ -75,17 +167,10 @@ ROM_START( gc824 )
|
||||
ROM_LOAD( "3410868.bin", 0x000000, 0x008000, CRC(57f925fa) SHA1(4d3c0632711b7b31c8e0c5cfdd7ec1904f178336) ) /* Label: "341-0868 // (C)APPLE COMPUTER // INC. 1986-1991 // ALL RIGHTS // RESERVED W5" */
|
||||
ROM_END
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(NUBUS_48GC, nubus_48gc_device, "nb_48gc", "Apple Macintosh Display Card 4*8")
|
||||
DEFINE_DEVICE_TYPE(NUBUS_824GC, nubus_824gc_device, "nb_824gc", "Apple Macintosh Display Card 8*24")
|
||||
|
||||
|
||||
// TODO: find a better place for this table to live
|
||||
struct mac_monitor_info { bool mono; unsigned sense[4]; };
|
||||
static mac_monitor_info const f_monitors[] = {
|
||||
mac_monitor_info const f_monitors[] = {
|
||||
{ false, { 0, 0, 0, 0 } }, // 0: RGB 21"
|
||||
{ true, { 1, 1, 1, 0 } }, // 1: Full-Page (B&W 15")
|
||||
{ false, { 2, 2, 0, 2 } }, // 2: RGB 12"
|
||||
@ -180,12 +265,12 @@ jmfb_device::jmfb_device(const machine_config &mconfig, device_type type, const
|
||||
}
|
||||
|
||||
nubus_48gc_device::nubus_48gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
jmfb_device(mconfig, NUBUS_48GC, tag, owner, clock)
|
||||
jmfb_device(mconfig, NUBUS_MDC48, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
nubus_824gc_device::nubus_824gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
jmfb_device(mconfig, NUBUS_824GC, tag, owner, clock)
|
||||
jmfb_device(mconfig, NUBUS_MDC824, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
@ -213,6 +298,19 @@ void jmfb_device::device_start()
|
||||
read32s_delegate(*this, FUNC(jmfb_device::rgb_unpack)), write32s_delegate(*this, FUNC(jmfb_device::rgb_pack)));
|
||||
m_vram_view.select(0);
|
||||
|
||||
nubus().install_device(
|
||||
slotspace + 0x200000, slotspace + 0x20000f,
|
||||
read32s_delegate(*this, FUNC(jmfb_device::jmfb_r)), write32s_delegate(*this, FUNC(jmfb_device::jmfb_w)));
|
||||
nubus().install_device(
|
||||
slotspace + 0x200100, slotspace + 0x2001ff,
|
||||
read32s_delegate(*this, FUNC(jmfb_device::crtc_r)), write32s_delegate(*this, FUNC(jmfb_device::crtc_w)));
|
||||
nubus().install_writeonly_device(
|
||||
slotspace + 0x200200, slotspace + 0x20020f,
|
||||
write32s_delegate(*this, FUNC(jmfb_device::ramdac_w)));
|
||||
nubus().install_writeonly_device(
|
||||
slotspace + 0x200300, slotspace + 0x20033f,
|
||||
write32s_delegate(*this, FUNC(jmfb_device::clkgen_w)));
|
||||
|
||||
m_timer = timer_alloc(FUNC(jmfb_device::vbl_tick), this);
|
||||
|
||||
m_monitor_type = 0;
|
||||
@ -222,7 +320,6 @@ void jmfb_device::device_start()
|
||||
save_item(NAME(m_vram));
|
||||
save_item(NAME(m_vbl_disable));
|
||||
save_item(NAME(m_toggle));
|
||||
save_item(NAME(m_registers));
|
||||
save_item(NAME(m_sense));
|
||||
save_item(NAME(m_preload));
|
||||
save_item(NAME(m_base));
|
||||
@ -244,26 +341,6 @@ void jmfb_device::device_start()
|
||||
save_item(NAME(m_pdiv));
|
||||
}
|
||||
|
||||
void nubus_48gc_device::device_start()
|
||||
{
|
||||
jmfb_device::device_start();
|
||||
|
||||
uint32_t const slotspace = get_slotspace();
|
||||
nubus().install_device(
|
||||
slotspace + 0x200000, slotspace + 0x2003ff,
|
||||
read32s_delegate(*this, FUNC(nubus_48gc_device::jmfb_r)), write32s_delegate(*this, FUNC(nubus_48gc_device::mac_48gc_w)));
|
||||
}
|
||||
|
||||
void nubus_824gc_device::device_start()
|
||||
{
|
||||
jmfb_device::device_start();
|
||||
|
||||
uint32_t const slotspace = get_slotspace();
|
||||
nubus().install_device(
|
||||
slotspace + 0x200000, slotspace + 0x2003ff,
|
||||
read32s_delegate(*this, FUNC(nubus_824gc_device::jmfb_r)), write32s_delegate(*this, FUNC(nubus_824gc_device::mac_824gc_w)));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
@ -275,7 +352,7 @@ void jmfb_device::device_reset()
|
||||
m_monitor_type = m_monitor->read();
|
||||
if (m_monitor_type > std::size(f_monitors))
|
||||
{
|
||||
throw emu_fatalerror("%s: Invalid monitor selection %x\n", m_monitor_type);
|
||||
throw emu_fatalerror("%s: Invalid monitor selection %d\n", tag(), m_monitor_type);
|
||||
}
|
||||
|
||||
std::fill(m_vram.begin(), m_vram.end(), 0);
|
||||
@ -333,7 +410,7 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
|
||||
switch (m_mode)
|
||||
{
|
||||
case 0: // 1bpp
|
||||
case 0x0: // 1bpp
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
auto const rowbase = screenbase + (y * m_stride * 4);
|
||||
@ -354,7 +431,7 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
break;
|
||||
|
||||
case 1: // 2bpp
|
||||
case 0x4: // 2bpp
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
auto const rowbase = screenbase + (y * m_stride * 4);
|
||||
@ -371,7 +448,7 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // 4 bpp
|
||||
case 0x8: // 4 bpp
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
auto const rowbase = screenbase + (y * m_stride * 4);
|
||||
@ -386,7 +463,7 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
break;
|
||||
|
||||
case 3: // 8 bpp
|
||||
case 0xc: // 8 bpp
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
auto const rowbase = screenbase + (y * m_stride * 4);
|
||||
@ -398,7 +475,7 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
break;
|
||||
|
||||
case 4: // 24 bpp
|
||||
case 0xd: // 24 bpp
|
||||
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
|
||||
{
|
||||
auto source = util::big_endian_cast<uint8_t const>(&m_vram[0]) + (m_base << 6) + (y * m_stride * 8);
|
||||
@ -413,6 +490,9 @@ uint32_t jmfb_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw emu_fatalerror("%s: Unsupported RAMDAC mode %d\n", tag(), m_mode);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -432,55 +512,37 @@ void jmfb_device::update_crtc()
|
||||
LOG("reference clock %d VCO output %d pixel clock %d RAMDAC clock %d\n",
|
||||
refclk.value(), vcoout.value(), pixclk.value(), dacclk.value());
|
||||
|
||||
int htotal = m_hactive + m_hbporch + m_hsync + m_hfporch + 8;
|
||||
int width = m_hactive + 2;
|
||||
LOG("horizontal total %d active %d\n", htotal, width);
|
||||
int const htotal = (m_hactive + m_hbporch + m_hsync + m_hfporch + 8) * 32 / divider;
|
||||
int const hactive = (m_hactive + 2) * 32 / divider;
|
||||
|
||||
// FIXME: where does this multiply/divide by 2 come from?
|
||||
// This is obviously not correct by any definition.
|
||||
int scale = 0;
|
||||
switch (m_modulus)
|
||||
{
|
||||
case 15:
|
||||
scale = -1;
|
||||
break;
|
||||
case 21:
|
||||
scale = 0;
|
||||
break;
|
||||
case 19:
|
||||
case 22:
|
||||
scale = 1;
|
||||
break;
|
||||
default:
|
||||
throw emu_fatalerror("%s: Unknown clock modulus %d\n", tag(), m_modulus);
|
||||
}
|
||||
htotal = ((m_hactive + m_hbporch + m_hsync + m_hfporch + 8) << (m_pdiv + scale)) / divider;
|
||||
width = ((m_hactive + 2) << (m_pdiv + scale)) / divider;
|
||||
switch (m_mode)
|
||||
{
|
||||
case 0: // 1bpp:
|
||||
htotal <<= 3;
|
||||
width <<= 3;
|
||||
case 0x0: // 1bpp:
|
||||
scale = 0;
|
||||
break;
|
||||
case 1: // 2bpp:
|
||||
htotal <<= 2;
|
||||
width <<= 2;
|
||||
case 0x4: // 2bpp:
|
||||
scale = 1;
|
||||
break;
|
||||
case 2: // 4bpp:
|
||||
htotal <<= 1;
|
||||
width <<= 1;
|
||||
case 0x8: // 4bpp:
|
||||
scale = 2;
|
||||
break;
|
||||
case 3: // 8bpp:
|
||||
case 0xc: // 8bpp:
|
||||
scale = 3;
|
||||
break;
|
||||
case 4: // 24bpp:
|
||||
htotal >>= 2;
|
||||
width >>= 2;
|
||||
case 0xd: // 24bpp:
|
||||
scale = 5;
|
||||
break;
|
||||
}
|
||||
int const hpixels = htotal >> scale;
|
||||
int const width = hactive >> scale;
|
||||
LOG("horizontal total %d active %d (mode %x %d/%d)\n",
|
||||
htotal, hactive, m_mode, width, hpixels);
|
||||
|
||||
screen().configure(
|
||||
htotal, vtotal,
|
||||
hpixels, vtotal,
|
||||
rectangle(0, width - 1, 0, height - 1),
|
||||
attotime::from_ticks(htotal * vtotal, pixclk).attoseconds());
|
||||
attotime::from_ticks(hpixels * vtotal, pixclk).attoseconds());
|
||||
|
||||
// TODO: determine correct timing for vertical blanking interrupt
|
||||
m_timer->adjust(screen().time_until_pos(height - 1, 0));
|
||||
@ -489,11 +551,11 @@ void jmfb_device::update_crtc()
|
||||
|
||||
uint32_t jmfb_device::jmfb_r(offs_t offset, uint32_t mem_mask)
|
||||
{
|
||||
// printf("%s 48gc_r: @ %x, mask %08x\n", machine().describe_context().c_str(), offset, mem_mask);
|
||||
// printf("%s jmfb_r: @ %x, mask %08x\n", machine().describe_context().c_str(), offset, mem_mask);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x000/4:
|
||||
case 0x00/4:
|
||||
{
|
||||
uint32_t result = f_monitors[m_monitor_type].sense[0];
|
||||
if (BIT(m_sense, 2))
|
||||
@ -504,8 +566,18 @@ uint32_t jmfb_device::jmfb_r(offs_t offset, uint32_t mem_mask)
|
||||
result &= f_monitors[m_monitor_type].sense[3];
|
||||
return result << 9;
|
||||
}
|
||||
}
|
||||
|
||||
case 0x1c0/4:
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t jmfb_device::crtc_r(offs_t offset, uint32_t mem_mask)
|
||||
{
|
||||
// printf("%s crtc_r: @ %x, mask %08x\n", machine().describe_context().c_str(), offset, mem_mask);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0xc0/4:
|
||||
m_toggle ^= 0xffffffff;
|
||||
return m_toggle;
|
||||
}
|
||||
@ -515,11 +587,9 @@ uint32_t jmfb_device::jmfb_r(offs_t offset, uint32_t mem_mask)
|
||||
|
||||
void jmfb_device::jmfb_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_registers[offset & 0xff]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x000/4: // control
|
||||
case 0x00/4: // control
|
||||
LOG("%s: %04x to control\n", machine().describe_context(), data);
|
||||
if (BIT(data, 7))
|
||||
{
|
||||
@ -528,95 +598,133 @@ void jmfb_device::jmfb_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
m_sense = (data >> 9) & 0x07;
|
||||
break;
|
||||
|
||||
case 0x004/4:
|
||||
case 0x04/4:
|
||||
LOG("%s: %02x to preload\n", machine().describe_context(), data);
|
||||
m_preload = data & 0xff;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x008/4: // base
|
||||
case 0x08/4: // base
|
||||
LOG("%s: %x to base\n", machine().describe_context(), data);
|
||||
m_base = data & 0xffff;
|
||||
break;
|
||||
|
||||
case 0x00c/4: // stride
|
||||
case 0x0c/4: // stride
|
||||
LOG("%s: %x to stride\n", machine().describe_context(), data);
|
||||
// this value is in DWORDs for 1-8 bpp and, uhh, strange for 24bpp
|
||||
m_stride = data & 0xffff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case 0x10c/4: // active pixel cells - 2
|
||||
void jmfb_device::crtc_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x0c/4: // active pixel cells - 2
|
||||
LOG("%s: %d-2 to active cells\n", machine().describe_context(), data + 2);
|
||||
m_hactive = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x110/4: // horizontal back porch
|
||||
case 0x10/4: // horizontal back porch
|
||||
LOG("%s: %d to horizontal back porch\n", machine().describe_context(), data + 2);
|
||||
m_hbporch = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x114/4: // horizontal sync pulse
|
||||
case 0x14/4: // horizontal sync pulse
|
||||
LOG("%s: %d-2 to horizontal sync pulse\n", machine().describe_context(), data + 2);
|
||||
m_hsync = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x118/4: // horizontal front porch
|
||||
case 0x18/4: // horizontal front porch
|
||||
LOG("%s: %d-2 to horizontal front porch\n", machine().describe_context(), data + 2);
|
||||
m_hfporch = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x124/4: // active lines * 2
|
||||
case 0x24/4: // active lines * 2
|
||||
LOG("%s: %d*2 to active lines\n", machine().describe_context(), data / 2);
|
||||
m_vactive = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x128/4: // vertical back porch * 2
|
||||
case 0x28/4: // vertical back porch * 2
|
||||
LOG("%s: %d*2 to vertical back porch\n", machine().describe_context(), data / 2);
|
||||
m_vbporch = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x12c/4: // vertical sync width * 2
|
||||
case 0x2c/4: // vertical sync width * 2
|
||||
LOG("%s: %d*2 to vertical sync pulse width\n", machine().describe_context(), data / 2);
|
||||
m_vsync = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x130/4: // vertical front porch * 2
|
||||
case 0x30/4: // vertical front porch * 2
|
||||
LOG("%s: %d*2 to vertical front porch\n", machine().describe_context(), data / 2);
|
||||
m_vfporch = data;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x13c/4: // bit 1 = VBL disable (1=no interrupts)
|
||||
case 0x3c/4: // bit 1 = VBL disable (1=no interrupts)
|
||||
m_vbl_disable = (data & 2) ? 1 : 0;
|
||||
break;
|
||||
|
||||
case 0x148/4: // write 1 here to clear interrupt
|
||||
if (data == 1)
|
||||
case 0x48/4: // write here to clear interrupt
|
||||
lower_slot_irq();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void jmfb_device::ramdac_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00/4: // CLUT address
|
||||
LOG("%s: %02x to CLUT address\n", machine().describe_context(), data & 0xff);
|
||||
m_clutoffs = data;
|
||||
m_count = 0;
|
||||
break;
|
||||
|
||||
case 0x04/4: // CLUT data
|
||||
m_colors[m_count++] = data & 0xff;
|
||||
if (m_count == 3)
|
||||
{
|
||||
lower_slot_irq();
|
||||
LOG("%s: RAMDAC: color %d = %02x %02x %02x\n", machine().describe_context(), m_clutoffs, m_colors[0], m_colors[1], m_colors[2]);
|
||||
set_pen_color(m_clutoffs, rgb_t(m_colors[0], m_colors[1], m_colors[2]));
|
||||
m_clutoffs++;
|
||||
m_count = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x300/4:
|
||||
case 0x304/4:
|
||||
case 0x308/4:
|
||||
case 0x30c/4:
|
||||
case 0x08/4: // mode control
|
||||
m_mode = (data >> 1) & 0xf;
|
||||
LOG("%s: %02x to RAMDAC mode (mode = %x)\n", machine().describe_context(), data, m_mode);
|
||||
update_crtc();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void jmfb_device::clkgen_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00/4:
|
||||
case 0x04/4:
|
||||
case 0x08/4:
|
||||
case 0x0c/4:
|
||||
m_multiplier &= ~(0x0f << ((offset & 3) * 4));
|
||||
m_multiplier |= (data & 0x0f) << ((offset & 3) * 4);
|
||||
LOG("%s: %d to multiplier\n", machine().describe_context(), m_multiplier);
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x310/4:
|
||||
case 0x314/4:
|
||||
case 0x318/4:
|
||||
case 0x10/4:
|
||||
case 0x14/4:
|
||||
case 0x18/4:
|
||||
m_modulus &= ~(0x0f << ((offset & 3) * 4));
|
||||
m_modulus |= (data & 0x0f) << ((offset & 3) * 4);
|
||||
LOG("%s: %d to modulus\n", machine().describe_context(), m_modulus);
|
||||
@ -624,88 +732,14 @@ void jmfb_device::jmfb_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
case 0x324/4:
|
||||
case 0x24/4:
|
||||
LOG("%s: 1<<%d to pixel cell divider\n", machine().describe_context(), data);
|
||||
m_pdiv = data & 0x0f;
|
||||
update_crtc();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void nubus_48gc_device::mac_48gc_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x200/4: // DAC control
|
||||
dac_ctrl_w(data >> 24);
|
||||
break;
|
||||
|
||||
case 0x204/4: // DAC data
|
||||
dac_data_w(data >> 24);
|
||||
break;
|
||||
|
||||
case 0x208/4: // mode control
|
||||
mode_w(data, !((data >> 5) & 0x3));
|
||||
break;
|
||||
|
||||
default:
|
||||
jmfb_w(offset, data, mem_mask);
|
||||
}
|
||||
}
|
||||
|
||||
void nubus_824gc_device::mac_824gc_w(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x200/4: // DAC control
|
||||
dac_ctrl_w(data & 0xff);
|
||||
break;
|
||||
|
||||
case 0x204/4: // DAC data
|
||||
dac_data_w(data & 0xff);
|
||||
break;
|
||||
|
||||
case 0x208/4: // mode control
|
||||
mode_w(data, BIT(data, 1));
|
||||
break;
|
||||
|
||||
default:
|
||||
jmfb_w(offset, data, mem_mask);
|
||||
}
|
||||
}
|
||||
|
||||
void jmfb_device::dac_ctrl_w(uint8_t data)
|
||||
{
|
||||
LOG("%s: %02x to DAC control\n", machine().describe_context(), data);
|
||||
m_clutoffs = data;
|
||||
m_count = 0;
|
||||
}
|
||||
|
||||
void jmfb_device::dac_data_w(uint8_t data)
|
||||
{
|
||||
m_colors[m_count++] = data;
|
||||
|
||||
if (m_count == 3)
|
||||
{
|
||||
LOG("%s: RAMDAC: color %d = %02x %02x %02x\n", machine().describe_context(), m_clutoffs, m_colors[0], m_colors[1], m_colors[2]);
|
||||
set_pen_color(m_clutoffs, rgb_t(m_colors[0], m_colors[1], m_colors[2]));
|
||||
m_clutoffs++;
|
||||
m_count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void jmfb_device::mode_w(uint32_t data, bool rgb)
|
||||
{
|
||||
m_mode = (data >> 3) & 0x3;
|
||||
if ((m_mode == 3) & rgb) // mode 3 can be 8 or 24 bpp
|
||||
m_mode = 4;
|
||||
LOG("%s: %02x to mode (m_mode = %d)\n", machine().describe_context(), data, m_mode);
|
||||
update_crtc();
|
||||
}
|
||||
|
||||
uint32_t jmfb_device::rgb_unpack(offs_t offset, uint32_t mem_mask)
|
||||
{
|
||||
auto const color = util::big_endian_cast<uint8_t const>(&m_vram[0]) + (offset * 3);
|
||||
@ -722,3 +756,13 @@ void jmfb_device::rgb_pack(offs_t offset, uint32_t data, uint32_t mem_mask)
|
||||
if (ACCESSING_BITS_0_7)
|
||||
color[2] = uint8_t(data);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(NUBUS_MDC48, device_nubus_card_interface, nubus_48gc_device, "nb_mdc48", "Apple Macintosh Display Card 4*8")
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(NUBUS_MDC824, device_nubus_card_interface, nubus_824gc_device, "nb_mdc824", "Apple Macintosh Display Card 8*24")
|
||||
|
@ -7,106 +7,8 @@
|
||||
|
||||
#include "nubus.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> jmfb_device
|
||||
|
||||
class jmfb_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
protected:
|
||||
// construction/destruction
|
||||
jmfb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
// palette implementation
|
||||
uint32_t palette_entries() const override;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
uint32_t jmfb_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void jmfb_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
void dac_ctrl_w(uint8_t data);
|
||||
void dac_data_w(uint8_t data);
|
||||
void mode_w(uint32_t data, bool rgb);
|
||||
|
||||
private:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void update_crtc();
|
||||
|
||||
uint32_t rgb_unpack(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void rgb_pack(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
required_ioport m_monitor;
|
||||
memory_view m_vram_view;
|
||||
emu_timer *m_timer;
|
||||
|
||||
uint8_t m_monitor_type;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_vbl_disable, m_toggle;
|
||||
uint32_t m_registers[0x100];
|
||||
uint8_t m_sense;
|
||||
uint16_t m_preload;
|
||||
uint32_t m_base, m_stride;
|
||||
|
||||
uint8_t m_colors[3], m_count, m_clutoffs, m_mode;
|
||||
|
||||
uint16_t m_hactive, m_hbporch, m_hsync, m_hfporch;
|
||||
uint16_t m_vactive, m_vbporch, m_vsync, m_vfporch;
|
||||
uint16_t m_multiplier;
|
||||
uint16_t m_modulus;
|
||||
uint8_t m_pdiv;
|
||||
};
|
||||
|
||||
class nubus_48gc_device : public jmfb_device
|
||||
{
|
||||
public:
|
||||
nubus_48gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
void mac_48gc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
};
|
||||
|
||||
class nubus_824gc_device : public jmfb_device
|
||||
{
|
||||
public:
|
||||
nubus_824gc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
private:
|
||||
void mac_824gc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(NUBUS_48GC, nubus_48gc_device)
|
||||
DECLARE_DEVICE_TYPE(NUBUS_824GC, nubus_824gc_device)
|
||||
DECLARE_DEVICE_TYPE(NUBUS_MDC48, device_nubus_card_interface)
|
||||
DECLARE_DEVICE_TYPE(NUBUS_MDC824, device_nubus_card_interface)
|
||||
|
||||
#endif /// MAME_BUS_NUBUS_NUBUS_48GC_H
|
||||
|
@ -48,6 +48,8 @@
|
||||
#include "emu.h"
|
||||
#include "nubus_spec8.h"
|
||||
|
||||
#include "supermac.h"
|
||||
|
||||
#include "layout/generic.h"
|
||||
#include "screen.h"
|
||||
|
||||
@ -63,7 +65,70 @@
|
||||
#define VRAM_SIZE (0x10'0000) // 1M of VRAM for 1024x768 @ 8 bit
|
||||
|
||||
|
||||
static INPUT_PORTS_START( spec8s3 )
|
||||
namespace {
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class nubus_spec8s3_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nubus_spec8s3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
nubus_spec8s3_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// palette implementation
|
||||
virtual uint32_t palette_entries() const override;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
private:
|
||||
uint32_t spec8s3_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void spec8s3_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
uint32_t vram_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
void update_crtc();
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_ioport m_userosc;
|
||||
emu_timer *m_timer;
|
||||
|
||||
supermac_spec_crtc m_crtc;
|
||||
supermac_spec_shift_reg m_shiftreg;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_mode, m_vbl_disable;
|
||||
uint32_t m_colors[3], m_count, m_clutoffs;
|
||||
|
||||
uint8_t m_osc;
|
||||
bool m_interlace;
|
||||
|
||||
uint16_t m_hpan, m_vpan;
|
||||
uint8_t m_zoom;
|
||||
|
||||
bool m_vbl_pending;
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_START( spec8s3 )
|
||||
PORT_START("USEROSC")
|
||||
PORT_CONFNAME(0x07, 0x01, "Oscillator Y1")
|
||||
PORT_CONFSETTING( 0x00, "14.32 MHz (NTSC Underscan)")
|
||||
@ -83,13 +148,6 @@ ROM_START( spec8s3 )
|
||||
ROM_END
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(NUBUS_SPEC8S3, nubus_spec8s3_device, "nb_sp8s3", "SuperMac Spectrum/8 Series III video card")
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
@ -565,3 +623,12 @@ uint32_t nubus_spec8s3_device::vram_r(offs_t offset, uint32_t mem_mask)
|
||||
{
|
||||
return m_vram[offset] ^ 0xffffffff;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(NUBUS_SPEC8S3, device_nubus_card_interface, nubus_spec8s3_device, "nb_sp8s3", "SuperMac Spectrum/8 Series III video card")
|
||||
|
@ -6,71 +6,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "nubus.h"
|
||||
#include "supermac.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class nubus_spec8s3_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nubus_spec8s3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
nubus_spec8s3_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// palette implementation
|
||||
virtual uint32_t palette_entries() const override;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
private:
|
||||
uint32_t spec8s3_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void spec8s3_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
uint32_t vram_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
void update_crtc();
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_ioport m_userosc;
|
||||
emu_timer *m_timer;
|
||||
|
||||
supermac_spec_crtc m_crtc;
|
||||
supermac_spec_shift_reg m_shiftreg;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_mode, m_vbl_disable;
|
||||
uint32_t m_colors[3], m_count, m_clutoffs;
|
||||
|
||||
uint8_t m_osc;
|
||||
bool m_interlace;
|
||||
|
||||
uint16_t m_hpan, m_vpan;
|
||||
uint8_t m_zoom;
|
||||
|
||||
bool m_vbl_pending;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(NUBUS_SPEC8S3, nubus_spec8s3_device)
|
||||
DECLARE_DEVICE_TYPE(NUBUS_SPEC8S3, device_nubus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_NUBUS_NUBUS_SPEC8_H
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include "emu.h"
|
||||
#include "nubus_specpdq.h"
|
||||
|
||||
#include "supermac.h"
|
||||
|
||||
#include "layout/generic.h"
|
||||
#include "screen.h"
|
||||
|
||||
@ -47,7 +49,79 @@
|
||||
#define VRAM_SIZE (0x40'0000)
|
||||
|
||||
|
||||
static INPUT_PORTS_START( specpdq )
|
||||
namespace {
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class nubus_specpdq_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nubus_specpdq_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
nubus_specpdq_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// palette implementation
|
||||
virtual uint32_t palette_entries() const override;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
private:
|
||||
uint32_t specpdq_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void specpdq_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
uint32_t vram_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
void blitter_pattern_fill();
|
||||
void blitter_copy_forward();
|
||||
void blitter_copy_backward();
|
||||
|
||||
void update_crtc();
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_ioport m_userosc;
|
||||
emu_timer *m_timer;
|
||||
|
||||
supermac_spec_crtc m_crtc;
|
||||
supermac_spec_shift_reg m_shiftreg;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_mode, m_vbl_disable;
|
||||
uint32_t m_colors[3], m_count, m_clutoffs;
|
||||
|
||||
uint16_t m_stride;
|
||||
uint16_t m_vint;
|
||||
uint8_t m_hdelay;
|
||||
uint8_t m_osc;
|
||||
|
||||
uint16_t m_blit_stride;
|
||||
uint32_t m_blit_src, m_blit_dst;
|
||||
uint32_t m_blit_width, m_blit_height;
|
||||
uint8_t m_blit_patoffs;
|
||||
uint32_t m_blit_pat[64];
|
||||
|
||||
uint32_t m_7xxxxx_regs[0x100000 / 4];
|
||||
};
|
||||
|
||||
|
||||
INPUT_PORTS_START( specpdq )
|
||||
PORT_START("USEROSC")
|
||||
PORT_CONFNAME(0x07, 0x00, "Alternate oscillator")
|
||||
PORT_CONFSETTING( 0x00, "55.00 MHz (SuperMac 16\")")
|
||||
@ -60,12 +134,6 @@ ROM_START( specpdq )
|
||||
ROM_LOAD( "specpdq.bin", 0x000000, 0x010000, CRC(82a35f78) SHA1(9511c2df47140f4279196d3b8836b53429879dd9) )
|
||||
ROM_END
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(NUBUS_SPECPDQ, nubus_specpdq_device, "nb_spdq", "SuperMac Spectrum PDQ video card")
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
@ -663,3 +731,12 @@ void nubus_specpdq_device::blitter_copy_backward()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE_PRIVATE(NUBUS_SPECPDQ, device_nubus_card_interface, nubus_specpdq_device, "nb_spdq", "SuperMac Spectrum PDQ video card")
|
||||
|
@ -6,80 +6,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "nubus.h"
|
||||
#include "supermac.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class nubus_specpdq_device :
|
||||
public device_t,
|
||||
public device_nubus_card_interface,
|
||||
public device_video_interface,
|
||||
public device_palette_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nubus_specpdq_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
nubus_specpdq_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// palette implementation
|
||||
virtual uint32_t palette_entries() const override;
|
||||
|
||||
TIMER_CALLBACK_MEMBER(vbl_tick);
|
||||
|
||||
private:
|
||||
uint32_t specpdq_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void specpdq_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
uint32_t vram_r(offs_t offset, uint32_t mem_mask = ~0);
|
||||
void vram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
|
||||
|
||||
void blitter_pattern_fill();
|
||||
void blitter_copy_forward();
|
||||
void blitter_copy_backward();
|
||||
|
||||
void update_crtc();
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
required_ioport m_userosc;
|
||||
emu_timer *m_timer;
|
||||
|
||||
supermac_spec_crtc m_crtc;
|
||||
supermac_spec_shift_reg m_shiftreg;
|
||||
|
||||
std::vector<uint32_t> m_vram;
|
||||
uint32_t m_mode, m_vbl_disable;
|
||||
uint32_t m_colors[3], m_count, m_clutoffs;
|
||||
|
||||
uint16_t m_stride;
|
||||
uint16_t m_vint;
|
||||
uint8_t m_hdelay;
|
||||
uint8_t m_osc;
|
||||
|
||||
uint16_t m_blit_stride;
|
||||
uint32_t m_blit_src, m_blit_dst;
|
||||
uint32_t m_blit_width, m_blit_height;
|
||||
uint8_t m_blit_patoffs;
|
||||
uint32_t m_blit_pat[64];
|
||||
|
||||
uint32_t m_7xxxxx_regs[0x100000 / 4];
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(NUBUS_SPECPDQ, nubus_specpdq_device)
|
||||
DECLARE_DEVICE_TYPE(NUBUS_SPECPDQ, device_nubus_card_interface)
|
||||
|
||||
#endif // MAME_BUS_NUBUS_NUBUS_SPECPDQ_H
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "machine/macadb.h"
|
||||
|
||||
#include "bus/nscsi/devices.h"
|
||||
#include "bus/nubus/cards.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/m6805/m6805.h"
|
||||
#include "machine/applepic.h"
|
||||
@ -24,27 +25,6 @@
|
||||
#include "machine/swim1.h"
|
||||
#include "machine/swim2.h"
|
||||
|
||||
// NuBus and 030/040 PDS cards
|
||||
#include "bus/nubus/nubus_48gc.h"
|
||||
#include "bus/nubus/nubus_cb264.h"
|
||||
#include "bus/nubus/nubus_vikbw.h"
|
||||
#include "bus/nubus/nubus_specpdq.h"
|
||||
#include "bus/nubus/nubus_m2hires.h"
|
||||
#include "bus/nubus/nubus_spec8.h"
|
||||
#include "bus/nubus/nubus_radiustpd.h"
|
||||
#include "bus/nubus/nubus_wsportrait.h"
|
||||
#include "bus/nubus/nubus_asntmc3b.h"
|
||||
#include "bus/nubus/nubus_image.h"
|
||||
#include "bus/nubus/nubus_m2video.h"
|
||||
#include "bus/nubus/bootbug.h"
|
||||
#include "bus/nubus/quadralink.h"
|
||||
#include "bus/nubus/laserview.h"
|
||||
#include "bus/nubus/pds30_cb264.h"
|
||||
#include "bus/nubus/pds30_procolor816.h"
|
||||
#include "bus/nubus/pds30_sigmalview.h"
|
||||
#include "bus/nubus/pds30_30hr.h"
|
||||
#include "bus/nubus/pds30_mc30.h"
|
||||
|
||||
#include "layout/generic.h"
|
||||
#include "softlist_dev.h"
|
||||
#include "speaker.h"
|
||||
@ -596,36 +576,6 @@ void mac_state::maciifx_map(address_map &map)
|
||||
DEVICE CONFIG
|
||||
***************************************************************************/
|
||||
|
||||
static void mac_nubus_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("m2video", NUBUS_M2VIDEO); /* Apple Macintosh II Video Card */
|
||||
device.option_add("48gc", NUBUS_48GC); /* Apple 4*8 Graphics Card */
|
||||
device.option_add("824gc", NUBUS_824GC); /* Apple 8*24 Graphics Card */
|
||||
device.option_add("cb264", NUBUS_CB264); /* RasterOps ColorBoard 264 */
|
||||
device.option_add("vikbw", NUBUS_VIKBW); /* Moniterm Viking board */
|
||||
device.option_add("image", NUBUS_IMAGE); /* Disk Image Pseudo-Card */
|
||||
device.option_add("specpdq", NUBUS_SPECPDQ); /* SuperMac Spectrum PDQ */
|
||||
device.option_add("m2hires", NUBUS_M2HIRES); /* Apple Macintosh II Hi-Resolution Card */
|
||||
device.option_add("spec8s3", NUBUS_SPEC8S3); /* SuperMac Spectrum/8 Series III */
|
||||
// device.option_add("thundergx", NUBUS_THUNDERGX); /* Radius Thunder GX (not yet) */
|
||||
device.option_add("radiustpd", NUBUS_RADIUSTPD); /* Radius Two Page Display */
|
||||
device.option_add("asmc3nb", NUBUS_ASNTMC3NB); /* Asante MC3NB Ethernet card */
|
||||
device.option_add("portrait", NUBUS_WSPORTRAIT); /* Apple Macintosh II Portrait video card */
|
||||
device.option_add("enetnb", NUBUS_APPLEENET); /* Apple NuBus Ethernet */
|
||||
device.option_add("bootbug", NUBUS_BOOTBUG); /* Brigent BootBug debugger card */
|
||||
device.option_add("quadralink", NUBUS_QUADRALINK); /* AE Quadralink serial card */
|
||||
device.option_add("laserview", NUBUS_LASERVIEW); /* Sigma Designs LaserView monochrome video card */
|
||||
}
|
||||
|
||||
static void mac_pds030_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("cb264", PDS030_CB264SE30); // RasterOps Colorboard 264/SE30
|
||||
device.option_add("pc816", PDS030_PROCOLOR816); // Lapis ProColor Server 8*16 PDS
|
||||
device.option_add("lview", PDS030_LVIEW); // Sigma Designs L-View
|
||||
device.option_add("30hr", PDS030_XCEED30HR); // Micron/XCEED Technology Color 30HR
|
||||
device.option_add("mc30", PDS030_XCEEDMC30); // Micron/XCEED Technology MacroColor 30
|
||||
}
|
||||
|
||||
static void mac_lcpds_cards(device_slot_interface &device)
|
||||
{
|
||||
}
|
||||
|
@ -12,43 +12,30 @@
|
||||
#include "emu.h"
|
||||
|
||||
#include "machine/macrtc.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/z80scc.h"
|
||||
#include "machine/macadb.h"
|
||||
#include "machine/applefdintf.h"
|
||||
#include "machine/swim1.h"
|
||||
#include "machine/dp83932c.h"
|
||||
#include "machine/nscsi_bus.h"
|
||||
#include "machine/ncr5390.h"
|
||||
#include "sound/asc.h"
|
||||
#include "formats/ap_dsk35.h"
|
||||
|
||||
#include "bus/nscsi/devices.h"
|
||||
|
||||
#include "bus/nubus/cards.h"
|
||||
#include "bus/nubus/nubus.h"
|
||||
#include "bus/nubus/nubus_48gc.h"
|
||||
#include "bus/nubus/nubus_cb264.h"
|
||||
#include "bus/nubus/nubus_vikbw.h"
|
||||
#include "bus/nubus/nubus_specpdq.h"
|
||||
#include "bus/nubus/nubus_m2hires.h"
|
||||
#include "bus/nubus/nubus_spec8.h"
|
||||
#include "bus/nubus/nubus_radiustpd.h"
|
||||
#include "bus/nubus/nubus_wsportrait.h"
|
||||
#include "bus/nubus/nubus_asntmc3b.h"
|
||||
#include "bus/nubus/nubus_image.h"
|
||||
#include "bus/nubus/nubus_m2video.h"
|
||||
#include "bus/nubus/bootbug.h"
|
||||
#include "bus/nubus/quadralink.h"
|
||||
#include "bus/nubus/laserview.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/applefdintf.h"
|
||||
#include "machine/dp83932c.h"
|
||||
#include "machine/macadb.h"
|
||||
#include "machine/ncr5390.h"
|
||||
#include "machine/nscsi_bus.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/swim1.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/z80scc.h"
|
||||
#include "sound/asc.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "softlist_dev.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "formats/ap_dsk35.h"
|
||||
|
||||
#define C7M (7833600)
|
||||
#define C15M (C7M*2)
|
||||
#define C32M (C15M*2)
|
||||
@ -934,27 +921,6 @@ INPUT_PORTS_END
|
||||
MACHINE DRIVERS
|
||||
***************************************************************************/
|
||||
|
||||
static void mac_nubus_cards(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("m2video", NUBUS_M2VIDEO); /* Apple Macintosh II Video Card */
|
||||
device.option_add("48gc", NUBUS_48GC); /* Apple 4*8 Graphics Card */
|
||||
device.option_add("824gc", NUBUS_824GC); /* Apple 8*24 Graphics Card */
|
||||
device.option_add("cb264", NUBUS_CB264); /* RasterOps ColorBoard 264 */
|
||||
device.option_add("vikbw", NUBUS_VIKBW); /* Moniterm Viking board */
|
||||
device.option_add("image", NUBUS_IMAGE); /* Disk Image Pseudo-Card */
|
||||
device.option_add("specpdq", NUBUS_SPECPDQ); /* SuperMac Spectrum PDQ */
|
||||
device.option_add("m2hires", NUBUS_M2HIRES); /* Apple Macintosh II Hi-Resolution Card */
|
||||
device.option_add("spec8s3", NUBUS_SPEC8S3); /* SuperMac Spectrum/8 Series III */
|
||||
// device.option_add("thundergx", NUBUS_THUNDERGX); /* Radius Thunder GX (not yet) */
|
||||
device.option_add("radiustpd", NUBUS_RADIUSTPD); /* Radius Two Page Display */
|
||||
device.option_add("asmc3nb", NUBUS_ASNTMC3NB); /* Asante MC3NB Ethernet card */
|
||||
device.option_add("portrait", NUBUS_WSPORTRAIT); /* Apple Macintosh II Portrait video card */
|
||||
device.option_add("enetnb", NUBUS_APPLEENET); /* Apple NuBus Ethernet */
|
||||
device.option_add("bootbug", NUBUS_BOOTBUG); /* Brigent BootBug debugger card */
|
||||
device.option_add("quadralink", NUBUS_QUADRALINK); /* AE Quadralink serial card */
|
||||
device.option_add("laserview", NUBUS_LASERVIEW); /* Sigma Designs LaserView monochrome video card */
|
||||
}
|
||||
|
||||
void macquadra_state::macqd700(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
|
Loading…
Reference in New Issue
Block a user