Die Speicherorganisation des PC-1360
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 (zum Lesen auch bei: 10302,10303 und 10558,10559 und 32777,32778. Diese Stellen sind durch das System geschützt.)
- 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 = 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)
Neuer großer Zeichensatz 18*2:
Bildbreite 18 Zeichen, 2 Zeilen: POKE 64775,18,2!
Bildbreite 24, 4 Zeilen: POKE 64775,24,4!
Cursorposition bei z.B. 64777 die Spalte und bei 64778 die Zeile (nullbasierend)
Beim Ausschalten wird der alte Zeichensatz 24*4 wiederhergestellt!
(Bei 18*2 gibt es zusätzliche japanische Zeichen hinter den normalen Zeichen von ASC 166 bis 222!)
Unterschiede: 92=\ neu: [Y=]Symbol, 126=~ neu:126=Oberstrich, 161=° (in der Mitte), 162=Rahmensymbol links oben, 163= _| (Rahmensymbol rechts unten), 164= \ (klein rechts unten, wie Komma bloß falsch rum), 165=Malpunkt, 166-222: japanische Schriftzeichen! 223:° (oben), 240="0", 241-244: japanische Zeichen (Spielkartensymbole?)
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, die Speicher sind zweifach (im Abstand von 256 Bytes) gemappt.
|
SHARP POCKET COMPUTER PC-1360
1: 10240..10269
10496..10525 |
1: +512
10752..10781
11008..11037 |
1: +1024
11264..11293
11520..11549 |
1: +1536
11776..11805
12032..12061 |
1: +2048
12288..12317
12544..12573 |
2: 10304..10333
10560..10589 |
2: 10816..10845
11072..11101 |
2:
11328..11357
11584..11613 |
2:
11840..11869
12096..12125 |
2:
12352..12381
12608..12637 |
3: 10270..10299
10526..10555 |
3: 10782..10811
11038..11067 |
3:
11294..11323
11550..11579 |
3:
11806..11835
12062..12091 |
3:
12318..12347
12574..12603 |
4: 10334..10363
10590..10619 |
4: 10846..10875
11102..11131 |
4:
11358..11387
11614..11643 |
4:
11870..11899
12126..12155 |
4:
12382..12411
12638..12667 |
|
Die Sonderzeichen RUN, PRO, SHIFT, SML werden im Byte 12348 angesteuert:
Bit | Symbol |
0 | Shift |
1 | Def |
2 | - |
3 | - |
4 | Run |
5 | Pro |
6 | Japan. Zeichen links: Führt zu Fehlfunktion! |
7 | Sml |
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!)
|
- | Sonstige Speicherstellen: Von 64336 bis 64378 liegen Eingabereste im Speicher.
Von 64896 bis 64991 kann man den Bildschirminhalt zeilenweise als Einzelzeichen abrufen: Die ersten 24 Bytes sind die erste Zeile, die nächsten 24 die 2., etc.
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 |
&FEF0 | &FEF1 | Zeigt auf den Anfang des BASIC-Speichers, in dem gerade das Programm ausgeführt wird. |
&FD04 | - | Eingabepuffer Pointer |
&FF31 | - | EOT Code (SIO) |
&FF32 | - | Baudrate (SIO) |
&FF33 | - | F/F Schnittstellenzustand |
&FF34 | - | CONSOLE Wert |
&FEE8 | &FEE9 | Grafikcursorposition X (-32768 bis 32767) |
&FEEA | &FEEB | Grafikcursorposition Y (-32768 bis 32767) |
&FD09 | &FD0A | Textcursorposition (LB->X: 0-23, HB->Y: 0-3) |
&FEEC | &FEED | Endposition der letzten LINE (X) (-32768 bis 32767) |
&FEEE | &FEEF | Endposition der letzten LINE (Y) (-32768 bis 32767) |
&FD16 | - | Cursorposition im Eingabepuffer |
&FD10 | &FD11 | Displaypointer (LB->X: 0-23, HB->Y: 0-3) |
&287E | &287F | WAIT Counter |
&FF02 | - | ASCII Code des am Cursor blinkenden Zeichens |
&FF00 | &FF01 | Adresse des blinkenden Zeichens im Displayspeicher |
&FE00 | - | FOR..NEXT Rücksprungadresse im Stack |
&FE01 | - | GOSUB..RETURN Rücksprungadresse im Stack |
&FEE0 | - | USING Format (Punkt oder Komma) |
&FEE1 | - | USING Integer Anteil |
&FEE2 | - | USING Zeichenanteil |
&FEE3 | - | USING Dezimalpunkt |
&FFDD | &FFDE | Variablenpointer |
&FEF2 | &FEF3 | Adresse der vorangehenden Zeile |
&FEF4 | &FEF5 | BREAK Adresse |
&FEF6 | &FEF7 | ERROR Adresse |
&2ABD | &2ABE | DATA Pointer |
&2A7E | &2A7F | Auto Power Off Counter |
&FFF6 | &FFF7 | Beginn der RAM-Karte |
&FFF8 | &FFF9 | Ende der RAM-Karte |
&FF40 | bis &FFCF | Reservemodusbereich |
&FF3F | - | Länge aller Reservedaten |
&FD20 | bis &FD6F | Eingabezwischenspeicher |
&FD80 | bis &FDDF | Display als ASCII-Code |
&FC60 | bis &FCAF | Stringzwischenspeicher |
&FAA0 | bis &FAFF | Temporärer Drucker-Puffer |
Beispiel: Um die BASIC Startadresse zu erhalten, gibt man PEEK &FFD7+ PEEK &FFD8*256 ein!
|
- | Das ROM:
Der PC-1360 hat ein ROM, das das Betriebssystem enthält.
Das ROM der CPU liegt bei &0000 bis &1FFF, der Bankbereich von &4000 bis &7FFF.
Man kann die Bank wechseln, indem man an Adresse &3400 die entsprechende Zahl von
0 bis 7 schreibt (mit POKE). Wenn man die Systemaufrufe kennt, kann man sie in die eigenen Programme
einbauen!
Systemtest
Mit R+V+7+1 zusammen gedrückthalten beim Einschalten wird die menügesteuerte Systemtestroutine ausgeführt!
BASIC Befehle
Position im Index | Befehl | Token | Einsprungadresse | Bank |
22761 | ASC | 208 | 7936 | BANK: Int. ROM |
22768 | AND | 161 | 0 | BANK: ?* |
22775 | ABS | 153 | 7908 | BANK: Int. ROM |
22782 | ATN | 159 | 7896 | BANK: Int. ROM |
22789 | ASN | 157 | 7888 | BANK: Int. ROM |
22796 | ACS | 158 | 7892 | BANK: Int. ROM |
22803 | AREAD | 99 | 6222 | BANK: ?* |
22812 | AKCNV$ | 224 | 0 | BANK: ?* |
22822 | APPEND | 114 | 4288 | BANK: ?* |
22832 | AS | 115 | 4288 | BANK: ?* |
22838 | ARUN | 116 | 6222 | BANK: ?* |
22846 | AUTOGOTO | 117 | 6222 | BANK: ?* |
22858 | BEEP | 41 | 16544 | BANK: 2 |
22866 | BASIC | 54 | 16400 | BANK: 2 |
22875 | CONT | 18 | 16439 | BANK: 2 |
22883 | CONSOLE | 36 | 16418 | BANK: 4 |
22894 | CLEAR | 46 | 16409 | BANK: 2 |
22903 | CLOAD | 22 | 16421 | BANK: 4 |
22912 | CSAVE | 32 | 16424 | BANK: 4 |
22921 | COS | 150 | 7880 | BANK: Int. ROM |
22928 | CHR$ | 240 | 7940 | BANK: Int. ROM |
22936 | CLOSE | 34 | 16448 | BANK: 5 |
22945 | CALL | 49 | 31485 | BANK: ?* |
22953 | CLS | 80 | 16445 | BANK: 2 |
22960 | CHAIN | 103 | 16385 | BANK: 5 |
22969 | CURSOR | 81 | 16526 | BANK: 2 |
22979 | COPY | 61 | 16388 | BANK: 5 |
22987 | CSIZE | 67 | 16421 | BANK: 3 |
22996 | COLOR | 68 | 16418 | BANK: 3 |
23005 | CROTATE | 110 | 16412 | BANK: 3 |
23016 | CIRCLE | 111 | 16415 | BANK: 3 |
23026 | DIM | 48 | 16397 | BANK: 2 |
23033 | DEGREE | 38 | 16448 | BANK: 2 |
23043 | DEG | 155 | 7900 | BANK: Int. ROM |
23050 | DMS | 156 | 7904 | BANK: Int. ROM |
23057 | DATA | 94 | 6222 | BANK: ?* |
23065 | DSKF | 177 | 0 | BANK: ?* |
23073 | DELETE | 27 | 16385 | BANK: 2 |
23083 | END | 90 | 16451 | BANK: 2 |
23090 | EXP | 147 | 7872 | BANK: Int. ROM |
23097 | EOF | 176 | 0 | BANK: ?* |
23104 | ERASE | 58 | 16406 | BANK: 2 |
23113 | FOR | 87 | 16457 | BANK: 2 |
23120 | FILES | 28 | 16391 | BANK: 5 |
23129 | GOTO | 43 | 16460 | BANK: 2 |
23137 | GOSUB | 98 | 16463 | BANK: 2 |
23146 | GPRINT | 51 | 16466 | BANK: 2 |
23156 | GCURSOR | 104 | 16469 | BANK: 2 |
23167 | GRAD | 40 | 16472 | BANK: 2 |
23175 | GRAPH | 65 | 16427 | BANK: 3 |
23184 | GLCURSOR | 108 | 16424 | BANK: 3 |
23196 | INPUT | 97 | 16403 | BANK: 1 |
23205 | IF | 86 | 16475 | BANK: 2 |
23211 | INT | 152 | 7912 | BANK: Int. ROM |
23218 | INKEY$ | 233 | 0 | BANK: ?* |
23228 | LNIT | 29 | 17164 | BANK: ?* |
23236 | JIS$ | 226 | 0 | BANK: ?* |
23244 | KILL | 60 | 17168 | BANK: ?* |
23252 | KLEN | 211 | 0 | BANK: ?* |
23260 | KMID$ | 237 | 0 | BANK: ?* |
23269 | KLEFT$ | 238 | 0 | BANK: ?* |
23279 | KRIGHT$ | 239 | 0 | BANK: ?* |
23290 | KACNV$ | 225 | 0 | BANK: ?* |
23300 | LIST | 20 | 17031 | BANK: ?* |
23308 | LLIST | 21 | 17131 | BANK: ?* |
23317 | LPRINT | 100 | 17135 | BANK: ?* |
23327 | LOG | 146 | 0 | BANK: ?* |
23334 | LOF | 178 | 0 | BANK: ?* |
23341 | LOC | 179 | 0 | BANK: ?* |
23348 | LN | 145 | 7932 | BANK: Int. ROM |
23354 | LOAD | 24 | 17176 | BANK: ?* |
23362 | LINE | 105 | 16899 | BANK: ?* |
23370 | LET | 88 | 16903 | BANK: ?* |
23377 | LEN | 210 | 0 | BANK: ?* |
23384 | LEFT$ | 235 | 0 | BANK: ?* |
23393 | LFILES | 59 | 17172 | BANK: ?* |
23403 | LTEXT | 64 | 17082 | BANK: ?* |
23412 | LF | 66 | 17078 | BANK: ?* |
23418 | LLINE | 106 | 17074 | BANK: ?* |
23427 | MEM | 175 | 0 | BANK: ?* |
23434 | MID$ | 234 | 0 | BANK: ?* |
23442 | MERGE | 23 | 17196 | BANK: ?* |
23451 | MDF | 128 | 0 | BANK: ?* |
23458 | NEXT | 91 | 16907 | BANK: ?* |
23466 | NAME | 62 | 17180 | BANK: ?* |
23474 | NOT | 163 | 0 | BANK: ?* |
23481 | NEW | 17 | 16911 | BANK: ?* |
23488 | ON | 85 | 16995 | BANK: ?* |
23494 | OPEN | 33 | 17184 | BANK: ?* |
23502 | OPEN$ | 232 | 0 | BANK: ?* |
23511 | OR | 162 | 0 | BANK: ?* |
23517 | OUTPUT | 113 | 4288 | BANK: ?* |
23527 | PRINT | 96 | 16804 | BANK: ?* |
23536 | PASS | 19 | 16915 | BANK: ?* |
23544 | PI | 174 | 0 | BANK: ?* |
23550 | PEEK | 164 | 0 | BANK: ?* |
23558 | POKE | 50 | 31586 | BANK: ?* |
23566 | POINT | 173 | 0 | BANK: ?* |
23575 | PSET | 52 | 16919 | BANK: ?* |
23583 | PRESET | 53 | 16923 | BANK: ?* |
23593 | PAUSE | 95 | 16808 | BANK: ?* |
23602 | PAINT | 112 | 17086 | BANK: ?* |
23611 | RUN | 16 | 16927 | BANK: ?* |
23618 | RETURN | 101 | 16999 | BANK: ?* |
23628 | READ | 93 | 16931 | BANK: ?* |
23636 | RESTORE | 102 | 16935 | BANK: ?* |
23647 | RND | 160 | 7920 | BANK: Int. ROM |
23654 | RANDOM | 37 | 29480 | BANK: ?* |
23664 | RIGHT$ | 236 | 0 | BANK: ?* |
23674 | RADIAN | 39 | 16939 | BANK: ?* |
23684 | REM | 89 | 6202 | BANK: ?* |
23691 | RENUM | 25 | 16979 | BANK: ?* |
23700 | RLINE | 107 | 17090 | BANK: ?* |
23709 | STOP | 92 | 17003 | BANK: ?* |
23717 | SQR | 148 | 7924 | BANK: Int. ROM |
23724 | SIN | 149 | 7876 | BANK: Int. ROM |
23731 | SGN | 154 | 7916 | BANK: Int. ROM |
23738 | STR$ | 241 | 7944 | BANK: Int. ROM |
23746 | SAVE | 35 | 17188 | BANK: ?* |
23754 | STEP | 83 | 4288 | BANK: ?* |
23762 | SET | 63 | 17192 | BANK: ?* |
23769 | SORGN | 109 | 17094 | BANK: ?* |
23778 | THEN | 84 | 4288 | BANK: ?* |
23786 | TAN | 151 | 7884 | BANK: Int. ROM |
23793 | TEXT | 55 | 16943 | BANK: ?* |
23801 | TRON | 44 | 16947 | BANK: ?* |
23809 | TROFF | 45 | 16951 | BANK: ?* |
23818 | TO | 82 | 4288 | BANK: ?* |
23824 | USING | 47 | 16955 | BANK: ?* |
23833 | VAL | 209 | 7948 | BANK: Int. ROM |
23840 | WAIT | 42 | 16959 | BANK: ?* |
23848 | WIDTH | 56 | 17007 | BANK: ?* |
|
- | CPU und Gate Array:
CPU
Gate Array
|
Copyright © Simon Lehmayr (Teile dieser Seite sind mit Hilfe von Laurent Duveau entstanden)
Wenn diese Seite ohne Navigation angezeigt wird, hier klicken.
Impressum