Phantaphtiph!

Hello, Guest the thread was viewed3.5k times and contains 43 replies
last post from Retro-Nerd at the
Grand Prix Circuit von Accolade
- Stephan Scheuer
- Thread is Unresolved
-
-
Achja, für die Anpassung hatte ich dummerweise die NTSC-Version genutzt. Daher musste das auch noch an die PAL-Norm angepasst werden. Selbst Nostalgia hat das übersehen.
-
Könnte man im Zuge dessen noch, wie schonmal angesprochen, die "Farbe" der Strasse und des Tunnels tauschen?
Also Straßenbelag grau, Tunnel schwarz?`
Würde ja irgendwie mehr Sinn machen.
Naja, die Amaturenumrahmung ist schon grau. Zudem nutze ich das Schwarz vom Tunnel, um auf 1MHz runterzuschalten, weil es sonst zu unschönen Flackern kommt.
-
Hier nun die Grand Prix Circuit Version, die auf einem stock oder standart C64 läuft. Sollte das Game irgendwo abstürzen, Bitte eine Mitteilung des Absturzes posten, wo und wann.
Eventuell oder sogar bestimmt habe ich ein oder zwei Sprunge nach $D3xx vergessen nach $12xx zu ändern. Es sollte aber nicht passiert sein, da ich alle Sprünge gewissenhaft
nach Liste abgearbeitet habe.
Im Codefenster sieht man einen kleinen Teil der IRQ-Steuernung und was ich da gemacht habe.
Code- ; ------------------------------------------------------------------------------------------------------------------
- ; ---- der gangschaltungscode muss mit 1mhz ablaufen, sonst spielt diese ein lied, das sich nicht schön anhört ----
- ; ---- sollte hier ein irq aufgerufen werden, der auch nach b5a55 springt, läuft diese routine, beim verlassen ----
- ; ---- der irqs mit 20mhz weiter, deshalb patche ich den wert in adresse x5a5b, bei begin der routine mit 1mhz, ----
- ; ---- sta $d07a und beim verlassen der routine mit 20mhz, sta $d07b. das ist eine routine von vielen, die ich ----
- ; ---- geänderh habe. beschleunigerkarten, die keinen softwareschalter für 1mhz, 8mhz, 20mhz oder sogar 40 mhz ----
- ; ---- besitzen, werden störungen des spielverlaufs haben. Das geht von der durchdrehenden gangschaltung bis zu ----
- ; ---- einstürzenden unterführungen ----
- ; ------------------------------------------------------------------------------------------------------------------
- s358a sta a23
- lda #$7a
- sta x5a5b+1 ;<---- 1mhz
- lda a14
- bmi b35f2
- lsr
- bne b359a
- lda a13
- ror
- a3596 cmp #$9c
- bcc b359c
- b359a lda #$9c
- b359c sta a02
- ldx ab8
- a35a0 cpx #$27
- bcs b35f2
- lsr
- lsr
- sta ab8
- ldy a7a
- lda a23
- and f2222,y
- ora a7b
- cpx ab8
- bcs b35f3
- ldy f115a,x
- sta (p04),y
- ldy f21fa,x
- bne b35f8
- b35bf inx
- cpx ab8
- bcs b35e4
- lda f36a3,x
- sta a35db+1
- ldx ab8
- ldy f36a3,x
- tya
- sec
- sbc #<f3600
- tay
- sty a03
- ldx f3600,y
- lda #$60
- sta f3600,y
- lda a23
- a35db jsr f3600
- txa
- ldx a03
- sta f3600,x
- b35e4 lda a02
- and #$03
- tax
- stx a7a
- lda a23
- and f2226,x
- sta a7b
- b35f2 ldx #$7b
- stx x5a5b+1 ;<---- 20mhz
- rts
- ; ---------------------------------
- ; ---- der code geht bis $36cb ----
- ; ---------------------------------
- ; ------------------------------------
- ; ---- ein teil der irq-steuerung ----
- ; ------------------------------------
- b5a55 txa ; ---- beginn mit code der mit 20mhz läuft.
- pha
- tya
- pha
- lda #$01 ; ---- nutzloser befehl aber wegen timing belassen
- x5a5b sta $d07b ; ---- supercpu steuerung 1mhz/20mhz
- lda #$00
- sta $d016 ; ---- vic control register 2. offset in pixeln vom linken bildschirmrand - xscroll
- sta $d015 ; ---- sprite display disabled.
- sta $d027 ; ---- sprite color black. bitkombination %10 (0..15)
- lda #$2f
- sta $d012 ; ---- raster positions begin $2f.
- a5a6e lda #$0e
- sta $d021 ; ---- background color light blue.
- lda #$38
- sta $d011 ; ---- vic control register 1 : bitmap-modus. frame 1 - a000-bfe8, frame 2 - e000-ffe8
- lda a83
- beq b5a7f ; ---- verzweigung ist dynamisch. je nachdem was sich in $83 befindet.
- jmp j5f6b
-
"das zu beheben musste ich die Datei "GP" disassemblieren. Wer schon mal mit dem Regenerator eine Datei disassembliert hat, weiß wovon Ich rede. "
Bitte erklären.
Das bedeut, aus einer Datei wieder einen edierbaren Quellcode zu machen.
Haha... Ich bin der Author von Regenerator... Und moechte wieseen welche Probleme du hatest damit und was koennte besser gehen.
-
Oh cool der Macher vom Regenerator . Nein, ich hatte fast keine Probleme. Das File war nur 96 Blocks groß und hat dementsprechend lange gedauert, bis ich es soweit hatte, dass man es auch z.B. von der Ursprungsadresse
$1509 nach z.B. $1700 assemblieren konnte. Ich musste hierbei viele Sprungtabellen anpassen, das war schon eine ermüdende Arbeit, und auch sehr viele Vektoren, die teilweise echt fieß zu finden waren. Siehe Codefenster.
Das ist noch ein leichtes Beispiel, was mir die Standart-Version, also die Version, die ohne SCPU aber auch mit SCPU läuft ein, wenig versaut hat. Der Kernalloader mit Ladebalken sah ein wenig trashig auf dem Bildschirm aus und
das Lade stockte teilweise. Den Fix lade ich hier gerade hoch.
Was ich gut finden würde, wäre eine Wegschalten der Labels für die Bereiche von $0300-$0333. Bei Grand Prix Circuit standen dort keine Vektoren, sondern der IRQ-Lader. Auch wenn man nur die Kernal-Labels exta
deaktivieren könnte, wäre das eine Hilfe. Das Andere, mit den Sprungtabellen und den Teilweise verstreuten Vektoren oder LowByte/HighByte X/X-Angaben oder Angaben in X&Y wie bei SETNAME oder SETLFS ist wohl
eine sehr kompliziert Angelegenheit und dem vor dem Bildschirm sitzenden vorbehalten.
Ansonsten ist das ein Top-Tool. Ich habe es für alle meine bisherigen Projekte genutzt wo irgendwas disassembliert werden musste.
Achja, der erstellte Quellcode der Datei "GP" ist 334KB groß.
Im Anhang die gefixte Version aus Post #24, bei dem das Laden nicht richtig angezeigt wird.
Code- dises leichte problem scheint regenerator nicht zu beherschen.
- macht aber nichts, ich muss ja auch noch etwas zu tun haben.
- -------------------------------------------------------------------
- jsr e0bfe
- ldx #<loadanim ; <--- loadanim low byte
- x6159 ldy #>loadanim ; <--- loadanim high byte
- jsr e09ee
- ldx #"T"
- ldy #"I"
- x6162 jmp e091c
- loadanim !by $07,$50,$cc,$cf ; <--- loadanim musste automatisch angepasst werde, weil ich LAXe entfernt hatte und zusätzliche Befehle eingefügt hatte
- !by $c1,$c4,$c9,$ce
- !by $c7,$20,$c7,$d2
- !by $c1,$ce,$c4,$20
- !by $d0,$d2,$c9,$d8
- !by $20,$c3,$c9,$d2
-
Und hier der Fix02. Naja, eigentlich ist das kein Fix, sondern ein Update. Ich habe diverse Routinen überarbeitet und abgeändert und/oder angepasst.
Bei einigen Routine habe ich abgezählte NOPs zum exakten autimen eingebaut. Und siehe da, das Spiel läuft nun um einiges schneller. Auf einem Standart-C64
läuft es wie zuvor, mit den Zeichensatzdefinierten Bitmaps, die abwechselent ab $A000-$BFE8 und $E000-$FFE8 liegen. Die Spritepointer liegen ab $83F8 und
ab $C3F8. Die Bildschirme werden dabei abwechselnt umgeschaltet.
-
So, mal kurz gestestet:
Mit manuellen 20 MHz laufen Intro und Menüs zu schnell. Ingame teilen sich die Bereiche mit schwarzen Gaps, den Bodenwellen entsprechend. Bei 48 Mhz singt dann auch wieder die Gangschaltung ein Liedchen.
Man muss die Spiele auch nicht unbedingt mit zweistelligen MHz Werten befeuern: die Nostalgia Version läuft ohne Grafikfehler (bis auf die schwarzen Linien im Rückspiegel, die man auch als Kantenschatten auslegen könnte
) auf dem U64 mit den o.g. Einstellungen: Turbo Enable Bit, Badline enabled bei 4 MHz einwandfrei. Die Strecke scrollt flüssig genug und die Rennwagen Darstellung flackert nicht so rum, wie bei +10 MHz. Gangschaltung scheint robust. Anscheinend laufen Intro und Menüs mit 1 MHz und der Turbo wird erst im Rennen aktiviert. Stephan Scheuer Aber da kannst du sicher sagen, was da wo passiert.
Bei 20 MHz flutscht zwar die Strecke extrem soft, aber die Wagen flackern zu sehr, daher sind 4 bis 6 MHz ein solider Kompromiss.
Edit: SCPU detect braucht's natürlich nicht. Nur das Turbo Enable Bit des C128, d.h. GPC macht die 2 MHz an, auf dem U64 dann das, was man vorgibt. Ab 8 MHz spinnt die Gangschaltung rum, mit 4 Mhz scheint alles ok. Die schwarzen Linien bei den Tribünen, die ich im Rückspiegel markiert hab, sind kein Fehler.
-
Mit was hast du gesteste? Wie gesagt, es ist noch nicht für das U64 oder andere 6502-Beschleunigerkarten optimiert. Wenn deine Hardware keinen Softwareschalter hat, mir dem man die Frequenz auf
wahlweise 1MHz oder 20MHz schalten kann, wird das SuperCPU optimierte Spiel niemals funktionieren. Also Tests mit dem U64 oder was auch immer, Bitte vorher fragen, ob das Spiel dahingehend
angepasst ist, sonst macht man sich viel Arbeit für nichts.
Zur Zeit ist es mit exakten Taktzyklen nur an die SuperCPU angepasst, und diese schaltet im Game häufig auf 1MHz bzw. 20MHz.
Du kannst es selbt mit dem "xscpu64.exe" testen.
-
Mit was hast du gestest?
Mit deiner grand_prix_circuit_1989_accolade_standart-c64_und_supercpu_support_(25.03.2023)_fix02.7z
Bei "Standard C64 Support" bin ich stupide davon ausgegangen, dass es sich wie bei der Nostalgia Version verhält, die ja wie beschrieben mit Turbo Enable Bit und mit bis zu 6 MHz läuft. Testen ist doch immer gut :), dachte, du kannst Erfahrungsberichte gebrauchen. Das Turbo Register wird bei deiner Standard-Version anscheinend nicht verwendet, daher musste ich manuell fest einen MHz Wert setzen, dadurch sind dann Intro und Menü zu schnell.
Bisher hatte ich das auch noch gar nicht so im Detail durchprobiert, von daher keine Mühe umsonst gemacht und harausgefunden, dass die NOS Version auf dem U64 bereits perfekt läuft. Fehlt quasi nur dein PAL-Spiegel-Fix.
-
Und hier der Fix02.
Ich habe es auf meinem U64 laufen lassen und die gleichen Erfahrungen gemacht wie Lynx : Mit dem Turbo Control auf "manual" und 10 MHz habe ich die schwarzen Streifen bekommen und die Automatik-Schaltung war unsauber. Mit Turbo Control auf "U64 Turbo Registers" und 10 MHz lief das Spiel tadellos und ohne erkennbare Probleme!
(Badlines und SuperCPU auf Enabled). Mehr habe ich noch nicht getestet, musste ein paar Runden fahren.
-
Und hier der Fix02.
Ich habe es auf meinem U64 laufen lassen und die gleichen Erfahrungen gemacht wie Lynx : Mit dem Turbo Control auf "manual" und 10 MHz habe ich die schwarzen Streifen bekommen und die Automatik-Schaltung war unsauber. Mit Turbo Control auf "U64 Turbo Registers" und 10 MHz lief das Spiel tadellos und ohne erkennbare Probleme!
(Badlines und SuperCPU auf Enabled). Mehr habe ich noch nicht getestet, musste ein paar Runden fahren.
Da wird der Turbo aber nicht zugeschaltet und es läuft nur mit 1 MHz, daher auch keine Grafikfehler.
Bei der ursprünglichen Nostalgia Version wird das Turbo Enable Bit gesetzt und es würde auf dem C128 mit 2 MHz laufen, auf dem U64 dann entsprechend mit 4, 5 oder 6 Mhz, was völlig ausreichend ist. Ab 8 MHz aufwärts wird das Update der Rennwagen auch zu schnell und somit unschön flackerig-zappelig.
Turbo Enable Bit mit 4 MHz ist mein Favoriten-Setting für Grand Prix Circuit aufm dem U64.
-
Bei meiner SCPU-Anpassung werden bedeutend mehr Frames pro Sekunde nur für die Animation der Fahrbahn berechnet. So hatte ich mir das auch gedacht. Das Fahrzeug wird dabei unwesentlich schneller.
Ich denke, dass die SuperCPU-Version recht gut geworden ist. Im übrigen benutzet die SCPU die Register $D07A für 1MHZ und $D07B für 20 MHz. Das war eine ganz üble Arbeit, das alles flackerfrei mit PAL-Patch
an 20MHz anzupassen. Wobei man bedenken muss, das einige Codeabschnitte nur mit 1MHZ laufen dürfen. Sonst spackt die Gangschaltung richtig ab. Zudem zuckeln die anderen Rennteilnehmer vor eine nur so
dahin, wie mit 20.000 Volt im Po.
@ Lynx. ...dachte, du kannst Erfahrungsberichte gebrauchen....
Sicher, und immer her damit. So kann ich mit einigen Zusatzbefehlen die 6502-Beschleuniger auch noch zähmen.
Wenn Hardware, wie das U64 Register für die Anzahl der MHz besitzen, immer her damit. Im Hauptcode ist noch etwas Platz. Dann läuft das Spiel auch bedeutend besser auf dieser Hardware.
Übrigens, die Nostalgia-Version läuft auch nicht mit der SCPU. Gangschaltung spinnt, Sprites flacker usw.
-
Hab mit deiner letzten Version jetzt mal ein paar Runden im SCPU Vice gedreht - läuft rund. Die Rennwagen liegen entspannt auf der Strecke. Ganz selten, sprich 3 Mal, gab's eine schwarze Line im Himmelbereich, ansonsten fiel nix schlimmes auf.
Wenn Hardware, wie das U64 Register für die Anzahl der MHz besitzen, immer her damit.
https://1541u-documentation.re…l#turbo-control-registers
POKE53297,18 und BASIC wird zu Assembler.
(Register muss man in den Settings natürlich enabled haben)
Allerdings zicken z.B. Cartridges rum, wenn man in die Vollen geht. Unter 8 MHz läuft zusätzliche Hardware meist noch stabil.
Übrigens, die Nostalgia-Version läuft auch nicht mit der SCPU. Gangschaltung spinnt, Sprites flacker usw.
Die SCPU kann ja leider nur 1 oder 20 MHz. Wie erwähnt, läuft die Nos Version bis 6 MHz einwandfrei, 4 MHz sind perfekt für ein "realistischeres" Fahrgefühl und flüssiges Gameplay ohne Grafik- oder Schaltprobleme. Selbst 2 MHz sind da besser als 1 MHz. ...ok, der Punkt am Himmel fliegt etwas schneller, Vogel oder Flugzeug, wer weiss das schon...
p.s. die eigene Karre fährt auch auf dem U64 mit 4 oder 48 MHz nicht wirklich schneller, die Strecke wird bei der Nos Version auch nur mit mehr fps gerendert. Wäre das eine feste Framerate, wäre es mit 48 MHz unspielbar. Wipeout on Steroids.
-
....Ganz selten, sprich 3 Mal, gab's eine schwarze Line im Himmelbereich, ansonsten...
Ich weiß. Das liegt am IRQ. Nach dem Beenden mit RTI hat dieser 20MHz. Diese 20MHz laufen sehr kurz in eine Routine, die nur mit 1MHz laufen darf.
Der Punkt saust bei der SCPU-Version über den Bildschirm.
Code- das ist der übeltäter und auch eine ganz wichtige routine
- -----------------------------------------------------------
- b5a55 txa ; ---- beginn mit code der beim c128 mit 2mhz läuft
- pha
- tya
- pha
- lda #$01 ; ---- nutzloser befehl, belassen aufgrund des timings
- x5a5b sta $d07b ; ---- schaltet die supercpu auf 20mhz <---------------------------- hier wird auf 20mhz geschaltet<--wichtig
- lda #$00
- sta $d016 ; ---- vic control register 2
- sta $d015 ; ---- sprite display enable
- sta $d027 ; ---- sprite 0 color
- lda #$2f
- sta $d012 ; ---- raster position
- a5a6e lda #$0e
- sta $d021 ; ---- background color 0
- lda #$38
- sta $d011 ; ---- vic control register 1
- lda a83
- beq b5a7f
- jmp j5f6b
- j5f6b inc a66
- j5b51 pla ; ---- 04 tz
- tay ; ---- 02 tz
- pla ; ---- 04 tz
- tax ; ---- 02 tz
- jmp test01
- test01 pla ; ---- 04 tz
- sta a01 ; ---- 03 tz
- pla ; ---- 04 tz
- rti ; ---- 06 tz ; ------<--wichtig. und hier kommt es an, wo es nach dem irq weitergeht. machmal, für kurze zeit landet
- das nach dem rti direkt in eine routine, die zwingend mit 1mhz laufen muss.
- .
-
Die "Grand Prix Circuit" C64- und SuperCPU-Support, sowie die RamCard Version haben ein Super-Update erfahren. Es gibt sogut wie keine Rasterzeilen Bugs mehr.
Die Gangschaltung funktioniert nun perfekt. Kein ruckartiges Abbremsen und danach das mehrfache Schalten der Gänge. Das Beste aber ist, dass die SuperCPU
nun 95% ihrer Leistung bei dem Spiel erbringt. Die restlichen 5% gingen verloren, weil ich mittels STA $D07A das Spriteflackern der gegnerischen Rennwagen sogut
es geht, abgeschaltet habe. Die ganze Nacht war ich dabei, das Timing der verschiedenen Routiene im Einklang zu bringen. Zwanzig A4 Blätter habe ich über Nacht,
mit diversen Raster-IRQ Routinen beschrieben. Von den Codes hat sich das, was auf Blatt zwanzig stand, bewährt. Einige Kleinigkeiten musste ich für das perfekte
Timing noch abändern. Bei dem Spiel Bitte mal den kleinen weißen Punkt, der sich am Himmel, von rechts nach links bewegt, anschauen. Der saust so schnell über
den Bildschirm, wie die Rennwagen schnell fahren.
Viel Spass mit dem Spiel.
PS: Eine Version, speziel für die 6502-Beschleuniger, wie zum Beispiel das U64 ist in der Mache. Ich werde die MHz per Software, mal auf 1MHz, mal auf 48MHz und fast
immer auf 20MHz schalten. In etwa einer Woche ist auch diese Version fertig.
-
Vielen Dank für die ganze Arbeit. Auf die spezielle U64 Version freue ich mich auch.
-
Super Sache, vielen Dank dafür.
Habe eben versucht beide D64 von SD2IEC LW10 zu starten.
Die Standard Version Fix03 lässt sich ohne Probleme von LW10 laden.
Die Ramcard Version Fix01 versucht auf LW08 zuzugreifen und lässt sich so nicht starten. Direkt von LW08 habe ich noch nicht probiert.....
Liebe Grüße,
Jojo
-
Sorry, ich habe immer noch nicht alle Quellcodes mit einer variablen Ladeadresse ausgestattet.
so ist es bei vielen Quellcodes
-----------------------------------
LDA #$01
LDX #$08
LDY #$01
JSR $FFBA
so müsste es bei allen Quellcodes sein.
---------------------------------------------
LDA #$01
LDX $BA
LDY #$01
JSR $FFBA
Das wird in Kürze geändert.
-
Super, Lieben Dank.