From a2d618a594079ef330cc49c562f7b6488b6cc492 Mon Sep 17 00:00:00 2001 From: Joerg Deckert Date: Sat, 14 Jun 2014 14:57:41 +0200 Subject: [PATCH] Plexus 2.06 --- .gitattributes | 1 + data/COLORS/BLUE2.CLR | Bin 0 -> 327 bytes data/COLORS/LBLUE2.CLR | Bin 0 -> 327 bytes data/COLORS/WARM.CLR | Bin 0 -> 327 bytes data/PRG.NFO | 4 +- gfx/Belstart.bmp | Bin 0 -> 22646 bytes gfx/Regfnt.bmp | Bin 0 -> 22646 bytes make.bat | 6 +- make.sh | 6 +- source/Bluetooth.spin | 6 +- source/DCF-Test.spin | 10 +- source/I2C_slave_Venatrix.spin | 245 ++++++++++ source/Plexus-Shell.spin | 166 +++---- source/Plexus-Start-Trios.spin | 24 +- source/VGA64_Engine.spin | 16 +- source/Venatrix-Test.spin | 4 +- source/belsVGA64.spin | 29 +- source/dos-shell.spin | 64 ++- source/ram.spin | 228 +++++---- source/reg-ios-64.spin | 821 ++++++++++++++------------------- source/sepia-test.spin | 26 +- 21 files changed, 904 insertions(+), 752 deletions(-) create mode 100644 data/COLORS/BLUE2.CLR create mode 100644 data/COLORS/LBLUE2.CLR create mode 100644 data/COLORS/WARM.CLR create mode 100644 gfx/Belstart.bmp create mode 100644 gfx/Regfnt.bmp create mode 100644 source/I2C_slave_Venatrix.spin diff --git a/.gitattributes b/.gitattributes index f128240..808b504 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,4 +2,5 @@ * text=auto +*.NFO text eol=crlf *.bat text eol=crlf diff --git a/data/COLORS/BLUE2.CLR b/data/COLORS/BLUE2.CLR new file mode 100644 index 0000000000000000000000000000000000000000..5e20632677f47805948ac0c3cce39f2981e84459 GIT binary patch literal 327 zcmb36BV+T1fnyKLpB#=ifA+95FfxzWGQcnyHV!H+jEn&GoeeGk literal 0 HcmV?d00001 diff --git a/data/COLORS/WARM.CLR b/data/COLORS/WARM.CLR new file mode 100644 index 0000000000000000000000000000000000000000..bc71ff30ec183bde66e53fefcd9c2958d1a69be9 GIT binary patch literal 327 zcmaFj@Wi3vNy8I|Clmf0V3@$c!06-{?CGrMxEPog03{h13i68$&2-GH f3W_rGN|Zbjb8_+(qB3)GQWcemvVWizF){)GFwY}E literal 0 HcmV?d00001 diff --git a/data/PRG.NFO b/data/PRG.NFO index e2a8dd4..afdb816 100644 --- a/data/PRG.NFO +++ b/data/PRG.NFO @@ -1,6 +1,6 @@ - PLEXUS for Hive 2.05 + PLEXUS for Hive 2.06 -Autor:R.Zielinski 03/2014 +Autor:R.Zielinski 04/2014 Mail :Zille09@gmail.com Hive-Project.de diff --git a/gfx/Belstart.bmp b/gfx/Belstart.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aa644b5fa7a745cad7e271cd99bec8299503b5ec GIT binary patch literal 22646 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 N5Au1SutF{K{{Y(Q?hpU~ literal 0 HcmV?d00001 diff --git a/gfx/Regfnt.bmp b/gfx/Regfnt.bmp new file mode 100644 index 0000000000000000000000000000000000000000..b9ca1d19d513cab7b08f2147f4d9cc566a027fea GIT binary patch literal 22646 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 flags) - 1 + flags := flags & !(|< index) ' Clear the highest set bit + +PUB check_reg(index) +{{ + Returns the value of the indexed register if that register has new data + Returns -1 otherwise + +}} + + if |< index & flags + flags := flags & !(|< index) + return register[index] + return -1 + +PUB get(index) + return register[index] + +PUB put(index,data) + register[index] := data + +PUB flush | i + flags~ + repeat i from 0 to 31 + register[i]~ + +DAT org +entry + mov t1,par + mov flags_address,t1 ' Retrieve all of the addresses and + add t1,#4 ' pin assignments from the VAR block, + rdbyte device_address,t1 ' and create bit masks + shl device_address,#1 + add t1,#1 + rdbyte t2,t1 + mov SCL_mask,#1 + shl SCL_mask,t2 + add t1,#1 + rdbyte t2,t1 + mov SDA_mask,#1 + shl SDA_mask,t2 + add t1,#1 + mov register_address,t1 + mov idle_mask,SCL_mask + or idle_mask,SDA_mask +'---------------------------------------------------------------------------------------------------------------------- +main + call #wait_for_start +start_detected + call #receive + mov t1,I2C_byte + and t1,#%1111_1110 ' clear the read/write flag and compare received + cmp t1,device_address wz ' device address with assigned address + if_ne jmp #main + call #ack + test I2C_byte,#%0000_0001 wc ' test read(1) or write(0) bit of device address + if_nc jmp #write +read '(from_master) + call #respond ' The master sends an ACK or NAK in response to + add data_address,#1 ' every byte sent back from the slave + if_nc jmp #read ' Send another byte if ACK (c=0) + jmp #main ' Stop if NAK (c=1) +write '(from_master) + rdlong t1,flags_address ' Use t1 to hold all flags + mov t2,#1 ' Use t2 to hold the flag of the current register + mov data_address,register_address ' Prepare the to store new data + call #receive ' First byte received is a register address + add data_address,I2C_byte + shl t2,I2C_byte ' Shift the flag to the appropriate register + call #ack +:loop + call #receive ' Receive a data byte + wrbyte I2C_byte,data_address ' Store in the addressed register + add data_address,#1 ' Address the next register + or t1,t2 ' Update the flags + wrlong t1,flags_address + shl t2,#1 ' Shift the flag to the next register + call #ack + jmp #:loop +'====================================================================================================================== +wait_for_start ' SCL  + waitpeq idle_mask,idle_mask ' SDA  +:loop + waitpne SDA_mask,SDA_mask + test SCL_mask,ina wc + if_nc jmp #wait_for_start +wait_for_start_ret ret +'---------------------------------------------------------------------------------------------------------------------- +receive ' (Read) + mov loop_counter,#8 '  + mov I2C_byte,#0 ' SCL  +:loop ' SDA ─────── + waitpne SCL_mask,SCL_mask + waitpeq SCL_mask,SCL_mask + test SDA_mask,ina wc + rcl I2C_byte,#1 + call #detect_st_or_sp ' Check to see if the received bit is a stop or restart + djnz loop_counter,#:loop +receive_ret ret +'---------------------------------------------------------------------------------------------------------------------- +respond ' (Write) (Read ACK or NAK) + mov loop_counter,#8 '   + rdbyte I2C_byte,data_address ' SCL   + shl I2C_byte,#32-8 ' SDA  ─────── +:loop + waitpne SCL_mask,SCL_mask + shl I2C_byte,#1 wc + muxnc dira,SDA_mask + waitpeq SCL_mask,SCL_mask + waitpne SCL_mask,SCL_mask + djnz loop_counter,#:loop + andn dira,SDA_mask +'receive_ack_or_nak + waitpne SCL_mask,SCL_mask + waitpeq SCL_mask,SCL_mask + test SDA_mask,ina wc ' C is set if NAK + call #detect_st_or_sp +respond_ret ret +'---------------------------------------------------------------------------------------------------------------------- +ack ' SCL  + waitpne SCL_mask,SCL_mask ' SDA  + or dira,SDA_mask + waitpeq SCL_mask,SCL_mask + waitpne SCL_mask,SCL_mask + andn dira,SDA_mask +ack_ret ret +'---------------------------------------------------------------------------------------------------------------------- +nak ' SCL  + waitpne SCL_mask,SCL_mask ' SDA  + waitpeq SCL_mask,SCL_mask + call #detect_st_or_sp + waitpne SCL_mask,SCL_mask +nak_ret ret +'---------------------------------------------------------------------------------------------------------------------- +detect_st_or_sp +' test SDA_mask,ina wc ' routine is called with C already set to SDA + if_c jmp #:detect_restart +:detect_stop ' SCL  + test SCL_mask,ina wz ' SDA  + if_z jmp detect_st_or_sp_ret + test SDA_mask,ina wz + if_nz jmp #main + jmp #:detect_stop +:detect_restart ' SCL  + test SCL_mask,ina wz ' SDA  + if_z jmp detect_st_or_sp_ret + test SDA_mask,ina wz + if_z jmp #start_detected + jmp #:detect_restart +detect_st_or_sp_ret ret +'---------------------------------------------------------------------------------------------------------------------- +SCL_mask res 1 +SDA_mask res 1 +idle_mask res 1 + +device_address res 1 +register_address res 1 +data_address res 1 +flags_address res 1 + +I2C_byte res 1 +loop_counter res 1 +t1 res 1 +t2 res 1 + + + fit + +DAT +{{ +┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ TERMS OF USE: MIT License │ +├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ +│Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ +│files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ +│modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ +│is furnished to do so, subject to the following conditions: │ +│ │ +│The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ +│ │ +│THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ +│WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ +│COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ +│ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ +└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +}} diff --git a/source/Plexus-Shell.spin b/source/Plexus-Shell.spin index a39df1c..2cdbbff 100644 --- a/source/Plexus-Shell.spin +++ b/source/Plexus-Shell.spin @@ -501,6 +501,33 @@ Logbuch : -mit unsinnigen Daten gefüllt -1375 Longs frei +'############################################################### Version 2.06 #################################################################################################### +16-04-2014 -Doppelklick auf linke obere Fensterecke abgeschafft, sorgte in diversen Unterprogrammen für Fehlfunktionen + -Durch Änderungen im Obj ram.spin, ein paar Longs eingebüßt (Routine ram_copy) + -Kopierroutine in Administra weiter geschrumpft + -1362 Longs frei + +17-04-2014 -ram.spin noch etwas weiter optimiert, hat 5 Longs gebracht :-) + -neuen Startbildschirm für Version 2.06 erstellt + -reg-ios und admsid mit glob-con vereint und LAN-Funktionalität eingefügt, admsid.spin entsprechend erweitert, hat 4Longs gekostet + -1363 Longs frei + +20-04-2014 -Fehler in der Plexus-Startdatei behoben, irrtümlicherweise wurden die Basic-Systemparameter beim Start überschrieben + -dadurch war die Reclaim-Funktion wirkungslos ->der Basicspeicher wurde gnadenlos gelöscht + -Abfrage auf Administratreiber in der Startdatei geändert + -1359 Longs frei + +21-04-2014 -Fehler in der admsid behoben, Befehl plxput in der Dos-Shell hat nicht funktioniert, der Poller muss zum Setzen angehalten werden + -1359 Longs frei + +08-05-2014 -Mousebound-Befehl beim Start eingefügt, da es passieren konnte, das beim Verlassen von Trios-Basic der Mausbereich eingegrenzt war. + -1339 Longs frei + +18-05-2014 -Für Trios-Basic wurde ein Runtime-Modul erschaffen, was es erlaubt, binäre BAS-Dateien(ab TBasic Vers.2.2) direkt aus Plexus heraus zu starten + -somit können BAS-Dateien auch als Links gestartet werden + -DOS-Shell ebenfalls mit dieser Funktionalität ausgestattet + -1317 Longs frei + Notizen : Window 0 = Hauptbildschirm, darf nicht anderweitig genutzt werden !!! Window 1 = Utilitie-Fenster (serielles Terminal, Uhr-Einstellung,Color-Settings, Ram-Monitor,Player,Systemsettings,Baud-Einstellung) Window 2 = Infofenster (SD-Card-Info,Kopierfenster,Messagebox,Datei-Info) @@ -545,7 +572,18 @@ SETTING_RAM = $7FF00 'Hier stehen die System-Settings START_FLAG = $7FFFF 'Flag das Plexus schonmal gestartet wurde ->Logo unterdrücken RETURN_FLAG = $7FFFE 'Rückkehr-Flag aus gestarteter Bin-Datei -ADM_SPEC = %00000000_00000000_00000000_01010011 +'******************* Spezifikation für Administra ********************** +' +---------- com +' | +-------- i2c +' | |+------- rtc +' | ||+------ lan +' | |||+----- sid +' | ||||+---- wav +' | |||||+--- hss +' | ||||||+-- bootfähig +' | |||||||+- dateisystem +'ADM_SPEC = %00000000_00000000_00000000_11110011 + BEL_COLORS =64 BEL_X =640 BEL_Y =480 @@ -772,6 +810,7 @@ dat DCF77 byte "dcf.dll",0 'DCF77-Empfänger-Test BLUETOOTH byte "bltooth.dll",0 'Bluetooth-Settings Ymodem byte "ymodem.dll",0 'Ymodem-Funktion + BAS_RT byte "basrun.dll",0 'Basic-Runtime-Modul root byte ".. ",0 dirhoch byte ". ",0 @@ -797,7 +836,7 @@ dat Abbr byte "Cancel",0 sysfont byte "reg.fnt",0 promt byte "OK>",0 - Version byte "2.05",0 + Version byte "2.06",0 New_dir byte "NEWDIR",0 '------------ Tage ------------------------------------ DAY1 byte "MO",0 @@ -906,6 +945,7 @@ PUB main | i ios.ram_wrbyte(0,RETURN_POINT+1) 'Verzeichnis_counter lesen und RAM-Platz danach löschen 'num.init + ios.mousebound(0,0,639,479) 'Maus-Bereich festlegen repeat os_cmdinput 'Hauptprogrammschleife @@ -1100,13 +1140,13 @@ PRI os_cmdinput | x,y ,i,col,dk,kb,b,kl,fst,term_aus,kn,bd,tmp fst:=kl/10 'Nummer des Fensters do_restore:=1 'bei Maus-Bedienung Hintergrund wieder herstellen '------------------------------------------------- Fenster-Schließen ------------------------------------------------------------------------------------------------------------- - if kl==1 'Abfrage auf Fensterloeschen - if doppelklick - Close_Window(fst) - if attribut_fenster 'beim Schließen des Attribut-Fensters SD-Card neu einlese - mc:=SD_CARD - attribut_fenster:=0 - if kl==2 +' if kl==1 'Abfrage auf Fensterloeschen +' if doppelklick +' Close_Window(fst) +' if attribut_fenster 'beim Schließen des Attribut-Fensters SD-Card neu einlese +' mc:=SD_CARD +' attribut_fenster:=0 + if kl==1 or kl==2 Close_Window(fst) if attribut_fenster mc:=SD_CARD @@ -1193,7 +1233,9 @@ PRI os_cmdinput | x,y ,i,col,dk,kb,b,kl,fst,term_aus,kn,bd,tmp case y popupy:popupselect(@info,popupx,popupy) - keyboardscan("I") + infofenster(12,10,27,20,ram_txt(32),1) 'SD-Card-Info-Fenster anzeigen + SD_CARD_INFO 'Fenster mit Info's füllen +' keyboardscan("I") do_restore:=1 'Info-Fenster-Hintergrund soll wieder hergestellt werden popupy+1:if mountmarker==1 @@ -1615,7 +1657,7 @@ pri show_tab(n) case n 1:print_info(vidnfo,6,8) 2:print_info(sndnfo,6,8) - printbin(ADM_SPEC,16,winhcol,0,act_color,15,8) + printbin(ios.admgetspec,16,winhcol,0,act_color,15,8) 3:print_win(@sysfont,10,8) ios.displaypic(winhcol,panelcol,0,10,10,11,16) @@ -2052,6 +2094,7 @@ pri run_sys(str,mark) 'starten der eingebetteten Programme activate_dirmarker(systemdir) ifnot OPEN_FILE(str) + ios.mousepointer(Hour_Glass) 'Sanduhr anzeigen ios.ldbin(str) pri Highlight_balken 'ist der Hevorhebungsbalken außerhalb des Scrollbereiches, dann gemerkte Werte löschen @@ -2098,6 +2141,8 @@ pri start_file(mode) 3:ios.admload(@filestring) 4:if venatrix ios.venload(@filestring) + 5:ios.paraset(@filestring) + ios.ldbin(@BAS_RT) PRI FILE_START|a,c,dirmark @@ -2117,6 +2162,8 @@ PRI FILE_START|a,c,dirmark start_file(3) if strcomp(@buff,@venfile) start_file(4) + if strcomp(@buff,@basfile) 'Basic-Runtime starten + start_file(5) '****************************** Maus-Pfeil laden ************************************** if strcomp(@buff,@maus) loadMouse(@filestring) @@ -2128,8 +2175,8 @@ PRI FILE_START|a,c,dirmark ifnot OPEN_FILE(@dumpstring) ios.sid_sdmpplay(@dumpstring) play:=1 - '***************************** Text-oder Basic-Dateien anzeigen ********************** - if strcomp(@buff,@txtfile) or strcomp(@buff,@basfile) 'Txt oder Bas Dateien anzeigen + '***************************** Text-Dateien anzeigen ********************************* + if strcomp(@buff,@txtfile) 'or strcomp(@buff,@basfile) 'Txt Dateien anzeigen windowloesch 'Dateifenster löschen textfenster 'Textfenster öffnen 'playerstop @@ -2788,7 +2835,7 @@ PRI bdselect(bauds):bd bd:=lookupz(bauds:300,600,1200,4800,9600,19200,38400,57600,115200) -PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,inp,adr_tmp,w,kl,tmp +PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch):ausg|k,ii,x,y,serchar,blck,inp,adr_tmp,w,kl,tmp {{####################################################### ser=serielle Schnittstelle verwenden mode=1 - Terminal mode=0 - Texteingabefeld @@ -2804,8 +2851,7 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in zeile:=min_y spalte:=min_x do_restore:=1 'Hintergrund muss wieder hergestellt werden - 'if mode - ' WIN_TILE(46,zeile,2) 'print_win(@promt,spalte-3,zeile) 'Terminal-Promt + WIN_TILE(6,zeile,spalte) 'Eingabe-Cursor repeat @@ -2814,24 +2860,39 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in ma:=ios.mouse_button(0) if ser - serchar:=ios.serread'com.rxcheck 'Zeichen von der com. Schnittstelle lesen - if k==27 'Abbruch mit ESC - ios.serclose'com.stop - serial:=0 - Fensterweg - return + serchar:=ios.serread'com.rxcheck 'Zeichen von der com. Schnittstelle lesen + if k==27 or ma 'Abbruch mit ESC + x:=ios.mousex + y:=ios.mousey + kl:=ios.get_window//10 'Icon-Button-Nummer des Fensters + if (kl==1) or (kl==2) or (k==27) 'Abfrage auf Fensterloeschen + if ser 'Terminalfenster + fensterweg + ios.serclose + serial:=0 + else + Close_Window(2) 'Eingabefenster + quit + + if(x=>buttonx[4]) and (x= zur Schnittstelle senden - ios.sertx($0D)'com.tx($0D) - ios.sertx($0A)'com.tx($0A) 'manche Terminalprogramme brauchen das + ios.sertx($0D) + ios.sertx($0A) 'manche Terminalprogramme brauchen das else if k==13 + ausg:=13 quit @@ -2875,7 +2936,7 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in else textline[adr-1]:=k 'Text in String schreiben if ser - ios.sertx(k)'com.tx(k) + ios.sertx(k) elseif serchar 'Zeichen von der com. Schnittstelle WIN_TILE(serchar-16,zeile,spalte++) 'Zeichen ausgeben @@ -2886,8 +2947,6 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in else spalte:=min_x 'Text in Ram schreiben (Parameter) zeile++ 'neue Zeile - 'if mode - ' WIN_TILE(46,zeile,2)'print_win(@promt,2,zeile) 'Eingabepromt in neuer Zeile (Terminal) if zeile==max_y+1 'letzte Zeile erreicht, dann eine Zeile hochscrollen @@ -2895,30 +2954,14 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in ios.scrollup(1,winhcol, min_y, min_x, max_y, max_x,1) zeile:=max_y 'Zeilennummer wieder auf max_y setzen - if ma 'Maustaste - x:=ios.mousex - y:=ios.mousey - kl:=ios.get_window//10 'Icon-Button-Nummer des Fensters - if kl==1 'Abfrage auf Fensterloeschen - if doppelklick - Close_Window(2) - return - if kl==2 - Close_Window(2) - return - if(x=>buttonx[4]) and (x=0 'Parameter-Modus w:=64-ii ios.ram_fill(adr_tmp+ii,w,0) 'rest löschen else textline[adr]:=0 'normaler Text-Modus, String abschliessen - return 13 + con '************************************** Systeminfo-Programms-Fenster ******************************************************************************************************************* @@ -3557,37 +3600,6 @@ PRI textdisplay(mode)|tx,tt,c,x,adr,b ios.sdclose - -{PRI texteingabe(y):ok|k,sp,i '************** Texteingabe im Dateifenster ****************** - sp:=3 - i:=0 - WIN_TILE(26,y,sp) - bytefill(@textline,12,0) 'Stringpuffer löschen - repeat - k:=ios.key - ma:=ios.mouse_button(0) - if k==13 'Return? dann neue Zeile - ok:=1 - textline[i++]:=0 - quit - if k==27 'Abbruch - ok:=0 - quit - if k==ios#CHAR_BS 'Backspace - if i>0 - WIN_TILE(16,y,sp--) - WIN_TILE(26,y,sp) - i-- - if k=>32 and k=<122 'Buchstaben und Zahlen - WIN_TILE(k-16,y,sp++) - textline[i++]:=k - if i>12 - i:=12 'Zeichen von Tastatur - WIN_TILE(26,y,sp) - - if sp>14 - sp:=14 -} PRI printfont(str1,a,b,c,d,e)|f repeat strsize(str1) diff --git a/source/Plexus-Start-Trios.spin b/source/Plexus-Start-Trios.spin index cce56b1..cff242a 100644 --- a/source/Plexus-Start-Trios.spin +++ b/source/Plexus-Start-Trios.spin @@ -69,10 +69,11 @@ YMODEM_RAM= $7E400 '... $7E417 Name, der zu sendenden Datei, Was soll gemacht LINK_RAM = $7FE00 PARA_RAM = $7FE40 SETTING_RAM = $7FF00 'Hier stehen die System-Settings +'Bereich 7FFF1-7FFFF 'Systemflags für Plexus und Basic START_FLAG = $7FFFF 'Flag das Plexus schonmal gestartet wurde ->Logo unterdrücken -ADM_SPEC = %00000000_00000000_00000000_01010011 +ADM_SPEC = gc#A_FAT|gc#A_LDR|gc#A_SID|gc#A_LAN|gc#A_RTC|gc#A_PLX'%00000000_00000000_00000000_11110011 '******************Farben ******************************************************** #$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey @@ -84,7 +85,7 @@ ADM_SPEC = %00000000_00000000_00000000_01010011 #$3C, Light_Teal, #$28, Teal, #$14, Dark_Teal #$FF, White, #$00, Black - +obj gc:"glob-con" VAR 'systemvariablen byte font[25] 'Hilfsstring für Strings aus dem Ram @@ -100,7 +101,7 @@ dat sound_nfo byte "sound.nfo",0 plexus byte "plexus.dll",0 SYSTEM Byte "PLEXUS ",0 'Plexus-Systemverzeichnis - Version byte "Version 2.05",0 + Version byte "Version 2.06",0 sysfont byte "reg.fnt",0 scrsaver byte "plexus.dat",0 @@ -127,7 +128,7 @@ PUB main | i,a ios.ram_fill(DIR_RAM,$1BFF,0) 'Dir-Speicher löschen ios.ram_fill(DMP_RAM,$1FFF,0) 'Dmp-File-Speicher löschen ios.ram_fill(TXT_RAM,$2000,0) 'Error-Text-Speicher löschen - ios.ram_fill(LINK_RAM,$1ff,0) 'Link-Speicher löschen + ios.ram_fill(LINK_RAM,$ff,0) 'Link-Speicher löschen ios.ram_fill(MENU_RAM,$500,0) 'Menue-Text-Speicher löschen ios.ram_fill(YMODEM_RAM,$30,0) 'YMODEM-RAM löschen '-------------------------------------------------------------------------------------- @@ -181,25 +182,26 @@ PUB main | i,a LoadTiletoRam(@scrsaver,SCREEN_SV) 'Plexus-Logo in den Ram laden loadtile(SCREEN_SV) 'Plexus-Logo nach Bella laden ios.display2dbox(red,0,0,2,39,0) - ios.display2dbox(blue,3,0,5,39,0) + ios.display2dbox(light_red,3,0,5,39,0) ios.display2dbox(orange,6,0,9,39,0) - ios.display2dbox(light_blue,10,0,10,39,0) + ios.display2dbox(dark_red,10,0,10,39,0) - ios.display2dbox(black,11,0,18,39,0) + ios.display2dbox(light_orange,11,0,18,39,0) - ios.display2dbox(light_blue,19,0,19,39,0) + ios.display2dbox(dark_red,19,0,19,39,0) ios.display2dbox(orange,20,0,23,39,0) - ios.display2dbox(blue,24,0,26,39,0) + ios.display2dbox(light_red,24,0,26,39,0) ios.display2dbox(red,27,0,29,39,0) - ios.displaypic(black,255,0,11,10,8,22)'light_orange,0,11,10,8,22) 'Plexus-Logo anzeigen + + ios.displaypic(light_orange,black,0,11,10,8,22)'light_orange,0,11,10,8,22) 'Plexus-Logo anzeigen ios.setpos(7,15) ios.print(string("Welcome to")) ios.setpos(21,12) ios.print(string("for Hive-Computer")) - ios.printBoxcolor(0,orange,blue,95) + ios.printBoxcolor(0,orange,light_red,95) ios.setpos(24,14) ios.print(@version) ios.printBoxcolor(0,orange,light_orange,95) diff --git a/source/VGA64_Engine.spin b/source/VGA64_Engine.spin index 582b510..213042a 100644 --- a/source/VGA64_Engine.spin +++ b/source/VGA64_Engine.spin @@ -126,14 +126,22 @@ pub printat(y,x) chromaBuffer[punkt]:=color drawingStop } +pub put(c,x,y) + + displayCharacter(c, printBoxFGColor[win], printBoxBGColor[win], y, x) + pub setx(x) printColumn:=x + pub sety(y) printRow:=y + pub getx return printColumn + pub gety return printRow + PUB printCharacter(character) '' 26 Stack Longs '' //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1544,6 +1552,9 @@ if_z jmpret mousePC, displayPC drawBackground_ret ret ' Return. + + fit 496 +Dat ' ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ' Data ' ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1646,14 +1657,15 @@ mouseRightPixels res 1 ' ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - fit 496 + ' fit 496 DAT ' //////////////////////Variable Array///////////////////////////////////////////////////////////////////////////////////////// mouseCache long 0[64] ' Mouse overlay display buffer. -'chromaBuffer_tail long 0[1_200-(@chromaBuffer_tail-@chromaBuffer)/4] 'Trick von Kuroneko um Speicher zu sparen +'chromaBuffer_tail long 0[1_200-((@chromaBuffer_tail- @chromaBuffer)/4)] 'Trick von Kuroneko um Speicher zu sparen + chromaBuffer long 0[1_200] ' Display chroma buffer. lumaBuffer word 0[1_200] ' Display luma buffer. printColor long 0 ' Print cursor color control. diff --git a/source/Venatrix-Test.spin b/source/Venatrix-Test.spin index 2c279bd..9340891 100644 --- a/source/Venatrix-Test.spin +++ b/source/Venatrix-Test.spin @@ -59,6 +59,8 @@ ADM_SPEC = %00000000_00000000_00000000_01010011 SETTING_RAM = $7FF00 'Hier stehen die System-Settings BRAM = $50000 'Overlay-Puffer Hour_Glass = $66800+(167*16*4) 'Sanduhr +MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte + '******************Farben ******************************************************** #$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey #$C0, Light_Red, #$80, Red, #$40, Dark_Red @@ -153,7 +155,7 @@ PUB main '-------------------------------------------------------------------------------------- cmd_unmount iniload 'Ini-Datei mit Farbwerten laden - + ios.mousepointer(MOUSE_RAM) testfenster util:=0 repeat diff --git a/source/belsVGA64.spin b/source/belsVGA64.spin index 97e023c..4a0dbaf 100644 --- a/source/belsVGA64.spin +++ b/source/belsVGA64.spin @@ -1,7 +1,7 @@ {{ VGA-64Farben ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ -│ Autor: Ingo Kripahle,Reinhard Zielinski │ -│ Copyright (c) 2013 Ingo Kriphale,Reinhard Zielinski │ +│ Autor: Ingo Kripahle,Reinhard Zielinski │ +│ Copyright (c) 2013 Ingo Kriphale,Reinhard Zielinski │ │ See end of file for terms of use. │ │ Die Nutzungsbedingungen befinden sich am Ende der Datei │ └──────────────────────────────────────────────────────────────────────────────────────────────────────┘ @@ -9,7 +9,7 @@ Informationen : hive-project.de Kontakt : zille9@googlemail.com System : Hive -Name : VGA-Tile-Treiber 640x480 Pixel, 40x30 Zeichen +Name : VGA-Tile-Treiber 640x480 Pixel, 40x28 Tiles Chip : Bellatrix Typ : Treiber Version : 01 @@ -135,7 +135,7 @@ M3 = %00000000_00000000_00000000_00000000 M4 = %00000010_00000000_00000000_00000000 'busclk=0? _pinGroup = 1 -_startUpWait = 3 +_startUpWait = 2 buttonbuff=33 'Buttonanzahl 1-32 Textbutton oder icon @@ -156,7 +156,7 @@ VAR byte mouseshow 'Mouse-Pfeil anzeigen oder nicht byte strkette[40] 'stringpuffer fuer Scrolltext word tnr,XPos,YPos - byte bnumber[buttonbuff],bx[buttonbuff],by[buttonbuff],bxx[buttonbuff] 'buttonvariable fuer 64 Buttons + byte bnumber[buttonbuff],bx[buttonbuff],by[buttonbuff],bxx[buttonbuff] 'buttonvariable fuer 33 Buttons word xbound,ybound,xxbound,yybound 'x und y bereich der Mouse eingrenzen long mousetile[16] 'User-Mousetilebuffer byte hintergr @@ -190,7 +190,7 @@ PUB main | zeichen,n,i,x,y ,speed 'chip: kommandoint speed:=30 repeat - if mouseshow==1 'Mauspfeil anzeigen + if mouseshow==1 'Mauspfeil anzeigen x+=mouse.delta_x if x= soll die DOS-Shell von Plexus werden @@ -42,6 +42,9 @@ Kommandoliste: 29-03-2014 -Fehler im Aufruf der Hilfe-Funktion behoben, durch das Plexus-Verzeichnis wurde die Hilfe-Datei nicht mehr gefunden -dies wurde durch Setzen des Systemdirmarkers behoben -4473 Longs frei + +18-05-2014 -direkter Start von Basic-Dateien (.BAS) über Runtime-Modul möglich, dabei ist die Dateiendung wegzulassen + -4480 Longs frei }} OBJ @@ -184,7 +187,7 @@ dat butOK byte " OK ",0 Abbr byte "Cancel",0 SYSTEM Byte "PLEXUS ",0 'Plexus-Systemverzeichnis - + BAS_RT Byte "basrun.dll",0 PUB main | flag ,a,x,y,i,d ios.start @@ -194,6 +197,7 @@ PUB main | flag ,a,x,y,i,d systemdir:=get_dirmarker 'Dir-Marker lesen iniload + ios.mousepointer(MOUSE_RAM) testfenster ios.printCursorRate(3) @@ -621,28 +625,19 @@ PRI plx_scan|ack,adr PRI plx_put|wert - 'if open device:=numm.FromStr(os_nxtoken1,numm#HEX) wert := numm.FromStr(os_nxtoken2,numm#HEX) ios.plxOut(device,wert) - 'else - ' ios.print(string("Kein Device geöffnet!")) - ' ios.printnl PRI plx_get '################## das funktioniert noch nicht ?! #################### - 'if open device:=numm.FromStr(os_nxtoken1,numm#HEX) ios.print(string("Get : ")) ios.printhex(ios.plxIn(device),2) ios.printnl - 'else - ' ios.print(string("Kein Device geöffnet!")) - ' ios.printnl PRI plx_test - 'ios.plxHalt ios.printcursorrate(0) ios.printcls repeat @@ -656,12 +651,10 @@ PRI plx_test print_chan(1,ios.getreg(1)) print_chan(2,ios.getreg(2)) print_chan(3,ios.getreg(3)) - 'ios.plxout($3A,!(cnt>>23)) - show_time + show_time 'Zeitanzeige aktualisieren until ios.key ios.printnl ios.printcursorrate(3) - 'ios.plxRun PRI print_chan(cnr,wert) @@ -816,8 +809,8 @@ cmd22 byte "dmset",0 cmd23 byte "dmclr",0 cmd24 byte "dmlist",0 cmd25 byte "debug",0 -cmd26 byte "xload",0 -cmd27 byte "xsave",0 +cmd26 byte "time",0 +cmd27 byte "date",0 cmd28 byte "xdir",0 cmd29 byte "xrename",0 cmd30 byte "xdel",0 @@ -893,9 +886,9 @@ elseif strcomp(stradr,@cmd12) 'cd - verzeichnis wechseln elseif strcomp(stradr,@cmd13) 'aload - lade administra-code cmd_aload 'elseif strcomp(stradr,@cmd26) 'xload -' rd_load +' settime 'elseif strcomp(stradr,@cmd27) 'xsave -' rd_save +' setdate 'elseif strcomp(stradr,@cmd28) 'xdir ' rd_dir 'elseif strcomp(stradr,@cmd29) 'xrename @@ -919,6 +912,7 @@ elseif strcomp(stradr,@cmd37) elseif os_testbin(stradr) '.bin elseif os_testadm(stradr) '.adm elseif os_testbel(stradr) '.bel +elseif os_testbas(stradr) 'elseif strcomp(stradr,@cmd38) ' plx_open 'elseif strcomp(stradr,@cmd39) @@ -1079,6 +1073,37 @@ PUB os_testbel(stradr): flag | status,i,len 'sys: test ob kommando a ios.sdclose ios.sddmact(ios#DM_USER) 'u-marker aktivieren + byte[stradr][len] := 0 'extender wieder abschneiden +PUB os_testbas(stradr): flag | status,i,len 'sys: test ob kommando als bel-datei vorliegt + + flag := FALSE + len := strsize(stradr) + repeat i from 0 to 3 '.bel anhängen + byte[stradr][len + i] := byte[@ext4][i] + byte[stradr][len + i] := 0 + +' im aktuellen dir suchen + status := ios.sdopen("r",stradr) 'datei vorhanden? + if status == 0 'datei gefunden + flag := TRUE + ios.paraset(stradr) + ios.ldbin(@BAS_RT) + else 'datei nicht gefunden + ios.sdclose +{ +'im system-dir suchen + ios.sddmset(ios#DM_USER) 'u-marker setzen + ios.sddmact(ios#DM_SYSTEM) 's-marker aktivieren + status := ios.sdopen("r",stradr) 'datei vorhanden? + if status == 0 'datei gefunden + flag := TRUE + ios.belload(stradr) 'bellatrix-code laden + 'ios.screeninit(0,1) 'systemmeldung + else 'datei nicht gefunden + ios.sdclose + } + ios.sddmact(ios#DM_USER) 'u-marker aktivieren + byte[stradr][len] := 0 'extender wieder abschneiden PRI os_printstr(strptr1,strptr2):strptr3 @@ -1808,6 +1833,7 @@ msg34 byte "Bellatrix Auflösung : ",0 ext1 byte ".BIN",0 ext2 byte ".ADM",0 ext3 byte ".BEL",0 +ext4 byte ".BAS",0 wait1 byte "",0 cstr byte "••••••••",0 diff --git a/source/ram.spin b/source/ram.spin index b57fbf4..c352783 100644 --- a/source/ram.spin +++ b/source/ram.spin @@ -15,7 +15,7 @@ _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 DB_IN = %00000111_11111111_11111111_00000000 'maske: dbus-eingabe -#0,JOB_NONE,JOB_POKE,JOB_PEEK,JOB_FILL,JOB_WRLONG,JOB_RDLONG,JOB_WRWORD,JOB_RDWORD,DO_READ,DO_WRITE,PUT_BYTE,GET_BYTE +#0,JOB_NONE,JOB_POKE,JOB_PEEK,JOB_FILL,JOB_WRLONG,JOB_RDLONG,JOB_WRWORD,JOB_RDWORD,DO_READ,DO_WRITE,JOB_COPY,JOB_KEEP VAR long CogNr long JobNr ' 3 continue params @@ -42,23 +42,7 @@ pub wr_value(adr,val,m) repeat until JobNr == JOB_NONE dira := DB_IN -{pub get_value(chip,m):w - Address := chip - Value := m - dira := 0 - JobNr := GET_BYTE - repeat until JobNr == JOB_NONE - dira := DB_IN - w := Werte -pub put_value(chip,m) - Address := chip - Value := m - dira := 0 - JobNr := PUT_BYTE - repeat until JobNr == JOB_NONE - dira := DB_IN -} pub ram_fill(adr,anz,wert) Address:=adr @@ -69,6 +53,24 @@ pub ram_fill(adr,anz,wert) repeat until JobNr==JOB_NONE dira:=DB_IN +pub ram_copy(von,ziel,zahl) + Address:=von + Value:=ziel + Anzahl:=zahl + dira :=0 + JobNr:=Job_Copy + repeat until JobNr==JOB_NONE + dira:=DB_IN + +pub ram_keep(adr):w + address:=adr +' Value:=0 +' Anzahl:=0 + dira := 0 + JobNr:=Job_keep + repeat until JobNr == JOB_NONE + dira := DB_IN + w := Werte+1 Pub Start CogNr := cognew(@cog_loop,@JobNr) @@ -82,7 +84,16 @@ DAT ORG 0 cog_loop rdlong _job,par wz ' get job id if_z jmp #cog_loop - + '********** Parameter einlesen ********************** + mov _ptr,par ' pointer of params + add _ptr,#4 ' move to param 1 + rdlong _adr,_ptr ' lese 1.Parameter + add _ptr,#4 ' move to param 2 + rdlong _val,_ptr ' lese 2.Parameter + add _ptr,#4 ' move to param 3 + rdlong _count,_ptr ' lese 3-Parameter + mov _ftemp,_adr ' Kopie von _adr + '********** Kommandoabfrage ************************* cmp _job,#DO_WRITE wz if_z jmp #cog_write @@ -92,103 +103,63 @@ cog_loop rdlong _job,par wz ' get job id cmp _job,#JOB_FILL wz if_z jmp #cog_fill -{ cmp _job,#PUT_BYTE wz - if_z jmp #cog_put + cmp _job,#JOB_COPY wz + if_z jmp #cog_copy + + if_z cmp _job,#JOB_KEEP wz + jmp #cog_keeping - cmp _job,#GET_BYTE wz - if_z jmp #cog_get -} jmp #cog_loop '************************************************************************************** -cog_ready mov _ptr,par - mov _job,#JOB_NONE - wrlong _job,_ptr - - jmp #cog_loop -'###################################################################################### -'###################################################################################### -{cog_get call #sub_param - cmp _adr,#1 wz - if_z jmp #adm_get - - -cog_put call #sub_param - cmp _adr,#1 wz - if_z jmp #adm_put - ' cmp _adr,#2 wz - 'if_z jmp #bel_put - ' cmp _adr,#3 wz - 'if_z jmp #ven_put - -adm_put - ' zeichen zu administra senden - ' waitpeq _hs,_hs ' warte auf hs=1 (slave bereit) - and _val,#$ff ' wert maskieren - or _val,_a1 ' + bel=0 wr=0 clk=0 - mov outa,_val ' daten + signale ausgeben - mov dira,_DIR_OUT ' bus auf ausgabe schalten - or outa,_a2 ' clk=0 --> clk=1 - waitpeq _zero,_hs ' warte auf hs=0 - mov dira,_DIR_IN ' bus auf eingabe schalten - mov outa,_s1 ' bussignale inaktiv - jmp #cog_ready - -adm_get ' zeichen von administra empfangen - waitpeq _hs,_hs ' warte auf hs=1 (slave bereit) - mov outa,_a3 ' bel=0 wr=1 clk=1 - waitpeq _zero,_hs ' warte auf hs=0 - mov _val,ina ' daten einlesen - and _val,#$ff ' wert maskieren - mov outa,_s1 ' bussignale inaktiv - mov _tmp,_val - jmp cog_subpeek - -} -'###################################################################################### -{ outa := %00001001_01011000_00000000_00000000 'prop1=0, wr=0 - dira := db_out 'datenbus auf ausgabe stellen - outa[7..0] := c 'daten --> dbus - outa[busclk] := 1 'busclk=1 - waitpeq(%00000000_00000000_00000000_00000000,%00001000_00000000_00000000_00000000,0) 'hs=0? - dira := db_in 'bus freigeben - outa := %00001101_01111000_00000000_00000000 'wr=1, prop1=1, busclk=0 -} +cog_ready mov _ptr,par 'Parameter + mov _job,#JOB_NONE 'Job mit null füllen + wrlong _job,_ptr 'nach hubram + jmp #cog_loop 'zurück zur Abfrageschleife '###################################################################################### '************************************************************************************** cog_subpeek add _ptr,#4 ' Ergebnis nach Werte übergeben next param - wrlong _tmp,_ptr + wrlong _tmp,_ptr ' Wert -> hubram + jmp #cog_ready ' ausstieg +'**************************** eine Zeile überspringen ***************************** + +cog_keeping call #sub_peek + cmp _tmp,#0 wz 'Wert 0? + if_z jmp #cog_keepout 'dann raus + call #moving 'Adresse erhöhen + jmp #cog_keeping 'weiter + +cog_keepout mov _tmp,_ftemp 'Adresse nach tmp + jmp #cog_subpeek + +'************************Ram-Bereich kopieren************************************** + +cog_copy + mov _REGA,_val 'zieladresse merken + +loop_copy call #sub_peek 'Wert aus Quellspeicher lesen + mov _val,_tmp 'peekwert nach _val kopieren + mov _adr,_REGA 'zieladresse nach _adr + call #sub_poke 'wert in Zielspeicher schreiben + add _REGA,#1 'Zieladresse erhöhen + call #moving 'Quelladresse erhöhen und nach _adr zurückschreiben + djnz _count,#loop_copy 'counter runterzählen + jmp #cog_ready 'raus + +'************************Ram-Bereich mit einem Wert füllen***************************** + +cog_fill call #sub_poke 'schreiben + call #moving + djnz _count, #cog_fill'nächste zelle bis _count = 0 jmp #cog_ready -'************************************************************************************** - '########## Parameterfeld (3-Parameter) einlesen############### -sub_param mov _ptr,par ' pointer of params - add _ptr,#4 ' move to param 1 - rdlong _adr,_ptr ' get address1 - add _ptr,#4 ' move to param 2 - rdlong _val,_ptr ' wert - add _ptr,#4 ' move to param 3 - rdlong _count,_ptr ' lese Jobnummer -sub_param_ret ret -'************************************************************************************** - -cog_fill call #sub_param - mov _ftemp,_adr ' adresse merken - -loop_fill call #sub_poke ' schreiben - add _ftemp, #1 'adr := adr + 1 - mov _adr,_ftemp 'adresse zurueckschreiben - djnz _count, #loop_fill 'nächste zelle bis _count = 0 - - jmp #cog_ready -'************************************************************************************** -cog_write call #sub_param - mov _ftemp,_adr ' adresse merken +'************************Byte,Word oder Long schreiben********************************* +cog_write mov _RegA,_val ' wert merken mov _RegB,#8 ' shiftwert mov _RegC,#3 ' Zaehlerschleifenwert @@ -200,8 +171,8 @@ cog_write call #sub_param loop_wrlong mov _val,_RegA shr _val,_RegB 'wert>>8 add _RegB,#8 'shiftwert um 8 erhoehen - add _ftemp, #1 'adr := adr + 1 - mov _adr,_ftemp 'adresse zurueckschreiben + + call #moving call #sub_poke cmp _count,#JOB_WRWORD wz 'wenn wrword hier aussteigen @@ -211,10 +182,8 @@ loop_wrlong mov _val,_RegA jmp #cog_ready -'************************************************************************************** -cog_read call #sub_param - - mov _ftemp,_adr ' adresse merken +'***********************Byte, Word oder Long lesen************************************* +cog_read mov _RegA,#8 ' shiftwert mov _RegC,#3 ' Schleifenzaehler @@ -244,12 +213,13 @@ cog_subrdword add _ptr,#4 ' next param '************************************************************************************** rd_wr mov _RegB,_tmp - add _ftemp,#1 'adresse+1 +moving add _ftemp,#1 'adresse+1 mov _adr,_ftemp 'adresse zurueckschreiben +moving_ret rd_wr_ret ret '************************************************************************************** -'************************************************************************************** +'*****************************ein Byte in den RAM schreiben**************************** sub_poke mov _tmp,_adr ' make a copy and _val,#$FF ' only D7-D0 ' BUS @@ -266,12 +236,13 @@ sub_poke mov _tmp,_adr ' make a copy mov outa,_adr ' /WR+/RAMx + A10-A0 + D7-D0 nop nop + nop mov outa,_tmp ' BUS + A10-A0 + D7-D0 nop mov dira,#0 sub_poke_ret ret -'************************************************************************************** +'*****************************Ein Byte aus dem Ram lesen******************************* sub_peek mov _tmp,_adr ' make a copy @@ -281,19 +252,20 @@ sub_peek mov _tmp,_adr ' make a copy mov dira,_DIR_IN ' D7..D0 as input call #setadr and _tmp,_m_A19 wz ' MSB of address - mov _tmp,_adr + 'mov _tmp,_adr if_z or _adr,_BUS_RD_R1 ' address <= $07FFFF if_nz or _adr,_BUS_RD_R2 ' address >= $800000 nop mov outa,_adr ' /RAMx + A10-A0 nop nop + nop mov _tmp,ina nop and _tmp,#$FF ' only D7-D0 mov dira,#0 sub_peek_ret ret -'************************************************************************************** +'******************************RAM-Adresse setzen*************************************** setadr ' ADR HI and _adr,_m_A18_A11 ' hi part @@ -314,7 +286,6 @@ setadr_ret ret ' SRLE LSEAA A18-A11 ' kD ALMMAAA AAAAAAAA DDDDDDDD ' 21098 76543210 76543210 - _DIR_OUT long %00000111_11111111_11111111_11111111 _DIR_IN long %00000111_11111111_11111111_00000000 _BUS_INIT long %00000101_01111000_00000000_00000000 @@ -328,17 +299,40 @@ _m_A19 long %00000100_00001000_00000000_00000000 _m_A18_A11 long %00000000_00000111_11111000_00000000 _m_A10_A00 long %00000000_00000000_00000111_11111111 '|_________________________________ HBEAT - - +{ +' ====================================================================================== +' KONSTANTEN & VARIABELN +' ====================================================================================== +' +------------------------------- /hs +' |+------------------------------ /wr +' ||+----------------------------- busclk +' |||+---------------------------- hbeat +' |||| +-------------------------- al +' |||| |+------------------------- /bel +' |||| ||+------------------------ /adm +' |||| |||+----------------------- /ram2 +' |||| ||||+---------------------- /ram1 +' |||| ||||| +---------- a0..10 +' |||| ||||| | +' |||| ||||| | +- d0..7 +' |||| |||||+----------+ +------+ +_b1 long %00000001_00111000_00000000_00000000 ' adm=1, bel=0, wr=0, busclk=0 +_b2 long %00000011_00111000_00000000_00000000 ' adm=1, bel=0, wr=0, busclk=1 +_b3 long %00000111_00111000_00000000_00000000 ' adm=1, bel=0, wr=1, busclk=1 +_a1 long %00000001_01011000_00000000_00000000 ' adm=0, bel=1, wr=0, busclk=0 +_a2 long %00000011_01011000_00000000_00000000 ' adm=0, bel=1, wr=0, busclk=1 +_a3 long %00000111_01011000_00000000_00000000 ' adm=0, bel=1, wr=1, busclk=1 +_hs long %00001000_00000000_00000000_00000000 ' hs=1? +_zero long %00000000_00000000_00000000_00000000 ' +} _job res 1 _ptr res 1 _adr res 1 _val res 1 _count res 1 -_tmp res 22 +_tmp res 1 _ftemp res 1 _regA res 1 _RegB res 1 _RegC res 1 - fit 496 diff --git a/source/reg-ios-64.spin b/source/reg-ios-64.spin index 1d132ec..eb8c309 100644 --- a/source/reg-ios-64.spin +++ b/source/reg-ios-64.spin @@ -113,119 +113,7 @@ STRCOUNT = 64 'größe des stringpuffe CON 'ADMINISTRA-FUNKTIONEN -------------------------------------------------------------------------- -'chip-managment -#92, AMGR_SETSOUND - AMGR_GETSPEC - AMGR_SETSYSSOUND - AMGR_GETSOUNDSYS - AMGR_ALOAD - AMGR_GETCOGS - AMGR_GETVER - AMGR_REBOOT - AMGR_DEBUG = 255 - -'soundeinstellungen -#0, SND_HSSOFF - SND_HSSON - SND_WAVOFF - SND_WAVON - -'sdcard-funktionen -#0, OPT - SD_MOUNT - SD_DIROPEN - SD_NEXTFILE - SD_OPEN - SD_CLOSE - SD_GETC - SD_PUTC - SD_GETBLK - SD_PUTBLK - SD_SEEK - SD_FATTRIB - SD_VOLNAME - SD_CHECKMOUNTED - SD_CHECKOPEN - SD_CHECKUSED - SD_CHECKFREE - SD_NEWFILE - SD_NEWDIR - SD_DEL - SD_RENAME - SD_CHATTRIB - SD_CHDIR - SD_FORMAT - SD_UNMOUNT - SD_DMACT - SD_DMSET - SD_DMGET - SD_DMCLR - SD_DMPUT - SD_EOF - SD_POS - SD_COPY - SD_SIZE - SD_WR_VOLNAME - -#35, Bluetooth_Command - Bluetooth_Normal - -'RTC - Datums und Zeitfunktionen -#41, RTC_GETSECONDS 'Returns the current second (0 - 59) from the real time clock. - RTC_GETMINUTES 'Returns the current minute (0 - 59) from the real time clock. - RTC_GETHOURS 'Returns the current hour (0 - 23) from the real time clock. - RTC_GETDAY 'Returns the current day (1 - 7) from the real time clock. - RTC_GETDATE 'Returns the current date (1 - 31) from the real time clock. - RTC_GETMONTH 'Returns the current month (1 - 12) from the real time clock. - RTC_GETYEAR 'Returns the current year (2000 - 2099) from the real time clock. - RTC_SETSECONDS 'Sets the current real time clock seconds. - RTC_SETMINUTES 'Sets the current real time clock minutes. - RTC_SETHOURS 'Sets the current real time clock hours. - RTC_SETDAY 'Sets the current real time clock day. - RTC_SETDATE 'Sets the current real time clock date. - RTC_SETMONTH 'Sets the current real time clock month. - RTC_SETYEAR 'Sets the current real time clock year. - RTC_SETNVSRAM 'Sets the NVSRAM to the selected value (0 - 255) at the index (0 - 55). - RTC_GETNVSRAM 'Gets the selected NVSRAM value at the index (0 - 55). - RTC_PAUSEFORSECONDS 'Pauses execution for a number of seconds. - RTC_PAUSEFORMILLISECONDS 'Pauses execution for a number of milliseconds. - RTC_TIME - DCF_SYNC_GET 'Status des DCF-Empfängers - DCF_UPDATE_SET 'RTC mit den DCF-Daten updaten - DCF_ERROR 'DCF-Error-Byte - DCF_DATACOUNT - DCF_BITNUMBER - DCF_BITLEVEL - DCF_TIMEZONE - DCF_ACTIVE - DCF_START 'DCF-Empfang starten - DCF_STOP 'DCF-Empfang stoppen - DCF_GETSTATUS 'DCF-Empfängerstatus (on/off) - DCF_SECONDS - DCF_MINUTES - DCF_HOURS - DCF_WEEKDAY - DCF_DAY - DCF_MONTH - DCF_YEAR - - - -#0, NVRAM_LANG -#0, LANG_DE - LANG_EN - -#1, NVRAM_DATEFORMAT -#0, DATEFORMAT_DE 'DD.MM.YYY (DE DIN 1355-1) - DATEFORMAT_CANONICAL 'YYYY-MM-DD (ISO 8601) - DATEFORMAT_UK 'DD/MM/YYYY - DATEFORMAT_US 'MM/DD/YYYY - -#2, NVRAM_TIMEFORMAT -#0, TIMEFORMAT_24 'HH:MM:SS - TIMEFORMAT_12 'HH:MM:SS[PM|AM] - TIMEFORMAT_12UK 'HH.MM.SS[PM|AM] 'dateiattribute #0, F_SIZE @@ -256,138 +144,9 @@ CON 'ADMINISTRA-FUNKTIONEN ----------------------------------------------------- DM_A DM_B DM_C - -'hss-funktionen -{#100, CHSS_LOAD - CHSS_PLAY - CHSS_STOP - CHSS_PAUSE - CHSS_PEEK - CHSS_INTREG - CHSS_VOL - CSFX_FIRE - CSFX_SETSLOT - CSFX_KEYOFF - CSFX_STOP -'GM-synth-funktionen -#120, SYNTH_NOTEON - SYNTH_NOTEOFF - SYNTH_PRGCHANGE - SYNTH_VOLUME - SYNTH_PAN - SYNTH_ALLOFF -} -'wav-funktionen -{#150, SDW_START 'wav direkt von sdcard abspielen - SDW_STOP - SDW_STATUS - SDW_LVOL - SDW_RVOL - SDW_PAUSE - SDW_POS -} -'sidcog-funktionen -#156, SCOG_DMPLEN - SCOG_MDMPPLAY 'dmp auf sid2 von sdcard abspielen - SCOG_SDMPPLAY - SCOG_DMPSTOP - SCOG_DMPPAUSE - SCOG_DMPSTATUS - SCOG_DMPPOS - SCOG_MUTE - SCOG1_setRegister - SCOG1_updateRegisters - SCOG1_setVolume - SCOG1_play - SCOG1_noteOn - SCOG1_noteOff - SCOG1_setFreq - SCOG1_setWaveform - SCOG1_setPWM - SCOG1_setADSR - SCOG1_setResonance - SCOG1_setCutoff - SCOG1_setFilterMask - SCOG1_setFilterType - SCOG1_enableRingmod - SCOG1_enableSynchronization - SCOG2_setRegister - SCOG2_updateRegisters - SCOG2_setVolume - SCOG2_play - SCOG2_noteOn - SCOG2_noteOff - SCOG2_setFreq - SCOG2_setWaveform - SCOG2_setPWM - SCOG2_setADSR - SCOG2_setResonance - SCOG2_setCutoff - SCOG2_setFilterMask - SCOG2_setFilterType - SCOG2_enableRingmod - SCOG2_enableSynchronization - SCOG2_RESETREGISTER - SCOG1_RESETREGISTER - SCOG_BEEP -{#200, AYCOG_Start - AYCOG_Stop - AYCOG_UpdateRegisters - AYCOG_sdmpplay - } -'interface zum hss-player -#0, iEndFlag 'Repeat oder Ende wurde erreicht - iRowFlag 'Flag das Songzeile fertig ist - iEngineC 'Patternzähler - iBeatC 'Beatzähler - iRepeat 'zähler für loops -#5, iChannel -#5, iChannel1 -#10, iChannel2 -#15, iChannel3 -#20, iChannel4 -#0, iNote - iOktave - iVolume - iEffekt - iInstrument -'screeninterface -#60, SCR_OPEN 'containerdatei öffnen - SCR_FILL 'screenpuffer mit zeichen füllen - SCR_READ 'screen in den puffer laden - SCR_WRITE 'screen auf disk schreiben - SCR_GETNR 'nummer des aktuellen screens abfragen - SCR_SETPOS 'zeiger auf position im puffer setzen - SCR_GETPOS 'aktuelle position im puffer abfragen - SCR_GETC 'zeichen wird aus dem puffer gelesen - SCR_PUTC 'zeichen wird in den puffer geschrieben - SCR_FLUSH 'aktuellen puffer auf disk schreiben - SCR_ERR 'fehlerstatus abfragen - SCR_MAXSCR 'anzahl screens des containers abfragen -' ---------------------------------------------- PLX-Funktionen -#120, a_plxRun 'plx-bus freigeben - a_plxHalt 'plx-bus anfordern - a_plxIn 'port einlesen - a_plxOut 'port ausgeben - a_plxCh 'ad-wandler auslesen - a_plxGetReg 'poller-register lesen - a_plxSetReg 'poller-register setzen - a_plxStart 'i2c-dialog starten - a_plxStop 'i2c-dialog beenden - a_plxWrite 'i2c byte senden - a_plxRead 'i2c byte empfangen - a_plxPing 'abfrage ob device vorhanden ist - a_plxSetAdr 'adressen adda/ports für poller setzen -' ---------------------------------------------- GAMEDEVICES - a_Joy 'Joystick abfragen (1 x 8bit Port) - a_Paddle 'Paddle abfragen (1 x 8bit Port 1 x Analog) - 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 - 'Adresse der Port-Register setzen CON 'BELLATRIX-FUNKTIONEN -------------------------------------------------------------------------- ' einzeichen-steuercodes @@ -534,7 +293,7 @@ CHIP_VER = $00_01_01_01 ' | ||||||+-- multi ' | |||||||+- loader CHIP_SPEC = %00000000_00000000_00000000_00000001 - +{ LIGHTBLUE = 0 YELLOW = 1 RED = 2 @@ -543,9 +302,9 @@ BLUE_REVERSE = 4 WHITE = 5 RED_INVERSE = 6 MAGENTA = 7 - +} ' konstante parameter für die sidcog's - +{ scog_pal = 985248.0 scog_ntsc = 1022727.0 scog_maxf = 1031000.0 @@ -553,10 +312,10 @@ scog_triangle = 16 scog_saw = 32 scog_square = 64 scog_noise = 128 - +} obj ram_rw :"ram" - ser :"FullDuplexSerialExtended"'"SerialMirror" "RS232_ComEngine" + ser :"FullDuplexSerialExtended"'"SerialMirror" "RS232_ComEngine","JDCogSerial" gc :"glob-con" VAR @@ -575,7 +334,8 @@ PUB start: wflag 'system: ios initialisieren ''busprotokoll : - bus_init 'bus initialisieren - ram_rw.start + ram_rw.start 'Ram-Treiber starten + serial:=0 'serielle Schnittstelle geschlossen ram_wrlong($7f54,$FFFFB) @@ -766,7 +526,7 @@ PUB os_error(err):error 'sys: fehlerausgabe OBJ' SERIAL-FUNKTIONEN CON' -------------------------------------------------- Funktionen der seriellen Schnittstelle ----------------------------------------------------------- pub seropen(baud) 'ser. Schnittstelle virtuell öffnen - ser.start(31, 30, 0, baud) 'serielle Schnittstelle starten + ser.start(31, 30,0,baud)'0, baud) 'serielle Schnittstelle starten serial:=1 pub serclose 'ser. Schnittstelle virtuell schliessen @@ -793,7 +553,7 @@ OBJ '' A D M I N I S T R A CON ''------------------------------------------------- CHIP-MANAGMENT -PUB admsetsound(sndfunktion):sndstat 'chip-mgr: soundsubsysteme verwalten +{PUB admsetsound(sndfunktion):sndstat 'chip-mgr: soundsubsysteme verwalten ''funktionsgruppe : cmgr ''funktion : soundsubsysteme an- bzw. abschalten ''busprotokoll : [150][put.funktion][get.sndstat] @@ -829,14 +589,14 @@ PUB admgetsndsys: status 'chip-mgr: status des so bus_putchar1(AMGR_GETSOUNDSYS) status := bus_getchar1 - + } PUB admload(stradr) 'chip-mgr: neuen administra-code booten ''funktionsgruppe : cmgr ''funktion : administra mit neuem code booten ''busprotokoll : [096][sub_putstr.fn] '' : fn - dateiname des neuen administra-codes - bus_putchar1(AMGR_ALOAD) 'aktuelles userdir retten + bus_putchar1(gc#a_mgrALoad) 'aktuelles userdir retten bus_putstr1(stradr) waitcnt(cnt + clkfreq*3) 'warte bis administra fertig ist @@ -852,7 +612,7 @@ PUB admgetver:ver 'chip-mgr: version abfra ''version : $00_00_00_00 '' - bus_putchar1(AMGR_GETVER) + bus_putchar1(gc#a_mgrGetVer) ver := bus_getlong1 PUB admgetspec:spec 'chip-mgr: spezifikation abfragen @@ -872,7 +632,7 @@ PUB admgetspec:spec 'chip-mgr: spezifikation '' | |||||||+- dateisystem ''spezifikation : %00000000_00000000_00000000_01001111 - bus_putchar1(AMGR_GETSPEC) + bus_putchar1(gc#a_mgrGetSpec) spec := bus_getlong1 PUB admgetcogs:cogs 'chip-mgr: verwendete cogs abfragen @@ -881,7 +641,7 @@ PUB admgetcogs:cogs 'chip-mgr: verwendete co ''busprotokoll : [097][get.cogs] '' : cogs - anzahl der belegten cogs - bus_putchar1(AMGR_GETCOGS) + bus_putchar1(gc#a_mgrGetCogs) cogs := bus_getchar1 PUB admreset 'chip-mgr: administra reset @@ -889,12 +649,12 @@ PUB admreset 'chip-mgr: administra re ''funktion : reset im administra-chip auslösen - loader aus dem eeprom wird neu geladen ''busprotokoll : - - bus_putchar1(AMGR_REBOOT) + bus_putchar1(gc#a_mgrReboot) -PUB admdebug: wert 'chip-mgr: debug-funktion +'PUB admdebug: wert 'chip-mgr: debug-funktion - bus_putchar1(AMGR_DEBUG) - wert := bus_getlong1 +' bus_putchar1(AMGR_DEBUG) +' wert := bus_getlong1 CON ''------------------------------------------------- SD_LAUFWERKSFUNKTIONEN @@ -904,7 +664,7 @@ PUB sdmount: err 'sd-card: mounten ''busprotokoll : [001][get.err] '' : err - fehlernummer entspr. list - bus_putchar1(SD_MOUNT) + bus_putchar1(gc#a_SDMOUNT) err := bus_getchar1 PUB sddir 'sd-card: verzeichnis wird geöffnet @@ -912,7 +672,7 @@ PUB sddir 'sd-card: verzeichnis wi ''funktion : verzeichnis öffnen ''busprotokoll : [002] - bus_putchar1(SD_DIROPEN) + bus_putchar1(gc#a_SDOPENDir) PUB sdnext: stradr | flag 'sd-card: nächster dateiname aus verzeichnis ''funktionsgruppe : sdcard @@ -923,7 +683,7 @@ PUB sdnext: stradr | flag 'sd-card: nächster date '' : 0 = es folgt kein eintrag mehr '' : fn - verzeichniseintrag string - bus_putchar1(SD_NEXTFILE) 'kommando: nächsten eintrag holen + bus_putchar1(gc#a_SDNEXTFILE) 'kommando: nächsten eintrag holen flag := bus_getchar1 'flag empfangen if flag return bus_getstr1 @@ -938,7 +698,7 @@ PUB sdopen(modus,stradr):err | len,i 'sd-card: datei öffnen '' : fn - name der datei '' : error - fehlernummer entspr. list - bus_putchar1(SD_OPEN) + bus_putchar1(gc#a_SDOPEN) bus_putchar1(modus) len := strsize(stradr) bus_putchar1(len) @@ -952,7 +712,7 @@ PUB sdclose:err 'sd-card: datei schließ ''busprotokoll : [005][get.error] '' : error - fehlernummer entspr. list - bus_putchar1(SD_CLOSE) + bus_putchar1(gc#a_SDCLOSE) err := bus_getchar1 PUB sdgetc: char 'sd-card: zeichen aus datei lesen @@ -961,12 +721,12 @@ PUB sdgetc: char 'sd-card: zeichen aus da ''busprotokoll : [006][get.char] '' : char - gelesenes zeichen - bus_putchar1(SD_GETC) + bus_putchar1(gc#a_SDGETC) char := bus_getchar1 PUB sdputc(char) 'sd-card: zeichen in datei schreiben {{sdputc(char) - sd-card: zeichen in datei schreiben}} - bus_putchar1(SD_PUTC) + bus_putchar1(gc#a_SDPUTC) bus_putchar1(char) PUB sdgetstr(stringptr,len) 'sd-card: eingabe einer zeichenkette @@ -999,14 +759,14 @@ PUB sdeof: eof 'sd-card: eof abfragen ''busprotokoll : [030][get.eof] '' : eof - eof-flag - bus_putchar1(SD_EOF) + bus_putchar1(gc#a_SDEOF) eof := bus_getchar1 pub sdpos:c - bus_putchar1(SD_POS) + bus_putchar1(gc#a_SDPOS) c:=bus_getlong1 pub sdcopy(cm,pm,source) - bus_putchar1(SD_COPY) + bus_putchar1(gc#a_SDCOPY) bus_putlong1(cm) bus_putlong1(pm) @@ -1021,7 +781,7 @@ PUB sdgetblk(count,bufadr) | i 'sd-card: block lesen '' : char - gelesenes zeichen i := 0 - bus_putchar1(SD_GETBLK) + bus_putchar1(gc#a_SDGETBLK) bus_putlong1(count) repeat count byte[bufadr][i++] := bus_getchar1 @@ -1033,7 +793,7 @@ PUB sdputblk(count,bufadr) | i 'sd-card: block schreibe '' : char - zu schreibendes zeichen i := 0 - bus_putchar1(SD_PUTBLK) + bus_putchar1(gc#a_SDPUTBLK) bus_putlong1(count) repeat count bus_putchar1(byte[bufadr][i++]) @@ -1046,7 +806,7 @@ PUB sdxgetblk(adr,count)|i 'sd-card: block lesen -- '' : char - gelesenes zeichen i := 0 - bus_putchar1(SD_GETBLK) + bus_putchar1(gc#a_SDGETBLK) bus_putlong1(count) 'laenge der Datei in byte repeat count 'rd_put(fnr,bus_getchar1) @@ -1066,7 +826,7 @@ PUB sdxputblk(adr,count) 'sd-card: block schreiben ''busprotokoll : [007][put.char] '' : char - zu schreibendes zeichen - bus_putchar1(SD_PUTBLK) + bus_putchar1(gc#a_SDPUTBLK) bus_putlong1(count) repeat count bus_putchar1(ram_rdbyte(adr++))'rd_get(fnr)) @@ -1077,7 +837,7 @@ PUB sdseek(wert) 'sd-card: zeiger auf byt ''busprotokoll : [010][sub_putlong.pos] '' : pos - neue zeichenposition in der datei - bus_putchar1(SD_SEEK) + bus_putchar1(gc#a_SDSEEK) bus_putlong1(wert) PUB sdfattrib(anr): attrib 'sd-card: dateiattribute abfragen @@ -1108,7 +868,7 @@ PUB sdfattrib(anr): attrib 'sd-card: dateiattribute '' : wert - wert des abgefragten attributes - bus_putchar1(SD_FATTRIB) + bus_putchar1(gc#a_SDFATTRIB) bus_putchar1(anr) attrib := bus_getlong1 @@ -1120,7 +880,7 @@ PUB sdvolname: stradr 'sd-card: volumelabel abfragen '' : volname - name des volumes '' : len - länge des folgenden strings - bus_putchar1(SD_VOLNAME) 'kommando: volumelabel abfragen + bus_putchar1(gc#a_SDVOLNAME) 'kommando: volumelabel abfragen return bus_getstr1 PUB sdcheckmounted: flag 'sd-card: test ob volume gemounted ist @@ -1130,7 +890,7 @@ PUB sdcheckmounted: flag 'sd-card: test ob volume '' : flag - 0: unmounted '' : 1: mounted - bus_putchar1(SD_CHECKMOUNTED) + bus_putchar1(gc#a_SDCHECKMOUNTED) return bus_getchar1 PUB sdcheckopen: flag 'sd-card: test ob datei geöffnet ist @@ -1140,7 +900,7 @@ PUB sdcheckopen: flag 'sd-card: test ob datei '' : flag - 0: not open '' : 1: open - bus_putchar1(SD_CHECKOPEN) + bus_putchar1(gc#a_SDCHECKOPEN) return bus_getchar1 PUB sdcheckused 'sd-card: abfrage der benutzten sektoren @@ -1149,7 +909,7 @@ PUB sdcheckused 'sd-card: abfrage der be ''busprotokoll : [015][sub_getlong.used] '' : used - anzahl der benutzten sektoren - bus_putchar1(SD_CHECKUSED) + bus_putchar1(gc#a_SDCHECKUSED) return bus_getlong1 PUB sdcheckfree 'sd_card: abfrage der freien sektoren @@ -1158,7 +918,7 @@ PUB sdcheckfree 'sd_card: abfrage der fr ''busprotokoll : [016][sub_getlong.free] '' : free - anzahl der freien sektoren - bus_putchar1(SD_CHECKFREE) + bus_putchar1(gc#a_SDCHECKFREE) return bus_getlong1 PUB sdnewfile(stradr):err 'sd_card: neue datei erzeugen @@ -1168,7 +928,7 @@ PUB sdnewfile(stradr):err 'sd_card: neue datei erz '' : fn - name der datei '' : error - fehlernummer entspr. liste - bus_putchar1(SD_NEWFILE) + bus_putchar1(gc#a_SDNEWFILE) bus_putstr1(stradr) err := bus_getchar1 @@ -1179,7 +939,7 @@ PUB sdnewdir(stradr):err 'sd_card: neues verzeich '' : fn - name des verzeichnisses '' : error - fehlernummer entspr. liste - bus_putchar1(SD_NEWDIR) + bus_putchar1(gc#a_SDNEWDIR) bus_putstr1(stradr) err := bus_getchar1 @@ -1190,7 +950,7 @@ PUB sddel(stradr):err 'sd_card: datei/verzeich '' : fn - name des verzeichnisses oder der datei '' : error - fehlernummer entspr. liste - bus_putchar1(SD_DEL) + bus_putchar1(gc#a_SDDEL) bus_putstr1(stradr) err := bus_getchar1 @@ -1202,7 +962,7 @@ PUB sdrename(stradr1,stradr2):err 'sd_card: datei/verzeich '' : fn2 - neuer name '' : error - fehlernummer entspr. liste - bus_putchar1(SD_RENAME) + bus_putchar1(gc#a_SDRENAME) bus_putstr1(stradr1) bus_putstr1(stradr2) err := bus_getchar1 @@ -1215,7 +975,7 @@ PUB sdchattrib(stradr1,stradr2):err 'sd-card: attribute änd '' : attrib - string mit attributen (AHSR) '' : error - fehlernummer entspr. liste - bus_putchar1(SD_CHATTRIB) + bus_putchar1(gc#a_SDCHATTRIB) bus_putstr1(stradr1) bus_putstr1(stradr2) err := bus_getchar1 @@ -1227,7 +987,7 @@ PUB sdchdir(stradr):err 'sd-card: verzeichnis we '' : fn - name des verzeichnisses '' : error - fehlernummer entspr. list - bus_putchar1(SD_CHDIR) + bus_putchar1(gc#a_SDCHDIR) bus_putstr1(stradr) err := bus_getchar1 @@ -1238,7 +998,7 @@ PUB sdformat(stradr):err 'sd-card: medium formati '' : vlabel - volumelabel '' : error - fehlernummer entspr. list - bus_putchar1(SD_FORMAT) + bus_putchar1(gc#a_SDFORMAT) bus_putstr1(stradr) err := bus_getchar1 @@ -1248,7 +1008,7 @@ PUB sdunmount:err 'sd-card: medium abmelde ''busprotokoll : [024][get.error] '' : error - fehlernummer entspr. list - bus_putchar1(SD_UNMOUNT) + bus_putchar1(gc#a_SDUNMOUNT) err := bus_getchar1 PUB sddmact(marker):err 'sd-card: dir-marker aktivieren @@ -1258,7 +1018,7 @@ PUB sddmact(marker):err 'sd-card: dir-marker akt '' : dmarker - dir-marker '' : error - fehlernummer entspr. list - bus_putchar1(SD_DMACT) + bus_putchar1(gc#a_SDDMACT) bus_putchar1(marker) err := bus_getchar1 @@ -1268,7 +1028,7 @@ PUB sddmset(marker) 'sd-card: dir-marker set ''busprotokoll : [026][put.dmarker] '' : dmarker - dir-marker - bus_putchar1(SD_DMSET) + bus_putchar1(gc#a_SDDMSET) bus_putchar1(marker) PUB sddmget(marker):status 'sd-card: dir-marker abfragen @@ -1278,7 +1038,7 @@ PUB sddmget(marker):status 'sd-card: dir-marker abf '' : dmarker - dir-marker '' : dmstatus - status des markers - bus_putchar1(SD_DMGET) + bus_putchar1(gc#a_SDDMGET) bus_putchar1(marker) status := bus_getlong1 @@ -1288,7 +1048,7 @@ PUB sddmclr(marker) 'sd-card: dir-marker lö ''busprotokoll : [028][put.dmarker] '' : dmarker - dir-marker - bus_putchar1(SD_DMCLR) + bus_putchar1(gc#a_SDDMCLR) bus_putchar1(marker) PUB sddmput(marker,status) 'sd-card: dir-marker status setzen @@ -1298,84 +1058,254 @@ PUB sddmput(marker,status) 'sd-card: dir-marker sta '' : dmarker - dir-marker '' : dmstatus - status des markers - bus_putchar1(SD_DMPUT) + bus_putchar1(gc#a_SDDMPUT) bus_putchar1(marker) bus_putlong1(status) con'--------------------------------------------------- DCF77-Funktionen -------------------------------------------------------------------------------------------------------- pub dcf_sync:on - bus_putchar1(DCF_SYNC_GET) + bus_putchar1(gc#a_DCF_INSYNC) on:=bus_getchar1 pub dcf_update - bus_putchar1(DCF_UPDATE_SET) + bus_putchar1(gc#a_DCF_UPDATE_CLOCK) pub dcf_geterror:on - bus_putchar1(DCF_ERROR) + bus_putchar1(gc#a_DCF_GETBITERROR) on:=bus_getchar1 pub dcf_getdatacount:on - bus_putchar1(DCF_DATACOUNT) + bus_putchar1(gc#a_DCF_GETDatacount) on:=bus_getchar1 pub dcf_getbitnumber:on - bus_putchar1(DCF_BITNUMBER) + bus_putchar1(gc#a_DCF_GetBitNumber) on:=bus_getchar1 pub dcf_getbitlevel:on - bus_putchar1(DCF_BITLEVEL) + bus_putchar1(gc#a_DCF_GetBitLevel) on:=bus_getchar1 pub dcf_gettimezone:on - bus_putchar1(DCF_TIMEZONE) + bus_putchar1(gc#a_DCF_GetTimeZone) on:=bus_getchar1 pub dcf_getactive:on - bus_putchar1(DCF_ACTIVE) + bus_putchar1(gc#a_DCF_GetActiveSet) on:=bus_getchar1 pub dcf_startup - bus_putchar1(DCF_START) + bus_putchar1(gc#a_DCF_start) pub dcf_down - bus_putchar1(DCF_STOP) + bus_putchar1(gc#a_DCF_stop) pub dcf_status:on - bus_putchar1(DCF_GETSTATUS) + bus_putchar1(gc#a_DCF_dcfon) on:=bus_getchar1 pub dcf_getseconds:on - bus_putchar1(DCF_SECONDS) + bus_putchar1(gc#a_DCF_Getseconds) on:=bus_getchar1 pub dcf_getminutes:on - bus_putchar1(DCF_MINUTES) + bus_putchar1(gc#a_DCF_GetMinutes) on:=bus_getchar1 pub dcf_gethours:on - bus_putchar1(DCF_HOURS) + bus_putchar1(gc#a_DCF_Gethours) on:=bus_getchar1 pub dcf_getweekday:on - bus_putchar1(DCF_WEEKDAY) + bus_putchar1(gc#a_DCF_GetWeekDay) on:=bus_getchar1 pub dcf_getday:on - bus_putchar1(DCF_DAY) + bus_putchar1(gc#a_DCF_GetDay) on:=bus_getchar1 pub dcf_getmonth:on - bus_putchar1(DCF_MONTH) + bus_putchar1(gc#a_DCF_GetMonth) on:=bus_getchar1 pub dcf_getyear:on - bus_putchar1(DCF_YEAR) + bus_putchar1(gc#a_DCF_GetYear) on:=bus_getword1 con'--------------------------------------------------- Bluetooth-Funktionen ----------------------------------------------------------------------------------------------------- pub Set_Bluetooth_Command_Mode - bus_putchar1(Bluetooth_Command) + bus_putchar1(gc#a_bl_Command_On) pub Clear_Bluetooth_Command_Mode - bus_putchar1(Bluetooth_Normal) + bus_putchar1(gc#a_bl_Command_Off) + +CON ''------------------------------------------------- LAN_FUNKTIONEN + +PUB lanstart 'LAN starten +''funktionsgruppe : lan +''funktion : Netzwerk starten +''eingabe : - +''ausgabe : - +''busprotokoll : [071] + + bus_putchar1(gc#a_lanStart) + waitcnt(cnt + clkfreq) '1sek warten (nach ios.lanstart dauert es, bis der Stack funktioniert) + + +PUB lanstop 'LAN beenden +''funktionsgruppe : lan +''funktion : Netzwerk anhalten +''eingabe : - +''ausgabe : - +''busprotokoll : [072] + + bus_putchar1(gc#a_lanStop) + waitcnt(cnt + clkfreq) '1sek warten, bis in Administra wirklich beendet + +PUB lan_connect(ipaddr, remoteport): handleidx +''funktionsgruppe : lan +''funktion : ausgehende TCP-Verbindung öffnen (mit Server verbinden) +'' : Da hier feste Puffer (bufrxconn,buftxconn) verwendet werden, +'' : darf diese Funktion nur einmal aufgerufen werden +'' : (driver_socket.spin handelt per default bis 4 Sockets) +''eingabe : - +''ausgabe : - +''busprotokoll : [073][sub_putlong.ipaddr][sub_putword.remoteport][get.handleidx] +'' : ipaddr - ipv4 address packed into a long (ie: 1.2.3.4 => $01_02_03_04) +'' : remoteport - port number to connect to +'' : handleidx - lfd. Nr. der Verbindung + + bus_putchar1(gc#a_lanConnect) + bus_putlong1(ipaddr) + bus_putword1(remoteport) + handleidx := bus_getchar1 + +PUB lan_listen(port): handleidx +''funktionsgruppe : lan +''funktion : Port für eingehende TCP-Verbindung öffnen +''eingabe : - +''ausgabe : - +''busprotokoll : [074][sub_putword.port][get.handleidx] +'' : port - zu öffnende Portnummer +'' : handleidx - lfd. Nr. der Verbindung (index des kompletten handle) + + bus_putchar1(gc#a_lanListen) + bus_putword1(port) + handleidx := bus_getchar1 + +PUB lan_waitconntimeout(handleidx, timeout): connected +''funktionsgruppe : lan +''funktion : bestimmte Zeit auf Verbindung warten +''eingabe : - +''ausgabe : - +''busprotokoll : [075][put.handleidx][sub_putword.timeout][get.connected] +'' : handleidx - lfd. Nr. der zu testenden Verbindung +'' : timeout - Timeout in Millisekunden +'' : connected - True, if connected + + bus_putchar1(gc#a_lanWaitConnTimeout) + bus_putchar1(handleidx) + bus_putword1(timeout) + connected := bus_getchar1 + +PUB lan_close(handleidx) +''funktionsgruppe : lan +''funktion : TCP-Verbindung (ein- oder ausgehend) schließen +''eingabe : - +''ausgabe : - +''busprotokoll : [076][put.handleidx] +'' : handleidx - lfd. Nr. der zu schließenden Verbindung + + bus_putchar1(gc#a_lanClose) + bus_putchar1(handleidx) + +PUB lan_rxtime(handleidx, timeout): rxbyte +''funktionsgruppe : lan +''funktion : angegebene Zeit auf ASCII-Zeichen warten +'' : nicht verwenden, wenn anderes als ASCII (0 - 127) empfangen wird +''eingabe : - +''ausgabe : - +''busprotokoll : [077][sub_putlong.handleidx][sub_putword.timeout][get.rxbyte] +'' : handleidx - lfd. Nr. der Verbindung +'' : timeout - Timeout in Millisekunden +'' : rxbyte - empfangenes Zeichen (0 - 127) oder +'' : sock#RETBUFFEREMPTY (-1) wenn Timeout oder keine Verbindung mehr + + bus_putchar1(gc#a_lanRXTime) + bus_putchar1(handleidx) + bus_putword1(timeout) + rxbyte := bus_getchar1 + rxbyte := ~rxbyte + +{PUB lan_rxdata(handleidx, filename, len): error | fnr +''funktionsgruppe : lan +''funktion : bei bestehender Verbindung die angegebene Datenmenge in File der RAM-Disk schreiben +''eingabe : - +''ausgabe : - +''busprotokoll : [078][put.handleidx][sub_putlong.len][get.byte1][get.byte][get.error] +'' : handleidx - lfd. Nr. der Verbindung +'' : byte1 ... byte - zu empfangende Bytes +'' : len - Anzahl zu empfangende Bytes +'' : error - ungleich Null bei Fehler + + rd_del(filename) 'File aus RAM-Disk löschen (falls vorhanden) + rd_newfile(filename,len) + fnr := rd_open(filename) + ifnot fnr == -1 + bus_putchar1(gc#a_lanRXData) + bus_putchar1(handleidx) + bus_putlong1(len) + repeat len + rd_put(fnr,bus_getchar1) + rd_close(fnr) + + error := bus_getchar1 + error := ~error +} +PUB lan_txdata(handleidx, ptr, len): error +''funktionsgruppe : lan +''funktion : bei bestehender Verbindung die angegebene Datenmenge senden +''eingabe : - +''ausgabe : - +''busprotokoll : [079][put.handleidx][sub_putlong.len][put.byte1][put.byte][get.error] +'' : handleidx - lfd. Nr. der Verbindung +'' : byte1 ... byte - zu sendende Bytes +'' : len - Anzahl zu sendender Bytes +'' : error - ungleich Null bei Fehler + + bus_putchar1(gc#a_lanTXData) + bus_putchar1(handleidx) + bus_putlong1(len) + + repeat len + bus_putchar1(byte[ptr++]) + + error := bus_getchar1 + error := ~error + +PUB lan_rxbyte(handleidx): rxbyte +''funktionsgruppe : lan +''funktion : wenn vorhanden, ein empfangenes Byte lesen +'' : nicht verwenden, wenn auch $FF empfangen werden kann +''eingabe : - +''ausgabe : - +''busprotokoll : [080][sub_putlong.handleidx]][get.rxbyte] +'' : handleidx - lfd. Nr. der Verbindung +'' : rxbyte - empfangenes Zeichen oder +'' : sock#RETBUFFEREMPTY (-1) wenn Empfangspuffer leer + + bus_putchar1(gc#a_lanRXByte) + bus_putchar1(handleidx) + rxbyte := bus_getchar1 + rxbyte := ~rxbyte + +PUB lan_isconnected(handleidx): connected +''funktionsgruppe : lan +''funktion : TRUE, wenn Socket verbunden, sonst FALSE +''eingabe : - +''ausgabe : - +''busprotokoll : [081][sub_putlong.handleidx]][get.connected] +'' : handleidx - lfd. Nr. der Verbindung +'' : connected - TRUE, wenn Socket verbunden, sonst FALSE + + bus_putchar1(gc#a_lanIsConnected) + bus_putchar1(handleidx) + connected := bus_getchar1 + connected := ~connected + CON ''------------------------------------------------- DATE TIME FUNKTIONEN pub time(x,y)|h,m,s - bus_putchar1(RTC_GETSECONDS) setpos(y,x) - - s:=bus_getlong1 + s:=getSeconds if s<>tmptime - bus_putchar1(RTC_GETHOURS) - h:=bus_getlong1 - bus_putchar1(RTC_GETMINUTES) - m:=bus_getlong1 - + h:=gethours + m:=getMinutes if h<10 printchar("0") printdec(h) @@ -1390,106 +1320,102 @@ pub time(x,y)|h,m,s tmptime:=s PUB getSeconds 'Returns the current second (0 - 59) from the real time clock. - bus_putchar1(RTC_GETSECONDS) + bus_putchar1(gc#a_rtcGetSeconds) return bus_getlong1 PUB getMinutes 'Returns the current minute (0 - 59) from the real time clock. - bus_putchar1(RTC_GETMINUTES) + bus_putchar1(gc#a_rtcGetMinutes) return bus_getlong1 PUB getHours 'Returns the current hour (0 - 23) from the real time clock. - bus_putchar1(RTC_GETHOURS) + bus_putchar1(gc#a_rtcGetHours) return bus_getlong1 PUB getDay 'Returns the current day (1 - 7) from the real time clock. - bus_putchar1(RTC_GETDAY) + bus_putchar1(gc#a_rtcGetDay) return bus_getlong1 PUB getDate 'Returns the current date (1 - 31) from the real time clock. - bus_putchar1(RTC_GETDATE) + bus_putchar1(gc#a_rtcGetDate) return bus_getlong1 PUB getMonth 'Returns the current month (1 - 12) from the real time clock. - bus_putchar1(RTC_GETMONTH) + bus_putchar1(gc#a_rtcGetMonth) return bus_getlong1 PUB getYear 'Returns the current year (2000 - 2099) from the real time clock. - bus_putchar1(RTC_GETYEAR) + bus_putchar1(gc#a_rtcGetYear) return bus_getlong1 PUB setSeconds(seconds) 'Sets the current real time clock seconds. 'seconds - Number to set the seconds to between 0 - 59. if seconds => 0 and seconds =< 59 - bus_putchar1(RTC_SETSECONDS) + bus_putchar1(gc#a_rtcSetSeconds) bus_putlong1(seconds) PUB setMinutes(minutes) 'Sets the current real time clock minutes. 'minutes - Number to set the minutes to between 0 - 59. if minutes => 0 and minutes =< 59 - bus_putchar1(RTC_SETMINUTES) + bus_putchar1(gc#a_rtcSetMinutes) bus_putlong1(minutes) PUB setHours(hours) 'Sets the current real time clock hours. 'hours - Number to set the hours to between 0 - 23. if hours => 0 and hours =< 23 - bus_putchar1(RTC_SETHOURS) + bus_putchar1(gc#a_rtcSetHours) bus_putlong1(hours) PUB setDay(day) 'Sets the current real time clock day. 'day - Number to set the day to between 1 - 7. if day => 1 and day =< 7 - bus_putchar1(RTC_SETDAY) + bus_putchar1(gc#a_rtcSetDay) bus_putlong1(day) PUB setDate(date) 'Sets the current real time clock date. 'date - Number to set the date to between 1 - 31. if date => 1 and date =< 31 - bus_putchar1(RTC_SETDATE) + bus_putchar1(gc#a_rtcSetDate) bus_putlong1(date) PUB setMonth(month) 'Sets the current real time clock month. 'month - Number to set the month to between 1 - 12. if month => 1 and month =< 12 - bus_putchar1(RTC_SETMONTH) + bus_putchar1(gc#a_rtcSetMonth) bus_putlong1(month) PUB setYear(year) 'Sets the current real time clock year. 'year - Number to set the year to between 2000 - 2099. if year => 2000 and year =< 2099 - bus_putchar1(RTC_SETYEAR) + bus_putchar1(gc#a_rtcSetYear) bus_putlong1(year) -{PUB setNVSRAM(index, value) 'Sets the NVSRAM to the selected value (0 - 255) at the index (0 - 55). +PUB setNVSRAM(index, value) 'Sets the NVSRAM to the selected value (0 - 255) at the index (0 - 55). 'index - The location in NVRAM to set (0 - 55). 'value - The value (0 - 255) to change the location to. if index => 0 AND index =< 55 AND value => 0 AND value =< 255 - bus_putchar1(RTC_SETNVSRAM) + bus_putchar1(gc#a_rtcSetNVSRAM) bus_putlong1(index) bus_putlong1(value) PUB getNVSRAM(index) 'Gets the selected NVSRAM value at the index (0 - 55). 'Returns the selected location's value (0 - 255). 'index - The location in NVRAM to get (0 - 55). - bus_putchar1(RTC_GETNVSRAM) + bus_putchar1(gc#a_rtcGetNVSRAM) bus_putlong1(index) return bus_getlong1 -} -{PUB pauseForSeconds(number) 'Pauses execution for a number of seconds. +{ +PUB pauseForSeconds(number) 'Pauses execution for a number of seconds. 'number - Number of seconds to pause for between 0 and 2,147,483,647. - bus_putchar1(RTC_PAUSEFORSECONDS) + bus_putchar1(gc#a_rtcPauseForSec) return bus_getlong1 PUB pauseForMilliseconds(number) '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. - bus_putchar1(RTC_PAUSEFORMILLISECONDS) + bus_putchar1(gc#a_rtcPauseForMSec) return bus_getlong1 - } - - - con'--------------------------------------------------- AY-DMP-Player-------------------------------------------------------------------------------------------------------------- {PUB ay_sdmpplay(stradr): err 'sid: dmp-datei stereo auf beiden sid's abspielen ''funktionsgruppe : sid @@ -1519,32 +1445,32 @@ PUB sid_sdmpplay(stradr): err 'sid: dmp-datei stereo a ''busprotokoll : [158][sub.putstr][get.err] '' : err - fehlernummer entspr. liste - bus_putchar1(SCOG_SDMPPLAY) + bus_putchar1(gc#a_s_sdmpplay) bus_putstr1(stradr) err := bus_getchar1 PUB sid_dmpstop - bus_putchar1(SCOG_DMPSTOP) + bus_putchar1(gc#a_s_dmpstop) PUB sid_dmppause - bus_putchar1(SCOG_DMPPAUSE) + bus_putchar1(gc#a_s_dmppause) PUB sid_dmpstatus: status - bus_putchar1(SCOG_DMPSTATUS) + bus_putchar1(gc#a_s_dmpstatus) status := bus_getchar1 PUB sid_dmppos: wert - bus_putchar1(SCOG_DMPPOS) + bus_putchar1(gc#a_s_dmppos) wert := bus_getlong1 - + bus_getlong1 PUB sid_dmplen: wert - bus_putchar1(SCOG_DMPLEN) - ' bus_getlong1 + bus_putchar1(gc#a_s_dmppos) + bus_getlong1 wert := bus_getlong1 PUB sid_mute(sidnr) 'sid: chips stummschalten - bus_putchar1(SCOG_MUTE) + bus_putchar1(gc#a_s_mute) bus_putchar1(sidnr) pub sid_resetRegisters @@ -1566,21 +1492,21 @@ PUB sid_dmpreg: stradr | i 'sid: dmp-register empfa CON ''------------------------------------------------- SIDCog1-Funktionen PUB sid1_setRegister(reg,val) - bus_putchar1(SCOG1_setRegister) + bus_putchar1(gc#a_s1_setRegister) bus_putchar1(reg) bus_putchar1(val) PUB sid1_updateRegisters(regadr) - bus_putchar1(SCOG1_setRegister) + bus_putchar1(gc#a_s1_updateRegisters) repeat 25 bus_putchar1(byte[regadr++]) PUB sid1_setVolume(vol) - bus_putchar1(SCOG1_setVolume) + bus_putchar1(gc#a_s1_setVolume) bus_putchar1(vol) PUB sid1_play(channel, freq, waveform, attack, decay, sustain, release) - bus_putchar1(SCOG1_play) + bus_putchar1(gc#a_s1_play) bus_putchar1(channel) bus_putchar1(freq) bus_putchar1(waveform) @@ -1590,31 +1516,32 @@ PUB sid1_play(channel, freq, waveform, attack, decay, sustain, release) bus_putchar1(release) PUB sid1_noteOn(channel, freq) - bus_putchar1(SCOG1_noteOn) + bus_putchar1(gc#a_s1_noteOn) bus_putchar1(channel) - bus_putlong1(freq) + bus_putchar1(freq) + 'bus_putlong1(freq) PUB sid1_noteOff(channel) - bus_putchar1(SCOG1_noteOff) + bus_putchar1(gc#a_s1_noteOff) bus_putchar1(channel) PUB sid1_setFreq(channel,freq) - bus_putchar1(SCOG1_setFreq) + bus_putchar1(gc#a_s1_setFreq) bus_putchar1(channel) bus_putlong1(freq) PUB sid1_setWaveform(channel,waveform) - bus_putchar1(SCOG1_setWaveform) + bus_putchar1(gc#a_s1_setWaveform) bus_putchar1(channel) bus_putchar1(waveform) PUB sid1_setPWM(channel, val) - bus_putchar1(SCOG1_setPWM) + bus_putchar1(gc#a_s1_setPWM) bus_putchar1(channel) bus_putlong1(val) PUB sid1_setADSR(channel, attack, decay, sustain, release ) - bus_putchar1(SCOG1_setADSR) + bus_putchar1(gc#a_s1_setADSR) bus_putchar1(channel) bus_putchar1(attack) bus_putchar1(decay) @@ -1622,58 +1549,59 @@ PUB sid1_setADSR(channel, attack, decay, sustain, release ) bus_putchar1(release) PUB sid1_setResonance(val) - bus_putchar1(SCOG1_setResonance) + bus_putchar1(gc#a_s1_setResonance) bus_putchar1(val) PUB sid1_setCutoff(freq) - bus_putchar1(SCOG1_setCutoff) + bus_putchar1(gc#a_s1_setCutoff) bus_putlong1(freq) PUB sid1_setFilterMask(ch1,ch2,ch3) - bus_putchar1(SCOG1_setFilterMask) + bus_putchar1(gc#a_s1_setFilterMask) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) PUB sid1_setFilterType(lp,bp,hp) - bus_putchar1(SCOG1_setFilterType) + bus_putchar1(gc#a_s1_setFilterType) bus_putchar1(lp) bus_putchar1(bp) bus_putchar1(hp) PUB sid1_enableRingmod(ch1,ch2,ch3) - bus_putchar1(SCOG1_enableRingmod) + bus_putchar1(gc#a_s1_enableRingmod) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) PUB sid1_enableSynchronization(ch1,ch2,ch3) - bus_putchar1(SCOG1_enableSynchronization) + bus_putchar1(gc#a_s1_enableSynchronization) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) + pub sid_beep(n) - bus_putchar1(SCOG_BEEP) + bus_putchar1(198) bus_putchar1(n) CON ''------------------------------------------------- SIDCog2-Funktionen -PUB sid2_setRegister(reg,val) - bus_putchar1(SCOG2_setRegister) +{PUB sid2_setRegister(reg,val) + bus_putchar1(gc#a_s2_setRegister) bus_putchar1(reg) bus_putchar1(val) PUB sid2_updateRegisters(regadr) - bus_putchar1(SCOG2_setRegister) + bus_putchar1(gc#a_s2_updateRegisters) repeat 25 bus_putchar1(byte[regadr++]) PUB sid2_setVolume(vol) - bus_putchar1(SCOG2_setVolume) + bus_putchar1(gc#a_s2_setVolume) bus_putchar1(vol) PUB sid2_play(channel, freq, waveform, attack, decay, sustain, release) - bus_putchar1(SCOG2_play) + bus_putchar1(gc#a_s2_play) bus_putchar1(channel) bus_putchar1(freq) bus_putchar1(waveform) @@ -1683,31 +1611,31 @@ PUB sid2_play(channel, freq, waveform, attack, decay, sustain, release) bus_putchar1(release) PUB sid2_noteOn(channel, freq) - bus_putchar1(SCOG2_noteOn) + bus_putchar1(gc#a_s2_noteOn) bus_putchar1(channel) bus_putlong1(freq) PUB sid2_noteOff(channel) - bus_putchar1(SCOG2_noteOff) + bus_putchar1(gc#a_s2_noteOff) bus_putchar1(channel) PUB sid2_setFreq(channel,freq) - bus_putchar1(SCOG2_setFreq) + bus_putchar1(gc#a_s2_setFreq) bus_putchar1(channel) bus_putlong1(freq) PUB sid2_setWaveform(channel,waveform) - bus_putchar1(SCOG2_setWaveform) + bus_putchar1(gc#a_s2_setWaveform) bus_putchar1(channel) bus_putchar1(waveform) PUB sid2_setPWM(channel, val) - bus_putchar1(SCOG2_setPWM) + bus_putchar1(gc#a_s2_setPWM) bus_putchar1(channel) bus_putlong1(val) PUB sid2_setADSR(channel, attack, decay, sustain, release ) - bus_putchar1(SCOG2_setADSR) + bus_putchar1(gc#a_s2_setADSR) bus_putchar1(channel) bus_putchar1(attack) bus_putchar1(decay) @@ -1715,37 +1643,37 @@ PUB sid2_setADSR(channel, attack, decay, sustain, release ) bus_putchar1(release) PUB sid2_setResonance(val) - bus_putchar1(SCOG2_setResonance) + bus_putchar1(gc#a_s2_setResonance) bus_putchar1(val) PUB sid2_setCutoff(freq) - bus_putchar1(SCOG2_setCutoff) + bus_putchar1(gc#a_s2_setCutoff) bus_putlong1(freq) PUB sid2_setFilterMask(ch1,ch2,ch3) - bus_putchar1(SCOG2_setFilterMask) + bus_putchar1(gc#a_s2_setFilterMask) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) PUB sid2_setFilterType(lp,bp,hp) - bus_putchar1(SCOG2_setFilterType) + bus_putchar1(gc#a_s2_setFilterType) bus_putchar1(lp) bus_putchar1(bp) bus_putchar1(hp) PUB sid2_enableRingmod(ch1,ch2,ch3) - bus_putchar1(SCOG2_enableRingmod) + bus_putchar1(gc#a_s2_enableRingmod) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) PUB sid2_enableSynchronization(ch1,ch2,ch3) - bus_putchar1(SCOG2_enableSynchronization) + bus_putchar1(gc#a_s2_enableSynchronization) bus_putchar1(ch1) bus_putchar1(ch2) bus_putchar1(ch3) - +} OBJ '' B E L L A T R I X @@ -1864,13 +1792,10 @@ PUB print(stringptr)|c 'screen: bildschirmaus repeat strsize(stringptr) c:=byte[stringptr++] bus_putchar2(c) + 'bus_putchar3(c) if serial==1 ser.tx(c) -{pub ser_print(strptr)|c - repeat strsize(strptr) - c:=byte[strptr++] - ser.tx(c) -} + pub get_window:a bus_putchar2(BEL_CMD) bus_putchar2(BEL_Get_Window) @@ -2057,6 +1982,7 @@ pub setactionkey(k1,k2,k3,k4,k5) pub reset_sprite bus_putchar2(BEL_CMD) bus_putchar2(BEL_SPRITE_RESET) + pub set_sprite(num,tnr,tnr2,f1,f2,f3,dir,strt,end,x,y) bus_putchar2(BEL_CMD) bus_putchar2(BEL_SPRITE_PARAM) @@ -2070,7 +1996,9 @@ pub set_sprite(num,tnr,tnr2,f1,f2,f3,dir,strt,end,x,y) bus_putchar2(strt) 'startposition bus_putchar2(end) 'endposition bus_putchar2(x) 'x und y parameter - bus_putchar2(y) + bus_putchar2(y) + + pub Sprite_Move(on) bus_putchar2(BEL_CMD) bus_putchar2(BEL_SPRITE_MOVE) @@ -2101,46 +2029,6 @@ pub Change_Backuptile(tnr,f1,f2,f3) bus_putchar2(f2) bus_putchar2(f3) -{pub set_ersatz_item(tnr,f1,f2,f3) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_ERSATZ_ITEM) - bus_putchar2(tnr) - bus_putchar2(f1) - bus_putchar2(f2) - bus_putchar2(f3) -} -{pub fire_parameter(tnr,f1,f2,f3,dir,range) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_FIRE_PARAM) - bus_putchar2(tnr) - bus_putchar2(f1) - bus_putchar2(f2) - bus_putchar2(f3) - bus_putchar2(dir) - bus_putchar2(range) - } -{pub fire(x,y) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_FIRE) - bus_putchar2(x) - bus_putchar2(y) -} -{ -pub action(on) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_ACTION) - bus_putchar2(on) - -pub getactor_x :wert - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_ACTX) - wert:=bus_getchar2 - -pub getactor_y :wert - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_ACTY) - wert:=bus_getchar2 -} pub displayString(char,foregroundColor, backgroundColor, y, x) bus_putchar2(BEL_CMD) bus_putchar2(BEL_DPL_STRING) @@ -2149,11 +2037,6 @@ pub displayString(char,foregroundColor, backgroundColor, y, x) bus_putchar2(y) bus_putchar2(x) bus_putstr2(char) -' bus_putchar2(strsize(char)) - -' repeat strsize(char) -' bus_putchar2(byte[char++])'(byte[char++]) - pub scrollString(str,characterRate, foregroundColor, backgroundColor, y, x, xx) bus_putchar2(BEL_CMD) @@ -2164,12 +2047,7 @@ pub scrollString(str,characterRate, foregroundColor, backgroundColor, y, x, xx) bus_putchar2(y) bus_putchar2(x) bus_putchar2(xx) - 'bus_putchar2(dir) bus_putstr2(str) - 'bus_putchar2(strsize(str)) - -' repeat strsize(str) -' bus_putchar2(byte[str++]) @@ -2255,22 +2133,10 @@ pub Displaypalette(x,y) bus_putchar2(BEL_DPL_PALETTE) bus_putchar2(x) bus_putchar2(y) -{pub Backup(x,y,xx,yy) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_BACKUP) - bus_putchar2(x) - bus_putchar2(y) - bus_putchar2(xx) - bus_putchar2(yy) -pub restore(x,y,xx,yy) - bus_putchar2(BEL_CMD) - bus_putchar2(BEL_RESTORE) - bus_putchar2(x) - bus_putchar2(y) - bus_putchar2(xx) - bus_putchar2(yy) -} +pub cls + printchar(12) + pub Backup_Area(x,y,xx,yy,adr)|a,b,d bus_putchar2(BEL_CMD) bus_putchar2(BEL_BACK) @@ -2338,8 +2204,6 @@ PUB printhex(value, digits) 'screen: hexadezimalen z value <<= (8 - digits) << 2 repeat digits printchar(lookupz((value <-= 4) & $F : "0".."9", "A".."F")) - if serial==1 - ser.tx(lookupz((value <-= 4) & $F : "0".."9", "A".."F")) PUB printbin(value, digits) |c 'screen: binären zahlenwert auf bildschirm ausgeben @@ -2347,23 +2211,21 @@ PUB printbin(value, digits) |c 'screen: binären zahl repeat digits c:=(value <-= 1) & 1 + "0" printchar(c) - if serial==1 - ser.tx(c) -PUB printchar(c):c2 'screen: einzelnes zeichen auf bildschirm ausgeben +PUB printchar(c)':c2 'screen: einzelnes zeichen auf bildschirm ausgeben {{printchar(c) - screen: bildschirmausgabe eines zeichens}} bus_putchar2(c) - + 'bus_putchar3(c) if serial==1 ser.tx(c) - c2 := c +' c2 := c -PUB printqchar(c):c2 'screen: zeichen ohne steuerzeichen ausgeben +PUB printqchar(c)':c2 'screen: zeichen ohne steuerzeichen ausgeben {{printqchar(c) - screen: bildschirmausgabe eines zeichens}} bus_putchar2(BEL_CMD) bus_putchar2(BEL_SCR_CHAR) bus_putchar2(c) - c2 := c +' c2 := c if serial==1 ser.tx(c) PUB printnl 'screen: $0D - CR ausgeben @@ -2376,14 +2238,10 @@ PUB printnl 'screen: $0D - CR ausgeb PUB printcls 'screen: screen löschen {{printcls - screen: screen löschen}} printchar(12) - if serial==1 - ser.tx(16) PUB printbs 'screen: backspace {{curon - screen: backspace senden}} printchar(BEL_BS) - if serial==1 - ser.tx(BEL_BS) pub printleft printchar(5) @@ -2396,7 +2254,6 @@ pub mousex pub mousey bus_putchar2(BEL_CMD) 'kommandosequenz einleiten bus_putchar2(BEL_MOUSEY) 'MOUSE-Y-Position abfragen - 'y:=bus_getchar2 return bus_getchar2 'y-signal invertieren sonst geht der Mauszeiger hoch, wenn man runterscrollt @@ -2410,11 +2267,6 @@ pub mouse_button(b) bus_putchar2(BEL_MOUSE_BUTTON) 'MOUSE-Button abfragen bus_putchar2(b) return bus_getchar2 -'pub getblock(nummer):wert -' bus_putchar2(BEL_CMD) 'kommandosequenz einleiten -' bus_putchar2(BEL_READ_BLOCK) 'Tile auf Pos-nummer abfragen -' bus_putword2(nummer) -' wert:=bus_getchar2 OBJ ''################################################## V E N A T R I X ############################################################################################################# CON ''------------------------------------------------- CHIP MANAGEMENT @@ -2608,6 +2460,7 @@ PUB bus_getstr2: stradr | len,i 'bus: string von adminis PUB bus_putchar1(c) 'bus: byte an administra senden {{bus_putchar1(c) - bus: byte senden an prop1 (administra)}} + ' ram_rw.putchar1(c) outa := %00001001_01011000_00000000_00000000 'prop1=0, wr=0 dira := db_out 'datenbus auf ausgabe stellen @@ -2619,6 +2472,7 @@ PUB bus_putchar1(c) 'bus: byte an administra PUB bus_getchar1: wert 'bus: byte vom administra empfangen {{bus_getchar1:wert - bus: byte empfangen von prop1 (administra)}} +' wert:=ram_rw.getchar1 outa := %00000111_01011000_00000000_00000000 'prop1=0, wr=1, busclk=1 waitpeq(%00000000_00000000_00000000_00000000,%00001000_00000000_00000000_00000000,0) 'hs=0? wert := ina[7..0] 'daten einlesen @@ -2637,6 +2491,7 @@ PUB bus_putchar2(c) 'bus: byte an prop1 (bel 'ram_rw.putchar2(c) PUB bus_getchar2: wert 'bus: byte vom prop1 (bellatrix) empfangen {{bus_getchar2:wert - bus: byte empfangen von prop2 (bellatrix)}} +' wert:=ram_rw.getchar2 outa := %00000111_00111000_00000000_00000000 'prop2=0, wr=1, busclk=1 waitpeq(%00000000_00000000_00000000_00000000,%00001000_00000000_00000000_00000000,0) 'hs=0? wert := ina[7..0] 'daten einlesen @@ -2857,6 +2712,10 @@ pub ram_fill(adresse,adresse2,wert) 'pub ram_readline(adresse):line ' line:=ram_rw.read(adresse) +pub ram_copy(von,ziel,anzahl) + ram_rw.ram_copy(von,ziel,anzahl) +pub ram_keep(adr):w + w:=ram_rw.ram_keep(adr) PUB ram_wrbyte(wert,adresse) 'eram: schreibt ein byte in eram {{ram_wrbyte(wert,adresse) - eram: ein byte in externen ram schreiben}} @@ -2869,7 +2728,7 @@ PUB ram_wrbyte(wert,adresse) 'eram: schreibt ein byte in ' adresse max = ramend ' ram_rw.wr_value(adresse,wert,ram_rw#JOB_POKE) -{ if sys 'usermodus? +{ if sys 'usermodus? adresse += rbas 'adresse virtualisieren if adresse > rend 'adressbereich überschritten? return diff --git a/source/sepia-test.spin b/source/sepia-test.spin index d9aed21..8de74c4 100644 --- a/source/sepia-test.spin +++ b/source/sepia-test.spin @@ -99,6 +99,7 @@ ADM_SPEC = %00000000_00000000_00000000_01010011 SETTING_RAM = $7FF00 'Hier stehen die System-Settings BRAM = $50000 'Overlay-Puffer Hour_Glass = $66800+(167*16*4) 'Sanduhr +MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte '******************Farben ******************************************************** #$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey #$C0, Light_Red, #$80, Red, #$40, Dark_Red @@ -197,6 +198,8 @@ PUB main PORT_ADR:=$20 sepia_iniload 'sepia-ini datei lesen mit gespeicherten Portadressen ios.set_plxAdr(ADDA_ADR,PORT_ADR) 'Portadressen setzen + ios.mousepointer(MOUSE_RAM) + testfenster port_setting util:=0 @@ -216,14 +219,14 @@ PRI os_cmdinput | x,y ,i,dk,a,b,c,port,key,padr,durchlauf,kl ifnot key=="d" or key=="a" popup_info_weg util:=0 - case key - F1_Key:Display_Help - F2_Key:Adress_Scanner - F12_Key:ausstieg - ESC_KEY:popup_info_weg - RETURN_KEY:popup_info_weg - F3_Key:util:=0 - Display_Info + case key + F1_Key:Display_Help + F2_Key:Adress_Scanner + F12_Key:ausstieg + ESC_KEY:popup_info_weg + RETURN_KEY:popup_info_weg + F3_Key:util:=0 + Display_Info if infomarker==0 Lese_register 'alle portregister lesen, wenn nicht das Scannerfenster angezeigt wird @@ -393,12 +396,9 @@ pri SCAN|ack,a,z,vx printhex(a,2,10,z,colors[winhcol],colors[act_color]) if ack - ios.displaytile(Cog_pic,colors[winhcol],green,0,z,vx++) + ios.displaytile(Cog_pic,colors[winhcol],green,0,z,vx++) 'unbelegte Adressen else - 'if a==$5 or a==$50 - ' ios.displaytile(Cog_pic,colors[winhcol],blue,0,z,vx++) 'Venatrix-Karte wird blau dargestellt - 'else - ios.displaytile(Cog_pic,colors[winhcol],red,0,z,vx++) + ios.displaytile(Cog_pic,colors[winhcol],red,0,z,vx++) 'belegte Adressen anzeigen if vx>27 vx:=12