home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
assembler-kurs
/
listings
/
listing2l.s
< prev
next >
Wrap
Text File
|
1977-12-31
|
5KB
|
122 lines
; Listing2l.s
Anfang:
lea $dff000,a0 ; gib $dff000 in a0
Waitmouse:
move.w #$20,$1dc(a0) ; BEAMCON0 (ECS+) Auflösung video PAL
bsr.s Blinken ; Bringt den Bildschirm dazu zu blinken
bsr.s ZeigerFarbe ; Bringt den Mauspointer zu blinken
btst #2,$16(a0) ; POTINP - Rechte Maustaste gedrückt?
; (bit 2 im $dff016
bne.s nichtgedrueckt ; Wenn nicht, springe zu VollesChaos
bsr.s VollesChaos ;
nichtgedrueckt:
btst #6,$bfe001 ; Linke Maustaste gedrückt?
bne.s Waitmouse ; wenn nicht, zurück zu Waitmouse
rts ; Ende
ZeigerFarbe:
moveq #-1,d1 ; Also moveq #$FFFFFFFF,d1
moveq #20-1,d0 ; Anzahl der ZeigerFarbe-Zyklen
flash:
subq.w #8,d1 ; Ändere die Farbe, die in $dff1a4 kommt
move.w d1,$1a4(a0) ; COLOR18 - gib den Wert von d1 in $dff1a4
; (Die Farbe des Mauspointers!)
dbra d0,flash
rts
Blinken:
move.w 6(a0),$180(a0) ; Gib den .w-Wert von $dff006 in COLOR0
move.b 6(a0),$182(a0) ; Gib den .b-Wert von $dff006 in COLOR1
rts
VollesChaos:
move.w #0,$1dc(a0) ; BEAMCON0 (ECS+) Auflösung video NTSC
rts
END
Dieses Programm ist nur seiner Struktur wegen interessant, denn es hat ein
Hauptprogramm, das von Anfang: bis zum RTS, das SubRoutinen aufruft (also
Unterprogramme, die nichts anderes sind als Teile des Programmes, die mit
einem Label versehen wurden und einem RTS enden). Mit dem Debugger (AD)
könnt ihr versuchen, den Ablauf des Programmes zu verfolgen: um alle
SubRoutinen durchzugehen, drückt die Pfeil-nach-Rechts-Taste, und ihr
werdet in der Routine Zeigerfarbe sehen, wie d1 in Einserschritten
heruntergezählt wird.
Das fundamentale Problem der BSR/BEQ/BNE/RTS - Strukturen liegt darin, daß
alles durch Sprünge geregelt ist, bei denen man nach Abarbeitung entweder
mit einem RTS zur Zeile unter dem BSR zurückkehrt, oder einen Sprung
macht, der einer Weiche ähnelt, bei der man entweder links oder rechts
geht, an deren Ende man aber nicht zurück kann.
Ast 1
_______ _ _ ect ect _ _ _ RTS, Ausstieg von diesem Weg
Weiche beq/bne /
______________/
\ Ast 2
\______ _ _ etc etc _ _ _ _ RTS, Ausstieg von diesem Weg
Ein BEQ/BNE-Sprung ist wie die Entscheidung, ob man nach München oder
Hamburg fahren soll, man wird andere Straßen befolgen und einmal am Ziel
angekommen, wird man dort die Nacht verbringen, wenn man das RTS erreicht
hat. Es wurden aber andere Wege genommen.
Wenn wir aber ein BSR.w München antreffen, dann springen wir nach München,
führen die Befehle aus, die wir dort antreffen, und wenn wir einem RTS
begegnen, dann "beamen" wir uns auf magische Art und Weise zur Kreuzung
zurück, an der wir nach München abgebogen sind. Es ist, als würden wir ein
Zauberbuch lesen, bei der auf jeder Seite eine Landschaft abgebildet ist,
und wenn wir ein AbraCadaBSR aussprechen, werden wir in diese Zeichnung
katapultiert, wir verbringen dort eine Zeit lang, dann treffen wir auf ein
SimsalaRTS und wir sitzen vor dem Buch, bereit auf Seite zwei
einzusteigen, mit einem erneutem AbraCadaBSR.
Bemerkung1: Durch Drücken der rechten Maustaste wird eine Routine
ausgeführt, die sonst übersprungen wird:
btst #2,$16(a0) ; POTINP - Rechte Maustaste gedrückt?
; (bit 2 im $dff016
bne.s nichtgedrueckt ; Wenn nicht, springe zu VollesChaos
bsr.s VollesChaos ;
nichtgedrueckt:
Erinnert euch gut an diese Art, um eine Routine nur auszuführen, wenn eine
bestimmte Kondition gegeben ist, in diesem Beispiel ob die rechte
Maustaste gedrückt ist. Beim Programmieren treten solche Dinge oft auf.
Das Register, das dazu verwendet wird, "VollesChaos" zu bereiten, ist das
$dff1dc, in dem Bit 5dazu dient, zwischen der europäischen PAL und der
amerikanischen NTSC -Videonorm umzuschalten. Dieses Register existiert nur
in Computern, die nach 1989 gebaut wurden, bei jemanden, der einen recht
alten Computer hat, könnte es nicht funktionieren. Wenn es euch aber
funktioniert, dann werdet ihr bemerken, daß bei Tastendruck (rechter
Mausknopf) der Bildschirm quasi zu "explodieren" scheint, da er sehr
schnell zwischen den Videonormen PAL/NTSC umschaltet. Wenn ihr zwei
Programme schreiben möchtet, die zwischen PAL/NTSC umschalten, dann müßt
ihr nur folgendes tun:
move.w #0,$dff1dc ; BEAMCON0
rts
Assembliert es mit a, und speichert ab mit WO (also als File, den ihr
ausführen könnt), gebt ihm ev. den Namen NTSC. Dann assembliert folgende
zwei Zeilen:
move.w #$20,$dff1dc ; BEAMCON0
rts
Speichert es als PAL ab. Von der Shell aus könnt ihr so zwischen PAL und
NTSC umschalten, indem ihr einfach eines der zwei Programme startet.
Wenn ihr bei diesem Programm schon Orientierungsschwierigkeiten habt, dann
bedenkt, daß ECHTE Programme tausend mal komplizierter sind, mit
verschiedensten BSR, also versucht, dieses zu 100% zu verstehen, bevor ihr
zu LEKTION3.TXT übergeht, die auch den Untertitel trägt "WIR KÖNNTEN EUCH
MIT SPEZIALEFFEKTEN VERWUNDERN, SCHAFFEN ES ABER NOCH NICHT". (A.d.Ü.: In
Orginalton klingt dieser Spruch sehr viel witziger..!)