Nieudokumentowane rozkazy 6502C

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 09:43, 27 mar 2012
0xF (Dyskusja | wkład)
(listerówki)
← Previous diff
Wersja z dnia 13:18, 23 kwi 2012
Xxl (Dyskusja | wkład)

Next diff →
Linia 1: Linia 1:
-Listę niepublikowanych kodów (zwanych również rozkazami nielegalnymi) [[6502C]] [[SALLY]] można podzielić na dwie grupy. Kody stabilne działają na wszystkich komputerach Atari serii [[XL]]/[[XE]] oraz tej części modeli [[400]]/[[800]] w której montowano procesor [[6502C]] [[SALLY]], natomiast kody niestabilne na procesorze [[6502C]] działają w sposób nieprzewidywalny.+Listę niepublikowanych kodów (zwanych również rozkazami nielegalnymi) [[6502C]] [[SALLY]] można podzielić na dwie grupy. [[Nieudokumentowane_rozkazy_6502C#KODY STABILNE|Kody stabilne]] działają na wszystkich komputerach Atari serii [[XL]]/[[XE]] oraz tej części modeli [[400]]/[[800]] w której montowano procesor [[6502C]] [[SALLY]], natomiast [[Nieudokumentowane_rozkazy_6502C#KODY NIESTABILNE|kody niestabilne]] na procesorze [[6502C]] działają w sposób nieprzewidywalny.
Legenda: Legenda:
Linia 336: Linia 336:
|ARR #n || $6B || 2 || 2 |ARR #n || $6B || 2 || 2
|} |}
 +
== KODY NIESTABILNE == == KODY NIESTABILNE ==

Wersja z dnia 13:18, 23 kwi 2012

Listę niepublikowanych kodów (zwanych również rozkazami nielegalnymi) 6502C SALLY można podzielić na dwie grupy. Kody stabilne działają na wszystkich komputerach Atari serii XL/XE oraz tej części modeli 400/800 w której montowano procesor 6502C SALLY, natomiast kody niestabilne na procesorze 6502C działają w sposób nieprzewidywalny.

Legenda:
n - dane w trybie natychmiastowym,
Q - adres dwubajtowy,
Z - adres jednobajtowy danych lub adresu pośredniego,
* - dodać cykl przy zmianie strony.
Użyto mnemoników stosowanych w emulatorze Atari800Win PLus oraz makroassemblerze MADS.

KODY STABILNE

ANC / ANC
Wykonuje AND na A i danej. Znacznik C ustawiany tak jak N.
Znaczniki: N,Z,C

Assembler kod dł. cykle
ANC #n $0B 2 2
ANC #n $2B 2 2


SAX / SAX
Wykonuje AND pomiędzy A i rejestrem X, wynik zapisuje w pamięci. Rejestry A i X pozostają niezmienione.
Znaczniki: -

Assembler kod dł. cykle
SAX Z $87 2 3
SAX Z,Y $97 2 4
SAX (Z,X) $83 2 6
SAX Q $8F 3 4


ALR / ALR
Wykonuje AND na A i danej, następnie LSR @.
Znaczniki: N,Z,C

Assembler kod dł. cykle
ALR #n $4B 2 2


SBX / SBX
Wykonuje AND pomiędzy rejestrem X i A, wynik w rejestrze X. Znacznik C ustawiany gdy zawartość rejestru X jest większa lub równa danej. Od rejestru X odejmuje daną (bez pożyczki).
Znaczniki: N,Z,C

Assembler kod dł. cykle
SBX #n $CB 2 2


DCM / DCP
Zmniejsza o jeden wartość bajtu pamięci następnie wykonuje CMP na A i tej wartości.
Znaczniki: N,Z,C

Assembler kod dł. cykle
DCP Z $C7 2 5
DCP Z,X $D7 2 6
DCP Q $CF 3 6
DCP Q,X $DF 3 7
DCP Q,Y $DB 3 7
DCP (Z,X) $C3 2 8
DCP (Z),Y $D3 2 8


INS / ISB
Zwiększa o jeden zawartość pamięci. Od A odejmuje wartość pamięci (z pożyczką).
Znaczniki: N,V,Z,C

Assembler kod dł. cykle
ISB Z $E7 2 5
ISB Z,X $F7 2 6
ISB Q $EF 3 6
ISB Q,X $FF 3 7
ISB Q,Y $FB 3 7
ISB (Z,X) $E3 2 8
ISB (Z),Y $F3 2 8


NOP / NPO
Niepublikowany NOP
Znaczniki: -

Assembler kod dł. cykle
NPO $1A 1 2
NPO $3A 1 2
NPO $5A 1 2
NPO $7A 1 2
NPO $DA 1 2
NPO $FA 1 2


NOP / NPO (DOP)
Dwubajtowy NOP
Znaczniki: -

Assembler kod dł. cykle
NPO Z $04 2 3
NPO Z,X $14 2 4
NPO Z,X $34 2 4
NPO Z $44 2 3
NPO Z,X $54 2 4
NPO Z $64 2 3
NPO Z,X $74 2 4
NPO #n $80 2 2
NPO #n $82 2 2
NPO #n $89 2 2
NPO #n $C2 2 2
NPO Z,X $D4 2 4
NPO #n $E2 2 2
NPO Z,X $F4 2 4


NOP / NPO (TOP)
Trzybajtowy NOP
Znaczniki: -

Assembler kod dł. cykle
NPO Q $0C 3 4
NPO Q,X $1C 3 4 *
NPO Q,X $3C 3 4 *
NPO Q,X $5C 3 4 *
NPO Q,X $7C 3 4 *
NPO Q,X $DC 3 4 *
NPO Q,X $FC 3 4 *


SBC / SBC (?)
Niepublikowany SBC #n.
Znaczniki: N,V,Z,C

Assembler kod dł. cykle
SBC #n $EB 2 2


LAX / LAX
Załaduje daną do A i rejestru X.
Znaczniki: N,Z

Assembler kod dł. cykle
LAX Z $A7 2 3
LAX Z,Y $B7 2 4
LAX Q $AF 3 4
LAX Q,Y $BF 3 4 *
LAX (Z,X) $A3 2 6
LAX (Z),Y $B3 2 5 *


RLA / RLN
Wykonuje ROL na pamięci, następnie AND z A (wynik w A).
Znaczniki: N,Z,C

Assembler kod dł. cykle
RLN Z $27 2 5
RLN Z,X $37 2 6
RLN Q $2F 3 6
RLN Q,X $3F 3 7
RLN Q,Y $3B 3 7
RLN (Z,X) $23 2 8
RLN (Z),Y $33 2 8


RRA / RRD
Wykonuje ROR na pamięci, następnie ADC z A (wynik w A).
Znaczniki: N,V,Z,C

Assembler kod dł. cykle
RRD Z $67 2 5
RRD Z,X $77 2 6
RRD Q $6F 3 6
RRD Q,X $7F 3 7
RRD Q,Y $7B 3 7
RRD (Z,X) $63 2 8
RRD (Z),Y $73 2 8


ASO / ASO
Wykonuje ASL na pamięci, następnie ORA z A (wynik w A).
Znaczniki: N,Z,C

Assembler kod dł. cykle
ASO Z $07 2 5
ASO Z,X $17 2 6
ASO Q $0F 3 6
ASO Q,X $1F 3 7
ASO Q,Y $1B 3 7
ASO (Z,X) $03 2 8
ASO (Z),Y $13 2 8


LSE / LSE
Wykonuje LSR na pamięci, następnie EOR z A (wynik w A).
Znaczniki: N,Z,C

Assembler kod dł. cykle
LSE Z $47 2 5
LSE Z,X $57 2 6
LSE Q $4F 3 6
LSE Q,X $5F 3 7
LSE Q,Y $5B 3 7
LSE (Z,X) $43 2 8
LSE (Z),Y $53 2 8


SHX / SHX
Do starszego bajtu adresu dodaje jeden i wykonuje AND z rejestrem X. Tak otrzymaną wartość zapisuje w pamięci. Jeśli nastąpiło przekroczenie granicy strony zapis wykona pod adresem którego starszy bajt jest równy otrzymanej wartości.
Znaczniki: -

Assembler kod dł. cykle
SHX Q,Y $9E 3 5


SHY / SHY
Do starszego bajtu adresu dodaje jeden i wykonuje AND z rejestrem Y. Tak otrzymana wartość zapisuje w pamięci. Jeśli nastąpiło przekroczenie granicy strony zapis wykona pod adresem którego starszy bajt jest równy otrzymanej wartości.
Znaczniki: -

Assembler kod dł. cykle
SHY Q,X $9C 3 5


ARR / ARR
Gdy znacznik D=0 rozkaz działa następująco:
Wykonuje AND na A i danej po czym ROR.
Znacznik C wpisuje do b7, b6 do znacznika C, do V b6 EOR b5.
Znaczniki: N,V,Z,C

Assembler kod dł. cykle
ARR #n $6B 2 2


KODY NIESTABILNE


CIM / CIM
Blokuje procesor.
Znaczniki: -

Assembler kod dł. cykle
CIM $02 1 -
CIM $12 1 -
CIM $22 1 -
CIM $32 1 -
CIM $42 1 -
CIM $52 1 -
CIM $62 1 -
CIM $72 1 -
CIM $92 1 -
CIM $B2 1 -
CIM $D2 1 -
CIM $F2 1 -


SHA / SHA
Do starszego bajtu adresu dodaje jeden i wykonuje AND z A, następnie AND z rejestrem X. Tak otrzymaną wartość zapisuje w pamięci. Jeśli nastąpi przekroczenie granicy strony zapis wykona pod adresem którego starszy bajt jest równy otrzymanej wartości.
Znaczniki: -

Assembler kod dł. cykle
SHA Q,Y $9F 3 5
SHA (Z),Y $93 2 6


SHS / SHS
Do rejestru S zapisuje wynik operacji A AND X następnie do starszego bajtu adresu dodaje jeden, wykonuje AND z S i zapisuje wynik w pamięci. Jeśli nastąpi przekroczenie granicy strony zapis wykona pod adresem którego starszy bajt jest równy otrzymanej wartości.
Znaczniki: -

Assembler kod dł. cykle
SHS Q,Y $9B 3 5


LAS / LAS
Wykonuje AND na zawartości pamięci i rejestru S, wynik zapisuje w rejestrach A, X, S.
Znaczniki: N,Z

Assembler kod dł. cykle
LAS Q,Y $BB 3 4 *


ANE / ANE
Znaczniki procesora ustawiane są wg. operacji argument AND A.
Rozkaz najpierw wykonuje sumę logiczną argumentu i wartości $EF, następnie operacji AND na rejestrze X i wyniku. W kolejnym kroku z tak otrzymaną wartością wykona AND z A. Wynik w A.
Znaczniki: N,Z

Assembler kod dł. cykle
ANE #n $8B 2 2


ANX / ANX
Wykonuje operację argument AND A, wynik zapisuje w A oraz rejetrze X.
Znaczniki: N,Z

Assembler kod dł. cykle
ANX #n $AB 2 2



CIEKAWOSTKI

Rozkazy niepublikowane użyte zostały w grze Alley Cat.

Personal tools