Hallo Besucher, der Thread wurde 2,6k mal aufgerufen und enthält 17 Antworten

letzter Beitrag von greg64 am

Scientific BASIC

  • Habe noch ein Schatz ausgegraben:



    Scientific-Basic


    Mit 100-Seitigem Handbuch (PDF) , Cover-Hülle für die Diskette und Buch und natürlich die *.d64 Datei.
    einige "Schmankerl":


    23 neue reelle Funktionen,
    6 neue Operatoren,
    komplexe Arithmetik,
    Matritzenoperationen,
    Grafikbefehle
    bessere Programmstrukturen (Basic arbeitet mi Label...)
    Grafik-Befehle,


    usw.


    Zum Ausprobieren mal hier die D64-Datei.
    Zur Beachtung: keine Schnellader oder Erweiterungen (ausprobieren ), LOAD "LADER",8 .. RUN - muß so sein, da der Lader nur so ohne Druckeranpassung läd.

  • Hab es so zum Laufen gebracht:


    di=0
    goto 520
    Probiert hab ich dann ein Programm z.B.
    LOAD"GRAPH*",8


    RUN


    Ob das ",8" tatsächlich gebraucht wird weiß ich nicht, ich hab's mit SpeedDOS+ probiert, wo ",8" nicht notwendig ist.

  • Die PAR-Dateien dürften Druckersteuerungssequenzen für unterschiedliche Drucker am Parallelport sein.
    Nur die Berechnung im Programm "LADER" kommt mir komisch vor.

    Code
    1. 250 DI=PEEK(184) : REM SEK-ADR.


    Das ist aber die Filenumber (ist immer 1), die Sekundäradresse wäre an Speicherstelle 185.
    Bei mir unter SpeedDOS+ habe ich da 96 und das daraus resultierende Grafikzeichen korrespondiert nicht mit den vorhandenen "PAR*"-Dateien.
    Der Dateiname ergibt sich zu "PAR" + CHR$(DI - (DI=44))
    Also falls DI gleich 44 ist, wird es zu 45 gemacht ("-" Zeichen).


    Mir scheint das Ladeprogramm buggy zu sein. Ich hab aber auch nicht verstanden, wie die Druckererkennung so funktionieren soll ...

  • Ah, das Manual klärt auf:


    LOAD"LADER",8,0


    Startet ohne Druckeranpassung (das macht das, was oben im Workaround "extra" gemacht wurde).
    Die angebliche Variante für einen MPS801 mit


    LOAD"LADER",8,1


    funktioniert aber nicht. Da kommt es zum initial beschriebenen Fehler. Da ist auch das Manual nicht korrekt (siehe Seite 35 ff).
    Es meint dort "1", das würde dann aber als PETSCII-Code 49 entsprechen, damit würde dann "PAR1" geladen werden, wenn man mit


    LOAD"LADER",8,49


    startet.

  • Habe noch ein Schatz ausgegraben:
    .........


    Zur Beachtung: keine Schnellader oder Erweiterungen (ausprobieren ), LOAD "LADER",8 .. RUN - muß so sein, da der Lader nur so ohne Druckeranpassung läd.

    Wer lesen kann...


    Es geht auch, wenn man den Lader nur läd; List 520 ausfuhrt; die Zeile löscht ( Enter nicht vergessen ) und in der
    Zeile 110 die , 520 , löscht.
    Noch einmal mit List 520 und List 110 kontrolliern.
    Man kann den Lader unter anderem Namen ( z.b. Starter ) speichen, dann hat man das für später...


    Erst jetzt RUN ausführen !


    Das mit der Druckererweiterung geht nur, wenn ein realer Drucker an einem realen C64 angeschlossen ist.
    Es erfolgt eine Abfrage des Lader über #4 (siehe Zeile 250 )


    250 DI=PEEK(184) :REM SEK-ADR


    (Sekundäradresse) wenn keine angegeben wird gibt es keine...
    Dann laüft die Zeile 520 ins leere und es wird kein Drucker geladen...


    520 IF DI THEN LOAD ......

  • Nö, Stimmt so nicht.
    Im Handbuch steht: LOAD "Lader",8,Di
    LOAD"LADER",8,0 heisst: Lade Drucker ohne Anpassung (Aber einen Drucker) - der ja nicht vorhanden ist !!! (#4)
    Nur wenn " Di " nicht angegeben wird, gibt es keine Sekundäradresse also kein DI
    Dann wird im Lader die Zeile 110 und 520 korrekt ausgeführt .

  • Nö, Stimmt so nicht.Im Handbuch steht: LOAD "Lader",8,Di
    LOAD"LADER",8,0 heisst: Lade Drucker ohne Anpassung (Aber einen Drucker) - der ja nicht vorhanden ist !!! (#4)
    Nur wenn " Di " nicht angegeben wird, gibt es keine Sekundäradresse also kein DI
    Dann wird im Lader die Zeile 110 und 520 korrekt ausgeführt .

    Sicher stimmt das Ich hab's ja real ausprobiert. Bitte lies mein Posting genau durch.


    Wenn man LOAD "LADER",8,0 verwendet, wird keine CAR*-Datei geladen, weil dann nämlich die Sekundäradresse 0 ist und damit die Variable DI den Wert 0 hat. Damit wird das LOAD in Zeile 520 gar nicht aufgerufen. Wenn man kein Hardcopy macht, ist das ja völlig egal, ob eine Druckeranpassung geladen ist oder nicht.
    Außerdem ist auf Seite 37 beschrieben, dass die Hardcopy-Routine automatisch einen Datei namens "parameter" heranzieht, wenn die Druckeranpassung nicht vorhanden ist. Man kann diese Datei durch Kopieren einer passenden CAR*-Datei erstellen.


    Wenn DI (als Parameter von LOAD) nicht angegeben wird, dann hängt es von aktuellen BASIC-ROM ab, was nach dem LOAD als Sekundäradresse gesetzt ist. SpeedDOS+ hinterlässt den Wert 1 (mit Standard-ROM hab ich's nicht getestet, da könnte es tatsächlich 0 sein). Es gibt immer eine Sekundäradresse, also einen Wert in Speicherstelle 184, auch wenn er 0 sein sollte.
    Die Zeilen 110 und 520 werden immer korrekt ausgeführt, solange damit die richtig CAR-Datei erreicht wird.
    Das kann ja jeder mit dem bereits zitierten Beispiel LOAD"LADER",8,49 probieren. Das lädt nämlich "CAR1", weil 49 der PETSCII-Code für "1" ist.
    Und LOAD "...",8,1 funktioniert (entgegen der Behauptung im Manual) eben nicht, da es keine Datei "CAR"+CHR$(1) auf der Diskette gibt. :D

  • War ja in den Vorpostings ja schon erklärt. Vor allem braucht man nicht im BASIC-Programm herumfrickeln, wenn man das durch Angabe eines 3. LOAD-Parameters (=Sekundäradresse) wesentlich einfacher vermeiden kann. ;)

  • Ich überprüfe das und werde es schnellstmöglich korrigieren ! Ist aber nicht weiter schlimm, Hier einmal die unbearbeitete Version der Seite.
    ( Im der Batch-Konvertierung war mir ein Fehler unterlaufen. Bei Seite 93 war der 2. Stapel durch und der letzte Start hat dann die Seite 94 als 93 gespeichert ...)


    Seite 093.pdf

  • Sicher stimmt das Ich hab's ja real ausprobiert. Bitte lies mein Posting genau durch.
    Wenn man LOAD "LADER",8,0 verwendet, wird keine CAR*-Datei geladen
    ........
    Die Zeilen 110 und 520 werden immer korrekt ausgeführt, solange damit die richtig CAR-Datei erreicht wird.
    Das kann ja jeder mit dem bereits zitierten Beispiel LOAD"LADER",8,49 probieren. Das lädt nämlich "CAR1", weil 49 der PETSCII-Code für "1" ist.
    Und LOAD "...",8,1 funktioniert (entgegen der Behauptung im Manual) eben nicht, da es keine Datei "CAR"+CHR$(1) auf der Diskette gibt. :D

    Dann hast du aber das erste Posting nicht gelesen.

    Habe noch ein Schatz ausgegraben:



    [Bild]
    ...
    Zur Beachtung: keine Schnellader oder Erweiterungen (ausprobieren ), LOAD "LADER",8 .. RUN - muß so sein, da der Lader nur so ohne Druckeranpassung läd

  • Dann hast du aber das erste Posting nicht gelesen.

    Das schon, aber wie ich geschrieben habe, teste ich das unter einer SpeedDOS+-Umgebung an das hilft der Hinweis auch nicht weiter, weil hier SpeedDOS implizit als Sekundaradresse 80 hat, auch wenn ich mit LOAD"LADER",8 lade. Somit ist das zumindest für SpeeDOS+-User oder auch für andere Kernal-Versionen vollinhaltlich korrekt, was ich schrieb (nämlich den Hinweis darauf zu geben, wie man das explizit steuert und sich nicht auf irgendwelche internen Zustände des Kernals zu verlassen ...).
    Das erste Posting gilt jedenfalls für den Standard-Kernal (ich weiß, man kann freilich nicht ahnen, dass es bei anderen nicht funktionieren wird). :D