#include "compiler.h"
#include "resource.h"
#include "np2.h"
#include "viewer.h"
#include "viewmem.h"
#include "cpucore.h"
void viewmem_read(VIEWMEM_T *cfg, UINT32 adrs, UINT8 *buf, UINT32 size) {
if (!size) {
return;
}
// Main Memory
if (adrs < 0xa4000) {
if ((adrs + size) <= 0xa4000) {
CopyMemory(buf, mem + adrs, size);
return;
}
else {
UINT32 len;
len = 0xa4000 - adrs;
CopyMemory(buf, mem + adrs, len);
buf += len;
size -= len;
adrs = 0xa4000;
}
}
// CG-Window‚Í–³Ž‹
if (adrs < 0xa5000) {
if ((adrs + size) <= 0xa5000) {
ZeroMemory(buf, size);
return;
}
else {
UINT32 len;
len = 0xa5000 - adrs;
ZeroMemory(buf, len);
buf += len;
size -= len;
adrs = 0xa5000;
}
}
// Main Memory
if (adrs < 0xa8000) {
if ((adrs + size) <= 0xa8000) {
CopyMemory(buf, mem + adrs, size);
return;
}
else {
UINT32 len;
len = 0xa8000 - adrs;
CopyMemory(buf, mem + adrs, len);
buf += len;
size -= len;
adrs = 0xa8000;
}
}
// Video Memory
if (adrs < 0xc0000) {
UINT32 page;
page = ((cfg->vram)?VRAM_STEP:0);
if ((adrs + size) <= 0xc0000) {
CopyMemory(buf, mem + page + adrs, size);
return;
}
else {
UINT32 len;
len = 0xc0000 - adrs;
CopyMemory(buf, mem + page + adrs, len);
buf += len;
size -= len;
adrs = 0xc0000;
}
}
// Main Memory
if (adrs < 0xe0000) {
if ((adrs + size) <= 0xe0000) {
CopyMemory(buf, mem + adrs, size);
return;
}
else {
UINT32 len;
len = 0xe0000 - adrs;
CopyMemory(buf, mem + adrs, len);
buf += len;
size -= len;
adrs = 0xe0000;
}
}
// Video Memory
if (adrs < 0xe8000) {
UINT32 page;
page = ((cfg->vram)?VRAM_STEP:0);
if ((adrs + size) <= 0xe8000) {
CopyMemory(buf, mem + page + adrs, size);
return;
}
else {
UINT32 len;
len = 0xe8000 - adrs;
CopyMemory(buf, mem + page + adrs, len);
buf += len;
size -= len;
adrs = 0xe8000;
}
}
// BIOS
if (adrs < 0x0f8000) {
if ((adrs + size) <= 0x0f8000) {
CopyMemory(buf, mem + adrs, size);
return;
}
else {
UINT32 len;
len = 0x0f8000 - adrs;
CopyMemory(buf, mem + adrs, len);
buf += len;
size -= len;
adrs = 0x0f8000;
}
}
// BIOS/ITF
if (adrs < 0x100000) {
UINT32 page;
page = ((cfg->itf)?VRAM_STEP:0);
if ((adrs + size) <= 0x100000) {
CopyMemory(buf, mem + page + adrs, size);
return;
}
else {
UINT32 len;
len = 0x100000 - adrs;
CopyMemory(buf, mem + page + adrs, len);
buf += len;
size -= len;
adrs = 0x100000;
}
}
// HMA
if (adrs < 0x10fff0) {
UINT32 adrs2;
adrs2 = adrs & 0xffff;
adrs2 += ((cfg->A20)?VRAM_STEP:0);
if ((adrs + size) <= 0x10fff0) {
CopyMemory(buf, mem + adrs2, size);
return;
}
else {
UINT32 len;
len = 0x10fff0 - adrs;
CopyMemory(buf, mem + adrs2, len);
buf += len;
size -= len;
adrs = 0x10fff0;
}
}
}
RetroPC.NET-CVS <cvs@retropc.net>