Difference between revisions of "Simple graphics language"

From ScienceZero
Jump to: navigation, search
(Commands)
(Commands)
Line 37: Line 37:
 
   load          ( address -- data )
 
   load          ( address -- data )
 
   store        ( data address -- )
 
   store        ( data address -- )
 +
  _            ( -- n )( Read next 4 bytes and put the number on the stack)
 
   
 
   
 
  Relative commands:
 
  Relative commands:

Revision as of 02:50, 15 April 2011

A simple graphics language for microcontrollers

We start with a very simple reverse polish notation interpreter with a preprocessor stage

Sample code:

360 for 1 forward 1 right next

Registers:

0 X
1 Y
2 Angle
3 Scale
4 Colour
5 Pen up/down
6 Nested If counter
7

Stack diagrams:

( things read from the stack -- things written on the stack )
x - x position
y - y position
n - number
Example:
  ( n n -- n )
  This means that two numbers were read from the stack, then one number was written back.
  For example a simple addition reads two numbers and writes back the result.

Commands

Define function:
  To < function name > < code > End
 
Absolute commands
  setcolour     ( colour -- )
  readcolour    ( -- colour )
  setpos        ( x y -- )
  readpos       ( -- x y )
  load          ( address -- data )
  store         ( data address -- )
  _             ( -- n )( Read next 4 bytes and put the number on the stack)

Relative commands:
  penup         ( -- )
  pendown       ( -- )
  forward       ( length -- )
  backward      ( length -- )
  left          ( angle -- )
  right         ( angle -- )
 
Loops:
  for           ( n -- )
  next          ( -- )
  do            ( -- )
  again         ( -- )

Conditionals:
  if            ( n -- )
  else
  endif

Data processing:
  +             ( n n -- n )
  -             ( n n -- n )
  *             ( n n -- n )
  /             ( n n -- n )
  lsl           ( n n -- n ) 
  lsr           ( n n -- n )
  and           ( n n -- n )
  or            ( n n -- n )
  eor           ( n n -- n )
  not           ( n -- n )

The dictionary

The dictionary is a string like "SetcolourReadcolourSetposReadpos". Any character that is not a lower case "a-z" marks the start of a new word. The first compiler pass adds all functions to the end of this table.

The function jump table

This table contains the address of each function, in the same order as the functions appear in the dictionary. It is filled in during the second pass when the code position is known.

Interpreter

do
  read opcode
  if number then add number to the data stack
  if hardwired command then execute
  if function then look up the address in the function jump table and call it
again