Annotation of nono/exp/optestxp/optestxp_gen.cpp, revision 1.1.1.2

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2023 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
1.1.1.2 ! root        7: #include "optestxp_subr.h"
1.1       root        8: 
                      9: static std::vector<uint8> values1 = {
                     10:        0x00,
                     11:        0x01,
                     12:        0x0f,
                     13:        0x10,
                     14:        0x7f,
                     15:        0x80,
                     16:        0xff,
                     17: };
                     18: static std::vector<uint8> values2 = {
                     19:        0x00,
                     20:        0x01,
                     21:        0x03,
                     22:        0x55,
                     23:        0x7f,
                     24:        0xaa,
                     25:        0xff,
                     26: };
                     27: 
                     28: static void
                     29: gentest_add()
                     30: {
                     31:        init("add", "testrun2");
                     32: 
1.1.1.2 ! root       33:        out("testexec_%s:\n", testname);
1.1       root       34:        out("   ADD     A,D\n");
                     35:        out("   RET\n");
                     36: 
1.1.1.2 ! root       37:        out_testset();
1.1       root       38: 
                     39:        for (auto dst : values1) {
                     40:                for (auto src : values1) {
                     41:                        uint32 res32 = dst + src;
                     42:                        uint8 res = res32;
                     43:                        hd64180flag inflag;
                     44:                        inflag.N = true;
                     45:                        hd64180flag flag;
                     46:                        flag.Z = (res == 0);
                     47:                        flag.S = ((res & 0x80) != 0);
                     48:                        flag.C = ((res32 & 0x0100) != 0);
                     49:                        flag.PV = vflag_add(dst, src, res);
                     50:                        flag.H = hflag_add(dst, src);
                     51:                        flag.N = false;
                     52:                        out_testdata_run2(dst, inflag, src, res, flag);
                     53:                }
                     54:        }
                     55:        out("   defb    0,0,0,0,0FFH\n");
                     56:        out("\n");
                     57: }
                     58: 
                     59: static void
                     60: gentest_adc()
                     61: {
                     62:        init("adc", "testrun2");
                     63: 
1.1.1.2 ! root       64:        out("testexec_%s:\n", testname);
1.1       root       65:        out("   ADC     A,D\n");
                     66:        out("   RET\n");
                     67: 
1.1.1.2 ! root       68:        out_testset();
1.1       root       69: 
                     70:        for (auto dst : values1) {
                     71:                for (auto src : values1) {
                     72:                        for (int cin = 0; cin <= 1; cin++) {
                     73:                                uint32 res32 = dst + src + cin;
                     74:                                uint8 res = res32;
                     75:                                hd64180flag inflag;
                     76:                                inflag.C = cin;
                     77:                                inflag.N = true;
                     78:                                hd64180flag flag;
                     79:                                flag.Z = (res == 0);
                     80:                                flag.S = ((res & 0x80) != 0);
                     81:                                flag.C = ((res32 & 0x0100) != 0);
                     82:                                flag.PV = vflag_add(dst, src, res);
                     83:                                flag.H = hflag_add(dst, src) | hflag_add(src + dst, cin);
                     84:                                flag.N = false;
                     85:                                out_testdata_run2(dst, inflag, src, res, flag);
                     86:                        }
                     87:                }
                     88:        }
                     89:        out("   defb    0,0,0,0,0FFH\n");
                     90:        out("\n");
                     91: }
                     92: 
                     93: static void
                     94: gentest_sub()
                     95: {
                     96:        init("sub", "testrun2");
                     97: 
1.1.1.2 ! root       98:        out("testexec_%s:\n", testname);
1.1       root       99:        out("   SUB     D\n");
                    100:        out("   RET\n");
                    101: 
1.1.1.2 ! root      102:        out_testset();
1.1       root      103: 
                    104:        for (auto dst : values1) {
                    105:                for (auto src : values1) {
                    106:                        uint32 res32 = dst - src;
                    107:                        uint8 res = res32;
                    108:                        hd64180flag inflag;
                    109:                        inflag.N = false;
                    110:                        hd64180flag flag;
                    111:                        flag.Z = (res == 0);
                    112:                        flag.S = ((res & 0x80) != 0);
                    113:                        flag.C = ((res32 & 0x0100) != 0);
                    114:                        flag.PV = vflag_sub(dst, src, res);
                    115:                        flag.H = hflag_sub(dst, src);
                    116:                        flag.N = true;
                    117:                        out_testdata_run2(dst, inflag, src, res, flag);
                    118:                }
                    119:        }
                    120:        out("   defb    0,0,0,0,0FFH\n");
                    121:        out("\n");
                    122: }
                    123: 
                    124: static void
                    125: gentest_sbc()
                    126: {
                    127:        init("sbc", "testrun2");
                    128: 
1.1.1.2 ! root      129:        out("testexec_%s:\n", testname);
1.1       root      130:        out("   SBC     A,D\n");
                    131:        out("   RET\n");
                    132: 
1.1.1.2 ! root      133:        out_testset();
1.1       root      134: 
                    135:        for (auto dst : values1) {
                    136:                for (auto src : values1) {
                    137:                        for (int cin = 0; cin <= 1; cin++) {
                    138:                                uint32 res32 = dst - src - cin;
                    139:                                uint8 res = res32;
                    140:                                hd64180flag inflag;
                    141:                                inflag.C = cin;
                    142:                                inflag.N = false;
                    143:                                hd64180flag flag;
                    144:                                flag.Z = (res == 0);
                    145:                                flag.S = ((res & 0x80) != 0);
                    146:                                flag.C = ((res32 & 0x0100) != 0);
                    147:                                flag.PV = vflag_sub(dst, src, res);
                    148:                                flag.H = hflag_sub(dst, src) | hflag_sub(dst - src, cin);
                    149:                                flag.N = true;
                    150:                                out_testdata_run2(dst, inflag, src, res, flag);
                    151:                        }
                    152:                }
                    153:        }
                    154:        out("   defb    0,0,0,0,0FFH\n");
                    155:        out("\n");
                    156: }
                    157: 
                    158: static void
                    159: gentest_and()
                    160: {
                    161:        init("and", "testrun2");
                    162: 
1.1.1.2 ! root      163:        out("testexec_%s:\n", testname);
1.1       root      164:        out("   AND     D\n");
                    165:        out("   RET\n");
                    166: 
1.1.1.2 ! root      167:        out_testset();
1.1       root      168: 
                    169:        for (auto dst : values2) {
                    170:                for (auto src : values2) {
                    171:                        uint32 res32 = dst & src;
                    172:                        uint8 res = res32;
                    173:                        hd64180flag inflag;
                    174:                        inflag.H = false;
                    175:                        inflag.N = true;
                    176:                        inflag.C = true;
                    177:                        hd64180flag flag;
                    178:                        flag.Z = (res == 0);
                    179:                        flag.S = ((res & 0x80) != 0);
                    180:                        flag.C = false;
                    181:                        flag.PV = pflag(res);
                    182:                        flag.H = true;
                    183:                        flag.N = false;
                    184:                        out_testdata_run2(dst, inflag, src, res, flag);
                    185:                }
                    186:        }
                    187:        out("   defb    0,0,0,0,0FFH\n");
                    188:        out("\n");
                    189: }
                    190: 
                    191: static void
                    192: gentest_or()
                    193: {
                    194:        init("or", "testrun2");
                    195: 
1.1.1.2 ! root      196:        out("testexec_%s:\n", testname);
1.1       root      197:        out("   OR      D\n");
                    198:        out("   RET\n");
                    199: 
1.1.1.2 ! root      200:        out_testset();
1.1       root      201: 
                    202:        for (auto dst : values2) {
                    203:                for (auto src : values2) {
                    204:                        uint32 res32 = dst | src;
                    205:                        uint8 res = res32;
                    206:                        hd64180flag inflag;
                    207:                        inflag.H = true;
                    208:                        inflag.N = true;
                    209:                        inflag.C = true;
                    210:                        hd64180flag flag;
                    211:                        flag.Z = (res == 0);
                    212:                        flag.S = ((res & 0x80) != 0);
                    213:                        flag.C = false;
                    214:                        flag.PV = pflag(res);
                    215:                        flag.H = false;
                    216:                        flag.N = false;
                    217:                        out_testdata_run2(dst, inflag, src, res, flag);
                    218:                }
                    219:        }
                    220:        out("   defb    0,0,0,0,0FFH\n");
                    221:        out("\n");
                    222: }
                    223: 
                    224: static void
                    225: gentest_xor()
                    226: {
                    227:        init("xor", "testrun2");
                    228: 
1.1.1.2 ! root      229:        out("testexec_%s:\n", testname);
1.1       root      230:        out("   XOR     D\n");
                    231:        out("   RET\n");
                    232: 
1.1.1.2 ! root      233:        out_testset();
1.1       root      234: 
                    235:        for (auto dst : values2) {
                    236:                for (auto src : values2) {
                    237:                        uint32 res32 = dst ^ src;
                    238:                        uint8 res = res32;
                    239:                        hd64180flag inflag;
                    240:                        inflag.H = true;
                    241:                        inflag.N = true;
                    242:                        inflag.C = true;
                    243:                        hd64180flag flag;
                    244:                        flag.Z = (res == 0);
                    245:                        flag.S = ((res & 0x80) != 0);
                    246:                        flag.C = false;
                    247:                        flag.PV = pflag(res);
                    248:                        flag.H = false;
                    249:                        flag.N = false;
                    250:                        out_testdata_run2(dst, inflag, src, res, flag);
                    251:                }
                    252:        }
                    253:        out("   defb    0,0,0,0,0FFH\n");
                    254:        out("\n");
                    255: }
                    256: 
                    257: static void
                    258: gentest_cp()
                    259: {
                    260:        init("cp", "testrun2");
                    261: 
1.1.1.2 ! root      262:        out("testexec_%s:\n", testname);
1.1       root      263:        out("   CP      D\n");
                    264:        out("   RET\n");
                    265: 
1.1.1.2 ! root      266:        out_testset();
1.1       root      267: 
                    268:        for (auto dst : values1) {
                    269:                for (auto src : values1) {
                    270:                        uint32 res32 = dst - src;
                    271:                        uint8 res = res32;
                    272:                        hd64180flag inflag;
                    273:                        inflag.N = false;
                    274:                        hd64180flag flag;
                    275:                        flag.Z = (res == 0);
                    276:                        flag.S = ((res & 0x80) != 0);
                    277:                        flag.C = ((res32 & 0x0100) != 0);
                    278:                        flag.PV = vflag_sub(dst, src, res);
                    279:                        flag.H = hflag_sub(dst, src);
                    280:                        flag.N = true;
                    281:                        out_testdata_run2(dst, inflag, src, dst, flag);
                    282:                }
                    283:        }
                    284:        out("   defb    0,0,0,0,0FFH\n");
                    285:        out("\n");
                    286: }
                    287: 
                    288: static void
                    289: gentest_inc()
                    290: {
                    291:        init("inc", "testrun1");
                    292: 
1.1.1.2 ! root      293:        out("testexec_%s:\n", testname);
1.1       root      294:        out("   INC     A\n");
                    295:        out("   RET\n");
                    296: 
1.1.1.2 ! root      297:        out_testset();
1.1       root      298: 
                    299:        for (auto dst : values1) {
                    300:                for (int cin = 0; cin <= 1; cin++) {
                    301:                        uint32 res32 = dst + 1;
                    302:                        uint8 res = res32;
                    303:                        hd64180flag inflag;
                    304:                        inflag.C = cin;
                    305:                        inflag.N = true;
                    306:                        hd64180flag flag;
                    307:                        flag.Z = (res == 0);
                    308:                        flag.S = ((res & 0x80) != 0);
                    309:                        flag.C = cin;
                    310:                        flag.PV = vflag_add(dst, 1, res);
                    311:                        flag.H = hflag_add(dst, 1);
                    312:                        flag.N = false;
                    313:                        out_testdata_run1(dst, inflag, res, flag);
                    314:                }
                    315:        }
                    316:        out("   defb    0,0,0,0FFH\n");
                    317:        out("\n");
                    318: }
                    319: 
                    320: static void
                    321: gentest_dec()
                    322: {
                    323:        init("dec", "testrun1");
                    324: 
1.1.1.2 ! root      325:        out("testexec_%s:\n", testname);
1.1       root      326:        out("   DEC     A\n");
                    327:        out("   RET\n");
                    328: 
1.1.1.2 ! root      329:        out_testset();
1.1       root      330: 
                    331:        for (auto dst : values1) {
                    332:                for (int cin = 0; cin <= 1; cin++) {
                    333:                        uint32 res32 = dst - 1;
                    334:                        uint8 res = res32;
                    335:                        hd64180flag inflag;
                    336:                        inflag.C = cin;
                    337:                        inflag.N = false;
                    338:                        hd64180flag flag;
                    339:                        flag.Z = (res == 0);
                    340:                        flag.S = ((res & 0x80) != 0);
                    341:                        flag.C = cin;
                    342:                        flag.PV = vflag_sub(dst, 1, res);
                    343:                        flag.H = hflag_sub(dst, 1);
                    344:                        flag.N = true;
                    345:                        out_testdata_run1(dst, inflag, res, flag);
                    346:                }
                    347:        }
                    348:        out("   defb    0,0,0,0FFH\n");
                    349:        out("\n");
                    350: }
                    351: 
                    352: static void
                    353: gentest_neg()
                    354: {
                    355:        init("neg", "testrun1");
                    356: 
1.1.1.2 ! root      357:        out("testexec_%s:\n", testname);
1.1       root      358:        out("   NEG\n");
                    359:        out("   RET\n");
                    360: 
1.1.1.2 ! root      361:        out_testset();
1.1       root      362: 
                    363:        for (auto dst : values1) {
                    364:                uint32 res32 = 0 - dst;
                    365:                uint8 res = res32;
                    366:                hd64180flag inflag;
                    367:                inflag.N = false;
                    368:                hd64180flag flag;
                    369:                flag.Z = (res == 0);
                    370:                flag.S = ((res & 0x80) != 0);
                    371:                flag.C = ((res32 & 0x100) != 0);
                    372:                flag.PV = vflag_sub(0, dst, res);
                    373:                flag.H = hflag_sub(0, dst);
                    374:                flag.N = true;
                    375:                out_testdata_run1(dst, inflag, res, flag);
                    376:        }
                    377:        out("   defb    0,0,0,0FFH\n");
                    378:        out("\n");
                    379: }
                    380: 
                    381: static void
                    382: gentest_cpl()
                    383: {
                    384:        init("cpl", "testrun1");
                    385: 
1.1.1.2 ! root      386:        out("testexec_%s:\n", testname);
1.1       root      387:        out("   CPL\n");
                    388:        out("   RET\n");
                    389: 
1.1.1.2 ! root      390:        out_testset();
1.1       root      391: 
                    392:        bool fin = false;
                    393:        for (auto dst : values2) {
                    394:                fin = !fin;
                    395:                uint32 res32 = ~dst;
                    396:                uint8 res = res32;
                    397:                hd64180flag inflag;
                    398:                inflag.Z = fin;
                    399:                inflag.S = fin;
                    400:                inflag.C = fin;
                    401:                inflag.PV = fin;
                    402:                inflag.N = false;
                    403:                inflag.H = false;
                    404:                hd64180flag flag;
                    405:                flag.Z = fin;
                    406:                flag.S = fin;
                    407:                flag.C = fin;
                    408:                flag.PV = fin;
                    409:                flag.H = true;
                    410:                flag.N = true;
                    411:                out_testdata_run1(dst, inflag, res, flag);
                    412:        }
                    413:        out("   defb    0,0,0,0FFH\n");
                    414:        out("\n");
                    415: }
                    416: 
                    417: static void
                    418: gentest_rla()
                    419: {
                    420:        init("rla", "testrun1");
                    421: 
1.1.1.2 ! root      422:        out("testexec_%s:\n", testname);
1.1       root      423:        out("   RLA\n");
                    424:        out("   RET\n");
                    425: 
1.1.1.2 ! root      426:        out_testset();
1.1       root      427: 
                    428:        bool fin = false;
                    429:        for (auto dst : values2) {
                    430:                fin = !fin;
                    431:                for (int cin = 0; cin <= 1; cin++) {
                    432:                        uint32 res32 = dst << 1;
                    433:                        res32 |= cin;
                    434:                        uint8 res = res32;
                    435:                        hd64180flag inflag;
                    436:                        inflag.Z = fin;
                    437:                        inflag.S = fin;
                    438:                        inflag.C = cin;
                    439:                        inflag.PV = fin;
                    440:                        inflag.N = true;
                    441:                        inflag.H = true;
                    442:                        hd64180flag flag;
                    443:                        flag.Z = fin;
                    444:                        flag.S = fin;
                    445:                        flag.C = ((res32 & 0x100) != 0);
                    446:                        flag.PV = fin;
                    447:                        flag.H = false;
                    448:                        flag.N = false;
                    449:                        out_testdata_run1(dst, inflag, res, flag);
                    450:                }
                    451:        }
                    452:        out("   defb    0,0,0,0FFH\n");
                    453:        out("\n");
                    454: }
                    455: 
                    456: static void
                    457: gentest_rra()
                    458: {
                    459:        init("rra", "testrun1");
                    460: 
1.1.1.2 ! root      461:        out("testexec_%s:\n", testname);
1.1       root      462:        out("   RRA\n");
                    463:        out("   RET\n");
                    464: 
1.1.1.2 ! root      465:        out_testset();
1.1       root      466: 
                    467:        bool fin = false;
                    468:        for (auto dst : values2) {
                    469:                fin = !fin;
                    470:                for (int cin = 0; cin <= 1; cin++) {
                    471:                        uint32 res32 = dst >> 1;
                    472:                        res32 |= cin ? 0x80 : 0;
                    473:                        uint8 res = res32;
                    474:                        hd64180flag inflag;
                    475:                        inflag.Z = fin;
                    476:                        inflag.S = fin;
                    477:                        inflag.C = cin;
                    478:                        inflag.PV = fin;
                    479:                        inflag.N = true;
                    480:                        inflag.H = true;
                    481:                        hd64180flag flag;
                    482:                        flag.Z = fin;
                    483:                        flag.S = fin;
                    484:                        flag.C = ((dst & 1) != 0);
                    485:                        flag.PV = fin;
                    486:                        flag.H = false;
                    487:                        flag.N = false;
                    488:                        out_testdata_run1(dst, inflag, res, flag);
                    489:                }
                    490:        }
                    491:        out("   defb    0,0,0,0FFH\n");
                    492:        out("\n");
                    493: }
                    494: 
                    495: static void
                    496: gentest_rlca()
                    497: {
                    498:        init("rlca", "testrun1");
                    499: 
1.1.1.2 ! root      500:        out("testexec_%s:\n", testname);
1.1       root      501:        out("   RLCA\n");
                    502:        out("   RET\n");
                    503: 
1.1.1.2 ! root      504:        out_testset();
1.1       root      505: 
                    506:        bool fin = false;
                    507:        for (auto dst : values2) {
                    508:                fin = !fin;
                    509:                uint32 res32 = dst << 1;
                    510:                res32 |= (res32 >> 8);
                    511:                uint8 res = res32;
                    512:                hd64180flag inflag;
                    513:                inflag.Z = fin;
                    514:                inflag.S = fin;
                    515:                inflag.PV = fin;
                    516:                inflag.N = true;
                    517:                inflag.H = true;
                    518:                hd64180flag flag;
                    519:                flag.Z = fin;
                    520:                flag.S = fin;
                    521:                flag.C = ((res32 & 0x100) != 0);
                    522:                flag.PV = fin;
                    523:                flag.H = false;
                    524:                flag.N = false;
                    525:                out_testdata_run1(dst, inflag, res, flag);
                    526:        }
                    527:        out("   defb    0,0,0,0FFH\n");
                    528:        out("\n");
                    529: }
                    530: 
                    531: static void
                    532: gentest_rrca()
                    533: {
                    534:        init("rrca", "testrun1");
                    535: 
1.1.1.2 ! root      536:        out("testexec_%s:\n", testname);
1.1       root      537:        out("   RRCA\n");
                    538:        out("   RET\n");
                    539: 
1.1.1.2 ! root      540:        out_testset();
1.1       root      541: 
                    542:        bool fin = false;
                    543:        for (auto dst : values2) {
                    544:                fin = !fin;
                    545:                uint32 res32 = dst >> 1;
                    546:                res32 |= dst << 7;
                    547:                uint8 res = res32;
                    548:                hd64180flag inflag;
                    549:                inflag.Z = fin;
                    550:                inflag.S = fin;
                    551:                inflag.PV = fin;
                    552:                inflag.N = true;
                    553:                inflag.H = true;
                    554:                hd64180flag flag;
                    555:                flag.Z = fin;
                    556:                flag.S = fin;
                    557:                flag.C = ((dst & 1) != 0);
                    558:                flag.PV = fin;
                    559:                flag.H = false;
                    560:                flag.N = false;
                    561:                out_testdata_run1(dst, inflag, res, flag);
                    562:        }
                    563:        out("   defb    0,0,0,0FFH\n");
                    564:        out("\n");
                    565: }
                    566: 
                    567: static void
                    568: gentest_rl()
                    569: {
                    570:        init("rl", "testrun1");
                    571: 
1.1.1.2 ! root      572:        out("testexec_%s:\n", testname);
1.1       root      573:        out("   RL      A\n");
                    574:        out("   RET\n");
                    575: 
1.1.1.2 ! root      576:        out_testset();
1.1       root      577: 
                    578:        for (auto dst : values2) {
                    579:                for (int cin = 0; cin <= 1; cin++) {
                    580:                        uint32 res32 = dst << 1;
                    581:                        res32 |= cin;
                    582:                        uint8 res = res32;
                    583:                        hd64180flag inflag;
                    584:                        inflag.C = cin;
                    585:                        inflag.N = true;
                    586:                        inflag.H = true;
                    587:                        hd64180flag flag;
                    588:                        flag.Z = (res == 0);
                    589:                        flag.S = ((res & 0x80) != 0);
                    590:                        flag.C = ((res32 & 0x100) != 0);
                    591:                        flag.PV = pflag(res);
                    592:                        flag.H = false;
                    593:                        flag.N = false;
                    594:                        out_testdata_run1(dst, inflag, res, flag);
                    595:                }
                    596:        }
                    597:        out("   defb    0,0,0,0FFH\n");
                    598:        out("\n");
                    599: }
                    600: 
                    601: static void
                    602: gentest_rr()
                    603: {
                    604:        init("rr", "testrun1");
                    605: 
1.1.1.2 ! root      606:        out("testexec_%s:\n", testname);
1.1       root      607:        out("   RR      A\n");
                    608:        out("   RET\n");
                    609: 
1.1.1.2 ! root      610:        out_testset();
1.1       root      611: 
                    612:        for (auto dst : values2) {
                    613:                for (int cin = 0; cin <= 1; cin++) {
                    614:                        uint32 res32 = dst >> 1;
                    615:                        res32 |= cin ? 0x80 : 0;
                    616:                        uint8 res = res32;
                    617:                        hd64180flag inflag;
                    618:                        inflag.C = cin;
                    619:                        inflag.N = true;
                    620:                        inflag.H = true;
                    621:                        hd64180flag flag;
                    622:                        flag.Z = (res == 0);
                    623:                        flag.S = ((res & 0x80) != 0);
                    624:                        flag.C = ((dst & 1) != 0);
                    625:                        flag.PV = pflag(res);
                    626:                        flag.H = false;
                    627:                        flag.N = false;
                    628:                        out_testdata_run1(dst, inflag, res, flag);
                    629:                }
                    630:        }
                    631:        out("   defb    0,0,0,0FFH\n");
                    632:        out("\n");
                    633: }
                    634: 
                    635: static void
                    636: gentest_rlc()
                    637: {
                    638:        init("rlc", "testrun1");
                    639: 
1.1.1.2 ! root      640:        out("testexec_%s:\n", testname);
1.1       root      641:        out("   RLC     A\n");
                    642:        out("   RET\n");
                    643: 
1.1.1.2 ! root      644:        out_testset();
1.1       root      645: 
                    646:        for (auto dst : values2) {
                    647:                uint32 res32 = dst << 1;
                    648:                res32 |= (res32 >> 8);
                    649:                uint8 res = res32;
                    650:                hd64180flag inflag;
                    651:                inflag.N = true;
                    652:                inflag.H = true;
                    653:                hd64180flag flag;
                    654:                flag.Z = (res == 0);
                    655:                flag.S = ((res & 0x80) != 0);
                    656:                flag.C = ((res32 & 0x100) != 0);
                    657:                flag.PV = pflag(res);
                    658:                flag.H = false;
                    659:                flag.N = false;
                    660:                out_testdata_run1(dst, inflag, res, flag);
                    661:        }
                    662:        out("   defb    0,0,0,0FFH\n");
                    663:        out("\n");
                    664: }
                    665: 
                    666: static void
                    667: gentest_rrc()
                    668: {
                    669:        init("rrc", "testrun1");
                    670: 
1.1.1.2 ! root      671:        out("testexec_%s:\n", testname);
1.1       root      672:        out("   RRC     A\n");
                    673:        out("   RET\n");
                    674: 
1.1.1.2 ! root      675:        out_testset();
1.1       root      676: 
                    677:        for (auto dst : values2) {
                    678:                uint32 res32 = dst >> 1;
                    679:                res32 |= dst << 7;
                    680:                uint8 res = res32;
                    681:                hd64180flag inflag;
                    682:                inflag.N = true;
                    683:                inflag.H = true;
                    684:                hd64180flag flag;
                    685:                flag.Z = (res == 0);
                    686:                flag.S = ((res & 0x80) != 0);
                    687:                flag.C = ((dst & 1) != 0);
                    688:                flag.PV = pflag(res);
                    689:                flag.H = false;
                    690:                flag.N = false;
                    691:                out_testdata_run1(dst, inflag, res, flag);
                    692:        }
                    693:        out("   defb    0,0,0,0FFH\n");
                    694:        out("\n");
                    695: }
                    696: 
                    697: static void
                    698: gentest_sla()
                    699: {
                    700:        init("sla", "testrun1");
                    701: 
1.1.1.2 ! root      702:        out("testexec_%s:\n", testname);
1.1       root      703:        out("   SLA     A\n");
                    704:        out("   RET\n");
                    705: 
1.1.1.2 ! root      706:        out_testset();
1.1       root      707: 
                    708:        for (auto dst : values2) {
                    709:                uint32 res32 = dst << 1;
                    710:                uint8 res = res32;
                    711:                hd64180flag inflag;
                    712:                inflag.N = true;
                    713:                inflag.H = true;
                    714:                hd64180flag flag;
                    715:                flag.Z = (res == 0);
                    716:                flag.S = ((res & 0x80) != 0);
                    717:                flag.C = ((res32 & 0x100) != 0);
                    718:                flag.PV = pflag(res);
                    719:                flag.H = false;
                    720:                flag.N = false;
                    721:                out_testdata_run1(dst, inflag, res, flag);
                    722:        }
                    723:        out("   defb    0,0,0,0FFH\n");
                    724:        out("\n");
                    725: }
                    726: 
                    727: static void
                    728: gentest_sra()
                    729: {
                    730:        init("sra", "testrun1");
                    731: 
1.1.1.2 ! root      732:        out("testexec_%s:\n", testname);
1.1       root      733:        out("   SRA     A\n");
                    734:        out("   RET\n");
                    735: 
1.1.1.2 ! root      736:        out_testset();
1.1       root      737: 
                    738:        for (auto dst : values2) {
                    739:                uint32 res32 = dst >> 1;
                    740:                res32 |= (dst & 0x80);
                    741:                uint8 res = res32;
                    742:                hd64180flag inflag;
                    743:                inflag.N = true;
                    744:                inflag.H = true;
                    745:                hd64180flag flag;
                    746:                flag.Z = (res == 0);
                    747:                flag.S = ((res & 0x80) != 0);
                    748:                flag.C = ((dst & 1) != 0);
                    749:                flag.PV = pflag(res);
                    750:                flag.H = false;
                    751:                flag.N = false;
                    752:                out_testdata_run1(dst, inflag, res, flag);
                    753:        }
                    754:        out("   defb    0,0,0,0FFH\n");
                    755:        out("\n");
                    756: }
                    757: 
                    758: static void
                    759: gentest_srl()
                    760: {
                    761:        init("srl", "testrun1");
                    762: 
1.1.1.2 ! root      763:        out("testexec_%s:\n", testname);
1.1       root      764:        out("   SRL     A\n");
                    765:        out("   RET\n");
                    766: 
1.1.1.2 ! root      767:        out_testset();
1.1       root      768: 
                    769:        for (auto dst : values2) {
                    770:                uint32 res32 = dst >> 1;
                    771:                uint8 res = res32;
                    772:                hd64180flag inflag;
                    773:                inflag.N = true;
                    774:                inflag.H = true;
                    775:                hd64180flag flag;
                    776:                flag.Z = (res == 0);
                    777:                flag.S = ((res & 0x80) != 0);
                    778:                flag.C = ((dst & 1) != 0);
                    779:                flag.PV = pflag(res);
                    780:                flag.H = false;
                    781:                flag.N = false;
                    782:                out_testdata_run1(dst, inflag, res, flag);
                    783:        }
                    784:        out("   defb    0,0,0,0FFH\n");
                    785:        out("\n");
                    786: }
                    787: 
                    788: int
                    789: main(int ac, char *av[])
                    790: {
                    791:        out("   org     0100H\n");
                    792:        out("   JP      main\n");
                    793:        out("\n");
                    794: 
                    795:        gentest_add();
                    796:        gentest_adc();
                    797:        gentest_sub();
                    798:        gentest_sbc();
                    799:        gentest_and();
                    800:        gentest_or();
                    801:        gentest_xor();
                    802:        gentest_cp();
                    803: 
                    804:        gentest_inc();
                    805:        gentest_dec();
                    806:        gentest_neg();
                    807:        gentest_cpl();
                    808: 
                    809:        gentest_rla();
                    810:        gentest_rra();
                    811:        gentest_rlca();
                    812:        gentest_rrca();
                    813: 
                    814:        gentest_rl();
                    815:        gentest_rr();
                    816:        gentest_rlc();
                    817:        gentest_rrc();
                    818:        gentest_sla();
                    819:        gentest_sra();
                    820:        gentest_srl();
                    821: 
                    822:        out("main:\n");
                    823:        for (auto name : testlist) {
                    824:                out("   CALL    test_%s\n", name.c_str());
                    825:        }
                    826:        out("   RET\n");
1.1.1.2 ! root      827: 
        !           828:        return 0;
1.1       root      829: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.