BizHawk/waterbox/ngp/Z80_interface.cpp

140 lines
2.4 KiB
C++

//---------------------------------------------------------------------------
// NEOPOP : Emulator as in Dreamland
//
// Copyright (c) 2001-2002 by neopop_uk
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version. See also the license.txt file for
// additional informations.
//---------------------------------------------------------------------------
#include "neopop.h"
#include "mem.h"
#include "sound.h"
#include "Z80_interface.h"
#include "interrupt.h"
#include "dma.h"
namespace MDFN_IEN_NGP
{
static uint8 CommByte;
static bool Z80Enabled;
uint8 Z80_ReadComm(void)
{
return (CommByte);
}
void Z80_WriteComm(uint8 data)
{
CommByte = data;
}
static uint8 NGP_z80_readbyte(uint16 address)
{
if (address <= 0xFFF)
return loadB(0x7000 + address);
if (address == 0x8000)
{
return CommByte;
}
return 0;
}
//=============================================================================
static void NGP_z80_writebyte(uint16 address, uint8 value)
{
if (address <= 0x0FFF)
{
storeB(0x7000 + address, value);
return;
}
if (address == 0x8000)
{
CommByte = value;
return;
}
if (address == 0x4001)
{
Write_SoundChipLeft(value);
return;
}
if (address == 0x4000)
{
Write_SoundChipRight(value);
return;
}
if (address == 0xC000)
{
TestIntHDMA(6, 0x0C);
}
}
//=============================================================================
static void NGP_z80_writeport(uint16 port, uint8 value)
{
//printf("Portout: %04x %02x\n", port, value);
z80_set_interrupt(0);
}
static uint8 NGP_z80_readport(uint16 port)
{
//printf("Portin: %04x\n", port);
return 0;
}
void Z80_nmi(void)
{
z80_nmi();
}
void Z80_irq(void)
{
z80_set_interrupt(1);
}
void Z80_reset(void)
{
Z80Enabled = 0;
z80_writebyte = NGP_z80_writebyte;
z80_readbyte = NGP_z80_readbyte;
z80_writeport = NGP_z80_writeport;
z80_readport = NGP_z80_readport;
z80_init();
z80_reset();
}
void Z80_SetEnable(bool set)
{
Z80Enabled = set;
if (!set)
z80_reset();
}
bool Z80_IsEnabled(void)
{
return (Z80Enabled);
}
int Z80_RunOP(void)
{
if (!Z80Enabled)
return (-1);
return (z80_do_opcode());
}
}