Gönderen Konu: kurs sonrasI ornekLer II  (Okunma sayısı 21688 defa)

kurs sonrasI ornekLer II

« Yanıtla #45 : 24.09.2008 13:38:37 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
yanlis anlamista olabilirim :}

Alıntı
...
;sprite datalari
        *=$0C00 ;a harfi
        *=$0c40 ;d harfi
        *=$0c80 ;r harfi          
        *=$0cc0 ;e harfi
        *=$0d00 ;m harfi

Alıntı yapılan: skate;19054
@gnostic: bence de nedir o? benim laflarımda öyle birşey mi geçmiş?

kurs sonrasI ornekLer II

« Yanıtla #46 : 24.09.2008 14:36:23 »
Hızlı düğmeleri aç

joker_

İleti: 144

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
:) abi ben cevaplayayım,haklısın aslında; 'dream' yazısının harflerini karışık şekilde hafızaya atınca 'adrem' çıkıyor ortaya gerçeği 'dream' :p tamamen benim acemiliğim.

kurs sonrasI ornekLer II

« Yanıtla #47 : 24.09.2008 15:27:52 »
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/
@gnos: joker'in de belirttiği gibi code bana ait olmadığı için "adrem"i anlamamışım :)
 
@joker: aslında macro dediğin şey sürekli tekrarlanan kod parçalarını alt rutin kullanmadan parametrelerle pratik bir biçimde oluşturmaktan ibaret. sonuç olarak elle defalarca aynı şeyi yazarak ya da copy & paste ederek de aynı sonuç elde edilebilir.
 
Makro kullanmadan açık yazacak olursak kod aslında şuna denk geliyor. Makrolar ile bu kodu oluşturuyorduk anlayacağın.
 
Kod: [Seç]
       !to"sprite.prg",cbm
        *=$0907   ;sys 2311
        ldx #$01
        jsr $e544
        lda #$00
        sta $d020
        lda #$ff
        sta $d015    ;sprite lar açık
        sta $d01c    ;çok renkli
        sta $d017    ;y ekseninde iki kat büyük
        sta $d01b    ;karakterlerin arkasında

        ldx #$30     ;sprite datalarını 0c00 a yerleştir.
        stx $07fb
        inx
        stx $07f8
        inx
        stx $07f9
        inx
        stx $07fa
        inx
        stx $07fc
        lda #$80   ; sprite y ekseni
        sta $d001
        sta $d003
        sta $d005
        sta $d007
        sta $d009
 
        lda #$01    ;sprite renklerini ayarla
        sta $d025
 
        ldx #$00
        lda #$03
sprenk
        sta $d027,x
        inx
        cpx #$05
        bne sprenk
        sei
        lda #$7f
        sta $dc0d
        lda #$01
        sta $d01a
        lda #$1b
        sta $d011
        lda #$7e
        sta $d012
        lda #<irq
        sta $0314
        lda #>irq
        sta $0315
        cli
        jmp *
irq
        inc $d019
        jsr sprite
        jmp $ea81
sprite  
        jsr sayac
 
loop1  
        clc
; Sprite 0
        lda #$00
        adc sinus,x
        sta $d000
        bcc +
        lda $d010
        ora #%00000001
        sta $d010
        jmp ++
+
        lda $d010
        and #%11111110
        sta $d010
++
; Sprite 1
        lda #$20
        adc sinus,x
        sta $d002
        bcc +
        lda $d010
        ora #%00000010
        sta $d010
        jmp ++
+
        lda $d010
        and #%11111101
        sta $d010
++
; Sprite 2
        lda #$40
        adc sinus,x
        sta $d004
        bcc +
        lda $d010
        ora #%00000100
        sta $d010
        jmp ++
+
        lda $d010
        and #%11111011
        sta $d010
++
; Sprite 3
        lda #$60
        adc sinus,x
        sta $d006
        bcc +
        lda $d010
        ora #%00001000
        sta $d010
        jmp ++
+
        lda $d010
        and #%11110111
        sta $d010
++
; Sprite 4
        lda #$80
        adc sinus,x
        sta $d008
        bcc +
        lda $d010
        ora #%00010000
        sta $d010
        jmp ++
+
        lda $d010
        and #%11101111
        sta $d010
++
        rts
sayac
        ldx count
        inc count
        lda count
        cmp #$ff
        beq +
        jmp loop1
+
        lda #$00
        sta count
        rts
count
        !by 0
 
sinus
        !by 0,1,2,3,4,5,7,8,10,12,14,17,19,22,25,27
        !by 30,33,37,40,43,47,50,54,58,61,65,69,73,76,80,84
        !by 87,91,95,98,102,105,109,112,115,118,121,124,127,130,132,134
        !by 137,139,141,142,144,145,146,147,148,149,149,149,149,149,149,149
        !by 148,147,146,145,143,142,140,138,136,134,131,129,126,123,120,117
        !by 114,111,108,104,101,97,94,90,86,83,79,75,71,68,64,60
        !by 56,53,49,46,42,39,36,33,29,27,24,21,18,16,14,12
        !by 10,8,6,5,3,2,1,1,0,0,0,0,0,0,1,1
        !by 2,3,5,6,8,10,12,14,16,19,21,24,27,30,33,36
        !by 39,42,46,49,53,57,60,64,68,72,75,79,83,87,90,94
        !by 97,101,105,108,111,114,118,121,124,126,129,131,134,136,138,140
        !by 142,143,145,146,147,148,149,149,149,149,149,149,149,148,147,146
        !by 145,144,142,140,139,137,134,132,130,127,124,121,118,115,112,109
        !by 105,102,98,95,91,87,84,80,76,72,69,65,61,57,54,50
        !by 47,43,40,37,33,30,27,24,22,19,17,14,12,10,8,7
        !by 5,4,3,2,1,0,0,0,0,0,0,1,1,2,3
;sprite datalari
        *=$0C00 ;a harfi
        !by 2,170,128,10,170,160,37,85,88,165,85,90,149,105,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,130,86,149,162,86,149,170,86,149,138,86,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
        *=$0c40 ;d harfi
        !by 85,85,64,85,85,80,90,170,148,106,170,165,106,150,165,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,149,169,106,150,165,106,170,165,90,170,148,85,85,80,85,85,64
        *=$0c80 ;r harfi          
        !by 170,170,128,170,170,160,165,85,104,149,85,90,149,105,90,149,130,86,149,130,86,149,130,90,149,130,88,149,130,104,149,130,160,149,138,128,149,170,168,149,162,90,149,130,86,149,130,86,149,130,86,149,130,86,165,130,90,170,130,170,170,130,170
        *=$0cc0 ;e harfi
        !by 170,170,170,170,170,170,165,85,86,149,170,170,149,128,10,149,128,0,149,128,0,149,128,0,149,128,128,149,170,128,149,85,128,149,170,128,149,128,128,149,128,0,149,128,0,149,128,0,149,128,10,149,170,170,165,85,86,170,170,170,170,170,170
        *=$0d00 ;m harfi
        !by 170,0,170,170,130,170,149,170,86,149,105,86,149,85,86,149,85,86,150,150,150,150,170,150,150,40,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,150,0,150,170,0,170,170,0,170

kurs sonrasI ornekLer II

« Yanıtla #48 : 24.09.2008 16:36:54 »
Hızlı düğmeleri aç

joker_

İleti: 144

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
anladım çok saol,makro olunca hatamın tam olarak ne olduğunu çözememiştim şimdi nerde hata yaptığımı daha net anladım
Kod: [Seç]
; Sprite 0
        lda #$00
        adc sinus,x
        sta $d000
        bcc +
        lda $d010
        ora #%00000001
        sta $d010
        jmp ++
+
        lda $d010
        and #%11111110
        sta $d010
++
; Sprite 1

ben burada jmp ++ 'ı bir sonra ki sprite yerine sonlandırmaya göndermiştim,niye göndermişim bilmiyorum :p sorun çözüldü teşekkürler.takıldığım yerlerde ara ara canını sıkmaya devam edicem.

kurs sonrasI ornekLer II

« Yanıtla #49 : 24.09.2008 17:17:13 »
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/
+ ++ +++ - -- --- gibi labellar hakkında da kısa bir açıklama yapayım. Bunlara anonymous forward/backward label deniyor. kodun içersinde sizin için özel bir anlam taşımayan bir bölüme atlamanız gerekiyorsa saçma bir label ismi düşünmek yerine bu sembolleri kullanabilirsiniz.
 
Örneğin bir yere sıçrama yaparken + yani anonymous forward label kullandığımız zaman kendinden sonraki ilk + sembolüne sıçrayacaktır. kodun içersinde sınırsız sayıda + kullanabilirsiniz. Örnek:
 
Kod: [Seç]
     lda $d000
      cmp #$50
      bcc +
      inc counter1
+     lda $d001
      cmp #$60
      bcs +
      inc counter2
+     jsr +
      rts
+     lda #$02
      sta $d020
      rts

Bu örnekte ilk "bcc +" kendinden sonraki ilk + ile etiketlenmiş "lda $d001" satırına sıçrar. Sonraki "bcs +" ise "jsr +" satırına sıçrayacaktır. "jsr +" ise "lda #$02" satırına gider.
 
şimdi gelelim şu tür bir örneğe:
 
Kod: [Seç]
--    lda $d000
      clc
      adc #$18
      sta $d002
-     lda $dc00
      cmp #%00000111
      beq +
      cmp #%00001011
      beq ++
      jmp -
+     inc $d000
      jmp --
++    dec $d000
      jmp --

Bu örnekte ise her şeyi bir arada kullanıyoruz. "beq +" kendinden sonraki ilk "+"a yani "inc $d000"a gidecektir. bir sonraki kontrolde yine "beq +" kullansak yine aynı adrese gider çünkü henüz ilk "+"a ulaşmadı kod. Bu durumda "++" kullanarak sıçrama noktalarını yine anonymous bir biçimde ayırt edebiliyoruz.
 
Benzer bir biçimde "jmp -" satırı "lda $dc00"a giderken eğer bir pozisyon değişikliği olduysa bunu ikinci bir sprite'a daha uygulamak için kodda daha öncelerdeki bir bölgeye gitmek için "--" kullanıyoruz.
 
Yeri gelmişken açıklamak istedim. Bunu ACME'nin son versiyonu ve daha birçok diğer assembler destekliyor. Kolay gelsin.

kurs sonrasI ornekLer II

« Yanıtla #50 : 18.09.2009 23:37:43 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Skate senin bu post aylar önce dikkatimden kaçmış. Parti sonrasıda askere gittiğim için maalesef iyice unutup gitmişim. Cruzer'in code'unu inceledim gerçekten (tabloyu yarattığı bölüm) 256 byte için çok uzun, uzunluğu bir yana karışık geldi.
 
Benim esas merak ettiğim senin aşağıda belirttiğin; kodu fazla uzatmadan basic rom ile sinus tablosunun nasıl yaratıldığı. Böyle bir şey varsa bende yararlanmak isterim.
 
Esas bomba sorumu da daha sonraya saklıyorum ;)
 
Alıntı yapılan: skate;12305
Aklıma gelmişken sprite generator olarak
 
Wixbouncer v1.0 (Win32)
http://noname.c64.org/csdb/release/?id=12618
 
bunu tavsiye ederim. Bir de kimse sormuyor "ulan illa da böyle mi kullanmak lazım, asm kodlarıyla sinüs tablosu yaratılamazmı?!" diye. Yaratılabilir. Cruzer/Camelot'un Too(C)o(M)p(L)ex 256 byte'ında var bir örneği. Kodları da paketin içinde yer alıyor.
 
http://noname.c64.org/csdb/release/?id=11730
 
Ancak ne var ki ASM'den sinüs tablosu yaratma Basic ROM'u kullanılmadığı sürece (Cruzer kullanmamış) çok kısa olmuyor. Basic ROM'u, hatta hatta doğrudan Basic kullanarak sinüs tablosu üretmek her zaman en kısa yoldur. En azından 256 bytelar için en ideal yoldur. Yine de sizin 256 byte kasmayacağınızı varsayarak cruzer'ın kodunu incelemenizi tavsiye ediyorum.

kurs sonrasI ornekLer II

« Yanıtla #51 : 19.09.2009 00:04:11 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Bide bu vardı tabii. Herzaman hoşuma giderdi. Kısa öz...
Hem Pc 'ci hem 64'cü coderlar belki c64 portunu nasıl yapabileceğimizi anlatır. Sonuçta pixel'i zıplatmak istiyoruz. Cebren ve hile ile de olsa olabilir, yeterki kısa olsun...  Kendisi yakınım olmasına rağmen 64 kodlamadığı için yapana soramıyorum tabii ki :)
 
Bomba sorumuda soruyorum bu arada... Rom içerisinde sinus tablosu olarak okutabileceğimiz(biraz müdahale ile de olsa) herhangi bir adres aralığı var mıdır? Biraz şark kurnazlığı gibi olacak ama aklım böyle kötü şeylere çalışıyor napayım ;)
 
 
;
; code : GOD of AnaLoG
;
; Sabit nokta aritmetigi ile ivmeli hareket eden cisimden ba$ka bi$i degil. :)
; ama sadece 87 byte. 7 bit fixed point... :)
.model tiny
.data
hiz = 15 ;hiz ( fazla abartmayin tabi )
xs = 160 ;apsis
ys = 20 ;ordinat
renk = 15 ;renk
.386
.code
org 100h
.startup
push 0a000h
pop es
mov al, 13h
int 10h
xor cx, cx
mov bl, ys ;ordinat ayari
shl bx, 7
forsin: add cx, hiz ;hiz ayari
add bx, cx
mov ax, bx
shr ax, 7
mov dx, ax
cmp dl, 199 ;kontrol y<=199 ?
jbe short kucuk
neg cx
mov bl, 198
shl bx, 7
kucuk: mov ax, dx
shl ax, 6
mov di, ax
shl ax, 2
add di, ax
add di, xs
mov al, renk
stosb ;[ 0A000h : y*320+x ] = renk
dec di
vretrace: mov dx, 3dah ;dusey tarama kontrol
fw1: in al, dx
and al, 8
jne short fw1
fw2: in al, dx
and al, 8
je short fw2
xor ax, ax
stosb ;[ 0A000h : y*320+x ] = 0
in al, 60h
dec al
jne short forsin ;yaw bu bizim esc dimi?
mov al, 03h ;80x25x16
int 10h
int 20h ;The End. . .
end
?

kurs sonrasI ornekLer II

« Yanıtla #52 : 19.09.2009 01:12:04 »
Hızlı düğmeleri aç

GnoStiC


  • Ziyaretçi
bu da ray'in meshur 32 byte generator'u;

Kod: [Seç]
;==============================
;=
;=  32 bytes sinus table generator
;= for a 16.16 fixedpoint sinus table with 1024 entries
;=
;= by ray//.tSCc.      2001
;==============================
 
        section    text
        lea.l    sinus(pc),a0                        ; 4
 
        move.w    #512-1,d0                        ; 4
 
.gen_loop    move.w    d0,d1        ; Approximate the sinus curve using a    ; 2
        subi.w    #256,d1        ; parabolic graph            ; 4
        muls.w    d1,d1                            ; 2
        subi.l    #$10000,d1    ; -sin d0 ~ (d0 - 1) ^ 2 - 1        ; 6
 
        move.l    d1,512*4(a0)    ; 3rd & 4th quadrant            ; 4
        sub.l    d1,(a0)+    ; 1st & 2nd    &quot;            ; 2
 
        dbra    d0,.gen_loop                        ; 4
                                        ;--
                                        ;32 bytes
        section    bss
sinus        ds.l    1024

kurs sonrasI ornekLer II

« Yanıtla #53 : 19.09.2009 02:34:20 »
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: acilen codebase64'ü hatmetmeni öneriyorum :) ne bulursan oku, satır atlama.
 
doynax'ın 28 bytelık basic romunu kullanarak sinus tablosu oluşturan rutini:
http://www.codebase64.com/doku.php?id=base:generating_sines_with_basic