I'm very happy to report that the saving is working the way I had hoped! What the game sends to the card is identical to what the reader sends back when reading the card.
There are slight differences in the initial command that is sent, but it will be very easy to cut out the necessary portion from what the NAOMI2 sends and translate it into something the card reader would send back.
What NAOMI2 sent out:
2016-02-26 10:30:14.588848: NAOMI2
02 D8 53 00 00 00 30 31 36
2E 5D 01 19 F8 68 8D 8D E7 8E 0D 0A 5B 72 C0 FE
87 B6 2E FA E7 D1 2A B5 25 59 4A E6 17 DF 79 37
7E 4C 8F D7 89 88 39 E6 61 33 C6 C6 AB 10 B4 88
13 BF 5D 10 20 7B A2 CA 6E F0 2C 7D E3 1E B9 5A
D3 68 8E 1C 56 3D 46 F9 AE C0 08 A3 97 66 D0 AC
46 DA 74 DC 3B DB 5C 89 9D 8C EF 76 56 40 87 30
8A 2B B5 C9 A8 A4 54 20 3B 94 11 57 D9 A1 D8 CE
8C DC 76 57 5B 1E 9E F7 A9 DB 06 B4 CB 14 19 AA
75 00 31 E8 7E 31 BF A8 94 E6 53 45 47 41 42 48
52 33 48 30 B2 62 EC 41 56 0B A4 39 2E C9 0D CC
9D ED 10 62 28 C2 05 FA C8 B4 B8 E2 70 0D DA F6
CF 29 A8 6E 72 D6 77 91 6E C1 4F 9F 89 9D C6 15
92 72 45 FC F2 3F 46 E6 27 BC C7 1F 74 D5 E9 03
90 05
What Reader gives back:
2016-03-06 09:08:06.801777: READER
02 D5 33 78 30 30
2E 5D 01 19 F8 68 8D 8D E7 8E 0D 0A 5B 72 C0 FE
87 B6 2E FA E7 D1 2A B5 25 59 4A E6 17 DF 79 37
7E 4C 8F D7 89 88 39 E6 61 33 C6 C6 AB 10 B4 88
13 BF 5D 10 20 7B A2 CA 6E F0 2C 7D E3 1E B9 5A
D3 68 8E 1C 56 3D 46 F9 AE C0 08 A3 97 66 D0 AC
46 DA 74 DC 3B DB 5C 89 9D 8C EF 76 56 40 87 30
8A 2B B5 C9 A8 A4 54 20 3B 94 11 57 D9 A1 D8 CE
8C DC 76 57 5B 1E 9E F7 A9 DB 06 B4 CB 14 19 AA
75 00 31 E8 7E 31 BF A8 94 E6 53 45 47 41 42 48
52 33 48 30 B2 62 EC 41 56 0B A4 39 2E C9 0D CC
9D ED 10 62 28 C2 05 FA C8 B4 B8 E2 70 0D DA F6
CF 29 A8 6E 72 D6 77 91 6E C1 4F 9F 89 9D C6 15
92 72 45 FC F2 3F 46 E6 27 BC C7 1F 74 D5 E9 03
B2
Saving out card data will be simple to do as plain text files.
During the portion where the game is prompting to enter a card would be the ideal time for the program to allow you to choose which card file to load.
I've still got a few steps to get through for a normal workflow after ending a game, but I'm pretty confident this emulator is going to work.
My only looming concern is how to deal with card servicing if I can't figure out a way to modify the saved data. It wouldn't be difficult simulating transferring data to a new card, it's just that I'm not even close to having a card that needs to be serviced so I can monitor the exchange. I'd basically have to start and complete a race 50 times with entering and ejecting my card each time. That sounds very tedious.