Эмулятор Dendy 8 bit (Dendy Foreve)

 

Я пишу ультра-супер эмулятор Денди , она же Nintendo 8 bit. Эмулятор создается на языке C++, но в основном используются С-конструкции. Скорость его создания сильно замедленна из-за параллельного изученя возможностей DirectX. Его основные возможности , которые планируется реализовать:

- Более насыщенные цвета с возможностью регулировки цветности.

- Звук с мегабасом для полноты ощущений.

 

// Dendy FOREVER - Emulator Nintendo 8 bit by Infinity

#include <iostream.h>

 typedef unsigned char _8bit;

typedef unsigned short int _16bit;

 _8bit A; // аккумулятор

_8bit X; // index

_8bit Y;//index

_8bit F[7]; // flag 7=s 6=v 4=b 3=d 2=i 1=z 0=c

_8bit S[255]; // stack

 _8bit pos=0;

_8bit &oc=pos;

 enum Flags {c=0,z,i,d,b,v=6,n};

 

bool immediate=0;

bool AbcZero=0;

 void SetModeMem();//?

 int *pMem=new int;

int &Memory = *pMem;

 

#include "pcode.h" //OpCode include ADD и тд.

#include "Fileopen.h"

  

int main ()

{

int cycles=0;

 Load();

for (;;){

int OpCode=Memory++;

  switch (OpCode)

{

case 0x8A :

{

TXA();

cout<<"Opcode "<<OpCode<< "RUUUNNNN";

break;

}

case 0x9A :

{

TXS();

break;

}

default: cout<<"Opcode "<<OpCode<< "Not implemented yet";

 

};

 

cout<< cycles++<<endl;

 

}

 

return 0;

 

//////////////////////////////////////////////

// OpCode

 

void ADC()

{

A=A+ F[c]+ Memory++;

F[c]=1;

F[n]=1;

F[z]=1;

F[v]=1;

}

 

void AND()

{

A&= Memory;

F[n]=1;

F[z]=1;

 

}

 

void ASL()

{

Memory<<=1;

F[n]=1;

F[z]=1;

F[c]=1;

 

}

 

 

 

void BCC()

{

F[c]=0;

}

 

 

void BCS()

{}

 

void BEQ()

{}

 

void BIT()

{}

 

void BMI()

{}

 

void BNE()

{}

 

void BPL()

{}

 

void BRK()

{}

 

void BVC()

{}

 

void BVS()

{}

 

inline static void CLC()

{

F[c]=0;

}

 

void CLD() //?

{

F[d]=0;

}

 

void CLI()

{

F[i]=0;

}

 

void CLV()

{

F[v]=0;

}

 

void SMP()

{}

 

void CPX()

{}

 

void CPY()

{}

 

 

void DEC()

{

 

Memory--;

 

}

 

 

void DEA()

{

A--;

F[z]=1;

F[n]=1;

}

 

 

inline static void DEX()

{

__asm {

dec X;

}

//X--;

}

 

inline static void DEY()

{

 

// Y--;

__asm{

dec X;

}

 

}

 

 

void EOR()

{}

 

 

void INA()

{

A++;

F[z]=1;

F[n]=1;

}

 

 

void INC()

{

Memory++;

}

 

void INX()

{

X++;

}

 

void INY()

{

Y++;

}

 

void JMP(_8bit addres)

{}

 

 

_8bit JSR()//?

{

 

return 0;

}

 

 

void LDA()

{

A=Memory++;

F[z]=1;

F[n]=1;

}

 

void LDX()

{

X=Memory++;

F[z]=1;

F[n]=1;

 

}

 

void LDY()

{

Y=Memory++;

F[z]=1;

F[n]=1;

 

}

 

void LSR() //?

{

Memory>>=1;

 

 

 

 

}

 

void NOP()

{

/////NO OPERATIONS/////

}

 

void ORA()//?

{

A=Memory || A;

 

F[n]=1;

F[z]=1;

 

 

}

 

void PHA()

{

 

// нельзя так , данные будут перезаписыватся

S[oc]=A;

oc++;

 

}

 

void PLA()

{

oc--;

A=S[oc];

F[z]=1;

F[n]=1;

 

}

 

void PLX()

{

oc--;

X=S[oc];

F[z]=1;

F[n]=1;

 

}

 

void PLY()

{

oc--;

A=S[oc];

F[z]=1;

F[n]=1;

}

 

 

void PHP()

{}

 

void PLP()

{}

 

void ROL ()

{}

 

void ROR()

{}

 

void RTI()

{}

 

void RTS()

{}

 

void SBC()

{}

 

void SEC()

{

F[c]=1;

}

 

void SED()

{

F[d]=1;

}

 

void SEI()

{

F[i]=0;

}

 

void STA()

{

Memory=A;

}

 

void STX()

{

Memory=X;

}

 

void STY()

{

Memory=Y;

}

 

void TAX()

{

X=A;

F[n]=1;

F[z]=1;

 

}

 

void TAY()

{

Y=A;

F[n]=1;

F[z]=1;

 

}

 

void TSX()

{

oc--;

X=S[oc];

F[z]=1;

F[n]=1;

 

}

 

void TXA()

{

A=X;

F[n]=1;

F[z]=1;

 

}

 

void TXS()

{

S[oc]=X;

oc++;

F[n]=1;

F[z]=1;

 

}

 

void TYA()

{

A=Y;

F[n]=1;

F[z]=1;

 

}