-ADD_LIBRARY(wenboicore SHARED GameBoy.cc GBMemory.cc GBRom.cc GBVideo.cc MBC.cc NoMBC.cc MBC1.cc util.cc)
+ADD_LIBRARY(wenboicore STATIC GameBoy.cc GBMemory.cc GBRom.cc GBVideo.cc MBC.cc NoMBC.cc MBC1.cc util.cc)
#ifndef GBMEMORY_H
#define GBMEMORY_H
+#pragma warning(disable:4351)
+
#include "../common/sized_types.h"
#include <map>
if (newscreen[line_base+screen_x+x]==0 ||
check_bit(v[i].flags,7)==false)
{
- newscreen[line_base+screen_x+x] = color | (pal_num + 1 << 4);
+ newscreen[line_base+screen_x+x] = color | (pal_num + (1 << 4));
}
}
- //logger.trace(pal_num + 1 << 4);
+ //logger.trace(pal_num + (1 << 4));
}
cur_x = v[i].x;
GameBoy gb;
GameBoy::run_status status;
bool isPaused;
- int frameCount;
+ unsigned int frameCount;
QtBoiEmuThread(QObject *parent);
~QtBoiEmuThread();
QtBoiMainWindow::QtBoiMainWindow(QWidget *parent)
:QMainWindow(parent), emuThread(0)
{
- screenImage = new QImage(160, 144, QImage::Format_Indexed8);
+ screenImage = new QImage(160, 144, QImage::Format_RGB32);
screenImage->setNumColors(7);
// gray palette
//screenImage->setColor(6, qRgb(0,0,0));
//screenImage->setColor(0, qRgb(255,255,255));
// greenish palette
+ /*
screenImage->setColor(6, qRgb(64,64,64));
screenImage->setColor(5, qRgb(82,82,53));
screenImage->setColor(4, qRgb(101,101,42));
screenImage->setColor(2, qRgb(139,139,21));
screenImage->setColor(1, qRgb(166,166,10));
screenImage->setColor(0, qRgb(192,192,0));
+ */
emuThread = new QtBoiEmuThread(this);
emuThread->start();
void QtBoiMainWindow::onRedraw(const uchar *buffer)
{
- uchar *pixels = screenImage->bits();
- memcpy(pixels, buffer, 160*144);
+ uint *pixels = reinterpret_cast<uint*>(screenImage->bits());
+ //memcpy(pixels, buffer, 160*144);
+ for (int y=0; y<144; y++)
+ for (int x=0; x<160; x++) {
+ unsigned int val = 255-buffer[160*y+x]*42;
+ pixels[160*y+x]=(val<<16)|(val<<8)|val;
+ }
screen->setPixmap(QPixmap::fromImage(screenImage->scaled(320,288)));
}
#include "CodeBlock.h"
#include <algorithm>
-#include <ext/functional>
CodeBlock::CodeBlock(address start): //< creates an empty CodeBlock
type(BLOCK),
xrefs(),
name()
{
- using std::bind2nd;
- using __gnu_cxx::select1st;
- using std::equal_to;
block.end = addr;
- // HAHA! I'M USING STL EXTENSIONS!!!1
- DisassemblyIterator first = std::find_if(block.disassembly.begin(),
- block.disassembly.end(),
- compose1(bind2nd(equal_to<address>(), addr),
- select1st<DisassemblyItem>()));
- DisassemblyIterator tmp = first;
+ DisassemblyIterator tmp;
+ for (tmp=block.disassembly.begin(); tmp!=block.disassembly.end(); ++tmp)
+ {
+ if (tmp->first == addr)
+ break;
+ }
+
+ DisassemblyIterator first=tmp;
+
this->add_xref((--tmp)->first, Instruction::OTHER);
DisassemblyIterator last = block.disassembly.end();
{
address src = start+2*i;
address dst = gb.memory.read16(src);
- list<CodeBlock>::iterator i = find_block(pending, dst);
- if (i == pending.end())
+ list<CodeBlock>::iterator it = find_block(pending, dst);
+ if (it == pending.end())
{
logger.trace("jump table dst block at 0x",std::hex, dst);
pending.push_back(CodeBlock(dst));
}
else
{
- i->add_xref(src, Instruction::JUMP_TABLE_JUMP);
+ it->add_xref(src, Instruction::JUMP_TABLE_JUMP);
}
}
}