Frage zu DOS-Interrupt21 und zu 6502 Programmierung allgemein



  • Hallo,
    vor einigen Ausgaben gab es in der Zeitschrift C't den Aufruf, für ein
    6502 Prozessor-System Programme wie Texteditoren mit Sourcecode zu schicken.

    Problem:
    ich dachte, hey, sowas lässt sich doch schnell machen...
    (mit dem, was ich jetzt mit DOS-Assembler gelernt habe)

    aber soweit ich bisher über den 6502 dessen Programmierbarkeit
    informiert bin, kann man hier Serviceinterrupts wie den
    Int21 unter DOS benutzen.
    Also dachte ich, schau ich mir mal den Interrupt selbst an, um zu Lernen...

    aber hier verstehe ich einiges überhaupt nicht gut (z.B. Befehle wie BOUND oder
    düstere FAR JUMPS, und Far jump Zwischenspeicherei und so.
    (Man findet zwar zu einigen Befehlen Definitorisches, ich kann aber Assemblerbefehle besser in einen verstandenen Programm-Zusammenhang lernen)

    Hierzu die Frage:
    Gibt es irgendwo kommentierte Dos-Interrupts.
    bzw. wie würde man denn beim 6502 beispielsweise eine Speicherdump-Ausgabe
    hinbekommen oder wie eine Call "Zeichen/Zahlen-Ausgabe" Subroutine?



  • Oha. So viel Verwirrung in einem Posting. 😃

    Der Reihe nach:
    Wenn du in DOS-Programmen int 21h aufrufst, sind das praktisch Aufrufe der DOS-API. Dh. um int 21h-DOS-Funktionen benutzen zu koennen, muessen mindestens 2 Systemanforderungen erfuellt sein:
    Dein System muss x86- und DOS-kompatibel sein.

    Beides trifft auf ein System mit 6502-CPU nicht zu!
    Der 6502 unterscheidet sich doch deutlich vom x86 - vor allem auch im Befehlssatz.
    So kennt der 6502 zB. gar keine Software-Interrupt-calls (int xyh )wie der x86 und meines Wissens gab/gibt es auch keinen DOS-Port fuer den 6502.

    Wenn du also fuer den 6502 programmieren willst, wirst du dich wohl komplett neu orientieren muessen. Mehr als die absoluten Basics fuer den Programmentwurf mit Assembler kannst du da vom x86 nicht mitnehmen.

    Wie du also fuer deine 6502-Programme irgendwelche Zeichen-Ausgaben hinbekommst, haengt wie meist bei Low-Level-Assembler vor allem von deiner Perepherie (Ausgabegeraet, zB. Graphikchip, usw.) oder dem evtl. vorhandenen Betriebssystem ab.
    Da koennte dir vielleicht jemand weiter helfen, wenn du mal verraetst, in was fuer einem Geraet dein 6502 denn steckt? Geht es um C64? Apple II? SNES?

    PS:
    Wenn du dich trotzdem noch fuer Code hinter den DOS-Interrupts interessierst, kann ich dir zB. ein Studium der Quellcodes von Free-DOS oder eine Debugging-Session durch die Interrupts auf einem echten DOS-System (in der Windows-VM wirst du da nicht viel Freude haben) empfehlen.



  • Nobuo T schrieb:

    Oha. So viel Verwirrung in einem Posting. 😃

    Ja, das ist sehr treffend 🙂

    Nobuo T schrieb:

    Da koennte dir vielleicht jemand weiter helfen, wenn du mal verraetst, in was fuer einem Geraet dein 6502 denn steckt? Geht es um C64? Apple II? SNES?

    ->eher eine theoretische Überlegung. Offenbar müsste erst ein kleines API
    geschrieben werden. Mir geht es mehr darum, Grundkonzepte zu lernen, Algorithmen usw. die sich übertragen lassen - auch auf neuere Prozessoren wie Arm, Cell(welcher mittlerweile auch schon wieder am veralten ist).

    Informationen über das Ctlab Projekt gibt es bei
    http://www.heise.de/ct/projekte/machmit/ctlab/wiki

    Nobuo T schrieb:

    Wenn du dich trotzdem noch fuer Code hinter den DOS-Interrupts interessierst, kann ich dir zB. ein Studium der Quellcodes von Free-DOS oder eine Debugging-Session durch die Interrupts auf einem echten DOS-System (in der Windows-VM wirst du da nicht viel Freude haben) empfehlen.

    Vielen Dank, daran an die Source Codes vom Free-Dos habe ich noch gar nicht
    gedacht. Sehe nämlich den Wald vor lauter Bäumen nicht. Jetzt weiß ich, wie ich fortfahre: Dos 6.22 booten, Asm Code des Interrupts verfolgen: -> debug a mov ah,02 mov dl,3f int 21 int 20 t t u ... 😋
    (und mal sehen, wie sich der der typische Absturz beim Tracen hier auswirkt)



  • derSchüler schrieb:

    vor einigen Ausgaben gab es in der Zeitschrift C't den Aufruf, für ein
    6502 Prozessor-System Programme wie Texteditoren mit Sourcecode zu schicken.

    wie jetzt? schwelgen die heise-fuzzis in nostalgie? echte 6502's dürften heute schwer zu kriegen sein, höchstens IP-cores für asics und fpgas. abkömmlinge dieser alten 8-bitter gibts aber noch bei freescale (68hcxx) und, ich glaube, bei renesas (als mikrocontroller).

    derSchüler schrieb:

    ich dachte, hey, sowas lässt sich doch schnell machen...
    (mit dem, was ich jetzt mit DOS-Assembler gelernt habe)

    nee, der verfrickelte x86-kram hat mit coolen prozessoren wie dem 6502 absolut nix zu tun (siehe nobuos posting).

    derSchüler schrieb:

    aber soweit ich bisher über den 6502 dessen Programmierbarkeit
    informiert bin, kann man hier Serviceinterrupts wie den
    Int21 unter DOS benutzen.

    nö, der 6502 kennt nur 2 echte hardware-interrupts, einmal den IRQ (abschaltbar) und den NMI (der kommt immer durch).

    derSchüler schrieb:

    aber hier verstehe ich einiges überhaupt nicht gut (z.B. Befehle wie BOUND oder
    düstere FAR JUMPS, und Far jump Zwischenspeicherei und so.

    'far' u.ä. gibts nicht beim normalen 6502. der hatte 'nen flachen 64K adressraum, einen 16-bittigen PC und die möglichkeit, durch kombination von zwei oder drei 8-bit werten (über die sogenannte zero-page (0x00...0xff)+offset im x- oder y-register auf den gesamten speicher vom programm aus zuzugreifen).

    derSchüler schrieb:

    (Man findet zwar zu einigen Befehlen Definitorisches, ich kann aber Assemblerbefehle besser in einen verstandenen Programm-Zusammenhang lernen)

    gibbet emulatoren für 6502's, damit kannst ja rumspielen.

    derSchüler schrieb:

    Gibt es irgendwo kommentierte Dos-Interrupts.
    bzw. wie würde man denn beim 6502 beispielsweise eine Speicherdump-Ausgabe
    hinbekommen oder wie eine Call "Zeichen/Zahlen-Ausgabe" Subroutine?

    für 6502 guckst du hier: http://www.6502.org/
    aber, wie gesagt, mit irgendwelchem furchtbaren x86-geraffel hat der 6502 absolut nichts gemeinsam.
    🙂



  • ;fricky schrieb:

    aber, wie gesagt, mit irgendwelchem furchtbaren x86-geraffel...

    @;fricky: hast Dich bestimmt vertippt: "...mit fruchtbarem x86-geraffel"
    :xmas1:


Anmelden zum Antworten