;==============================================================;
; 1X1 MIRROR TEXT SCROLL - 1 (DIŞTAN İÇE);
; 15-09-2015 / HADES ;
; UZUNLUK : 183 BYTE CODE + TEXT ;
;==============================================================;
org $8000
;--------------------------------------------------------------;
; Borderi siyah yap.
;--------------------------------------------------------------;
xor a
out (254),a
again call main
jr again
;--------------------------------------------------------------;
; Scroll yapılacak satır numarasını al ve
; ekran adresini hesapla.
;--------------------------------------------------------------;
; Scroll yapılacak satır 0-7 arasında ise
; ekran adresi $401f.
;--------------------------------------------------------------;
main ld a,(line_nr)
line_0007 cp 8
jr nc,line_0815
ld hl,$401f
jr devam
;--------------------------------------------------------------;
; Scroll yapılacak satır 8-15 arasında ise
; ekran adresi $481f.
;--------------------------------------------------------------;
line_0815 cp 16
jr nc,line_1623
ld hl,$481f
jr devam
;--------------------------------------------------------------;
; Scroll yapılacak satır 16-23 arasında ise
; ekran adresi $501f.
;--------------------------------------------------------------;
line_1623 ld hl,$501f
devam ld (base_r),hl
ld (base_l),hl
;--------------------------------------------------------------;
; Satır numarasına göre son kolonun adresini
; hesapla ve asıl ekran adresini elde et.
;--------------------------------------------------------------;
sla a
sla a
sla a
sla a
sla a
or l
ld (base_r),a
sub $1f
ld (base_l),a
;--------------------------------------------------------------;
ld b,tend-text ;text uzunluğu max.256
ld hl,text
nextchar push bc
push hl
;--------------------------------------------------------------;
; Okunan karakterin data adresini hesapla.
;--------------------------------------------------------------;
ld a,(hl)
ld hl,(23606)
ld de,0
loop01 ld b,8
loop00 inc de
djnz loop00
dec a
jr nz,loop01
add hl,de ;font data adresi
;--------------------------------------------------------------;
; Font datalarını kopyala.
;--------------------------------------------------------------;
ld b,8
ld de,temp_r
copy_r ld a,(hl)
ld (de),a
inc hl
inc de
djnz copy_r
ld b,8
ld hl,temp_r
copy_l ld a,(hl)
ld (de),a
inc hl
inc de
djnz copy_l
;--------------------------------------------------------------;
; 8 ekran satırını 8 kez 1 pixel sola kaydır.
;--------------------------------------------------------------;
ld e,8
loop05 push de
ld ix,(base_r) ;ekran satırının son adresi
ld iy,(base_l) ;ekran satırının ilk adresi
;--------------------------------------------------------------;
; 8 Ekran satırını 1 pixel sola kaydır.
;--------------------------------------------------------------;
ld c,8
ld de,temp_r
ld hl,temp_l
loop04 push ix
push iy
;--------------------------------------------------------------;
; Font datasının 1 bit sola kaydır ve ekrana bas.
; O anki ekran satırını bir piksel sola kaydır.
;--------------------------------------------------------------;
ld b,16 ;32
ld a,(de)
rl a
ld (de),a
loop03_l rl (ix+0)
dec ix
djnz loop03_l
;--------------------------------------------------------------;
; Font datasının 1 bit sağa kaydır ve ekrana bas.
; O anki ekran satırını bir piksel sağa kaydır.
;--------------------------------------------------------------;
ld b,16 ;32
ld a,(hl)
rl a
ld (hl),a
loop03_r rr (iy+0)
inc iy
djnz loop03_r
;--------------------------------------------------------------;
pop iy
pop ix
inc de
inc hl
inc ixh
inc iyh
dec c
jr nz,loop04
;--------------------------------------------------------------;
; Scroll hızını ayarla.
; İstenirse sadece HALT komutları kullanılabilir.
;--------------------------------------------------------------;
ld de,4555
delay dec de
ld a,d
or e
jr nz,delay
; halt
; halt
;--------------------------------------------------------------;
pop de
dec e
jr nz,loop05
;--------------------------------------------------------------;
pop hl
inc hl
pop bc
djnz nextchar
ret
;--------------------------------------------------------------;
line_nr defb 23 ;satır numarası
;--------------------------------------------------------------;
base_r defw 0
base_l defw 0
temp_r defb 0,0,0,0,0,0,0,0
temp_l defb 0,0,0,0,0,0,0,0
;--------------------------------------------------------------;
text defm " ...Herhangi bir satirda 1x1 "
defm "mirror text scroll rutini "
defm "16-09-2015 / HADES"
;--------------------------------------------------------------;
tend end $8000
;==============================================================;