| 162 | } |
| 163 | |
| 164 | void FLASHwrite32(u32 addr, u32 value, int size) |
| 165 | { |
| 166 | |
| 167 | switch (addr & 0x1FFFFFFF) |
| 168 | { |
| 169 | case FLASH_R_DATA: |
| 170 | |
| 171 | DevCon.WriteLn("DEV9: *FLASH DATA %dbit write 0x%08lX %s", size * 8, value, (ctrl & FLASH_PP_WRITE) ? "WRITE_ENABLE" : "WRITE_DISABLE"); |
| 172 | memcpy(&data[counter], &value, size); |
| 173 | counter += size; |
| 174 | counter %= PAGE_SIZE_ECC; //should not get past the last byte, but at the end |
| 175 | break; |
| 176 | |
| 177 | case FLASH_R_CMD: |
| 178 | if (!(ctrl & FLASH_PP_READY)) |
| 179 | { |
| 180 | if ((value != SM_CMD_GETSTATUS) && (value != SM_CMD_RESET)) |
| 181 | { |
| 182 | DevCon.WriteLn("DEV9: *FLASH CMD %dbit write %s ILLEGAL in busy mode - IGNORED", size * 8, getCmdName(value)); |
| 183 | break; |
| 184 | } |
| 185 | } |
| 186 | if (cmd == SM_CMD_WRITEDATA) |
| 187 | { |
| 188 | if ((value != SM_CMD_PROGRAMPAGE) && (value != SM_CMD_RESET)) |
| 189 | { |
| 190 | DevCon.WriteLn("DEV9: *FLASH CMD %dbit write %s ILLEGAL after WRITEDATA cmd - IGNORED", size * 8, getCmdName(value)); |
| 191 | ctrl &= ~FLASH_PP_READY; //go busy, reset is needed |
| 192 | break; |
| 193 | } |
| 194 | } |
| 195 | DevCon.WriteLn("DEV9: *FLASH CMD %dbit write %s", size * 8, getCmdName(value)); |
| 196 | switch (value) |
| 197 | { // A8 bit is encoded in READ cmd;) |
| 198 | case SM_CMD_READ1: |
| 199 | counter = 0; |
| 200 | if (cmd != SM_CMD_GETSTATUS) |
| 201 | address = counter; |
| 202 | addrbyte = 0; |
| 203 | break; |
| 204 | case SM_CMD_READ2: |
| 205 | counter = PAGE_SIZE / 2; |
| 206 | if (cmd != SM_CMD_GETSTATUS) |
| 207 | address = counter; |
| 208 | addrbyte = 0; |
| 209 | break; |
| 210 | case SM_CMD_READ3: |
| 211 | counter = PAGE_SIZE; |
| 212 | if (cmd != SM_CMD_GETSTATUS) |
| 213 | address = counter; |
| 214 | addrbyte = 0; |
| 215 | break; |
| 216 | case SM_CMD_RESET: |
| 217 | FLASHinit(); |
| 218 | break; |
| 219 | case SM_CMD_WRITEDATA: |
| 220 | counter = 0; |
| 221 | address = counter; |
no test coverage detected