Puh, das steuert sich ja echt eher wie ein Containerschiff. Und das ist nicht mal Vektorgrafik, sondern eine recht typische Rasterzeilen-Fake-3D-Engine wie Lotus o.ä., nur um den Faktor zehn langsamer.

Hallo Besucher, der Thread wurde 439k mal aufgerufen und enthält 2335 Antworten
letzter Beitrag von Stephan Scheuer am
Easyflash Games - Echte Anpassungen
- Stephan Scheuer
- Unerledigt
-
-
Das Game erschien 1990 auf dem Markt, zudem noch die vielen Cracker. Dehalb wurden da nicht allzu viel Mannstunden investiert. Es lohnte sich halt nicht mehr.
Die Steuerung wird zwischen den einzelnen Berechnungen der Vektor-Grafik (oder Fake-Vektorgrafik
) abgefragt. Weil diese Routine insgesammt unterer Durchschnitt ist, hapert es auch mir der Steuerung.
Ich hatte mir schon Teile das Codes disassemblieren, um zu sehen, wo man noch Rechenzeit einsparen könnte. Da gibt es einige gute Möglichkeiten, wie zum Beispiel eine kleine, aber
wichtige Tabelle in die Zeropage auszulagern. Siehe Codefenster.
... wie ein Containerschiff.
Naja, es gibt schlimmere Machtwerke auf dem C64 zu bestaunen.
Code- alle absoluten adressierungen (lda $2189) in
- zero page adressierungen (lda $d8) abändern.
- diesen speedcode und auch speedcoden ähnliche
- adresskollonnen kommen im spiel zu hauf vor.
- viele könnte man verbesseren, nur ist das dann
- wirklich viel arbeit, und nicht in wenigen
- tagen erledigt. Zudem steht die frage im raum,
- ob sich der aufwand überhaupt lohnt.
- ---------------------------------------------
- 3b9a ad 89 21 lda $2189 ; -- in zp-adressierung ändern
- 3b9d a0 00 ldy #$00
- 3b9f 91 0d sta ($0d),y
- 3ba1 ad 8a 21 lda $218a ; -- in zp-adressierung ändern
- 3ba4 a0 08 ldy #$08
- 3ba6 91 0d sta ($0d),y
- 3ba8 ad 8b 21 lda $218b ; -- in zp-adressierung ändern
- 3bab a0 10 ldy #$10
- 3bad 91 0d sta ($0d),y
- 3baf ad 8c 21 lda $218c ; -- in zp-adressierung ändern
- 3bb2 a0 18 ldy #$18
- 3bb4 91 0d sta ($0d),y
- 3bb6 ad 8d 21 lda $218d ; -- und so weiter
- 3bb9 a0 20 ldy #$20
- 3bbb 91 0d sta ($0d),y
- 3bbd ad 8e 21 lda $218e
- 3bc0 a0 28 ldy #$28
- 3bc2 91 0d sta ($0d),y
- 3bc4 ad 8f 21 lda $218f
- 3bc7 a0 30 ldy #$30
- 3bc9 91 0d sta ($0d),y
- 3bcb ad 90 21 lda $2190
- 3bce a0 38 ldy #$38
- 3bd0 91 0d sta ($0d),y
- 3bd2 ad 91 21 lda $2191
- 3bd5 a0 40 ldy #$40
- 3bd7 91 0d sta ($0d),y
- 3bd9 ad 92 21 lda $2192
- 3bdc a0 48 ldy #$48
- 3bde 91 0d sta ($0d),y
- 3be0 ad 93 21 lda $2193
- 3be3 a0 50 ldy #$50
-
Das war jetzt keine Anforderung das Ding zu fixen...
Aber ich denke das ist dein Hobby, oder ?
Mfg Jood
-
Ja klar ist das mein Hobby. Ich war Stolz wie Oskar aus dem Mülleimer, als die neue EasyFlash Fastkopieroutine funktionierte und dann auch noch richtig gute Ergebnisse erbrachte.
Man lernt ja auch nicht für nothing alle 6502 und 65816 Befehle auswendig. Das Allerwichtigste ist, dass es einen riesen Spass und auch Freude bereitet, etwas auf die Beine zu stellen.
Mal ein nützliches Tool gecodet, mal eine Easyflash Anpassunge erstellt oder einen Trackloader auseinandergenommen und gute Routinen gleich eingesackt.
Meine Quellcodes stelle ich meistens zum Gamepost mit rein, um vielleicht den Einen oder Anderen zu animieren, auch mal eine Anpassung zu erstellen.
-
Grad mal mit dem U64 ausprobiert... Bei 4 Mhz läuft es annähernd flüssig, ist aber absolut unspielbar,
2 Mhz ist auch fast flüssig aber immer noch unspielbar.
Selbst bei originalen 1 Mhz ist die Steuerung sowas von unbrauchbar, das Spiel hat noch ganz andere
Probleme als nur die Framerate.
Ich weiss nicht ob das damals schon so verbreitet war, das sieht mir aus wie der misslungene Versuch
aus einer teuren Lizenz eben schnell ein bisschen Kohle zu machen.
Soll jetzt nicht deine Umsetzung kritisieren, aber das Spiel, das war Perlen vor die Säue...
Mfg Jood
Sehe ich ganz genauso. Sieht wirklich gut aus, ist aber unspielbar. Erst recht wenn man es mit Spielen wie Grand Prix Circuit vergleicht.
-
Ich werde das mal an die SCPU anpassen. Also mit einer Regulierung der Frames durch Druck die Plus/Minus Tasten. Mal sehen, vielleicht schaffe ich es, der Joystick-Steuerung
mehr Reaktionszeit zu geben, damit diese feinfühliger und genauer wird.
-
Zur Zeit bin ich dabei, für toms01 einen SuperCPU-Ramtester zu coden, der nebenbei viele Sonderfunktionen bereitstellen wird, Zum Beispiel bestimmte Bänke mit ausgewälten Pattern
dauerzubeschreiben, mit frei wählbaren Hex-Werten, maximal 256 verschiedenen pro Bank. Test im 8-Bit Emulationsmodus oder im 16-Bit Nativemodus. Darstellung auf Screen, des ausgewählten
Bankinhaltes per Scrollfunktion über die Pfeiltasten. Das Abspeichern des Inhaltes der gewählten Bank auf Disk und so weiter und sofort.
-
Hier mal ein neues Tool von gestern. Mindscape nutzt bei vielen Games Weak-Bits auf Track-01 Sektor-00 als Kopierschutz, bei Aussie Games zum Beispiel.
Selbst KryoFlux bekommt diesen Schutz nicht kopiert. Mir ist auch kein Kopierprogramm bekannt, dass diesen Schutz funktionsfähig kopieren kann.
Das hatte ich dann gestern geändert. Der Betaskip Prot-Writer war genau die richtiige Grundlage, natürlich auch weil ich den Quellcode im ACME-Format durch disassemblierung habe.
Den Floppycode des Tools um etliche Bytes abgeändert, assembliert, getestet und funktioniert.
Was, Perlen vor die Säue werfen...
-
.....You can also input single bytes using "> [address] [byte]" (e.g. > 8b77 ad)
Yes, of course it works. That is also the reason why the other routine is much slower. have a look in the code window.
With my fast routine this is nearly unnecessary to move single bytes.
Code- this is a standart easyflash data copy routine. it
- reads byte for byte from easyflash-rom to the c64-ram
- ---------------------------------------------------------
- easyflash13 ldy #$00
- lda (pfe),y ; - load a single byte from the easyflash-rom
- inc afe ; - low address +1
- bne storec64 ; - zerro flag ?
- pha
- inc aff ; - high address +1
- lda aff
- asl
- bpl storec16
- sta aff
- inx
- asl a01
- stx ade00
- lsr a01
- storec16 pla
- storec64 sta (pae),y ; - store a single byte in the c64-ram
- inc aae ; - low address +1
- bne easyflash07 ; - zerro flag ?
- inc aaf ; - high address +1
- easyflash07 lda afc
- bne easyflash06
- dec afd
- ldy afd
- easyflash06 dec afc
- iny
- bne easyflash13 ; - and so on.
- easyflash77 jmp easyinit_out
Interesting... But what does:
do ? What is the starting value ? #$37 ? I know you are trying to flip between #$33 and #$37
-
Beitrag von mrr19121970 ()
Dieser Beitrag wurde von TheRealWanderer aus folgendem Grund gelöscht: Doppelposting (). -
The value in $01 is #$33. The ASL/LSR I only used it for testing purposes and forgot to replace it with "LDA #$37 STA $01"ect. But the way it looks, it works.
Code- easyflash byte-kopierroutine
- ----------------------------
- easyflash04 ldy #$11 ; ---- set y-reg to get the bank value. decimal = 17
- lda (pae),y ; ---- get the bank byte
- sta ade00 ; ---- and activate the bank in the easyflash
- ldy #$33 ; ---- lade #$33 in akku
- sty a01 ; ---- und für $01 festlegen. alle schreibzugriffe werden im ram ausgeführt, auch unter dem i/o.
- tax ; ---- banknummer in xreg ablegen
- ; ---------------------------------------------------------------------------------------
- ; ---- set file loading address. the ram-address were the file placed in the c64 ram ----
- ; ---------------------------------------------------------------------------------------
- lda #$60 ; 2 ---- wert für "rts" in den akku laden
- sta storec64 ; 4 ---- befehl rts im code einfügen
- jsr easyflash13 ; 6 ---- lowbyte der dateiladeadresse aus easyflash lesen
- sta aae ; 3 ---- und schreibe es in die zeropage adresse als lowbyte ein
- jsr easyflash13 ; 6 ---- highbyte der dateiladeadresse aus easyflash lesen
- sta aaf ; 3 ---- und schreibe es in die zeropage adresse als highbyte ein
- lda #$91 ; 2 ---- befehl indirekt y-indiziert im code einfügen
- sta storec64 ; 4 ---- und festlegen
- ; ---------------------------------------------------------------
- ; ---- get bytes from easyflash and write it in the c64-ram ----
- ; ---------------------------------------------------------------
- easyflash13 ldy #$00 ; 2 ---- yreg offset ist immer null
- lda (pfe),y ; 5 ---- daten aus den easyflash-rom lesen
- inc afe ; 5 ---- increment reading offset
- bne storec64 ; 3 ---- if the low byte value $00 the zero flag will be set
- pha ; 3 ---- datenbyte auf stack puffern
- inc aff ; 5 ---- and the high byte reading offset will by increment.
- lda aff ; 3 ---- read the high byte from reading offset
- asl ; 5 ---- shift akku to left. if the high byte is $c0 ($c000) after asl the high byte is $80
- bpl storec16 ; 3 ---- if high byte was $c0 than the negativ flag was set.
- sta aff ; 3 ---- store $80 as high byte in the "read a byte from easyflash" code.
- inx ; 2 ---- bankbyte um einen erhöhen
- asl a01 ; 5 ---- zum beschreiben des easyflash bank registers.
- stx ade00 ; 4 ---- and aktivate the new easyflash bank. only if $c000 reached then the bank will be raised.
- lsr a01 ; 5 ---- und für $01 festlegen. alle schreibzugriffe werden im ram ausgeführt, auch unter dem i/o.
- storec16 pla ; 4 ----
- storec64 sta (pae),y ; 5 ---- daten in das c64-ram schreiben
- inc aae ; 5 ---- increment the store address low byte
- bne easyflash07 ; 3 ---- is zero flag set
- inc aaf ; 5 ---- increment the high byte.
- easyflash07 lda afc ; 3 ---- downcounter lowbyte in akku laden
- bne easyflash06 ; 3 ---- branch adresse wenn kein zeroflag gesetzt wurde
- dec afd ; 5 ---- sonst downcounter highbyte um einen vermindern
- ldy afd ; 3 ---- und downcounter highbyte in das yreg laden
- easyflash06 dec afc ; 5 ---- downcounter lowbyte um einen vermindern
- iny ; 2 ---- yreg um einen erhöhen. zeroflag wird nur gesetzt wenn highbyte $ff zu $00 wird
- bne easyflash13 ; 3 ---- branch adresse wenn kein zeroflag gesetzt wurde. yreg ist sonst immer $01
- easyflash77 jmp easyinit_out ; 3 ---- back to the game.
-
The value in $01 is #$33. The ASL/LSR I only used it for testing purposes and forgot to replace it with "LDA #$37 STA $01"ect. But the way it looks, it works.
Code- easyflash byte-kopierroutine
- ----------------------------
- easyflash04 ldy #$11 ; ---- set y-reg to get the bank value. decimal = 17
- lda (pae),y ; ---- get the bank byte
- sta ade00 ; ---- and activate the bank in the easyflash
- ldy #$33 ; ---- lade #$33 in akku
- sty a01 ; ---- und für $01 festlegen. alle schreibzugriffe werden im ram ausgeführt, auch unter dem i/o.
- tax ; ---- banknummer in xreg ablegen
- ; ---------------------------------------------------------------------------------------
- ; ---- set file loading address. the ram-address were the file placed in the c64 ram ----
- ; ---------------------------------------------------------------------------------------
- lda #$60 ; 2 ---- wert für "rts" in den akku laden
- sta storec64 ; 4 ---- befehl rts im code einfügen
- jsr easyflash13 ; 6 ---- lowbyte der dateiladeadresse aus easyflash lesen
- sta aae ; 3 ---- und schreibe es in die zeropage adresse als lowbyte ein
- jsr easyflash13 ; 6 ---- highbyte der dateiladeadresse aus easyflash lesen
- sta aaf ; 3 ---- und schreibe es in die zeropage adresse als highbyte ein
- lda #$91 ; 2 ---- befehl indirekt y-indiziert im code einfügen
- sta storec64 ; 4 ---- und festlegen
- ; ---------------------------------------------------------------
- ; ---- get bytes from easyflash and write it in the c64-ram ----
- ; ---------------------------------------------------------------
- easyflash13 ldy #$00 ; 2 ---- yreg offset ist immer null
- lda (pfe),y ; 5 ---- daten aus den easyflash-rom lesen
- inc afe ; 5 ---- increment reading offset
- bne storec64 ; 3 ---- if the low byte value $00 the zero flag will be set
- pha ; 3 ---- datenbyte auf stack puffern
- inc aff ; 5 ---- and the high byte reading offset will by increment.
- lda aff ; 3 ---- read the high byte from reading offset
- asl ; 5 ---- shift akku to left. if the high byte is $c0 ($c000) after asl the high byte is $80
- bpl storec16 ; 3 ---- if high byte was $c0 than the negativ flag was set.
- sta aff ; 3 ---- store $80 as high byte in the "read a byte from easyflash" code.
- inx ; 2 ---- bankbyte um einen erhöhen
- asl a01 ; 5 ---- zum beschreiben des easyflash bank registers.
- stx ade00 ; 4 ---- and aktivate the new easyflash bank. only if $c000 reached then the bank will be raised.
- lsr a01 ; 5 ---- und für $01 festlegen. alle schreibzugriffe werden im ram ausgeführt, auch unter dem i/o.
- storec16 pla ; 4 ----
- storec64 sta (pae),y ; 5 ---- daten in das c64-ram schreiben
- inc aae ; 5 ---- increment the store address low byte
- bne easyflash07 ; 3 ---- is zero flag set
- inc aaf ; 5 ---- increment the high byte.
- easyflash07 lda afc ; 3 ---- downcounter lowbyte in akku laden
- bne easyflash06 ; 3 ---- branch adresse wenn kein zeroflag gesetzt wurde
- dec afd ; 5 ---- sonst downcounter highbyte um einen vermindern
- ldy afd ; 3 ---- und downcounter highbyte in das yreg laden
- easyflash06 dec afc ; 5 ---- downcounter lowbyte um einen vermindern
- iny ; 2 ---- yreg um einen erhöhen. zeroflag wird nur gesetzt wenn highbyte $ff zu $00 wird
- bne easyflash13 ; 3 ---- branch adresse wenn kein zeroflag gesetzt wurde. yreg ist sonst immer $01
- easyflash77 jmp easyinit_out ; 3 ---- back to the game.
It does work:
LDA #$33
STA $01ASL $01 gives $36 (IO area visible)
LSR $01 gives $1b (CHARROM visible)
but somewhat in transparent. Better stick to:LDA #$37
STA $01
INC $01
sta (pae),y ; 5 ---- daten in das c64-ram schreibenDEC $01
I am also thinking that you can rearrange your code to save the PHA / PLA combo by increasing the source after this. -
Help!
None of my Easy Flash works anymore!
It just goes to blank screen after the initial Easy Flash Screen! or No Screen at all just blank screen.
I have tried Vice 2.4, Vice 3.4, and VICE 3.5,
both PAL and NTSC, both True Drive on and off,
They were all working previously with Vice 2.4!
What happened?!
What exactly is the setting that needed to be set?
Help Please!
Thanks!
Update......
It is really weird,
They only works with V 2.4 when I load the CRT image using the VICE menu,
originally I could just drop the CRT image onto the VICE screen.
Well, they all work now, hopefully forever.
I am afraid one day they would stop working.
Not so sure what were going on inside the emulation.
I ran many scene programs and perhaps they changed the internal settings.
-
Help!
None of my Easy Flash works anymore!
It just goes to blank screen after the initial Easy Flash Screen! or No Screen at all just blank screen.
I have tried Vice 2.4, Vice 3.4, and VICE 3.5,
both PAL and NTSC, both True Drive on and off,
They were all working previously with Vice 2.4!
What happened?!
What exactly is the setting that needed to be set?
Help Please!
Thanks!
Update......
It is really weird,
They only works with V 2.4 when I load the CRT image using the VICE menu,
originally I could just drop the CRT image onto the VICE screen.
Well, they all work now, hopefully forever.
I am afraid one day they would stop working.
Not so sure what were going on inside the emulation.
I ran many scene programs and perhaps they changed the internal settings.
There is a guy on Lemon64 with the same issue, maybe you can ask him ?
-
Help!
None of my Easy Flash works anymore!
It just goes to blank screen after the initial Easy Flash Screen! or No Screen at all just blank screen.
I have tried Vice 2.4, Vice 3.4, and VICE 3.5,
both PAL and NTSC, both True Drive on and off,
They were all working previously with Vice 2.4!
What happened?!
What exactly is the setting that needed to be set?
Help Please!
Thanks!
Update......
It is really weird,
They only works with V 2.4 when I load the CRT image using the VICE menu,
originally I could just drop the CRT image onto the VICE screen.
Well, they all work now, hopefully forever.
I am afraid one day they would stop working.
Not so sure what were going on inside the emulation.
I ran many scene programs and perhaps they changed the internal settings.
There is a guy on Lemon64 with the same issue, maybe you can ask him ?
That as me too!
Thank you for the answer but I am at work so I would have to try the method out at home tonight.
Wishing I have a full time job working strictly just for Commodore 64...
-
oldschooljoe : Please start a new thread here if you need help with emulated hardware. This is not the thread for this - thank you!
-
Sorry falls Offtopic, könnte jermand bitte mal erklären, warum man diese EasyFlash-Versionen braucht bzw. was daran anders (besser?) ist als bei "normalen CRT-Files? Die Möglichkeit, Spielstände zu speichern?
Hab mir die Wiki-Seite angesehen, aber steige da nicht wirklich durch, da es mehr die Verfahren der Übertragung beschreibt.
Ist das Ziel, aus D64 oder PRG files, die es nie als CRT hab, letzteres zu generieren?
Laufen die Easy-Flash-Versionen nur auf jener oder auch auf einer U2+ ?
Sollte ja eigentlich gehen:
https://1541u-documentation.re…asyflash-cartridge-imagesDanke und Gruß,
Tobias
-
Die Spiele gibt oder gab es vorher nicht als Module, der Vorteil ist eben die sehr schnelle Ladezeiten von den Modul-Versionen und dass sie eben nicht nur auf emulierter Hardware laufen sondern eben auch in echte Module geflasht werden können und man so nicht mehr zum Discjockey wird und es eben einfach allgemein bequemer im Handling ist.
-
Easyflash ist ein Modul. Module bestehen in der Regel aus ROM, können also nur gelesen werden. Spiele bzw. generelle Software auf Disketten können aber auch speichern. Manchmal sind es so simple Sachen, wie das abspeichern der Highscore. Das kann bei Easyflash-Anpassungen auch auf dem Modul passieren. Die Software muss aber entsprechend angepasst werden.
Dann gibt auch bauartbedingt den Vorteil, Software, die über mehrere Disketten verteilt ist (1 Diskseite = ca. 170kb vs. 1 Easyflash(-Slot) = ca. 1MB) als "ein" Programm zu haben, ohne Disks wechseln zu müssen und auch ohne die Verrenkungen, die die damaligen Programmierer vornehmen mussten, um ihr Werk erst auf viele Disketten aufteilen zu können (Nachlader, gepackt, was erst wieder entpackt werden muss usw.). Geschwindigkeitvorteile beim Zugriff allgemein usw.
Ist vielleicht besonders sinnvoll, weil besonders deutlich, wenn man (nur) echte Hardware einsetzt.
[EDIT]
Die Spiele gibt oder gab es vorher nicht als Module
Hab mich früher auch immer gefragt, warum nicht vielmehr Software auf Modul erschienen ist, wo das doch viel bequemer und vor allem schneller funktioniert. Aber (mal abgesehen von den Kosten bei der Produktion; Disketten sind oder waren da einfach viel billiger) wenn man bedenket, dass ein normales Modul nur 8k oder 16k Platz hat und eine Diskettenseite 10 bzw. 20mal soviel, ist das natürlich nicht verwunderlich.
[/EDIT]
-