trunk/src/mess/machine/a2vulcan.c
| r20913 | r20914 | |
| 4 | 4 | |
| 5 | 5 | Applied Engineering Vulcan IDE controller |
| 6 | 6 | |
| 7 | Our copy of ROM version 1.4 will refuse any drive > 40 megs (top 2 bytes of # blocks >= 0x15b). |
| 8 | Protection against field upgrades? |
| 9 | |
| 10 | Vulcan Gold ROMs omit this protection but don't work with the version of the partitioner program |
| 11 | we have. |
| 12 | |
| 7 | 13 | Recognized drives by IDE features parameters: |
| 8 | 14 | (# of cylinders is never checked, just heads, sectors, and the vendor specific at 0x0A) |
| 9 | 15 | |
| 10 | | H S Vendor specific #5 |
| 11 | | 8, 33 + 0x69 |
| 12 | | 2, 33 + 0x69 |
| 13 | | 4, 26 + 0x69 |
| 14 | | 5, 29 + (any) |
| 15 | | 7, 29 + 0x44 |
| 16 | | 9, 29 + (any) |
| 17 | | 9, 36 + 0x44 |
| 18 | | 9, 36 + 0xff |
| 19 | | 7, 34 + (any) |
| 20 | | 4, 17 + 0x55 |
| 21 | | 4, 26 + 0x55 |
| 22 | | 5, 17 + 0x55 |
| 23 | | 6, 26 + 0x55 |
| 24 | | 2, 28 + 0x36 |
| 25 | | 4, 28 + 0x36 |
| 26 | | 4, 28 + 0x67 |
| 27 | | 4, 27 + 0x43 |
| 28 | | 5, 17 + 0x26 |
| 29 | | 15, 32 + 0x43 |
| 30 | | 16, 38 + 0x94 |
| 31 | | 10, 17 + (any) |
| 16 | H S Vendor specific #5 |
| 17 | 8, 33 + 0x69 0x31d blocks (400K?!) |
| 18 | 2, 33 + 0x69 0xa208 blocks (20 megs, 21237760 bytes) |
| 19 | 4, 26 + 0x69 0x14500 blocks (40 megs, 42598400 bytes) |
| 20 | 5, 29 + (any) 0x25c5b blocks (80 megs, 79214080 bytes) (chs = 1067,5,29) |
| 21 | 7, 29 + 0x44 0x34e19 blocks (100 megs, 110899712 bytes) |
| 22 | 9, 29 + (any) 0x44068 blocks (140 megs, 142659584 bytes) (chs = 1068,9,29) |
| 23 | 9, 36 + 0x44 0x54888 blocks (180 megs, 177278976 bytes) |
| 24 | 9, 36 + 0xff 0x645a8 blocks (200 megs, 210456576 bytes) |
| 25 | 7, 34 + (any) 0x32252 blocks (100 megs, 105161728 bytes) (chs = 863,7,34) |
| 26 | 4, 17 + 0x55 0xa218 blocks (20 megs, 21245952 bytes) |
| 27 | 4, 26 + 0x55 0xa218 blocks (20 megs, 21245952 bytes) |
| 28 | 5, 17 + 0x55 0x15234 blocks (40 megs, 44328960 bytes) |
| 29 | 6, 26 + 0x55 0x15234 blocks (40 megs, 44328960 bytes) |
| 30 | 2, 28 + 0x36 0xa250 blocks (20 megs, 21274624 bytes) |
| 31 | 4, 28 + 0x36 0x143c0 blocks (40 megs, 42434450 bytes) |
| 32 | 4, 28 + 0x67 0x143c0 blocks (40 megs, 42434450 bytes) |
| 33 | 4, 27 + 0x43 0x147cc blocks (40 megs, 42964992 bytes) |
| 34 | 5, 17 + 0x26 0x13ec0 blocks (40 megs, 41779200 bytes) (chs = 960,5,17) |
| 35 | 15, 32 + 0x43 0x5f6e0 blocks (200 megs, 200130560 bytes) |
| 36 | 16, 38 + 0x94 0x6540c blocks (200 megs, 212342784 bytes) |
| 37 | 10, 17 + (any) 0x2792f blocks (80 megs, 82992640 bytes) (chs = 954,10,17) |
| 32 | 38 | |
| 39 | Partition block: |
| 40 | +0000: 0xAE 0xAE signature |
| 41 | +0002: bytesum of remaining 508 bytes of partition block |
| 42 | +0005: total # of blocks (3 bytes) |
| 43 | +000E: boot partition # (0 based) |
| 44 | +0100: partition records |
| 45 | |
| 46 | Partition record: |
| 47 | +02: partition number (seems to be only valud for non-CLEAR partitions) |
| 48 | +03: little-endian unsigned word: # of 512 byte blocks |
| 49 | +06: bit 6 set for ON, bits 0-2 = 0 CLEAR, 1 PRODOS, 2 DOS 3.3, 3 PASCAL, 4 CP/M |
| 50 | +07: Partition name (Apple high-ASCII, zero terminated unless full 10 chars) |
| 51 | |
| 33 | 52 | *********************************************************************/ |
| 34 | 53 | |
| 35 | 54 | #include "a2vulcan.h" |
| r20913 | r20914 | |
| 107 | 126 | astring tempstring; |
| 108 | 127 | m_rom = device().machine().root_device().memregion(this->subtag(tempstring, VULCAN_ROM_REGION))->base(); |
| 109 | 128 | |
| 110 | | // patch partition table check failure |
| 111 | | // m_rom[0x59e] = 0xea; |
| 112 | | // m_rom[0x59f] = 0xea; |
| 129 | // disable 40 meg partition size limit / protection |
| 130 | m_rom[0x59e] = 0xea; |
| 131 | m_rom[0x59f] = 0xea; |
| 113 | 132 | |
| 114 | 133 | save_item(NAME(m_lastdata)); |
| 115 | 134 | save_item(NAME(m_ram)); |
| r20913 | r20914 | |
| 217 | 236 | break; |
| 218 | 237 | |
| 219 | 238 | default: |
| 220 | | printf("Write %02x @ C0n%x\n", data, offset); |
| 239 | logerror("a2vulcan: write %02x @ unhandled C0n%x\n", data, offset); |
| 221 | 240 | break; |
| 222 | 241 | } |
| 223 | 242 | } |
| r20913 | r20914 | |
| 247 | 266 | return m_ram[offset + m_rambank]; |
| 248 | 267 | } |
| 249 | 268 | |
| 250 | | return m_rom[(offset & 0x3ff)+m_rombank]; |
| 269 | offset -= 0x400; |
| 270 | return m_rom[offset+m_rombank]; |
| 251 | 271 | } |
| 252 | 272 | |
| 253 | 273 | void a2bus_vulcanbase_device::write_c800(address_space &space, UINT16 offset, UINT8 data) |