diger sorularina gecmeden SO ve overflow flag konusalim:
- evet ben ilk cevaplarda onu tamamen carry flag olarak dusunuyordum. o yuzden rol rol rol rol calisiyor (hatta edge detect bile ok cunku akumulatoru 0 ile ilklersek her rol hi-bit'i geri carry flag'e ittigi icin otomatik olarak silmis oluyoruz) ama bu yanlis cevap gecelim
- su an canim oyle istedigi icin 6502 tarafindaki transfer hizini maksimize etmeye bakiyorum

bu daha hassas timing ve ihtimalen xmicro kodunun daha zor olmasi demek ama olsun maksat beyin egzersizi.
- simdilik aklima gelen en hizli bayt transfer rutinini yaziyorum. baya demoscene style optimizasyonlar

loop:
tsx ; save stack pointer
php
clv
php
clv
...
php
clv ; push status register to eight consecutive bytes in stack
txs ; restore stack pointer, we have captured 8 bytes somewhere in $100-$200 range lets call the first address stack,
ldx stack
lda tab0,x ; set bit 7 based on bit 6 of read value
ldx stack+1
ora tab1,x
ldx stack+2
ora tab2,x
...
ldx stack+7
ora tab7,x ; byte now in accumulator
sta dest, y
iny
bne loop
13 cycles per bit + 14 cycles per byte = 118 cycles/byte
trikler:
- overflow flag'i stack'e atmak (komple status register ile beraber). sonucta 8 byte oluyor stackte, bunlarin 6. bitlerini birlestirerek istedigimiz byte'i elde edicez.
- bu 6. bitleri birlestirme isini hizli yapmak icin $800 bayt look up table'lara yakiyoruz. her tablo 6. bit'in degerini hedef bite yazmaya yariyor. mesela 0. bit icin kullandigimiz tablo 256 degere sahip 6. bitin 0 oldugu butun indexler icin deger 0. 6. bitin 1 oldugu indexler icin deger 1. yani tabloda 0 - 63 arasi ve 128 - 191 arasi 0 digerleri 1. ayni sey diger 7 tablo icin de gecerli. tek fark 1 olan degerler diger tablolarda 1 yerine ilgili bite shift olmus hali: tab1 icin 2, tab2 icin 4, tab3 icin 8 vs.
- her ldx, sta/ora cifti ile bir biti alip akumulatorde dogru bite yerlestiriyoruz.
sonucu y index ile 256 adrese yaziyoruz.
- protokolun so pininde gorunen hali soyle oluyor: basta biraz don't care. sonra 8 tane 5 cycle'lik slot sonra ~70 cycle falan bosluk (ldx, ora ciftleri + loop)
- ve dedigim gibi xmicro'nun cycle-exact zamanlama ile so pin ustundeki transition'lari yapabildigini varsayiyorum