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
|
||||
2. Regime im Überblick
|
||||
3. Forth im Überblick
|
||||
Beschreibung
|
||||
------------
|
||||
|
||||
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
|
||||
integrierte Programmiersprache. Als Standard wird das System ohne Forth
|
||||
installiert. Die Installation ist so für den Einsteiger einfacher. Möchte
|
||||
man auch PropForth installieren, muß nur eine Konfiguration geändert werden
|
||||
und ein Basiswortschatz im Forth selbst kompiliert werden.
|
||||
Binäres Archiv: HIVE-TriOS-Rxx-bin.zip
|
||||
Source-Archiv: HIVE-TriOS-Rxx-src.zip
|
||||
Git Repository: https://dev.bitquell.de/summary/HIVE/TriOS.git
|
||||
|
||||
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
|
||||
werden. In den Einstellungen des Compilers (Tools/Compiler
|
||||
Preferences/Search Paths) muss das lib-Verzeichnis eingetragen werden.
|
||||
werden. In den Einstellungen des Compilers
|
||||
(Tools/Compiler Preferences/Search Paths) muss das lib-Verzeichnis eingetragen
|
||||
werden.
|
||||
|
||||
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.
|
||||
Downloadlink BSTC: http://www.fnarfbargle.com/bst/bstc/Latest/
|
||||
|
||||
|
||||
Installation ohne Forth (Standard):
|
||||
-----------------------------------
|
||||
|
||||
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
|
||||
Genaue Installation-Anleitungen und Einführungen befinden sich im Verzeichnis
|
||||
"doku".
|
||||
|
|
|
@ -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
|
||||
RAM-Disk im eRAM oder auf SD-Card abspeichern kann.
|
||||
- Ein vollständiger IRC-Client
|
||||
- Die DEmo-Version eines Webservers
|
||||
Zukünftige Erweiterungen, wie die Integration in Regime und direktes Starten
|
||||
von Programmen aus dem Netzwerk sind geplant.
|
||||
|
||||
|
@ -125,7 +126,18 @@ abgespeichert. Von dort könnte sie direkt gestartet werden.
|
|||
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
|
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:
|
||||
- alle Spin-Dateien verwenden einheitlich UTF8-Kodierung und ein Zeilenende
|
||||
mit Linefeed (LF)
|
||||
|
||||
Administra:
|
||||
- Netzwerk-fähig
|
||||
- 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:
|
||||
- ipconfig
|
||||
- FTP-Client
|
||||
- IRC-Client
|
||||
|
||||
Netzwerk-Server:
|
||||
- Webserver (Demo)
|
||||
|
||||
fm, man:
|
||||
- Textdateien mit unterschiedlichem Zeilenende (CR, LF) werden unterstützt
|
||||
|
||||
|
@ -26,22 +28,67 @@ Make-Scripts:
|
|||
- Linux-Version (make.sh)
|
||||
- Erstellung verschiedener Anministra-Binaries per Defines
|
||||
- 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
|
||||
======================
|
||||
|
||||
und weiter gehts mit dem Frühjahresputz:
|
||||
|
||||
- umstellung Administra-Codes (admflash, admay, admsid) auf externe
|
||||
Konstantendefinitionen
|
||||
|
||||
belflash:
|
||||
|
||||
- fehler im loader behoben
|
||||
|
||||
lib:
|
||||
|
||||
- gui-objekte für textoberfläche eingefügt:
|
||||
|
||||
gui-dlbox - Listenbox für Dateien
|
||||
|
@ -50,7 +97,6 @@ lib:
|
|||
gui-wbox - Warnbox mit Auswahloptionen
|
||||
|
||||
system/regnatix:
|
||||
|
||||
- Filemanager fm zugefügt
|
||||
- Mental-Loader m zugefügt
|
||||
- Tool zum erstellen von tapes (mental-containerdateien) zugefügt
|
||||
|
@ -58,7 +104,6 @@ system/regnatix:
|
|||
- yplay: Konstanten ausgelagert
|
||||
|
||||
system/sonstiges:
|
||||
|
||||
- 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
|
||||
- Daten übertragen
|
||||
|
||||
Komponenten : HSS 1.2 Andrew Arsenault Lizenz unklar
|
||||
SIDCog Ver. 080 Johannes Ahlebrand MIT Lizenz
|
||||
DACEngine 01/11/2010 Kwabena W. Agyeman MIT Lizenz
|
||||
FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
|
||||
RTCEngine 11/22/2009 Kwabena W. Agyeman MIT Lizenz
|
||||
PropTCP 12/08/2009 Harrison Pham Lizenz unklar
|
||||
Komponenten : HSS 1.2 Andrew Arsenault Lizenz unklar
|
||||
SIDCog Ver. 080 Johannes Ahlebrand MIT Lizenz
|
||||
DACEngine 01/11/2010 Kwabena W. Agyeman MIT Lizenz
|
||||
FATEngine 01/18/2009 Kwabena W. Agyeman MIT Lizenz
|
||||
RTCEngine 11/22/2009 Kwabena W. Agyeman MIT Lizenz
|
||||
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
|
||||
FAT/RTC 1 COG
|
||||
|
@ -90,7 +91,7 @@ Defines : __ADM_FAT enable FAT engine (sd card handling)
|
|||
__ADM_SID enable SID player
|
||||
__ADM_LAN enable LAN functions
|
||||
__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_BLT enable Bluetooth
|
||||
__ADM_COM enable serial port
|
||||
|
@ -151,6 +152,7 @@ Logbuch :
|
|||
17-04-2013-dr235 - konstanten für administra-funktionen komplett ausgelagert
|
||||
22-12-2013-joergd - LAN Funktionen
|
||||
17-12-2014-joergd - verschiedene Administra-Code-Versionen vereinheitlicht
|
||||
29-11-2014-joergd - Signalgenerator (von zille für Plexus)
|
||||
|
||||
Kommandoliste :
|
||||
|
||||
|
@ -269,14 +271,14 @@ CHIP_SPEC = CHIP_SPEC_FAT|CHIP_SPEC_LDR|CHIP_SPEC_HSS|CHIP_SPEC_WAV|CHIP_SPEC_SI
|
|||
' clk -------+|
|
||||
' /wr ------+||
|
||||
' /hs -----+||| +------------------------- /cs
|
||||
' |||| |+------------------------ adm-p22
|
||||
' |||| ||+----------------------- adm-p21 (io)
|
||||
' |||| |||+---------------------- adm-p20 (rx)
|
||||
' |||| ||||+--------------------- adm-p19 (tx)
|
||||
' |||| |+------------------------ adm-p22 (int2 - port 1/2)
|
||||
' |||| ||+----------------------- adm-p21 (int1 - port 3)
|
||||
' |||| |||+---------------------- adm-p20 (scl)
|
||||
' |||| ||||+--------------------- adm-p19 (sda)
|
||||
' |||| ||||| +------+ d0..d7
|
||||
' |||| ||||| | |
|
||||
DB_IN = %00001001_00100000_00000000_00000000 'dira-wert für datenbuseingabe
|
||||
DB_OUT = %00001001_00100000_00000000_11111111 'dira-wert für datenbusausgabe
|
||||
DB_IN = %00001001_00000000_00000000_00000000 'dira-wert für datenbuseingabe
|
||||
DB_OUT = %00001001_00000000_00000000_11111111 'dira-wert für datenbusausgabe
|
||||
|
||||
M1 = %00000010_00000000_00000000_00000000 'busclk=1? & /prop1=0?
|
||||
M2 = %00000010_10000000_00000000_00000000 'maske: busclk & /cs (/prop1)
|
||||
|
@ -347,11 +349,12 @@ OBJ
|
|||
com : "adm-com" 'serielle schnittstelle
|
||||
#endif
|
||||
#ifdef __ADM_LAN
|
||||
sock : "driver_socket" 'LAN
|
||||
sock : "adm-socket" 'LAN
|
||||
num : "glob-numbers" 'Number Engine
|
||||
#endif
|
||||
#ifdef __ADM_PLX
|
||||
plx : "adm-plx" 'PlexBux
|
||||
signal : "adm-signalgenerator"
|
||||
#endif
|
||||
#ifdef __ADM_DCF
|
||||
dcf : "adm-dcf" 'DCF-77
|
||||
|
@ -398,232 +401,246 @@ PUB main | cmd,err 'chip: kommandointerpret
|
|||
|
||||
' ---------------------------------------------- SD-FUNKTIONEN
|
||||
#ifdef __ADM_FAT
|
||||
gc#a_sdMount: sd_mount("M") 'sd-card mounten '
|
||||
gc#a_sdOpenDir: sd_opendir 'direktory öffnen
|
||||
gc#a_sdNextFile: sd_nextfile 'verzeichniseintrag lesen
|
||||
gc#a_sdOpen: sd_open 'datei öffnen
|
||||
gc#a_sdClose: sd_close 'datei schließen
|
||||
gc#a_sdGetC: sd_getc 'zeichen lesen
|
||||
gc#a_sdPutC: sd_putc 'zeichen schreiben
|
||||
gc#a_sdGetBlk: sd_getblk 'block lesen
|
||||
gc#a_sdPutBlk: sd_putblk 'block schreiben
|
||||
gc#a_sdSeek: sd_seek 'zeiger in datei positionieren
|
||||
gc#a_sdFAttrib: sd_fattrib 'dateiattribute übergeben
|
||||
gc#a_sdVolname: sd_volname 'volumelabel abfragen
|
||||
gc#a_sdMount: sd_mount("M") 'sd-card mounten '
|
||||
gc#a_sdOpenDir: sd_opendir 'direktory öffnen
|
||||
gc#a_sdNextFile: sd_nextfile 'verzeichniseintrag lesen
|
||||
gc#a_sdOpen: sd_open 'datei öffnen
|
||||
gc#a_sdClose: sd_close 'datei schließen
|
||||
gc#a_sdGetC: sd_getc 'zeichen lesen
|
||||
gc#a_sdPutC: sd_putc 'zeichen schreiben
|
||||
gc#a_sdGetBlk: sd_getblk 'block lesen
|
||||
gc#a_sdPutBlk: sd_putblk 'block schreiben
|
||||
gc#a_sdSeek: sd_seek 'zeiger in datei positionieren
|
||||
gc#a_sdFAttrib: sd_fattrib 'dateiattribute übergeben
|
||||
gc#a_sdVolname: sd_volname 'volumelabel abfragen
|
||||
gc#a_sdCheckMounted: sd_checkmounted 'test ob volume gemounted 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_sdCheckFree: sd_checkfree 'test wie viele sektoren frei sind
|
||||
gc#a_sdNewFile: sd_newfile 'neue datei erzeugen
|
||||
gc#a_sdNewDir: sd_newdir 'neues verzeichnis wird erzeugt
|
||||
gc#a_sdDel: sd_del 'verzeichnis oder datei löschen
|
||||
gc#a_sdRename: sd_rename 'verzeichnis oder datei umbenennen
|
||||
gc#a_sdChAttrib: sd_chattrib 'attribute ändern
|
||||
gc#a_sdChDir: sd_chdir 'verzeichnis wechseln
|
||||
gc#a_sdFormat: sd_format 'medium formatieren
|
||||
gc#a_sdUnmount: sd_unmount 'medium abmelden
|
||||
gc#a_sdDmAct: sd_dmact 'dir-marker aktivieren
|
||||
gc#a_sdDmSet: sd_dmset 'dir-marker setzen
|
||||
gc#a_sdDmGet: sd_dmget 'dir-marker status abfragen
|
||||
gc#a_sdDmClr: sd_dmclr 'dir-marker löschen
|
||||
gc#a_sdDmPut: sd_dmput 'dir-marker status setzen
|
||||
gc#a_sdEOF: sd_eof 'eof abfragen
|
||||
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_sdCheckFree: sd_checkfree 'test wie viele sektoren frei sind
|
||||
gc#a_sdNewFile: sd_newfile 'neue datei erzeugen
|
||||
gc#a_sdNewDir: sd_newdir 'neues verzeichnis wird erzeugt
|
||||
gc#a_sdDel: sd_del 'verzeichnis oder datei löschen
|
||||
gc#a_sdRename: sd_rename 'verzeichnis oder datei umbenennen
|
||||
gc#a_sdChAttrib: sd_chattrib 'attribute ändern
|
||||
gc#a_sdChDir: sd_chdir 'verzeichnis wechseln
|
||||
gc#a_sdFormat: sd_format 'medium formatieren
|
||||
gc#a_sdUnmount: sd_unmount 'medium abmelden
|
||||
gc#a_sdDmAct: sd_dmact 'dir-marker aktivieren
|
||||
gc#a_sdDmSet: sd_dmset 'dir-marker setzen
|
||||
gc#a_sdDmGet: sd_dmget 'dir-marker status abfragen
|
||||
gc#a_sdDmClr: sd_dmclr 'dir-marker löschen
|
||||
gc#a_sdDmPut: sd_dmput 'dir-marker status setzen
|
||||
gc#a_sdEOF: sd_eof 'eof abfragen
|
||||
#ifdef __ADM_FAT_EXT
|
||||
gc#a_sdPos: sd_pos 'Zeiger in Datei abfragen
|
||||
gc#a_sdCopy: sd_copy 'Datei kopieren
|
||||
gc#a_sdDirSize: sd_dirsize 'Dateigrösse ->ist quatsch
|
||||
gc#a_sdPos: sd_pos 'Zeiger in Datei abfragen
|
||||
gc#a_sdCopy: sd_copy 'Datei kopieren
|
||||
gc#a_sdDirSize: sd_dirsize 'Dateigrösse ->ist quatsch
|
||||
#endif '__ADM_FAT_EXT
|
||||
#endif '__ADM_FAT
|
||||
|
||||
' ---------------------------------------------- Bluetooth-FUNKTIONEN
|
||||
#ifdef __ADM_BLT
|
||||
gc#a_bl_Command_On: blt_setCommandMode
|
||||
gc#a_bl_Command_On: blt_setCommandMode
|
||||
gc#a_bl_Command_Off: blt_setNormalMode
|
||||
#endif '__ADM_BLT
|
||||
|
||||
' ---------------------------------------------- COM-FUNKTIONEN
|
||||
#ifdef __ADM_COM
|
||||
gc#a_comInit: com_init
|
||||
gc#a_comTx: com_tx
|
||||
gc#a_comRx: com_rx
|
||||
gc#a_comTx: com_tx
|
||||
gc#a_comRx: com_rx
|
||||
#endif '__ADM_COM
|
||||
|
||||
' ---------------------------------------------- RTC-FUNKTIONEN
|
||||
#ifdef __ADM_RTC
|
||||
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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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
|
||||
|
||||
' ---------------------------------------------- DCF77-FUNKTIONEN
|
||||
#ifdef __ADM_DCF
|
||||
gc#a_DCF_InSync: dcf_getInSync 'Sync-Status senden
|
||||
gc#a_DCF_Update_Clock: dcf_updateRTC 'RTC Synchronisieren
|
||||
gc#a_DCF_GetBitError: dcf_getBitError
|
||||
gc#a_DCF_InSync: dcf_getInSync 'Sync-Status senden
|
||||
gc#a_DCF_Update_Clock: dcf_updateRTC 'RTC Synchronisieren
|
||||
gc#a_DCF_GetBitError: dcf_getBitError
|
||||
gc#a_DCF_GetDatacount: dcf_getDataCount
|
||||
gc#a_DCF_GetBitNumber: dcf_getBitNumber
|
||||
gc#a_DCF_GetBitLevel: dcf_getBitLevel
|
||||
gc#a_DCF_GetTimeZone: dcf_getTimeZone
|
||||
gc#a_DCF_GetBitLevel: dcf_getBitLevel
|
||||
gc#a_DCF_GetTimeZone: dcf_getTimeZone
|
||||
gc#a_DCF_GetActiveSet: dcf_getActiveSet
|
||||
gc#a_DCF_start: dcf_start 'DCF-Empfang starten
|
||||
gc#a_DCF_stop: dcf_stop 'DCF-Empfang stoppen
|
||||
gc#a_DCF_dcfon: dcf_state 'Status des DCF-Empfängers
|
||||
gc#a_DCF_GetSeconds: dcf_getSeconds
|
||||
gc#a_DCF_GetMinutes: dcf_getMinutes
|
||||
gc#a_DCF_GetHours: dcf_getHours
|
||||
gc#a_DCF_GetWeekDay: dcf_getWeekDay
|
||||
gc#a_DCF_GetDay: dcf_getDay
|
||||
gc#a_DCF_GetMonth: dcf_getMonth
|
||||
gc#a_DCF_GetYear: dcf_getYear
|
||||
gc#a_DCF_start: dcf_start 'DCF-Empfang starten
|
||||
gc#a_DCF_stop: dcf_stop 'DCF-Empfang stoppen
|
||||
gc#a_DCF_dcfon: dcf_state 'Status des DCF-Empfängers
|
||||
gc#a_DCF_GetSeconds: dcf_getSeconds
|
||||
gc#a_DCF_GetMinutes: dcf_getMinutes
|
||||
gc#a_DCF_GetHours: dcf_getHours
|
||||
gc#a_DCF_GetWeekDay: dcf_getWeekDay
|
||||
gc#a_DCF_GetDay: dcf_getDay
|
||||
gc#a_DCF_GetMonth: dcf_getMonth
|
||||
gc#a_DCF_GetYear: dcf_getYear
|
||||
#endif '__ADM_DCF
|
||||
|
||||
' ---------------------------------------------- LAN-FUNKTIONEN
|
||||
#ifdef __ADM_LAN
|
||||
gc#a_lanStart: lan_start 'Start Network
|
||||
gc#a_lanStop:lan_stop 'Stop Network
|
||||
gc#a_lanConnect: lan_connect 'ausgehende TCP-Verbindung öffnen
|
||||
gc#a_lanListen: lan_listen 'auf eingehende TCP-Verbindung lauschen
|
||||
gc#a_lanStart: lan_start 'Start Network
|
||||
gc#a_lanStop: lan_stop 'Stop Network
|
||||
gc#a_lanConnect: lan_connect 'ausgehende TCP-Verbindung öffnen
|
||||
gc#a_lanListen: lan_listen 'auf eingehende TCP-Verbindung lauschen
|
||||
gc#a_lanWaitConnTimeout: lan_waitconntimeout 'bestimmte Zeit auf Verbindung warten
|
||||
gc#a_lanClose: lan_close 'TCP-Verbindung schließen
|
||||
gc#a_lanRXTime: lan_rxtime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
|
||||
gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen
|
||||
gc#a_lanTXData: lan_txdata 'Daten senden
|
||||
gc#a_lanRXByte: lan_rxbyte 'wenn vorhanden, Byte aus Empfangspuffer lesen
|
||||
gc#a_lanIsConnected: lan_isconnected 'TRUE, wenn Socket verbunden, sonst FALSE
|
||||
gc#a_lanClose: lan_close 'TCP-Verbindung schließen
|
||||
gc#a_lanRXTime: lan_rxtime 'bestimmte Zeit warten auf Byte aus Empfangspuffer
|
||||
gc#a_lanRXData: lan_rxdata 'Daten aus Empfangspuffer lesen
|
||||
gc#a_lanTXData: lan_txdata 'Daten senden
|
||||
gc#a_lanRXByte: lan_rxbyte 'wenn vorhanden, Byte aus Empfangspuffer lesen
|
||||
gc#a_lanIsConnected: lan_isconnected 'TRUE, wenn Socket verbunden, sonst FALSE
|
||||
#endif '__ADM_LAN
|
||||
|
||||
' ---------------------------------------------- CHIP-MANAGMENT
|
||||
gc#a_mgrSetSound: mgr_setsound 'soundsubsysteme verwalten
|
||||
gc#a_mgrGetSpec: mgr_getspec 'spezifikation abfragen
|
||||
gc#a_mgrSetSound: mgr_setsound 'soundsubsysteme verwalten
|
||||
gc#a_mgrGetSpec: mgr_getspec 'spezifikation abfragen
|
||||
gc#a_mgrSetSysSound: mgr_setsyssound 'systemsound ein/ausschalten
|
||||
gc#a_mgrGetSoundSys: mgr_getsoundsys 'abfrage welches soundsystem aktiv ist
|
||||
gc#a_mgrALoad: mgr_aload 'neuen code booten
|
||||
gc#a_mgrGetCogs: mgr_getcogs 'freie cogs abfragen
|
||||
gc#a_mgrGetVer: mgr_getver 'codeversion abfragen
|
||||
gc#a_mgrReboot: reboot 'neu starten
|
||||
gc#a_mgrALoad: mgr_aload 'neuen code booten
|
||||
gc#a_mgrGetCogs: mgr_getcogs 'freie cogs abfragen
|
||||
gc#a_mgrGetVer: mgr_getver 'codeversion abfragen
|
||||
gc#a_mgrReboot: reboot 'neu starten
|
||||
|
||||
' ---------------------------------------------- HSS-FUNKTIONEN
|
||||
#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
|
||||
gc#a_hssPlay: hss.hmus_load(@bgmusic) 'play
|
||||
hss.hmus_play
|
||||
gc#a_hssPlay: hss.hmus_load(@bgmusic) 'play
|
||||
hss.hmus_play
|
||||
#endif '__ADM_HSS_PLAY
|
||||
gc#a_hssStop: hss.hmus_stop 'stop
|
||||
gc#a_hssPause: hss.hmus_pause 'pause
|
||||
gc#a_hssPeek: hss_peek 'register lesen
|
||||
gc#a_hssIntReg: hss_intreg 'interfaceregister auslesen
|
||||
gc#a_hssVol: hss_vol 'lautstärke setzen
|
||||
gc#a_sfxFire: sfx_fire 'sfx abspielen
|
||||
gc#a_hssStop: hss.hmus_stop 'stop
|
||||
gc#a_hssPause: hss.hmus_pause 'pause
|
||||
gc#a_hssPeek: hss_peek 'register lesen
|
||||
gc#a_hssIntReg: hss_intreg 'interfaceregister auslesen
|
||||
gc#a_hssVol: hss_vol 'lautstärke setzen
|
||||
gc#a_sfxFire: sfx_fire 'sfx abspielen
|
||||
gc#a_sfxSetSlot: sfx_setslot 'sfx-slot setzen
|
||||
gc#a_sfxKeyOff: sfx_keyoff
|
||||
gc#a_sfxStop: sfx_stop
|
||||
gc#a_sfxKeyOff: sfx_keyoff
|
||||
gc#a_sfxStop: sfx_stop
|
||||
#endif '__ADM_HSS
|
||||
|
||||
' ---------------------------------------------- PLX-Funktionen
|
||||
#ifdef __ADM_PLX
|
||||
gc#a_plxRun: plx.run 'plx-bus freigeben
|
||||
gc#a_plxHalt: plx.halt 'plx-bus anfordern
|
||||
gc#a_plxIn: plx_in 'port einlesen
|
||||
gc#a_plxOut: plx_out 'port ausgeben
|
||||
gc#a_plxCh: plx_ch 'ad-wandler auslesen
|
||||
gc#a_plxRun: plx.run 'plx-bus freigeben
|
||||
gc#a_plxHalt: plx.halt 'plx-bus anfordern
|
||||
gc#a_plxIn: plx_in 'port einlesen
|
||||
gc#a_plxOut: plx_out 'port ausgeben
|
||||
gc#a_plxCh: plx_ch 'ad-wandler auslesen
|
||||
gc#a_plxGetReg: plx_getReg 'poller-register lesen
|
||||
gc#a_plxSetReg: plx_setReg 'poller-register setzen
|
||||
gc#a_plxStart: plx.start 'i2c-dialog starten
|
||||
gc#a_plxStop: plx.stop 'i2c-dialog beenden
|
||||
gc#a_plxWrite: plx_write 'i2c byte senden
|
||||
gc#a_plxRead: plx_read 'i2c byte empfangen
|
||||
gc#a_plxPing: plx_ping 'abfrage ob device vorhanden ist
|
||||
gc#a_plxStart: plx.start 'i2c-dialog starten
|
||||
gc#a_plxStop: plx.stop 'i2c-dialog beenden
|
||||
gc#a_plxWrite: plx_write 'i2c byte senden
|
||||
gc#a_plxRead: plx_read 'i2c byte empfangen
|
||||
gc#a_plxPing: plx_ping 'abfrage ob device vorhanden ist
|
||||
gc#a_plxSetAdr: plx_setAddr 'adressen adda/ports für poller setzen
|
||||
' ---------------------------------------------- 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
|
||||
|
||||
' ---------------------------------------------- WAV-FUNKTIONEN
|
||||
#ifdef __ADM_WAV
|
||||
gc#a_sdwStart: sdw_start 'spielt wav-datei direkt von sd-card ab
|
||||
gc#a_sdwStop: sdw_stop 'stopt wav-cog
|
||||
gc#a_sdwStatus: sdw_status 'fragt status des players ab
|
||||
gc#a_sdwLeftVol: sdw_leftvol 'lautstärke links
|
||||
gc#a_sdwStart: sdw_start 'spielt wav-datei direkt von sd-card ab
|
||||
gc#a_sdwStop: sdw_stop 'stopt wav-cog
|
||||
gc#a_sdwStatus: sdw_status 'fragt status des players ab
|
||||
gc#a_sdwLeftVol: sdw_leftvol 'lautstärke links
|
||||
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
|
||||
#endif '__ADM_WAV
|
||||
|
||||
' ---------------------------------------------- SIDCog: DMP-Player-Funktionen (SIDCog2)
|
||||
#ifdef __ADM_SID
|
||||
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_dmpstop: sid_dmpstop 'dmp-player beenden
|
||||
gc#a_s_dmppause: sid_dmppause 'dmp-player pausenmodus
|
||||
gc#a_s_dmpstatus: sid_dmpstatus 'dmp-player statusabfrage
|
||||
gc#a_s_dmppos: sid_dmppos 'player-position im dumpfile
|
||||
gc#a_s_mute: sid_mute 'alle register löschen
|
||||
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_dmpstop: sid_dmpstop 'dmp-player beenden
|
||||
gc#a_s_dmppause: sid_dmppause 'dmp-player pausenmodus
|
||||
gc#a_s_dmpstatus: sid_dmpstatus 'dmp-player statusabfrage
|
||||
gc#a_s_dmppos: sid_dmppos 'player-position im dumpfile
|
||||
gc#a_s_mute: sid_mute 'alle register löschen
|
||||
|
||||
' ---------------------------------------------- SIDCog1-Funktionen
|
||||
gc#a_s1_setRegister: sid1.setRegister(bus_getchar,bus_getchar)
|
||||
gc#a_s1_updateRegisters: sid1.updateRegisters(sub_getdat(25,@s1buffer))
|
||||
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_noteOn: sid1.noteOn(bus_getchar, sub_getlong)
|
||||
gc#a_s1_noteOff: sid1.noteOff(bus_getchar)
|
||||
gc#a_s1_setFreq: sid1.setFreq(bus_getchar,sub_getlong)
|
||||
gc#a_s1_setWaveform: sid1.setWaveform(bus_getchar,bus_getchar)
|
||||
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_setResonance: sid1.setResonance(bus_getchar)
|
||||
gc#a_s1_setCutoff: sid1.setCutoff(sub_getlong)
|
||||
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_enableRingmod: sid1.enableRingmod(bus_getchar,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_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_noteOn: sid1.noteOn(bus_getchar, sub_getlong)
|
||||
gc#a_s1_noteOff: sid1.noteOff(bus_getchar)
|
||||
gc#a_s1_setFreq: sid1.setFreq(bus_getchar,sub_getlong)
|
||||
gc#a_s1_setWaveform: sid1.setWaveform(bus_getchar,bus_getchar)
|
||||
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_setResonance: sid1.setResonance(bus_getchar)
|
||||
gc#a_s1_setCutoff: sid1.setCutoff(sub_getlong)
|
||||
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_enableRingmod: sid1.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
||||
gc#a_s1_enableSynchronization: sid1.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
||||
|
||||
' ---------------------------------------------- SIDCog2-Funktionen
|
||||
gc#a_s2_setRegister: sid2.setRegister(bus_getchar,bus_getchar)
|
||||
gc#a_s2_updateRegisters: sid2.updateRegisters(sub_getdat(25,@s1buffer))
|
||||
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_noteOn: sid2.noteOn(bus_getchar, sub_getlong)
|
||||
gc#a_s2_noteOff: sid2.noteOff(bus_getchar)
|
||||
gc#a_s2_setFreq: sid2.setFreq(bus_getchar,sub_getlong)
|
||||
gc#a_s2_setWaveform: sid2.setWaveform(bus_getchar,bus_getchar)
|
||||
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_setResonance: sid2.setResonance(bus_getchar)
|
||||
gc#a_s2_setCutoff: sid2.setCutoff(sub_getlong)
|
||||
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_enableRingmod: sid2.enableRingmod(bus_getchar,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_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_noteOn: sid2.noteOn(bus_getchar, sub_getlong)
|
||||
gc#a_s2_noteOff: sid2.noteOff(bus_getchar)
|
||||
gc#a_s2_setFreq: sid2.setFreq(bus_getchar,sub_getlong)
|
||||
gc#a_s2_setWaveform: sid2.setWaveform(bus_getchar,bus_getchar)
|
||||
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_setResonance: sid2.setResonance(bus_getchar)
|
||||
gc#a_s2_setCutoff: sid2.setCutoff(sub_getlong)
|
||||
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_enableRingmod: sid2.enableRingmod(bus_getchar,bus_getchar,bus_getchar)
|
||||
gc#a_s2_enableSynchronization: sid2.enableSynchronization(bus_getchar,bus_getchar,bus_getchar)
|
||||
|
||||
' ---------------------------------------------- SID Zusatzfunktionen
|
||||
gc#a_s2_resetRegisters: sid2.resetRegisters
|
||||
gc#a_s1_resetRegisters: sid1.resetRegisters
|
||||
gc#a_s2_resetRegisters: sid2.resetRegisters
|
||||
gc#a_s1_resetRegisters: sid1.resetRegisters
|
||||
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
|
||||
|
||||
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
||||
#ifdef __ADM_AYS
|
||||
gc#a_ayStart: ay_start
|
||||
gc#a_ayStop: ay_stop
|
||||
gc#a_ayStart: ay_start
|
||||
gc#a_ayStop: ay_stop
|
||||
gc#a_ayUpdateRegisters: ay_updateRegisters
|
||||
#endif '__ADM_AYS
|
||||
|
||||
|
@ -655,7 +672,7 @@ PRI init_chip | err,i,j 'chip: initialisierung d
|
|||
clr_dmarker 'dir-marker löschen
|
||||
sdfat.FATEngine
|
||||
repeat
|
||||
waitcnt(cnt + clkfreq/10)
|
||||
waitcnt(cnt + clkfreq)
|
||||
until sd_mount("B") == 0
|
||||
'err := sd_mount("B")
|
||||
'siglow(err)
|
||||
|
@ -694,8 +711,11 @@ PRI init_chip | err,i,j 'chip: initialisierung d
|
|||
#endif '__ADM_COM
|
||||
|
||||
#ifdef __ADM_PLX
|
||||
'plx-bus initialisieren
|
||||
plx.init 'defaultwerte setzen, poller-cog starten
|
||||
plx.run 'plexbus freigeben (poller läuft)
|
||||
|
||||
FunctionGenerator:=0 'Funktionsgenerator aus
|
||||
#endif '__ADM_PLX
|
||||
|
||||
#ifdef __ADM_LAN
|
||||
|
@ -1378,7 +1398,7 @@ PRI sd_del | err 'sdcard: eine datei oder
|
|||
|
||||
sub_getstr
|
||||
err := \sdfat.deleteEntry(@tbuf)
|
||||
sighigh(err) 'fehleranzeige
|
||||
siglow(err) 'fehleranzeige
|
||||
bus_putchar(err) 'ergebnis der operation senden
|
||||
|
||||
PRI sd_rename | err 'sdcard: datei oder verzeichnis umbenennen
|
||||
|
@ -2373,6 +2393,11 @@ CON ''------------------------------------------------- PLX-Funktionen
|
|||
|
||||
#ifdef __ADM_PLX
|
||||
|
||||
VAR
|
||||
|
||||
byte FunctionGenerator 'On/Off Marker Funktionsgenerator
|
||||
|
||||
|
||||
PRI plx_in | addr 'port einlesen
|
||||
|
||||
addr := bus_getchar
|
||||
|
@ -2382,15 +2407,13 @@ PRI plx_out | addr, data 'port ausgeben
|
|||
|
||||
addr := bus_getchar
|
||||
data := bus_getchar
|
||||
plx.halt
|
||||
plx.out(addr,data)
|
||||
plx.run
|
||||
|
||||
PRI plx_ch | addr, chan 'ad-wandler auslesen
|
||||
|
||||
addr := bus_getchar
|
||||
chan := bus_getchar
|
||||
plx.ad_ch(addr,chan)
|
||||
bus_putchar(plx.ad_ch(addr,chan))
|
||||
|
||||
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
|
||||
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
|
||||
if reg>3 and reg<7
|
||||
bus_putchar(!plx.getreg(reg))
|
||||
else
|
||||
bus_putchar(plx.getreg(reg))
|
||||
bus_putchar(!plx.getreg(plx#R_INP0))
|
||||
|
||||
PRI plx_get_paddle 'Paddle abfragen (1 x 8bit Port 1 x Analog)
|
||||
|
||||
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
|
||||
|
||||
|
@ -2455,6 +2520,21 @@ DAT
|
|||
|
||||
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
|
||||
''funktionsgruppe : lan
|
||||
''funktion : Netzwerk starten
|
||||
|
@ -2512,7 +2592,7 @@ PRI lan_start | hiveid, hivestr, strpos, macpos, i, a
|
|||
byte[hivestr+strpos] := 0
|
||||
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
|
||||
|
||||
|
||||
|
@ -2524,7 +2604,7 @@ PRI lan_stop
|
|||
''busprotokoll : [072]
|
||||
|
||||
if lan_started
|
||||
sock.stop
|
||||
\sock.stop
|
||||
lan_started := false
|
||||
|
||||
PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
||||
|
@ -2547,8 +2627,8 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
|||
quit
|
||||
i++
|
||||
|
||||
ifnot (handle := sock.connect(ipaddr, remoteport, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||
sock.resetBuffers(handle)
|
||||
ifnot (handle := \sock.connect(ipaddr, remoteport, @bufmain[i*rxlen], rxlen, @buftx[i*txlen], txlen)) == -102
|
||||
\sock.resetBuffers(handle)
|
||||
handleidx := handle.byte[0] 'extract the handle index from the lower 8 bits
|
||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||
bufidx[i] :=handleidx
|
||||
|
@ -2559,22 +2639,36 @@ PRI lan_connect | ipaddr, remoteport, handle, handleidx, i
|
|||
PRI lan_listen | port, handle, handleidx, i
|
||||
''funktionsgruppe : lan
|
||||
''funktion : Port für eingehende TCP-Verbindung öffnen
|
||||
'' bei bereits bestehendem Socket nur handleidx zurücksenden
|
||||
''eingabe : -
|
||||
''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
|
||||
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
||||
|
||||
handleidx := bus_getchar
|
||||
port := sub_getword
|
||||
|
||||
'freien Pufferabschnitt suchen
|
||||
i := 0
|
||||
repeat sock#sNumSockets
|
||||
if bufidx[i] == $FF '0xFF: nicht zugewiesen
|
||||
quit
|
||||
i++
|
||||
if handleidx <> $FF 'bestehender (kein neuer) Socket
|
||||
if \sock.isValidHandle(sockhandle[handleidx]) 'Socket gültig
|
||||
bus_putchar(handleidx) 'alten handleidx zurücksenden
|
||||
return
|
||||
|
||||
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
|
||||
sockhandle[handleidx] := handle 'komplettes handle zu handle index speichern
|
||||
bufidx[i] :=handleidx
|
||||
|
@ -2596,7 +2690,7 @@ PRI lan_waitconntimeout | handleidx, timeout, t, connected
|
|||
timeout := sub_getword
|
||||
|
||||
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)
|
||||
|
||||
|
@ -2610,14 +2704,15 @@ PRI lan_close | handleidx, i
|
|||
|
||||
handleidx := bus_getchar
|
||||
|
||||
sock.close(sockhandle[handleidx])
|
||||
\sock.close(sockhandle[handleidx])
|
||||
|
||||
'reservierten Pufferabschnitt freigeben
|
||||
i := 0
|
||||
repeat sock#sNumSockets
|
||||
if bufidx[i++] == handleidx '0xFF: nicht zugewiesen
|
||||
bufidx[i++] := $FF
|
||||
if bufidx[i] == handleidx '0xFF: nicht zugewiesen
|
||||
bufidx[i] := $FF
|
||||
quit
|
||||
i++
|
||||
|
||||
|
||||
PRI lan_rxtime | handleidx, timeout, t, rxbyte
|
||||
|
@ -2636,7 +2731,7 @@ PRI lan_rxtime | handleidx, timeout, t, rxbyte
|
|||
timeout := sub_getword
|
||||
|
||||
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)
|
||||
|
||||
|
@ -2656,8 +2751,8 @@ PRI lan_rxdata | handleidx, len, rxbyte, error
|
|||
|
||||
repeat len
|
||||
ifnot error
|
||||
repeat while (rxbyte := sock.readByteNonBlocking(sockhandle[handleidx])) < 0
|
||||
ifnot sock.isConnected(sockhandle[handleidx])
|
||||
repeat while (rxbyte := \sock.readByteNonBlocking(sockhandle[handleidx])) < 0
|
||||
ifnot \sock.isConnected(sockhandle[handleidx])
|
||||
error := sock#ERRSOCKETCLOSED
|
||||
quit
|
||||
bus_putchar(rxbyte)
|
||||
|
@ -2681,8 +2776,8 @@ PRI lan_txdata | handleidx, len, txbyte, error
|
|||
repeat len
|
||||
txbyte := bus_getchar
|
||||
ifnot error
|
||||
repeat while sock.writeByteNonBlocking(sockhandle[handleidx], txbyte) < 0
|
||||
ifnot sock.isConnected(sockhandle[handleidx])
|
||||
repeat while \sock.writeByteNonBlocking(sockhandle[handleidx], txbyte) < 0
|
||||
ifnot \sock.isConnected(sockhandle[handleidx])
|
||||
error := sock#ERRSOCKETCLOSED
|
||||
quit
|
||||
|
||||
|
@ -2699,7 +2794,7 @@ PRI lan_rxbyte
|
|||
'' : rxbyte - empfangenes Zeichen oder
|
||||
'' : sock#RETBUFFEREMPTY (-1) wenn kein Zeichen vorhanden
|
||||
|
||||
bus_putchar(sock.readByteNonBlocking(sockhandle[bus_getchar]))
|
||||
bus_putchar(\sock.readByteNonBlocking(sockhandle[bus_getchar]))
|
||||
|
||||
PRI lan_isconnected
|
||||
''funktionsgruppe : lan
|
||||
|
@ -2710,7 +2805,7 @@ PRI lan_isconnected
|
|||
'' : handleidx - lfd. Nr. der Verbindung
|
||||
'' : connected - TRUE wenn verbunden, sonst FALSE
|
||||
|
||||
bus_putchar(sock.isConnected(sockhandle[bus_getchar]))
|
||||
bus_putchar(\sock.isConnected(sockhandle[bus_getchar]))
|
||||
|
||||
DAT
|
||||
long ' long alignment for addresses
|
||||
|
|
|
@ -72,6 +72,7 @@ Logbuch :
|
|||
21-10-2012-uheld - Window-Funktionen
|
||||
28-11-2012-uheld - wahlweise Einbindung von VGA- oder TV-Treiber über #define
|
||||
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:
|
||||
- setheader
|
||||
|
@ -132,6 +133,14 @@ $0A..FF CHAR Zeichenausgabe
|
|||
'#define __TV
|
||||
'#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
|
||||
|
||||
_CLKMODE = XTAL1 + PLL16X
|
||||
|
|
|
@ -55,9 +55,9 @@ word[7] - DCURR - Stack pointer. This is the initial value of the stack pointer.
|
|||
|
||||
|
||||
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 regime ' spin-loader OHNE FORTH, reg.sys wird sofort automatisch gestartet
|
||||
|
|
|
@ -481,5 +481,9 @@ wvariable lcog \ nummer interaktiven cog
|
|||
: _ob onboot ;
|
||||
: onboot _ob start ;
|
||||
|
||||
saveforth
|
||||
|
||||
reboot
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -28,26 +28,26 @@ Notizen :
|
|||
|
||||
|
||||
OBJ
|
||||
gc : "m-glob-con"
|
||||
gc : "glob-con"
|
||||
|
||||
|
||||
CON
|
||||
|
||||
SCL = gc#adm_scl
|
||||
SDA = gc#adm_sda
|
||||
' VNX = gc#adm_int1
|
||||
|
||||
' portadressen sepia
|
||||
|
||||
'pcf8574 %0100_ABC_0
|
||||
PORT1 = %0100_000 '$20
|
||||
PORT2 = %0100_001 '$21
|
||||
PORT3 = %0100_010 '$22
|
||||
{
|
||||
|
||||
'pcf8574a %0111_ABC_0
|
||||
PORT1 = %0111_000 '$38
|
||||
PORT2 = %0111_001 '$39
|
||||
PORT3 = %0111_010 '$3A
|
||||
}
|
||||
' PORT1 = %0111_000 '$38
|
||||
' PORT2 = %0111_001 '$39
|
||||
' PORT3 = %0111_010 '$3A
|
||||
|
||||
' ad/da-wandler-adresse
|
||||
|
||||
'pcf8591 %1001_ABC_R
|
||||
|
@ -84,7 +84,7 @@ CON
|
|||
R_INP0 = 4
|
||||
R_INP1 = 5
|
||||
R_INP2 = 6
|
||||
' R_VNX = 7
|
||||
|
||||
|
||||
|
||||
VAR
|
||||
|
@ -120,11 +120,7 @@ PUB init 'plx: io-system initiali
|
|||
|
||||
'pollcog starten
|
||||
plxcogid := cognew(poller,@plxstack)
|
||||
pub plxstop
|
||||
|
||||
if(plxcogid)
|
||||
cogstop(plxcogid~ - 1)
|
||||
lockret(-1 + plxlock~)
|
||||
PRI poller 'plx: pollcog
|
||||
|
||||
repeat
|
||||
|
@ -134,18 +130,14 @@ PRI poller 'plx: pollcog
|
|||
'analoge eingänge pollen
|
||||
plxreg[R_PAD0] := ad_ch(adr_adda,0)
|
||||
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_PAD3] := ad_ch(adr_adda,3)
|
||||
lockclr(plxlock) 'bus freigeben
|
||||
|
||||
repeat until not lockset(plxlock) 'auf freien bus warten
|
||||
'digitale eingabeports pollen
|
||||
plxreg[R_INP0] := in(adr_port )
|
||||
plxreg[R_INP1] := in(adr_port+1)
|
||||
plxreg[R_INP2] := in(adr_port+2)
|
||||
|
||||
'semaphore freigeben
|
||||
lockclr(plxlock) 'bus freigeben
|
||||
|
||||
|
@ -211,11 +203,27 @@ PUB ping(adr):ack 'plx: device anpingen
|
|||
|
||||
PUB setadr(adradda,adrport)
|
||||
|
||||
'halt
|
||||
halt
|
||||
adr_adda := adradda
|
||||
adr_port := adrport
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
OBJ
|
||||
nic : "driver_enc28j60"
|
||||
nic : "adm-enc28j60"
|
||||
|
||||
'ser : "SerialMirror"
|
||||
'stk : "Stack Length"
|
|
@ -20,17 +20,32 @@
|
|||
|
||||
CON
|
||||
|
||||
' 1024 x 768 @ 60Hz settings
|
||||
|
||||
' 1024 x 768 @ H:48KHz V:60Hz settings
|
||||
#ifdef __VGA_MONSET1
|
||||
hp = 1024 'horizontal pixels
|
||||
vp = 768 'vertical pixels
|
||||
hf = 24 'horizontal front porch pixels
|
||||
hs = 136 'horizontal sync pixels
|
||||
hs = 136 'horizontal sync pixels
|
||||
hb = 160 'horizontal back porch pixels
|
||||
vf = 3 'vertical front porch lines
|
||||
vs = 6 'vertical sync lines
|
||||
vb = 29 'vertical back porch lines
|
||||
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
|
||||
|
||||
|
|
|
@ -52,9 +52,6 @@ FL_SEL = %0000_0001 'eintrag ist selektiert
|
|||
|
||||
FL_FOCUS = %0000_0001 'box ist selektiert
|
||||
|
||||
DR_SD = 0
|
||||
DR_RAM = 1
|
||||
DR_BLK = 2
|
||||
|
||||
PUB dummy
|
||||
|
||||
|
|
|
@ -47,6 +47,12 @@ CON 'Signaldefinitionen --------------------------------------------------------
|
|||
#21, A_Bluetooth_Line 'Key-Line des HC05-Bluetooth-Moduls
|
||||
#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 -------------------------------------------------------------------------------------
|
||||
|
||||
KEY_CTRL = 2
|
||||
|
@ -198,7 +204,8 @@ A_BLT = %00000000_00000000_00001000_00000000
|
|||
a_DCF_GetYear '77
|
||||
|
||||
' ---------------------------------------------- LAN-FUNKTIONEN
|
||||
#81, a_lanStart 'Start Network
|
||||
#80, a_lanTXFlush 'Warten, bis Sendepuffer geleert ist
|
||||
a_lanStart 'Start Network
|
||||
a_lanStop 'Stop Network
|
||||
a_lanConnect 'ausgehende TCP-Verbindung öffnen
|
||||
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_SetJoy 'Port für Joystick 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
|
||||
#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_dmpreg '199 'soundinformationen senden
|
||||
|
||||
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
|
||||
#200, a_ayStart
|
||||
a_ayStop
|
||||
a_ayUpdateRegisters
|
||||
' ############################################## mehrfach verwendete Funktionen
|
||||
' 200 ... 254 können mehrfach verwendet,
|
||||
' dürfen aber nur einmal
|
||||
' 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 --------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
|||
Typ : Programm
|
||||
Version :
|
||||
Subversion :
|
||||
Funktion :
|
||||
Funktion : Fenster mit Dateiliste
|
||||
Komponenten : -
|
||||
COG's : -
|
||||
Logbuch :
|
||||
|
@ -79,10 +79,28 @@ PUB redraw | i
|
|||
i++
|
||||
ios.printnl
|
||||
|
||||
PUB setpos(pos)
|
||||
PUB setpos(npos)|opos,i,col,row
|
||||
|
||||
box_pos := pos
|
||||
redraw
|
||||
opos := box_pos
|
||||
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)
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
|||
Typ : Programm
|
||||
Version :
|
||||
Subversion :
|
||||
Funktion :
|
||||
Funktion : Eingabedialog String
|
||||
Komponenten : -
|
||||
COG's : -
|
||||
Logbuch :
|
||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
|||
Typ : Programm
|
||||
Version :
|
||||
Subversion :
|
||||
Funktion :
|
||||
Funktion : Infodialog mit Fortschrittsbalken
|
||||
Komponenten : -
|
||||
COG's : -
|
||||
Logbuch :
|
||||
|
|
|
@ -14,7 +14,7 @@ Chip : Regnatix
|
|||
Typ : Programm
|
||||
Version :
|
||||
Subversion :
|
||||
Funktion :
|
||||
Funktion : Warndialog mit zwei Buttons
|
||||
Komponenten : -
|
||||
COG's : -
|
||||
Logbuch :
|
||||
|
@ -64,10 +64,14 @@ PUB draw(stradr1,stradr2,stradr3):button | key,bnr
|
|||
draw_buttons(stradr2,stradr3,bnr)
|
||||
key := ios.keywait
|
||||
case key
|
||||
gc#KEY_CURLEFT: bnr := 1
|
||||
gc#KEY_CURRIGHT: bnr := 2
|
||||
gc#KEY_CURLEFT: bnr := 1
|
||||
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
|
||||
|
||||
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)
|
||||
#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
|
||||
|
||||
ADM_OPT = 0
|
||||
|
@ -85,32 +91,44 @@ ADM_COM_RX = 41 'com: zeichen empfangen
|
|||
|
||||
adm_m_run = 50 'plx: polling aktivieren
|
||||
adm_m_halt = 51 'plx: polling anhalten
|
||||
adm_m_setctrl = 52
|
||||
adm_m_in = 53
|
||||
adm_m_out = 54
|
||||
adm_m_ad_ch = 55
|
||||
adm_m_getreg = 56
|
||||
adm_m_setreg = 57
|
||||
adm_m_start = 58
|
||||
adm_m_stop = 59
|
||||
adm_m_write = 60
|
||||
adm_m_read = 61
|
||||
adm_m_ping = 62
|
||||
adm_m_in = 52
|
||||
adm_m_out = 53
|
||||
adm_m_adch = 54
|
||||
adm_m_getreg = 55
|
||||
adm_m_setreg = 56
|
||||
adm_m_start = 57
|
||||
adm_m_stop = 58
|
||||
adm_m_write = 59
|
||||
adm_m_read = 60
|
||||
adm_m_ping = 61
|
||||
adm_m_setadr = 62
|
||||
adm_m_joy = 63
|
||||
adm_m_paddle = 64
|
||||
adm_m_pad = 65
|
||||
adm_m_setjoy = 66
|
||||
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_getver = 98 'codeversion abfragen
|
||||
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
|
||||
|
|
132
lib/reg-ios.spin
132
lib/reg-ios.spin
|
@ -28,6 +28,7 @@ Administra
|
|||
scr : Screeninterface
|
||||
hss : Hydra-Soundsystem
|
||||
sfx : Sound-FX
|
||||
plx : Gamedevices & Plexbus
|
||||
|
||||
Bellatrix
|
||||
key : Keyboardroutinen
|
||||
|
@ -484,7 +485,7 @@ PUB admload(stradr)|dmu 'chip-mgr: neuen adminis
|
|||
''busprotokoll : [096][sub_putstr.fn]
|
||||
'' : fn - dateiname des neuen administra-codes
|
||||
|
||||
bus_putchar1(gc#a_mgrALoad) 'aktuelles userdir retten
|
||||
bus_putchar1(gc#a_mgrALoad)
|
||||
bus_putstr1(stradr)
|
||||
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
|
||||
|
||||
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
|
||||
''funktionsgruppe : lan
|
||||
''funktion : Netzwerk starten
|
||||
|
@ -1074,16 +1088,18 @@ PUB lan_connect(ipaddr, remoteport): handleidx
|
|||
bus_putword1(remoteport)
|
||||
handleidx := bus_getchar1
|
||||
|
||||
PUB lan_listen(port): handleidx
|
||||
PUB lan_listen(oldhandleidx, port): handleidx
|
||||
''funktionsgruppe : lan
|
||||
''funktion : Port für eingehende TCP-Verbindung öffnen
|
||||
''eingabe : -
|
||||
''ausgabe : -
|
||||
''busprotokoll : [074][sub_putword.port][get.handleidx]
|
||||
'' : port - zu öffnende Portnummer
|
||||
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
||||
''busprotokoll : [074][put.handleidx][sub_putword.port][get.handleidx]
|
||||
'' : oldhandleidx - lfd. Nr. der bestehenden Verbindung ($FF wenn neu)
|
||||
'' : port - zu öffnende Portnummer
|
||||
'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle)
|
||||
|
||||
bus_putchar1(gc#a_lanListen)
|
||||
bus_putchar1(oldhandleidx)
|
||||
bus_putword1(port)
|
||||
handleidx := bus_getchar1
|
||||
|
||||
|
@ -1493,22 +1509,22 @@ PUB sid_sdmpplay(stradr): err 'sid: dmp-datei stereo a
|
|||
bus_putstr1(stradr)
|
||||
err := bus_getchar1
|
||||
|
||||
PUB sid_dmpstop
|
||||
PUB sid_dmpstop 'sid: dmp-player anhalten
|
||||
bus_putchar1(gc#a_s_dmpstop)
|
||||
|
||||
PUB sid_dmppause
|
||||
PUB sid_dmppause 'sid: dmp-player pausieren
|
||||
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)
|
||||
status := bus_getchar1
|
||||
|
||||
PUB sid_dmppos: wert
|
||||
PUB sid_dmppos: wert 'sid: dmp-player playposition abfragen
|
||||
bus_putchar1(gc#a_s_dmppos)
|
||||
wert := 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_getlong1
|
||||
wert := bus_getlong1
|
||||
|
@ -1726,6 +1742,98 @@ PUB com_rx:char 'com: zeichen empfangen
|
|||
bus_putchar1(gc#a_comRx)
|
||||
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
|
||||
|
||||
CON ''------------------------------------------------- CHIP-MANAGMENT
|
||||
|
@ -1950,6 +2058,10 @@ PUB printcstr(eadr) | i,len 'screen: bildschirmausga
|
|||
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
|
||||
{{printdec(value) - screen: dezimale bildschirmausgabe zahlenwertes}}
|
||||
|
|
2
make.bat
2
make.bat
|
@ -28,7 +28,7 @@ REM ----------------------------------------------------------------
|
|||
REM Flashdateien erzeugen
|
||||
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%
|
||||
move admflash.binary %sdsys%\admsys.adm
|
||||
|
||||
|
|
2
make.sh
2
make.sh
|
@ -25,7 +25,7 @@ mkdir ${flash}
|
|||
# Flashdateien erzeugen
|
||||
# --> 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}
|
||||
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 : -
|
||||
COG's : -
|
||||
Logbuch :
|
||||
|
||||
27-04-2013-dr235 - erste version
|
||||
01-11-2013-dr235 - redraw/geschwindigkeit verbessert
|
||||
- div. kleine Optimierungen und Detailverbesserungen
|
||||
|
||||
Kommandoliste :
|
||||
Notizen :
|
||||
|
||||
- view nach f9
|
||||
- tab in wbox
|
||||
|
||||
}}
|
||||
|
||||
OBJ
|
||||
|
||||
ios : "reg-ios"
|
||||
dlbox[2] : "gui-dlbox"
|
||||
pbar : "gui-pbar"
|
||||
wbox : "gui-wbox"
|
||||
input : "gui-input"
|
||||
dlbox[2] : "gui-dlbox" 'die beiden dateifenster
|
||||
pbar : "gui-pbar" 'progress-bar
|
||||
wbox : "gui-wbox" 'warnbox
|
||||
input : "gui-input" 'eingabedialog
|
||||
fm : "fm-con"
|
||||
gc : "glob-con"
|
||||
str : "glob-string"
|
||||
|
@ -53,51 +55,48 @@ VAR
|
|||
byte w_pos[2] 'positionen im fenster
|
||||
byte w_view[2] 'startposition des fensters
|
||||
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_flags[fm#MAX_FILES] 'selected, directory usw.
|
||||
byte w0_list[fm#MAX_BUFFER] 'verzeichnisliste sdcard
|
||||
byte w0_flags[fm#MAX_FILES] 'flags (selktiert, typ)
|
||||
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_flags[fm#MAX_FILES]
|
||||
long w1_len[fm#MAX_FILES]
|
||||
byte w1_number
|
||||
byte w1_list[fm#MAX_BUFFER] 'verzeichnisliste ramdrive
|
||||
byte w1_flags[fm#MAX_FILES] 'flags
|
||||
long w1_len[fm#MAX_FILES] 'dateilängen
|
||||
byte w1_number 'anzahl der dateien
|
||||
|
||||
PUB main | key
|
||||
|
||||
init
|
||||
dlbox[0].focus
|
||||
dlbox[0].draw
|
||||
dlbox[1].draw
|
||||
info_print
|
||||
|
||||
repeat
|
||||
key := ios.keywait
|
||||
case key
|
||||
gc#KEY_CURUP: f_curup
|
||||
gc#KEY_CURDOWN: f_curdown
|
||||
gc#KEY_CURLEFT: f_curleft
|
||||
gc#KEY_CURRIGHT: f_curright
|
||||
gc#KEY_PAGEUP: f_pageup
|
||||
gc#KEY_PAGEDOWN: f_pagedown
|
||||
gc#KEY_RETURN: f_open
|
||||
gc#KEY_BS: f_back
|
||||
gc#KEY_SPACE: f_select
|
||||
gc#KEY_ESC:
|
||||
gc#KEY_TAB: f_focus
|
||||
gc#KEY_POS1: f_pos1
|
||||
gc#KEY_F01: f_view
|
||||
gc#KEY_F02: f_del
|
||||
gc#KEY_F03: f_load
|
||||
gc#KEY_F04: f_save
|
||||
gc#KEY_F05: f_empty
|
||||
gc#KEY_F06: f_mount
|
||||
gc#KEY_F07: f_mkdir
|
||||
gc#KEY_F08: f_selall
|
||||
gc#KEY_F09: f_full
|
||||
gc#KEY_F10: f_quit
|
||||
gc#KEY_CURUP: f_curup
|
||||
gc#KEY_CURDOWN: f_curdown
|
||||
gc#KEY_CURLEFT: f_curleft
|
||||
gc#KEY_CURRIGHT: f_curright
|
||||
gc#KEY_PAGEUP: f_pageup
|
||||
gc#KEY_PAGEDOWN: f_pagedown
|
||||
gc#KEY_RETURN: f_open
|
||||
gc#KEY_BS: f_back
|
||||
gc#KEY_SPACE: f_select
|
||||
gc#KEY_ESC: f_menu
|
||||
gc#KEY_TAB: f_focus
|
||||
gc#KEY_POS1: f_pos1
|
||||
gc#KEY_F01: f_view
|
||||
gc#KEY_F02: f_del
|
||||
gc#KEY_F03: f_load
|
||||
gc#KEY_F04: f_save
|
||||
gc#KEY_F05: f_empty
|
||||
gc#KEY_F06: f_mount
|
||||
gc#KEY_F07: f_mkdir
|
||||
gc#KEY_F08: f_selall
|
||||
gc#KEY_F09: f_full
|
||||
gc#KEY_F10: f_quit
|
||||
"m": f_menu
|
||||
"q": f_quit
|
||||
|
||||
|
||||
PRI init
|
||||
|
||||
|
@ -112,8 +111,6 @@ PRI init
|
|||
w_view[0] := w_view[1] := 0
|
||||
w_cols[0] := (fm#W1X2-fm#W1X1)/(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
|
||||
|
||||
frame_draw
|
||||
|
@ -128,19 +125,24 @@ PRI init
|
|||
wbox.define(5,fm#W4X1,fm#W4Y1,fm#W4X2,fm#W4Y2)
|
||||
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
|
||||
ios.sdunmount
|
||||
repeat
|
||||
wbox.draw(@str5,@str2,@str3) == 1
|
||||
wbox.draw(@str5,@str2,@str6)
|
||||
while ios.sdmount
|
||||
dlbox[0].draw
|
||||
dlbox[1].draw
|
||||
info_print
|
||||
|
||||
PRI f_mkdir
|
||||
PRI f_mkdir 'fkt: verzeichnis erstellen
|
||||
|
||||
ios.sdnewdir(input.draw(string("Name eingeben : ")))
|
||||
w0_clrlist
|
||||
|
@ -149,22 +151,24 @@ PRI f_mkdir
|
|||
dlbox[1].draw
|
||||
info_print
|
||||
|
||||
PRI f_selall | i
|
||||
PRI f_selall | i 'fkt: alle dateien im verzeichnis selektieren
|
||||
|
||||
i := 0
|
||||
case w_sel
|
||||
0: repeat w0_number
|
||||
0: i := 2 'std-einträge . .. auslassen
|
||||
repeat w0_number
|
||||
w0_flags[i++] ^= fm#FL_SEL
|
||||
1: repeat w1_number
|
||||
1: i := 0
|
||||
repeat w1_number
|
||||
w1_flags[i++] ^= fm#FL_SEL
|
||||
dlbox[w_sel].redraw
|
||||
|
||||
PRI f_pos1
|
||||
PRI f_pos1 'fkt: homeposition im fenster
|
||||
|
||||
w_pos[w_sel] := 0
|
||||
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||
|
||||
PRI f_full
|
||||
PRI f_full 'fkt: fenster maximieren
|
||||
|
||||
if w_sel
|
||||
dlbox[1].defocus
|
||||
|
@ -181,7 +185,7 @@ PRI f_full
|
|||
dlbox[1].draw
|
||||
w_sel := 0
|
||||
|
||||
PRI f_open
|
||||
PRI f_open 'fkt: verzeichnis öffnen
|
||||
|
||||
'nur fenster 1 und verzeichnisse
|
||||
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
|
||||
info_print
|
||||
|
||||
PRI f_back
|
||||
PRI f_back 'fkt: verzeichnisebene zurück
|
||||
|
||||
ios.sdchdir(string(".."))
|
||||
w0_clrlist
|
||||
|
@ -199,7 +203,7 @@ PRI f_back
|
|||
dlbox[w_sel].redraw
|
||||
info_print
|
||||
|
||||
PRI f_curup
|
||||
PRI f_curup 'fkt: cursor hoch
|
||||
|
||||
if w_pos[w_sel] > 1
|
||||
w_pos[w_sel] -= dlbox[w_sel].getcols
|
||||
|
@ -207,7 +211,7 @@ PRI f_curup
|
|||
info_print
|
||||
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)
|
||||
w_pos[w_sel] += dlbox[w_sel].getcols
|
||||
|
@ -215,7 +219,7 @@ PRI f_curdown
|
|||
info_print
|
||||
dir := 1
|
||||
|
||||
PRI f_curleft
|
||||
PRI f_curleft 'fkt: cursor links
|
||||
|
||||
if w_pos[w_sel]
|
||||
w_pos[w_sel]--
|
||||
|
@ -223,7 +227,7 @@ PRI f_curleft
|
|||
info_print
|
||||
dir := 0
|
||||
|
||||
PRI f_curright
|
||||
PRI f_curright 'fkt: cursor rechts
|
||||
|
||||
if w_pos[w_sel] < (fm#WROWS * w_cols[w_sel] - 1)
|
||||
w_pos[w_sel]++
|
||||
|
@ -231,7 +235,7 @@ PRI f_curright
|
|||
info_print
|
||||
dir := 1
|
||||
|
||||
PRI f_pageup
|
||||
PRI f_pageup 'fkt: seite zurück
|
||||
|
||||
if (w_view[w_sel] - fm#WROWS * w_cols[w_sel]) => 0
|
||||
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
|
||||
dlbox[w_sel].setpos(w_pos[w_sel])
|
||||
|
||||
PRI f_pagedown | number
|
||||
PRI f_pagedown | number 'fkt: seite weiter
|
||||
|
||||
case w_sel
|
||||
0: number := w0_number
|
||||
|
@ -252,18 +256,22 @@ PRI f_pagedown | number
|
|||
w_pos[w_sel] := 0
|
||||
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]
|
||||
'flag in liste setzen
|
||||
case w_sel
|
||||
0: w0_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
|
||||
0: f_curleft
|
||||
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
|
||||
dlbox[w_sel].defocus
|
||||
|
@ -274,14 +282,27 @@ ifnot fl_full
|
|||
dlbox[w_sel].focus
|
||||
info_print
|
||||
|
||||
PRI f_quit
|
||||
PRI f_quit 'fkt: fm beenden
|
||||
|
||||
ios.sddmset(ios#DM_USER) 'regime soll in diesem verzeichnis landen
|
||||
ios.winset(0)
|
||||
ios.screeninit
|
||||
ios.stop
|
||||
if wbox.draw(@str7,@str3,@str2) == 2
|
||||
ios.sddmset(ios#DM_USER) 'regime soll in diesem verzeichnis landen
|
||||
ios.winset(0)
|
||||
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)
|
||||
i := 0
|
||||
|
@ -297,7 +318,7 @@ PRI f_load | i
|
|||
dlbox[0].draw
|
||||
dlbox[1].draw
|
||||
|
||||
PRI f_save | i
|
||||
PRI f_save | i 'fkt: ramdrive --> sdcard
|
||||
|
||||
pbar.setmaxbar(w1_number)
|
||||
i := 0
|
||||
|
@ -313,7 +334,7 @@ PRI f_save | i
|
|||
dlbox[0].draw
|
||||
dlbox[1].draw
|
||||
|
||||
PRI f_del | i
|
||||
PRI f_del | i 'fkt: dateien löschen
|
||||
|
||||
if wbox.draw(@str1,@str2,@str3) == 1
|
||||
pbar.setmaxbar(w0_number)
|
||||
|
@ -331,7 +352,7 @@ dlbox[0].draw
|
|||
dlbox[1].draw
|
||||
info_print
|
||||
|
||||
PRI f_empty
|
||||
PRI f_empty 'fkt: ramdrive löschen
|
||||
|
||||
if wbox.draw(@str4,@str2,@str3) == 1
|
||||
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
|
||||
|
||||
|
||||
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.curoff
|
||||
|
@ -370,7 +397,8 @@ PRI f_view | n,stradr,ch,lch
|
|||
ios.sdclose
|
||||
ios.printcls
|
||||
dlbox[0].redraw
|
||||
dlbox[1].redraw
|
||||
ifnot fl_full
|
||||
dlbox[1].redraw
|
||||
return
|
||||
else
|
||||
lch := 0
|
||||
|
@ -387,7 +415,49 @@ PRI f_view | n,stradr,ch,lch
|
|||
dlbox[1].draw
|
||||
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
|
||||
repeat fm#MAX_FILES
|
||||
|
@ -400,7 +470,7 @@ PRI w0_clrlist | i
|
|||
i++
|
||||
|
||||
|
||||
PRI w1_clrlist | i
|
||||
PRI w1_clrlist | i 'fenster 1: dateiliste löschen
|
||||
|
||||
i := 0
|
||||
repeat fm#MAX_FILES
|
||||
|
@ -412,7 +482,7 @@ PRI w1_clrlist | i
|
|||
w1_list[i] := " "
|
||||
i++
|
||||
|
||||
PRI w0_readdir | stradr,i,j
|
||||
PRI w0_readdir | stradr,i,j 'fenster 0: dateiliste einlesen
|
||||
|
||||
i := 0
|
||||
ios.sddir
|
||||
|
@ -429,10 +499,11 @@ PRI w0_readdir | stradr,i,j
|
|||
|
||||
w0_number := i
|
||||
|
||||
PRI w1_readdir | stradr,i,j
|
||||
PRI w1_readdir | stradr,i,j 'fenster 1: dateiliste einlesen
|
||||
|
||||
i := 0
|
||||
ios.rd_dir
|
||||
ios.rd_next 'ramdrive-label überspringen
|
||||
repeat while (stradr := ios.rd_next)
|
||||
j := 0
|
||||
repeat fm#MAX_LEN
|
||||
|
@ -442,7 +513,7 @@ PRI w1_readdir | stradr,i,j
|
|||
w1_len[i] := ios.rd_dlen
|
||||
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
|
||||
case w_sel
|
||||
|
@ -456,7 +527,7 @@ PRI get_fname(fnr):adrdat | i,stradr
|
|||
fname[i] := 0
|
||||
return @fname
|
||||
|
||||
PRI load(stradr) | len,fnr,i
|
||||
PRI load(stradr) | len,fnr,i 'datei: datei --> ramdrive
|
||||
|
||||
ifnot ios.sdopen("r",stradr) 'datei öffnen
|
||||
len := ios.sdfattrib(ios#F_SIZE)
|
||||
|
@ -468,7 +539,7 @@ PRI load(stradr) | len,fnr,i
|
|||
ios.sdclose
|
||||
ios.rd_close(fnr)
|
||||
|
||||
PRI save(stradr) | fnr,len,i
|
||||
PRI save(stradr) | fnr,len,i 'datei: ramdrive --> datei
|
||||
|
||||
fnr := ios.rd_open(stradr)
|
||||
ifnot fnr == -1
|
||||
|
@ -481,7 +552,7 @@ PRI save(stradr) | fnr,len,i
|
|||
ios.rd_close(fnr)
|
||||
|
||||
|
||||
PRI frame_draw
|
||||
PRI frame_draw 'screen: bildschirmmaske ausgeben
|
||||
|
||||
ios.winset(0)
|
||||
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.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]
|
||||
case w_sel
|
||||
|
@ -521,7 +592,7 @@ PRI info_print | pos,len
|
|||
ios.printdec(ios.ram_getfree)
|
||||
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
|
||||
rows := ios.belgetrows 'zeilenzahl bei bella abfragen
|
||||
|
@ -531,13 +602,15 @@ PRI pause(sec)
|
|||
|
||||
waitcnt(cnt+clkfreq*sec)
|
||||
|
||||
DAT
|
||||
DAT 'strings
|
||||
|
||||
str1 byte "Dateien löschen?",0
|
||||
str2 byte "Ja",0
|
||||
str3 byte "Nein",0
|
||||
str4 byte "RAMDrive löschen?",0
|
||||
str5 byte "SD-Card mounten?",0
|
||||
str6 byte 0
|
||||
str7 byte "Programm beenden?",0
|
||||
|
||||
DAT
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ OBJ
|
|||
str: "glob-string"
|
||||
num: "glob-numbers" 'Number Engine
|
||||
gc : "glob-con"
|
||||
led: "led-engine"
|
||||
led: "glob-led-engine"
|
||||
|
||||
CON
|
||||
|
||||
|
|
|
@ -55,6 +55,7 @@ PUB main | i,n,len,ch,lch
|
|||
repeat i from 0 to 3 'extender anhängen
|
||||
byte[@parastr][len + i] := byte[@ext1][i]
|
||||
byte[@parastr][len + i] := 0
|
||||
ios.admsetsyssnd(0) 'systemklänge aus (nervt!)
|
||||
ifnot ios.sdopen("r",@parastr)
|
||||
repeat 'text ausgeben
|
||||
ch := ios.sdgetc
|
||||
|
@ -78,6 +79,7 @@ PUB main | i,n,len,ch,lch
|
|||
'ios.print(string("Hilfetexte : ",$0d))
|
||||
cmd_dir_w(1)
|
||||
ios.sdclose 'datei schließen
|
||||
ios.admsetsyssnd(1) 'systemklänge wieder ein
|
||||
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
|
||||
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
|
||||
|
||||
cnt_err := cnt_err + cnt_test1 + cnt_test2 + cnt_test3 + cnt_testx
|
||||
ios.setcolor(4)
|
||||
ios.setcolor(0)
|
||||
ios.printcls
|
||||
ios.printnl
|
||||
ios.print(string("Statistik eRAM-Test:", $0d, $0d))
|
||||
ios.print(string("Testdurchläufe : "))
|
||||
ios.printdec(cnt_loop)
|
||||
ios.printnl
|
||||
ios.printnl
|
||||
ios.setcolor(4)
|
||||
ios.print(string("Fehler Gesamt : "))
|
||||
ios.printdec(cnt_err)
|
||||
ios.printnl
|
||||
|
@ -102,9 +104,6 @@ PUB statistik 'ausgabe der fehlerstati
|
|||
ios.printdec(cnt_testx)
|
||||
ios.printnl
|
||||
ios.printnl
|
||||
ios.print(string("Aktueller Test:", $0d))
|
||||
ios.printnl
|
||||
ios.printnl
|
||||
cnt_test1 := 0
|
||||
cnt_test2 := 0
|
||||
cnt_test3 := 0
|
||||
|
|
|
@ -687,7 +687,7 @@ PRI cmd_color 'cmd: zeichenfarbe wähl
|
|||
|
||||
ios.setcolor(str.decimalToNumber(act_color := os_nxtoken1))
|
||||
|
||||
PRI cmd_sysinfo 'cmd: systeminformationen anzeigen
|
||||
PRI cmd_sysinfo|ack,adr 'cmd: systeminformationen anzeigen
|
||||
|
||||
ios.printnl
|
||||
os_printstr(@msg22,@syst)
|
||||
|
@ -716,6 +716,18 @@ PRI cmd_sysinfo 'cmd: systeminformatione
|
|||
else
|
||||
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
|
||||
|
||||
repeat 16
|
||||
|
@ -873,17 +885,17 @@ PRI cmd_dir|fcnt,stradr,hflag 'cmd: verzeichnis anzeig
|
|||
ios.print(@msg10)
|
||||
ios.print(@msg5)
|
||||
ios.print(ios.sdvolname)
|
||||
ifnot ios.os_error(ios.sddir) 'verzeichnis öffnen
|
||||
if str.findCharacter(stradr,"h")
|
||||
hflag := 0
|
||||
if str.findCharacter(stradr,"w")
|
||||
fcnt := cmd_dir_w(hflag)
|
||||
else
|
||||
fcnt := cmd_dir_l(hflag) 'dir l
|
||||
ios.printnl
|
||||
ios.print(@msg10)
|
||||
ios.print(@msg9)
|
||||
ios.printdec(fcnt)
|
||||
ios.sddir 'verzeichnis öffnen
|
||||
if str.findCharacter(stradr,"h")
|
||||
hflag := 0
|
||||
if str.findCharacter(stradr,"w")
|
||||
fcnt := cmd_dir_w(hflag)
|
||||
else
|
||||
fcnt := cmd_dir_l(hflag) 'dir l
|
||||
ios.printnl
|
||||
ios.print(@msg10)
|
||||
ios.print(@msg9)
|
||||
ios.printdec(fcnt)
|
||||
else
|
||||
ios.os_error(1)
|
||||
|
||||
|
@ -1076,6 +1088,7 @@ msg35 byte "Bellatrix Auflösung Y :",0
|
|||
msg36 byte "Bellatrix Videomodus : ",0
|
||||
msg37 byte "VGA",0
|
||||
msg38 byte "TV",0
|
||||
msg39 byte "PlexBus Devices : ",0
|
||||
|
||||
ext1 byte ".BIN",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
|
||||
/l : Konfiguration anzeigen
|
||||
----------- Administra-Funktionen
|
||||
/ah 0|1 : hss ab-/anschalten
|
||||
/aw 0|1 : wav ab-/anschalten
|
||||
/as 0|1 : systemklänge ab-/anschalten
|
||||
/al 0..100 : wav-lautstärke links
|
||||
/ar 0..100 : wav-lautstärke rechts
|
||||
/ah 0..15 : hss-lautstärke
|
||||
/af : administra reset, flash booten
|
||||
/at : transfergeschwindigkeit messen
|
||||
----------- Bellatrix-Funktionen
|
||||
/ci : farbtabelle anzeigen
|
||||
/cs datei : farbtabelle speichern
|
||||
/cl datei : farbtabelle laden
|
||||
----------- Port-Funktionen
|
||||
/po nr anz : Impulse an port ausgeben
|
||||
/pi : Status der Port abfragen
|
||||
/? : Hilfe
|
||||
/l : Konfiguration anzeigen
|
||||
---------------- Administra-Funktionen
|
||||
/ah 0|1 : hss ab-/anschalten
|
||||
/aw 0|1 : wav ab-/anschalten
|
||||
/as 0|1 : systemklänge ab-/anschalten
|
||||
/al 0..100 : wav-lautstärke links
|
||||
/ar 0..100 : wav-lautstärke rechts
|
||||
/ah 0..15 : hss-lautstärke
|
||||
/af : administra reset, flash booten
|
||||
/at : transfergeschwindigkeit messen
|
||||
---------------- Bellatrix-Funktionen
|
||||
/ci : farbtabelle anzeigen
|
||||
/cs datei : farbtabelle speichern
|
||||
/cl datei : farbtabelle laden
|
||||
---------------- Port-Funktionen
|
||||
/po nr anz time : Impulse an port ausgeben
|
||||
/pi : Status der Port abfragen
|
Loading…
Reference in New Issue