ADV PINBALL
Advanced Pinball, Codemasters'ın son ürünlerinden biri. Bir tilt oyunu olan Adv. Pinball'da konu bu sefer biraz daha ilginçleştirilmiş ve amaç sadece skorla kalmamış. Aynı zamanda ortada yok edilmesi gereken bir de şato var. Oyun 3 kişiye kadar oynanabiliyor. Bunun için menüdeki seçenekleri istediğinize göre ayarlamalısınız. Kontroller ise keyboard'dan (ne yazık ki joystick değil) sağlanıyor. Shift tuşları topa vuran ayakları kontrolünüze, Space Bar ise topu oyuna sokmanıza yarıyor.
Top oyuna ilk sokulduğunda genellikle üstteki 5 haneli “Magic” yazılı yerden geçiyor. Buradan geçen top bir harfi siliyor, tüm harfler silinince, ortaya bir kitap çıkıyor ve boşluklar bir çizgi ile doluyor. Bu çizgiler de topla yok edildikten sonra kitap açılıyor ve ekranın solunda bir şişe çıkıyor. Bu şişe ise biraz sonra fokurdamaya başlıyor. Öte yandan iki solda ve iki sağda olmak üzere toplam dört ayak var. Üstteki ayakların hemen altlarında ise topu alt ayaklara gönderen yollar var. Eğer top sol üstteki “L” ve “R” yazılı boşluklardan geçerse bu yollarda birer delik açılıyor ve böylece top dışarı kaçıyor. Bu arada her 10000 puanda bir extra hak kazanıyorsunuz. Ekranın ortasındaki şato ise her iki yanındaki nesnelere topu çarptırarak çökertebiliniyor. Topu sol üste atmak için, topun sağ alttaki ayağın en ucuna gelmesini beklemeli ve topa vurmalısınız. Her yanışın ardından eldeki top sayısını ekranın sağ üstünde görebilirsiniz. Şimdiye kadar çıkmış en iyi tilt. HAKAN TİRALİ
TAŞIMACILIKTA YÜKSEK TEKNOLOJİ Günümüz taşımacılık teknolojisi için ideal bir örnek; 1984 yılında Batı Almanya'da, Dortmund'da kurulan tam otomatik ve bilgisayarla yönetilen taşıma mesafesi 2 km. daha uzatıldı. İki üniversite kompleksini birbirine bağlayan araç, zeminle bağlantısı olmadığı ve trafik akışının dışında seyrettiği için büyük zaman tasarrufu sağlamaktadır. Siemens ve Düwag tarafından geliştirilen araç, kurulduğundan bugüne yaklaşık üç milyon kişiyi taşımıştır.
Spor oyunlarından hoşlananlar haydi ekran başına: International Team Sports Microprose'un son yıllarda yaptığı en güzel oyunlardan biri. 5 spor dalından oluşuyor. Bunlar sutopu, futbol, voleybol, yüzme ve koşu. Oyun isminden de anlaşılacağı gibi uluslararası takım oyunları. Oyun 1 veya 2 kişilik oynanabilen zevkli bir oyundur. Oyunu yüklediğinizde karşınıza 6 seçenek geliyor. NEXT MATCHUPS: Bunu seçerseniz karşınıza 3 seçenek çıkar. Bunlardan ile sonraki takımları ve takımların ne zaman oynayacaklarını görebilirsiniz. "This Game Next" seçeneği ile takımın daha sonra oynamasını sağlayabilirsiniz. "Exit" ile de menüye dönebilirsiniz. PREVIOUS SCORES: Bunu seçerseniz karşınıza iki seçenek çıkar. "Next Team" ile oynanacak maçları, "Exit" ile de menüye geri dönebilirsiniz. CURRENT STANDINGS: Bunu seçerseniz karşınıza 3 seçenek çıkar. "Change" seçeneği ile oyuncuların bulunduğu konumu değiştirebilirsiniz. "Next" ile öbür takımları ve "Exit" ile buradan çıkabilirsiniz. PLAY GAME: Burada karşınıza 3 seçenek çıkar. "Selected game" seçeneği ile isterseniz tek oyun üzerinde alıştırma yapabilir veya bütün sporları sırayla oynayabilirsiniz. Ayrıca elemeli maçlar oynayabilirsiniz. EXIT: Bu seçeneği seçince bütün sporları resimle gösteren menüye gelirsiniz. "View medal" ile de sporlara göre alınan madalyaları, devletlere göre madalyaları ve yıllara göre alınan madalyaları görebilirsiniz. "Restart Game" ile de oyundaki bütün değerleri sıfırlar ve oyunu
İngilizce, Fransızca
TEAM SPORTS
na yeniden oyunu ilk yüklediğinizde “Exit”'le çıkıp “Restart Game” komutunu seçerseniz oyunu 1 veya 2 kişilik yapabilir ve takıma sporcuları seçebilirsiniz. Yalnız bir adam 4 ayrı spor da oynayamaz.)
Hepinize başarılar. — 4 MERİÇ GÖKTEKİN
ÖMRÜ
INCREMENT, DECREMENT VE TRANSFER (Arttırma, Azaltma ve Transfer)
3 tane registere sahip olma bazen güçlükler çıkarır. Registerin birini diğerine transferle bu güçlüğü yenebiliriz. Mesela A registerinde kaybetmek istemediğimiz bir değer var ve aynı zamanda A registerini başka maksatla kullanmak istiyoruz, bunun değerini X registerine transfer edebiliriz. Bunu TAX komutunu kullanarak yaparız ki, A'yı X'e transfer et anlamına gelir. A registerindeki değer kullanıldıktan sonra X registerindeki değeri eski yerine, A registerine geri transfer edebiliriz. Bunu TXA (X'ten A'ya transfer) komutuyla yapabiliriz. Bu örnekte A registeri kullanılıyor ve en sonunda başlangıçtaki değerini alıyor: C000 TAX LDA C003 STA $D020 C006 TXA C007 RTS C000: A registerindeki değeri X registerine transfer et. C001: A registerine 00 koy (sil, sıfırla) C003: A registerini $D020 bölgesine yükle (bordür rengi siyah olacak) C006: A'nın orijinal değerini A registerine geri yükle. Keza Y registeride TYA (Y'den A'ya transfer) ve TAY (A'yı Y'ye transfer) şeklinde kullanılabilirdi.
INX VE INY INX, X registerini arttır demektir. X registerine 01 ilave et demektir. INY, Y registerini arttır demektir. Y registerine 01 ilave et anlamına gelir. İşte her biri için birer örnek: C000 LDX #$01 C002 INX C003 RTS
CO00 LDY #$ 08
C002 INY
RTS
Birinci örnekte X registeri 01'den 02'ye değeri artar.
İkinci örnekte Y registerinin değeri 08'den 09'a artar.
INCREMENT Hafızada, registerler gibi arttırılabilirler. Bunun için INC (Increment memory) komutu kullanılır.
ZERO PAGE ADDRESSING "INC $45" Zero Page için bir örnektir. Aşağıdaki programda FB bölgesi 04'e eşittir ve değeri 05'e artar. C000 LDA #$04 C002 STA $FB C004 INC $FB C006 RTS Bunun çalışıp çalışmadığını öğrenmek için ana menüdeki 4 nolu seçeneği kullanın.
Dr. Ali Özçelik
ZERO PAGE INDEXED Bu şekil adresleme için INC komutu X registerini index olarak kullanır. Örnek olarak 'INC $97,X' verebiliriz ki, bu komut 97+X bölgesini arttırır. Aşağıdaki program 9A bölgesindeki 44 değerini 45'e arttırır: C000 LDA #$44 C002 STA $9A C004 LDX #$03 INC $97,X C008 RTS Yine ana menünün 4.cü seçeneğiyle bu programı da kontrol edebilirsin.
ABSOLUTE ADDRESSING Bu komut ile hafızadaki her bölgeyi arttırabilirsin. Bu program her çalıştırıldığında (execute) bordür rengi de değişecek, çünkü $D020 bölgesi bordür rengini ihtiva eder. C000 INC $D020 RTS
ABSOLUTE INDEXED ADDRESSING Yine X registeri index olarak kullanılır. Aşağıdaki program komutun özelliklerini gösterecek: LDA #$FF C002 STA $07F8 C005 INC $07F8 RTS Eğer ana menüdeki 4.cü seçeneği kullanırsan, arttırmanın sonunda 00 göreceksin. Bu önemli noktayı hatırlayın. Hafızanın herhangi bir bölgesi veya registeri FF değerine sahipse, arttırıldıktan sonra 00 değerine sahiptir.
DEX VE DEY DEX, X registerinden bir eksilt (01) çıkar demektir.
DEY, Y registerinden bir eksilt (01) çıkar
İşte her birine birer örnek: C000 LDX #$E4 C002 DEX RTS
Co00 LDY # $ 09
Co02 DEY
Cco03 RTS
ZERO PAGE Şimdi bir sonraki komuta geçiyoruz, DEC hafızayı eksilt (decrement memory) anlamına gelir. LDA #$45 STA $FB C004 DEC $FB RTS Bu program çalıştırıldığında (execute), FB bölgesine 45 yükler ve sonra azaltarak 44'e indirir.
ZERO PAGE INDEXED Bu komut için X registeri bir index gibi kullanılır. Sanırım BASIC ROM bazı değerleri Zero Page yöntemi ile saklar. Bu nedenle Zero Page kullanırken hangi bölgeyi değiştirdiğine dikkat etmelisin. Commodore 64 Reference Guide kitabı bu konuda faydalı bilgiler vermektedir.
Şimdi Zero Page Indexed INC için bir örnek: C000 LDA #$FF C002 STA $CC C004 LDX #$0C C006 INC $C0,X C008 RTS Bu programı çalıştırdıktan (execute) sonra cursor'un yanıp sönmesi lazım. CC bölgesini değiştirdik, ki bu bölgede cursor enable depolanmıştır.
ABSOLUTE ADDRESSING Aşağıdaki programda olduğu gibi, bu şekilde hafızanın herhangi bir bölgesini azaltabilirsin: C000 DEC $0286 C003 Programı her çalıştırışında (execute) cursor rengi değişecektir. Çünkü 0286 bölgesi cursor rengini ihtiva eder.
ABSOLUTE INDEXED ADDRESSING Bu şekilde X registeri bir index gibi kullanılır: LDA #$00 C002 STA $03FD LDX #$1D DEC $03E0,X C00A RTS
Bu programı RUN ettiğin zaman ana menüdeki 4.cü seçeneği kullanarak 03FD bölgesindeki değeri kontrol et. FF olması lazım. Çünkü 00 değerinden 01 çıkardık. Buradan anlaşıldığı gibi 00 değerinden 01 çıkarıldığı zaman FF kalır.
64'ler Bu, bu kısımdaki en son komut idi, şimdi test zamanı! Şimdiye kadar gördüğünüz gibi A registeri, ne ilave ne de çıkarma komutuna sahip. Problem: A registerini 55 ile yükle ve çıkartarak 54 elde et. (KOPYA! Transfer). Bunun için iki iyi cevap var. Çalıştırmadan önce incele. C000 LDA #$55 TAY DEY C004 TYA RTS
“ VEYA
Co00 LDA # $ 55
C002 TAX
DEX
TXA
Ccoo5 RTS
Bu programı yapabildiysen bir sonraki bölüme
geçebilirsin. Yoksa bu bölümü tekrar etmeni tavsiye
ederim.
(Atlama) Bunu okumadan önce BASIC'teki GOTO ve GOSUB komutlarına aşina olman gerekiyor. Bunları User Guide kitabından bulabilirsin.
JMP Bu komut GOTO komutuna çok benzer. Eğer yeni bir adrese atlamak istiyorsan bu komutu kullanabilirsin. Örnek olarak B000 adresine atlamak istiyorsan JMP $B000 komutu yazmalısın. İşte örnek program: C000 JMP $C006 LDA #$00 RTS C006 LDA #$FF RTS
C000: C006 bölgesine atla C003: A registerini 00 ile yükle, hiçbir zaman çalıştırılamaz (execute), çünkü atladık. C005: Bu kompüteri BASIC'e döndürecekti fakat o da atlandı. C006: Burası kompüteri atladığı yer. Bu A registerini FF ile yükler. C008: BASIC'e dönülür.
INDIRECT ADDRESSING JMP komutu indirect (dolaylı) adreslemeyi destekler. JMP ($XXXX) şeklinde yazılır, XXXX 4 haneli hex sayıdır.
SYS Bu komut ile daha önce karşılaşmışsınızdır. Assembly dili komutu değil BASIC komutudur. Bu komut makina koduna gidecek ve RTS komutu ile karşılaşınca BASIC'e dönecektir. Örnek olarak hex sayısı desimaldeki 49152 ile aynıdır. Şimdiye kadar yazdığımız bütün programları RUN etmek için 49152 yazabilirsiniz. SYS komutu Assembly dili rutinini yazdıktan sonra kullanılır ve artık Assembler'e ihtiyaç kalmaz.
JSR VE STACK (YIĞIN) Her assembly dili programını çalşıtırdığınız (execute) zaman, assambler size registerlerin değerini yazdı, SP reğisteri dahil. Şimdi SP registerinin ne olduğunu öğreneceğiz. SP yığın göstergecinin (Stack Pointer) baş harflerinden oluşur. Stack dönüş adresinin konduğu yerdir. Kompüter dallanmaya (GOSUB) gittiğinde, RETURN'den sonra dönmesi gereken yer Stack üzerinde depolanır. İşte dikkat edilecek ana noktalar: — Kompüter Stack üzerine adres saklar (depolar) — Kompüter dönüş (Return) komutuyla karşılaşır. — Kompüter Stack'tan adresi geri alır. — Kompüter o adrese döner.
Assembly dilinde GOSUB'un eşdeğeri JSR dir, Jump to Sub-Routine nin kısaltılmasından oluşur. RETURN nün eş değeri RTS dir, Return to Subroutine'nin kısaltılmasından oluşmuştur. Stack, GOSUB ve REFURN de olduğu gibi JSR ve RTS ye de aynı şekilde hareket eder.
Gerçek stack hafızanın (memory) 255 byte'tıdır ve 0100 den O1FF e kadar uzanır. Stack Pointer (SP), stack'taki bir sonraki boş byte'ı gösterir. Stack pointer FF ile başlar ki 01FF bölgesini gösterir, BASIC birkaç byte kullanır ve Stack pointer (SP) O1EF bölgesini gösterir.
Her defasında JSR veya SYS komutu kullandığınızda kompüter, dönüş adrısinin LOW byte'ını Stack'ta saklar ve Stack Pointer'i (SP) Oi eksiltir. HI byte da Stack'ta depolandıktan sonra Stack Pointer (SP) bir kere da eksilir.
RTS komutunu kullandığınızda, kompüter Stack'taki HI byte'i alır ve Stack pointer'i arttırır. Sonra Stack'taki LOW byte'ı alır ve Stack Pointer'i tekrar arttırır. Bundan sonra kompüter LOW ve HI byte'ları yanyana koyarak dönüş (return) adresini oluşturur. Adres oluştuktan sonra kompüter bu adrese döner.
BASIC'in kullandığı dallanmalara atlıyarak (jumping to subroutine) karakter print etme, cursor'u hareket ettirme gibi işlemler yaptırabiliriz. Karakter print etmek için A registerini, karakterin ASCII kodu ile yükleriz ve JSR $ FFD2: Co00 LDA #$ 41 C0O02 JSR $ FFD2 Ccoo5 RTS
Bu program A karakterini print eder, çünki A registeri A'nın ASCII değeri ile rutin çağrılmadan yüklenmiştir. Diğer karakterleri print etmek için
User's Manual daki 135-137 sayfalardaki ASCII karakterlerine bak.
Bundan sonraki rutin cursor'un X ve Y koordinatlarını hazırlar. Önce X registeri X koordinatıyla, sonra Y registeri Y koordinatıyla yüklenir. Şimdi CLC (bu komut bir sonraki bölüm de anlatılacaktır), sonra JSR $ FFFO: Cco00 LDX # $ 00 C002 LDY #$ 05
CO04 CLC
CO0O5 JSR $ FFFO
Cco08 RTS
Açıkça görüldüğü gibi cursor ekranın sol üst köşesine ayarlandı. Bir önceki rutinle beraber birleştirerek ekranın herhangi bir yerine istediğin karakteri yazabilirsin.
Bu bölümün sonu, işte çözülmek üzere başka bir
program:
Ekranı silip cursor'u 01, 01 e ayarlıyabilirmisin?
Co00 LDA # $ 93
C002 JSR $ FFD2
LDX # $ Oi
COO7 LDY #$ 01
Cco09 CLC
COOA JSR $ FFFO
CoOOD RTS
Üstteki program clear home print eder (ASCII 93 “hex. veya 147 dec.) ve cursor'u Oi, O1 e ayarlar.
Programınızı çalışmadıysa veya yukarıdakileri anlamadıysanız üzülmeyiniz. Bu bölümü tekrar okumanızı tavsiye ederim.
PROCESSOR'UN STATUS REGİSTERİ Processor'ün status (durum) reegisteri'i (P register) bize kompüterin durumunu (state) belirtir. Bir sonraki bölümde status'un nasıl test edileceğini araştıracağız. Bu bölümde P registerinin ne olduğunu göstereceğim.
Bildiğiniz gibi bir byte içinde 8 tane bit var ve bunlar 0 veya 1 olabilir. P registeri her biti flag (bayrak) olarak kullanır. Her bit kompüterin status'una göre "set" veya "reset" olarak ifade edilir. Her bit'in ne işlem yaptığına bakalım: Bit 7: Bu negatif flag olarak adlandırılır. İşlemin sonucu 80 ile FF arasında ise 1 (set) dir. Örnek olarak, LDA #$C7 bu bit'i set (1) durumuna getirir. İşlem sonucu 00 ile 7F arasında ise bu bit reset (0) dır. Bit 6: Buna taşma flag'ı (overflow) adı verilir. Artış 7F'nin üzerine çıkarsa veya azalma 80'in altına inerse set (1), diğer durumlarda reset (0) dır. Bit 5: Bu bit hiçbir şey değildir, kullanılmaz. Bit 4: BRK (force break) dır ve sonra bahsedilecek.
Bit 3: Bu bit desimal flag olarak bilinir. Bu da daha sonra
anlatılacak. |
Bit 2: Bu IRO disable olarak adlandırılır, daha sonra BRK flag ile anlatılacaktır. Bit 1: Bu bit Zero flag'tır. İşlem sonucu 00 ise set (1), diğer durumlarda reset (0) dır. Bit 0: Bu Carry flag olarak anılır. Bir sonraki bölümde daha detaylı öğreneceksiniz.
FLAG'LARI SET VE CLEAR ETME Bazı flaglar set (1) ve reset (0) edilmek için komutlara sahiptir. CLC: CLear the Carry flag (sonunda flag 0 olacak) ,
SEC: SEt the Carry flag (sonunda flag 1 olacak) CLD: CLear the Decimal flag (sonunda 0 olacak)
SED: SEt the Decimal flag (sonunda flag 1 olacak) CLI: CLear the IRQ flag (sonunda flag 0 olacak) SEI: SEt the IRQ flag (sonunda flag 1 olacak) CLV: CLear the Overflow flag (sonunda flag 0 olacak) AYLIK OYUN AÇIKLAMALARI DERGİSİ
Atari er 'den
AYLIK OYUN AÇIKLAMALARI DERGİSİ Amstrad