Umblenden wie im Film: Random Copy
Ein Umblenden von hochauflösenden Grafikbildern, anstatt wie bisher ein hartes Wechseln der Bilder, ermöglicht dieses kleine und effektive Programm, wobei ganz besondere Effekte entstehen.
Haben Sie sich nicht auch schon öfters daran gestört, daß das Wechseln von Grafikbildern auf dem Monitor sehr abrupt und übergangslos erfolgt? Dann können Sie jetzt aufatmen. Das folgende kleine Programm, »Random Copy«, läßt das Wechseln von Grafikseiten sehr langsam und »weich« vonstatten gehen. Dadurch wird ein interessanter Umblendeffekt erzielt, der das Betrachten von mehreren Bildern hintereinander zu einem kleinen Erlebnis macht.
In den Bildern 1 bis 4 sehen Sie diesen Effekt dargestellt, wobei der Globus in Bild 2 durch Umblenden (in Bild 3 ist das etwa zur Hälfte erfolgt) langsam in Bild 4 übergeht.




Nachdem Sie das kleine Programm (Listing 1) mit dem MSE abgetippt und auf eine Diskette gespeichert haben, können Sie es mit »LOAD "RANDOM COPY",8,1« wieder in den Computer laden. Der Start des Umblendens erfolgt jedesmal mit SYS 828. Dabei muß in der Speicherstelle $03F8 (1016) das höherwertige Byte der Startadresse des Bildschirms stehen, der kopiert werden soll. Liegt dieser Bildschirm bei $2000, so wird dessen Adresse also zum Beispiel mit »POKE 1016,32« übergeben (das höherwertige Byte von $2000 ist $20, was dem Dezimalwert 32 entspricht). Die Speicherstelle $03F9 (1017) enthält das höherwertige Byte des Zielbereichs. Hier wird also der Grafikspeicher angegeben, in den die Grafik kopiert werden soll. Steht dort schon eine Grafik, die auf dem Bildschirm angezeigt wird, so erfolgt ein Überblenden mit dem neuen Bild. War dieser Bereich jedoch leer, so entsteht der Eindruck eines »Einblenden« der gewünschten Grafik. Für Interessierte haben wir in Listing 2 auch den Source-Code von Random Copy abgedruckt. Es dürfte also kein Problem sein, eventuelle Änderungen vorzunehmen, wenn das notwendig sein sollte.
Wichtig ist: Das Programm Random Copy übernimmt nur das »Umschaufeln« der Speicherbereiche, wobei diese auch unter dem Betriebssystem ($A000 oder $E000) liegen können. Für die Anzeige der Grafiken muß der Benutzer selbst sorgen, indem er den jeweiligen Grafikmodus aktiviert. Durch die Möglichkeit, auch Bereiche im RAM unter dem Betriebssystem kopieren zu können, ist Random Copy sehr flexibel und arbeitet auch mit Simons Basic zusammen. Durch die günstige Lage des Programms geht auch keinerlei Basic-Speicherplatz verloren, so daß keine Schwierigkeiten mit Basic-Programmen auftreten dürften.
(Stephan Arndt/ks)PROGRAMM : RANDOM COPY 033C 03FF ----------------------------------- 033C : A9 05 8D F6 03 20 D3 03 31 0344 : 78 A9 35 85 01 AD 1B D4 22 034C : 6D F5 03 85 FB 85 FD AD 65 0354 : 1B D4 6D F4 03 29 1F 85 D4 035C : FC 85 FE 18 A5 FC 6D F8 C7 0364 : 03 85 FC 18 A5 FE 6D F9 68 036C : 03 85 FE AD 1B D4 49 FF 25 0374 : 29 07 AA BD EC 03 8D F7 90 037C : 03 A2 00 A1 FB 2D F7 03 14 0384 : F0 07 01 FD 81 FD 4C 96 5E 038C : 03 AD F7 03 49 FF 21 FD D9 0394 : 81 FD CE F4 03 D0 AE CE 75 039C : F5 03 D0 A9 CE F6 03 D0 CE 03A4 : A4 AD F8 03 85 FC AD F9 A8 03AC : 03 85 FE A9 00 85 FB 85 8E 03B4 : FD A0 00 A2 1F B1 FB 91 E8 03BC : FD 88 D0 F9 E6 FC E6 FE 60 03C4 : CA 30 06 D0 F0 A0 40 D0 F9 03CC : EC A9 37 85 01 58 60 EA 36 03D4 : A9 80 8D 18 D4 A9 80 8D DB 03DC : 0E D4 8D 0F D4 A9 00 8D 4F 03E4 : 12 D4 A9 81 8D 12 D4 60 78 03EC : 01 02 04 08 10 20 40 80 F5 03F4 : FF FF 05 00 E0 20 FF FF 43 03FC : FF FF FF E8
1 rem * random copy - source text
2 rem * (profimat)
3 rem *
4 rem * (c) 1985 fras
5 rem *
6 rem * stephan arndt
7 rem * suedwestkorso 62
8 rem * 1000 berlin 41
9 rem *
10 poke53280,1
20 poke53281,1
30 print"{clr}{gry1}"
40 :
50 sys9*4096
60 .opt oo
70 *= 828
80 ;
81 rand = $d41b
82 get = $fb
83 put = $fd
87 ;
88 ; random copy
89 ;
90 ; uebertragen einer grafikseite
91 ; mit zufaelligen punkten
92 ;
100 lda #$05
101 sta count+2
102 jsr random
103 sei
104 lda #53 ;kernel und
105 sta $1 ;basic weg
106 ;
110 start lda rand ;zufallszahl
115 adc count+1
120 sta get ;
130 sta put ;low-bytes
140 lda rand ;zufallszahl
145 adc count
150 and #%00011111 ;0-31
160 sta get+1 ;fuer hi-byte
170 sta put+1 ;
180 ;
200 clc ;
210 lda get+1 ;source-addresse
220 adc source ;berechnen
230 sta get+1 ;
240 clc ;
250 lda put+1 ;target-adresse
260 adc target ;berechnen
270 sta put+1 ;
280 ;
300 lda rand ;zufallszahl
305 eor #$ff
310 and #%111 ;0-7 fuer
320 tax ;
330 lda bits,x ;zweierpotenzen
340 sta mask ;punktadressierung
350 ;
400 ldx #$0 ;
410 lda (get),x ;byte holen
420 and mask ;punkt nehmen
425 beq cl
430 ora (put),x ;einschluerfen
440 sta (put),x ;uebertragen
445 jmp nt
450 cl lda mask
455 eor #$ff
460 and (put),x
465 sta (put),x
495 ;
500 nt dec count
510 bne start
520 dec count+1
530 bne start
540 dec count+2
550 bne start
560 ;
600 lda source
610 sta get+1
630 lda target
640 sta put+1
650 lda #$0
660 sta get
670 sta put
680 ldy #0
690 ldx #31
700 lp lda (get),y
710 sta (put),y
720 dey
730 bne lp
740 inc get+1
750 inc put+1
760 dex
765 bmi rd
770 bne lp
775 ldy #64
780 bne lp
782 ;
785 rd lda #55 ;kernel und
786 sta $1 ;basic normal
787 cli
790 ;
795 rts
799 ;
800 random nop
810 lda #$80 ;zufallszahl
820 sta $d418 ;aus register
830 lda #$80 ;#27 des sid
840 sta $d40e ;(rauschgenerator
850 sta $d40f ;der 3. stimme)
870 lda #$0 ;
875 sta $d412 ;aus
880 lda #$81 ;ein
885 sta $d412 ;
890 rts
895 ;
900 bits .byte $1,$2,$4,$8,$10,$20,$40,$80
910 count .byte $ff,$ff,$05
920 mask .byte $0
930 source .byte $e0
940 target .byte $20