Plexus 2.06

This commit is contained in:
Joerg Deckert 2014-06-14 14:57:41 +02:00
parent 200fdee5d6
commit a2d618a594
21 changed files with 904 additions and 752 deletions

1
.gitattributes vendored
View File

@ -2,4 +2,5 @@
* text=auto
*.NFO text eol=crlf
*.bat text eol=crlf

BIN
data/COLORS/BLUE2.CLR Normal file

Binary file not shown.

BIN
data/COLORS/LBLUE2.CLR Normal file

Binary file not shown.

BIN
data/COLORS/WARM.CLR Normal file

Binary file not shown.

View File

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

BIN
gfx/Belstart.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
gfx/Regfnt.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -27,7 +27,7 @@ REM mkdir %sdsys%
REM ----------------------------------------------------------------
REM Code für Administra, Bellatrix und Regime erzeugen
%BSTC% -L %libpath% %D% -D __ADM_FAT -D __ADM_FAT_EXT -D __ADM_RTC -D __ADM_SID -D __ADM_PLX -D __ADM_DCF -D __ADM_BLT -b -O a ..\TriOS\flash\administra\admflash.spin
%BSTC% -L %libpath% %D% -D __ADM_FAT -D __ADM_FAT_EXT -D __ADM_RTC -D __ADM_SID -D __ADM_LAN -D __ADM_PLX -D __ADM_DCF -D __ADM_BLT -b -O a ..\TriOS\flash\administra\admflash.spin
move admflash.binary %sdplex%\plexus.adm
%BSTC% -L %libpath% %D% -b -O a source\Plexus-Start-Trios.spin
@ -45,8 +45,8 @@ move Plexus-Shell.binary %sdplex%\plexus.dll
%BSTC% -L %libpath% %D% -b -O a source\Bluetooth.spin
move Bluetooth.binary %sdplex%\Bltooth.dll
%BSTC% -L %libpath% %D% -b -O a source\Venatrix.spin
move Venatrix.binary %sdplex%\Venatrix.dll
%BSTC% -L %libpath% %D% -b -O a source\Venatrix-Test.spin
move Venatrix-Test.binary %sdplex%\Venatrix.dll
%BSTC% -L %libpath% %D% -b -O a source\YMODEM-Dll.spin
move YMODEM-Dll.binary %sdplex%\YMODEM.dll

View File

@ -25,7 +25,7 @@ mkdir -p ${sdplex}
# ----------------------------------------------------------------
# Code für Administra, Bellatrix und Regime erzeugen
${BSTC} -L ${libpath} ${D} -D __ADM_FAT -D __ADM_FAT_EXT -D __ADM_RTC -D __ADM_SID -D __ADM_PLX -D __ADM_DCF -D __ADM_BLT -b -O a ../TriOS/flash/administra/admflash.spin
${BSTC} -L ${libpath} ${D} -D __ADM_FAT -D __ADM_FAT_EXT -D __ADM_RTC -D __ADM_SID -D __ADM_LAN -D __ADM_PLX -D __ADM_DCF -D __ADM_BLT -b -O a ../TriOS/flash/administra/admflash.spin
mv admflash.binary ${sdplex}/plexus.adm
${BSTC} -L ${libpath} ${D} -b -O a source/Plexus-Start-Trios.spin
@ -43,8 +43,8 @@ mv Plexus-Shell.binary ${sdplex}/plexus.dll
${BSTC} -L ${libpath} ${D} -b -O a source/Bluetooth.spin
mv Bluetooth.binary ${sdplex}/Bltooth.dll
${BSTC} -L ${libpath} ${D} -b -O a source/Venatrix.spin
mv Venatrix.binary ${sdplex}/Venatrix.dll
${BSTC} -L ${libpath} ${D} -b -O a source/Venatrix-Test.spin
mv Venatrix-Test.binary ${sdplex}/Venatrix.dll
${BSTC} -L ${libpath} ${D} -b -O a source/YMODEM-Dll.spin
mv YMODEM-Dll.binary ${sdplex}/YMODEM.dll

View File

@ -67,7 +67,8 @@ panelcol =14 'Farbe des Utility-Panels
ADM_SPEC = %00000000_00000000_00000000_01010011
TEXT_RAM = $80000
SETTING_RAM = $7FF00 'Hier stehen die System-Settings
Hour_Glass = $66800+(167*16*4)
MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte
Hour_Glass = $66800+(167*16*4) ' Sanduhr
BRAM = $50000 'Overlay-Puffer
'******************Farben ********************************************************
@ -183,8 +184,7 @@ PUB main|a
'--------------------------------------------------------------------------------------
cmd_unmount
iniload 'Ini-Datei mit Farbwerten laden
ios.mousepointer(MOUSE_RAM) 'Sanduhr durch Mauszeiger ersetzen
testfenster
util:=0
ios.ram_fill(Text_Ram,$1000,0)

View File

@ -57,6 +57,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)
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
@ -140,6 +142,7 @@ PUB main
'--------------------------------------------------------------------------------------
cmd_unmount
iniload 'Ini-Datei mit Farbwerten laden
ios.mousepointer(MOUSE_RAM)
testfenster
util:=0
displaytime 'Datum/Zeit
@ -490,12 +493,15 @@ con '************************************************** Button-Funktionen ******
PRI buttonpress(n)
case n
1:printfont(string("Start"),250,0,0,0,29)
1:printfont(string("Start "),250,0,0,0,29)
ios.displaytile(164,0,colors[shellhcol],250,29,7)
4:printfont(@butOK,250,0,0,buttonx[n],buttony[n])
Mouse_Release
case n
1:printfont(string("Start"),colors[hcolstatus],0,colors[statustextcol],0,29)
1:printfont(string("Start "),colors[hcolstatus],0,colors[statustextcol],0,29)
ios.displaytile(164,0,colors[shellhcol],colors[hcolstatus],29,7)
4:printfont(@butOK,colors[Buttonhcol],0,colors[buttontextcol],buttonx[n],buttony[n])

View File

@ -0,0 +1,245 @@
{{┌──────────────────────────────────────────┐
│ I2C slave object │
│ Author: Chris Gadd │
│ Copyright (c) 2013 Chris Gadd │
│ See end of file for terms of use. │
└──────────────────────────────────────────┘
This object creates an I2C slave device with 32 byte-sized registers on the Propeller, which an I2C master device can read from and write to using standard protocol:
7-bit device ID + read/write bit, 8-bit register address, 8 bits of data
Supports single, repeated, and page reads and writes
Does NOT check for overruns - Writing 5 bytes starting at register 31 may produce unexpected results
To use:
slave.start(28,29,$42) Start the slave object using p28 for clock, p29 for data, with device ID $42
slave.check Returns the index (31-0) of the highest byte in the register that was written to by a master
Subsequent calls to slave.check return the index of the next highest byte with new data
slave.check_reg(5) Returns the contents of register 5 only if the new-data flag for that register is set, returns -1 otherwise
slave.get(10) Returns the value of register 10
slave.put(11,#2) Stores the value 2 in register 11
slave.flush Clears all 32 registers to 0
slave.address Returns the base address of the slave registers - useful for directly operating on the registers
by higher-level objects
Tested up to 769Kbps (max transmit speed of the master object)
}}
VAR
long flags ' Used to determine if a register has new data from the master
byte _slave_address
byte SCL_pin
byte SDA_pin
byte register[32]
byte cog
PUB start(clk_pin, data_pin, slave_address) : okay
stop
_slave_address := slave_address
SCL_pin := clk_pin
SDA_pin := data_pin
okay := cog := cognew(@entry, @flags) + 1
PUB stop
if cog
cogstop(cog~ - 1)
PUB address
return @register
PUB check : index
{{
Returns the number of the highest byte that was written to:
If an I2C master wrote to addresses 3 and 7 of the slave's buffer, #7 is returned
The flag for the highest byte is then cleared, so a subsequent check would return #3
Returns -1 if all updated byte addresses have been returned (no new data)
}}
index := (>| 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. │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
}}

View File

@ -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
@ -2815,23 +2861,38 @@ PRI Text_Input(ser,min_x,max_x,min_y,max_y,mode,adr,ch)|k,ii,x,y,serchar,blck,in
if ser
serchar:=ios.serread'com.rxcheck 'Zeichen von der com. Schnittstelle lesen
if k==27 'Abbruch mit ESC
ios.serclose'com.stop
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
Fensterweg
return
else
Close_Window(2) 'Eingabefenster
quit
if(x=>buttonx[4]) and (x=<buttonx[4]+5) and (y==buttony[4]) 'ok im Infofenster
buttonpress(4)
Close_Window(2)
buttonweg 'Button muss extra gelöscht werden, sonst Fehldarstellungen
ausg:=13
quit
if mode 'Terminal-Modus
if k==13 or serchar==13 'Return? dann neue Zeile
zeile++
'WIN_TILE(46,zeile,2)'print_win(@promt,2,zeile)
spalte:=min_x
WIN_TILE(6,zeile,spalte)
if ser
if k==13 'Return von Tastatur? -> 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=<buttonx[4]+5) and (y==buttony[4]) 'ok im Infofenster
buttonpress(4)
Close_Window(2)
buttonweg 'Button muss extra gelöscht werden, sonst Fehldarstellungen
quit
if inp 'neue Eingabe-Daten
if inp and ausg==13 'neue Eingabe-Daten
ifnot mode 'Texteingabefenster
if tmp>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)

View File

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

View File

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

View File

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

View File

@ -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
@ -289,7 +289,7 @@ PUB main | zeichen,n,i,x,y ,speed 'chip: kommandoint
60: get_window 'Tastendruck im Fenster abfragen
61: Change_Backuptile 'Backuptile unter dem Player ändern (Itemsammeln)
62: PrintFont 'Text mit Tilefont darstellen
63: vga.put(bus_getchar,bus_getchar,bus_getchar)
' ---------------------------------------------- CHIP-MANAGMENT
96: mgr_getcogs 'freie cogs abfragen
87: mgr_load 'neuen bellatrix-code laden
@ -332,7 +332,7 @@ PUB init_subsysteme|i',x,y,tn,tmp 'chip: initi
action_key[3]:=5
action_key[4]:=32
sp_alter:=0
collision:=0'viereck:=1
collision:=0
vga.printwindow(0)
vga.printBoxSize(0,0, 0, 29, 39)
@ -1061,9 +1061,6 @@ pub Actor_Parameter|i
repeat 4
actor[i++]:=bus_getchar 'tilenr1
' actor[1]:=bus_getchar 'farbe1
' actor[2]:=bus_getchar 'farbe2
' actor[3]:=bus_getchar 'farbe3
action_x:=bus_getchar
action_y:=bus_getchar
@ -1179,7 +1176,7 @@ pub Set_sprite_XY|num,vx,vy,p,b
if vy<0
p:=((sprite_y[num]-1)*40)+sprite_x[num]
b:=position(p)
b:=position(p) 'Überprüfung auf Blockade-Tile
if b==0
sprite_y[num]--
if sprite_y[num]<1
@ -1236,11 +1233,7 @@ pub Reset_Sprite|i
pub Set_Action_Key|i
repeat 5
action_key[i++]:=bus_getchar
{ action_key[1]:=bus_getchar
action_key[2]:=bus_getchar
action_key[3]:=bus_getchar
action_key[4]:=bus_getchar
}
pub Displaypalette|farbe,hy,hx,a
hx:=bus_getchar
hy:=bus_getchar

View File

@ -26,8 +26,8 @@ Logbuch :
19-09-2010-dr235 - integration ramdisk
- kommandos: xdir, xdel, xrename, xload, xsave, xtype
20-09-2010-dr235 - blocktransfer für xload/xsave (wesentlich bessere geschwindigkeit!!!)
Kommandoliste:
- siehe regime.txt
25-02-2014 - Integration von Regime in Plexus begonnen -> 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 "<WEITER? */q:>",0
cstr byte "••••••••",0

View File

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

File diff suppressed because it is too large Load Diff

View File

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