MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / flash_read

Function flash_read

src/flashrom.cpp:876–948  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

874}
875
876uae_u32 flash_read(void *fdv, uaecptr addr)
877{
878 struct flashrom_data *fd = (struct flashrom_data*)fdv;
879 uae_u8 v = 0xff;
880 int other_byte_mult = 1;
881#if FLASH_LOG > 1
882 uaecptr oaddr = addr;
883#endif
884
885 if (!fd)
886 return 0;
887
888 if (fd->flags & (FLASHROM_EVERY_OTHER_BYTE | FLASHROM_SKIP_EVERY_OTHER_BYTE)) {
889 addr >>= 1;
890 other_byte_mult = 2;
891 }
892
893 if (addr * other_byte_mult >= fd->allocsize) {
894 return 0xff;
895 }
896
897 addr &= fd->mask;
898
899 // write data in pagebuffer when any read is done
900 if ((fd->flags & FLASHROM_PARALLEL_EEPROM) && fd->pagemodified) {
901 fd->pagemodified = false;
902 for (int i = 0; i < fd->pagesize; i++) {
903 int offset = fd->lastpagewrite + i;
904 if (fd->mpage[i]) {
905 if (fd->rom[offset] != fd->page[i]) {
906 fd->rom[offset] = fd->page[i];
907 setmodified(fd, offset);
908 }
909 fd->mpage[i] = false;
910 }
911 }
912 }
913
914 if (fd->state == 3) {
915 uae_u8 a = addr & 0xff;
916 if (a == 0)
917 v = fd->mfgcode;
918 if (a == 1)
919 v = fd->devicecode;
920 if (a == 2)
921 v = 0x00;
922 gui_flicker_led (LED_MD, 0, 1);
923 } else if (fd->state >= 200) {
924 v = 0;
925 if (fd->state & 1)
926 v ^= 0x40;
927 fd->state++;
928 if (fd->state >= 210)
929 fd->state = 0;
930 v |= 0x08;
931 } else if (fd->state > 7) {
932 v = (fd->rom[addr * other_byte_mult] & 0x80) ^ 0x80;
933 if (fd->state & 1)

Callers 7

blizzardf0_bgetFunction · 0.85
blizzardea_bgetFunction · 0.85
dummy_getFunction · 0.85
ide_read_byte2Function · 0.85
gfxboards_bget_regsFunction · 0.85
special_pcem_getFunction · 0.85
read_rombyteFunction · 0.85

Calls 4

setmodifiedFunction · 0.85
m68k_getpcFunction · 0.85
write_logFunction · 0.70
gui_flicker_ledFunction · 0.50

Tested by

no test coverage detected