MCPcopy Create free account
hub / github.com/CE-Programming/CEmu / mem_read_flash_parallel

Function mem_read_flash_parallel

core/mem.c:455–544  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

453};
454
455static uint8_t mem_read_flash_parallel(uint32_t addr) {
456 uint8_t value = 0;
457 unsigned int selected;
458
459 if (likely(addr < flash.mask)) {
460 if (unlikely(++cpu.flashTotalAccesses == 0)) {
461 cpu.flashTotalAccesses = 0x80000000;
462 cpu.flashDelayCycles >>= 1;
463 }
464 cpu.cycles += flash.waitStates;
465
466 switch(mem.flash.command) {
467 case FLASH_NO_COMMAND:
468 value = mem.flash.block[addr & (SIZE_FLASH - 1)];
469 break;
470 case FLASH_SECTOR_ERASE:
471 value = 0x80;
472 mem.flash.read++;
473 if (mem.flash.read == 3) {
474 mem.flash.read = 0;
475 mem.flash.command = FLASH_NO_COMMAND;
476 }
477 break;
478 case FLASH_CHIP_ERASE:
479 value = 0xFF;
480 mem.flash.command = FLASH_NO_COMMAND;
481 break;
482 case FLASH_READ_SECTOR_PROTECTION:
483 if (addr < 0x10000) {
484 selected = addr / SIZE_FLASH_SECTOR_8K;
485 value = !(mem.flash.sector8k[selected].ipb & mem.flash.sector8k[selected].dpb);
486 } else {
487 selected = addr / SIZE_FLASH_SECTOR_64K;
488 value = !(mem.flash.sector[selected].ipb & mem.flash.sector[selected].dpb);
489 }
490 break;
491 case FLASH_READ_CFI:
492 if (addr >= 0x20 && addr <= 0x2A) {
493 static const uint8_t id[7] = { 0x51, 0x52, 0x59, 0x02, 0x00, 0x40, 0x00 };
494 value = id[(addr - 0x20) / 2];
495 } else if (addr >= 0x36 && addr <= 0x50) {
496 static const uint8_t id[] = {
497 0x27, 0x36, 0x00, 0x00, 0x03, 0x04, 0x08, 0x0E,
498 0x03, 0x05, 0x03, 0x03, 0x16, 0x02, 0x00, 0x05,
499 0x00, 0x01, 0x08, 0x00, 0x00, 0x3F, 0x00, 0x00,
500 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
501 0x00, 0x00, 0x50, 0x52, 0x49, 0x31, 0x33, 0x0C,
502 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x02, 0x95,
503 0xA5, 0x02, 0x01 };
504 value = id[(addr - 0x36) / 2];
505 }
506 break;
507 case FLASH_DEEP_POWER_DOWN:
508 break;
509 case FLASH_IPB_MODE:
510 if (addr < 0x10000) {
511 selected = addr / SIZE_FLASH_SECTOR_8K;
512 value = mem.flash.sector8k[selected].ipb;

Callers

nothing calls this directly

Calls 2

cpu_crashFunction · 0.85
mem_read_unmapped_flashFunction · 0.85

Tested by

no test coverage detected