Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: [1]   Aşağı git
Yazdır
Gönderen Konu: Spectrum için kod örnekleri.  (Okunma Sayısı 2988 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
hades
Üye3
***
Mesaj Sayısı: 306



Üyelik Bilgileri
« : Temmuz 06, 2017, 09:41:21 ÖÖ »

Joker_'in ters yazı efektini görünce gaza geldim ve fırsat buldukça yazdığım kodları burada paylaşayım dedim.

Kodları 128K +2 modele göre yazıyorum.

İlk kod lazer text efekt.

Kod:
;================================================================;
; 1X1 TEXT EFFECT 4a - LASER TEXT EFFECT   ;
; 18-02-2017 - HADES/RET                   ;
; UZUNLUK : 191 BYTE KOD + TEXT            ;
;================================================================;
; ROM PLOT RUTİNİ KULLANILARAK EKRANA ÇİZGİ ÇİZİLİYOR      ;
;================================================================;
org $8000

start ld a,6 ;Border rengini
out (254),a ;sarı yap
call $0d6b ;Ekranı sil
setup xor a ;plot rutini için
ld (loop_cnt),a ;döngü sayacı
dec a ;soldan sağa efekt için
ld (x_coor),a ;x koordinat başlangıç değeri
ld a,175 ;plot rutini için
ld (y_coor),a ;y koordinat başlangıç değeri
ld a,128 ;font datasının pixel durumu
ld (check_bit),a ;için test başlangıç değeri
;================================================================;
ld ix,text ;text başlangıç adresinia al
ld b,tend-text ;text uzunluğu max. 32
;================================================================;
; Anlık okunan karakterin data adresini hesapla
;================================================================;
font_adr_calc push bc
ld a,(ix+0)
ld hl,(23606)
ld de,0
font_01 ld b,8
font_00 inc de
djnz font_00
dec a
jr nz,font_01
add hl,de
;================================================================;
; Anlık okunan karakterin datalarını kopyala
;================================================================;
ld b,8
ld de,font_data
font_copy ld a,(hl)
;================================================================;
; cpl ; NEGATİF font için
;================================================================;
ld (de),a
inc hl
inc de
djnz font_copy
pop bc
;================================================================;           
push bc ;text karakter sayacını sakla
                        ld c,8 ;font data pixel sayacı
loop01 ld de,font_data    ;font dsta adresini al
ld b,8 ;font data sayacı
loop00 push bc ;font data sayacını sakla
ld a,(check_bit) ;bit kontrol değerini al
ld l,a ;kopyala
ld a,(de) ;o anki font datasını al
and l ;font pixel durumunu kontrol et
jr z,next_data ;font pixeli "0" ise git
push de ;font data adresini sakla
call plot ;Ekrana bir nokta bas
call unplot ;Ekrandaki bir noktayı sil
pop de ;font data adresini geri al
next_data inc de ;fontun bir sonraki datası
ld a,(y_coor) ;plot rutini için
dec a ;y koordinat değeini 1 azalt
ld (y_coor),a ;ve geri yaz
pop bc ;font data sayacını geri al
djnz loop00 ;1 azalt ve 0 olmadıysa tekrarla
;================================================================;
; Bir sonraki bit işlemi için işlemler
;================================================================;
ld a,(check_bit) ;bir önceki bit için
rrca ;değeri sağa kaydır
ld (check_bit),a ;geri yaz
ld a,(loop_cnt) ;plot rutini döngü
dec a ;sayacını 1 azalt
ld (loop_cnt),a ;ve geri yaz
ld a,175 ;plot için y koordinat
ld (y_coor),a ;değerini yaz
dec c ;font data pixel sayacını 1 azalt
jr nz,loop01 ;0 değilse bir önceki biti işle
ld a,128           ;yeni karakter için font pixel
ld (check_bit),a ;başlangıç değerini yaz
inc ix ;bir sonraki karakter
pop bc ;text karakter sayacını geri al
djnz font_adr_calc ;sayacı 1 azalt, 0 değilse tekrarla
finish ret ;mutlu son
;================================================================;
; Bir nokta koy
;================================================================;
plot ld a,$14 ;INVERSE
rst $10
xor a ;OFF
rst $10
call set_coor
ld a,(loop_cnt)
jr com_plot
;================================================================;
; Bir nokta sil
;================================================================;
unplot ld a,$14 ;INVERSE
rst $10
ld a,1 ;ON
rst $10
call set_coor
ld a,(loop_cnt)
dec a
com_plot ld h,a
un_plot push bc
push hl
call $22e5 ;ROM'daki PLOT rutini
pop hl
pop bc
dec c ;(soldan sağa efekt için) X koordinatını 1 azalt
dec h
jr nz,un_plot
prg_end ret
;================================================================;
set_coor ld a,(x_coor)
ld c,a
ld a,(y_coor)
ld b,a
ret
;================================================================;
font_data defs 8,0
loop_cnt defb 0
x_coor defb 0
y_coor defb 0
check_bit defb 0
text defm "TEXT EFEKT RUTINI #4a 18-02-2017"
tend
;================================================================;
end $8000
;================================================================;

Bu efektin başka versiyonarıda var. karakterlerin yönü (başaşağı, ayna görüntüsü) ve efektin yönü değiştiriliyor. Kod içindeki komutlar değişiyor sadece. Ancak bazı versiyonlarında garip bir hata var. Efekt ile yazılacak yazının son harfi "T" ise kod saçmalıyor.



* lazer efekt.jpg (34.32 KB, 655x570 - Görüntüleme: 53 kez.)
Logged
Sayfa: [1]   Yukarı git
Yazdır
Gitmek istediğiniz yer: