mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-16 18:30:32 +00:00
Implemented DJNZ.
This commit is contained in:
parent
bdf07c3dc9
commit
82017c4aea
@ -125,6 +125,8 @@ struct MicroOp {
|
|||||||
SetInstructionPage,
|
SetInstructionPage,
|
||||||
CalculateIndexAddress,
|
CalculateIndexAddress,
|
||||||
|
|
||||||
|
DJNZ,
|
||||||
|
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
Type type;
|
Type type;
|
||||||
@ -346,7 +348,8 @@ template <class T> class Processor: public MicroOpScheduler<MicroOp> {
|
|||||||
DEC_INC_DEC_LD(bc_, bc_.bytes.low),
|
DEC_INC_DEC_LD(bc_, bc_.bytes.low),
|
||||||
|
|
||||||
/* 0x0f RRCA */ Program({MicroOp::RRCA}),
|
/* 0x0f RRCA */ Program({MicroOp::RRCA}),
|
||||||
/* 0x10 DJNZ */ XX, /* 0x11 LD DE, nn */ Program(FETCH16(de_, pc_)),
|
/* 0x10 DJNZ */ Program(WAIT(1), FETCH(temp8_, pc_), {MicroOp::DJNZ}, WAIT(5), {MicroOp::CalculateIndexAddress, &pc_.full}, {MicroOp::Move16, &temp16_.full, &pc_.full}),
|
||||||
|
/* 0x11 LD DE, nn */ Program(FETCH16(de_, pc_)),
|
||||||
/* 0x12 LD (DE), A */ Program(STOREL(a_, de_)),
|
/* 0x12 LD (DE), A */ Program(STOREL(a_, de_)),
|
||||||
|
|
||||||
/* 0x13 INC DE; 0x14 INC D; 0x15 DEC D; 0x16 LD D, n */
|
/* 0x13 INC DE; 0x14 INC D; 0x15 DEC D; 0x16 LD D, n */
|
||||||
@ -607,6 +610,16 @@ template <class T> class Processor: public MicroOpScheduler<MicroOp> {
|
|||||||
|
|
||||||
#undef set_parity
|
#undef set_parity
|
||||||
|
|
||||||
|
#pragma mark - Relative jumps
|
||||||
|
|
||||||
|
case MicroOp::DJNZ:
|
||||||
|
bc_.bytes.high--;
|
||||||
|
if(!bc_.bytes.high) {
|
||||||
|
move_to_next_program();
|
||||||
|
checkSchedule();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
#pragma mark - 8-bit arithmetic
|
#pragma mark - 8-bit arithmetic
|
||||||
|
|
||||||
case MicroOp::CP8: {
|
case MicroOp::CP8: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user