Milesy:
I had expected SPI transfers on a byte by byte basis, but it would seem apparent from the data out of the SD card that it buffers the file in (It is about 400Kb)
It's actually 512 bytes (aka 1 sector). This buffer is called a "cache", it's always filled with data because it retains a copy (in RAM) of part of the card's content (and thus, the file's content).
This technique is used basically in everything you can call a "mass storage device", and it's purpose is to make small I/O operations more efficient.
The invention of the cache memory follows this philosophy: if sending or retrieving data takes a while, then why bothering with small transactions when you can do a big one for the same amount of time? This is specially true in write operations: an SD card takes the same amount of time writting a single byte or 512 at once.
In conclusion: you'll not see SPI activity after opening a file, until its "cursor" goes beyond the currently loaded block.
In that situation, you'll notice around 512 bytes transfered if the current block hasn't changed (maybe 1024 if it has to query the FAT or the cluster bitmap), 1024 if you just overwrite data, between 1536 and 4096 if the file is growing. If the file was opened for writting, invoking flush() may also trigger a transfer of between 1024 and 2048 bytes.
Milesy:
How do I get it to go back high again? Do I need to do this manually some how?
Sounds annoying, but if the libray doesn't want to do it; someone else has to.
Milesy:
I tried setting SS high just before I called available() and all the byte values I got back were just 255.
I (you) have to study a bit more the library, the input stream shouldn't return -1 (255 for a byte) if the end-of-file wasn't reached yet. Or maybe when the cache has to load new data, fails in the process because of the SD card ignoring the clock signal (due to CS being high).
Milesy:
and I have ran SD.begin(10) but I dont see any activity on pin 10
Shouldn't be like that. Again, we have to take a look at the library's source code; because such behaviors aren't explainable just yet (or at least for me).
PD 1: didn't realized before that you are "sort of" emulating a 6502 to interact with... a real SID chip from a real Commodore 64?. I bet it's a real one since you require two 8-bit shift registers (for the 16-bit address lines), and probably an entire port from the Arduino for the data lines (in that case I'll recommend port D since it's the only one where all physical pins are contiguous).
PD 2: by the way, the SPI library only can shift a minimum of 8 bits (due to hardware design), so to shift 19 bits you have to shift 24; otherwise bitbanging is your only option since by software you can shift any arbitrary number of bits.