| 58 | } |
| 59 | |
| 60 | U32 div16(CPU* cpu, U16 src) { |
| 61 | U32 num = ((U32)DX << 16) | AX; |
| 62 | |
| 63 | if (src==0) { |
| 64 | cpu->prepareException(EXCEPTION_DIVIDE, 0); |
| 65 | return 0; |
| 66 | } |
| 67 | U32 quo=num/src; |
| 68 | U16 rem=(U16)(num % src); |
| 69 | U16 quo16=(U16)quo; |
| 70 | if (quo!=(U32)quo16) { |
| 71 | cpu->prepareException(EXCEPTION_DIVIDE, 1); |
| 72 | return 0; |
| 73 | } |
| 74 | DX=rem; |
| 75 | AX=quo16; |
| 76 | return 1; |
| 77 | } |
| 78 | |
| 79 | U32 idiv16(CPU* cpu, S16 src) { |
| 80 | S32 num = (S32)(((U32)DX << 16) | AX); |
no test coverage detected