|
|
1.1 ! root 1: #include "main.h" ! 2: #include "configuration.h" ! 3: #include "m68000.h" ! 4: #include "sysdeps.h" ! 5: #include "bmap.h" ! 6: ! 7: ! 8: /* NeXT bmap chip emulation */ ! 9: ! 10: ! 11: uae_u32 NEXTbmap[16]; ! 12: ! 13: uae_u32 bmap_get(uae_u32 addr); ! 14: void bmap_put(uae_u32 addr, uae_u32 val); ! 15: ! 16: ! 17: #define BMAP_DATA_RW 0xD ! 18: ! 19: #define BMAP_TP 0x90000000 ! 20: ! 21: uae_u32 bmap_lget(uaecptr addr) { ! 22: if (addr%4) { ! 23: Log_Printf(LOG_WARN, "[BMAP] Unaligned access."); ! 24: abort(); ! 25: } ! 26: ! 27: return bmap_get(addr/4); ! 28: } ! 29: ! 30: uae_u32 bmap_wget(uaecptr addr) { ! 31: uae_u32 w = 0; ! 32: uae_u32 val = bmap_get(addr/4); ! 33: ! 34: switch (addr%4) { ! 35: case 0: ! 36: w = val>>16; ! 37: break; ! 38: case 2: ! 39: w = val; ! 40: break; ! 41: default: ! 42: Log_Printf(LOG_WARN, "[BMAP] Unaligned access."); ! 43: abort(); ! 44: break; ! 45: } ! 46: ! 47: return w; ! 48: } ! 49: ! 50: uae_u32 bmap_bget(uaecptr addr) { ! 51: uae_u32 b = 0; ! 52: uae_u32 val = bmap_get(addr/4); ! 53: ! 54: switch (addr%4) { ! 55: case 0: ! 56: b = val>>24; ! 57: break; ! 58: case 1: ! 59: b = val>>16; ! 60: break; ! 61: case 2: ! 62: b = val>>8; ! 63: break; ! 64: case 3: ! 65: b = val; ! 66: break; ! 67: default: ! 68: break; ! 69: } ! 70: ! 71: return b; ! 72: } ! 73: ! 74: void bmap_lput(uaecptr addr, uae_u32 l) { ! 75: if (addr%4) { ! 76: Log_Printf(LOG_WARN, "[BMAP] Unaligned access."); ! 77: abort(); ! 78: } ! 79: bmap_put(addr/4, l); ! 80: } ! 81: ! 82: void bmap_wput(uaecptr addr, uae_u32 w) { ! 83: uae_u32 val; ! 84: ! 85: switch (addr%4) { ! 86: case 0: ! 87: val = w<<16; ! 88: break; ! 89: case 2: ! 90: val = w; ! 91: break; ! 92: default: ! 93: Log_Printf(LOG_WARN, "[BMAP] Unaligned access."); ! 94: abort(); ! 95: break; ! 96: } ! 97: ! 98: bmap_put(addr/4, val); ! 99: } ! 100: ! 101: void bmap_bput(uaecptr addr, uae_u32 b) { ! 102: uae_u32 val = 0; ! 103: ! 104: switch (addr%4) { ! 105: case 0: ! 106: val = b<<24; ! 107: break; ! 108: case 1: ! 109: val = b<<16; ! 110: break; ! 111: case 2: ! 112: val = b<<8; ! 113: break; ! 114: case 3: ! 115: val = b; ! 116: break; ! 117: default: ! 118: break; ! 119: } ! 120: ! 121: bmap_put(addr/4, val); ! 122: } ! 123: ! 124: ! 125: uae_u32 bmap_get(uae_u32 bmap_reg) { ! 126: uae_u32 val; ! 127: ! 128: switch (bmap_reg) { ! 129: case BMAP_DATA_RW: ! 130: /* This is for detecing thin wire ethernet. ! 131: * It prevents from switching ethernet ! 132: * transceiver to loopback mode. ! 133: */ ! 134: val = NEXTbmap[BMAP_DATA_RW]|0x20000000; ! 135: break; ! 136: ! 137: default: ! 138: val = NEXTbmap[bmap_reg]; ! 139: break; ! 140: } ! 141: ! 142: return val; ! 143: } ! 144: ! 145: void bmap_put(uae_u32 bmap_reg, uae_u32 val) { ! 146: switch (bmap_reg) { ! 147: case BMAP_DATA_RW: ! 148: if ((val&BMAP_TP) != (NEXTbmap[bmap_reg]&BMAP_TP)) { ! 149: if ((val&BMAP_TP)==BMAP_TP) { ! 150: Log_Printf(LOG_WARN, "[BMAP] Switching to twisted pair ethernet."); ! 151: } else if ((val&BMAP_TP)==0) { ! 152: Log_Printf(LOG_WARN, "[BMAP] Switching to thin ethernet."); ! 153: } ! 154: } ! 155: break; ! 156: ! 157: default: ! 158: break; ! 159: } ! 160: ! 161: NEXTbmap[bmap_reg] = val; ! 162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.