Gönderen Konu: acme (win32)  (Okunma sayısı 18498 defa)

acme (win32)

« : 05.11.2005 03:42:34 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
1-acaba çarpma yapan bi makro nasıl yazarız..
2-macro'dan return-value nasıl olur..


n1 !by 3;
n2 !by 5;


+mulu n1,n2;

desem, sonuç x'e dönse....

!macro mulu .s1 , .s2 {
     !set rslt = .s1 * .s2;
}


gibi mi?

bilen yapan varmı?

acme (win32)

« Yanıtla #1 : 06.11.2005 02:52:32 »
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/
Alıntı
Originally posted by vigo@Nov 5 2005, 03:42 AM
1-acaba çarpma yapan bi makro nasıl yazarız..
2-macro'dan return-value nasıl olur..


n1 !by 3;
n2 !by 5;


+mulu n1,n2;

desem, sonuç x'e dönse....

!macro mulu .s1 , .s2 {
   !set rslt = .s1 * .s2;
}


gibi mi?

bilen yapan varmı?
[post=2678]Quoted post[/post]
[/b]

O kadar kolay kurtulamazsın!!!! :)

lsr
ror zeropage1
bcc *+5
clc
adc zeropage2

gibisinden bir işlemi 9 kere falan tekrarlaman lazım.

Daha detaylı bilgi için C=Hacking #8'i tavsiye ediyorum.

C=Hacking

Kod: [Seç]
*
* 8-bit multiply -> 16-bit result
*
* ACC*AUX -> [AUX,EXT] lo,hi

MULT LDA #$00
  LDY #$09
]LOOP LSR
ROR ACC
BCC MULT2
CLC
ADC AUX
MULT2 DEY
BNE ]LOOP
STA EXT

9. sayıda ise tablo kullanarak daha hızlı bir yöntemi mevcut.

Hazır source code istersen The Fridge'de bulman mümkün.

The Fridge
Direct Source Link

acme (win32)

« Yanıtla #2 : 06.11.2005 13:11:57 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
ya skate,

benim kafam bi yerde karıştı...

bu iş neden macro ile olmuyor?

bi tane text plot eden macro yazdım

char coord , renk  ve textpointer ı parametre geçiyon,
ekrana basıyor...

mesela 5,5 diye geçince,

!SET START_COORD = ( 40 * .py ) + .px;
STA $0400+START_COORD,X;

diyorum sorunsuz oluyor?

derdim sayıları realtime çarpmak diil...

acme (win32)

« Yanıtla #3 : 06.11.2005 20:25:22 »
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/
Alıntı
Originally posted by vigo@Nov 6 2005, 01:11 PM
ya skate,

benim kafam bi yerde karıştı...

bu iş neden macro ile olmuyor?

bi tane text plot eden macro yazdım

char coord , renk ve textpointer ı parametre geçiyon,
ekrana basıyor...

mesela 5,5 diye geçince,

!SET START_COORD = ( 40 * .py ) + .px;
STA $0400+START_COORD,X;

diyorum sorunsuz oluyor?

derdim sayıları realtime çarpmak diil...
[post=2710]Quoted post[/post]
[/b]

Realtime olmadığı sürece zaten çarpma işlemini yapabilirsin. Ancak sen Macro'ya parametreden değişken gönderdiğin ve bu değişkenler üzerinde işlem yapmaya kalktığın an olay realtime'a dönüşüyor.

mesela

!macro mulu {
!set rslt = .s1 * .s2;
}

gibi birşey çalışabilir belki .s1 ve .s2'yi constant kabul edersek tabii...

ancak

!macro mulu .s1 , .s2 {
!set rslt = .s1 * .s2;
}

dediğimiz anda burda parametrik bir fonksiyon oluşuyor ki .s1 ve .s2'nin constant olmadığı kesin. Bu durumda bu şekilde makro yazılamaz. En azından ben hiç böyle bir yöntem kullanmadım.

acme (win32)

« Yanıtla #4 : 06.11.2005 21:39:22 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
hmmm tüh ya...

acme (win32)

« Yanıtla #5 : 07.11.2005 00:19:06 »
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/
Alıntı
Originally posted by vigo@Nov 6 2005, 09:39 PM
hmmm tüh ya...
[post=2739]Quoted post[/post]
[/b]

Yaw boşver tühü mühü... Kullan C=Hacking'deki yöntemi. Özellikle 9. sayıda oldukça hızlı bir çarpma işlemi var tablo kullanarak (x²/4 tablosu). Hatta onu özelleştirerek oldukça hızlı işlemler yapabiliyorsun.

x²/4'ün mantığı da şöyle.

Diyelim ki a ile b'yi çarpacaksın. x²/4 tablosunun elemanları 0'dan 255'e kadar gidiyor... Bu durumda (a+b)inci elemandan (a-b)inci elemanı çıkarınca geriye a*b işleminin sonucu kalıyor. Hemen deneyelim.

a = 7
b = 4

f(a+b) - f(a-b) = a*b
f(7+4) - f(7-4) = 7*4
f(11) - f(3) = 7*4

Bu aşamada precalculated tablodan 11. ve 3. değerler okunacak. Burada biz hesaplayalım.

x²/4 ise;

(11²/4) - (3²/4) = 7*4
(121/4) - (9/4) = 7*4
(121-9) / 4 = 7*4
112 / 4 = 7 * 4
28 = 28

Ahanda doğruymuş işlem :)

Dikkat edilmesi gereken nokta işleme girmeden önce a ile b'nin sort edilmesi gerektiği. Ya da diğer bir deyişle formül şöyle

f(a+b) - f(|a-b|) = a*b

Bir mutlak değer giriyor işin içine.

Bu anlattıklarım pozitif işlemler için geçerli. Negatif çarpım için flag kullanabilir ya da 7 numaralı bitten yararlanabilirsin. Kolay gelsin Vigo kardeş.

acme (win32)

« Yanıtla #6 : 07.11.2005 09:34:56 »
Hızlı düğmeleri aç

vigo


  • Ziyaretçi
wway süper teknik. çok saol kanz
watch out for new bronx stuff ( i hope ... :)

acme (win32)

« Yanıtla #7 : 07.11.2005 10:29:28 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
!macro mulu .a, .b{
lda #(.a*.b)
}

+mulu 5,17
sta hodo

LOLO=32

+mulu 3,LOLO
sta bodo



falan calisir
macroya arguman gecirilebilir yani. fakat argumanlarin constant olmasi lazim. macro her cagrilisinda farkli constantlari kabul edebilir.


Edit by Skate: Formül ve özellikle parantez kullandığınız postlarınızda "Enable emoticons?" seçeneğini disable edin. Aksi taktirde (.a*.b) gibi ifadelerde yer alan "b)" gibi kısımlar smileylerle replace ediliyor. Ben bu postu "Enable emoticons?" seçeneğini kapatarak editliyorum, bundan sonra aklınızda bulunsun.