Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore Yazılım6510 ASM: Indirect Indexed (dolaylı dizinlenmiş) adresleme modu
Sayfa: 1 [2]   Aşağı git
Yazdır
Gönderen Konu: 6510 ASM: Indirect Indexed (dolaylı dizinlenmiş) adresleme modu  (Okunma Sayısı 13312 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.122


Üyelik Bilgileri WWW
« Yanıtla #15 : Ocak 14, 2017, 23:02:49 ÖS »

Indirect deyince 65c02'deki JMP($falan,X) geldi aklıma nedense... Commodore LCD'nin içinde, PHY PHX vb. ile birlikte bolca kullanmışlar.
Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #16 : Ocak 14, 2017, 23:42:34 ÖS »

Indirect deyince 65c02'deki JMP($falan,X) geldi aklıma nedense... Commodore LCD'nin içinde, PHY PHX vb. ile birlikte bolca kullanmışlar.

Nispet yapmışlar diyosun yani

Bu arada yeni farkettim. Benim kafa hep X register'ı ile kullanılan Indexed Indirect'e gitmiş, başlıkta Indirect Indexed yazıyormuş.

Bu arada bunların terminolojik olarak karışmaması için ilk kelimeye bakmak lazım. İlk kelime adreslemenin temel işlevini, ikincisi ise yan fonksiyonu söylüyor.

Indirect Indexed : Bunun indeksli olması yan özelliği. Önemli olan Indirect olması, yani operand olarak verilen adres doğrudan kullanılmıyor. O adres ve O adresten sonraki adres 16 bit bir adres oluşturmak için kullanılıyor. Indeksli olması dediğim gibi yan özellik. Oluşan adrese Y register'ının değeri eklenip işlem yapılacak adresin son değeri bulunuyor.

Indexed Indirect : Bunun da ilk ve temel özelliği operand olarak verilen zero page adresinin X register'ı ile indekslenebilmesi. Indirect niteliği ikinci aşamada 16 bit adresin kullanılması aşaması.

Yani ilk kelimede Indirect görünce aklınıza Y, Indexed görünce de X getirirseniz karışmıyor. Zaten çoğu programcı sadece indeksleme ihtiyacı varsa çoğu zaman doğrudan indeksleme için X register'ını kullanır.

Hatta 6502'nin ortagonal olmayan garip bir özelliği zero page'de doğrudan indisleme için sadece X register'ını kullanabilmesi. Instruction set epey garip.

Kod:
LDA (LoaD Accumulator)

MODE           SYNTAX       HEX LEN TIM
Zero Page,X   LDA $44,X     $B5  2   4
Absolute,X    LDA $4400,X   $BD  3   4+
Absolute,Y    LDA $4400,Y   $B9  3   4+
Indirect,X    LDA ($44,X)   $A1  2   6
Indirect,Y    LDA ($44),Y   $B1  2   5+


LDX (LoaD X register)

MODE           SYNTAX       HEX LEN TIM
Zero Page,Y   LDX $44,Y     $B6  2   4
Absolute,Y    LDX $4400,Y   $BE  3   4+

LDY (LoaD Y register)

MODE           SYNTAX       HEX LEN TIM
Zero Page,X   LDY $44,X     $B4  2   4
Absolute,X    LDY $4400,X   $BC  3   4+
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.785


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #17 : Ocak 15, 2017, 10:42:43 ÖÖ »

Indirect Indexed ve Indexed Indirect arasında farkı oradaki parantez çok güzel açıklıyor. Parantezin içini pointer, parantezin dışını vektör olarak okuduğumuzda X pointer adresine, Y vektör değerine ekleniyor.

Yani:
  • Indirect Indexed'de işlemci vektör değerini pointer adresinden alıyor, sonra index kadar gidip komutu işletiyor.
  • Indexed Indirect'de ise vektör pointer+index adresinden alınıyor ve komut vektörün gösterdiği adreste işletiliyor. 

Aşağıda ekran renklerini türlü şekil değiştiren rutinler var.

Kod:
BORDER = $d020
BACKGR = $d021
COLOR = $01

Pointers:
!by $20,$d0,$21,$d0

Absolute:
lda #COLOR
sta BORDER
sta BACKGR
rts

Absolute_Indexed:
ldx #00
lda #COLOR
sta BORDER,x
inx
inx
sta BORDER,x
rts

Indirect_Indexed:
ldy #00
lda #COLOR
sta (Pointers),y
iny
iny
sta (Pointers),y
rts

Indexed_Indirect:
ldx #00
lda #COLOR
sta (Pointers,x)
inx
sta (Pointers,x)
rts

Bu sefer de Absolute Indexed'e örnek veremedim. Çünkü sadece JMP komutuyla çalışıyor. Ancak Y nin sıfır olduğu yerde Indirect Indexed = Absoulte Indirect olarak düşünebilirsiniz.
Logged

Sayfa: 1 [2]   Yukarı git
Yazdır
Gitmek istediğiniz yer: