Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

Also see [[AdvancedOptions]]
<div class='header' role='banner' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected {color:[[ColorPalette::PrimaryDark]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:alpha(opacity=60);}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0; top:0;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0 3px 0 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0; padding-bottom:0;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox where print preview displays the noscript content */
<div class='toolbar' role='navigation' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
OberonStation boards purchased before November 2015 have an outdated Oberon image on the uSD cards.

Please get a fresh image file from [[|]].  The image file must be transferred to the uSD card in raw form, using dd in Linux or a specialized program on other operating systems.  A uSD card with a new image can always be purchased [[here|OberonStation]] for US$4.99 and a minimal shipping fee.

You can still compile Sierpinski.Mod by middle-clicking 'ORP.Compile @/s'.  You should still try to get a new image file as soon as you can.

The current bitstream is: [[RISC5OStation.bit|]]
Please email:


I am also active on the 6502 forums, especially 'Programmable Logic' at [[|]]
''Installing OberonStation''
<<slider chkSlider [[What do I need to use OberonStation]]   "What do I need to use OberonStation?" "Click here to read more">>
<<slider chkSlider [[Powering OberonStation]]   "Can I use a different power source?" "Click here to read more">>

''Other Questions''
<<slider chkSlider [[OberonStation Power Consumption]]   "What is the power consuption of OberonStation?" "Click here to read more">>
<<slider chkSlider [[OberonStation Network]]   "How do I use the network?" "Click here to read more">>
<<slider chkSlider [[OberonStation Display]]   "What is the screen resolution?" "Click here to read more">>

''Using OberonStation''
<<slider chkSlider [[How to Compile Code]]   "How do I compile code?" "Click here to read more">>
Plug in the monitor with a VGA cable.  
Plug in the keyboard into the black (or purple) connector.  
Plug in the mouse into the green connector.
Plug in the USB cable into the mini-USB type B socket; plug the other end into a computer or a power supply.

The board should power up and the Oberon UI should be visible on the screen.

~LED7 and ~LED2 should be lit.  Upon bootup, ~LED1 should flicker on for a fraction of a second.
After about a second, LED5 should light up and the others turn off (indicating that the first garbage collection has taken place).

You should be able to move the mouse around the screen.  Middle-click on Hilbert.Draw to see Oberon in action.

Now you can try compiling some code - see [[How to Compile Code]]
Let's compile Sierpinski.Mod, provided on the uSD Oberon image as a source file only. 

-Right-click on the * at '*.Mod' under System.Directory ^' to select the * (or select the entire '*.Mod' expression)
-Middle-click on 'System.Directory ^' to list *.Mod files
-In the directory window that opens below, Right-click on the 'S' of 'Sierpinski.Mod'
-Middle-click on 'Edit.Open ^' to open the source
-Right-click on the 'M' of MODULE
-Middle-click on 'ORP.Compile @' to compile the source

-System.Log (top right window) should confirm that the code compiled successfully.  If there are errors, you may have a bad uSD image -- see BadImage.
-Middle-click 'Sierpinski.Draw' and you should see the Sierpinski curve in the User Track.
ETH has a handy [[guide for using the keyboard and mouse|]].  Some info is not applicable to Oberon RISC.
Updated Dec 1 2015
[[Getting Started]]
[[FAQ|FAQ tiddler]]
[[Project Oberon]]
[[OberonStation Forums|]]

The standard Oberon implementation requires at least:
- A reset button
- 8 ~LEDs
- 4 jumpers
- 256K x 32-bit Static RAM
- PS/2 keyboard and mouse ports

There is no other FPGA board currently on the market that meets these requirements. 
OberonStation™ is a self-contained ~FPGA-based, 32-bit computer designed specifically to run [[Oberon RISC|Project Oberon]], as described by Profs. [[Niklaus Wirth|]] and [[Jürg Gutknecht|]] in [[Project Oberon (New Edition 2013)|]].

Attached to a PS/2 keyboard, a mouse and a monitor (1024x768 or better) via a VGA cable, OberonStation is a complete Oberon workstation that boots Oberon in about 1 second from the uSD card.  Complete source code for the Oberon GUI environment, Oberon RISC compiler and applications is available at [[|]].  OberonStation is also compatible with [[Astrobe|]].

<<slider chkSlider [[OberonStation Specifications]]   "OberonStation specifications" "Click here to read more">><<slider chkSlider [[Motivation]]  "OberonStation rationale" "Click here to read more">>
<<tiddler [[OberonStation Anatomy]]>>
OberonStation prototypes are now available as a kit or ready-to-run workstation with all extras included.  Major credit cards are accepted via ~PayPal (no account necessary).

| !Product | !Price (US$) | !Details | !Purchase |
|OberonStation kit + assembly service + mounted + all extras | Add to cart for current price |Assembled and tested.  All connectors populated.  Mounted on a custom acrylic mounting base with rubber feet.  uSD card with Oberon image.  USB cable. Network Adapter.  @@Run Oberon out-of-the-box@@. |<html><form target="paypal" action="" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="5LTYNN2B7YB84"><input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="" width="1" height="1"></form></html> |
|OberonStation Mounting Base | $20.00 |2-part laser-cut acrylic base, with 4 M2 bolts. 4 rubber feet. | <html><form target="paypal" action="" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="25Y7UPNWA5P86"><input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="" width="1" height="1"></form></html> |
|uSD card with Oberon image | $4.99 |1GB uSD card required to boot Oberon (you can make your own, use 512MB+) | <html><form target="paypal" action="" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="2WW7VA84Q92EA"><input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="" width="1" height="1"></form></html> |
|USB cable | $5.00 |~Mini-USB type B cable for powering OberonStation |<html><form target="paypal" action="" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="2JSKF9DZXX4CS"><input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="" width="1" height="1"></form></html> |
|Network card | $5.00 |nRF24L01+ SPI 2.4GHz wireless networking module |<html><form target="paypal" action="" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="JKKQ7VH4WTMSQ"><input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="" width="1" height="1"></form></html> |
<form target="paypal" action="" method="post" >
<input type="hidden" name="cmd" value="_s-xclick">
<input type="image" src="" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="" width="1" height="1">
OberonStation is generally shipped in the US via USPS Priority Mail for $6.00, and to most countries via USPS Priority Mail International (5-10 business days) for $26.00.  If you require special shipping arrangements, please contact [img[pix/email.png]]

@@Legal Information

OberonStation is a trademark of Supply Logistics Corporation.
Board artwork © 2015 Supply Logistics Corporation.  All rights reserved.

OberonStation kits contain experimental prototypes for educational purposes only, and should not be used in life-support or mission-critical applications.  The board may become hot during operation and should not be placed near inflammable materials.

Supply Logistics Corporation shall in no event be liable for any losses or damages of any kind arising from or related to the use of OberonStation boards or any other parts or devices provided in this transaction.  No warranties, express or implied are applicable to these boards.
Project Oberon, Revised Edition 2013

Book copyright © 2013 Niklaus Wirth and Juerg Gutknecht; software copyright © 2013 Niklaus Wirth (NW), Juerg Gutknecht (JG), Paul Reed (PR/PDR).

Permission to use, copy, modify, and/or distribute this software and its accompanying documentation (the "Software") for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.


OberonStation outputs VGA at 1024 x 768 pixels, at 70Hz refresh rate.   [[Project Oberon (New Edition 2013)|]] bitstream uses 1 bit per pixel for a monochrome display.  The display may be inverted by shorting Jumper 0 at any time during operation.

The OberonStation board supports up to 64 colors (6 bits, 2 bits per color) and other resolutions.
OberonStation networking is described in  [[Project Oberon (New Edition 2013)|]], and is designed for communication between OberonStations (or other Oberon devices).  OberonStation network port is designed to communicate with ~NRF24L01+ cards via an 8-pin SPI port.
~OberonStation comes in one of two forms:
1. Kit. 
- The board is assembled and tested
- uSD, VGA, keyboard and mouse connectors are soldered on
- The board is not mounted (attaching the board to a rigid base is recommended)
- IO connectors are not populated
- ''You will need a uSD card with Oberon image, and a USB cable to run Oberon''
2. Assembled and tested
- All connectors populated
- Mounted on a rigid Plexiglass base with rubber feet
- uSD card with Oberon included
- Network card included
- USB cable included
OberonStation draws approximately 300mA from the USB cable.  It consumes approximately 1.5W .
Preloaded with Oberon design, the board offers:
- Xilinx [[XC3S700AN FPGA|]] with built-in Flash configuration storage
- 1MB of fast Static RAM (10ns) configured as 256K x32
- Micro SD slot
- PS/2 keyboard jack
- PS/2 mouse jack
- 8 ~LEDs
- Reset button
- 4 jumper headers
- 8-pin network port
- 3.3V serial port
- 12-pin 8-bit IO port (~PMOD-like)
- ~USB-mini type B power connector
- VGA connector

Power consumption from USB is approximately 300mA, or 1.5W

In customized FPGA designs, the board also offers (depending on bitstream and board version)

- A high-density expansion connector with 58 I/O pins and power
- Additional 5-bit auxiliary port
- A full 8-bit ~PMOD-like port instead of the network port
- 64-color VGA output
- SRAM configurable as 1MB x8, 512K x16 or 256K x32

PMOD is a registered trademark of Digilent Inc.
Instead of USB, you can connect a regulated 5V supply to pins labeled GND and VUSB (near the USB connector).  If you do so, be aware of the following:
- Do not connect the USB port at the same time
- Using power supplies with higher voltage than 5V will increase the temperature of the voltage regulators on the board.  Take precautions to avoid a fire or a meltdown.
- The board requires at least 300mA of power at 5V.
- USB power supplies are cheap and plentiful and provide regulated 5V.  Do you really need to do this?

In the late 1980's  [[ Niklaus Wirth |]] and [[Jürg Gutknecht|]] designed a language and an operating system for the [[NS32032|]]-based [[Ceres|]] workstation, described in detail in a 1992 book [[Project Oberon|]].  The project's unique value is that the language and the operating system is designed and described to make it possible for a determined individual to understand every aspect of the entire system.

[[NS32032|]] chip went out of production, and although the project was ported to a variety of platforms the reference 'Project Oberon' was no longer available on its native platform.

In 2013 Niklaus Wirth revived the project by retargeting to a custom ~FPGA-based CPU, streamlining the Oberon language and OS, and publishing an updated [['Project Oberon (New Edition 2013)' |]] book online.  All the software, as well as the complete Verilog description of the hardware built by Niklaus Wirth and Paul Reed is published alongside the book, to make sure that Oberon would not be dependent on a single hardware manufacturer.

The project targeted the [[Digilent Spartan 3 Starter Board|]], with a hand-made [[daughterboard|]] containing an SD connector, a PS/2 mouse connector and a network port.  In 2014 the board was discontinued, and Oberon was adapted to the [[Saanlima Electronics' Pipistrello|]] board, requiring a specialized daughterboard sold by the same company.  

In 2015, Paul Reed and Victor Yurkovsky collaborated on the design of OberonStation, the first device designed specifically to run Oberon since the original [[Ceres workstation|]].
-6502 SBC based on Arlet's 6502 core and 32K BRAM.  Implementation in progress.
-Oberon ~RISC5. Collaborators needed to implement Oberon.
             The Oberon computing platform
This board is in beta, and requires a reasonable understanding of the Xilinx FPGA tools and technologies.
Jul 25, 2015 
Several prototypes are available for testing and implementation.

Known problems:
-Headphone jack footprint mismatch
-A VGA monitor capable of displaying 1024 x 768 at 70Hz
-A VGA cable
-A computer with a USB port  or a USB power source
-A USB cable (included with OberonStation in some configurations)
-A PS/2 3-button mouse
-A PS/2 keyboard

The last two items may be found at resale stores, grandpa's basement, or new on amazon and ebay (search for 'PS/2 mouse' or 'PS/2 keyboard')