Annotation of previous/src/ioMemTabNEXT.c, revision 1.1.1.3

1.1       root        1: /*
                      2:   Previous - ioMemTabNEXT.c
                      3: 
                      4:   This file is distributed under the GNU Public License, version 2 or at
                      5:   your option any later version. Read the file gpl.txt for details.
                      6: 
                      7:   Table with hardware IO handlers for the NEXT.
                      8: */
                      9: 
                     10: 
                     11: const char IoMemTabST_fileid[] = "Previous ioMemTabST.c : " __DATE__ " " __TIME__;
                     12: 
                     13: #include "main.h"
                     14: #include "ioMem.h"
                     15: #include "ioMemTables.h"
                     16: #include "video.h"
                     17: #include "configuration.h"
                     18: #include "sysdeps.h"
                     19: #include "m68000.h"
1.1.1.3 ! root       20: #include "keymap.h"
1.1       root       21: 
                     22: #define IO_SEG_MASK    0x1FFFF
                     23: /*
                     24:  *
                     25:  */
                     26: static Uint8 scr2_0=0;
                     27: static Uint8 scr2_1=0;
                     28: static Uint8 scr2_2=0;
                     29: static Uint8 scr2_3=0;
                     30: 
                     31: static Uint32 intStat=0x04;
                     32: static Uint32 intMask=0x00000000;
                     33: 
                     34: void SCR2_Write0(void)
                     35: {      
                     36: //     Log_Printf(LOG_WARN,"SCR2 write at $%08x val=$%02x PC=$%08x\n", IoAccessCurrentAddress,IoMem[IoAccessCurrentAddress & IO_SEG_MASK],m68k_getpc());
                     37:        scr2_0=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                     38: }
                     39: 
                     40: void SCR2_Read0(void)
                     41: {
                     42: //     Log_Printf(LOG_WARN,"SCR2 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
                     43:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=scr2_0;
                     44: }
                     45: 
                     46: void SCR2_Write1(void)
                     47: {      
                     48: //     Log_Printf(LOG_WARN,"SCR2 write at $%08x val=$%02x PC=$%08x\n", IoAccessCurrentAddress,IoMem[IoAccessCurrentAddress & IO_SEG_MASK],m68k_getpc());
                     49:        scr2_1=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                     50: }
                     51: 
                     52: void SCR2_Read1(void)
                     53: {
                     54: //     Log_Printf(LOG_WARN,"SCR2 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
                     55:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=scr2_1;
                     56: }
                     57: 
                     58: 
                     59: #define SCR2_RTDATA            0x04
                     60: #define SCR2_RTCLK             0x02
                     61: #define SCR2_RTCE              0x01
                     62: 
                     63: #define SCR2_LED               0x01
                     64: #define SCR2_ROM               0x80
                     65: 
                     66: 
                     67: // file mon/nvram.h
                     68: // struct nvram_info {
                     69: // #define     NI_RESET        9
                     70: //     u_int   ni_reset : 4,
                     71: // #define     SCC_ALT_CONS    0x08000000
                     72: //             ni_alt_cons : 1,
                     73: // #define     ALLOW_EJECT     0x04000000
                     74: //             ni_allow_eject : 1,
                     75: //             ni_vol_r : 6,
                     76: //             ni_brightness : 6,
                     77: // #define     HW_PWD  0x6
                     78: //             ni_hw_pwd : 4,
                     79: //             ni_vol_l : 6,
                     80: //             ni_spkren : 1,
                     81: //             ni_lowpass : 1,
                     82: // #define     BOOT_ANY        0x00000002
                     83: //             ni_boot_any : 1,
                     84: // #define     ANY_CMD         0x00000001
                     85: //             ni_any_cmd : 1;
                     86: // #define     NVRAM_HW_PASSWD 6
                     87: //     u_char ni_ep[NVRAM_HW_PASSWD];
                     88: // #define     ni_enetaddr     ni_ep
                     89: // #define     ni_hw_passwd    ni_ep
                     90: //     u_short ni_simm;                /* 4 SIMMs, 4 bits per SIMM */
                     91: //     char ni_adobe[2];
                     92: //     u_char ni_pot[3];
                     93: //     u_char  ni_new_clock_chip : 1,
                     94: //             ni_auto_poweron : 1,
                     95: //             ni_use_console_slot : 1,        /* Console slot was set by user. */
                     96: //             ni_console_slot : 2,            /* Preferred console dev slot>>1 */
                     97: //             ni_use_parity_mem : 1,  /* Use parity RAM if available? */
                     98: //             : 2;
                     99: // #define     NVRAM_BOOTCMD   12
                    100: //     char ni_bootcmd[NVRAM_BOOTCMD];
                    101: //     u_short ni_cksum;
                    102: // };
                    103: 
                    104: // #define     N_brightness    0
                    105: // #define     N_volume_l      1
                    106: // #define     N_volume_r      2
                    107: 
                    108: /* nominal values during self test */
                    109: // #define     BRIGHT_NOM      20
                    110: // #define     VOL_NOM         0
                    111: 
                    112: /* bits in ni_pot[0] */
                    113: // #define POT_ON                      0x01
                    114: // #define EXTENDED_POT                0x02
                    115: // #define LOOP_POT            0x04
                    116: // #define     VERBOSE_POT             0x08
                    117: // #define     TEST_DRAM_POT           0x10
                    118: // #define     BOOT_POT                0x20
                    119: // #define     TEST_MONITOR_POT        0x40
                    120: 
                    121: // Uint8 rtc_ram[32];
                    122: 
1.1.1.3 ! root      123: Uint8 rtc_ram[32]={ // values from nextcomputers.org forums
1.1.1.2   root      124: 0x94,0x0f,0x40,0x03,0x00,0x00,0x00,0x00,
                    125: 0x00,0x00,0xfb,0x6d,0x00,0x00,0x4b,0x00,
                    126: 0x41,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
                    127: 0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x7e
1.1       root      128: };
                    129: 
                    130: static char rtc_ram_info[1024];
                    131: char * get_rtc_ram_info(void) {
                    132:        char buf[256];
                    133:        int sum;
                    134:        int i;
                    135:        int ni_vol_l,ni_vol_r,ni_brightness;
                    136:        int ni_hw_pwd,ni_spkren,ni_lowpass;
                    137:        sprintf(buf,"Rtc info:\n");
                    138:        strcpy(rtc_ram_info,buf);
                    139: 
                    140: // struct nvram_info {
                    141: // #define     NI_RESET        9
                    142: //     u_int   ni_reset : 4,
                    143: 
                    144:        sprintf(buf,"RTC RESET:x%1X ",rtc_ram[0]>>4);
                    145:        strcat(rtc_ram_info,buf);       
                    146: 
                    147: // #define     SCC_ALT_CONS    0x08000000
                    148: //             ni_alt_cons : 1,
                    149:        if (rtc_ram[0]&0x08) strcat(rtc_ram_info,"ALT_CONS ");
                    150: // #define     ALLOW_EJECT     0x04000000
                    151: //             ni_allow_eject : 1,
                    152:        if (rtc_ram[0]&0x04) strcat(rtc_ram_info,"ALLOW_EJECT ");
                    153: //             ni_vol_r : 6,
                    154: //             ni_brightness : 6,
                    155: // #define     HW_PWD  0x6
                    156: //             ni_hw_pwd : 4,
                    157: //             ni_vol_l : 6,
                    158: //             ni_spkren : 1,
                    159: //             ni_lowpass : 1,
                    160: // #define     BOOT_ANY        0x00000002
                    161: //             ni_boot_any : 1,
                    162: // #define     ANY_CMD         0x00000001      
                    163: //             ni_any_cmd : 1;
                    164: 
                    165:        ni_vol_r=(((rtc_ram[0]&0x3)<<4)|((rtc_ram[1]&0xF0)>>4));
                    166:        ni_brightness=(((rtc_ram[1]&0xF)<<2)|((rtc_ram[2]&0xC0)>>6));
                    167:        ni_vol_l=((rtc_ram[2]&0x3F)<<2);
                    168:        ni_hw_pwd=(rtc_ram[3]&0xF0)>>4;
                    169:        sprintf(buf,"VOL_R:x%1X BRIGHT:x%1X HWPWD:x%1X VOL_L:x%1X",ni_vol_r,ni_brightness,ni_vol_l,ni_hw_pwd);
                    170:        strcat(rtc_ram_info,buf);       
                    171: 
                    172:        if (rtc_ram[3]&0x08) strcat(rtc_ram_info,"SPK_ENABLE ");
                    173:        if (rtc_ram[3]&0x04) strcat(rtc_ram_info,"LOW_PASS ");
                    174:        if (rtc_ram[3]&0x02) strcat(rtc_ram_info,"BOOT_ANY ");
                    175:        if (rtc_ram[3]&0x01) strcat(rtc_ram_info,"ANY_CMD ");
                    176:        
                    177:        
                    178: 
                    179: // #define     NVRAM_HW_PASSWD 6
                    180: //     u_char ni_ep[NVRAM_HW_PASSWD];
                    181: 
                    182:        sprintf(buf,"NVRAM_HW_PASSWD:%2X %2X %2X %2X %2X %2X ",rtc_ram[4],rtc_ram[5],rtc_ram[6],rtc_ram[7],rtc_ram[8],rtc_ram[9]);
                    183:        strcat(rtc_ram_info,buf);       
                    184: // #define     ni_enetaddr     ni_ep
                    185: // #define     ni_hw_passwd    ni_ep
                    186: //     u_short ni_simm;                /* 4 SIMMs, 4 bits per SIMM */
                    187:        sprintf(buf,"SIMM:%1X %1X %1X %1X ",rtc_ram[10]>>4,rtc_ram[10]&0x0F,rtc_ram[11]>>4,rtc_ram[11]&0x0F);
                    188:        strcat(rtc_ram_info,buf);
                    189: 
                    190: 
                    191: //     char ni_adobe[2];
                    192:        sprintf(buf,"ADOBE:%2X %2X ",rtc_ram[12],rtc_ram[13]);
                    193:        strcat(rtc_ram_info,buf);
                    194: 
                    195: //     u_char ni_pot[3];
                    196:        sprintf(buf,"POT:%2X %2X %2X ",rtc_ram[14],rtc_ram[15],rtc_ram[16]);
                    197:        strcat(rtc_ram_info,buf);
                    198: 
                    199: //     u_char  ni_new_clock_chip : 1,
                    200: //             ni_auto_poweron : 1,
                    201: //             ni_use_console_slot : 1,        /* Console slot was set by user. */
                    202: //             ni_console_slot : 2,            /* Preferred console dev slot>>1 */
                    203: //             ni_use_parity_mem : 1,  /* Use parity RAM if available? */
                    204: //             : 2;
                    205:        if (rtc_ram[17]&0x80) strcat(rtc_ram_info,"NEW_CLOCK_CHIP ");
                    206:        if (rtc_ram[17]&0x40) strcat(rtc_ram_info,"AUTO_POWERON ");
                    207:        if (rtc_ram[17]&0x20) strcat(rtc_ram_info,"CONSOLE_SLOT ");
                    208: 
                    209:        sprintf(buf,"console_slot:%X ",(rtc_ram[17]&0x18)>>3);
                    210:        strcat(rtc_ram_info,buf);
                    211: 
                    212:        if (rtc_ram[17]&0x04) strcat(rtc_ram_info,"USE_PARITY ");
                    213: 
                    214: 
                    215:        strcat(rtc_ram_info,"boot_command:");
                    216:        for (i=0;i<12;i++) {
                    217:                if ((rtc_ram[18+i]>=0x20) && (rtc_ram[18+i]<=0x7F)) {
                    218:                        sprintf(buf,"%c",rtc_ram[18+i]);
                    219:                        strcat(rtc_ram_info,buf);
                    220:                }
                    221:        }
                    222: 
                    223:        strcat(rtc_ram_info," ");
                    224:        sprintf(buf,"CKSUM:%2X %2X ",rtc_ram[30],rtc_ram[31]);
                    225:        strcat(rtc_ram_info,buf);
                    226: 
                    227: 
                    228:        sum=0;
                    229:        for (i=0;i<30;i+=2) {
                    230:                sum+=(rtc_ram[i]<<8)|(rtc_ram[i+1]);
                    231:                if (sum>=0x10000) { sum-=0x10000;
                    232:                        sum+=1;
                    233:                }
                    234:        }
                    235: 
                    236:        sum=0xFFFF-sum;
                    237: 
                    238:        sprintf(buf,"CALC_CKSUM:%04X ",sum&0xFFFF);
                    239:        strcat(rtc_ram_info,buf);
                    240: 
                    241: // #define     NVRAM_BOOTCMD   12
                    242: //     char ni_bootcmd[NVRAM_BOOTCMD];
                    243: //     u_short ni_cksum;
                    244: // };
                    245: 
                    246:        return rtc_ram_info;
                    247: }
                    248: 
                    249: void SCR2_Write2(void)
                    250: {      
                    251:        static int phase=0;
                    252:        static Uint8 rtc_command=0;
                    253:        static Uint8 rtc_value=0;
                    254:        static Uint8 rtc_return=0;
                    255:        static Uint8 rtc_status=0x90;   // FTU at startup 0x90 for MCS1850
                    256: 
                    257:        Uint8 old_scr2_2=scr2_2;
                    258: //     Log_Printf(LOG_WARN,"SCR2 write at $%08x val=$%02x PC=$%08x\n", IoAccessCurrentAddress,IoMem[IoAccessCurrentAddress & IO_SEG_MASK],m68k_getpc());
                    259:        scr2_2=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                    260: 
                    261: /*
                    262:        if ((old_scr2_2&SCR2_RTCE)!=(scr2_2&SCR2_RTCE))
                    263:                Log_Printf(LOG_WARN,"SCR2 RTCE change at $%08x val=%x PC=$%08x\n",
                    264:                           IoAccessCurrentAddress,scr2_2&SCR2_RTCE,m68k_getpc());
                    265: 
                    266:        if ((old_scr2_2&SCR2_RTCLK)!=(scr2_2&SCR2_RTCLK))
                    267:                Log_Printf(LOG_WARN,"SCR2 RTCLK change at $%08x val=%x PC=$%08x\n",
                    268:                           IoAccessCurrentAddress,scr2_2&SCR2_RTCLK,m68k_getpc());
                    269: 
                    270:        if ((old_scr2_2&SCR2_RTDATA)!=(scr2_2&SCR2_RTDATA))
                    271:                Log_Printf(LOG_WARN,"SCR2 RTDATA change at $%08x val=%x PC=$%08x\n",
                    272:                           IoAccessCurrentAddress,scr2_2&SCR2_RTDATA,m68k_getpc());
                    273: */
                    274: 
                    275: // and now some primitive handling
                    276: // treat only if CE is set to 1
                    277:        if (scr2_2&SCR2_RTCE) {
                    278:                        if (phase==-1) phase=0;
                    279:                        // if we are in going down clock... do something
                    280:                        if (((old_scr2_2&SCR2_RTCLK)!=(scr2_2&SCR2_RTCLK)) && ((scr2_2&SCR2_RTCLK)==0) ) {
                    281:                                if (phase<8)
                    282:                                        rtc_command=(rtc_command<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    283:                                if ((phase>=8) && (phase<16)) {
                    284:                                        rtc_value=(rtc_value<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    285: 
                    286:                                        // if we read RAM register, output RT_DATA bit
                    287:                                        if (rtc_command<=0x1F) {
                    288:                                                scr2_2=scr2_2&(~SCR2_RTDATA);
                    289:                                                if (rtc_ram[rtc_command]&(0x80>>(phase-8)))
                    290:                                                        scr2_2|=SCR2_RTDATA;
                    291:                                                rtc_return=(rtc_return<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    292:                                        }
                    293:                                        // read the status 0x30
                    294:                                        if (rtc_command==0x30) {
                    295:                                                scr2_2=scr2_2&(~SCR2_RTDATA);
                    296:                                                // for now status = 0x98 (new rtc + FTU)
                    297:                                                if (rtc_status&(0x80>>(phase-8)))
                    298:                                                        scr2_2|=SCR2_RTDATA;
                    299:                                                rtc_return=(rtc_return<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    300:                                        }
                    301:                                        // read the status 0x31
                    302:                                        if (rtc_command==0x31) {
                    303:                                                scr2_2=scr2_2&(~SCR2_RTDATA);
                    304:                                                // for now 0x00
                    305:                                                if (0x00&(0x80>>(phase-8)))
                    306:                                                        scr2_2|=SCR2_RTDATA;
                    307:                                                rtc_return=(rtc_return<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    308:                                        }
                    309:                                        if ((rtc_command>=0x20) && (rtc_command<=0x2F)) {
                    310:                                                scr2_2=scr2_2&(~SCR2_RTDATA);
                    311:                                                // for now 0x00
                    312:                                                if (0x00&(0x80>>(phase-8)))
                    313:                                                        scr2_2|=SCR2_RTDATA;
                    314:                                                rtc_return=(rtc_return<<1)|((scr2_2&SCR2_RTDATA)?1:0);
                    315:                                        }
                    316: 
                    317:                                }
                    318: 
                    319:                                phase++;
                    320:                                if (phase==16) {
                    321:                                        Log_Printf(LOG_WARN,"SCR2 RTC command complete %x %x %x at PC=$%08x\n",
                    322:                                                        rtc_command,rtc_value,rtc_return,m68k_getpc());
                    323:                                        if ((rtc_command>=0x80) && (rtc_command<=0x9F))
                    324:                                                rtc_ram[rtc_command-0x80]=rtc_value;
                    325: 
                    326:                                        // write to x30 register
                    327:                                        if (rtc_command==0xB1) {
                    328:                                                // clear FTU
                    329:                                                if (rtc_value & 0x04) {
                    330:                                                        rtc_status=rtc_status&(~0x18);
                    331:                                                        intStat=intStat&(~0x04);
                    332:                                                }
                    333:                                        }
                    334:                                }
                    335:                        }
                    336:        } else {
                    337: // else end or abort
                    338:                phase=-1;
                    339:                rtc_command=0;
                    340:                rtc_value=0;
                    341:        }       
                    342: 
                    343: }
                    344: 
                    345: void SCR2_Read2(void)
                    346: {
                    347: //     Log_Printf(LOG_WARN,"SCR2 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
                    348: //     IoMem[IoAccessCurrentAddress & 0x1FFFF]=scr2_2 & (SCR2_RTDATA|SCR2_RTCLK|SCR2_RTCE)); // + data
                    349:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=scr2_2;
                    350: }
                    351: 
                    352: void SCR2_Write3(void)
                    353: {      
                    354:        Uint8 old_scr2_3=scr2_3;
                    355: //     Log_Printf(LOG_WARN,"SCR2 write at $%08x val=$%02x PC=$%08x\n", IoAccessCurrentAddress,IoMem[IoAccessCurrentAddress & IO_SEG_MASK],m68k_getpc());
                    356:        scr2_3=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                    357:        if ((old_scr2_3&SCR2_ROM)!=(scr2_3&SCR2_ROM))
                    358:                Log_Printf(LOG_WARN,"SCR2 ROM change at $%08x val=%x PC=$%08x\n",
                    359:                           IoAccessCurrentAddress,scr2_3&SCR2_ROM,m68k_getpc());
                    360:        if ((old_scr2_3&SCR2_LED)!=(scr2_3&SCR2_LED))
                    361:                Log_Printf(LOG_WARN,"SCR2 LED change at $%08x val=%x PC=$%08x\n",
                    362:                           IoAccessCurrentAddress,scr2_3&SCR2_LED,m68k_getpc());
                    363: }
                    364: 
                    365: 
                    366: void SCR2_Read3(void)
                    367: {
                    368: //     Log_Printf(LOG_WARN,"SCR2 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
                    369:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=scr2_3;
                    370: }
                    371: 
                    372: /*
                    373: *
1.1.1.2   root      374: bits 0:1 cpu speed; 0 = 40 MHz, 1 = 20 MHz, 2 = 25MHz, 3 = 33 MHz (meaningless on color Slab)
                    375: bits 2:3 reserved: 0
                    376: bits 4:5 mem speed; 0 = 120ns, 1 = 100ns, 2 = 80ns, 3 = 60ns (meaningless on color Slab)
                    377: bits 6:7 video mem speed; 0 = 120ns, 1 = 100ns, 2 = 80ns, 3 = 60ns (meaningless on color Slab)
                    378: bits 8:11 board revision; for 030 Cube: 0 = DCD input inverted, 1 = DCD polarity fixed, 2 = must disable DSP mem before reset; for all other systems: 0
                    379: bits 12:15 cpu type; 0 = Cube 030, 1 = mono Slab, 2 = Cube 040, 3 = color Slab
                    380: bits 16:23 dma rev: 1
                    381: bits 24:27 reserved: 0
                    382: bits 28:31 slot ID: 0
                    383: 
                    384: 
                    385: for Cube 040:
                    386: 0000 0000 0000 0001 0011 0000 0101 0011
                    387: 00 01 20 52
                    388:  
                    389: for Cube 030:
                    390: 0000 0000 0000 0001 0000 0001 0101 0011
                    391: 00 01 01 52
1.1       root      392: */
                    393: 
                    394: 
                    395: void SCR1_Read0(void)
                    396: {
                    397:        Log_Printf(LOG_WARN,"SCR1 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
1.1.1.2   root      398:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=0x00; // slot ID 0
1.1       root      399: }
                    400: void SCR1_Read1(void)
                    401: {
                    402:        Log_Printf(LOG_WARN,"SCR1 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
1.1.1.2   root      403:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=0x01; // dma rev 1
1.1       root      404: }
                    405: void SCR1_Read2(void)
                    406: {
                    407:        Log_Printf(LOG_WARN,"SCR1 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
1.1.1.2   root      408:     if(ConfigureParams.System.nCpuLevel == 3)
                    409:         IoMem[IoAccessCurrentAddress & 0x1FFFF]=0x01; // Cube 030, board rev 1
                    410:     else
                    411:         IoMem[IoAccessCurrentAddress & 0x1FFFF]=0x20; // Cube 040, board rev 0
1.1       root      412: }
                    413: void SCR1_Read3(void)
                    414: {
                    415:        Log_Printf(LOG_WARN,"SCR1 read at $%08x PC=$%08x\n", IoAccessCurrentAddress,m68k_getpc());
1.1.1.2   root      416:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=0x52; // vmem speed 100ns, mem speed 100ns, cpu speed 25 MHz
1.1       root      417: }
                    418: 
                    419: void IntRegStatRead(void) {
                    420:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=intStat;
                    421: }
                    422: 
                    423: void IntRegStatWrite(void) {
                    424:        intStat=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                    425: }
                    426: 
                    427: void IntRegMaskRead(void) {
                    428:        IoMem[IoAccessCurrentAddress & 0x1FFFF]=intMask;
                    429: }
                    430: 
                    431: void IntRegMaskWrite(void) {
                    432:        intMask=IoMem[IoAccessCurrentAddress & 0x1FFFF];
                    433: }
                    434: 
                    435: 
                    436: /*-----------------------------------------------------------------------*/
                    437: /*
                    438:   List of functions to handle read/write hardware interceptions.
                    439: */
                    440: const INTERCEPT_ACCESS_FUNC IoMemTable_NEXT[] =
                    441: {
                    442:        { 0x02000150, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterceptionButTrace },
                    443:        { 0x02004150, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    444:        { 0x02004154, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    445:        { 0x02004158, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    446:        { 0x0200415c, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    447:        { 0x02004188, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    448:        { 0x02006000, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    449:        { 0x02006001, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    450:        { 0x02006002, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    451:        { 0x02006003, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    452:        { 0x02006004, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    453:        { 0x02006005, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    454:        { 0x02006006, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    455:        { 0x02006008, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    456:        { 0x02006009, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    457:        { 0x0200600a, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    458:        { 0x0200600b, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    459:        { 0x0200600a, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    460:        { 0x0200600b, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    461:        { 0x0200600c, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    462:        { 0x0200600d, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    463:        { 0x0200600e, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    464:        { 0x0200600f, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    465:        { 0x02006010, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    466:        { 0x02006011, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    467:        { 0x02006012, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    468:        { 0x02006013, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    469:        { 0x02006014, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    470:        { 0x02007000, SIZE_LONG, IntRegStatRead, IntRegStatWrite },
                    471:        { 0x02007800, SIZE_BYTE, IntRegMaskRead, IntRegMaskWrite },
                    472:        { 0x0200c000, SIZE_BYTE, SCR1_Read0, IoMem_WriteWithoutInterceptionButTrace },
                    473:        { 0x0200c001, SIZE_BYTE, SCR1_Read1, IoMem_WriteWithoutInterceptionButTrace },
                    474:        { 0x0200c002, SIZE_BYTE, SCR1_Read2, IoMem_WriteWithoutInterceptionButTrace },
                    475:        { 0x0200c003, SIZE_BYTE, SCR1_Read3, IoMem_WriteWithoutInterceptionButTrace },
                    476:        { 0x0200c800, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    477:        { 0x0200d000, SIZE_BYTE, SCR2_Read0, SCR2_Write0 },
                    478:        { 0x0200d001, SIZE_BYTE, SCR2_Read1, SCR2_Write1 },
                    479:        { 0x0200d002, SIZE_BYTE, SCR2_Read2, SCR2_Write2 },
                    480:        { 0x0200d003, SIZE_BYTE, SCR2_Read3, SCR2_Write3 },
1.1.1.3 ! root      481:        { 0x0200e000, SIZE_BYTE, Keyboard_Read0, IoMem_WriteWithoutInterception },
        !           482:        { 0x0200e001, SIZE_BYTE, Keyboard_Read1, IoMem_WriteWithoutInterception },
        !           483:        { 0x0200e002, SIZE_BYTE, Keyboard_Read2, IoMem_WriteWithoutInterception },
        !           484:     { 0x0200e003, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
1.1       root      485:        { 0x0200e004, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    486:        { 0x0200e005, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
                    487:        { 0x0200e006, SIZE_BYTE, IoMem_ReadWithoutInterception, IoMem_WriteWithoutInterception },
1.1.1.3 ! root      488:     { 0x0200e008, SIZE_LONG, Keycode_Read, IoMem_WriteWithoutInterception },
1.1       root      489:        { 0x02010000, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    490:        { 0x02012004, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    491:        { 0x02012005, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    492:        { 0x02012007, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    493:        { 0x02014003, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    494:        { 0x02018000, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    495:        { 0x02018001, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    496:        { 0x02018004, SIZE_BYTE, IoMem_ReadWithoutInterceptionButTrace, IoMem_WriteWithoutInterceptionButTrace },
                    497:        { 0, 0, NULL, NULL }
                    498: };

unix.superglobalmegacorp.com

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