Files
tsvm/serialdev.txt
minjaesong d8f7bb3973 stuffs
2020-10-30 11:45:22 +09:00

164 lines
5.5 KiB
Plaintext

All peripherals using serial connection must follow these standards
0. How to communicate
0.1 Master-to-Slave mode
- Master device must send enquiry query, and when slave device report READY, master must pull the answer from the slave
0.2 Master-to-Master mode
- One peer sends enquiry, and other peer writes the answer into the requester device. You know the transaction is done
when other peer reports READY, NOT READY, and READY again.
1. ENQUIRY commands
1.0 All ENQUIRY commands have following syntax:
<COMMAND-STRING> 0x17
<COMMAND-STRING> 0x1E <ARGUMENTS-STRINGS SEPARATED BY 0x1F> 0x17
In case of positive acknowledge:
0x06 <ANSWER-STRINGS SEPARATED BY 0x1F> 0x17
In case of negative acknowledge (e.g. error messages):
0x15 <ANSWER-STRINGS SEPARATED BY 0x1F> 0x17
All ENQUIRY commands are RECOMMENDED to be no larger than 4096 bytes
STRINGs only consists with printable ASCII subset
1.1 WHO-ARE-YOU commands
DEVTYP
Description: type of the device
Returns: type of the device, of which but not exhaustive:
- PRNT: Printer
- STOR: Storage device (floppy drive, etc.)
- COMM: Modem (slave-mode device)
- COMP: Modem (master-mode device, typically an other computer connected though a null-modem)
DEVNAM
Description: enquires canonical device name
Returns: canonical device name in ASCII, maximum 4095 bytes
Note: non-standard device types must have LONGER THAN 4 characters of DEVTYP
1.2 CONTROL commands
DEVRST
Description: resets the device
Returns: none
DEVSTU
Description: reads status of the device, if applicable
Returns:
<status code> <0x1F> <message string> 0x17
Status Code is single byte number, negative numbers (or >= 128) is used for negative response by convention.
Also see section 1.0
2. Device-specific commands
2.0 Command formats
Device-specific commands does NOT have any header nor footer
2.1 STORage devices
2.1.0 NOTE
- comma-followed-by-drive-number can be omitted; drive number 1 will be substituted
- drive number always starts at 1
2.1.1 File Control
OPENR"<path to file>",<drive number>
Description: opens the file for reading
OPENW"<path to file>",<drive number>
Description: opens the file for writing
OPENA"<path to file>",<drive number>
Description: opens the file for appending (a variant of write)
WRITE<bytes to write>
Description: puts the device into WRITE mode and sets internal counter. Any subsequent messages will be interpreted
as-is, get written directly to the file, and will decrement the internal counter accordingly.
The number of bytes are required because of a nature of block-transfer, where every message is always in
the length of the block size.
FLUSH
Description: flushes any internal output buffer and no longer puts the device to WRITE mode
READ
Description: reads one block of file. Any subsequent read attempts will return next block. If file size is lesser
than a single block, rest of the bytes will be filled with zero, and size-of-the-block (see terranmon.txt)
will be set accordingly.
CLOSE
Description: closes any file that is open.
LOAD"<path to file>",<drive number>
Description: loads a file onto the main memory. The pointer to the file will be sent back to the host device.
LOADBOOT,<drive number>
Description: loads a bootloader so that it can be read by the host device through the serial connection.
Technically there's no limit on the size of the bootloader but it's up to the BIOS to read more than
a single block.
CHTYPE,<file type>,<drive number>
Description: changes the open file's file type (or its extension)
LIST
Description: lists contents of the open (with OPENR) directory in READABLE FORMAT
(no 0x17 at the end, terminates string with zero)
When a file is opened instead of a directory, its filename should be printed
Raw filesystem (e.g. EPROM) should return first 4096 bytes of its contents.
LISTFILES
Description: same as the LIST, but in machine readable format, which follows the following format:
<file/dir type> <filename> [<0x1E for separator> <file/dir type> <filename> ...] <0x17>
file/dir type: 0x11 for file, 0x12 for directory
USAGE,<drive number>
Description: returns following values: TOTAL_SPACE 0x1E USED_SPACE 0x1D TOTAL_FILE_COUNT 0x1E TOTAL_DIRECTORY_COUNT in
ASCII string.
For non-hierarchical system, TOTAL_DIRECTORY_COUNT is always 0x30 (ASCII string "0")
FSTYPE,<drive number>
Description: returns filesystem type in plain string, of which but not limited to:
- TREE: any generic filesystem with recursive directories and multiple files.
When emulators use filesystem of running OS for the disk implementation (and not use proprietary binary
file), this type should be returned.
- FLAT: filesystem without directories and can hold multiple files. E.g. Commodore 64
- RAW: no filesystem is used. E.g. EPROM
When disk image is used for emulation, their identifier should be returned. E.g. FAT, TEVD
2.1.2 File type dictionary
- PRG: executable
- TXT: text document
- BIN: binary data
- SEC: pseudo-type used by an pseudo-file called "!BOOTSEC", which is a boot sector
File type is independent of the "extension", but just a marker for an auto-execution (firstmost PRG file will be
auto-run). If your file is neither PRG nor TXT, use BIN.
Operation system may choose to ignore this feature and handle the "extension" by itself