Die Speicherorganisation des PC-1475
Index
Der Programmspeicher

- Der Programmspeicher beginnt bei 32768 und endet bei 65535. Da aber eingesetzter Speicher davon abweichen kann, ist er je nach eingesetzter/n
Ram-Karte(n) in entsprechende Blöcke unterteilt oder gar zweigeteilt (Bank 0 und 1). Der restliche Speicher gehört dem Betriebssystem, wie Display, Schnittstellen und Hauptprogramm!
- 8 kB Karte eingesetzt: Beginn der Programmdaten bei 32768, 40960, 49152 und 57344. Alle Blöcke sind identisch (
gemappt), d.h. wenn man in einem was ändert, dann betrifft das alle!
- 16 kB Karte eingesetzt: Beginn der Programmdaten bei 32768 und 49152.
- 32 kB Karte eingesetzt: Beginn der Programmdaten bei 32768.
- 2 Karten mit mehr als 32 kB eingesetzt: Beginn der Programmdaten bei 32768, aber durch Umschaltung kann das System auch die zweite Karte benutzen. Dadurch wird der Rechner aber langsamer!
- Die erste
BASIC-Zeile beginnt jeweils bei 32817, 41009, 49201 und 57393 (hier bei 8 kB Karte). Man kann diese Position selber einstellen und nach hinten schieben, um Platz für Daten zu machen. Die Speicherstellen 65495 und 65496 legen diese Position fest: PEEK 65495+256* PEEK 65496 = Startadresse. An dieser
Adresse muss ein
Byte mit dem Wert 255 stehen, danach kommt die erste Zeile.
- Das Ende des BASIC-Speichers wird ebenfalls mit einem 255 markiert. Dessen Adresse steht in dem
Pointer bei 65497 und 65498.
- Adresse des Schlusszeichens = z.B. <65498>*256+<65497> ergibt immer einen Wert ab 57393 bei einer 8kB Karte!
- Das letzte Byte, das für Programme verwendet werden kann, wenn keine Variablen DIMensioniert wurden, ist 63951 (-n*8192 /...)!
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
Das Byte 254 im Datenbereich einer Zeile markiert einen Befehl, der durch das folgende Byte bestimmt wird!
Variablenaufbau (DIM):
7 Bytes (a,b,c,d,e,f,g), Daten
In 65502*256+65501 wird die Startadresse der
Variablen gespeichert.
Hinterste von Variablen belegte Speicherstelle: 63951
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: Die Bytes werden hier mit a-g bezeichnet.
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 = String
array, 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 2 Zeilen mit ihren 24 Zeichen kann folgendermaßen angesteuert werden: Das Display ist in Zeichen unterteilt, jedes Zeichen hat 5 Bytes. Jedes Zeichen hat 5*7 Pixel: Deshalb entsprechen die ersten 7 Bits eines Bytes den 7 Pixeln Höhe.
 |
SHARP PC-1475
10240 bis 10299 10496 bis 10555 | Die ersten 12 Zeichen (je 5 Byte) der 1. Zeile
|
10304 bis 10363 10560 bis 10619 | Die ersten 12 Zeichen (je 5 Byte) der 2. Zeile
|
10752 bis 10811 11008 bis 11067 | Die zweiten 12 Zeichen (je 5 Byte) der 1. Zeile
|
10816 bis 10875 11072 bis 11131 | Die zweiten 12 Zeichen (je 5 Byte) der 2. Zeile
|
|
Die Sonderzeichen BATT, (), HYP, RSV, PRO, RUN und CAL werden im Byte 10300 oder 10556 angesteuert:
Bit | Symbol |
0 | BATT |
1 | () |
2 | HYP |
3 | RSV |
4 | PRO |
5 | RUN |
6 | CAL |
7 | - |
Die Sonderzeichen BUSY, DEF, SHIFT und DBL werden im Byte 10301 oder 10557 angesteuert:
Bit | Symbol |
0 | BUSY |
1 | DEF |
2 | SHIFT |
3 | DBL |
4 | - |
5 | - |
6 | - |
7 | - |
Die Sonderzeichen E, M, RAD, G, MATRIX, STAT und PRINT werden im Byte 10364 oder 10620 angesteuert:
Bit | Symbol |
0 | E |
1 | M |
2 | RAD |
3 | G |
4 | MATRIX |
5 | STAT |
6 | PRINT |
7 | - |
Die Sonderzeichen µt, /|\, SML und DE werden im Byte 10365 oder 10621 angesteuert:
Bit | Symbol |
0 | µt (jap. Symbole) |
1 | /|\ (jap. Symbol) |
2 | SML |
3 | DE |
4 | - |
5 | - |
6 | - |
7 | - |
Systembereich:

- | Systemvariablen (je 8 Byte lang):
Var | Adresse | HB | LB |
Z | 63952 | 249 | 208 |
Y | 63960 | 249 | 216 |
X | 63968 | 249 | 224 |
W | 63976 | 249 | 232 |
V | 63984 | 249 | 240 |
U | 63992 | 249 | 248 |
T | 64000 | 250 | 0 |
S | 64008 | 250 | 8 |
R | 64016 | 250 | 16 |
Q | 64024 | 250 | 24 |
P | 64032 | 250 | 32 |
O | 64040 | 250 | 40 |
N | 64048 | 250 | 48 |
M | 64056 | 250 | 56 |
L | 64064 | 250 | 64 |
K | 64072 | 250 | 72 |
J | 64080 | 250 | 80 |
I | 64088 | 250 | 88 |
H | 64096 | 250 | 96 |
G | 64104 | 250 | 104 |
F | 64112 | 250 | 112 |
E | 64120 | 250 | 120 |
D | 64128 | 250 | 128 |
C | 64136 | 250 | 136 |
B | 64144 | 250 | 144 |
A | 64152 | 250 | 152 |
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: 65343: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!)
|
- | Systemadressen:
LB | HB | Bedeutung |
&FFD7 | &FFD8 | Zeigt auf das 255 vor dem BASIC-Speicher |
&FFD9 | &FFDA | Zeigt auf das 255 nach dem BASIC-Speicher |
&FFDB | &FFDC | Zeigt auf den letzten mit MERGE hinzugefügten Block |
&FF31 | - | EOT Code ( SIO) |
&FF32 | - | Baudrate (SIO) |
&FF33 | - | F/F Schnittstellenzustand |
&FD04 | - | Eingabepuffer Pointer |
&FFDD | &FFDE | Variablenpointer |
&FF34 | - | CONSOLE Wert |
&2A7E oder &2B7E | &2A7F oder &2B7F | WAIT Counter |
&FFDD | &FFDE | Variablenpointer |
&FF02 | - | ASCII Code des am Cursor blinkenden Zeichens |
&FF00 | &FF01 | Adresse des blinkenden Zeichens im Displayspeicher |
&FFF6 | &FFF7 | Beginn der RAM-Karte |
&FFF8 | &FFF9 | Ende der RAM-Karte |
&FE80 | bis &FEAF | Displayinhalt im ASCII-Format |
&FD20 | bis &FD6F | Eingabepuffer |
&FDCD | &FDCE | BASIC Data Pointer |
&FC90 | bis &FCDF | Zeichenkettenspeicher |
|
- | Das ROM:
Der PC-1475 hat ein ROM, das das Betriebssystem enthält.
Das ROM der CPU liegt bei &0000 bis &1FFF, der Bankbereich von &4000 bis &7FFF.
Wenn man die Systemaufrufe kennt, kann man sie in die eigenen Programme
einbauen!
|
Copyright © Simon Lehmayr (Teile dieser Seite sind mit Hilfe von Laurent Duveau entstanden)
Wenn diese Seite ohne Navigation angezeigt wird, hier klicken.
Impressum