A brief summary of the protocol used by the Samsung Yepp:

Types
	type=0	   data
	type=1	   mp3
	type=2	   telephone
	type=3	   sc4
	type=4	   reserved?

Wheres
	where=0	   main memory
	where=1	   card memory

Indices
	one byte to reference a file indexes >0x7f are in
	the card, no file has index=0

Sections enclosed in { } are repeated until either >= the the required number
of bytes have been received or transmitted, or the required number of blocks
is reached.

Direction of communication
	->	Means PC->Yepp ie the PC asserts D0-D7
	<-	Means Yepp->PC ie the Yepp asserts D0-D7

The communication is IEEE-1284 where IEEE-1284 says what happens, look at
the code for more information.

memsize word size of memory in units of 16K
memfree free memory in units of 16K

Opcode

0x1     Upload file (PC->Yepp)
		-> Byte  1
		-> Byte  where 
		-> Byte  type 
		-> Dword size
		-> Word  blocks
		-> Byte  name[515]

		-> Byte block[0x3ff0]
		-> Byte 0
	
		   {
		-> Byte block[0x41f8]	
		-> Byte 0
		   }

		<- Byte index

0x2	Download file (Yepp->PC)
		-> Byte  2
		-> Byte  index
		<- Dword size
		
		<- Byte block[0x3ff0]

		   {
		-> Byte 0	
		<- Byte ?
		<- Byte block[0x41f8]
		   }

0x3	Get directory
		-> Byte  3
		   {
		<- Byte  index
		<- Byte  type
		<- Dword size
		<- Byte  name[515]
		<- Byte  attr
		   } End is signaled by all of the above being 0
		<-  Byte  0xff

0x4	Get status
		-> Byte  4
	             
		<- Word  memsize    BASE
		<- Word  memfree?

		<- Word  memsize    CARD
		<- Word  memfree?

0x5	Erase	
		-> Byte  5
		-> Byte  index
		<- Byte  0

0x6	Format
		-> Byte  6
		-> Byte  where 
		<- Byte 0xff

0x7 	Get Play Order?
		-> Byte  7
		<- Byte gunk[8] (always seen 0x3a 0x68 0xa0 0x00 0x00 0x01 0x03 0x09)
		<- Byte order[250] 
			Array of indexes, terminated by zeros
		<- Byte q (Don't know what these are)
		<- Byte q


0x8

0x9 

0xa	Ping
		-> Byte 10
		<- Byte 1

I Think the point of these three
is to ensure the index number
is deterministic.

0xb     Download config.dat 
		same format as 0x1, type=0x0

0xc	Download encode.mas 
		same format as 0x1, type=0x4

0xd	Download decode.mas 
		same format as 0x1, type=0x4
		
0xe	Download serial.dat
		same format as 0x1, type=0x0

0x20	?????? (After format flash 0x6 0x1 )
		-> Byte 32
		<- Word 0xe698=59032 (with 8Mb card)

0x21	?????? (After 0x20)
		-> Byte 33	 (With 8Mb card)
		<- Byte 0

0x22	?????? (After 0x21) 
		-> Byte 34
		-> Word blocks   (80 with 8Mb card)
		   {
		-> Byte data[512];
		   }
		<- Byte 24 	 (With 8Mb Card)