A historic occasion! At 8:31AM EST, on this Friday, October 13th, 2006, CALCnet2.2 successfully sent and acknowledged its first message across a calculator network. In roughly 1/200th of a second, one of four networked emulated calculators sent 5 receiver SID bytes, 5 sender SID bytes, 2 size bytes, and the ascii message, "Cemetech shall rule the world!" to another one. The CALCnet2.2 routines were running as semi-blocking interrupts coexisting with a Doors CS 6 beta running at nearly full speed in the foreground. This heralds a major milestone for Doors CS, CALCnet2, and globalCALCnet: now that sending and receiving between calculators is possible, all of the wide and varied applications of calculator networking are ready to be explored.
For those unfamiliar with CALCnet2.2, it is the third major revision of the CALCnet protocol, and the first to be brought fully to fruition. CALCnet, later appended the designation 1.0 when later CALCnet protocols were developed, was interrupt-based yet built on a highly error-prone system. Since it was one of my first forays into z80 assembly programming, the code was extraordinarily buggy, not to mention uncompilable. CALCnet2 was my second wave of efforts on the project, in which I made great numbers of improvements to the theory behind the protocol. CALCnet2 owed a substantial percentage of its inspiration to a networking paper published by MaxCoderz' Timendus on ticalc.org, yet even this version was never completely written. Finally, in July 2006, I sat down and worked out a version of CALCnet based enough on CALCnet2 not to deserve a new major version number, but encompassing a vast number of improvements. Especially stressed was the amount of error checking; unlike any previous iteration of CALCnet, it was specifically designed to be used as an interrupt. Calculators are now identified not by cascading, dynamic assignation during network connection, but by the 5-byte unique serial number every real (non-emulated) calculator contains from its creation. This eliminates all of the network integrity checks that had been necessary in CALCnet2.2. In addition, all routines are heavily protected against locking up the calculator, and by using a pair of buffers instead of directly sending data between client programs and the interrupt, the CALCnet2.2 interrupt's actions are completely transparent to the client programs running on the calculator.
In the next few days, CALCnet2.2 will continue to be debugged, and I will be working on some fancy-looking demos. The only minor drawback of testing CALCnet2.2 on emulated hardware is that I also have to fake SIDs, since ROM images do not contain SIDs. Oh, and I have successfully tested Cn2 as working across all known TI-83+ ROM images.
Without further ado, here's the proof of this momentous occasion: the contents of the receiving calc's 256-byte receive buffer: