It appears that my writes and reads are now functioning, with the following huge caveat.
The datasheet for the flash part (Intel P30 family) says that after performing erase or program or other operations, you have to write 0xFF to the device base address to return to Read Array mode. When I do this, and then perform a read, I don't get my data, I get status.
FLASH_PTR[0] = 0xFF; //put device in read array mode
data_in = FLASH_PTR[DATA_LOCATION]; //read the data
In this case, the data_in equals the status data 0x80 instead of the data in that memory location. However, if I do the following, which is totally not what is specified in the datasheet, it works:
FLASH_PTR[DATA_LOCATION] = 0xFF; //write read array command to data location instead of base address
data_in = FLASH_PTR[DATA_LOCATION]; //read the data
Then data_in is the data I previously wrote!
Does this make sense in any way? I've heard that some flashes violate the prescribed operation.