apple1-videocard-lib/demos/sdcard/cmd_read.h

58 lines
1.3 KiB
C

// READ:
// CPU sends CMD_READ + filename as 0 terminated string
// MCU sends $00 + 2 bytes file length (MSB first) + file data bytes (if OK)
// MCU sends $FF + string error description (if error)
//
// global start_address
// global len
// global token_ptr
void comando_read() {
// send command byte
send_byte_to_MCU(CMD_READ);
if(TIMEOUT) return;
// send filename
send_string_to_MCU(filename);
if(TIMEOUT) return;
// response
byte response = receive_byte_from_MCU();
if(TIMEOUT) return;
if(response == ERR_RESPONSE) {
// error with file, print message
print_string_response();
return;
}
// get file length in tmpword
receive_word_from_mcu();
if(TIMEOUT) return;
// get file bytes
token_ptr = (byte *) start_address;
for(word t=0;t!=tmpword;t++) {
byte data = receive_byte_from_MCU();
if(TIMEOUT) return;
*token_ptr++ = data;
}
// decrease by one for display result
token_ptr--;
// print feedback to user
woz_putc('\r');
woz_puts(filename);
woz_puts("\r$");
woz_print_hexword(start_address);
woz_puts("-$");
woz_print_hexword((word)token_ptr);
woz_puts(" (");
utoa(tmpword, filename, 10); // use filename as string buffer
woz_puts(filename);
woz_puts(" BYTES)\rOK");
}