Hallo Besucher, der Thread wurde 14k mal aufgerufen und enthält 73 Antworten

letzter Beitrag von MasterAT am

Minigame programmieren

  • Jetzt hätte ich noch eine andere Frage: Wie macht man es am besten, wenn man einen Wert immer plus 40 nehmen will?
    Bei dem Colorram konnte man ja mit einer indirekten Adressierung arbeiten, weil man ja praktisch nur den vorderen Teil (die ersten beiden Ziffern) der Colrramadresse ändern wollte. Im Moment habe ich es so gemacht, dass ich 25 mal (also für jede Zeile) mir die Buchstaben aus einer Tabelle .text hole, aber es ist eben unübersichtlich und muss doch mit einer Art Schleife und Konstanten irgendwie besser möglich sein?
    Im Moment habe ich es so: (für den Hardscroll)
    loop lda 1025,x
    sta 1024,x


    lda 1065,x
    sta 164,x
    .... (25 mal)...
    inx
    cpx #40 ; 40 Buchstaben pro Reihe für jede Zeile holen
    beq texread
    jmp loop


    Und beim Auslesen der Buchstaben für x geht das alles wieder von vorne los... Wie kann man das besser machen?

  • mmmh. also du kannst natürlich wieder mit pointern und indirekter adressierung arbeiten, und ähnlich wie in dem ersten codeschnipsel zwei schleifen verschachteln... und in der äusseren schleife dann den pointer immer um 40 erhöhen.


    ABER - gerade wenn es darum geht bildschirminhalt zu scrollen wird man es in der regel lieber genau so machen wie du es jetzt auch gemacht hast, weil das nämlich viel weniger zyklen braucht.

  • Eigentlich kann ich ja gleich schon mal loslegen, bevor ich wieder Mist baue: Ich hatte vor die Chars mit Charpad zu machen. Probehalber habe ich erstmal 64 bunte Zeihen reingemalt. Wenn man diese jetzt speichert, speichert man sie im .ctm- Format. Was ist das? Ist das ein C64- Format, also einfach eine Datei, die man in ein .d64 kopieren muss und dann per asm öffnen kann, wenn man die Startadresse weiß? Oder muss man mit einem anderen Programm die Dateien auslesen, um an die Werte zu kommen?


    EDIT: Habe gerade gelesen, dass dies nur ein Pack- Format ist, wenn man Chars und Map usw zusammen speichern will. Man muss seperat speichern, dann kann man auch die Chars einzeln speichern und hat dann eine .chr- File. Aber wie behandelt man die?

  • ich hab charpad ne weile nicht benutzt... aber wenn ich mich recht erinner war das einfach ein "rohes" binary, sprich OHNE startadresse. siehst du aber leicht, wenn es 2048 bytes sind dann fehlt die, wenns 2050 bytes sind dann hats schon eine :) im ersten fall könntest du einfach mit irgendeinem hexeditor die fehlenden zwei bytes vorne dran pappen.

  • Ok, ich werde endlich wieder meinen C64 aufbauen und mich wieder in mein altes Programm reinarbeiten ;)


    Mein nächster Schritt wird sein, den Char- Satz zu ändern, um das Level darzustellen. Eigentlich möchte ich das am C64 machen, gibt es da ein Programm, was man empfehlen kann? In den Programmen kann ja immer das erstellte Char-set gespeichert werden. Wie bringe ich das Charset nun in meinen Assembler- Code?

  • fenris64: Das kommt drauf an ob Du auf dem C64 programmierst oder auf dem PC und dort dann auf den verwendeten Assembler.


    Auf dem C64 kommen solche Datenmengen gar nicht in den Assembler. Da lädt man einfach die Daten an die passende Stelle in den Speicher. Entweder vom Programm aus, oder während der Entwicklung von Hand. Wenn man dann ein ausführbares Programm haben möchte füllt man den Speicher mit einem Bytewert, zum Beispiel Nullen und lädt alle Daten und Programmdateien in den Speicher und speichert am Ende von der niedrigsten verwendeten Adresse bis zur höchsten. Die Ergebnisdatei kann man dann mit einem entsprechenden Programm komprimieren.


    Wenn Du einen Cross-Assembler auf dem PC benutzt, musst Du mal in der Dokumentation schauen mit welchen Anweisungen man Binärdateien an bestimmten Adressen einbinden kann.

  • ok, ich arbeite am C64 mit Turboass. Wenn ich einen Charset- Editor benutze, kann man ja meist nur das Charset speichern und nicht die Werte auslesen. Also muss ich wohl im Assembler die erstellte Datei laden und an die gewünschte Stelle im Speicher ablegen... Aber an welcher Stelle im Speicher speicher ich die Charset- Datei am besten ab? Hat jemand einen Code- Schnipsel, wie man statt des originalen Charsets einen alternativen an einer beliebigen Adresse verwendet?

  • [offtopic]Ganz ehrlich: Programmier lieber am PC! Nimm das C64Studio, da sind auch schon Editoren bei (u.a. Charset). Oder benutz zusätzlich CharPad. Die Zeichensätze hängst du einfach als Datei in den Quellcode.
    [/offtopic]
    Generell zu Zeichensätzen: lies dir die Wiki-Seiten durch (VIC,CharRom, Screen,usw). Du musst eine von vier Vic-Banken wählen, und die Position von Screen und Zeichensatz übergeben. Idealerweise hast du das Buch "Alles über den C64" zuhause, da steht alles drin :) Auch gut (aber schnell auch sehr fortgeschritten) ist die Codebase - dort findest du auch Quellcodes...


    [offtopic]Aber quäl´ dich nicht und mach´s am PC! :)[/offtopic]

  • Was meinst Du mit nur den Charset speichern aber nicht die Werte auslesen? Der Charset besteht doch aus Werten, halt wie jede Datei aus Bytewerten.


    An welche Stelle im Speicher Du den laden musst hängt davon ab welche VIC-Bank Du verwendest und wo Du dort den Zeichensatz ablegen möchtest. Dabei muss man immer daran denken, dass der VIC in Bank 0 und 3 von +$1000 bis +$1fff (relativ zum Bank-Start) immer den ROM-Zeichensatz sieht, egal was im RAM an der Stelle steht.


    So ganz generell musst Du mit dem Wert in $dd00 festlegen welche 16KiB der VIC vom Hauptspeicher benutzen soll, und in $d018 wo innerhalb dieser 16KiB Bildschirm-RAM und Zeichsatz für die Anzeige liegen sollen. Wenn Du jetzt alles so lassen willst wie beim Einschalten und nur den Zeichsatz statt bei $1000 bei $2000 haben möchtest, musst Du in $d018 die oberen 4 Bits auf %0001 setzen für Screen-RAM ab $0400 und Bits 3..1 auf %100 für Zeichensatz ab $2000:

    Code
    1. lda #%00011000
    2. sta $d018
  • Ok, erstmal vielen Dank für die Antworten, werde mich erstmal etwas belesen...Ich weiß schon, dass man am Pc komfortabler programmieren kann, aber ich fühle mich wohler, wenn ich auch alles am C64 hinkriege und den Pc benutze, um mir Arbeit zu ersparen, außerdem kann ich dann coden, obwohl meine Freundin den Pc blockiert ;-) Was gerade jedoch viel schlimmer ist, ist, dass meine Commodore-Hardware die Lagerung auf dem Dachboden nicht gut überstanden hat...das Stromkabel der fd2000 Ist beschädigt (Maus?) und meine 1581 hat 2 Disketten gelesen und liest plötzlich nur noch file not found...komme also gerade nicht mal an meine Daten...

  • Servus F64, hast Du tatsächlich 2009 damit begonnen und nun 2014 machst Du weiter ?
    Wenn ja alle Achtung, ich sehe mir nml gerade die Postzeiten an.


    Das mit Deinen Daten ist schlimm, Tipp: SD2IEC ( schau bei Ebay nach )!


    Bin auch "wieder" im 8 Bit Lager angekommen und versuche mich an einem RPG mit Scroller ...
    Mal sehen ... ^^


    Nimmt das Spiel eine Demoform an, wird ichs Euch natürlich demonstrieren ...

  • Hallo,
    also an Ehrgeiz hat es mir diesbezüglich nicht gefehlt, als der erste Scroll über den Bildschirm lief (also der erste Erfolg in ASM), war ich gepackt und ahtte endlich Hoffnung, es doch irgendwann hinzukriegen. Hatte nur zunächst echt keine Zeit, dann umgezogen und keinen Platz, jetzt baue ich mir gerade alles wieder auf.
    Leider geht meine FD2000 immer noch nicht (einmal kurz funktionierte sie nach einer Reinigung des Kopfes), aber ich bin am 22.Februar auf der "Interface" in Kiel, vielleicht weiß dort ja einer Rat...
    Wenn die Daten wirklich weg wären wäre es schon schade (immerhin lief schon der Charscroll, wenn auch nur mit wilden Buchstaben, man konnte ein Raumschiff steuern und schießen und 2 "Feinde" kamen angeflogen und Hintergrundmusik wurde abgespielt, als nächstes sollte die Kollisionsabfrage und ein Levelcharset kommen...), aber inzwischen wäre ich auch bereit von vorne anzufangen, falls ich mit der reparierten FD2000 die Diskette nicht lesen kann...
    Dann aber mit Crossdevelopment, man wird hier ja praktisch schon dazu genötigt ;)
    Erstmal rüste ich mich Hardware- mäßig besser aus, damit das Hobby noch mehr Spaß macht und kaufe mir nächsten Monat das Chameleon64, 128er Netzteil und einen TFT- Monitor 8)
    Ich sehe gerade, dass du dich auch mit Scrollings etc. beschäftigen willst... aber die anderen haben Recht: Wenn du das in ASM hinbekommst, dann lass Basic gleich ganz weg. Wenn man soweit ist, dass man ein Char-Scrolling in Asm programmieren kann (und verstanden hat), dann kriegst du auch ohne weiteres vieles andere auch hin, erst recht mit Basic- Kenntnissen (sowas wie Joystick- Abfrage, Sprites etc.). Schreibe auf jeden Fall wieder, wenn es wieder Fortschritte gibt...

  • Ja ich werde versuchen in ASM zu bleiben.
    Stimmt, ich fange gerade mehr oder weniger wieder an, Programmierkenntnisse habe ich ja genug,
    allerdings in anderen Bereichen und Sprachen (Pearl, ASP, "HTML(5)", Javascript, PHP/MySQL, etwas VB, XNA, Flash/Actionscript, ...)
    BASIC kannte ich damals am C64 im Schlaf und ich konnte viel umsetzen ...


    Jetzt reizen mich eben als Hobby, die Details ... Scrolls, Hiresbilder, Musik (Hintergrund usw.), ...


    Aber ich habe bereits meine Spieleidee in Einzelheiten zerlegt und beginne nun Step by Step einen Teil umzusetzen.


    Ich ermutige Dich aber, neu anzufangen, wir sind dann denke ich +/- auch dem gleichen Level, und könnten von
    gleichen Erfahrungen gegenseitig lernen ...
    ;)


    Besten Dank an die Forenveteranen hier, die uns dabei unterstützen. ( Special thanks to Kiri )