1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
This document covers the protocol used between hand-helds and ticalcs2 library for ROM dumping.
Copyright (c) 2005-2006 Romain Livin et Benjamin Moody
This protocol has been designed to be easy, reliable, extendable and resumable.
ROM dumping protocol (LIO or USB are the same):
1) PC/TI always send data like this:
command | data length | data (if any) | checksum
word | word | bytes | word
The protocol uses words/longs whenever possible (even number of bytes)
Data are sent in Little Endian (LE) format (LSB, MSB) which is the natural format
of Z80 (TI8x) and i86 processors (LSB at first); m68k processor (TI9x) uses
Big Endian (BE) format (MSB at first).
Checksum is calculated in a byte fashion on the whole block (from command to data).
Possible commands are:
- AA55 (pc): is ready ? (data length is 0)
- 0000 (ti): not ready (data length is 0)
- 0001 (ti): ready (data length is 0)
- 0002 (pc): exit (data length is 0)
- 0003 (pc): request ROM dump size (data length is 0)
- 0005 (pc): request block at addr (this is a base addr, not the real ROM address) (data length is 4 bytes)
- 0006 (ti): data
- 0007 (ti): repeated data
The 0007 command saves :
~ 830 blocks on TI92+ (2048) => 40%
~1730 blocks on TI84+ (2048) => 85%
~1408 blocks on Titanium (4MB) => 35%
2) TI can reply with the following packets (example of transmission)
PC: AA55 0000 FF00 check whether ready (for sync after a transfer interrupt)
TI: 0001 0000 0001 ready
PC: 0003 0000 0003 request ROM size
TI: 0003 0004 LLLHHLHH chk returns size as a long
PC: 0005 0004 00000000 0009 request block at addr
TI: 0006 0400 1024 bytes of data chk
PC: 0005 0004 00000400 0409 request block at addr
TI: 0006 0400 1024 bytes of data chk
PC: AA55 0000 FF00 check whether ready (for sync after a transfer interrupt)
TI: 0001 0000 0001 ready
PC: 0005 0004 00000400 000D request block at addr
TI: 0006 0400 1024 bytes of data chk
PC: 0005 0004 00000800 0011 request block at addr
TI: 0007 0004 0400 00FF 000A 1024 bytes filled with 0x00FF
PC: 0002 0000 0002 exit dumper
TI: 0002 0000 0002
3) transmission error (timeout with SilverLink for instance)
Send this until dumper replies (used to synchronize again):
PC: AA55 0000 FF00 check whether ready (for sync after a transfer interrupt)
TI: 0001 0000 0001 ready
goes on...
4) unknown packet
PC: 1234 0000 1234 unknown packet
TI: error: ignored => wait for next command
|