2015-07-14 14 views
8

Auf der Seite 87 von the Game Boy CPU Manual wird behauptet, dass die CP n Anweisung das Übertragsflag setzt, wenn es keinen Kredit gab und dass es bedeutet, dass A < n. Dies scheint sich zu widersprechen, da das Übertrags-Flag gesetzt ist, wenn A > n.Wie verhält sich das Carry-Flag für CP auf einem Game Boy?

Ein Beispiel: Wenn A=0 und B=1, CP B setzt die Flaggen wie SUB A, B, die auf 0 - 1. Dies wird 0 + 255 = 255 und der Carry-Flag nicht gesetzt ist, obwohl A < B.

Ich stieß auf das gleiche Problem in anderen Z80-Dokumenten, so glaube ich nicht, dass dies ein Tippfehler ist.

Bin ich falsch verstanden, wie borg und SUB arbeiten oder gibt es noch etwas anderes? Ist SUB ungleich ADD mit Zweierkomplement in Bezug auf Flags?

Antwort

10

Das GameBoy CPU Handbuch hat es rückwärts. SUB, SBC und CP alle setzen das Carry-Flag, wenn es borgen. Wenn SUB/SBC/CP A,n ausgeführt wird, dann wird carry gesetzt, wenn n > A ansonsten ist es klar.

Dies entspricht dem Z-80 (und 8080) Betrieb. Auch MAME und MESS implementieren the same way.