
- Überarbeitung der Routine zum mounten der SD-Card. Da verschiedene Karten unterschiedliches Timing haben, wird jetzt solange versucht zu mounten, bis ein Erfolg eintritt, was zusätzlich akustisch durch einen leise anschwellenden Ton angezeigt wird. Das Verfahren ist jetzt wesentlich robuster. - rtc.setSQWOUTState(1) --> rtc.setSQWOUTState(0) deaktiviert den Frequenzausgang, verringert damit lt. DS1307-Datenblatt den Pufferstrom von 480 auf 300 nA und erhöht somit die Pufferdauer der Batterie auf das 1,6-fache. - Plexbus-Funktionen entfernt - Screeninterface-Funktionen zugefügt flash\bellatrix\belflash.spin - Anpassung für verschiedene Zeilenumbrüche in print_char eingefügt. flash\regnatix\regflash.spin - Der Loader hat fälschlicherweise das Warmstartflag für die Ramdisk gesetzt, wodurch sie nicht resetfest war. forth\fib.mod - Fibonacci-Benchmark (iterativ) in Forth. lib\adm-fat.spin - Fehler in setCharacterPosition: Bei einem Wechsel von einer Position > 0 auf Position = 0 wurde der erste Sektor mit falschen Daten überschrieben. lib\reg-ios.spin - Funktionsset für Grafikmodus 0 eingefügt - sfx_keyoff, sfx_stop eingefügt - printq zugefügt: Ausgabe einer Zeichenkette ohne Steuerzeichen - Korrektur char_ter_bs - Plexbus-Funktionen entfernt - Screeninterface-Funktionen eingefügt - Bellatrix-Funktionen blktrans, bmgr_load eingefügt - Funktion os_error zugefügt für zentrale Ausgabe von Fehlern - Korrektur BS in input-Funktion - Funktion printblk für schnellen Blocktransfer - Div. Fehler in den Ramdisk-Funktionen, welche jetzt auch resetfest ist. - Funktion rd_getback um Zeichen rückwärts aus der Ramdisk zu lesen. - Funktion ram_getfree liefert freien Speicher im eRAM system\regnatix\eram.spin - Korrektur BS-Steuercode system\regnatix\hplay.spin - Der HSS-Player hat seine Daten fals im SYS-Modus im eRAM abgelegt und so die Ramdisk beschädigt. Korrektur der Speichernutzung. system\regnatix\regime.spin - Korrekte Initialisierung der Ramdisk (resetfest) - Korrektur der Bisldschirminitialisierung nach dem Laden von Bellatrix-Code - Verwendung von ios.os_error für die Fehlerausgabe - Fehler im Kommando "reboot" beim Kaltstart behoben - Korrektur Ausgabe von "cogs" system\regnatix\time.spin - Korrektur Tipfehler system\regnatix\basic.spin Ich habe Femto Basic entfernt, da es nicht integraler Bestandteil von TriOS ist und mir die Zeit fehlt es an den aktuelen Stand anzupassen.
422 lines
30 KiB
Plaintext
422 lines
30 KiB
Plaintext
{{
|
|
┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ 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 : HSS-Player
|
|
Chip : Regnatix
|
|
Typ : Programm
|
|
Version : 00
|
|
Subversion : 02
|
|
|
|
Funktion : HSS-Player für die Kommandozeile
|
|
|
|
Logbuch :
|
|
|
|
08-04-2010-dr235 - fork aus regime
|
|
- anpassung an trios
|
|
16-04-2010-dr235 - umwandlung in reine kommandozeilenanwendung
|
|
|
|
Kommandoliste :
|
|
|
|
/? : hilfetext
|
|
/p name.wav : hss-datei abspielen
|
|
/d : verzeichnis abspielen
|
|
/s : wiedergabe stoppen
|
|
/t : anzeige trackerliste
|
|
/r : anzeige engine-register
|
|
/i : anzeige interface-register
|
|
|
|
|
|
}}
|
|
|
|
OBJ
|
|
ios: "reg-ios"
|
|
|
|
CON
|
|
|
|
_CLKMODE = XTAL1 + PLL16X
|
|
_XINFREQ = 5_000_000
|
|
|
|
OS_TIBLEN = 64 'größe des inputbuffers
|
|
ERAM = 1024 * 512 * 2 'größe eram
|
|
HRAM = 1024 * 32 'größe hram
|
|
|
|
RMON_ZEILEN = 16 'speichermonitor - angezeigte zeilen
|
|
RMON_BYTES = 8 'speichermonitor - zeichen pro byte
|
|
|
|
VAR
|
|
|
|
long datcnt 'zeiger für dateiliste
|
|
byte fn[12] 'puffer für dateinamen
|
|
byte parastr[64] 'parameterstring
|
|
byte fl_bye
|
|
byte fl_next
|
|
|
|
DAT 'PARAMETER
|
|
|
|
PUB main
|
|
|
|
ios.start 'ios initialisieren
|
|
ios.parastart 'parameterübergabe starten
|
|
repeat while ios.paranext(@parastr) 'parameter einlesen
|
|
if byte[@parastr][0] == "/" 'option?
|
|
case byte[@parastr][1]
|
|
"?": ios.print(@help1) '/? - hilfetext
|
|
"p": play_hss '/p - hss-datei wiedergeben
|
|
"d": play_dir '/d - verzeichnis wiedergeben
|
|
"t": disp_tracker '/t - anzeige tracker
|
|
"r": disp_reg '/r - anzeige register
|
|
"i": disp_ireg '/i - anzeige interfaceregister
|
|
"s": ios.hss_stop '/s - wiedergabe stoppen
|
|
ios.stop
|
|
|
|
|
|
DAT 'PLAY_FILE
|
|
|
|
PUB play_hss 'hss: player starten
|
|
|
|
if ios.paranext(@parastr) 'parameter?
|
|
ios.hss_playfile(@parastr)
|
|
else 'kein parameter: fehlermeldung
|
|
printErr(@err1)
|
|
|
|
DAT 'PLAY_DIR
|
|
|
|
PUB play_dir | stradr,len,fcnt,i 'hss: alle songs auf der sd-card abspielen
|
|
|
|
ios.sddir 'kommando: verzeichnis öffnen
|
|
hss_startlist 'zum listenanfang
|
|
fcnt := 0 'zähler für dateianzahl
|
|
fl_bye := fl_next := 0
|
|
repeat while (stradr := ios.sdnext) 'dateiliste einlesen
|
|
' ios.print(stradr)
|
|
if str_find(stradr,@ext1)
|
|
' ios.printchar("◀")
|
|
fcnt++
|
|
hss_wrfn(stradr)
|
|
' ios.printnl
|
|
ios.print(string("Anzahl Dateien : "))
|
|
ios.printdec(fcnt)
|
|
ios.printnl
|
|
hss_startlist 'zum listenanfang
|
|
if fcnt
|
|
repeat i from 0 to fcnt-1 'dateiliste abspielen
|
|
ios.printdec(i+1)
|
|
ios.printchar("/")
|
|
ios.printdec(fcnt)
|
|
ios.printchar(" ")
|
|
hss_rdfn(@fn)
|
|
hss_playsong(@fn)
|
|
if fl_bye
|
|
quit
|
|
if fl_next
|
|
fl_next := 0
|
|
else
|
|
hss_fadeout
|
|
ios.hss_stop
|
|
|
|
PUB hss_playsong(stradr) | n,q,key 'hss: spielt die musikdatei bis zum ende
|
|
|
|
ios.curoff
|
|
ios.print(string("PlaySong <q/n> : "))
|
|
ios.print(stradr)
|
|
ios.printnl
|
|
ios.hss_stop
|
|
ios.hss_playfile(stradr)
|
|
repeat
|
|
n := ios.hss_intreg(ios#iRepeat) 'anzahl der schleifendurchläufe abfragen
|
|
q := ios.hss_intreg(ios#iEndFlag)
|
|
ios.curpos1
|
|
ios.print(string("iRepeat : "))
|
|
ios.printdec(n)
|
|
ios.print(string(" iEndFlag : "))
|
|
ios.printdec(q)
|
|
if key := ios.key
|
|
case key
|
|
"n": fl_next := 1
|
|
quit
|
|
"q": fl_bye := 1
|
|
quit
|
|
until n == 3 or q == 1
|
|
ios.printnl
|
|
ios.curon
|
|
|
|
PUB hss_fadeout | i 'hss: song langsam ausblenden
|
|
repeat i from 0 to 15
|
|
ios.hss_vol(15 - i)
|
|
waitcnt(cnt + 60_000_000)
|
|
waitcnt(cnt + 30_000_000)
|
|
|
|
PUB hss_wrfn(stradr) | len,i 'hss: kopiert dateinamen in eram
|
|
len := strsize(stradr)
|
|
repeat i from 0 to len-1
|
|
ios.ram_wrbyte(ios#usrmod,byte[stradr][i],datcnt++)
|
|
ios.ram_wrbyte(ios#usrmod,0,datcnt++)
|
|
|
|
|
|
PUB hss_rdfn(stradr) | i,n 'hss: liest dateinamen aus eram
|
|
i := 0
|
|
repeat
|
|
n := ios.ram_rdbyte(ios#usrmod,datcnt++)
|
|
byte[stradr][i++] := n
|
|
while n <> 0
|
|
|
|
PUB hss_startlist 'hss: zeiger auf listenanfang (dateinamen)
|
|
datcnt := 0
|
|
|
|
|
|
DAT 'DISPLAY
|
|
|
|
PUB disp_tracker | i,n 'disp: trackerliste ausgeben
|
|
repeat
|
|
repeat
|
|
until ios.hss_intreg(ios#iRowFlag) == 0
|
|
repeat
|
|
until ios.hss_intreg(ios#iRowFlag) == 1 'synchronisation bis zeile fertig bearbeitet
|
|
|
|
ios.printhex(ios.hss_intreg(ios#iBeatC),4)
|
|
ios.printchar("-")
|
|
ios.printhex(ios.hss_intreg(ios#iEngineC),4)
|
|
ios.printchar(":")
|
|
ios.printchar(" ")
|
|
|
|
repeat i from 1 to 4
|
|
|
|
hss_printnote(ios.hss_intreg(i*5+ios#iNote)) 'note
|
|
|
|
n := ios.hss_intreg(i*5+ios#iOktave)
|
|
if n
|
|
ios.printhex(n,1) 'oktave
|
|
else
|
|
ios.printchar("-")
|
|
ios.printchar(" ")
|
|
|
|
n := ios.hss_intreg(i*5+ios#iVolume)
|
|
if n
|
|
ios.printhex(n,1) 'volume
|
|
else
|
|
ios.printchar("-")
|
|
ios.printchar(" ")
|
|
|
|
n := ios.hss_intreg(i*5+ios#iEffekt)
|
|
if n
|
|
ios.printhex(n,1) 'effekt
|
|
else
|
|
ios.printchar("-")
|
|
ios.printchar(" ")
|
|
|
|
n := ios.hss_intreg(i*5+ios#iInstrument)
|
|
if n
|
|
ios.printhex(n,1) 'instrument
|
|
else
|
|
ios.printchar("-")
|
|
ios.printchar(" ")
|
|
|
|
|
|
ios.printnl
|
|
|
|
until ios.keystat > 0 'taste gedrückt?
|
|
ios.key
|
|
ios.curon
|
|
ios.printnl
|
|
|
|
PUB hss_printnote(n) 'disp: notenwert ausgeben
|
|
'C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,H1
|
|
|
|
case n
|
|
0: ios.print(string(" "))
|
|
1: ios.print(string("C "))
|
|
2: ios.print(string("C#"))
|
|
3: ios.print(string("D "))
|
|
4: ios.print(string("D#"))
|
|
5: ios.print(string("E "))
|
|
6: ios.print(string("F "))
|
|
7: ios.print(string("F#"))
|
|
8: ios.print(string("G "))
|
|
9: ios.print(string("G#"))
|
|
10: ios.print(string("A "))
|
|
11: ios.print(string("A#"))
|
|
12: ios.print(string("H "))
|
|
|
|
|
|
|
|
PUB disp_ireg | i,j,n,wert 'disp: anzeige interfaceregister
|
|
ios.printcls
|
|
repeat
|
|
ios.curhome
|
|
ios.curoff
|
|
ios.printnl
|
|
repeat i from 0 to 4
|
|
ios.printhex(i*8,2)
|
|
ios.printchar(":")
|
|
repeat j from 0 to 4
|
|
n := (i*5)+j
|
|
wert := ios.hss_intreg(n)
|
|
ios.printhex(wert,4)
|
|
ios.printchar(" ")
|
|
ios.printnl
|
|
until ios.keystat > 0 'taste gedrückt?
|
|
ios.key
|
|
ios.curon
|
|
ios.printnl
|
|
|
|
PUB disp_reg | wert,i,j,n 'disp: kontinuierliche anzeige der regsiterwerte
|
|
{{
|
|
8 x 6 register long
|
|
|
|
0 kanal a
|
|
3>>16 f
|
|
4 v
|
|
|
|
8 kanal b
|
|
16 kanal c
|
|
24 kanal d
|
|
|
|
}}
|
|
ios.printcls
|
|
repeat
|
|
ios.curhome
|
|
ios.curoff
|
|
repeat j from 0 to 3
|
|
ios.printnl
|
|
ios.printnl
|
|
ios.printhex(j*8,2)
|
|
ios.printchar(":")
|
|
repeat i from 0 to 3
|
|
n := (j*8)+i
|
|
wert := ios.hss_peek(n)
|
|
ios.printhex(wert,8)
|
|
ios.printchar(" ")
|
|
ios.printnl
|
|
ios.printhex(j*8+4,2)
|
|
ios.printchar(":")
|
|
repeat i from 4 to 7
|
|
n := (j*8)+i
|
|
wert := ios.hss_peek(n)
|
|
ios.printhex(wert,8)
|
|
ios.printchar(" ")
|
|
|
|
ios.printnl
|
|
ios.printnl
|
|
ios.print(string("Channel A F: "))
|
|
wert := ios.hss_peek(0+3)
|
|
ios.printhex(wert>>16,4)
|
|
ios.print(string(" V: "))
|
|
wert := ios.hss_peek(0+4)
|
|
ios.printhex(wert,2)
|
|
|
|
ios.printnl
|
|
ios.print(string("Channel B F: "))
|
|
wert := ios.hss_peek(8+3)
|
|
ios.printhex(wert>>16,4)
|
|
ios.print(string(" V: "))
|
|
wert := ios.hss_peek(8+4)
|
|
ios.printhex(wert,2)
|
|
|
|
ios.printnl
|
|
ios.print(string("Channel C F: "))
|
|
wert := ios.hss_peek(16+3)
|
|
ios.printhex(wert>>16,4)
|
|
ios.print(string(" V: "))
|
|
wert := ios.hss_peek(16+4)
|
|
ios.printhex(wert,2)
|
|
|
|
ios.printnl
|
|
ios.print(string("Channel D F: "))
|
|
wert := ios.hss_peek(24+3)
|
|
ios.printhex(wert>>16,4)
|
|
ios.print(string(" V: "))
|
|
wert := ios.hss_peek(24+4)
|
|
ios.printhex(wert,2)
|
|
|
|
until ios.keystat > 0 'taste gedrückt?
|
|
ios.key
|
|
ios.curon
|
|
ios.printnl
|
|
|
|
DAT 'TOOLS
|
|
|
|
PRI printErr(stradr)
|
|
|
|
ios.print(@err0)
|
|
ios.print(stradr)
|
|
ios.print(@help1)
|
|
|
|
PUB str_find(string1, string2) : buffer | counter 'sys: string suchen
|
|
|
|
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
'' │ Searches a string of characters for the first occurence of the specified string of characters. │
|
|
'' │ │
|
|
'' │ Returns the address of that string of characters if found and zero if not found. │
|
|
'' │ │
|
|
'' │ string1 - A pointer to the string of characters to search. │
|
|
'' │ string2 - A pointer to the string of characters to find in the string of characters to search. │
|
|
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
repeat strsize(string1--)
|
|
|
|
if(byte[++string1] == byte[string2])
|
|
|
|
repeat counter from 0 to (strsize(string2) - 1)
|
|
|
|
if(byte[string1][counter] <> byte[string2][counter])
|
|
buffer~~
|
|
|
|
ifnot(buffer~)
|
|
return string1
|
|
|
|
PUB str_lower(characters) '' 4 Stack Longs 'sys: in kleine zeichen wandeln
|
|
|
|
'' ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
'' │ Demotes all upper case characters in the set of ("A","Z") to their lower case equivalents. │
|
|
'' │ │
|
|
'' │ Characters - A pointer to a string of characters to convert to lowercase. │
|
|
'' └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
repeat strsize(characters--)
|
|
|
|
result := byte[++characters]
|
|
|
|
if((result => "A") and (result =< "Z"))
|
|
|
|
byte[characters] := (result + 32)
|
|
|
|
|
|
DAT 'strings
|
|
|
|
ext1 byte ".HSS",0
|
|
|
|
err0 byte 13,"Fehler : ",0
|
|
err1 byte "Zu wenig Parameter!",13,0
|
|
|
|
help1 file "hplay.txt"
|
|
byte 13,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. │
|
|
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|
}}
|
|
|