As a practical example, here's a hexdump of a character record from my game-in-development.
00000000 58 10 4a 4f 52 4e 20 20 20 20 20 20 20 20 20 20 |X.JORN |
00000010 20 00 39 38 37 36 37 38 4d 34 20 50 20 20 00 00 | .987678M4 P ..|
00000020 00 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.A..............|
00000030 00 00 31 30 30 30 30 30 30 31 30 30 30 30 30 30 |..10000001000000|
00000040 30 30 4b 48 41 41 4c 4f 20 20 20 20 20 20 20 20 |00KHAALO |
00000050 20 00 39 38 37 36 37 38 55 34 20 50 20 20 00 00 | .987678U4 P ..|
00000060 00 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.E..............|
00000070 00 00 30 30 30 31 30 30 30 31 30 30 30 30 30 30 |..00010001000000|
00000080 30 30 41 52 52 4c 41 4e 52 4f 55 47 48 4c 20 20 |00ARRLANROUGHL |
00000090 20 00 39 38 37 36 37 38 56 34 20 50 20 20 00 00 | .987678V4 P ..|
000000a0 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.P..............|
000000b0 00 00 30 31 30 30 30 30 30 31 30 30 30 30 30 30 |..01000001000000|
000000c0 30 30 54 48 52 4f 59 53 53 20 20 20 20 20 20 20 |00THROYSS |
000000d0 20 00 39 38 37 36 37 38 44 34 20 50 20 20 00 00 | .987678D4 P ..|
000000e0 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.S..............|
000000f0 00 00 30 30 31 30 30 30 30 31 30 30 30 30 30 30 |..00100001000000|
00000100 30 30 |00|
The first two characters are throwaways that normally would indicate the target address. Because I load to a specific address, the X16 ignores them, so I code them with the codes for ASCII "X" and the decimal 16... X16, get it?
This means the X16 sees this as a 256 byte file.
The file itself has four records for four characters. A 15 character name with a zero at the end; a six-digit string representing the characters "personality profile" (a displayable string); a letter denoting species ("U" is human); a character denoting number of terms served in the previous career (they're all "4" here); a readied weapon and armor; a character denoting assigned position aboard a ship ("E" is engineering, for example); and sixteen digits (stringified) representing levels in sixteen skills.
All of this is playable data, although what I need primarily is name, ship position, and skill level.
I load this file, along with the ship data and the player's game state, like so:
load "SHIP.BIN",8,1, $A000 :rem bank1 to $A3ff
load "PLAYER.BIN",8,1, $A400 :rem bank1 to $A4ff
load "CHARACTERS.BIN",8,1,$A500 :rem bank1 to $A5ff
I get at the player data with a long series of PEEK statements. This is superior to a long series of READ statements, but I think reading from a SEQ file would be more convenient (for transfer to main RAM) but not convenient for memory management. Overloading INPUT# and GET# to treat banks as input channels would make it easy to transfer data from banks to main RAM. Thus banks become a kind of buffer to give a kind of random access to SEQ files. But it doesn't allow direct use of banked RAM.