Gönderen Konu: kurs sonrasi ornekler  (Okunma sayısı 13787 defa)

kurs sonrasi ornekler

« : 06.01.2007 21:10:51 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Mesela aklima soyle bir ornek geldi. Ekranda bi$iler gorme acIsIndan.
Ekranda en kolay oynatabilecegimiz obje sprite olduguna gore...
Bir sprite logomuz var. Diyelim ki bu logo sprite0. (ufak bi logo) :)
Onu ekranda gorulen bi yere koyduk. Ornegin (x=$24,y=$32) ye..
logo ekranda x koor.da $ff 'e kadar gidiyor ve $ff'e geldiginde tekrar $24'e kadar geri kayIyor.
 
Normal ko$ullarda bunu yaptIgImIzda yumu$ak bir kayma sagLamamIz cok zor. (Ornek oLarak a$agIya yazdIgIm code...) Bunu en basit $ekiLde irq ya bagLayarak yumu$ak $ekiLde nasIL kaydIrabiliriz? Mademki irq kuLLanIyoruz oraya buraya da daLLanaLIm mesela space'e basInca da basic'e doneLim... Yada ekranIn alt tarafLarInda biyerLerde aynI anda sprite1'de sprite0'dan ters yone hareket etsin?
 
Bana gore bu oLay en sade $ekiLde anLatILdIgI zaman nightlord'un dedigi gibi nightshift'te fazLadan 2-3 intro gormek mumkun oLabiLir. Verilecek bu ornegin mantIgInI kapan cogu $eyi de yapabiLir diye du$unuyorum.
 
Zaman ayIrIp ornek verebiLecek arkada$Lara simdiden te$ekkurLer...
Bu arada ornegin daha anLa$ILabilir oLmasI bakImIndan $d010 'u katmadIm. Bu ornegi fazla karma$tIrmayacagInI du$unuyorsanIz onuda aradan cIkarmI$ oluruz :)
 
Mesela...
 
*=$1000
 
jsr$e544
 
basla: lda#$01
sta$d015
ldx#$24
stx$d000
ldy#$32
sty$d001
 
art: lda$d000
tax
art1: inx
ldy#$00
beklet: iny
(10 adet nop)
cpy#$ff
bne beklet
stx$d000
cpx#$ff
bne art1
lda$d000
tax
azal : dex
stx$d000
ldy#$00
azal1: iny
(10 adet nop)
cpy#$ff
bne azal1
cpx#$24
bne azal
stx$d000
rts
« Son Düzenleme: 06.01.2007 21:15:49 Gönderen: stranger »

kurs sonrasi ornekler

« Yanıtla #1 : 06.01.2007 21:29:49 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
stranger opuyorum :)
bitti mi demo, geleyim mi izlemeye? kartus bulmussundur artik di mi?

kurs sonrasi ornekler

« Yanıtla #2 : 06.01.2007 21:38:19 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
valla $u soyLedigim ornegi vereni bende opucem :) Cunku kafamdaki bi cok soru i$aretini kaLdIrmI$ oLucam.
Bu arada... Final3 var bi tane. Nobody'den aLIcam. 1084SD1 buldum, kaptIm hemen. Ceyizi duzuyorum. :) Ne varsa 64'te var yine. Zaten TTT-2'de cIkMadI :(     :)

kurs sonrasi ornekler

« Yanıtla #3 : 06.01.2007 22:05:44 »
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/
Hızlıca şöyle bir örnek yaptım kardeşim. Elimden geldiğince kernal rutinleri kullanmaktan kaçındım ki nightlord'un henüz açıklamadığı konular kafanızda soruişareti yaratmasın. Aşağıdaki örneği ACME'de derleyip SYS 4096 ile çalıştırabilirsiniz. Interrupt ile bir sprite sürekli yana kaydırılıyor ve space ile basic'e geri dönebiliyorsunuz.
 
Kod: [Seç]
!to "example.prg",cbm
 *=$1000
 ; Sprite Bas
 lda #$01
 sta $d015
 lda #$c0 ; $c0*$40 = $3000 adresindeki spriteı göster
 sta $07f8
 lda #$98
 sta $d000 ; spriteın x koordinatı
 lda #$72
 sta $d001 ; spriteın y koordinatı
 ; Interruptı Hazırla
 sei
 lda #$7f
 sta $dc0d
 lda #$01
 sta $d01a
 lda #$1b
 sta $d011
 lda #$00
 sta $d012
 lda #<int
 sta $0314
 lda #>int
 sta $0315
 cli
 ; Space kontrolü
space lda $dc01
 cmp #$ef
 bne space
 ; Spriteları kapa
 lda #$00
 sta $d015
 ; Basic'e dön
 sei
 lda #$81
 sta $dc0d
 lda #$f0
 sta $d01a
 lda #$31
 sta $0314
 lda #$ea
 sta $0315
 cli
 rts
 ; Interrupt Rutini
int inc $d000 ; Sprite'ın X koordinatını 1 arttır
 lda $d000 ; Eğer sprite 255'i geçmediyse
 bne out  ; interruptın çıkışına git
 lda $d010 ; Sprite 255'i geçtiyse
 eor #$01 ; 9.bitini değiştir
 sta $d010 ; 0 ise 1 yap, 1 ise 0 yap
out inc $d019
 jmp $ea81
 *=$3000
 !fill 63,255 ; Sprite haritasını 255 ile doldur

kurs sonrasi ornekler

« Yanıtla #4 : 06.01.2007 22:08:02 »
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/
Forum kodun formatını azcık bozduğu için source code'u ve compile edilmiş prg dosyasını zip olarak ekliyorum buraya.

kurs sonrasi ornekler

« Yanıtla #5 : 06.01.2007 22:19:43 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@skate: What a rush! :) cok HIzLIsIn karde$im. eline sagLIk. Hemen inceLiyorum.

kurs sonrasi ornekler

« Yanıtla #6 : 07.01.2007 00:20:59 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Selamlar. ben de irq rutinine strangerin yaptigi gibi saga sola gitme ornegi vereyim. irq hazirlama bolumleri aynen daha onceki orneklerde oldugu gibi. space icin de skatein ornegine bakabilirsiniz. bu yuzden sadece irq rutini veriyorum
 
Kod: [Seç]
irq_rutini:
    inc $d019
    jsr sprite_pozisyonunu_guncelle
    jmp $ea81
 
sprite_pozisyonunu_guncelle:
    lda hareket_yonu
    cmp #SAGA_HAREKET
    beq saga_kaydir
    jmp sola_kaydir
 
saga_kaydir:
    ldx $d000
    inx
    beq sola_don
    stx $d000
    jmp irq_rutini_sonu
 
sola_don:
    lda #SOLA_HAREKET
    sta hareket_yonu
    lda #$fe
    sta $d000
    jmp irq_rutini_sonu
 
sola_kaydir:
    ldx $d000
    dex
    beq saga_don
    stx $d000
    jmp irq_rutini_sonu
 
saga_don:
    lda #SAGA_HAREKET
    sta hareket_yonu
    lda #$00
    sta $d000
    jmp irq_rutini_sonu
 
irq_rutini_sonu:
    rts
 
hareket_yonu:
    !by SAGA_HAREKET
 
SAGA_HAREKET = 1
SOLA_HAREKET = 2

Burada aslinda hayatta sik karsimiza cikan bir tasarim ornegi goruyoruz. "Durum Motorlari"... Bu irq rutinimiz bir durum motoru. Durum motorlarinin "durumlari" ve onlara iletilen "istekler" vardir. Bir durum motoru kendisine gelen istegi alinca "istek" ve bulundugu "durum" a bakarak bir is yapar. Bu yaptigi isin sonucu olarak ayni durumda kalabilir veya "durum degistirme" yasayabilir
 
bu ornekte iki durum var: SAGA_HAREKET ve SOLA_HAREKET.
bir istek var: sprite_pozisyonunu_guncelle
iki durum degisikligi olabiliyor zaman zaman: sola_don ve saga_don
« Son Düzenleme: 07.01.2007 06:50:07 Gönderen: nightlord »

kurs sonrasi ornekler

« Yanıtla #7 : 07.01.2007 00:52:03 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@nightlord: aha! $imdi oLaY tam OLarak cozuldu :)

kurs sonrasi ornekler

« Yanıtla #8 : 07.01.2007 06:51:32 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
saga don alt rutininde, sta hareket_yonunden sonraki satirda mesaji ilk post ettigimde hata olmus. simdi duzelttim, haberiniz olsun.

kurs sonrasi ornekler

« Yanıtla #9 : 07.01.2007 18:34:44 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Skate ve nightlord'un gonderdiklerinin birLe$imi...
Basic'e du$mesek daha iyi gibi geLdi. Code daha sade oLuyor..
 
!to "deneme.prg",cbm
*=$1000
; Sprite Bas
lda #$01
sta $d015
lda #$24
sta $d000 ; spriteın x koordinatı
lda #$72
sta $d001 ; spriteın y koordinatı
 
; Interruptı Hazırla
 
sei
lda #$7f
sta $dc0d
lda #$01
sta $d01a
lda #$1b
sta $d011
lda #$00
sta $d012
lda #sta $0314
lda #>int
sta $0315
cli
rts
int:
inc $d019
jsr sprite_pozisyonunu_guncelle
jmp $ea81
 
sprite_pozisyonunu_guncelle:
lda hareket_yonu
cmp #SAGA_HAREKET
beq saga_kaydir
jmp sola_kaydir
 
saga_kaydir:
ldx $d000
inx
beq sola_don
stx $d000
jmp irq_rutini_sonu
 
sola_don:
lda #SOLA_HAREKET
sta hareket_yonu
lda #$fe
sta $d000
jmp irq_rutini_sonu
 
sola_kaydir:
ldx $d000
dex
beq saga_don
stx $d000
jmp irq_rutini_sonu
 
saga_don:
lda #SAGA_HAREKET
sta hareket_yonu
lda #$00
sta $d000
jmp irq_rutini_sonu
 
irq_rutini_sonu:
rts
 
hareket_yonu:
!by SAGA_HAREKET
 
SAGA_HAREKET = 1
SOLA_HAREKET = 2
« Son Düzenleme: 07.01.2007 18:41:08 Gönderen: stranger »

kurs sonrasi ornekler

« Yanıtla #10 : 07.01.2007 18:38:36 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Benim gibi acme'yi fazLa kuLLanmayanLar icin. Normal dunya'da ki  :) meali nedir $u parcanIn? TASM kullananLar icin?
 
hareket_yonu:
!by SAGA_HAREKET

yani "!BY" ...

kurs sonrasi ornekler

« Yanıtla #11 : 07.01.2007 19:45:58 »
Hızlı düğmeleri aç

anesthetic

İleti: 403

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
    • http://resident.tr-demoscene.info/
çok alakasız olacak ama buna ben cevap vereyim :)

!by SAGA_HAREKET

ile tam oradaki bytea (rts'ten sonraki) 1 koyuyoruz. o byteı "hareket_yonu" olarak labelladık ve yön durumumuzu o byte'ta store ediyoruz.

!by tasm'ca ne olur bilmiyorum ama bi kaç farklı assemblyde şunlar da aynı anlama gelecekti:

hareket_yonu   db   SAGA_HAREKET
hareket_yonu:   .db   SAGA_HAREKET
hareket_yonu:   fcb   SAGA_HAREKET

kurs sonrasi ornekler

« Yanıtla #12 : 07.01.2007 20:05: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/
!by ya da !byte'ın TASM'deki karşılığı F5 ile de yazdırlabilen
 
.byte
 
ifadesidir. Benzer şekilde !tx ya da !text de .text'e karşılık gelir. Ama !text tek alternatif değildir. Ekran karakterlerini daha iyi ifade eden !scr de kullanılabilir. Ne yazık ki ACME'nin adam akıllı bir dökümasyonu yok benim bildiğim. Paketin içinden çıkanla yetinmek zorunda kalıyorsunuz. O da bence yetersiz. Ama deneme yanılmayla öğreniliyor birçok şey kısa sürede.
 
ACME için adam akıllı döküman bilen varsa lütfen yollasın. Benim de işime yarar.

kurs sonrasi ornekler

« Yanıtla #13 : 07.01.2007 20:25:38 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
@skate: byte mI? eheh.. cok ho$ yahu... :) acme'nin kIsaLTmaLarIna baYILdIm...
 
@anesthetic: hocam cozmu$sun oLayI ama yoL biraz uzun oLmu$ anLa$Ilan.. ;)
« Son Düzenleme: 07.01.2007 20:30:03 Gönderen: stranger »

vice monitor problemi.

« Yanıtla #14 : 07.01.2007 21:10:43 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Acme'nin dokuman probleminden soz acILmI$ken bende Vice hakkInda biraz yaKInmak istiyorum.
 
vice'In monitoru tam anLamIyLa caLI$mIyor.
Mesela d, a, g vb. komutlar caLIsIrken Load, save gibi komutLar caLI$MIyor. Bu da Pc uzerinde c64 icin yazILIm geLi$tirmeyi zorLa$tIrIyor :)
Ornegin S "sid",08,1000 2000 gibi bir komutla bir sid aLIp kendi programImIzda denemek istersek bu mumkun oLmuyor. AynI $ekiLde L"sid",08,1000 gibi hayati $eyLeri yapmak mumkun oLmuyor. Yani hafIzanIn istedigimiz yerine istedigimiz materyali koyamIyoruz. Boylece ekranda da gosteremeyip farazi $eyLer uzerinde caLIsIyorsunuz.
(Kare seklinde sprite'lar, Ekranda duzgun gozukmeyen[sadece o hafIza araLIgIndaki byteLarIn oLu$turdugu] logolar vb.)
 
Bu konunun bilinen bir cozumu yok zannedersem. Ancak Acme'de bu belki mumkun olabilir diye dusunuyorum. Relunch64 dosyaLarI hex ve bin oLarak import edebiliyor.
 
Ornegin bir sid dosyasInI a$agIdaki ornek gibi code'un icine import edebiliyoruz. Tabii bu extra bir$ey OLdugu icin kuLLanImIda extra biLgi gerektiriyor. Yeterli dokumanda yoksa ordada sIcabiLiyoruz.
 
 
!byte $50,$53,$49,$44,$00,$02,$00,$7c
!byte $00,$00,$10,$00,$10,$03,$00,$01
!byte $00,$01,$00,$00,$00,$00,$45,$6e
!byte $64,$69,$6e,$67,$00,$00,$00,$00
!byte $00,$00,$00,$00,$00,$00,$00,$00
!byte $00,$00,$00,$00,$00,$00,$00,$00
!byte $00,$00,$00,$00,$00,$00,$4a,$65
!byte $6e,$73,$2d,$43,$68,$72,$69,$73
!byte $74,$69,$61,$6e,$20,$48,$75,$75
!byte $73,$20,$26,$20,$49,$43,$45,$00
!byte $00,$00,$00,$00,$00,$00,$31,$39
!byte $38,$38,$2d,$38,$39,$20,$56,$69
!byte $62,$72,$61,$6e,$74,$73,$00,$00