Transcript Document

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 StartRun
 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 OpenPort
 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 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)
http://bricxcc.sourceforge.net/
 The Lego Mindstorms SDK 2.5 (ScriptEd)
http://mindstorms.lego.com/eng/comm
unity/resources/
