Mit Action 2 Grafikscreens verwalten...


Mit Action 2 Grafikscreens verwalten...

von atarineuling » So 8. Sep 2013, 23:10
Ich habe den ACtion-Start auf $3000 hochgesetzt.
Ab $2000 habe ich einen Grafikscreen mit 3840 Byte.

1. Grafikscreen graphics(23) , Adresse bei savmsc (Adresse in adrg)
2. Grafikscreen dli entspricht graphics(23) ,ab 8192 (Adresse in adr)

Screen 2 (adr) ist sichtbar und Screen 1 (adrg) ist unsichtbar:
Joystick-Oben :
Auf 1 Zeichnen und nach 2 kopieren (den halben Screen 3840/2)
Joystick-unten:
Auf 1 Zeichnen und nach 2 kopieren (den halben Screen 3840/2)
Joystick-rechts:
savmsc=8192 , jetzt funktionieren die Grafikbefehle auf 2, mit poke(8192,255) die Kontrolle
Joystick-links:
savmsc=adrg, jetzt funktionieren die Grafikbefehle wieder auf 1
Auf 1 Zeichnen und nach 2 kopieren (den halben Screen 3840/2) , mit poke(adrg+6,255) die Kontrolle
Joystick-oben-rechts :
Screen 1 (adrg) ist sichtbar und Screen 2 (adr) ist unsichtbar
Joystick-oben-links :
Screen 2 (adr) ist sichtbar und Screen 1 (adrg) ist unsichtbar

Man kann ohne grosse Klemmzüge eine flimmerfreie bewegende Grafik erzeugen.
Ein Cockpit darstellen . Zb im unteren Screenteil (Screen 2, 8192) als Text decimale Werte als Anzeige für Armaturen und oben bewegende Grafik von einem Anflug eines Flugzeuges.
Bewegende Grafik durch umschalten oder kopieren....

Mehr Speicher, wenn die Runtime.act mit eingebunden wird.
Wenn ich das Modul drin habe zeigt mir Ramtop : $A000 an , ohne Modul und mit einbinden der Runtime.act, Ramtop: $C000. Mit diesen freien Speicher von $2000 - $C000 hat man viel Speicher zum spielen.

Wenn man den ACtion-Start auf $4000 hochsetzt kann man Screen1 ab $2000 und den Screen2 ab $3000 herstellen und lenkt die Grafikausgabe wie unten im Programm auf einen der beiden Screens.
Schon hat man die ganze Grafikspielerei aus seinen eigenen Speichbereich und $4000 - $C000 für den anderen Programmcode.

Gruss

Code: Alles auswählen
SET $E  =$3000
SET $491=$3000

module

card dlist =560

byte dlst0=   [ $70 $70 $70 $4D ]
card lms  = [ 8192 ]
byte dlst1= [ $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $0D $0D $0D $0D $0D
              $0D $0D $0D $0D $0D $41 ]
card  djmp= [ 0 ]

proc delay(card z)
    card i
    for i=0 to z
    do
    od
return

proc main()
  byte joy0
  card adr,adrg,len,dlistg
  card savmsc=$58

  len=3840/2
  adr=8192

  graphics(23)
  adrg = savmsc
  dlistg=dlist
  color=1

  djmp=@dlst0
  dlist=@dlst0

  zero (adr,3840)
   do
      joy0=stick(0)
     delay(100)

      if joy0=14 then
        plot(0,0)
       drawto(159,95)
       moveblock (adr,adrg,len)
     elseif joy0=13 then
       plot(159,0)
       drawto(0,95)
       moveblock (adr,adrg,len)
     elseif joy0=7 then
      savmsc=8192
      plot(80,0)
      drawto(80,95)
      poke(8192,255)
     elseif joy0=11 then
      savmsc=adrg
      plot(90,0)
      drawto(90,95)
      poke(adrg+6,255)
      moveblock (adr,adrg,len)
     elseif joy0=6 then
      dlist=dlistg
     elseif joy0=10 then
      dlist=@dlst0
     fi
   od
return