349 lines
24 KiB
Plaintext
349 lines
24 KiB
Plaintext
con{{
|
|
|
|
---------------------------------------------------------------------------------------------------------
|
|
|
|
Hive-Computer-Projekt
|
|
|
|
Name : TRIOS-Basic
|
|
Chip : Regnatix-Code
|
|
Version : 2.108
|
|
Dateien :
|
|
|
|
Beschreibung : Exportmodul für Basic-Dateien ->exportiert ein, im Speicher befindliches Basic-Programm als Textdatei auf die SD-Karte
|
|
|
|
Notes:
|
|
01-05-2014 -erste funktionierende Version
|
|
-um die Sache optisch besser zu gestalten, wird noch ein Hinweisfenster mit dem System-Tile-Font erstellt
|
|
-6901 Longs frei
|
|
}}
|
|
obj
|
|
ios :"reg-ios-bas"
|
|
gc :"glob-con"
|
|
|
|
con
|
|
_CLKMODE = XTAL1 + PLL16X
|
|
_XINFREQ = 5_000_000
|
|
version = 2.108
|
|
|
|
fEof = $FF ' dateiende-kennung
|
|
linelen = 85 ' Maximum input line length
|
|
quote = 34 ' Double quote
|
|
caseBit = !32 ' Uppercase/Lowercase bit
|
|
point = 46 ' point
|
|
STR_LEN = 34 ' Stringlänge von Stringvariablen in Arrays
|
|
FIELD_LEN = 512 ' Array-Feldgröße (max Feldgröße 8x8x8 -> Dim a(7,7,7)
|
|
DIR_ENTRY = 546 ' max.Anzahl mit DIR-Befehl gefundener Einträge
|
|
STR_MAX = 41 ' maximale Stringlänge für Printausgaben und font
|
|
DPL_CNT = 1200 ' Map-und Bildschirm-Shadow-Speicher-Zähler (40Spalten*30Zeilen=1200-Tiles)
|
|
'*****************Speicherbereiche**********************************************
|
|
maxstack = 20 ' Maximum stack tiefe fuer gosub
|
|
userPtr = $1FFFF ' Ende Programmspeicher 128kb
|
|
TMP_RAM = $20000 '....$3FFFF ' Bearbeitungsspeicher 128kb (fuer die Zeileneditierung bzw.Einfuegung von Zeilen)
|
|
TILE_RAM = $40000 '....$667FF ' hier beginnt der Tile-Speicher fuer 14 Tiledateien
|
|
SYS_FONT = $66800 '....$693FF ' ab hier liegt der System-Font 11kb
|
|
MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte
|
|
DIR_RAM = $69440 '....$6AFFF ' Puffer fuer Dateinamen 7103Bytes fuer 546 Dateinamen
|
|
VAR_RAM = $6B000 '....$77FFF ' Variablen-Speicher fuer Array-Variablen a[0...511]-z[0...511] (13312 moegliche Variablen)
|
|
MAP_RAM = $78000 '....$79C27 ' Shadow-Display (Pseudo-Kopie des Bildschirmspeichers)
|
|
'FREI_RAM $79C28 .... $79FFF ' freier RAM-Bereich 984 Bytes auch für Shadow-Display
|
|
|
|
DATA_RAM = $7A000 '.... $7DFFF ' 16kB DATA-Speicher
|
|
|
|
BUTT_RAM = $7E000 '.... $7E4FF ' ca.1kB Button Puffer
|
|
WTILE_RAM= $7E500 '.... $7E5FF ' Win-Tile Puffer hier können die Tiles, aus denen die Fenster gebaut werden geändert werden
|
|
FUNC_RAM = $7E600 '.... $7EFFF ' Funktions-Speicher, hier werden die selbstdefinierten Funktionen gespeichert
|
|
|
|
ERROR_RAM = $7F000 '....$7FAFF ' ERROR-Texte
|
|
DIM_VAR = $7FB00 '....$7FBFF ' Variablen-Array-Dimensionstabelle
|
|
DIM_STR = $7FC00 '....$7FCFF ' String-Array-Dimensionstabelle
|
|
BACK_RAM = $7FD00 '....$7FDFF ' BACKUP RAM-Bereich 256 Bytes für Ladebalken
|
|
'Frei-Ram = $7FE00 ....$7FEFF ' noch freier Bereich 256 Bytes
|
|
PMARK_RAM = $7FFF0 ' Flag für Reclaim Wert= 161
|
|
BMARK_RAM = $7FFF1 ' Flag für Basic-Warm-Start Wert= 121
|
|
SMARK_RAM = $7FFF2 ' Flag für übergebenen Startparameter Wert = 222
|
|
|
|
STR_ARRAY = $80000 '....$EE7FF ' Stringarray-Speicher
|
|
USER_RAM = $EE800 '....$FFEFF ' Freier Ram-Bereich, für Anwender, Backup-Funktion usw.
|
|
|
|
ADM_SPEC = gc#A_FAT|gc#A_LDR|gc#A_SID|gc#A_LAN|gc#A_RTC|gc#A_PLX'%00000000_00000000_00000000_11110011
|
|
'***************** Button-Anzahl ************************************************
|
|
BUTTON_CNT = 32 'Anzahl der möglichen Button
|
|
'******************Farben ********************************************************
|
|
#$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey
|
|
#$C0, Light_Red, #$80, Red, #$40, Dark_Red
|
|
#$30, Light_Green, #$20, Green, #$10, Dark_Green
|
|
#$1F, Light_Blue, #$09, Blue, #$04, Dark_Blue
|
|
#$F0, Light_Orange, #$E6, Orange, #$92, Dark_Orange
|
|
#$CC, Light_Purple, #$88, Purple, #$44, Dark_Purple
|
|
#$3C, Light_Teal, #$28, Teal, #$14, Dark_Teal
|
|
#$FF, White, #$00, Black
|
|
|
|
'*****************Tastencodes*****************************************************
|
|
ENTF_KEY = 186
|
|
bspKey = $C8 ' PS/2 keyboard backspace key
|
|
breakKey = $CB ' PS/2 keyboard escape key
|
|
fReturn = 13
|
|
fLinefeed = 10
|
|
KEY_LEFT = 2
|
|
KEY_RIGHT = 3
|
|
KEY_UP = 4
|
|
KEY_DOWN = 5
|
|
|
|
MIN_EXP = -999999
|
|
MAX_EXP = 999999
|
|
|
|
var
|
|
long speicheranfang,speicherende 'Startadresse-und Endadresse des Basic-Programms
|
|
byte tline[20] 'Eingabezeilen-Puffer
|
|
|
|
dat
|
|
tok0 byte "IF",0 '128 getestet
|
|
tok1 byte "THEN",0 '129 getestet
|
|
tok110 byte "ELSE",0 '238 getestet
|
|
tok2 byte "INPUT",0 ' INPUT {"<prompt>";} <var> {,<var>} '130 getestet
|
|
tok3 byte "PRINT",0 ' PRINT '131 getestet
|
|
tok88 byte "ON",0 ' ON GOSUB GOTO 216 getestet
|
|
tok4 byte "GOTO",0 '132 getestet
|
|
tok5 byte "GOSUB", 0 '133 getestet
|
|
tok6 byte "RETURN", 0 '134 getestet
|
|
tok7 byte "REM", 0 '135 getestet
|
|
tok8 byte "NEW", 0 '136 getestet
|
|
tok9 byte "LIST", 0 'list <expr>,<expr> listet von bis zeilennummer 137 getestet NICHT AENDERN Funktionstaste!!
|
|
tok10 byte "RUN", 0 '138 getestet NICHT AENDERN Funktionstaste!!
|
|
tok26 byte "FOR", 0 ' FOR <var> = <expr> TO <expr> 154 getestet
|
|
tok27 byte "TO", 0 '155 getestet
|
|
tok28 byte "STEP", 0 ' optional STEP <expr> 156 getestet
|
|
tok29 byte "NEXT", 0 ' NEXT <var> 157 getestet
|
|
tok52 byte "END", 0 ' 180 getestet
|
|
tok53 byte "PAUSE", 0 ' PAUSE <time ms> {,<time us>} 181 getestet
|
|
tok58 byte "DUMP", 0 ' DUMP <startadress>,<anzahl zeilen>,<0..1> (0 Hram,1 Eram) 186 getestet
|
|
tok86 byte "BYE",0 ' Basic beenden 214 getestet NICHT AENDERN Funktionstaste!!
|
|
tok84 byte "INKEY",0 'Auf Tastendruck warten Rueckgabe ascii wert 212 getestet
|
|
tok85 byte "CLEAR",0 'alle Variablen loeschen 213 getestet
|
|
tok87 byte "PEEK",0 'Byte aus Speicher lesen momentan nur eram 215 getestet
|
|
tok80 byte "POKE",0 'Byte in Speicher schreiben momentan nur eram 208 getestet
|
|
tok89 byte "BEEP",0 'beep oder beep <expr> piepser in versch.Tonhoehen 217 getestet
|
|
tok92 byte "EDIT",0 'Zeile editieren 220 getestet
|
|
tok61 byte "RENUM",0 'Renumberfunktion 189 getestet
|
|
|
|
'************************** Dateioperationen **************************************************************
|
|
tok12 byte "OPEN", 0 ' OPEN " <file> ",<mode> 140 getestet
|
|
tok13 byte "FREAD", 0 ' FREAD <var> {,<var>} 141 getestet
|
|
tok14 byte "WRITE", 0 ' WRITE <"text"> : 142 getestet
|
|
tok15 byte "CLOSE", 0 ' CLOSE 143 getestet
|
|
tok16 byte "DEL", 0 ' DELETE " <file> " 144 getestet
|
|
tok17 byte "REN", 0 ' RENAME " <file> "," <file> " 145 getestet
|
|
tok102 byte "CHDIR",0 ' Verzeichnis wechseln 230 getestet kann nicht CD heissen, kollidiert sonst mit Hex-Zahlen-Auswertung in getanynumber
|
|
tok18 byte "DIR", 0 ' dir anzeige 146 getestet NICHT AENDERN Funktionstaste!!
|
|
tok19 byte "SAVE", 0 ' SAVE or SAVE [<expr>] or SAVE "<file>" 147 getestet NICHT AENDERN Funktionstaste!!
|
|
tok20 byte "LOAD", 0 ' LOAD or LOAD [<expr>] or LOAD "<file>" ,{<expr>} 148 getestet NICHT AENDERN Funktionstaste!!
|
|
tok54 byte "FILE", 0 ' FILE wert aus datei lesen oder in Datei schreiben 182 getestet
|
|
tok24 byte "GFILE",0 ' GETFILE rueckgabe der mit Dir gefundenen Dateien ,Dateinamen 152 getestet
|
|
tok78 byte "MKDIR",0 ' Verzeichnis erstellen 206 getestet
|
|
tok112 byte "GATTR",0 ' Dateiattribute auslesen 240 getestet
|
|
tok90 byte "BLOAD",0 'Bin Datei laden 218 getestet
|
|
tok57 byte "MKFILE", 0 'Datei erzeugen 185 getestet
|
|
|
|
'************************* logische Operatoren **********************************************************************
|
|
tok21 byte "NOT" ,0 ' NOT <logical> '139 getestet
|
|
tok22 byte "AND" ,0 ' <logical> AND <logical> '150 getestet
|
|
tok23 byte "OR", 0 ' <logical> OR <logical> '151 getestet
|
|
'************************* mathematische Funktionen *****************************************************************
|
|
tok106 byte "FN",0 'Mathematische funktionen 234 getestet
|
|
' ^,!,//, Sin,Cos,Tan,ArcTan,Ln,e,EXP,Round,Min,Max,Log
|
|
'Wurzel, Fraction,Int,Floor,Ceil,SHL;SHR;REV;ROR;ROL;ODER;XODER,UND
|
|
tok11 byte "RND", 0 'Zufallszahl von x '139 getestet
|
|
tok83 byte "FUNC",0 'mathematische Benutzerfunktionen 211 getestet
|
|
|
|
'******************************** Mouse Befehle *********************************************************************
|
|
tok93 byte "MGET",0 'Mouse-xyz-position ' 221 getestet
|
|
tok97 byte "MB",0 'Mouse-Button ' 225 getestet
|
|
tok63 byte "MOUSE",0 'Mouse on off Mouse on,farbe ' 191 getestet
|
|
tok96 byte "MBOUND",0 'Mouse-Bereich definieren ' 224 getestet
|
|
|
|
'************************* Bildschirmbefehle ***********************************************************************
|
|
tok59 byte "COL",0 'Farbe setzen 1,2,3 Vordergrund,hintergrund,Cursor 187 getestet
|
|
tok60 byte "CLS",0 'Bildschirm loeschen cursor oberste Zeile Pos1 188 getestet
|
|
tok62 byte "POS",0 'Cursor an Pos x,y setzen -> Locate(x,y) 190 getestet
|
|
tok64 byte "PLOT",0 'Pixel setzen 192 getestet
|
|
tok66 byte "SCRDN",0 'n Zeilen runterscrollen -> Scrdown(n) 194 getestet
|
|
tok67 byte "SCRUP",0 'n Zeilen hochscrollen -> Scrup(n) 195 getestet
|
|
tok68 byte "CROFF",0 'Cursor ausschalten 196 getestet
|
|
tok69 byte "CRON",0 'Cursor einschalten 197 getestet
|
|
tok39 byte "WIN", 0 'Fenster C,T,S,R erstellen 167 getestet
|
|
tok49 byte "FREE",0 'freien Speicher anzeigen 177 getestet
|
|
tok74 byte "BUTTON",0 'Button erzeugen 202 getestet
|
|
tok98 byte "FRAME",0 'Rahmen zeichnen 226 getestet
|
|
tok99 byte "WSET",0 'in ein zuvor definiertes Fenster springen 227 getestet
|
|
tok101 byte "SCROLL",0 'Textzeile nach links scrollen 229 getestet
|
|
tok81 byte "CIRC",0 'Kreis zeichnen 209 getestet
|
|
tok82 byte "LINE",0 'Linie zeichnen 210 getestet
|
|
tok103 byte "BOX",0 '2dbox zeichnen 231 getestet
|
|
tok118 byte "GETX",0 'Cursor X-Position lesen 246 getestet
|
|
tok119 byte "GETY",0 'Cursor Y-Position lesen 247 getestet
|
|
tok122 byte "HEX",0 'Ausgabe von Hex-Zahlen mit Print ' 250 getestet
|
|
tok120 byte "BIN",0 'Ausgabe von Binärzahlen mit Print ' 248 getestet
|
|
tok125 byte "VER",0 'Versionsanzeige ' 253 getestet
|
|
tok123 byte "BACKUP", 0 'Bildschirmbereich sichern ' 251 getestet
|
|
tok124 byte "RECOVER",0 'Bildschirmbereich restaurieren ' 252 getestet
|
|
|
|
'************************* Datum und Zeit funktionen ***************************************************************
|
|
tok70 byte "STIME",0 'Stunde:Minute:Sekunde setzen -> 198 getestet
|
|
tok71 byte "SDATE",0 'Datum setzen 199 getestet
|
|
tok76 byte "GTIME",0 'Zeit abfragen 204 getestet
|
|
tok77 byte "GDATE",0 'Datum abfragen 205 getestet
|
|
tok65 byte "TIME",0 'Zeit anzeigen 193 getestet
|
|
tok111 byte "TIMER",0 'Timer-Funktionen set,read,clear?,entry,delete 239 getestet
|
|
|
|
'**************************** STRINGFUNKTIONEN ********************************************************************
|
|
|
|
tok35 byte "STR$", 0 'l,m,r,g,k left, mid, right ,groß,klein 163 getestet
|
|
tok36 byte "COMP$", 0 'Stringvergleich 164 getestet
|
|
tok37 byte "LEN", 0 'Stringlänge zurueckgeben 165 getestet
|
|
tok48 byte "CHR$", 0 'CHR$(expr) 176 getestet
|
|
tok105 byte "ASC",0 'ASCII-Wert einer Stringvariablen zurueckgeben 233 getestet
|
|
tok56 byte "TAB", 0 'Tabulator setzen 184 getestet
|
|
tok113 byte "VAL",0 'String in FLOAT-Zahlenwert umwandeln 241 getestet
|
|
tok108 byte "STRING$",0 'Zeichenwiederholung 236 getestet
|
|
tok109 byte "DIM",0 'Stringarray dimensionieren 237 getestet
|
|
tok116 byte "INSTR",0 'Zeichenkette in einer anderen Zeichenkette suchen ' 244 getestet
|
|
|
|
'**************************** Grafik-Tile-Befehle *****************************************************************
|
|
tok34 byte "TLOAD", 0 'Tileset in eram laden 162 getestet
|
|
tok51 byte "TILE", 0 'Tileblock aus aktuellem Tileset anzeigen 179 getestet
|
|
tok50 byte "STILE", 0 'tileset in bella laden 178 getestet
|
|
tok100 byte "TPIC",0 'komplettes Tileset als Bild anzeigen 228 getestet
|
|
tok104 byte "FONT",0 'Text mit aktuellem Tileset als Font ausgeben 232 getestet
|
|
tok25 byte "MAP", 0 'MAP-Befehle L=load,S=Save,D=Display,W=Write in Ram ' 153 getestet
|
|
tok91 byte "PLAYER",0 'Spielerfigur-Parameter p,k,g(parameter,Keys,collision,get) 219 getestet
|
|
tok114 byte "PLAYXY",0 'Spielerbewegung 242 getestet
|
|
tok121 byte "SPRITE",0 'Sprite-Parameter p, m, s(parameter, move,speed,usw) 249 getestet
|
|
|
|
'**************************** Daten-Befehle *****************************************************************
|
|
tok38 byte "READ", 0 'Data Lesen '166 getestet
|
|
tok40 byte "DATA", 0 'Data-Anweisung '168 getestet
|
|
tok47 byte "RESTORE", 0 'Data-Zeiger zurücksetzen 175 getestet
|
|
|
|
'**************************** Funktionen der seriellen Schnittstelle **********************************************
|
|
tok115 byte "COM",0 'serielle Schnittstelle öffnen / schliessen 243 getestet
|
|
|
|
'***********************SID-Synth-Befehle**************************************************************************
|
|
tok30 byte "SID", 0 'SID_Soundbefehle 158 getestet
|
|
tok31 byte "PLAY", 0 'SID DMP-Player '159
|
|
tok32 byte "GDMP", 0 'SID DMP-Player-Position '160
|
|
|
|
'************************ Port-Funktionen *************************************************************************
|
|
tok79 byte "PORT",0 ' Port-Funktionen Port s,i,o,p 207 getestet
|
|
tok55 byte "JOY",0 ' Joystick abfragen für 2 Joysticks 183 getestet
|
|
tok117 byte "XBUS",0 ' direkte Bus-Kommunikation zu den Props 245 getestet
|
|
'************************ ende Basic-Befehle **********************************************************************
|
|
|
|
|
|
'************************ Befehle in der Testphase ****************************************************************
|
|
|
|
'******************************************************************************************************************
|
|
|
|
'******************************* freie Befehle für Erweiterungen **************************************************
|
|
tok33 byte "BFC", 0 '161
|
|
tok41 byte "BFD", 0 '169
|
|
tok42 byte "BFE", 0 '170
|
|
tok43 byte "BFH", 0 '171
|
|
tok44 byte "BFI", 0 '172
|
|
tok45 byte "BFJ", 0 '173
|
|
tok46 byte "BFK", 0 '174
|
|
tok72 byte "BFL",0 '200
|
|
tok73 byte "BFM",0 '201
|
|
tok75 byte "BFN",0 '203
|
|
tok94 byte "LAN",0 ' 222
|
|
tok95 byte "BF1",0 ' 223
|
|
tok107 byte"BFF",0 '235
|
|
tok126 byte"BFG",0 '254
|
|
|
|
' ---------------------------- Mehr Befehle sind nicht möglich --------------------------
|
|
'******************************************************************************************************************
|
|
|
|
toks word @tok0, @tok1, @tok2, @tok3, @tok4, @tok5, @tok6, @tok7
|
|
word @tok8, @tok9, @tok10, @tok11, @tok12, @tok13, @tok14, @tok15
|
|
word @tok16, @tok17, @tok18, @tok19, @tok20, @tok21, @tok22, @tok23
|
|
word @tok24, @tok25, @tok26, @tok27, @tok28, @tok29, @tok30, @tok31
|
|
word @tok32, @tok33, @tok34, @tok35, @tok36, @tok37, @tok38, @tok39
|
|
word @tok40, @tok41, @tok42, @tok43, @tok44, @tok45, @tok46, @tok47
|
|
word @tok48, @tok49, @tok50, @tok51, @tok52, @tok53, @tok54, @tok55
|
|
word @tok56, @tok57, @tok58, @tok59, @tok60, @tok61, @tok62, @tok63
|
|
word @tok64, @tok65, @tok66, @tok67, @tok68, @tok69, @tok70, @tok71
|
|
word @tok72, @tok73, @tok74, @tok75, @tok76, @tok77, @tok78, @tok79
|
|
word @tok80, @tok81, @tok82, @tok83, @tok84, @tok85, @tok86, @tok87
|
|
word @tok88, @tok89, @tok90, @tok91, @tok92, @tok93, @tok94, @tok95
|
|
word @tok96, @tok97, @tok98, @tok99, @tok100, @tok101, @tok102,@tok103
|
|
word @tok104, @tok105, @tok106, @tok107, @tok108, @tok109, @tok110
|
|
word @tok111, @tok112, @tok113, @tok114, @tok115, @tok116, @tok117
|
|
word @tok118, @tok119, @tok120, @tok121, @tok122, @tok123, @tok124
|
|
word @tok125, @tok126
|
|
|
|
tokx word
|
|
dat
|
|
BASIC byte "BASIC.BIN",0
|
|
|
|
pub main
|
|
ios.start
|
|
speicheranfang:=$0 'Programmspeicher beginnt ab adresse 0 im eRam
|
|
ios.printCursorRate(0)
|
|
' ios.setpos(10,10)
|
|
' ios.print(string("Export-"))
|
|
read_filename
|
|
' ios.print(@tline)
|
|
ios.sdmount
|
|
ios.sdopen("W",@tline)
|
|
processsave
|
|
ios.sdclose
|
|
ios.sdopen("r",@basic)
|
|
ios.ldbin(@basic)
|
|
ios.sdclose
|
|
ios.printcursorrate(3)
|
|
ios.stop
|
|
|
|
pri read_filename|i,adr
|
|
adr:=ios#PARAM
|
|
i:=0
|
|
repeat while tline[i++]:=ios.ram_rdbyte(adr++)
|
|
tline[i]:=0
|
|
speicherende:=ios.ram_rdlong(adr++)
|
|
|
|
PRI processSave | a, c, d,e, ntoks,n,stk,mtk',pr
|
|
ntoks :=(@tokx - @toks) / 2
|
|
a := speicheranfang
|
|
n:=speicherende
|
|
ios.Backup_Area(0,29,39,29,BACK_RAM) 'Backup_Area(x,y,xx,yy,adr) Backup der untersten Zeile
|
|
stk:=0 'SID_Befehlsmarker
|
|
mtk:=0 'Mathe-Funktions,arker
|
|
repeat while a+2 < n
|
|
d := ios.ram_rdword(a)
|
|
ios.sddec(d)
|
|
ios.sdputc(" ")
|
|
e := a + 2 'Speicherplatz
|
|
repeat while c := ios.ram_rdbyte(e++)
|
|
|
|
if c => 128
|
|
if (c -= 128) < ntoks
|
|
ios.sdputstr(@@toks[c]) 'Tokenname schreiben (@token)'
|
|
ios.sdputc(" ")
|
|
else
|
|
ios.sdputc(c)
|
|
ios.sdputc(fReturn)
|
|
ios.sdputc(fLinefeed)
|
|
a:=e 'ende Speicherplatz fuer naechste Zeile an a uebergeben
|
|
percent(a-1,n) 'Speicheranzeige Fortschritts-Balken
|
|
|
|
'***************** noch eine leerzeile schreiben sonst fehlt die letzte zeile beim laden *****************
|
|
ios.sdputc(fReturn)
|
|
ios.sdputc(fLinefeed)
|
|
ios.Restore_Area(0,29,39,29,BACK_RAM) 'unterste Zeile wiederherstellen
|
|
|
|
PRI percent(b,e)|block 'Fortschrittsbalken am unteren Bildschirmrand zeichnen
|
|
block:=e/40 'daten pro block
|
|
result:=b/block
|
|
if result>39
|
|
result:=39 'nicht weiter, als bis Spalte 39
|
|
ios.Plot_Line(0, 29, result, 29,0)
|
|
|