acme (win32)

7 replies · 19,183 views

acme (win32)
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)
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]


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
*
* 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)
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)
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]


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)
hmmm tüh ya...
acme (win32)
Originally posted by vigo@Nov 6 2005, 09:39 PM
hmmm tüh ya...
[post=2739]Quoted post[/post]


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)
wway süper teknik. çok saol kanz
watch out for new bronx stuff ( i hope ... 🙂
acme (win32)
!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.