home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
assembler-kurs
/
listings2
/
listing4c.s
< prev
next >
Wrap
Text File
|
1977-12-31
|
20KB
|
551 lines
; Lezione4c.s ZUSAMMENSCHLUß VON 3 COPPEREFFEKTEN + BILD IN 8 FARBEN
SECTION CIPundCOP,CODE ; auch Fast ist OK
Anfang:
move.l 4.w,a6 ; Execbase in a6
jsr -$78(a6) ; Disable - stoppt das Multitasking
lea GfxName(PC),a1 ; Adresse des Namen der zu öffnenden Lib in a1
jsr -$198(a6) ; OpenLibrary, öffnet Bibliothek
move.l d0,GfxBase ; speichere diese Adresse in GfxBase
move.l d0,a6
move.l $26(a6),OldCop ; hier speichern wir die Adresse der Copperlist
; des Betriebssystemes (immer auf $26 nach
; GfxBase)
;******************************************************************************
;HIER LASSEN WIR UNSERE BPLPOINTS IN DER COPPELIST UNSERE BITPLANES ANPOINTEN
;******************************************************************************
MOVE.L #PIC,d0 ; in d0 kommt die Adresse von unserer PIC
; bzw. wo ihr erstes Bitplane beginnt
LEA BPLPOINTERS,A1 ; in a1 kommt die Adresse der Bitplane-
; Pointer der Copperlist
MOVEQ #2,D1 ; Anzahl der Bitplanes -1 (hier sind es 3)
; für den DBRA - Zyklus
POINTBP:
move.w d0,6(a1) ; kopiert das niederwertige Word der Plane-
; Adresse ins richtige Word der Copperlist
swap d0 ; vertauscht die 2 Word in d0 ( 1234 > 3412)
move.w d0,2(a1) ; kopiert das hochwertige Word der Adresse des
; Plane in das richtige Word in der Copperlist
swap d0 ; vertauscht erneut die 2 Word von d0
; damit wird die orginale Adresse wieder hergestellt
ADD.L #40*256,d0 ; Zählen 10240 zu D0 dazu, somit zeigen wir
; auf das zweite Bitplane (befindet sich direkt
; nach dem ersten), wir zählen praktisch die Länge
; eines Plane dazu
; In den nächsten Durchgängen werden wir dann auf
; das dritte, vierte... Bitplane zeigen
addq.w #8,a1 ; a1 enthält nun die Adresse der nächsten
; bplpointers in der Copperlist, die es
; einzutragen gilt
dbra d1,POINTBP ; Wiederhole D1 mal POINTBP (D1=num of bitpls)
move.l #COPPERLIST,$dff080 ; COP1LC - "Zeiger" auf unsere COP
; (deren Adresse)
move.w d0,$dff088 ; COPJMP1 - Starten unsere COP
move.w #0,$dff1fc ; FMODE - Deaktiviert das AGA
move.w #$c00,$dff106 ; BPLCON3 - Deaktiviert das AGA
mouse:
cmpi.b #$ff,$dff006 ; Sind wir auf Zeile 255?
bne.s mouse ; Wenn nicht, geh nicht weiter
bsr.w BewegeCopper ; Roter Balken unter Zeile $ff
bsr.w CopperLinkRech ; Routine für Links/Rechts-Scroll
BSR.w scrollcolors ; Zyklisches Fließen der Farben
Warte:
cmpi.b #$ff,$dff006 ; Sind wir noch auf Zeile 255?
beq.s Warte ; Wenn ja, geh nicht weiter, warte auf die
; nächste Zeile, ansonsten wird BewegeCopper
; noch einmal ausgeführt
btst #6,$bfe001 ; linke Maustaste gedrückt?
bne.s mouse ; wenn nicht, zurück zu mouse:
move.l OldCop(PC),$dff080 ; COP1LC - "Zeiger" auf die Orginal-COP
move.w d0,$dff088 ; COPJMP1 - und starten sie
move.l 4.w,a6
jsr -$7e(a6) ; Enable - stellt Multitasking wieder her
move.l GfxBase(PC),a1 ; Basis der Library, die es zu schließen gilt
; (Libraries werden geöffnet UND geschlossen!)
jsr -$19e(a6) ; Closelibrary - schließt die Graphics lib
rts
; DATEN
GfxName:
dc.b "graphics.library",0,0
GfxBase: ; Hier hinein kommt die Basisadresse der graphics.library,
dc.l 0 ; ab hier werden die Offsets gemacht
OldCop: ; Hier hinein kommt die Adresse der Orginal-Copperlist des
dc.l 0 ; Betriebssystemes
; **************************************************************************
; * BALKEN MIT HORIZONTALEM SCROLL (LISTING3h.s) *
; **************************************************************************
CopperLinkRech:
CMPI.W #85,FlagRechts ; GehRechts 85 Mal ausgeführt?
BNE.S GehRechts ; wenn nicht, wiederhole nochmal
; wenn es aber 85 Mal ausgeführt wurde,
; dann geh weiter
CMPI.W #85,FlagLinks ; GehLinks 85 Mal ausgeführt?
BNE.S GehLinks ; wenn nicht, wiederhole nochmal
CLR.W FlagRechts ; Die Routine GehLinks wurde 85 Mal ausge-
CLR.W FlagLinks ; führt, also ist zu diesem Zeitpunkt der
; graue Balken zurückgekommen und der Rechts-
; Links-Zyklus ist fertig. Wir löschen die
; zwei Falgs und steigen aus: beim nächsten
; FRAME wird GehRechts ausgeführt,nach 85 Frame
; GehLinks 85 Mal, etcetera.
RTS ; ZURÜCK ZUM MOUSE-LOOP
GehRechts: ; Diese Routine bewegt den Balken nach RECHTS
lea CopBar+1,A0 ; Wir geben in A0 die Adresse des ersten XX-
; Wertes des ersten Wait, das sich genau 1 Byte
; nach CopBar befindet
move.w #29-1,D2 ; wir müßen 29 Wait verändern (verwenden ein DBRA)
RechtsLoop:
addq.b #2,(a0) ; zählen 2 zu der X-Koordinate des Wait dazu
ADD.W #16,a0 ; gehen zum nächsten Wait, das zu ändern ist
dbra D2,RechtsLoop ; Zyklus wird d2-Mal durchlaufen
addq.w #1,FlagRechts ; vermerken,daß wir ein weiteres Mal GehRechts
; ausgeführt haben
; GehRechts: in FlagRechts steht die Anzahl,
; wie oft wir GehRechts ausgeführt haben
RTS ; Zurück zum Mouse-Loop
GehLinks: ; diese Routine bewegt den Balken nach LINKS
lea CopBar+1,A0
move.w #29-1,D2 ; wir müßen 29 Wait verändern
LinksLoop:
subq.b #2,(a0) ; ziehen der X-Koordinate des Wait 2 ab
ADD.W #16,a0 ; gehen zum nächsten Wait über, das zu verändern ist
dbra D2,LinksLoop ; Zyklus wird d2-Mal durchgeführt
addq.w #1,FlagLinks ; Zählen 1 zur Anzahl dazu, wie oft diese Routine
; GehLinks ausgeführt wurde
RTS ; Zurück zum Mouse-Loop
FlagRechts: ; In diesem Word wird die Anzahl festgehalten,
dc.w 0 ; wie oft GehRechts ausgeführt wurde
FlagLinks: ; In diesem Word wird die Anzahl festgehalten,
dc.w 0 ; wie oft GehLinks ausgeführt wurde
; **************************************************************************
; * ROTER BALKEN UNTER ZEILE $FF (Listing3f.s) *
; **************************************************************************
BewegeCopper:
LEA BALKEN,a0 ; in a0 kommt die Adresse von Balken
TST.B RAUFRUNTER ; oben angekommen?
beq.w GEHRUNTER
cmpi.b #$0a,(a0) ; sind wir bei Zeile $0a+$ff angekommen?
beq.s SetzRunter ; wenn ja, sind wir oben angekommen und
subq.b #1,(a0) ; müßen runter
subq.b #1,8(a0)
subq.b #1,8*2(a0) ; nun ändern wir die anderen Wait: der
subq.b #1,8*3(a0) ; Abstand zwischen einem und dem anderen beträgt
subq.b #1,8*4(a0) ; 8 Byte
subq.b #1,8*5(a0)
subq.b #1,8*6(a0)
subq.b #1,8*7(a0) ; hier müßen wir alle 9 Wait des roten Balken
subq.b #1,8*8(a0) ; ändern, wenn wir ihn steigen und sinken lassen
subq.b #1,8*9(a0) ; wollen.
rts
SetzRunter:
clr.b RAUFRUNTER ; Setzt RAUFRUNTER auf 0, beim TST.B RAUFRUNTER
rts ; wird das BEQ zu Routine GEHRUNTER verzweigen,
; und der Balken wird sinken
GEHRUNTER:
cmpi.b #$2c,8*9(a0) ; sind wir bei Zeile $2c angekommen?
beq.s SetzRauf ; wenn ja, sind wir untern und müßen wieder
addq.b #1,(a0) ; steigen
addq.b #1,8(a0)
addq.b #1,8*2(a0) ; nun ändern wir die anderen Wait: der
addq.b #1,8*3(a0) ; Abstand zwischen einem und dem anderen beträgt
addq.b #1,8*4(a0) ; 8 Byte
addq.b #1,8*5(a0)
addq.b #1,8*6(a0)
addq.b #1,8*7(a0) ; hier müßen wir alle 9 Wait des roten Balken
addq.b #1,8*8(a0) ; ändern, wenn wir ihn steigen und sinken lassen
addq.b #1,8*9(a0) ; wollen.
rts
SetzRauf:
move.b #$ff,RAUFRUNTER ; Wenn das Label nicht auf NULL ist,
rts ; bedeutet es, daß wir steigen müßen
RAUFRUNTER:
dc.b 0,0
; **************************************************************************
; * ZYKLISCHES FLIEßEN DER FARBEN (Listing3e.s) *
; **************************************************************************
Scrollcolors:
move.w col2,col1 ; col2 kommt in col1
move.w col3,col2 ; col3 kommt in col2
move.w col4,col3 ; col4 kommt in col3
move.w col5,col4 ; col5 kommt in col4
move.w col6,col5 ; col6 kommt in col5
move.w col7,col6 ; col7 kommt in col6
move.w col8,col7 ; col8 kommt in col7
move.w col9,col8 ; col9 kommt in col8
move.w col10,col9 ; col10 kommt in col9
move.w col11,col10 ; col11 kommt in col10
move.w col12,col11 ; col12 kommt in col11
move.w col13,col12 ; col13 kommt in col12
move.w col14,col13 ; col14 kommt in col13
move.w col1,col14 ; col1 kommt in col14
rts
; **************************************************************************
; * SUPER COPPERLIST *
; **************************************************************************
SECTION GRAPHIC,DATA_C
COPPERLIST:
; Wir lassen die Sprites auf 0 pointen, ansonsten gasen sie nur
; wie verrückt herum und stören!!
dc.w $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000
dc.w $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
dc.w $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
dc.w $13e,$0000
dc.w $8e,$2c81 ; DiwStrt (Register mit Standartwerten)
dc.w $90,$2cc1 ; DiwStop
dc.w $92,$0038 ; DdfStart
dc.w $94,$00d0 ; DdfStop
dc.w $102,0 ; BplCon1
dc.w $104,0 ; BplCon2
dc.w $108,0 ; Bpl1Mod
dc.w $10a,0 ; Bpl2Mod
; Das BPLCON0 für einen Bildschirm mit 3 Bitplanes: (8 Farben)
; 5432109876543210
dc.w $100,%0011001000000000 ; Bts 13 und 12 an!! (3 = %011)
; Wir lassen die Bitplanes direkt anpointen, indem wir die Register
; $dff0e0 und folgende hier in der Copperlist einfügen. Die
; Adressen der Bitplanes werden dann von der Routine POINTBP
; automatisch eingetragen
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ; bitplane 1 - BPL0PT
dc.w $e4,$0000,$e6,$0000 ; bitplane 2 - BPL1PT
dc.w $e8,$0000,$ea,$0000 ; bitplane 3 - BPL2PT
; Der Effekt von Listing3e.s, nur weiter HINAUF versetzt
dc.w $3a07,$fffe ; warten auf Zeile 154 ($9a in Hexadezimal)
dc.w $180 ; REGISTER COLOR0
col1:
dc.w $0f0 ; Wert von COLOR 0 (das verändert wird)
dc.w $3b07,$fffe ; warten auf Zeile 155 (wird nicht verändert)
dc.w $180 ; REGISTER COLOR0 (wird nicht verändert)
col2:
dc.w $0d0 ; Wert von COLOR 0 (wird verändert)
dc.w $3c07,$fffe ; warten auf Zeile 156 (wird nicht verändert,ecc.)
dc.w $180 ; REGISTER COLOR0
col3:
dc.w $0b0 ; Wert von COLOR 0
dc.w $3d07,$fffe ; warten auf Zeile 157
dc.w $180 ; REGISTER COLOR0
col4:
dc.w $090 ; Wert von COLOR 0
dc.w $3e07,$fffe ; warten auf Zeile 158
dc.w $180 ; REGISTER COLOR0
col5:
dc.w $070 ; Wert von COLOR 0
dc.w $3f07,$fffe ; warten auf Zeile 159
dc.w $180 ; REGISTER COLOR0
col6:
dc.w $050 ; Wert von COLOR 0
dc.w $4007,$fffe ; warten auf Zeile 160
dc.w $180 ; REGISTER COLOR0
col7:
dc.w $030 ; Wert von COLOR 0
dc.w $4107,$fffe ; warten auf Zeile 161
dc.w $180 ; color0... (nun habt ihr schon verstanden,
col8: ; ab hier gebe ich keinen Kommentar mehr!)
dc.w $030
dc.w $4207,$fffe ; Zeile 162
dc.w $180
col9:
dc.w $050
dc.w $4307,$fffe ; Zeile 163
dc.w $180
col10:
dc.w $070
dc.w $4407,$fffe ; Zeile 164
dc.w $180
col11:
dc.w $090
dc.w $4507,$fffe ; Zeile 165
dc.w $180
col12:
dc.w $0b0
dc.w $4607,$fffe ; Zeile 166
dc.w $180
col13:
dc.w $0d0
dc.w $4707,$fffe ; Zeile 167
dc.w $180
col14:
dc.w $0f0
dc.w $4807,$fffe ; Zeile 168
dc.w $180,$0000 ; Wir beschließen, den Bildschirm unter
; dem Effekt Schwarz zu färben
dc.w $0180,$000 ; color0
dc.w $0182,$550 ; color1 ; wir verändern die Farbe der
dc.w $0184,$ff0 ; color2 ; COMMODORE-Schrift! GELB!
dc.w $0186,$cc0 ; color3
dc.w $0188,$990 ; color4
dc.w $018a,$220 ; color5
dc.w $018c,$770 ; color6
dc.w $018e,$440 ; color7
dc.w $7007,$fffe ; Wir warten das Ende des COMMODORE-
; Schriftzuges ab
; Die 8 Farben des Bildes sind hier definiert:
dc.w $0180,$000 ; Color0
dc.w $0182,$475 ; Color1
dc.w $0184,$fff ; Color2
dc.w $0186,$ccc ; Color3
dc.w $0188,$999 ; Color4
dc.w $018a,$232 ; Color5
dc.w $018c,$777 ; Color6
dc.w $018e,$444 ; Color7
; Effekt aus Listing3h.s
dc.w $9007,$fffe ; Warten auf den Beginn der Zeile
dc.w $180,$000 ; Grau auf Minimum, also SCHWARZ!
CopBar:
dc.w $9031,$fffe ; Wait, das geändert wird ($9033,$9035,$9037...)
dc.w $180,$100 ; Farbe Rot, die immer weiter rechts beginnen
; wird, vorangegangen vom Grau, das dementsprechend
; fortschreiten wird
dc.w $9107,$fffe ; Wait, das nicht geändert wird (Beginn der Zeile)
dc.w $180,$111 ; Farbe GRAU (startet beim Beginn der Zeile bis
dc.w $9131,$fffe ; zu diesem WAIT, das wir nicht ändern werden...
dc.w $180,$200 ; danach beginnt das ROT
; FIXE WAIT (dann Grau)-VERÄNDERB. WAIT (gefolgt vom Rot)
dc.w $9207,$fffe,$180,$222,$9231,$fffe,$180,$300 ; Zeile 3
dc.w $9307,$fffe,$180,$333,$9331,$fffe,$180,$400 ; Zeile 4
dc.w $9407,$fffe,$180,$444,$9431,$fffe,$180,$500 ; Zeile 5
dc.w $9507,$fffe,$180,$555,$9531,$fffe,$180,$600 ; ....
dc.w $9607,$fffe,$180,$666,$9631,$fffe,$180,$700
dc.w $9707,$fffe,$180,$777,$9731,$fffe,$180,$800
dc.w $9807,$fffe,$180,$888,$9831,$fffe,$180,$900
dc.w $9907,$fffe,$180,$999,$9931,$fffe,$180,$a00
dc.w $9a07,$fffe,$180,$aaa,$9a31,$fffe,$180,$b00
dc.w $9b07,$fffe,$180,$bbb,$9b31,$fffe,$180,$c00
dc.w $9c07,$fffe,$180,$ccc,$9c31,$fffe,$180,$d00
dc.w $9d07,$fffe,$180,$ddd,$9d31,$fffe,$180,$e00
dc.w $9e07,$fffe,$180,$eee,$9e31,$fffe,$180,$f00
dc.w $9f07,$fffe,$180,$fff,$9f31,$fffe,$180,$e00
dc.w $a007,$fffe,$180,$eee,$a031,$fffe,$180,$d00
dc.w $a107,$fffe,$180,$ddd,$a131,$fffe,$180,$c00
dc.w $a207,$fffe,$180,$ccc,$a231,$fffe,$180,$b00
dc.w $a307,$fffe,$180,$bbb,$a331,$fffe,$180,$a00
dc.w $a407,$fffe,$180,$aaa,$a431,$fffe,$180,$900
dc.w $a507,$fffe,$180,$999,$a531,$fffe,$180,$800
dc.w $a607,$fffe,$180,$888,$a631,$fffe,$180,$700
dc.w $a707,$fffe,$180,$777,$a731,$fffe,$180,$600
dc.w $a807,$fffe,$180,$666,$a831,$fffe,$180,$500
dc.w $a907,$fffe,$180,$555,$a931,$fffe,$180,$400
dc.w $aa07,$fffe,$180,$444,$aa31,$fffe,$180,$301
dc.w $ab07,$fffe,$180,$333,$ab31,$fffe,$180,$202
dc.w $ac07,$fffe,$180,$222,$ac31,$fffe,$180,$103
dc.w $ad07,$fffe,$180,$113,$ad31,$fffe,$180,$004
dc.w $ae07,$FFFE ; nächste Zeile
dc.w $180,$006 ; Blau auf 6
dc.w $b007,$FFFE ; überspringe 2 Zeilen
dc.w $180,$007 ; Blau auf 7
dc.w $b207,$FFFE ; überspringe 2 Zeilen
dc.w $180,$008 ; Blau auf 8
dc.w $b507,$FFFE ; überspringe 3 Zeilen
dc.w $180,$009 ; Blau auf 9
dc.w $b807,$FFFE ; überspringe 3 Zeilen
dc.w $180,$00a ; Blau auf 10
dc.w $bb07,$FFFE ; überspringe 3 Zeilen
dc.w $180,$00b ; Blau auf 11
dc.w $be07,$FFFE ; überspringe 3 Zeilen
dc.w $180,$00c ; Blau auf 12
dc.w $c207,$FFFE ; überspringe 4 Zeilen
dc.w $180,$00d ; Blau auf 13
dc.w $c707,$FFFE ; überspringe 7 Zeilen
dc.w $180,$00e ; Blau auf 14
dc.w $ce07,$FFFE ; überspringe 6 Zeilen
dc.w $180,$00f ; Blau auf 15
dc.w $d807,$FFFE ; überspringe 10 Zeilen
dc.w $180,$11F ; helle auf...
dc.w $e807,$FFFE ; überspringe 16 Zeilen
dc.w $180,$22F ; helle auf...
; Effekt von Listing3f.s
dc.w $ffdf,$fffe ; ACHTUNG! WAIT AM ENDE DER ZEILE FF!
; die folgenden Wait sind unter der Zeile
; $FF und starten wieder bei $00!!
dc.w $0107,$FFFE ; Ein fixer, grüner Balken UNTER der Zeile $FF!
dc.w $180,$010
dc.w $0207,$FFFE
dc.w $180,$020
dc.w $0307,$FFFE
dc.w $180,$030
dc.w $0407,$FFFE
dc.w $180,$040
dc.w $0507,$FFFE
dc.w $180,$030
dc.w $0607,$FFFE
dc.w $180,$020
dc.w $0707,$FFFE
dc.w $180,$010
dc.w $0807,$FFFE
dc.w $180,$000
BALKEN:
dc.w $0907,$FFFE ; Warte auf Zeile $79
dc.w $180,$300 ; Beginne roten Balken: Rot auf 3
dc.w $0a07,$FFFE ; nächste Zeile
dc.w $180,$600 ; Rot auf 6
dc.w $0b07,$FFFE
dc.w $180,$900 ; Rot auf 9
dc.w $0c07,$FFFE
dc.w $180,$c00 ; Rot auf 12
dc.w $0d07,$FFFE
dc.w $180,$f00 ; Rot auf 15 (Maximum)
dc.w $0e07,$FFFE
dc.w $180,$c00 ; Rot auf 12
dc.w $0f07,$FFFE
dc.w $180,$900 ; Rot auf 9
dc.w $1007,$FFFE
dc.w $180,$600 ; Rot auf 6
dc.w $1107,$FFFE
dc.w $180,$300 ; Rot auf 3
dc.w $1207,$FFFE
dc.w $180,$000 ; Farbe SCHWARZ
dc.w $FFFF,$FFFE ; ENDE DER COPPERLIST
; **************************************************************************
; * BILD IN 8 FARBEN 320x256 *
; **************************************************************************
; Erinnert euch, die Directory auszuwählen, in der das Bild zu
; finden ist, in diesem Fall: "V df0:LISTINGS2"
PIC:
incbin "amiga.320*256*3" ; hier laden wir das Bild imRAW
; Format, das zuvor mit dem
; KEFCON konvertiert wurde, es
; besteht aus drei Bitplanes
; nacheinander
end
In diesem Beispiel gibt´s nichts Neues, aber wir haben viele der bis jetzt
kennengelernten Effekte vereint: Listing3h.s, Listing3f.s, Listing3e.s.
Und das einfach dadurch, daß wir die einzelnen Routinen in einen anderen
Buffer geladen haben, rauskopiert und hier eingesetzt. Dann noch das Stück
Copperlist dazu und alles ist getan. Die Routinen werden einfach
nacheinander aufgerufen, aber bei der Copperlist ist eine ganz bestimmte
Ordnung einzuhalten, ansonsten überlappen sich die einzelnen Effekte. So
mußte ich zum Beispiel den Effekt aus Listing3f.s weiter hinauf versetzen,
während ich die anderen zwei lassen konnte, wo sie waren. Im
synchronisiertem Loop braucht man dann nur noch die Routinen aufzurufen:
bsr.w BewegeCopper ; Roter Balken unter Zeile $ff
bsr.w CopperLinkRech ; Routine für Links/Rechts-Scroll
BSR.w scrollcolors ; Zyklisches Fließen der Farben
Es kommt oft vor, daß die Routinen einzeln programmiert werden, und erst
später zusammengefügt werden, wie in diesem Beispiel. Es ist von Vorteil,
wenn man lernt, Grafikdemos zu zerlegen und wieder zusammenzustellen, denn
ein guter Teil der Programmierung besteht aus solcher Tätigkeit. Jede
Routine kann dann in anderen Listings wiederwerwendet werden, indem man
einfache Änderungen anbringt: so wird der Programmierer von TEAM17 für
jedes seiner Spiele die gleiche Joystick-Routine verwendet haben, das
Gleiche gilt für die Routine, die von Diskette ladet, und der
Programmteil, der die Figuren am Screen bewegt, wird auch jedesmal nur
mehr oder weniger verändert und abgeleitet werden. Jede Routine, die ihr
auscodiert oder irgendwo findet kann euch oft nützlich sein, sei es nun
als Beispiel oder daß ihr sie richtig in eure Programme einbaut. Wenn ihr
alle nötigen für ein Spiel separat beiseite habt, z.B. Diskladen.s,
Joystick.s, Spielemusik.s, ... , dann wird sich das Spieleprogrammieren
auf das zusammenkopieren beschränken. Es würde den Aufdecken des Tischen
gleichen: Messer, Gabel, Teller, Serviette, alles kommt an seinen Platz.
Ihr müßt nur mehr ein Puzzle zusammenstellen, aber auch das setzt eine
Mindestkompetenz in der Programmierung voraus. Manchmal kommt es vor, daß
bei Demos oder Spielen alles passt, aber man den Verdacht nicht los wird,
daß die Routinen nicht selbst geschrieben wurden, sondern entweder kopiert
oder hergegeben wurden. Aber wenn das Spiel funktioniert, wen kratzt´s ?
Es wird immer ein schönes Spiel sein, aber ähnlich mit einem anderen, eine
Art Kreuzung. Wenn jemand aber eine Routine selbst ausprogrammiert, dann
erkennt man das sofort, entweder weil sie besser gemacht ist oder
schlechter. Also sind die besten und die schlechtesten Spiele "ehrlich"
programmiert. Aber laßt im Moment die Ehre beiseite, ihr lernt noch, und
ich glaube nicht, daß ihr jetzt schon bereit seid, die
Amiga-Programmierung zu innovieren! Also demontiert und schweißt zusammen,
was euch der Kurs bietet, denn es gibt nichts besseres, als das.
Hauptsache, ihr geht dann nicht mit MEINEN Routinen rum und erzählt, daß
ihr sie ganz alleine codiert habt. Wenn ihr den Kurs beendet habt, dann
könnt ihr eure eigenen erstellen, und, wer weiß, einige gute Erleuchtungen
haben, und die innovativen Ideen umsetzen. Assembler setzt keine Grenzen.