Makine Dilinin Tüm Komutları

Program dökümü: SPEECH BASIC

Burada, COMMODORE 64'ün ana işlem ünitesi MOS 6510'un tüm komutlarının, alfabetik sıraya sokulmuş bir listesini bulacaksınız. Bu listeye, 'bilinmeyen komutlar' da dahil.

Bu bölüm, üç adet tablodan oluşuyor. Birinci tabloda, bilinmeyen komutların listesini; ikinci tabloda, standart komutların listesini, üçüncü tabloda ise, ilk iki tabloda kullanılan kısaltmaların açıklamaları olacak.

Birinci tablo ile bir iki açıklama yapalım:

COMMODORE 64'ün ilk çıktığı günden beri, ana işlem ünitesi MOS 6510'un birçok değişik versiyonu üretildi. Bunlar, standart komut setinde tümüyle kompatibel (uyumlu) olmalarına rağmen, bilinmeyen komutların yürütülmesi sırasında çok değişik davranabiliyorlar. Hangi bilgisayarda, hangisinin tam çalışacağı sorusu ancak deneme ve yanılma yöntemi ile bulunabilir. Birçok monitor programı ile, bu komutlar incelendiğinde, monitor programı bu komutu anlayamadığını belirtmek için yanına üç adet soru işareti (???) verir. Ocak 1987 sayısında yayınlanan, monitor programı da bu şekilde davranıyor. Fakat, yakında yayınlayacağımız SMON adlı monitor programı, bu tip komutların kullanıldığı programları da incelemenize fırsat verecek.

Gelelim tablolarımıza. Önce birinci tablo:

A11: AND register with $11

X- ve Y-register'i $11 değeri ile AND'lenir. Sonuç, işlem yapılan indeks registerlerinden değeri kullanılarak indeksli adresleme ile belleğe yazılır.

Adresleme Tipleri:

Assembler: | Kod: | Kısaltma: | Byte: AAX #OP | $8B | IM | 2 AAX OP | $87 | ZP | 2 AAX OP,Y | $97 | ZPY | 2 AAX OP | $8F | ABS | 3 AAX (ZP,X) | $83 | (ZP,X) | 2

ASR: AND with accu and shift right

Şu işlemler yürütülür: AND LSR

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: ASR OP | $6B | IM | 2

ARR: AND with accu and rotate right

Bu işlemler yürütülür: AND ROR

Adresleme Tipleri:

Assembler: | Kod: | Kısaltma: | Byte: ARR OP | $4B | IM | 2

AXS: AND accu and X-register and subtract data

Akü ile X-register'in AND'lenmesi sonucu elde edilen değerden operand'ın değeri carry'siz çıkartılır ve sonuç X-register'ine yazılır.

Adresleme Tipleri:

Assembler: | Kod: | Kısaltma: | Byte: AXS OP | $CB | IM | 2

DCP: decrement and compare wiht accu

Şu işlemler yürütülür: DEC CMP

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: DCP OP | $C7 | ZP | 2 DCP OP,X | $D7 | ZPX | 2 CCP OP | $CF | ABS | 3 DCP OP,X | $DF | ABX | 3 DCP OP,Y | $DB | ABY | 3 DCP (ZP,X) | $C3 | (ZP,X) | 2 DCP (ZP),Y | $D3 | (ZP),Y | 2

DOP: double NOP

Bu komutlar yaptıkları işlem bakımından NOP komutundan farksızdır. Fakat, iki byte sürerler. Burada ikinci byte dikkate alınmaz.

$04, $14, $34, $44, $54, $64, $74, $D4, $F4, $80 $89, $93

ISC: increment and subtract with carry

Şu işlemler yürütülür: INC SBC

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: ISC OP | $E7 | ZP | 2 ISC OP,X | $F7 | ZPX | 2 ISC OP | $EF | ABS | 3 ISC OP,X | $FF | ABX | 3 ISC OP,Y | $FB | ABY | 3 ISC (ZP,X) | $E3 | (ZP,X) | 2 ISC (ZP),Y | $F3 | (ZP),Y | 2

KIL: Killer codes

Bu komutlar sistemin 'crash' etmesine yolaçar. Böyle durumlarda, RUN/STOP-RESTORE kombinasyonu da bir işe yaramaz. Ya bilgisayarları kapatır açarsınız, ya da resetlersiniz (bir reset switch yardımıyla).

$02, $12, $22, $32, $42, $52, $62, $72, $B2, $D2, $F2

LAR: load accu, and wiht stack-register, transfer result to accu, X-register and stackregister.

Bu işlemler yürütülür: LDA AND (yığın göstergeci ile) TAX TXS

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: LAR OP,Y | $BB | ABY | 3

LAX: load to accu and X-register

Şu işlemler yürütülür: LDA TAX

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: LAX OP | $A7 | ZP | 2 LAX OP,Y | $B7 | ZPY | 2 LAX OP | $AF | ABS | 3 LAX OP,Y | $BF | ABY | 3 LAX (ZP,X) | $A3 | (ZP,X) | 2 LAX (ZP),Y | $B3 | (ZP),Y | 2

NOP: no operation

Aşağıdaki komutlar, SEA kodlu NOP komutu ile her bakımdan özdeştir.

$1A, $3A, $5A, $7A, $DA, $FA

RLA: rotate left, AND with accu and store accu.

Şu işlemler yürütülür: ROL AND STA

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: RLA OP | $27 | ZP | 2 RLA OP,X | $37 | ZPX | 2 RLA OP | $2F | ABS | 3 RLA OP,X | $3F | ABX | 3 RLA OP,Y | $3B | ABY | 3 RLA (ZP,X) | $23 | (ZP,X) | 2 RLA (ZP),Y | $33 | (ZP),Y | 2

RRA: rotate right and add with carry.

Bu işlemler yürütülür: ROR ADC

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: RRA OP | $67 | ZP | 2 RRA OP,X | $77 | ZPX | 2 RRA OP | $6F | ABS | 3 RRA OP,X | $7F | ABX | 3 RRA OP,Y | $7B | ABY | 3 RRA (ZP,X) | $63 | (ZP,X) | 2 RRA (ZP),Y | $73 | (ZP),Y | 2

SLO: shift left and OR with accu.

Şu işlemler yürütülür: ASL ORA

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: SLO OP | $07 | ZP | 2 SLO OP,X | $17 | ZPX | 2 SLO OP | $0F | ABS | 3 SLO OP,X | $1F | ABX | 3 SLO OP,Y | $1B | ABY | 3 SLO (ZP,X) | $13 | (ZP,X) | 2 SLO (ZP),Y | $03 | (ZP),Y | 2

SRE: shift right and EOR with accu.

Şu işlemler yürütülür: LSR EOR

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: SRE OP | $47 | ZP | 2 SRE OP,X | $57 | ZPX | 2 SRE OP | $4F | ABS | 3 SRE OP,X | $5F | ABX | 3 SRE OP,Y | $5B | ABY | 3 SRE (ZP,X) | $43 | (ZP,X) | 2 SRE (ZP),Y | $53 | (ZP),Y | 2

TOP: triple NOP

Aşağıdaki komutlar da NOP komutunun bir türüdür. Tek farkları üç byte sürmeleridir. İkinci ve üçüncü byte'ları önemsizdir.

$0C, $1C, $3C, $5C, $7C, $DC, $FC

Geciyoruz ikinci tabloya.

ADC: add with carry

Hafızanın içeriğini aküye, carry'yi de kullanarak topla, sonucu aküye al.

Flaglar: N Z C I D V + + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt ADC #OP | $69 | IM | 2 | 2 ADC OP | $65 | ZP | 2 | 3 ADC OP,X | $75 | ZPX | 2 | 4 ADC OP | $6D | ABS | 3 | 4 ADC OP,X | $7D | ABX | 3 | 4 ADC OP,Y | $79 | ABY | 3 | 4 ADC (ZP,X) | $61 | (ZP,X) | 2 | 6 ADC (ZP),Y | $71 | (ZP),Y | 2 | 5

AND: AND accu

Hafızanın içeriğini, aküyle AND'le, sonucu aküye al.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt AND #OP | $29 | IM | 2 | 2 AND OP | $25 | ZP | 2 | 3 AND OP,X | $35 | ZPX | 2 | 4 AND OP | $2D | ABS | 3 | 4 AND OP,X | $3D | ABX | 3 | 4 AND OP,Y | $39 | ABY | 3 | 4 AND (ZP,X) | $21 | (ZP,X) | 2 | 6 AND (ZP),Y | $31 | (ZP),Y | 2 | 5

ASL: arithmetic shift left

Hafızanın içeriğini bir bit pozisyonu sola kaydır.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt ASL | $0A | Accu | 1 | 2 ASL OP | $06 | ZP | 2 | 5 ASL OP,X | $16 | ZPX | 2 | 6 ASL OP | $0E | ABS | 3 | 6 ASL OP,X | $1E | ABX | 3 | 7

BCC: branch if carry clear

Carry biti sönükse dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BBC OP | $90 | REL | 2 | 2

BCS: branch if carry set

Carry biti yanıksa dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BCS OP | $B0 | REL | 2 | 2

BEQ: branch if equal (to zero)

Son yapılan işlemin sonucu sıfırsa dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BEQ OP | $F0 | REL | 2 | 2

BIT: test bits

Hafıza ile aküyü AND'le, sonuca göre flag'ları oluştur.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BIT OP | $24 | ZP | 2 | 3 BIT OP | $2C | ABS | 3 | 4

BMI: branch if minus

Son yapılan işlemin sonunda yedinci bit yanıksa dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BMI OP | $30 | REL | 2 | 2

BNE: branch if not equal (to zero)

Son yapılan işlemin sonucu sıfır değilse dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BNE OP | $D0 | REL | 2 | 2

BRK: break

Programın durması ve break vektörü üzerinden atlama

Flaglar: N Z C I D V B +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BRK | $00 | — | 1 | 7

BVC: branch if overflow clear

Son yapılan işlemin sonunda taşma yoksa dallan.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BVC OP | $50 | REL | 2 | 2

BVS: branch if overflow set

Son yapılan işlemin sonunda taşma varsa dallan

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt BVS OP | $70 | REL | 2 | 2

CLC: clear carry

Carry bitini söndür.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CLC | $18 | — | 1 | 2

CLD: clear decimal mode

Ondalık mod bitini söndür.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CLD | $D8 | — | 1 | 2

CLI: clear interrupt disable bit

Interrupt'a izin vermeyen biti söndür.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CLI | $58 | — | 1 | 2

CLV: clear overflow flag

Taşma flag'ını söndür.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CLV | $B8 | — | 1 | 2

CMP: compare with accu

Hafızanın içeriğini, aküyle karşılaştır.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CMP #OP | $C9 | IM | 2 | 2 CMP OP | $C5 | ZP | 2 | 3 CMP OP,X | $D5 | ZPX | 2 | 4 CMP OP | $CD | ABS | 3 | 4 CMP OP,X | $DD | ABX | 3 | 4 CMP OP,Y | $D9 | ABY | 3 | 4 CMP (ZP,X) | $C1 | (ZP,X) | 2 | 6 CMP (ZP),Y | $D1 | (ZP),Y | 2 | 5

CPX: compare with X-register

Hafızanın içeriğini, X-registeriyle karşılaştır.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CPX #OP | $E0 | IM | 2 | 2 CPX OP | $E4 | ZP | 2 | 3 CPX OP | $EC | ABS | 3 | 4

CPY: compare with Y-register

Hafızanın içeriğini, Y-registeriyle karşılaştır.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt CPY #OP | $C0 | IM | 2 | 2 CPY OP | $C4 | ZP | 2 | 3 CPY OP | $CC | ABS | 3 | 4

DEC: decrement

Hafızanın içeriğini bir eksilt.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt DEC OP | $C6 | ZP | 2 | 5 DEC OP,X | $D6 | ZPX | 2 | 6 DEC OP | $CE | ABS | 3 | 6 DEC OP,X | $DE | ABX | 3 | 7

DEX: decrement X-register

X-registerinin içeriğini bir eksilt.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt DEX | $CA | — | 1 | 2

DEY: decrement Y-register

Y-registerinin içeriğini bir eksilt.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt DEY | $88 | — | 1 | 2

EOR: exclusive-or with accu

Hafızanın içeriğini, aküyle exclusive-or işlemine sok.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt EOR #OP | $49 | IM | 2 | 2 EOR OP | $45 | ZP | 2 | 3 EOR OP,X | $55 | ZPX | 2 | 4 EOR OP | $4D | ABS | 3 | 4 EOR OP,X | $5D | ABX | 3 | 4 EOR OP,Y | $59 | ABY | 3 | 4 EOR (ZP,X) | $41 | (ZP,X) | 2 | 6 EOR (ZP),Y | $51 | (ZP),Y | 2 | 5

INC: increment

Hafızanın içeriğini bir artır.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt INC OP | $E6 | ZP | 2 | 5 INC OP,X | $F6 | ZPX | 2 | 6 INC OP | $EE | ABS | 3 | 6 INC OP,X | $FE | ABX | 3 | 7

INX: increment X-register

X-registerinin içeriğini bir artır.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt INX | $E8 | — | 1 | 2

INY: increment Y-register

Y-registerinin içeriğini bir artır.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt INY | $C8 | — | 1 | 2

JUM: Jump

Adrese sıçra.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt JMP OP | $4C | ABS | 3 | 3 JMP (OP) | $6C | IND | 3 | 5

JSR: jump to subroutine

Altprogramı çağır.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt JSR OP | $20 | ABS | 3 | 6

LDA: load accu

Aküye, hafızanın içeriğini yükle.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt LDA #OP | $A9 | IM | 2 | 2 LDA OP | $A5 | ZP | 2 | 3 LDA OP,X | $B5 | ZPX | 2 | 4 LDA OP | $AD | ABS | 3 | 4 LDA OP,X | $BD | ABX | 3 | 4 LDA OP,Y | $B9 | ABY | 3 | 4 LDA (ZP,X) | $A1 | (ZP,X) | 2 | 6 LDA (ZP),Y | $B1 | (ZP),Y | 2 | 5

LDX: load X-register

X-registerine hafızanın içeriğini yükle.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt LDX #OP | $A2 | IM | 2 | 2 LDX OP | $A6 | ZP | 2 | 3 LDX OP,Y | $B6 | ZPY | 2 | 4 LDX OP | $AE | ABS | 3 | 4 LDX OP,Y | $BE | ABY | 3 | 4

LDY: load Y-register

Y-registerine, hafızanın içeriğini yükler.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt LDY #OP | $A0 | IM | 2 | 2 LDY OP | $A4 | ZP | 2 | 3 LDY OP,X | $B4 | ZPX | 2 | 4 LDY OP | $AC | ABS | 3 | 4 LDY OP,X | $BC | ABX | 3 | 4

LSR: logical shift right

Hafızanın içeriğini bir bit pozisyonu sağa kaydır. Yedinci bite '0' yüklenir.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt LSR | $4A | Accu | 1 | 2 LSR OP | $46 | ZP | 2 | 5 LSR OP,X | $56 | ZPX | 2 | 6 LSR OP | $4E | ABS | 3 | 6 LSR OP,X | $5E | ABX | 3 | 7

NOP: no operation

Hiçbir işlem yapılmaz.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt NOP | $EA | — | 1 | 2

ORA: OR with accu

Aküyle, hafızanın içeriğini OR'la, sonucu aküye yükle.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt ORA #OP | $09 | IM | 2 | 2 ORA OP | $05 | ZP | 2 | 3 ORA OP,X | $15 | ZPX | 2 | 4 ORA OP | $0D | ABS | 3 | 4 ORA OP,X | $1D | ABX | 3 | 4 ORA OP,Y | $19 | ABY | 3 | 4 ORA (ZP,X) | $01 | (ZP,X) | 2 | 6 ORA (ZP),Y | $11 | (ZP),Y | 2 | 5

PHA: push accu

Akümülatörün içeriğini yığında sakla.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt PHA | $48 | — | 1 | 3

PHP: push processor-status

Durum registerlerinin içeriğini yığında sakla.

Praglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt PHP | $08 | — | 1 | 3

PHA: pull accu

Akümülatörün içeriğini yığından al.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt PLP | $28 | — | 1 | 4

ROL: rotate left

Hafızanın içeriğini bir bit pozisyonu sola döndür.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt ROL | $2A | Accu | 1 | 2 ROL OP | $26 | ZP | 2 | 5 ROL OP,X | $36 | ZPX | 2 | 6 ROL OP | $2E | ABS | 3 | 6 ROL OP,X | $3E | ABX | 3 | 7

ROR: rotate right

Hafızanın içeriğini bir bit pozisyonu sağa döndür.

Flaglar: N Z C I D V + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt ROR | $6A | Accu | 1 | 2 ROR OP | $66 | ZP | 2 | 5 ROR OP,X | $76 | ZPX | 2 | 6 ROR OP | $6E | ABS | 3 | 6 ROR OP,X | $7E | ABX | 3 | 7

RTI: return from interrupt

Interrupt işlemi bittikten sonra, kesilen programa kaldığı yerden devam et.

Flaglar: N Z C I D V önceki gibi

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt RTI | $40 | — | 1 | 6

RTS: return from subroutine

Altprogramdan geri dön.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt RTS | $60 | — | 1 | 6

SBC: subtract with carry

Aküden, hafızanın içeriğini, carry'yi de kullanarak çıkar.

Flaglar: N Z C I D V + + + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt SBC #OP | $E9 | IM | 2 | 2 SBC OP | $E5 | ZP | 2 | 3 SBC OP,X | $F5 | ZPX | 2 | 4 SBC OP | $ED | ABS | 3 | 4 SBC OP,X | $FD | ABX | 3 | 4 SBC OP,Y | $F9 | ABY | 3 | 4 SBC (ZP,X) | $E1 | (ZP,X) | 2 | 6 SBC (ZP),Y | $F1 | (ZP),Y | 2 | 5

SEC: set carry flag

Carry bitini yak.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt SEC | $38 | — | 1 | 2

SED: set decimal mode

Desimal mode geçme flag'ını yak.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt SED | $F8 | — | 1 | 2

SEI: set interrupt disablebit

Interrupt'a izin vermeyen biti yak.

Flaglar: N Z C I D V +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt SEI | $78 | — | 1 | 2

STA: store accu

Aküyü, hafızaya sakla.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt STA OP | $85 | ZP | 2 | 3 STA OP,X | $95 | ZPX | 2 | 4 STA OP | $8D | ABS | 3 | 4 STA OP,X | $9D | ABX | 3 | 5 STA OP,Y | $99 | ABY | 3 | 5 STA (ZP,X) | $81 | (ZP,X) | 2 | 6 STA (ZP),Y | $91 | (ZP),Y | 2 | 6

STX: store X-register

X-registerini hafızaya sakla.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt STX OP | $86 | ZP | 2 | 3 STX OP,Y | $96 | ZPY | 2 | 4 STX OP | $8E | ABS | 3 | 4

STY: store Y-register

Y-registerini, hafızaya sakla.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt STY OP | $84 | ZP | 2 | 3 STY OP,X | $94 | ZPX | 2 | 4 STY OP | $8C | ABS | 3 | 4

TAX: transfer accu to X-register

Aküyü, X-registerine sakla.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TAX | $AA | — | 1 | 2

TAY: transfer accu to Y-register

Aküyü, Y-registerine sakla

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TAY | $A8 | — | 1 | 2

TSX: transfer stackpointer to X-register

Yığın göstergecini, X-registerine sakla.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TSX | $BA | — | 1 | 2

TXA: transfer X-register to accu

X-registerini, aküye sakla.

Flaglar: N Z C I D V + +

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TXA | $8A | — | 1 | 2

TXS: transfer X-register to stackpointer

X-registerini, yığın göstergecine kopyala.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TXS | $9A | — | 1 | 2

TYA: transfer Y-register to accu

Y-registerini, aküye sakla.

Flaglar: N Z C I D V hiçbiri

Adresleme Tipleri

Assembler: | Kod: | Kısaltma: | Byte: | Takt TYA | $98 | — | 1 | 2

Ve son olarak üçüncü tablo:

ABS: absolut

Operand dört basamaklı, hekza-

desimal bir sayıdır.

Örnek:

LDA $C000

$C000 adresli hafızanın içeriği aküye yüklenir.

ABX: absolut X-indeksli Operand dört basamaklı, hekzadesimal bir sayıdır. X-registerinin içeriği, operanda toplanır ve böylece aktif adres elde edilir. İşlem, bu adresle yürütülür.

Örnek:

LDX #$10

LDA $C000,X

$C010 ($C000 + $10) adresli hafızanın içeriği aküye yüklenir.

ABY: absolut Y-indeksli Operand dört basamaklı, hekzadesimal bir sayıdır. Y-registerinin içeriği, operanda toplanır ve böylece aktif adres elde edilir. İşlem, bu adresle yürütülür.

Örnek:

LDY #$10

LDA $C000,Y

$C010 ($C000 + $10) adresli hafızanın içeriği aküye yüklenir.

Byte: İlk iki tabloda kullanılan bu kısaltmanın anlamı, tüm bir komutun, operandlarıyla beraber uzunluğudur.

Flaglar: Durum registerinin her bir biti.

N: negative flag. Son yapılan işlemde, yedinci bitin yanık olup olmadığını gösterir.

Z: zero flag. Son yapılan işlemin sonucunun sıfır olup olmadığını gösterir.

C: carry flag. Son yapılan işlemdeki carry durumunu gösterir.

I: interrupt disable flag. Bu flag yanık olduğu zaman interrupt'lar engellenir.

D: decimal mode flag. Bu flag yakıldığında, ana işlem ünitesi, kısmen desimal (ondalık) modda işlem yapar. Örneğin: bu modda $01 ile $09'u toplarsak $0A değil $10 elde ederiz. Böylece ikili-onlu ve onlu-ikili dönüşümlerinden kurtuluruz.

V: overflow flag. Son yapılan işlemde taşıma (overflow) olup olmadığını gösterir.

IM: immediate Bu adresleme tipinde, operand bir byte uzunluğundadır ve bu operand doğrudan değeri ile kullanılır.

Örnek:

LDA #$00

$00 değeri doğrudan aküye yüklenir.

OP: operand Her adresleme tipinin gerektirdiği ve komutla beraber yürüyen komutun uzantıları.

ZP: zeropage (sıfırıncı sayfa) Adres, iki yerine bir byte'la gösterilir. Diğer byte olarak $00 kullanılır. Bu yöntemle, yalnızca hafızanın ilk 256 byte'ını adresleyebiliriz. ($0000'dan $00FF'e kadar)

Örnek:

LDA $2B

$002B adresli hafızanın içeriği aküye yüklenir.

ZPX: zeropage X-indeksli Adres için belirtilen byte'a X-registeri toplanır. Sonucun sadece sekiz biti kullanılır. Yukarıdaki şekilde onaltı bite genişletilir.

Örnek:

LDX #$30

LDA $F0,X

Yüklenen adres $0120 değil, $0020'dir. Bu adreslemenin sonunda sıfırıncı sayfanın dışına çıkamayız.

(ZP,X): indersli indirekt Operand byte' ile X-registeri toplanır. Sonuçta sıfırıncı sayfada, esas istediğimiz adresi belirten göstergecin adresini elde ederiz.

Örnek:

$20 adresli hafıza $00 içersin.

$21 adresli hafıza $CD içersin.

LDX #$0E

LDA ($12,X)

$0020 ($0012 + $000E) ve $0021 hafızaları $C000 adresini gösterir. Aküye, bu adresin içeriği yüklenir.

(ZP),Y: indirekt indeksli Operand byte'ı, sıfırıncı sayfada bir göstergecin sonrası oluşturur. Bu göstergece, Y-registerinin içeriği de toplanınca esas çalışma süresi elde edilir.

Örnek:

$20 adresli hafıza $00 içersin.

$21 adresli hafıza $C0 içersin.

LDY #$10

LDA ($20),Y

$C010 ($C000 + $0010) adresli hafızanın içeriği aküye yüklenir.

Takt: Komutun harcadığı zaman COMMODORE 64, aşağı yukarı 1 MHz civarında bir frekansla çalışır. Buna göre her bir takt bir mikrosaniye (saniyenin milyonda biri) sürer. Bu hesapla herhangi bir komutun ne kadar zaman süreceğini bulabiliriz.

Örnek:

RTS işlemi 6 mikrosaniye, LDA $00 işlemi de 2mikrosaniye sürer. Yani saniyede LDA $00 benzeri işlemlerden 500000 adet yürütülebilir.

Bu yazıdaki programlar

Dergideki dökümlerden çıkarıldı; satırlar derginin kontrol toplamlarıyla doğrulandı ve programlar VICE emülatöründe denendi. Tarayıcıdaki C64'te çalıştırabilir, indirip bir emülatöre sürükleyip bırakabilir ya da gerçek bir C64'te LOAD "AD",8,1 ile yükleyebilirsiniz. "Sorun bulundu" yazanlarda bazı satırlar okunamadı ya da tutmadı; düzeltilmiş bir sürümünüz varsa contact@coze.org adresine gönderin.