====== The 10LC Wiki ====== 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. You can read more about the [[History]] of the project, jump straight into its [[Features]], [[Documentation]], [[Examples]] of its use, or see what the [[Future]] plans are. Or if you just want to jump right in and get started with it, visit the [[Downloads]] and [[Command Line]] pages. If you have problems, check out the [[Troubleshooting ]] section. ==== Version History ==== == 1.0.0.0 == Internal - started with parsing MRec (Hex) files to be able to understand the binary format. == 1.0.0.1 == Internal - Implemented basic parsing using Irony, still trying to figure out what 10LC will actually look like. == 1.0.0.2 == Internal - Completed all new statements == 1.0.0.3 == Internal - Decided on new syntax for 10LC (and decided on 10LC as the name), can support decimal and hex values freely, implemented ''Alias'' and ''Const'' statements. Created internal ProgramState object and managers to store per-program stuff. == 1.0.0.4 == Internal - Finished new intrinsics (''Fill'', ''FillRamp'' and ''Delay''). == 1.0.0.5 == Internal - 10LC can produce code for all supported statements and create //steps// that the 9010 can execute. == 1.0.0.6 == Internal - Implementing static optimizations, and global constants == 1.0.0.7 == 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 ''EndProgram'' statement. == 1.0.0.8 == 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