This is the start page for the 10LC language and toolkit.
I have always been fascinated with the older Fluke 9010A microprocessor troubleshooter. I have owned a few through the years and my current bench one has the serial port on it for transferring programs and data between the unit and a PC.
However, I never found its programming language (usually referred to as 9LC, the name of its compiler) very appealing. It feels more like a cross between assembly and script, and does not seem as flexible as it should be but that might be due to its age. So I sought out to “fix” that.
If you have problems, check out the Troubleshooting section.
Internal - started with parsing MRec (Hex) files to be able to understand the binary format.
Internal - Implemented basic parsing using Irony, still trying to figure out what 10LC will actually look like.
Internal - Completed all new statements
Internal - Decided on new syntax for 10LC (and decided on 10LC as the name), can support decimal and hex values freely, implemented
Const statements. Created internal ProgramState object and managers to store per-program stuff.
Internal - Finished new intrinsics (
Internal - 10LC can produce code for all supported statements and create steps that the 9010 can execute.
Internal - Implementing static optimizations, and global constants
Internal - 10LC can now track and issue warnings for all unreferenced objects (Labels, Programs, Consts, and Aliases). Changed Global Const statement from
Global to just a
Const that is created outside of program scope. Implemented global Aliases the same way. Added
Internal - Fixed label calculation, was off by one which would cause beeping whenever certain labels were jumped to. Implemented
WriteEx statement. Found while implementing a test script for Vanguard. Working on decompiler - not quite there yet, here is the start of what it produces for the MRec round-trip for part of the Vanguard test script:
Active Force Line, Active Interrupt, Bad Power Supply0x00 (0)YesYes0x000000000xFFFFFFFC0x130x110x460x000000FA0x00000D0A"6502"0x20 (32)"", "", "", """", "EADY", "", ""0Display " VANGUARD TEST SCRIPT" REG F1; REG E64; Execute 99; Display " USE LONG RAM TESTS?8" Label 0 Display " TEST RAM?0" If REG 0==1Goto 1 Display " TEST ROM?0" If REG 0==1 Goto 2 Display " TEST VIDEO?0" If REG 0==1Goto 3 Display " TEST SOUND?0" If REG 0==1Goto 4 Display " TEST SPEECH?0" If REG 0==1 Goto 5 Display " TEST FLIP?0" If REG 0==1Goto 6 Display " TEST SCROLL?0" If REG 0==1Goto 7Goto 0; Label 1Execute 1; Goto 0; Label 2Execute 2; Goto 0; Label 3Execute 3; Goto 0; Label 4Execute 4; Goto 0; Label 5Execute 5; Goto 0; Label 6Execute 6; Goto 0; Label 7Execute 7; Goto 0; 0Sync 01Q02Y030405060711