Hallo Besucher, der Thread wurde 5,9k mal aufgerufen und enthält 33 Antworten

letzter Beitrag von StingRay am

Programmieren auf dem Amiga - Speicherthematik [OT aus A500 und 2Mbyte Chip Ram]

  • Ich hätte gerne eine technisch genauere Aussage.
    Ich programmier selber Spiele für OCS Amigas, und hab immer wieder Probleme mit den verschiedenen Speicherkonstellationen.

    Dann müssen wir offenbar ein paar Begriffe klären: Du schreibst, dass Du programierst. Gleichzeitig hast Du aber Probleme mit verschiedenen Speicherkonstellationen. Das ist ein Widerspruch in sich.


    Wenn Du programmierst, dann machst Du für Speicheranforderung einen sauberen Malloc() und forderst damit die richtige Art Speicher an (Chip- oder Fastmem). Du bekommst eine Adresse oder einen Fehler zurück. Das funktioniert schon problemlos seit Kickstart 1.2.


    Wenn Du aber Adressen "hart" ansprichst, dann programmierst Du nicht. Das kannst Du vielleicht Coden nennen, so Mancher würde vielleicht "Hacken" sagen, aber Programmieren ist anders. Der Amiga hat ein OS. Bitte benutze es wenigstens für diese simplen Dinge, auch wenn die nächste Amtshandlung danach ein forbid() ist. Selbst in der Demoszene ist es seit Jahren Standard, dass man ohne Ressourcenschwund wieder zur Kommandozeile zurück kommt und den Rechner ohne Reset normal weiter benutzen kann.


    Jens

  • Viele Amiga-Spiele sind sehr hardwarenah programmiert worden. Dabei wurden einige Konventionen verletzt, welche bei nachfolgenden, moderneren Amigas dann zu Kompatibiltätsproblemen führten. Schnell schimpfte dann der Anwender/Spieler auf Commodore, weil eben die alten Programme nicht mehr gingen. Dabei war es eigentlich die "Schuld" der Programmierer, denn wenn diese sich an die Konventionen gehalten hätten, dann wären die Spiele auf auf neueren Amigas lauffähig gewesen.
    ALLERDINGS: Die Spiele hätten dann niemals so COOL aussehen können. Mittels direktem Zugriff auf die Hardware bekommt man eben tollere/schnellere/buntere Effekte auf dem Bildschirm. Allerdings nagelt man damit aber auch die Software genau auf eine bestimmte Hardwarekonfiguration fest.
    Und da kann es schon genug seinwenn an einer unerwarteten Stelle plötzlich Arbeitsspeicher vorhanden ist, dass das Programm nicht mehr funktionieren will.


    Ich hatte damals den "Flight Simulator" auf dem A500. Der wollte auch nur dann laufen, wenn die 512KB SlowRam im Trapdoor abgeschaltet waren.

  • ALLERDINGS: Die Spiele hätten dann niemals so COOL aussehen können. Mittels direktem Zugriff auf die Hardware bekommt man eben tollere/schnellere/buntere Effekte auf dem Bildschirm. Allerdings nagelt man damit aber auch die Software genau auf eine bestimmte Hardwarekonfiguration fest.

    Das ist speziell beim Amiga eine streitbare Aussage. Speicher hart anzusprechen ist in einem 32-Bitter mit 2G nutzbarem Adressraum eigentlich ein no-go. Ja, wenn man die Chipregister selbst befingert, bekommt man viel hübschere Dinge hin als mit dem OS. Aber nichts weiß besser über die Speicherconfig bescheid als das OS. Und es hätte niemandem weh getan, wenn man sich einfach nach dem Start ein paar dicke Speicherblöcke holt, und die dann selbst verwaltet.


    WHDload zeigt's: Auch die alten Dinger müssen nur minimal gepatcht werden, damit sie z.B. ohne Speicher bei $00c0.0000 (trapdoor) funktionieren. Und wenn Dein Flight simulator nur ohne Speichererweiterung funktioniert, hat der Malloc()-Aufruf nur den falschen Parameter gesetzt, vermutlich "any RAM" anstelle von "chip ram".


    Jens

  • Dann müssen wir offenbar ein paar Begriffe klären: Du schreibst, dass Du programierst. Gleichzeitig hast Du aber Probleme mit verschiedenen Speicherkonstellationen. Das ist ein Widerspruch in sich.
    Wenn Du programmierst, dann machst Du für Speicheranforderung einen sauberen Malloc() und forderst damit die richtige Art Speicher an (Chip- oder Fastmem). Du bekommst eine Adresse oder einen Fehler zurück. Das funktioniert schon problemlos seit Kickstart 1.2.


    Wenn Du aber Adressen "hart" ansprichst, dann programmierst Du nicht. Das kannst Du vielleicht Coden nennen, so Mancher würde vielleicht "Hacken" sagen, aber Programmieren ist anders. Der Amiga hat ein OS. Bitte benutze es wenigstens für diese simplen Dinge, auch wenn die nächste Amtshandlung danach ein forbid() ist. Selbst in der Demoszene ist es seit Jahren Standard, dass man ohne Ressourcenschwund wieder zur Kommandozeile zurück kommt und den Rechner ohne Reset normal weiter benutzen kann.


    Jens

    Ich hätte sicher weniger dieser Probleme wenn ich Adressen "hart" ansprechen täte.


    Genau das mache ich jedoch nicht, und meine Programme springen auch wieder brav zurück ins OS. Habe aber trotzdem oft bei einem und dem selben Code (nix "malloc()", hier geht's um asm) mehr oder weniger Probleme bei verschiedenen Configs wie der Speicher angesprochen wird.


    Äußert sich in kaputten Grafiken, die bei zb weniger Speicher noch sauber ausgeschaut haben.


    Also vielleicht einfach mal leise sein, bevor man irgendwelchen Bullshit unterstellt.

  • Also vielleicht einfach mal leise sein, bevor man irgendwelchen Bullshit unterstellt.

    Ich habe ganz offenbar keine falschen Unterstellungen gemacht, denn Du bestätigst selbst, dass Du die Exec-Funktion AllocMem() nicht benutzt. Dass ich jetzt das C-typische "malloc" benutzt habe, ist natürlich missverständlich. sorry dafür. ASM ist übrigens kein Ausschlusskriterium für saubere Programmierung.


    Peiselulli, wenn Du heute herausfinden willst, ob Speicher an einem bestimmten Block vorhanden ist, kannst Du die Exec-Funktion TypeOfMem() benutzen. Der gibst Du eine Adresse, und wenn NULL zurück kommt, ist da kein Speicher, Wenn was Anderes als NULL zurück kommt, sind das die Speicherattribute. So kann man "ganz sauber" proben, ob Hartes Adressieren nach dem Abschalten des OS in Ordnung ist. Kostet sicher nur ein paar zehn Bytes um zwei, drei Alternativen abzutesten, öffnet aber die ganze Amiga-Welt.


    Mehr dazu im RKRM Libraries, Kapitel 20, ab Seite 455.


    Jens

  • Wenn ich so einen Bla schon wieder lesen muss.
    Kein Wunder dass dich in dem Forum hier bald keiner mehr abkann.

    Lass' uns mal konstruktiv weiter machen - Du hast Code, der nicht mit allen Speicherconfigs funktioniert, und hast um Hilfe gebeten. Wenn Du einen direkten Hinweis auf Literatur, sowie zwei Library-Funktionen ausreichend findest, mich persönlich unsympatisch zu finden, ist das Deine Entscheidung. Außenstehende denken sich sicher ihren Teil.


    Wenn Du möchtest, bin ich diesbezüglich ab sofort still und überlasse Anderen das Debuggen Deines Codes. Hinweise stehen jetzt ausreichend zur Verfügung. Wir brauchen nur noch Deinen Code und ne Angabe, mit welchem Assembler Du arbeitest.


    Ach ja, und vielleicht sollte ein Mod mal einen neuen Thread abspalten, hat ja nichts mehr mit dem Ursprungsposting zu tun.


    Jens

  • Wenn Du einen direkten Hinweis auf Literatur, sowie zwei Library-Funktionen ausreichend findest, mich persönlich unsympatisch zu finden, ist das Deine Entscheidung. Außenstehende denken sich sicher ihren Teil

    Es geht hier nicht um den Inhalt, sondern wie immer bei dir um die Form.
    Deine herabkanzelnde Art kannst du dir echt stecken.


    Und dass Außenstehende sich schon länger sich ihren Teil über dich denken höre und lese ich leider jeden Tag.


  • Kein Wunder dass dich in dem Forum hier bald keiner mehr abkann.

    ?(

    Kommt mal wieder runter, Jens ist zwar oft etwas undiplomatisch jedoch hat das was er sagt oft Hand und Fuß.

    stimmt... :winke:


    PS: ich habe auch keine Ahnung vom Programmieren..


    aber ich kann verstehen, wenn Jens "es nicht verstehen" kann, wenn jemand programmiert und dann keinen Überblick :search: über Speicheraufteilung hat..

  • Ich habe ganz offenbar keine falschen Unterstellungen gemacht, denn Du bestätigst selbst, dass Du die Exec-Funktion AllocMem() nicht benutzt. Dass ich jetzt das C-typische "malloc" benutzt habe, ist natürlich missverständlich. sorry dafür. ASM ist übrigens kein Ausschlusskriterium für saubere Programmierung.
    Peiselulli, wenn Du heute herausfinden willst, ob Speicher an einem bestimmten Block vorhanden ist, kannst Du die Exec-Funktion TypeOfMem() benutzen. Der gibst Du eine Adresse, und wenn NULL zurück kommt, ist da kein Speicher, Wenn was Anderes als NULL zurück kommt, sind das die Speicherattribute. So kann man "ganz sauber" proben, ob Hartes Adressieren nach dem Abschalten des OS in Ordnung ist. Kostet sicher nur ein paar zehn Bytes um zwei, drei Alternativen abzutesten, öffnet aber die ganze Amiga-Welt.


    Mehr dazu im RKRM Libraries, Kapitel 20, ab Seite 455.


    Jens

    Du nimmst eben an, dass nur deine Art das zu handhaben die richtige ist.


    Wenn ich bei einer Config von 512KChip+512KSlow alles an Chipram brauche was geht, dann ist mir ehrlich gesagt das OS Schnuppe.


    Die gleiche Art von Diskussion hatte ich schon ein paarmal mit Thor im A1K. Man stellt eine Frage, und kriegt eine Grundsatzdiskussion darüber dass man das System OS-konform mit exec und graphics.lib zu programmieren hat, weil alles andere ja "Pfusch" sei.


    Das ist keine Hilfe, sondern einfach nur absnobben.


    jedoch hat das was er sagt oft Hand und Fuß.

    wirkt aber grad im MK2-Thread eher nicht so.


    aber ich kann verstehen, wenn Jens "es nicht verstehen" kann, wenn jemand programmiert und dann keinen Überblick über Speicheraufteilung hat..

    Immerhin hat's dazu gereicht:



    Hatte gedacht ich kriege hier ein paar sinnvolle Vorschläge, wie ich da ein paar Sachen speichermäßig glattziehen kann, aber anscheinend gibts leider nur "Ich und meine Art das anzugehen bin besser als du weil ich so toll systemkonform bin"-Gerede von jemanden, der anscheinend von Demo- oder Spieleprogrammieren auf nem A500 keinen Dunst hat.

  • Nimm dir das Gequarke bestimmter Forum 64 User nicht so zu Herzen. Inviyya sieht gut aus, daran solltest du unbedingt weiterarbeiten. Ich weiß, das du dich auch über diese dusseligen Youtube Kommentare zu deinem Merry Amiga Xmas Spiel geärgert hast. Konstruktive Kritik wirst du dort eh nie bekommen, dafür sind Retro-Foren halt da.

  • Nimm dir das Gequarke bestimmter Forum 64 User nicht so zu Herzen. Inviyya sieht gut aus, daran solltest du unbedingt weiterarbeiten. Ich weiß, das du dich auch über diese dusseligen Youtube Kommentare zu deinem Merry Amiga Xmas Spiel geärgert hast. Konstruktive Kritik wirst du dort eh nie bekommen, dafür sind Retro-Foren halt da.

    Irgendwie kam da einfach ein bisschen viel Mist von vielen Seiten zusammen über die letzten Tage.
    Und dann liest hier man noch den typischen extremst unhilfreichen "warum machst eigentlich nicht alles systemkonform?"-Post , und dann kocht einem die Galle schon mal über...


    Anyway, danke für deine aufmunternden Worte... :thumbup:



    Ich hab nur Chip-Ram (1MB) muss ich mich jetzt schämen?

    Im Gegenteil. Wäre toll wenn alles Chip Ram wäre.