VGA-Treiber-PASM-Dreh gesucht!
VGA-Treiber-PASM-Dreh gesucht!
Hallo Drohnen,
suche für folgendes Problem ne Lösung:
In einem Bildpuffer von 8k für VGA-Auflösung 320xirgendwas wird der Inhalt je "Zeichen" gespiegelt dargestellt. D.h. Je Byte liegen die Bits für die Pixel genau falschherum.
Alle mir bekannten Treiber lesen nun eine long (4Byte) ein, um sie der Videohardware zu übergeben.
Ich müßte nun in der long jeweils in jedem Byte separat die Bits genau vertauschen, also bit7 wird bit1, bit6 wird bit2 usw.
Und da bin ich nun mit meinem PASM-Latein am Ende, nicht wegen der Programmierung an sich, sondern wegen der Schnelligkeit meiner Programmierversuche. Verbrauche zuviel Rechenzeit und damit bleibt dann der Moni dunkel
Hat jemand ne zeitsparende Idee?
Grüße Uwe
suche für folgendes Problem ne Lösung:
In einem Bildpuffer von 8k für VGA-Auflösung 320xirgendwas wird der Inhalt je "Zeichen" gespiegelt dargestellt. D.h. Je Byte liegen die Bits für die Pixel genau falschherum.
Alle mir bekannten Treiber lesen nun eine long (4Byte) ein, um sie der Videohardware zu übergeben.
Ich müßte nun in der long jeweils in jedem Byte separat die Bits genau vertauschen, also bit7 wird bit1, bit6 wird bit2 usw.
Und da bin ich nun mit meinem PASM-Latein am Ende, nicht wegen der Programmierung an sich, sondern wegen der Schnelligkeit meiner Programmierversuche. Verbrauche zuviel Rechenzeit und damit bleibt dann der Moni dunkel
Hat jemand ne zeitsparende Idee?
Grüße Uwe
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: VGA-Treiber-PASM-Dreh gesucht!
Poste doch mal deinen PASM-Code, es reicht ja die innere relevante Schleife.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Re: VGA-Treiber-PASM-Dreh gesucht!
Das klingt nach 8x? RAM font. Also warum nicht einfach all bytes in der Fontdefinition spiegeln (font[idx] ><= 8)? Muss ja nicht permanent sein sondern kann gemacht werden bevor Du den Treiber startest.unick59 hat geschrieben:Ich müßte nun in der long jeweils in jedem Byte separat die Bits genau vertauschen, also bit7 wird bit1, bit6 wird bit2 usw.
Re: VGA-Treiber-PASM-Dreh gesucht!
@drohne 235:
hab den code nicht hier zur Hand, aber vom Prinzip:
1. Einlesen Long aus Bildspeicher,
2. auf Byte (1,2,3,4) zurechtschieben
3. Über Carry nach rechts Bit rausschieben
4. Über Carry nach links in Variable reinholen
5. djnz zu 3.
6 Variable zurechtschieben
7. djnz zu 2.
und das sind halt scheinbar zu viele Taktzyklen, so dass waitvid nicht mehr funzt.
bei drehung eines Bytes reichts.
Hab also grundsätzlich da keine andere Lösungsidee
@kuroneko:
Ist ein Speicher, der auch "vollgrafisch" ggf beschrieben werden soll. Handelt sich dabei konkret um eine Emulation eines alten DDR-Rechners JU+TE-Computer in der letzten Ausbaustufe, sog. ES 4.0.
Könnte durchaus in den Emulationsroutinen, die auf den Grafikspeicher zugreifen die Drehung realisieren - hab ich als Alternative im Auge - aber das verlangsamt natürlich den Emulator.
Weitere Variante wäre: Emulator schreibt lustig in Bildspeicher1, Separate Cog rechnet um und schreibt in Bildspeicher2, Treiber stellt Bildspeicher2 dar. Scheitert aber an den 32k des Prop, da ja halt auch noch anderer Code Platz haben muss.
Kann man eigentlich den internen ROM des Prop umprogrammieren? z.b. das ROM-Image des emulierten Rechners (Z8-Prozessor) anstelle des ROM-Zeichensatzes?
hab den code nicht hier zur Hand, aber vom Prinzip:
1. Einlesen Long aus Bildspeicher,
2. auf Byte (1,2,3,4) zurechtschieben
3. Über Carry nach rechts Bit rausschieben
4. Über Carry nach links in Variable reinholen
5. djnz zu 3.
6 Variable zurechtschieben
7. djnz zu 2.
und das sind halt scheinbar zu viele Taktzyklen, so dass waitvid nicht mehr funzt.
bei drehung eines Bytes reichts.
Hab also grundsätzlich da keine andere Lösungsidee
@kuroneko:
Ist ein Speicher, der auch "vollgrafisch" ggf beschrieben werden soll. Handelt sich dabei konkret um eine Emulation eines alten DDR-Rechners JU+TE-Computer in der letzten Ausbaustufe, sog. ES 4.0.
Könnte durchaus in den Emulationsroutinen, die auf den Grafikspeicher zugreifen die Drehung realisieren - hab ich als Alternative im Auge - aber das verlangsamt natürlich den Emulator.
Weitere Variante wäre: Emulator schreibt lustig in Bildspeicher1, Separate Cog rechnet um und schreibt in Bildspeicher2, Treiber stellt Bildspeicher2 dar. Scheitert aber an den 32k des Prop, da ja halt auch noch anderer Code Platz haben muss.
Kann man eigentlich den internen ROM des Prop umprogrammieren? z.b. das ROM-Image des emulierten Rechners (Z8-Prozessor) anstelle des ROM-Zeichensatzes?
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
Re: VGA-Treiber-PASM-Dreh gesucht!
nee das geht nich beim ROM.unick59 hat geschrieben:Kann man eigentlich den internen ROM des Prop umprogrammieren? z.b. das ROM-Image des emulierten Rechners (Z8-Prozessor) anstelle des ROM-Zeichensatzes?
Da hilft nur eins du baust einen anderen Treiber mit eigenem Zeichensatz ein das kostet natürlich Speicherplatz.
Oder du baust einen original Parallax Treiber ein da gibt es die Drehung nicht.
Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: VGA-Treiber-PASM-Dreh gesucht!
Aber selbst vollgrafisch heisst fuer mich das bit 0 der linke pixel ist (little-endian bis auf Bit-Level). Falls Du einen Link hast (hab nur ES 4.0 binaries gefunden) lass es mich wissen. Ansonsten, haeng den Code hier an, bisher haben wir immer 'ne Loesung gefunden (320x??? is langsam genug um einen gewissen Freiraum zu haben).unick59 hat geschrieben:@kuroneko:
Ist ein Speicher, der auch "vollgrafisch" ggf beschrieben werden soll. Handelt sich dabei konkret um eine Emulation eines alten DDR-Rechners JU+TE-Computer in der letzten Ausbaustufe, sog. ES 4.0.
z.B. angenommen 640x480 VGA timing (25.175MHz). Da die Aufloesung aber nur 320 Pixel betraegt, ist der eigentliche Pixeltakt nur halb so gross. 8 Pixel benoetigen daher 8/(25.175MHz/2)*80MHz = 50.8 Takte.
Code: Alles auswählen
rdbyte temp, addr
add addr, #1
rev temp, #{32-}24
waitvid colour, temp
djnz spalten, #$-4
Re: VGA-Treiber-PASM-Dreh gesucht!
für kuroneko!
Dein Codefragment hat mir die Schuppen von den Augen fallen lassen, so dass ich den WeihnachtsBaum im Wald wieder sehen konnte
Der Baum hieß REV!
Problem problemlos gelöst.
Danke!!
Grüße Uwe
Dein Codefragment hat mir die Schuppen von den Augen fallen lassen, so dass ich den WeihnachtsBaum im Wald wieder sehen konnte
Der Baum hieß REV!
Problem problemlos gelöst.
Danke!!
Grüße Uwe
Re: VGA-Treiber-PASM-Dreh gesucht!
Hallo Uwe,
mein Senf zum Thema:
...tauscht alle Bits in einem Long. Wenn Du jetzt, wie in Deinem ursprünglichen Post geschrieben, die Bytes im Long an ihrer Position lassen willst, kannst Du folgendes versuchen (A ist der in-out-Parameter und B eine temp. Variable):
Im Gear ist es mir übrigens nicht gelungen, den Code zu testen. REV arbeitet dort anders als in der Doku beschrieben.
Grüße vom U-Held
mein Senf zum Thema:
Code: Alles auswählen
rev A, #0
Code: Alles auswählen
rev A, #0
mov B, A
ror A, #8
and A, MASKE
and B, MASKE
rol B, #8
or A, B
MASKE long $FF00FF00
A long 0
B long 0
Grüße vom U-Held