From 83749736381215412c9a329157aad92ec71b2652 Mon Sep 17 00:00:00 2001 From: Joerg Deckert Date: Sun, 22 Jun 2014 20:08:25 +0200 Subject: [PATCH] update to TriOS R57 changes --- README.md | 44 +- flash/administra/admflash.spin | 365 +++++++------ flash/bellatrix/belflash.spin | 9 + flash/regnatix/regflash.spin | 6 +- forth/basics.mod | 4 + ...driver_enc28j60.spin => adm-enc28j60.spin} | 0 lib/adm-plx.spin | 46 +- lib/{driver_socket.spin => adm-socket.spin} | 2 +- lib/bel-vga.spin | 19 +- lib/fm-con.spin | 3 - lib/glob-con.spin | 20 +- lib/{led-engine.spin => glob-led-engine.spin} | 0 lib/gui-dlbox.spin | 26 +- lib/gui-input.spin | 2 +- lib/gui-pbar.spin | 2 +- lib/gui-wbox.spin | 12 +- lib/m-glob-con.spin | 50 +- lib/reg-ios.spin | 109 +++- make.bat | 2 +- make.sh | 2 +- release.sh | 37 ++ system/regnatix/fm.spin | 243 ++++++--- system/regnatix/irc.spin | 2 +- system/regnatix/man.spin | 2 + system/regnatix/perplex.spin | 495 ++++++++++++++++++ system/regnatix/perplex.txt | 17 + system/regnatix/ramtest.spin | 7 +- system/regnatix/regime.spin | 37 +- system/sonstiges/sysconf.man | 36 +- 29 files changed, 1231 insertions(+), 368 deletions(-) rename lib/{driver_enc28j60.spin => adm-enc28j60.spin} (100%) rename lib/{driver_socket.spin => adm-socket.spin} (99%) rename lib/{led-engine.spin => glob-led-engine.spin} (100%) create mode 100755 release.sh create mode 100644 system/regnatix/perplex.spin create mode 100644 system/regnatix/perplex.txt diff --git a/README.md b/README.md index b0d0240..9f8190b 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/flash/administra/admflash.spin b/flash/administra/admflash.spin index 6b80bbf..9d86a70 100644 --- a/flash/administra/admflash.spin +++ b/flash/administra/admflash.spin @@ -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 diff --git a/flash/bellatrix/belflash.spin b/flash/bellatrix/belflash.spin index 9a78a6c..9f17cfb 100644 --- a/flash/bellatrix/belflash.spin +++ b/flash/bellatrix/belflash.spin @@ -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 diff --git a/flash/regnatix/regflash.spin b/flash/regnatix/regflash.spin index 7c02833..8f9cfef 100644 --- a/flash/regnatix/regflash.spin +++ b/flash/regnatix/regflash.spin @@ -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 diff --git a/forth/basics.mod b/forth/basics.mod index a1b636b..4eed164 100644 --- a/forth/basics.mod +++ b/forth/basics.mod @@ -481,5 +481,9 @@ wvariable lcog \ nummer interaktiven cog : _ob onboot ; : onboot _ob start ; +saveforth + +reboot + diff --git a/lib/driver_enc28j60.spin b/lib/adm-enc28j60.spin similarity index 100% rename from lib/driver_enc28j60.spin rename to lib/adm-enc28j60.spin diff --git a/lib/adm-plx.spin b/lib/adm-plx.spin index 60b36e0..816d982 100644 --- a/lib/adm-plx.spin +++ b/lib/adm-plx.spin @@ -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 diff --git a/lib/driver_socket.spin b/lib/adm-socket.spin similarity index 99% rename from lib/driver_socket.spin rename to lib/adm-socket.spin index d6ac35a..ec769b0 100644 --- a/lib/driver_socket.spin +++ b/lib/adm-socket.spin @@ -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" diff --git a/lib/bel-vga.spin b/lib/bel-vga.spin index 17eeb94..81bf318 100644 --- a/lib/bel-vga.spin +++ b/lib/bel-vga.spin @@ -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 diff --git a/lib/fm-con.spin b/lib/fm-con.spin index 440d4b0..06f31b0 100644 --- a/lib/fm-con.spin +++ b/lib/fm-con.spin @@ -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 diff --git a/lib/glob-con.spin b/lib/glob-con.spin index 04c89c2..f9adb47 100644 --- a/lib/glob-con.spin +++ b/lib/glob-con.spin @@ -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 -------------------------------------------------------------------------- diff --git a/lib/led-engine.spin b/lib/glob-led-engine.spin similarity index 100% rename from lib/led-engine.spin rename to lib/glob-led-engine.spin diff --git a/lib/gui-dlbox.spin b/lib/gui-dlbox.spin index db399f2..aaccd40 100644 --- a/lib/gui-dlbox.spin +++ b/lib/gui-dlbox.spin @@ -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) diff --git a/lib/gui-input.spin b/lib/gui-input.spin index 9a87a3b..2d39c95 100644 --- a/lib/gui-input.spin +++ b/lib/gui-input.spin @@ -14,7 +14,7 @@ Chip : Regnatix Typ : Programm Version : Subversion : -Funktion : +Funktion : Eingabedialog String Komponenten : - COG's : - Logbuch : diff --git a/lib/gui-pbar.spin b/lib/gui-pbar.spin index 745df2f..a23d98d 100644 --- a/lib/gui-pbar.spin +++ b/lib/gui-pbar.spin @@ -14,7 +14,7 @@ Chip : Regnatix Typ : Programm Version : Subversion : -Funktion : +Funktion : Infodialog mit Fortschrittsbalken Komponenten : - COG's : - Logbuch : diff --git a/lib/gui-wbox.spin b/lib/gui-wbox.spin index bd2e27b..dce77a9 100644 --- a/lib/gui-wbox.spin +++ b/lib/gui-wbox.spin @@ -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) diff --git a/lib/m-glob-con.spin b/lib/m-glob-con.spin index 913ddd5..39ff287 100644 --- a/lib/m-glob-con.spin +++ b/lib/m-glob-con.spin @@ -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 diff --git a/lib/reg-ios.spin b/lib/reg-ios.spin index 6486f6f..5ba7913 100644 --- a/lib/reg-ios.spin +++ b/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 @@ -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}} diff --git a/make.bat b/make.bat index 50683d7..e40735c 100644 --- a/make.bat +++ b/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 diff --git a/make.sh b/make.sh index f474a60..ec968fd 100755 --- a/make.sh +++ b/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 diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..72e70fd --- /dev/null +++ b/release.sh @@ -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} diff --git a/system/regnatix/fm.spin b/system/regnatix/fm.spin index 80d76a7..4f2ea1d 100644 --- a/system/regnatix/fm.spin +++ b/system/regnatix/fm.spin @@ -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< 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 "",0 + +help1 file "perplex.txt" + byte $0d,0 + + + diff --git a/system/regnatix/perplex.txt b/system/regnatix/perplex.txt new file mode 100644 index 0000000..c2f1d5c --- /dev/null +++ b/system/regnatix/perplex.txt @@ -0,0 +1,17 @@ + +openwr - slave schreibend ffnen +openrd - slave lesend ffnen +close - slave schlieen +put - zeichen zu plexus senden +get - zeichen von plexus empfangen +map - slavemap anzeigen +scan - anzeige aller slaveadressen +test - test fr interne sepia-karte +test# adda port - test fr spezifische sepia-karte +game - gamedevice abfragen (pollregister) +setgame adda port - adressen fr poller setzen adda/port +polloff - polling anhalten +pollon - polling starten +bye - programm beenden + +Parameter hexadezimal! diff --git a/system/regnatix/ramtest.spin b/system/regnatix/ramtest.spin index 49a4605..851f955 100644 --- a/system/regnatix/ramtest.spin +++ b/system/regnatix/ramtest.spin @@ -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 diff --git a/system/regnatix/regime.spin b/system/regnatix/regime.spin index be7b185..092d151 100644 --- a/system/regnatix/regime.spin +++ b/system/regnatix/regime.spin @@ -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 diff --git a/system/sonstiges/sysconf.man b/system/sonstiges/sysconf.man index 3dbcae8..70abc43 100644 --- a/system/sonstiges/sysconf.man +++ b/system/sonstiges/sysconf.man @@ -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 : systemklnge ab-/anschalten -/al 0..100 : wav-lautstrke links -/ar 0..100 : wav-lautstrke rechts -/ah 0..15 : hss-lautstrke -/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 \ No newline at end of file +/? : Hilfe +/l : Konfiguration anzeigen +---------------- Administra-Funktionen +/ah 0|1 : hss ab-/anschalten +/aw 0|1 : wav ab-/anschalten +/as 0|1 : systemklnge ab-/anschalten +/al 0..100 : wav-lautstrke links +/ar 0..100 : wav-lautstrke rechts +/ah 0..15 : hss-lautstrke +/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 \ No newline at end of file