Hello, Guest the thread was viewed2.1k times and contains 26 replies

last post from steril at the

Atari + 65816 = Amiga Killer ?

  • Der 68000er hat so viel mehr Register, so viele Befehle und so viele Adressierungsarten. Das ist schon cool.

    Dafür ist er bei der Abarbeitung der Befehle deutlich langsamer. Das ist der Hauptgrund, warum der Apple IIgs "nur" mit 2.8MHz läuft: bei gleichem Takt wäre er schneller als ein Macintosh mit einem 68000 gewesen. Damit lässt sich das "Profigerät" natürlich nur schwer verkaufen.


    Jetzt aber mal Spaß beiseite. Nach ein bisschen IIgs Coding kann ich sagen, dass der 65816 nicht einfach nur ein "6502 mit 16 Bit" ist, sondern ein Prozessor, bei dem man viel neu lernen muss, und der halt auch einen 6502 Kompatibilitätsmodus hat. Leider sind die Schwerpunkte komplett falsch gesetzt. Man hat z.B. 5 (in Worten: fünf) verschiede Modi in denen die Kiste zu jeder beliebigen Zeit laufen kann. Deshalb gibt es keinen Disassember für statischen Code. Zumindest ist mir keiner bekannt, und cc65 hat nur für diese CPU keinen. Richtig schlimm ist aber: keiner davon kommt ohne die ersten 64k RAM aus. Dort muss immer die Direct-Page und der Stack liegen. Beides sind 16-Bit Register, den Stack kann man auch in einen 16-Bit Modus schalten.


    Was sich gelohnt hätte, wäre ein Modus in dem man quasi eine "virtuelle Instanz" in einer eigenen 64k Bank aufmachen könnte. Dort würde dann Code, der nicht explizit Bank-übergreifend arbeitet, in seiner eigenen Welt laufen, komplett getrennt von anderen 64k Bänken. Man muss dann "nur noch" den Kontextwechsel brauchbar in Software implementieren (anpassen vom Stack, z.B.) und der Prozessor hätte dann Spaß gemacht. Aber so was geht halt nicht, weil DP und Stack nur in den ersten 64k laufen können. Chance vertan.


    Für mich wirkt der 65816 so, als wäre er nur ein Prototyp und nicht fertig geworden, und zu Ende entwickelt wäre da was schickes bei rausgekommen. Quasi der Commodore 65 unter den CPUs.

  • Der 68000er hat so viel mehr Register, so viele Befehle und so viele Adressierungsarten.

    Gut 1 Register mehr hätte dem 65816 auch gut getan. Aber Adressierungsarten? Ich als alter 6510 Junkie vermisse da eigentlich nix, aber wenn man nicht weiß was einem fehlt... Mit 68k hab ich mich nur rudimentär beschäftigt. Kannst du 1-2 Beispiele nennen wo mit dem 68k dank seiner Adressierungsarten etwas deutlich effizienter (und/oder bequemer, hehe) zu lösen ist?

    Also ein Beispiel:

    Alle Register (3; A,X,Y) auf den Stack schieben 6502:

    pha

    txa

    pha

    tya

    pha


    Alle Register (15; d0-d7/A0-A6) auf den Stack (A7)schieben:

    movem.l d0-d7/A0-A6, -(A7)


    addieren

    6502

    ohne carry:

    clc

    adc #$0a

    mit carry:

    adc #$0a



    68000 (ohne Carry oder Xentend Flag)

    add.b #$0a,d0

    mit Xtented Flag (so was wie mit Carry)

    addx.b #$0a,d0

    mit Carry bzw. X ist es also genauso


    Und man würde man so was wie Objekte haben, z.B. für ein Spiel

    6502

    Mehrer Arrays verteilt über den Speicher und dann würde man schreiben

    X ist dann die Nummer des Objekts

    lda Eigenschaft,x


    am 6800er hätte man so was wie ein zusammenhängendes Objekt, das wäre dann z.B. in A0. Die Objekte hat man dann in einer Liste anstatt in Arrays

    Dann würde man schreiben:

    move.w Eigenschaft(a0), d0

    Für das nächste Objekt:

    move.l nextObj(a0),a0


    Ich muss jetzt nicht erwähnen das Listen dynamischer und flexibler sind als Arrays, oder?


    Beim 68000er kann man bei fast jedem Befehl/Adressierungsart auswählen ob man 8/16/32 Bit haben will, jeweils mit .b,.w und .l


    Die Shift und Rotierbefehle kann man bis zu 31 mal shiften/rotieren anstatt das immer wieder zu schreiben, so was wie

    lsl.l #20,d0 statt auf evtl. 4 Speicherstellen alles nach links zu shiften.


    Das ist nur ein kleiner Ausschnitt der Vorteile am 68000er, gibt natürlich noch viel mehr.


    Ja mit dem 6502 kann man das auch alles machen, aber manchmal ist es dann wesentlich komplexer. Und wegen dem Registermangel beim 6502, klar man kann auch vieles in die Zero-Page verschieben.


    Also klar kann man alles auch auf dem 6502 lösen aber manchmal wird es unnötig kompliziert. Deshalb würde ich auch sagen man programmiert einfach anders, oder?

  • Zum 65816 in Bezug auf SNES gibt es einen ganz interessanten Text (eine alte README-Datei zu einer Entwicklungsumgebung fürs SNES auf dem Mac):


    Stand vor Jahren mal in diesem Post (leider geht Direktlink nicht wegen G**gle, müsst ihr "von Hand" die Lücken schließen und kopieren):


    https://groups.g o o gle.com/g/rec.games.video.marketplace/c/KYuRpH1Tb-Q/m/yw64qPLeoisJ


  • Ein schönes Beispiel dafür, dass der 65816 eben kein 6502 mit 16 Bit ist. Der 65816 Code hierfür wäre:
    pha

    phx

    phy

    (Das ist er genau genommen schon mit dem 65c02.)


    Es geht hier um den Vergleich 65816 mit 68000. Mach Dir bitte die Mühe für einen fairen Vergleich auch nachzuschlagen, wie das auf den 65816 aussehen würde. Danke.

  • So toll ist der 68000er im Amiga auch nicht.

    Beim 68000 (NICHT bei den Nachfolgern) ist der Speicher von 0x000 bis 0x3ff fest mit den Interrupts verdrahtet. Zu allem Übel liegt da beim Amiga das viel zu langsame Chip-RAM. Das merk man richtig, wenn man 4 Bitplanes Hires einschaltet und sich dann wundert, warum die IRQs viel zu spät kommen, selbst wenn der Code im FastRam liegt. Alles ziemlich vermurkst.

    Wäre nett gewesen, statt auf den 68000er gleich auf den 68010 zu gehen. So immens war der Preisunterschied auch damals nicht.


    Quote

    Was sich gelohnt hätte, wäre ein Modus in dem man quasi eine "virtuelle Instanz" in einer eigenen 64k Bank aufmachen könnte. Dort würde dann Code, der nicht explizit Bank-übergreifend arbeitet, in seiner eigenen Welt laufen, komplett getrennt von anderen 64k Bänken. Man muss dann "nur noch" den Kontextwechsel brauchbar in Software implementieren (anpassen vom Stack, z.B.) und der Prozessor hätte dann Spaß gemacht. Aber so was geht halt nicht, weil DP und Stack nur in den ersten 64k laufen können. Chance vertan.

    Hätte man vom 8086 abgucken müssen, da nennt sich so was dann Segment-Register. War eventuell patentiert :-)

  • Den 68000 gab es aber von vielen Herstellern, das sorgte sicher für Preisnachlässe.


    Der Atari ST sollte übrigens zuerst den NS32016 bekommen. So richtig zufrieden war man damals wohl auch mit dem 68000 nicht. In der Lisa war der 68K auch sehr langsam.


    Micha

  • Bei den Prozessor-Schwanzvergleichen halte ich mich mal raus. :D
    Meine Präferenz ist ja bekannt... :D (Ich ziehe übrigens auch den M6809 extremst dem 6510 vor. Motorola hat für mich einfach die wesentlich besseren CPUs gebaut).


    Zum Thema SNES: Ich hab mich jetzt auch nicht SO massiv damit beschäftigt, aber man merkt schon an einigen Stellen, dass sie den NES-Codern den Umstieg so einfach wie möglich machen wollten. Das fängt schon bei der Auflösung an, und geht an vielen anderen Stellen im Chipset weiter die sehr sehr ähnlich funktionieren. zB das Palettenhandling.

    Und der Erfolg hat ihnen da wohl auch ein wenig recht gegeben.