Junior ][ Computer Software

  • Wo doch heute Fettdonnerstag ist, habe ich mir mal kurz das alte KIM-Bandit angesehen und versuchweise auf 'Junior' übersetzt. Ist auf jeden Fall noch verbesserungswürdig, was die Pattern angeht. Die kann man nicht einfach so vom KIM übernehmen. Viel Spaß!

    Dateien

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Ich versuche gerade mit dem a65 im DOS-Fenster zu assemblieren und erhalte 1 Errors. Wie kann ich sehen, welcher Fehler das ist, denn es wird nichts ausgegeben? Ich habe den asm-File angefügt.

    Dateien

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hallo Norbert


    Ich versuche gerade mit dem a65 im DOS-Fenster zu assemblieren und erhalte 1 Errors. Wie kann ich sehen, welcher Fehler das ist, denn es wird nichts ausgegeben? Ich habe den asm-File angefügt.

    du musst den Assembler mit der Option L aufrufen, um das Output Listing zu erhalten. Also z.B. : a65 Test.asm -L Test.txt -o Test.hex dann kannst du in Test.txt sowohl den Assembler, als auch den assemblierten Code sehen. Wenn dann links neben der Zeilenadresse ein Buchstabe steht, ist hier der Fehler zu suchen. Die Fehler Codes findest du ab Seite 29 in der Anleitung des A65. Ein A bedeutet dann z.B. Illegal Addressing Mode.


    Edit: In deinem Code fehlt zum Schluss das Mnemonic END


    Edit2: Wenn du dein Programm dann per XModem hochladen möchtest, füge in deinen Assembler Code am Besten folgende Zeilen noch ein:


    ;****************************************************************************************


    ORG $0400-2 ; clear this two lines, if you

    DB $00,$04 ; are not useing the XModem load command


    ;****************************************************************************************


    ORG $0400 ; the program start address


    ;****************************************************************************************


    Dann hast du gleich die Ladeadresse für XModem mit im Binary File.

  • Hallo Jörg,

    danke für die Info! Kaum macht man's richtig und schon klappt es :) Hat funktioniert!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Auch das mit XModem klappt. Danke, guter Tip.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Auch das mit XModem klappt. Danke, guter Tip.

    Und am besten nimmst du dafür diesen universalen Code.


  • Danke!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Doch noch eine Frage. Ich bekomme beim Compilieren eine Warning, also keinen kritischen Fehler.


    D:\A65>A65 BEEP.asm Test.asm -L Test.txt -o Test.hex

    6502 Cross-Assembler (Portable) Ver 0.1+

    Copyright (c) 1986 William C. Colley, III


    fixes for LCC/Windows by HRJ Nov 2018


    Warning -- Extra Source File Ignored

    No Errors


    Wie bekomme ich das sauber hin, also auch ohne Warning? Das neue .asm File habe ich angehängt.

    Die Erklärung im Handbuch hilft mir da leider nicht richtig weiter, ich habe doch kein 'second file'.


    6.4 Warning -- Extra Source File Ignored

    The cross-assembler will only assemble one file at a time,

    so source file names after the first are ignored. To assemble a

    second file, invoke the assembler again. Note that under CP/M-

    80, the old trick of reexecuting a core image will NOT work as

    the initialized data areas are not reinitialized prior to the

    second run.



    LG Norbert

    Dateien

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • D:\A65>A65 BEEP.asm Test.asm -L Test.txt -o Test.hex

    Hallo Norbert,

    du hast nach Beep.asm noch die (von mir als Beispiel angegebene) Datei Test.asm anhängen. Deshalb der Fehler.

    Bei dir sollte die Eingabezeile also wie folgt lauten: A65 Beep.asm -L Beep.txt -o Beep.hex

    Das assembliert dann Beep.asm, erzeugt eine Ausgabedatei Beep.txt (Assembler Code + assemblierter Code), sowie die leider in Intel Hex Format erstellte Datei Beep.hex.

    Letztere musst du noch mit einem Programm wie hex2bin in eine binäre Datei umwandeln, damit der Junior damit umgehen kann.

    Ich nutze immer eine Batch-Datei, die das alles erledigt. Da ich nicht jedesmal die Batch-Datei ändern möchte, nehme ich als Namen für meine Assembler Codes daher immer Test.asm und speichere eine Kopie unter dem endgültigen Namen.


    Die Batchdatei Assem.bat sieht dann z.B. so aus


    Code
    a65 Test.asm -L Test.txt -o Test.hex
    Hex2Bin Test.hex
    del Test.hex
    @pause

    Die Batch dann einfach zusammen mit der Datei Test.asm, dem Assembler A65.exe und dem Konvertierprogramm hex2bin.exe in ein Verzeichnis legen und die Batch per Doppelklick ausführen. Durch den @pause Befehl bleibt das DOS Fenster offen und wartet auf einen Tastendruck. Damit hast du dann auch gleich die Möglichkeit zu sehen, ob eine Fehlermeldung angezeigt wird.


    Anbei nochmal das ganze Paket

  • Hallo Jörg,

    ah jetzt ist es klar, die Warning rührt also von den Assembler-Optionen her. Wäre ich jetzt so ohne weiteres nicht drauf gekommen, denn ich dachte, das ist dem Assembler egal, aber scheinbar nicht. Ich hatte schon im Code alles von links nach rechts gedreht.... Danke abermals!


    Liebe Grüße,

    Norbert

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Gibt es schon was Neues zur Tastatur? Du wartest sicher noch auf die Kappen, oder?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • :):):)

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Ich versuche gerade in einem Loop den Inhalt der Speicherzellen $0500 bis $05FF auf dem Display auszugegeben. Was mache ich falsch?

    Dateien

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Im asm fehlt mindestens mal wieder das "END" und bei Zeile 0405 steht kein #$05 sondern #§05.


    Ansonsten wird das alles auch ziemlich schnell sein, weshalb man evtl. da eh nix sieht.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Danke, stimmt!

    Der Teil

    A9 FF

    8D FF 1A

    2C FF 1A

    10 FB

    stellt eine Zeitschleife dar, die genau es ermöglicht, das Display zu beobachten.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Code
       040E   A9 FF         WASTE    LDA #$FF
       0410   8D 7F 1A              STA CNTD
       0413   2C 7F 1A      TEST    BIT CNTD
       0416   10 FB                 BPL TEST    



    Das da ... das habe ich sowieso nicht verstanden. Das macht irgendwie nur Sinnn, wenn die Adresse CNTD ($1A7F) sich irgendwie sehr schnell immer verändert. Selbsttätig.

    Ansonsten passiert da, daß #$FF in Adresse CNTD kommt, diese so gewissermaßen dann mit sich selbst verglichen wird und wird das Z-Flag geändert. Du testest aber mit BPL auf das N-Flag und das ist bei $ff (Bit 6 und 7 werden in N und V Flag kopiert) auf jeden Fall gesetzt. Daher wird dein BPL Sprung immer ausgeführt. Und damit wartet die Konstruktion dauerhaft ..., das ist bei #$ff (Bit 6 und 7 werden in N und V Flag kopiert) auf jeden Fall gesetzt und daher macht BPL genau gar nichts (weil BPL nur bei N=0 springt).

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

    4 Mal editiert, zuletzt von ThoralfAsmussen ()

  • CNTD ist eine Timeradresse. solange der Timer nicht abgelaufen ist, läuft der Loop.

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Teilweise gelöst. Aber gut Ding braucht scheinbar Weile. Das Prinzip ist mir klar, y-Register als Zähler, Tabelleninhalt damit indiziert in den Display-Buffer (Lo) schieben und ausgeben. bis $FF überschritten wird, zum Mitlesen die Zeitschleife. Also ähnlich wie in einer For-Next Schleife im Basic.

    Aktuell sieht es so aus wie im Anhang.

    Dateien

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Mir fällt gerade auf: was ich mache ist nicht die Ausgabe der RAM-Page 5, sondern der Inhalt y-Registers und konstant '5'.

    Es fehlt noch sowas wie

    BD 00 05 -> lade den Inhalt der Tabelle in $0500, y-indiziert

    STA POINTL -> in den Puffer


    To be continued...

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Was genau macht denn SCANDS / $1D88 ?? Und was sind $FA/$FB


    Für mein Gefühl machst du irgendwie nix, was irgendwas mit dem Inhalt der gewünschten Speicheradressen zu tun hat. Du lädst auch nichts indexiert, wie Du schreibst. Was da bisher passiert, ist, daß Du Y hochzählst und den Wert von Y in $FA speicherst. In $FB landet immer #$05. Ein Bytenanzeige ändert sich dann damit nur, wenn das SCANDS sich darum kümmert, daß das Byte aus der in $FB/$FA hinterlegten Adresse ausgelesen wird. Ansonsten würde ich bisher nur erwarten, daß sich evtl. die Adressangabe auf dem Display passend ändert (also von $0500 bis $05ff hochgezählt wird).


    Bei der Warteschleife verstehe ich bis heut nicht, warum da da ein BPL nimmst. Ich würde irgendwie ein BNE (oder BEQ (?)) erwarten. Außerdem muß man sicherstellen, daß der Timer nicht am Anfang schon den Wert hat auf den man testet.



    Ansonsten: das Speichern von #$05 in §FB kann man sich möglicherweise einfach komplett sparen (nur nicht, wenn irgendwie das Monitorprogramm zwischendurch die Sachen überschreibt). Und möglicherweise macht es sich auch wesentlich angenehmer das Y Register einfach mit STY $FA abzuspeichern. Dann kann auch das TYA wegfallen.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Hallo Norbert,


    das Problem ist, dass SCANDS das Y Register (und auch das X Register) ändert. Du musst das also noch so ändern

    Code
    TYA
    PHA
    JSR SCANDS
    PLA
    TAY

    Ausserdem ist die Adresse für den Zähler falsch, CNTD (T/1024) liegt bei Adresse $1A97, nicht bei $1A7F. Letzteres ist das höherwertige Adressbyte des IRQ Vektors, weshalb die BIT Operation immer sofort durchläuft. Mit der richtigen Adresse läuft dann zwar alles lesbar langsam durch, aber das Display flackert stark. Du müsstes also während des aktiven Wartens die SCANDS Routine aufrufen.

  • Bei der Warteschleife verstehe ich bis heut nicht, warum da da ein BPL nimmst. Ich würde irgendwie ein BNE

    Durch den BIT Test werden ja automatisch die Bits 7 und 6 des zu prüfenden Wertes in die entsprechende Position des Statusregister kopiert. Bit 7 wird also in das N Flag kopiert und wird 0 (also Plus), wenn der Timer < $80 wird. Ich würde also - wie Sebastian schon angedeutet hat - statt des BIT Tests und des darauf folgenden BPL LOOP ein LDA CNTD und dann BEQ LOOP nehmen, da sonst der Timer immer nur zur Hälfte herunterzählt.

  • Hallo Jörg,

    danke für diese Infos. Ich werde das ganze heute Abend ausprobieren, da ich unterwegs bin. Dankeschon mal euch beiden!

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Ist jemand ein Tool bekannt, mit dem man .txt-Files, die ein Basic Program als Text enthalten in Enhanced Basic .bas-Files umwandeln kann?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Hallo Norbert,

    ich denke, du meinst da einen vom Junior gespeicherten .bas File. Das ist leider ein echtes Ärgernis. EhBasic hat ja keine richtige Save Routine eingebaut. Man muss also entweder den bereits in Token zerlegten Code speichern (das praktikabelste) oder den ASCII Text raus streamen, was nur gehen würde, indem man soz. den List-Befehl dazu nutzt, da dieser die Token wieder in Text umwandelt. Das wäre aber natürlich richtig langsam.


    Ein (PC) Konvertierungsprogramm gibt es meines Wissens nach leider nicht. Das gälte es noch zu schreiben.


    Edit: Ich werde diese Woche mal schauen, ob ich das auf die Schnelle hinbekomme.

  • Hallo Jörg,

    ....und den umgekehrten Weg: ich kopiere einen Text (Programm) aus einem Buch und will das im Basic einfügen. Ich kann mir vorstellen, dass das scheitert, das heißt man müßte dazu einen Basic-Compiler auf dem Junior selbst haben. Liege ich da richtig?

    ___________________________________________________________________________________________________

    "Traue niemals einem Computer, den du nicht aus dem Fenster werfen kannst" (Steve Wozniak)

  • Unter Tera Term kannst du das einfach per Copy Paste machen. Das geht ohne ASCII Tastatur atürlich einfach per Rechts Klick auf die Maus.

    Mit angeschlossener Tastatur musst du dann in Basic zuerst mit IN#0 auf die Terminal Tastatur umschalten, dann die rechte Maustaste drücken, um den Code einzufügen. Danach wieder mit IN#3 zurück auf die ASCII Tastatur. Sorry, geht leider nicht anderns.


    Edit: Da muss man allerdings ziemlich aufpassen, dass da keine Steuerzeichen im Basic Text Code drin sind. Ich hatte damit auch schon meine liebe Mühe.