trunk/src/mame/drivers/r9751.cpp
| r253154 | r253155 | |
| 67 | 67 | |
| 68 | 68 | DECLARE_READ32_MEMBER(r9751_mmio_5ff_r); |
| 69 | 69 | DECLARE_WRITE32_MEMBER(r9751_mmio_5ff_w); |
| 70 | | DECLARE_READ32_MEMBER(r9751_mmio_ff01_r); |
| 71 | | DECLARE_WRITE32_MEMBER(r9751_mmio_ff01_w); |
| 72 | 70 | DECLARE_READ32_MEMBER(r9751_mmio_ff05_r); |
| 73 | 71 | DECLARE_WRITE32_MEMBER(r9751_mmio_ff05_w); |
| 74 | 72 | DECLARE_READ32_MEMBER(r9751_mmio_fff8_r); |
| r253154 | r253155 | |
| 92 | 90 | UINT32 fdd_dest_address; // 5FF080B0 |
| 93 | 91 | UINT32 fdd_cmd_complete; |
| 94 | 92 | UINT32 smioc_out_addr; |
| 95 | | UINT32 smioc_dma_bank; |
| 96 | | UINT32 fdd_dma_bank; |
| 97 | 93 | attotime timer_32khz_last; |
| 98 | 94 | // End registers |
| 99 | 95 | |
| r253154 | r253155 | |
| 114 | 110 | |
| 115 | 111 | READ8_MEMBER(r9751_state::pdc_dma_r) |
| 116 | 112 | { |
| 117 | | /* This callback function takes the value written to 0xFF01000C as the bank offset */ |
| 118 | | UINT32 address = (fdd_dma_bank & 0x7FFFF800) + (offset&0xFFFF); |
| 119 | | return m_maincpu->space(AS_PROGRAM).read_byte(address); |
| 113 | return m_maincpu->space(AS_PROGRAM).read_byte(offset); |
| 120 | 114 | } |
| 121 | 115 | |
| 122 | 116 | WRITE8_MEMBER(r9751_state::pdc_dma_w) |
| 123 | 117 | { |
| 124 | | /* This callback function takes the value written to 0xFF01000C as the bank offset */ |
| 125 | | UINT32 address = (fdd_dma_bank & 0x7FFFF800) + (data&0xFFFF); |
| 126 | | m_maincpu->space(AS_PROGRAM).write_byte(m_pdc->fdd_68k_dma_address,address); |
| 118 | m_maincpu->space(AS_PROGRAM).write_byte(m_pdc->fdd_68k_dma_address,data); |
| 127 | 119 | } |
| 128 | 120 | |
| 129 | 121 | DRIVER_INIT_MEMBER(r9751_state,r9751) |
| r253154 | r253155 | |
| 131 | 123 | reg_ff050004 = 0; |
| 132 | 124 | reg_fff80040 = 0; |
| 133 | 125 | fdd_dest_address = 0; |
| 126 | // fdd_scsi_command = 0; |
| 134 | 127 | fdd_cmd_complete = 0; |
| 135 | | fdd_dma_bank = 0; |
| 136 | 128 | smioc_out_addr = 0; |
| 137 | | smioc_dma_bank = 0; |
| 138 | 129 | m_mem = &m_maincpu->space(AS_PROGRAM); |
| 139 | 130 | |
| 140 | 131 | } |
| r253154 | r253155 | |
| 156 | 147 | READ32_MEMBER( r9751_state::r9751_mmio_5ff_r ) |
| 157 | 148 | { |
| 158 | 149 | UINT32 data; |
| 150 | UINT32 address = offset * 4 + 0x5FF00000; |
| 159 | 151 | |
| 160 | | switch(offset << 2) |
| 152 | switch(address) |
| 161 | 153 | { |
| 162 | 154 | /* PDC HDD region (0x24, device 9) */ |
| 163 | | case 0x0824: /* HDD Command result code */ |
| 155 | case 0x5FF00824: /* HDD Command result code */ |
| 164 | 156 | return 0x10; |
| 165 | | case 0x3024: /* HDD SCSI command completed successfully */ |
| 157 | case 0x5FF03024: /* HDD SCSI command completed successfully */ |
| 166 | 158 | data = 0x1; |
| 167 | | if(TRACE_HDC) logerror("SCSI HDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 159 | if(TRACE_HDC) logerror("SCSI HDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 168 | 160 | return data; |
| 169 | 161 | /* SMIOC region (0x98, device 26) */ |
| 170 | | case 0x0898: /* Serial status or DMA status */ |
| 162 | case 0x5FF00898: /* Serial status or DMA status */ |
| 171 | 163 | return 0x40; |
| 172 | 164 | /* PDC FDD region (0xB0, device 44 */ |
| 173 | | case 0x08B0: /* FDD Command result code */ |
| 165 | case 0x5FF008B0: /* FDD Command result code */ |
| 174 | 166 | return 0x10; |
| 175 | | case 0x10B0: /* Clear 5FF030B0 ?? */ |
| 167 | case 0x5FF010B0: /* Clear 5FF030B0 ?? */ |
| 176 | 168 | if(TRACE_FDC) logerror("--- FDD 0x5FF010B0 READ (0)\n"); |
| 177 | 169 | return 0; |
| 178 | | case 0x30B0: /* FDD command completion status */ |
| 170 | case 0x5FF030B0: /* FDD command completion status */ |
| 179 | 171 | data = (m_pdc->reg_p5 << 8) + m_pdc->reg_p4; |
| 180 | | if(TRACE_FDC) logerror("--- SCSI FDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 172 | if(TRACE_FDC) logerror("--- SCSI FDD command completion status - Read: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 181 | 173 | return data; |
| 182 | 174 | default: |
| 183 | | if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000, 0, mem_mask); |
| 175 | if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, 0, mem_mask); |
| 184 | 176 | return 0; |
| 185 | 177 | } |
| 186 | 178 | } |
| r253154 | r253155 | |
| 188 | 180 | WRITE32_MEMBER( r9751_state::r9751_mmio_5ff_w ) |
| 189 | 181 | { |
| 190 | 182 | UINT8 data_b0, data_b1; |
| 191 | | /* Unknown mask */ |
| 192 | | if (mem_mask != 0xFFFFFFFF) |
| 193 | | logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0x5FF00000, space.machine().firstcpu->pc()); |
| 183 | UINT32 address = offset * 4 + 0x5FF00000; |
| 194 | 184 | |
| 195 | | switch(offset << 2) |
| 185 | switch(address) |
| 196 | 186 | { |
| 197 | 187 | /* PDC HDD region (0x24, device 9 */ |
| 198 | | case 0x0224: /* HDD SCSI read command */ |
| 199 | | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 188 | case 0x5FF00224: /* HDD SCSI read command */ |
| 189 | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 200 | 190 | break; |
| 201 | | case 0x8024: /* HDD SCSI read command */ |
| 202 | | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 191 | case 0x5FF08024: /* HDD SCSI read command */ |
| 192 | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 203 | 193 | break; |
| 204 | | case 0xC024: /* HDD SCSI read command */ |
| 205 | | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 194 | case 0x5FF0C024: /* HDD SCSI read command */ |
| 195 | if(TRACE_HDC) logerror("@@@ HDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 206 | 196 | break; |
| 207 | 197 | /* SMIOC region (0x98, device 26) */ |
| 208 | | case 0x4098: /* Serial DMA Command */ |
| 198 | case 0x5FF04098: /* Serial DMA Command */ |
| 209 | 199 | switch(data) |
| 210 | 200 | { |
| 211 | 201 | case 0x4100: /* Send byte to serial */ |
| 212 | | if(TRACE_SMIOC) logerror("Serial byte: %02X PC: %08X\n", m_mem->read_dword(smioc_out_addr), space.machine().firstcpu->pc()); |
| 202 | if(TRACE_SMIOC) logerror("Serial byte: %02X\n", m_mem->read_dword(smioc_out_addr)); |
| 213 | 203 | m_terminal->write(space,0,m_mem->read_dword(smioc_out_addr)); |
| 214 | 204 | break; |
| 215 | 205 | default: |
| 216 | 206 | if(TRACE_SMIOC) logerror("Uknown serial DMA command: %X\n", data); |
| 217 | 207 | } |
| 218 | 208 | break; |
| 219 | | case 0xC098: /* Serial DMA output address */ |
| 220 | | //smioc_out_addr = data * 2; |
| 221 | | smioc_out_addr = (smioc_dma_bank & 0x7FFFF800) | ((data&0x3FF)<<1); |
| 222 | | if(TRACE_SMIOC) logerror("Serial output address: %08X PC: %08X\n", smioc_out_addr, space.machine().firstcpu->pc()); |
| 209 | case 0x5FF0C098: /* Serial DMA output address */ |
| 210 | smioc_out_addr = data * 2; |
| 223 | 211 | break; |
| 224 | 212 | /* PDC FDD region (0xB0, device 44 */ |
| 225 | | case 0x01B0: /* FDD SCSI read command */ |
| 226 | | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 213 | case 0x5FF001B0: /* FDD SCSI read command */ |
| 214 | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 227 | 215 | break; |
| 228 | | case 0x02B0: /* FDD SCSI read command */ |
| 229 | | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 216 | case 0x5FF002B0: /* FDD SCSI read command */ |
| 217 | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 230 | 218 | break; |
| 231 | | case 0x04B0: /* FDD RESET PDC */ |
| 232 | | if(TRACE_FDC) logerror("PDC RESET, PC: %08X\n", space.machine().firstcpu->pc()); |
| 233 | | m_pdc->reset(); |
| 219 | case 0x5FF008B0: /* FDD SCSI read command */ |
| 220 | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 234 | 221 | break; |
| 235 | | case 0x08B0: /* FDD SCSI read command */ |
| 236 | | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 237 | | break; |
| 238 | | case 0x41B0: /* Unknown - Probably old style commands */ |
| 239 | | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000); |
| 222 | case 0x5FF041B0: /* Unknown - Probably old style commands */ |
| 223 | if(TRACE_FDC) logerror("--- FDD Command: %08X, From: %08X, Register: %08X\n", data, space.machine().firstcpu->pc(), address); |
| 240 | 224 | |
| 241 | | /* Clear FDD Command completion status 0x5FF030B0 (PDC 0x4, 0x5) */ |
| 225 | /* Clear FDD Command completion status 0x5FF030B0 (PDC 0x4, 0x5)*/ |
| 242 | 226 | m_pdc->reg_p4 = 0; |
| 243 | 227 | m_pdc->reg_p5 = 0; |
| 244 | 228 | |
| r253154 | r253155 | |
| 249 | 233 | m_pdc->reg_p38 |= 0x2; /* Set bit 1 on port 38 register, PDC polls this port looking for a command */ |
| 250 | 234 | if(TRACE_FDC) logerror("--- FDD Old Command: %02X and %02X\n", data_b0, data_b1); |
| 251 | 235 | break; |
| 252 | | case 0x80B0: /* fdd_dest_address register */ |
| 236 | case 0x5FF080B0: /* fdd_dest_address register */ |
| 253 | 237 | fdd_dest_address = data << 1; |
| 254 | 238 | if(TRACE_FDC) logerror("--- FDD destination address: %08X\n", fdd_dest_address); |
| 255 | 239 | data_b0 = data & 0xFF; |
| r253154 | r253155 | |
| 257 | 241 | m_pdc->reg_p6 = data_b0; |
| 258 | 242 | m_pdc->reg_p7 = data_b1; |
| 259 | 243 | break; |
| 260 | | case 0xC0B0: |
| 261 | | case 0xC1B0: /* FDD command address register */ |
| 244 | case 0x5FF0C0B0: |
| 245 | case 0x5FF0C1B0: /* FDD command address register */ |
| 262 | 246 | UINT32 fdd_scsi_command; |
| 263 | 247 | UINT32 fdd_scsi_command2; |
| 264 | 248 | unsigned char c_fdd_scsi_command[8]; // Array for SCSI command |
| 265 | 249 | int scsi_lba; // FDD LBA location here, extracted from command |
| 266 | 250 | |
| 267 | | /* Clear FDD Command completion status 0x5FF030B0 (PDC 0x4, 0x5) */ |
| 251 | /* Clear FDD Command completion status 0x5FF030B0 (PDC 0x4, 0x5)*/ |
| 268 | 252 | m_pdc->reg_p4 = 0; |
| 269 | 253 | m_pdc->reg_p5 = 0; |
| 270 | 254 | |
| r253154 | r253155 | |
| 297 | 281 | break; |
| 298 | 282 | |
| 299 | 283 | default: |
| 300 | | if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0x5FF00000, data, mem_mask); |
| 284 | if(TRACE_FDC || TRACE_HDC || TRACE_SMIOC) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask); |
| 301 | 285 | } |
| 302 | 286 | } |
| 303 | 287 | |
| 304 | 288 | /****************************************************************************** |
| 305 | | CPU board registers [0xFF010000 - 0xFF06FFFF] |
| 289 | CPU board registers [0xFF050000 - 0xFF06FFFF] |
| 306 | 290 | ******************************************************************************/ |
| 307 | | READ32_MEMBER( r9751_state::r9751_mmio_ff01_r ) |
| 308 | | { |
| 309 | | //UINT32 data; |
| 310 | | |
| 311 | | switch(offset << 2) |
| 312 | | { |
| 313 | | default: |
| 314 | | //return data; |
| 315 | | return 0; |
| 316 | | } |
| 317 | | } |
| 318 | | |
| 319 | | WRITE32_MEMBER( r9751_state::r9751_mmio_ff01_w ) |
| 320 | | { |
| 321 | | /* Unknown mask */ |
| 322 | | if (mem_mask != 0xFFFFFFFF) |
| 323 | | logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFF010000, space.machine().firstcpu->pc()); |
| 324 | | |
| 325 | | switch(offset << 2) |
| 326 | | { |
| 327 | | case 0x000C: /* FDD DMA Offset */ |
| 328 | | fdd_dma_bank = data; |
| 329 | | return; |
| 330 | | case 0x0010: /* SMIOC DMA Offset */ |
| 331 | | smioc_dma_bank = data; |
| 332 | | return; |
| 333 | | default: |
| 334 | | return; |
| 335 | | } |
| 336 | | } |
| 337 | | |
| 338 | 291 | READ32_MEMBER( r9751_state::r9751_mmio_ff05_r ) |
| 339 | 292 | { |
| 340 | 293 | UINT32 data; |
| 294 | UINT32 address = offset * 4 + 0xFF050000; |
| 341 | 295 | |
| 342 | | switch(offset << 2) |
| 296 | switch(address) |
| 343 | 297 | { |
| 344 | | case 0x0004: |
| 298 | case 0xFF050004: |
| 345 | 299 | return reg_ff050004; |
| 346 | | case 0x0300: |
| 300 | case 0xFF050300: |
| 347 | 301 | return 0x1B | (1<<0x14); |
| 348 | | case 0x0320: /* Some type of counter */ |
| 302 | case 0xFF050320: /* Some type of counter */ |
| 349 | 303 | return (machine().time() - timer_32khz_last).as_ticks(32768) & 0xFFFF; |
| 350 | | case 0x0584: |
| 304 | case 0xFF050584: |
| 351 | 305 | return 0; |
| 352 | | case 0x0610: |
| 306 | case 0xFF050610: |
| 353 | 307 | return 0xabacabac; |
| 354 | | case 0x0014: |
| 308 | case 0xFF060014: |
| 355 | 309 | return 0x80; |
| 356 | 310 | default: |
| 357 | 311 | data = 0; |
| 358 | | if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFF050000, data, mem_mask); |
| 312 | if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask); |
| 359 | 313 | return data; |
| 360 | 314 | } |
| 361 | 315 | } |
| 362 | 316 | |
| 363 | 317 | WRITE32_MEMBER( r9751_state::r9751_mmio_ff05_w ) |
| 364 | 318 | { |
| 365 | | /* Unknown mask */ |
| 366 | | if (mem_mask != 0xFFFFFFFF) |
| 367 | | logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFF050000, space.machine().firstcpu->pc()); |
| 319 | UINT32 address = offset * 4 + 0xFF050000; |
| 368 | 320 | |
| 369 | | switch(offset << 2) |
| 321 | switch(address) |
| 370 | 322 | { |
| 371 | | case 0x0004: |
| 323 | case 0xFF050004: |
| 372 | 324 | reg_ff050004 = data; |
| 373 | 325 | return; |
| 374 | | case 0x000C: /* CPU LED hex display indicator */ |
| 326 | case 0xFF05000C: /* CPU LED hex display indicator */ |
| 375 | 327 | if(TRACE_LED) logerror("\n*** LED: %02x, Instruction: %08x ***\n\n", data, space.machine().firstcpu->pc()); |
| 376 | 328 | return; |
| 377 | | case 0x0320: |
| 329 | case 0xFF050320: |
| 378 | 330 | timer_32khz_last = machine().time(); |
| 379 | 331 | default: |
| 380 | | if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFF050000, data, mem_mask); |
| 332 | if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask); |
| 381 | 333 | return; |
| 382 | 334 | } |
| 383 | 335 | } |
| 384 | 336 | |
| 385 | 337 | READ32_MEMBER( r9751_state::r9751_mmio_fff8_r ) |
| 386 | 338 | { |
| 387 | | UINT32 data; |
| 339 | UINT32 data; |
| 340 | UINT32 address = offset * 4 + 0xFFF80000; |
| 388 | 341 | |
| 389 | | switch(offset << 2) |
| 342 | switch(address) |
| 390 | 343 | { |
| 391 | | case 0x0040: |
| 344 | case 0xFFF80040: |
| 392 | 345 | return reg_fff80040; |
| 393 | 346 | default: |
| 394 | 347 | data = 0; |
| 395 | | if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFFF80000, data, mem_mask); |
| 348 | if(TRACE_CPU_REG) logerror("Instruction: %08x READ MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask); |
| 396 | 349 | return data; |
| 397 | 350 | } |
| 398 | 351 | } |
| 399 | 352 | |
| 400 | 353 | WRITE32_MEMBER( r9751_state::r9751_mmio_fff8_w ) |
| 401 | 354 | { |
| 402 | | /* Unknown mask */ |
| 403 | | if (mem_mask != 0xFFFFFFFF) |
| 404 | | logerror("Mask found: %08X Register: %08X PC: %08X\n", mem_mask, offset << 2 | 0xFFF80000, space.machine().firstcpu->pc()); |
| 355 | UINT32 address = offset * 4 + 0xFFF80000; |
| 405 | 356 | |
| 406 | | switch(offset << 2) |
| 357 | switch(address) |
| 407 | 358 | { |
| 408 | | case 0x0040: |
| 359 | case 0xFFF80040: |
| 409 | 360 | reg_fff80040 = data; |
| 410 | 361 | return; |
| 411 | 362 | default: |
| 412 | | if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), offset << 2 | 0xFFF80000, data, mem_mask); |
| 363 | if(TRACE_CPU_REG) logerror("Instruction: %08x WRITE MMIO(%08x): %08x & %08x\n", space.machine().firstcpu->pc(), address, data, mem_mask); |
| 413 | 364 | } |
| 414 | 365 | } |
| 415 | 366 | |
| r253154 | r253155 | |
| 422 | 373 | AM_RANGE(0x00000000,0x00ffffff) AM_RAM AM_SHARE("main_ram") // 16MB |
| 423 | 374 | AM_RANGE(0x08000000,0x0800ffff) AM_ROM AM_REGION("prom", 0) |
| 424 | 375 | AM_RANGE(0x5FF00000,0x5FFFFFFF) AM_READWRITE(r9751_mmio_5ff_r, r9751_mmio_5ff_w) |
| 425 | | AM_RANGE(0xFF010000,0xFF01FFFF) AM_READWRITE(r9751_mmio_ff01_r, r9751_mmio_ff01_w) |
| 426 | 376 | AM_RANGE(0xFF050000,0xFF06FFFF) AM_READWRITE(r9751_mmio_ff05_r, r9751_mmio_ff05_w) |
| 427 | 377 | AM_RANGE(0xFFF80000,0xFFF8FFFF) AM_READWRITE(r9751_mmio_fff8_r, r9751_mmio_fff8_w) |
| 428 | 378 | //AM_RANGE(0xffffff00,0xffffffff) AM_RAM // Unknown area |
trunk/src/mame/drivers/stv.cpp
| r253154 | r253155 | |
| 2955 | 2955 | ROM_LOAD( "pclub298.nv", 0x0000, 0x0080, CRC(a23dd0f2) SHA1(457282b5d40a17477b95330bba91e05c603f951e) ) |
| 2956 | 2956 | ROM_END |
| 2957 | 2957 | |
| 2958 | | |
| 2959 | | ROM_START( pclub26w ) // set to 1p |
| 2960 | | STV_BIOS |
| 2961 | | |
| 2962 | | ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASE00 ) /* SH2 code */ |
| 2963 | | |
| 2964 | | ROM_LOAD16_WORD_SWAP( "pclbvol6w_IC22", 0x0200000, 0x0200000, CRC(72aa320c) SHA1(09bc30e8cb00a5a4014c44e468cc64f6c3425d92) ) |
| 2965 | | ROM_LOAD16_WORD_SWAP( "pclbvol6w_IC24", 0x0400000, 0x0200000, CRC(d98371e2) SHA1(813ac5f3c5b57d07cc319c73560bc0719ddcfe6b) ) |
| 2966 | | ROM_LOAD16_WORD_SWAP( "pclbvol6w_IC26", 0x0600000, 0x0200000, CRC(e6bbe3a5) SHA1(b2f642b8ca0779ad66cfbbadece40f4e3dc41fd1) ) |
| 2967 | | ROM_LOAD16_WORD_SWAP( "pclbvol6w_IC28", 0x0800000, 0x0200000, CRC(3c330c9b) SHA1(92f8e8d4f43db7c4ce431d17501492a7f8d8a867) ) |
| 2968 | | ROM_LOAD16_WORD_SWAP( "pclbvol6w_IC30", 0x0a00000, 0x0200000, CRC(67646090) SHA1(ed6402a22acafa0203c587b871edc547f0ec5277) ) |
| 2969 | | |
| 2970 | | ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player |
| 2971 | | ROM_LOAD( "pclub26w.nv", 0x0000, 0x0080, CRC(448f770d) SHA1(5f966c511c4c8e9d5b2d257c41c2c88a453b4944) ) |
| 2972 | | ROM_END |
| 2973 | | |
| 2974 | 2958 | ROM_START( pclub27s ) // set to 1p |
| 2975 | 2959 | STV_BIOS |
| 2976 | 2960 | |
| r253154 | r253155 | |
| 2986 | 2970 | ROM_LOAD( "pclub27s.nv", 0x0000, 0x0080, CRC(e58c7167) SHA1(d88b1648c5d86a90615a8c6a1bf87bc9e75dc320) ) |
| 2987 | 2971 | ROM_END |
| 2988 | 2972 | |
| 2989 | | ROM_START( pclub2pe ) // set to 1p |
| 2990 | | STV_BIOS |
| 2991 | | |
| 2992 | | ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASE00 ) /* SH2 code */ |
| 2993 | | |
| 2994 | | ROM_LOAD16_WORD_SWAP( "pclb2psi_IC22", 0x0200000, 0x0200000, CRC(caadc660) SHA1(f2e84bee96266bb03d8f9009249c17c27935f82e) ) |
| 2995 | | ROM_LOAD16_WORD_SWAP( "pclb2psi_IC24", 0x0400000, 0x0200000, CRC(ece82698) SHA1(b17b1ea8adc13c3722067c9854d1b7fdf3917090) ) |
| 2996 | | ROM_LOAD16_WORD_SWAP( "pclb2psi_IC26", 0x0600000, 0x0200000, CRC(c8a1e335) SHA1(a95ddfc41fdd9f720c11208f45ef5db4bee6cb97) ) |
| 2997 | | ROM_LOAD16_WORD_SWAP( "pclb2psi_IC28", 0x0800000, 0x0200000, CRC(52f09627) SHA1(e2ffc321bb0f2a650d0c0b39c3ec68226e1ca7f4) ) |
| 2998 | | ROM_LOAD16_WORD_SWAP( "pclb2psi_IC30", 0x0a00000, 0x0200000, CRC(03b9eacf) SHA1(d69c10f7613d9f52042dd6cce64e74e2b1ecc2d8) ) |
| 2999 | | |
| 3000 | | ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player |
| 3001 | | ROM_LOAD( "pclub2pe.nv", 0x0000, 0x0080, CRC(447bb3bd) SHA1(9fefec09849bfa0c14b49e73ff13e2a538dff511)) |
| 3002 | | ROM_END |
| 3003 | | |
| 3004 | | |
| 3005 | 2973 | ROM_START( pclubyo2 ) // set to 1p |
| 3006 | 2974 | STV_BIOS |
| 3007 | 2975 | |
| r253154 | r253155 | |
| 3155 | 3123 | ROM_LOAD( "pclove.nv", 0x0000, 0x0080, CRC(3c78e3bd) SHA1(6d5fe8545f434b4cc1e8229549adb0a49ac45bd1) ) |
| 3156 | 3124 | ROM_END |
| 3157 | 3125 | |
| 3158 | | // Name Club / Name Club vol.2 |
| 3159 | | // have an unusual rom mapping compared to other games, the cartridge is a little different too, with a large PALCE16V8H-10 marked 315-6026 |
| 3160 | | // For Name Club vol. 2, the protection device (317-0229 on both) is checked in the 'each game test' menu as 'RCDD2' |
| 3161 | | // For the service mode test the game just passes a large block of compressed data and checksums the result, it doesn't even look like it's |
| 3162 | | // passing 100% valid data, just an entire section of ROM, checking the result against a pre-calculated checksum. |
| 3163 | | |
| 3164 | | // The device is accessed by the game when you choose to print, it looks like it's decompressing the full-size graphics for the printer rather |
| 3165 | | // than anything you see onscreen. It makes quite extensive use of the device, with lots of different dictionaries, unlike Decathlete where |
| 3166 | | // there are only 2 that cover all the data. |
| 3167 | | |
| 3168 | | ROM_START( nameclub ) |
| 3169 | | STV_BIOS |
| 3170 | | |
| 3171 | | ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASEFF ) /* SH2 code */ |
| 3172 | | ROM_LOAD16_WORD_SWAP( "ic22", 0x0200000, 0x0200000, CRC(ac23c648) SHA1(4dd099a92ff162082eb24a61a277ca907b3f9892) ) // OK |
| 3173 | | ROM_LOAD16_WORD_SWAP( "ic24", 0x0600000, 0x0200000, CRC(a16902e3) SHA1(85c582cb0d02ef028a8ae32688c20a5b5aeeaae8) ) // OK |
| 3174 | | ROM_LOAD16_WORD_SWAP( "ic26", 0x0a00000, 0x0200000, CRC(a5eab3f3) SHA1(1b7263639bb8f4aa644cc46133988ef4d2b6c9de) ) // OK |
| 3175 | | ROM_LOAD16_WORD_SWAP( "ic28", 0x0e00000, 0x0200000, CRC(34ed677a) SHA1(ff2c4dd8fae33ac618f6e3e28ba71c4ecb4ca88f) ) // OK |
| 3176 | | |
| 3177 | | ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player |
| 3178 | | ROM_LOAD( "nameclub.nv", 0x0000, 0x0080, CRC(680a64bc) SHA1(45194bbe4a7e67f0e44f858589881967884f63a6) ) |
| 3179 | | ROM_END |
| 3180 | | |
| 3181 | 3126 | ROM_START( nclubv2 ) |
| 3182 | 3127 | STV_BIOS |
| 3183 | 3128 | |
| 3184 | 3129 | ROM_REGION32_BE( 0x3000000, "cart", ROMREGION_ERASEFF ) /* SH2 code */ |
| 3130 | // unusual rom mapping compared to other games, the cartridge is a little different too, with a large PALCE16V8H-10 marked 315-6026 |
| 3185 | 3131 | ROM_LOAD16_WORD_SWAP( "nclubv2.ic22", 0x0200000, 0x0200000, CRC(7e81676d) SHA1(fc0f0dcdb4aaf71218d7c1dd0e4ddc5381e8b13b) ) // OK |
| 3186 | 3132 | ROM_LOAD16_WORD_SWAP( "nclubv2.ic24", 0x0600000, 0x0200000, CRC(1b7637de) SHA1(43c3094f60a6582298a45bad923fef57e98c5b2b) ) // OK |
| 3187 | 3133 | ROM_LOAD16_WORD_SWAP( "nclubv2.ic26", 0x0a00000, 0x0200000, CRC(630be99d) SHA1(ac7fbaae98b126fad5228b0ebffa91a0f0a94516) ) // OK |
| 3188 | 3134 | ROM_LOAD16_WORD_SWAP( "nclubv2.ic28", 0x0e00000, 0x0200000, CRC(1a3ca5e2) SHA1(4d3aed51d29c54e71175d828f648c9feb813ac04) ) // OK |
| 3189 | 3135 | |
| 3136 | |
| 3137 | // the protection device is checked in the 'each game test' menu as 'RCDD2' might be worth investigating what the game passes to the device for it. |
| 3138 | // I think the device is used to decompress the full size image data for the printer. |
| 3139 | |
| 3190 | 3140 | ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player |
| 3191 | 3141 | ROM_LOAD( "nclubv2.nv", 0x0000, 0x0080, CRC(96d55fa9) SHA1(b3c821d6cd4ed52d0e20565e12a06d8f81a08dbc) ) |
| 3192 | 3142 | ROM_END |
| r253154 | r253155 | |
| 3250 | 3200 | /* Unemulated printer / camera devices */ |
| 3251 | 3201 | // USA sets |
| 3252 | 3202 | GAME( 1997, pclub2, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 (U 970921 V1.000)", MACHINE_NOT_WORKING ) |
| 3253 | | GAME( 1999, pclub2v3, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 3 (U 990310 V1.000)", MACHINE_NOT_WORKING ) // Hello Kitty themed |
| 3203 | GAME( 1999, pclub2v3, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 3 (U 990310 V1.000)", MACHINE_NOT_WORKING ) |
| 3254 | 3204 | GAME( 1999, pclubpok, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club Pokemon B (U 991126 V1.000)", MACHINE_NOT_WORKING ) |
| 3255 | 3205 | // Japan sets |
| 3256 | 3206 | GAME( 1999, pclub2fc, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", MACHINE_NOT_WORKING ) |
| 3257 | 3207 | GAME( 1998, pclub2pf, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Puffy (Japan)", MACHINE_NOT_WORKING ) // version info is blank |
| 3208 | GAME( 1997, pclb297w, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) |
| 3209 | GAME( 1997, pclub298, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) |
| 3210 | GAME( 1998, pclb298a, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", MACHINE_NOT_WORKING ) |
| 3258 | 3211 | GAME( 1997, pclb2elk, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", MACHINE_NOT_WORKING ) |
| 3259 | | GAME( 1997, pclub2pe, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Pepsiman (J 970618 V1.100)", MACHINE_NOT_WORKING ) |
| 3212 | GAME( 1997, pclub27s, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 7 Spring (J 970313 V1.100)", MACHINE_NOT_WORKING ) // aka Print Club 2 '97 Spring Ver ? |
| 3260 | 3213 | |
| 3261 | | GAME( 1997, pclub26w, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 6 Winter (J 961210 V1.000)", MACHINE_NOT_WORKING ) // internal string is 'PURIKURA2 97FUYU' (but in reality it seems to be an end of 96 Winter version) |
| 3262 | | GAME( 1997, pclub27s, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 7 Spring (J 970313 V1.100)", MACHINE_NOT_WORKING ) |
| 3263 | | // Summer 97? |
| 3264 | | // Autumn 97? |
| 3265 | | GAME( 1997, pclb297w, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) // internal string is '97WINTER' (3 roms bad / missing tho, need new dump) |
| 3266 | | GAME( 1997, pclub298, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", MACHINE_NOT_WORKING ) // date is the same as previous version, surely incorrect / not updated when the game was |
| 3267 | | // Summer 98? |
| 3268 | | GAME( 1998, pclb298a, pclub2, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", MACHINE_NOT_WORKING ) |
| 3269 | | |
| 3270 | | |
| 3271 | 3214 | GAME( 1999, pclubor, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club Goukakenran (J 991104 V1.000)", MACHINE_NOT_WORKING ) |
| 3272 | 3215 | GAME( 1999, pclubol, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club Olive (J 980717 V1.000)", MACHINE_NOT_WORKING ) |
| 3273 | 3216 | GAME( 1997, pclub2kc, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club Kome Kome Club (J 970203 V1.000)", MACHINE_NOT_WORKING ) |
| r253154 | r253155 | |
| 3275 | 3218 | GAME( 1997, pclubyo2, stvbios, stv, stv, stv_state, stv, ROT0, "Atlus", "Print Club Yoshimoto V2 (J 970422 V1.100)", MACHINE_NOT_WORKING ) |
| 3276 | 3219 | |
| 3277 | 3220 | GAME( 1998, stress, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Stress Busters (J 981020 V1.000)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) |
| 3221 | GAME( 1996, nclubv2, stvbios, stv_5838, stv, stv_state, decathlt, ROT0, "Sega", "Name Club Ver.2 (J 960315 V1.000)", MACHINE_NOT_WORKING ) // uses the same type of protection as decathlete!! |
| 3222 | GAME( 1997, nclubv3, stvbios, stv, stv, stv_state, nameclv3, ROT0, "Sega", "Name Club Ver.3 (J 970723 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) |
| 3278 | 3223 | |
| 3279 | | GAME( 1996, nameclub, stvbios, stv_5838, stv, stv_state, decathlt, ROT0, "Sega", "Name Club (J 960315 V1.000)", MACHINE_NOT_WORKING ) // uses the same type of protection as decathlete!! |
| 3280 | | GAME( 1996, nclubv2, stvbios, stv_5838, stv, stv_state, decathlt, ROT0, "Sega", "Name Club Ver.2 (J 960315 V1.000)", MACHINE_NOT_WORKING ) // ^ (has the same datecode as nameclub, probably incorrect unless both were released today) |
| 3281 | | GAME( 1997, nclubv3, stvbios, stv, stv, stv_state, nameclv3, ROT0, "Sega", "Name Club Ver.3 (J 970723 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // no protection |
| 3282 | 3224 | |
| 3283 | 3225 | |
| 3284 | | |
| 3285 | 3226 | /* Doing something.. but not enough yet */ |
| 3286 | 3227 | GAME( 1995, vfremix, stvbios, stv, stv, stv_state, vfremix, ROT0, "Sega", "Virtua Fighter Remix (JUETBKAL 950428 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) |
| 3287 | 3228 | GAME( 1996, decathlt, stvbios, stv_5838, stv, stv_state, decathlt, ROT0, "Sega", "Decathlete (JUET 960709 V1.001)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) |
trunk/src/mame/drivers/tispeak.cpp
| r253154 | r253155 | |
| 80 | 80 | - notes: this one has a dedicated voice actor |
| 81 | 81 | |
| 82 | 82 | Speak & Spell (France) "La Dictee Magique", 1980 |
| 83 | | - MCU: CD2702, labeled CD2702AN2L (die labeled TMC0270F 2702A) |
| 83 | - MCU: CD2702* |
| 84 | 84 | - TMS51xx: CD2801 |
| 85 | 85 | - VSM: 16KB CD2352 |
| 86 | 86 | |
| r253154 | r253155 | |
| 143 | 143 | Speak & Math: |
| 144 | 144 | |
| 145 | 145 | Speak & Math (US), 1980 (renamed to "Speak & Maths" in UK, but is the same product) |
| 146 | | - MCU: CD2704, labeled CD2704B-N2L (die labeled TMC0270F 2704B) - 2nd revision?(mid-1982) |
| 146 | - MCU: CD2704* |
| 147 | 147 | - TMS51xx: CD2801 |
| 148 | 148 | - VSM(1/2): 16KB CD2392 |
| 149 | 149 | - VSM(2/2): 16KB CD2393 |
| r253154 | r253155 | |
| 170 | 170 | Speak & Read: |
| 171 | 171 | |
| 172 | 172 | Speak & Read (US), 1980 |
| 173 | | - MCU: CD2705, labeled CD2705B-N2L (die labeled TMC0270E 2705B) - 2nd revision?(late-1981) |
| 173 | - MCU: CD2705, labeled CD2705B-N2L (die labeled TMC0270E 2705B) - 2nd revision? |
| 174 | 174 | - TMS51xx: CD2801 |
| 175 | 175 | - VSM(1/2): 16KB CD2394(rev.A) |
| 176 | 176 | - VSM(2/2): 16KB CD2395(rev.A) |
| r253154 | r253155 | |
| 1242 | 1242 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1243 | 1243 | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) |
| 1244 | 1244 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1245 | | ROM_LOAD( "tms0270_tmc0271_output.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) // using the one from 1st version |
| 1245 | ROM_LOAD( "tms0270_tmc0271_output.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) // using the one from 1978 version |
| 1246 | 1246 | |
| 1247 | 1247 | ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge |
| 1248 | | ROM_LOAD( "tmc0351nl.vsm", 0x0000, 0x4000, CRC(beea3373) SHA1(8b0f7586d2f12c3d4a885fdb528cf23feffa1a3b) ) // using the one from 1st version |
| 1248 | ROM_LOAD( "tmc0351nl.vsm", 0x0000, 0x4000, CRC(beea3373) SHA1(8b0f7586d2f12c3d4a885fdb528cf23feffa1a3b) ) // using the one from 1978 version |
| 1249 | 1249 | ROM_LOAD( "tmc0352nl.vsm", 0x4000, 0x4000, CRC(d51f0587) SHA1(ddaa484be1bba5fef46b481cafae517e4acaa8ed) ) // " |
| 1250 | 1250 | ROM_END |
| 1251 | 1251 | |
| r253154 | r253155 | |
| 1256 | 1256 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1257 | 1257 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1258 | 1258 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1259 | | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) |
| 1259 | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, BAD_DUMP CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) // not verified |
| 1260 | 1260 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1261 | 1261 | ROM_LOAD( "tms0270_tmc0271_output.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) |
| 1262 | 1262 | |
| r253154 | r253155 | |
| 1287 | 1287 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1288 | 1288 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1289 | 1289 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1290 | | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) |
| 1290 | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, BAD_DUMP CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) // not verified |
| 1291 | 1291 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1292 | 1292 | ROM_LOAD( "tms0270_tmc0271_output.pla", 0, 1246, CRC(9ebe12ab) SHA1(acb4e07ba26f2daca5f1c234885ac0371c7ce87f) ) |
| 1293 | 1293 | |
| r253154 | r253155 | |
| 1329 | 1329 | |
| 1330 | 1330 | ROM_START( snspellfr ) |
| 1331 | 1331 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 1332 | | ROM_LOAD( "cd2702an2l", 0x0000, 0x1000, CRC(895d6a4e) SHA1(a8bc118c83a84260033734191dcaa71a93dfa52b) ) |
| 1332 | ROM_LOAD( "tmc0271h-n2l", 0x0000, 0x1000, BAD_DUMP CRC(f83b5d2d) SHA1(10155b0b7f7f1583c7def8a693553cd35944ea6f) ) // placeholder, use the one we have |
| 1333 | 1333 | |
| 1334 | 1334 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1335 | 1335 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1336 | 1336 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1337 | | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) |
| 1337 | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, BAD_DUMP CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) // not verified |
| 1338 | 1338 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1339 | | ROM_LOAD( "tms0270_cd2702_output.pla", 0, 1246, CRC(2478c595) SHA1(9a8ac690902731e1e01533279a1c9223011e1537) ) |
| 1339 | ROM_LOAD( "tms0270_tmc0271h_output.pla", 0, 1246, BAD_DUMP CRC(2478c595) SHA1(9a8ac690902731e1e01533279a1c9223011e1537) ) // placeholder, use the one we have |
| 1340 | 1340 | |
| 1341 | 1341 | ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // uses only 1 rom, 8000-bfff = space reserved for cartridge |
| 1342 | 1342 | ROM_LOAD( "cd2352.vsm", 0x0000, 0x4000, CRC(181a239e) SHA1(e16043766c385e152b7005c1c010be4c5fccdd9b) ) |
| r253154 | r253155 | |
| 1344 | 1344 | |
| 1345 | 1345 | ROM_START( snspellit ) |
| 1346 | 1346 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 1347 | | ROM_LOAD( "cd2702an2l", 0x0000, 0x1000, CRC(895d6a4e) SHA1(a8bc118c83a84260033734191dcaa71a93dfa52b) ) |
| 1347 | ROM_LOAD( "tmc0271h-n2l", 0x0000, 0x1000, BAD_DUMP CRC(f83b5d2d) SHA1(10155b0b7f7f1583c7def8a693553cd35944ea6f) ) // placeholder, use the one we have |
| 1348 | 1348 | |
| 1349 | 1349 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1350 | 1350 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1351 | 1351 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1352 | | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) |
| 1352 | ROM_LOAD( "tms0270_common2_micro.pla", 0, 2127, BAD_DUMP CRC(86737ac1) SHA1(4aa0444f3ddf88738ea74aec404c684bf54eddba) ) // not verified |
| 1353 | 1353 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1354 | | ROM_LOAD( "tms0270_cd2702_output.pla", 0, 1246, CRC(2478c595) SHA1(9a8ac690902731e1e01533279a1c9223011e1537) ) |
| 1354 | ROM_LOAD( "tms0270_tmc0271h_output.pla", 0, 1246, BAD_DUMP CRC(2478c595) SHA1(9a8ac690902731e1e01533279a1c9223011e1537) ) // placeholder, use the one we have |
| 1355 | 1355 | |
| 1356 | 1356 | ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // uses only 1 rom, 8000-bfff = space reserved for cartridge |
| 1357 | 1357 | ROM_LOAD( "cd62190.vsm", 0x0000, 0x4000, CRC(63832002) SHA1(ea8124b2bf0f5908c5f1a56d60063f2468a10143) ) |
| r253154 | r253155 | |
| 1400 | 1400 | |
| 1401 | 1401 | ROM_START( snmath ) |
| 1402 | 1402 | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 1403 | | ROM_LOAD( "cd2704b-n2l", 0x0000, 0x1000, CRC(7e06c7c5) SHA1(d60a35a8163ab593c31afc840a0d8a9b3a762f29) ) |
| 1403 | ROM_LOAD( "cd2708n2l", 0x0000, 0x1000, CRC(35937360) SHA1(69c362c75bb459056c09c7fab37c91040485474b) ) |
| 1404 | 1404 | |
| 1405 | 1405 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1406 | 1406 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1407 | 1407 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1408 | 1408 | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) |
| 1409 | 1409 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1410 | | ROM_LOAD( "tms0270_cd2704_output.pla", 0, 1246, CRC(5a2eb949) SHA1(8bb161d4884f229af65f8d155e59b9d8966fe3d1) ) |
| 1411 | | |
| 1412 | | ROM_REGION( 0x8000, "tms6100", ROMREGION_ERASEFF ) |
| 1413 | | ROM_LOAD( "cd2392.vsm", 0x0000, 0x4000, CRC(4ed2e920) SHA1(8896f29e25126c1e4d9a47c9a325b35dddecc61f) ) |
| 1414 | | ROM_LOAD( "cd2393.vsm", 0x4000, 0x4000, CRC(571d5b5a) SHA1(83284755d9b77267d320b5b87fdc39f352433715) ) |
| 1415 | | ROM_END |
| 1416 | | |
| 1417 | | ROM_START( snmatha ) |
| 1418 | | ROM_REGION( 0x1000, "maincpu", 0 ) |
| 1419 | | ROM_LOAD( "cd2708-n2l", 0x0000, 0x1000, CRC(35937360) SHA1(69c362c75bb459056c09c7fab37c91040485474b) ) |
| 1420 | | |
| 1421 | | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1422 | | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1423 | | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1424 | | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) |
| 1425 | | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1426 | 1410 | ROM_LOAD( "tms0270_cd2708_output.pla", 0, 1246, CRC(1abad753) SHA1(53d20b519ed73ce248368047a056836afbe3cd46) ) |
| 1427 | 1411 | |
| 1428 | 1412 | ROM_REGION( 0x8000, "tms6100", ROMREGION_ERASEFF ) |
| r253154 | r253155 | |
| 1442 | 1426 | ROM_REGION( 1246, "maincpu:ipla", 0 ) |
| 1443 | 1427 | ROM_LOAD( "tms0980_common1_instr.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) ) |
| 1444 | 1428 | ROM_REGION( 2127, "maincpu:mpla", 0 ) |
| 1445 | | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) |
| 1429 | ROM_LOAD( "tms0270_common1_micro.pla", 0, 2127, BAD_DUMP CRC(504b96bb) SHA1(67b691e7c0b97239410587e50e5182bf46475b43) ) // not verified |
| 1446 | 1430 | ROM_REGION( 1246, "maincpu:opla", 0 ) |
| 1447 | | ROM_LOAD( "tms0270_cd2704_output.pla", 0, 1246, CRC(5a2eb949) SHA1(8bb161d4884f229af65f8d155e59b9d8966fe3d1) ) // using the one from 1st version |
| 1431 | ROM_LOAD( "tms0270_cd2708_output.pla", 0, 1246, BAD_DUMP CRC(1abad753) SHA1(53d20b519ed73ce248368047a056836afbe3cd46) ) // taken from cd2708, need to verify if it's same as cd2704 |
| 1448 | 1432 | |
| 1449 | 1433 | ROM_REGION( 0x8000, "tms6100", ROMREGION_ERASEFF ) |
| 1450 | | ROM_LOAD( "cd2392.vsm", 0x0000, 0x4000, CRC(4ed2e920) SHA1(8896f29e25126c1e4d9a47c9a325b35dddecc61f) ) // using the one from 1st version |
| 1451 | | ROM_LOAD( "cd2393.vsm", 0x4000, 0x4000, CRC(571d5b5a) SHA1(83284755d9b77267d320b5b87fdc39f352433715) ) // " |
| 1434 | ROM_LOAD( "cd2392.vsm", 0x0000, 0x4000, CRC(4ed2e920) SHA1(8896f29e25126c1e4d9a47c9a325b35dddecc61f) ) |
| 1435 | ROM_LOAD( "cd2393.vsm", 0x4000, 0x4000, CRC(571d5b5a) SHA1(83284755d9b77267d320b5b87fdc39f352433715) ) |
| 1452 | 1436 | ROM_END |
| 1453 | 1437 | |
| 1454 | 1438 | |
| r253154 | r253155 | |
| 1553 | 1537 | |
| 1554 | 1538 | |
| 1555 | 1539 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ |
| 1556 | | COMP( 1979, snspell, 0, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1979 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1540 | COMP( 1978, snspell, 0, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1979 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1557 | 1541 | COMP( 1978, snspellp, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1558 | 1542 | COMP( 1980, snspellub, snspell, 0, sns_tmc0281d, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1980 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1559 | | COMP( 1978, snspellua, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // incomplete dump, using 1979 MCU ROM instead |
| 1560 | | COMP( 1978, snspelluk, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // " |
| 1543 | COMP( 1979, snspellua, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // incomplete dump, using 1979 MCU ROM instead |
| 1544 | COMP( 1978, snspelluk, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1978 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // " |
| 1561 | 1545 | COMP( 1981, snspelluka, snspell, 0, sns_cd2801, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (UK, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1562 | 1546 | COMP( 1979, snspelljp, snspell, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1563 | | COMP( 1980, snspellfr, snspell, 0, sns_cd2801, snspellfr, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1564 | | COMP( 1982, snspellit, snspell, 0, sns_cd2801_m, snspellit, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1547 | COMP( 1980, snspellfr, snspell, 0, sns_cd2801, snspellfr, tispeak_state, snspell, "Texas Instruments", "La Dictee Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // doesn't work due to missing CD2702 MCU dump, German/Italian version has CD2702 too |
| 1548 | COMP( 1982, snspellit, snspell, 0, sns_cd2801_m, snspellit, tispeak_state, snspell, "Texas Instruments", "Grillo Parlante (Italy)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // " |
| 1565 | 1549 | |
| 1566 | 1550 | COMP( 1981, snspellc, 0, 0, snspellc, snspellc, tispeak_state, snspell, "Texas Instruments", "Speak & Spell Compact (US, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1567 | 1551 | COMP( 1982, snspellca, snspellc, 0, snspellc, snspellc, tispeak_state, snspell, "Texas Instruments", "Speak & Spell Compact (US, 1982 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1568 | 1552 | COMP( 1982, snspellcuk, snspellc, 0, snspellcuk, snspellcuk, tispeak_state, snspell, "Texas Instruments", "Speak & Write (UK)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1569 | 1553 | |
| 1570 | | COMP( 1980, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1980 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1571 | | COMP( 1986, snmatha, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1986 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1572 | | COMP( 1980, snmathp, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IS_INCOMPLETE ) |
| 1554 | COMP( 1986, snmath, 0, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1986 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1555 | COMP( 1980, snmathp, snmath, 0, snmath, snmath, driver_device, 0, "Texas Instruments", "Speak & Math (US, 1980 version/patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) |
| 1573 | 1556 | |
| 1574 | 1557 | COMP( 1980, snread, 0, 0, snread, snread, tispeak_state, snspell, "Texas Instruments", "Speak & Read (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) |
| 1575 | 1558 | |
| 1576 | 1559 | COMP( 1979, lantutor, 0, 0, lantutor, lantutor, tispeak_state, lantutor, "Texas Instruments", "Language Tutor (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) |
| 1577 | 1560 | |
| 1578 | | COMP( 1981, tntell, 0, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (US)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK ) |
| 1579 | | COMP( 1980, tntellp, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (US, patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) |
| 1561 | COMP( 1981, tntell, 0, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (US, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK ) // assume there is an older version too, with CD8010 MCU |
| 1562 | COMP( 1980, tntellp, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK | MACHINE_NOT_WORKING ) |
| 1580 | 1563 | COMP( 1981, tntelluk, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Touch & Tell (UK)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK ) |
| 1581 | 1564 | COMP( 1981, tntellfr, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Le Livre Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK ) |
| 1582 | 1565 | |