That Guy
Meubilair
- Lid geworden
- 28 nov 2006
- Berichten
- 5.010
Hallo allemaal,
[... Dit is mischien niet het meest practische forum om neer te zetten, maargoed]
ik ben druk bezig met het emuleren van een CPU (Z80); nu staat dit in de docs over de INC r-operatie:
nu moet ik dus deze nog doen:
Dus, hier mijn vragen:
Het hele projectje is echt leuk, alleen de bit/byte-magie wil af en toe nog niet helemaal... Wie o wie kan mij de goede richting op wijzen?
Alvast bedank! :thumb:
[... Dit is mischien niet het meest practische forum om neer te zetten, maargoed]
ik ben druk bezig met het emuleren van een CPU (Z80); nu staat dit in de docs over de INC r-operatie:
Nu heb ik deze code (daadwerkelijke code is anders, maar het idee is uiteraard hetzelfde):INC n
Description:
Increment register n.
Use with:
n = A,B,C,D,E,H,L,(HL)
Flags affected:
Z - Set if result is zero.
N - Reset.
H - Set if carry from bit 3.
C - Not affected.
Code:Instruction Parameters Opcode Cycles ------------------------------------ INC B 04 4
Code:
void inc_b()
{
register.B++;
register.B &= 255;
register.F |= (register.B == 0) ? flags.ZERO : 0x00; // zet de zero-flag 'aan' als resultaat 0 is
}
N - Reset.
H - Set if carry from bit 3.
Dus, hier mijn vragen:
- Reset; hoe 'reset' ik een flag? Dus, 0101b en een flag van 0100b moet 0001b worden. Is dit hetzelfde als 0101b - 0100b? (dus gewoon aftrekken?)
- Half-carry: hoe check ik op een carry van het 3e bit? Kan ik checken of het groter is dan 0x07 (eh, 3e bit en groter 'aan'), maar alleen als het al niet groter was... oid? Shiften?
Het hele projectje is echt leuk, alleen de bit/byte-magie wil af en toe nog niet helemaal... Wie o wie kan mij de goede richting op wijzen?
Alvast bedank! :thumb:
Laatst bewerkt: