fullsnes wrote:SPC700 Division Overflow/Result (DIV YA,X opcode)
The overall division mechanism (with and without overflows) is:
Code: Select all
H = (X AND 0Fh)<=(Y AND 0Fh) ;half carry flag (odd dirt effect)
Temp = YA
FOR i=1 TO 9
Temp=Temp*2 ;\rotate within 17bits
IF Temp AND 20000h THEN Temp=(Temp XOR 20001h) ;/
IF Temp>=(X*200h) THEN Temp=(Temp XOR 1)
IF Temp AND 1 THEN Temp=(Temp-(X*200h)) AND 1FFFFh
NEXT i
A = (Temp AND FFh) ;result.bit7-0
V = (Temp.Bit8=1) ;result.bit8
Y = (Temp/200h) ;remainder (aka temp.bit9-16)
N = (A.Bit7=1) ;sign-flag (on result.bit7) (though division is unsigned)
Z = (A=00h) ;zero-flag (on result.bit7-0)