Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi Supported Languages/Firmwares Language Firmware Java C, C++, Pascal Forth MindScript, NQC, Lego ASM TinyVM, leJOS brickOS pbForth Standard Lego RCX 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 Characteristics 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 list Result: Programs hard to read and maintain Project: Create a Lego 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 8 bits 3 bits 5 bits out (0xE1 ) P1 P2 P1: motors (ABC), P2: constant 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: then do: Java can NOT declare bit-fields so it must merge P1 and P2: then do: Therefore, Java programmer must perform bit shifting and masking operations; whereas the C/C++ compiler does it for us. Part 2: A Lego RCX pathfinder in Assembler using ScriptEd PreLab Instructions Part 1: Click StartRun Type \\luis\lego\ Move “workshop” folder to your “desktop” Close \\luis\lego\ folder 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 OpenPort Select your Tower Port (COM1, or USB1) On the toolbar select LASM (2nd combo box) Download “pathfind.asm” file to RCX Part 1: On the ScriptEd application, Click FileOpen Browse to “workshop” folder In File name, type *.asm (instead of *.rcx2) Select “pathfind.asm” and open it Part 2: Click on ScriptDownload 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 FileOpen Browse to “workshop” folder Select “pathfind.nqc” and open it Part 2: Click on CompileDownload Test your RCX References The Bricx Command Center (BricxCC) http://bricxcc.sourceforge.net/ The Lego Mindstorms SDK 2.5 (ScriptEd) http://mindstorms.lego.com/eng/comm unity/resources/