UCSD p-System

  • Ein UCSD-Pascal für den 8032 hat es wohl nie gegeben. Ich hab aber zwischendurch mal meine alten Unterlagen durchgeschaut. Von Commodore gab es damals einen 8seitigen Text zum UCSD-System. Der ist ganz hilfreich. Ich hab selbst in den 80iger Jahren einen Kursus zu UCSD gemacht. Ein paar Seiten Text hab ich schon mal gefunden, aber eigentlich sollte es da noch mehr geben.


    Was ich an Unterlagen habe, findet ihr im beiliegenden PDF. UCSD läuft bei mir erst einmal in Vice, damit man eine Reaktion sieht, ist die Geschwindigkeit auf 400 % gestellt. Ich werde jetzt noch die Tastatur für Vice anpassen, das sollte eigentlich klappen, weil UCSD einen eigenen Tastaturtreiber mitbringt. Er findet sich in der Datei SYSTEM.COMODORE in Block 24. Damals habe ich das für meinen CBM 8700 für die DIN-Tastatur auch gemacht.
    Hinweise UCSD-Pascal CBM 8096.pdf

  • Modula-2 für den Amiga gibt es, damit habe ich eine Zeit lang gearbeitet. Die Disketten dazu müsste ich suchen, aber weg gegeben habe ich die sicher nicht. Modula stammt ja von N. Wirth, der auch Pascal "erfunden" hat und so ähneln sich die beiden Sprachen sehr.


    Gruß, Jochen

  • Sobald Du (oder jemand anders) einen P-Code Interpreter geschrieben hast, der auf Dein Wunschsystem läuft, kannst Du auch das UCSD p-System mit allen Compilern laufen lassen. Das Schöne daran - der P-Code Interpreter ist nicht besonders groß....

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

  • Anscheinend ist P-Code eine gute Lösung für schmale CPU's in Verbindung mit Highlevel Sprachen.


    Schade dass es keinen C-Compiler gibt der P-Code emittiert.

    Vielleicht sollte man ein LCC Backend andenken?


    Hat nicht einer der ganz alten Microsoft C-Compiler sowas ähnliches wie P-Code erzeugen können?

    Wenn ich mich recht erinnere hat der dann gleich alles zusammen samz Interpreter als MSDOS Exe File ausgegeben.

    Microsoft hat die Variante angepriesen wenn es auf Speicher Optimierung ankommt.

  • Auf http://pascal.hansotten.com/category/ucsd-p-system/ findest Du bspw. auch den p-Code Interpreter für CP/M (als Assembler-Quelltext).


    Wenn Du einen C-Compiler dazu brauchst, bietet sich an, den "Small C-Compiler" zu portieren, sollte nicht wirklich arbeitsintensiv sein.

    Den Compiler Bootstrap kriegst Du hin, indem Du zuerst die Code-Generierung des Small C-Compilers auf p-Code umstellst. Danach kannst Du den Compiler mit sich selbst kompilieren und hast ausführbaren p-Code, den Du dann übertragen kannst.

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

  • Peter z80.eu : Interessant.

    Habe ich das Konzept richtig verstanden? Wenn ich beispielsweise auf meiner Sage einen Pascal Compiler im p-System habe, auf dem Amiga so Gott will demnächst ein "Pecan Power System" mit F77, kann ich das Fortran auf die Sage und das Pascal auf den Amiga schieben und somit beide Compiler auf beiden Systemen nutzen und auch Programme, die diese Systeme erzeugen beliebig hin und her schieben zwischen den Plattformen, so lange die Terminal-Definition kompatibel ist?


    EDIT: Freu mich wie die Sau auf das F77. Hoffentlich funktioniert es. Dann wäre wieder mal eine historische Software vor dem Aussterben gerettet

  • Ja, so ist das im Idealfall. Compiler, Editor und Tools des p-Systems sind zu p-Code kompiliert und laufen auf der Pseudomaschine. Und die ist auch die einzige Komponente, die jeweils maschinenspezifisch geschrieben wurde. Also sozusagen "Write once, run everywhere" aus den 70ern- schon eine tolle Sache.


    Ich sage "im Idealfall", weil Du auch z.B. bei Apple Pascal Inline Assembler nutzen kannst. Das wurde gern für maschinenspezifische Sachen gemacht. Dadurch ist's wieder Essig mit der Portierbarkeit, weil es die Grundidee untergräbt.

    Erfahrung ist Wissen, das wir erwerben, kurz nachdem wir es gebraucht hätten.


    Mein Netz: Acorn | Atari | Milan | Amiga | Apple IIGS | Macintosh | SUN Sparc | NeXT |SGI | IBM RS/6000 | DEC Vaxstation| Raspberry Pi | PCs mit OS/2, BeOS, Linux, AROS, Windows, BSD | Stand-alone: Apple //c | Sinclair QL | Amstrad | PDAs

  • Ach ja, da war noch was wo man beachten muss... High und Low Byte order, also der Unterschied, wie man bspw. 16-Bit Werte ablegt.

    Für die Wissenden .... gleiches gilt für x86 und 68K, die haben auch unterschiedliche Arten des "Byte Ordering".

    Das sollte man aber rauskriegen, sollte einen beim Portieren nicht wirklich aufhalten.

    Und ist nur bei der Portierung auf 16 Bit Maschinen und mit anderem Prozessor wirklich zu beachten.


    Wer sich den P-Code "disassemblieren" möchte, sollte hier reinschauen:

    https://ia800708.us.archive.or…LE_Pascal_System_1983.pdf

    Im Listing finden sich auch eine Unmenge Infos zu den P-Code Mnemonics.


    Nachtrag: Auf http://ucsd-psystem-vm.sourceforge.net/ findet man auch ein P-Code Interpreter/eine P-Code VM.

    Und ab Seite 3-49 findet man alle P-Code Mnemonics nochmal gut einzeln in http://pascal.hansotten.com/up…Internal_Architecture.pdf erklärt ... nur falls jemand wirklich sich da reinstürzen will.

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

    Edited 2 times, last by Peter z80.eu ().

  • Schade dass es keinen C-Compiler gibt der P-Code emittiert.

    Es gibt Indizien, daß die nicht so ist.


    Siehe: http://www.edm2.com/index.php/Cabot_UCSD_Pascal


    sowie



    Leider scheint der C Compiler genauso wie der Cobol, Modula-2 Compiler und der BASIC Compiler verschollen/ausgestorben zu sein. Oder hat da jemand sowas ?


    Was ich nicht verstande habe - was macht der "Assembler" auf der UCSD P-System Diskette? Das Vorhandensein eines Maschinenspezifischen Assemblers ist doch in einer plattformübergreifenden Umgebung wenig sinnvoll oder? Hab ich da was falsch verstanden?

  • Den BASIC-Compiler habe ich (als Terak Version). Das Angebot von Pecan kenne ich, IMHO wurde der C-Compiler nie veröffentlicht/zum Verkauf angeboten, weil in der Zwischenzeit sich UCSD p-System Software so gut wie kaum noch verkaufen lies.


    Später hinzugefügt: Die Pecan Software kann man zufälligerweise gerade bei Ebay.com ersteigern, siehe https://www.ebay.com/itm/274124407051

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

  • Den BASIC-Compiler habe ich (als Terak Version).

    Später hinzugefügt: Die Pecan Software kann man zufälligerweise gerade bei Ebay.com ersteigern,

    Interessant. Läuft denn der Terak-Compiler auf allen anderen Inkarnationen des UCSD Systems? Oder ist da was Terak-spezifisches drin? Du hast eine Terak?


    Das Ebay Angebot habe ich gesehen. Der Anbieter scheint aber zu wissen, wie selten sein Angebot ist :)

  • Was ich nicht verstande habe - was macht der "Assembler" auf der UCSD P-System Diskette? Das Vorhandensein eines Maschinenspezifischen Assemblers ist doch in einer plattformübergreifenden Umgebung wenig sinnvoll oder? Hab ich da was falsch verstanden?


    Aus meiner Sicht macht der Assembler durchaus Sinn!!


    Diese "virtuelle CPU" führt den Code ja direkt aus.

    In der Praxis gibt es diese CPU ja nicht, aber der P-Code wird ja interpretiert von verschiedenen Systemen.

    Also quasi gibt es ja diese virtuelle CPU in Form von Interpreter.


    Der Code ist portabel und relativ schnell.

    Und ich gehe davon aus, dass der Mensch besseren P-Code schreiben kann wie der Pascal Compiler.


    - Mit dem Assembler kann man also direkt optimierten P-Code erzeugen.

    - Man kann P-Code aus einer Hochsprache noch etwas "tunen"


    Theoretisch könnte man den P-Code sogar automatisiert optimieren lassen, speziell für ein Zielsystem.


    Im Extremfall könnte man den P-Code sogar in richtige Maschinensprache umwandeln, so wie Hot Java das macht.

    Im Idealfall sogar zur Laufzeit …

  • Diskette ist da. Scheint auch zu funktionieren. Aber gleich im Editor (ami.jpg) komme ich nicht weiter. Im Insert Mode kann ich Text eingeben, aber ich weiß nicht, wie ich die Eingabe übernehme. Mit Escape löscht er alles wieder... Müsste die "ETX" Taste sein, aber ich weiß nicht welche das beim Amiga sein könnte. Hab schon vieles durchprobiert. Manual zum Editor habe ich leider nicht. Peter z80.eu weißt Du das vielleicht? Weiß auch nicht, ob das System vollständig ist. Das Directory ist alles was ich habe.... Im Manual ist von "Disketten" die Rede... ich hab nur eine. Von Fortran lese ich auch nichts. Könnte das der "System.compiler" sein?

  • Filer und Editor sind die wichtigsten Komponenten. Beim Editor ist <ESC> gleichzusetzen mit dem Verwerfen der Änderungen.

    <ETX> (= End-of-Text) ist dazu da, die Änderungen zu übernehmen. Wenn man keine <ETX> Taste hat (das ist im Normalfall bei Rechnern außerhalb der ETH Zürich auch so), dann ist oft Ctrl-C das Äquivalent. Da ich noch nie UCSD PASCAL beim Amiga gesehen und geschweige denn damit gearbeitet habe, kann das aber auch eine andere Ctrl-Tasten-Kombination sein. Ich hatte mal ein Semester während meines Informatikstudiums das Vergnügen, mit NCR DM V und dem UCSD p-System zu arbeiten. Ist aber schon länger her ;-)

    "Ich habe keine Zeit mich zu beeilen." (Igor Strawinsky)


    ... und schaut auch mal bei meinem Blog vorbei ...

    Edited once, last by Peter z80.eu ().

  • Wenn man keine <ETX> Taste hat (das ist im Normalfall bei Rechnern außerhalb der ETH Zürich auch so), dann ist oft Ctrl-C das Äquivalent.

    Geil. Danke! Das ist es.

    Fortran 77 läuft :-)

    Das hat sogar Amiga Extensions für Graphik und Ton.

    Ich glaube aber, die 64kb Grenze existiert auch hier.

    Ist auch nur zu Kick 1.2 und 1.3 kompatibel. Bei Kick 2.0 kommt der Guru.

    Das System übernimmt den Amiga komplett. Multitasking / die Workbench wird abgeschaltet.

    Screenmode 640x200 scheint auch fix. Mauszeiger ist zwar da aber ohne Funktion.

  • Für die, die mal den UCSD Pascal Compiler ausreizen wollen - habe auf meiner UCSD Seite jetzt auch den Quellcode eines Schachprogramms dort abgelegt.

    Beim Übersetzen des Schachprogramms tritt bei mir folgendes Problem auf:


    Compiling...

    Compile what text? sys2:chess

    To what codefile? sys2:chess


    Pascal compiler - release level IV.0 b20-2

    < 0>..................................................

    < 50>..................................................

    < 100>..................................................

    < 150>..................................................

    < 200>..................................................

    < 250>..................................................

    < 300>..............................

    .

    .

    .

    SELNXT

    < 2774>.......

    SELANY

    < 2781>..............

    SELSBA

    < 2795>

    FOR IMTW : <---

    ':=' expected

    Line 2796

    Type <sp> to continue, <esc> to terminate, or 'e' to edit



    so sieht die procedure selba in chess.pas aus:

    ----------


    PROCEDURE SELSBA;

    BEGIN

    FOR IMTW :œ LINDX[JNTKÝ TÏ JNTW-± DÏ <- Zeile 2796 !!!!!!!!!

    WITH MOVES[IMTW] DO

    IF NOT RMSU THEN

    IF ABS(XTPV[RMCP]) > INTV THEN

    BEGIN

    INTV := ABS(XTPV[RMCP]);

    INTW := IMTW;

    END;

    END; (* SELSBA *)


    Das scheint irgendwie kaput zu sein ?

  • Beim Übersetzen des Schachprogramms tritt bei mir folgendes Problem auf:

    Das scheint irgendwie kaput zu sein ?

    Definitv. Ich bin auch nicht in der Lage das zu rekonstruieren, ich hab das Programm auch nicht. Grade in meiner Pascalsourcesammlung (USUS) gesucht, erfolglos. Gefunden habe ich 2 Programme in standard pascal, probier die doch mal:

  • Kann ich leider auch nicht übersetzen.


    chess05.text

    ============


    Compiling...

    Compile what text? sys2:chess05

    To what codefile? sys2:chess05


    Pascal compiler - release level IV.0 b20-2

    < 0>..................


    AC = <---

    Illegal character in text

    Line 19

    Type <sp> to continue, <esc> to terminate, or 'e' to edit



    chess05iso.text

    ===============


    Compiling...

    Compile what text? sys2:chess05iso

    To what codefile? sys2:chess05iso


    Pascal compiler - release level IV.0 b20-2

    < 0>..................................................

    < 50>..................................................

    < 100>..................................................

    < 150>..................................................

    < 200>................................................


    ) <---

    Error in constant

    Line 249

    Type <sp> to continue, <esc> to terminate, or 'e' to edit


    Das liegt aber jetzt wohl am Compiler ?
    Ist aber auch nicht so wichtig;


    Vielen Dank !

  • ngc224 welche Implementation von p-Syatem verwendest Du denn?


    In Line 19 steht bei mir kein AC = ....?


    Wenn Line 9 gemeint ist, kann es sein, daß der Compiler Hochkomma ' an Stelle von Anführungsstrichen " will?

    Das mit den falschen Zeilennummern ist jetzt gelöst !

    Das Problem war, das Deine Dateien 0x0d,0x0a am Zeilenende haben (MSDOS Format)

    ucsd-pascal benötigt aber 0x0a,0x0a am Zeilenende !


    linux-4232:/home/joe/oldcomputers/RC2014-master # dos2unix CHESS05.TEXT

    linux-4232:/home/joe/oldcomputers/RC2014-master # ucsdpsys_disk -f DS3N21.DSK -p CHESS05.TEXT

    linux-4232:/home/joe/oldcomputers/RC2014-master # dos2unix chess05iso.text

    linux-4232:/home/joe/oldcomputers/RC2014-master # ucsdpsys_disk -f DS3N21.DSK -p chess05iso.text


    Compiling...

    Compile what text? sys2:chess05

    To what codefile? sys2:chess05


    Pascal compiler - release level IV.0 b20-2

    < 0>.........

    AA = 1; ZA = 10; (* CHARACTERS IS A WORD *)

    AC = <---

    Illegal character in text

    Line 10

    Type <sp> to continue, <esc> to terminate, or 'e' to edit



    Compiling...

    Compile what text? sys2:chess05iso

    To what codefile? sys2:chess05iso


    Pascal compiler - release level IV.0 b20-2

    < 0>..................................................

    < 50>..................................................

    < 100>........................

    TRUE : (RMQS : TB); (* QUEEN SIDE *)

    ) <---

    Error in constant

    Line 125

    Type <sp> to continue, <esc> to terminate, or 'e' to edit


    Übersetzen kann er es zwar immer noch nicht, aber wenigstens stimmen jetzt

    die Zeilennummern.


    Grundsätzlich ist es so, daß ich 'ältere' Pascal Programme in der Regel fehlerfrei

    mit ucsd-pascal übersetzen kann, aber 'neuere' Programme nur nach

    diversen Änderungen.

  • FOR IMTW :œ LINDX[JNTKÝ TÏ JNTW-± DÏ <- Zeile 2796 !!!!!!!!!

    Und wenn Du einfach mal die Variable IMTW hochzählen lässt? Die Definition des Array MOVES[] gibt zumindest einen Hinweis auf die Obergrenze...Anfangswert und Step mal testweise auf 1 setzen...mehr als schiefgehen kanns ja nicht.

    Wenn das nicht klappt, müsste ich mir den restlichen Code genauer ansehen, besonders da, wo die Prozedur aufgerufen wird.


    Gruß, Jochen

  • Habe die Zeile jetzt folgendermaßen korrigiert:


    FOR IMTW := LINDX[JNTK] TO JNTW-1 DO


    Dann kommt der Compiler schon ein Stück weiter:


    SEARCH

    < 2959>..................................................

    < 3009>..............


    <---

    Illegal character in text

    Line 3024

    Type <sp> to continue, <esc> to terminate, or 'e' to edit


    Die Zeile 3024 besteht aus 256 Leerzeichen (0x20) !

    Nach entfernen der Zeile, lässt sich das Programm CHESS.PAS fehlerfrei übersetzen.


    CHESS

    < 3632>.......................................

    3671 lines compiled


    INICON1 ..

    INICON2 .

    INICON3 .

    INICON4 ..

    READER ..............................

    .....

    CHESS ..............................

    ..............................

    ..............................

    ...........

    Beim Starten kommt allerdings folgende Fehlermeldung:


    RUN:


    Running...










    HELLO. WELCOME TO CHESS 0.5

    DEBUG/TRACE VERSION


    INITIALIZING VARIABLES AND ARRAYS.



    IO error: vol not found

    Segment INICON4 Proc# 1 Offset# 406

    Type <space> to continue




    Gruß, Josef