Compare commits
11 Commits
Author | SHA1 | Date |
---|---|---|
Jörg Deckert | 7b97da36e8 | |
Jörg Deckert | 614f239fc2 | |
Jörg Deckert | 6cfa45140b | |
Joerg Deckert | 6872d9d008 | |
Joerg Deckert | 7b7e5bde66 | |
Joerg Deckert | 86f42864ec | |
Joerg Deckert | 2bdb7084da | |
Jörg Deckert | f0f52300be | |
drohne235 | 945cf16706 | |
Joerg Deckert | 58f833001c | |
Joerg Deckert | 8374973638 |
346
README.md
346
README.md
|
@ -1,25 +1,36 @@
|
||||||
INHALT
|
HIVE TriOS
|
||||||
======
|
==========
|
||||||
|
|
||||||
1. Installation des Grundsystems
|
Beschreibung
|
||||||
2. Regime im Überblick
|
------------
|
||||||
3. Forth im Überblick
|
|
||||||
|
TriOS ist ein in SPIN geschriebenes Betriebssystem für den HIVE Computer.
|
||||||
|
Für weitere Informationen wird auf die Webseite des Projektes verwiesen:
|
||||||
|
http://hive-project.de
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Installations-Varianten
|
||||||
|
-----------------------
|
||||||
|
|
||||||
1. Installation des Grundsystems:
|
Zur Installation von TriOS auf dem Hive stehen 3 verschiedene Varianten zur
|
||||||
=================================
|
Verfügung, welche am Ende aber dasselbe Ergebnis erzielen:
|
||||||
|
|
||||||
TriOS kann in zwei Versionen installiert werden: Mit oder ohne Forth als
|
Binäres Archiv: HIVE-TriOS-Rxx-bin.zip
|
||||||
integrierte Programmiersprache. Als Standard wird das System ohne Forth
|
Source-Archiv: HIVE-TriOS-Rxx-src.zip
|
||||||
installiert. Die Installation ist so für den Einsteiger einfacher. Möchte
|
Git Repository: https://dev.bitquell.de/summary/HIVE/TriOS.git
|
||||||
man auch PropForth installieren, muß nur eine Konfiguration geändert werden
|
|
||||||
und ein Basiswortschatz im Forth selbst kompiliert werden.
|
Das binäre Archiv kann sofort installiert werden. Wer selbst an den Quellen
|
||||||
|
Änderungen vornehmen, sollte stattdessen das Source-Archiv nutzen oder gleich
|
||||||
|
das top-aktuelle Git Repository nutzen.
|
||||||
|
|
||||||
|
Bei Nutzung des Source-Archives oder des Git-Repository müssen die Quellen vor
|
||||||
|
der Installation noch compiliert werden.
|
||||||
|
|
||||||
WICHTIG: Das System kann nur mit Brat's Spin Tool - kurz BST - compiliert
|
WICHTIG: Das System kann nur mit Brat's Spin Tool - kurz BST - compiliert
|
||||||
werden. In den Einstellungen des Compilers (Tools/Compiler
|
werden. In den Einstellungen des Compilers
|
||||||
Preferences/Search Paths) muss das lib-Verzeichnis eingetragen werden.
|
(Tools/Compiler Preferences/Search Paths) muss das lib-Verzeichnis eingetragen
|
||||||
|
werden.
|
||||||
|
|
||||||
Downloadlink BST: http://www.fnarfbargle.com/bst.html
|
Downloadlink BST: http://www.fnarfbargle.com/bst.html
|
||||||
|
|
||||||
|
@ -29,308 +40,5 @@ Voraussetzung ist, daß sich die Commandline-Version des Compilers (bstc) im
|
||||||
Pfad befindet.
|
Pfad befindet.
|
||||||
Downloadlink BSTC: http://www.fnarfbargle.com/bst/bstc/Latest/
|
Downloadlink BSTC: http://www.fnarfbargle.com/bst/bstc/Latest/
|
||||||
|
|
||||||
|
Genaue Installation-Anleitungen und Einführungen befinden sich im Verzeichnis
|
||||||
Installation ohne Forth (Standard):
|
"doku".
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
1. Mikrocontroller flashen:
|
|
||||||
|
|
||||||
\flash\administra\admflash.spin --> Administra
|
|
||||||
\flash\bellatrix\belflash.spin --> Bellatrix
|
|
||||||
\flash\regnatix\regflash.spin --> Regnatix
|
|
||||||
|
|
||||||
|
|
||||||
Installation mit Forth:
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
1. Mikrocontroller flashen:
|
|
||||||
|
|
||||||
\flash\administra\admflash.spin --> Administra
|
|
||||||
\flash\bellatrix\belflash.spin --> Bellatrix
|
|
||||||
\flash\regnatix\regforth.spin --> Regnatix
|
|
||||||
|
|
||||||
2. Der Schalter bleibt ab jetzt auf Regnatix stehen. Ein Terminalprogramm (ich
|
|
||||||
verwende Tera Term) starten und 57600 Baud auf die Schnittstelle vom Hive
|
|
||||||
(DIP steht auf Regnatix!) einstellen. Nach einem Reset meldet sich das
|
|
||||||
Propforth im Terminalprogramm auf dem Hostcomputer. Datei "forth\basics.mod"
|
|
||||||
in einem Editor öffnen, alles markieren, kopieren und im Terminal einfügen.
|
|
||||||
Der Quelltext wird jetzt im Forth compiliert.
|
|
||||||
|
|
||||||
3. Im Terminalfenster, also im Forth, dass Kommendo "saveforth" eingeben. Damit
|
|
||||||
wird das gesamte Forthsystem mit der gerade neu compilierten Erweiterungen
|
|
||||||
wieder im EEPROM als Image gespeichert.
|
|
||||||
|
|
||||||
Nach einem Reset sollte sich das Forth jetzt komplett mit seinem Prompt sowohl
|
|
||||||
auf dem angeschlossenen VGA-Monitor, als auch im Terminal melden. Im Prinzip
|
|
||||||
benötigen wir nun das Terminalprogramm nicht mehr und können direkt am Hive
|
|
||||||
arbeiten. Später, wenn man in Forth programmiert, ist die vorhandene
|
|
||||||
Terminalschnittstelle aber manchmal sehr nützlich.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Erstellen der SDCard:
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Im Prinzip kann jede normale FAT16/32 Karte verwendet werden. Lange Dateinamen
|
|
||||||
werden nicht verwendet, Unterverzeichnisse sind kein Problem. Es ist sinnvoll,
|
|
||||||
alle Dateien aus dem Verzeichnis "bin\sd-card\" auf die SD-Karte zu kopieren.
|
|
||||||
|
|
||||||
Das Verzeichnis "system" hat eine besondere Bedeutung: Hier sollten sich die
|
|
||||||
Tools, Erweiterungen und Bibliotheken befinden. Im PropForth: Mit dem Kommando
|
|
||||||
"sys name.f" kann aus jedem anderen Verzeichnis ohne Wechsel eine Datei name.f
|
|
||||||
im Verzeichnis System geladen und compiliert werden.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Systemstart:
|
|
||||||
------------
|
|
||||||
|
|
||||||
Beim Systemstart wird immer das Forth aus dem EEPROM gestartet. So kann, wie
|
|
||||||
mit den klassischen Homecomputern, sofort unkompliziert programmiert werden.
|
|
||||||
Neben dem Forth gibt es im TriOS noch ein in Spin programmiertes Betriebssystem,
|
|
||||||
welches sich dem Benutzer durch den Kommandointerpreter Regime präsentiert. Aus
|
|
||||||
dem Forth kann diese mit dem Kommando "regime" gestartet werden. Im Gegenzug
|
|
||||||
kann im laufenden Regime mit dem Kommando "forth" wieder zur integrierten
|
|
||||||
Programmiersprache gewechselt werden.
|
|
||||||
|
|
||||||
Wurde TriOS ohne Forth installiert, wird der Loader aus dem EEPROM gestartet und
|
|
||||||
sofort die Kommandozeile "Regime" aus der Datei reg.sys gestartet.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
3. Regime im Überblick
|
|
||||||
======================
|
|
||||||
|
|
||||||
Da wir ja drei verschiedene Teilsystem in unserem Computer haben, muss Regime
|
|
||||||
wissen, für welchen Chip eine ausführbare Datei bestimmt ist. Den Typ
|
|
||||||
ausführbarer Dateien kann Regime automatisch anhand der Dateinamenserweiterung
|
|
||||||
unterscheiden:
|
|
||||||
|
|
||||||
*.bin Regnatix-Code
|
|
||||||
*.bel Bellatrix-Code
|
|
||||||
*.adm Administra-Code
|
|
||||||
|
|
||||||
Dabei genügt es, den Namen ohne Erweiterung einzugeben. Dennoch kann es
|
|
||||||
vorkommen, das man eine normale Spin-Datei mit einer beliebigen Erweiterung
|
|
||||||
gespeichert hat. Diese Datei kann man dann mit den Kommandos rload, aload oder
|
|
||||||
bload ganz gezielt in einen Chip laden.
|
|
||||||
|
|
||||||
<dateiname> - bin/adm/bel-datei wird gestartet
|
|
||||||
mount - SD-aufwerk mounten
|
|
||||||
unmount - SD-Laufwerk freigeben
|
|
||||||
dir wh - Verzeichnis anzeigen
|
|
||||||
type <sd:fn> - Anzeige einer Textdatei
|
|
||||||
aload <sd:fn> - Administra-Code laden
|
|
||||||
bload <sd:fn> - Bellatrix-Code laden
|
|
||||||
rload <sd:fn> - Regnatix-Code laden
|
|
||||||
del <sd:fn> - Datei löschen
|
|
||||||
cls - Bildschirm löschen
|
|
||||||
free - Anzeige des freien Speichers auf SD-Card
|
|
||||||
attrib <sd:fn> ashr - Dateiattribute ändern
|
|
||||||
cd <sd:dir> - Verzeichnis wechseln
|
|
||||||
mkdir <sd:dir> - Verzeichnis erstellen
|
|
||||||
rename <sd:fn1> <sd:fn2> - datei/verzeichnis umbenennen
|
|
||||||
format <volname> - SD-Laufwerk formatieren
|
|
||||||
reboot - Hive neu starten
|
|
||||||
sysinfo - Systeminformationen
|
|
||||||
ipconfig - Netzwerk-Konfiguration
|
|
||||||
color <0..7> - Farbe wählen
|
|
||||||
cogs - Belegung der COG's anzeigen
|
|
||||||
dmlist - Anzeige der Verzeichnis-Marker
|
|
||||||
dm <r/s/u/a/b/c> - Marker-Verzeichnis wechseln
|
|
||||||
dmset <r/s/u/a/b/c> - Marker setzen
|
|
||||||
dmclr <r/s/u/a/b/c> - Marker löschen
|
|
||||||
forth - Forth starten
|
|
||||||
|
|
||||||
Marker:
|
|
||||||
r - Marker für Root-Verzeichnis
|
|
||||||
s - Marker für System-Verzeichnis
|
|
||||||
u - Marker für User-Verzeichnis
|
|
||||||
a/b/c - Benutzerdefinierte Verzeichnismarker
|
|
||||||
|
|
||||||
Die r, s, u-Marker werden vom System automatisch gesetzt und intern verwendet.
|
|
||||||
|
|
||||||
RAMDISK:
|
|
||||||
|
|
||||||
xload <sd:fn> - Datei von SD-Laufwerk in RAM laden
|
|
||||||
xsave <x:fn> - Datei aus RAM auf SD-Laufwerk speichern
|
|
||||||
xdir - Verzeichnis im RAM anzeigen
|
|
||||||
xrename <x:fn1> <x:fn2> - Datei im RAM umbenennen
|
|
||||||
xdel <x:fn> - Datei im RAM löschen
|
|
||||||
xtype <x:fn> - Textdatei im RAM anzeigen
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EXTERNE KOMMANDOS:
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Die meisten Kommandozeilentools zeigen mit dem Parameter /? eine Liste der
|
|
||||||
Optionen an.
|
|
||||||
|
|
||||||
sysconf - Systemeinstellungen
|
|
||||||
hplay - HSS-Player
|
|
||||||
wplay - WAV-Player
|
|
||||||
splay - SID-Player
|
|
||||||
yplay - Yamaha-Soundchip-Player
|
|
||||||
sfxtool - HSS-Soundeffekte erstellen
|
|
||||||
|
|
||||||
ftp - FTP-Client
|
|
||||||
irc - IRC Client
|
|
||||||
|
|
||||||
vga.bin - VGA 1024 x 768 Pixel, 64 x 24 Zeichen
|
|
||||||
htext.bin - VGA 1024 x 768 Pixel, 128 x 48 Zeichen
|
|
||||||
tv.bin - TV-Textmodus 40 x 13 Zeichen
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2. Forth im Überblick:
|
|
||||||
======================
|
|
||||||
|
|
||||||
Einige nützliche Kommandos befinden sich in dem Modul tools.mod. In den meisten
|
|
||||||
Fällen ist es sinnvoll dieses Modul mit der Befehlssequenz
|
|
||||||
"sys tools.mod saveforth" fest im Forth einzubinden.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Wichtige Tastencodes:
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
[ESC]-1 Screen 1, COG 1
|
|
||||||
[ESC]-2 Screen 2, COG 2
|
|
||||||
[ESC]-3 Screen 3, COG 3
|
|
||||||
[ESC]-b Break, Reset der aktuellen COG
|
|
||||||
[ESC]-r Reset, Neustart Regnatix
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Wichtige Kommandos:
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
load <name> - Datei laden und comilieren, Ausgabe Screen 3
|
|
||||||
dload <name> - wie load, aber Ausgabe aktueller Screen
|
|
||||||
sys <name> - Datei aus sys-Verzeichnis laden und compilieren
|
|
||||||
ls - Dateiliste
|
|
||||||
lsl - Dateiliste- Long-Format
|
|
||||||
cd <name> - in Verzeichniss wechseln
|
|
||||||
mount - SD-Card einbinden
|
|
||||||
unmount - SD-Card freigeben
|
|
||||||
words - Anzeige Wöterbuch
|
|
||||||
mod? - (tools.mod) Anzeige compilierter Erweiterungen
|
|
||||||
lib? - (tools.mod) Anzeige compilierter Bibliotheken
|
|
||||||
cog? - (tools.mod) Anzeige COG-Liste
|
|
||||||
cat <name> - (tools.mod) Ausgabe einer Textdatei
|
|
||||||
less <name> - (tools.mod) Zeilenweise Textausgabe
|
|
||||||
dm? - (tools.mod) Anzeige der Systemverzeichnisse
|
|
||||||
regime - CLI starten
|
|
||||||
aload <name> - Adminsitra-Code laden
|
|
||||||
bload <name> - Bellatrix-Code laden
|
|
||||||
spin <name> - Spin-Programm starten
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Wichtige Dateien:
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Die Dateien *.mod und *.lib enthalten ganz normale Forth-Quelltexte. Damit hat
|
|
||||||
man schnell eine Übersicht über die grobe Funktion dieser Quellen: Lib's sind
|
|
||||||
halt reine Sammlungen von Worten zu einer bestimmten Funktionsgruppe und MOD's
|
|
||||||
sind mehr oder weniger fertige und abgeschlossene Programme. Ein Beispiel:
|
|
||||||
|
|
||||||
Die Datei hss.lib enthält Worte um die HSS-Funktionen von Administra
|
|
||||||
anzusprechen. Mit diesen Funktionen kann man nun ein Modul (Programm) wie einen
|
|
||||||
HSS-Soundplayer schreiben.
|
|
||||||
|
|
||||||
Im Gegensatz dazu die Datei splay.mod: Mit diesem Modul wird ein HSS-Soundplayer
|
|
||||||
ins System eingefügt, welcher Funktionen aus der hss.lib verwendet.
|
|
||||||
|
|
||||||
Die Datei benötigt man aber mehr oder weniger nur zur Entwicklung, ein fertiges
|
|
||||||
Modul wie splay.mod enthält dann schon die die entsprechenden HSS-Worte die
|
|
||||||
benötigt werden.
|
|
||||||
|
|
||||||
Die ifnot: ... Anweisung sorgt dabei dafür, dass keine Funktionen doppelt in das
|
|
||||||
Wörterbuch compiliert werden. Das ist quasi ein verteiltes und fein granuliertes
|
|
||||||
Konzept analog zu einer DLL. Die Forth-Version funktioniert dabei aber im
|
|
||||||
Gegensatz zu DLL's nicht auf Bibliotheks-, sondern auf Funktionsebene.
|
|
||||||
|
|
||||||
*.mod Module, Forth-Erweiterungen für das System
|
|
||||||
*.lib Bibliotheken, grundlegende Wortsammlungen
|
|
||||||
*.adm Administra-Code (z.Bsp. admsid.adm für SIDCog-Code)
|
|
||||||
*.bel Bellatrix-Code
|
|
||||||
*.bin Spin-Code, im Normalfall zur Ausführung in Regnatix
|
|
||||||
|
|
||||||
basics.f - (mod:basics) Hive-Core für PropForth
|
|
||||||
ari.lib - (lib:ari) Zusätzliche arithmetische Funktionen
|
|
||||||
cog.lib - (lib:cog) Zusätzliche COG-Funktionen
|
|
||||||
adm.lib - (lib:adm) Administra-Chipmanagment-Funktionen
|
|
||||||
hss.lib - (lib:hss) Bibliothek für Hydra-Sound-System
|
|
||||||
sfx.lib - (lib:sfx) Soundeffekt-Bibliothek
|
|
||||||
wav.lib - (lib:wav) Wave-Soundbibliothek
|
|
||||||
|
|
||||||
bel.lib - (lib:bel) Bellatrix-Chipmanagment-Funktionen
|
|
||||||
key.lib - (lib:key) Tastatur-Bibliothek
|
|
||||||
scr.lib - (lib:scr) Screen-Bibliothek
|
|
||||||
sd0.lib - (lib:sd0) SD-Card-Bibliothek
|
|
||||||
|
|
||||||
debug.f - Nützliche Worte zur Fehlersuche und Entwicklung
|
|
||||||
rom.f - EEPROM-Dateisystem
|
|
||||||
tools.f - Nützliche Tools (cat, less, dm?...)
|
|
||||||
hplay.f - HSS-Player
|
|
||||||
wplay.f - WAV-Player
|
|
||||||
splay.f - SID-Player
|
|
||||||
|
|
||||||
Administra-Codedateien im SYS-Verzeichnis:
|
|
||||||
|
|
||||||
admled.adm Testprogramm - HBeat-LED blinken lassen
|
|
||||||
admnet.adm Netzwerk-Version (wird von ftp und irc benötigt)
|
|
||||||
admsid.adm SidCog-Version (wird von splay benötigt)
|
|
||||||
admsys.adm Standardcode für ADM mit SD/HSS/WAV
|
|
||||||
admym.adm Yamaha-Soundchip-Version
|
|
||||||
aterm96.adm Mini-OS für Administra (Testzwecke)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reset-Fehlercodes:
|
|
||||||
------------------
|
|
||||||
|
|
||||||
0011FFFF - stack overflow
|
|
||||||
0012FFFF - return stack overflow
|
|
||||||
0021FFFF - stack underflow
|
|
||||||
0022FFFF - return stack underflow
|
|
||||||
8100FFFF - no free cogs
|
|
||||||
8200FFFF - no free main memory
|
|
||||||
8400FFFF - fl no free main memory
|
|
||||||
8500FFFF - no free cog memory
|
|
||||||
8800FFFF - eeprom write error
|
|
||||||
9000FFFF - eeprom read error
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.err-Fehlercodes:
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
0 no error
|
|
||||||
1 fsys unmounted
|
|
||||||
2 fsys corrupted
|
|
||||||
3 fsys unsupported
|
|
||||||
4 not found
|
|
||||||
5 file not found
|
|
||||||
6 dir not found
|
|
||||||
7 file read only
|
|
||||||
8 end of file
|
|
||||||
9 end of directory
|
|
||||||
10 end of root
|
|
||||||
11 dir is full
|
|
||||||
12 dir is not empty
|
|
||||||
13 checksum error
|
|
||||||
14 reboot error
|
|
||||||
15 bpb corrupt
|
|
||||||
16 fsi corrupt
|
|
||||||
17 dir already exist
|
|
||||||
18 file already exist
|
|
||||||
19 out of disk free space
|
|
||||||
20 disk io error
|
|
||||||
21 command not found
|
|
||||||
22 timeout
|
|
||||||
23 parameter error
|
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
Installation einfach (ohne FORTH)
|
||||||
|
=================================
|
||||||
|
|
||||||
|
Mikrocontroller flashen:
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
\flash\administra\admflash.spin --> Administra
|
||||||
|
\flash\bellatrix\belflash.spin --> Bellatrix
|
||||||
|
\flash\regnatix\regflash.spin --> Regnatix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Erstellen der SDCard:
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Im Prinzip kann jede normale FAT16/32 Karte verwendet werden. Lange Dateinamen
|
||||||
|
werden nicht verwendet, Unterverzeichnisse sind kein Problem. Es ist sinnvoll,
|
||||||
|
alle Dateien aus dem Verzeichnis "bin\sd-card\" auf die SD-Karte zu kopieren.
|
||||||
|
|
||||||
|
Das Verzeichnis "system" hat eine besondere Bedeutung: Hier sollten sich die
|
||||||
|
Tools, Erweiterungen und Bibliotheken befinden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Systemstart:
|
||||||
|
------------
|
||||||
|
|
||||||
|
Aus dem EEPROM wird der Loader gestartet und sofort die Kommandozeile "Regime"
|
||||||
|
aus der Datei reg.sys ausgeführt.
|
|
@ -0,0 +1,52 @@
|
||||||
|
Installation mit FORTH
|
||||||
|
======================
|
||||||
|
|
||||||
|
Grundinstallation:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
1. Mikrocontroller flashen:
|
||||||
|
|
||||||
|
\flash\administra\admflash.spin --> Administra
|
||||||
|
\flash\bellatrix\belflash.spin --> Bellatrix
|
||||||
|
\flash\regnatix\regforth.spin --> Regnatix
|
||||||
|
|
||||||
|
2. Der Schalter bleibt ab jetzt auf Regnatix stehen. Ein Terminalprogramm (ich
|
||||||
|
verwende Tera Term) starten und 57600 Baud auf die Schnittstelle vom Hive
|
||||||
|
(DIP steht auf Regnatix!) einstellen. Nach einem Reset meldet sich das
|
||||||
|
Propforth im Terminalprogramm auf dem Hostcomputer. Datei "forth\basics.mod"
|
||||||
|
in einem Editor öffnen, alles markieren, kopieren und im Terminal einfügen.
|
||||||
|
Der Quelltext wird jetzt im Forth compiliert. Sind alle Erweiterungen
|
||||||
|
compiliert, wird automatisch das Forth in den Flash geschrieben.
|
||||||
|
|
||||||
|
Nach einem automatischen Reset sollte sich das Forth jetzt komplett mit seinem
|
||||||
|
Prompt sowohl auf dem angeschlossenen VGA-Monitor, als auch im Terminal melden.
|
||||||
|
Im Prinzip benötigen wir nun das Terminalprogramm nicht mehr und können direkt
|
||||||
|
am Hive arbeiten. Später, wenn man in Forth programmiert, ist die vorhandene
|
||||||
|
Terminalschnittstelle aber manchmal sehr nützlich.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Erstellen der SDCard:
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Im Prinzip kann jede normale FAT16/32 Karte verwendet werden. Lange Dateinamen
|
||||||
|
werden nicht verwendet, Unterverzeichnisse sind kein Problem. Es ist sinnvoll,
|
||||||
|
alle Dateien aus dem Verzeichnis "bin\sd-card\" auf die SD-Karte zu kopieren.
|
||||||
|
|
||||||
|
Das Verzeichnis "system" hat eine besondere Bedeutung: Hier sollten sich die
|
||||||
|
Tools, Erweiterungen und Bibliotheken befinden. Im PropForth: Mit dem Kommando
|
||||||
|
"sys name.f" kann aus jedem anderen Verzeichnis ohne Wechsel eine Datei name.f
|
||||||
|
im Verzeichnis System geladen und compiliert werden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Systemstart:
|
||||||
|
------------
|
||||||
|
|
||||||
|
Beim Systemstart wird immer das Forth aus dem EEPROM gestartet. So kann, wie
|
||||||
|
mit den klassischen Homecomputern, sofort unkompliziert programmiert werden.
|
||||||
|
Neben dem Forth gibt es im TriOS noch ein in Spin programmiertes Betriebssystem,
|
||||||
|
welches sich dem Benutzer durch den Kommandointerpreter Regime präsentiert. Aus
|
||||||
|
dem Forth kann diese mit dem Kommando "regime" gestartet werden. Im Gegenzug
|
||||||
|
kann im laufenden Regime mit dem Kommando "forth" wieder zur integrierten
|
||||||
|
Programmiersprache gewechselt werden.
|
|
@ -0,0 +1,106 @@
|
||||||
|
3. Regime im Überblick
|
||||||
|
======================
|
||||||
|
|
||||||
|
Da wir ja drei verschiedene Teilsystem in unserem Computer haben, muss Regime
|
||||||
|
wissen, für welchen Chip eine ausführbare Datei bestimmt ist. Den Typ
|
||||||
|
ausführbarer Dateien kann Regime automatisch anhand der Dateinamenserweiterung
|
||||||
|
unterscheiden:
|
||||||
|
|
||||||
|
*.bin Regnatix-Code
|
||||||
|
*.bel Bellatrix-Code
|
||||||
|
*.adm Administra-Code
|
||||||
|
|
||||||
|
Dabei genügt es, den Namen ohne Erweiterung einzugeben. Dennoch kann es
|
||||||
|
vorkommen, das man eine normale Spin-Datei mit einer beliebigen Erweiterung
|
||||||
|
gespeichert hat. Diese Datei kann man dann mit den Kommandos rload, aload oder
|
||||||
|
bload ganz gezielt in einen Chip laden.
|
||||||
|
|
||||||
|
<dateiname> - bin/adm/bel-datei wird gestartet
|
||||||
|
mount - SD-aufwerk mounten
|
||||||
|
unmount - SD-Laufwerk freigeben
|
||||||
|
dir wh - Verzeichnis anzeigen
|
||||||
|
type <sd:fn> - Anzeige einer Textdatei
|
||||||
|
aload <sd:fn> - Administra-Code laden
|
||||||
|
bload <sd:fn> - Bellatrix-Code laden
|
||||||
|
rload <sd:fn> - Regnatix-Code laden
|
||||||
|
del <sd:fn> - Datei löschen
|
||||||
|
cls - Bildschirm löschen
|
||||||
|
free - Anzeige des freien Speichers auf SD-Card
|
||||||
|
attrib <sd:fn> ashr - Dateiattribute ändern
|
||||||
|
cd <sd:dir> - Verzeichnis wechseln
|
||||||
|
mkdir <sd:dir> - Verzeichnis erstellen
|
||||||
|
rename <sd:fn1> <sd:fn2> - datei/verzeichnis umbenennen
|
||||||
|
format <volname> - SD-Laufwerk formatieren
|
||||||
|
reboot - Hive neu starten
|
||||||
|
sysinfo - Systeminformationen
|
||||||
|
color <0..7> - Farbe wählen
|
||||||
|
cogs - Belegung der COG's anzeigen
|
||||||
|
dmlist - Anzeige der Verzeichnis-Marker
|
||||||
|
dm <r/s/u/a/b/c> - Marker-Verzeichnis wechseln
|
||||||
|
dmset <r/s/u/a/b/c> - Marker setzen
|
||||||
|
dmclr <r/s/u/a/b/c> - Marker löschen
|
||||||
|
forth - Forth starten
|
||||||
|
|
||||||
|
Marker:
|
||||||
|
r - Marker für Root-Verzeichnis
|
||||||
|
s - Marker für System-Verzeichnis
|
||||||
|
u - Marker für User-Verzeichnis
|
||||||
|
a/b/c - Benutzerdefinierte Verzeichnismarker
|
||||||
|
|
||||||
|
Die r, s, u-Marker werden vom System automatisch gesetzt und intern verwendet.
|
||||||
|
|
||||||
|
RAMDISK:
|
||||||
|
|
||||||
|
xload <sd:fn> - Datei von SD-Laufwerk in RAM laden
|
||||||
|
xsave <x:fn> - Datei aus RAM auf SD-Laufwerk speichern
|
||||||
|
xdir - Verzeichnis im RAM anzeigen
|
||||||
|
xrename <x:fn1> <x:fn2> - Datei im RAM umbenennen
|
||||||
|
xdel <x:fn> - Datei im RAM löschen
|
||||||
|
xtype <x:fn> - Textdatei im RAM anzeigen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXTERNE KOMMANDOS:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Die meisten Kommandozeilentools zeigen mit dem Parameter /? eine Liste der
|
||||||
|
Optionen an.
|
||||||
|
|
||||||
|
beltest - Testprogramm für Bellatrix-Funktionen
|
||||||
|
charmap - Ausgabe des aktuellen nutzbaren Zeichensatzes
|
||||||
|
eram - Debugtool für eRAM/Ramdisk
|
||||||
|
flash - Flash-Tool für EEProms > 32 KByte
|
||||||
|
fm - [F]ile [M]anager
|
||||||
|
fterm - minimalstes Terminal für PropForth-Experimente
|
||||||
|
ftp - FTP-Downloadprogramm
|
||||||
|
g0test - Testprogramm der Grafikmodus 0 Funktionen (TV)
|
||||||
|
hplay - HSS-Player
|
||||||
|
ipconfig - Setup für Netzwerkparameter (IP/GW usw.)
|
||||||
|
irc - IRC-Client
|
||||||
|
keycode - Tastaturcodes anzeigen
|
||||||
|
m - Startcode für mental unter TriOS (sofern installiert)
|
||||||
|
man - Anzeige von Manual-Pages
|
||||||
|
perplex - PlexBus-Tool
|
||||||
|
ramtest - eRAM Testprogramm
|
||||||
|
rom - startet ein Image aus dem EEPROM > 32 KByte
|
||||||
|
sfxtool - HSS-Soundeffekte erstellen
|
||||||
|
splay - SID-Player
|
||||||
|
sysconf - Systemeinstellungen
|
||||||
|
tapecut - Tool um eine Containerdatei (Tape) für mental zu erzeugen
|
||||||
|
time - Zeit/Datum anzeigen bzw. im RTC setzen
|
||||||
|
websrv - Webserver (Demo)
|
||||||
|
wplay - WAV-Player
|
||||||
|
yplay - Yamaha-Soundchip-Player
|
||||||
|
|
||||||
|
Bellatrix-Codes:
|
||||||
|
|
||||||
|
vga - VGA 1024 x 768 Pixel, 64 x 24 Zeichen
|
||||||
|
htext - VGA 1024 x 768 Pixel, 128 x 48 Zeichen
|
||||||
|
tv - TV-Textmodus 40 x 13 Zeichen
|
||||||
|
|
||||||
|
Administra-Codes:
|
||||||
|
|
||||||
|
admay - Yamaha-Soundchip-Emulation
|
||||||
|
admnet - LAN + HSS-Light-Sound
|
||||||
|
admsid - SID-Chip-Emulation
|
||||||
|
admsys - HSS/WAV-Sound (Defaultcode)
|
|
@ -0,0 +1,149 @@
|
||||||
|
Forth im Überblick:
|
||||||
|
===================
|
||||||
|
|
||||||
|
Einige nützliche Kommandos befinden sich in dem Modul tools.mod. In den meisten
|
||||||
|
Fällen ist es sinnvoll dieses Modul mit der Befehlssequenz
|
||||||
|
"sys tools.mod saveforth" fest im Forth einzubinden.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Wichtige Tastencodes:
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
[ESC]-1 Screen 1, COG 1
|
||||||
|
[ESC]-2 Screen 2, COG 2
|
||||||
|
[ESC]-3 Screen 3, COG 3
|
||||||
|
[ESC]-b Break, Reset der aktuellen COG
|
||||||
|
[ESC]-r Reset, Neustart Regnatix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Wichtige Kommandos:
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
load <name> - Datei laden und comilieren, Ausgabe Screen 3
|
||||||
|
dload <name> - wie load, aber Ausgabe aktueller Screen
|
||||||
|
sys <name> - Datei aus sys-Verzeichnis laden und compilieren
|
||||||
|
ls - Dateiliste
|
||||||
|
lsl - Dateiliste- Long-Format
|
||||||
|
cd <name> - in Verzeichniss wechseln
|
||||||
|
mount - SD-Card einbinden
|
||||||
|
unmount - SD-Card freigeben
|
||||||
|
words - Anzeige Wöterbuch
|
||||||
|
mod? - (tools.mod) Anzeige compilierter Erweiterungen
|
||||||
|
lib? - (tools.mod) Anzeige compilierter Bibliotheken
|
||||||
|
cog? - (tools.mod) Anzeige COG-Liste
|
||||||
|
cat <name> - (tools.mod) Ausgabe einer Textdatei
|
||||||
|
less <name> - (tools.mod) Zeilenweise Textausgabe
|
||||||
|
dm? - (tools.mod) Anzeige der Systemverzeichnisse
|
||||||
|
regime - CLI starten
|
||||||
|
aload <name> - Adminsitra-Code laden
|
||||||
|
bload <name> - Bellatrix-Code laden
|
||||||
|
spin <name> - Spin-Programm starten
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Wichtige Dateien:
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Die Dateien *.mod und *.lib enthalten ganz normale Forth-Quelltexte. Damit hat
|
||||||
|
man schnell eine Übersicht über die grobe Funktion dieser Quellen: Lib's sind
|
||||||
|
halt reine Sammlungen von Worten zu einer bestimmten Funktionsgruppe und MOD's
|
||||||
|
sind mehr oder weniger fertige und abgeschlossene Programme. Ein Beispiel:
|
||||||
|
|
||||||
|
Die Datei hss.lib enthält Worte um die HSS-Funktionen von Administra
|
||||||
|
anzusprechen. Mit diesen Funktionen kann man nun ein Modul (Programm) wie einen
|
||||||
|
HSS-Soundplayer schreiben.
|
||||||
|
|
||||||
|
Im Gegensatz dazu die Datei splay.mod: Mit diesem Modul wird ein HSS-Soundplayer
|
||||||
|
ins System eingefügt, welcher Funktionen aus der hss.lib verwendet.
|
||||||
|
|
||||||
|
Die Datei benötigt man aber mehr oder weniger nur zur Entwicklung, ein fertiges
|
||||||
|
Modul wie splay.mod enthält dann schon die die entsprechenden HSS-Worte die
|
||||||
|
benötigt werden.
|
||||||
|
|
||||||
|
Die ifnot: ... Anweisung sorgt dabei dafür, dass keine Funktionen doppelt in das
|
||||||
|
Wörterbuch compiliert werden. Das ist quasi ein verteiltes und fein granuliertes
|
||||||
|
Konzept analog zu einer DLL. Die Forth-Version funktioniert dabei aber im
|
||||||
|
Gegensatz zu DLL's nicht auf Bibliotheks-, sondern auf Funktionsebene.
|
||||||
|
|
||||||
|
*.mod Module, Forth-Erweiterungen für das System
|
||||||
|
*.lib Bibliotheken, grundlegende Wortsammlungen
|
||||||
|
*.adm Administra-Code (z.Bsp. admsid.adm für SIDCog-Code)
|
||||||
|
*.bel Bellatrix-Code
|
||||||
|
*.bin Spin-Code, im Normalfall zur Ausführung in Regnatix
|
||||||
|
|
||||||
|
basics.f - (mod:basics) Hive-Core für PropForth
|
||||||
|
ari.lib - (lib:ari) Zusätzliche arithmetische Funktionen
|
||||||
|
cog.lib - (lib:cog) Zusätzliche COG-Funktionen
|
||||||
|
adm.lib - (lib:adm) Administra-Chipmanagment-Funktionen
|
||||||
|
hss.lib - (lib:hss) Bibliothek für Hydra-Sound-System
|
||||||
|
sfx.lib - (lib:sfx) Soundeffekt-Bibliothek
|
||||||
|
wav.lib - (lib:wav) Wave-Soundbibliothek
|
||||||
|
|
||||||
|
bel.lib - (lib:bel) Bellatrix-Chipmanagment-Funktionen
|
||||||
|
key.lib - (lib:key) Tastatur-Bibliothek
|
||||||
|
scr.lib - (lib:scr) Screen-Bibliothek
|
||||||
|
sd0.lib - (lib:sd0) SD-Card-Bibliothek
|
||||||
|
|
||||||
|
debug.f - Nützliche Worte zur Fehlersuche und Entwicklung
|
||||||
|
rom.f - EEPROM-Dateisystem
|
||||||
|
tools.f - Nützliche Tools (cat, less, dm?...)
|
||||||
|
hplay.f - HSS-Player
|
||||||
|
wplay.f - WAV-Player
|
||||||
|
splay.f - SID-Player
|
||||||
|
|
||||||
|
Administra-Codedateien im SYS-Verzeichnis:
|
||||||
|
|
||||||
|
admled.adm Testprogramm - HBeat-LED blinken lassen
|
||||||
|
admnet.adm Netzwerk-Version (wird von ftp und irc benötigt)
|
||||||
|
admsid.adm SidCog-Version (wird von splay benötigt)
|
||||||
|
admsys.adm Standardcode für ADM mit SD/HSS/WAV
|
||||||
|
admym.adm Yamaha-Soundchip-Version
|
||||||
|
aterm96.adm Mini-OS für Administra (Testzwecke)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reset-Fehlercodes:
|
||||||
|
------------------
|
||||||
|
|
||||||
|
0011FFFF - stack overflow
|
||||||
|
0012FFFF - return stack overflow
|
||||||
|
0021FFFF - stack underflow
|
||||||
|
0022FFFF - return stack underflow
|
||||||
|
8100FFFF - no free cogs
|
||||||
|
8200FFFF - no free main memory
|
||||||
|
8400FFFF - fl no free main memory
|
||||||
|
8500FFFF - no free cog memory
|
||||||
|
8800FFFF - eeprom write error
|
||||||
|
9000FFFF - eeprom read error
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.err-Fehlercodes:
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
0 no error
|
||||||
|
1 fsys unmounted
|
||||||
|
2 fsys corrupted
|
||||||
|
3 fsys unsupported
|
||||||
|
4 not found
|
||||||
|
5 file not found
|
||||||
|
6 dir not found
|
||||||
|
7 file read only
|
||||||
|
8 end of file
|
||||||
|
9 end of directory
|
||||||
|
10 end of root
|
||||||
|
11 dir is full
|
||||||
|
12 dir is not empty
|
||||||
|
13 checksum error
|
||||||
|
14 reboot error
|
||||||
|
15 bpb corrupt
|
||||||
|
16 fsi corrupt
|
||||||
|
17 dir already exist
|
||||||
|
18 file already exist
|
||||||
|
19 out of disk free space
|
||||||
|
20 disk io error
|
||||||
|
21 command not found
|
||||||
|
22 timeout
|
||||||
|
23 parameter error
|
|
@ -10,6 +10,7 @@ Funktionen. Als erste Anwendungen sind enthalten:
|
||||||
- Ein FTP-Client, welcher Dateien von einem FTP-Server downloaden und in der
|
- Ein FTP-Client, welcher Dateien von einem FTP-Server downloaden und in der
|
||||||
RAM-Disk im eRAM oder auf SD-Card abspeichern kann.
|
RAM-Disk im eRAM oder auf SD-Card abspeichern kann.
|
||||||
- Ein vollständiger IRC-Client
|
- Ein vollständiger IRC-Client
|
||||||
|
- Die DEmo-Version eines Webservers
|
||||||
Zukünftige Erweiterungen, wie die Integration in Regime und direktes Starten
|
Zukünftige Erweiterungen, wie die Integration in Regime und direktes Starten
|
||||||
von Programmen aus dem Netzwerk sind geplant.
|
von Programmen aus dem Netzwerk sind geplant.
|
||||||
|
|
||||||
|
@ -125,7 +126,18 @@ abgespeichert. Von dort könnte sie direkt gestartet werden.
|
||||||
IRC-Client
|
IRC-Client
|
||||||
----------
|
----------
|
||||||
|
|
||||||
siehe IRC-CLIENT.md
|
siehe [6-IRC-CLIENT.md]
|
||||||
|
|
||||||
|
Webserver
|
||||||
|
---------
|
||||||
|
|
||||||
|
Der Webserver wird aus Regime ohne Parameter gestartet:
|
||||||
|
|
||||||
|
websrv
|
||||||
|
|
||||||
|
Damit ist der Hive mittels Browser unter seiter mittels ipconfig eingestellten
|
||||||
|
Adresse erreichbar. Zur Demonstration wird die Hive-Id und eine sich ständig
|
||||||
|
ändernde Zufallszahl angezeigt.
|
||||||
|
|
||||||
|
|
||||||
Schlußbemerkung
|
Schlußbemerkung
|
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
|
@ -1,20 +1,22 @@
|
||||||
r57 - xx-xx-xxxx-joergd
|
r57-nw1.5 - 23-07-2014-joergd
|
||||||
=======================
|
=============================
|
||||||
|
|
||||||
Allgemein:
|
Allgemein:
|
||||||
- alle Spin-Dateien verwenden einheitlich UTF8-Kodierung und ein Zeilenende
|
- alle Spin-Dateien verwenden einheitlich UTF8-Kodierung und ein Zeilenende
|
||||||
mit Linefeed (LF)
|
mit Linefeed (LF)
|
||||||
|
|
||||||
Administra:
|
Administra:
|
||||||
- Netzwerk-fähig
|
|
||||||
- nur eine Source-Datei für alle Binaries, Funktionsauswahl über Defines
|
- nur eine Source-Datei für alle Binaries, Funktionsauswahl über Defines
|
||||||
- Plexbus, DCF77 und Bluetooth aus Basic/Plexus hinzugefügt
|
- DCF77 und Bluetooth aus Basic/Plexus hinzugefügt
|
||||||
|
|
||||||
Netzwerk-Clients:
|
Netzwerk-Clients:
|
||||||
- ipconfig
|
- ipconfig
|
||||||
- FTP-Client
|
- FTP-Client
|
||||||
- IRC-Client
|
- IRC-Client
|
||||||
|
|
||||||
|
Netzwerk-Server:
|
||||||
|
- Webserver (Demo)
|
||||||
|
|
||||||
fm, man:
|
fm, man:
|
||||||
- Textdateien mit unterschiedlichem Zeilenende (CR, LF) werden unterstützt
|
- Textdateien mit unterschiedlichem Zeilenende (CR, LF) werden unterstützt
|
||||||
|
|
||||||
|
@ -26,22 +28,67 @@ Make-Scripts:
|
||||||
- Linux-Version (make.sh)
|
- Linux-Version (make.sh)
|
||||||
- Erstellung verschiedener Anministra-Binaries per Defines
|
- Erstellung verschiedener Anministra-Binaries per Defines
|
||||||
- Erstellung beider Regime-Flash-Versionen (mit und ohne Forth)
|
- Erstellung beider Regime-Flash-Versionen (mit und ohne Forth)
|
||||||
|
- Release-Script
|
||||||
|
|
||||||
|
|
||||||
|
r57 - 21-06-2014-dr235
|
||||||
|
======================
|
||||||
|
|
||||||
|
admflash:
|
||||||
|
- Plexbusroutinen eingefügt
|
||||||
|
- sd_del - Heartbeat-Sound angepasst
|
||||||
|
|
||||||
|
belflash:
|
||||||
|
- per Compilerflag wählbare Monitorsettings eingefügt (57/60hz)
|
||||||
|
|
||||||
|
basic.mod (propforth):
|
||||||
|
- Bei der Installation von TriOS mit Forth muss basic.mod nur noch eingefügt
|
||||||
|
werden, damit wird automatisch geflasht und neu gestartet
|
||||||
|
|
||||||
|
lib:
|
||||||
|
- adm-enc28j60 eingefügt, Treiber Netzwerkchip
|
||||||
|
- adm-socket eingefügt, Netzwerksocket
|
||||||
|
- adm-plx Code ausgebaut
|
||||||
|
- bel-vga Monitorsettings
|
||||||
|
- glob-con Plexbus/LAN-Konstanten eingefügt
|
||||||
|
- glob-led-engine - neue lib für hbeat-led-pwm
|
||||||
|
- gui-dlbox - Redraw beschleunigt
|
||||||
|
- gui-wbox - Warnbox ist jetzt auch mit tab & esc bedienbar
|
||||||
|
- m-glob-con - konstanten für sound und plexbus eingefügt
|
||||||
|
|
||||||
|
reg-ios:
|
||||||
|
- Testfunktion für RTC
|
||||||
|
- LAN-Funktionen eingefügt
|
||||||
|
- Plexbus Funktionen eingefügt
|
||||||
|
- printblk - Stringausgabe mit Längenangabe
|
||||||
|
|
||||||
|
system/administra:
|
||||||
|
- admnet eingefügt
|
||||||
|
|
||||||
|
system/regnatix:
|
||||||
|
- fm - Optimierungen und Detailverbesserungen
|
||||||
|
- perplex - Plexbus Tool zugefügt
|
||||||
|
- regime - sysinfo zeigt jetzt auch Devices am Plexbus an
|
||||||
|
- man - Systemklänge angepasst, damit nicht ständig der Heartbeat beim Lesen
|
||||||
|
läuft
|
||||||
|
- ramtest - Anpassungen Maske/Farben
|
||||||
|
|
||||||
|
Dokumentation:
|
||||||
|
- Neustrukturierung der Texte
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
r56 - 11-05-2013-dr235
|
r56 - 11-05-2013-dr235
|
||||||
======================
|
======================
|
||||||
|
|
||||||
und weiter gehts mit dem Frühjahresputz:
|
und weiter gehts mit dem Frühjahresputz:
|
||||||
|
|
||||||
- umstellung Administra-Codes (admflash, admay, admsid) auf externe
|
- umstellung Administra-Codes (admflash, admay, admsid) auf externe
|
||||||
Konstantendefinitionen
|
Konstantendefinitionen
|
||||||
|
|
||||||
belflash:
|
belflash:
|
||||||
|
|
||||||
- fehler im loader behoben
|
- fehler im loader behoben
|
||||||
|
|
||||||
lib:
|
lib:
|
||||||
|
|
||||||
- gui-objekte für textoberfläche eingefügt:
|
- gui-objekte für textoberfläche eingefügt:
|
||||||
|
|
||||||
gui-dlbox - Listenbox für Dateien
|
gui-dlbox - Listenbox für Dateien
|
||||||
|
@ -50,7 +97,6 @@ lib:
|
||||||
gui-wbox - Warnbox mit Auswahloptionen
|
gui-wbox - Warnbox mit Auswahloptionen
|
||||||
|
|
||||||
system/regnatix:
|
system/regnatix:
|
||||||
|
|
||||||
- Filemanager fm zugefügt
|
- Filemanager fm zugefügt
|
||||||
- Mental-Loader m zugefügt
|
- Mental-Loader m zugefügt
|
||||||
- Tool zum erstellen von tapes (mental-containerdateien) zugefügt
|
- Tool zum erstellen von tapes (mental-containerdateien) zugefügt
|
||||||
|
@ -58,7 +104,6 @@ system/regnatix:
|
||||||
- yplay: Konstanten ausgelagert
|
- yplay: Konstanten ausgelagert
|
||||||
|
|
||||||
system/sonstiges:
|
system/sonstiges:
|
||||||
|
|
||||||
- Manual zugefügt: error, fm
|
- Manual zugefügt: error, fm
|
||||||
|
|
||||||
|
|
|
@ -66,12 +66,13 @@ Funktion : Dieser Code wird von Administra nach einem Reset aus dem EEPr
|
||||||
- ein- und ausgehende Verbindungen öffnen
|
- ein- und ausgehende Verbindungen öffnen
|
||||||
- Daten übertragen
|
- Daten übertragen
|
||||||
|
|
||||||
Komponenten : HSS 1.2 Andrew Arsenault Lizenz unklar
|
Komponenten : HSS 1.2 Andrew Arsenault Lizenz unklar
|
||||||
SIDCog Ver. 080 Johannes Ahlebrand MIT Lizenz
|
SIDCog Ver. 080 Johannes Ahlebrand MIT Lizenz
|
||||||
DACEngine 01/11/2010 Kwabena W. Agyeman MIT Lizenz
|
DACEngine 01/11/2010 Kwabena W. Agyeman MIT Lizenz
|
||||||
FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
|
FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
|
||||||
RTCEngine 11/22/2009 Kwabena W. Agyeman MIT Lizenz
|
RTCEngine 11/22/2009 Kwabena W. Agyeman MIT Lizenz
|
||||||
PropTCP 12/08/2009 Harrison Pham Lizenz unklar
|
PropTCP 12/08/2009 Harrison Pham Lizenz unklar
|
||||||
|
Propeller Signal Generator v1.2 (C) 2012 Johannes Ahlebrand Parallax Object Exchange License
|
||||||
|
|
||||||
COG's : MANAGMENT 1 COG
|
COG's : MANAGMENT 1 COG
|
||||||
FAT/RTC 1 COG
|
FAT/RTC 1 COG
|
||||||
|
@ -90,7 +91,7 @@ Defines : __ADM_FAT enable FAT engine (sd card handling)
|
||||||
__ADM_SID enable SID player
|
__ADM_SID enable SID player
|
||||||
__ADM_LAN enable LAN functions
|
__ADM_LAN enable LAN functions
|
||||||
__ADM_RTC enable RTC functions (FAT engine inherits it also)
|
__ADM_RTC enable RTC functions (FAT engine inherits it also)
|
||||||
__ADM_PLX enable plexbus
|
__ADM_PLX enable Plexus functions
|
||||||
__ADM_DCF enable DCF77 receiver
|
__ADM_DCF enable DCF77 receiver
|
||||||
__ADM_BLT enable Bluetooth
|
__ADM_BLT enable Bluetooth
|
||||||
__ADM_COM enable serial port
|
__ADM_COM enable serial port
|
||||||
|
@ -151,6 +152,7 @@ Logbuch :
|
||||||
17-04-2013-dr235 - konstanten für administra-funktionen komplett ausgelagert
|
17-04-2013-dr235 - konstanten für administra-funktionen komplett ausgelagert
|
||||||
22-12-2013-joergd - LAN Funktionen
|
22-12-2013-joergd - LAN Funktionen
|
||||||
17-12-2014-joergd - verschiedene Administra-Code-Versionen vereinheitlicht
|
17-12-2014-joergd - verschiedene Administra-Code-Versionen vereinheitlicht
|
||||||
|
29-11-2014-joergd - Signalgenerator (von zille für Plexus)
|
||||||
|
|
||||||
Kommandoliste :
|
Kommandoliste :
|
||||||
|
|
||||||
|
@ -269,14 +271,14 @@ CHIP_SPEC = CHIP_SPEC_FAT|CHIP_SPEC_LDR|CHIP_SPEC_HSS|CHIP_SPEC_WAV|CHIP_SPEC_SI
|
||||||
' clk -------+|
|
' clk -------+|
|
||||||
' /wr ------+||
|
' /wr ------+||
|
||||||
' /hs -----+||| +------------------------- /cs
|
' /hs -----+||| +------------------------- /cs
|
||||||
' |||| |+------------------------ adm-p22
|
' |||| |+------------------------ adm-p22 (int2 - port 1/2)
|
||||||
' |||| ||+----------------------- adm-p21 (io)
|
' |||| ||+----------------------- adm-p21 (int1 - port 3)
|
||||||
' |||| |||+---------------------- adm-p20 (rx)
|
' |||| |||+---------------------- adm-p20 (scl)
|
||||||
' |||| ||||+--------------------- adm-p19 (tx)
|
' |||| ||||+--------------------- adm-p19 (sda)
|
||||||
' |||| ||||| +------+ d0..d7
|
' |||| ||||| +------+ d0..d7
|
||||||
' |||| ||||| | |
|
' |||| ||||| | |
|
||||||
DB_IN = %00001001_00100000_00000000_00000000 'dira-wert für datenbuseingabe
|
DB_IN = %00001001_00000000_00000000_00000000 'dira-wert für datenbuseingabe
|
||||||
DB_OUT = %00001001_00100000_00000000_11111111 'dira-wert für datenbusausgabe
|
DB_OUT = %00001001_00000000_00000000_11111111 'dira-wert für datenbusausgabe
|
||||||
|
|
||||||
M1 = %00000010_00000000_00000000_00000000 'busclk=1? & /prop1=0?
|
M1 = %00000010_00000000_00000000_00000000 'busclk=1? & /prop1=0?
|
||||||
M2 = %00000010_10000000_00000000_00000000 'maske: busclk & /cs (/prop1)
|
M2 = %00000010_10000000_00000000_00000000 'maske: busclk & /cs (/prop1)
|
||||||
|
@ -347,11 +349,12 @@ OBJ
|
||||||
com : "adm-com" 'serielle schnittstelle
|
com : "adm-com" 'serielle schnittstelle
|
||||||
#endif
|
#endif
|
||||||
#ifdef __ADM_LAN
|
#ifdef __ADM_LAN
|
||||||
sock : "driver_socket" 'LAN
|
sock : "adm-socket" 'LAN
|
||||||
num : "glob-numbers" 'Number Engine
|
num : "glob-numbers" 'Number Engine
|
||||||
#endif
|
#endif
|
||||||
#ifdef __ADM_PLX
|
#ifdef __ADM_PLX
|
||||||
plx : "adm-plx" 'PlexBux
|
plx : "adm-plx" 'PlexBux
|
||||||
|
signal : "adm-signalgenerator"
|
||||||
#endif
|
#endif
|
||||||
#ifdef __ADM_DCF
|
#ifdef __ADM_DCF
|
||||||
dcf : "adm-dcf" 'DCF-77
|
dcf : "adm-dcf" 'DCF-77
|
||||||
|
@ -398,232 +401,246 @@ PUB main | cmd,err 'chip: kommandointerpret
|
||||||
|
|
||||||
' ---------------------------------------------- SD-FUNKTIONEN
|
' ---------------------------------------------- SD-FUNKTIONEN
|
||||||
#ifdef __ADM_FAT
|
#ifdef __ADM_FAT
|
||||||
gc#a_sdMount: sd_mount("M") 'sd-card mounten '
|
gc#a_sdMount: sd_mount("M") 'sd-card mounten '
|
||||||
gc#a_sdOpenDir: sd_opendir 'direktory öffnen
|
gc#a_sdOpenDir: sd_opendir 'direktory öffnen
|
||||||
gc#a_sdNextFile: sd_nextfile 'verzeichniseintrag lesen
|
gc#a_sdNextFile: sd_nextfile 'verzeichniseintrag lesen
|
||||||
gc#a_sdOpen: sd_open 'datei öffnen
|
gc#a_sdOpen: sd_open 'datei öffnen
|
||||||
gc#a_sdClose: sd_close 'datei schließen
|
gc#a_sdClose: sd_close 'datei schließen
|
||||||
gc#a_sdGetC: sd_getc 'zeichen lesen
|
gc#a_sdGetC: sd_getc 'zeichen lesen
|
||||||
gc#a_sdPutC: sd_putc 'zeichen schreiben
|
gc#a_sdPutC: sd_putc 'zeichen schreiben
|
||||||
gc#a_sdGetBlk: sd_getblk 'block lesen
|
gc#a_sdGetBlk: sd_getblk 'block lesen
|
||||||
gc#a_sdPutBlk: sd_putblk 'block schreiben
|
gc#a_sdPutBlk: sd_putblk 'block schreiben
|
||||||
gc#a_sdSeek: sd_seek 'zeiger in datei positionieren
|
gc#a_sdSeek: sd_seek 'zeiger in datei positionieren
|
||||||
gc#a_sdFAttrib: sd_fattrib 'dateiattribute übergeben
|
gc#a_sdFAttrib: sd_fattrib 'dateiattribute übergeben
|
||||||
gc#a_sdVolname: sd_volname 'volumelabel abfragen
|
gc#a_sdVolname: sd_volname 'volumelabel abfragen
|
||||||
gc#a_sdCheckMounted: sd_checkmounted 'test ob volume gemounted ist
|
gc#a_sdCheckMounted: sd_checkmounted 'test ob volume gemounted ist
|
||||||
gc#a_sdCheckOpen: sd_checkopen 'test ob eine datei geöffnet ist
|
gc#a_sdCheckOpen: sd_checkopen 'test ob eine datei geöffnet ist
|
||||||
gc#a_sdCheckUsed: sd_checkused 'test wie viele sektoren benutzt sind
|
gc#a_sdCheckUsed: sd_checkused 'test wie viele sektoren benutzt sind
|
||||||
gc#a_sdCheckFree: sd_checkfree 'test wie viele sektoren frei sind
|
gc#a_sdCheckFree: sd_checkfree 'test wie viele sektoren frei sind
|
||||||
gc#a_sdNewFile: sd_newfile 'neue datei erzeugen
|
gc#a_sdNewFile: sd_newfile 'neue datei erzeugen
|
||||||
gc#a_sdNewDir: sd_newdir 'neues verzeichnis wird erzeugt
|
gc#a_sdNewDir: sd_newdir 'neues verzeichnis wird erzeugt
|
||||||
gc#a_sdDel: sd_del 'verzeichnis oder datei löschen
|
gc#a_sdDel: sd_del 'verzeichnis oder datei löschen
|
||||||
gc#a_sdRename: sd_rename 'verzeichnis oder datei umbenennen
|
gc#a_sdRename: sd_rename 'verzeichnis oder datei umbenennen
|
||||||
gc#a_sdChAttrib: sd_chattrib 'attribute ändern
|
gc#a_sdChAttrib: sd_chattrib 'attribute ändern
|
||||||
gc#a_sdChDir: sd_chdir 'verzeichnis wechseln
|
gc#a_sdChDir: sd_chdir 'verzeichnis wechseln
|
||||||
gc#a_sdFormat: sd_format 'medium formatieren
|
gc#a_sdFormat: sd_format 'medium formatieren
|
||||||
gc#a_sdUnmount: sd_unmount 'medium abmelden
|
gc#a_sdUnmount: sd_unmount 'medium abmelden
|
||||||
gc#a_sdDmAct: sd_dmact 'dir-marker aktivieren
|
gc#a_sdDmAct: sd_dmact 'dir-marker aktivieren
|
||||||
gc#a_sdDmSet: sd_dmset 'dir-marker setzen
|
gc#a_sdDmSet: sd_dmset 'dir-marker setzen
|
||||||
gc#a_sdDmGet: sd_dmget 'dir-marker status abfragen
|
gc#a_sdDmGet: sd_dmget 'dir-marker status abfragen
|
||||||
gc#a_sdDmClr: sd_dmclr 'dir-marker löschen
|
gc#a_sdDmClr: sd_dmclr 'dir-marker löschen
|
||||||
gc#a_sdDmPut: sd_dmput 'dir-marker status setzen
|
gc#a_sdDmPut: sd_dmput 'dir-marker status setzen
|
||||||
gc#a_sdEOF: sd_eof 'eof abfragen
|
gc#a_sdEOF: sd_eof 'eof abfragen
|
||||||
#ifdef __ADM_FAT_EXT
|
#ifdef __ADM_FAT_EXT
|
||||||
gc#a_sdPos: sd_pos 'Zeiger in Datei abfragen
|
gc#a_sdPos: sd_pos 'Zeiger in Datei abfragen
|
||||||
gc#a_sdCopy: sd_copy 'Datei kopieren
|
gc#a_sdCopy: sd_copy 'Datei kopieren
|
||||||
gc#a_sdDirSize: sd_dirsize 'Dateigrösse ->ist quatsch
|
gc#a_sdDirSize: sd_dirsize 'Dateigrösse ->ist quatsch
|
||||||
#endif '__ADM_FAT_EXT
|
#endif '__ADM_FAT_EXT
|
||||||
#endif '__ADM_FAT
|
#endif '__ADM_FAT
|
||||||
|
|
||||||
' ---------------------------------------------- Bluetooth-FUNKTIONEN
|
' ---------------------------------------------- Bluetooth-FUNKTIONEN
|
||||||
#ifdef __ADM_BLT
|
#ifdef __ADM_BLT
|
||||||
gc#a_bl_Command_On: blt_setCommandMode
|
gc#a_bl_Command_On: blt_setCommandMode
|
||||||
gc#a_bl_Command_Off: blt_setNormalMode
|
gc#a_bl_Command_Off: blt_setNormalMode
|
||||||
#endif '__ADM_BLT
|
#endif '__ADM_BLT
|
||||||
|
|
||||||
' ---------------------------------------------- COM-FUNKTIONEN
|
' ---------------------------------------------- COM-FUNKTIONEN
|
||||||
#ifdef __ADM_COM
|
#ifdef __ADM_COM
|
||||||
gc#a_comInit: com_init
|
gc#a_comInit: com_init
|
||||||
gc#a_comTx: com_tx
|
gc#a_comTx: com_tx
|
||||||
gc#a_comRx: com_rx
|
gc#a_comRx: com_rx
|
||||||
#endif '__ADM_COM
|
#endif '__ADM_COM
|
||||||
|
|
||||||
' ---------------------------------------------- RTC-FUNKTIONEN
|
' ---------------------------------------------- RTC-FUNKTIONEN
|
||||||
#ifdef __ADM_RTC
|
#ifdef __ADM_RTC
|
||||||
gc#a_rtcTest: rtc_test 'Test if RTC Chip is available
|
gc#a_rtcTest: rtc_test 'Test if RTC Chip is available
|
||||||
gc#a_rtcGetSeconds: rtc_getSeconds 'Returns the current second (0 - 59) from the real time clock.
|
gc#a_rtcGetSeconds: rtc_getSeconds 'Returns the current second (0 - 59) from the real time clock.
|
||||||
gc#a_rtcGetMinutes: rtc_getMinutes 'Returns the current minute (0 - 59) from the real time clock.
|
gc#a_rtcGetMinutes: rtc_getMinutes 'Returns the current minute (0 - 59) from the real time clock.
|
||||||
gc#a_rtcGetHours: rtc_getHours 'Returns the current hour (0 - 23) from the real time clock.
|
gc#a_rtcGetHours: rtc_getHours 'Returns the current hour (0 - 23) from the real time clock.
|
||||||
gc#a_rtcGetDay: rtc_getDay 'Returns the current day (1 - 7) from the real time clock.
|
gc#a_rtcGetDay: rtc_getDay 'Returns the current day (1 - 7) from the real time clock.
|
||||||
gc#a_rtcGetDate: rtc_getDate 'Returns the current date (1 - 31) from the real time clock.
|
gc#a_rtcGetDate: rtc_getDate 'Returns the current date (1 - 31) from the real time clock.
|
||||||
gc#a_rtcGetMonth: rtc_getMonth 'Returns the current month (1 - 12) from the real time clock.
|
gc#a_rtcGetMonth: rtc_getMonth 'Returns the current month (1 - 12) from the real time clock.
|
||||||
gc#a_rtcGetYear: rtc_getYear 'Returns the current year (2000 - 2099) from the real time clock.
|
gc#a_rtcGetYear: rtc_getYear 'Returns the current year (2000 - 2099) from the real time clock.
|
||||||
gc#a_rtcSetSeconds: rtc_setSeconds 'Sets the current real time clock seconds. Seconds - Number to set the seconds to between 0 - 59.
|
gc#a_rtcSetSeconds: rtc_setSeconds 'Sets the current real time clock seconds. Seconds - Number to set the seconds to between 0 - 59.
|
||||||
gc#a_rtcSetMinutes: rtc_setMinutes 'Sets the current real time clock minutes. Minutes - Number to set the minutes to between 0 - 59.
|
gc#a_rtcSetMinutes: rtc_setMinutes 'Sets the current real time clock minutes. Minutes - Number to set the minutes to between 0 - 59.
|
||||||
gc#a_rtcSetHours: rtc_setHours 'Sets the current real time clock hours. Hours - Number to set the hours to between 0 - 23.
|
gc#a_rtcSetHours: rtc_setHours 'Sets the current real time clock hours. Hours - Number to set the hours to between 0 - 23.
|
||||||
gc#a_rtcSetDay: rtc_setDay 'Sets the current real time clock day. Day - Number to set the day to between 1 - 7.
|
gc#a_rtcSetDay: rtc_setDay 'Sets the current real time clock day. Day - Number to set the day to between 1 - 7.
|
||||||
gc#a_rtcSetDate: rtc_setDate 'Sets the current real time clock date. Date - Number to set the date to between 1 - 31.
|
gc#a_rtcSetDate: rtc_setDate 'Sets the current real time clock date. Date - Number to set the date to between 1 - 31.
|
||||||
gc#a_rtcSetMonth: rtc_setMonth 'Sets the current real time clock month. Month - Number to set the month to between 1 - 12.
|
gc#a_rtcSetMonth: rtc_setMonth 'Sets the current real time clock month. Month - Number to set the month to between 1 - 12.
|
||||||
gc#a_rtcSetYear: rtc_setYear 'Sets the current real time clock year. Year - Number to set the year to between 2000 - 2099.
|
gc#a_rtcSetYear: rtc_setYear 'Sets the current real time clock year. Year - Number to set the year to between 2000 - 2099.
|
||||||
gc#a_rtcSetNVSRAM: rtc_setNVSRAM 'Sets the NVSRAM to the selected value (0 - 255) at the index (0 - 55).
|
gc#a_rtcSetNVSRAM: rtc_setNVSRAM 'Sets the NVSRAM to the selected value (0 - 255) at the index (0 - 55).
|
||||||
gc#a_rtcGetNVSRAM: rtc_getNVSRAM 'Gets the selected NVSRAM value at the index (0 - 55).
|
gc#a_rtcGetNVSRAM: rtc_getNVSRAM 'Gets the selected NVSRAM value at the index (0 - 55).
|
||||||
gc#a_rtcPauseForSec: rtc_pauseForSeconds 'Pauses execution for a number of seconds. Returns a puesdo random value derived from the current clock frequency and the time when called. Number - Number of seconds to pause for between 0 and 2,147,483,647.
|
gc#a_rtcPauseForSec: rtc_pauseForSeconds 'Pauses execution for a number of seconds. Returns a puesdo random value derived from the current clock frequency and the time when called. Number - Number of seconds to pause for between 0 and 2,147,483,647.
|
||||||
gc#a_rtcPauseForMSec: rtc_pauseForMilliseconds 'Pauses execution for a number of milliseconds. Returns a puesdo random value derived from the current clock frequency and the time when called. Number - Number of milliseconds to pause for between 0 and 2,147,483,647.
|
gc#a_rtcPauseForMSec: rtc_pauseForMilliseconds 'Pauses execution for a number of milliseconds. Returns a puesdo random value derived from the current clock frequency and the time when called. Number - Number of milliseconds to pause for between 0 and 2,147,483,647.
|
||||||
gc#a_rtcGetTime: rtc_getTime 'Returns the current hour, minute and second from the real time clock.
|
gc#a_rtcGetTime: rtc_getTime 'Returns the current hour, minute and second from the real time clock.
|
||||||
#endif '__ADM_RTC
|
#endif '__ADM_RTC
|
||||||
|
|
||||||
' ---------------------------------------------- DCF77-FUNKTIONEN
|
' ---------------------------------------------- DCF77-FUNKTIONEN
|
||||||
#ifdef __ADM_DCF
|
#ifdef __ADM_DCF
|
||||||
gc#a_DCF_InSync: dcf_getInSync 'Sync-Status senden
|
gc#a_DCF_InSync: dcf_getInSync 'Sync-Status senden
|
||||||
gc#a_DCF_Update_Clock: dcf_updateRTC 'RTC Synchronisieren
|
gc#a_DCF_Update_Clock: dcf_updateRTC 'RTC Synchronisieren
|
||||||
gc#a_DCF_GetBitError: dcf_getBitError
|
gc#a_DCF_GetBitError: dcf_getBitError
|
||||||
gc#a_DCF_GetDatacount: dcf_getDataCount
|
gc#a_DCF_GetDatacount: dcf_getDataCount
|
||||||
gc#a_DCF_GetBitNumber: dcf_getBitNumber
|
gc#a_DCF_GetBitNumber: dcf_getBitNumber
|
||||||
gc#a_DCF_GetBitLevel: dcf_getBitLevel
|
gc#a_DCF_GetBitLevel: dcf_getBitLevel
|
||||||
gc#a_DCF_GetTimeZone: dcf_getTimeZone
|
gc#a_DCF_GetTimeZone: dcf_getTimeZone
|
||||||
gc#a_DCF_GetActiveSet: dcf_getActiveSet
|
gc#a_DCF_GetActiveSet: dcf_getActiveSet
|
||||||
gc#a_DCF_start: dcf_start 'DCF-Empfang starten
|
gc#a_DCF_start: dcf_start 'DCF-Empfang starten
|
||||||
gc#a_DCF_stop: dcf_stop 'DCF-Empfang stoppen
|
gc#a_DCF_stop: dcf_stop 'DCF-Empfang stoppen
|
||||||
gc#a_DCF_dcfon: dcf_state 'Status des DCF-Empfängers
|
gc#a_DCF_dcfon: dcf_state 'Status des DCF-Empfängers
|
||||||
gc#a_DCF_GetSeconds: dcf_getSeconds
|
gc#a_DCF_GetSeconds: dcf_getSeconds
|
||||||
gc#a_DCF_GetMinutes: dcf_getMinutes
|
gc#a_DCF_GetMinutes: dcf_getMinutes
|
||||||
gc#a_DCF_GetHours: dcf_getHours
|
gc#a_DCF_GetHours: dcf_getHours
|
||||||
gc#a_DCF_GetWeekDay: dcf_getWeekDay
|
gc#a_DCF_GetWeekDay: dcf_getWeekDay
|
||||||
gc#a_DCF_GetDay: dcf_getDay
|
gc#a_DCF_GetDay: dcf_getDay
|
||||||
gc#a_DCF_GetMonth: dcf_getMonth
|
gc#a_DCF_GetMonth: dcf_getMonth
|
||||||
gc#a_DCF_GetYear: dcf_getYear
|
gc#a_DCF_GetYear: dcf_getYear
|
||||||
#endif '__ADM_DCF
|
#endif '__ADM_DCF
|
||||||
|
|
||||||
' ---------------------------------------------- LAN-FUNKTIONEN
|
' ---------------------------------------------- LAN-FUNKTIONEN
|
||||||
#ifdef __ADM_LAN
|
#ifdef __ADM_LAN
|
||||||
gc#a_lanStart: lan_start 'Start Network
|
gc#a_lanStart: lan_start 'Start Network
|
||||||
gc#a_lanStop:lan_stop 'Stop Network
|
gc#a_lanStop: lan_stop 'Stop Network
|
||||||
gc#a_lanConnect: lan_connect 'ausgehende TCP-Verbindung öffnen
|
gc#a_lanConnect: lan_connect 'ausgehende TCP-Verbindung öffnen
|
||||||
gc#a_lanListen: lan_listen 'auf eingehende TCP-Verbindung lauschen
|
gc#a_lanListen: lan_listen 'auf eingehende TCP-Verbindung lauschen
|
||||||
gc#a_lanWaitConnTimeout: lan_waitconntimeout 'bestimmte Zeit auf Verbindung warten
|
gc#a_lanWaitConnTimeout: lan_waitconntimeout 'bestimmte Zeit auf Verbindung warten
|
||||||
gc#a_lanClose: lan_close 'TCP-Verbindung schließen
|
gc#a_lanClose: lan_close 'TCP-Verbindung schließen
|
||||||
gc#a_lanRXTime: lan_rxtime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
|
gc#a_lanRXTime: lan_rxtime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
|
||||||
gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen
|
gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen
|
||||||
gc#a_lanTXData: lan_txdata 'Daten senden
|
gc#a_lanTXData: lan_txdata 'Daten senden
|
||||||
gc#a_lanRXByte: lan_rxbyte 'wenn vorhanden, Byte aus Empfangspuffer lesen
|
gc#a_lanRXByte: lan_rxbyte 'wenn vorhanden, Byte aus Empfangspuffer lesen
|
||||||
gc#a_lanIsConnected: lan_isconnected 'TRUE, wenn Socket verbunden, sonst FALSE
|
gc#a_lanIsConnected: lan_isconnected 'TRUE, wenn Socket verbunden, sonst FALSE
|
||||||
#endif '__ADM_LAN
|
#endif '__ADM_LAN
|
||||||
|
|
||||||
' ---------------------------------------------- CHIP-MANAGMENT
|
' ---------------------------------------------- CHIP-MANAGMENT
|
||||||
gc#a_mgrSetSound: mgr_setsound 'soundsubsysteme verwalten
|
gc#a_mgrSetSound: mgr_setsound 'soundsubsysteme verwalten
|
||||||
gc#a_mgrGetSpec: mgr_getspec 'spezifikation abfragen
|
gc#a_mgrGetSpec: mgr_getspec 'spezifikation abfragen
|
||||||
gc#a_mgrSetSysSound: mgr_setsyssound 'systemsound ein/ausschalten
|
gc#a_mgrSetSysSound: mgr_setsyssound 'systemsound ein/ausschalten
|
||||||
gc#a_mgrGetSoundSys: mgr_getsoundsys 'abfrage welches soundsystem aktiv ist
|
gc#a_mgrGetSoundSys: mgr_getsoundsys 'abfrage welches soundsystem aktiv ist
|
||||||
gc#a_mgrALoad: mgr_aload 'neuen code booten
|
gc#a_mgrALoad: mgr_aload 'neuen code booten
|
||||||
gc#a_mgrGetCogs: mgr_getcogs 'freie cogs abfragen
|
gc#a_mgrGetCogs: mgr_getcogs 'freie cogs abfragen
|
||||||
gc#a_mgrGetVer: mgr_getver 'codeversion abfragen
|
gc#a_mgrGetVer: mgr_getver 'codeversion abfragen
|
||||||
gc#a_mgrReboot: reboot 'neu starten
|
gc#a_mgrReboot: reboot 'neu starten
|
||||||
|
|
||||||
' ---------------------------------------------- HSS-FUNKTIONEN
|
' ---------------------------------------------- HSS-FUNKTIONEN
|
||||||
#ifdef __ADM_HSS
|
#ifdef __ADM_HSS
|
||||||
gc#a_hssLoad: hss_load 'hss-datei in puffer laden
|
gc#a_hssLoad: hss_load 'hss-datei in puffer laden
|
||||||
#ifdef __ADM_HSS_PLAY
|
#ifdef __ADM_HSS_PLAY
|
||||||
gc#a_hssPlay: hss.hmus_load(@bgmusic) 'play
|
gc#a_hssPlay: hss.hmus_load(@bgmusic) 'play
|
||||||
hss.hmus_play
|
hss.hmus_play
|
||||||
#endif '__ADM_HSS_PLAY
|
#endif '__ADM_HSS_PLAY
|
||||||
gc#a_hssStop: hss.hmus_stop 'stop
|
gc#a_hssStop: hss.hmus_stop 'stop
|
||||||
gc#a_hssPause: hss.hmus_pause 'pause
|
gc#a_hssPause: hss.hmus_pause 'pause
|
||||||
gc#a_hssPeek: hss_peek 'register lesen
|
gc#a_hssPeek: hss_peek 'register lesen
|
||||||
gc#a_hssIntReg: hss_intreg 'interfaceregister auslesen
|
gc#a_hssIntReg: hss_intreg 'interfaceregister auslesen
|
||||||
gc#a_hssVol: hss_vol 'lautstärke setzen
|
gc#a_hssVol: hss_vol 'lautstärke setzen
|
||||||
gc#a_sfxFire: sfx_fire 'sfx abspielen
|
gc#a_sfxFire: sfx_fire 'sfx abspielen
|
||||||
gc#a_sfxSetSlot: sfx_setslot 'sfx-slot setzen
|
gc#a_sfxSetSlot: sfx_setslot 'sfx-slot setzen
|
||||||
gc#a_sfxKeyOff: sfx_keyoff
|
gc#a_sfxKeyOff: sfx_keyoff
|
||||||
gc#a_sfxStop: sfx_stop
|
gc#a_sfxStop: sfx_stop
|
||||||
#endif '__ADM_HSS
|
#endif '__ADM_HSS
|
||||||
|
|
||||||
' ---------------------------------------------- PLX-Funktionen
|
' ---------------------------------------------- PLX-Funktionen
|
||||||
#ifdef __ADM_PLX
|
#ifdef __ADM_PLX
|
||||||
gc#a_plxRun: plx.run 'plx-bus freigeben
|
gc#a_plxRun: plx.run 'plx-bus freigeben
|
||||||
gc#a_plxHalt: plx.halt 'plx-bus anfordern
|
gc#a_plxHalt: plx.halt 'plx-bus anfordern
|
||||||
gc#a_plxIn: plx_in 'port einlesen
|
gc#a_plxIn: plx_in 'port einlesen
|
||||||
gc#a_plxOut: plx_out 'port ausgeben
|
gc#a_plxOut: plx_out 'port ausgeben
|
||||||
gc#a_plxCh: plx_ch 'ad-wandler auslesen
|
gc#a_plxCh: plx_ch 'ad-wandler auslesen
|
||||||
gc#a_plxGetReg: plx_getReg 'poller-register lesen
|
gc#a_plxGetReg: plx_getReg 'poller-register lesen
|
||||||
gc#a_plxSetReg: plx_setReg 'poller-register setzen
|
gc#a_plxSetReg: plx_setReg 'poller-register setzen
|
||||||
gc#a_plxStart: plx.start 'i2c-dialog starten
|
gc#a_plxStart: plx.start 'i2c-dialog starten
|
||||||
gc#a_plxStop: plx.stop 'i2c-dialog beenden
|
gc#a_plxStop: plx.stop 'i2c-dialog beenden
|
||||||
gc#a_plxWrite: plx_write 'i2c byte senden
|
gc#a_plxWrite: plx_write 'i2c byte senden
|
||||||
gc#a_plxRead: plx_read 'i2c byte empfangen
|
gc#a_plxRead: plx_read 'i2c byte empfangen
|
||||||
gc#a_plxPing: plx_ping 'abfrage ob device vorhanden ist
|
gc#a_plxPing: plx_ping 'abfrage ob device vorhanden ist
|
||||||
gc#a_plxSetAdr: plx_setAddr 'adressen adda/ports für poller setzen
|
gc#a_plxSetAdr: plx_setAddr 'adressen adda/ports für poller setzen
|
||||||
' ---------------------------------------------- GAMEDEVICES
|
' ---------------------------------------------- GAMEDEVICES
|
||||||
gc#a_Joy: joy_get 'Joystick abfragen (1 x 8bit Port)
|
gc#a_Joy: plx_get_joy 'Joystick abfragen (1 x 8bit Port)
|
||||||
|
gc#a_Paddle: plx_get_paddle 'Paddle abfragen (1 x 8bit Port 1 x Analog)
|
||||||
|
gc#a_Pad: plx_get_pad 'Pad abfragen (1 x 8bit Port 2 x Analog)
|
||||||
|
' ---------------------------------------------- Venatrix-Plexus
|
||||||
|
gc#a_VexPut: plx_put_vex 'Register im Venatrix-Plexus schreiben
|
||||||
|
gc#a_VexGet: plx_get_vex 'Register im Venatrix-Plexus lesen
|
||||||
|
' ---------------------------------------------- Funktionsgenerator
|
||||||
|
gc#a_StartFunctionGenerator: plx_startgenerator
|
||||||
|
gc#a_StopFunctionGenerator: plx_stopgenerator
|
||||||
|
gc#a_PulseWidth: signal.setPulseWidth(sub_getlong)
|
||||||
|
gc#a_Frequency_HZ: signal.setFrequency(sub_getlong)
|
||||||
|
gc#a_Frequency_Centihz: signal.setFrequencyCentiHertz(sub_getlong)
|
||||||
|
gc#a_SetWaveform: signal.setWaveform(bus_getchar)
|
||||||
|
gc#a_SetDampLevel: signal.setDampLevel(sub_getlong)
|
||||||
|
gc#a_SetParameter: signal.setParameters(bus_getchar, sub_getlong, sub_getlong, sub_getlong)
|
||||||
#endif '__ADM_PLX
|
#endif '__ADM_PLX
|
||||||
|
|
||||||
' ---------------------------------------------- WAV-FUNKTIONEN
|
' ---------------------------------------------- WAV-FUNKTIONEN
|
||||||
#ifdef __ADM_WAV
|
#ifdef __ADM_WAV
|
||||||
gc#a_sdwStart: sdw_start 'spielt wav-datei direkt von sd-card ab
|
gc#a_sdwStart: sdw_start 'spielt wav-datei direkt von sd-card ab
|
||||||
gc#a_sdwStop: sdw_stop 'stopt wav-cog
|
gc#a_sdwStop: sdw_stop 'stopt wav-cog
|
||||||
gc#a_sdwStatus: sdw_status 'fragt status des players ab
|
gc#a_sdwStatus: sdw_status 'fragt status des players ab
|
||||||
gc#a_sdwLeftVol: sdw_leftvol 'lautstärke links
|
gc#a_sdwLeftVol: sdw_leftvol 'lautstärke links
|
||||||
gc#a_sdwRightVol: sdw_rightvol 'lautstärke rechts
|
gc#a_sdwRightVol: sdw_rightvol 'lautstärke rechts
|
||||||
gc#a_sdwPause: sdw_pause 'player pause/weiter-modus
|
gc#a_sdwPause: sdw_pause 'player pause/weiter-modus
|
||||||
gc#a_sdwPosition: sdw_position
|
gc#a_sdwPosition: sdw_position
|
||||||
#endif '__ADM_WAV
|
#endif '__ADM_WAV
|
||||||
|
|
||||||
' ---------------------------------------------- SIDCog: DMP-Player-Funktionen (SIDCog2)
|
' ---------------------------------------------- SIDCog: DMP-Player-Funktionen (SIDCog2)
|
||||||
#ifdef __ADM_SID
|
#ifdef __ADM_SID
|
||||||
gc#a_s_mdmpplay: sid_mdmpplay 'dmp-file mono auf sid2 abspielen
|
gc#a_s_mdmpplay: sid_mdmpplay 'dmp-file mono auf sid2 abspielen
|
||||||
gc#a_s_sdmpplay: sid_sdmpplay 'dmp-file stereo auf beiden sids abspielen
|
gc#a_s_sdmpplay: sid_sdmpplay 'dmp-file stereo auf beiden sids abspielen
|
||||||
gc#a_s_dmpstop: sid_dmpstop 'dmp-player beenden
|
gc#a_s_dmpstop: sid_dmpstop 'dmp-player beenden
|
||||||
gc#a_s_dmppause: sid_dmppause 'dmp-player pausenmodus
|
gc#a_s_dmppause: sid_dmppause 'dmp-player pausenmodus
|
||||||
gc#a_s_dmpstatus: sid_dmpstatus 'dmp-player statusabfrage
|
gc#a_s_dmpstatus: sid_dmpstatus 'dmp-player statusabfrage
|
||||||
gc#a_s_dmppos: sid_dmppos 'player-position im dumpfile
|
gc#a_s_dmppos: sid_dmppos 'player-position im dumpfile
|
||||||
gc#a_s_mute: sid_mute 'alle register löschen
|
gc#a_s_mute: sid_mute 'alle register löschen
|
||||||
|
|
||||||
' ---------------------------------------------- SIDCog1-Funktionen
|
' ---------------------------------------------- SIDCog1-Funktionen
|
||||||
gc#a_s1_setRegister: sid1.setRegister(bus_getchar,bus_getchar)
|
gc#a_s1_setRegister: sid1.setRegister(bus_getchar,bus_getchar)
|
||||||
gc#a_s1_updateRegisters: sid1.updateRegisters(sub_getdat(25,@s1buffer))
|
gc#a_s1_updateRegisters: sid1.updateRegisters(sub_getdat(25,@s1buffer))
|
||||||
gc#a_s1_setVolume: sid1.setVolume(bus_getchar)
|
gc#a_s1_setVolume: sid1.setVolume(bus_getchar)
|
||||||
gc#a_s1_play: sid1.play(bus_getchar,sub_getlong,bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_play: sid1.play(bus_getchar,sub_getlong,bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s1_noteOn: sid1.noteOn(bus_getchar, sub_getlong)
|
gc#a_s1_noteOn: sid1.noteOn(bus_getchar, sub_getlong)
|
||||||
gc#a_s1_noteOff: sid1.noteOff(bus_getchar)
|
gc#a_s1_noteOff: sid1.noteOff(bus_getchar)
|
||||||
gc#a_s1_setFreq: sid1.setFreq(bus_getchar,sub_getlong)
|
gc#a_s1_setFreq: sid1.setFreq(bus_getchar,sub_getlong)
|
||||||
gc#a_s1_setWaveform: sid1.setWaveform(bus_getchar,bus_getchar)
|
gc#a_s1_setWaveform: sid1.setWaveform(bus_getchar,bus_getchar)
|
||||||
gc#a_s1_setPWM: sid1.setPWM(bus_getchar,sub_getlong)
|
gc#a_s1_setPWM: sid1.setPWM(bus_getchar,sub_getlong)
|
||||||
gc#a_s1_setADSR: sid1.setADSR(bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_setADSR: sid1.setADSR(bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s1_setResonance: sid1.setResonance(bus_getchar)
|
gc#a_s1_setResonance: sid1.setResonance(bus_getchar)
|
||||||
gc#a_s1_setCutoff: sid1.setCutoff(sub_getlong)
|
gc#a_s1_setCutoff: sid1.setCutoff(sub_getlong)
|
||||||
gc#a_s1_setFilterMask: sid1.setFilterMask(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_setFilterMask: sid1.setFilterMask(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s1_setFilterType: sid1.setFilterType(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_setFilterType: sid1.setFilterType(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s1_enableRingmod: sid1.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_enableRingmod: sid1.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s1_enableSynchronization: sid1.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s1_enableSynchronization: sid1.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
||||||
|
|
||||||
' ---------------------------------------------- SIDCog2-Funktionen
|
' ---------------------------------------------- SIDCog2-Funktionen
|
||||||
gc#a_s2_setRegister: sid2.setRegister(bus_getchar,bus_getchar)
|
gc#a_s2_setRegister: sid2.setRegister(bus_getchar,bus_getchar)
|
||||||
gc#a_s2_updateRegisters: sid2.updateRegisters(sub_getdat(25,@s1buffer))
|
gc#a_s2_updateRegisters: sid2.updateRegisters(sub_getdat(25,@s1buffer))
|
||||||
gc#a_s2_setVolume: sid2.setVolume(bus_getchar)
|
gc#a_s2_setVolume: sid2.setVolume(bus_getchar)
|
||||||
gc#a_s2_play: sid2.play(bus_getchar,sub_getlong,bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_play: sid2.play(bus_getchar,sub_getlong,bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s2_noteOn: sid2.noteOn(bus_getchar, sub_getlong)
|
gc#a_s2_noteOn: sid2.noteOn(bus_getchar, sub_getlong)
|
||||||
gc#a_s2_noteOff: sid2.noteOff(bus_getchar)
|
gc#a_s2_noteOff: sid2.noteOff(bus_getchar)
|
||||||
gc#a_s2_setFreq: sid2.setFreq(bus_getchar,sub_getlong)
|
gc#a_s2_setFreq: sid2.setFreq(bus_getchar,sub_getlong)
|
||||||
gc#a_s2_setWaveform: sid2.setWaveform(bus_getchar,bus_getchar)
|
gc#a_s2_setWaveform: sid2.setWaveform(bus_getchar,bus_getchar)
|
||||||
gc#a_s2_setPWM: sid2.setPWM(bus_getchar,sub_getlong)
|
gc#a_s2_setPWM: sid2.setPWM(bus_getchar,sub_getlong)
|
||||||
gc#a_s2_setADSR: sid2.setADSR(bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_setADSR: sid2.setADSR(bus_getchar,bus_getchar,bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s2_setResonance: sid2.setResonance(bus_getchar)
|
gc#a_s2_setResonance: sid2.setResonance(bus_getchar)
|
||||||
gc#a_s2_setCutoff: sid2.setCutoff(sub_getlong)
|
gc#a_s2_setCutoff: sid2.setCutoff(sub_getlong)
|
||||||
gc#a_s2_setFilterMask: sid2.setFilterMask(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_setFilterMask: sid2.setFilterMask(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s2_setFilterType: sid2.setFilterType(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_setFilterType: sid2.setFilterType(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s2_enableRingmod: sid2.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_enableRingmod: sid2.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
||||||
gc#a_s2_enableSynchronization: sid2.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
gc#a_s2_enableSynchronization: sid2.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
||||||
|
|
||||||
' ---------------------------------------------- SID Zusatzfunktionen
|
' ---------------------------------------------- SID Zusatzfunktionen
|
||||||
gc#a_s2_resetRegisters: sid2.resetRegisters
|
gc#a_s2_resetRegisters: sid2.resetRegisters
|
||||||
gc#a_s1_resetRegisters: sid1.resetRegisters
|
gc#a_s1_resetRegisters: sid1.resetRegisters
|
||||||
gc#a_s_beep: sid_beep
|
gc#a_s_beep: sid_beep
|
||||||
gc#a_s_dmpreg: sid_dmpreg 'soundinformationen senden
|
gc#a_s_dmpreg: sid_dmpreg 'soundinformationen senden
|
||||||
#endif '__ADM_SID
|
#endif '__ADM_SID
|
||||||
|
|
||||||
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
||||||
#ifdef __ADM_AYS
|
#ifdef __ADM_AYS
|
||||||
gc#a_ayStart: ay_start
|
gc#a_ayStart: ay_start
|
||||||
gc#a_ayStop: ay_stop
|
gc#a_ayStop: ay_stop
|
||||||
gc#a_ayUpdateRegisters: ay_updateRegisters
|
gc#a_ayUpdateRegisters: ay_updateRegisters
|
||||||
#endif '__ADM_AYS
|
#endif '__ADM_AYS
|
||||||
|
|
||||||
|
@ -655,7 +672,7 @@ PRI init_chip | err,i,j 'chip: initialisierung d
|
||||||
clr_dmarker 'dir-marker löschen
|
clr_dmarker 'dir-marker löschen
|
||||||
sdfat.FATEngine
|
sdfat.FATEngine
|
||||||
repeat
|
repeat
|
||||||
waitcnt(cnt + clkfreq/10)
|
waitcnt(cnt + clkfreq)
|
||||||
until sd_mount("B") == 0
|
until sd_mount("B") == 0
|
||||||
'err := sd_mount("B")
|
'err := sd_mount("B")
|
||||||
'siglow(err)
|
'siglow(err)
|
||||||
|
@ -694,8 +711,11 @@ PRI init_chip | err,i,j 'chip: initialisierung d
|
||||||
#endif '__ADM_COM
|
#endif '__ADM_COM
|
||||||
|
|
||||||
#ifdef __ADM_PLX
|
#ifdef __ADM_PLX
|
||||||
|
'plx-bus initialisieren
|
||||||
plx.init 'defaultwerte setzen, poller-cog starten
|
plx.init 'defaultwerte setzen, poller-cog starten
|
||||||
plx.run 'plexbus freigeben (poller läuft)
|
plx.run 'plexbus freigeben (poller läuft)
|
||||||
|
|
||||||
|
FunctionGenerator:=0 'Funktionsgenerator aus
|
||||||
#endif '__ADM_PLX
|
#endif '__ADM_PLX
|
||||||
|
|
||||||
#ifdef __ADM_LAN
|
#ifdef __ADM_LAN
|
||||||
|
@ -1378,7 +1398,7 @@ PRI sd_del | err 'sdcard: eine datei oder
|
||||||
|
|
||||||
sub_getstr
|
sub_getstr
|
||||||
err := \sdfat.deleteEntry(@tbuf)
|
err := \sdfat.deleteEntry(@tbuf)
|
||||||
sighigh(err) 'fehleranzeige
|
siglow(err) 'fehleranzeige
|
||||||
bus_putchar(err) 'ergebnis der operation senden
|
bus_putchar(err) 'ergebnis der operation senden
|
||||||
|
|
||||||
PRI sd_rename | err 'sdcard: datei oder verzeichnis umbenennen
|
PRI sd_rename | err 'sdcard: datei oder verzeichnis umbenennen
|
||||||
|
@ -2373,6 +2393,11 @@ CON ''------------------------------------------------- PLX-Funktionen
|
||||||
|
|
||||||
#ifdef __ADM_PLX
|
#ifdef __ADM_PLX
|
||||||
|
|
||||||
|
VAR
|
||||||
|
|
||||||
|
byte FunctionGenerator 'On/Off Marker Funktionsgenerator
|
||||||
|
|
||||||
|
|
||||||
PRI plx_in | addr 'port einlesen
|
PRI plx_in | addr 'port einlesen
|
||||||
|
|
||||||
addr := bus_getchar
|
addr := bus_getchar
|
||||||
|
@ -2382,15 +2407,13 @@ PRI plx_out | addr, data 'port ausgeben
|
||||||
|
|
||||||
addr := bus_getchar
|
addr := bus_getchar
|
||||||
data := bus_getchar
|
data := bus_getchar
|
||||||
plx.halt
|
|
||||||
plx.out(addr,data)
|
plx.out(addr,data)
|
||||||
plx.run
|
|
||||||
|
|
||||||
PRI plx_ch | addr, chan 'ad-wandler auslesen
|
PRI plx_ch | addr, chan 'ad-wandler auslesen
|
||||||
|
|
||||||
addr := bus_getchar
|
addr := bus_getchar
|
||||||
chan := bus_getchar
|
chan := bus_getchar
|
||||||
plx.ad_ch(addr,chan)
|
bus_putchar(plx.ad_ch(addr,chan))
|
||||||
|
|
||||||
PRI plx_getReg | reg 'poller-register lesen
|
PRI plx_getReg | reg 'poller-register lesen
|
||||||
|
|
||||||
|
@ -2426,13 +2449,55 @@ PRI plx_setAddr | adda, ports 'adressen adda/ports fü
|
||||||
ports := bus_getchar 'address ports
|
ports := bus_getchar 'address ports
|
||||||
plx.setadr(adda,ports)
|
plx.setadr(adda,ports)
|
||||||
|
|
||||||
PRI joy_get | reg 'Joystick abfragen (1 x 8bit Port)
|
PRI plx_get_joy 'Joystick abfragen (1 x 8bit Port)
|
||||||
|
|
||||||
reg:=bus_getchar '0-6
|
bus_putchar(!plx.getreg(plx#R_INP0))
|
||||||
if reg>3 and reg<7
|
|
||||||
bus_putchar(!plx.getreg(reg))
|
PRI plx_get_paddle 'Paddle abfragen (1 x 8bit Port 1 x Analog)
|
||||||
else
|
|
||||||
bus_putchar(plx.getreg(reg))
|
bus_putchar(!plx.getreg(plx#R_INP0))
|
||||||
|
bus_putchar(plx.getreg(plx#R_PAD0))
|
||||||
|
|
||||||
|
PRI plx_get_pad 'Pad abfragen (1 x 8bit Port 2 x Analog)
|
||||||
|
|
||||||
|
bus_putchar(!plx.getreg(plx#R_INP0))
|
||||||
|
bus_putchar(plx.getreg(plx#R_PAD0))
|
||||||
|
bus_putchar(plx.getreg(plx#R_PAD1))
|
||||||
|
|
||||||
|
PRI plx_put_vex | data, reg, addr 'Register im Venatrix-Plexus schreiben
|
||||||
|
|
||||||
|
data := bus_getchar 'datum empfangen
|
||||||
|
reg := bus_getchar 'registernummer empfangen
|
||||||
|
addr := bus_getchar 'device-adresse ampfangen
|
||||||
|
plx.vexput(data,reg,addr)
|
||||||
|
|
||||||
|
PRI plx_get_vex | reg, addr 'Register im Venatrix-Plexus lesen
|
||||||
|
|
||||||
|
reg := bus_getchar 'registernummer empfangen
|
||||||
|
addr := bus_getchar 'device-adresse empfangen
|
||||||
|
bus_putchar(plx.vexget(reg,addr))
|
||||||
|
|
||||||
|
PRI plx_startgenerator
|
||||||
|
|
||||||
|
ifnot FunctionGenerator
|
||||||
|
#ifdef __ADM_SID
|
||||||
|
sid1.stop
|
||||||
|
sid2.stop
|
||||||
|
#endif '__ADM_SID
|
||||||
|
signal.start(gc#A_SOUNDL, gc#A_SOUNDR, 32)
|
||||||
|
FunctionGenerator:=1
|
||||||
|
|
||||||
|
PRI plx_stopgenerator
|
||||||
|
|
||||||
|
if FunctionGenerator
|
||||||
|
signal.stop
|
||||||
|
#ifdef __ADM_SID
|
||||||
|
'SID soundsystem initialisieren
|
||||||
|
sidreg1 := sid1.start(gc#A_SOUNDL,0) 'erste sidcog starten, adresse der register speichern
|
||||||
|
waitcnt(cnt+(clkfreq>>8)) '
|
||||||
|
sidreg2 := sid2.start(gc#A_SOUNDR,0) 'zweite sidcog starten
|
||||||
|
#endif '__ADM_SID
|
||||||
|
FunctionGenerator:=0
|
||||||
|
|
||||||
CON ''------------------------------------------------- End of DCF77 FUNCTIONS
|
CON ''------------------------------------------------- End of DCF77 FUNCTIONS
|
||||||
|
|
||||||
|
@ -2455,6 +2520,21 @@ DAT
|
||||||
|
|
||||||
strNVRAMFile byte "nvram.sav",0 'contains the 56 bytes of NVRAM, if RTC is not available
|
strNVRAMFile byte "nvram.sav",0 'contains the 56 bytes of NVRAM, if RTC is not available
|
||||||
|
|
||||||
|
PRI lan_txflush | handleidx
|
||||||
|
''funktionsgruppe : lan
|
||||||
|
''funktion : Warten, bis Sendepuffer geleert ist
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : -
|
||||||
|
''busprotokoll : [070][get.handleidx][put.ok]
|
||||||
|
'' : handleidx - lfd. Nr. der Verbindung
|
||||||
|
'' : ok - Sendepuffer leer (Wert egal)
|
||||||
|
|
||||||
|
handleidx := bus_getchar
|
||||||
|
|
||||||
|
\sock.flush(sockhandle[handleidx])
|
||||||
|
|
||||||
|
bus_putchar(TRUE)
|
||||||
|
|
||||||
PRI lan_start | hiveid, hivestr, strpos, macpos, i, a
|
PRI lan_start | hiveid, hivestr, strpos, macpos, i, a
|
||||||
''funktionsgruppe : lan
|
''funktionsgruppe : lan
|
||||||
''funktion : Netzwerk starten
|
''funktion : Netzwerk starten
|
||||||
|
@ -2512,7 +2592,7 @@ PRI lan_start | hiveid, hivestr, strpos, macpos, i, a
|
||||||
byte[hivestr+strpos] := 0
|
byte[hivestr+strpos] := 0
|
||||||
macpos--
|
macpos--
|
||||||
|
|
||||||
sock.start(A_NETCS,A_NETSCK,A_NETSI,A_NETSO, -1, @mac_addr, @ip_addr)
|
\sock.start(A_NETCS,A_NETSCK,A_NETSI,A_NETSO, -1, @mac_addr, @ip_addr)
|
||||||
lan_started := true
|
lan_started := true
|
||||||
|
|
||||||
|
|
||||||
|
@ -2524,7 +2604,7 @@ PRI lan_stop
|
||||||
''busprotokoll : [072]
|
''busprotokoll : [072]
|
||||||
|
|
||||||
if lan_started
|
if lan_started
|
||||||
sock.stop
|
\sock.stop
|
||||||
lan_started := false
|
lan_started := false
|
||||||
|
|
||||||
PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
||||||
|
@ -2547,8 +2627,8 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
||||||
quit
|
quit
|
||||||
i++
|
i++
|
||||||
|
|
||||||
ifnot (handle := sock.connect(ipaddr, remoteport, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
ifnot (handle := \sock.connect(ipaddr, remoteport, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||||
sock.resetBuffers(handle)
|
\sock.resetBuffers(handle)
|
||||||
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
||||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||||
bufidx[i] :=handleidx
|
bufidx[i] :=handleidx
|
||||||
|
@ -2559,22 +2639,36 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
||||||
PRI lan_listen | port, handle, handleidx, i
|
PRI lan_listen | port, handle, handleidx, i
|
||||||
''funktionsgruppe : lan
|
''funktionsgruppe : lan
|
||||||
''funktion : Port für eingehende TCP-Verbindung öffnen
|
''funktion : Port für eingehende TCP-Verbindung öffnen
|
||||||
|
'' bei bereits bestehendem Socket nur handleidx zurücksenden
|
||||||
''eingabe : -
|
''eingabe : -
|
||||||
''ausgabe : -
|
''ausgabe : -
|
||||||
''busprotokoll : [074][sub_getword.port][put.handleidx]
|
''busprotokoll : [074][get.handleidx][sub_getword.port][put.handleidx]
|
||||||
|
'' : handleidx - lfd. Nr. der bestehenden Verbindung ($FF wenn neu)
|
||||||
'' : port - zu öffnende Portnummer
|
'' : port - zu öffnende Portnummer
|
||||||
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
||||||
|
|
||||||
|
handleidx := bus_getchar
|
||||||
port := sub_getword
|
port := sub_getword
|
||||||
|
|
||||||
'freien Pufferabschnitt suchen
|
if handleidx <> $FF 'bestehender (kein neuer) Socket
|
||||||
i := 0
|
if \sock.isValidHandle(sockhandle[handleidx]) 'Socket gültig
|
||||||
repeat sock#sNumSockets
|
bus_putchar(handleidx) 'alten handleidx zurücksenden
|
||||||
if bufidx[i] == $FF '0xFF: nicht zugewiesen
|
return
|
||||||
quit
|
|
||||||
i++
|
|
||||||
|
|
||||||
ifnot (handle := sock.listen(port, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
i := 0
|
||||||
|
if handleidx == $FF 'neue Verbindung
|
||||||
|
repeat sock#sNumSockets
|
||||||
|
'freien Pufferabschnitt suchen
|
||||||
|
if bufidx[i] == $FF '0xFF: nicht zugewiesen
|
||||||
|
quit
|
||||||
|
i++
|
||||||
|
else 'bereits aufgebaute, abgebrochende Verbindung
|
||||||
|
repeat sock#sNumSockets
|
||||||
|
if bufidx[i] == handleidx 'zum Handle gehörender Buffer
|
||||||
|
quit
|
||||||
|
i++
|
||||||
|
|
||||||
|
ifnot (handle := \sock.listen(port, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||||
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
||||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||||
bufidx[i] :=handleidx
|
bufidx[i] :=handleidx
|
||||||
|
@ -2596,7 +2690,7 @@ PRI lan_waitconntimeout | handleidx, timeout, t, connected
|
||||||
timeout := sub_getword
|
timeout := sub_getword
|
||||||
|
|
||||||
t := cnt
|
t := cnt
|
||||||
repeat until (connected := sock.isConnected(sockhandle[handleidx])) or (((cnt - t) / (clkfreq / 1000)) > timeout)
|
repeat until (connected := \sock.isConnected(sockhandle[handleidx])) or (((cnt - t) / (clkfreq / 1000)) > timeout)
|
||||||
|
|
||||||
bus_putchar(connected)
|
bus_putchar(connected)
|
||||||
|
|
||||||
|
@ -2610,14 +2704,15 @@ PRI lan_close | handleidx, i
|
||||||
|
|
||||||
handleidx := bus_getchar
|
handleidx := bus_getchar
|
||||||
|
|
||||||
sock.close(sockhandle[handleidx])
|
\sock.close(sockhandle[handleidx])
|
||||||
|
|
||||||
'reservierten Pufferabschnitt freigeben
|
'reservierten Pufferabschnitt freigeben
|
||||||
i := 0
|
i := 0
|
||||||
repeat sock#sNumSockets
|
repeat sock#sNumSockets
|
||||||
if bufidx[i++] == handleidx '0xFF: nicht zugewiesen
|
if bufidx[i] == handleidx '0xFF: nicht zugewiesen
|
||||||
bufidx[i++] := $FF
|
bufidx[i] := $FF
|
||||||
quit
|
quit
|
||||||
|
i++
|
||||||
|
|
||||||
|
|
||||||
PRI lan_rxtime | handleidx, timeout, t, rxbyte
|
PRI lan_rxtime | handleidx, timeout, t, rxbyte
|
||||||
|
@ -2636,7 +2731,7 @@ PRI lan_rxtime | handleidx, timeout, t, rxbyte
|
||||||
timeout := sub_getword
|
timeout := sub_getword
|
||||||
|
|
||||||
t := cnt
|
t := cnt
|
||||||
repeat until (rxbyte := sock.readByteNonBlocking(sockhandle[handleidx])) => 0 or (not sock.isConnected(sockhandle[handleidx])) or (cnt - t) / (clkfreq / 1000) > timeout
|
repeat until (rxbyte := \sock.readByteNonBlocking(sockhandle[handleidx])) => 0 or (not \sock.isConnected(sockhandle[handleidx])) or (cnt - t) / (clkfreq / 1000) > timeout
|
||||||
|
|
||||||
bus_putchar(rxbyte)
|
bus_putchar(rxbyte)
|
||||||
|
|
||||||
|
@ -2656,8 +2751,8 @@ PRI lan_rxdata | handleidx, len, rxbyte, error
|
||||||
|
|
||||||
repeat len
|
repeat len
|
||||||
ifnot error
|
ifnot error
|
||||||
repeat while (rxbyte := sock.readByteNonBlocking(sockhandle[handleidx])) < 0
|
repeat while (rxbyte := \sock.readByteNonBlocking(sockhandle[handleidx])) < 0
|
||||||
ifnot sock.isConnected(sockhandle[handleidx])
|
ifnot \sock.isConnected(sockhandle[handleidx])
|
||||||
error := sock#ERRSOCKETCLOSED
|
error := sock#ERRSOCKETCLOSED
|
||||||
quit
|
quit
|
||||||
bus_putchar(rxbyte)
|
bus_putchar(rxbyte)
|
||||||
|
@ -2681,8 +2776,8 @@ PRI lan_txdata | handleidx, len, txbyte, error
|
||||||
repeat len
|
repeat len
|
||||||
txbyte := bus_getchar
|
txbyte := bus_getchar
|
||||||
ifnot error
|
ifnot error
|
||||||
repeat while sock.writeByteNonBlocking(sockhandle[handleidx], txbyte) < 0
|
repeat while \sock.writeByteNonBlocking(sockhandle[handleidx], txbyte) < 0
|
||||||
ifnot sock.isConnected(sockhandle[handleidx])
|
ifnot \sock.isConnected(sockhandle[handleidx])
|
||||||
error := sock#ERRSOCKETCLOSED
|
error := sock#ERRSOCKETCLOSED
|
||||||
quit
|
quit
|
||||||
|
|
||||||
|
@ -2699,7 +2794,7 @@ PRI lan_rxbyte
|
||||||
'' : rxbyte - empfangenes Zeichen oder
|
'' : rxbyte - empfangenes Zeichen oder
|
||||||
'' : sock#RETBUFFEREMPTY (-1) wenn kein Zeichen vorhanden
|
'' : sock#RETBUFFEREMPTY (-1) wenn kein Zeichen vorhanden
|
||||||
|
|
||||||
bus_putchar(sock.readByteNonBlocking(sockhandle[bus_getchar]))
|
bus_putchar(\sock.readByteNonBlocking(sockhandle[bus_getchar]))
|
||||||
|
|
||||||
PRI lan_isconnected
|
PRI lan_isconnected
|
||||||
''funktionsgruppe : lan
|
''funktionsgruppe : lan
|
||||||
|
@ -2710,7 +2805,7 @@ PRI lan_isconnected
|
||||||
'' : handleidx - lfd. Nr. der Verbindung
|
'' : handleidx - lfd. Nr. der Verbindung
|
||||||
'' : connected - TRUE wenn verbunden, sonst FALSE
|
'' : connected - TRUE wenn verbunden, sonst FALSE
|
||||||
|
|
||||||
bus_putchar(sock.isConnected(sockhandle[bus_getchar]))
|
bus_putchar(\sock.isConnected(sockhandle[bus_getchar]))
|
||||||
|
|
||||||
DAT
|
DAT
|
||||||
long ' long alignment for addresses
|
long ' long alignment for addresses
|
||||||
|
|
|
@ -72,6 +72,7 @@ Logbuch :
|
||||||
21-10-2012-uheld - Window-Funktionen
|
21-10-2012-uheld - Window-Funktionen
|
||||||
28-11-2012-uheld - wahlweise Einbindung von VGA- oder TV-Treiber über #define
|
28-11-2012-uheld - wahlweise Einbindung von VGA- oder TV-Treiber über #define
|
||||||
15-04-2013-dr235 - konstanten für bellatrix-funktionen komplett ausgelagert
|
15-04-2013-dr235 - konstanten für bellatrix-funktionen komplett ausgelagert
|
||||||
|
22.02.2014-dr235 - per compilerflag wählbare monitorsettings eingefügt (57/60hz)
|
||||||
|
|
||||||
Notizen:
|
Notizen:
|
||||||
- setheader
|
- setheader
|
||||||
|
@ -132,6 +133,14 @@ $0A..FF CHAR Zeichenausgabe
|
||||||
'#define __TV
|
'#define __TV
|
||||||
'#define __VGA
|
'#define __VGA
|
||||||
|
|
||||||
|
'Hier sind verschiedene Timings für den Monitor wählbar.
|
||||||
|
'Die Settings selbst befinden sich in der Datei /lib/bel-vga.spin und
|
||||||
|
'können dort auch um weitere Optionen erweitert werden.
|
||||||
|
|
||||||
|
#define __VGA_MONSET1 '60Hz
|
||||||
|
'#define __VGA_MONSET2 '57Hz
|
||||||
|
|
||||||
|
|
||||||
CON
|
CON
|
||||||
|
|
||||||
_CLKMODE = XTAL1 + PLL16X
|
_CLKMODE = XTAL1 + PLL16X
|
||||||
|
|
|
@ -55,9 +55,9 @@ word[7] - DCURR - Stack pointer. This is the initial value of the stack pointer.
|
||||||
|
|
||||||
|
|
||||||
CON ' KONFIGURATION
|
CON ' KONFIGURATION
|
||||||
{
|
|
||||||
Achtung: Nur eine Konfiguration wählen! Beim Bauen mittels Makefiles keines aktivieren"
|
|
||||||
}
|
'Achtung: Nur eine Konfiguration wählen! Beim Bauen mittels Makefiles keines aktivieren!
|
||||||
|
|
||||||
'#define forth ' forth + spin-loader
|
'#define forth ' forth + spin-loader
|
||||||
'#define regime ' spin-loader OHNE FORTH, reg.sys wird sofort automatisch gestartet
|
'#define regime ' spin-loader OHNE FORTH, reg.sys wird sofort automatisch gestartet
|
||||||
|
|
|
@ -481,5 +481,9 @@ wvariable lcog \ nummer interaktiven cog
|
||||||
: _ob onboot ;
|
: _ob onboot ;
|
||||||
: onboot _ob start ;
|
: onboot _ob start ;
|
||||||
|
|
||||||
|
saveforth
|
||||||
|
|
||||||
|
reboot
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,26 +28,26 @@ Notizen :
|
||||||
|
|
||||||
|
|
||||||
OBJ
|
OBJ
|
||||||
gc : "m-glob-con"
|
gc : "glob-con"
|
||||||
|
|
||||||
|
|
||||||
CON
|
CON
|
||||||
|
|
||||||
SCL = gc#adm_scl
|
SCL = gc#adm_scl
|
||||||
SDA = gc#adm_sda
|
SDA = gc#adm_sda
|
||||||
' VNX = gc#adm_int1
|
|
||||||
' portadressen sepia
|
' portadressen sepia
|
||||||
|
|
||||||
'pcf8574 %0100_ABC_0
|
'pcf8574 %0100_ABC_0
|
||||||
PORT1 = %0100_000 '$20
|
PORT1 = %0100_000 '$20
|
||||||
PORT2 = %0100_001 '$21
|
PORT2 = %0100_001 '$21
|
||||||
PORT3 = %0100_010 '$22
|
PORT3 = %0100_010 '$22
|
||||||
{
|
|
||||||
'pcf8574a %0111_ABC_0
|
'pcf8574a %0111_ABC_0
|
||||||
PORT1 = %0111_000 '$38
|
' PORT1 = %0111_000 '$38
|
||||||
PORT2 = %0111_001 '$39
|
' PORT2 = %0111_001 '$39
|
||||||
PORT3 = %0111_010 '$3A
|
' PORT3 = %0111_010 '$3A
|
||||||
}
|
|
||||||
' ad/da-wandler-adresse
|
' ad/da-wandler-adresse
|
||||||
|
|
||||||
'pcf8591 %1001_ABC_R
|
'pcf8591 %1001_ABC_R
|
||||||
|
@ -84,7 +84,7 @@ CON
|
||||||
R_INP0 = 4
|
R_INP0 = 4
|
||||||
R_INP1 = 5
|
R_INP1 = 5
|
||||||
R_INP2 = 6
|
R_INP2 = 6
|
||||||
' R_VNX = 7
|
|
||||||
|
|
||||||
|
|
||||||
VAR
|
VAR
|
||||||
|
@ -120,11 +120,7 @@ PUB init 'plx: io-system initiali
|
||||||
|
|
||||||
'pollcog starten
|
'pollcog starten
|
||||||
plxcogid := cognew(poller,@plxstack)
|
plxcogid := cognew(poller,@plxstack)
|
||||||
pub plxstop
|
|
||||||
|
|
||||||
if(plxcogid)
|
|
||||||
cogstop(plxcogid~ - 1)
|
|
||||||
lockret(-1 + plxlock~)
|
|
||||||
PRI poller 'plx: pollcog
|
PRI poller 'plx: pollcog
|
||||||
|
|
||||||
repeat
|
repeat
|
||||||
|
@ -134,18 +130,14 @@ PRI poller 'plx: pollcog
|
||||||
'analoge eingänge pollen
|
'analoge eingänge pollen
|
||||||
plxreg[R_PAD0] := ad_ch(adr_adda,0)
|
plxreg[R_PAD0] := ad_ch(adr_adda,0)
|
||||||
plxreg[R_PAD1] := ad_ch(adr_adda,1)
|
plxreg[R_PAD1] := ad_ch(adr_adda,1)
|
||||||
lockclr(plxlock) 'bus freigeben
|
|
||||||
|
|
||||||
repeat until not lockset(plxlock) 'auf freien bus warten
|
|
||||||
plxreg[R_PAD2] := ad_ch(adr_adda,2)
|
plxreg[R_PAD2] := ad_ch(adr_adda,2)
|
||||||
plxreg[R_PAD3] := ad_ch(adr_adda,3)
|
plxreg[R_PAD3] := ad_ch(adr_adda,3)
|
||||||
lockclr(plxlock) 'bus freigeben
|
|
||||||
|
|
||||||
repeat until not lockset(plxlock) 'auf freien bus warten
|
|
||||||
'digitale eingabeports pollen
|
'digitale eingabeports pollen
|
||||||
plxreg[R_INP0] := in(adr_port )
|
plxreg[R_INP0] := in(adr_port )
|
||||||
plxreg[R_INP1] := in(adr_port+1)
|
plxreg[R_INP1] := in(adr_port+1)
|
||||||
plxreg[R_INP2] := in(adr_port+2)
|
plxreg[R_INP2] := in(adr_port+2)
|
||||||
|
|
||||||
'semaphore freigeben
|
'semaphore freigeben
|
||||||
lockclr(plxlock) 'bus freigeben
|
lockclr(plxlock) 'bus freigeben
|
||||||
|
|
||||||
|
@ -211,11 +203,27 @@ PUB ping(adr):ack 'plx: device anpingen
|
||||||
|
|
||||||
PUB setadr(adradda,adrport)
|
PUB setadr(adradda,adrport)
|
||||||
|
|
||||||
'halt
|
halt
|
||||||
adr_adda := adradda
|
adr_adda := adradda
|
||||||
adr_port := adrport
|
adr_port := adrport
|
||||||
ad_init(adr_adda)
|
ad_init(adr_adda)
|
||||||
'run
|
run
|
||||||
|
|
||||||
|
PUB vexput(data,regnr,adr):ack 'plx: register in venatrix-plexus setzen
|
||||||
|
|
||||||
|
start
|
||||||
|
ack := write(adr << 1)
|
||||||
|
ack := (ack << 1) | write(regnr)
|
||||||
|
ack := (ack << 1) | write(data)
|
||||||
|
stop
|
||||||
|
|
||||||
|
PUB vexget(regnr,adr):data|ack 'plx: regsiter aus venatrix-plexus auslesen
|
||||||
|
|
||||||
|
start
|
||||||
|
write((adr << 1) + 1)
|
||||||
|
write(regnr)
|
||||||
|
data := read(0)
|
||||||
|
stop
|
||||||
|
|
||||||
CON 'I2C-FUNKTIONEN
|
CON 'I2C-FUNKTIONEN
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
{
|
||||||
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ Propeller Signal Generator v1.2 (C) 2012 Johannes Ahlebrand │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ TERMS OF USE: Parallax Object Exchange License │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │
|
||||||
|
│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │
|
||||||
|
│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│
|
||||||
|
│is furnished to do so, subject to the following conditions: │
|
||||||
|
│ │
|
||||||
|
│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│
|
||||||
|
│ │
|
||||||
|
│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │
|
||||||
|
│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │
|
||||||
|
│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │
|
||||||
|
│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
}
|
||||||
|
CON MUTE = 14, SAW = 16, TRIANGLE = 18, SQUARE = 22, NOISE = 25, SINE = 32, USER = 42, PW50 = 1<<31, PW25 = 1<<30, PW12_5 = 1<<29, freqRef = 536870912
|
||||||
|
|
||||||
|
VAR
|
||||||
|
byte cog
|
||||||
|
long waveform, frequency, damplevel, pulseWidth, userWaveformP, userWaveformSize
|
||||||
|
|
||||||
|
PUB start(outPin, invertedPin, syncPin)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Starts PSG in a single cog │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ outPin - The pin to output the signal on │
|
||||||
|
' │ invertedPin - The pin to output the inverted signal on │
|
||||||
|
' │ syncPin - The pin to output the synchronization signal on│
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
stop
|
||||||
|
waveform := MUTE
|
||||||
|
regCounter := $1C000000 | outPin | (invertedPin<<9)
|
||||||
|
noiseValue := $10000000 '| syncPin
|
||||||
|
delayLine := (1<<invertedPin) | (1<<outPin) '| (1<<syncPin)
|
||||||
|
cog := cognew(@PSG, @waveform) + 1
|
||||||
|
|
||||||
|
PUB stop
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Stops PSG │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
if cog
|
||||||
|
cogstop(cog~ -1)
|
||||||
|
cog := 0
|
||||||
|
|
||||||
|
PUB setWaveform(waveformType)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set waveform type │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ waveformType - Which waveform from the list below to use │
|
||||||
|
' │ │
|
||||||
|
' │ #MUTE = No signal │
|
||||||
|
' │ #SAW = Saw wave │
|
||||||
|
' │ #TRIANGLE = Triangle wave │
|
||||||
|
' │ #SQUARE = Square wave │
|
||||||
|
' │ #NOISE = Noise wave │
|
||||||
|
' │ #SINE = Sine wave │
|
||||||
|
' │ #USER = User definable waveform │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
waveform := waveformType
|
||||||
|
|
||||||
|
PUB setFrequency(freq)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set frequency │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ freq - The frequency in hertz (0 Hz to 7500000 Hz) │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
setFrequencyCentiHertz(freq * 100)
|
||||||
|
|
||||||
|
PUB setFrequencyCentiHertz(freq)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set frequency │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ freq - The frequency in centi hertz (0 Hz to 750000000 cHz) │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
frequency := freqRef / (1000000000 / freq)
|
||||||
|
|
||||||
|
PUB setPulseWidth(pulseWidthVal)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set the pulse width (square only) │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ pulseWidthVal - The 32 bit pulse width value │
|
||||||
|
' │ │
|
||||||
|
' │ Predefined pulse widths │
|
||||||
|
' │ ─────────────────────── │
|
||||||
|
' │ #PW50 = 50% (1<<31) │
|
||||||
|
' │ #PW25 = 25% (1<<30) │
|
||||||
|
' │ #PW12_5 = 12.5% (1<<29) │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
pulseWidth := pulseWidthVal
|
||||||
|
|
||||||
|
PUB setDampLevel(dampLev)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set damp level │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ dampLev - The damp level (Each step equals 6 dB) │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
damplevel := dampLev
|
||||||
|
|
||||||
|
PUB setUserWaveform(address, size)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ Set user definable waveform │
|
||||||
|
' ├──────────────────────────────────────────────────────────────┤
|
||||||
|
' │ address - The address to the waveform in memory │
|
||||||
|
' │ size - The size of the waveform (2^size) │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
userWaveformP := address
|
||||||
|
userWaveformSize := 31 - size
|
||||||
|
|
||||||
|
PUB setParameters(waveformType, frequencyInHertz, dampLev, pulseWidthValue)
|
||||||
|
' ┌──────────────────────────────────────────────────────────────┐
|
||||||
|
' │ A convenient method to set all parametes at once │
|
||||||
|
' └──────────────────────────────────────────────────────────────┘
|
||||||
|
setWaveform(waveformType)
|
||||||
|
setFrequency(frequencyInHertz)
|
||||||
|
setPulseWidth(pulseWidthValue)
|
||||||
|
setDampLevel(dampLev)
|
||||||
|
|
||||||
|
DAT org 0
|
||||||
|
PSG mov ctra, regCounter
|
||||||
|
out mov ctrb, noiseValue
|
||||||
|
waitCounter mov dira, delayLine
|
||||||
|
'───────────────────────────────────────────────────────────
|
||||||
|
mainLoop cmp :par, stopValue wz
|
||||||
|
if_z movd :par, #waveform_
|
||||||
|
if_z mov regCounter, par
|
||||||
|
:par rdlong waveform_ + 6, regCounter
|
||||||
|
add :par, val512
|
||||||
|
add regCounter, #4
|
||||||
|
sar out, damplevel_
|
||||||
|
add out, dcOffset
|
||||||
|
mov frqa, out
|
||||||
|
mov frqb, frequency_
|
||||||
|
jmp waveform_
|
||||||
|
'───────────────────────────────────────────────────────────
|
||||||
|
Mute_ mov out, #0
|
||||||
|
jmp #mainLoop
|
||||||
|
Saw_ mov out, phsb
|
||||||
|
jmp #mainLoop
|
||||||
|
Triangle_ absneg out, phsb
|
||||||
|
shl out, #1 wc
|
||||||
|
sub out, dcOffset
|
||||||
|
jmp #mainLoop
|
||||||
|
Square_ sub pulseWidth_, phsb nr, wc
|
||||||
|
negc out, maxAmplitude
|
||||||
|
jmp #mainLoop
|
||||||
|
Noise_ mov out, noiseValue
|
||||||
|
mov delayLine, phsb nr, wc
|
||||||
|
rcr delayLine, #16
|
||||||
|
cmp delayLine, cmpVal wz
|
||||||
|
if_z add noiseValue, cnt
|
||||||
|
if_z ror noiseValue, noiseValue
|
||||||
|
jmp #mainLoop
|
||||||
|
Sine_ mov out, phsb wc
|
||||||
|
shr out, #19
|
||||||
|
test out, sin_90 wz
|
||||||
|
negnz out, out
|
||||||
|
or out, sin_table
|
||||||
|
shl out, #1
|
||||||
|
rdword out, out
|
||||||
|
negc out, out
|
||||||
|
shl out, #15
|
||||||
|
jmp #mainLoop
|
||||||
|
User_ mov out, phsb
|
||||||
|
shr out, userWaveformSize_
|
||||||
|
add out, userWaveformP_
|
||||||
|
rdword out, out
|
||||||
|
shl out, #16
|
||||||
|
jmp #mainLoop
|
||||||
|
'───────────────────────────────────────────────────────────
|
||||||
|
stopValue rdlong waveform_ + 6, regCounter
|
||||||
|
sin_90 long $0800
|
||||||
|
sin_table long $E000>>1
|
||||||
|
cmpVal long $FFFF
|
||||||
|
dcOffset long 1<<31
|
||||||
|
maxAmplitude long(1<<31)-1
|
||||||
|
val512 long 1<<9
|
||||||
|
regCounter long 1
|
||||||
|
noiseValue long 1
|
||||||
|
delayLine long 1
|
||||||
|
waveform_ res 1
|
||||||
|
frequency_ res 1
|
||||||
|
damplevel_ res 1
|
||||||
|
pulseWidth_ res 1
|
||||||
|
userWaveformP_ res 1
|
||||||
|
userWaveformSize_ res 1
|
|
@ -60,7 +60,7 @@ CON
|
||||||
ERRSOCKETCLOSED = ERR - 3 ' socket closed, could not perform operation
|
ERRSOCKETCLOSED = ERR - 3 ' socket closed, could not perform operation
|
||||||
|
|
||||||
OBJ
|
OBJ
|
||||||
nic : "driver_enc28j60"
|
nic : "adm-enc28j60"
|
||||||
|
|
||||||
'ser : "SerialMirror"
|
'ser : "SerialMirror"
|
||||||
'stk : "Stack Length"
|
'stk : "Stack Length"
|
|
@ -20,17 +20,32 @@
|
||||||
|
|
||||||
CON
|
CON
|
||||||
|
|
||||||
' 1024 x 768 @ 60Hz settings
|
|
||||||
|
|
||||||
|
' 1024 x 768 @ H:48KHz V:60Hz settings
|
||||||
|
#ifdef __VGA_MONSET1
|
||||||
hp = 1024 'horizontal pixels
|
hp = 1024 'horizontal pixels
|
||||||
vp = 768 'vertical pixels
|
vp = 768 'vertical pixels
|
||||||
hf = 24 'horizontal front porch pixels
|
hf = 24 'horizontal front porch pixels
|
||||||
hs = 136 'horizontal sync pixels
|
hs = 136 'horizontal sync pixels
|
||||||
hb = 160 'horizontal back porch pixels
|
hb = 160 'horizontal back porch pixels
|
||||||
vf = 3 'vertical front porch lines
|
vf = 3 'vertical front porch lines
|
||||||
vs = 6 'vertical sync lines
|
vs = 6 'vertical sync lines
|
||||||
vb = 29 'vertical back porch lines
|
vb = 29 'vertical back porch lines
|
||||||
pr = 65 'pixel rate in MHz at 80MHz system clock (5MHz granularity)
|
pr = 65 'pixel rate in MHz at 80MHz system clock (5MHz granularity)
|
||||||
|
#endif __VGA_MONSET1
|
||||||
|
|
||||||
|
' 1024 x 768 @ H:45KHz V:57Hz settings
|
||||||
|
#ifdef __VGA_MONSET2
|
||||||
|
hp = 1024 'horizontal pixels
|
||||||
|
vp = 768 'vertical pixels
|
||||||
|
hf = 16 'horizontal front porch pixels
|
||||||
|
hs = 96 'horizontal sync pixels
|
||||||
|
hb = 176 'horizontal back porch pixels
|
||||||
|
vf = 1 'vertical front porch lines
|
||||||
|
vs = 3 'vertical sync lines
|
||||||
|
vb = 28 'vertical back porch lines
|
||||||
|
pr = 60 'pixel rate in MHz at 80MHz system clock (5MHz granularity)
|
||||||
|
#endif __VGA_MONSET2
|
||||||
|
|
||||||
ht = hp + hf + hs + hb 'total scan line pixels
|
ht = hp + hf + hs + hb 'total scan line pixels
|
||||||
|
|
||||||
|
|
|
@ -52,9 +52,6 @@ FL_SEL = %0000_0001 'eintrag ist selektiert
|
||||||
|
|
||||||
FL_FOCUS = %0000_0001 'box ist selektiert
|
FL_FOCUS = %0000_0001 'box ist selektiert
|
||||||
|
|
||||||
DR_SD = 0
|
|
||||||
DR_RAM = 1
|
|
||||||
DR_BLK = 2
|
|
||||||
|
|
||||||
PUB dummy
|
PUB dummy
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,12 @@ CON 'Signaldefinitionen --------------------------------------------------------
|
||||||
#21, A_Bluetooth_Line 'Key-Line des HC05-Bluetooth-Moduls
|
#21, A_Bluetooth_Line 'Key-Line des HC05-Bluetooth-Moduls
|
||||||
#23, A_SELECT 'administra-auswahlsignal
|
#23, A_SELECT 'administra-auswahlsignal
|
||||||
|
|
||||||
|
'plexbus
|
||||||
|
adm_sda = 19 'i2c-datenpin
|
||||||
|
adm_scl = 20 'i2c-clockpin
|
||||||
|
adm_int1 = 21 'interrupt port 1&2
|
||||||
|
adm_int2 = 22 'interrupt port 3
|
||||||
|
|
||||||
CON 'KEY_CODES -------------------------------------------------------------------------------------
|
CON 'KEY_CODES -------------------------------------------------------------------------------------
|
||||||
|
|
||||||
KEY_CTRL = 2
|
KEY_CTRL = 2
|
||||||
|
@ -198,7 +204,8 @@ A_BLT = %00000000_00000000_00001000_00000000
|
||||||
a_DCF_GetYear '77
|
a_DCF_GetYear '77
|
||||||
|
|
||||||
' ---------------------------------------------- LAN-FUNKTIONEN
|
' ---------------------------------------------- LAN-FUNKTIONEN
|
||||||
#81, a_lanStart 'Start Network
|
#80, a_lanTXFlush 'Warten, bis Sendepuffer geleert ist
|
||||||
|
a_lanStart 'Start Network
|
||||||
a_lanStop 'Stop Network
|
a_lanStop 'Stop Network
|
||||||
a_lanConnect 'ausgehende TCP-Verbindung öffnen
|
a_lanConnect 'ausgehende TCP-Verbindung öffnen
|
||||||
a_lanListen 'auf eingehende TCP-Verbindung lauschen
|
a_lanListen 'auf eingehende TCP-Verbindung lauschen
|
||||||
|
@ -253,6 +260,14 @@ A_BLT = %00000000_00000000_00001000_00000000
|
||||||
a_Pad 'Pad abfragen (1 x 8bit Port 2 x Analog)
|
a_Pad 'Pad abfragen (1 x 8bit Port 2 x Analog)
|
||||||
a_SetJoy 'Port für Joystick setzen
|
a_SetJoy 'Port für Joystick setzen
|
||||||
a_SetPad '137 'Chan für Pad setzen
|
a_SetPad '137 'Chan für Pad setzen
|
||||||
|
' ---------------------------------------------- Venatrix-Propeller-Slave
|
||||||
|
a_VexPut 'Register im Venatrix-Plexus schreiben
|
||||||
|
a_VexGet '139 'Register im Venatrix-Plexus lesen
|
||||||
|
|
||||||
|
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
||||||
|
#147, a_ayStart
|
||||||
|
a_ayStop
|
||||||
|
a_ayUpdateRegisters '149
|
||||||
|
|
||||||
' ---------------------------------------------- WAV-FUNKTIONEN
|
' ---------------------------------------------- WAV-FUNKTIONEN
|
||||||
#150, a_sdwStart 'spielt wav-datei direkt von sd-card ab
|
#150, a_sdwStart 'spielt wav-datei direkt von sd-card ab
|
||||||
|
@ -314,10 +329,22 @@ A_BLT = %00000000_00000000_00001000_00000000
|
||||||
a_s_beep
|
a_s_beep
|
||||||
a_s_dmpreg '199 'soundinformationen senden
|
a_s_dmpreg '199 'soundinformationen senden
|
||||||
|
|
||||||
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
' ############################################## mehrfach verwendete Funktionen
|
||||||
#200, a_ayStart
|
' 200 ... 254 können mehrfach verwendet,
|
||||||
a_ayStop
|
' dürfen aber nur einmal
|
||||||
a_ayUpdateRegisters
|
' eingebunden werden
|
||||||
|
|
||||||
|
' ---------------------------------------------- Funktionsgenerator
|
||||||
|
#210, a_startFunctionGenerator
|
||||||
|
a_stopFunctionGenerator
|
||||||
|
a_PulseWidth
|
||||||
|
a_Frequency_HZ
|
||||||
|
a_Frequency_Centihz
|
||||||
|
a_SetWaveform
|
||||||
|
a_SetDampLevel
|
||||||
|
a_SetUserWaveform
|
||||||
|
a_setParameter
|
||||||
|
|
||||||
|
|
||||||
CON 'BELLATRIX-FUNKTIONEN --------------------------------------------------------------------------
|
CON 'BELLATRIX-FUNKTIONEN --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
||||||
Typ : Programm
|
Typ : Programm
|
||||||
Version :
|
Version :
|
||||||
Subversion :
|
Subversion :
|
||||||
Funktion :
|
Funktion : Fenster mit Dateiliste
|
||||||
Komponenten : -
|
Komponenten : -
|
||||||
COG's : -
|
COG's : -
|
||||||
Logbuch :
|
Logbuch :
|
||||||
|
@ -79,10 +79,28 @@ PUB redraw | i
|
||||||
i++
|
i++
|
||||||
ios.printnl
|
ios.printnl
|
||||||
|
|
||||||
PUB setpos(pos)
|
PUB setpos(npos)|opos,i,col,row
|
||||||
|
|
||||||
box_pos := pos
|
opos := box_pos
|
||||||
redraw
|
box_pos := npos
|
||||||
|
|
||||||
|
' redrawx(npos,opos)
|
||||||
|
|
||||||
|
ios.winset(box_win)
|
||||||
|
|
||||||
|
'alte position neu zeichnen
|
||||||
|
row := opos / box_cols
|
||||||
|
col := (opos - (row * box_cols)) * (fm#MAX_LEN + 2)
|
||||||
|
ios.wincursety(row)
|
||||||
|
ios.wincursetx(col)
|
||||||
|
print_file(box_view + opos, opos)
|
||||||
|
|
||||||
|
'neue position neu zeichnen
|
||||||
|
row := npos / box_cols
|
||||||
|
col := (npos - (row * box_cols)) * (fm#MAX_LEN + 2)
|
||||||
|
ios.wincursety(row)
|
||||||
|
ios.wincursetx(col)
|
||||||
|
print_file(box_view + npos, npos)
|
||||||
|
|
||||||
PUB setview(view)
|
PUB setview(view)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
||||||
Typ : Programm
|
Typ : Programm
|
||||||
Version :
|
Version :
|
||||||
Subversion :
|
Subversion :
|
||||||
Funktion :
|
Funktion : Eingabedialog String
|
||||||
Komponenten : -
|
Komponenten : -
|
||||||
COG's : -
|
COG's : -
|
||||||
Logbuch :
|
Logbuch :
|
||||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
||||||
Typ : Programm
|
Typ : Programm
|
||||||
Version :
|
Version :
|
||||||
Subversion :
|
Subversion :
|
||||||
Funktion :
|
Funktion : Infodialog mit Fortschrittsbalken
|
||||||
Komponenten : -
|
Komponenten : -
|
||||||
COG's : -
|
COG's : -
|
||||||
Logbuch :
|
Logbuch :
|
||||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
||||||
Typ : Programm
|
Typ : Programm
|
||||||
Version :
|
Version :
|
||||||
Subversion :
|
Subversion :
|
||||||
Funktion :
|
Funktion : Warndialog mit zwei Buttons
|
||||||
Komponenten : -
|
Komponenten : -
|
||||||
COG's : -
|
COG's : -
|
||||||
Logbuch :
|
Logbuch :
|
||||||
|
@ -64,10 +64,14 @@ PUB draw(stradr1,stradr2,stradr3):button | key,bnr
|
||||||
draw_buttons(stradr2,stradr3,bnr)
|
draw_buttons(stradr2,stradr3,bnr)
|
||||||
key := ios.keywait
|
key := ios.keywait
|
||||||
case key
|
case key
|
||||||
gc#KEY_CURLEFT: bnr := 1
|
gc#KEY_CURLEFT: bnr := 1
|
||||||
gc#KEY_CURRIGHT: bnr := 2
|
gc#KEY_CURRIGHT: bnr := 2
|
||||||
|
gc#KEY_TAB: case bnr
|
||||||
|
1: bnr := 2
|
||||||
|
2: bnr := 1
|
||||||
|
gc#KEY_ESC: bnr := 0
|
||||||
|
|
||||||
until key == gc#KEY_RETURN
|
until (key == gc#KEY_RETURN) or (key == gc#KEY_ESC)
|
||||||
return bnr
|
return bnr
|
||||||
|
|
||||||
PRI draw_buttons(stradr2,stradr3,bnr)
|
PRI draw_buttons(stradr2,stradr3,bnr)
|
||||||
|
|
|
@ -46,6 +46,12 @@ con ' signaldefinitionen
|
||||||
#10, ADM_SDD0,ADM_SDCLK,ADM_SDCMD,ADM_SDD3 'sd-cardreader (4 pin)
|
#10, ADM_SDD0,ADM_SDCLK,ADM_SDCMD,ADM_SDD3 'sd-cardreader (4 pin)
|
||||||
#23, ADM_SELECT 'administra-auswahlsignal
|
#23, ADM_SELECT 'administra-auswahlsignal
|
||||||
|
|
||||||
|
'plexbus
|
||||||
|
adm_sda = 19 'i2c-datenpin
|
||||||
|
adm_scl = 20 'i2c-clockpin
|
||||||
|
adm_int1 = 21 'interrupt port 1&2
|
||||||
|
adm_int2 = 22 'interrupt port 3
|
||||||
|
|
||||||
con ' administra-funktionen
|
con ' administra-funktionen
|
||||||
|
|
||||||
ADM_OPT = 0
|
ADM_OPT = 0
|
||||||
|
@ -85,32 +91,44 @@ ADM_COM_RX = 41 'com: zeichen empfangen
|
||||||
|
|
||||||
adm_m_run = 50 'plx: polling aktivieren
|
adm_m_run = 50 'plx: polling aktivieren
|
||||||
adm_m_halt = 51 'plx: polling anhalten
|
adm_m_halt = 51 'plx: polling anhalten
|
||||||
adm_m_setctrl = 52
|
adm_m_in = 52
|
||||||
adm_m_in = 53
|
adm_m_out = 53
|
||||||
adm_m_out = 54
|
adm_m_adch = 54
|
||||||
adm_m_ad_ch = 55
|
adm_m_getreg = 55
|
||||||
adm_m_getreg = 56
|
adm_m_setreg = 56
|
||||||
adm_m_setreg = 57
|
adm_m_start = 57
|
||||||
adm_m_start = 58
|
adm_m_stop = 58
|
||||||
adm_m_stop = 59
|
adm_m_write = 59
|
||||||
adm_m_write = 60
|
adm_m_read = 60
|
||||||
adm_m_read = 61
|
adm_m_ping = 61
|
||||||
adm_m_ping = 62
|
adm_m_setadr = 62
|
||||||
adm_m_joy = 63
|
adm_m_joy = 63
|
||||||
adm_m_paddle = 64
|
adm_m_paddle = 64
|
||||||
adm_m_pad = 65
|
adm_m_pad = 65
|
||||||
adm_m_setjoy = 66
|
adm_m_setjoy = 66
|
||||||
adm_m_setpad = 67
|
adm_m_setpad = 67
|
||||||
|
|
||||||
|
adm_m_chan = 70
|
||||||
|
adm_m_regclr = 71
|
||||||
|
adm_m_setvol = 72
|
||||||
|
adm_m_play = 73
|
||||||
|
adm_m_noteon = 74
|
||||||
|
adm_m_noteoff = 75
|
||||||
|
adm_m_setfreq = 76
|
||||||
|
adm_m_setwave = 77
|
||||||
|
adm_m_setpw = 78
|
||||||
|
adm_m_setadsr = 79
|
||||||
|
adm_m_setres = 80
|
||||||
|
adm_m_setcoff = 81
|
||||||
|
adm_m_setfmask = 82
|
||||||
|
adm_m_setftype = 83
|
||||||
|
adm_m_ringmod = 84
|
||||||
|
adm_m_sync = 85
|
||||||
|
|
||||||
adm_m_getspec = 97 'spezifikation abfragen
|
adm_m_getspec = 97 'spezifikation abfragen
|
||||||
adm_m_getver = 98 'codeversion abfragen
|
adm_m_getver = 98 'codeversion abfragen
|
||||||
adm_m_reboot = 99 'neu starten
|
adm_m_reboot = 99 'neu starten
|
||||||
|
|
||||||
'plexbus
|
|
||||||
adm_sda = 19 'i2c-datenpin
|
|
||||||
adm_scl = 20 'i2c-clockpin
|
|
||||||
adm_int1 = 21 'interrupt port 1&2
|
|
||||||
adm_int2 = 22 'interrupt port 3
|
|
||||||
|
|
||||||
|
|
||||||
con ' bellatrix-funktionen
|
con ' bellatrix-funktionen
|
||||||
|
|
132
lib/reg-ios.spin
132
lib/reg-ios.spin
|
@ -28,6 +28,7 @@ Administra
|
||||||
scr : Screeninterface
|
scr : Screeninterface
|
||||||
hss : Hydra-Soundsystem
|
hss : Hydra-Soundsystem
|
||||||
sfx : Sound-FX
|
sfx : Sound-FX
|
||||||
|
plx : Gamedevices & Plexbus
|
||||||
|
|
||||||
Bellatrix
|
Bellatrix
|
||||||
key : Keyboardroutinen
|
key : Keyboardroutinen
|
||||||
|
@ -484,7 +485,7 @@ PUB admload(stradr)|dmu 'chip-mgr: neuen adminis
|
||||||
''busprotokoll : [096][sub_putstr.fn]
|
''busprotokoll : [096][sub_putstr.fn]
|
||||||
'' : fn - dateiname des neuen administra-codes
|
'' : fn - dateiname des neuen administra-codes
|
||||||
|
|
||||||
bus_putchar1(gc#a_mgrALoad) 'aktuelles userdir retten
|
bus_putchar1(gc#a_mgrALoad)
|
||||||
bus_putstr1(stradr)
|
bus_putstr1(stradr)
|
||||||
waitcnt(cnt + clkfreq*3) 'warte bis administra fertig ist
|
waitcnt(cnt + clkfreq*3) 'warte bis administra fertig ist
|
||||||
|
|
||||||
|
@ -1035,6 +1036,19 @@ PUB rtcTest: available 'Test if RTC Chip is ava
|
||||||
|
|
||||||
CON ''------------------------------------------------- LAN_FUNKTIONEN
|
CON ''------------------------------------------------- LAN_FUNKTIONEN
|
||||||
|
|
||||||
|
PUB lan_txflush(handleidx)
|
||||||
|
''funktionsgruppe : lan
|
||||||
|
''funktion : Warten, bis Sendepuffer geleert ist
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : -
|
||||||
|
''busprotokoll : [070][put.handleidx][get.ok]
|
||||||
|
'' : handleidx - lfd. Nr. der Verbindung
|
||||||
|
'' : ok - Sendepuffer leer (Wert egal)
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_lanTXFlush)
|
||||||
|
bus_putchar1(handleidx)
|
||||||
|
bus_getchar1
|
||||||
|
|
||||||
PUB lanstart 'LAN starten
|
PUB lanstart 'LAN starten
|
||||||
''funktionsgruppe : lan
|
''funktionsgruppe : lan
|
||||||
''funktion : Netzwerk starten
|
''funktion : Netzwerk starten
|
||||||
|
@ -1074,16 +1088,18 @@ PUB lan_connect(ipaddr, remoteport): handleidx
|
||||||
bus_putword1(remoteport)
|
bus_putword1(remoteport)
|
||||||
handleidx := bus_getchar1
|
handleidx := bus_getchar1
|
||||||
|
|
||||||
PUB lan_listen(port): handleidx
|
PUB lan_listen(oldhandleidx, port): handleidx
|
||||||
''funktionsgruppe : lan
|
''funktionsgruppe : lan
|
||||||
''funktion : Port für eingehende TCP-Verbindung öffnen
|
''funktion : Port für eingehende TCP-Verbindung öffnen
|
||||||
''eingabe : -
|
''eingabe : -
|
||||||
''ausgabe : -
|
''ausgabe : -
|
||||||
''busprotokoll : [074][sub_putword.port][get.handleidx]
|
''busprotokoll : [074][put.handleidx][sub_putword.port][get.handleidx]
|
||||||
'' : port - zu öffnende Portnummer
|
'' : oldhandleidx - lfd. Nr. der bestehenden Verbindung ($FF wenn neu)
|
||||||
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
'' : port - zu öffnende Portnummer
|
||||||
|
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
||||||
|
|
||||||
bus_putchar1(gc#a_lanListen)
|
bus_putchar1(gc#a_lanListen)
|
||||||
|
bus_putchar1(oldhandleidx)
|
||||||
bus_putword1(port)
|
bus_putword1(port)
|
||||||
handleidx := bus_getchar1
|
handleidx := bus_getchar1
|
||||||
|
|
||||||
|
@ -1493,22 +1509,22 @@ PUB sid_sdmpplay(stradr): err 'sid: dmp-datei stereo a
|
||||||
bus_putstr1(stradr)
|
bus_putstr1(stradr)
|
||||||
err := bus_getchar1
|
err := bus_getchar1
|
||||||
|
|
||||||
PUB sid_dmpstop
|
PUB sid_dmpstop 'sid: dmp-player anhalten
|
||||||
bus_putchar1(gc#a_s_dmpstop)
|
bus_putchar1(gc#a_s_dmpstop)
|
||||||
|
|
||||||
PUB sid_dmppause
|
PUB sid_dmppause 'sid: dmp-player pausieren
|
||||||
bus_putchar1(gc#a_s_dmppause)
|
bus_putchar1(gc#a_s_dmppause)
|
||||||
|
|
||||||
PUB sid_dmpstatus: status
|
PUB sid_dmpstatus: status 'sid: dmp-player status abfragen
|
||||||
bus_putchar1(gc#a_s_dmpstatus)
|
bus_putchar1(gc#a_s_dmpstatus)
|
||||||
status := bus_getchar1
|
status := bus_getchar1
|
||||||
|
|
||||||
PUB sid_dmppos: wert
|
PUB sid_dmppos: wert 'sid: dmp-player playposition abfragen
|
||||||
bus_putchar1(gc#a_s_dmppos)
|
bus_putchar1(gc#a_s_dmppos)
|
||||||
wert := bus_getlong1
|
wert := bus_getlong1
|
||||||
bus_getlong1
|
bus_getlong1
|
||||||
|
|
||||||
PUB sid_dmplen: wert
|
PUB sid_dmplen: wert 'sid: dmp-datei länge abfragen
|
||||||
bus_putchar1(gc#a_s_dmppos)
|
bus_putchar1(gc#a_s_dmppos)
|
||||||
bus_getlong1
|
bus_getlong1
|
||||||
wert := bus_getlong1
|
wert := bus_getlong1
|
||||||
|
@ -1726,6 +1742,98 @@ PUB com_rx:char 'com: zeichen empfangen
|
||||||
bus_putchar1(gc#a_comRx)
|
bus_putchar1(gc#a_comRx)
|
||||||
char := bus_getchar1
|
char := bus_getchar1
|
||||||
|
|
||||||
|
CON ''------------------------------------------------- Plexbus und Gamedevices
|
||||||
|
|
||||||
|
PUB plxrun 'plx: bus freigeben, poller starten
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxRun)
|
||||||
|
|
||||||
|
PUB plxhalt 'plx: bus anfordern, poller anhalten
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxHalt)
|
||||||
|
|
||||||
|
PUB plxin(adr):wert 'plx: port einlesen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxIn)
|
||||||
|
bus_putchar1(adr)
|
||||||
|
wert := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxout(adr,wert) 'plx: port ausgeben
|
||||||
|
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxOut)
|
||||||
|
bus_putchar1(adr)
|
||||||
|
bus_putchar1(wert)
|
||||||
|
|
||||||
|
PUB plxch(adr,chan):wert 'plx: ad-wandlerkanal abfragen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxCh)
|
||||||
|
bus_putchar1(adr)
|
||||||
|
bus_putchar1(chan)
|
||||||
|
wert := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxgetreg(regnr):wert 'plx: poller-register lesen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxGetReg)
|
||||||
|
bus_putchar1(regnr)
|
||||||
|
wert := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxsetreg(regnr,wert) 'plx: poller-register schreiben
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxSetReg)
|
||||||
|
bus_putchar1(regnr)
|
||||||
|
bus_putchar1(wert)
|
||||||
|
|
||||||
|
PUB plxstart 'plx: i2c-dialog starten
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxStart)
|
||||||
|
|
||||||
|
PUB plxstop 'plx: i2c-dialog beenden
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxStop)
|
||||||
|
|
||||||
|
PUB plxwrite(wert):ack 'plx: i2c byte schreiben
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxWrite)
|
||||||
|
bus_putchar1(wert)
|
||||||
|
ack := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxread(ack):wert 'plx: i2c byte lesen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxRead)
|
||||||
|
bus_putchar1(ack)
|
||||||
|
wert := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxping(adr):ack 'plx: device abfragen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxPing)
|
||||||
|
bus_putchar1(adr)
|
||||||
|
ack := bus_getchar1
|
||||||
|
|
||||||
|
PUB plxsetadr(adradda,adrport) 'plx: adressen adda/port für poller setzen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_plxSetAdr)
|
||||||
|
bus_putchar1(adradda)
|
||||||
|
bus_putchar1(adrport)
|
||||||
|
|
||||||
|
PUB joy:wert 'game: joystick abfragen
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_Joy)
|
||||||
|
wert := bus_getchar1
|
||||||
|
|
||||||
|
PUB paddle:wert 'game: paddle abfrage
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_Paddle)
|
||||||
|
wert := wert + bus_getchar1 << 8
|
||||||
|
wert := wert + bus_getchar1
|
||||||
|
|
||||||
|
PUB pad:wert 'game: pad abfrage
|
||||||
|
|
||||||
|
bus_putchar1(gc#a_Pad)
|
||||||
|
wert := wert + bus_getchar1 << 16
|
||||||
|
wert := wert + bus_getchar1 << 8
|
||||||
|
wert := wert + bus_getchar1
|
||||||
|
|
||||||
OBJ '' B E L L A T R I X
|
OBJ '' B E L L A T R I X
|
||||||
|
|
||||||
CON ''------------------------------------------------- CHIP-MANAGMENT
|
CON ''------------------------------------------------- CHIP-MANAGMENT
|
||||||
|
@ -1950,6 +2058,10 @@ PUB printcstr(eadr) | i,len 'screen: bildschirmausga
|
||||||
eadr++
|
eadr++
|
||||||
bus_putchar2(ram_rdbyte(1,eadr))
|
bus_putchar2(ram_rdbyte(1,eadr))
|
||||||
|
|
||||||
|
PUB printblk(stringptr,strlen) 'screen: bildschirmausgabe eines strings definierter länge
|
||||||
|
|
||||||
|
repeat strlen
|
||||||
|
bus_putchar2(byte[stringptr++])
|
||||||
|
|
||||||
PUB printdec(value) | i 'screen: dezimalen zahlenwert auf bildschirm ausgeben
|
PUB printdec(value) | i 'screen: dezimalen zahlenwert auf bildschirm ausgeben
|
||||||
{{printdec(value) - screen: dezimale bildschirmausgabe zahlenwertes}}
|
{{printdec(value) - screen: dezimale bildschirmausgabe zahlenwertes}}
|
||||||
|
|
2
make.bat
2
make.bat
|
@ -28,7 +28,7 @@ REM ----------------------------------------------------------------
|
||||||
REM Flashdateien erzeugen
|
REM Flashdateien erzeugen
|
||||||
REM --> \bin\flash
|
REM --> \bin\flash
|
||||||
|
|
||||||
%BSTC% -L %libpath% %D% -D __ADM_FAT -D __ADM_HSS -D __ADM_HSS_PLAY -D __ADM_WAV -D __ADM_RTC -D __ADM_COM -b -O a .\flash\administra\admflash.spin
|
%BSTC% -L %libpath% %D% -D __ADM_FAT -D __ADM_HSS -D __ADM_HSS_PLAY -D __ADM_WAV -D __ADM_RTC -D __ADM_COM -D __ADM_PLX -b -O a .\flash\administra\admflash.spin
|
||||||
copy admflash.binary %flash%
|
copy admflash.binary %flash%
|
||||||
move admflash.binary %sdsys%\admsys.adm
|
move admflash.binary %sdsys%\admsys.adm
|
||||||
|
|
||||||
|
|
2
make.sh
2
make.sh
|
@ -25,7 +25,7 @@ mkdir ${flash}
|
||||||
# Flashdateien erzeugen
|
# Flashdateien erzeugen
|
||||||
# --> bin/flash
|
# --> bin/flash
|
||||||
|
|
||||||
${BSTC} -L ${libpath} ${D} -D __ADM_FAT -D __ADM_HSS -D __ADM_HSS_PLAY -D __ADM_WAV -D __ADM_RTC -D __ADM_COM -b -O a flash/administra/admflash.spin
|
${BSTC} -L ${libpath} ${D} -D __ADM_FAT -D __ADM_HSS -D __ADM_HSS_PLAY -D __ADM_WAV -D __ADM_RTC -D __ADM_COM -D __ADM_PLX -b -O a flash/administra/admflash.spin
|
||||||
cp admflash.binary ${flash}
|
cp admflash.binary ${flash}
|
||||||
mv admflash.binary ${sdsys}/admsys.adm
|
mv admflash.binary ${sdsys}/admsys.adm
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# Definitionen
|
||||||
|
VERSION="57-Network-1.5"
|
||||||
|
|
||||||
|
# Pfade
|
||||||
|
ARCHIV="HIVE-TriOS-R${VERSION}"
|
||||||
|
MAKE="./make.sh"
|
||||||
|
BIN="Bin"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# Alte Versionen löschen
|
||||||
|
|
||||||
|
rm -rf ../${BIN}
|
||||||
|
rm -f "../${ARCHIV}-bin.zip"
|
||||||
|
rm -f "../${ARCHIV}-src.zip"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# Binaries erstellen
|
||||||
|
|
||||||
|
${MAKE}
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# Archive erstellen
|
||||||
|
|
||||||
|
mkdir -p .tmp/doku
|
||||||
|
for file in *.md ; do cp "$file" .tmp/"${file/.md}".txt ; done
|
||||||
|
for file in doku/*.md ; do cp "$file" .tmp/"${file/.md}".txt ; done
|
||||||
|
cd .tmp
|
||||||
|
zip -r9 ../../${ARCHIV}-bin.zip *
|
||||||
|
zip -r9 ../../${ARCHIV}-src.zip *
|
||||||
|
cd ..
|
||||||
|
rm -rf .tmp
|
||||||
|
|
||||||
|
zip -r9 ../${ARCHIV}-src.zip flash forth lib system make*
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
zip -r9 ${ARCHIV}-bin.zip ${BIN}
|
|
@ -18,21 +18,23 @@ Funktion :
|
||||||
Komponenten : -
|
Komponenten : -
|
||||||
COG's : -
|
COG's : -
|
||||||
Logbuch :
|
Logbuch :
|
||||||
|
|
||||||
|
27-04-2013-dr235 - erste version
|
||||||
|
01-11-2013-dr235 - redraw/geschwindigkeit verbessert
|
||||||
|
- div. kleine Optimierungen und Detailverbesserungen
|
||||||
|
|
||||||
Kommandoliste :
|
Kommandoliste :
|
||||||
Notizen :
|
Notizen :
|
||||||
|
|
||||||
- view nach f9
|
|
||||||
- tab in wbox
|
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
|
||||||
OBJ
|
OBJ
|
||||||
|
|
||||||
ios : "reg-ios"
|
ios : "reg-ios"
|
||||||
dlbox[2] : "gui-dlbox"
|
dlbox[2] : "gui-dlbox" 'die beiden dateifenster
|
||||||
pbar : "gui-pbar"
|
pbar : "gui-pbar" 'progress-bar
|
||||||
wbox : "gui-wbox"
|
wbox : "gui-wbox" 'warnbox
|
||||||
input : "gui-input"
|
input : "gui-input" 'eingabedialog
|
||||||
fm : "fm-con"
|
fm : "fm-con"
|
||||||
gc : "glob-con"
|
gc : "glob-con"
|
||||||
str : "glob-string"
|
str : "glob-string"
|
||||||
|
@ -53,51 +55,48 @@ VAR
|
||||||
byte w_pos[2] 'positionen im fenster
|
byte w_pos[2] 'positionen im fenster
|
||||||
byte w_view[2] 'startposition des fensters
|
byte w_view[2] 'startposition des fensters
|
||||||
byte w_cols[2] 'anzahl der spalten im fenster
|
byte w_cols[2] 'anzahl der spalten im fenster
|
||||||
byte w_drives[2] 'zugeordnete drives
|
|
||||||
|
|
||||||
byte w0_list[fm#MAX_BUFFER] 'aktuelles verzeichnis
|
byte w0_list[fm#MAX_BUFFER] 'verzeichnisliste sdcard
|
||||||
byte w0_flags[fm#MAX_FILES] 'selected, directory usw.
|
byte w0_flags[fm#MAX_FILES] 'flags (selktiert, typ)
|
||||||
long w0_len[fm#MAX_FILES] 'dateilängen
|
long w0_len[fm#MAX_FILES] 'dateilängen
|
||||||
byte w0_number 'anzahl der files
|
byte w0_number 'anzahl der dateien
|
||||||
|
|
||||||
byte w1_list[fm#MAX_BUFFER]
|
byte w1_list[fm#MAX_BUFFER] 'verzeichnisliste ramdrive
|
||||||
byte w1_flags[fm#MAX_FILES]
|
byte w1_flags[fm#MAX_FILES] 'flags
|
||||||
long w1_len[fm#MAX_FILES]
|
long w1_len[fm#MAX_FILES] 'dateilängen
|
||||||
byte w1_number
|
byte w1_number 'anzahl der dateien
|
||||||
|
|
||||||
PUB main | key
|
PUB main | key
|
||||||
|
|
||||||
init
|
init
|
||||||
dlbox[0].focus
|
|
||||||
dlbox[0].draw
|
|
||||||
dlbox[1].draw
|
|
||||||
info_print
|
|
||||||
|
|
||||||
repeat
|
repeat
|
||||||
key := ios.keywait
|
key := ios.keywait
|
||||||
case key
|
case key
|
||||||
gc#KEY_CURUP: f_curup
|
gc#KEY_CURUP: f_curup
|
||||||
gc#KEY_CURDOWN: f_curdown
|
gc#KEY_CURDOWN: f_curdown
|
||||||
gc#KEY_CURLEFT: f_curleft
|
gc#KEY_CURLEFT: f_curleft
|
||||||
gc#KEY_CURRIGHT: f_curright
|
gc#KEY_CURRIGHT: f_curright
|
||||||
gc#KEY_PAGEUP: f_pageup
|
gc#KEY_PAGEUP: f_pageup
|
||||||
gc#KEY_PAGEDOWN: f_pagedown
|
gc#KEY_PAGEDOWN: f_pagedown
|
||||||
gc#KEY_RETURN: f_open
|
gc#KEY_RETURN: f_open
|
||||||
gc#KEY_BS: f_back
|
gc#KEY_BS: f_back
|
||||||
gc#KEY_SPACE: f_select
|
gc#KEY_SPACE: f_select
|
||||||
gc#KEY_ESC:
|
gc#KEY_ESC: f_menu
|
||||||
gc#KEY_TAB: f_focus
|
gc#KEY_TAB: f_focus
|
||||||
gc#KEY_POS1: f_pos1
|
gc#KEY_POS1: f_pos1
|
||||||
gc#KEY_F01: f_view
|
gc#KEY_F01: f_view
|
||||||
gc#KEY_F02: f_del
|
gc#KEY_F02: f_del
|
||||||
gc#KEY_F03: f_load
|
gc#KEY_F03: f_load
|
||||||
gc#KEY_F04: f_save
|
gc#KEY_F04: f_save
|
||||||
gc#KEY_F05: f_empty
|
gc#KEY_F05: f_empty
|
||||||
gc#KEY_F06: f_mount
|
gc#KEY_F06: f_mount
|
||||||
gc#KEY_F07: f_mkdir
|
gc#KEY_F07: f_mkdir
|
||||||
gc#KEY_F08: f_selall
|
gc#KEY_F08: f_selall
|
||||||
gc#KEY_F09: f_full
|
gc#KEY_F09: f_full
|
||||||
gc#KEY_F10: f_quit
|
gc#KEY_F10: f_quit
|
||||||
|
"m": f_menu
|
||||||
|
"q": f_quit
|
||||||
|
|
||||||
|
|
||||||
PRI init
|
PRI init
|
||||||
|
|
||||||
|
@ -112,8 +111,6 @@ PRI init
|
||||||
w_view[0] := w_view[1] := 0
|
w_view[0] := w_view[1] := 0
|
||||||
w_cols[0] := (fm#W1X2-fm#W1X1)/(fm#MAX_LEN+2)
|
w_cols[0] := (fm#W1X2-fm#W1X1)/(fm#MAX_LEN+2)
|
||||||
w_cols[1] := (fm#W2X2-fm#W2X1)/(fm#MAX_LEN+2)
|
w_cols[1] := (fm#W2X2-fm#W2X1)/(fm#MAX_LEN+2)
|
||||||
w_drives[0] := fm#DR_SD
|
|
||||||
w_drives[1] := fm#DR_RAM
|
|
||||||
fname[0] := 0
|
fname[0] := 0
|
||||||
|
|
||||||
frame_draw
|
frame_draw
|
||||||
|
@ -128,19 +125,24 @@ PRI init
|
||||||
wbox.define(5,fm#W4X1,fm#W4Y1,fm#W4X2,fm#W4Y2)
|
wbox.define(5,fm#W4X1,fm#W4Y1,fm#W4X2,fm#W4Y2)
|
||||||
input.define(6,fm#W4X1,fm#W4Y1,fm#W4X2,fm#W4Y2,12)
|
input.define(6,fm#W4X1,fm#W4Y1,fm#W4X2,fm#W4Y2,12)
|
||||||
|
|
||||||
|
dlbox[0].focus
|
||||||
|
dlbox[0].draw
|
||||||
|
dlbox[1].draw
|
||||||
|
info_print
|
||||||
|
|
||||||
PRI f_mount
|
|
||||||
|
PRI f_mount 'fkt: mount/unmount sd-card
|
||||||
|
|
||||||
if fl_mounted
|
if fl_mounted
|
||||||
ios.sdunmount
|
ios.sdunmount
|
||||||
repeat
|
repeat
|
||||||
wbox.draw(@str5,@str2,@str3) == 1
|
wbox.draw(@str5,@str2,@str6)
|
||||||
while ios.sdmount
|
while ios.sdmount
|
||||||
dlbox[0].draw
|
dlbox[0].draw
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_mkdir
|
PRI f_mkdir 'fkt: verzeichnis erstellen
|
||||||
|
|
||||||
ios.sdnewdir(input.draw(string("Name eingeben : ")))
|
ios.sdnewdir(input.draw(string("Name eingeben : ")))
|
||||||
w0_clrlist
|
w0_clrlist
|
||||||
|
@ -149,22 +151,24 @@ PRI f_mkdir
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_selall | i
|
PRI f_selall | i 'fkt: alle dateien im verzeichnis selektieren
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
case w_sel
|
case w_sel
|
||||||
0: repeat w0_number
|
0: i := 2 'std-einträge . .. auslassen
|
||||||
|
repeat w0_number
|
||||||
w0_flags[i++] ^= fm#FL_SEL
|
w0_flags[i++] ^= fm#FL_SEL
|
||||||
1: repeat w1_number
|
1: i := 0
|
||||||
|
repeat w1_number
|
||||||
w1_flags[i++] ^= fm#FL_SEL
|
w1_flags[i++] ^= fm#FL_SEL
|
||||||
dlbox[w_sel].redraw
|
dlbox[w_sel].redraw
|
||||||
|
|
||||||
PRI f_pos1
|
PRI f_pos1 'fkt: homeposition im fenster
|
||||||
|
|
||||||
w_pos[w_sel] := 0
|
w_pos[w_sel] := 0
|
||||||
dlbox[w_sel].setpos(w_pos[w_sel])
|
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||||
|
|
||||||
PRI f_full
|
PRI f_full 'fkt: fenster maximieren
|
||||||
|
|
||||||
if w_sel
|
if w_sel
|
||||||
dlbox[1].defocus
|
dlbox[1].defocus
|
||||||
|
@ -181,7 +185,7 @@ PRI f_full
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
w_sel := 0
|
w_sel := 0
|
||||||
|
|
||||||
PRI f_open
|
PRI f_open 'fkt: verzeichnis öffnen
|
||||||
|
|
||||||
'nur fenster 1 und verzeichnisse
|
'nur fenster 1 und verzeichnisse
|
||||||
if (w_sel == 0) & (w0_flags[w_view[w_sel] + w_pos[w_sel]] & fm#FL_DIR)
|
if (w_sel == 0) & (w0_flags[w_view[w_sel] + w_pos[w_sel]] & fm#FL_DIR)
|
||||||
|
@ -191,7 +195,7 @@ PRI f_open
|
||||||
dlbox[w_sel].draw
|
dlbox[w_sel].draw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_back
|
PRI f_back 'fkt: verzeichnisebene zurück
|
||||||
|
|
||||||
ios.sdchdir(string(".."))
|
ios.sdchdir(string(".."))
|
||||||
w0_clrlist
|
w0_clrlist
|
||||||
|
@ -199,7 +203,7 @@ PRI f_back
|
||||||
dlbox[w_sel].redraw
|
dlbox[w_sel].redraw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_curup
|
PRI f_curup 'fkt: cursor hoch
|
||||||
|
|
||||||
if w_pos[w_sel] > 1
|
if w_pos[w_sel] > 1
|
||||||
w_pos[w_sel] -= dlbox[w_sel].getcols
|
w_pos[w_sel] -= dlbox[w_sel].getcols
|
||||||
|
@ -207,7 +211,7 @@ PRI f_curup
|
||||||
info_print
|
info_print
|
||||||
dir := 0
|
dir := 0
|
||||||
|
|
||||||
PRI f_curdown
|
PRI f_curdown 'fkt: cursor runter
|
||||||
|
|
||||||
if w_pos[w_sel] < (fm#WROWS * w_cols[w_sel] - dlbox[w_sel].getcols)
|
if w_pos[w_sel] < (fm#WROWS * w_cols[w_sel] - dlbox[w_sel].getcols)
|
||||||
w_pos[w_sel] += dlbox[w_sel].getcols
|
w_pos[w_sel] += dlbox[w_sel].getcols
|
||||||
|
@ -215,7 +219,7 @@ PRI f_curdown
|
||||||
info_print
|
info_print
|
||||||
dir := 1
|
dir := 1
|
||||||
|
|
||||||
PRI f_curleft
|
PRI f_curleft 'fkt: cursor links
|
||||||
|
|
||||||
if w_pos[w_sel]
|
if w_pos[w_sel]
|
||||||
w_pos[w_sel]--
|
w_pos[w_sel]--
|
||||||
|
@ -223,7 +227,7 @@ PRI f_curleft
|
||||||
info_print
|
info_print
|
||||||
dir := 0
|
dir := 0
|
||||||
|
|
||||||
PRI f_curright
|
PRI f_curright 'fkt: cursor rechts
|
||||||
|
|
||||||
if w_pos[w_sel] < (fm#WROWS * w_cols[w_sel] - 1)
|
if w_pos[w_sel] < (fm#WROWS * w_cols[w_sel] - 1)
|
||||||
w_pos[w_sel]++
|
w_pos[w_sel]++
|
||||||
|
@ -231,7 +235,7 @@ PRI f_curright
|
||||||
info_print
|
info_print
|
||||||
dir := 1
|
dir := 1
|
||||||
|
|
||||||
PRI f_pageup
|
PRI f_pageup 'fkt: seite zurück
|
||||||
|
|
||||||
if (w_view[w_sel] - fm#WROWS * w_cols[w_sel]) => 0
|
if (w_view[w_sel] - fm#WROWS * w_cols[w_sel]) => 0
|
||||||
w_view[w_sel] -= fm#WROWS * w_cols[w_sel]
|
w_view[w_sel] -= fm#WROWS * w_cols[w_sel]
|
||||||
|
@ -240,7 +244,7 @@ PRI f_pageup
|
||||||
w_pos[w_sel] := fm#WROWS * w_cols[w_sel] - 1
|
w_pos[w_sel] := fm#WROWS * w_cols[w_sel] - 1
|
||||||
dlbox[w_sel].setpos(w_pos[w_sel])
|
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||||
|
|
||||||
PRI f_pagedown | number
|
PRI f_pagedown | number 'fkt: seite weiter
|
||||||
|
|
||||||
case w_sel
|
case w_sel
|
||||||
0: number := w0_number
|
0: number := w0_number
|
||||||
|
@ -252,18 +256,22 @@ PRI f_pagedown | number
|
||||||
w_pos[w_sel] := 0
|
w_pos[w_sel] := 0
|
||||||
dlbox[w_sel].setpos(w_pos[w_sel])
|
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||||
|
|
||||||
PRI f_select | i
|
PRI f_select | i 'fkt: datei selektieren
|
||||||
|
|
||||||
i := w_view[w_sel] + w_pos[w_sel]
|
i := w_view[w_sel] + w_pos[w_sel]
|
||||||
|
'flag in liste setzen
|
||||||
case w_sel
|
case w_sel
|
||||||
0: w0_flags[i] ^= fm#FL_SEL
|
0: w0_flags[i] ^= fm#FL_SEL
|
||||||
1: w1_flags[i] ^= fm#FL_SEL
|
1: w1_flags[i] ^= fm#FL_SEL
|
||||||
dlbox[w_sel].redraw
|
'aktuelle position neu zeichnen
|
||||||
|
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||||
|
'cursor bewegen
|
||||||
case dir
|
case dir
|
||||||
0: f_curleft
|
0: f_curleft
|
||||||
1: f_curright
|
1: f_curright
|
||||||
|
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||||
|
|
||||||
PRI f_focus
|
PRI f_focus 'fkt: fokus auf anderes fenster
|
||||||
|
|
||||||
ifnot fl_full
|
ifnot fl_full
|
||||||
dlbox[w_sel].defocus
|
dlbox[w_sel].defocus
|
||||||
|
@ -274,14 +282,27 @@ ifnot fl_full
|
||||||
dlbox[w_sel].focus
|
dlbox[w_sel].focus
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_quit
|
PRI f_quit 'fkt: fm beenden
|
||||||
|
|
||||||
ios.sddmset(ios#DM_USER) 'regime soll in diesem verzeichnis landen
|
if wbox.draw(@str7,@str3,@str2) == 2
|
||||||
ios.winset(0)
|
ios.sddmset(ios#DM_USER) 'regime soll in diesem verzeichnis landen
|
||||||
ios.screeninit
|
ios.winset(0)
|
||||||
ios.stop
|
ios.screeninit
|
||||||
|
ios.stop
|
||||||
|
else
|
||||||
|
dlbox[0].draw
|
||||||
|
dlbox[1].draw
|
||||||
|
info_print
|
||||||
|
|
||||||
PRI f_load | i
|
PRI f_menu 'fkt: extra-menü aufrufen
|
||||||
|
|
||||||
|
wbox.draw(string("Menü: Nicht implementiert!"),string("ok"),@str6)
|
||||||
|
dlbox[0].draw
|
||||||
|
dlbox[1].draw
|
||||||
|
info_print
|
||||||
|
|
||||||
|
|
||||||
|
PRI f_load | i 'fkt: sdcard --> ramdrive
|
||||||
|
|
||||||
pbar.setmaxbar(w0_number)
|
pbar.setmaxbar(w0_number)
|
||||||
i := 0
|
i := 0
|
||||||
|
@ -297,7 +318,7 @@ PRI f_load | i
|
||||||
dlbox[0].draw
|
dlbox[0].draw
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
|
|
||||||
PRI f_save | i
|
PRI f_save | i 'fkt: ramdrive --> sdcard
|
||||||
|
|
||||||
pbar.setmaxbar(w1_number)
|
pbar.setmaxbar(w1_number)
|
||||||
i := 0
|
i := 0
|
||||||
|
@ -313,7 +334,7 @@ PRI f_save | i
|
||||||
dlbox[0].draw
|
dlbox[0].draw
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
|
|
||||||
PRI f_del | i
|
PRI f_del | i 'fkt: dateien löschen
|
||||||
|
|
||||||
if wbox.draw(@str1,@str2,@str3) == 1
|
if wbox.draw(@str1,@str2,@str3) == 1
|
||||||
pbar.setmaxbar(w0_number)
|
pbar.setmaxbar(w0_number)
|
||||||
|
@ -331,7 +352,7 @@ dlbox[0].draw
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI f_empty
|
PRI f_empty 'fkt: ramdrive löschen
|
||||||
|
|
||||||
if wbox.draw(@str4,@str2,@str3) == 1
|
if wbox.draw(@str4,@str2,@str3) == 1
|
||||||
ios.ram_wrlong(ios#sysmod,ios#SYSVAR,ios#RAMEND) 'Zeiger auf letzte freie Speicherzelle setzen
|
ios.ram_wrlong(ios#sysmod,ios#SYSVAR,ios#RAMEND) 'Zeiger auf letzte freie Speicherzelle setzen
|
||||||
|
@ -348,7 +369,13 @@ dlbox[w_sel].setview(w_view[1])
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
|
|
||||||
PRI f_view | n,stradr,ch,lch
|
PRI f_view 'fkt: textdatei anzeigen
|
||||||
|
|
||||||
|
case w_sel
|
||||||
|
0: f_view0
|
||||||
|
1: f_view1
|
||||||
|
|
||||||
|
PRI f_view0 | n,stradr,ch,lch 'fkt: texdatei von sd anzeigen
|
||||||
|
|
||||||
ios.winset(3)
|
ios.winset(3)
|
||||||
ios.curoff
|
ios.curoff
|
||||||
|
@ -370,7 +397,8 @@ PRI f_view | n,stradr,ch,lch
|
||||||
ios.sdclose
|
ios.sdclose
|
||||||
ios.printcls
|
ios.printcls
|
||||||
dlbox[0].redraw
|
dlbox[0].redraw
|
||||||
dlbox[1].redraw
|
ifnot fl_full
|
||||||
|
dlbox[1].redraw
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
lch := 0
|
lch := 0
|
||||||
|
@ -387,7 +415,49 @@ PRI f_view | n,stradr,ch,lch
|
||||||
dlbox[1].draw
|
dlbox[1].draw
|
||||||
info_print
|
info_print
|
||||||
|
|
||||||
PRI w0_clrlist | i
|
|
||||||
|
PRI f_view1 | n,stradr,fn,len,ch,lch 'fkt: textdatei von ramdrive anzeigen
|
||||||
|
|
||||||
|
ios.winset(3)
|
||||||
|
ios.curoff
|
||||||
|
ios.printcls
|
||||||
|
|
||||||
|
stradr := get_fname(w_view[w_sel] + w_pos[w_sel])
|
||||||
|
n := 1
|
||||||
|
lch := 0
|
||||||
|
fn := ios.rd_open(stradr) 'datei öffnen
|
||||||
|
ifnot fn == -1
|
||||||
|
len := ios.rd_len(fn)
|
||||||
|
repeat len 'text ausgeben
|
||||||
|
ch := ios.printchar(ios.rd_get(fn))
|
||||||
|
if ch == ios#CHAR_NL OR ch == $0a 'CR or NL
|
||||||
|
if ch == lch OR (lch <> ios#CHAR_NL AND lch <> $0a)
|
||||||
|
ios.printnl
|
||||||
|
lch := ch
|
||||||
|
if ++n == (fm#W3Y2 - 2)
|
||||||
|
n := 1
|
||||||
|
if ios.keywait == "q"
|
||||||
|
ios.rd_close(fn)
|
||||||
|
ios.printcls
|
||||||
|
dlbox[0].redraw
|
||||||
|
ifnot fl_full
|
||||||
|
dlbox[1].redraw
|
||||||
|
return
|
||||||
|
else
|
||||||
|
lch := 0
|
||||||
|
else
|
||||||
|
ios.printchar(ch)
|
||||||
|
lch := ch
|
||||||
|
ios.print(string(13,"[EOF]"))
|
||||||
|
ios.keywait
|
||||||
|
ios.sdclose 'datei schließen
|
||||||
|
|
||||||
|
ios.printcls
|
||||||
|
dlbox[0].draw
|
||||||
|
dlbox[1].draw
|
||||||
|
info_print
|
||||||
|
|
||||||
|
PRI w0_clrlist | i 'fenster 0: dateiliste löschen
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
repeat fm#MAX_FILES
|
repeat fm#MAX_FILES
|
||||||
|
@ -400,7 +470,7 @@ PRI w0_clrlist | i
|
||||||
i++
|
i++
|
||||||
|
|
||||||
|
|
||||||
PRI w1_clrlist | i
|
PRI w1_clrlist | i 'fenster 1: dateiliste löschen
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
repeat fm#MAX_FILES
|
repeat fm#MAX_FILES
|
||||||
|
@ -412,7 +482,7 @@ PRI w1_clrlist | i
|
||||||
w1_list[i] := " "
|
w1_list[i] := " "
|
||||||
i++
|
i++
|
||||||
|
|
||||||
PRI w0_readdir | stradr,i,j
|
PRI w0_readdir | stradr,i,j 'fenster 0: dateiliste einlesen
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
ios.sddir
|
ios.sddir
|
||||||
|
@ -429,10 +499,11 @@ PRI w0_readdir | stradr,i,j
|
||||||
|
|
||||||
w0_number := i
|
w0_number := i
|
||||||
|
|
||||||
PRI w1_readdir | stradr,i,j
|
PRI w1_readdir | stradr,i,j 'fenster 1: dateiliste einlesen
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
ios.rd_dir
|
ios.rd_dir
|
||||||
|
ios.rd_next 'ramdrive-label überspringen
|
||||||
repeat while (stradr := ios.rd_next)
|
repeat while (stradr := ios.rd_next)
|
||||||
j := 0
|
j := 0
|
||||||
repeat fm#MAX_LEN
|
repeat fm#MAX_LEN
|
||||||
|
@ -442,7 +513,7 @@ PRI w1_readdir | stradr,i,j
|
||||||
w1_len[i] := ios.rd_dlen
|
w1_len[i] := ios.rd_dlen
|
||||||
w1_number := i
|
w1_number := i
|
||||||
|
|
||||||
PRI get_fname(fnr):adrdat | i,stradr
|
PRI get_fname(fnr):adrdat | i,stradr 'datei: dateinamen aus liste holrn
|
||||||
|
|
||||||
i := fm#MAX_LEN * fnr
|
i := fm#MAX_LEN * fnr
|
||||||
case w_sel
|
case w_sel
|
||||||
|
@ -456,7 +527,7 @@ PRI get_fname(fnr):adrdat | i,stradr
|
||||||
fname[i] := 0
|
fname[i] := 0
|
||||||
return @fname
|
return @fname
|
||||||
|
|
||||||
PRI load(stradr) | len,fnr,i
|
PRI load(stradr) | len,fnr,i 'datei: datei --> ramdrive
|
||||||
|
|
||||||
ifnot ios.sdopen("r",stradr) 'datei öffnen
|
ifnot ios.sdopen("r",stradr) 'datei öffnen
|
||||||
len := ios.sdfattrib(ios#F_SIZE)
|
len := ios.sdfattrib(ios#F_SIZE)
|
||||||
|
@ -468,7 +539,7 @@ PRI load(stradr) | len,fnr,i
|
||||||
ios.sdclose
|
ios.sdclose
|
||||||
ios.rd_close(fnr)
|
ios.rd_close(fnr)
|
||||||
|
|
||||||
PRI save(stradr) | fnr,len,i
|
PRI save(stradr) | fnr,len,i 'datei: ramdrive --> datei
|
||||||
|
|
||||||
fnr := ios.rd_open(stradr)
|
fnr := ios.rd_open(stradr)
|
||||||
ifnot fnr == -1
|
ifnot fnr == -1
|
||||||
|
@ -481,7 +552,7 @@ PRI save(stradr) | fnr,len,i
|
||||||
ios.rd_close(fnr)
|
ios.rd_close(fnr)
|
||||||
|
|
||||||
|
|
||||||
PRI frame_draw
|
PRI frame_draw 'screen: bildschirmmaske ausgeben
|
||||||
|
|
||||||
ios.winset(0)
|
ios.winset(0)
|
||||||
ios.curoff
|
ios.curoff
|
||||||
|
@ -498,7 +569,7 @@ PRI frame_draw
|
||||||
ios.printq(string(" 1: View | 2: Del | 3: SD>>RAM ◀▶ 4: SD<<RAM | 5: RAM Clear "))
|
ios.printq(string(" 1: View | 2: Del | 3: SD>>RAM ◀▶ 4: SD<<RAM | 5: RAM Clear "))
|
||||||
ios.setcolor(fm#COL_DEFAULT)
|
ios.setcolor(fm#COL_DEFAULT)
|
||||||
|
|
||||||
PRI info_print | pos,len
|
PRI info_print | pos,len 'screen: infozeile ausgeben
|
||||||
|
|
||||||
pos := w_view[w_sel] + w_pos[w_sel]
|
pos := w_view[w_sel] + w_pos[w_sel]
|
||||||
case w_sel
|
case w_sel
|
||||||
|
@ -521,7 +592,7 @@ PRI info_print | pos,len
|
||||||
ios.printdec(ios.ram_getfree)
|
ios.printdec(ios.ram_getfree)
|
||||||
ios.print(string(" Bytes free"))
|
ios.print(string(" Bytes free"))
|
||||||
|
|
||||||
PRI testvideo 'passt div. variablen an videomodus an
|
PRI testvideo 'screen: passt div. variablen an videomodus an
|
||||||
|
|
||||||
vidmod := ios.belgetspec & 1
|
vidmod := ios.belgetspec & 1
|
||||||
rows := ios.belgetrows 'zeilenzahl bei bella abfragen
|
rows := ios.belgetrows 'zeilenzahl bei bella abfragen
|
||||||
|
@ -531,13 +602,15 @@ PRI pause(sec)
|
||||||
|
|
||||||
waitcnt(cnt+clkfreq*sec)
|
waitcnt(cnt+clkfreq*sec)
|
||||||
|
|
||||||
DAT
|
DAT 'strings
|
||||||
|
|
||||||
str1 byte "Dateien löschen?",0
|
str1 byte "Dateien löschen?",0
|
||||||
str2 byte "Ja",0
|
str2 byte "Ja",0
|
||||||
str3 byte "Nein",0
|
str3 byte "Nein",0
|
||||||
str4 byte "RAMDrive löschen?",0
|
str4 byte "RAMDrive löschen?",0
|
||||||
str5 byte "SD-Card mounten?",0
|
str5 byte "SD-Card mounten?",0
|
||||||
|
str6 byte 0
|
||||||
|
str7 byte "Programm beenden?",0
|
||||||
|
|
||||||
DAT
|
DAT
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ OBJ
|
||||||
str: "glob-string"
|
str: "glob-string"
|
||||||
num: "glob-numbers" 'Number Engine
|
num: "glob-numbers" 'Number Engine
|
||||||
gc : "glob-con"
|
gc : "glob-con"
|
||||||
led: "led-engine"
|
led: "glob-led-engine"
|
||||||
|
|
||||||
CON
|
CON
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ PUB main | i,n,len,ch,lch
|
||||||
repeat i from 0 to 3 'extender anhängen
|
repeat i from 0 to 3 'extender anhängen
|
||||||
byte[@parastr][len + i] := byte[@ext1][i]
|
byte[@parastr][len + i] := byte[@ext1][i]
|
||||||
byte[@parastr][len + i] := 0
|
byte[@parastr][len + i] := 0
|
||||||
|
ios.admsetsyssnd(0) 'systemklänge aus (nervt!)
|
||||||
ifnot ios.sdopen("r",@parastr)
|
ifnot ios.sdopen("r",@parastr)
|
||||||
repeat 'text ausgeben
|
repeat 'text ausgeben
|
||||||
ch := ios.sdgetc
|
ch := ios.sdgetc
|
||||||
|
@ -78,6 +79,7 @@ PUB main | i,n,len,ch,lch
|
||||||
'ios.print(string("Hilfetexte : ",$0d))
|
'ios.print(string("Hilfetexte : ",$0d))
|
||||||
cmd_dir_w(1)
|
cmd_dir_w(1)
|
||||||
ios.sdclose 'datei schließen
|
ios.sdclose 'datei schließen
|
||||||
|
ios.admsetsyssnd(1) 'systemklänge wieder ein
|
||||||
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
||||||
ios.stop
|
ios.stop
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,495 @@
|
||||||
|
{{
|
||||||
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ Autor: Ingo Kripahle │
|
||||||
|
│ Copyright (c) 2010 Ingo Kripahle │
|
||||||
|
│ See end of file for terms of use. │
|
||||||
|
│ Die Nutzungsbedingungen befinden sich am Ende der Datei │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
Informationen : hive-project.de
|
||||||
|
Kontakt : drohne235@googlemail.com
|
||||||
|
System : TriOS
|
||||||
|
Name : blexbus-tool
|
||||||
|
Chip : Regnatix
|
||||||
|
Typ : Programm
|
||||||
|
Version :
|
||||||
|
Subversion :
|
||||||
|
|
||||||
|
Logbuch :
|
||||||
|
|
||||||
|
31-10-2013-dr235 - erste version
|
||||||
|
|
||||||
|
Kommandoliste:
|
||||||
|
|
||||||
|
Notizen:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
OBJ
|
||||||
|
ios: "reg-ios"
|
||||||
|
num: "glob-numbers"
|
||||||
|
|
||||||
|
CON
|
||||||
|
|
||||||
|
_CLKMODE = XTAL1 + PLL16X
|
||||||
|
_XINFREQ = 5_000_000
|
||||||
|
|
||||||
|
OS_TIBLEN = 64 'gr??e des inputbuffers
|
||||||
|
|
||||||
|
|
||||||
|
VAR
|
||||||
|
'systemvariablen
|
||||||
|
byte tib[OS_TIBLEN] 'tastatur-input-buffer
|
||||||
|
byte cmdstr[OS_TIBLEN] 'kommandostring f?r interpreter
|
||||||
|
byte token1[OS_TIBLEN] 'parameterstring 1 für interpreter
|
||||||
|
byte token2[OS_TIBLEN] 'parameterstring 2 für interpreter
|
||||||
|
byte tibpos 'aktuelle position im tib
|
||||||
|
long ppos 'puffer für adresse
|
||||||
|
long pcnt 'puffer für zeilenzahl
|
||||||
|
|
||||||
|
byte device 'adresse des geöffneten devices
|
||||||
|
byte polling 'status polling
|
||||||
|
byte open 'status device
|
||||||
|
|
||||||
|
PUB main | wflag
|
||||||
|
|
||||||
|
ios.start 'ios initialisieren
|
||||||
|
polling := 1
|
||||||
|
ios.plxRun
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
' ios.print(string("Perplex - PlexBus-Tool - DR235",$0d,$0d))
|
||||||
|
|
||||||
|
repeat
|
||||||
|
os_cmdinput 'kommandoeingabe
|
||||||
|
os_cmdint 'kommandozeileninterpreter
|
||||||
|
|
||||||
|
PUB os_cmdinput | charc 'sys: stringeingabe eine zeile
|
||||||
|
''funktionsgruppe : sys
|
||||||
|
''funktion : stringeingabe eine zeile
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : -
|
||||||
|
''variablen : tib - eingabepuffer zur string
|
||||||
|
'' : tibpos - aktuelle position im tib
|
||||||
|
|
||||||
|
ios.print(@prompt2)
|
||||||
|
tibpos := 0 'tibposition auf anfang setzen
|
||||||
|
repeat until (charc := ios.keywait) == $0D 'tasten einlesen bis return
|
||||||
|
if (tibpos + 1) < OS_TIBLEN 'zeile noch nicht zu lang?
|
||||||
|
case charc
|
||||||
|
ios#CHAR_BS: 'backspace
|
||||||
|
if tibpos > 0 'noch nicht anfang der zeile erreeicht?
|
||||||
|
tib[tibpos--] := 0 'ein zeichen aus puffer entfernen
|
||||||
|
ios.printbs 'backspace an terminal senden
|
||||||
|
other: 'zeicheneingabe
|
||||||
|
tib[tibpos++] := charc 'zeichen speichern
|
||||||
|
ios.printchar(charc) 'zeichen ausgeben
|
||||||
|
ios.printnl
|
||||||
|
tib[tibpos] := 0 'string abschließen
|
||||||
|
tibpos := charc := 0 'werte rücksetzen
|
||||||
|
|
||||||
|
PUB os_nxtoken1: stradr 'sys: token 1 von tib einlesen
|
||||||
|
''funktionsgruppe : sys
|
||||||
|
''funktion : nächsten token im eingabestring suchen und stringzeiger übergeben
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : stradr - adresse auf einen string mit dem gefundenen token
|
||||||
|
''variablen : tib - eingabepuffer zur string
|
||||||
|
'' : tibpos - aktuelle position im tib
|
||||||
|
'' : token - tokenstring
|
||||||
|
|
||||||
|
stradr := os_tokenize(@token1)
|
||||||
|
|
||||||
|
PUB os_nxtoken2: stradr 'sys: token 2 von tib einlesen
|
||||||
|
''funktionsgruppe : sys
|
||||||
|
''funktion : nächsten token im eingabestring suchen und stringzeiger übergeben
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : stradr - adresse auf einen string mit dem gefundenen token
|
||||||
|
''variablen : tib - eingabepuffer zur string
|
||||||
|
'' : tibpos - aktuelle position im tib
|
||||||
|
'' : token - tokenstring
|
||||||
|
|
||||||
|
stradr := os_tokenize(@token2)
|
||||||
|
|
||||||
|
PUB os_tokenize(token):stradr | i 'sys: liest nächsten token aus tib
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
if tib[tibpos] <> 0 'abbruch bei leerem string
|
||||||
|
repeat until tib[tibpos] > ios#CHAR_SPACE 'führende leerzeichen ausbenden
|
||||||
|
tibpos++
|
||||||
|
repeat until (tib[tibpos] == ios#CHAR_SPACE) or (tib[tibpos] == 0) 'wiederholen bis leerzeichen oder stringende
|
||||||
|
byte[token][i] := tib[tibpos]
|
||||||
|
tibpos++
|
||||||
|
i++
|
||||||
|
else
|
||||||
|
token := 0
|
||||||
|
byte[token][i] := 0
|
||||||
|
stradr := token
|
||||||
|
|
||||||
|
PUB os_nextpos: tibpos2 'sys: setzt zeiger auf nächste position
|
||||||
|
''funktionsgruppe : sys
|
||||||
|
''funktion : tibpos auf nächstes token setzen
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : tibpos2 - position des nächsten tokens in tib
|
||||||
|
''variablen : tib - eingabepuffer zur string
|
||||||
|
'' : tibpos - aktuelle position im tib
|
||||||
|
|
||||||
|
if tib[tibpos] <> 0
|
||||||
|
repeat until tib[tibpos] > ios#CHAR_SPACE 'führende leerzeichen ausbenden
|
||||||
|
tibpos++
|
||||||
|
return tibpos
|
||||||
|
|
||||||
|
PUB os_cmdint 'sys: kommandointerpreter
|
||||||
|
''funktionsgruppe : sys
|
||||||
|
''funktion : kommandointerpreter; zeichenkette ab tibpos wird als kommando interpretiert
|
||||||
|
'' : tibpos wird auf position hinter token gesetzt
|
||||||
|
''eingabe : -
|
||||||
|
''ausgabe : -
|
||||||
|
''variablen : tib - eingabepuffer zur string
|
||||||
|
'' : tibpos - aktuelle position im tib
|
||||||
|
|
||||||
|
repeat 'kommandostring kopieren
|
||||||
|
cmdstr[tibpos] := tib[tibpos]
|
||||||
|
tibpos++
|
||||||
|
until (tib[tibpos] == ios#CHAR_SPACE) or (tib[tibpos] == 0) 'wiederholen bis leerzeichen oder stringende
|
||||||
|
cmdstr[tibpos] := 0 'kommandostring abschließen
|
||||||
|
os_cmdexec(@cmdstr) 'interpreter aufrufen
|
||||||
|
tibpos := 0 'tastaturpuffer zurücksetzen
|
||||||
|
tib[0] := 0
|
||||||
|
|
||||||
|
PUB os_cmdexec(stradr) 'sys: kommando im ?bergebenen string wird als kommando interpretiert
|
||||||
|
{{os_smdexec - das kommando im ?bergebenen string wird als kommando interpretiert
|
||||||
|
stradr: adresse einer stringvariable die ein kommando enth?lt}}
|
||||||
|
if strcomp(stradr,string("help")) 'help
|
||||||
|
ios.print(@help1)
|
||||||
|
elseif strcomp(stradr,string("open"))
|
||||||
|
plx_open
|
||||||
|
elseif strcomp(stradr,string("close"))
|
||||||
|
plx_close
|
||||||
|
elseif strcomp(stradr,string("put"))
|
||||||
|
plx_put
|
||||||
|
elseif strcomp(stradr,string("get"))
|
||||||
|
plx_get
|
||||||
|
elseif strcomp(stradr,string("map"))
|
||||||
|
plx_map
|
||||||
|
elseif strcomp(stradr,string("scan"))
|
||||||
|
plx_scan
|
||||||
|
elseif strcomp(stradr,string("test"))
|
||||||
|
plx_test
|
||||||
|
elseif strcomp(stradr,string("test#"))
|
||||||
|
plx_testnr
|
||||||
|
elseif strcomp(stradr,string("game"))
|
||||||
|
plx_game
|
||||||
|
elseif strcomp(stradr,string("setgame"))
|
||||||
|
plx_setgame
|
||||||
|
elseif strcomp(stradr,string("polloff"))
|
||||||
|
plx_polloff
|
||||||
|
elseif strcomp(stradr,string("pollon"))
|
||||||
|
plx_pollon
|
||||||
|
elseif strcomp(stradr,string("debug"))
|
||||||
|
plx_debug
|
||||||
|
elseif strcomp(stradr,string("status"))
|
||||||
|
plx_status
|
||||||
|
elseif strcomp(stradr,string("plexuswr"))
|
||||||
|
plx_plexuswr
|
||||||
|
elseif strcomp(stradr,string("bye"))
|
||||||
|
ios.stop
|
||||||
|
else 'kommando nicht gefunden
|
||||||
|
ios.print(stradr)
|
||||||
|
ios.print(@prompt3)
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI plx_debug|wert,i
|
||||||
|
|
||||||
|
' ios.plxOut($22,cnt)
|
||||||
|
|
||||||
|
' irgendwie funktionieren die direkten i2c-operationen noch nicht
|
||||||
|
' von administra aus funktioniert das gleiche konstrukt
|
||||||
|
' ???
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
repeat
|
||||||
|
ios.plxStart
|
||||||
|
ios.plxWrite($22 << 1)
|
||||||
|
ios.plxWrite(i++)
|
||||||
|
ios.plxStop
|
||||||
|
waitcnt(cnt+clkfreq/3)
|
||||||
|
ios.printhex(i,2)
|
||||||
|
ios.printchar(" ")
|
||||||
|
|
||||||
|
PRI plx_plexuswr|regadr,regval
|
||||||
|
|
||||||
|
device := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
regadr := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
regval := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
waitcnt(cnt+clkfreq)
|
||||||
|
|
||||||
|
ios.plxStart
|
||||||
|
ios.plxWrite(device << 1)
|
||||||
|
ios.plxWrite(regadr)
|
||||||
|
ios.plxWrite(regval)
|
||||||
|
ios.plxStop
|
||||||
|
|
||||||
|
waitcnt(cnt+clkfreq)
|
||||||
|
ios.plxRun
|
||||||
|
|
||||||
|
PRI plx_status
|
||||||
|
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string("Device : "))
|
||||||
|
ios.printhex(device,2)
|
||||||
|
if open
|
||||||
|
ios.print(string(" open"))
|
||||||
|
else
|
||||||
|
ios.print(string(" close"))
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string("Polling : "))
|
||||||
|
if polling
|
||||||
|
ios.print(string("ON"))
|
||||||
|
else
|
||||||
|
ios.print(string("OFF"))
|
||||||
|
ios.printnl
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
|
||||||
|
PRI plx_polloff
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
ios.print(string("Poller wurde angehalten!",$0d))
|
||||||
|
polling := 0
|
||||||
|
|
||||||
|
PRI plx_pollon
|
||||||
|
|
||||||
|
ios.plxRun
|
||||||
|
ios.print(string("Poller wurde gestartet!",$0d))
|
||||||
|
polling := 1
|
||||||
|
open := 0
|
||||||
|
|
||||||
|
PRI plx_game|dev,i
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
ios.curoff
|
||||||
|
ios.printcls
|
||||||
|
repeat
|
||||||
|
dev := ios.pad
|
||||||
|
ios.curhome
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string("Scan : "))
|
||||||
|
ios.printdec(i++)
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string("Input : ["))
|
||||||
|
ios.printbin(dev,24)
|
||||||
|
ios.printchar("]")
|
||||||
|
ios.printnl
|
||||||
|
ios.printnl
|
||||||
|
print_joystick(dev >> 16 & $FF)
|
||||||
|
ios.printnl
|
||||||
|
print_paddle(0,dev >> 8 & $FF)
|
||||||
|
print_paddle(1,dev & $FF)
|
||||||
|
until ios.key
|
||||||
|
ios.printnl
|
||||||
|
ios.curon
|
||||||
|
|
||||||
|
PRI plx_setgame|adradda,adrport
|
||||||
|
|
||||||
|
adradda := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
adrport := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
ios.plxsetadr(adradda,adrport)
|
||||||
|
|
||||||
|
PRI plx_test
|
||||||
|
|
||||||
|
testsepia($48,$20)
|
||||||
|
|
||||||
|
PRI plx_testnr|adradda,adrport
|
||||||
|
|
||||||
|
adradda := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
adrport := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
testsepia(adradda,adrport)
|
||||||
|
|
||||||
|
PRI plx_map|ack,adr,n,i
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
n := 0
|
||||||
|
i := 0
|
||||||
|
ios.curoff
|
||||||
|
ios.printcls
|
||||||
|
repeat
|
||||||
|
ios.curhome
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string(" 0123456789ABCDEF"))
|
||||||
|
ios.printnl
|
||||||
|
repeat adr from 0 to 127
|
||||||
|
|
||||||
|
ack := ios.plxping(adr)
|
||||||
|
if n == 0
|
||||||
|
ios.printhex(adr,2)
|
||||||
|
ios.printchar(" ")
|
||||||
|
if ack
|
||||||
|
ios.printqchar("┼")
|
||||||
|
else
|
||||||
|
ios.printqchar("•")
|
||||||
|
if n++ == 15
|
||||||
|
ios.printnl
|
||||||
|
n := 0
|
||||||
|
ios.printnl
|
||||||
|
ios.print(string("Scan : "))
|
||||||
|
ios.printdec(i++)
|
||||||
|
until ios.key
|
||||||
|
ios.printnl
|
||||||
|
ios.curon
|
||||||
|
ios.plxRun
|
||||||
|
|
||||||
|
PRI plx_scan|ack,adr
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
ios.printnl
|
||||||
|
repeat adr from 0 to 127
|
||||||
|
ack := ios.plxping(adr)
|
||||||
|
ifnot ack
|
||||||
|
ios.print(string("Ping : $"))
|
||||||
|
ios.printhex(adr,2)
|
||||||
|
ios.print(string(" : "))
|
||||||
|
ios.printdec(adr)
|
||||||
|
ios.printnl
|
||||||
|
ios.printnl
|
||||||
|
ios.plxRun
|
||||||
|
|
||||||
|
PRI plx_open|ack
|
||||||
|
|
||||||
|
device := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
ios.plxHalt
|
||||||
|
ios.plxStart
|
||||||
|
ifnot ios.plxWrite(device << 1)
|
||||||
|
ios.print(string("Device geöffnet, Polling aus!"))
|
||||||
|
polling := 0
|
||||||
|
open := 1
|
||||||
|
else
|
||||||
|
ios.print(string("Device nicht vorhanden!"))
|
||||||
|
ios.plxRun
|
||||||
|
polling := 1
|
||||||
|
open := 0
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI plx_close
|
||||||
|
|
||||||
|
ios.plxRun
|
||||||
|
ios.print(string("Device geschlossen, Polling an!"))
|
||||||
|
ios.printnl
|
||||||
|
polling := 1
|
||||||
|
open := 0
|
||||||
|
|
||||||
|
PRI plx_put|wert
|
||||||
|
|
||||||
|
if open
|
||||||
|
wert := num.FromStr(os_nxtoken1,num#HEX)
|
||||||
|
ios.plxOut(device,wert)
|
||||||
|
else
|
||||||
|
ios.print(string("Kein Device geöffnet!"))
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI plx_get
|
||||||
|
|
||||||
|
if open
|
||||||
|
ios.print(string("Get : "))
|
||||||
|
ios.printhex(ios.plxIn(device),2)
|
||||||
|
ios.printnl
|
||||||
|
else
|
||||||
|
ios.print(string("Kein Device geöffnet!"))
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI print_chan(cnr,wert)
|
||||||
|
|
||||||
|
ios.print(string("A/D "))
|
||||||
|
ios.printdec(cnr)
|
||||||
|
ios.printchar(" ")
|
||||||
|
ios.printhex(wert,2)
|
||||||
|
ios.printchar(" ")
|
||||||
|
ios.printchar("[")
|
||||||
|
repeat wert>>3
|
||||||
|
ios.printqchar("‣")
|
||||||
|
repeat (255-wert)>>3
|
||||||
|
ios.printqchar(" ")
|
||||||
|
ios.printchar("]")
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI print_port(pnr,wert)
|
||||||
|
|
||||||
|
ios.print(string("Port "))
|
||||||
|
ios.printdec(pnr)
|
||||||
|
ios.print(string(" ["))
|
||||||
|
|
||||||
|
repeat 8
|
||||||
|
if wert & 1
|
||||||
|
ios.printqchar("‣")
|
||||||
|
else
|
||||||
|
ios.printqchar(" ")
|
||||||
|
wert := wert >> 1
|
||||||
|
ios.printchar("]")
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI print_paddle(cnr,wert)
|
||||||
|
|
||||||
|
ios.print(string("Paddle "))
|
||||||
|
ios.printdec(cnr)
|
||||||
|
ios.printchar(" ")
|
||||||
|
ios.printhex(wert,2)
|
||||||
|
ios.printchar(" ")
|
||||||
|
ios.printchar("[")
|
||||||
|
repeat wert>>3
|
||||||
|
ios.printqchar("‣")
|
||||||
|
repeat (255-wert)>>3
|
||||||
|
ios.printqchar(" ")
|
||||||
|
ios.printchar("]")
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI print_joystick(wert)
|
||||||
|
|
||||||
|
ios.print(string("Joystick "))
|
||||||
|
ios.print(string(" ["))
|
||||||
|
|
||||||
|
repeat 8
|
||||||
|
if wert & 1
|
||||||
|
ios.printqchar("‣")
|
||||||
|
else
|
||||||
|
ios.printqchar(" ")
|
||||||
|
wert := wert >> 1
|
||||||
|
ios.printchar("]")
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
PRI testsepia(adda,port)
|
||||||
|
|
||||||
|
ios.plxHalt
|
||||||
|
ios.curoff
|
||||||
|
ios.printcls
|
||||||
|
repeat
|
||||||
|
ios.curhome
|
||||||
|
ios.printnl
|
||||||
|
print_port(1,ios.plxIn(port ))
|
||||||
|
print_port(2,ios.plxIn(port+1))
|
||||||
|
print_port(3,ios.plxIn(port+2))
|
||||||
|
ios.printnl
|
||||||
|
print_chan(0,ios.plxch(adda,0))
|
||||||
|
print_chan(1,ios.plxch(adda,1))
|
||||||
|
print_chan(2,ios.plxch(adda,2))
|
||||||
|
print_chan(3,ios.plxch(adda,3))
|
||||||
|
ios.plxout(port+2,!(cnt>>23))
|
||||||
|
until ios.key
|
||||||
|
ios.printnl
|
||||||
|
ios.curon
|
||||||
|
ios.plxRun
|
||||||
|
|
||||||
|
|
||||||
|
DAT
|
||||||
|
prompt1 byte "ok ", $0d, 0
|
||||||
|
prompt2 byte "plx: ", 0
|
||||||
|
prompt3 byte "? ",0
|
||||||
|
wait1 byte "<WEITER? */q:>",0
|
||||||
|
|
||||||
|
help1 file "perplex.txt"
|
||||||
|
byte $0d,0
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
openwr <adr> - slave schreibend öffnen
|
||||||
|
openrd <adr> - slave lesend öffnen
|
||||||
|
close - slave schließen
|
||||||
|
put <wert> - zeichen zu plexus senden
|
||||||
|
get - zeichen von plexus empfangen
|
||||||
|
map - slavemap anzeigen
|
||||||
|
scan - anzeige aller slaveadressen
|
||||||
|
test - test für interne sepia-karte
|
||||||
|
test# adda port - test für spezifische sepia-karte
|
||||||
|
game - gamedevice abfragen (pollregister)
|
||||||
|
setgame adda port - adressen für poller setzen adda/port
|
||||||
|
polloff - polling anhalten
|
||||||
|
pollon - polling starten
|
||||||
|
bye - programm beenden
|
||||||
|
|
||||||
|
Parameter hexadezimal!
|
|
@ -79,13 +79,15 @@ PUB main | tast
|
||||||
PUB statistik 'ausgabe der fehlerstatistik
|
PUB statistik 'ausgabe der fehlerstatistik
|
||||||
|
|
||||||
cnt_err := cnt_err + cnt_test1 + cnt_test2 + cnt_test3 + cnt_testx
|
cnt_err := cnt_err + cnt_test1 + cnt_test2 + cnt_test3 + cnt_testx
|
||||||
ios.setcolor(4)
|
ios.setcolor(0)
|
||||||
ios.printcls
|
ios.printcls
|
||||||
ios.printnl
|
ios.printnl
|
||||||
ios.print(string("Statistik eRAM-Test:", $0d, $0d))
|
ios.print(string("Statistik eRAM-Test:", $0d, $0d))
|
||||||
ios.print(string("Testdurchläufe : "))
|
ios.print(string("Testdurchläufe : "))
|
||||||
ios.printdec(cnt_loop)
|
ios.printdec(cnt_loop)
|
||||||
ios.printnl
|
ios.printnl
|
||||||
|
ios.printnl
|
||||||
|
ios.setcolor(4)
|
||||||
ios.print(string("Fehler Gesamt : "))
|
ios.print(string("Fehler Gesamt : "))
|
||||||
ios.printdec(cnt_err)
|
ios.printdec(cnt_err)
|
||||||
ios.printnl
|
ios.printnl
|
||||||
|
@ -102,9 +104,6 @@ PUB statistik 'ausgabe der fehlerstati
|
||||||
ios.printdec(cnt_testx)
|
ios.printdec(cnt_testx)
|
||||||
ios.printnl
|
ios.printnl
|
||||||
ios.printnl
|
ios.printnl
|
||||||
ios.print(string("Aktueller Test:", $0d))
|
|
||||||
ios.printnl
|
|
||||||
ios.printnl
|
|
||||||
cnt_test1 := 0
|
cnt_test1 := 0
|
||||||
cnt_test2 := 0
|
cnt_test2 := 0
|
||||||
cnt_test3 := 0
|
cnt_test3 := 0
|
||||||
|
|
|
@ -687,7 +687,7 @@ PRI cmd_color 'cmd: zeichenfarbe wähl
|
||||||
|
|
||||||
ios.setcolor(str.decimalToNumber(act_color := os_nxtoken1))
|
ios.setcolor(str.decimalToNumber(act_color := os_nxtoken1))
|
||||||
|
|
||||||
PRI cmd_sysinfo 'cmd: systeminformationen anzeigen
|
PRI cmd_sysinfo|ack,adr 'cmd: systeminformationen anzeigen
|
||||||
|
|
||||||
ios.printnl
|
ios.printnl
|
||||||
os_printstr(@msg22,@syst)
|
os_printstr(@msg22,@syst)
|
||||||
|
@ -716,6 +716,18 @@ PRI cmd_sysinfo 'cmd: systeminformatione
|
||||||
else
|
else
|
||||||
os_printstr(@msg36,@msg38)
|
os_printstr(@msg36,@msg38)
|
||||||
|
|
||||||
|
ios.printnl
|
||||||
|
ios.print(@msg39)
|
||||||
|
ios.plxHalt
|
||||||
|
repeat adr from 0 to 127
|
||||||
|
ack := ios.plxping(adr)
|
||||||
|
ifnot ack
|
||||||
|
ios.print(string(" ["))
|
||||||
|
ios.printhex(adr,2)
|
||||||
|
ios.print(string("]"))
|
||||||
|
ios.printnl
|
||||||
|
ios.plxRun
|
||||||
|
|
||||||
PRI cmd_mount | err 'cmd: mount
|
PRI cmd_mount | err 'cmd: mount
|
||||||
|
|
||||||
repeat 16
|
repeat 16
|
||||||
|
@ -873,17 +885,17 @@ PRI cmd_dir|fcnt,stradr,hflag 'cmd: verzeichnis anzeig
|
||||||
ios.print(@msg10)
|
ios.print(@msg10)
|
||||||
ios.print(@msg5)
|
ios.print(@msg5)
|
||||||
ios.print(ios.sdvolname)
|
ios.print(ios.sdvolname)
|
||||||
ifnot ios.os_error(ios.sddir) 'verzeichnis öffnen
|
ios.sddir 'verzeichnis öffnen
|
||||||
if str.findCharacter(stradr,"h")
|
if str.findCharacter(stradr,"h")
|
||||||
hflag := 0
|
hflag := 0
|
||||||
if str.findCharacter(stradr,"w")
|
if str.findCharacter(stradr,"w")
|
||||||
fcnt := cmd_dir_w(hflag)
|
fcnt := cmd_dir_w(hflag)
|
||||||
else
|
else
|
||||||
fcnt := cmd_dir_l(hflag) 'dir l
|
fcnt := cmd_dir_l(hflag) 'dir l
|
||||||
ios.printnl
|
ios.printnl
|
||||||
ios.print(@msg10)
|
ios.print(@msg10)
|
||||||
ios.print(@msg9)
|
ios.print(@msg9)
|
||||||
ios.printdec(fcnt)
|
ios.printdec(fcnt)
|
||||||
else
|
else
|
||||||
ios.os_error(1)
|
ios.os_error(1)
|
||||||
|
|
||||||
|
@ -1076,6 +1088,7 @@ msg35 byte "Bellatrix Auflösung Y :",0
|
||||||
msg36 byte "Bellatrix Videomodus : ",0
|
msg36 byte "Bellatrix Videomodus : ",0
|
||||||
msg37 byte "VGA",0
|
msg37 byte "VGA",0
|
||||||
msg38 byte "TV",0
|
msg38 byte "TV",0
|
||||||
|
msg39 byte "PlexBus Devices : ",0
|
||||||
|
|
||||||
ext1 byte ".BIN",0
|
ext1 byte ".BIN",0
|
||||||
ext2 byte ".ADM",0
|
ext2 byte ".ADM",0
|
||||||
|
|
|
@ -0,0 +1,385 @@
|
||||||
|
{{
|
||||||
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ Autor: Jörg Deckert │
|
||||||
|
│ Copyright (c) 2014 Jörg Deckert │
|
||||||
|
│ See end of file for terms of use. │
|
||||||
|
│ Die Nutzungsbedingungen befinden sich am Ende der Datei │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
Informationen : hive-project.de
|
||||||
|
Kontakt : joergd@bitquell.de
|
||||||
|
System : TriOS
|
||||||
|
Name : flash
|
||||||
|
Chip : Regnatix
|
||||||
|
Typ : Programm
|
||||||
|
Version :
|
||||||
|
Subversion :
|
||||||
|
Funktion : Webserver
|
||||||
|
Komponenten : -
|
||||||
|
COG's : -
|
||||||
|
Logbuch :
|
||||||
|
|
||||||
|
23.06.2014-joergd - erste Version
|
||||||
|
- Parameter für Benutzer und Paßwort
|
||||||
|
|
||||||
|
Kommandoliste :
|
||||||
|
|
||||||
|
|
||||||
|
Notizen :
|
||||||
|
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
OBJ
|
||||||
|
ios: "reg-ios"
|
||||||
|
gc : "glob-con"
|
||||||
|
str: "glob-string"
|
||||||
|
num: "glob-numbers"
|
||||||
|
|
||||||
|
CON
|
||||||
|
|
||||||
|
_CLKMODE = XTAL1 + PLL16X
|
||||||
|
_XINFREQ = 5_000_000
|
||||||
|
|
||||||
|
CON 'NVRAM Konstanten --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#4, NVRAM_IPADDR
|
||||||
|
#24, NVRAM_HIVE ' 4 Bytes
|
||||||
|
|
||||||
|
DAT
|
||||||
|
|
||||||
|
strNVRAMFile byte "nvram.sav",0 'contains the 56 bytes of NVRAM, if RTC is not available
|
||||||
|
|
||||||
|
|
||||||
|
VAR
|
||||||
|
|
||||||
|
byte handleidx 'Handle web connection
|
||||||
|
|
||||||
|
byte reqstr[32] ' request string
|
||||||
|
byte webbuff[128] ' incoming header buffer
|
||||||
|
|
||||||
|
byte rtcAvailable
|
||||||
|
|
||||||
|
long hiveid
|
||||||
|
|
||||||
|
long cog, random_value
|
||||||
|
|
||||||
|
PUB main
|
||||||
|
|
||||||
|
rr_start
|
||||||
|
|
||||||
|
ios.start
|
||||||
|
ifnot (ios.admgetspec & gc#A_LAN)
|
||||||
|
ios.sddmset(ios#DM_USER) 'u-marker setzen
|
||||||
|
ios.sddmact(ios#DM_SYSTEM) 's-marker aktivieren
|
||||||
|
ios.admload(string("admnet.adm")) 'versuche, admnet zu laden
|
||||||
|
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
||||||
|
ifnot (ios.admgetspec & gc#A_LAN) 'wenn Laden fehlgeschlagen
|
||||||
|
ios.print(@strNoNetwork)
|
||||||
|
ios.stop 'Ende
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
ios.lanstart 'LAN-Treiber initialisieren (eigene IP-Adresse usw. setzen)
|
||||||
|
handleidx := $FF
|
||||||
|
|
||||||
|
getcfg
|
||||||
|
ios.print(@strMsgEnd)
|
||||||
|
|
||||||
|
repeat
|
||||||
|
if ios.keystat > 0
|
||||||
|
ios.key
|
||||||
|
quit
|
||||||
|
if (handleidx := ios.lan_listen(handleidx,80)) <> $FF 'Empfangs-Socket auf Port 80 öffnen
|
||||||
|
if ios.lan_isconnected(handleidx) 'bei bestehender Verbindung...
|
||||||
|
if webThread == 0
|
||||||
|
ios.lan_txflush(handleidx)
|
||||||
|
ios.lan_close(handleidx)
|
||||||
|
handleidx := $FF
|
||||||
|
|
||||||
|
ios.stop
|
||||||
|
|
||||||
|
PRI webThread | i, j, uri, args
|
||||||
|
|
||||||
|
if webReadLine == 0 ' read the first header, quit if it is empty
|
||||||
|
return 0
|
||||||
|
|
||||||
|
bytemove(@reqstr, @webbuff, 32) ' copy the header to a temporary request string for later processing
|
||||||
|
|
||||||
|
' obtain get arguments
|
||||||
|
if (i := indexOf(@reqstr, string(".cgi?"))) <> -1 ' was the request for a *.cgi script with arguments?
|
||||||
|
args := @reqstr[i + 5] ' extract the argument
|
||||||
|
if (j := indexOf(args, string("="))) <> -1 ' find the end of the argument
|
||||||
|
byte[args][j] := 0 ' string termination
|
||||||
|
|
||||||
|
' read the rest of the headers
|
||||||
|
repeat until webReadLine == 0 ' read the rest of the headers, throwing them away
|
||||||
|
|
||||||
|
sendStr(string("HTTP/1.0 200 OK",13,10,13,10)) ' print the HTTP header
|
||||||
|
|
||||||
|
if indexOf(@reqstr, string("ajax.js")) <> -1 ' ajax.js
|
||||||
|
sendStr(@ajaxjs)
|
||||||
|
elseif indexOf(@reqstr, string("rand.cgi")) <> -1 ' rand.cgi
|
||||||
|
sendStr(str.trimCharacters(num.ToStr(long[rr_random_ptr], num#DEC)))
|
||||||
|
elseif indexOf(@reqstr, string("id.cgi")) <> -1 ' id.cgi
|
||||||
|
sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC)))
|
||||||
|
elseif indexOf(@reqstr, string("img.bin")) <> -1 ' img.bin
|
||||||
|
ios.lan_txdata(handleidx, 0, 32768)
|
||||||
|
else
|
||||||
|
' default page
|
||||||
|
sendStr(@strDefPage1)
|
||||||
|
sendStr(str.trimCharacters(num.ToStr(hiveid, num#DEC)))
|
||||||
|
sendStr(@strDefPage2)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
PRI webReadLine | i, ch
|
||||||
|
repeat i from 0 to 126
|
||||||
|
ch := ios.lan_rxtime(handleidx, 500)
|
||||||
|
if ch == 13
|
||||||
|
ch := ios.lan_rxtime(handleidx, 500)
|
||||||
|
if ch == -1 or ch == 10
|
||||||
|
quit
|
||||||
|
webbuff[i] := ch
|
||||||
|
|
||||||
|
webbuff[i] := 0
|
||||||
|
|
||||||
|
return i
|
||||||
|
|
||||||
|
PRI sendStr (strSend) : error
|
||||||
|
|
||||||
|
#ifdef __DEBUG
|
||||||
|
ios.print(string(" > "))
|
||||||
|
ios.print(strSend)
|
||||||
|
ios.printnl
|
||||||
|
#endif
|
||||||
|
error := ios.lan_txdata(handleidx, strSend, strsize(strSend))
|
||||||
|
|
||||||
|
PRI indexOf(haystack, needle) | i, j
|
||||||
|
'' Searches for a 'needle' inside a 'haystack'
|
||||||
|
'' Returns starting index of 'needle' inside 'haystack'
|
||||||
|
|
||||||
|
repeat i from 0 to strsize(haystack) - strsize(needle)
|
||||||
|
repeat j from 0 to strsize(needle) - 1
|
||||||
|
if byte[haystack][i + j] <> byte[needle][j]
|
||||||
|
quit
|
||||||
|
if j == strsize(needle)
|
||||||
|
return i
|
||||||
|
|
||||||
|
return -1
|
||||||
|
|
||||||
|
PRI getcfg 'nvram: IP-Konfiguration anzeigen
|
||||||
|
|
||||||
|
if ios.rtcTest 'RTC chip available?
|
||||||
|
rtcAvailable := TRUE
|
||||||
|
else 'use configfile
|
||||||
|
rtcAvailable := FALSE
|
||||||
|
ios.sddmset(ios#DM_USER) 'u-marker setzen
|
||||||
|
ios.sddmact(ios#DM_SYSTEM) 's-marker aktivieren
|
||||||
|
if ios.sdopen("R",@strNVRAMFile)
|
||||||
|
ios.print(@strErrorOpen)
|
||||||
|
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
||||||
|
return
|
||||||
|
|
||||||
|
ios.print(@strAddr)
|
||||||
|
listaddr(NVRAM_IPADDR)
|
||||||
|
ios.printnl
|
||||||
|
|
||||||
|
if rtcAvailable
|
||||||
|
hiveid := ios.getNVSRAM(NVRAM_HIVE)
|
||||||
|
hiveid += ios.getNVSRAM(NVRAM_HIVE+1) << 8
|
||||||
|
hiveid += ios.getNVSRAM(NVRAM_HIVE+2) << 16
|
||||||
|
hiveid += ios.getNVSRAM(NVRAM_HIVE+3) << 24
|
||||||
|
else
|
||||||
|
ios.sdseek(NVRAM_HIVE)
|
||||||
|
hiveid := ios.sdgetc
|
||||||
|
hiveid += ios.sdgetc << 8
|
||||||
|
hiveid += ios.sdgetc << 16
|
||||||
|
hiveid += ios.sdgetc << 24
|
||||||
|
|
||||||
|
ifnot rtcAvailable
|
||||||
|
ios.sdclose
|
||||||
|
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
||||||
|
|
||||||
|
PRI listaddr (nvidx) | count 'IP-Adresse anzeigen
|
||||||
|
|
||||||
|
ifnot rtcAvailable
|
||||||
|
ios.sdseek(nvidx)
|
||||||
|
|
||||||
|
repeat count from 0 to 3
|
||||||
|
if(count)
|
||||||
|
ios.print(string("."))
|
||||||
|
if rtcAvailable
|
||||||
|
ios.print(str.trimCharacters(num.ToStr(ios.getNVSRAM(nvidx+count), num#DEC)))
|
||||||
|
else
|
||||||
|
ios.print(str.trimCharacters(num.ToStr(ios.sdgetc, num#DEC)))
|
||||||
|
|
||||||
|
DAT ' Locale
|
||||||
|
|
||||||
|
#ifdef __LANG_EN
|
||||||
|
'locale: english
|
||||||
|
|
||||||
|
strNoNetwork byte 13,"Administra doesn't provide network functions!",13,"Please load admnet.",13,0
|
||||||
|
strWaitConnection byte "Waiting for client connection...",13,0
|
||||||
|
strErrorNoSock byte "No free socket.",13,0
|
||||||
|
strErrorOpen byte "Can't open configuration file",13,0
|
||||||
|
strAddr byte 13,"Webserver startet, please use this URL to connect:",13," http://",0
|
||||||
|
strDefPage1 byte "<html><body><script language=javascript src=ajax.js></script><b>It Works!<br><br>Hive-ID: ",0
|
||||||
|
strDefPage2 byte "<br><br>Random Number:</b><div id=a></div><script language=javascript>ajax('rand.cgi', 'a', 10);</script></body></html>",0
|
||||||
|
strMsgEnd byte 13,13,"Press any key to quit",13,0
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
'default locale: german
|
||||||
|
|
||||||
|
strNoNetwork byte 13,"Administra stellt keine Netzwerk-Funktionen zur Verfügung!",13,"Bitte admnet laden.",13,0
|
||||||
|
strWaitConnection byte "Warte auf Client-Verbindung...",13,0
|
||||||
|
strErrorNoSock byte "Kein Socket frei...",13,0
|
||||||
|
strErrorOpen byte "Kann Konfigurationsdatei nicht öffnen.",13,0
|
||||||
|
strAddr byte 13,"Webserver gestartet, zum Verbinden folgende URL verwenden:",13," http://",0
|
||||||
|
strDefPage1 byte "<html><body><script language=javascript src=ajax.js></script><b>Es funktioniert!<br><br>Hive-ID: ",0
|
||||||
|
strDefPage2 byte "<br><br>Zufallszahl:</b><div id=a></div><script language=javascript>ajax('rand.cgi', 'a', 10);</script></body></html>",0
|
||||||
|
strMsgEnd byte 13,13,"Zum Beenden beliebige Taste drücken",13,0
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ajaxjs byte "var ajaxBusy=false;function ajax(a,b,c){if(ajaxBusy){return}ajaxBusy=true;var d;try{d=new XMLHttpRequest()}catch(e){d=new ActiveXObject('Microsoft.XMLHTTP')}var f=function(){if(d.readyState==4){if(b){document.getElementById(b).innerHTML=d.responseText}ajaxBusy=false;if(c>0){setTimeout('ajax(\''+a+'\',\''+b+'\','+c+')',c)}}};d.open('GET',a+'?'+(new Date()).getTime(),true);d.onreadystatechange=f;d.send(null)}"
|
||||||
|
byte 0
|
||||||
|
|
||||||
|
DAT 'lizenz
|
||||||
|
|
||||||
|
{{
|
||||||
|
|
||||||
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ TERMS OF USE: MIT License │
|
||||||
|
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │
|
||||||
|
│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │
|
||||||
|
│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│
|
||||||
|
│is furnished to do so, subject to the following conditions: │
|
||||||
|
│ │
|
||||||
|
│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│
|
||||||
|
│ │
|
||||||
|
│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │
|
||||||
|
│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │
|
||||||
|
│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │
|
||||||
|
│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||||
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DAT
|
||||||
|
{{
|
||||||
|
┌───────────────────────────────────────────┬────────────────┬────────────────────────┬───────────────┐
|
||||||
|
│ Real Random v1.2 │ by Chip Gracey │ (C)2007 Parallax, Inc. │ 23 March 2007 │
|
||||||
|
├───────────────────────────────────────────┴────────────────┴────────────────────────┴───────────────┤
|
||||||
|
│ │
|
||||||
|
│ This object generates real random numbers by stimulating and tracking CTR PLL jitter. It requires │
|
||||||
|
│ one cog and at least 20MHz. │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ Background and Detail: │
|
||||||
|
│ │
|
||||||
|
│ A real random number is impossible to generate within a closed digital system. This is because │
|
||||||
|
│ there are no reliably-random states within such a system at power-up, and after power-up, it │
|
||||||
|
│ behaves deterministically. Random values can only be 'earned' by measuring something outside of the │
|
||||||
|
│ digital system. │
|
||||||
|
│ │
|
||||||
|
│ In your programming, you might have used 'var?' to generate a pseudo-random sequence, but found the │
|
||||||
|
│ same pattern playing every time you ran your program. You might have then used 'cnt' to 'randomly' │
|
||||||
|
│ seed the 'var'. As long as you kept downloading to RAM, you saw consistently 'random' results. At │
|
||||||
|
│ some point, you probably downloaded to EEPROM to set your project free. But what happened nearly │
|
||||||
|
│ every time you powered it up? You were probably dismayed to discover the same sequence playing each │
|
||||||
|
│ time! The problem was that 'cnt' was always powering-up with the same initial value and you were │
|
||||||
|
│ then sampling it at a constant offset. This can make you wonder, "Where's the end to this madness? │
|
||||||
|
│ And will I ever find true randomness?". │
|
||||||
|
│ │
|
||||||
|
│ In order to have real random numbers, either some external random signal must be input, or some │
|
||||||
|
│ analog system must be used to generate random noise which can be measured. We're in luck here, │
|
||||||
|
│ because it turns out that the Propeller does have sufficiently-analog subsystems which can be │
|
||||||
|
│ exploited for this purpose -- each cog's CTR PLLs. These can be exercised internally to good │
|
||||||
|
│ effect, without any I/O activity. │
|
||||||
|
│ │
|
||||||
|
│ This object sets up a cog's CTRA PLL to run at the main clock's frequency. It then uses a pseudo- │
|
||||||
|
│ random sequencer to modulate the PLL's target phase. The PLL responds by speeding up and slowing │
|
||||||
|
│ down in a an endless effort to lock. This results in very unpredictable frequency jitter which is │
|
||||||
|
│ fed back into the sequencer to keep the bit salad tossing. The final output is a truly-random │
|
||||||
|
│ 32-bit unbiased value that is fully updated every ~100us, with new bits rotated in every ~3us. This │
|
||||||
|
│ value can be sampled by your application whenever a random number is needed. │
|
||||||
|
│ │
|
||||||
|
├─────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||||
|
│ Revision History v1.0 released 21 March 2007 │
|
||||||
|
│ │
|
||||||
|
│ v1.1 Bias removal has been added to ensure true randomness. Released 22 March 2007. │
|
||||||
|
│ v1.2 Assembly code made more efficient. Documentation improved. Released 23 March 2007. │
|
||||||
|
│ │
|
||||||
|
└─────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
|
||||||
|
}}
|
||||||
|
PUB rr_start : okay
|
||||||
|
|
||||||
|
'' Start real random driver - starts a cog
|
||||||
|
'' returns false if no cog available
|
||||||
|
|
||||||
|
'Reset driver
|
||||||
|
rr_stop
|
||||||
|
|
||||||
|
'Launch real random cog
|
||||||
|
return cog := cognew(@entry, @random_value) + 1
|
||||||
|
|
||||||
|
'allow 5ms to launch and randomize
|
||||||
|
waitcnt(clkfreq / 200 + cnt)
|
||||||
|
|
||||||
|
PUB rr_stop
|
||||||
|
|
||||||
|
'' Stop real random driver - frees a cog
|
||||||
|
|
||||||
|
'If already running, stop real random cog
|
||||||
|
if cog
|
||||||
|
cogstop(cog~ - 1)
|
||||||
|
|
||||||
|
|
||||||
|
PUB rr_random_ptr : ptr
|
||||||
|
|
||||||
|
'' Returns the address of the long which receives the random value
|
||||||
|
''
|
||||||
|
'' A random bit is rotated into the long every ~3us, resuling in a
|
||||||
|
'' new long every ~100us, on average, at 80MHz. You may want to double
|
||||||
|
'' these times, though, to be sure that you are getting new bits. The
|
||||||
|
'' timing uncertainty comes from the unbiasing algorithm which throws
|
||||||
|
'' away identical bit pairs, and only outputs the different ones.
|
||||||
|
|
||||||
|
return @random_value
|
||||||
|
|
||||||
|
DAT
|
||||||
|
|
||||||
|
' ┌─────────────────────────┐
|
||||||
|
' │ Real Random Generator │
|
||||||
|
' └─────────────────────────┘
|
||||||
|
|
||||||
|
org
|
||||||
|
|
||||||
|
entry movi ctra,#%00001_111 'set ctra to internal pll mode, select x16 tap
|
||||||
|
movi frqa,#$020 'set frqa to system clock frequency / 16
|
||||||
|
movi vcfg,#$040 'set vcfg to discrete output, but without pins
|
||||||
|
mov vscl,#70 'set vscl to 70 pixel clocks per waitvid
|
||||||
|
|
||||||
|
:twobits waitvid 0,0 'wait for next 70-pixel mark ± jitter time
|
||||||
|
test phsa,#%10111 wc 'pseudo-randomly sequence phase to induce jitter
|
||||||
|
rcr phsa,#1 '(c holds random bit #1)
|
||||||
|
add phsa,cnt 'mix PLL jitter back into phase
|
||||||
|
|
||||||
|
rcl par,#1 wz, nr 'transfer c into nz (par shadow register = 0)
|
||||||
|
wrlong _random_value,par 'write random value back to spin variable
|
||||||
|
|
||||||
|
waitvid 0,0 'wait for next 70-pixel mark ± jitter time
|
||||||
|
test phsa,#%10111 wc 'pseudo-randomly sequence phase to induce jitter
|
||||||
|
rcr phsa,#1 '(c holds random bit #2)
|
||||||
|
add phsa,cnt 'mix PLL jitter back into phase
|
||||||
|
|
||||||
|
if_z_eq_c rcl _random_value,#1 'only allow different bits (removes bias)
|
||||||
|
jmp #:twobits 'get next two bits
|
||||||
|
|
||||||
|
|
||||||
|
_random_value res 1
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
|
|
||||||
/? : Hilfe
|
/? : Hilfe
|
||||||
/l : Konfiguration anzeigen
|
/l : Konfiguration anzeigen
|
||||||
----------- Administra-Funktionen
|
---------------- Administra-Funktionen
|
||||||
/ah 0|1 : hss ab-/anschalten
|
/ah 0|1 : hss ab-/anschalten
|
||||||
/aw 0|1 : wav ab-/anschalten
|
/aw 0|1 : wav ab-/anschalten
|
||||||
/as 0|1 : systemklänge ab-/anschalten
|
/as 0|1 : systemklänge ab-/anschalten
|
||||||
/al 0..100 : wav-lautstärke links
|
/al 0..100 : wav-lautstärke links
|
||||||
/ar 0..100 : wav-lautstärke rechts
|
/ar 0..100 : wav-lautstärke rechts
|
||||||
/ah 0..15 : hss-lautstärke
|
/ah 0..15 : hss-lautstärke
|
||||||
/af : administra reset, flash booten
|
/af : administra reset, flash booten
|
||||||
/at : transfergeschwindigkeit messen
|
/at : transfergeschwindigkeit messen
|
||||||
----------- Bellatrix-Funktionen
|
---------------- Bellatrix-Funktionen
|
||||||
/ci : farbtabelle anzeigen
|
/ci : farbtabelle anzeigen
|
||||||
/cs datei : farbtabelle speichern
|
/cs datei : farbtabelle speichern
|
||||||
/cl datei : farbtabelle laden
|
/cl datei : farbtabelle laden
|
||||||
----------- Port-Funktionen
|
---------------- Port-Funktionen
|
||||||
/po nr anz : Impulse an port ausgeben
|
/po nr anz time : Impulse an port ausgeben
|
||||||
/pi : Status der Port abfragen
|
/pi : Status der Port abfragen
|
Loading…
Reference in New Issue