home *** CD-ROM | disk | FTP | other *** search
-
-
- ;Anwendung des $d011-Effektes:
-
- ; Single-Pixel-FLD
-
- ;(c)Copyright 1991 by LUBBER of PADUA
-
-
- ;Der Original-Zeichensatz muss ab
- ; $3000 liegen
-
- ;^^^^ WICHTIG! ^^^^
-
- ;Die ersten 5 normalen und die ersten
- ;5 reversen Zeichen duerfen NICHT
- ;benutzt sein ! Sonst werden sie fuer
- ;den Effekt zerstoert !
-
- ;(Da dort die Screenzeilen abgelegt
- ; werden)
-
-
- ;Die Original-Screentabelle muss ab
- ;$2c00 liegen (Maximal 16 Zeilen hoch!)
-
-
- org $1000 ;Code nach $1000
-
- lda #8 ;Aktuelle Farbe auf
- sta 646 ;orange=schwarz in Multicolor
- ;setzen
- jsr $e544 ;Bildschirm loeschen
- ;und Color-ram mit
- ;aktueller Farbe fuellen
-
- lda #$40
- sta hibyte1+2
- lda #$48
- sta hibyte2+2
- lda #$50
- sta hibyte3+2
- lda #$58 ;Highbytes fuer
- sta hibyte4+2 ;Umrechnungsroutine
- lda #$60 ;erneuern
- sta hibyte5+2
- lda #$68 ;Nur wichtig,wenn
- sta hibyte6+2 ;die Routine oefters
- lda #$70 ;von neuem gestartet
- sta hibyte7+2 ;werden soll,ohne
- lda #$78 ;dass man den Code
- sta hibyte8+2 ;neu reinladen muss.
-
-
- lda #$ff
- tax
- :fillff1
- sta $37f8,x
- inx ;Das 255.Zeichen des
- cpx #8 ;Zeichensatzes wird mit
- bne fillff1 ;$ff-Bytes gefuellt
-
- lda #$ff
- ldx #0
- :fillff2
- sta $2c00+600,x ;Die letzte Cursor-Zeile
- inx ;des Original-Bildes
- cpx #40 ;wird mit $ff-Bytes
- bne fillff2 ;gefuellt
-
- lda #0
- sta $fb
- lda #$30 ;Adresse des Zeichensatzes
- sta $fc ;in die Register ($fb)
-
-
- ;Zuerst wird der Original-Zeichensatz
- ;fuer den Effect 'zurechtgeschoben'.
-
- ldx #0
- ldy #0
- :charbegin
- lda ($fb),y
-
- :hibyte1
- sta $4000,x ;Dieser Zeichens. enthaelt
- iny ;am Ende alle 1.Bytes
- lda ($fb),y ;eines einzelnen Zeichens
-
- :hibyte2
- sta $4800,x ;Dieser alle zweiten
- iny ;Bytes
- lda ($fb),y
-
- :hibyte3
- sta $5000,x ;Dieser alle dritten
- iny
- lda ($fb),y
-
- :hibyte4 ; . ..
- sta $5800,x
- iny
- lda ($fb),y
-
- :hibyte5
- sta $6000,x ;....
- iny
- lda ($fb),y
-
- :hibyte6
- sta $6800,x
- iny
- lda ($fb),y
-
- :hibyte7
- sta $7000,x
- iny
- lda ($fb),y
-
- :hibyte8
- sta $7800,x ;... und dieser alle
- ;8.Bytes
-
- iny ;schon 256 Bytes (= 32
- ;komplette Zeichen)
-
- bne keinuebertrag1
- ;nein ? dann keinuebertrag1
- ;Original-
- inc $fc ;Zeichensatz-Adressenhigh-byte
- ;um 1 erhoehen
-
- :keinuebertrag1
- txa
- clc ;Zeiger der neuen Zeichens.
- adc #8 ; um 8
- tax ;erhoehen
- bne notrag ;da nur das 1.Byte der neuen
- ;Zeichensaetze benutzt
- ;werden
-
- inc hibyte1+2 ;wenn x-reg. wieder auf 0
- inc hibyte2+2 ;dann high-bytes erhoehen.
- inc hibyte3+2
- inc hibyte4+2
- inc hibyte5+2
- inc hibyte6+2
- inc hibyte7+2
- inc hibyte8+2
-
- :notrag
- lda $fc
- cmp #$38 ;schon ganzer Original-
- ;Zeichensatz bearbeitet ???
-
- bne charbegin ;nein ?? dann charbegin
-
-
- ;Jetzt alle Zeilen der Original-
- ;tabelle in die verschiedenen
- ;Screens verschieben
-
- ldx #0
- :transfer
- lda $2c00,x
- sta $4000,x
- lda $2c00+40,x
- sta $4400,x
- lda $2c00+80,x
- sta $4800,x
- lda $2c00+120,x
- sta $4c00,x
- lda $2c00+160,x
- sta $5000,x
- lda $2c00+200,x
- sta $5400,x
- lda $2c00+240,x
- sta $5800,x
- lda $2c00+280,x
- sta $5c00,x
- lda $2c00+320,x
- sta $6000,x
- lda $2c00+360,x
- sta $6400,x
- lda $2c00+400,x
- sta $6800,x
- lda $2c00+440,x
- sta $6c00,x
- lda $2c00+480,x
- sta $7000,x
- lda $2c00+520,x
- sta $7400,x
- lda $2c00+560,x
- sta $7800,x
- lda $2c00+600,x ;16 zeilen
- sta $7c00,x ;wurden verschoben
- inx
- cpx #40
- bne transfer
-
- sei
- lda #$7f
- sta $dc0d
- lda #$00
- sta $dc0e
- lda #$f1 ;Interrupt-Register
- sta $d01a
- lda #50 ;auf Rasterinterrupt
- sta $d012
- lda #$1b ;vorbereiten
- sta $d011 ;bei Rasterzeile 50
- lda #<irqneu
- sta $0314 ;IRQ-Pointer setzen
- lda #>irqneu
- sta $0315
-
- lda #24
- sta $d016 ;Multicolor einschalten
-
- lda #0
- sta $d020 ;Rahmenfarbe
- ;auf Schwarz
- lda #6
- sta $d021 ;Hintergrundfarbe
- ;auf Blau
- lda #14
- sta $d022 ;Mutlicolorfarben
- lda #15 ;auf hellblau und hell-
- sta $d023 ;grau setzen
-
-
- cli
-
- :back
-
- jmp back ;Endlosschleife
-
- :irqneu
- bit 0
- bit 0 ;Wartezeit
-
- lda #150
- sta $dd00 ;Auf die Bank ab $4000
- ;umschalten
-
- ldy #0
- :loop
- lda #$12 ;nacheinander
- sta $d011 ;die werte
- lda chartab,y ;$12,$13,$14,$15
- ;$16,$17,$10,$11
- sta $d018 ;setzen um den FLD-
- ;effekt zu erzielen
- iny
- nop ;Rasterzeile austimen
- nop
- lda #$13
- sta $d011
- lda chartab,y ;nacheinander die $d018
- sta $d018 ;werte aus der Tabelle
- iny ;holen
- nop
- nop
- lda #$14
- sta $d011
- lda chartab,y
- sta $d018
- iny
- nop
- nop
- lda #$15
- sta $d011
- lda chartab,y
- sta $d018
- iny
- nop
- nop
- lda #$16
- sta $d011
- lda chartab,y
- sta $d018
- iny
- nop
- nop
- lda #$17
- sta $d011
- lda chartab,y
- sta $d018
- iny
- nop
- nop
- lda #$10
- sta $d011
- lda chartab,y
- sta $d018
- iny
- bit 0
- lda #$11
- sta $d011
- lda chartab,y
- sta $d018
-
- iny
- cpy #136 ;Schon der 136.wert aus der
- ;Tabelle gelesen ???
- ;(Der FLD-Bereich ist dann
- ;136/8=17 Cursor-zeilen hoch)
-
- bne loop ;nein ?? dann loop
-
- lda #$72 ;Unteren Teil des Bildschirms
- sta $d011 ;unsichtbar machen
-
- lda #$fe
- ldx #0
- :loeschtab ;$d018-Tabelle mit
- sta chartab,x ;$fe-bytes fuellen.
- inx ;Sie simulieren
- cpx #136 ;ein FLD mit ge-
- bne loeschtab ;loeschtem $3fff
-
- :sinzeiger
- ldx #0
-
- ldy #0
- :setpixels
- lda #0 ;pixelnummer
- asl ;mal 2
- sta chartab,y ;in tabelle setzen
- cmp #$90 ;schon 72 pixel ???
- ;72/8=9 Cursor-Zeilen
- ;(Hoehe des Original
- ; Bildes)
- beq fertig ;ja ?? dann fertig
-
- iny ;zeiger zum setzen
- tya ;der chartab erhoehen
- clc ;und mit sinuswert
- adc sinus,x ;addieren
- tay
- inx
- inc setpixels+1 ;pixelnummer erhoehn
-
- jmp setpixels ;wiederholen
-
- :fertig
- lda #0
- sta setpixels+1 ;anfangspixel wieder
- ;auf 0
-
- inc sinzeiger+1 ;sinuszeiger erhoehen
- lda sinzeiger+1
- cmp #100 ;schon tabelle durchge-
- bne keinsinend ;laufen ????
-
- lda #0 ;ja ??
- sta sinzeiger+1 ;dann sinuszeiger auf 0
-
- :keinsinend
- lda #1
- sta $d019
- jmp $febc ;Ende der IRQ-Routine
-
-
- :chartab
- s 136 ;Speicher mit 136 $00-bytes
- ;fuellen
-
- :sinus ;Sinustabelle fuer
- ;den 'kuenstlichen' FLD
-
- s 70 ;70 $00-Bytes
-
- ; jetzt kommen die Abstaende zwischen
- ; den Pixelzeilen
-
- b 1,1,2,2,3,3,4,4,4,4,4,4,4,4,4,3,3,2,2,1,1
-
- s 80 ;80 $00-Bytes
-
-
-
-
-
-
-
-
-
-
-