update to TriOS R57 changes

This commit is contained in:
Joerg Deckert 2014-06-22 20:08:25 +02:00
parent 43d016e23e
commit 8374973638
29 changed files with 1231 additions and 368 deletions

View File

@ -1,25 +1,33 @@
INHALT
======
1. Installation des Grundsystems
2. Regime im Überblick
3. Forth im Überblick
1. Installations-Varianten
2. Installation des Grundsystems
3. Regime im Überblick
4. Forth im Überblick
1. Installations-Varianten
==========================
Zur Installation von TriOS auf dem Hive stehen 3 verschiedene Varianten zur
Verfügung, welche am Ende aber dasselbe Ergebnis erzielen:
1. Installation des Grundsystems:
=================================
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
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.
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
@ -30,6 +38,16 @@ Pfad befindet.
Downloadlink BSTC: http://www.fnarfbargle.com/bst/bstc/Latest/
2. Installation des Grundsystems:
=================================
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 ein Basiswortschatz im Forth selbst
kompiliert werden.
Installation ohne Forth (Standard):
-----------------------------------
@ -185,7 +203,7 @@ tv.bin - TV-Textmodus 40 x 13 Zeichen
2. Forth im Überblick:
4. Forth im Überblick:
======================
Einige nützliche Kommandos befinden sich in dem Modul tools.mod. In den meisten

View File

@ -269,14 +269,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,7 +347,7 @@ 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
@ -398,232 +398,237 @@ 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
#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 +660,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,6 +699,7 @@ 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)
#endif '__ADM_PLX
@ -1378,7 +1384,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
@ -2426,13 +2432,34 @@ 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)
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))
reg:=bus_getchar '0-6
if reg>3 and reg<7
bus_putchar(!plx.getreg(reg))
else
bus_putchar(plx.getreg(reg))
CON ''------------------------------------------------- End of DCF77 FUNCTIONS

View File

@ -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

View File

@ -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

View File

@ -481,5 +481,9 @@ wvariable lcog \ nummer interaktiven cog
: _ob onboot ;
: onboot _ob start ;
saveforth
reboot

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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
@ -253,6 +259,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 +328,8 @@ A_BLT = %00000000_00000000_00001000_00000000
a_s_beep
a_s_dmpreg '199 'soundinformationen senden
' ---------------------------------------------- AY-SOUNDFUNKTIONEN
#200, a_ayStart
a_ayStop
a_ayUpdateRegisters
' ---------------------------------------------- Eigene Erweiterungen
' 200 ... 254 frei für eigene Erweiterungen
CON 'BELLATRIX-FUNKTIONEN --------------------------------------------------------------------------

View File

@ -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)

View File

@ -14,7 +14,7 @@ Chip : Regnatix
Typ : Programm
Version :
Subversion :
Funktion :
Funktion : Eingabedialog String
Komponenten : -
COG's : -
Logbuch :

View File

@ -14,7 +14,7 @@ Chip : Regnatix
Typ : Programm
Version :
Subversion :
Funktion :
Funktion : Infodialog mit Fortschrittsbalken
Komponenten : -
COG's : -
Logbuch :

View File

@ -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)

View File

@ -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

View File

@ -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
@ -1493,22 +1494,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 +1727,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 +2043,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}}

View File

@ -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

View File

@ -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

37
release.sh Executable file
View File

@ -0,0 +1,37 @@
#! /bin/sh
# Definitionen
VERSION="57"
# 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 .tmp
for file in *.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}

View File

@ -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

View File

@ -39,7 +39,7 @@ OBJ
str: "glob-string"
num: "glob-numbers" 'Number Engine
gc : "glob-con"
led: "led-engine"
led: "glob-led-engine"
CON

View File

@ -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

View File

@ -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

View File

@ -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!

View File

@ -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

View File

@ -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

View File

@ -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