Gönderen Konu: c64 dot plotting  (Okunma sayısı 15583 defa)

c64 dot plotting

« : 16.03.2006 12:02:17 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
Dun oturup biraz kagit uzerinde, sonra da assembly'de kastim ve ilk hi-res bitmap mode c64 dot plotting algoritmami yazdim. Ama hizindan pek memnun kaldigim soylenemez. her nokta icin bu subroutine'i cagirarak ekrani fill etmem 4-5 saniye aliyor. Saniyorum daha hizli bir rutin yazmak mumkundur, ama olsun sonucta bu ilkti ;)

Asagida denemek, gelistirmek ya da hakkinda yorum yapmak isteyenler icin rutini veriyorum. Butun yorumlariniza acigim. Ozellikle skate ve nightlord'dan siki bir elestiri bekliyorum.

Kod: [Seç]
; x = xl
; a = 0.bit => xh
; y = y
plot
 sty plmem
 sta plmem+1
 
 lda $8b
 pha
 lda $8c
 pha
 tya
 clc
 ror
 clc
 ror
 clc
 ror
 tay
 lda rowscrh,y
 sta $8b   ;rowbasi high byte
 lda rowscrl,y
 sta $8c ;rowbasi low byte
 lda plmem
 and #$07
 clc
 adc $8c
 sta $8c
 txa
 and #$F8
 adc $8c
 sta $8c
 bcc j2
 inc $8b
j2 lda plmem+1
 beq j1
 inc $8b
j1
 lda $8b
 sta chg1+2
 sta chg1+5
 lda $8c
 sta chg1+1
 sta chg1+4

 txa
 and #$07
 beq xzero
 tax
 lda #$80
lp1 ror
 dex
 bne lp1
 jmp chg1
 
xzero lda #$80
 
chg1 ora $0000
 sta $0000

 pla
 sta $8c
 pla
 sta $8b
 rts

plmem
 !byte $00,$00
rowscrh !byte $20,$21,$22,$23,$25,$26,$27,$28,$2a,$2b,$2c,$2d,$2f,$30,$31,$32,$34,$35,$36,$37,$39,$3a,$3b,$3c,$3e,$3f
rowscrl !byte $00,$40,$80,$c0,$00,$40,$80,$c0,$00,$40,$80,$c0,$00,$40,$80,$c0,$00,$40,$80,$c0,$00,$40,$80,$c0,$00,$40

/*
Planet Retro - Retrocomputing News and Blogs
*/

c64 dot plotting

« Yanıtla #1 : 16.03.2006 13:42:18 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bu konuda C=Hacking magazine'ın 7., 8. ve 9. sayılarını hatmetmeni öneriyorum. Al sana benim cloth efektinde kullandığım plot rutinimin kodu.

Kod: [Seç]
lda plotL,x
sta $f0
lda plot1H,x
sta $f1
lda oratbl,x
ora ($f0),y
sta ($f0),y

Düzgün tablolar hazırlarsan işin bu kadar kolay. Bu plot rutininde x registerına x coordinatını, y registerına y coordinatını vererek plot basman mümkün.

P.S: Bu plot rutini yalnızca dikey olarak dizilmiş karakter setleri üzerinde düzgün çalışır. Bitmap olduğunda bir iki satır daha uzuyor iş.

c64 dot plotting

« Yanıtla #2 : 16.03.2006 14:01:00 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
Alıntı
Originally posted by skate@Mar 16 2006, 01:42 PM
Düzgün tablolar hazırlarsan işin bu kadar kolay. Bu plot rutininde x registerına x coordinatını, y registerına y coordinatını vererek plot basman mümkün.

P.S: Bu plot rutini yalnızca dikey olarak dizilmiş karakter setleri üzerinde düzgün çalışır. Bitmap olduğunda bir iki satır daha uzuyor iş.
[post=6100]Quoted post[/post]
[/b]


AAh. Etkilendim :) Ben hala klasik programlama mantiginda dusunuyormusum. Hemen indirdim bastim A different perspective'i. Sanirim bahsettigin yazi buydu. Okuyorum simdi.
/*
Planet Retro - Retrocomputing News and Blogs
*/

c64 dot plotting

« Yanıtla #3 : 16.03.2006 14:03:07 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bu arada "NIGHTSHIFT 06 - RELEASES" başlığı altında şöyle bir lafın dikkatimi çekti, konuyu dağıtmamak için buraya yazıyorum.

Alıntı
Originally posted by jimqode@Mar 16 2006, 11:52 AM
Ama benim demolarda en on planda tuttugum fikir senktronizasyon ve akicilik oluyor. Iste tam da bu yuzden C64'te iki frame'de bir filled 3d cisimler cizen demolar hosuma gitmiyor.

ıki framede bir filled vector'ü beyenmediğini mi söylüyorsun şimdi sen tam iyi anlayamadım :) Saniyede iki frame demek istemiş olma. Eğer iki framede bir diyorsan, 25 FPS eder ki 25 FPS'lik bir filled vector Commodore 64 için rekor bile sayılabilir. Ya da şöyle söyliim, ben hiç 25 FPS'den daha hızlı realtime filled bir küp görmedim 64'de. Genellikle 12-17 FPS civarı olur hızlı sayılabilen filled vectorler. Objeler karmaşıklaştıkça ve yüzey sayıları arttıkça da 5-6 FPS'ye kadar düşebilirler ve bu bence gayet doğaldır.

Plot rutinini ileri götürüp ilk poligonlarını basmaya başladığın zaman ne demek istediğimi anlarsın umarım. "C64'te iki frame'de bir filled 3d cisimler" senin hayalin olmalı bence, çünkü daha hızlısı hemen hemen imkansız.

c64 dot plotting

« Yanıtla #4 : 16.03.2006 14:09:48 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
Alıntı
ıki framede bir filled vector'ü beyenmediğini mi söylüyorsun şimdi sen tam iyi anlayamadım :) Saniyede iki frame demek istemiş olma. Eğer

Dogrusu saniyede 2 frame olacakti haklisin :) Klavye surcmesi.
/*
Planet Retro - Retrocomputing News and Blogs
*/

c64 dot plotting

« Yanıtla #5 : 17.03.2006 15:13:54 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
skate@ senin rutin'e gore hazirladim tabloyu. Hepsi hepsi 384 byte tutuyormus. Ben cok daha fazla yer kaplar diye dusunmustum. :)
Bu teknik iyiymis oldukca ama anladigim kadariyla ekranda 128x128'lik bir yeri kullanabiliyorsun sadece. Ama olsun boylece x'in byte disina sarkan 8.bitiyle de ugrasmak gerekmiyor :) Sagol yardimlarin icin.
/*
Planet Retro - Retrocomputing News and Blogs
*/

c64 dot plotting

« Yanıtla #6 : 17.03.2006 16:27:17 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı
Originally posted by jimqode@Mar 17 2006, 03:13 PM
skate@ senin rutin'e gore hazirladim tabloyu. Hepsi hepsi 384 byte tutuyormus. Ben cok daha fazla yer kaplar diye dusunmustum. :)
Bu teknik iyiymis oldukca ama anladigim kadariyla ekranda 128x128'lik bir yeri kullanabiliyorsun sadece. Ama olsun boylece x'in byte disina sarkan 8.bitiyle de ugrasmak gerekmiyor :) Sagol yardimlarin icin.
[post=6158]Quoted post[/post]
[/b]
Çok çabuk kapıyorsun olayları. Senden korkulur :) 64 scene'i senin gibi bir coder kazandığı için çok mutlu oldum. Ascraeus adına güzel demolar çıkarman dileğiyle. ıhtiyacın oldukça bizlere soru sorabilirsin.

c64 dot plotting

« Yanıtla #7 : 25.03.2006 12:47:04 »
Hızlı düğmeleri aç

jimqode

İleti: 215

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
    • http://
@skate: plotting rutinini calistirmayi becerdim. Double buffering yapiyim derken seni rutinde plot1h'de niye 1 oldugunu anlamis oldum :)) bende  niye plotl oyle de plot1h'de 1 var diye dusunuyodum :)

Bu $d018 sayesinde acayip seyler basariliyor
/*
Planet Retro - Retrocomputing News and Blogs
*/

c64 dot plotting

« Yanıtla #8 : 25.03.2006 14:47:51 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Alıntı
Originally posted by jimqode@Mar 25 2006, 12:47 PM
@skate: plotting rutinini calistirmayi becerdim. Double buffering yapiyim derken seni rutinde plot1h'de niye 1 oldugunu anlamis oldum :)) bende niye plotl oyle de plot1h'de 1 var diye dusunuyodum :)

Bu $d018 sayesinde acayip seyler basariliyor
[post=6431]Quoted post[/post]
[/b]
Aslında copy&paste ederken dikkat etmemişim pek. gözümden kaçmış. Aksi taktirde kafanı karıştırmamak için plot1h'ın 1'ini silerdim. Ama senin kafanın maaşallahı var, karışacağına double bufferingi çözmüş, helal olsun :)