İpuçları

Commodore 64

Şekil 1.

$F5C1 (62913) adresinin en son yükletilen dosyayı ekrana yazdığını biliyor muydunuz?

load"program",8,1
sys 62913

Eğer dosyayı load"*",8,1 şeklinde yüklediyseniz ekrana * karakteri yazılacaktır. Yani bu komut sizin yüklediğiniz en son dosya isminin tutulduğu tampon belleği ekrana yazar. Peki nerede bu tampon bellek? $a000 adresi Basic ROM'unun başladığı adrestir. Yükletilen dosya isminin uzunluğuna bağlı olarak bu bellek alanı $9fff'den geriye doğru kullanılır, yani Basic ROM'unun başlangıcından geriye doğru. Örneğin dosyayı "*" ile yüklemişsek bellek başlangıcı tam olarak $9fff'de yer alır. Ama "dutch breeze" diye bir dosya yüklediysek, dosya ismi 12 karakter olduğu için $a000-12 = $9ff4 adresinden itibaren hafızaya yerleşecektir. Bu bellek adresinin başlangıcı ise zeropage'de $bb ve $bc adreslerinde 16 bit şeklinde durur. Örneğin "dutch breeze" için $bb = $f4, $bc = $9f gibi.

6510 ASM'de hiçbir flag'i (zero flag, carry flag v.b.) etkilemeyen komutlar nelerdir?

NOP, JSR, JMP, PHA, PHP, RTS, STA, STX, STY. Bu komutlar haricindeki tüm 6510 assembler komutları en az bir flag'i etkiler.

$D011'e sıfır değeri verdiğimizde DMA satırlarından kurtuluyoruz ve iç ekran kapanıyor ancak bu sefer sprite veya herhangi bir grafik göstermemiz mümkün olmuyor. FLD kullanmadan kolay bir şekilde yalnızca karakter ekranını kapatarak DMA'dan kurtulmanın bir yolu var mıdır?

Olmasa ne diye uzun uzun yazayım bu soruyu :) Birbirine benzer iki yolu var bunun. Birincisi 48. raster satırında ($30) $d011'i kapatıp (0'a eşitleyip) 1-2 raster satırı kadar bekledikten sonra yine $d011'in 3 numaralı bitini set edecek olursak (örneğin 8 değerine eşitleyecek olursak) karakter ekranı kapandığı halde sprite'lar ve bankın sonundaki adres ($3fff, $7fff, $bfff ya da $ffff) görüntülenebilir. Kısacası FLD tekniğinin yarattığı etkinin aynısı yaratılmış olur. Avantajı ise 200 raster satırlık tüm ekranın DMA'larını 1-2 raster satırı zaman harcayarak yok edilebilmesidir.

İkinci yöntem ise bunu ekranın bitiminde 248. raster satırı civarında yapmaktır. Ancak bu durumda ekstra kazancımız alt ve üst border'ların da açılmasıdır. Bu alanlara da sprite basabiliriz bu yöntemle.

Şimdi 48. raster satırını kullanarak yaptığım bir örneği inceleyelim. Bu örnekte $3fff adresi kullanılarak iç ekranda dikey çubuklar kaydırılıyor. Bunun haricinde 50. raster satırdan ($32) itibaren 254 raster satırı boyunca hiçbir ekstra zaman tablosu içermeyen bir döngüyle raster çekebiliyoruz. ACME ile derlemenizi öneririm.

to "nobadlines.prg",cbm
WAIT
ldy
dey
bne
.Vv 1
#.v
*-—1
*
$0801
!byte $0c,
!byte $9e,
!byte $31,
$08,
532;
$00,
$00,
$30,
$00,
$00
$36
$00
*
lda
sta
sei
$080d
#$01
Start:
lda
cmp
bne
lda #$00
sta
*WAIT 24
lda #$0b
sta $d0l1
lda #$31
cmp $d012
bne *-3
lda #$1b
sta
*WAIT 8
bit $ea
ldx #$00
#$30
$d012
*-3
loopl1:
txa
sta $d020
sta $d021
*WAIT 9
inx
Ccpx
bne
asl
bne
inc
İmp
#254
loopl
start
$3fff
start

İpuçları

Commodore sabit renk adresleri nelerdir?

$0286: Cursor'un o anda sahip olduğu karakter rengi

$0287: Cursor'un üzerinde bulunduğu arkaplan rengi

$d020: Border rengi

$d021: Arkaplan Rengi 0, $d022: Arkaplan Rengi 1 - Multicolor 0, $d023: Arkaplan Rengi 2 - Multicolor 1, $d024: Arkaplan Rengi 3, $d025: Sprite Multicolor 0, $d026: Sprite Multicolor 1, $d027-$d02e: Sprite Renkleri

$d800-$dbe7: Ekran Renk Belleği

PHP Problemleri

Şekil 2.

Web server'ım PHP çalıştırırken arada bir CGI error veriyor ancak refresh edince geçiyor. Problem ne olabilir?

Öncelikle PHP versiyonu eski olabilir. Ancak versiyon güncellendiği halde problem devam ediyorsa, sorun server'ınızın çok hızlı olmasıdır. Bu ne tür bir soruna yer açıyor? PHP henüz çıktıyı web server'a veremeden web server sayfayı görüntülemeyi deniyor. Bu konuda gidebileceğiniz en güzel çözüm Windows'un "Performans Ayarları"ndan optimizasyonu "Arkaplan Hizmetleri"nden "Uygulamalar"a çevirmektir. Bu seçeneğin yerine gelince;

1. Windows 2000 TR: Denetim Masası -> Sistem -> Gelişmiş -

> Performans Ayarları

2. Windows 2000 EN: Control Panel -> System -> Advanced - > Performance Options 3. Windows XP/2003 TR: Denetim Masası -> Sistem -> Gelişmiş -> Performans -> Ayarlar -> Gelişmiş -> İşlemci Zamanlaması

4. Windows XP/2003 EN: Control Panel -> System -> Advanced -> Performance -> Options -> Advanced -> Processor Scheduling

Bu çoğunlukla problemi çözer ancak problemi çözmek için server'ın arkaplan hizmetlerine tanınan ve büyük olasılıkla da tanınması gereken önceliğini kaldırarak performansını düşürmüş oluyoruz. Bu da işin negatif tarafı.

Web Server'ıma "localhost" yazarak bağlanamıyorum ancak "127.0.0.1" ile bağlanabiliyorum. Problem ne olabilir?

Sistemin C'ye kurulu olduğunu varsayacak olursak "C:\Windows\system32\drivers\etc" klasöründe yer alan "hosts" dosyasına bakın. Eğer "127.0.0.1 localhost" şeklinde bir satır göremiyorsanız bu satırı ekleyin.

php.ini'de değişiklik yapıyorum ancak bu değişiklikler algılanmıyor. Sebebi ne olabilir?

Eğer PHP'yi CGI modülüyle (php.exe) kurduysanız problem büyük olasılıkla yanlış ini dosyasını editliyor olmanızdan kaynaklanıyordur. Zaman zaman harddisk üzerinde farklı yerlerde php.ini dosyalarının kopyalarıyla karşılaşabilirsiniz. php.exe önce kendi klasörüne, daha sonra Windows klasörünün altına bakar ini dosyası için. Normalde php.ini'nin Windows klasörünün altında olması tavsiye edilir.

2. PHP dosyalarının içerisinde ini set gibi yaptığınız ayarları değiştiren bir komut kullanılmış olabilir. Bu durumda yaptığınız değişiklikler algılanmayabilir. 3. Bir diğer ihtimal ise PHP'nin ISAPI (php4ts.dll) olarak kurulmuş olmasıdır. CGI ile ISAPI kurulumun arasındaki en temel farklılık CGI'ın her PHP dosyası tetiklendiğinde php.exe'yi yeniden tetiklemesi ve php.exe'nin her defasında php.ini'yi baştan okumasıdır. ISAPI'de ise php4ts.dll web server'a bir plug-in mantığıyla eklenir ve web server çalıştırıldığında bir kereye mahsus php.ini'yi okur ve hafızada kalır. Dolayısıyla php.ini'de yapılan değişikliklerin aktive edilmesi için web server'ı durdurup yeniden başlatmak gerekir.

PHP'de CGI Timeout problemi yaşıyorum. Nasıl çözebilirim?

Bu problemin yine birden fazla kaynağı var. İlk olarak php.ini'de yer alan "max execution time" ve "max input time" parametrelerini kontrol etmenizi tavsiye ederim. Varsayılan değerleri;

max execution time 30 max input time 60 şeklindedir. Bunların her ikisini de sıfıra eşitlemek ilk aşamada sorunumuzu çözecektir.

max execution time 0

max input time 0

İpuçları

Ancak ne var ki bunları sıfıra eşitlediğimiz halde 15 dk gibi bir süre sonunda yeniden CGI Timeout ile karşılaşılabilir. Bu durumda gidilebilecek en kesin çözüm PHP'nin kurulumunu CGI'dan çevirmektir.

En son olarak IIS üzerinde de bir "Connection Timeout" ayarı vardır. Varsayılan değeri 900 saniyedir (15 dk). Bu süreyi uzatmak da bir çözüm olabilir. Ancak bu süre uzadığı halde PHP'nin CGI kurulumunda 15 dk'da timeout'a düşebilirsiniz.

emir (at) akaydin (nokta) com