An was bastelt ihr gerade (Computer bezogen)?

  • ... schreibt der einfach 6309 da hin, ...
    Aber ich hab vor ein paar Wochen erfahren, dass der 6309 im EPSON HX20 drinnen steckt und das es eine 6809 "Variante" ist. 6809 war sich ein recht guter Prozesor.

    Aber kurz zurück zu meinem 6502 Problemchen:
    Ich hatte einen netten C-Code für ein kleines SID Demo gefunden in C schön elegant und Modular.
    Übersetzbar mit dem cc65 Compiler, für den C64, es funktionierte auch sofort im VICE Emulator.
    Dann habe ich mir mal den SID.S Assembler Code angeschaut, die übergeben da Parameter auch über den Stack,

    benutzen dafür aber ein paar eigenartige Lib Funktionen. evtl. werwenden die da einen emulierten Stack.
    So weit hab ich es nicht untersucht.

    Dann wollte ich auch Parameter über den normalen 6502 Stack übergeben, in meinem Fall maximal fünf 8Bit Parameter.
    Z.B. so:
    lda #$12 ; Param 4

    pha

    lda #$34 ; Param 3

    pha

    lda #$56 ; Param 2
    pha

    lda #$78 ; Param 1

    pha

    lda #$AA ; Param 0

    jsr my_funktion

    sta <Ergebnis>

    ...


    So wollte ich das halt machen.
    Geht auch, nur in der my_funktion muss man die Parameter da einzeln wieder raus kratzen, was auch schon geht.
    Hierzu hab ich eine getParam Funktion gebastelt und schon getestet.
    Aber das alles ist eigentlich schrecklich kompliziert und unhandlich.
    Dann wollte ich in der Funktion den Stack wieder korrigieren (noch unerledigt).
    Rückgabewert der Funktion über Akku.

    Das alles war zwar recht interessant, ist aber unsinnig.
    Besser man legt die Parameter doch in die zero Page auf fixe Adressen.

    Oder hat jemand eine andere bessere Idee ?

    Evtl. sollte man diese Diskussion tatsächlich in einen Thread umpacken, z.B. 6502 Programming Tricks odere so.

    6502 Erfahrung habe ich so gut wie keine.
    Andererseit ist der Prozessor schon irgendwie interessant.
    Er war ja nicht umsonst so extrem erfolgreich.

    mfG. Klaus Loy

  • Erfolgreich war er wohl v.a., weil er spottbillig war. Und das hat mit dem Befehlssatz o.ä nicht viel zu tun - eher mit der Zukunftsvision und den Wünschen des "Erfinders" (CP).


    Den Stack kann man auch manuell bedienen, weil man immer weiß, wo der gerade steht und man die Sachen da auch direkt reinschreiben kann und dann mit TSX und TXS den Stackpointer anpassen kann. Evtl. kommt dir das ja entgegen. Üblich ist aber eben wirklich - wie tofro oben schon geschrieben hat - sowas einfach anders zu machen. Beim 6502 (7501/8501) ist die Zeropage quasi sowas wie ein erweiterter Registersatz. Die schnellen Zugriffe dort kompensieren die fehlenden Register; aber man muß das natürlich auch so benutzen. Ist also mehr ein Frage des "Umdenkens". Man kann sich den 6502 auch als eine Art ARM mit nur einem Register denken, dann wird es evtl. verständlicher, was da jetzt noch komplex erscheint. Kurz: Ja, das Ding ist eigentlich eine sehr sehr reduziertes und rudimentäres Teil, aber genau das macht wohl den Reiz aus.

  • > Zeropage quasi sowas wie ein erweiterter Registersatz
    schon klar.


    Aber ich hätte halt gerne nur mit "lokalen Variablen", ohne fixe Adressen gearbeitet.
    Das hätte ich elegant gefunden, dafür wurde dann aber Code "schrecklich".

    > Erfolgreich war er wohl v.a., weil er spottbillig war.
    Auch klar. Aber er musste wohl auch technisch gut gewesen sein, sonst hätte es da nice sie coole und ausgeklügelte Software dafür gegeben.

    mfG. Klaus Loy

  • Das geht schon auch, dafür nimmt man indiziert indirekte Y Adressen. D.h. LDA ($D0),Y oder sowas.

    Da Deine Funktion weiß, wieviel Nummer sie erwartet, zählt sie dann einfach das Y hoch oder runter (INY,DEY) und eine Variable wird es, weil man den Inhalt von $D0/$D1 anpassen kann. Allerdings ist das dann auch relativ langsam.


    .data

    .5000 A0 B0 C0 B0 A0 90 80 70

    .5010 anderer 'Variablen'satz

    .5020 und noch einer


    LDA #$00

    STA $D0

    LDA #$50

    STA $D1


    .funktion

    LDY #$04

    LDA ($D0),Y

    use variable

    DEY

    BNE nächste Variable holen



    Auch klar. Aber er musste wohl auch technisch gut gewesen sein, sonst hätte es da nice sie coole und ausgeklügelte Software dafür gegeben.

    Hätte ich normalerweise auch so gesagt, aber mittlerweile würde ich schon denken, daß reiner Preis auch reicht. Die ganzen Homecomputers hätte es bei normalen Motorola Prozessorpreisen erst 8 Jahre später gegeben. Zumindest kann man das so sehen, daß das größte Geschenk von Chuck Peddle "an die Welt" war, daß er den Ablauf der Zeit beschleunigt hat - gekommen wäre das bestimmt, aber eben nicht so flott.


    Technisch "genial" ist am 6502 nicht so wirklich viel - aber es ist ein extrem gelungener minimalistischer Mix. Die Sachen gab es alle vorher schon woanders auch oder auch genau andersherum, aber hier hat es eben gut funktioniert und der Anbieter hat nicht so sehr aufs Geschäftliche geachtet. Die anderen mußten dann nachziehen - man müßte mal nach Z80 Angeboten zw. z.B. 1977 und 1983 schauen - gibt sicherlich eine eindrucksvolle Kurve.

  • Wen die "andere Philosophie des Programmierens" des 6502 interessiert, dem empfehle ich diese Videoserie. Dort hat jemand CP/M auf den 6502 portiert und das zeigt schon ein bißchen, wie man das mit dieser CPU macht, unter anderem auch mit einem automatischen Mechanismus zur Belegung der Zero Page und Runtime Relocation. Verfolgt man das, kann man sich ein bißchen einfühlen, wie man solche Projekte angeht - Das "Überstülpen" der Vorgehensweise, wie man das mit dem Z80 machen würde, funktioniert halt einfach nicht.

  • @ThoralfAsmussen,
    ich schau mal, ob ich meinen unfertigen Code auf ZeroPage Parameter umstelle.


    @tofro,
    danke für den Link, das werde ich mir rein ziehen.
    Schade, dass ich ab heute schon wieder zur Arbeit muss.
    Aber in Bayern ist ja der 06.01. ein Feiertag :)

    Bitte schieb diese coolen CP/M mit 6502 Link in den coole YouTube Thread rein.

    mfG. Klaus Loy

  • Aber ich hab vor ein paar Wochen erfahren, dass der 6309 im EPSON HX20 drinnen steckt und das es eine 6809 "Variante" ist.

    Es ist ein "aufgebohrter" 6809 mit erweitertem Register- und Befehlssatz von Hitachi.


    Was die im HX20 verwendete CPU betrifft, so widerspricht sich die deutsche Wikipedia. In der Kurzbeschreibung der technischen Daten wird zwar tastsächlich 6309 aufgeführt, aber im Fließtext steht 6301. Die englische Fassung spricht nur von 6301, ich denke, das kommt auch hin, also wohl doch keine 6309 im HX-20.

  • Technisch "genial" ist am 6502 nicht so wirklich viel - aber es ist ein extrem gelungener minimalistischer Mix. Die Sachen gab es alle vorher schon woanders auch oder auch genau andersherum, aber hier hat es eben gut funktioniert und der Anbieter hat nicht so sehr aufs Geschäftliche geachtet. Die anderen mußten dann nachziehen - man müßte mal nach Z80 Angeboten zw. z.B. 1977 und 1983 schauen - gibt sicherlich eine eindrucksvolle Kurve.

    Das geniale am 6502 ist nicht nur das einfache und damit günstige Design. Er ist auch schnell. Ein 1 MHz 6502 ist unterm Strich ungefähr so schnell wie ein 3 MHz Z80 (bei einem Programm mit vergleichbarer Funktionalität). Dazu muss man sich nur mal die Anzahl der Befehlszyklen anschauen. Es gibt im Netz einige Artikel dazu.


    Ein großer Nachteil des 6502 ist der kleine Stack. Dadurch sind Sprachen wie zum Beipiel C oder andere Sprachen mit lokalen Variablen oder das was Klaus hier vor hat, nicht so einfach umzusetzen.

  • Ein großer Nachteil des 6502 ist der kleine Stack.

    Mindestens ebenso schlimm finde ich, dass es keine echten 16 Bit Zeiger gibt. Wenn man einen Zeiger inkrementiert, muss man immer manuell prüfen, ob es einen Überlauf in's höherwertige Byte gab.

    Aber das macht ja gerade den schlanken Befehlssatz aus. Wenn man 16 Bit-Register haben will, kann man ja den Z80 nehmen.

    Jedes zusätzliche Feature hätte den 6502 teurer gemacht. Der eine will 16-Bit-Register, der andere eine großen Stack, der nächste hat noch irgendwelche tollen Ideen... ;)

  • Das alles war zwar recht interessant, ist aber unsinnig.
    Besser man legt die Parameter doch in die zero Page auf fixe Adressen.

    Hallo Klaus,


    die Parameterübergabe via Stack ist natürlich sehr Compiler zentriert. Bei einem Compiler ist die Übergabe in einem Stack Frame, bei ansonsten wenigen vorhandenen Registern die am einfachsten zu realisierende Möglichkeit für einen "standardisierten" Aufruf.

    In Assembler würde ich beim 6502 bei mehr als drei Parametern (in den Registern A,X,Y) immer die Zeropage nehmen und als Parameter eventuell einen Zeiger auf diesen Bereich übergeben. Hierfür hat der 6502 mit seinen Index Befehlen einfach einen genialen Befehlssatz, da du dann über die einzelnen Bytes des Übergabevektors z.B. mit LDA ZP-Adresse,X oder auch LDA (ZP-Adresse),Y drüber iterieren kannst.

  • Ein großer Nachteil des 6502 ist der kleine Stack.

    Mindestens ebenso schlimm finde ich, dass es keine echten 16 Bit Zeiger gibt. Wenn man einen Zeiger inkrementiert, muss man immer manuell prüfen, ob es einen Überlauf in's höherwertige Byte gab.

    Das ist doch typisch RISC. Gab in der Chip #1 ja den schönen Vergleich Block move mit 6502/1MHz und Z80/40 Mhz. Der Z80 Code sieht schön klein aus, der 6502 ist aber schneller.

  • Bei Ali gibt es 50 Universalriemen für 2€. Kaufe unterschiedliche, die Hälfte kann man problemlos nutzen.

    Ich hab da so einige Riemen, aber es passt keiner. Das sollte schon der originale sein.

  • Bei Ali gibt es 50 Universalriemen für 2€. Kaufe unterschiedliche, die Hälfte kann man problemlos nutzen.

    Ich hab da so einige Riemen, aber es passt keiner. Das sollte schon der originale sein.

    Der Originale ist entweder Lakritze oder zerbröselt.

    Wenn du mir die Maße nennst, schaue ich gerne nach, was ich da habe.

  • Der Originale ist entweder Lakritze oder zerbröselt.

    Wenn du mir die Maße nennst, schaue ich gerne nach, was ich da habe.

    Da muss ich mal schauen, ob ich die Maße irgendwie herausfinde. Ich hab das Laufwerk gekauft und der Riemen hat schon gefehlt.

  • Der Originale ist entweder Lakritze oder zerbröselt.

    Wenn du mir die Maße nennst, schaue ich gerne nach, was ich da habe.

    Da muss ich mal schauen, ob ich die Maße irgendwie herausfinde. Ich hab das Laufwerk gekauft und der Riemen hat schon gefehlt.

    Art und Dicke kannst du an den Rädern bestimmen, Außendurchmesser mit Bindfaden

  • Viel in den letzten Tagen:

    Der 286er von Eckhard den man leider knicken kann, bei dem ich noch Floppy testen muss

    Mein 286er den jetzt wohl Eckhard bekommt

    Das übliche Kleinzeug, viel Ware zu Kunden gebracht, aber heute dann der Knaller:


    Kunde: Wie lieben ihre MiniPCs, könnten sie die Windows 98 PCs auch in Englisch fertig machen?

    Ich: Bei einer Abnahme von 10 Stück (das ist tatsächlich viel Arbeit).

    Kunde bestellt 10 Stück = alle ausverkauft.