Batman Forever by Batman Group

28 replies · 22,193 views

Batman Forever by Batman Group
3 sene sonra ilk kez bir demoya Pouet'de CDC (Coup De Coeur) verdim. Amstrad CPC scene'i hep Commodore 64 scene'inden çok çok zayıf olmakla, yayınlanmış 3-5 demoda da makinenin limitlerini zorlamamakla eleştirilirdi. Ahanda şimdi zorlamış ve Commodore 64 scene'ine taşı atmışlar demoda. 🙂 şu açıdan haklı sayılabilirler. Commodore 64'cülerden epey bir taş yemişlerdi. Düşünsenize, elinizde Commodore 64'den daha üstün (SID v.s. detaylara girmiyorum, genelleme yapıyorum) bir bilgisayarınız var ve Commodore 64 demoları elinize veriyor. 2011 biraz geç oldu ama en azından hakkını veren ve izlemesi müthiş keyifli, tam anlamıyla bir MEGADEMO yayınladı sonunda birileri. Acayip keyif aldım. Disk 2 A yüzünün ilk partı (idi sanırım) olan hayvani Batman logosu çok etkileyici. Ortada küçük ve düşük FPS'de dönen hali gerçekten C64'de yapsak o hızlarda olur gibi geliyor insana realtime olduğu sürece. Tam ekran olan realtime mıdır bilmiyorum ama bu kadar hayvani bir şekilde yapması oldukça güç c64'de. REU gibi şeylerden bile faydalansan borderları da açmak gerekecek bu boyutta birşey yapmak için, işimiz zor. 🙂
Link aşağıdadır. Ben WinAPE isimli emülatör ile izledim. Amstrad CPC'den anlamayan arkadaşlara tavsiyem WinAPE'i çalıştırın, CTRL+F1'e basın, açılan pencereden .dsk uzantılı disk imajını seçtikten sonra aşağıdaki "Automatically Run Program" checkboxını seçip open/aç düğmesine tıklayın. Her yüzün sonunda demo sizden disketi çevirmenizi/değiştirmenizi istediğinde yine CTRL+F1'e basın, ancak bu defa checkbox'ı kaldırın ve space'e basarak demoyu izlemeye devam edin.
http://www.pouet.net/prod.php?which=56761
Batman Forever by Batman Group
güzel demo ama atari ve amstrad'tan bir türlü c64'ün verdiği tadı alamıyorum. c64 afacan, haşarı ve hiperaktif bir çocuksa, diğer denk platformlar saygılı, efendi abiler gibi geliyor bana nedense 🙂
Batman Forever by Batman Group
@spritus: bana bu demo tam c128 ya da dtv demosu tadı verdi. aynı kandan ama sadece c64 değil gibi yani. 🙂
Batman Forever by Batman Group
oh beee nihayet! ahahah
Batman Forever by Batman Group
cpc scene'ine yabanci olanlar icin soyle diyeyim: bu demo amstrad'da cikabilmis en iyi demodan yuzbin kat daha iyi. butun efektler overscan screen'de yapilmis. 3d rutinlerinin neredeyse tamami 50fps ve full screen overscan. cpcwiki'de bi yigin coder efektlerin nasil yapildigini anlamaya calisiyor.
ben acikcasi sadece video'sunu gorseydim "fake" diyecek kadar inanilmaz buluyorum bu demoyu. cpc kodlamadan anlayanlar biraz daha ilimli yaklasmislar "hmm texture twister etkileyici" demekle yetiniyorlar 🙂
rhino, batman vuelve'de amiga coder'iyken 15 yil sonra scene'e amstrad demosu yapmak icin donmeye karar vermis. boyle bir scene comeback gorulmedi.
Batman Forever by Batman Group
ben batman logosunun realtime olmadigini dusunuyorum. sadece tek eksende donuyor. tek eksende donen bir vektor hicbir zaman realtime degildir 😃
Dolayisiyla sadece rendering goz onune alinirsa c64'te 50 fpsde sanirim bu demodaki kucuk versiyonun 1.5-2 kati buyuklugunde yapilabilir.
Batman Forever by Batman Group
Gerçek Amstrad CPC'den capture edilmiş versiyon.
[youtube]sRiz4thEwuc[/youtube]
Batman Forever by Batman Group
@nightlord: bence de realtime degil ama overscan cozunurlugun 384x280 oldugunu dusunursen 16k vram kullanarak baya buyuk bir alanda double/triple buffering'le vector fill yapiyor yapiyor o muthis.
Batman Forever by Batman Group
@ssg: peki amstrad'da hızlı memfill/memcopy için donanım desteği var mı? asıl merak ettiğim acaba bufferları temizlemekle uğraşıyor mu yoksa bir tür delta algoritması mı kullanmış, ne dersin?
Batman Forever by Batman Group
@skatE: z80'de block copy instruction'lari var (x86'daki "rep movsb" muadili) (sozkonusu instruction'lar: ldir, lddr). bunlari kullanarak block set de yapabiliyosun (destination = source + 1, diyerek). ama hatirladigim kadariyla bunlar esdegeri assembly kodundan daha yavas calisiyordu. bunun otesinde cpc'nin video memory layout'u o kadar karisik ki block instruction'lardan ne kadar istifade edebileceginden de emin degilim. (normal ekranda ikinci line ilk line + 2048'den basliyor, overscan'de de ayni mantik sozkonusu, o yuzden bi kere tek renge gecince gerisini yardir gitsin yapamiyosun, illa ki her satirda tekrar sonraki satirin nereden baslayacaginin hesabi gerekiyor)
eger "read + compare + branch" uclusu "read + write"'tan hizliysa tabi delta daha iyidir. ama ben neticede z80'de bir sprite basma kodunu bile bitiremedigimden (hatirlarsaniz gectigimiz bolumde register'lari tuketmistim) bu konuda kendimi otorite gormuyorum 🙂
Batman Forever by Batman Group
@ssg: block fill olayını çizim değil silme işlemi için sormuştum. bir sonraki satır nerden başlarsa başlasın, herhalde araya başka datalar girmiyordur di mi? yani diyelim ki 16k'lık bir alan grafik hafızası. 16k'yı da 0'la (ya da başka birşeyle) filllediğimde tüm ekranı silmiş olmaz mıyım? derdim sıralı olarak silmek ya eor(xor) fill türü birşey değil.
Batman Forever by Batman Group
@skate
Spectrumda bu şekilde
LD HL,16384
LD DE,16385
LD BC,6143 ;Renk belleği işin içine girerse 6911 olacak.
LD (HL),0 ;Fill byte
LDIR
ekran belleği tertemiz.
Eğer cpc'lerin ekran belleği I/O adreslemeli değilse aynı şekilde olması lazım.

Last edited: 2011-03-23 19:44

Batman Forever by Batman Group
aslinda video memory'de her 2048 byte'lik blok arasinda bir de 32 mi 64 byte mi ne overflow byte serisi var ama oralarda bir sey tutmak icin hafizanin geri kalaninin tamamen dolu olmasi lazim. onun icin gerek yok evet. ekran silmek kolay. ama dedigim uzere su @hades'in kodundan daha hizli olabilir mesela aklima gelen bir yontem:
ld    hl,0  ; video memory #ffff'te bitiyor normalde
ld    sp,hl
ld    b,#20 ; #40 / 2
.loop:
defs #100,#e5 ; 256 tane push hl
djnz loop
Batman Forever by Batman Group
defs opcode değil 256 tane $e5 opcode'unu hafızaya dolduran bir compiler komutu falan mı?