Download Legos, Java and Programming Languages

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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/
