- 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);
|
fread(memory, 1024, 48, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
set_memory(memory);
|
z80::reset(memory);
|
||||||
}
|
}
|
||||||
110
z80.cpp
110
z80.cpp
@@ -161,6 +161,20 @@ namespace z80
|
|||||||
*a = *a + b;
|
*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)
|
void INC8(uint8_t *reg)
|
||||||
{
|
{
|
||||||
reg++;
|
reg++;
|
||||||
@@ -197,6 +211,11 @@ namespace z80
|
|||||||
if (rF & fC) *a--;
|
if (rF & fC) *a--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NEG()
|
||||||
|
{
|
||||||
|
rA = ~rA;
|
||||||
|
}
|
||||||
|
|
||||||
void AND(uint8_t b)
|
void AND(uint8_t b)
|
||||||
{
|
{
|
||||||
rA = rA & b;
|
rA = rA & b;
|
||||||
@@ -237,6 +256,16 @@ namespace z80
|
|||||||
// [TODO]
|
// [TODO]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RRD()
|
||||||
|
{
|
||||||
|
// [TODO]
|
||||||
|
}
|
||||||
|
|
||||||
|
void RLD()
|
||||||
|
{
|
||||||
|
// [TODO]
|
||||||
|
}
|
||||||
|
|
||||||
void DAA()
|
void DAA()
|
||||||
{
|
{
|
||||||
// [TODO]
|
// [TODO]
|
||||||
@@ -282,12 +311,27 @@ namespace z80
|
|||||||
// [TODO]
|
// [TODO]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RETN()
|
||||||
|
{
|
||||||
|
// [TODO]
|
||||||
|
}
|
||||||
|
|
||||||
|
void RETI()
|
||||||
|
{
|
||||||
|
// [TODO]
|
||||||
|
}
|
||||||
|
|
||||||
void RST(uint8_t vec)
|
void RST(uint8_t vec)
|
||||||
{
|
{
|
||||||
// [TODO]
|
// [TODO]
|
||||||
}
|
}
|
||||||
|
|
||||||
void IN(uint8_t *dir, uint8_t val)
|
void IM(uint8_t mode)
|
||||||
|
{
|
||||||
|
// [TODO]
|
||||||
|
}
|
||||||
|
|
||||||
|
void IN(uint8_t *reg, uint8_t dir)
|
||||||
{
|
{
|
||||||
// [TODO]
|
// [TODO]
|
||||||
}
|
}
|
||||||
@@ -1448,4 +1492,68 @@ namespace z80
|
|||||||
case 0xFF: SET(7, &memory[rIX+LD8()], _rA); break;
|
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