home *** CD-ROM | disk | FTP | other *** search
-
- "eXTRA iNSTRUCTIONS oF tHE 65xx sERIES cpu"
-
- bY: aDAM vARDY (ABE0084@INFONET.ST-JOHNS.NF.CA)
-
-
- [fILE CREATED: 22, aUG. 1995... 27, sEPT. 1996]
-
- tHE FOLLOWING IS A LIST OF 65xx/85xx EXTRA OPCODES. tHE OPERATION CODES
- FOR THE 6502 cpu FIT IN A SINGLE BYTE; OUT OF 256 POSSIBLE COMBINATIONS,
- ONLY 151 ARE "LEGAL." tHIS TEXT DESCRIBES THE OTHER 256-151= 105 OPERATION
- CODES. tHESE OPCODES ARE NOT GENERALLY RECOGNIZED AS PART OF THE 6502
- INSTRUCTION SET. tHEY ARE ALSO REFERRED TO AS UNDEFINED OPCODES OR
- UNDOCUMENTED OPCODES OR NON-STANDARD OPCODES OR UNOFFICIAL OPCODES. iN
- "tHE cOMMODORE 64 pROGRAMMER'S rEFERENCE gUIDE" THEIR HEXADECIMAL VALUES
- ARE SIMPLY MARKED AS FUTURE EXPANSION. tHIS LIST OF OPCODES WAS COMPILED
- WITH HELP FROM "tHE cOMPLETE iNNER sPACE aNTHOLOGY" BY kARL j. h. hILDON.
-
- i HAVE MARKED OFF THE BEGINNING OF THE DESCRIPTION OF EACH OPCODE WITH A
- FEW ASTERISKS. aT TIMES, i ALSO INCLUDED AN ALTERNATE NAME IN PARENTHESIS.
- aLL OPCODE VALUES ARE GIVEN IN HEXADECIMAL. tHESE HEXADECIMAL VALUES ARE
- LISTED IMMEDIATELY TO THE RIGHT OF ANY SAMPLE CODE. tHE LOWERCASE LETTERS
- FOUND IN THESE EXAMPLES REPRESENT THE HEX DIGITS THAT YOU MUST PROVIDE AS
- THE INSTRUCTION'S IMMEDIATE BYTE VALUE OR AS THE INSTRUCTION'S DESTINATION
- OR SOURCE ADDRESS. tHUS IMMEDIATE VALUES AND ZERO PAGE ADDRESSES ARE
- REFERRED TO AS 'AB'. fOR ABSOLUTE ADDRESSING MODE THE TWO BYTES OF AN
- ABSOLUTE ADDRESS ARE REFERRED TO AS 'CD' AND 'AB'.
-
- eXECUTION TIMES FOR ALL OPCODES ARE GIVEN ALONGSIDE TO THE VERY RIGHT OF
- ANY SAMPLE CODE. a NUMBER OF THE OPCODES DESCRIBED HERE COMBINE THE
- OPERATION OF TWO REGULAR 6502 INSTRUCTIONS. yOU CAN REFER TO A BOOK ON THE
- 6502 INSTRUCTION SET FOR MORE INFORMATION, SUCH AS WHICH FLAGS A PARTICULAR
- INSTRUCTION AFFECTS.
-
-
- aso *** (slo)
- tHIS OPCODE aslS THE CONTENTS OF A MEMORY LOCATION AND THEN orS THE RESULT
- WITH THE ACCUMULATOR.
-
- sUPPORTED MODES:
-
- aso ABCD ;0f CD AB ;nO. cYCLES= 6
- aso ABCD,x ;1f CD AB ; 7
- aso ABCD,y ;1b CD AB ; 7
- aso AB ;07 AB ; 5
- aso AB,x ;17 AB ; 6
- aso (AB,x) ;03 AB ; 8
- aso (AB),y ;13 AB ; 8
-
- (sUB-INSTRUCTIONS: ora, asl)
-
- hERE IS AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
-
- aso $c010 ;0f 10 c0
-
- hERE IS THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- asl $c010
- ora $c010
-
- rla ***
- rla rolS THE CONTENTS OF A MEMORY LOCATION AND THEN andS THE RESULT WITH
- THE ACCUMULATOR.
-
- sUPPORTED MODES:
-
- rla ABCD ;2f CD AB ;nO. cYCLES= 6
- rla ABCD,x ;3f CD AB ; 7
- rla ABCD,y ;3b CD AB ; 7
- rla AB ;27 AB ; 5
- rla AB,x ;37 AB ; 6
- rla (AB,x) ;23 AB ; 8
- rla (AB),y ;33 AB ; 8
-
- (sUB-INSTRUCTIONS: and, rol)
-
- hERE'S AN EXAMPLE OF HOW YOU MIGHT WRITE IT IN A PROGRAM.
-
- rla $fc,x ;37 fc
-
- hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- rol $fc,x
- and $fc,x
-
- lse *** (sre)
- lse lsrS THE CONTENTS OF A MEMORY LOCATION AND THEN eorS THE RESULT WITH
- THE ACCUMULATOR.
-
- sUPPORTED MODES:
-
- lse ABCD ;4f CD AB ;nO. cYCLES= 6
- lse ABCD,x ;5f CD AB ; 7
- lse ABCD,y ;5b CD AB ; 7
- lse AB ;47 AB ; 5
- lse AB,x ;57 AB ; 6
- lse (AB,x) ;43 AB ; 8
- lse (AB),y ;53 AB ; 8
-
- (sUB-INSTRUCTIONS: eor, lsr)
-
- eXAMPLE:
-
- lse $c100,x ;5f 00 c1
-
- hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- lsr $c100,x
- eor $c100,x
-
- rra ***
- rra rorS THE CONTENTS OF A MEMORY LOCATION AND THEN adcS THE RESULT WITH
- THE ACCUMULATOR.
-
- sUPPORTED MODES:
-
- rra ABCD ;6f CD AB ;nO. cYCLES= 6
- rra ABCD,x ;7f CD AB ; 7
- rra ABCD,y ;7b CD AB ; 7
- rra AB ;67 AB ; 5
- rra AB,x ;77 AB ; 6
- rra (AB,x) ;63 AB ; 8
- rra (AB),y ;73 AB ; 8
-
- (sUB-INSTRUCTIONS: adc, ror)
-
- eXAMPLE:
-
- rra $030c ;6f 0c 03
-
- eQUIVALENT INSTRUCTIONS:
-
- ror $030c
- adc $030c
-
- axs *** (sax)
- axs andS THE CONTENTS OF THE a AND x REGISTERS (WITHOUT CHANGING THE
- CONTENTS OF EITHER REGISTER) AND STORES THE RESULT IN MEMORY.
- axs DOES NOT AFFECT ANY FLAGS IN THE PROCESSOR STATUS REGISTER.
-
- sUPPORTED MODES:
-
- axs ABCD ;8f CD AB ;nO. cYCLES= 4
- axs AB ;87 AB ; 3
- axs AB,y ;97 AB ; 4
- axs (AB,x) ;83 AB ; 6
-
- (sUB-INSTRUCTIONS: sta, stx)
-
- eXAMPLE:
-
- axs $fe ;87 fe
-
- hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- stx $fe
- pha
- and $fe
- sta $fe
- pla
-
- lax ***
- tHIS OPCODE LOADS BOTH THE ACCUMULATOR AND THE x REGISTER WITH THE CONTENTS
- OF A MEMORY LOCATION.
-
- sUPPORTED MODES:
-
- lax ABCD ;af CD AB ;nO. cYCLES= 4
- lax ABCD,y ;bf CD AB ; 4*
- lax AB ;a7 AB ;*=ADD 1 3
- lax AB,y ;b7 AB ;IF PAGE 4
- lax (AB,x) ;a3 AB ;BOUNDARY 6
- lax (AB),y ;b3 AB ;IS CROSSED 5*
-
- (sUB-INSTRUCTIONS: lda, ldx)
-
- eXAMPLE:
-
- lax $8400,y ;bf 00 84
-
- eQUIVALENT INSTRUCTIONS:
-
- lda $8400,y
- ldx $8400,y
-
- dcm *** (dcp)
- tHIS OPCODE decS THE CONTENTS OF A MEMORY LOCATION AND THEN cmpS THE RESULT
- WITH THE a REGISTER.
-
- sUPPORTED MODES:
-
- dcm ABCD ;cf CD AB ;nO. cYCLES= 6
- dcm ABCD,x ;df CD AB ; 7
- dcm ABCD,y ;db CD AB ; 7
- dcm AB ;c7 AB ; 5
- dcm AB,x ;d7 AB ; 6
- dcm (AB,x) ;c3 AB ; 8
- dcm (AB),y ;d3 AB ; 8
-
- (sUB-INSTRUCTIONS: cmp, dec)
-
- eXAMPLE:
-
- dcm $ff ;c7 ff
-
- eQUIVALENT INSTRUCTIONS:
-
- dec $ff
- cmp $ff
-
- ins *** (isc)
- tHIS OPCODE incS THE CONTENTS OF A MEMORY LOCATION AND THEN sbcS THE RESULT
- FROM THE a REGISTER.
-
- sUPPORTED MODES:
-
- ins ABCD ;ef CD AB ;nO. cYCLES= 6
- ins ABCD,x ;ff CD AB ; 7
- ins ABCD,y ;fb CD AB ; 7
- ins AB ;e7 AB ; 5
- ins AB,x ;f7 AB ; 6
- ins (AB,x) ;e3 AB ; 8
- ins (AB),y ;f3 AB ; 8
-
- (sUB-INSTRUCTIONS: sbc, inc)
-
- eXAMPLE:
-
- ins $ff ;e7 ff
-
- eQUIVALENT INSTRUCTIONS:
-
- inc $ff
- sbc $ff
-
- alr ***
- tHIS OPCODE andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND
- THEN lsrS THE RESULT.
-
- oNE SUPPORTED MODE:
-
- alr #AB ;4b AB ;nO. cYCLES= 2
-
- eXAMPLE:
-
- alr #$fe ;4b fe
-
- eQUIVALENT INSTRUCTIONS:
-
- and #$fe
- lsr a
-
- arr ***
- tHIS OPCODE andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND
- THEN rorS THE RESULT.
-
- oNE SUPPORTED MODE:
-
- arr #AB ;6b AB ;nO. cYCLES= 2
-
- hERE'S AN EXAMPLE OF HOW YOU MIGHT WRITE IT IN A PROGRAM.
-
- arr #$7f ;6b 7f
-
- hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- and #$7f
- ror a
-
- xaa ***
- xaa TRANSFERS THE CONTENTS OF THE x REGISTER TO THE a REGISTER AND THEN
- andS THE a REGISTER WITH AN IMMEDIATE VALUE.
-
- oNE SUPPORTED MODE:
-
- xaa #AB ;8b AB ;nO. cYCLES= 2
-
- eXAMPLE:
-
- xaa #$44 ;8b 44
-
- eQUIVALENT INSTRUCTIONS:
-
- txa
- and #$44
-
- oal ***
- tHIS OPCODE orS THE a REGISTER WITH #$ee, andS THE RESULT WITH AN IMMEDIATE
- VALUE, AND THEN STORES THE RESULT IN BOTH a AND x.
-
- oNE SUPPORTED MODE:
-
- oal #AB ;ab AB ;nO. cYCLES= 2
-
- hERE'S AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
-
- oal #$aa ;ab aa
-
- hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS:
-
- ora #$ee
- and #$aa
- tax
-
- sax ***
- sax andS THE CONTENTS OF THE a AND x REGISTERS (LEAVING THE CONTENTS OF a
- INTACT), SUBTRACTS AN IMMEDIATE VALUE, AND THEN STORES THE RESULT IN x.
- ... a FEW POINTS MIGHT BE MADE ABOUT THE ACTION OF SUBTRACTING AN IMMEDIATE
- VALUE. iT ACTUALLY WORKS JUST LIKE THE cmp INSTRUCTION, EXCEPT THAT cmp
- DOES NOT STORE THE RESULT OF THE SUBTRACTION IT PERFORMS IN ANY REGISTER.
- tHIS SUBTRACT OPERATION IS NOT AFFECTED BY THE STATE OF THE cARRY FLAG,
- THOUGH IT DOES AFFECT THE cARRY FLAG. iT DOES NOT AFFECT THE oVERFLOW
- FLAG.
-
- oNE SUPPORTED MODE:
-
- sax #AB ;cb AB ;nO. cYCLES= 2
-
- eXAMPLE:
-
- sax #$5a ;cb 5a
-
- eQUIVALENT INSTRUCTIONS:
-
- sta $02
- txa
- and $02
- sec
- sbc #$5a
- tax
- lda $02
-
- nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE sax OPCODE.
-
- nop ***
- nop PERFORMS NO OPERATION. oPCODES: 1a, 3a, 5a, 7a, da, fa.
- tAKES 2 CYCLES TO EXECUTE.
-
- skb ***
- skb STANDS FOR SKIP NEXT BYTE.
- oPCODES: 80, 82, c2, e2, 04, 14, 34, 44, 54, 64, 74, d4, f4.
- tAKES 2, 3, OR 4 CYCLES TO EXECUTE.
-
- skw ***
- skw SKIPS NEXT WORD (TWO BYTES).
- oPCODES: 0c, 1c, 3c, 5c, 7c, dc, fc.
- tAKES 4 CYCLES TO EXECUTE.
-
- tO BE DIZZYINGLY PRECISE, skw ACTUALLY PERFORMS A READ OPERATION. iT'S
- JUST THAT THE VALUE READ IS NOT STORED IN ANY REGISTER. fURTHER, OPCODE 0c
- USES THE ABSOLUTE ADDRESSING MODE. tHE TWO BYTES WHICH FOLLOW IT FORM THE
- ABSOLUTE ADDRESS. aLL THE OTHER skw OPCODES USE THE ABSOLUTE INDEXED x
- ADDRESSING MODE. iF A PAGE BOUNDARY IS CROSSED, THE EXECUTION TIME OF ONE
- OF THESE skw OPCODES IS UPPED TO 5 CLOCK CYCLES.
- --------------------------------------------------------------------------
-
- tHE FOLLOWING OPCODES WERE DISCOVERED AND NAMED EXCLUSIVELY BY THE AUTHOR.
- (oR SO IT WAS THOUGHT BEFORE.)
-
- hlt ***
- hlt CRASHES THE MICROPROCESSOR. wHEN THIS OPCODE IS EXECUTED, PROGRAM
- EXECUTION CEASES. nO HARDWARE INTERRUPTS WILL EXECUTE EITHER. tHE AUTHOR
- HAS CHARACTERIZED THIS INSTRUCTION AS A HALT INSTRUCTION SINCE THIS IS THE
- MOST STRAIGHTFORWARD EXPLANATION FOR THIS OPCODE'S BEHAVIOUR. oNLY A RESET
- WILL RESTART EXECUTION. tHIS OPCODE LEAVES NO TRACE OF ANY OPERATION
- PERFORMED! nO REGISTERS AFFECTED.
-
- oPCODES: 02, 12, 22, 32, 42, 52, 62, 72, 92, b2, d2, f2.
-
- tas ***
- tHIS OPCODE andS THE CONTENTS OF THE a AND x REGISTERS (WITHOUT CHANGING
- THE CONTENTS OF EITHER REGISTER) AND TRANSFERS THE RESULT TO THE STACK
- POINTER. iT THEN andS THAT RESULT WITH THE CONTENTS OF THE HIGH BYTE OF
- THE TARGET ADDRESS OF THE OPERAND +1 AND STORES THAT FINAL RESULT IN
- MEMORY.
-
- oNE SUPPORTED MODE:
-
- tas ABCD,y ;9b CD AB ;nO. cYCLES= 5
-
- (sUB-INSTRUCTIONS: sta, txs)
-
- hERE IS AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
-
- tas $7700,y ;9b 00 77
-
- hERE IS THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
-
- stx $02
- pha
- and $02
- tax
- txs
- and #$78
- sta $7700,y
- pla
- ldx $02
-
- nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE tas OPCODE.
-
- aBOVE i USED THE PHRASE 'THE HIGH BYTE OF THE TARGET ADDRESS OF THE OPERAND
- +1'. bY THE WORDS TARGET ADDRESS, i MEAN THE UNINDEXED ADDRESS, THE ONE
- SPECIFIED EXPLICITLY IN THE OPERAND. tHE HIGH BYTE IS THEN THE SECOND BYTE
- AFTER THE OPCODE (AB). sO WE'LL SHORTEN THAT PHRASE TO ab+1.
-
- say ***
- tHIS OPCODE andS THE CONTENTS OF THE y REGISTER WITH <AB+1> AND STORES THE
- RESULT IN MEMORY.
-
- oNE SUPPORTED MODE:
-
- say ABCD,x ;9c CD AB ;nO. cYCLES= 5
-
- eXAMPLE:
-
- say $7700,x ;9c 00 77
-
- eQUIVALENT INSTRUCTIONS:
-
- pha
- tya
- and #$78
- sta $7700,x
- pla
-
- xas ***
- tHIS OPCODE andS THE CONTENTS OF THE x REGISTER WITH <AB+1> AND STORES THE
- RESULT IN MEMORY.
-
- oNE SUPPORTED MODE:
-
- xas ABCD,y ;9e CD AB ;nO. cYCLES= 5
-
- eXAMPLE:
-
- xas $6430,y ;9e 30 64
-
- eQUIVALENT INSTRUCTIONS:
-
- pha
- txa
- and #$65
- sta $6430,y
- pla
-
- axa ***
- tHIS OPCODE STORES THE RESULT OF a and x and THE HIGH BYTE OF THE TARGET
- ADDRESS OF THE OPERAND +1 IN MEMORY.
-
- sUPPORTED MODES:
-
- axa ABCD,y ;9f CD AB ;nO. cYCLES= 5
- axa (AB),y ;93 AB ; 6
-
- eXAMPLE:
-
- axa $7133,y ;9f 33 71
-
- eQUIVALENT INSTRUCTIONS:
-
- stx $02
- pha
- and $02
- and #$72
- sta $7133,y
- pla
- ldx $02
-
- nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE axa OPCODE.
-
-
- tHE FOLLOWING NOTES APPLY TO THE ABOVE FOUR OPCODES: tas, say, xas, axa.
-
- nONE OF THESE OPCODES AFFECT THE ACCUMULATOR, THE x REGISTER, THE y
- REGISTER, OR THE PROCESSOR STATUS REGISTER!
- tHE AUTHOR HAS NO EXPLANATION FOR THE COMPLEXITY OF THESE
- INSTRUCTIONS. iT IS HARD TO COMPREHEND HOW THE MICROPROCESSOR COULD HANDLE
- THE CONVOLUTED SEQUENCE OF EVENTS WHICH APPEARS TO OCCUR WHILE EXECUTING
- ONE OF THESE OPCODES. a PARTIAL EXPLANATION FOR WHAT IS GOING ON IS THAT
- THESE INSTRUCTIONS APPEAR TO BE CORRUPTIONS OF OTHER INSTRUCTIONS. fOR
- EXAMPLE, THE OPCODE say WOULD HAVE BEEN ONE OF THE ADDRESSING MODES OF THE
- STANDARD INSTRUCTION sty (ABSOLUTE INDEXED x) WERE IT NOT FOR THE FACT THAT
- THE NORMAL OPERATION OF THIS INSTRUCTION IS IMPAIRED IN THIS PARTICULAR
- INSTANCE.
-
- oNE IRREGULARITY UNCOVERED IS THAT SOMETIMES THE ACTUAL VALUE IS STORED IN
- MEMORY, AND THE and WITH <AB+1> PART DROPS OFF (EX. say BECOMES TRUE sty).
- tHIS HAPPENS VERY INFREQUENTLY. tHE BEHAVIOUR APPEARS TO BE CONNECTED WITH
- THE VIDEO DISPLAY. fOR EXAMPLE, IT NEVER SEEMS TO OCCUR IF EITHER THE
- SCREEN IS BLANKED OR c128 2mhZ MODE IS ENABLED.
-
- --- iMPORTED EXAMPLE ---
- hERE IS A DEMO PROGRAM TO ILLUSTRATE THE ABOVE EFFECT. sys 8200 TO TRY IT.
- tHERE IS NO EXIT, SO YOU'LL HAVE TO HIT sTOP-rESTORE TO QUIT. aND YOU MAY
- WANT TO CLEAR THE SCREEN BEFORE RUNNING IT. fOR CONTRAST, THERE IS A
- SECOND ROUTINE WHICH RUNS DURING IDLE STATE DISPLAY. uSE sys 8211 FOR IT.
- aFTER TRYING THE SECOND ROUTINE, CHECK IT OUT AGAIN USING poke 53269,255 TO
- ENABLE SPRITES.
-
- BEGIN 640 SAY->STY
- d"""b{$60}*{$60}@g{$60}{$60}%z$p,("p1t##[+!'0$/nb{$60}*{$60}@g{$60}{$60}%z-#z3!,@
- {$60}
- END
-
- --- tEXT IMPORT END ---
-
- warning: iF THE TARGET ADDRESS CROSSES A PAGE BOUNDARY BECAUSE OF INDEXING,
- THE INSTRUCTION MAY NOT STORE AT THE INTENDED ADDRESS. iT MAY END UP
- STORING IN ZERO PAGE, OR ANOTHER ADDRESS ALTOGETHER (PAGE=VALUE STORED).
- aPPARENTLY CERTAIN INTERNAL 65xx REGISTERS ARE BEING OVERRIDDEN. tHE WHOLE
- SCHEME BEHIND THIS ERRATIC BEHAVIOUR IS VERY COMPLEX AND STRANGE.
-
-
- aND CONTINUING WITH THE LIST...
-
- anc ***
- anc andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND THEN
- MOVES BIT 7 OF a INTO THE cARRY FLAG. tHIS OPCODE WORKS BASICALLY
- IDENTICALLY TO and #IMMED. EXCEPT THAT THE cARRY FLAG IS SET TO THE SAME
- STATE THAT THE nEGATIVE FLAG IS SET TO.
-
- oNE SUPPORTED MODE:
-
- anc #AB ;2b AB ;nO. cYCLES= 2
- anc #AB ;0b AB
-
- (sUB-INSTRUCTIONS: and, rol)
-
- opcode 89
- oPCODE 89 IS ANOTHER skb INSTRUCTION. iT REQUIRES 2 CYCLES TO EXECUTE.
-
- las ***
- tHIS OPCODE andS THE CONTENTS OF A MEMORY LOCATION WITH THE CONTENTS OF THE
- STACK POINTER REGISTER AND STORES THE RESULT IN THE ACCUMULATOR, THE x
- REGISTER, AND THE STACK POINTER. aFFECTED FLAGS: n z.
-
- oNE SUPPORTED MODE:
-
- las ABCD,y ;bb CD AB ;nO. cYCLES= 4*
-
- opcode eb
- oPCODE eb SEEMS TO WORK EXACTLY LIKE sbc #IMMEDIATE. tAKES 2 CYCLES.
-
- tHAT IS THE END OF THE LIST.
-
- tHIS LIST IS A FULL AND COMPLETE LIST OF ALL UNDOCUMENTED OPCODES, EVERY
- LAST HEX VALUE. iT PROVIDES COMPLETE AND THOROUGH INFORMATION AND IT ALSO
- CORRECTS SOME INCORRECT INFORMATION FOUND ELSEWHERE. tHE OPCODES mka AND
- mkx (ALSO KNOWN AS tsta AND tstx) AS DESCRIBED IN "tHE cOMPLETE cOMMODORE
- iNNER sPACE aNTHOLOGY" DO NOT EXIST. aLSO, IT IS ERRONEOUSLY INDICATED
- THERE THAT THE INSTRUCTIONS aso, rla, lse, rra HAVE AN IMMEDIATE ADDRESSING
- MODE. (rla #AB WOULD BE anc #AB.)
-
- [rECENT ADDITIONS TO THIS TEXT FILE]
-
- hERE ARE SOME OTHER MORE SCRUTINIZING OBSERVATIONS.
-
- tHE OPCODE arr OPERATES MORE COMPLEXILY THAN ACTUALLY DESCRIBED IN THE LIST
- ABOVE. hERE IS A BRIEF RUNDOWN ON THIS. tHE FOLLOWING ASSUMES THE DECIMAL
- FLAG IS CLEAR. yOU SEE, THE SUB-INSTRUCTION FOR arr ($6b) IS IN FACT adc
- ($69), NOT and. wHILE adc IS NOT PERFORMED, SOME OF THE adc MECHANICS ARE
- EVIDENT. lIKE adc, arr AFFECTS THE OVERFLOW FLAG. tHE FOLLOWING EFFECTS
- OCCUR AFTER andING BUT BEFORE rorING. tHE v FLAG IS SET TO THE RESULT OF
- EXCLUSIVE orING BIT 7 WITH BIT 6. uNLIKE ror, BIT 0 DOES NOT GO INTO THE
- CARRY FLAG. tHE STATE OF BIT 7 IS EXCHANGED WITH THE CARRY FLAG. bIT 0 IS
- LOST. aLL OF THIS MAY APPEAR STRANGE, BUT IT MAKES SENSE IF YOU CONSIDER
- THE PROBABLE INTERNAL OPERATIONS OF adc ITSELF.
-
- skb OPCODES 82, c2, e2 MAY BE hltS. sINCE ONLY ONE SOURCE CLAIMS THIS, AND
- NO OTHER SOURCES CORROBORATE THIS, IT MUST BE TRUE ON VERY FEW MACHINES.
- oN ALL OTHERS, THESE OPCODES ALWAYS PERFORM NO OPERATION.
-
- las IS SUSPECT. tHIS OPCODE IS POSSIBLY UNRELIABLE.
-
- opcode bit-pattern: 10X0 1011
- nOW IT IS TIME TO DISCUSS xaa ($8b) AND oal ($ab). a FAIR BIT OF
- CONTROVERSY HAS SURROUNDED THESE TWO OPCODES. tHERE ARE TWO GOOD REASONS
- FOR THIS. 1 - tHEY ARE RATHER WEIRD IN OPERATION. 2 - tHEY DO OPERATE
- DIFFERENTLY ON DIFFERENT MACHINES. hIGHLY VARIABLE.
-
- hERE IS THE BASIC OPERATION.
- oal
- tHIS OPCODE orS THE a REGISTER WITH #XX, andS THE RESULT WITH AN IMMEDIATE
- VALUE, AND THEN STORES THE RESULT IN BOTH a AND x.
-
- oN MY 128, XX MAY BE ee,ef,fe, or ff. tHESE POSSIBILITIES APPEAR TO DEPEND
- ON THREE FACTORS: THE x REGISTER, pc, AND THE PREVIOUS INSTRUCTION
- EXECUTED. bIT 0 IS orED FROM X, AND ALSO FROM pch. aS FOR xaa, ON MY 128
- THIS OPCODE APPEARS TO WORK EXACTLY AS DESCRIBED IN THE LIST.
-
- oN MY 64, oal PRODUCES ALL SORTS OF VALUES FOR XX: 00,04,06,80, ETC... a
- ROUGH SCENARIO i WORKED OUT TO EXPLAIN THIS IS HERE. tHE CONSTANT VALUE ee
- DISAPPEARS ENTIRELY. iNSTEAD OF orING WITH ee, THE ACCUMULATOR IS orED
- WITH CERTAIN BITS OF x AND ALSO orED WITH CERTAIN BITS OF ANOTHER
- "REGISTER" (NATURE UNKNOWN, WHETHER IT BE THE DATA BUS, OR SOMETHING ELSE).
- hOWEVER, IF oal IS PRECEDED BY CERTAIN OTHER INSTRUCTIONS LIKE nop, THE
- CONSTANT VALUE ee REAPPEARS AND THE FOREGOING DOES NOT TAKE PLACE.
-
- oN MY 64, xaa WORKS LIKE THIS. wHILE x IS TRANSFERED TO a, BIT 0 AND BIT 4
- ARE NOT. iNSTEAD, THESE BITS ARE andED WITH THOSE BITS FROM a, AND THE
- RESULT IS STORED IN a.
-
- tHERE MAY BE MANY VARIATIONS IN THE BEHAVIOUR OF BOTH OPCODES. xaa #$00 OR
- oal #$00 ARE LIKELY QUITE RELIABLE IN ANY CASE. iT SEEMS CLEAR THAT THE
- VIDEO CHIP (I.E., vic-ii) BEARS RESPONSIBILITY FOR SOME SMALL PART OF THE
- ANOMALOUSNESS, AT LEAST. bEYOND THAT, THE ISSUE IS UNCLEAR.
-
- oNE IDEA i'LL JUST THROW UP IN THE AIR ABOUT WHY THE TWO OPCODES BEHAVE AS
- THEY DO IS THIS OBSERVATION. wHILE OTHER OPCODES LIKE 4b AND 6b PERFORM
- and AS THEIR FIRST STEP, 8b AND ab DO NOT. pERHAPS THIS DIFFERENCE LEADS
- TO SOME INTERNAL CONFLICT IN THE MICROPROCESSOR. bESIDES BEING SUBJECT TO
- "NOISE", THE ACTUAL BASE OPERATIONS DO NOT VARY.
-
- aLL OF THE OPCODES IN THIS LIST (AT LEAST UP TO THE DIVIDING LINE) USE THE
- NAMING CONVENTION FROM THE ccisa aNTHOLOGY BOOK. tHERE IS ANOTHER NAMING
- CONVENTION USED, FOR EXAMPLE IN THE FIRST ISSUE OF c=hACKING. tHE ONLY
- ASSEMBLER i KNOW OF THAT SUPPORTS UNDOCUMENTED OPCODES IS pOWER aSSEMBLER.
- aND IT USES THE SAME NAMING CONVENTIONS AS USED HERE.
-
- oNE NOTE ON A DIFFERENT TOPIC. a SMALL ERROR HAS BEEN POINTED OUT IN THE
- 64 pROGRAMMERS rEFERENCE gUIDE WITH THE INSTRUCTION SET LISTING. iN THE
- LAST ROW, IN THE LAST COLUMN OF THE TWO INSTRUCTIONS and AND ora THERE
- SHOULD BE AN ASTERISK, JUST AS THERE IS WITH adc. tHAT IS THE INDIRECT,y
- ADDRESSING MODE. iN ANOTHER TABLE SEVERAL PAGES LATER CORRECT INFORMATION
- IS GIVEN.
-
- (a CORRECTION: tHERE WAS ONE ERROR IN THIS DOCUMENT ORIGINALLY. oNE
- ADDRESSING MODE FOR lax WAS GIVEN AS lax AB,x. tHIS SHOULD HAVE BEEN
- lax AB,y (b7). aLSO NOTE THAT pOWER aSSEMBLER APPARENTLY HAS THIS SAME
- ERROR, LIKELY BECAUSE BOTH IT AND THIS DOCUMENT DERIVE FIRST FROM THE SAME
- SOURCE AS REGARDS THESE OPCODES. cODING lax $00,x IS ACCEPTED AND
- PRODUCES THE OUTPUT b7 00.)
-
- rEFERENCES
-
- O jOEL sHEPHERD. "eXTRA iNSTRUCTIONS" compute!, oCTOBER 1983.
-
- O jIM bUTTERFIELD. "sTRANGE oPCODES" compute, mARCH 1993.
-
- O rAYMOND qUIRLING. "6510 oPCODES" tHE tRANSACTOR, mARCH 1986.
-
- O jOHN wEST, mARKO m{$e4}KEL{$e4}. '64DOC' FILE, 1994/06/03.
-