Kodlamalara devam.
;---------------------------------------------------------------;
; CPC RUTINI #06 - EKRAN EFEKTI #03 ;
; PIXEL PIXEL YATAY EKRAN KOPYALAMA ;
; (C) 06-01-2019 / HADES ;
;---------------------------------------------------------------;
; Bu rutin hafizadaki ekran goruntusunu pixel satirlari
; seklinde ekran belleginin pixel satirlarina kopyalar
;===============================================================;
run start
org &8000
;===============================================================;
; ekran modunu ayarla ve renkleri duzenle
;===============================================================;
start call &bc14 ;firmware cls
di
setmode ld bc,&7f00
ld a,%10001100
out (c),a
ld de,PaletteArray
pcolor out (c),c
ld a,(de)
inc de
out (c),a
inc c
bit 4,c
jr z,pcolor
ld bc,&7f10 ;select border
out (c),c
ld bc,&7f54 ;set border colour to black
out (c),c
;===============================================================;
call effect_03
halt
;===============================================================;
PaletteArray db &54,&4b,&43,&44,&4e,&4c,&5c,&5b
;blk;wht;yel;dbl;org;brd;red;lcy
db &57,&55,&45,&46,&40,&58,&4b,&54
;lbl;blu;pur;cya;gry;mgn;bmg;blk
;---------------------------------------------------------------;
; EFEKT RUTINI BURADAN BASLIYOR
;---------------------------------------------------------------;
effect_03 ld ix,&4000 ;hafizada saklanan ekran
ld iy,&c000 ;default ekran bellegi
ld h,25 ;ekrandaki karakter satiri sayaci
next_line push ix ;ix registerini yigina sakla
push iy ;iy registerini yigina sakla
;===============================================================;
; hafizadan o anki pixel satirini kopyala
;===============================================================;
ld c,8 ;kopyalanacak pixel satir sayaci
next_pixel ld b,80 ;bir pixel satirindaki byte sayisi
next_byte ld a,(ix+0) ;hafizadaki ekrandan bir byte oku
ld (iy+0),a ;default ekrana bellegine yaz
inc ix ;hafizadaki ekran adresini 1 arttir
inc iy ;default ekran adresini 1 arttir
djnz next_byte ;80 byte kopyalanincaya kadar tekrarla
;===============================================================;
; biraz bekleyelim
;===============================================================;
ld de,&0400
bekle dec de
ld a,d
or e
jr nz,bekle
;===============================================================;
; bir alttaki pixel satiri icin hesapla
;===============================================================;
ld de,2048-80 ;bir sonraki pixel satiri icin adres farki
add ix,de ;yeni pixel satirinin adresini hesapla
add iy,de ;yeni pixel satirinin adresini hesapla
dec c ;pixel satir sayacini 1 azalt
jr nz,next_pixel ;0 oluncaya kadar islemleri tekrarla
;===============================================================;
; bir sonraki karakter satiri icin islem yap
;===============================================================;
pop iy ;iy registerini yigindan geri al
pop ix ;ix registerini yigindan geri al
ld de,80 ;bir sonraki karakter satiri icin adres farki
add ix,de ;yeni karakter satirinin adresini hesapla
add iy,de ;yeni karakter satirinin adresini
dec h ;karakter satiri sayacini 1 azalt
jr nz,next_line ;0 oluncaya kadar islemleri tekrarla
ret
;===============================================================;
org &4000
screen incbin "BatR2.scr"
;===============================================================;