Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi
Supported Languages/Firmwares Java C, C++, Pascal Forth MindScript, NQC, Lego ASM TinyVM, leJOS brickOS pbForth Standard Lego RCX LanguageFirmware
RCX Internals Hitachi H8 microcontroller On-chip 16K ROM External 32K RAM I/O devices Three motor ports Three sensor ports IR communications port
RCX Virtual Machine Implemented by the Lego RCX firmware Virtual Machine CharacteristicsCharacteristics Byte Code Interpreter Sources and values Byte Code Command Set
Case Study: Lego RCX Assembler Motivation Project for CSCI-450 Programming Languages Lego Assembler hides output object file Result: Byte code nor object format can’t be studied Does not support definition listdefinition list Result: Programs hard to read and maintain Project: Create a Lego RCX AssemblerLego RCX Assembler More robust Runs standalone
Solution Strategy Two stages: Lexical/Syntax analysis (Parsing) Finite State Machine Library functions (scanf, string.tokenizer) Code generation (one-to-one) No one-to-many semantic analysis (as in compilers) Mnemonic to Opcode conversion Parameters to Byte Code conversion
Which language C/C++ or Java? Java is a powerful OOP language but… not really suitable for system programming No bit-fields support No operator overloading Both C/C++ support bit-fields However, C++ has unnecessary, confusing features (multiple inheritance)
Bit-fields After parsing ASM command “out 6, 23”: Variables contain: instr = “out”; param1 = 6; param2 = 23 Problem: encode “out param1, param2” into above data structure C/C++ can declare P1 and P2 as bit-fields as follows: Java can NOT declare bit-fields so it must merge P1 and P2: Therefore, Java programmer must perform bit shifting and masking operations; whereas the C/C++ compiler does it for us. then do:
Part 2: A Lego RCX pathfinder in Assembler using ScriptEd
PreLab Instructions Part 1: Click Start Run Type \\luis\lego\\\luis\lego\ Move “workshop” folder to your “desktop” Close \\luis\lego\ folder\\luis\lego\ Part 2: Open “workshop” folder in your desktop Install “LEGOMindstormsSDK25.exe” Install “bricxcc_setup_3377.exe” (if not installed) Download Lego RCX Firmware (if not installed)
Open the ScriptEd application Click Start LEGO Software All Programs MindStorms SDK Tools ScriptEd On the ScriptEd application, Click Open Port Select your Tower Port (COM1, or USB1) On the toolbar select LASM (2 nd combo box)
Download “pathfind.asm” file to RCX Part 1: On the ScriptEd application, Click File Open Browse to “workshop” folder In File name, type *.asm (instead of *.rcx2) Select “pathfind.asm” and open it Part 2: Click on Script Download Test your RCX
Part 3: A Lego RCX pathfinder in NQC using BricxCC
Open the BricxCC application Click Start All Programs Bricx Command Center Bricx Command Center On the “Searching for the Brick” window, Select your Tower Port (COM1, or USB1)
Compile & Download “pathfind.nqc” Part 1: On the BricxCC application, Click File Open Browse to “workshop” folder Select “pathfind.nqc” and open it Part 2: Click on Compile Download Test your RCX
References The Bricx Command Center (BricxCC) The Lego Mindstorms SDK 2.5 (ScriptEd) unity/resources/ unity/resources/