2015-07-14 8 views
8

Nella pagina 87 di the Game Boy CPU Manual si afferma che l'istruzione CP n imposta il flag di trasporto quando non c'era un prestito e che ciò significa che A < n. Questo sembra essere in conflitto, perché il flag di riporto viene impostato quando A > n.Qual è il comportamento del flag di carry per CP su un Game Boy?

Un esempio: se A=0 e B=1, CP B imposta i flag come SUB A, B, che è 0 - 1. Questo diventa 0 + 255 = 255 e carry flag non è impostato, anche se A < B.

Mi sono imbattuto in questo stesso problema anche in altri documenti Z80, quindi non credo che questo sia un refuso.

Sto fraintendendo come prendere in prestito e SUB lavoro o c'è qualcos'altro in corso? SUB non è uguale a ADD con il complemento a due in termini di bandiere?

risposta

10

Il manuale della CPU di GameBoy ha il contrario. SUB, SBC e CP impostano tutti la bandiera di trasporto quando è in prestito. Se viene eseguito SUB/SBC/CP A,n, carry viene impostato se n > A altrimenti è chiaro.

Questo è coerente con l'operazione Z-80 (e 8080). Allo stesso modo MAME e MESS implementano il trasporto the same way.