Gönderen Konu: ipucLarI  (Okunma sayısı 24953 defa)

ipucLarI

« Yanıtla #15 : 21.02.2007 00:24:04 »
Hızlı düğmeleri aç

ghost

İleti: 86

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.bronxwhq.org
haraket tespit eden guvenlik kameralari da ayni yontemi kullanir.

edit: eor icin dediydim.
he moves like a madman as he spins his disc.

ipucLarI

« Yanıtla #16 : 21.02.2007 00:39:12 »
Hızlı düğmeleri aç

hades

İleti: 214

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
ben daha seksi olduğu için  JMP $FEBC  kullanıyorum. $EA81'in aynısı :)

noter 'de space sorunu

« Yanıtla #17 : 14.03.2007 19:02:59 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Ufak bir noter yazIyorum.
Muzik vs de ekleyecegim icin interrupt kuLLanIyorum.
Sorun $u ki sayfaLar space tu$uyLa gecilecek...
Fakat space 'e basar basmaz hIzdan doLaYI 2-3 sayfa birden atLIyor.
HIzdan doLayI oLdugunu nerden biliyorum? Vice'da hIzI %20 ye falan dusurunce normaL caLIsIyor ve tum sayfaLarI gosteriyor.
 
$028b 'i de ke$fettim :) akumulatore #$ff (veya herhangi yuksek bir deger) yukleyince 2.kez tu$ tekrarInI bir sure askIya aLIyor fakat irq den sanIrIm $028b de devre dI$I kaLIyor.
 
Mesela source'a benzer kIsa bir ornek vermek gerekirse soyle bi$ey:
 
($u an ekrana text'leride surekli basIyor fakat sayfa atLama sorununu cozunce tekrar basmayI hallederim herhalde)
 
!to"note.prg",cbm
*=$0801
!byte $0b,$08,$00,$00,$9e,$32,$30,$36,$31,$00,$00,$00
*=$080d
renk=$d800
ekran=$400
lda#$01
sta$0286
lda#$00
sta$d020
sta$d021
lda#$ff
sta$028b
lda#$01
sta sayfa
jsr$e544
sei
lda#$7f
sta$dc0d
lda#$00
sta$dc0e
lda#$01
sta$d01a
lda#$1b
sta$d011
lda#$80
sta$d012
lda#sta$0314
lda#>int
sta$0315
cli
rts
int:
inc$d019
jsr anarutin
 
jmp$ea81
 
 
anarutin:
 
lda sayfa
cmp#$01
beq sayfa1
cmp#$02
beq sayfa2
cmp#$03
beq sayfa3
rts
 
sayfa1:
 
ldx#$00
lda#$00
textloop:
 
lda text+$0,x
sta ekran+$0,x
 
inx
cpx#$ff
bne textloop
 
lda$dc01
cmp#$ef
beq sayfa2
jmp irqson
 
sayfa2:
lda#$02
sta sayfa
ldx#$00
lda#$00
textloop2:
 
lda texta+$0,x
sta ekran+$0,x
 
inx
cpx#$ff
bne textloop2
lda$dc01
cmp#$ef
beq sayfa3
jmp irqson
 
sayfa3:
lda#$03
sta sayfa
ldx#$00
lda#$00
textloop3:
 
lda textb+$0,x
sta ekran+$0,x
 
 
inx
cpx#$ff
bne textloop3
lda$dc01
cmp#$ef
beq sayfa3
jmp irqson
 
 
irqson:
rts
sayfa:
!byte $00
text:
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111111111111111111111111111"
!scr "1111111111111111"
 
texta:
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222222222222222222222222222"
!scr "2222222222222222"
 
textb:
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333333333333333333333333333"
!scr "3333333333333333"
« Son Düzenleme: 14.03.2007 19:44:03 Gönderen: stranger »

ipucLarI

« Yanıtla #18 : 14.03.2007 19:56:01 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
@stranger: Aklıma gelen iki olasi çözüm var. Ama konuyu biraz geniş bir açıdan ele alacağım.
 
şimdi karşılaştığın probleme dikkatlice bakacak olursan aslında kodda hata olmadığını göreceksin. Bu karşılaştığın bir "Spesifikasyon problemi".
 
Yazılım geliştirirken yazdığımız programın ne yapacağını açıklayan bilgi bütününe spesifikasyon (kısaca spek) diyoruz. Çoğu zaman problemler (istatistiksel olarak projelerde çıkan bugların %40 - %60'ı ) spesifikasyon hatalarından kaynaklanıyor.
 
Spesifikasyon her zaman yazılı bir doküman olmak zorunda değil. Fakat birden fazla kişi çalışıyor ise veya yapıma zaman zaman ara veriliyorsa spek'i kağıda dökmek iyi bir fikir olabilir. Spek yazan kişilerin tecrübesi arttıkça bazı spek hatalarını daha kod yazmadan bulabilmeye başlarlar.
 
Spek yazılımın türüne göre farklı haller alabilir. Bir demo için storyboard veya script, bir oyun için game design doc veya bir iş yazılımı için gui tasarımlarını gösteren bir ppt sunumu olabilir.
 
şimdi senin spek'inde bir eksiklik var: Sayfalar arası geçişin nasıl olacağı tam açıklanmamış. "Space tuşuna basınca sonraki sayfaya geçilecek" yeterli bir spek değil. Space tuşuna basılı tutunca ne olacak bunun da cevaplanması lazım. Örneğin;
 
- Space'e basınca yeni sayfaya geçilecek ve Space' basılı tuttukça birşey olmayacak. Ancak kullanıcı Space'ten elini çekip yeniden basarsa bir sonraki sayfaya geçecek.
 
veya;
 
- Space'e basılı tutulduğu müddetçe her saniyede bir kere sonraki sayfaya geçecek.
 
gibi...
 
Dolayısıyla programin nasil davranacagina dair kararini detaylandirman lazim once. Eğer birinci spek'i seçersen o zaman space tuşunun basılmışlık durumunu takip eden küçük bir durum motoru eklemen gerekecek:
 
space_durumunu_takip_et:
 
lda space_durumu
cmp #SPACE_BASILI_DURUMDA
beq space_basili_durumdayken
jmp space_basilmamis_durumdayken
 
space_basili_durumdayken:
 
lda $dc01
cmp #DC01_SPACE_BASILI
bne el_spaceten_kalkti
rts
 
el_spaceten_kalkti:
 
lda #SPACE_BASILI_DURUMDA_DEGIL
sta space_durumu
rts
 
space_basilmamis_durumdayken:
 
lda $dc01
cmp #DC01_SPACE_BASILI
beq el_space_e_basti
rts
 
el_space_e_basti:
lda #SPACE_BASILI_DURUMDA
sta space_durumu
lda #YENI_SAYFA_ISTEGI ;--------------burasi yeni sayfa istegi
sta sayfa_istegi
rts
 
sonra senin kodunda:
inx
cpx#$ff
bne textloop
 
lda$dc01
cmp#$ef
beq sayfa2
jmp irqson
 
bölgesinde şu şekilde yeni sayfa kontrolünü değiştirebiliriz:
 
inx
cpx#$ff
bne textloop
 
;degisen bolum
lda sayfa_istegi
cmp #YENI_SAYFA_ISTEGI
bne irqson
lda #$02
sta sayfa
lda #0
sta sayfa_istegi ;sayfa istegini tekrar sifirliyoruz ki surekli sayfa degismesin
jmp irqson
 
 
Ayrıca interrupt rutininin başında da
 
jsr space_durumunu_takip_et
 
ekliyoruz.
-----------------
 
Eğer ikinci yolu seçersen o zaman sayfa değişikliği yaptığın anda bşr sayaç başlatıp o sayaç istediğin değere gelene kadar space kontrolünü kaldırabilirsin. Bu iki tane sayfa değişikliği arasına minimum bir süre katmaya yarar. Örnek kod vermiyorum... Sana bırakıyorum:)
 
sevgiler
« Son Düzenleme: 14.03.2007 19:59:03 Gönderen: nightlord »

ipucLarI

« Yanıtla #19 : 14.03.2007 20:14:21 »
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/
Ben de hızlı bir örnek hazırlamıştım, gerçi nightlord güzel bir cevap atmış bu arada. Counter kullanan örnek olarak al kardeşim. Bu arada sayfaların başlangıçları için de pointer kullandım. Biraz incelersen anlayacağından eminim. Anlayamadığın yer olursa sorman yeterli.
 
Kod: [Seç]
!to"note.prg",cbm
*=$0801
!byte $0b,$08,$00,$00,$9e,$32,$30,$36,$31,$00,$00,$00
*=$080d
renk=$d800
ekran=$400
lda#$01
sta$0286
lda#$00
sta$d020
sta$d021
lda#$ff
sta$028b
lda #$00
sta sayfa
jsr $e544
ldx sayfa
jsr sayfabas
sei
lda#$7f
sta$dc0d
lda#$00
sta$dc0e
lda#$01
sta$d01a
lda#$1b
sta$d011
lda#$80
sta$d012
lda#<int
sta$0314
lda#>int
sta$0315
cli
jmp *
int:
inc$d019
jsr anarutin
jmp$ea81

anarutin:
lda counter
beq passinccnt
dec counter
jmp irqson
passinccnt:
lda $dc01
cmp #$ef
bne irqson
lda counter
bne irqson
lda #15
sta counter
ldx sayfa
jsr sayfabas
irqson:
rts
sayfabas:
lda textpl,x
sta textloop+1
lda textph,x
sta textloop+2
ldx #$00
textloop:
lda $0000,x
sta ekran+$0,x
inx
cpx#$ff
bne textloop
inc sayfa
lda sayfa
cmp #3
bne sbout
lda #0
sta sayfa
sbout:
rts
textpl !byte <text,<texta,<textb
textph !byte >text,>texta,>textb
sayfa:
!byte $00
counter:
!byte $00
text:
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111111111111111111111111111&quot;
!scr &quot;1111111111111111&quot;
texta:
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222222222222222222222222222&quot;
!scr &quot;2222222222222222&quot;
textb:
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333333333333333333333333333&quot;
!scr &quot;3333333333333333&quot;

ipucLarI

« Yanıtla #20 : 15.03.2007 11:44:40 »
Hızlı düğmeleri aç

endo

İleti: 687

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.moldibi.com
Programin basinda tum ayarlari yapip bitirdikten sonra

CLI
RTS

yerine

CLI
JMP *

kullanman daha iyi olur. Yoksa ekranin bi yerlerinde READY. yazisi belirebilir.
Ayrica soyle bir yol da izleyebilirsin.

Initalizasyonlari yap (Interruptlari ayarla, ekran rengi vs.)
CLI ile interruptlari ac
Space tusu ve ekrana yeni sayfa gelmesi olayini donguye sok.
Interrupt icinde de sadece muzik cal ve varsa raster-bar felan cizdir.

Boylece interrupti sadece muzik vs icin kullanirken interrupt disinda da tus kontrolu ve ekran cizimini yaparsin. Tus kontrolunu de asagidaki gibi yapabilirsin bu durumda:

;space kontrolu
lda #$ef
cmp $dc01
bne *-3        ;space'i bekle
cmp $dc01
beq *-3        ;basili oldugu surece bekle
;sonraki sayfa

Eger bu isi interruprt icinde yaparsan space'e basili tutuldugu surece muzik vs. hersey durur. Biraz ekstra ugras gerektirir interrupti kitlemeden bekletmek icin (space tus durumunu bi yerlere yazip son durumu kontrol etmek gibi.)
- endo of glance -

ipucLarI

« Yanıtla #21 : 15.03.2007 11:48:45 »
Hızlı düğmeleri aç

endo

İleti: 687

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.moldibi.com
ya bi de 64 ile ilgili boyle guzel soru felan gelince uzun guzel cevaplar yazilmasi cok hos :) elinize saglik nightlord & skate. ve tabii stranger ;)
- endo of glance -

ipucLarI

« Yanıtla #22 : 15.03.2007 17:57:24 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
nightlord,skate ve endo 1 cozum ararken 3 ayrI cozum yoLu gormu$ oldum. cok te$ekkurler. AsLInda bayagI ugra$tIm bu oLayI cozmek icin fakat yemedi maalesef :) simdi hepsini ayrI ayrI uygulayacagIm.
 
AsLInda nerdeyse elle tutulacak birkac $ey  yapmaya ba$LadIm fakat boyle ufak gozuken bir sorunu cozemeyince cinnet gecirip foruma post attIm :) cevaplarIn hepsi icin sagolun.(bu soru kac cycle yedi bilmiyorum ) UmarIm cok fazla zamanInIzı yememi$tir. ,)
 
endo jmp* 'I soyledigin cok iyi oldu. Bende $d80x ile ready'i arkaplan rengine cevirip ulan nasIL kurtulcaz bu meretten diye cILdIrIyordum :)

ipucLarI

« Yanıtla #23 : 15.03.2007 18:03:27 »
Hızlı düğmeleri aç

endo

İleti: 687

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.moldibi.com
Alıntı yapılan: stranger;13118
nightlord,skate ve endo 1 cozum ararken 3 ayrI cozum yoLu gormu$ oldum. cok te$ekkurler. AsLInda bayagI ugra$tIm bu oLayI cozmek icin fakat yemedi maalesef :) simdi hepsini ayrI ayrI uygulayacagIm.
 
AsLInda nerdeyse elle tutulacak birkac $ey  yapmaya ba$LadIm fakat boyle ufak gozuken bir sorunu cozemeyince cinnet gecirip foruma post attIm :) cevaplarIn hepsi icin sagolun.(bu soru kac cycle yedi bilmiyorum ) UmarIm cok fazla zamanInIzı yememi$tir. ,)
 
endo jmp* 'I soyledigin cok iyi oldu. Bende $d80x ile ready'i arkaplan rengine cevirip ulan nasIL kurtulcaz bu meretten diye cILdIrIyordum :)


genelde en uzun sure cozulemeyen, cok vakit alan ya da sac-bas yoldurtan konular boyle ufak seylerdir (en azindan benim icin oyle olmustur genelde :) )

diledigin kadar soru sorabilirsin sevgili dostum, eminim buradaki herkes zevkle yaziyor bu cevaplari. sonucta ayni dili konusuyoruz (6502 assembly :D ... ayyy igrencti :o)
- endo of glance -

ipucLarI

« Yanıtla #24 : 13.11.2009 12:37:03 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Coding bolumunun eskilerini okurken cevap olarak eksik bıraktıgım bir konu yakaladım. Endo'nun bahsettiği Interrupt'u kilitlemeden kontrol olayını denemek için yazdığım rutin. Ipuçlarında bulunsun, zamanında bende sormuşum...
 
!to"intkey.prg",cbm
 
ekran=$0400
ekran1=$0402
 
*=$2000 ;sys8192
 
jsr$e544
ldx#$00
 
.yazidongu
lda yazi,x
sta ekran1,x
inx
cpx#5
bne .yazidongu
ldx#$00
ldy#$00
 
;interrupt rutini
sei
lda #$7f
sta $dc0d
lda $d01a
ora #$01
sta $d01a
lda $d011
and #$7f
sta $d011
lda #$05
sta $d012
lda #sta $0314
lda #>irq1
sta $0315
cli
jmp*
 
irq1:
jsr .anarutin
jsr .renk
lda#$01
sta$d019
jmp$ea7e
 
.anarutin:
lda spacedurumu
cmp#$01
beq spacebasili
lda$dc01
cmp#$ef
beq spacebasildi
cmp#$ff
beq spacebasilidegil
rts
 
spacebasildi:
lda#$01
sta spacedurumu
rts
 
spacebasili:
lda$dc01
cmp#$ff
beq spacedenelkalkti
rts
 
spacedenelkalkti:
lda#$00
sta spacedurumu
jmp sayfadegis
 
spacebasilidegil:
rts
 
sayfadegis:
lda sayacx
tax
lda sayaclo,x
clc
adc#$30
sta ekran+1
lda sayacy
tay
lda sayachi,y
clc
adc#$30
sta ekran
inc sayacx
ldx sayacx
cpx#10
beq hiart
rts
 
hiart:
lda#$00
sta sayacx
inc sayacy
rts
 
.renk:
inc$d020
rts
 
sayaclo:
!byte 0,1,2,3,4,5,6,7,8,9
sayachi:
!byte 0,1,2,3,4,5,6,7,8,9
 
yazi:
!scr"space"
 
spacedurumu:
!byte $00
 
sayacx:
!byte $00
 
sayacy:
!byte $00

ipucLarI

« Yanıtla #25 : 13.11.2009 14:07:57 »
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/
Stranger benim başaramadığımı başardı. Ben de birkaç sene önce Amiga codinge sarmıştım ancak Stranger'ın Commodore'da ilerlediğinin onda biri kadar ilerleyemedim, helal olsun kardeşime. :)
 
p.s: Joker'i de atlamamak lazım. Son zamanların 2 canavar adayı Commodore 64 coderları oldular.

ipucLarI

« Yanıtla #26 : 13.11.2009 14:49:48 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Skatecim grafiker ve organizer olarak yılların verdiği hırs. Intro yaptırmak için grubun coder'larının  peşinde koşmakla geçen bir ömürden sonra :)

ipucLarI

« Yanıtla #27 : 13.11.2009 14:59:12 »
Hızlı düğmeleri aç

joker_

İleti: 144

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Alıntı yapılan: skate;21797
Stranger benim başaramadığımı başardı. Ben de birkaç sene önce Amiga codinge sarmıştım ancak Stranger'ın Commodore'da ilerlediğinin onda biri kadar ilerleyemedim, helal olsun kardeşime. :)
 
p.s: Joker'i de atlamamak lazım. Son zamanların 2 canavar adayı Commodore 64 coderları oldular.

skate aslında bu tek başına olabilecek şey değil,sizlerin büyük yardımlarıyla olan bir şey.:) (şey kısmına uyacak kelime bir türlü bulamadım:D)
« Son Düzenleme: 13.11.2009 15:01:36 Gönderen: joker_ »

ipucLarI

« Yanıtla #28 : 19.11.2009 14:34:04 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
analog grubu parti release'i için hummalı bi şekilde çalışıyormuş... böyle bi duyum aldım

ipucLarI

« Yanıtla #29 : 19.11.2009 16:20:08 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
(Cem Yılmaz ve Yılan diyalogu)
Bize öyle bir bilgi gelmedi... :D