Ich glaube, die Idee hatte ich in der damaligen Boulderdash Diskussion mal erklärt, Doublebuffer für das Farbram. Da ging es darum, ob man BD mit Farbram scrollen kann. Der Trick besteht darin, die Charzeile ein zweites Mal auszugeben und auf einen zweiten Zeichensatz umzuschalten, damit hat man dann zwei zusätzliche Farben. Auch da war peiselulli mit ein Beispiel von der Partie.
Posts by Acorn
-
-
Version 3.2 war die letzte Version ohne GTK und ist für mich die beste Version zum Coden, man kann diese auch auf Deutsch umstellen. Zum Zocken nehme ich am liebsten Denise, dank FreeSync ruckeln Spiele mit Scrolling sehr, sehr selten, was bei Vice nicht der Fall ist. Als Alternative wäre noch Hoxs64 zu nennen, das noch aktiv weiterentwickelt wird und auch einen Monitor bietet.
-
Im letzten Byte wird oft die Spritefarbe gespeichert.
-
Nach langer Zeit mal wieder auf was gestoßen, bei Version 7.7 und 7.8 geht kein bedingtes Assemblieren mehr, wenn darin ’!FOR !END’ vorkommt und der Code dabei nicht erzeugt wird.
-
Ich halte diese Formulierung für diskutabel. Meine Meinung: Doch, es funktioniert auf einem serienmäßigen C64, aber man braucht noch das Modul dazu.
Man sollte bei der REU aber auch nicht unterschlagen das diese die Fähigkeiten des C64 stark erweitert. Der zusätzliche Speicher ist schon fast nebensächlich im Verhältnis zum DMA-Transfer. Die 1541 ermöglicht dagegen nur den schnelleren Datenaustausch, aber keine direkte Beschleunigung des C64.
-
Jo so eine Eselsbrücke kann ich mir hoffentlich merken.
AND %00000000 zum löschen
ORA %11111111 zum setzen
EOR %11111111 zum Umkehren
Das sollte alle Unklarheiten beseitigen.
AND #%11111111 ; Kein
ORA #%00000000 ; Bit
EOR #%00000000 ; ändern
-
Ich habe eine paar ganz einfache Regeln, die jeder kapiert.
1. AND #%00000000 ist zum Löschen / ORA #%11111111 ist zum Setzen / EOR #%11111111 ist zum Umkehren von Bits.
2. Es werden nur die Bits verändert die man angibt, alle anderen bleiben erhalten.
3. Zum Befehl immer binäre #%XXXXXXXX verwenden, damit hat man die Bits im Blick.
Code- LDA $D800 ; Farbram auslesen
- AND #%00001111 ; Bit 4-7 löschen -> Bit 0-3 bleiben erhalten
- INC $D008 ; Sprite 4 in X-Richtung bewegen
- BNE ALLES_OK ; Kein überlauf
- LDA $D010 ; X-Richtung aller Sprites auslesen
- ORA #%00010000 ; Nur Bit 4 setzen -> Rest wie gehabt
- STA $D010 ; X-Richtung Bit 8 schreiben
- LDA $D018 ; Speicherconfig vom VIC-II auslesen
- EOR #%00000010 ; Zeichensatz-Adresse Bit 1 -> aus 0 wird 1 und umgekehrt
- STA $D018 ; Zeichensatz aktivieren
-
Spiele die ich in guter Erinnerung habe und noch nicht genannt wurden. Diese Spiele habe ich auch deutlich länger und häufiger gespielt.
Deluxe Galaga -> Hi-Score Duelle mit Freunden
Wings of Death -> Guter 2D Shooter
Battle Squadron -> Dito aber zwei Spieler gleichzeitig
Pang -> Zwei Spieler im Team
Rocket Ranger -> Verboten
Volfied -> Hi-Score jagt mit Freunden
Amber -> Lange Nächte mit Freunden um die Weltherrschaft
Battle Isle -> Neuland und fesselnd zugleich
Subtrade -> Mule mit cooler Grafik
Kid Chaos -> Extrem guter Plattformer mit guter Musik
Rodland -> Plattformer zu zweit
PP-Hammer -> Lieblings Spiel meiner Nichte
Twinworld -> Action Plattformer wo zwei Spieler abwechseln zusammen spielen
Cadaver -> Action Rätsel Adventure
Simon the Sorcerer -> AGA Adventure
-
Mit der Vermutung von Datenleichen in Hexenküche liegst du leider richtig, im Speicher stecken noch Altlasten vom Programmierer drin. Schau mal mit dem Monitor ab Adresse $AE00, da liegt noch etwas vom Sourcecode im Speicher.
-
Sobald die update_screen Routine einen Hardscroll ausführt, wird der erste Interrupt zu spät ausgeführt, so weit, so gut. Das Problem kann man sehr einfach lösen, man gibt den Interrupt einfach durch CLI bei u1: wieder frei. So kann der erste Interrupt rechtzeitig ausgeführt werden und springt nach beenden zurück zum Kopieren.
-
-
Ich bin etwas verwundert oder auch erstaunt, weil man die Adresse $00 in der Regel nie ändert muss. Nach dem Einschalten des C64 hat der Kernal beide Port-Register vom 6510 sinnvoll gesetzt. In Adresse $00 steht $2F und in Adresse $01 steht $37 und es gibt selten einen Grund $00 zu ändern. Daher eine Frage, das Programm wird ganz normal von Disk/Tape geladen und gestartet.
-
Das bestätigt meine Tests, an Routine selber liegt es nicht. Folgende Fehler wären daher möglich, die Routine liegt an einer anderen Adresse und der Aufruf endet in einen Absturz. Die Basic-Pointer stimmen nicht mehr und deshalb stützt das Basic-Programm ab, weil diese jetzt im ROM liegen.
-
Ich gehe mal davon aus, das am Ende noch ein RTS in der Routine steht.
Aber nachdem einmal der code unten aufgerufen wurde, hängt die Kiste bei Aufruf einer Kernal Routine (z.B. LOAD in $FFD5) oder rts ins Basic.
Jemand eine Idee? In Docs habe ich dazu wenig gefunden, entweder ist es so völlig einfach oder totaler Unfug dass ich dazu kaum was finde...
An der Routine selber kann es nicht liegen, vielleicht wird die Routine vom Basic-Programm überschrieben.
Musst Du nicht noch den Interrupt abschalten?
Hat er doch und den könnte man sogar an lassen.
-
-
Hmm, keine Ahnung, was da schief läuft. Bei mir funktioniert's.
Das liegt daran, dass es nicht gepackt ist, auf echter Hardware würde es ebenfalls nicht laufen. Deshalb habe ich schnell mal Exomizer 3.1.2 angeworfen.
-
Die Soft-Scroll Routine funktioniert nicht, weil die unbenutzten Bits 6 und 7 im Register $D016 immer auf 1 stehen. Deshalb wird nach $C0 einfach wieder $C6 ausgelesen und die Hard-Scroll Routine wird nie ausgeführt. Man müsste nach $D016 erst ein AND #$07 ausführen damit SBC #$02 überhaupt ein Unterlauf erzeugen kann. Aber bei einem Unterlauf steht $FE im Akku und den kann man nicht einfach nach $D016 schreiben. Deshalb muss nach SBC #$02 noch zweiter AND #$07, erst jetzt kann man den Wert zurück nach $D016 schreiben.
Code- SEC ; Carry setzen
- LDA $D016 ; Pixelposition auslesen
- AND #%00000111 ; Bits für Unterlauf maskieren
- SBC #$02 ; Neue Pixelposition berechnen
- AND #%00000111 ; Bits von Unterlauf maskieren
- ; ORA #%00010000 ; Nur bei Multicolor nötig
- STA $D016 ; Steuerregister-X schreiben
- BCC HARD_SCROLL ; Unterlauf prüfen
Den Vorschlag von Hoogo, das ganze in eine Variable zu packen hat den Vorteil, das man weitere Zeilen mit einer anderen Geschwindigkeit verwenden kann.
Code -
Schau doch mal unter den Menüpunkt -> Konfiguration -> Steuerung -> Pulldown-Menü Tastatur, ob überhaupt Tasten definiert sind. Es könnte ja sein das gar keine Tasten belegt sind, warum auch immer.
-
Ab dem 68010 ist das Auslesen des SR-Registers privilegiert und führt in der Regel zu einer Exception mit Absturz. Mit dem verlinkten Programm wird diese Exception abgefangen und der entsprechende Befehl wird gepatch. Eine weitere Neuerung ist das VBR-Register, damit kann die Vector-Base verschieben. Ohne echtes Fast-Ram ist der nutzen aber nur minimal, wie der Quit-Key bei WHD-Load. Es gibt keinen echten, merkbaren Geschwindigkeitsschub beim 68010, und die Nachteile überwiegen.
-
Stimmt doch nicht, Jiffydos hat den Original-code vom Kernal.