140 lines
2.4 KiB
C++
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());
|
|
}
|
|
}
|