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ß!
Junior ][ Computer Software
-
-
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.
-
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!
-
Auch das mit XModem klappt. Danke, guter Tip.
-
Auch das mit XModem klappt. Danke, guter Tip.
Und am besten nimmst du dafür diesen universalen Code.
Code
Alles anzeigenPROG_START EQU $2000 ; Your Program Start Address USE_XMODEM EQU 0 ; 1 use XModem, 0 don't use XModem ;**************************************************************************************** IF USE_XMODEM EQ 1 ORG PROG_START-2 DB LOW PROG_START DB HIGH PROG_START ENDI ;**************************************************************************************** ORG PROG_START ; the program start address ;****************************************************************************************
-
Danke!
-
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
-
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
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
-
Gibt es schon was Neues zur Tastatur? Du wartest sicher noch auf die Kappen, oder?
-
Gibt es schon was Neues zur Tastatur? Du wartest sicher noch auf die Kappen, oder?
Hab sie vor etwa 15 Minuten bekommen und gerade im JC2 Haupt Thread darüber berichtet.
-
-
Ich versuche gerade in einem Loop den Inhalt der Speicherzellen $0500 bis $05FF auf dem Display auszugegeben. Was mache ich falsch?
-
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.
-
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.
-
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). -
CNTD ist eine Timeradresse. solange der Timer nicht abgelaufen ist, läuft der Loop.
-
Ah, OK - dann macht es deutlich mehr Sinn.
Bleibt natürlcih dann noch die Fage, warum der Rest nicht tut ... ode geht es inzwischen ?
-
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.
-
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...
-
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.
-
Mir fällt gerade auf:
... da schreib ich jetzt hier so einen großen Text - und dann steht das wesentliche schon da ...
-
Hallo Norbert,
das Problem ist, dass SCANDS das Y Register (und auch das X Register) ändert. Du musst das also noch so ändern
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!
-
Ist jemand ein Tool bekannt, mit dem man .txt-Files, die ein Basic Program als Text enthalten in Enhanced Basic .bas-Files umwandeln kann?
-
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?
-
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.