Beiträge von TeSoto

    Im Moment ist das alles Theorie, ich teste da gar nichts. Das soll so gut wie möglich vorausgeplant werden und wird dann ins ROM übernommen.

    Die C128-Routinen sind ja auch nicht mehr interessant. Es geht jetzt darum, die auf dem C64 nicht nutzbare Routine

    Code
    7F96  20 74 FF   JSR $FF74    ; indfet Bank LDA (fetchvec),y

    gegen etwas zu ersetzen, was auf dem C64 funktioniert. Ich denke, man muß der Copy-Routine jetzt die Adresse vom VIC-Charset geben.

    Die C128-Routine nutzt die Adressen 218/219 als temporären Speicher, beim C64 wird es 253/254 sein, da diese Speicherplätze frei sind.

    Ja, der VDC soll im C64-Modus vollständig unterstützt werden.


    Beim C128 wird der Bereich $02a2 - $02ae (674 - 686) als Kernal RAM bezeichnet. Da wird die MMU und

    andere Hardware des C128 kurzzeitig Daten ablegen. Also so wie ich das im Bereich 251 - 254 machen wollte.


    So, hier ist das Listing. Ich hoffe das ist richtig so, muß jede Opcode-Funktion einzeln nachschauen :P



    Es werden in der Routine also die Adressen 218 und 219 verwendet. Der ist in der Speicherbelegungstabelle

    ganz informativ als "00da-00df Misc Editor work area" bezeichnet. Auf jeden Fall ist es ein Zwischenspeicher.

    Demnach müßte man doch 218/219 gegen 253/254 ändern können. Also $DA/DB gegen $FD/FE.

    Jetzt aber zurück zu der Zeichensatzgeschichte. Hier sind einige Informationen über den VIC-II.


    Im Register $DD00 befindet die aktuelle VIC Speicherbank. Bit 0 und 1:


    11 = Bank 0 $0000 - $3FFF

    10 = Bank 1 $4000 - $7FFF

    01 = Bank 2 $8000 - $BFFF

    00 = Bank 3 $c000 - $FFFF


    Im Register $DD18 befindet sich der Offset in der 16K VIC Speicherbank.

    Die ist mit den Bits 1 bis 3 definiert, Bit 0 ist unbenutzt.


    000 (0) = $0000 - $07FF

    001 (1) = $0800 - $0FFF

    010 (2) = $1000 - $17FF

    011 (3) = $1800 - $1FFF

    100 (4) = $2000 - $27FF

    101 (5) = $2800 - $2FFF

    110 (6) = $3000 - $37FF

    111 (7) = $3800 - $3FFF


    Also die VIC Speicherbank plus Offset ergibt die 16 Bit-Adresse des Charakterspeichers.

    Jetzt muß man halt diese Adresse der Char-Copy-Routine geben, wie es sonst die MMU des

    C128 bei Routine $F7D0 macht. Hier ist die noch mal, aber das hilft glaube ich nicht groß weiter.


    Code
    ; Get Char From Memory Bank
    
    F7D0: 8D AA 02    STA $02AA
    F7D3: BD F0 F7    LDA $F7F0,X  ; MMU Bank Configuration Values
    F7D6: AA          TAX
    F7D7: 4C A2 02    JMP $02A2    ; Bank Peek Subroutine


    Falls Werte zwischengespeichert werden müssen, die Adressen 251 bis 254 sind beim C64 noch frei.

    Ich habe bisher alles versucht, irgendwo einen CPLD auszulesen, kein Erfolg.


    Eine SuperCPU 128 habe ich auch, aber ich habe sie nie eingesetzt. Sie ist mir zu klobig, paßt nicht an mein C128-Setup.

    Am C64 geht sie nicht, da ich kein passendes Netzteil habe. Die Flash 8 läuft sogar mit der alten BBGRAM 2 MB per

    Y-Adapter am Standard-Netzteil. Zusammen mit einer BBGRAM/NeoRAM 2 MB hat man unter GEOS 3 MB RAM, das

    reicht für zwei RAM 1581. Mit 9 MHz ist GEOS ein Traum.


    Das jemand versucht, die SuperCPU nachzubauen, habe ich kurz überflogen. Aber so richtig scheint es ja noch nicht

    zu werden. Dazu wird das Ding sehr teuer. Bei der Flash 8 kommt man bei 65C816, ZIP-RAM und EEPROM auf knapp

    35 Euro, dazu noch ein paar Euro für Sockel, TTL-Bauteile und Quarz. Wenn die Platine nicht zu teuer wird, könnte man

    sich also für knapp 60 Euro eine Turbokarte zusammenlöten. Nur den MACH 130/131 zu bekommen wird schwierig.

    Die vom Forum 64 sind nicht offen für neue Dinge. Ich habe auch diverse Hardwareprojekte vorgeplant, die allesamt eins gemeinsam haben: Sie sind kompatibel zur Original-Hardware und man kann sie selbst zusammenbauen. Deshalb braucht man nur die Platine produzieren und sie werden günstig. Aber an so etwas hat da niemand Interesse, die kaufen lieber für mehrere hundert Euro irgendwelche FPGA-Nachbauten.


    Ich bin ja ein großer Fan der Flash 8. Meine läuft inzwischen mit 9 MHz, nur durch Tausch des 32 MHz-Quarz gegen ein 36 MHz-Quarz. Ich habe ZIP-RAM mit 60 ns bekommen, es sind Kühlkörper drauf und anstelle des 120 ns-EPROM kommt ein 45 ns-EEPROM drauf. Damit halte ich mich an die Spezifikationen der Flash 8. Und meine läuft total stabil, seit Jahren. Aber die kapieren das nicht. Irgendwann hat irgendjemand mal das Gerücht gestreut, daß die instabil wäre und das glauben alle. Dabei wäre es mal hochinteressant, die Daten des verwendeten MACH 130 CPLD's herauszubekommen. Vielleicht war Rossmöller nachlässig genug, das Leseschutz-Bit nicht zu setzen, ansonsten müßte man das mal per Reverse Engineering machen. Die Flash 8 besteht neben DIP-65C816 und ZIP-RAM sonst nur aus ein paar TTL-Bausteinen, man könnte sie ebenfalls leicht nachbauen. Aber an sowas besteht da kein Interesse. Warum? Man könnte so für wenig Geld eine Turbokarte für jeden C64 bekommen.


    Den Kernal der Flash 8 habe ich übrigens überarbeitet. Das JiffyDOS 6.01 war so etwas zusammengestückelt, ich habe das mal aufgeräumt und habe einige neue Befehle hinzugefühgt, z.B. um den 65C816 in den 8- oder 16 bit-Modus zu schalten. Die Flash 8 hat auch ein 32K-ROM in Bank 31, das ist der Adressbereich $1F0000 bis $1F7FFF. Das wäre ein idealer Platz für ein neues Basic, z.B. von Ardndt Dettke's optimiertes Tuned Simons' Basic. Dann kann man das Basic V2 in den ersten 64K abschalten und hat mehr BASIC-RAM. Oder man verlegt den BASIC-Speicher komplett in den hohen Bereich und hat dann 960 KB BASIC RAM. Und bei einer Geschwindigkeit von 9 MHz kommt man mit BASIC gut aus. Aber: es müßte sich mal jemand daran machen, den MACH 130 auszulesen. Die Modifikationen des F8-Kernals habe ich übrigens in einem 8-seitigen Dokument genau dokumentiert.

    ThoralfAsmussen


    Also von wegen RAM Disk sehe ich in der Charset-Routine nichts. Es gibt einen Aufruf nach $FFCA. Das ist ein Pointer für die Routine $F7D0, um die MMU umzuschalten, daß man ans Character Memory kommt. Das gibt es aber im C64 heraus, also kann der Aufruf JSR $FF74 ; indfet Bank LDA (fetchvec),y raus. Er muß jetzt durch etwas ersetzt werden, daß man auf einem C64 nutzen kann. Man muß der Routine die Werte übergeben, die sonst von der MMU kommen. Nur wie und wo werden diese Daten von der MMU abgelegt? Da sind eben die C128-Programmierer gefragt, die sich mit der MMU auskennen.


    Die Werte sollten die Adresse sollte auf den aktuell verwendeten VIC-Zeichensatz zeigen. Dazu müssen die Register beim VIC ausgelesen werden und an die Routine weitergegeben werden. Das dürfte nicht allzu schwierig sein, aber ich kann das nicht.

    Habe ich schon gesehen, das hilft nicht so recht. Es geht ja erst mal darum, den VDC zu initialisieren.

    Der nächste Schritt wäre es also, eine Tabelle mit den Standarddaten in die VDC-Register zu schieben.

    Das wäre die hier:


    Code
    7FB3  .BYTE  00 7F 01 50 02 66 03 49
    7FBB  .BYTE  04 26 05 19 06 19 07 20
    7FC3  .BYTE  08 20 09 E7 0A A0 0B E7
    7FCB  .BYTE  0C 00 0D 00 0E 00 0F 00
    7FD3  .BYTE  14 04 15 00 16 78 17 E8
    7FDB  .BYTE  18 20 19 40 1A F2 1B 00
    7FE3  .BYTE  1C 2F 1D E7 22 7D 23 40
    7FEB  .BYTE  24 F5 FF


    Das ist jeweils abwechselnd das Register und der Wert. $ED ist das Abschlußbyte.

    Die Hauptänderung ist die Zeichenfarbe, die ist jetzt weiß auf blau wie beim C65.

    Es muß also ein Loop sein, der Register und Wert aus der Tabelle liest und dann

    mit den VDC-Write-Routinen setzt. Beim Wert $FF wird der Loop beendet.

    Ich hatte irgendwo mal eine VDC-Routine gefunden, die diese Tabelle verwendet,

    da war die für NTSC. Ich habe sie bisher habe ich sie aber nicht wiedergefunden.

    Für mich ist es ganz einfach unverständlich, weshalb man nicht einfach mal jemandem helfen kann.

    Ich mache das immer, wenn ich kann.


    Ich kann auch mieses zwischenmenschliches Verhalten nicht leiden. Wenn Leute anstatt nützlicher

    Ergebnisse nur viel Energie in Beleidigungen und Vorwürfe bringen, aber keine nützlichen Ergebnisse

    vorweisen, ist das doch nicht akzeptabel.


    Wenn ihr den Forum64-Thread verfolgt, dann sagt mir mal, wie viel Sinnvolles die anderen zu dem Thread

    beigetragen haben. Und wenn detlef jetzt abhaut, ist er auch nicht diskussionsfähig.

    Hier, such nach "Set Up 80". CE27: 20 74 FF JSR $FF74 ; indfet Bank LDA (fetchvec),y ist der Teil, der im C64-Modus nicht geht.


    Ja, den VDC kann man vom C64-Modus aus benutzen. Eye of the Beholder nutzt ihn als Automap. Das Spiel schaltet optional den VIC in der Zeit, wo der Rasterstrahl nicht sichtbar ist, den C128 auf 2 MHz. Damit bekommt man eine Taktfrequenz von ca. 1,3 MHz.


    Das Demo 'Risen from Oblivion' kann man glaube ich auch aus dem C64-Modus starten, auch die VDC-Version. Die neuen Register des VIC-IIe im C128 lassen sich natürlich auch vom C128-Modus aus nutzen. Eye of the Beholder nutzt die Zusatztasten des C128, die werden ja im VIC-IIe abgefragt.

    Bisher scheint es ja noch keine komplette Routinensammlung gegeben haben, die den VDC im C64-Modus

    vollständig wie im C128-Modus initialisiert. Also wäre es ja nicht schlecht, wenn mir da jemand was zur

    Verfügung stellen kann. Aber so ganz notwendig ist das ja gar nicht, denn die meisten Sachen habe ich ja

    aus dem C128-ROM auch angepaßt. Es fehlen mehr oder weniger noch Details.


    Die Char-Copy-Routine verwendet die Routine $FF74, um auf das Char-ROM im C128-Modus zuzugreifen.

    Das geht aber im C64-Modus nicht. Es wäre also am sinnvollsten, die Adresse vom aktuell benutzten VIC-

    Charset als Basis zu verwenden und von dort aus 4096 Bytes in die VDC-Register zu schieben. Ich habe die

    Routine vor mir und sehe an INX, INY, DEY, INC usw. daß da irgendwelche Loops ablaufen, aber was genau

    passiert kann ich nicht sagen. Dazu war das 128-ROM-Listing nicht gut genug dokumentiert.