Die Speicherorganisation des PC-1350


Index


Der Programmspeicher



Zeilenaufbau:

3 Bytes (x,y,z), Datenbytes, Return (Chr 13)
x,y: Zeilennummer = x*256+y
z: Länge des Datenblocks (Return zählt mit!)
Ende des Programms mit 255 markiert
Ein Byte mit dem ASCII-Code >= 128 im Datenbereich einer Zeile markiert einen Befehl, der durch den Code bestimmt wird!

Variablenaufbau (DIM):

7 Bytes (a,b,c,d,e,f,g), Daten
In PEEK 28423+256* PEEK 28424 wird die Startadresse der Variablen gespeichert.
Variablen werden von hinten her definiert, d.h. wenn eine Variable definiert wird, kommt sie an die hinterste Stelle. Jede weitere kommt dann davor. Die Startadresse zeigt auf den Header der neuesten Variable.
Variablen lassen sich auch per POKE umbenennen!

Headeraufbau:

7 Bytes groß

Beispiel:
G$(5,5)*3
a: 71 = G: Variablenname
b: 160 = String
c: 0 = 1.Byte * 256
d: 111 = + 2.Byte = Gesamtgröße + 3 (wegen Dimensionierungsangaben)
e: 5 = Dim 5
f: 5 = , 5
g: 3 = * 3
DATEN:71= 1. Zeichen Daten

Bedeutung des 2. Headerbytes:

1-26 = Stringarray, 2 stellig mit 2. Zeichen CHR (Byte+64)
193-218 = Zahlarray, 2 stellig mit 2. Zeichen CHR (Byte-128)
129-154 = String, 2 stellige Standardvar. (wie NE$="test") immer 16 Zeichen lang
65-90 = Zahl, 2 stellige Standardvar. (wie AA=0) immer 8 Bytes lang
128: einstelliges Zahlarray
160: einstelliges Stringarray

Daten einer Variable:

Strings enthalten jedes Zeichen im ASCII-Format, wobei Chr(0) das Ende des Strings bedeutet. Das Chr(0) fällt weg, wenn der String die als maximal angegebene Länge hat.
Zahlen werden im sog. BCD-Format codiert, wobei jede Zahl 7 Bytes belegt.
Bei Feldern folgen die einzelnen Daten ohne Trennzeichen aufeinander. Die Position rechnet das System anhand der Headerangaben aus. Wenn ein zweidimensionales Feld angelegt wurde, folgen die Felder ebenfalls nacheinander. Beispiel: DIM B$(1,2)*1: B$(0,0) B$(0,1) B$(0,2) B$(1,0) B$(1,1) B$(1,2)

Zugriff auf das Display:

Die 5 Spalten mit je 30 Pixeln Breite werden in 4 Zeilen á 8 Pixeln dargestellt. Jeder 8 Pixel-Streifen entspricht einen "GPRINT" Byte, wobei der Wert 1 den obersten Pixel ansteuert und die 128 den untersten! Der Abstand der Speicherstellen jeder Spalte beträgt 512 Bytes.

  SHARP  POCKET COMPUTER PC-1350
1: 28672..28701
&7000..&701D
1: +512
29184..29213
&7200..&721D
1: +1024
29696..29725
&7400..&741D
1: +1536
30208..30237
&7600..&761D
1: +2048
30720..30749
&7800..&781D
2: 28736..28765
&7040..&705D
2: 29248..29277
&7240..&725D
2:
29760..29789
&7440..&745D
2:
30272..30301
&7640..&765D
2:
30784..30813
&7840..&785D
3: 28702..28731
&701E..&703B
3: 29214..29243
&721E..&723B
3:
29726..29755
&741E..&743B
3:
30238..30267
&761E..&763B
3:
30750..30779
&781E..&783B
4: 28766..28795
&705E..&707B
4: 29278..29307
&725E..&727B
4:
29790..29819
&745E..&747B
4:
30302..30331
&765E..&767B
4:
30814..30843
&785E..&787B

Die Sonderzeichen RUN, PRO, SHIFT, SML werden im Byte &783C (30780) angesteuert:

BitSymbol
0Shift
1Def
2-
3-
4Run
5Pro
6Japan. Zeichen links: Führt zu Fehlfunktion!
7Sml



Systembereich:

-Systemvariablen (je 8 Byte lang):
VarAdresseHBLB
Z&6C30 (27696)10848
Y&6C38 (27704)10856
X&6C40 (27712)10864
W&6C48 (27720)10872
V&6C50 (27728)10880
U&6C58 (27736)10888
T&6C60 (27744)10896
S&6C68 (27752)108104
R&6C70 (27760)108112
Q&6C78 (27768)108120
P&6C80 (27776)108128
O&6C88 (27784)108136
N&6C90 (27792)108144
M&6C98 (27800)108152
L&6CA0 (27808)108160
K&6CA8 (27816)108168
J&6CB0 (27824)108176
I&6CB8 (27832)108184
H&6CC0 (27840)108192
G&6CC8 (27848)108200
F&6CD0 (27856)108208
E&6CD8 (27864)108216
D&6CE0 (27872)108224
C&6CE8 (27880)108232
B&6CF0 (27888)108240
A&6CF8 (27896)108248
Das erste Byte jeder Variable ist entweder CHR 245 bei String oder CHR 0 bei Zahlen. Wenn die Variable kürzer als 7 Zeichen ist, markiert ein Chr(0) den Schluss!

-  Reservemodedaten: &6F6F (28527):A:erster Reserveeintrag, ASC (alphabetische Nummer) markiert (A=1,S=19,D=4,...,' '=27,'='=28), dann Datenblock ohne Endcode Chr(13)! Beispiel: [1,254,34],[19,...],...
Reihenfolge:ASDFGHJKL'='' 'MNBVCXZ, leere Einträge werden nicht abgespeichert (auch nicht der Startcode 1-26!) Speicherende: &6FFF (28671)

-  Systemadressen:

LBHBBedeutung
&6F01 (28417)&6F02 (28418)Zeigt auf das 255 vor dem BASIC-Speicher
&6F03 (28419)&6F04 (28420)Zeigt auf das 255 nach dem BASIC-Speicher
&6F05 (28421)&6F06 (28422)Zeigt auf den letzten mit MERGE geladenen Programmblock
&6F07 (28423)&6F08 (28424)Zeigt auf den selbstdefinierten Variablenbeginn
&6F57 (28503)-Eingabepuffer: Die letzte gedrückte Taste
&6F0A (28426)bis &6F10 (28432)Passwort im ASCII-Code
&6F13 (28435)-2: WAIT angeschaltet, 6: WAIT aus
&6F14 (28436)-0-31: Passwort inaktiv, 32-63 Passwort aktiv
&6F20 (28448)&6F21 (28449)Zeigt direkt auf die Speicherstelle nach dem zuletzt ausgeführten BASIC-Befehl
&6EB0 (28336)bis &6EFF (28415)Ein-/Ausgabepuffer 80 Bytes
&6D00 (27904)bis &6D5F (27999)Anzeigepuffer des Displays in ASCII-Codes
&6E06 (28166)&6E07 (28167)1. FOR NEXT: Zeiger auf das Byte direkt vor der Anfangsadresse der Schleifenvariable
&6E08 (28168)bis &6E0E (28174)1. FOR NEXT: Endwert der Schleife im BCD-Format
&6E0F (28175)bis &6E15 (28181)1. FOR NEXT: STEP Wert im BCD-Format
&6E16 (28182)&6E17 (28183)1. FOR NEXT: Zeigt auf das Byte direkt nach dem 1. Schleifenausdruck
&6E18 (28184)&6E19 (28185)2. FOR NEXT: Zeiger auf das Byte direkt vor der Anfangsadresse der Schleifenvariable
&6E1A (28186)bis &6E20 (28192)2. FOR NEXT: Endwert der Schleife im BCD-Format
&6E21 (28193)bis &6E27 (28199)2. FOR NEXT: STEP Wert im BCD-Format
&6E28 (28200)&6E29 (28201)2. FOR NEXT: Zeigt auf das Byte direkt nach dem 1. Schleifenausdruck
&6E2A (28202)&6E2B (28203)3. FOR NEXT: Zeiger auf das Byte direkt vor der Anfangsadresse der Schleifenvariable
&6E2C (28204)bis &6E32 (28210)3. FOR NEXT: Endwert der Schleife im BCD-Format
&6E33 (28211)bis &6E39 (28217)3. FOR NEXT: STEP Wert im BCD-Format
&6E3A (28218)&6E3B (28219)3. FOR NEXT: Zeigt auf das Byte direkt nach dem 1. Schleifenausdruck
&6E3C (28220)&6E3D (28221)4. FOR NEXT: Zeiger auf das Byte direkt vor der Anfangsadresse der Schleifenvariable
&6E3E (28222)bis &6E44 (28228)4. FOR NEXT: Endwert der Schleife im BCD-Format
&6E45 (28229)bis &6E4B (28235)4. FOR NEXT: STEP Wert im BCD-Format
&6E4C (28236)&6E4D (28237)4. FOR NEXT: Zeigt auf das Byte direkt nach dem 1. Schleifenausdruck
&6E4E (28238)&6E4F (28239)5. FOR NEXT: Zeiger auf das Byte direkt vor der Anfangsadresse der Schleifenvariable
&6E50 (28240)bis &6E56 (28246)5. FOR NEXT: Endwert der Schleife im BCD-Format
&6E57 (28247)bis &6E5D (28253)5. FOR NEXT: STEP Wert im BCD-Format
&6E5E (28254)&6E5F (28255)5. FOR NEXT: Zeigt auf das Byte direkt nach dem 1. Schleifenausdruck
&6F2B (28459)-Nummer der aktuellen FOR..NEXT-Schleife: 6=0, 24=1, 42=2, 60=3, 78=4, 96=5
&6F2C (28460)-Nummer des aktuellen GOSUB..RETURN-Blocks: 144=0, 146=1, 148=2, ... 164=10
&7090 (28816)&7091 (28817)Rücksprungadresse aus dem 1. GOSUB..RETURN-Block
&7092 (28818)&7093 (28819)Rücksprungadresse aus dem 2. GOSUB..RETURN-Block
&7094 (28820)&7095 (28821)Rücksprungadresse aus dem 3. GOSUB..RETURN-Block
&7096 (28822)&7097 (28823)Rücksprungadresse aus dem 4. GOSUB..RETURN-Block
&7098 (28824)&7099 (28825)Rücksprungadresse aus dem 5. GOSUB..RETURN-Block
&709A (28826)&709B (28827)Rücksprungadresse aus dem 6. GOSUB..RETURN-Block
&709C (28828)&709D (28829)Rücksprungadresse aus dem 7. GOSUB..RETURN-Block
&709E (28830)&709F (28831)Rücksprungadresse aus dem 8. GOSUB..RETURN-Block
&70A0 (28832)&70A1 (28833)Rücksprungadresse aus dem 9. GOSUB..RETURN-Block
&70A2 (28834)&70A3 (28835)Rücksprungadresse aus dem 10. GOSUB..RETURN-Block
&70B3 (28851)&70B4 (28852)WAIT Intervall
&783C (30780)-Display-Symbole (siehe oben)

-  Das ROM: Der PC-1350 hat ein ROM, das das Betriebssystem enthält. Das ROM der CPU liegt bei &0000 bis &1FFF, der Rest von &8000 bis &FFFF. Wenn man die Systemaufrufe kennt, kann man sie in die eigenen Programme einbauen!

BytewertBefehlCALL-Adresse
153ABS2954
158ACS2954
161AND2954
225AREAD50108
164ASC2954
157ASN2954
159ATN2954
236BASIC47228
196BEEP49403
204CALL49455
229CHAIN38348
168CHR$2954
201CLEAR47787
183CLOAD38439
188CLOSE64131
206CLS55564
191CONSOLE34143
178CONT50136
150COS2954
182CSAVE38055
207CURSOR55441
220DATA50108
155DEG35307
193DEGREE49983
203DIM48466
156DMS35314
216END49897
147EXP2954
213FOR48612
230GCURSOR60134
224GOSUB49137
198GOTO49075
231GPRINT59439
195GRAD49999
212IF49736
173INKEY$2954
223INPUT50168
152INT2954
171LEFT$2954
166LEN2954
214LET49255
232LINE58798
180LIST50355
181LLIST50605
145LN2954
190LOAD62275
146LOG2954
226LPRINT50526
175MEM2954
184MERGE38480
170MID$2954
177NEW48040
217NEXT48782
163NOT2954
211ON50007
187OPEN63806
238OPEN$2954
162OR2954
179PASS47838
221PAUSE52835
167PEEK2954
174PI2954
233POINT2954
205POKE49498
235PRESET60044
222PRINT53217
234PSET60053
194RADIAN49991
192RANDOM49400
219READ49563
215REM49796
228RESTORE49695
227RETURN49807
172RIGHT$2954
160RND2954
176RUN47664
189SAVE62055
154SGN2954
149SIN2954
148SQR2954
209STEP4332
218STOP49934
169STR$2954
151TAN2954
237TEXT47434
210THEN4332
208TO4332
200TROFF49942
199TRON49938
202USING50481
165VAL2954
197WAIT49946

Der Bytewert ist das interne Byte, das in einer Zeile den Befehl repräsentiert.
Einige Befehle haben als CALL die Adresse 2954 oder 4332. Diese Befehle werden intern erkannt!

CALL-Adressen

AdresseBeschreibungGeänderte Registerint. RAM geändert
&120A (4618)Tastaturabfrage: Wird eine Taste gedrückt, landet der ASCII-Code an Adresse 28503 und im Akku AP,Q,DP,I,A,B,X,Y,K,L,V2..23,92
&BBB (3003)Tastaturabfrage: Wird eine Taste gedrückt, landet der Tastencode an [++Y]P,Q,DP,A,B,X,Y,K,L,V10..21,23,34,37..39,55..63,92
&D2C6 (53958)Print: Gibt die ASCII-Zeichen im Anzeigepuffer wie CURSOR(K,A) aus, wobei A=1,2 die unteren beiden Zeilen sind und A=3,4 die oberen.P,Q,DP,A,B,X,Y,K,L,W2..39
&8054 (32852)LPrint: Gibt die Zeichen im int. RAM von 16..39 auf dem CE-126P aus. Chr(13) bewirkt Zeilenvorschub.P,Q,DP,A,B,K,L2,3,8,9,92..95
&4D8 (1240)Off: Schaltet den Rechner softwareseitig aus. Anschalten über On/Brkallealle
&94B (2379)Beep kurz: Wenn in A das Bit 0 gesetzt ist, 2 kHz ansonsten 4 kHz. Um den Summer auszuschalten: LIP 95, ANIM 239, OUTCP,Q,A2,95
&C116 (49430)Beep lang: Piept mit 4 kHz und muss nicht abgebrochen werden.unbekanntunbekannt




Copyright © Simon Lehmayr (Teile dieser Seite sind mit Hilfe von Laurent Duveau entstanden)
Wenn diese Seite ohne Navigation angezeigt wird, hier klicken.
Impressum