Annotation of nono/vm/test_busio.cpp, revision 1.1.1.7

1.1.1.2   root        1: //
                      2: // nono
                      3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
1.1.1.6   root        7: #include "bus.h"
1.1       root        8: #include <stdint.h>
                      9: #include <vector>
                     10: 
                     11: // "device.h" の IODevice をリンクしてしまうと、芋づる式に依存オブジェクトが
                     12: // 増えてしまい収拾つかなくなるので、ダミークラスを用意する。
                     13: // なので、ここの実装は本物の IODevice のそれと同期しないといけない…。
                     14: class IODevice
                     15: {
                     16:  public:
1.1.1.7 ! root       17:        enum : uint {
        !            18:                Capacity = 8,
        !            19:        };
        !            20:  public:
        !            21:        IODevice()
        !            22:        {
        !            23:                reg.resize(Capacity);
        !            24:                Reset();
        !            25:        }
1.1.1.3   root       26:        virtual ~IODevice();
1.1       root       27: 
1.1.1.7 ! root       28:        virtual busdata Read(busaddr addr) { return 0xdf; }
        !            29:        virtual busdata Write(busaddr addr, uint32 data) { return 0; }
        !            30:        virtual busdata Peek1(uint32 addr) { return 0xff; }
        !            31:        virtual bool Poke1(uint32 addr, uint32 data) { return false; }
        !            32: 
        !            33:        void Reset() {
        !            34:                for (int i = 0; i < Capacity; i++) {
        !            35:                        reg[i] = i + 0x81;
        !            36:                }
        !            37:        }
        !            38: 
        !            39:        // uint32 だがバイトレジスタとして扱う
        !            40:        std::vector<uint32> reg {};
1.1       root       41: };
1.1.1.3   root       42: IODevice::~IODevice() { }
1.1       root       43: 
                     44: #define SELFTEST
                     45: #include "busio.h"
                     46: 
                     47: class TestByteDev : public IODevice
                     48: {
                     49:  public:
                     50:        TestByteDev() {}
1.1.1.7 ! root       51:        ~TestByteDev() override;
1.1       root       52: 
                     53:        static const uint32 NPORT = 4;
1.1.1.7 ! root       54:        busdata ReadPort(uint32 offset) {
        !            55:                if ((int32)reg[offset] < 0)
        !            56:                        return BusData::BusErr;
        !            57:                return reg[offset] | BusData::Size1;
        !            58:        }
        !            59:        busdata WritePort(uint32 offset, uint32 data) {
        !            60:                assert(data <= 0xff);
        !            61:                reg[offset] = data;
        !            62:                return BusData::Size1;
        !            63:        }
        !            64:        busdata PeekPort(uint32 offset) {
        !            65:                if ((int32)reg[offset] < 0)
        !            66:                        return BusData::BusErr;
        !            67:                return reg[offset];
        !            68:        }
        !            69:        bool PokePort(uint32 offset, uint32 data) {
        !            70:                return false;
1.1       root       71:        }
                     72: };
1.1.1.3   root       73: TestByteDev::~TestByteDev() { }
1.1       root       74: 
                     75: class TestWordDev : public IODevice
                     76: {
                     77:  public:
                     78:        TestWordDev() {}
1.1.1.7 ! root       79:        ~TestWordDev() override;
1.1       root       80: 
                     81:        static const uint32 NPORT = 4;
1.1.1.7 ! root       82:        busdata ReadPort(uint32 offset) {
        !            83:                busdata data = PeekPort(offset);
        !            84:                data |= BusData::Size2;
        !            85:                return data;
        !            86:        }
        !            87:        busdata WritePort(uint32 offset, uint32 data) {
        !            88:                assert(data <= 0xffff);
        !            89:                reg[offset * 2 + 0] = (uint8)(data >> 8);
        !            90:                reg[offset * 2 + 1] = (uint8)(data & 0xff);
        !            91:                return BusData::Size2;
        !            92:        }
        !            93:        busdata PeekPort(uint32 offset) {
        !            94:                if ((int32)reg[offset] < 0)
        !            95:                        return BusData::BusErr;
        !            96:                uint32 data;
        !            97:                data  = (uint8)reg[offset * 2 + 0] << 8;
        !            98:                data |= (uint8)reg[offset * 2 + 1];
        !            99:                return data;
1.1       root      100:        }
                    101: };
1.1.1.3   root      102: TestWordDev::~TestWordDev() { }
1.1       root      103: 
1.1.1.7 ! root      104: class TestLongDev : public IODevice
        !           105: {
        !           106:  public:
        !           107:        TestLongDev() {}
        !           108:        ~TestLongDev() override;
        !           109: 
        !           110:        static const uint32 NPORT = 4;
        !           111:        busdata ReadPort(uint32 offset) {
        !           112:                busdata data = PeekPort(offset);
        !           113:                data |= BusData::Size4;
        !           114:                return data;
        !           115:        }
        !           116:        busdata WritePort(uint32 offset, uint32 data) {
        !           117:                reg[offset * 4 + 0] = (uint8)(data >> 24);
        !           118:                reg[offset * 4 + 1] = (uint8)(data >> 16);
        !           119:                reg[offset * 4 + 2] = (uint8)(data >>  8);
        !           120:                reg[offset * 4 + 3] = (uint8)(data & 0xff);
        !           121:                return BusData::Size4;
        !           122:        }
        !           123:        busdata PeekPort(uint32 offset) {
        !           124:                if ((int32)reg[offset] < 0)
        !           125:                        return BusData::BusErr;
        !           126:                uint32 data;
        !           127:                data  = (uint8)reg[offset * 4 + 0] << 24;
        !           128:                data |= (uint8)reg[offset * 4 + 1] << 16;
        !           129:                data |= (uint8)reg[offset * 4 + 2] <<  8;
        !           130:                data |= (uint8)reg[offset * 4 + 3];
        !           131:                return data;
        !           132:        }
1.1       root      133: };
1.1.1.7 ! root      134: TestLongDev::~TestLongDev() { }
1.1       root      135: 
                    136: void fail(const char *fmt, ...) __printflike(1, 2);
                    137: void
                    138: fail(const char *fmt, ...)
                    139: {
                    140:        va_list ap;
                    141: 
                    142:        printf(" FAIL: ");
                    143:        va_start(ap, fmt);
                    144:        vprintf(fmt, ap);
                    145:        va_end(ap);
                    146: }
                    147: 
1.1.1.7 ! root      148: // 入力アドレス(busaddr)と期待値(busdata)を列挙しやすいよう分解したもの。
        !           149: struct TestItemR
        !           150: {
        !           151:        busaddr addr;   // 入力アドレス
        !           152:        busdata exp;    // 期待値
        !           153: };
        !           154: 
        !           155: struct TestItemW
1.1       root      156: {
1.1.1.7 ! root      157:        busaddr addr;   // 入力アドレス
        !           158:        uint32 data;    // 入力データ
        !           159:        busdata expres;         // 応答の期待値
        !           160:        const char *expmem;     // 書き込み後のレジスタの期待値
        !           161: 
        !           162:        // memexp は表記を圧縮するため、
        !           163:        // 0x81, 0x82, ... 0x88 を '1', '2', .. '8'、
        !           164:        // 0xfa, 0xfb, 0xfc, 0xfd を 'A', 'B', 'C', 'D'、
        !           165:        // 0x00 を '0'
        !           166:        // と置き換えた 8文字の文字列で表現する。
        !           167: };
        !           168: 
        !           169: struct TestData
        !           170: {
        !           171:        const char *name;
        !           172:        std::vector<TestItemR> table_read;      // Read  テスト用データ
        !           173:        std::vector<TestItemW> table_write;     // Write テスト用データ
        !           174: };
        !           175: 
        !           176: static void
        !           177: do_test(IODevice *dev, const TestData& testdata)
        !           178: {
        !           179:        int failcount = 0;
        !           180: 
        !           181:        printf("%s", testdata.name);
        !           182:        fflush(stdout);
        !           183: 
        !           184:        // Read
        !           185:        for (const auto& item : testdata.table_read) {
        !           186:                busaddr addr = item.addr;
        !           187:                busdata exp  = item.exp;
        !           188: 
        !           189:                busdata act = dev->Read(addr);
        !           190:                if (act.Get() != exp.Get()) {
        !           191:                        if (failcount == 0) {
        !           192:                                printf("\n");
        !           193:                        }
        !           194:                        fail("%s::Read($%08x'%08x) expects $%08x'%08x but $%08x'%08x\n",
        !           195:                                testdata.name, addr.GetH(), addr.GetL(),
        !           196:                                exp.GetH(), exp.GetL(), act.GetH(), act.GetL());
        !           197:                        failcount++;
        !           198:                } else if (0) {
        !           199:                        printf(" Read($%08x'%08x) -> $%08x'%08x\n",
        !           200:                                addr.GetH(), addr.GetL(), act.GetH(), act.GetL());
        !           201:                }
        !           202:        }
1.1       root      203: 
1.1.1.7 ! root      204:        // Write
        !           205:        for (const auto& item : testdata.table_write) {
        !           206:                busaddr addr = item.addr;
        !           207:                uint32 srcdata = item.data;
        !           208:                busdata exp = item.expres;
        !           209:                const char *expmem_str = item.expmem;
        !           210:                int memlen = std::min((int)strlen(expmem_str), (int)dev->Capacity);
        !           211:                std::vector<uint32> expmem(memlen);
        !           212: 
        !           213:                // expmem_str から expmem[] を作成。
        !           214:                for (int i = 0; i < memlen; i++) {
        !           215:                        uint8 ch = expmem_str[i];
        !           216:                        if (ch == '0') {
        !           217:                                expmem[i] = 0;
        !           218:                        } else if ('1' <= ch && ch <= '9') {
        !           219:                                expmem[i] = 0x80 + (ch - '0');
        !           220:                        } else if ('A' <= ch && ch <= 'D') {
        !           221:                                expmem[i] = 0xfa + (ch - 'A');
        !           222:                        } else {
        !           223:                                errx(1, "invalid char\n");
        !           224:                        }
        !           225:                }
        !           226: 
        !           227:                // 実行
        !           228:                dev->Reset();
        !           229:                busdata act = dev->Write(addr, srcdata);
        !           230: 
        !           231:                // 応答を照合
        !           232:                if (act.Get() != exp.Get()) {
        !           233:                        if (failcount == 0) {
        !           234:                                printf("\n");
        !           235:                        }
        !           236:                        fail("%s::Write($%08x'%08x, $%08x) "
        !           237:                                        "expects $%08x'%08x but $%08x'%08x\n",
        !           238:                                testdata.name, addr.GetH(), addr.GetL(), srcdata,
        !           239:                                exp.GetH(), exp.GetL(), act.GetH(), act.GetL());
        !           240:                        failcount++;
        !           241:                }
        !           242: 
        !           243:                // 書き込み結果を照合
        !           244:                bool ok = true;
        !           245:                for (int i = 0; i < memlen; i++) {
        !           246:                        if (dev->reg[i] != expmem[i]) {
        !           247:                                ok = false;
        !           248:                                break;
        !           249:                        }
        !           250:                }
        !           251:                if (!ok) {
        !           252:                        if (failcount == 0) {
        !           253:                                printf("\n");
        !           254:                        }
        !           255:                        fail("%s::Write($%08x'%08x, $%08x) expects "
        !           256:                                        "mem=$%02x%02x'%02x%02x'%02x%02x'%02x%02x but "
        !           257:                                    "mem=$%02x%02x'%02x%02x'%02x%02x'%02x%02x\n",
        !           258:                                testdata.name, addr.GetH(), addr.GetL(), srcdata,
        !           259:                                expmem[0], expmem[1], expmem[2], expmem[3],
        !           260:                                expmem[4], expmem[5], expmem[6], expmem[7],
        !           261:                                dev->reg[0], dev->reg[1], dev->reg[2], dev->reg[3],
        !           262:                                dev->reg[4], dev->reg[5], dev->reg[6], dev->reg[7]);
        !           263:                        failcount++;
1.1       root      264:                }
                    265:        }
                    266: 
1.1.1.7 ! root      267:        if (failcount == 0) {
        !           268:                printf(" .. OK\n");
        !           269:        }
1.1       root      270: }
                    271: 
1.1.1.7 ! root      272: #define Size1  1U
        !           273: #define Size2  2U
        !           274: #define Size3  3U
        !           275: #define Size4  4U
        !           276: #define BA(addr_, size_)       (busaddr(addr_) | busaddr::Size(size_))
        !           277: #define BD(data_, size_)       (busdata(data_) | busdata::Size(size_))
        !           278: 
        !           279: #define BusErr (BusData::BusErr)
        !           280: 
        !           281: // 書き込みパターン (addr::Size と揃えること)
        !           282: #define W1     (0xfa)
        !           283: #define W2     (0xfafb)
        !           284: #define W3     (0xfafbfc)
        !           285: #define W4     (0xfafbfcfd)
        !           286: 
        !           287: static TestData
        !           288: table_B = {
        !           289:        .name = "BusIO_B",
        !           290:        .table_read = {
        !           291:                { BA(0, Size1),         BD(0x00000081, Size1) },
        !           292:                { BA(1, Size1),         BD(0x00000082, Size1) },
        !           293:                { BA(2, Size1),         BD(0x00000083, Size1) },
        !           294:                { BA(3, Size1),         BD(0x00000084, Size1) },
        !           295: 
        !           296:                { BA(0, Size2),         BD(0x00000081, Size1) },
        !           297:                { BA(1, Size2),         BD(0x00000082, Size1) },
        !           298:                { BA(2, Size2),         BD(0x00000083, Size1) },
        !           299:                { BA(3, Size2),         BD(0x00000084, Size1) },
        !           300: 
        !           301:                { BA(0, Size3),         BD(0x00000081, Size1) },
        !           302:                { BA(1, Size3),         BD(0x00000082, Size1) },
        !           303:                { BA(2, Size3),         BD(0x00000083, Size1) },
        !           304:                { BA(3, Size3),         BD(0x00000084, Size1) },
        !           305: 
        !           306:                { BA(0, Size4),         BD(0x00000081, Size1) },
        !           307:                { BA(1, Size4),         BD(0x00000082, Size1) },
        !           308:                { BA(2, Size4),         BD(0x00000083, Size1) },
        !           309:                { BA(3, Size4),         BD(0x00000084, Size1) },
        !           310:        },
        !           311:        .table_write = {
        !           312:                { BA(0, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           313:                { BA(1, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           314:                { BA(2, Size1), W1,             BD(0, Size1),   "12A45678" },
        !           315:                { BA(3, Size1), W1,             BD(0, Size1),   "123A5678" },
        !           316: 
        !           317:                { BA(0, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           318:                { BA(1, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           319:                { BA(2, Size2), W2,             BD(0, Size1),   "12A45678" },
        !           320:                { BA(3, Size2), W2,             BD(0, Size1),   "123A5678" },
        !           321: 
        !           322:                { BA(0, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           323:                { BA(1, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           324:                { BA(2, Size3), W3,             BD(0, Size1),   "12A45678" },
        !           325:                { BA(3, Size3), W3,             BD(0, Size1),   "123A5678" },
        !           326: 
        !           327:                { BA(0, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           328:                { BA(1, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           329:                { BA(2, Size4), W4,             BD(0, Size1),   "12A45678" },
        !           330:                { BA(3, Size4), W4,             BD(0, Size1),   "123A5678" },
        !           331:        },
        !           332: };
        !           333: 
        !           334: static TestData
        !           335: table_BB = {
        !           336:        .name = "BusIO_BB",
        !           337:        .table_read = {
        !           338:                { BA(0, Size1),         BD(0x00000081, Size1) },
        !           339:                { BA(1, Size1),         BD(0x00000081, Size1) },
        !           340:                { BA(2, Size1),         BD(0x00000082, Size1) },
        !           341:                { BA(3, Size1),         BD(0x00000082, Size1) },
        !           342: 
        !           343:                { BA(0, Size2),         BD(0x00000081, Size1) },
        !           344:                { BA(1, Size2),         BD(0x00000081, Size1) },
        !           345:                { BA(2, Size2),         BD(0x00000082, Size1) },
        !           346:                { BA(3, Size2),         BD(0x00000082, Size1) },
        !           347: 
        !           348:                { BA(0, Size3),         BD(0x00000081, Size1) },
        !           349:                { BA(1, Size3),         BD(0x00000081, Size1) },
        !           350:                { BA(2, Size3),         BD(0x00000082, Size1) },
        !           351:                { BA(3, Size3),         BD(0x00000082, Size1) },
        !           352: 
        !           353:                { BA(0, Size4),         BD(0x00000081, Size1) },
        !           354:                { BA(1, Size4),         BD(0x00000081, Size1) },
        !           355:                { BA(2, Size4),         BD(0x00000082, Size1) },
        !           356:                { BA(3, Size4),         BD(0x00000082, Size1) },
        !           357:        },
        !           358:        .table_write = {
        !           359:                { BA(0, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           360:                { BA(1, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           361:                { BA(2, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           362:                { BA(3, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           363: 
        !           364:                { BA(0, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           365:                { BA(1, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           366:                { BA(2, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           367:                { BA(3, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           368: 
        !           369:                { BA(0, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           370:                { BA(1, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           371:                { BA(2, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           372:                { BA(3, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           373: 
        !           374:                { BA(0, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           375:                { BA(1, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           376:                { BA(2, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           377:                { BA(3, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           378:        },
        !           379: };
        !           380: 
        !           381: static TestData
        !           382: table_BBBB = {
        !           383:        .name = "BusIO_BBBB",
        !           384:        .table_read = {
        !           385:                { BA(0, Size1),         BD(0x00000081, Size1) },
        !           386:                { BA(1, Size1),         BD(0x00000081, Size1) },
        !           387:                { BA(2, Size1),         BD(0x00000081, Size1) },
        !           388:                { BA(3, Size1),         BD(0x00000081, Size1) },
        !           389:                { BA(4, Size1),         BD(0x00000082, Size1) },
        !           390:                { BA(5, Size1),         BD(0x00000082, Size1) },
        !           391:                { BA(6, Size1),         BD(0x00000082, Size1) },
        !           392:                { BA(7, Size1),         BD(0x00000082, Size1) },
        !           393: 
        !           394:                { BA(0, Size2),         BD(0x00000081, Size1) },
        !           395:                { BA(1, Size2),         BD(0x00000081, Size1) },
        !           396:                { BA(2, Size2),         BD(0x00000081, Size1) },
        !           397:                { BA(3, Size2),         BD(0x00000081, Size1) },
        !           398:                { BA(4, Size2),         BD(0x00000082, Size1) },
        !           399:                { BA(5, Size2),         BD(0x00000082, Size1) },
        !           400:                { BA(6, Size2),         BD(0x00000082, Size1) },
        !           401:                { BA(7, Size2),         BD(0x00000082, Size1) },
        !           402: 
        !           403:                { BA(0, Size3),         BD(0x00000081, Size1) },
        !           404:                { BA(1, Size3),         BD(0x00000081, Size1) },
        !           405:                { BA(2, Size3),         BD(0x00000081, Size1) },
        !           406:                { BA(3, Size3),         BD(0x00000081, Size1) },
        !           407:                { BA(4, Size3),         BD(0x00000082, Size1) },
        !           408:                { BA(5, Size3),         BD(0x00000082, Size1) },
        !           409:                { BA(6, Size3),         BD(0x00000082, Size1) },
        !           410:                { BA(7, Size3),         BD(0x00000082, Size1) },
        !           411: 
        !           412:                { BA(0, Size4),         BD(0x00000081, Size1) },
        !           413:                { BA(1, Size4),         BD(0x00000081, Size1) },
        !           414:                { BA(2, Size4),         BD(0x00000081, Size1) },
        !           415:                { BA(3, Size4),         BD(0x00000081, Size1) },
        !           416:                { BA(4, Size4),         BD(0x00000082, Size1) },
        !           417:                { BA(5, Size4),         BD(0x00000082, Size1) },
        !           418:                { BA(6, Size4),         BD(0x00000082, Size1) },
        !           419:                { BA(7, Size4),         BD(0x00000082, Size1) },
        !           420:        },
        !           421:        .table_write = {
        !           422:                { BA(0, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           423:                { BA(1, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           424:                { BA(2, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           425:                { BA(3, Size1), W1,             BD(0, Size1),   "A2345678" },
        !           426:                { BA(4, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           427:                { BA(5, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           428:                { BA(6, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           429:                { BA(7, Size1), W1,             BD(0, Size1),   "1A345678" },
        !           430: 
        !           431:                { BA(0, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           432:                { BA(1, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           433:                { BA(2, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           434:                { BA(3, Size2), W2,             BD(0, Size1),   "A2345678" },
        !           435:                { BA(4, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           436:                { BA(5, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           437:                { BA(6, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           438:                { BA(7, Size2), W2,             BD(0, Size1),   "1A345678" },
        !           439: 
        !           440:                { BA(0, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           441:                { BA(1, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           442:                { BA(2, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           443:                { BA(3, Size3), W3,             BD(0, Size1),   "A2345678" },
        !           444:                { BA(4, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           445:                { BA(5, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           446:                { BA(6, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           447:                { BA(7, Size3), W3,             BD(0, Size1),   "1A345678" },
        !           448: 
        !           449:                { BA(0, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           450:                { BA(1, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           451:                { BA(2, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           452:                { BA(3, Size4), W4,             BD(0, Size1),   "A2345678" },
        !           453:                { BA(4, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           454:                { BA(5, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           455:                { BA(6, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           456:                { BA(7, Size4), W4,             BD(0, Size1),   "1A345678" },
        !           457:        },
        !           458: };
        !           459: 
        !           460: static TestData
        !           461: table_BFFF = {
        !           462:        .name = "BusIO_BFFF",
        !           463:        .table_read = {
        !           464:                { BA(0, Size1),         BD(0x81ffffff, Size4) },
        !           465:                { BA(1, Size1),         BD(0x81ffffff, Size4) },
        !           466:                { BA(2, Size1),         BD(0x81ffffff, Size4) },
        !           467:                { BA(3, Size1),         BD(0x81ffffff, Size4) },
        !           468:                { BA(4, Size1),         BD(0x82ffffff, Size4) },
        !           469:                { BA(5, Size1),         BD(0x82ffffff, Size4) },
        !           470:                { BA(6, Size1),         BD(0x82ffffff, Size4) },
        !           471:                { BA(7, Size1),         BD(0x82ffffff, Size4) },
        !           472: 
        !           473:                { BA(0, Size2),         BD(0x81ffffff, Size4) },
        !           474:                { BA(1, Size2),         BD(0x81ffffff, Size4) },
        !           475:                { BA(2, Size2),         BD(0x81ffffff, Size4) },
        !           476:                { BA(3, Size2),         BD(0x81ffffff, Size4) },
        !           477:                { BA(4, Size2),         BD(0x82ffffff, Size4) },
        !           478:                { BA(5, Size2),         BD(0x82ffffff, Size4) },
        !           479:                { BA(6, Size2),         BD(0x82ffffff, Size4) },
        !           480:                { BA(7, Size2),         BD(0x82ffffff, Size4) },
        !           481: 
        !           482:                { BA(0, Size3),         BD(0x81ffffff, Size4) },
        !           483:                { BA(1, Size3),         BD(0x81ffffff, Size4) },
        !           484:                { BA(2, Size3),         BD(0x81ffffff, Size4) },
        !           485:                { BA(3, Size3),         BD(0x81ffffff, Size4) },
        !           486:                { BA(4, Size3),         BD(0x82ffffff, Size4) },
        !           487:                { BA(5, Size3),         BD(0x82ffffff, Size4) },
        !           488:                { BA(6, Size3),         BD(0x82ffffff, Size4) },
        !           489:                { BA(7, Size3),         BD(0x82ffffff, Size4) },
        !           490: 
        !           491:                { BA(0, Size4),         BD(0x81ffffff, Size4) },
        !           492:                { BA(1, Size4),         BD(0x81ffffff, Size4) },
        !           493:                { BA(2, Size4),         BD(0x81ffffff, Size4) },
        !           494:                { BA(3, Size4),         BD(0x81ffffff, Size4) },
        !           495:                { BA(4, Size4),         BD(0x82ffffff, Size4) },
        !           496:                { BA(5, Size4),         BD(0x82ffffff, Size4) },
        !           497:                { BA(6, Size4),         BD(0x82ffffff, Size4) },
        !           498:                { BA(7, Size4),         BD(0x82ffffff, Size4) },
        !           499:        },
        !           500:        .table_write = {
        !           501:                { BA(0, Size1), W1,             BD(0, Size4),   "A2345678" },
        !           502:                { BA(1, Size1), W1,             BD(0, Size4),   "A2345678" },
        !           503:                { BA(2, Size1), W1,             BD(0, Size4),   "A2345678" },
        !           504:                { BA(3, Size1), W1,             BD(0, Size4),   "A2345678" },
        !           505:                { BA(4, Size1), W1,             BD(0, Size4),   "1A345678" },
        !           506:                { BA(5, Size1), W1,             BD(0, Size4),   "1A345678" },
        !           507:                { BA(6, Size1), W1,             BD(0, Size4),   "1A345678" },
        !           508:                { BA(7, Size1), W1,             BD(0, Size4),   "1A345678" },
        !           509: 
        !           510:                { BA(0, Size2), W2,             BD(0, Size4),   "A2345678" },
        !           511:                { BA(1, Size2), W2,             BD(0, Size4),   "A2345678" },
        !           512:                { BA(2, Size2), W2,             BD(0, Size4),   "A2345678" },
        !           513:                { BA(3, Size2), W2,             BD(0, Size4),   "A2345678" },
        !           514:                { BA(4, Size2), W2,             BD(0, Size4),   "1A345678" },
        !           515:                { BA(5, Size2), W2,             BD(0, Size4),   "1A345678" },
        !           516:                { BA(6, Size2), W2,             BD(0, Size4),   "1A345678" },
        !           517:                { BA(7, Size2), W2,             BD(0, Size4),   "1A345678" },
        !           518: 
        !           519:                { BA(0, Size3), W3,             BD(0, Size4),   "A2345678" },
        !           520:                { BA(1, Size3), W3,             BD(0, Size4),   "A2345678" },
        !           521:                { BA(2, Size3), W3,             BD(0, Size4),   "A2345678" },
        !           522:                { BA(3, Size3), W3,             BD(0, Size4),   "A2345678" },
        !           523:                { BA(4, Size3), W3,             BD(0, Size4),   "1A345678" },
        !           524:                { BA(5, Size3), W3,             BD(0, Size4),   "1A345678" },
        !           525:                { BA(6, Size3), W3,             BD(0, Size4),   "1A345678" },
        !           526:                { BA(7, Size3), W3,             BD(0, Size4),   "1A345678" },
        !           527: 
        !           528:                { BA(0, Size4), W4,             BD(0, Size4),   "A2345678" },
        !           529:                { BA(1, Size4), W4,             BD(0, Size4),   "A2345678" },
        !           530:                { BA(2, Size4), W4,             BD(0, Size4),   "A2345678" },
        !           531:                { BA(3, Size4), W4,             BD(0, Size4),   "A2345678" },
        !           532:                { BA(4, Size4), W4,             BD(0, Size4),   "1A345678" },
        !           533:                { BA(5, Size4), W4,             BD(0, Size4),   "1A345678" },
        !           534:                { BA(6, Size4), W4,             BD(0, Size4),   "1A345678" },
        !           535:                { BA(7, Size4), W4,             BD(0, Size4),   "1A345678" },
        !           536:        },
        !           537: };
        !           538: 
        !           539: static TestData
        !           540: table_EB = {
        !           541:        .name = "BusIO_EB",
        !           542:        .table_read = {
        !           543:                { BA(0, Size1),         BusErr },
        !           544:                { BA(1, Size1),         BD(0x0000ff81, Size2) },
        !           545:                { BA(2, Size1),         BusErr },
        !           546:                { BA(3, Size1),         BD(0x0000ff82, Size2) },
        !           547: 
        !           548:                { BA(0, Size2),         BD(0x0000ff81, Size2) },
        !           549:                { BA(1, Size2),         BD(0x0000ff81, Size2) },
        !           550:                { BA(2, Size2),         BD(0x0000ff82, Size2) },
        !           551:                { BA(3, Size2),         BD(0x0000ff82, Size2) },
        !           552: 
        !           553:                { BA(0, Size3),         BD(0x0000ff81, Size2) },
        !           554:                { BA(1, Size3),         BD(0x0000ff81, Size2) },
        !           555:                { BA(2, Size3),         BD(0x0000ff82, Size2) },
        !           556:                { BA(3, Size3),         BD(0x0000ff82, Size2) },
        !           557: 
        !           558:                { BA(0, Size4),         BD(0x0000ff81, Size2) },
        !           559:                { BA(1, Size4),         BD(0x0000ff81, Size2) },
        !           560:                { BA(2, Size4),         BD(0x0000ff82, Size2) },
        !           561:                { BA(3, Size4),         BD(0x0000ff82, Size2) },
        !           562:        },
        !           563:        .table_write = {
        !           564:                { BA(0, Size1), W1,             BusErr,                 "12345678" },
        !           565:                { BA(1, Size1), W1,             BD(0, Size2),   "A2345678" },
        !           566:                { BA(2, Size1), W1,             BusErr,                 "12345678" },
        !           567:                { BA(3, Size1), W1,             BD(0, Size2),   "1A345678" },
        !           568: 
        !           569:                { BA(0, Size2), W2,             BD(0, Size2),   "B2345678" },
        !           570:                { BA(1, Size2), W2,             BD(0, Size2),   "A2345678" },
        !           571:                { BA(2, Size2), W2,             BD(0, Size2),   "1B345678" },
        !           572:                { BA(3, Size2), W2,             BD(0, Size2),   "1A345678" },
        !           573: 
        !           574:                { BA(0, Size3), W3,             BD(0, Size2),   "B2345678" },
        !           575:                { BA(1, Size3), W3,             BD(0, Size2),   "A2345678" },
        !           576:                { BA(2, Size3), W3,             BD(0, Size2),   "1B345678" },
        !           577:                { BA(3, Size3), W3,             BD(0, Size2),   "1A345678" },
        !           578: 
        !           579:                { BA(0, Size4), W4,             BD(0, Size2),   "B2345678" },
        !           580:                { BA(1, Size4), W4,             BD(0, Size2),   "A2345678" },
        !           581:                { BA(2, Size4), W4,             BD(0, Size2),   "1B345678" },
        !           582:                { BA(3, Size4), W4,             BD(0, Size2),   "1A345678" },
        !           583:        },
        !           584: };
        !           585: 
        !           586: static TestData
        !           587: table_FB = {
        !           588:        .name = "BusIO_FB",
        !           589:        .table_read = {
        !           590:                { BA(0, Size1),         BD(0x0000ffff, Size2) },
        !           591:                { BA(1, Size1),         BD(0x0000ff81, Size2) },
        !           592:                { BA(2, Size1),         BD(0x0000ffff, Size2) },
        !           593:                { BA(3, Size1),         BD(0x0000ff82, Size2) },
        !           594: 
        !           595:                { BA(0, Size2),         BD(0x0000ff81, Size2) },
        !           596:                { BA(1, Size2),         BD(0x0000ff81, Size2) },
        !           597:                { BA(2, Size2),         BD(0x0000ff82, Size2) },
        !           598:                { BA(3, Size2),         BD(0x0000ff82, Size2) },
        !           599: 
        !           600:                { BA(0, Size3),         BD(0x0000ff81, Size2) },
        !           601:                { BA(1, Size3),         BD(0x0000ff81, Size2) },
        !           602:                { BA(2, Size3),         BD(0x0000ff82, Size2) },
        !           603:                { BA(3, Size3),         BD(0x0000ff82, Size2) },
        !           604: 
        !           605:                { BA(0, Size4),         BD(0x0000ff81, Size2) },
        !           606:                { BA(1, Size4),         BD(0x0000ff81, Size2) },
        !           607:                { BA(2, Size4),         BD(0x0000ff82, Size2) },
        !           608:                { BA(3, Size4),         BD(0x0000ff82, Size2) },
        !           609:        },
        !           610:        .table_write = {
        !           611:                { BA(0, Size1), W1,             BD(0, Size2),   "12345678" },
        !           612:                { BA(1, Size1), W1,             BD(0, Size2),   "A2345678" },
        !           613:                { BA(2, Size1), W1,             BD(0, Size2),   "12345678" },
        !           614:                { BA(3, Size1), W1,             BD(0, Size2),   "1A345678" },
        !           615: 
        !           616:                { BA(0, Size2), W2,             BD(0, Size2),   "B2345678" },
        !           617:                { BA(1, Size2), W2,             BD(0, Size2),   "A2345678" },
        !           618:                { BA(2, Size2), W2,             BD(0, Size2),   "1B345678" },
        !           619:                { BA(3, Size2), W2,             BD(0, Size2),   "1A345678" },
        !           620: 
        !           621:                { BA(0, Size3), W3,             BD(0, Size2),   "B2345678" },
        !           622:                { BA(1, Size3), W3,             BD(0, Size2),   "A2345678" },
        !           623:                { BA(2, Size3), W3,             BD(0, Size2),   "1B345678" },
        !           624:                { BA(3, Size3), W3,             BD(0, Size2),   "1A345678" },
        !           625: 
        !           626:                { BA(0, Size4), W4,             BD(0, Size2),   "B2345678" },
        !           627:                { BA(1, Size4), W4,             BD(0, Size2),   "A2345678" },
        !           628:                { BA(2, Size4), W4,             BD(0, Size2),   "1B345678" },
        !           629:                { BA(3, Size4), W4,             BD(0, Size2),   "1A345678" },
        !           630:        },
        !           631: };
        !           632: 
        !           633: static TestData
        !           634: table_W = {
        !           635:        .name = "BusIO_W",
        !           636:        .table_read = {
        !           637:                { BA(0, Size1),         BD(0x00008182, Size2) },
        !           638:                { BA(1, Size1),         BD(0x00008182, Size2) },
        !           639:                { BA(2, Size1),         BD(0x00008384, Size2) },
        !           640:                { BA(3, Size1),         BD(0x00008384, Size2) },
        !           641: 
        !           642:                { BA(0, Size2),         BD(0x00008182, Size2) },
        !           643:                { BA(1, Size2),         BD(0x00008182, Size2) },
        !           644:                { BA(2, Size2),         BD(0x00008384, Size2) },
        !           645:                { BA(3, Size2),         BD(0x00008384, Size2) },
        !           646: 
        !           647:                { BA(0, Size3),         BD(0x00008182, Size2) },
        !           648:                { BA(1, Size3),         BD(0x00008182, Size2) },
        !           649:                { BA(2, Size3),         BD(0x00008384, Size2) },
        !           650:                { BA(3, Size3),         BD(0x00008384, Size2) },
        !           651: 
        !           652:                { BA(0, Size4),         BD(0x00008182, Size2) },
        !           653:                { BA(1, Size4),         BD(0x00008182, Size2) },
        !           654:                { BA(2, Size4),         BD(0x00008384, Size2) },
        !           655:                { BA(3, Size4),         BD(0x00008384, Size2) },
        !           656:        },
        !           657:        .table_write = {
        !           658:                { BA(0, Size1), W1,             BD(0, Size2),   "AA345678" },
        !           659:                { BA(1, Size1), W1,             BD(0, Size2),   "AA345678" },
        !           660:                { BA(2, Size1), W1,             BD(0, Size2),   "12AA5678" },
        !           661:                { BA(3, Size1), W1,             BD(0, Size2),   "12AA5678" },
        !           662: 
        !           663:                { BA(0, Size2), W2,             BD(0, Size2),   "AB345678" },
        !           664:                { BA(1, Size2), W2,             BD(0, Size2),   "AA345678" },
        !           665:                { BA(2, Size2), W2,             BD(0, Size2),   "12AB5678" },
        !           666:                { BA(3, Size2), W2,             BD(0, Size2),   "12AA5678" },
        !           667: 
        !           668:                { BA(0, Size3), W3,             BD(0, Size2),   "AB345678" },
        !           669:                { BA(1, Size3), W3,             BD(0, Size2),   "AA345678" },
        !           670:                { BA(2, Size3), W3,             BD(0, Size2),   "12AB5678" },
        !           671:                { BA(3, Size3), W3,             BD(0, Size2),   "12AA5678" },
        !           672: 
        !           673:                { BA(0, Size4), W4,             BD(0, Size2),   "AB345678" },
        !           674:                { BA(1, Size4), W4,             BD(0, Size2),   "AA345678" },
        !           675:                { BA(2, Size4), W4,             BD(0, Size2),   "12AB5678" },
        !           676:                { BA(3, Size4), W4,             BD(0, Size2),   "12AA5678" },
        !           677:        },
        !           678: };
        !           679: 
        !           680: static TestData
        !           681: table_WF = {
        !           682:        .name = "BusIO_WF",
        !           683:        .table_read = {
        !           684:                { BA(0, Size1),         BD(0x8182ffff, Size4) },
        !           685:                { BA(1, Size1),         BD(0x8182ffff, Size4) },
        !           686:                { BA(2, Size1),         BD(0x8182ffff, Size4) },
        !           687:                { BA(3, Size1),         BD(0x8182ffff, Size4) },
        !           688:                { BA(4, Size1),         BD(0x8384ffff, Size4) },
        !           689:                { BA(5, Size1),         BD(0x8384ffff, Size4) },
        !           690:                { BA(6, Size1),         BD(0x8384ffff, Size4) },
        !           691:                { BA(7, Size1),         BD(0x8384ffff, Size4) },
        !           692: 
        !           693:                { BA(0, Size2),         BD(0x8182ffff, Size4) },
        !           694:                { BA(1, Size2),         BD(0x8182ffff, Size4) },
        !           695:                { BA(2, Size2),         BD(0x8182ffff, Size4) },
        !           696:                { BA(3, Size2),         BD(0x8182ffff, Size4) },
        !           697:                { BA(4, Size2),         BD(0x8384ffff, Size4) },
        !           698:                { BA(5, Size2),         BD(0x8384ffff, Size4) },
        !           699:                { BA(6, Size2),         BD(0x8384ffff, Size4) },
        !           700:                { BA(7, Size2),         BD(0x8384ffff, Size4) },
        !           701: 
        !           702:                { BA(0, Size3),         BD(0x8182ffff, Size4) },
        !           703:                { BA(1, Size3),         BD(0x8182ffff, Size4) },
        !           704:                { BA(2, Size3),         BD(0x8182ffff, Size4) },
        !           705:                { BA(3, Size3),         BD(0x8182ffff, Size4) },
        !           706:                { BA(4, Size3),         BD(0x8384ffff, Size4) },
        !           707:                { BA(5, Size3),         BD(0x8384ffff, Size4) },
        !           708:                { BA(6, Size3),         BD(0x8384ffff, Size4) },
        !           709:                { BA(7, Size3),         BD(0x8384ffff, Size4) },
        !           710: 
        !           711:                { BA(0, Size4),         BD(0x8182ffff, Size4) },
        !           712:                { BA(1, Size4),         BD(0x8182ffff, Size4) },
        !           713:                { BA(2, Size4),         BD(0x8182ffff, Size4) },
        !           714:                { BA(3, Size4),         BD(0x8182ffff, Size4) },
        !           715:                { BA(4, Size4),         BD(0x8384ffff, Size4) },
        !           716:                { BA(5, Size4),         BD(0x8384ffff, Size4) },
        !           717:                { BA(6, Size4),         BD(0x8384ffff, Size4) },
        !           718:                { BA(7, Size4),         BD(0x8384ffff, Size4) },
        !           719:        },
        !           720:        .table_write = {
        !           721:                { BA(0, Size1), W1,             BD(0, Size4),   "AA345678" },
        !           722:                { BA(1, Size1), W1,             BD(0, Size4),   "AA345678" },
        !           723:                { BA(2, Size1), W1,             BD(0, Size4),   "AA345678" },
        !           724:                { BA(3, Size1), W1,             BD(0, Size4),   "AA345678" },
        !           725:                { BA(4, Size1), W1,             BD(0, Size4),   "12AA5678" },
        !           726:                { BA(5, Size1), W1,             BD(0, Size4),   "12AA5678" },
        !           727:                { BA(6, Size1), W1,             BD(0, Size4),   "12AA5678" },
        !           728:                { BA(7, Size1), W1,             BD(0, Size4),   "12AA5678" },
        !           729: 
        !           730:                { BA(0, Size2), W2,             BD(0, Size4),   "AB345678" },
        !           731:                { BA(1, Size2), W2,             BD(0, Size4),   "AB345678" },
        !           732:                { BA(2, Size2), W2,             BD(0, Size4),   "AB345678" },
        !           733:                { BA(3, Size2), W2,             BD(0, Size4),   "AB345678" },
        !           734:                { BA(4, Size2), W2,             BD(0, Size4),   "12AB5678" },
        !           735:                { BA(5, Size2), W2,             BD(0, Size4),   "12AB5678" },
        !           736:                { BA(6, Size2), W2,             BD(0, Size4),   "12AB5678" },
        !           737:                { BA(7, Size2), W2,             BD(0, Size4),   "12AB5678" },
        !           738: 
        !           739:                // 3バイトは来ないはず?
        !           740: 
        !           741:                { BA(0, Size4), W4,             BD(0, Size4),   "AB345678" },
        !           742:                { BA(1, Size4), W4,             BD(0, Size4),   "AB345678" },
        !           743:                { BA(2, Size4), W4,             BD(0, Size4),   "AB345678" },
        !           744:                { BA(3, Size4), W4,             BD(0, Size4),   "AB345678" },
        !           745:                { BA(4, Size4), W4,             BD(0, Size4),   "12AB5678" },
        !           746:                { BA(5, Size4), W4,             BD(0, Size4),   "12AB5678" },
        !           747:                { BA(6, Size4), W4,             BD(0, Size4),   "12AB5678" },
        !           748:                { BA(7, Size4), W4,             BD(0, Size4),   "12AB5678" },
        !           749:        },
        !           750: };
        !           751: 
        !           752: static TestData
        !           753: table_L = {
        !           754:        .name = "BusIO_L",
        !           755:        .table_read = {
        !           756:                { BA(0, Size1),         BD(0x81828384, Size4) },
        !           757:                { BA(1, Size1),         BD(0x81828384, Size4) },
        !           758:                { BA(2, Size1),         BD(0x81828384, Size4) },
        !           759:                { BA(3, Size1),         BD(0x81828384, Size4) },
        !           760:                { BA(4, Size1),         BD(0x85868788, Size4) },
        !           761:                { BA(5, Size1),         BD(0x85868788, Size4) },
        !           762:                { BA(6, Size1),         BD(0x85868788, Size4) },
        !           763:                { BA(7, Size1),         BD(0x85868788, Size4) },
        !           764: 
        !           765:                { BA(0, Size2),         BD(0x81828384, Size4) },
        !           766:                { BA(1, Size2),         BD(0x81828384, Size4) },
        !           767:                { BA(2, Size2),         BD(0x81828384, Size4) },
        !           768:                { BA(3, Size2),         BD(0x81828384, Size4) },
        !           769:                { BA(4, Size2),         BD(0x85868788, Size4) },
        !           770:                { BA(5, Size2),         BD(0x85868788, Size4) },
        !           771:                { BA(6, Size2),         BD(0x85868788, Size4) },
        !           772:                { BA(7, Size2),         BD(0x85868788, Size4) },
        !           773: 
        !           774:                { BA(0, Size3),         BD(0x81828384, Size4) },
        !           775:                { BA(1, Size3),         BD(0x81828384, Size4) },
        !           776:                { BA(2, Size3),         BD(0x81828384, Size4) },
        !           777:                { BA(3, Size3),         BD(0x81828384, Size4) },
        !           778:                { BA(4, Size3),         BD(0x85868788, Size4) },
        !           779:                { BA(5, Size3),         BD(0x85868788, Size4) },
        !           780:                { BA(6, Size3),         BD(0x85868788, Size4) },
        !           781:                { BA(7, Size3),         BD(0x85868788, Size4) },
        !           782: 
        !           783:                { BA(0, Size4),         BD(0x81828384, Size4) },
        !           784:                { BA(1, Size4),         BD(0x81828384, Size4) },
        !           785:                { BA(2, Size4),         BD(0x81828384, Size4) },
        !           786:                { BA(3, Size4),         BD(0x81828384, Size4) },
        !           787:                { BA(4, Size4),         BD(0x85868788, Size4) },
        !           788:                { BA(5, Size4),         BD(0x85868788, Size4) },
        !           789:                { BA(6, Size4),         BD(0x85868788, Size4) },
        !           790:                { BA(7, Size4),         BD(0x85868788, Size4) },
        !           791:        },
        !           792:        .table_write = {
        !           793:                { BA(0, Size1), W1,             BD(0, Size4),   "AAAA5678" },
        !           794:                { BA(1, Size1), W1,             BD(0, Size4),   "AAAA5678" },
        !           795:                { BA(2, Size1), W1,             BD(0, Size4),   "AAAA5678" },
        !           796:                { BA(3, Size1), W1,             BD(0, Size4),   "AAAA5678" },
        !           797: 
        !           798:                { BA(0, Size2), W2,             BD(0, Size4),   "ABAB5678" },
        !           799:                { BA(1, Size2), W2,             BD(0, Size4),   "AABA5678" },
        !           800:                { BA(2, Size2), W2,             BD(0, Size4),   "ABAB5678" },
        !           801:                { BA(3, Size2), W2,             BD(0, Size4),   "AABA5678" },
        !           802: 
        !           803:                { BA(0, Size3), W3,             BD(0, Size4),   "ABC05678" },
        !           804:                { BA(1, Size3), W3,             BD(0, Size4),   "AABC5678" },
        !           805:                { BA(2, Size3), W3,             BD(0, Size4),   "ABAB5678" },
        !           806:                { BA(3, Size3), W3,             BD(0, Size4),   "AABA5678" },
        !           807: 
        !           808:                { BA(0, Size4), W4,             BD(0, Size4),   "ABCD5678" },
        !           809:                { BA(1, Size4), W4,             BD(0, Size4),   "AABC5678" },
        !           810:                { BA(2, Size4), W4,             BD(0, Size4),   "ABAB5678" },
        !           811:                { BA(3, Size4), W4,             BD(0, Size4),   "AABA5678" },
        !           812:        },
        !           813: };
        !           814: 
1.1       root      815: int
                    816: main()
                    817: {
1.1.1.7 ! root      818:        do_test(new BusIO_B<TestByteDev>(),                     table_B);
        !           819:        do_test(new BusIO_BB<TestByteDev>(),            table_BB);
        !           820:        do_test(new BusIO_BBBB<TestByteDev>(),          table_BBBB);
        !           821:        do_test(new BusIO_BFFF<TestByteDev>(),          table_BFFF);
        !           822:        do_test(new BusIO_EB<TestByteDev>(),            table_EB);
        !           823:        do_test(new BusIO_FB<TestByteDev>(),            table_FB);
        !           824: 
        !           825:        do_test(new BusIO_W<TestWordDev>(),                     table_W);
        !           826:        do_test(new BusIO_WF<TestWordDev>(),            table_WF);
        !           827: 
        !           828:        do_test(new BusIO_L<TestLongDev>(),                     table_L);
1.1       root      829: 
                    830:        return 0;
                    831: }
                    832: 
                    833: // リンカを通すためのダミー
                    834: void
1.1.1.5   root      835: vmpanic_func(const char *funcname, const char *fmt, ...)
1.1       root      836: {
                    837:        va_list ap;
                    838: 
                    839:        printf("panic: %s: ", funcname);
                    840:        va_start(ap, fmt);
                    841:        vprintf(fmt, ap);
                    842:        va_end(ap);
                    843:        exit(1);
                    844: }

unix.superglobalmegacorp.com

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