J1a SwapForth Reference James Bowman [email protected]

Excamera Labs Pescadero California USA

c 2015, James Bowman

All rights reserved ANS Forth Compliance Label J1a SwapForth is an ANS Forth System Providing Providing Providing Providing Providing Providing Providing

names names names names names names names

from from from from from from from

the the the the the the the

Core Extensions word set Double-Number word set Facility word set Facility Extensions word set String word set Programming-Tools word set Programming-Tools Extensions word set

Contents 1. Getting started 1.1. Some demos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Building from Scratch . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 6 8

2. Available Words 11 2.1. ANS Core Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2. Additional Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3. Using SwapForth 3.1. Raw UART access . . . . . 3.2. The SwapForth shell . . . . 3.2.1. Invocation . . . . . . 3.2.2. Command reference 3.3. Tethered Mode . . . . . . . .

.... .... . . . . . . ....

. . . . .

.... .... . . . . . . ....

.... .... . . . . . . ....

..... ..... . . . . . . . . .....

.... .... . . . . . . ....

.... .... . . . . . . ....

15 15 15 16 16 16

4. Memory 17 4.1. Memory map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2. Dictionary Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5. iCEstick Hardware interface 5.1. Port Map . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1. $0001: Digilent PmodTM data . . . . 5.1.2. $0002: Digilent PmodTM direction . . 5.1.3. $0004: LEDs . . . . . . . . . . . . . . 5.1.4. $0008: PIO output . . . . . . . . . . . 5.1.5. $0800: SB WARMBOOT control . . . 5.1.6. $1000: UART data . . . . . . . . . . . 5.1.7. $2000: IrDA, flash and UART inputs . 3

..... . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.... . . . . . . . . . . . . . . . . . . . . .

.... . . . . . . . . . . . . . . . . . . . . .

19 21 21 21 21 21 22 22 22

4 Index

CONTENTS 23

Chapter 1

Getting started

J1a SwapForth is a 16-bit version of SwapForth, intended as an interactive Forth system using very little logic and RAM. The system currently fits on a Lattice iCE40HX-1k FPGA. The J1a and peripherals use 1200 logic elements. SwapForth uses 4.7 Kbytes of RAM, leaving about 3.3 Kbytes for the application. After installing the icestorm tools, you can run on a Lattice iCEstick like this

git clone [email protected]:jamesbowman/swapforth.git cd swapforth/j1a

5

6

CHAPTER 1. GETTING STARTED

iceprog icestorm/j1a.bin python shell.py -h /dev/ttyUSB0

(where /dev/ttyUSB0 is the appropriate port your iCEstick was assigned). You should see something like

Contacting... established Loaded 208 words >

And you can now try the usual Forth things, e.g.

1 2 + . 3 ok

There is a fairly complete core ANS-compatible Forth system running on the board, including a compiler.

1.1

Some demos

You can control the five on-board LEDs

-1 leds ok 0 leds ok

and to make them blink

1.1. SOME DEMOS

7

: blink 32 0 do i leds 100 ms loop ; blink

There is an Easter date calculator

new #include ../demos/easter.fs

Now you can do

>2015 .easter 2015 April 5

ok

Or even

>: 20easters + 2035 2015 do + cr i .easter + loop +; ok >20easters 2015 April 5 2016 March 27 2017 April 16

8

CHAPTER 1. GETTING STARTED

2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034

1.2

April April April April April April March April April March April April April April March April April

1 21 12 4 17 9 31 20 5 28 16 1 21 13 28 17 9

ok

Building from Scratch

After installing the icestorm tools, run rm build/* make -C icestorm This will produce j1a.bin - but it only contains the very bare-bones system; the rest of SwapForth still needs to be compiled. To do this, load j1a.bin and start the shell:

$ iceprog icestorm/j1a.bin $ python shell.py -h /dev/ttyUSB0 -p ../common/ Contacting... established Loaded 127 words >

1.2. BUILDING FROM SCRATCH

9

Then compile the rest of SwapForth and write the finished executable with these commands:

#include swapforth.fs #flash build/nuc.hex #bye

Now run make -C icestorm again - this compiles an FPGA image with the complete code base built-in.

10

CHAPTER 1. GETTING STARTED

Chapter 2

Available Words 2.1

ANS Core Words

J1a SwapForth implements most of the core ANS 94 Forth standard. Implemented words are: ! # #> #s ’ ( * */ */mod + +! +loop , - . ." / /mod 0< 0= 1+ 1- 2! 2* 2/ 2@ 2drop 2dup 2over 2swap : ; < <# = > >body >in >number >r ?dup @ abort abort" abs accept align aligned allot and base begin bl c! c, c@ cell+ cells char char+ chars constant count cr create decimal depth do does> drop dup else emit environment? evaluate execute exit fill find fm/mod here hold i if immediate invert j key leave literal loop lshift m* max min mod move negate or over postpone quit r> r@ recurse repeat rot rshift s" s>d sign sm/rem source space spaces state swap then type u. u< um* um/mod unloop until variable while word xor [ [’] [char] ] The core word environment? is not implemented. J1a SwapForth also implements the following standard words: .( .r .s /string 0<> 0> :noname <> ?do again ahead case cmove cmove> compile, d+ d. d.r d0= d2* dabs dnegate dump endcase endof erase false hex key? m+ marker ms nip of pad parse refill restore-input save-input sliteral throw true tuck u.r u> unused within words [compile] \ Double numbers are supported using the standard . suffix. The Forth 200x number prefixes are supported: $ for hex, # for decimal, % for binary, and ’c’ for character literals. parse-name is also implemented. 11

12

CHAPTER 2. AVAILABLE WORDS

2.2

Additional Words

The following words are not standard. Some are traditional Forth words, others are specific to the J1a SwapForth implementation. .x ( n -- ) display n as a 4-digit hex number

-rot ( x1 x2 x3 -- x3 x1 x2 ) rotate the top three stack entries

bounds ( start cnt -- start+cnt start ) prepare to loop on a range

forth ( -- a ) variable: most recent dictionary entry

io! ( x a -- ) store x to IO port a

io@ ( a -- x ) fetch from IO port a

leds

2.2. ADDITIONAL WORDS ( x -- ) write x to the onboard LEDs

new ( -- ) restore code and data pointers to the power-up state

s, ( a u -- ) add the u-character string a to the data space

tth ( -- a ) variable: tethered mode

13

14

CHAPTER 2. AVAILABLE WORDS

Chapter 3

Using SwapForth 3.1

Raw UART access

At boot, SwapForth listens for a command on the UART. Connection parameters are 460800 8N1, and any terminal program should be able to connect. Note that the hardware board uses DTR as a reset signal, so you should make sure that it is set OFF by the terminal program: $ miniterm.py --dtr=0 /dev/ttyUSB5 460800 --- Miniterm on /dev/ttyUSB5: 460800,8,N,1 ----- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ----- forcing DTR inactive ok ok ok

3.2

The SwapForth shell

The SwapForth shell is a Python program that runs on the host PC. It has a number of advantages over raw UART access: • command-line editing • command history • word completion on TAB 15

16

CHAPTER 3. USING SWAPFORTH • local file include • ˆC for interrupt

3.2.1

Invocation

The shell is a Python program. To run it, go to the appropriate directory and type:

python shell.py -h /dev/ttyUSB0

3.2.2

Command reference

#bye - quit SwapForth shell #flash - copy the target state to a local file #include - send local source file #noverbose - turn off include echo #time - measure execution time

3.3

Tethered Mode

J1b SwapForth supports tethered mode, which makes the UART protocol easier to use for host programs. The SwapForth shell uses tethered mode. To enter tethered mode, write one to the variable tth :

1 tth !

In tethered mode, accept transmits byte value 30 (hex 1e, ASCII code RS). This allows the listening program to know that the target machine is ready to accept a line of input. In addition, accept does not echo characters as they are typed.

Chapter 4

Memory 4.1

Memory map

The J1a SwapForth implementation uses 8Kbytes of RAM for code and data. The standard Forth words access this RAM. Cells are 16-bits, and must be aligned to a 16-bit boundary.

17

18

CHAPTER 4. MEMORY

4.2 15

Dictionary Layout 14

13

12

11

10

9

8

7

6

5

4

3

next pointer name1

2

1

0

imm

count ... namen−1

namen start of word’s code ...

The SwapForth dictionary is a linked list; the variable forth holds the start of this list. Each dictionary entry has the following fields: • next pointer - address of the next dictionary entry, or zero for the last dictionary entry • imm - immediate bit, set if the word is immediate • count - length of the name, in characters, 1-31 • name1 - namen - characters in name. If the length of the name is even, then a padding byte is appended

Chapter 5

iCEstick Hardware interface

The J1a for iCEstick includes connections to the iCEstick peripherals: • SPI flash • LEDs • IrDA tranceiver • Digilent PmodTM connector • UART 19

20

CHAPTER 5. ICESTICK HARDWARE INTERFACE

Access to peripherals is via the io@ and io! words. Peripherals are portmapped into a 16-bit IO address space. Most ports are either read-only or write-only. For read-only ports, writing to the port has no effect. For writeonly ports, reading from the port gives zero. As an example of direct port access, this word blinks the on-board LEDs when a signal on IrDA is detected.

: x begin $2000 io@ 8 and 0= $0004 io! again ;

\ read from input port \ true if bit 3 (IrDA RXD) is 0 \ write to LEDS

5.1. PORT MAP

5.1

21

Port Map

5.1.1

$0001: Digilent PmodTM data

The read-write port at address $0001 is for direct access to the Digilent PmodTM connector. The port pins are assigned: connection bit 0 bit 1 bit 2 bit 3 ground 3.3v

Left row pins 1 2 3 4 5 6

right row pins 7 8 9 10 11 12

connection bit 4 bit 5 bit 6 bit 7 ground 3.3v

Correspondingly the port bits are assigned to pins as follows: 15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

10

9

8

7

4

3

2

1

Note that pin direction is controlled by the corresponding bit the port at address $0002.

5.1.2

$0002: Digilent PmodTM direction

Each of the 8 bits controls the direction of the corresponding pin of the Digilent PmodTM connector. 0 sets the pin to input, 1 means sets the pin to output. The bit-to-pin mapping is the same as for port $0001.

5.1.3

$0004: LEDs

The five on-board LEDS are controlled by write-only port at address $0004. Setting a bit to 1 lights the corresponding LED. 15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

LED5 LED4 LED3 LED2 LED1

Built-in word leds writes to this port.

5.1.4

$0008: PIO output

Write-only port $0008 controls the flash and IrDA outputs.

22

CHAPTER 5. ICESTICK HARDWARE INTERFACE

15

14

5.1.5

13

12

11

10

9

8

7

6

5

4

3

IrDA SD

IrDA TXD

2

1

0

flash flash flash SCK MOSI CS

$0800: SB WARMBOOT control

Write-only port $0800 is an interface to the SB WARMBOOT module. When activated, the FPGA loads a new configuration from external flash. There can be up to four external configurations; configuration 0 is the base SwapForth, and configurations 1-3 are available for other uses. So to reload the base system: 4 $800 io! 15

14

5.1.6

13

12

11

10

9

8

7

6

5

4

3

2

1

0

BOOT

S1

S0

$1000: UART data

The read-write port at address $1000 is for UART transmission or reception. Writing to the port starts transmission of a byte, reading the port returns the incoming byte. Standard words key , key? and emit can be used to access this port. 15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

byte

5.1.7

$2000: IrDA, flash and UART inputs

Read-only port $2000 contains the input signals from the IrDA receiver, SPI flash, and UART. 15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

IrDA flash UART UART RXD MISO key? busy

Index d+, 11 d., 11 d.r, 11 d0=, 11 d2*, 11 dabs, 11 demos, 6 dictionary, 18 dnegate, 11 DTR, 15 dump, 11

-rot, 12 .(, 11 .r, 11 .s, 11 .x, 12 /string, 11 :noname, 11 <>, 11 ?do, 11 [compile], 11 #bye, 16 #flash, 16 #include, 16 #noverbose, 16 #time, 16 \, 11 0<>, 11 0>, 11

easter, 7 emit, 22 endcase, 11 endof, 11 erase, 11

again, 11 ahead, 11 ANS, 11

false, 11 #flash, 16 forth, 12 Forth 200x, 11 FPGA, 5

blink, 20 bounds, 12 #bye, 16

git, 5 hex, 11

case, 11 cmove, 11 cmove>, 11 compile,, 11 computus, 7

iceprog, 5 icestorm, 5 #include, 16 IrDA, 19 23

24 key, 22 key?, 11, 22 LEDs, 6, 19 leds, 12, 21 m+, 11 marker, 11 ms, 11 new, 13 nip, 11 #noverbose, 16 of, 11 pad, 11 parse, 11 parse-name, 11 Pmod, 19 RAM, 5, 17 reconfigure, 22 refill, 11 reset, 15 restore-input, 11 s,, 13 save-input, 11 SB WARMBOOT, 22 shell, 15 sliteral, 11 SPI flash, 19 tethered mode, 16 throw, 11 #time, 16 true, 11 tth, 13, 16 tuck, 11 u.r, 11

INDEX u>, 11 UART, 15, 19 unused, 11 within, 11 words, 11

J1a SwapForth Reference - GitHub

application. After installing the icestorm tools, you can .... The SwapForth shell is a Python program that runs on the host PC. It has a number of advantages over ...

973KB Sizes 3 Downloads 302 Views

Recommend Documents

Reference Manual - GitHub
for the simulation of the electron cloud buildup in particle accelerators. 1 Input files .... points of the longitudinal beam profile of sec- ondary beams.

Oolite Reference Sheet - GitHub
will shut down, requiring a cool-down period before it ... 10 Fuel Scoop ... V2 & Creative Commons License: BY - NC - SA 3.0 Oolite Website: http:/www. ..... A discontinued fighter design finding a new life in the professional racing circuit.

NetBSD reference card - GitHub
To monitor various informations of your NetBSD box you ... ifconfig_if assigns an IP or other on that network in- ... pkg_admin fetch-pkg-vulnerabilities download.

LIKWID | quick reference - GitHub
likwid-memsweeper Sweep memory of NUMA domains and evict cache lines from the last level cache likwid-setFrequencies Control the CPU frequency and ...

GABotS Reference Manual - GitHub
Apr 9, 2002 - MainWindow (Main widget for the GABots app). 23. Random ..... Main class for simple Genetic Algorithm used in the program. ز ذظ .

Go Quick Reference Go Quick Reference Go Quick Reference - GitHub
Structure - Package package mylib func CallMeFromOutside. Format verbs. Simpler than Cās. MOAR TABLE package anothermain import (. "fmt". ) func main() {.

Log4j Quick Reference Card - GitHub
log4j.appender.socket.port=10005 log4j.appender.socket.locationInfo=true log4j.logger.com.my.app=DEBUG. Level. Description. ALL. Output of all messages.

Reference Technologies Inc Termination of Consulting ... - GitHub
Jul 13, 2015 - offered to install the software for them, and made it available for download. ... might dissuade them from doing business with him and be injurious to RefTek. ... Lawsuits are not good for investors, customers or public relations. ...

reference nodes Entity Nodes Relationship Nodes - GitHub
S S EMS BIOLOG GRAPHICAL NO A ION EN I RELA IONSHIP REFERENCE CARD. LABEL entity. LABEL observable. LABEL perturbing agent pre:label.

Reference Sheet for CO140 Logic - GitHub
Free Variable Variable which is not bound (this includes variables which do not appear in A!). Sentence Formula with no free variables. ... domain of M, dom (M).

Reference Sheet for CO120.3 Programming III - GitHub
GBB. B d˜rief en enum type th—t represents fl—gs for renderingF. B. B i—™h ˜it represents — different fl—gF …se ˜itwise —nd. B to ™he™k if — fl—g is setF. BG enum render•fl—g {. GBB „he —m˜ient fl—g @˜it HAF BG

Reference Sheet for C112 Hardware - GitHub
Page 1 ... We might be able to make a considerable simplification by considering max- terms (0s) instead of minterms. • Don't cares (X) can ... Noise Margin. Fan out The number of inputs to which the output of a gate is connected. • Since 1. R.

Reference Sheet for CO120.2 Programming II - GitHub
Implementing Interfaces Use notation: @Override when a class method im- ... Style: usually a class extends an abstract class (with constructor and fields).

Xcode 7 Visual Reference Card - GitHub
Previous Tab. Run. ⌘ R Run. ⌘ U Test. ⌘ I. Profile. ⇧ ⌘ B Analyze. ⌘ . Stop. ⌘ < Edit Scheme. Debug. ⌘ Y Deactivate Breakpoints. ⌃ ⌘ Y Pause. F6 Step Over.

Ucto: Unicode Tokeniser Reference Guide - GitHub
Available from http://ilk.uvt.nl/downloads/pub/papers/ilk.1205.pdf”. For information about ... The e-mail address for problems with the installation, bug reports, comments and questions is .... .

Reference Nodes Entity Nodes Relationship Nodes - GitHub
SYSTEMS BIOLOGY GRAPHICAL NOTATION ENTITY RELATIONSHIP REFERENCE CARD. LABEL entity. LABEL phenotype. LABEL perturbing agent pre:label unit of information state variable necessary stimulation inhibition modulation. LABEL. NOT not operator outcome abs

Reference Sheet for CO130 Databases - GitHub
create table actor_cars ( .... Table. Relational Expression. Views. Tuple. Row. Attribute. Column. Domain .... end of free space, location and size of each record.

Reference Sheet for CO142.1 Discrete Mathematics I - GitHub
Products For arbitrary sets A and B: 1. Ordered ... Identity idA = {〈x, y〉 ∈ A2|x = y}. Composition .... Identity: The function idA : A → A is defined as idA (a) = a. 3.

Reference Sheet for CO141 Reasoning about Programs - GitHub
General Technique: For any P ⊆ Z and any m : Z: P (m) ∧ ∀k ≥ m. [P (k) → P (k + 1)] → ∀n ≥ m.P (n). 1.2 Strong Induction. P (0) ∧ ∀k : N. [∀j ∈ {0..k} .

BeagleBoard-xM LCD7 Rev B System Reference Manual - GitHub
Nov 1, 2012 - Figure 6. BeagleBoard-xM LCD7 Power Management IC .......................................... 21. Figure 7. ... A vs. B. In revision B, the backlight circuit being modified to provide better current control for the .... S2-S6. SWITCHES.

Reference Sheet for CO142.2 Discrete Mathematics II - GitHub
Connected: there is a path joining any two nodes. .... and merge two components .... Merge sort can be parallelised by executing recursive calls in parallel. 2.

GitHub
domain = meq.domain(10,20,0,10); cells = meq.cells(domain,num_freq=200, num_time=100); ...... This is now contaminator-free. – Observe the ghosts. Optional ...

GitHub
data can only be “corrected” for a single point on the sky. ... sufficient to predict it at the phase center (shifting ... errors (well this is actually good news, isn't it?)

Reference Policies
instruction/teaching model of the library and the Information Studies program, members ... Locating books and periodicals in the online catalog ... Paging system.