DLI in Graphics 8

Bild Alles zum Thema Programmierung
Bild All around programming

Moderatoren: skriegel, Sleepy, des-or-mad, Wolfgang, cas

DLI in Graphics 8

Beitragvon atarixle » Mi 20. Mai 2020, 06:52

Hallo,

kann mir jemand eine Display-List posten, in der in jeder Graphics-8-Zeile ein DLI ausgelöst wird?

... und eine Assembler-Routine schreiben, in der die Farben 709 und 710 aus einer Liste ausgelesen und geändert werden?

Mein DLI sieht bisher so aus:

Code: Alles auswählen
pha
tya
pha
   
ldy $A0         ; Zaehler
lda ($92),y     ; A=PEEK(DPEEK($92)+Y)
sta WSYNC
sta $D018

lda ($94),y
sta $D017
   
iny
sty $A0         ; Zaehler

pla
tay
pla
rti


Ein VBI setzt den Zähler ($A0) zurück.

Leider kann ich nur 51 DLIs auslösen, um ein stabiles Bild zu erhalten. Ab 52 DLIs flackern die Farben nur so umher.
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon FlorianD » Mi 20. Mai 2020, 12:08

statt
Code: Alles auswählen
iny
sty $A0         ; Zaehler

kannst Du
Code: Alles auswählen
inc $A0         ; Zaehler

machen



DLI: nimm doch die DLI, die das OS macht, wenn man GR.8 aufruft. und dann lauf durch und setze überall Bit 7;
denk dran, dass bei GR.8 zweimal ein Load Memory Scan (LMS) gemacht werden muss, weil der Screen-Speicher eine 4K Grenze überschreitet.


$92,93 und $94,95 liegen in dem Bereich, der von BASIC genutzt wird. Das könnte Deine Probleme hervorrufen. Probier mal $00CB-$00CF, das sollte gehen. Wenn das auch nicht geht, nimm mal $0600-$0603 nur um das auszuschließen. Dann geht zwar nicht Zeropageadressierung aber das sollte unkritisch sein.
RUN $E477
--
Benutzeravatar
FlorianD
Night&Day Poster
Night&Day Poster
 
Beiträge: 1689
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main

Re: DLI in Graphics 8

Beitragvon atarixle » Mi 20. Mai 2020, 14:27

Das ganze ist in C geschrieben, Atari BASIC sollte also nicht das Problem verursachen. Dennoch habe ich es mit dem Bereich $CB bis $CF sowie $0600 bis ... probiert. Beides leider ohne Erfolg.

Die Displaylist übernehme ich ja schon vom OS.

Meine DL erzeuge ich wie folgt:

Code: Alles auswählen
void init_dli() {
   unsigned int i;
   unsigned int dl=PEEKW(560); // PEEKW=DPEEK=zwei Byte-Peek
   
   POKE(dl+3, 0x80 | 0x40 | 0x0f);
   for(i=dl+6; i<=dl+56; i++) { // for i=dl+6 to dl+56 step 1
      if (PEEK(i)==0x0f) {
         POKE(i, 0x8f);
      } else if (PEEK(i)==0x4f) { // == ist ein Vergleich. Wie = in BASIC
         POKE(i, 0x80 | 0x40 | 0x0f); // | binäres ODER
         i+=2; // i=i+2
      }
   }
   // POKE(dl+28,2);

   // DLI initialisieren
   POKEW(0x0200, (unsigned int)DLI); // VSDLST ... DLI-Adresse bekannt geben
   POKE(0xd40e, 0x80 | 0x40); // NMIEN ... DLI und VBI einschalten
}


Ist zwar C-Code, sollte sich aber auch wie BASIC lesen lassen und auch so verhalten.
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon FlorianD » Mi 20. Mai 2020, 20:00

die DL für GR.8 (und der Screen auch, nämlich 192) hat doch mehr als
Code: Alles auswählen
for(i=dl+6; i<=dl+56; i++)

56 Zeilen?!

Oder willst Du nur die ersten 56-6=50 Zeilen ändern?
RUN $E477
--
Benutzeravatar
FlorianD
Night&Day Poster
Night&Day Poster
 
Beiträge: 1689
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main

Re: DLI in Graphics 8

Beitragvon atarixle » Mi 20. Mai 2020, 20:27

Das ist nur der Beispiel-Code, ab wann es nicht mehr funktioniert. Ab 56 Zeilen (bzw. 51 Zeilen, Zeile 1 wird ja auch noch manipuliert
Code: Alles auswählen
POKE(dl+3, 0x80 | 0x40 | 0x0f);
) flackert das Bild nur noch, anstatt die Farben stabil zu halten. Wenn ich dort 55 eingebe, dann funktioniert alles - eben nur bis zur 55. Zeile (naja, minus der 6 und der 1).
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon FlorianD » Mi 20. Mai 2020, 20:34

ist die Liste lang genug, aus der gelesen wird? Mach die mal 5 Elemente länger und leg da Nullen rein.
RUN $E477
--
Benutzeravatar
FlorianD
Night&Day Poster
Night&Day Poster
 
Beiträge: 1689
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Frankfurt am Main

Re: DLI in Graphics 8

Beitragvon atarixle » Mi 20. Mai 2020, 21:15

Ja, die Liste ist 2*192 Bytes lang.

Kann es sein, dass, wenn bei lda ($92),y (bzw. lda ($94),y) eine Page-Grenze überschritten wird, das Carry-Flag Ärger macht? Aber dann dürften doch die Farben ab der Bildmitte nur durcheinander fest stehen, aber nicht über den gesamten Bildschirm flackern ...
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon atarixle » Mi 20. Mai 2020, 23:20

Komisch: lasse ich den Wechsel der zweiten Farbe weg, so funktioniert es bis dl+88 ...

Ohne sta WSYNC schafft er es bis dl+128 ... der Glitch (Umschalten der Farbe während des Zeilenaufbaus) wandert immer mehr nach rechts. Da werden wohl Timing-Probleme schuld sein.
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon atarixle » Do 21. Mai 2020, 14:33

Ohne WSYNC und mit nur einer Farbe reicht es bis Zeile 191
Mit selbstmodifizierendem Code kann ich ein paar Zyklen sparen, mal sehen, ob ich das im inline-Assembler von cc65 irgendwie hinkriege.
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben

Re: DLI in Graphics 8

Beitragvon atarixle » Do 21. Mai 2020, 19:59

Ok, mit selbstmodifizierendem Code bekomme ich es hin, die Hintergrundfarbe in allen Zeilen synchronisiert zu ändern.
ABBUC in Berlin: http://www.abbuc.de/~atarixle/AIB/
FUJIAMA 2020 - Do, 20.8. - So, 23.8.2020: http://fujiama.eu
Meine Seite: http://www.atarixle.de
Benutzeravatar
atarixle
Super Poster
Super Poster
 
Beiträge: 1266
Registriert: Do 1. Jan 1970, 01:00
Wohnort: Guben


Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron