na podstawie zrodel ASAP/Fox
#n - dane w trybie natychmiastowym
Q - adres dwubajtowy
Z - adres jednobajtowy danych lub adresu pośredniego
* - dodać cykl przy zmienia strony
ANC / ANC STABILNY
--------------------
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 STABILNY
--------------------
Wykonuje AND pomiedzy A i rejestrem X, wynik zapisuje w pamięci. Rejestry A i X pozostaja 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 STABILNY
--------------------
Wykonuje AND na A i danej, następnie LSR @
Znaczniki: Z,C
Assembler |kod|dł.|cykle
-----------|---|---|-----
ALR #n |$4B| 2 | 2
SBX / SBX STABILNY
--------------------
Wykonuje AND pomiedzy rejestrem X i A, wynik w rejestrze X.
Znacznik C ustawiany gdy zawartosc rejestru X jest wieksza lub rowna danej.
Od rejestru X odejmuje dana (bez pozyczki).
Znaczniki: N,Z,C
Assembler |kod|dł.|cykle
-----------|---|---|-----
SBX #n |$CB| 2 | 2
DCM / DCP STABILNY
--------------------
Zmniejsza o jeden wartosc bajtu pamieci nastepnie wykonuje CMP na A i tej wartosci.
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 STABILNY
--------------------
Zwieksza o jeden zawartosc pamieci. Od A odejmuje wartosc pamieci (z pozyczka).
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 STABILNY
--------------------
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) STABILNY
--------------------
Dwobajtowy 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) STABILNY
--------------------
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 (?) STABILNY
--------------------
Niepublikowany SBC #n
Znaczniki: N,V,Z,C
Assembler |kod|dł.|cykle
-----------|---|---|-----
SBC #n |$EB| 2 | 2
LAX / LAX STABILNY
--------------------
Zaladuje dana 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 STABILNY
--------------------
Wykonuje ROL na pamieci, nastepnie 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 STABILNY
--------------------
Wykonuje ROR na pamieci, nastepnie 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 STABILNY
--------------------
Wykonuje ASL na pamieci, nastepnie 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 STABILNY
--------------------
Wykonuje LSR na pamieci, nastepnie 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 STABILNY
--------------------
Do starszego bajtu adresu dodaje jeden i wykonuje AND z rejestrem X.
Tak otrzymana wartosc zapisuje w pamieci.
Jesli bylo przekroczenie granicy strony zapis nastapi pod adresem ktorego starszy bajt jest rowny otrzymanej wartosci.
Znaczniki: -
Assembler |kod|dł.|cykle
-----------|---|---|-----
SHX Q,Y |$9E| 3 | 5
SHY / SHY STABILNY
--------------------
Do starszego bajtu adresu dodaje jeden i wykonuje AND z rejestrem Y.
Tak otrzymana wartosc zapisuje w pamieci.
Jesli bylo przekroczenie granicy strony zapis nastapi pod adresem ktorego starszy bajt jest rowny otrzymanej wartosci.
Znaczniki: -
Assembler |kod|dł.|cykle
-----------|---|---|-----
SHY Q,X |$9C| 3 | 5
ARR / ARR STABILNY
--------------------
Gdy znacznik D=0 rozkaz dziala nastepujaco:
Wykonuje AND na A i danej po czym ROR.
Znacznik C wpisuje do b7, b6 do znacznika C, do V b6 EOR b5.
Gdy znacznik D=1 - uzupelnic
Znaczniki: N,V,Z,C
Assembler |kod|dł.|cykle
-----------|---|---|-----
ARR #n |$6B| 2 | 2
CIM / CIM (?) NIESTABILNY
---------------------------
Blokuje procesor. Jesli pojawilby sie softcore zamiennik 6502C bylo by to dobre miejsce na rozszerzenie CPU - w 100% zgodne z istniejacym oprogramowanie.
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 NIESTABILNY
-----------------------
Do starszego bajtu adresu dodaje jeden i wykonuje AND z A, nastepnie AND z rejestrem X.
Tak otrzymana wartosc zapisuje w pamieci.
Jesli bylo przekroczenie granicy strony zapis nastapi pod adresem
ktorego starszy bajt jest rowny otrzymanej wartosci.
Znaczniki: -
Assembler |kod|dł.|cykle
-----------|---|---|-----
SHA Q,Y |$9F| 3 | 5
SHA (Z),Y |$93| 2 | 6
SHS / SHS NIESTABILNY
-----------------------
Do rejestru S zapisuje wynik operacji A AND X nastepnie do starszego bajtu adresu dodaje
jeden, wykonuje AND z S i zapisuje wynik w pamieci.
Jesli bylo przekroczenie granicy strony zapis nastapi pod adresem
ktorego starszy bajt jest rowny otrzymanej wartosci.
Znaczniki: -
Assembler |kod|dł.|cykle
-----------|---|---|-----
SHS Q,Y |$9B| 3 | 5
LAS / LAS NIESTABILNY
-----------------------
Wykonuje AND na zawartosci pamieci 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 NIESTABILNY
-----------------------
Znaczniki procesora ustawiane są wg. operacji argument AND A.
Rozkaz najpierw wykonuje sume logiczna argumentu i wartosci $EF, następnie operacji AND na rejestrze X i wyniku. Następnie z tak otrzymaną wartością wykona AND z A. Wynik w A.
Znaczniki: N,Z
Assembler |kod|dł.|cykle
-----------|---|---|-----
Immediate |XAA #arg |$8B| 2 | 2
ANX / ANX NIESTABILNY
-----------------------
Wykonuje operację argument AND A, wynik zapisuje w A oraz rejetrze X.
Znaczniki: N,Z
Assembler |kod|dł.|cykle
-----------|---|---|-----
ANX #n |$AB| 2 | 2
---
lista po sprawdzeniu bedzie modyfikowana. jesli ktos ma informacje (najlepiej wyniki testow) potrzebne do weryfikacji polecam sie.
ponizej program testowy na jeden z rozkazow DO SPRAWDZENIA, program Foxa w zrodlach i po skompilowaniu.
zrodla: http://asap.git.sourceforge.net/git/git … 8a;hb=HEAD
i jeszcze raz: prosze uruchamiac na standardowym atari xl/xe