Gönderen Konu: Pixel satırında double height text  (Okunma sayısı 98 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı hades

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 184
Pixel satırında double height text
« : 22 Mayıs 2022, 15:50:47 »
"27 text lines" kodundaki pixel_print bölümüne bir "inc a" komutu ekleyerek ekrana iki karakter yüksekliğinde ama birer pixel satırı boş kalacak şekilde yazı yazdırıyoruz. Ancak döngü kullanmayıp bunun yerine yazının ekranda bulunan yerin border rengini değiştirecek şekilde bir ilave yaptım. Yazıyı 0...176 pixel satırları arasında yazdırıyoruz. Kod üzerinde biraz uğraşarak renk belleğinde border/paper veya border/ink rengi eşitlenebilir.

Kod: [Seç]
;========================================
; Double Height Text On Any Pixel Line
; 22.05.2022 - HADES/RET
;========================================
org $8000

defs 257,$81
;----------------------------------------
; Ekran Piksel Satır Adres Üreteci
;----------------------------------------
adr_gen ld de,$4000
ld hl,tablo
loop02 ld c,8
loop01 ld b,8
loop00 ld (hl),e
inc hl
ld (hl),d
inc d
inc hl
djnz loop00

ld a,e
add a,$20
ld e,a

ld a,d
sub 8
ld d,a
dec c
jr nz,loop01

add a,8
ld d,a
cp $58
jr nz,loop02

call $0db6 ; ekranı sil
;-----------------------------------------
; 32 karakterlik yazıyı ekrana bas.
;-----------------------------------------
pixel_print ld b,32 ; text uzunluğu. Kolon numarası 0'dan
; büyükse text uzunluğu daha az olmalıdır.
ld hl,text
loop03 push bc ; yazı uzunluğunu yığına at
push hl ; text adresini yığına at
;----------------------------------------
; Y pixel pozisyonuna bir karakter bas.
; Önce fontun data adresini hesapla.
;----------------------------------------
print ld a,(hl)
    ld d,0
    rla
    rl d
    rla
    rl d
    rla
    rl d
    ld e,a

    ld ix,(23606) ; karakter setinin başlangıç adresi
add ix,de ; IX registerinde font data adresi var
;----------------------------------------
; y_pixel değerine göre pixel satır
; adresini hesapla ve tablodaki yerini bul
; pixel satırının adresi=y_pixel*2 + tablo başlangıç adresi
;----------------------------------------
ld b,8
ld a,(y_pixel)
loop04 ld c,a
ld h,0
rla
rl h
ld l,a

ld de,tablo
add hl,de

ld e,(hl) ; E'de pixel satır adresinin LO baytı var
inc hl
ld d,(hl) ; D'de pixel satır adresinin HI baytı var

ld a,(kolon)
adc a,e
ld e,a
;----------------------------------------
; Font datasını ekrana bas.
;----------------------------------------
ld a,(ix+0)
ld (de),a
inc d
inc ix
ld a,c
inc a ; bir sonraki y_pixel değeri
;----------------------------------------
inc a ; bu komut eklendi
;----------------------------------------
djnz loop04
;----------------------------------------
; Bir sonraki karakterin yerini ayarla
;----------------------------------------
ld hl,kolon
inc (hl)
pop hl
inc hl ; textin bir sonraki karakteri
pop bc
djnz loop03 ; karakter sayacı
;----------------------------------------
; IM 2 setup
;----------------------------------------
di
ld a,$80
ld i,a
im 2
ei
;----------------------------------------
halt
zzz jr zzz
;----------------------------------------
org $8181

ld bc,548
delay dec bc
ld a,b
or c
jr nz,delay

ld a,(y_pixel)
cp 0
jr z,cont
ld c,a
wait1 ld b,16
wait djnz wait
dec c
jr nz,wait1

cont ld a,4 ; border yeşil
out (254),a

ld b,0
wait2 djnz wait2
ld b,30
wait3 djnz wait3
ld a,0 ; border siyah
out (254),a
ei
ret
;----------------------------------------
text defm "DoubleHeightText On AnyPixelLinE"
;----------------------------------------
y_pixel defb 107 ; Yazının yazılacağı pixel satırı
kolon defb 0
;----------------------------------------
tablo
;----------------------------------------
end $8000
;========================================


Çevrimdışı Skate

  • RAAT
  • Retro Meraklısı
  • *
  • İleti: 185
Ynt: Pixel satırında double height text
« Yanıtla #1 : 22 Mayıs 2022, 16:38:12 »
Tam introluk olmuş. :) @hades daha önce sormadım da denemedim de, karakter renkleri her raster satırında fetch ediliyor değil mi? Yani zaten karakter modu olmadığına göre teorik olarak paper / ink renklerini her raster satırında değiştirebiliriz değil mi? Split de yapılabiliyor diye düşünüyorum, doğru mudur? Yoksa her satır başında bir kere fetch edilmesi gibi durumlar var mı?

Bilgisayar başında değilim de deneyemedim, o nedenle soruyorum. :)

Çevrimdışı Ref

  • Yönetici
  • Özgür Retrocu
  • *
  • İleti: 2958
  • Advanced User Simulator
    • ae unutmadan
Ynt: Pixel satırında double height text
« Yanıtla #2 : 22 Mayıs 2022, 23:18:27 »
Karakter renkleri o byte ekrana basılmadan önce okunuyor, teorik olarak her bir 8x1 lik alanı farklı renkte boyayabilirsin ama cpu hızı yetmiyor, şimdiye kadar rekor gasman'de 20karakter genişliğinde. 8x2 dersen 32 kolonda da mümkün