Adresse PC-1350 |
Adresse PC-1360 |
Beschreibung |
| 0436 | 00B5 | Tastaturabfrage (PC-1360: identisch zu 1E9C); siehe 46C0 ROM-Bank 0 |
| 11B0 | 088A | FAC 1 = (18/19); Bereich 0 bis 65535 (*01)(*01a) |
| 11B7 | 0891 | FAC 1 = (18/19); Bereich -32768 bis 32767 (*01)(*01a) |
| 162B | 090E | (18) = FAC 1; Bereich 0 bis 255 (*01)(*01a) |
| 162F | 0912 | (18/19) = FAC 1; Bereich -32768 bis 32767 (*01)(*01a) |
| 163A | 091D | (18/19) = FAC 1; Bereich 0 bis 65535 (*01)(*01a) |
| 01AD | 0A74 | FAC 1 = FAC 2 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01B6 | 0A7D | FAC 1 = FAC 2 (*01)(*01b) |
| 01D5 | 0A82 | FAC 1 = FAC 3 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01DE | 0A8B | FAC 1 = FAC 3 (*01)(*01b) |
| 01BB | 0A90 | FAC 1 = FAC 4 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01C4 | 0A99 | FAC 1 = FAC 4 (*01)(*01b) |
| 01C9 | 0AA0 | FAC 2 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01D2 | 0AA9 | FAC 2 = FAC 1 (*01)(*01b) |
| 019F | 0AAE | FAC 2 = FAC 4 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01A8 | 0AB7 | FAC 2 = FAC 4 (*01)(*01b) |
| 01E6 | 0ABA | FAC 3 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01EF | 0AC3 | FAC 3 = FAC 1 (*01)(*01b) |
| 01F2 | 0AC6 | FAC 4 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a) |
| 01FB | 0ACF | FAC 4 = FAC 1 (*01)(*01b) |
| 0193 | 0AD2 | FAC 4 = FAC 2 inkl. Vorzeichen in (31) (*01)(*01a) |
| 019C | 0ADB | FAC 4 = FAC 2 (*01)(*01b) |
| 01E3 | 0ADE | FAC 3 = FAC 2 (*01)(*01b) |
| 0202 | 0B8A | FAC 1 <-> FAC 2 inkl. Vorzeichen in (31) (*01)(*01a) |
| 020F | 0B97 | FAC 1 <-> FAC 2 (*01)(*01b) |
| 013F | 0BDB | FAC 1 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a) |
| 0142 | 0BDE | FAC 1 = 0 (*01)(*01b) |
| 0133 | 0BE5 | FAC 2 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a) |
| 0139 | 0BEB | FAC 3 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a) |
| 0166 | 0BF1 | Mantisse von FAC 1 = 0; Vorz. und Exp. bleiben (*01) |
| 0160 | 0BFB | Mantisse von FAC 2 = 0; Vorz. und Exp. bleiben (*01) |
| 0163 | 0BFE | Mantisse von FAC 4 = 0; Vorz. und Exp. bleiben (*01) |
| 017D | 0C01 | Vorz. und Exp. von FAC 1 = 0 (*01)(*01b) |
| 017A | 0C08 | Vorz. und Exp. von FAC 2 = 0 (*01)(*01b) |
| 0153 | 0C0B | FAC 2 = 1 inkl. Vorzeichen in (31) (*01)(*01a) |
| 06B9 | 0C18 | FAC 2 = 0.6 inkl. Vorzeichen in (31) (*01)(*01a) |
| 0732 | 0C24 | Konstanten zum Umrechnen der Winkelarten: |
| | DEG: FAC 2 = 0.434294481903 inkl. Vorzeichen in (31) (*01)(*01a) |
| | GRAD: FAC 2 = 0.9 inkl. Vorzeichen in (31) (*01)(*01a) |
| | RAD: FAC 2 = 57.2957795131 inkl. Vorzeichen in (31) (*01)(*01a) |
| 0BEC | 0C54 | FAC 2 = PI = 3.141592653 inkl. Vorzeichen in (31) (*01)(*01a) |
| 0301 | 0D42 | (31)=Vorzeichen FAC 1 und FAC 2; (FE71)=SP+2 (PC-1350: (6F3F)=SP+2); (30)=00 (*01)(*01b) |
| 0310 | 0D64 | (31)=Vorzeichen FAC 1; (FE71)=SP+2 (PC-1350: (6F3F)=SP+2); (30)=00 (*01)(*01b) |
| 0328 | 0D69 | Vorzeichen aus (31) -> FAC 1 und FAC 2 (*01)(*01b) |
| 0333 | 0D74 | Vorzeichen aus (31) -> FAC 1 (*01)(*01b) |
| 10E4 | 10B9 | ERROR 2 (*03) |
| 10EC | 10C0 | ERROR 1 (*03) |
| 10F0 | 10C8 | ERROR 3 (*03) |
| 10F4 | 10CD | ERROR 4 (*03) |
| 10F8 | 10D2 | ERROR 5 (*03) |
| 10FC | 10D7 | ERROR 6 (*03) |
| 10E6 | 10BB | ERROR A (1 <= A <= 9) |
| 1100 | 10DC | ERROR 7 (*03) |
| 1104 | 10E1 | ERROR 8 (*03) |
| 1108 | 10E6 | ERROR 9 (*03) |
| 027D | 1108 | D = AE |
| 0282 | 110D | S = AE |
| 0287 | 1112 | S = AE+1 |
| 028D | 1118 | D = AE+1 |
| 0297 | 111E | S = AE-1 |
| 02B5 | 1124 | D = AE-1 |
| 1414 | 112A | D = S |
| 1419 | 112F | S = D |
| 1553 | 1134 | (0C/0D) = S |
| 1558 | 1139 | (0C/0D) = D |
| 113E | D <-> (0C/0D) |
| 161A | 1143 | S <-> (0C/0D) |
| 170E | 1148 | A = (0A); (0A) = (06) |
| 1713 | 114D | (0B) = (06); A = (06) |
| 115C | 1153 | push S |
| 1167 | 115E | pop S |
| 141E | 1188 | (38/39) = S |
| 140B | 1192 | S = (38/39) |
| 108E | 1197 | S <-> (38/39) |
| 119C | S <-> D |
| 11A6 | 11A1 | S = (1D/1E)-1 == STR 2 (*01) |
| 11AA | 11A5 | S = (15/16)-1 == STR 1 (*01) |
98B0 v0 9A36 v1 | 11AB | AE = (FFDB/DC) (PC:1350: 6F05/06) Beginn des letzten MERGE-Blocks |
98B6 v0 9A3C v1 | 11B1 | AE = (FFD9/DA) (PC:1350: 6F03/04) Ende Basic-Speicher |
| 0293 | 11B7 | S = FD1F (PC-1350: 6EAF) Inputbuffer (ASCII oder Token) |
| 11BB | S = AE-1 |
| 029D | 11C1 | S = FBFF (PC-1350: 767F) Operanden-Stack |
| 02A3 | 11C7 | S = FD7F (PC-1350: 6CFF) Displaybuffer |
| 02AA | 11CE | D = FD7F (PC-1350: 6CFF) Displaybuffer |
| 02B1 | 11D5 | D = FD1F (PC-1350: 6EAF) Inputbuffer |
| 02BB | 11DF | D = FBFF (PC-1350: 767F) Operanden-Stack |
| 11E5 | S = (FEF0/F1) Beginn das aktuellen Basic-PRGs |
| 1471 | 11EB | S = (FFD7/D8) (PC-1350: 6F01/02) Beginn Basic-Speicher |
| 11F1 | (FFDB/DC) = (FFD7/D8) über AE; Start letzter MERGE-Block = Beginn Basic-Speicher |
| 11FC | (FEF0/F1) = (FFDB/DC) über AE; Beginn des aktuellen Basic-PRGs = Start letzter MERGE-Block |
| 1207 | (FEF0/F1) = (FFD7/D8) über (0A/0B); Beginn des aktuellen Basic-PRGs = Beginn Basic-Speicher |
| 1D84 | 1212 | (2AB4/B5) = S (PC-1350: (6F20/21) = S); S für Auswertung speichern (*03) |
| 1D89 | 1217 | S = (2AB4/B5) (PC-1350: S = (6F20/21)); S = wieder herstellen nach Ende eines Basic-Befehls (*03) |
| 1175 | 1233 | E mal (+D) = (+S) |
| 1265 | FDE8..EF = 00 Zwischenspeicher FAC 1 (*01) |
| 126E | FAC 4 = FAC 1 (*01)(*01b) |
| 1275 | FAC 1 = FAC 4 (*01)(*01b) |
| 127C | FAC 2 = FAC 1 (*01)(*01b) |
| 1283 | Aufruf 40(MM) in Rom Bank Q (Lo Nibble) und Rückkehr zu Rom Bank Q (Hi Nibble) |
| 12DB | A = (+S) aus beiden Banken (*02) |
| 12FC | A = (-S) aus beiden Banken (*02) |
| 131B | (+D) = A in beide Banken (*02) |
| 133C | (-D) = A in beide Banken (*02) |
| 142B | 13A3 | RAM Bank 0 aktivieren |
| 1438 | 13A9 | RAM Bank 1 aktivieren |
| 13AF | A * 2 ms warten |
| 09E8 | 13B7 | 6 ms warten |
| 04AD | 13C4 | CR = 00; Display aus |
| 04B1 | 13C8 | CR = 01; Display an |
| 1441 | FAC 1 = 00; FAC 2 = 00; FAC 3 = 00 (*01)(*01b) |
| 1C44 | 1448 | FD80..AF = 20 (PC-1350: 6D00..6D2F); 1.+2. Zeile Displaybuffer löschen |
| 1C3F | 144D | FD98..AF = 20 (PC-1350: 6D18..6D2F); 2.Zeile Displaybuffer löschen |
| 1C36 | 1452 | FD80..97 = 20 (PC-1350: 6D00..6D17); 1.Zeile Displaybuffer löschen |
| 1D3B | 1483 | (10)..(27) <-> FDC8..DF (PC-1350: 6D48..5F); 4.Zeile Displaybuffer |
| 1D43 | 148B | (10)..(27) <-> FD80..97 (PC-1350: 6D00..17); 1.Zeile Displaybuffer |
| 1D48 | 1490 | (10)..(27) <-> FD98..AF (PC-1350: 6D18..2F); 2.Zeile Displaybuffer |
| 1D4D | 1495 | (10)..(27) <-> FDB0..C7 (PC-1350: 6D30..47); 3.Zeile Displaybuffer |
| 1E0C | 14B6 | FD80..DF = 20 (PC-1350: 6D00..5F); Displaybuffer (24x4) löschen |
| 14BF | FD80..A3 = 20 (PC-1350: 6D00..23); Displaybuffer (18x2) löschen |
| 1C1C | 14C8 | FD20..6F = 0D (PC-1350: 6EB0..FF); Eingabebuffer löschen |
| 1517 | BIT(FF30),80; SIO geöffnet |
| 15C5 | 2A98..AF = 00; Printer-Buffer CE-126P |
| 1CD0 | 16B5 | D = Adresse Displayspeicher-1 der Zeile A 2800/2840/281E/285E (PC-1350: 7000/7040/701E/705E) |
| 1CEF | 16D4 | D = Adresse Displayspeicher-1 für Cursor X=(FD10)/Y=(FD11) (PC-1350: X=7881/Y=7880) |
| 1D5A | 1710 | D = Adresse Displaybuffer der Zeile Cursor Y=(FD11) (PC-1350: 7880) |
| 1D70 | 1726 | D = FD80 (PC-1350: 6D00); 1. Zeile Displaybuffer |
| 1D74 | 1731 | D = FD98 (PC-1350: 6D18); 2. Zeile Displaybuffer |
| 1735 | D = FD92; 2. Zeile Displaybuffer (18x2) |
| 1D78 | 1739 | D = FDB0 (PC-1350: 6D30); 3. Zeile Displaybuffer |
| 1D7C | 173D | D = FDC8 (PC-1350: 6D48); 4. Zeile Displaybuffer |
| 15EC | 17C4 | FEE0..E3 = 00 (PC-1350: 6F39..3C); USING-Format löschen |
| 1410 | 18A3 | CMP (14),D0; Test FAC 1 auf String |
| 8081 | 18AD | A = '<' oder '>', je nach Bit 6 von (&FFEC; PC-1350: &6F16); TEXT-Modus |
| 10C1 | 18D9 | FAC 1 = (POP Wert Operandenstack (&FC00; PC-1350: &7680)) (*01)(*01b) |
| 10AA | 18DD | FAC 2 = (POP Wert Operandenstack (&FC00; PC-1350: &7680)) (*01)(*01b) |
| 1737 | 19B0 | (+D) = 2D; -"" |
| 19F7 | (P) = 0; (P+1) = 0 |
| 1DF3 | 1A18 | Zeile ausgeben, A=0..3, A=4->gesamter Bildschirm, siehe ROM Bank 1, 4004 |
8962 v0 8AB8 v1 | 1E80 | FAC 1 = FAC 2 + FAC 1 (*01)(*01a) |
8979 v0 8ACF v1 | 1E84 | FAC 1 = FAC 2 - FAC 1 (*01)(*01a) |
8983 v0 8AD9 v1 | 1E88 | FAC 1 = FAC 2 * FAC 1 (*01)(*01a) |
898D v0 8AE3 v1 | 1E8C | FAC 1 = FAC 2 / FAC 1 (*01)(*01a) |
| 04B1 | 1E94 | Display einschalten == JP,13C8 |
| 04AD | 1E98 | Display ausschalten == JP,13C4 |
| 0436 | 1E9C | Tastaturabfrage (PC-1360: identisch zu 00B5); siehe 46C0 ROM-Bank 0 |
89AC v0 8B02 v1 | 1EC0 | FAC 1 = EXP(FAC 1) (*01)(*01a) |
89BA v0 8B10 v1 | 1EC4 | FAC 1 = SIN(FAC 1) (*01)(*01a) |
89C1 v0 8B17 v1 | 1EC8 | FAC 1 = COS(FAC 1) (*01)(*01a) |
89C8 v0 8B1E v1 | 1ECC | FAC 1 = TAN(FAC 1) (*01)(*01a) |
89CF v0 8B25 v1 | 1ED0 | FAC 1 = ASN(FAC 1) (*01)(*01a) |
89D6 v0 8B2C v1 | 1ED4 | FAC 1 = ACS(FAC 1) (*01)(*01a) |
89DD v0 8B33 v1 | 1ED8 | FAC 1 = ATN(FAC 1) (*01)(*01a) |
89EB v0 8B41 v1 | 1EDC | FAC 1 = DEG(FAC 1) (*01)(*01a) |
89F2 v0 8B48 v1 | 1EE0 | FAC 1 = DMS(FAC 1) (*01)(*01a) |
8E9F v0 8FF4 v1 | 1EE4 | FAC 1 = ABS(FAC 1) (*01)(*01a) |
8E7B v0 8FD0 v1 | 1EE8 | FAC 1 = INT(FAC 1) (*01)(*01a) |
8A00 v0 8B56 v1 | 1EEC | FAC 1 = SGN(FAC 1) (*01)(*01a) |
89F9 v0 8B4F v1 | 1EF0 | FAC 1 = RND(FAC 1) (*01)(*01a) |
89B3 v0 8B09 v1 | 1EF4 | FAC 1 = SQR(FAC 1) (*01)(*01a) |
89A5 v0 8AFB v1 | 1EF8 | FAC 1 = LOG(FAC 1) (*01)(*01a) |
899D v0 8AF3 v1 | 1EFC | FAC 1 = LN(FAC 1) (*01)(*01a) |
8B1E v0 8C74 v1 | 1F00 | FAC 1 = ASC(STR 1) (*01)(*01a) |
8B3E v0 8C94 v1 | 1F04 | STR 1 = CHR$(FAC 1) (*01)(*01a) |
8BA6 v0 8CFC v1 | 1F08 | STR 1 = STR$(FAC 1) (*01)(*01a) |
8C02 v0 8D58 v1 | 1F0C | FAC 1 = VAL(STR 1) (*01)(*01a) |
| 142B | | RAM Bank 1 einschalten |
| 1438 | | RAM Bank 0 einschalten |
| 144D | | (+S) aus RAM Bank 0 (S < &8000) oder 1 (S >= &8000) |
| 1454 | | Wenn S >= &8000 dann RAM Bank 1 einschalten |
| 153B | | X = 783C (Statusanzeige Display) |
| (*01) |
Hierbei werden folgende interne Variablen/Adresse genutzt
| Variable | Adresse | Vorzeichen |
| FAC 1 | 10..17 | (31) Bit0 = &01 wenn Mantisse negativ |
| FAC 2 | 18..1F | (31) Bit1 = &02 wenn Mantisse negativ |
| FAC 3 | 20..27 | (31) Bit2 = &04 wenn Mantisse negativ |
| FAC 4 | 28..2F | (31) Bit3 = &08 wenn Mantisse negativ |
| STR 1 | 14 = D0 | |
| 15 = Adresse LO | |
| 16 = Adresse HI | |
| 17 = Länge | |
| STR 2 | 1C..1F | |
FAC 1..4 sind BCD in exakt der Form, wie sie auch in den Variablen gespeichert werden
(31) und Spalte Vorzeichen: siehe (*01a) und (*01b)
Bei keiner der Funktionen darf davon ausgegangen werden, dass nach dem Aufruf FAC 1..4 (STR 1..2) erhalten bleiben. Diese werden ggf. für interne Zwecke bei der Berechnung genutzt.
(die in in den ROM-Routinen genutzten Flags in (33) und (37) müssen beim Aufruf nicht gesetzt sein, sie dienen den
ROM-Routinen nur intern als temporäre Flags).
Einige Beispiele:
| Zahl | Fließkommaformat (BCD) |
| 6 | 00 00 60 00 00 00 00 00 |
| 60 | 00 10 60 00 00 00 00 00 |
| 0.6 | 99 90 60 00 00 00 00 00 |
| 0.06 | 99 80 60 00 00 00 00 00 |
| -0.6 | 99 98 60 00 00 00 00 00 |
| -6 | 00 08 60 00 00 00 00 00 |
Nibble 0-2 beschreiben den Exponenten:
Bei positiven Zahl: 0 0 0 bis 0 9 9 -> Zahl = Mantisse*10^0 bis 10^99
Bei negativer Zahl: 9 9 9 bis 9 0 1 -> Zahl = Mantisse*10^-(1000-999) bis 10^-(1000-901) (== 10^-1 bis 10^-99)
Nibble 3-15 beschreiben die Mantisse:
Bei positiver Zahl: Nibble 3 == 0
Bei negativer Zahl: Nibble 3 == 8
Nibble 4-15 entspricht dee Mantisse (führende Nullen werden durch den Exponenten dargestellt).
Nibble 14-15 wird nur intern zu Rundungen genutzt, aber nicht ausgegeben.
|
| (*01a) |
Das Vorzeichen für FAC 1..4 in (31) muss vor Aufruf nicht gesetzt werden.
Funktionen, die mit (*01a) markiert sind, setzen (31) selber aus dem FAC, wenn es intern benötigt wird, und kopieren (31) ggf. nach einer Berechnung wieder in den FAC zurück.
|
| (*01b) |
Das Vorzeichen für FAC 1..4 muss vor Aufruf nach (31) kopiert und sollte in FAC 1..4 gelöscht sein.
Hierzu kann 0D64/0D42 (PC-1360) bzw. 0310/0301 (PC-1350) genutzt werden.
(31) ist nach Ausführung der Funktionn führend und ist ggf. von (31) in den FAC zurück zu kopieren.
Hierzu kann 0D74/0D69 (PC-1360) bzw. 0333/0328 (PC-1350) genutzt werden.
Funktionen, die mit (*01b) markiert sind, setzen (31) nicht (z.B. Kopieren oder FAC X=0) oder nur, wenn es intern bei einer Berechnung gesetzt wird.
|
| (*02) |
Wenn der Basicspeicher logisch bei < &8000 startet (MEM "B" oder MEM "D"):
- Adresse &0000 bis &7FFF:
- RAM-Bank 0 aktivieren
- (Adresse + &8000) lesen/schreiben
- RAM-Bank 1 aktivieren
- Adresse &8000 bis &FFFF:
- (Adresse) lesen/schreiben aus RAM-Bank 1
Sonst (MEM "C"):
-
(Adresse) lesen/schreiben aus RAM-Bank 0
|
| (*03) |
PC-1360: 2AB4/B5 , PC-1350: 6F20/21
S wird nach der Auswertung aller Parameter des aktuellen Basic-Befehls an der Adresse abgelegt.
Der Basic-Interpreter führt die Analyse des Basic-Programms an (S+1) fort.
Beispiel:
Eine Assembler-Programm erwartet, getrennt durch ein Komma, einen numerischen Parameter:
Das Basic-Programm wird mit ERROR 1 abgebrochen, wenn kein Komma nach dem CALL angegeben wurde
Beispiel PC-1360 (Adresse: 8100)
100: CALL &8100,G
LD A,(+S)
CMP A,2C
JP Z,+09 ; Komma gefunden
; Error 1 (kein Komma gefunden)
POP A ; Rücksprungadresse von Basic-Befehl CALL löschen
POP A
DEC S ; S auf das zuletzt gelesenen Zeichen zurücksetzen
JSR 1212 ; 2AB4/B5 = S
JP,10C0 ; Programm mit ERROR 1 beenden
JSR,4016 ; FAC1 = Ausdruck ab (S+1), ROM-Bank 0 (im Beispiel der Wert der Variable G)
JSR 1212 ; 2AB4/B5 = S
.... ; FAC1 verwenden
RET ; Basicerweiterung (also den CALL-Aufruf) beenden
Beispiel PC-1350 (Adresse: 6100)
100: CALL &6100,G
LD A,(+S)
CMP A,2C
JP Z,+09 ; Komma gefunden
; Error 1 (kein Komma gefunden)
POP A ; Rücksprungadresse von Basic-Befehl CALL löschen
POP A
DEC S ; S auf das zuletzt gelesenen Zeichen zurücksetzen
JSR 1D84 ; 6F20/21 = S
JP,10EC ; Programm mit ERROR 1 beenden
JSR,8039 ; FAC1 = Ausdruck ab (S+1) (im Beispiel der Wert der Variable G)
JSR 1D84 ; 6F20/21 = S
.... ; FAC1 verwenden
RET ; Basicerweiterung (also den CALL-Aufruf) beenden
|