Basic/source/Bashelp.spin

429 lines
27 KiB
Plaintext

con'********************************** Hilfesystem *******************************************************************************************************************************
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
'*****************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 '....$67FFF ' hier beginnt der Tile-Speicher fuer 10 Tiledateien
SYS_FONT = $66800 '....$693FF ' ab hier liegt der System-Font 16kb
MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte
DIR_RAM = $69440 '....$6EFFF ' Puffer fuer Dateinamen 16kb fuer 1255 Dateinamen
VAR_RAM = $6F000 '....$757FF ' Variablen-Speicher fuer Array-Variablen a[0...255]-z[0...255] (6656 moegliche Variablen)
STR_START = $75800 '....$7EFFF ' ab hier werden die strings abgelegt 26x150 Zeichen
ERROR_RAM = $7F000 '....$7FF00 ' ERROR-Texte 'freier eRam-Bereich
PMARK_RAM = $7FFF1 ' Flag für Reclaim
BMARK_RAM = $7FFF2 ' Flag für Basic-Warm-Start
MAP_RAM = $80000 '....$8FFFF ' ab hier werden MAP-Daten abgelegt 64kb
'*****************SID-COG-Wellenformen*******************************************
sid_triangle = 16
sid_saw = 32
sid_square = 64
sid_noise = 128
'******************BUS-Signale***************************************************
#19, REG_RAM1,REG_RAM2
#24, HBEAT 'front-led
BUSCLK 'bustakt
BUS_WR '/wr - schreibsignal
BUS_HS ' '/hs - quittungssignal
DB_IN = %00000111_11111111_11111111_00000000 'maske: dbus-eingabe
DB_OUT = %00000111_11111111_11111111_11111111 'maske: dbus-ausgabe
'******************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*****************************************************
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
KEY_PGUP = 160
KEY_PGDN = 162
var
byte xtiles[11] 'xtiles fuer tilenr '
byte ytiles[11] 'ytiles fuer tilenr
byte str0 'String fuer Fontfunktion in Fenstern
byte aktuellestileset 'nummer des aktuellen tilesets
word workdir 'aktuelles Verzeichnis
byte font[150] 'Stringpuffer fuer Font-Funktion
long startadresse[11] 'startadresse des tiles im eram
long basicmarker 'Dir-Marker Basic-Verzeichnis
obj ios : "reg-ios-bas"
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
tile byte "Tile",0 'tile-Verzeichnis
help byte "Help",0 'Hilfeverzeichnis
' Status byte "F1HELP F2LOAD F3SAVE F4DIR F5RUN F6LIST",0'
' adm byte "Bas.adm",0
bel byte "Bel.sys",0
sysfont byte "sysfont.dat",0 'system-font, dieses Tileset ist nur halb so gross (16x8 Tiles) um beim Laden Zeit zu sparen
basic byte "basic.bin",0
root byte "..",0
bas byte "basic",0 'basic verzeichnis
pub hilfe | key,kapitelptr,a,e,end,pf,epf,seite
ios.start
basicmarker:=get_dirmarker
mount
sdset(@help) 'ins help verzeichnis wechseln
win
kapitelptr:=0
a:=0
e:=25'11
end:=((@tokx - @toks) / 2)-1 'Anzahl token
pf:=2 'oberste Pfeilposition
epf:=27 'unterste Pfeilposition
loadtile 'systemfont laden
seite:=1
liste(a,e,seite) 'Befehlsliste ausgeben
repeat
key:=ios.key
if key==KEY_UP
kapitelptr-=1
if kapitelptr<a
kapitelptr:=a
pf-=1'2
if pf=<2
pf:=2
pfeil(pf,pf+1)'2)
elseif key==KEY_DOWN
kapitelptr+=1
if kapitelptr>end
kapitelptr:=end
if kapitelptr>a+25'11
kapitelptr:=e
pf+=1'2
if pf=>epf
pf:=epf
pfeil(pf,pf-1)'2)
elseif key==KEY_PGUP or key==KEY_LEFT 'seite hoch
ios.printcls
e:=a-1
a:=e-25'11
if a<0
a:=0
if e<25'11
e:=25'11
seite--
if seite<1
seite:=1
liste(a,e,seite)
kapitelptr:=a
pf:=2
epf:=27
elseif key==KEY_PGDN or key==KEY_RIGHT 'seite runter
ios.printcls
if e+25>end'11 >end
a:=e+1
seite++
if seite>(end+26)/26
seite:=(end+26)/26
liste(a,end,seite)
pf:=2
epf:=end-a+2
else
a:=e+1
e:=a+25'11
seite++
liste(a,e,seite)
pf:=2
epf:=27
kapitelptr:=a
elseif key==13 'auswahl Kapitel mit return
kapitelanzeige(kapitelptr)
elseif key==27 'hilfe beenden
quit
ios.Restore_Area(0,0,39,29,$20000) 'Bild wiederherstellen
activate_dirmarker(basicmarker)
ios.sdopen("r",@basic)
ios.ldbin(@basic)
close
ios.stop
pri win
ios.Backup_Area(0,0,39,29,$20000) 'Backup_Area(x,y,xx,yy,adr) Backup des Bildschirms
ios.printcursorrate(0)
ios.display3Dframe(12, 250, 0, 0, 27, 29, 39)
ios.printBoxColor(6,12,250,0 )'schwarz auf weiss
ios.printBoxSize(6,1, 28, 2, 38)
printfont(string("*BEFEHLE*"),$f0,$80,0,29,0)
ios.printBoxColor(6,12,250,0 )
ios.printBoxSize(6,3, 28, 28, 38)
pri kapitelanzeige(ptr) |i,c,adr,marker,x,y
i:=8
adr:=3
ios.display3Dbox(12, 250, 0, 0, 0, 29, 26)
ios.os_error(ios.sdopen("R",@@toks[ptr])) 'datei öffnen
x:=1
y:=1
repeat
c:=ios.sdgetc
if x==25 or c==10 'zeilenumbruch bei spalte 25
x:=1
y+=1
if c==10 or c==13 'return oder linefeed nicht als zeichen anzeigen
next
if c>96
c-=32
ios.displayTile(c,250,0,0,y,x) 'text mit systemfont anzeigen
x++
until ios.sdeof 'ausgabe bis eof
ios.sdclose
pri pfeil(x,xx)
printfont(string("<-"),250,0,0,37,x)'ios.displaystring(string("<-"),1,45,x,37)
printfont(string(" "),250,0,0,37,xx)'ios.displaystring(string(" "),1,45,xx,37)
pri liste(a,e,seite) | n,i,len
n:=2
seite+=48
repeat i from a to e
printfont(@@toks[i],250,0,0,28,n) 'verfuegbare Befehle anzeigen
len:=strsize(@@toks[i])
printfont(String(" "),250,0,0,28+len,n)
n++'=2
printfont(string("<-"),250,0,0,37,2)
ios.displayTile(seite,250,0,0,28,33)
pri loadtile|c,adress,anzahl 'tileset aus eram in bella laden
ios.loadtilebuffer(SYS_FONT,2816) 'laden
pri printfont(str,a,b,c,d,e)|f,n
repeat strsize(str)
f:= byte[str++]
if d>39 'wenn Bildschirmrand erreicht, neue Zeile
d:=0
e++
if f>96
f-=32
ios.displayTile(f,a,b,c,e,d) 'einzelnes Tile anzeigen ('displayTile(tnr,pcol,scol,tcol, row, column))
d++
pri close
' sdset(0) 'ins root
ios.sdclose
ios.sdunmount
PRI mount
'playerstatus
ios.sdmount
activate_dirmarker(basicmarker)
pri sdset(str) 'Verzeichniswechsel
ios.sdchdir(str)
ios.sddmset(str)
PRI activate_dirmarker(mark) 'USER-Marker setzen
ios.sddmput(ios#DM_USER,mark) 'usermarker wieder in administra setzen
ios.sddmact(ios#DM_USER) 'u-marker aktivieren
PRI get_dirmarker:dm 'USER-Marker lesen
ios.sddmset(ios#DM_USER)
dm:=ios.sddmget(ios#DM_USER)