Эмулятор 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;
}