Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi.

Similar presentations


Presentation on theme: "Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi."— Presentation transcript:

1 Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi

2 Supported Languages/Firmwares Java C, C++, Pascal Forth MindScript, NQC, Lego ASM TinyVM, leJOS brickOS pbForth Standard Lego RCX LanguageFirmware

3 RCX Internals Hitachi H8 microcontroller  On-chip 16K ROM  External 32K RAM I/O devices  Three motor ports  Three sensor ports  IR communications port

4 RCX Virtual Machine Implemented by the Lego RCX firmware Virtual Machine CharacteristicsCharacteristics Byte Code Interpreter Sources and values Byte Code Command Set

5 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

6 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

7 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)

8 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:

9 Part 2: A Lego RCX pathfinder in Assembler using ScriptEd

10 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)

11 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)

12 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

13 Part 3: A Lego RCX pathfinder in NQC using BricxCC

14 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)

15 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

16 References The Bricx Command Center (BricxCC) http://bricxcc.sourceforge.net/ http://bricxcc.sourceforge.net/ The Lego Mindstorms SDK 2.5 (ScriptEd) http://mindstorms.lego.com/eng/comm unity/resources/ http://mindstorms.lego.com/eng/comm unity/resources/


Download ppt "Lego RCX Assembler and a Case Study Luis Paris Dept. of Computer Science University of Mississippi."

Similar presentations


Ads by Google