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