home *** CD-ROM | disk | FTP | other *** search
- A S S E M B L E R - K U R S (c) Jeff Kandle 1990
-
- 6.Teil...
-
- So,leute...ich habe mal ein ganz klein bisschen pause gemacht..damit ich
- nicht verroste, und ein paar effekte `gebaut`, die werde ich euch
- warscheinlich beibringen.
-
- Hmmmh, weiter mit dem raster....Wie gesagt werden wir erstmal das Ding von
- demletzt bearbeiten. Und zwar in der Form, das es erstmal weicher wird, und
- nicht so Flackert, und zweitens das wir mal ein Schwingen in die Sache
- bringen.
-
- Wie gesagt, es ist besser wenn ihr das ausgedruckt vor den Augen habt. Ich
- kann zwar aus dem Kopf erzaehlen was geaendert werden muss, schliesslich
- habe ich das ding ja Programmiert, aber ihr muesstet es schon sehen, denn
- einfach nur tippen und starten is scheisse. Wenn einer aber absolut keine
- Moeglichkeit hat, dem werde ich es zuschicken, ich glaube aber das jeder
- irgendeinen kennt der Druckern kann.
-
- Ja, pack mers Buam
-
- So, das erste was wir aendern wollen ist das es weicher zieht. Das mit der
- Verzoegerungsschleife is` wohl jedem Klar..Aber wir koennen auch auf etwas
- anderes warten. Wir sollten da etwas nehmen was zuverlaessig immer an der
- gleichen position abfragbar ist, und was immer in gleichen abstaeden
- Passiert....
- Die uhr...noe geht nicht...die schalten wir bei der Interrupt sperre direkt
- mit aus..da tut sich nichts mehr.
- Aber den Bildschirm, wir sind mit dem Prozessoer zwar nicht so gut dran wie
- mit dem Copper, aber fuer eine Abfrage reicht es allemal.
- Vorher muesste ihr aber noch wissen das es im oberen bildschirmbereich ein
- paar Zeilen gibt indenen der Amiga und der Copper usw. nichts machen, dort
- koennen wir uns hervorragend `Einklinken`, man nennt es den Vertikal
- Blanking bereich....Wie fragen wir das aber ab ?
- Nun wir haben im Amiga ein Schoenes register..es nennt sich VHposr und
- liegt in $DFF006, wir koennen dort X- und Y-position des Rasterstrahls
- abfragen, dazu brauchen wir aber einen neuen befehl.
-
- Compare Kurz CMP
-
- Um uns die sache leicht zu machen, vergleichen wir Direkt, das heisst Wert
- mit Speicherstelle, und sieht dann so aus
-
- Cmpi.B #$00,VHposr
-
- Das i hinter dem Cmp befehl muss bei allen Befehlen eingegeben werden wenn
- sie so Direct arbeiten. z.b. Addi, Subi usw.
- Also koennen wir das schon mal anstelle der #$5000 wartreschhleife im
- Source einfuegen ....
- So, jetzt wollen wir uns mal mit der Routine fuer die Bewegung befassen.
- Was macht sie Eigentlich...hmmm nicht viel, sie addiert die Positionen der
- Wait befehle in der Copperliste nur das das naechste mal bis eine zeile
- tiefer gewartet wird. Das macht sie mit `Add`.
- Es waere aber nicht viel schwerer eine Tabelle anzufertigen, in der halt
- eine menge positionen stehen, die man dann einfach ausliesst, und jeden
- durchlauf ein weiteres element nimmt.
- Is wohl klar oder ?
- Also zur Technik...keine bange, ich mache das mit den Mitteln die euch
- schon zur verfuegung stehen.
- Wir machen uns erstmal eine Tabelle, anhand dieser tabelle kann ich die
- weiteren Sachen die noetig sind viel besser erklaeren. Bei dem
- Programmierstil ist es egal wieviele Elemente die tabelle hat, das
- erleichter die sache ungemein.
- Erstmal die Tabelle, sie besteht der einfachheit halber erstmal aus dem
- Ganzen Wait-befehl Datum...Hinterher werden wir dann mit Bytes arbeiten,
- und durch manipulation in der Bitebene, die sache auf die richtige position
- bringen...Also, here she comes
-
-
- Dc.w $500f,$500f,$500f,$500f,$510f,$510f,$510f,$520f,$520f,$530f,$540f
- Dc.w $550f,$570f,$590f,$570f,$550f,$540f,$530f,$520f,$520f,$510f,$510f
- Dc.w $510f,$500f,$500f,$500f,$500f,$500f
-
-
- Wie ihr vielleicht seht hoert die tabelle so auf wie sie angefangen hat,
- sie ist eine Cyklus-tabelle.
- Sie soll ein Titschbewegung des Balkens hervorrufen.
-
- So, um diese Bewegung zu ermoeglichen muessen wir jetzt nur noch jeden
- bildschirm durchlauf eine neue position aus der tabelle nehmen..und schon
- titscht das ding.
- Also, wie koennten wir das machen...Wir nehmen am besten einen Indirekten
- zeiger, setzen ihn auf das erste Element der Tabelle, und lassen ihn
- durchlaufen, er holt sich dan das erste element..sobald das passiert ist
- setzen wir den Zeiger auf das naechtse Element...u.s.w. sobald das letzte
- Element erreicht ist setzen wir den zeiger einfach wieder auf das naechste
- Element....Ja, das ist relativ einfach...aber Programmtechnisch schwerer
- als mein Zweiter Vorschlag zu diesem thema.
-
- Wir lesen `Bei Jedem` durchlauf immer der erste Element der Tabelle, und
- bearbeiten es. Dann lassen wir die Tabelle Rotieren, indem wir das erste
- Element irgendwo zwischen speichern, und das zweite Element an die Stelle
- des Ersten setzen, dann das dritte an die Stelle des Zweiten usw. sobald
- wir dann das letzte an die Stelle des vorletzten kopiert haben schreiben
- wir das gerettete erste an die letzte position geschrieben haben, haben wir
- die Tabelle rotieren lassen...Das hat den Vorteil wenn wir die tabelle von
- mehreren stellen auslesen lassen, das wir nicht Hunderttausend zeiger
- Stellen und abfragen muessen, denn das ist eine Menge aufwand...Jetzt kommt
- das geaenderte listing....Die tabelle koennt ihr auch selber eingeben, ihr
- muesst dann nur den Counter-wert im Programmsource auf Tabellenlaenge in
- worten -2 worten stellen....
-
-
- Execbase = 4
- Openlibrary = -552
- CIAapra = $BFE001
- Cop1lc = $DFF080
- Forbid = -132
- Permit = -138
- VHposr = $DFF006
-
- Start: move.l Execbase,a6
- jsr Forbid(a6)
- clr.l d0
- lea gfxname,a1
- jsr Openlibrary(a6)
- move.l d0,gfxbase
- move.l #copperliste,Cop1lc
-
- Vonvorne:
- LEA COPPERLISTE,A0
- LEA SINTABLE,a1
-
- Wait: CMPI.B #$80,VHPOSR
- BNE.S WAIT
- MOVE.W 18(A1),d0
- MOVE.W D0,4(a0)
- ADD.W #$200,D0
- MOVE.W D0,12(a0)
- BSR.S TABLEROTATE
-
- Btst #6,CIAapra
- Bne.s vonvorne
-
- Move.l gfxbase,a0
- Move.l 38(a0),Cop1lc
-
- Jsr Permit(a6)
- Clr.l d0
- Rts
-
- Tablerotate:
- Move.l #sintable,a2 ; Holt sich tabellenzeiger
- Move.l a2,a3 ; zweiter zeiger nach a3
- Add.l #2,a3 ; zweiter zeiger auf naechstes Element
- Move.w #25,d0 ; Counter
- Move.w (a2),a4 ; Erstes wort retten
- roloop:
- Move.w (a3)+,(a2)+
- dbf d0,roloop
- move.w a4,(a2) ; Erstes wort-> unten dran
- rts
-
- Gfxname: dc.b "graphics.library",0
- even
- Gfxbase: dc.l 0
- Copperliste:
- dc.w $0180,$0000
- dc.w $200f,$fffe
- dc.w $0180,$0f00
- dc.w $220f,$fffe
- dc.w $0180,$0000
-
- copperlistenende:
- dc.l $-2 ; ende der copperliste , -2 = $fffffffe
-
- Sintable:
- Dc.w $500f,$500f,$500f,$500f,$510f,$510f,$510f,$520f,$520f,$530f,$540f
- Dc.w $550f,$570f,$590f,$570f,$550f,$540f,$530f,$520f,$520f,$510f,$510f
- Dc.w $510f,$500f,$500f,$500f,$500f,$500f
-
-
- Natuerlich koennt ihr das listing ausschneiden, oder ihr tippt einfach die
- aenderungen in euer Grundprogramm ein, wie ihr es macht is egal..hauptsache
- ihr habt es verstanden.
-
- So, nachdem wir Copperlistenverwaltungen und Copperlisten manipulation
- gelernt haben, koennten wir eigentlich weitergehen oder....
- Wir verlassen jetzt mal wieder das kapitel `Manipulationen an der Laufenden
- Copperliste`, und gehen weiter mit dem Copper....Wir werden jetzt ein paar
- tolle sachen machen, und dann machen wir weiter mit den Effekten...Aber
- glaubt mir....Mit ! Bild! im hintergrund sehen die Effekte nochmal so doll
- aus....
-
- 10.Konvertierung von IFF-ILBM Dateien ins RAW-Format
-
- Endlich...jetzt kommen wir mal zu einer Sache die nicht so viel mit
- Maschinensprache zutun hat, dafuer aber um so mehr mit Intros und Demos.
-
- Wir wollen naehmlich mal ein Bild auf den Bildschirm bringen...
- Ich ueberlege mir gerade ob wir erst Malen oder erst das programm entwerfen
- sollen......Hmmmm, ich wuerde sagen - malen wir erstmal.
-
- O.k, Deluxepaint 3.0 ist schnell zur hand, oder wer Dpaint 3.21 hat ist
- natuerlich besser dran, denn es hat eine Funktion die ich sehr zu schaetzen
- weiss, naehmlich die Umschaltung PAL->NTSC.. Naja wir malen auf jeden Fall
- im PAL-modus, und leider erstmal nur mit einer (2) farben, und im LO-RES
- modus...Also Stellt im Dpaint Menu bitte alles dafuer ein...
-
- Also, was ihr jetzt malt ist mir Wurscht...Hauptsache es gefaellt euch.
- Wenn es fertig ist...abspeichern...Dpaint verlassen und rein in den
- Kefrens-IFF-converter...was dahinten hat den noch einer nicht, kann ich mir
- garnicht vorstellen...wenn das einer von sich auch sagen kann, schreibe er
- mir bitte einen kleinen brief, ich werde ihm das teil dann in den
- Briefkasten pumpen...
-
- O.k...gehen wir mal davon aus das jeder den hat...
-
- Starten..So jetzt seht ihr viele Knoepfe und so..ihr geht erstmal auf den,
- auf dem `CD DF0:` und drueckt solange drauf bis dort das laufwerk steht auf
- dem die Diskette mit `EUREM` bild liegt. Dann lasst ihr diesen in ruh.
- Nun druecken auf `READ DIR`, ratter...ratter... jetzt liegt die Directory
- in dem Klitzekleinen Fenster ober Rechts.
- Die bedienung kennt ihr ja...klickt euer bild an, und geht auf `LOAD`
- Nach kurzer Zeit muesste euer Bild auf dem Bildschirm erscheinen...Was ? es
- ist nicht ganz drauf, fehlt ein stueck...dann benutzt mal die
- Cursortasten..Schoen nicht.?
-
- So jetzt gehen wir zum Konvertieren.
- Ihr seht oben ein Kleines Knoepfchen `IFF-ILBM`..das ist ja das was ihr
- eingeladen habt, drueckt da jetzt einmal drauf. Jetzt muesste da RAW-NORM`
- stehen..gut !
-
- Jetzt geht ihr auf das ding Daneben, da drueckt ihr drauf bis da `BEFORE`
- steht. Es bezieht sich auf die Colormap, sie ist dafuer da damit man die
- genauen farben des Bildes hat und sie nicht aus der Palette von Dpaint
- abschreiben muss, toll was ?
-
- So jetzt muesst ihr dem Bild, das jetzt schon konvertiert ist noch einen
- neuen Namen geben, dazu geht ihr in das laengliche Fenster unter den
- Koordinaten, Drueckt mit der Maus drauf, und gebt einen Namen ein.
- Dann geht ihr nur noch auf `SAVE` und fertig seid ihr mit dem Konvertieren.
-
- Ich wuerde euch gerne die ganzen funktionen dieses ganz fantastischen
- konverters erklaeren, aber die sind alle sehr schwer zu verstehen, und es
- hat erst sinn wenn ihr den Blitter kennt, und das dauert noch etwas.
-
- So nachdem wir das Bild abgespeicher haben, muesste es genau 10244 bytes
- lang sein, falls nicht habt ihr etwas falsch gemacht.....
-
- Probiert es nochmal....
-
- So nachdem das Bild die richtige laenge hat, koennen wir die noetigen
- Schritte zur darstellung durch den Computer besprechen...
-
- So, gehen wir mal durch was der Amiga wissen muss...
- 1. Modus des dargestellten Bildes
-
- Unter Modus versteht man ob Ham, Hi-Res, Lo-Res oder Interlace, zwischen
- den 4 Modi koennen wir waehlen. Dazu dient das BPLcon0-register bei
- $DFF100.
-
- 2. Anzahl der Planes
- Zur einstellung der Planesanzahl benutzt man ebenfalls das BPLcon0
- register.
-
- Erstmal ein kleiner einschub zum Thema Raw-format und darstellung der
- Farben und so.
-
- Manche Computer haben Tolle Grafik Modi mit 32 oder 16 farben.
- Man waehlt dann diesen modus aus und arbeitet darin, der noetige Platz im
- speicher ist immer derselbe, egal ob ich jetzt alle 16 oder nur Zwei farben
- brauche.
- Beim Amiga ist es anders...wir koennen in Jedem der Obengenannten Modi,
- noch die Anzahl der Planes eingeben, diese bestimmt dann die Anzahl der
- Farben.
-
- 1 Plane = 2 Farben
- 2 Planes = 4 Farben
- 3 Planes = 8 Farben
- 4 Planes = 16 Farben
- 5 Planes = 32 Farben
- 6 Planes = 64 Farben (allerdings Extra-Half-Bright modus)
-
- Man kann sich so sein Bild nach bedarf reservieren, nach dem Motto, Warum
- soll ich fuer 32 Farben platz machen wenn ich nur 4 brauche.
-
- Also, das mit den Planes sieht so aus..es sind die Vollen 320*256 Bits, mit
- denen wir auch gemalt haben (ich beziehe das jetzt erstmal auf das Bild
- was ihr malen solltet). Da gibt es nur Punkt gesetzt oder nicht gesetzt.
- Also zwei kombinationen. Wenn ich von Oben auf so eine Plane gucke dann
- sehe ich nur 0 oder 1, also zwei Farben.
- Jetzt kommt eine Zweite Plane ins spiel. Der Amiga stellt diese dann genau
- unter der Ersten dar. Wenn ich jetzt auf ein Bit gucke,gibt es ja 4
- kombinationen, also auch vier Farben, 00 01 10 11, sind die Kombinationen.
- Wenn ihr jetzt halt 5 Planes habt dann habt ihr auch 32 Kombinationen.
- Die Kombinationen, geben als Bitkombination immer einen Wert, und der wert
- stellt dann die farben dar. Also bei 2 Planes wuerde die Kombi.. 10, die
- Zweite farbe darstellen, welche das ist muss man dem Programmierer
- Ueberlassen, den Farben kann man setzen wie man will, wenn man erstmal den
- Copper in seiner Hand hat.
-
- Nach dem Wir jetzt Modus und farbenanzahl gewaehlt haben, muessen wir dem
- Amiga noch sagen wie gross unser Bild ist. Da der Amiga den Ganzen
- Bildschirm als Grafikbildschirm benutzen kann muessen wir das Fenster, auch
- genannt `Playfield` fuer das bild ermitteln.
- Dazu geben wir ecken oben Links, und unten rechts an, und wieviel vom
- linken rand die darstellung anfaengt und wieviel vom Rechten Rand sie
- aufhoert.
-
- Die werte fuer unser Bild...Pal sind
-
- DiwStrt = $3081
- DiwStop = $30c1
- Ddfstrt = $0038
- Ddfstop = $00d0
-
- Und ins Bitplane-Controll-registern (BPLcon0)
-
- Kommt $1200
-
- 1 fuer eine Plane, und die 2 steht fuer Lores...
-
- Mehr im Naechsten Teil....
-
- So long
-
- Jeff Kandle
-