Mercurial > repos > blastem
changeset 1705:9ab64ef5cba0
Initial stab at overflow flag implementation in CPU DSL. Probably broken for subtraction
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 28 Jan 2019 21:15:27 -0800 |
parents | 89932fd29abd |
children | c2324849a5e5 |
files | cpu_dsl.py ztestrun.c |
diffstat | 2 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/cpu_dsl.py Mon Jan 28 20:54:55 2019 -0800 +++ b/cpu_dsl.py Mon Jan 28 21:15:27 2019 -0800 @@ -304,7 +304,7 @@ else: lastDst = prog.resolveParam(prog.lastDst, None, {}) storage = prog.flags.getStorage(flag) - if calc == 'bit' or calc == 'sign' or calc == 'carry' or calc == 'half': + if calc == 'bit' or calc == 'sign' or calc == 'carry' or calc == 'half' or calc == 'overflow': myRes = lastDst if calc == 'sign': resultBit = prog.paramSize(prog.lastDst) - 1 @@ -313,6 +313,9 @@ elif calc == 'half': resultBit = 4 myRes = '({a} ^ {b} ^ {res})'.format(a = prog.lastA, b = prog.lastB, res = lastDst) + elif calc == 'overflow': + resultBit = prog.paramSize(prog.lastDst) - 1 + myRes = '((~({a} ^ {b})) & ({a} ^ {res}))'.format(a = prog.lastA, b = prog.lastB, res = lastDst) else: resultBit = int(resultBit) if type(storage) is tuple: @@ -347,9 +350,7 @@ reg = prog.resolveParam(storage, None, {}) output.append('\n\t{reg} = {res} == 0;'.format( reg = reg, res = lastDst - )) - elif calc == 'overflow': - pass + )) elif calc == 'parity': pass else:
--- a/ztestrun.c Mon Jan 28 20:54:55 2019 -0800 +++ b/ztestrun.c Mon Jan 28 21:15:27 2019 -0800 @@ -116,7 +116,7 @@ printf("Flags: SZYHXVNC\n" " %d%d%d%d%d%d%d%d\n", context->last_flag_result >> 7, context->zflag != 0, context->last_flag_result >> 5 & 1, context->chflags >> 3 & 1, - context->last_flag_result >> 3 & 1, context->pvflag != 0, context->nflag, context->chflags >> 7 & 1 + context->last_flag_result >> 3 & 1, context->pvflag != 0, context->nflag != 0, context->chflags >> 7 & 1 ); puts("--Alternate Regs--"); printf("A: %X\nB: %X\nC: %X\nD: %X\nE: %X\nHL: %X\n",