C128 VDC Hires Viewer

Es gibt 73 Antworten in diesem Thema, welches 15.786 mal aufgerufen wurde. Der letzte Beitrag (17. März 2023 um 13:09) ist von tokra.

  • Also Disk 9, 10 und 11 laufen auch auf dem echten C128 bei mir. Bei Disk 11 scheinst Du aber das Bild nicht zu löschen zwischen den Ladevorgängen. Da bleibt in den oberen Zeilen immer "Dreck" am Bildschirm. Bei 9 und 10 scheinen nach dem Löschen auch erstmal 1-2 Zeilen Zufallsgrafik etwas weiter mittig zu entstehen, die werden dann aber vom Bild überschrieben.

  • Gerade herausgefunden das ich wenn ich die Daten in den VDC rüberschiebe es am VICE Emulator egal ist ob ich die Adresse wohin es geschrieben mitsende.

    Kurz gesagt das Programm ist um 300% Schneller als vorher - ob das auf dem echten C128 auch so ist müsste man testen...

    Also, die Adresse wo du was hinschreiben willst (Reg 18/19), musst Du nur einmal am Anfang des Schreibvorgangs setzen, wenn Du danach Register 31 schreibst wird der interne Adresszähler im VDC automatisch hochgezählt, d. h. du kannst einfach Register 31 hintereinander wegschreiben.

  • Ja das habe ich bemerkt. Stimmt Genau :smile:
    Langsam nähere ich mich zu einer Lösung

    Habe übrigens versucht die PAL Werte ins Programm,da du mir sagtest Bowens Code macht den Schirm zu weit auf, zu übernehmen und bin gescheitert mit einem versetzten / doppelten Bild.

    Habe die Werte hier aus dem Forum aus einer Unterhaltung zwischen Dir und GoDot versucht.

    Bitte melde dich an, um diesen Link zu sehen.

    vielleicht liegts am Vice. Ich habe dann einfach wieder die Bowen Tabellle genommen und Reg 36 auf 0 gesetzt (DRAM Refr) um zu sehen ob es schneller wird.

  • Also Disk 9, 10 und 11 laufen auch auf dem echten C128 bei mir. Bei Disk 11 scheinst Du aber das Bild nicht zu löschen zwischen den Ladevorgängen. Da bleibt in den oberen Zeilen immer "Dreck" am Bildschirm. Bei 9 und 10 scheinen nach dem Löschen auch erstmal 1-2 Zeilen Zufallsgrafik etwas weiter mittig zu entstehen, die werden dann aber vom Bild überschrieben.

    Danke für die Rückmeldung. Wie sieht der Dreck oben genau aus ? Linien ? Pixelmüll ?
    Ab 9/10 lösche ich per Blockfill den gesamten VDC RAM glaube ich....

    Bei 11 lösche ich nicht vor der übertragung, stimmt. Aber ich baue erst Halbzeilenbild gerade und danach ungerade in den RAM und das sollte das alte Bild eigentlich überschreiben. Wo die Daten in der Mitte herkommen verstehe ich im Moment leider nicht.
    Beim Emu sind sie Unten und ich dachte die sind vom Vice ? Denn da unten schreibe ich gar nichts hinein.. Komme wohl nicht umhin mir einen C128 zu besorgen :smile:

  • Habe übrigens versucht die PAL Werte ins Programm,da du mir sagtest Bowens Code macht den Schirm zu weit auf, zu übernehmen und bin gescheitert mit einem versetzten / doppelten Bild.

    Habe die Werte hier aus dem Forum aus einer Unterhaltung zwischen Dir und GoDot versucht.

    Bitte melde dich an, um diesen Link zu sehen.

    vielleicht liegts am Vice. Ich habe dann einfach wieder die Bowen Tabellle genommen und Reg 36 auf 0 gesetzt (DRAM Refr) um zu sehen ob es schneller wird.

    Wenn Du mal kurz durchgibst, wo die VDC-Registerwerte im Speicher stehen beim Start des Programms kann ich damit mal rumspielen und versuchen, "gute" Werte da einzutragen. Normalerweise sollte es mit den Werten aus dem verlinkten Beitrag klappen, aber es muss halt alles genau passen. Reg 36 kannst Du nach meiner Erfahrung immer getrost auf 0 setzen, ich hab da noch von niemand gehört, der damit Probleme hatte. Das andere kann ich heute Abend mal schicken, wie der Bild-Aufbau bei mir am Live-Gerät aussieht

  • asm code im Anhang.

    1e2c in Bank 0 (RAM) stehen die Initialisierungswerte (register,Wert) abschluss $ff (ende der Tabellle)

  • Habe übrigens versucht die PAL Werte ins Programm,da du mir sagtest Bowens Code macht den Schirm zu weit auf, zu übernehmen und bin gescheitert mit einem versetzten / doppelten Bild.

    So, hab da mal rumprobiert. Das mit dem versetzen/doppelten Bild ist schnell erklärt. Wenn Du eine andere Bildhöhe nimmst, ändert sich automatisch auch die Lage des zweiten Halbbilds im Speicher, d.h. Du musst dann erstmal neu ausrechnen/ausprobieren, wo die zweite Bitmap im Speicher startet und dann an die richtige Stelle kopieren.

    Ich hab parallel mal Werte ausgerechnet, die möglichst nahe an den NTSC- bzw. PAL-Standard kommen:

    NTSC:

    Reg 0: 126 ($7e)

    Reg 5: 4

    Reg 9: 4

    Reg 4: 103 ($67)

    Reg 6: 103 ($67)


    PAL:


    Reg 0: 127 ($7f)

    Reg 5: 4

    Reg 9: 4

    Reg 4: 123 ($7b)

    Reg 6: 123 ($7b)

    Register 7 musst Du noch jeweils manuell anpassen, damit das Bild sauber in der Mitte anfängt, die Mühe hab ich mir jetzt mal gespart :)

    Die obigen Werte ergeben jedenfalls für NTSC: (103+1)*(4+1)+4=524 Zeilen und für PAL: (123+1)*(4+1)+4=624 Zeilen. Also bis auf eine Zeile dicht am jeweiligen Standard. Die Horizontalfrequenz in Register 0 ist auch jeweils für NTSC und PAL leicht unterschiedlich. Ich würde jedenfalls für 640x480 den NTSC-Mode wählen. Da hast Du auf den Geräten, die NTSC darstellen können eigentlich nie Probleme mit. Außerdem flimmert das Interlace-Bild bei 30 Hz (NTSC) weniger als bei 25 Hz (PAL).


    Und hier noch die Bilder mit dem "Dreck" am oberen Rand:

    Bitte melde dich an, um diesen Anhang zu sehen.   Bitte melde dich an, um diesen Anhang zu sehen.   Bitte melde dich an, um diesen Anhang zu sehen.

  • danke Tokra,

    Hm habe jetzt deine Werte eingesetzt. Am Emu siehts schlecht aus...

    PAL:

    komplettes Vollbild. Jetzt weiss ich was du meinst mit in der Mitte beginnen. Beide Frames liegen komplett verkehrt .... Na das wird schwierig
    muss dann wohl eine tastatursteuerung einbauen....

  • Interessant das Ariana Grande Bild , wo bei Dir ein Teil des Kopfes fehlt dafuer bitmüll auf deinem Rechner angezeigt wird es bei mir im EMU gut aussieht... Kann es sein das das Bild gerade im Aufbau war ?

    Frage mich echt woran sowas liegt...

    werde mir mal ansehen was oberhalb meiner bilder ist also im -1 adressbereich also FF00... im VDC ...

  • Ja, ich hab die Bilder extra im Aufbau fotografiert, damit Du den Datenmüll sehen kannst.

    Für die Grundeinstellung von Register 7 würde ich tatsächlich zu Testzwecken erstmal eine Tastatursteuerung einbauen, aber die Bilder müssen sich in jedem Fall überlappen, das liegt definitiv nicht an Register 7. Du musst nur die zweite Bitmap an der richtigen Stelle im Speicher starten lassen, so dass sich die Grafik richtig überlappt und danach kannst Du dann Register 7 einstellen.

  • Nochmal zur genauen Erläuterung, wo die zweite Halb-Bitmap im Speicher stehen muss. Dies wird soweit ich weiß bestimmt durch Register 6 (angezeigete Zeilen) und Register 9 (Zeilenhöhe). Im NTSC-Beispiel oben wäre das demnach: 103*(4+1)=515

    80 Bytes pro Zeile (bei 640-Auflösung horizontal) = 515*80 Bytes = 41200. Davon die Hälfe ist der Start der 2. Halb-Bitmap = 20600. Ganz genau stimmt das aber auch nicht. Aus irgendeinem Grund musst man noch eine Zeile addieren, also müsste der Wert dann 20680 sein. Probier das doch mal aus als Startwert für den zweiten Screen aus, ob dann immer noch Überlappungen kommen.

    Register 7 würde ich wie gesagt erst danach anpassen.

    Wenn das soweit läuft würde ich für PAL empfehlen, die beiden Halb-Bitmaps erst später im Speicher starten zu lassen. Bei 625 Zeilen PAL-Bild steht das 640x480 Bild sonst oben am Rand fest. Wenn Du das zentrieren willst würde ich beide Halb-Bitmaps ca. 50 Zeilen tiefer starten lassen also genau 4000 Bytes. Damit kein Datenmüll angezeigt wird ist es immer wichtig, die 64K per Block-Fill vor jedem Anzeigen einmal komplett zu löschen. Das geht am einfachsten wie im Beispiel von F. Bowen:

    Code
    270 : rem Clear the bitmap using block fills
    280 SYSDEC("CDCC"),0,18 :SYSDEC("CDCC"),0,19 :SYSDEC("CDCC"),0,31
    290 FORI=0TO255:SYSDEC("CDCC"),0,30 :NEXT
  • Habe mir eine Tastatursteuerung eingebaut und kann das 2. Halbbild rauf unt runter scrollen und links auch.

    Habe sie nicht passgenau zusammenfügen können. Aber was interessant ist das die PAL Werte von Dir das Bild im Emulator erst in der Mitte starten lassen...

  • Dass das Bild in der Mitte startet liegt ziemlich definitiv an Register 7, dafür solltest Du eine Tastatursteuerung einbauen. Den Start des 2. Halbbildes müsstest du nach den oben stehenden Regeln berechnen. Ohne Programm/Source kann ich dir hier nicht weiterhelfen, da ich das dann nicht am echten Gerät prüfen kann. Das müsstest du dann schon mit anhängen. Wäre auch gut, wenn Du die Register-Einstellung / Beginn 2. Halbbid erstmal aus dem Assembler-Programm auslagerst und in BASIC konfigurierbar machst, da lässt sich dann deutlich leichter experimentieren und die richtige Einstellung finden.

  • Also, ich hab da eben nochmal länger rumprobiert. Mit meinen Werten oben klappt es grundsätzlich, allerdings muss man 40 statt 80 addieren für die 2. Halbbitmap. Unter VICE hatte ich dann noch andere kleine Probleme mit der Bildhöhe insgesamt. Dies bringt mich zu dem Schluss, dass Du am besten meine bereits in VDC Mode Mania genutzten Modi mit den Registereinstellungen übernehmen solltest. Daran sind Z64K und VICE auch angepasst und dann hast Du insgesamt am wenigsten Probleme. Sind halt über Jahre getestete Werte...

    Für NTSC:

    0,126,3,137,4,132,5,3,6,132,7,129,8,3,9,3,12,82,13,128,20,0,21,0,25,135,28,255,36,2

    Bitmap oberes Field @ $aa00

    Bitmap unteres Field @ $5780

    Für PAL:
    0,127,2,104,3,137,4,104,5,5,6,104,7,98,8,3,9,5,12,64,13,16,20,0,21,0,25,135,28,255,36,2

    Bitmap oberes Field @ $a280

    Bitmap unteres Field @ $4100

    Ja, die oberen Field-Zeilen liegen im Video-RAM des VDC hinter den unteren Zeilen. Bei PAL kannst Du im Video-RAM jeweils nach Belieben noch je 80 Byte addieren, um das Bild weiter mittig auf dem Bildschirm zu zentrieren. Probier mal $b220 und $50a0 z. B.

  • Cursortasten verschieben die Baseadresse in die jeweilige Richtung (640 Bytes rauf und runter) 1 Byte (rechts / Links)

    Taste A , S erhöhen oder erniedrigen das Register 7

    Leertaste = nächstes Bild laden...

    VDC mit deinen PAL Werten initialisiert.

    Fehler in der VDC löschroutine behoben (hatte nur 159 *256 bytes gelöscht :crying: )

    Startwerte:

    6180 Beginn der Videodaten für ODD Frame

    Reg 7 : 0 (bild beginnt ganz oben)

    Anmerkung:

    ist Reg 7 : $6a steht das Bild im Emulator korrekt mittig


    Am 40 Zeichen Schirm werden die Werte in HEX ausgegeben.

    Achtung: Baseadresse ist immer die unterste also letzte Zeile vom Bild. Da bei BMP die Bilder am Kopf stehen. Will man die richtige Adresse wissen muss davon 19200 Bytes (=240 x 80) subtrahiert werden...

    Beispiiel: $6180 start des Odd Frames anzeige : $ac80

  • Ja, mit $6a in Reg 7 sieht das ganz gut aus auf dem 1901. Kannst wohl noch ein paar Zahlen höher gehen, der Rand ist unten ja noch kleiner als oben. Aber das ist eh je Monitor immer ein bisschen anders.

    Bitte melde dich an, um diesen Anhang zu sehen.

    Wenn man dann aber mehrere Bilder nacheinander lädt schiebst sich oben wieder "Dreck" über die Bitmap.

    Bitte melde dich an, um diesen Anhang zu sehen.

    Würde dir trotzdem empfehlen, mal meine "getesteten" Werte zu probieren. Ab davon würde ich bei 640x480 immer die NTSC-Variante empfehlen. Flimmert deutlich weniger als PAL.

  • 1000 Dank Tokra !

    Geht NTSC denn auf einem europäischen Monitor ? mit 60 Hz ?

    Die neuen TFT können das natürlich intern per software aber so ein Analogmonitor ?

    Frage mich echt wo der Dreck herkommt ?

    Sieht aus wie Teile meines Viewercodes ... Am Emulator sehe ich da gar nix

    Muss überlegen wie ich das nachstelle am Emu ? Der VDC wird jetzt komplett gereinigt (beim Systemstart)

    Also entweder ist das vom vorherbild (allle BMP bilder haben 152 Blöcke auf der DISK = 38.7 KB)

    aber ich denke es sieht nach dem RAM vom Viewer aus...

  • Ok schnell mal ein CLEAR Befehl vor jedes Bild gesetzt löscht jedesmal den VDC RAM vor der Anzeige, damit sollte Müll weg sein.

    Ist er bei dir immer noch da muss das irgendwas anderes sein.

    Taste "C" löscht jederzeit den VDC RAM und malt das ODD Frame nochmals darüber (Testmode)

  •  

    Würde dir trotzdem empfehlen, mal meine "getesteten" Werte zu probieren. Ab davon würde ich bei 640x480 immer die NTSC-Variante empfehlen. Flimmert deutlich weniger als PAL.

    Ich habe Deine Werte für PAL verwendet für die Initialisierung. Die offsets der Base Adresse ist über die Tastatur ermittelt. Muss mir noch im Detail ansehen und durchdenken was diese ganzen VDC Register im einzelnen tun..

    Aber jetzt weiss ich das ich mit REG 7 immerhin Hardware scrolling machen kann...

  • Ok schnell mal ein CLEAR Befehl vor jedes Bild gesetzt löscht jedesmal den VDC RAM vor der Anzeige, damit sollte Müll weg sein.

    Ist er bei dir immer noch da muss das irgendwas anderes sein.

    Ok, das hat geklappt. Kein Müll mehr oberhalb des Bildes.

    Aber WÄHREND des Ladens wird immer noch oben Müll angezeigt. Und ich weiß jetzt auch, wo der her kommt. Im VICE startet man das D71 ja normalerweise im 40-Zeichen-Modus. Da habe ich gesehen, dass das Pi-Symbol etwa 250 mal geprinted wird. Wenn Du das Image im 80-Zeichen-Modus startest (wie ich es am C128 mache), scheint er die Pi-Symbole dann direkt in den Video-RAM des VDC zu schreiben (als ob man die Symbole eintippt).

    Bitte melde dich an, um diesen Anhang zu sehen.

    Ich habe Deine Werte für PAL verwendet für die Initialisierung. Die offsets der Base Adresse ist über die Tastatur ermittelt. Muss mir noch im Detail ansehen und durchdenken was diese ganzen VDC Register im einzelnen tun..

    Die Werte aus meinem Post heute 20:49 Uhr?

    Geht NTSC denn auf einem europäischen Monitor ? mit 60 Hz ?

    Die neuen TFT können das natürlich intern per software aber so ein Analogmonitor ?

    Also GEOS 128 lief damals im 80-Zeichen-Modus auch immer im NTSC-Modus. Zumindest der 1901 und 1084 hatten da keine Probleme mit. Und viele TVs auch nicht. Ich kann mich erinnern, dass wir damals den AMIGA 500 problemlos auf 60 Hz laufen lassen konnten über SCART (ca. 1988). Das müssen schon SEHR alte Geräte sein, die das nicht können, aber auf denen kann man ohnehin den 80-Zeichen-Modus kaum darstellen. :D

    Zitat

    Aber jetzt weiss ich das ich mit REG 7 immerhin Hardware scrolling machen kann...

    Örks, das ist die Einstellung für die vertikale Sync-Position. Vertikal-Scrolling würde ich da eher nicht mit machen.