Display List in Action!


Display List in Action!

von FlorianD » So 1. Mär 2020, 13:48
wie man sich in Action! ganz leicht eine Display List bauen kann:
zum Beispiel eine angepasste GRAPHICS 13 Display List

Code: Alles auswählen
MODULE ; ganz vorne, damit es globale Variablen werden
BYTE MYDL=[
$70 $70 $70 ;drei mal 8 Leerzeilen
$C5 ; 1.Zeile GR.13 mit Interrupt
]
CARD SCREENMEM=[0] ; die Adresse des Screenmemories
BYTE MYDL2=[
$85 $85 $85 $85 ;4 Zeilen GR.13 mit Interrupt
$90 ; 2 Leerzeilen, mit Interrupt
$85 $85 $85 $85 ;4 Zeilen GR.13 mit Interrupt
$85 $85 $05  ;3 Zeilen GR.13, 2 davon mit Interrupt
$41] ; JVB Jump and wait for Vertical Blank
CARD JMPBACKTODLSTART=MYDL

...

PROC MAIN()
 CARD SAVMSC=88, ;Zeiger auf Screenmem
          SDLST=560 ;Zeiger auf Display List
 BYTE DMACTL=54272 ; DMA Control

 GRAPHICS(13) ; lass den Compi die Arbeit machen und GR.13 einrichten,
 SCREENMEM=SAVMSC ; wir übernehmen die Adresse des Screenmemories in unsere DL
 DMACTL==&$DF ; ANTIC DMA aus
 SDLST=@MYDL ; Zeiger auf unsere DL setzen. das @ ist wichtig, weil MYDL als BYTEfolge definiert ist und es sonst Probleme gäbe
 DMACTL==%20 ; ANTIC DMA wieder an

 DO

 OD
RETURN

Re: Display List in Action!

von slx » Di 3. Mär 2020, 22:02
Je nach DOS, etc. könnte man da noch das Problem haben, dass die Display List über eine boundary läuft. Man kann aber Action! irgendwie dazu bringen, an ganz bestimmte Adressen zu kompilieren.

Re: Display List in Action!

von FlorianD » Mi 4. Mär 2020, 11:12
völlig richtig!

so
Code: Alles auswählen
SET $0E=$5000
SET $491=$5000 ; damit faengt das Programm bei $5000 an

kann man Action zwingen, an einer bestimmten Stelle anzufangen und den Wechsel über eine Page zu vermeiden.

Caveat/Obacht/Achtung!
Display Lists dürfen eine 1K Grenze nicht überschreiten.
Hier ist ein JMP-Befehl ($1 ADR_LOW ADR_HIGH) in der Display List einzufügen, um den Sprung über die 1K-Grenze zu machen.

Bildschirmspeicherbereiche dürfen eine 4K Grenze nicht überschreiten.
Hier ist ein LMS-Befehl (Load Memory Scan, Bit 6/$40 des DL-Befehls) in der Display List vorzusehen, um die Grenze zu überspringen.