- Working on Misc Table
This commit is contained in:
2
main.cpp
2
main.cpp
@@ -10,5 +10,5 @@ int main(int argc, char *argv[])
|
||||
fread(memory, 1024, 48, f);
|
||||
fclose(f);
|
||||
|
||||
set_memory(memory);
|
||||
z80::reset(memory);
|
||||
}
|
||||
110
z80.cpp
110
z80.cpp
@@ -161,6 +161,20 @@ namespace z80
|
||||
*a = *a + b;
|
||||
}
|
||||
|
||||
void ADC16(uint16_t* a, uint16_t b)
|
||||
{
|
||||
// [TODO] operadors mes grans, per a no perdre el carry_out
|
||||
*a = *a + b;
|
||||
if (rF & fC) *a++;
|
||||
}
|
||||
|
||||
void SBC16(uint16_t* a, uint16_t b)
|
||||
{
|
||||
// [TODO] operadors mes grans, per a no perdre el carry_out
|
||||
*a = *a + b;
|
||||
if (rF & fC) *a--;
|
||||
}
|
||||
|
||||
void INC8(uint8_t *reg)
|
||||
{
|
||||
reg++;
|
||||
@@ -197,6 +211,11 @@ namespace z80
|
||||
if (rF & fC) *a--;
|
||||
}
|
||||
|
||||
void NEG()
|
||||
{
|
||||
rA = ~rA;
|
||||
}
|
||||
|
||||
void AND(uint8_t b)
|
||||
{
|
||||
rA = rA & b;
|
||||
@@ -237,6 +256,16 @@ namespace z80
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void RRD()
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void RLD()
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void DAA()
|
||||
{
|
||||
// [TODO]
|
||||
@@ -282,12 +311,27 @@ namespace z80
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void RETN()
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void RETI()
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void RST(uint8_t vec)
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void IN(uint8_t *dir, uint8_t val)
|
||||
void IM(uint8_t mode)
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
|
||||
void IN(uint8_t *reg, uint8_t dir)
|
||||
{
|
||||
// [TODO]
|
||||
}
|
||||
@@ -1448,4 +1492,68 @@ namespace z80
|
||||
case 0xFF: SET(7, &memory[rIX+LD8()], _rA); break;
|
||||
}
|
||||
}
|
||||
|
||||
void MISC_INSTRUCTIONS()
|
||||
{
|
||||
const uint8_t opcode = memory[rPC++];
|
||||
t_states+=4;
|
||||
uint16_t tmp;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case 0x40: IN(_rB, rC); break;
|
||||
case 0x41: OUT(rC, rB); break;
|
||||
case 0x42: SBC16(_rHL, rBC); break;
|
||||
case 0x43: rM16(LD16()) = rBC; break;
|
||||
case 0x44: NEG(); break;
|
||||
case 0x45: RETN(); break;
|
||||
case 0x46: IM(0); break;
|
||||
case 0x47: rI = rA; break;
|
||||
case 0x48: IN(_rC, rC); break;
|
||||
case 0x49: OUT(rC, rC); break;
|
||||
case 0x4A: ADC16(_rHL, rBC); break;
|
||||
case 0x4B: rBC = rM16(LD16()); break;
|
||||
case 0x4D: RETI(); break;
|
||||
case 0x4F: rR = rA; break;
|
||||
|
||||
case 0x50: IN(_rD, rC); break;
|
||||
case 0x51: OUT(rC, rD); break;
|
||||
case 0x52: SBC16(_rHL, rDE); break;
|
||||
case 0x53: rM16(LD16()) = rDE; break;
|
||||
case 0x56: IM(1); break;
|
||||
case 0x57: rA = rI; break;
|
||||
case 0x58: IN(_rE, rC); break;
|
||||
case 0x59: OUT(rC, rE); break;
|
||||
case 0x5A: ADC16(_rHL, rDE); break;
|
||||
case 0x5B: rDE = rM16(LD16()); break;
|
||||
case 0x5E: IM(2); break;
|
||||
case 0x5F: rA = rR; break;
|
||||
|
||||
case 0x60: IN(_rH, rC); break;
|
||||
case 0x61: OUT(rC, rH); break;
|
||||
case 0x62: SBC16(_rHL, rHL); break;
|
||||
case 0x63: rM16(LD16()) = rHL; break;
|
||||
case 0x67: RRD(); break;
|
||||
case 0x68: IN(_rL, rC); break;
|
||||
case 0x69: OUT(rC, rL); break;
|
||||
case 0x6A: ADC16(_rHL, rHL); break;
|
||||
case 0x6B: rHL = rM16(LD16()); break;
|
||||
case 0x6F: RLD(); break;
|
||||
|
||||
case 0x70: IN(_rF, rC); break;
|
||||
case 0x71: OUT(rC, 0); break;
|
||||
case 0x72: SBC16(_rHL, rSP); break;
|
||||
case 0x73: rM16(LD16()) = rSP; break;
|
||||
case 0x78: IN(_rA, rC); break;
|
||||
case 0x79: OUT(rC, rA); break;
|
||||
case 0x7A: ADC16(_rHL, rSP); break;
|
||||
case 0x7B: rSP = rM16(LD16()); break;
|
||||
|
||||
// CONT...
|
||||
|
||||
default: INVALID(); break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user