GER

Sharp PC-1350 / PC-1360 Systemaufbau und Systemroutinen

ENG
Sharp PC-1350 / PC-1360 Systemaufbau
Der physikalische Speicher des PC-1350 ist folgendermaßen organisiert:
  • Speicheraufteilung:
    PC-1350 Speicher
     
  • Displayspeicher:
    PC-1350 Display
Im Speicherbereich des Displays (&7000-&78FF) ist keine Programmausführung möglich. In den nicht für das Display genutzten Ram können jedoch Daten gespeichert werden.
Hierbei gilt, dass die jeweils zweiten 256 Byte (z.B. &7100-&71FF) ein Spiegel des ersten Bereiches (z.B. &7000-&70FF) eines Display-Blocks darstellen.
Die Ports sowie die Nutzung des Rams durch das System ist im folgendne Abschnitt beschrieben.
 
Die Speicherkarte belegt den Bereich von &2000-&5FFF.
Abhängig von der gewählten Konfiguration nutzt Basic das interne Ram und die Speicherkarte oder nur die Speicherkarte.
Die Konfiguration des Speichers wird mit dem Befehl MEM$ angezeigt, das Ändern der Konfiguration ist mit MEM B/C möglich.
  • Ohne eingelegten Speicherkarte gilt:
    MEM "C"Für Basicprogramm, Variablen und Systembereich wird das interne Ram genutzt.
  • Mit einer eingelegten Speicherkarte gilt:
    MEM "B"Für Basicprogramm und Variablen wird die Speicherkarte und das interne Ram genutzt.
    MEM "C"Für Basicprogramm und Variablen wird die Speicherkarte genutzt.
  • Mit "Systembereich" ist dabei der von ROM genutzte Teil des RAMs gemeint (&6C30-&6FFF). Dieser liegt grundsätzlich im internen Ram.
Zugriff auf dem Speicher mit Assembler:
Nicht jeder Speicher (RAM und ROM) ist mit allen Zugriffsmöglichkeiten, welche die CPU bietet, auch zugreifbar.
AdresseBedeutungZugriff (lesend)
0000-1FFFint. ROM(AE) / nicht mit S, X
2000-5FFFRAM-KarteS, X und (AE)
6000-6FFFint. RAMS, X und (AE)
7000-7FFFDisplay/PortsS, X / nicht mit (AE)
8000-FFFFext. ROMS, X und (AE)

 
ROM-Version:
Für den PC-1350 sind mit zwei ROM-Versionen bekannt. Die Version des eigenen PC-1350 kann mit dem Aufruf von PEEK &FFF0 geprüft werden.
VersionErgebnis von PEEK &FFF0
v0CE (Dezimal: 206)
v103 (Dezimal: 3)
Der physikalische Speicher des PC-1360 ist folgendermaßen organisiert:
  • Speicheraufteilung:
    PC-1360 Speicher
     
  • Displayspeicher:
    PC-1360 Display
Im Speicherbereich des Displays (&2800-&30FF) ist keine Programmausführung möglich. In den nicht für das Display genutzten Ram können jedoch Daten gespeichert werden.
Hierbei gilt, dass die jeweils zweiten 256 Byte (z.B. &2900-&29FF) ein Spiegel des ersten Bereiches (z.B. &2800-&28FF) eines Display-Blocks darstellen.
Die Ports sowie die Nutzung des Rams durch das System ist im folgendne Abschnitt beschrieben.
 
Die Speicherkarte in Slot 1 belegt Ram Bank 0, die in Slot 2 belegt Ram Bank 1.
Abhängig von der gewählten Konfiguration nutzt Basic bei zwei eingelegten Ramkarten nur den Speicher in Bank 0 oder den Speicher beider Bänke/Karten.
Die Konfiguration des Speichers wird mit dem Befehl MEM$ angezeigt, das Ändern der Konfiguration ist mit SET MEM "B"/"C"/"D" möglich.
  • Mit einer eingelegten Speicherkarte in Slot 1 gilt:
    SET MEM "C"Für Basicprogramm, Variablen und Systembereich wird die Karte in Slot 1 genutzt.
  • Mit zwei eingelegten Speicherkarten gilt:
    SET MEM "B"Für Basicprogramm und Variablen werden die Karten in Slot 1+2 genutzt, der Systembereich liegt auf der Karte in Slot 2.
    SET MEM "C"Für Basicprogramm, Variablen und den Systembereich wird die Karte in Slot 1 genutzt.
    SET MEM "D"Die Karte in Slot 1 wird für das Basicprogramm genutzt, die Karte in Slot 2 für Variablen und den Systembereich.
  • Mit "Systembereich" ist dabei der von ROM genutzte Teil des RAMs gemeint (&F9D0-&FFFF).
Zugriff auf dem Speicher mit Assembler:
Nicht jeder Speicher (Ram und ROM) ist mit allen Zugriffsmöglichkeiten, welche die CPU bietet, auch zugreifbar.
AdresseBedeutungZugriff (lesend)
0000-1FFFint. ROM(AE) / nicht mit S, X
2000-3FFFDisplay/PortsS, X / nicht mit (AE)
4000-7FFFext. ROMS, X und (AE)
8000-FFFFRAM-KarteS, X und (AE)

 
ROM-Version:
Für den PC-1360 sind mir drei ROM-Versionen bekannt. Die Version des eigenen PC-1360 kann mit dem Aufruf von PEEK &7FFF geprüft werden.
VersionErgebnis von PEEK &7FFF
101 (Dezimal: 1)
303 (Dezimal: 3)
505 (Dezimal: 5)

 
System-Ram
  • Einleitung
    Folgenden RAM-Bereiche werden vom Basic des PC-1350/PC-1360 genutzt.
    Die Sortierung geschieht nach den Adressen des PC-1360.
     
  • RAM PC-1350/PC-1360
    Adresse
    PC-1350
    Adresse
    PC-1360
    Länge Beschreibung
    283C2TEXT BOTTOM; Gibt an, bis wohin ein Basic-Programm wachsen darf.
    283E2VARIABLE BOTTOM; gibt an, bis wohin DIM-Variable wachsen dürfen.
    70B3287E2WAIT-Intervall
    2A7E2Zähler für automatische Abschaltung
    2A8024Manual-Displaybuffer (Ausgabe im RUN-Modus)
    74802A9824Printer-Buffer CE-126P
    6F202AB42Adresse letztes gelesenes Zeichen bei Basic-Ausführung
    2ABD2Pointer DATA-1 für RESTORE
    2E7C1bit 7: Basic auf logische Adressen (0..65535)
    2E802Pointer Stack-1 für Bank+Rücksprungadresse beim Aufruf von ext.ROM aus int.ROM 
    2E82??Stack für Bank+Rücksprungadresse beim Aufruf von ext.ROM aus int.ROM
    783C303C1Statusanzeige Display
    bit 0: shift
    bit 1: def
    bit 2: printer (nicht im PC-1350/PC-1360)
    bit 3: reserve mode
    bit 4: run mode
    bit 5: program mode
    bit 6: japan mode
    bit 7: sml
    787C307C1Winkelart:
    bit 0: DEGREE
    bit 1: RADIAN
    bit 2: GRAD
    bit 3:
    bit 4:
    bit 5:
    bit 6:
    bit 7:
    6F6330A82Line: Start X
    6F6530AA2Line: Start Y
    6F6730AC2Line: Ende X
    6F6930AE2Line: Ende Y
    34001Aktuelle ROM-Bank
    38001Strobe
    3A001bit 0: IO1 (out)
    bit 1: IO2 (out)
    bit 2: Dout (out)
    bit 3: Din (out)
    bit 4: ACK (out)
    bit 5: data transmit ready (RS232)
    bit 6: ready to receive (RS232)
    bit 7: request to send
    3E001bit 0: Tastatur
    bit 1: Tastatur
    bit 2: Tastatur
    bit 3: export Brücke
    6C30F9D08Z ; Z$ ; A(26) ; A$(26)
    6C38F9D88Y ; Y$ ; A(25) ; A$(25)
    6C40F9E08X ; X$ ; A(24) ; A$(24)
    6C48F9E88W ; W$ ; A(23) ; A$(23)
    6C50F9F08V ; V$ ; A(22) ; A$(22)
    6C58F9F88U ; U$ ; A(21) ; A$(21)
    6C60FA008T ; T$ ; A(20) ; A$(20)
    6C68FA088S ; S$ ; A(19) ; A$(19)
    6C70FA108R ; R$ ; A(18) ; A$(18)
    6C78FA188Q ; Q$ ; A(17) ; A$(17)
    6C80FA208P ; P$ ; A(16) ; A$(16)
    6C88FA288O ; O$ ; A(15) ; A$(15)
    6C90FA308N ; N$ ; A(14) ; A$(14)
    6C98FA388M ; M$ ; A(13) ; A$(13)
    6CA0FA408L ; L$ ; A(12) ; A$(12)
    6CA8FA488K ; K$ ; A(11) ; A$(11)
    6CB0FA508J ; J$ ; A(10) ; A$(10)
    6CB8FA588I ; I$ ; A(09) ; A$(09)
    6CC0FA608H ; H$ ; A(08) ; A$(08)
    6CC8FA688G ; G$ ; A(07) ; A$(07)
    6CD0FA708F ; F$ ; A(06) ; A$(06)
    6CD8FA788E ; E$ ; A(05) ; A$(05)
    6CE0FA808D ; D$ ; A(04) ; A$(04)
    6CE8FA888C ; C$ ; A(03) ; A$(03)
    6CF0FA908B ; B$ ; A(02) ; A$(02)
    6CF8FA988A ; A$ ; A(01) ; A$(01)
    FAA096Ausgabebuffer für CE-126P
    6D60FB00160Ausgabebuffer (Tokens) / SIO Buffer
    6DE0FB9032Buffer für String-Operationen bei OPEN$
    7680FC0064Operanden-Stack
    FC2032Puffer Umwandlung Text-Tokens (bei Eingabe)
    FC4032Operatoren-Stack
    6E60FC6080Stringbuffer
    FCB032Buffer zur Generierung von OPEN$
    6F24FCB42Letztes Zeichen +1 im INPUT-Buffer (bei manueller Eingabe)
    FD041Cursor Adresse im INPUT-Buffer
    FD071Max Anzahl Zeichen pro Zeile : 24 (Jap: 18)
    FD081Max Anzahl Zeilen : 4 (Jap: 2)
    7881FD091CURSOR X (0..23) für PRINT
    7880FD0A1CURSOR Y (0..3) für PRINT
    6F62FD0F1Zeichenart bei LINE (sowie PSET, PRESET)
    bit 0: ,S
    bit 1: ,R
    bit 2: ,X
    bit 3: ,B
    bit 4: ,BF
    bit 5: Muster
    bit 6:
    bit 7:
    FD101Derzeitige Cursor-Position X
    FD111Derzeitige Cursor-Position Y
    7885FD131Zwischenspeicher Zeile (0..3) für Ausgabe
    6F2AFD161Letztes Zeichen+1 im INPUT-Buffer
    6EB0FD2080Inputbuffer (ASCII oder Token)
    6D00FD8096Displaybuffer
    7298FDE08Letzter RND 0 Wert (abweichendes BCD Format bei Exponent)
    FDE88Zwischenspeicher FAC 1 fü ROM-Routinen
    FDF08Zwischenspeicher FAC 2 fü ROM-Routinen
    6F2BFE001Nächster freier Eintrag im FOR-NEXT Stack
    6F2CFE011Nächster freier Eintrag im GOSUB Stack
    6F2E1Function Stack pointer
    6F301Function Ope. Number
    6F381Input buffer cursor
    6E06FE022FOR Schleife 1: Pointer Schleifenvariable-1 (LO/HI)
    6E08FE047FOR Schleife 1: Endwert (BCD)
    6E0FFE0B7FOR Schleife 1: STEP-Wert (BCD)
    6E16FE122FOR Schleife 1: Pointer für Rücksprung (LO/HI)
    6E18FE142FOR Schleife 2: Pointer Schleifenvariable-1 (LO/HI)
    6E1AFE167FOR Schleife 2: Endwert (BCD)
    6E21FE1D7FOR Schleife 2: STEP-Wert (BCD)
    6E28FE242FOR Schleife 2: Pointer für Rücksprung-1 (LO/HI)
    6E2AFE262FOR Schleife 3: Pointer Schleifenvariable-1 (LO/HI)
    6E2CFE287FOR Schleife 3: Endwert (BCD)
    6E33FE2F7FOR Schleife 3: STEP-Wert (BCD)
    6E3AFE362FOR Schleife 3: Pointer für Rücksprung-1 (LO/HI)
    6E3CFE382FOR Schleife 4: Pointer Schleifenvariable-1 (LO/HI)
    6E3EFE3A7FOR Schleife 4: Endwert (BCD)
    6E45FE417FOR Schleife 4: STEP-Wert (BCD)
    6E4CFE482FOR Schleife 4: Pointer für Rücksprung-1 (LO/HI)
    6E4EFE4A2FOR Schleife 5: Pointer Schleifenvariable-1 (LO/HI)
    6E50FE4C7FOR Schleife 5: Endwert (BCD)
    6E57FE537FOR Schleife 5: STEP-Wert (BCD)
    6E5EFE5A2FOR Schleife 5: Pointer für Rücksprung-1 (LO/HI)
    7090FE5C2GOSUB; Rücksprungadressen-1 des 1.Unterprogramms
    7092FE5E2GOSUB; Rücksprungadressen-1 des 2.Unterprogramms
    7094FE602GOSUB; Rücksprungadressen-1 des 3.Unterprogramms
    7096FE622GOSUB; Rücksprungadressen-1 des 4.Unterprogramms
    7098FE642GOSUB; Rücksprungadressen-1 des 5.Unterprogramms
    709AFE662GOSUB; Rücksprungadressen-1 des 6.Unterprogramms
    709CFE682GOSUB; Rücksprungadressen-1 des 7.Unterprogramms
    709EFE6A2GOSUB; Rücksprungadressen-1 des 8.Unterprogramms
    70A0FE6C2GOSUB; Rücksprungadressen-1 des 9.Unterprogramms
    70A2FE6E2GOSUB; Rücksprungadressen-1 des 10.Unterprogramms
    70A88Letztes Ergebnis eine arithmethischen oder logischen Funktion
    6F3FFE711Zwischenspeicher für Stackpointer (SP) bei Basic-Befehlsausführung
    FE771Pointer Operatoren-Stack (&FC40)
    6F2DFE781Pointer Operanden-Stack (&FC00)
    6F2FFE791Pointer Stringbuffer (&FC60)
    FE7A1Pointer ???-Stack (&FC50)
    6F39FEE01USING : Flags Dezialpunkt / Komma
    bit 0:
    bit 1:
    bit 2:
    bit 3: Exponential-Form
    bit 4:
    bit 5:
    bit 6:
    bit 7:
    6F3AFEE11USING : Ganzzahliger Anteil
    6F3BFEE21USING : String
    6F3CFEE31USING : Position des Dezimalpunktes
    6F40FEE82GCURSOR X (-32768 - 32767)
    6F42FEEA2GCURSOR Y (-32768 - 32767)
    6F5CFEEC2Endkoordinate X der letzten LINE Anweisung
    6F5EFEEE2Endkoordinate Y der letzten LINE Anweisung
    FEF02Beginn des gerade bearbeiteten Basic-PRGs
    FEF22Adresse der zuletzt abgearbeiteten Zeile
    74982Cursorposition im Basic-RAM für Editor
    749AFEF42Pointer nächste Befehl für CONT -1
    749CFEF62Adresse, an der ein Fehler aufgetreten ist
    FF002Adresse blinkender Cursor im Displayspeicher
    FF021Zeichen, auf dem der Cursor blinkt
    6F59FF0D1Konstante &79 (JMP)
    6F5AFF0E2Ansprungadresse für Befehle, Funktionen, CALL usw.
    7280FF1024Buffer zur Umwandlung REAL -> ASCII
    6F55FF2E2Pointer Reservespeicher-1
    78B0FF301SIO: Flags
    bit 0:
    bit 1:
    bit 2:
    bit 3:
    bit 4:
    bit 5:
    bit 6: Transfer finished
    bit 7: SIO is OPEN
    78B1FF311SIO: Textendcode
    78B2FF321SIO:Flags Baud-Rate
    bit 0: 300 Baud
    bit 1: 600 Baud
    bit 2: 1200 Baud
    bit 3:
    bit 4:
    bit 5:
    bit 6: Transmitting EOL
    bit 7: Transmitting EOT
    78B3FF331SIO: SIO-Parameter
    bit 0: LF
    bit 1: CR + LF
    bit 2: CR
    bit 3: Übertragung eines Basic-Programms
    bit 4: Stop-Bits: 0=1 Bit, 1=2 Bit
    bit 5: Parity (zusammen mit Bit 6)
    bit 6: Parity: 00=None, 01=Odd, 11=Even
    bit 7: Anzahl Bit: 0=7 Bit, 1=8 Bit
    FF341SIO: Console länge
    6F6FFF3F144Reservespeicher
    6FFFFFCF1Erkennungscode (Marke) &FF als Endmarke des Reservespeichers.
    FFD06&20..&25 Anfang Parameterblock
    6F00FFD61Flag fü Speicher
    6F01FFD72Start Basicprogramm
    6F03FFD92Ende Basicprogramm
    6F05FFDB2Start letzter MERGE-Block
    6F07FFDD2Start Variablen
    6F09FFDF8Passwort als String (erstes Byte ist &F5)
    6F12FFE81Flags:
    bit 0:
    bit 1:
    bit 2:
    bit 3: PRINT = LPRINT
    bit 4:
    bit 5:
    bit 6:
    bit 7:
    6F13FFE91Flags:
    bit 0:
    bit 1:
    bit 2: WAIT ohne Wert
    bit 3:
    bit 4:
    bit 5:
    bit 6:
    bit 7:
    FFEA1Flags für Eingabe:
    bit 0:
    bit 1: Keyboard im ERROR Modus (nur Cursor und CE/CLS)
    bit 2:
    bit 3: Editor bei der Programm bearbeitung
    bit 4: Fehler wurde angezeigt (RUN oder PRO Modus)
    bit 5: PASS on
    bit 6:
    bit 7:
    6F141Flags:
    bit 0:
    bit 1:
    bit 2:
    bit 3:
    bit 4:
    bit 5: PASS on
    bit 6:
    bit 7:
    6F151Flags für Eingabe:
    bit 0: All keys available
    bit 1: Keyboard in ERROR mode (nur Cursor und CE/CLS)
    bit 2: Programm gestoppt mit WAIT
    bit 3: RESERVE Editier Modus
    bit 4:
    bit 5: Program line input mode
    bit 6:
    bit 7:
    6F16FFEC1Flags
    bit 0:
    bit 1:
    bit 2:
    bit 3:
    bit 4:
    bit 5:
    bit 6: TEXT-Mode aktiv
    bit 7: Japan-Modus an
    6F171Flags
    bit 0:
    bit 1:
    bit 2: Kein Zeilenvorschub vor PRINT
    bit 3:
    bit 4:
    bit 5:
    bit 6:
    bit 7:
    FFF02RAM-Start +&30 (bei 32K &8030)
    FFF22Startadresse der Standardvariablen
    FFF62logische Adresse Beginn Basic-Speicher
    FFF82logische Adresse Ende Basic-Speicher
Internes ROM
  • Einleitung
    Im Folgenden sind alle (mir bekannten) Routinen im internen ROM des PC-1360 aufgelistet.
    Soweit mir bekannt sind die genannten Adressen in den ROM-Versionen 3 und 5 identisch.
    PC-1350: Das interne ROM ist bei ROM Version 0 und 1 identisch.
     
  • Internes ROM &0000 - &1FFF
    Adresse
    PC-1350
    Adresse
    PC-1360
    Beschreibung
    043600B5Tastaturabfrage (PC-1360: identisch zu 1E9C); siehe 46C0 ROM-Bank 0
    804E0594FAC 1 = FAC 2 ^ FAC 1; (*01)(*01b)
    11B0088AFAC 1 = (18/19); Bereich 0 bis 65535 (*01)(*01a)
    11B70891FAC 1 = (18/19); Bereich -32768 bis 32767 (*01)(*01a)
    162B090E(18) = FAC 1; Bereich 0 bis 255 (*01)(*01a)
    162F0912(18/19) = FAC 1; Bereich -32768 bis 32767 (*01)(*01a)
    163A091D(18/19) = FAC 1; Bereich 0 bis 65535 (*01)(*01a)
    01AD0A74FAC 1 = FAC 2 inkl. Vorzeichen in (31) (*01)(*01a)
    01B60A7DFAC 1 = FAC 2 (*01)(*01b)
    01D50A82FAC 1 = FAC 3 inkl. Vorzeichen in (31) (*01)(*01a)
    01DE0A8BFAC 1 = FAC 3 (*01)(*01b)
    01BB0A90FAC 1 = FAC 4 inkl. Vorzeichen in (31) (*01)(*01a)
    01C40A99FAC 1 = FAC 4 (*01)(*01b)
    01C90AA0FAC 2 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a)
    01D20AA9FAC 2 = FAC 1 (*01)(*01b)
    019F0AAEFAC 2 = FAC 4 inkl. Vorzeichen in (31) (*01)(*01a)
    01A80AB7FAC 2 = FAC 4 (*01)(*01b)
    01E60ABAFAC 3 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a)
    01EF0AC3FAC 3 = FAC 1 (*01)(*01b)
    01F20AC6FAC 4 = FAC 1 inkl. Vorzeichen in (31) (*01)(*01a)
    01FB0ACFFAC 4 = FAC 1 (*01)(*01b)
    01930AD2FAC 4 = FAC 2 inkl. Vorzeichen in (31) (*01)(*01a)
    019C0ADBFAC 4 = FAC 2 (*01)(*01b)
    01E30ADEFAC 3 = FAC 2 (*01)(*01b)
    02020B8AFAC 1 <-> FAC 2 inkl. Vorzeichen in (31) (*01)(*01a)
    020F0B97FAC 1 <-> FAC 2 (*01)(*01b)
    013F0BDBFAC 1 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a)
    01420BDEFAC 1 = 0 (*01)(*01b)
    01330BE5FAC 2 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a)
    01390BEBFAC 3 = 0; (31) inkl. Vorzeichen in (31) (*01)(*01a)
    01660BF1Mantisse von FAC 1 = 0; Vorz. und Exp. bleiben (*01)
    01600BFBMantisse von FAC 2 = 0; Vorz. und Exp. bleiben (*01)
    01630BFEMantisse von FAC 4 = 0; Vorz. und Exp. bleiben (*01)
    017D0C01Vorz. und Exp. von FAC 1 = 0 (*01)(*01b)
    017A0C08Vorz. und Exp. von FAC 2 = 0 (*01)(*01b)
    01530C0BFAC 2 = 1 inkl. Vorzeichen in (31) (*01)(*01a)
    06B90C18FAC 2 = 0.6 inkl. Vorzeichen in (31) (*01)(*01a)
    07320C24Konstanten 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)
    0BEC0C54FAC 2 = PI = 3.141592653 inkl. Vorzeichen in (31) (*01)(*01a)
    03010D42(31)=Vorzeichen FAC 1 und FAC 2; (FE71)=SP+2 (PC-1350: (6F3F)=SP+2); (30)=00 (*01)(*01b)
    03100D64(31)=Vorzeichen FAC 1; (FE71)=SP+2 (PC-1350: (6F3F)=SP+2); (30)=00 (*01)(*01b)
    03280D69Vorzeichen aus (31) -> FAC 1 und FAC 2 (*01)(*01b)
    03330D74Vorzeichen aus (31) -> FAC 1 (*01)(*01b)
    10E410B9ERROR 2
    10EC10C0ERROR 1
    10F010C8ERROR 3
    10F410CDERROR 4
    10F810D2ERROR 5
    10FC10D7ERROR 6
    10E610BBERROR A (1 <= A <= 9)
    110010DCERROR 7
    110410E1ERROR 8
    110810E6ERROR 9
    027D1108D = AE
    0282110DS = AE
    02871112S = AE+1
    028D1118D = AE+1
    0297111ES = AE-1
    02B51124D = AE-1
    1414112AD = S
    1419112FS = D
    15531134(0C/0D) = S
    15581139(0C/0D) = D
    113ED <-> (0C/0D)
    161A1143S <-> (0C/0D)
    170E1148A = (0A); (0A) = (06)
    1713114D(0B) = (06); A = (06)
    115C1153push S
    1167115Epop S
    141E1188(38/39) = S
    140B1192S = (38/39)
    108E1197S <-> (38/39)
    119CS <-> D
    11A611A1S = (1D/1E)-1 == STR 2 (*01)
    11AA11A5S = (15/16)-1 == STR 1 (*01)
    98B011ABAE = (FFDB/DC) (PC:1350: 6F05/06) Beginn des letzten MERGE-Blocks
    98B611B1AE = (FFD9/DA) (PC:1350: 6F03/04) Ende Basic-Speicher
    029311B7S = FD1F (PC-1350: 6EAF) Inputbuffer (ASCII oder Token)
    029D11C1S = FBFF (PC-1350: 767F) Operanden-Stack
    02A311C7S = FD7F (PC-1350: 6CFF) Displaybuffer
    02AA11CED = FD7F (PC-1350: 6CFF) Displaybuffer
    02B111D5D = FD1F (PC-1350: 6EAF) Inputbuffer
    02BB11DFD = FBFF (PC-1350: 767F) Operanden-Stack
    11E5S = (FEF0/F1) Beginn Basicprogramm
    147111EBS = (FFD7/D8) (PC-1350: 6F01/02) Beginn Basic-Speicher
    11F1(FFDB/DC) = (FFD7/D8) über AE
    11FC(FEF0/F1) = (FFDB/DC) über AE
    1207(FEF0/F1) = (FFD7/D8) über (0A/0B)
    1D841212(2AB4/B5) = S (PC-1350: (6F20/21) = S); S für Auswertung speichern (*03)
    1D891217S = (2AB4/B5) (PC-1350: S = (6F20/21)); S = wieder herstellen nach Ende eines Basic-Befehls (*03)
    11751233E mal (+D) = (+S)
    1265FDE8..EF = 00 Zwischenspeicher FAC 1 (*01)
    126EFAC 4 = FAC 1 (*01)(*01b)
    1275FAC 1 = FAC 4 (*01)(*01b)
    127CFAC 2 = FAC 1 (*01)(*01b)
    12DBA = (+S) aus beiden Banken (*02)
    12FCA = (-S) aus beiden Banken (*02)
    131B(+D) = A in beide Banken (*02)
    133C(-D) = A in beide Banken (*02)
    13A3(5E) AND FB; PC AND FB; RAM Bank 0 aktivieren
    13A9(5E) OR 04; PC OR 04; RAM Bank 1 aktivieren
    13AFA * 2 ms warten
    09E813B76 ms warten
    04AD13C4CR = 00; Display aus
    04B113C8CR = 01; Display an
    1441FAC 1 = 00; FAC 2 = 00; FAC 3 = 00 (*01)(*01b)
    1C441448FD80..AF = 20 (PC-1350: 6D00..6D2F); 1.+2. Zeile Displaybuffer löschen
    1C3F144DFD98..AF = 20 (PC-1350: 6D18..6D2F); 2.Zeile Displaybuffer löschen
    1C361452FD80..97 = 20 (PC-1350: 6D00..6D17); 1.Zeile Displaybuffer löschen
    1D3B1483(10)..(27) <-> FDC8..DF (PC-1350: 6D48..5F); 4.Zeile Displaybuffer
    1D43148B(10)..(27) <-> FD80..97 (PC-1350: 6D00..17); 1.Zeile Displaybuffer
    1D481490(10)..(27) <-> FD98..AF (PC-1350: 6D18..2F); 2.Zeile Displaybuffer
    1D4D1495(10)..(27) <-> FDB0..C7 (PC-1350: 6D30..47); 3.Zeile Displaybuffer
    1E0C14B6FD80..DF = 20 (PC-1350: 6D00..5F); Displaybuffer (24x4) löschen
    14BFFD80..A3 = 20 (PC-1350: 6D00..23); Displaybuffer (18x2) löschen
    1C1C14C8FD20..6F = 0D (PC-1350: 6EB0..FF); Eingabebuffer löschen
    1517BIT(FF30),80; SIO geöffnet
    15C52A98..AF = 00; Printer-Buffer CE-126P
    1CD016B5D = Adresse Displayspeicher-1 der Zeile A 2800/2840/281E/285E (PC-1350: 7000/7040/701E/705E)
    1CEF16D4D = Adresse Displayspeicher-1 für Cursor X=(FD10)/Y=(FD11) (PC-1350: X=7881/Y=7880)
    1D5A1710D = Adresse Displaybuffer der Zeile Cursor Y=(FD11) (PC-1350: 7880)
    1D701726D = FD80 (PC-1350: 6D00); 1. Zeile Displaybuffer
    1D741731D = FD98 (PC-1350: 6D18); 2. Zeile Displaybuffer
    1735D = FD92; 2. Zeile Displaybuffer (18x2)
    1D781739D = FDB0 (PC-1350: 6D30); 3. Zeile Displaybuffer
    1D7C173DD = FDC8 (PC-1350: 6D48); 4. Zeile Displaybuffer
    15EC17C4FEE0..E3 = 00 (PC-1350: 6F39..3C); USING-Format löschen
    141018A3CMP (14),D0; Test FAC 1 auf String
    D98618ADA = '<' oder '>', je nach Bit 6 von (&FFEC; PC-1350: &6F16); TEXT-Modus
    10C118D9FAC 1 = (POP Wert Operandenstack (&FC00; PC-1350: &7680)) (*01)(*01b)
    10AA18DDFAC 2 = (POP Wert Operandenstack (&FC00; PC-1350: &7680)) (*01)(*01b)
    173719B0(+D) = 2D; -""
    19F7(P) = 0; (P+1) = 0
    1DF31A18Zeile ausgeben, A=0..3, A=4->gesamter Bildschirm, siehe ROM Bank 1, 4004
    805A1E80FAC 1 = FAC 2 + FAC 1 (*01), PC-1360:(*01a), PC-1350:(*01b)
    80571E84FAC 1 = FAC 2 - FAC 1 (*01), PC-1360:(*01a), PC-1350:(*01b)
    80601E88FAC 1 = FAC 2 * FAC 1 (*01), PC-1360:(*01a), PC-1350:(*01b)
    80661E8CFAC 1 = FAC 2 / FAC 1 (*01), PC-1360:(*01a), PC-1350:(*01b)
    04B11E94Display einschalten == JP,13C8
    04AD1E98Display ausschalten == JP,13C4
    04361E9CTastaturabfrage (PC-1360: identisch zu 00B5); siehe 46C0 ROM-Bank 0
    89AC1EC0FAC 1 = EXP(FAC 1) (*01)(*01a)
    89BA1EC4FAC 1 = SIN(FAC 1) (*01)(*01a)
    89C11EC8FAC 1 = COS(FAC 1) (*01)(*01a)
    89C81ECCFAC 1 = TAN(FAC 1) (*01)(*01a)
    89CF1ED0FAC 1 = ASN(FAC 1) (*01)(*01a)
    89D61ED4FAC 1 = ACS(FAC 1) (*01)(*01a)
    89DD1ED8FAC 1 = ATN(FAC 1) (*01)(*01a)
    89EB1EDCFAC 1 = DEG(FAC 1) (*01)(*01a)
    89F21EE0FAC 1 = DMS(FAC 1) (*01)(*01a)
    8E9F1EE4FAC 1 = ABS(FAC 1) (*01)(*01a)
    8E7B1EE8FAC 1 = INT(FAC 1) (*01)(*01a)
    8A001EECFAC 1 = SGN(FAC 1) (*01)(*01a)
    89F91EF0FAC 1 = RND(FAC 1) (*01)(*01a)
    89B31EF4FAC 1 = SQR(FAC 1) (*01)(*01a)
    89A51EF8FAC 1 = LOG(FAC 1) (*01)(*01a)
    899D1EFCFAC 1 = LN(FAC 1) (*01)(*01a)
    8B1E1F00FAC 1 = ASC(STR 1) (*01)(*01a)
    8B3E1F04STR 1 = CHR$(FAC 1) (*01)(*01a)
    8BA61F08STR 1 = STR$(FAC 1) (*01)(*01a)
    8C021F0CFAC 1 = VAL(STR 1) (*01)(*01a)
    142BRAM Bank 1 einschalten
    1438RAM Bank 0 einschalten
    144D(+S) aus RAM Bank 0 (S < &8000) oder 1 (S >= &8000)
    1454Wenn S >= &8000 dann RAM Bank 1 einschalten
    153BX = 783C (Statusanzeige Display)
    (*01) Hierbei werden folgende interne Variablen/Adresse genutzt
    VariableAdresseVorzeichen
    FAC 110..17(31) Bit0 = &01 wenn Mantisse negativ
    FAC 218..1F(31) Bit1 = &02 wenn Mantisse negativ
    FAC 320..27(31) Bit2 = &04 wenn Mantisse negativ
    FAC 428..2F(31) Bit3 = &08 wenn Mantisse negativ
    STR 114 = D0
    15 = Adresse LO
    16 = Adresse HI
    17 = Länge
    STR 21C..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:
    ZahlFließkommaformat (BCD)
    600 00 60 00 00 00 00 00
    6000 10 60 00 00 00 00 00
    0.699 90 60 00 00 00 00 00
    0.0699 80 60 00 00 00 00 00
    -0.699 98 60 00 00 00 00 00
    -600 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:
     
    Beispiel PC-1360 (Adresse: 8100)
    100: CALL &8100,G

    LD A,(+S)
    CMP A,2C
    JP Z,+0C ; 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
    SET C    ; C=1 als Flag, dass ein Fehler aufgetreten ist
    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,+0C ; 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
    SET C    ; C=1 als Flag, dass ein Fehler aufgetreten ist
    JP,10EC  ; Programm mit ERROR 1 geenden
    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
ROM Bank 0
  • Einleitung
    Im Folgenden sind alle (mir bekannten) Routinen im ROM (Bank 0) des PC-1360 aufgelistet.
    Soweit mir bekannt sind die genannten Adressen in den ROM-Versionen 3 und 5 identisch.
    PC-1350: Hier unterscheiden sich die Adressen zwischen ROM Version 0 und 1.
     
  • ROM Bank 0
    Adresse
    PC-1350
    Adresse
    PC-1360
    Beschreibung
    8039
    v0 & v1
    4016Ausdruck ab S+1 auswerten, Ergebnis -> FAC 1
    S steht vor nächstem Zeichen
    420FNEW
    Nur ausführbar, wenn der "Program Mode" aktiv ist
    8403
    v0 & v1
    46C0PC-1360:
    Rückgabewerte:
    PC-1360 key-codes

    Tabelle zur Umrechnung Tastencode von 1E9C/00B5 in ASCII
    46C0..4707 Taste ohne SHIFT und ohne SML
    4708..474F Taste mit SHIFT und ohne SML
    4750..4797 Taste ohne SHIFT und mit SML
    4798..47DF Taste mit SHIFT und mit SML

    PC-1350:
    Rückgabewerte:
    PC-1350 key-codes

    Tabelle zur Umrechnung Tastencode von 0436 in ASCII
    8403..8443 Taste ohne SHIFT und ohne SML
    8485..84C5 Taste mit SHIFT und ohne SML
    8507..8547 Taste ohne SHIFT und mit SML
    8548..8588 Taste mit SHIFT und mit SML
    1A546DEFVariablenadresse suchen ab (S+1)
    Variable muss bereits angelegt sein!
    Rückgabewerte:
    06/07Adresse-1 der Variable
    0A/0BVariablenname

    Bei Standardvariablen:
    Zahl:0AName
    0B00
    (+D)1. Byte der Zahl
    String:0AName
    0B20
    (+D)F5 (Stringkennung)

    Bei normalen Variablen:
    Zahl:0A1.Zeichen
    0B2.Zeichen
    (+D)1. Byte der Zahl
    String:0A1.Zeichen
    0B2.Zeichen+80
    (+D)1.Zeichen des Strings
    Stringsende = 00
    8A85 v0
    8BDB v1
    6A3AFAC 1 = FAC 2 < FAC 1 (*01)(*01a)
    8A34 v0
    8B8A v1
    6A45FAC 1 = STR 2 < STR 1 (*01)
    8AB5 v0
    8C0B v1
    6A4FFAC 1 = FAC 2 > FAC 1 (*01)(*01a)
    8A36 v0
    8B8C v1
    6A58FAC 1 = STR 2 > STR 1 (*01)
    8A1F v0
    8B75 v1
    6A62FAC 1 = FAC 2 <= FAC 1 (*01)(*01a)
    8A18 v0
    8B6E v1
    6A6BFAC 1 = STR 2 <= STR 1 (*01)
    8A2C v0
    8B82 v1
    6A75FAC 1 = FAC 2 >= FAC 1 (*01)(*01a)
    8A1A v0
    8B70 v1
    6A80FAC 1 = STR 2 >= STR 1 (*01)
    8AFB v0
    8C51 v1
    6A8AFAC 1 = FAC 2 == FAC 1 (*01)(*01a)
    8ABD v0
    8C13 v1
    6A98FAC 1 = STR 2 == STR 1 (*01)
    8B0F v0
    8C65 v1
    6AA6FAC 1 = FAC 2 <> FAC 1 (*01)(*01a)
    8B0A v0
    8C60 v1
    6AAFFAC 1 = STR 2 <> STR 1 (*01)
    6E85Variablenadresse einer 2-Zeichen Variable suchen
    Eingangsparameter:
    0A1.Zeichen der Variable
    0B2.Zeichen der Variable

    Rückgabewerte:
    DAdresse
    ALänge
ROM Bank 1
  • Einleitung
    Im Folgenden sind alle (mir bekannten) Routinen im ROM (Bank 1) des PC-1360 aufgelistet.
    Soweit mir bekannt sind die genannten Adressen in den ROM-Versionen 3 und 5 identisch.
    PC-1350: Hier unterscheiden sich die Adressen zwischen ROM Version 0 und 1.
     
  • ROM Bank 1
    Adresse
    PC-1350
    Adresse
    PC-1360
    Beschreibung
    807E
    v0 & v1
    4004Eine Bildschirmzeile/gesamten Bildschirm ausgeben
    Eingangsparameter:
    PC-1350PC-1360Wert
    6D00..6D17FD80..FD97Text für 1.Zeile
    6D18..6D2FFD9A..FDAFText für 2.Zeile
    6D30..6D47FDB0..FDC7Text für 3.Zeile
    6D48..6D5FFDC8..FDDFText für 4.Zeile
    AA
    0..3Zeile 1..4 ausgeben
    4Alle Zeilen ausgeben
    DEAD v0
    E23C v1
    4043Bildschirm scrollen
    Scrollt Bildschirm und Displaybuffer (FD80..FDDF) (PC-1350: 6D00..6D5F) eine Zeile nach oben
    Eingangsparameter:
    A=4
    808A
    v0 & v1
    418BZeichensatz 5x8
    Zeichen ab ASCII 32
    PC-1360: jedes Zeichen sind in der Ausgabereichnefolge gespeichert (Byte 0..4)
    PC-1350: jedes Zeichen ist spiegelverkehrt gespeichert (Byte 4..0)
    4513Zeichensatz 8x16 (obere 8 + untere 8)
    E549 v0
    E983 v1
    615EEin Zeichen auf Bildschirm ausgeben
    Eingangsparameter:
    PC-1350PC-1360Wert
    AAZeichen
    7881FD10Cursor X (0..23)
    7880FD11Cursor Y (0..3)
ROM Bank 2
  • Einleitung
    Im Folgenden sind alle (mir bekannten) Routinen im ROM (Bank 2) des PC-1360 aufgelistet.
    Soweit mir bekannt sind die genannten Adressen in den ROM-Versionen 3 und 5 identisch.
    PC-1350: Hier unterscheiden sich die Adressen zwischen ROM Version 0 und 1.
     
  • ROM Bank 2
    Adresse
    PC-1350
    Adresse
    PC-1360
    Beschreibung
    4064NEW (nur, wenn "Program Mode" aktiv ist (=420F Bank 0)
    40C4Variable -> FAC 1 (=4016 Bank 0)
    E6B1 v0
    EAEB v1
    5224LINE
    Eingangsparameter:
    PC-1350PC-1360Wert
    6F63/6430A8/A9Start X
    6F65/6630AA/ABStart Y
    6F67/6830AC/ADEnde X
    6F69/6A30AE/AFEnde Y
    6F62FD0F
    or 01,S
    or 02,R
    or 04,X
    or 08,B
    or 10,BF
    or 20Muster
    74A0/A1FF10/11Muster
    EB3A v0
    EF84 v1
    5703PSET / PRESET / PSET,X
    Eingangsparameter:
    PC-1350PC-1360Wert
    20/2120/21X (LO/HI)
    22/2322/23Y (LO/HI)
    6F62FD0F
    00POINT (Z=0 wenn Punkt gesetzt)
    01PSET
    02PRESET
    04PSET,X
    EB4E v0
    EF98 v1
    5717PSET / PRESET / PSET,X
    Eingangsparameter:
    PC-1350PC-1360Wert
    2020X mit 0 <= X <= 149(dez)
    2222Y mit 0 <= Y <= 31(dez)
    6F62FD0Fwie bei 5703
    5ECBZeilennummer 18/19 suchen
    Eingangsparameter:
    18/19Zeilennummer (LO/HI)

    Rückgabewerte:
    Ergebins:
    Carry=0
    Carry=0Zeilennummer gefunden
    3A/3BAdresse (LO/HI)
    3C/3DZeilennummer (LO/HI)
    Ergebins:
    Carry=1
    Carry=1Zeilennummer nicht gefunden
    3C/3D=0gesamtes Program wurde ohne Erfolg durchsucht
    3C/3D<>0Zeilennummer groesser als die gesuchte gefunden
ROM Bank 4
  • Einleitung
    Im Folgenden sind alle (mir bekannten) Routinen im ROM (Bank 4) des PC-1360 aufgelistet.
    Soweit mir bekannt sind die genannten Adressen in den ROM-Versionen 3 und 5 identisch.
    PC-1350: Hier unterscheiden sich die Adressen zwischen ROM Version 0 und 1.
     
  • ROM Bank 4
    Adresse
    PC-1350
    Adresse
    PC-1360
    Beschreibung
    99CA v0
    9B5E v1
    5E72CLOAD M an 28/29
    Eingangsparameter:
    28/29 = Adresse, an die das Programm geladen wird
    99CD v0
    9B61 v1
    5E75CLOAD M an Originaladresse
    Eingangsparameter:
    (31) AND &7F ; Bit 7 löschen

Zurück zur Startseite Sharp


Copyright: Alle auf dieser Homepage gezeigten Bilder und Texte sind ©1999/2026 Bernhard Schwall, urheberrechtlich geschützt und dürfen ohne Zustimmung des Autors nicht veröffentlicht werden.
Autor:  Bernhard Schwall letzte änderung: 01.01.2026