                          - SEPTIC'S DEMOSKOLA -

                                 Lektion 3
                                 ¯¯¯¯¯¯¯¯¯
                        Skriven av Vicious / Septic

                                 22 Maj 93



                                 Inledning
                                 ¯¯¯¯¯¯¯¯¯
Vi kör vidare med Lektion 4. Tyvärr har jag inte haft så mycket tid till
att göra den här delen av demoskolan, för jag håller på och kämpar med vårt
demo till demotävlingen i Göteborg i pingst! Dessvärre verkar det inte som
jag hinner bli färdig, men i alla fall, jag har tagit en liten paus, och
som hastigast fixat ihop den här lektionen. Den visar inte mycket nytt,
utan ni får hålla er till tåls till nästa gång, då jag ska köra vidare med
sprites! Mycket nöje!


                                   Teori
                                   ¯¯¯¯¯
Bilder kan vara mycket snygga på Amigan, och de blir oftast mycket snyggare
i högre upplösningar. Därför ska jag idag visa hur man ska visa en
högupplösningsbild i 16 färger, nämligen Splash II av Scuba/X-Trade. En
mycket snygg bild, tycker jag.
  Att visa hires, dvs 640 pixlar i X-led istället för 320 är ganska lätt.
Man sätter bara HIRES-biten i BPLCON ($DFF100) så är det fixat, plus att
man får ställa in lite nya DDFSTRT och DDFSTOP.
  Att visa mer pixlar i Y-led är däremot svårare. Då får man använda sig av
INTERLACE, som ger 512 pixlar istället för 256 på höjden. Interlace
fungerar så att man först visar alla udda rader, och sedan, vid nästa
vertical blanking, visar de jämna raderna. Detta kräver att man ändrar
bitplanspekarna vid varje vertical blanking, och Commodore säger att man
ska använda ett interrupt till detta. Jag har dock en bättre metod,
nämligen att låta coppern själv sköta det på egen hand.
  Det funkar så att coppern ställer in de första bitplanspekarna och
därefter själv ändrar sin egen startaddress, så att de andra pekarna sätts
nästa gång som coppern körs. Detta kan ni se att jag har gjort i
programexemplet.


                                 Register
                                 ¯¯¯¯¯¯¯¯
HIRES+INTERLACE kräver att man sätter de respektive bitarna i BPLCON0
($DFF100). Svårare är det inte, så det behövs inga nya register. Men titta
gärna tillbaka på registren i Lektion 3 om du inte kommer ihåg dem.


                              Programexemplet
                              ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Programmet den här gången är en liten modifiering av det förra i lektion 3.
Jag har gjort om det för Hires+Interlace-bilder, och dessutom lagt till en
Fade-rutin.
  Fade-rutinen fungerar så att den i tur och ordning jämför det nuvarande
färgvärdets röda, gröna och blå värde med destination-färgvärdets röda,
gröna och blå värde och höjer eller sänker det beroende på skillnaden
mellan dem. Rutinen klarar alltså att fejda en palette till en annan, och
behöver alltså inte nödvändigtvis gå från svart till destination och
tvärtom.
  Hoppas ni förstår hur den fungerar, jag är lite tidspressas just nu, så
jag har inte riktigt tid att förklara.


                                 Utmaning
                                 ¯¯¯¯¯¯¯¯
Utmaningen blev ju inte direkt någon stormsucce, men jag fick två bidrag
som gjorde mig mycket glad! Tack, tack, för ert intresse, Nicolas och
Matrix!
  Nicolas, din rutin var kanske inte riktigt korrekt, men ändå ganska
fräck! Ett litet tips bara! Vänta aldrig med ett loop kommando:

loop:   move.l   #$ffff,d2
        dbf      d2,loop

eftersom detta går så väldigt olika fort på Amigor med olika snabb
processor. Använd istället vertical blank-sync, alltså en rutin som väntar
på rasterstrålen, för detta går lika fort på alla datorer.

  Matrix, din fade-rutin var mycket bra! Och så vitt jag kan se, helt
korrekt! Bra gjort! Tyvärr har vi inga prispengar i den här utmaningen :-)
men du får nöja dig med ett hedersomnämnande. Din rutin var kortare än den
jag har tagit med här, men min klarar å andra sidan olika antal färger,
valfri hastighet, fade åt vilket håll som helst, så det kompenserar väl det
hela. Förresten, Matrix, du behövde en sinusmaker! Downloada Sine Creator
v1.11 från 22 AA! Den hoppas jag duger, även om den skulle behöva
uppdateras snart (Hallo, Leviticus :-)))
  Ingen ny utmaning den här gången, så håll ut till nästa gång!


                                  Frågor
                                  ¯¯¯¯¯¯
Jag har fått några intressanta frågor som jag tänkte svara på här...Ge mig
gärna mer sånt här!

  "Det skulle Det skulle vara intressant om du i något framtida nummer eller
bara för mig förklarar hur blittern fungerar och främst då vad Minterm,
Mask och Modul innehåller."
 -> Självklart ska jag detta! Blittern är det mest kraftfulla i hela
Amigan, så varför ska jag hoppa över den! Den är mycket viktig i
demoprogrammering, men jag kommer inte ta upp den förrän i lektion 8!

  "Varför skriver du värdet 5200 och inte 5000 till BitplaneControl0 ?
Vad har 2:an för funktion ??"
 -> Svaret är att jag inte riktigt vet! Det har någonting med grafikkort,
kanske 24 bitars kort, att göra. Jag slår alltid på den för att nästan alla
andra gör det! Det är ingen nödvändighet, men säkert bra att göra det!

  "Kan man BARA utföra SWAP kommandot på dataregistren? Är adressregistren
och dataregistren likvärdiga förutom de specifika adressgrejerna man kan
göra med adressregistren?"
 -> Man kan bara använda SWAP på dataregister! Annars är registren ganska
lika, bara en del grejor skiljer sig, som tex SWAP, och DIV och MUL som
bara går att göra på dataregister, och LEA som bara går med
addressregister.

  "Vad står DBF för? Jag förstår funktionen..."
 -> Deadly Boring Function! Hehe, nej, jag hittar ingen betydelse i min
lilla 68000-bok, så jag vet inte riktigt vad det står för.

 "   dc.w   $008e,$2c81   ; DIWSTRT ;*** Vad sysslar du *** \/
     dc.w   $0090,$2cc1   ; DIWSTOP ;*** med här då???? *** !!"
 -> Detta är ett utdrag ur en copperlista. Copperns instruktioner gick jag
igenom i lektion 1! Detta är två MOVE-kommandon, som alltså motsvarar
processorns:
   MOVE.W   #$2c81,$dff08e
   MOVE.W   #$2cc1,$dff090
  Registren och vad de har för betydelse gick jag igenom i lektion 3, så
titta där om det är dem du inte förstår!
