home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1991 May
/
64er_Magazin_91-05_1991_Markt__Technik_de.d64
/
s.-pixel-fld.src
< prev
next >
Wrap
Text File
|
2022-10-26
|
6KB
|
390 lines
;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