home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / documents / chipdata / 6502-NMOS.extra.opcodes < prev    next >
Encoding:
Text File  |  1996-11-17  |  19.2 KB  |  643 lines

  1.  
  2.               "eXTRA iNSTRUCTIONS oF tHE 65xx sERIES cpu"
  3.  
  4.             bY: aDAM vARDY (ABE0084@INFONET.ST-JOHNS.NF.CA)
  5.  
  6.  
  7. [fILE CREATED: 22, aUG. 1995... 27, sEPT. 1996]
  8.  
  9. tHE FOLLOWING IS A LIST OF 65xx/85xx EXTRA OPCODES.  tHE OPERATION CODES 
  10. FOR THE 6502 cpu FIT IN A SINGLE BYTE; OUT OF 256 POSSIBLE COMBINATIONS, 
  11. ONLY 151 ARE "LEGAL."  tHIS TEXT DESCRIBES THE OTHER 256-151= 105 OPERATION 
  12. CODES.  tHESE OPCODES ARE NOT GENERALLY RECOGNIZED AS PART OF THE 6502 
  13. INSTRUCTION SET.  tHEY ARE ALSO REFERRED TO AS UNDEFINED OPCODES OR 
  14. UNDOCUMENTED OPCODES OR NON-STANDARD OPCODES OR UNOFFICIAL OPCODES.  iN 
  15. "tHE cOMMODORE 64 pROGRAMMER'S rEFERENCE gUIDE" THEIR HEXADECIMAL VALUES 
  16. ARE SIMPLY MARKED AS FUTURE EXPANSION.  tHIS LIST OF OPCODES WAS COMPILED 
  17. WITH HELP FROM "tHE cOMPLETE iNNER sPACE aNTHOLOGY" BY kARL j. h. hILDON.
  18.  
  19. i HAVE MARKED OFF THE BEGINNING OF THE DESCRIPTION OF EACH OPCODE WITH A 
  20. FEW ASTERISKS.  aT TIMES, i ALSO INCLUDED AN ALTERNATE NAME IN PARENTHESIS. 
  21. aLL OPCODE VALUES ARE GIVEN IN HEXADECIMAL.  tHESE HEXADECIMAL VALUES ARE 
  22. LISTED IMMEDIATELY TO THE RIGHT OF ANY SAMPLE CODE.  tHE LOWERCASE LETTERS 
  23. FOUND IN THESE EXAMPLES REPRESENT THE HEX DIGITS THAT YOU MUST PROVIDE AS 
  24. THE INSTRUCTION'S IMMEDIATE BYTE VALUE OR AS THE INSTRUCTION'S DESTINATION 
  25. OR SOURCE ADDRESS.  tHUS IMMEDIATE VALUES AND ZERO PAGE ADDRESSES ARE 
  26. REFERRED TO AS 'AB'.  fOR ABSOLUTE ADDRESSING MODE THE TWO BYTES OF AN 
  27. ABSOLUTE ADDRESS ARE REFERRED TO AS 'CD' AND 'AB'.
  28.  
  29. eXECUTION TIMES FOR ALL OPCODES ARE GIVEN ALONGSIDE TO THE VERY RIGHT OF 
  30. ANY SAMPLE CODE.  a NUMBER OF THE OPCODES DESCRIBED HERE COMBINE THE 
  31. OPERATION OF TWO REGULAR 6502 INSTRUCTIONS.  yOU CAN REFER TO A BOOK ON THE 
  32. 6502 INSTRUCTION SET FOR MORE INFORMATION, SUCH AS WHICH FLAGS A PARTICULAR 
  33. INSTRUCTION AFFECTS.
  34.  
  35.  
  36. aso    ***    (slo)
  37. tHIS OPCODE aslS THE CONTENTS OF A MEMORY LOCATION AND THEN orS THE RESULT 
  38. WITH THE ACCUMULATOR.  
  39.  
  40. sUPPORTED MODES:
  41.  
  42. aso ABCD        ;0f CD AB    ;nO. cYCLES= 6
  43. aso ABCD,x      ;1f CD AB    ;            7
  44. aso ABCD,y      ;1b CD AB    ;            7
  45. aso AB          ;07 AB       ;            5
  46. aso AB,x        ;17 AB       ;            6
  47. aso (AB,x)      ;03 AB       ;            8
  48. aso (AB),y      ;13 AB       ;            8
  49.  
  50. (sUB-INSTRUCTIONS: ora, asl)
  51.  
  52. hERE IS AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
  53.  
  54. aso $c010       ;0f 10 c0
  55.  
  56. hERE IS THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  57.  
  58. asl $c010
  59. ora $c010
  60.  
  61. rla    ***
  62. rla rolS THE CONTENTS OF A MEMORY LOCATION AND THEN andS THE RESULT WITH 
  63. THE ACCUMULATOR.
  64.  
  65. sUPPORTED MODES:
  66.  
  67. rla ABCD        ;2f CD AB    ;nO. cYCLES= 6
  68. rla ABCD,x      ;3f CD AB    ;            7
  69. rla ABCD,y      ;3b CD AB    ;            7
  70. rla AB          ;27 AB       ;            5
  71. rla AB,x        ;37 AB       ;            6
  72. rla (AB,x)      ;23 AB       ;            8
  73. rla (AB),y      ;33 AB       ;            8
  74.  
  75. (sUB-INSTRUCTIONS: and, rol)
  76.  
  77. hERE'S AN EXAMPLE OF HOW YOU MIGHT WRITE IT IN A PROGRAM.
  78.  
  79. rla $fc,x       ;37 fc
  80.  
  81. hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  82.  
  83. rol $fc,x
  84. and $fc,x
  85.  
  86. lse    ***   (sre)
  87. lse lsrS THE CONTENTS OF A MEMORY LOCATION AND THEN eorS THE RESULT WITH 
  88. THE ACCUMULATOR.
  89.  
  90. sUPPORTED MODES:
  91.  
  92. lse ABCD        ;4f CD AB    ;nO. cYCLES= 6
  93. lse ABCD,x      ;5f CD AB    ;            7
  94. lse ABCD,y      ;5b CD AB    ;            7
  95. lse AB          ;47 AB       ;            5
  96. lse AB,x        ;57 AB       ;            6
  97. lse (AB,x)      ;43 AB       ;            8
  98. lse (AB),y      ;53 AB       ;            8
  99.  
  100. (sUB-INSTRUCTIONS: eor, lsr)
  101.  
  102. eXAMPLE:
  103.  
  104. lse $c100,x     ;5f 00 c1
  105.  
  106. hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  107.  
  108. lsr $c100,x
  109. eor $c100,x
  110.  
  111. rra    ***
  112. rra rorS THE CONTENTS OF A MEMORY LOCATION AND THEN adcS THE RESULT WITH 
  113. THE ACCUMULATOR.
  114.  
  115. sUPPORTED MODES:
  116.  
  117. rra ABCD        ;6f CD AB    ;nO. cYCLES= 6
  118. rra ABCD,x      ;7f CD AB    ;            7
  119. rra ABCD,y      ;7b CD AB    ;            7
  120. rra AB          ;67 AB       ;            5
  121. rra AB,x        ;77 AB       ;            6
  122. rra (AB,x)      ;63 AB       ;            8
  123. rra (AB),y      ;73 AB       ;            8
  124.  
  125. (sUB-INSTRUCTIONS: adc, ror)
  126.  
  127. eXAMPLE:
  128.  
  129. rra $030c       ;6f 0c 03
  130.  
  131. eQUIVALENT INSTRUCTIONS:
  132.  
  133. ror $030c
  134. adc $030c
  135.  
  136. axs    ***    (sax)
  137. axs andS THE CONTENTS OF THE a AND x REGISTERS (WITHOUT CHANGING THE 
  138. CONTENTS OF EITHER REGISTER) AND STORES THE RESULT IN MEMORY.
  139. axs DOES NOT AFFECT ANY FLAGS IN THE PROCESSOR STATUS REGISTER.
  140.  
  141. sUPPORTED MODES:
  142.  
  143. axs ABCD        ;8f CD AB    ;nO. cYCLES= 4
  144. axs AB          ;87 AB       ;            3
  145. axs AB,y        ;97 AB       ;            4
  146. axs (AB,x)      ;83 AB       ;            6
  147.  
  148. (sUB-INSTRUCTIONS: sta, stx)
  149.  
  150. eXAMPLE:
  151.  
  152. axs $fe         ;87 fe
  153.  
  154. hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  155.  
  156. stx $fe
  157. pha
  158. and $fe
  159. sta $fe
  160. pla
  161.  
  162. lax    ***
  163. tHIS OPCODE LOADS BOTH THE ACCUMULATOR AND THE x REGISTER WITH THE CONTENTS 
  164. OF A MEMORY LOCATION.
  165.  
  166. sUPPORTED MODES:
  167.  
  168. lax ABCD        ;af CD AB    ;nO. cYCLES= 4
  169. lax ABCD,y      ;bf CD AB    ;            4*
  170. lax AB          ;a7 AB       ;*=ADD 1     3
  171. lax AB,y        ;b7 AB       ;IF PAGE     4
  172. lax (AB,x)      ;a3 AB       ;BOUNDARY    6
  173. lax (AB),y      ;b3 AB       ;IS CROSSED  5*
  174.  
  175. (sUB-INSTRUCTIONS: lda, ldx)
  176.  
  177. eXAMPLE:
  178.  
  179. lax $8400,y     ;bf 00 84
  180.  
  181. eQUIVALENT INSTRUCTIONS:
  182.  
  183. lda $8400,y
  184. ldx $8400,y
  185.  
  186. dcm    ***    (dcp)
  187. tHIS OPCODE decS THE CONTENTS OF A MEMORY LOCATION AND THEN cmpS THE RESULT 
  188. WITH THE a REGISTER.
  189.  
  190. sUPPORTED MODES:
  191.  
  192. dcm ABCD        ;cf CD AB    ;nO. cYCLES= 6
  193. dcm ABCD,x      ;df CD AB    ;            7
  194. dcm ABCD,y      ;db CD AB    ;            7
  195. dcm AB          ;c7 AB       ;            5
  196. dcm AB,x        ;d7 AB       ;            6
  197. dcm (AB,x)      ;c3 AB       ;            8
  198. dcm (AB),y      ;d3 AB       ;            8
  199.  
  200. (sUB-INSTRUCTIONS: cmp, dec)
  201.  
  202. eXAMPLE:
  203.  
  204. dcm $ff         ;c7 ff
  205.  
  206. eQUIVALENT INSTRUCTIONS:
  207.  
  208. dec $ff
  209. cmp $ff
  210.  
  211. ins    ***    (isc)
  212. tHIS OPCODE incS THE CONTENTS OF A MEMORY LOCATION AND THEN sbcS THE RESULT 
  213. FROM THE a REGISTER.
  214.  
  215. sUPPORTED MODES:
  216.  
  217. ins ABCD        ;ef CD AB    ;nO. cYCLES= 6
  218. ins ABCD,x      ;ff CD AB    ;            7
  219. ins ABCD,y      ;fb CD AB    ;            7
  220. ins AB          ;e7 AB       ;            5
  221. ins AB,x        ;f7 AB       ;            6
  222. ins (AB,x)      ;e3 AB       ;            8
  223. ins (AB),y      ;f3 AB       ;            8
  224.  
  225. (sUB-INSTRUCTIONS: sbc, inc)
  226.  
  227. eXAMPLE:
  228.  
  229. ins $ff         ;e7 ff
  230.  
  231. eQUIVALENT INSTRUCTIONS:
  232.  
  233. inc $ff
  234. sbc $ff
  235.  
  236. alr    ***
  237. tHIS OPCODE andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND 
  238. THEN lsrS THE RESULT.
  239.  
  240. oNE SUPPORTED MODE:
  241.  
  242. alr #AB         ;4b AB       ;nO. cYCLES= 2
  243.  
  244. eXAMPLE:
  245.  
  246. alr #$fe        ;4b fe
  247.  
  248. eQUIVALENT INSTRUCTIONS:
  249.  
  250. and #$fe
  251. lsr a
  252.  
  253. arr    ***
  254. tHIS OPCODE andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND 
  255. THEN rorS THE RESULT.
  256.  
  257. oNE SUPPORTED MODE:
  258.  
  259. arr #AB         ;6b AB       ;nO. cYCLES= 2
  260.  
  261. hERE'S AN EXAMPLE OF HOW YOU MIGHT WRITE IT IN A PROGRAM.
  262.  
  263. arr #$7f        ;6b 7f
  264.  
  265. hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  266.  
  267. and #$7f
  268. ror a
  269.  
  270. xaa    ***
  271. xaa TRANSFERS THE CONTENTS OF THE x REGISTER TO THE a REGISTER AND THEN 
  272. andS THE a REGISTER WITH AN IMMEDIATE VALUE.
  273.  
  274. oNE SUPPORTED MODE:
  275.  
  276. xaa #AB         ;8b AB       ;nO. cYCLES= 2
  277.  
  278. eXAMPLE:
  279.  
  280. xaa #$44        ;8b 44
  281.  
  282. eQUIVALENT INSTRUCTIONS:
  283.  
  284. txa
  285. and #$44
  286.  
  287. oal    ***
  288. tHIS OPCODE orS THE a REGISTER WITH #$ee, andS THE RESULT WITH AN IMMEDIATE 
  289. VALUE, AND THEN STORES THE RESULT IN BOTH a AND x.
  290.  
  291. oNE SUPPORTED MODE:
  292.  
  293. oal #AB         ;ab AB       ;nO. cYCLES= 2
  294.  
  295. hERE'S AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
  296.  
  297. oal #$aa        ;ab aa
  298.  
  299. hERE'S THE SAME CODE USING EQUIVALENT INSTRUCTIONS:
  300.  
  301. ora #$ee
  302. and #$aa
  303. tax
  304.  
  305. sax    ***
  306. sax andS THE CONTENTS OF THE a AND x REGISTERS (LEAVING THE CONTENTS OF a 
  307. INTACT), SUBTRACTS AN IMMEDIATE VALUE, AND THEN STORES THE RESULT IN x.
  308. ... a FEW POINTS MIGHT BE MADE ABOUT THE ACTION OF SUBTRACTING AN IMMEDIATE 
  309. VALUE.  iT ACTUALLY WORKS JUST LIKE THE cmp INSTRUCTION, EXCEPT THAT cmp 
  310. DOES NOT STORE THE RESULT OF THE SUBTRACTION IT PERFORMS IN ANY REGISTER.  
  311. tHIS SUBTRACT OPERATION IS NOT AFFECTED BY THE STATE OF THE cARRY FLAG, 
  312. THOUGH IT DOES AFFECT THE cARRY FLAG.  iT DOES NOT AFFECT THE oVERFLOW 
  313. FLAG.
  314.  
  315. oNE SUPPORTED MODE:
  316.  
  317. sax #AB         ;cb AB       ;nO. cYCLES= 2
  318.  
  319. eXAMPLE:
  320.  
  321. sax #$5a        ;cb 5a
  322.  
  323. eQUIVALENT INSTRUCTIONS:
  324.  
  325. sta $02
  326. txa
  327. and $02
  328. sec
  329. sbc #$5a
  330. tax
  331. lda $02
  332.  
  333. nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE sax OPCODE.
  334.  
  335. nop    ***
  336. nop PERFORMS NO OPERATION.  oPCODES: 1a, 3a, 5a, 7a, da, fa.
  337. tAKES 2 CYCLES TO EXECUTE.
  338.  
  339. skb    ***
  340. skb STANDS FOR SKIP NEXT BYTE.
  341. oPCODES: 80, 82, c2, e2, 04, 14, 34, 44, 54, 64, 74, d4, f4.
  342. tAKES 2, 3, OR 4 CYCLES TO EXECUTE.
  343.  
  344. skw    ***
  345. skw SKIPS NEXT WORD (TWO BYTES).
  346. oPCODES: 0c, 1c, 3c, 5c, 7c, dc, fc.
  347. tAKES 4 CYCLES TO EXECUTE.
  348.  
  349. tO BE DIZZYINGLY PRECISE, skw ACTUALLY PERFORMS A READ OPERATION.  iT'S 
  350. JUST THAT THE VALUE READ IS NOT STORED IN ANY REGISTER.  fURTHER, OPCODE 0c 
  351. USES THE ABSOLUTE ADDRESSING MODE.  tHE TWO BYTES WHICH FOLLOW IT FORM THE 
  352. ABSOLUTE ADDRESS.  aLL THE OTHER skw OPCODES USE THE ABSOLUTE INDEXED x 
  353. ADDRESSING MODE.  iF A PAGE BOUNDARY IS CROSSED, THE EXECUTION TIME OF ONE 
  354. OF THESE skw OPCODES IS UPPED TO 5 CLOCK CYCLES.
  355. --------------------------------------------------------------------------
  356.  
  357. tHE FOLLOWING OPCODES WERE DISCOVERED AND NAMED EXCLUSIVELY BY THE AUTHOR.
  358. (oR SO IT WAS THOUGHT BEFORE.)
  359.  
  360. hlt    ***
  361. hlt CRASHES THE MICROPROCESSOR.  wHEN THIS OPCODE IS EXECUTED, PROGRAM 
  362. EXECUTION CEASES.  nO HARDWARE INTERRUPTS WILL EXECUTE EITHER.  tHE AUTHOR 
  363. HAS CHARACTERIZED THIS INSTRUCTION AS A HALT INSTRUCTION SINCE THIS IS THE 
  364. MOST STRAIGHTFORWARD EXPLANATION FOR THIS OPCODE'S BEHAVIOUR.  oNLY A RESET 
  365. WILL RESTART EXECUTION.  tHIS OPCODE LEAVES NO TRACE OF ANY OPERATION 
  366. PERFORMED!  nO REGISTERS AFFECTED.
  367.  
  368. oPCODES: 02, 12, 22, 32, 42, 52, 62, 72, 92, b2, d2, f2.
  369.  
  370. tas    ***
  371. tHIS OPCODE andS THE CONTENTS OF THE a AND x REGISTERS (WITHOUT CHANGING 
  372. THE CONTENTS OF EITHER REGISTER) AND TRANSFERS THE RESULT TO THE STACK 
  373. POINTER.  iT THEN andS THAT RESULT WITH THE CONTENTS OF THE HIGH BYTE OF 
  374. THE TARGET ADDRESS OF THE OPERAND +1 AND STORES THAT FINAL RESULT IN 
  375. MEMORY.  
  376.  
  377. oNE SUPPORTED MODE:
  378.  
  379. tas ABCD,y      ;9b CD AB    ;nO. cYCLES= 5
  380.  
  381. (sUB-INSTRUCTIONS: sta, txs)
  382.  
  383. hERE IS AN EXAMPLE OF HOW YOU MIGHT USE THIS OPCODE:
  384.  
  385. tas $7700,y     ;9b 00 77
  386.  
  387. hERE IS THE SAME CODE USING EQUIVALENT INSTRUCTIONS.
  388.  
  389. stx $02
  390. pha
  391. and $02
  392. tax
  393. txs
  394. and #$78
  395. sta $7700,y
  396. pla
  397. ldx $02
  398.  
  399. nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE tas OPCODE.
  400.  
  401. aBOVE i USED THE PHRASE 'THE HIGH BYTE OF THE TARGET ADDRESS OF THE OPERAND 
  402. +1'.  bY THE WORDS TARGET ADDRESS, i MEAN THE UNINDEXED ADDRESS, THE ONE 
  403. SPECIFIED EXPLICITLY IN THE OPERAND.  tHE HIGH BYTE IS THEN THE SECOND BYTE 
  404. AFTER THE OPCODE (AB).  sO WE'LL SHORTEN THAT PHRASE TO ab+1.
  405.  
  406. say    ***
  407. tHIS OPCODE andS THE CONTENTS OF THE y REGISTER WITH <AB+1> AND STORES THE 
  408. RESULT IN MEMORY.
  409.  
  410. oNE SUPPORTED MODE:
  411.  
  412. say ABCD,x      ;9c CD AB    ;nO. cYCLES= 5
  413.  
  414. eXAMPLE:
  415.  
  416. say $7700,x     ;9c 00 77
  417.  
  418. eQUIVALENT INSTRUCTIONS:
  419.  
  420. pha
  421. tya
  422. and #$78
  423. sta $7700,x
  424. pla
  425.  
  426. xas    ***
  427. tHIS OPCODE andS THE CONTENTS OF THE x REGISTER WITH <AB+1> AND STORES THE 
  428. RESULT IN MEMORY.
  429.  
  430. oNE SUPPORTED MODE:
  431.  
  432. xas ABCD,y      ;9e CD AB    ;nO. cYCLES= 5
  433.  
  434. eXAMPLE:
  435.  
  436. xas $6430,y     ;9e 30 64
  437.  
  438. eQUIVALENT INSTRUCTIONS:
  439.  
  440. pha
  441. txa
  442. and #$65
  443. sta $6430,y
  444. pla
  445.  
  446. axa    ***
  447. tHIS OPCODE STORES THE RESULT OF a and x and THE HIGH BYTE OF THE TARGET 
  448. ADDRESS OF THE OPERAND +1 IN MEMORY.
  449.  
  450. sUPPORTED MODES:
  451.  
  452. axa ABCD,y      ;9f CD AB    ;nO. cYCLES= 5
  453. axa (AB),y      ;93 AB       ;            6
  454.  
  455. eXAMPLE:
  456.  
  457. axa $7133,y     ;9f 33 71
  458.  
  459. eQUIVALENT INSTRUCTIONS:
  460.  
  461. stx $02
  462. pha
  463. and $02
  464. and #$72
  465. sta $7133,y
  466. pla
  467. ldx $02
  468.  
  469. nOTE: mEMORY LOCATION $02 WOULD NOT BE ALTERED BY THE axa OPCODE.
  470.  
  471.  
  472. tHE FOLLOWING NOTES APPLY TO THE ABOVE FOUR OPCODES: tas, say, xas, axa.
  473.  
  474. nONE OF THESE OPCODES AFFECT THE ACCUMULATOR, THE x REGISTER, THE y 
  475. REGISTER, OR THE PROCESSOR STATUS REGISTER!
  476.      tHE AUTHOR HAS NO EXPLANATION FOR THE COMPLEXITY OF THESE 
  477. INSTRUCTIONS.  iT IS HARD TO COMPREHEND HOW THE MICROPROCESSOR COULD HANDLE 
  478. THE CONVOLUTED SEQUENCE OF EVENTS WHICH APPEARS TO OCCUR WHILE EXECUTING 
  479. ONE OF THESE OPCODES.  a PARTIAL EXPLANATION FOR WHAT IS GOING ON IS THAT 
  480. THESE INSTRUCTIONS APPEAR TO BE CORRUPTIONS OF OTHER INSTRUCTIONS.  fOR 
  481. EXAMPLE, THE OPCODE say WOULD HAVE BEEN ONE OF THE ADDRESSING MODES OF THE 
  482. STANDARD INSTRUCTION sty (ABSOLUTE INDEXED x) WERE IT NOT FOR THE FACT THAT 
  483. THE NORMAL OPERATION OF THIS INSTRUCTION IS IMPAIRED IN THIS PARTICULAR 
  484. INSTANCE.
  485.  
  486. oNE IRREGULARITY UNCOVERED IS THAT SOMETIMES THE ACTUAL VALUE IS STORED IN 
  487. MEMORY, AND THE and WITH <AB+1> PART DROPS OFF (EX. say BECOMES TRUE sty).  
  488. tHIS HAPPENS VERY INFREQUENTLY.  tHE BEHAVIOUR APPEARS TO BE CONNECTED WITH 
  489. THE VIDEO DISPLAY.  fOR EXAMPLE, IT NEVER SEEMS TO OCCUR IF EITHER THE 
  490. SCREEN IS BLANKED OR c128 2mhZ MODE IS ENABLED.
  491.  
  492. --- iMPORTED EXAMPLE ---
  493. hERE IS A DEMO PROGRAM TO ILLUSTRATE THE ABOVE EFFECT.  sys 8200 TO TRY IT.  
  494. tHERE IS NO EXIT, SO YOU'LL HAVE TO HIT sTOP-rESTORE TO QUIT.  aND YOU MAY 
  495. WANT TO CLEAR THE SCREEN BEFORE RUNNING IT.  fOR CONTRAST, THERE IS A 
  496. SECOND ROUTINE WHICH RUNS DURING IDLE STATE DISPLAY.  uSE sys 8211 FOR IT.  
  497. aFTER TRYING THE SECOND ROUTINE, CHECK IT OUT AGAIN USING poke 53269,255 TO 
  498. ENABLE SPRITES.
  499.  
  500. BEGIN 640 SAY->STY
  501. d"""b{$60}*{$60}@g{$60}{$60}%z$p,("p1t##[+!'0$/nb{$60}*{$60}@g{$60}{$60}%z-#z3!,@
  502. {$60}
  503. END
  504.  
  505. --- tEXT IMPORT END ---
  506.  
  507. warning: iF THE TARGET ADDRESS CROSSES A PAGE BOUNDARY BECAUSE OF INDEXING, 
  508. THE INSTRUCTION MAY NOT STORE AT THE INTENDED ADDRESS.  iT MAY END UP 
  509. STORING IN ZERO PAGE, OR ANOTHER ADDRESS ALTOGETHER (PAGE=VALUE STORED). 
  510. aPPARENTLY CERTAIN INTERNAL 65xx REGISTERS ARE BEING OVERRIDDEN.  tHE WHOLE 
  511. SCHEME BEHIND THIS ERRATIC BEHAVIOUR IS VERY COMPLEX AND STRANGE.  
  512.  
  513.  
  514. aND CONTINUING WITH THE LIST...
  515.  
  516. anc    ***
  517. anc andS THE CONTENTS OF THE a REGISTER WITH AN IMMEDIATE VALUE AND THEN 
  518. MOVES BIT 7 OF a INTO THE cARRY FLAG.  tHIS OPCODE WORKS BASICALLY 
  519. IDENTICALLY TO and #IMMED. EXCEPT THAT THE cARRY FLAG IS SET TO THE SAME 
  520. STATE THAT THE nEGATIVE FLAG IS SET TO.
  521.  
  522. oNE SUPPORTED MODE:
  523.  
  524. anc #AB         ;2b AB       ;nO. cYCLES= 2
  525. anc #AB         ;0b AB
  526.  
  527. (sUB-INSTRUCTIONS: and, rol)
  528.  
  529. opcode 89
  530. oPCODE 89 IS ANOTHER skb INSTRUCTION.  iT REQUIRES 2 CYCLES TO EXECUTE.
  531.  
  532. las    ***
  533. tHIS OPCODE andS THE CONTENTS OF A MEMORY LOCATION WITH THE CONTENTS OF THE 
  534. STACK POINTER REGISTER AND STORES THE RESULT IN THE ACCUMULATOR, THE x 
  535. REGISTER, AND THE STACK POINTER.  aFFECTED FLAGS: n z.
  536.  
  537. oNE SUPPORTED MODE:
  538.  
  539. las ABCD,y      ;bb CD AB    ;nO. cYCLES= 4*
  540.  
  541. opcode eb
  542. oPCODE eb SEEMS TO WORK EXACTLY LIKE sbc #IMMEDIATE.  tAKES 2 CYCLES.
  543.  
  544. tHAT IS THE END OF THE LIST.
  545.  
  546. tHIS LIST IS A FULL AND COMPLETE LIST OF ALL UNDOCUMENTED OPCODES, EVERY 
  547. LAST HEX VALUE.  iT PROVIDES COMPLETE AND THOROUGH INFORMATION AND IT ALSO 
  548. CORRECTS SOME INCORRECT INFORMATION FOUND ELSEWHERE.  tHE OPCODES mka AND 
  549. mkx (ALSO KNOWN AS tsta AND tstx) AS DESCRIBED IN "tHE cOMPLETE cOMMODORE 
  550. iNNER sPACE aNTHOLOGY" DO NOT EXIST.  aLSO, IT IS ERRONEOUSLY INDICATED 
  551. THERE THAT THE INSTRUCTIONS aso, rla, lse, rra HAVE AN IMMEDIATE ADDRESSING 
  552. MODE.  (rla #AB WOULD BE anc #AB.)
  553.  
  554. [rECENT ADDITIONS TO THIS TEXT FILE]
  555.  
  556. hERE ARE SOME OTHER MORE SCRUTINIZING OBSERVATIONS.
  557.  
  558. tHE OPCODE arr OPERATES MORE COMPLEXILY THAN ACTUALLY DESCRIBED IN THE LIST 
  559. ABOVE.  hERE IS A BRIEF RUNDOWN ON THIS.  tHE FOLLOWING ASSUMES THE DECIMAL 
  560. FLAG IS CLEAR.  yOU SEE, THE SUB-INSTRUCTION FOR arr ($6b) IS IN FACT adc 
  561. ($69), NOT and.  wHILE adc IS NOT PERFORMED, SOME OF THE adc MECHANICS ARE 
  562. EVIDENT.  lIKE adc, arr AFFECTS THE OVERFLOW FLAG.  tHE FOLLOWING EFFECTS 
  563. OCCUR AFTER andING BUT BEFORE rorING.  tHE v FLAG IS SET TO THE RESULT OF 
  564. EXCLUSIVE orING BIT 7 WITH BIT 6.  uNLIKE ror, BIT 0 DOES NOT GO INTO THE 
  565. CARRY FLAG.  tHE STATE OF BIT 7 IS EXCHANGED WITH THE CARRY FLAG.  bIT 0 IS 
  566. LOST.  aLL OF THIS MAY APPEAR STRANGE, BUT IT MAKES SENSE IF YOU CONSIDER 
  567. THE PROBABLE INTERNAL OPERATIONS OF adc ITSELF.  
  568.  
  569. skb OPCODES 82, c2, e2 MAY BE hltS.  sINCE ONLY ONE SOURCE CLAIMS THIS, AND 
  570. NO OTHER SOURCES CORROBORATE THIS, IT MUST BE TRUE ON VERY FEW MACHINES.  
  571. oN ALL OTHERS, THESE OPCODES ALWAYS PERFORM NO OPERATION.
  572.  
  573. las IS SUSPECT.  tHIS OPCODE IS POSSIBLY UNRELIABLE.
  574.  
  575. opcode bit-pattern: 10X0 1011
  576. nOW IT IS TIME TO DISCUSS xaa ($8b) AND oal ($ab).  a FAIR BIT OF 
  577. CONTROVERSY HAS SURROUNDED THESE TWO OPCODES.  tHERE ARE TWO GOOD REASONS 
  578. FOR THIS.  1 - tHEY ARE RATHER WEIRD IN OPERATION.  2 - tHEY DO OPERATE 
  579. DIFFERENTLY ON DIFFERENT MACHINES.  hIGHLY VARIABLE.
  580.  
  581. hERE IS THE BASIC OPERATION.
  582. oal
  583. tHIS OPCODE orS THE a REGISTER WITH #XX, andS THE RESULT WITH AN IMMEDIATE 
  584. VALUE, AND THEN STORES THE RESULT IN BOTH a AND x.
  585.  
  586. oN MY 128, XX MAY BE ee,ef,fe, or ff.  tHESE POSSIBILITIES APPEAR TO DEPEND 
  587. ON THREE FACTORS: THE x REGISTER, pc, AND THE PREVIOUS INSTRUCTION 
  588. EXECUTED.  bIT 0 IS orED FROM X, AND ALSO FROM pch.  aS FOR xaa, ON MY 128 
  589. THIS OPCODE APPEARS TO WORK EXACTLY AS DESCRIBED IN THE LIST.
  590.  
  591. oN MY 64, oal PRODUCES ALL SORTS OF VALUES FOR XX: 00,04,06,80, ETC... a 
  592. ROUGH SCENARIO i WORKED OUT TO EXPLAIN THIS IS HERE.  tHE CONSTANT VALUE ee 
  593. DISAPPEARS ENTIRELY.  iNSTEAD OF orING WITH ee, THE ACCUMULATOR IS orED 
  594. WITH CERTAIN BITS OF x AND ALSO orED WITH CERTAIN BITS OF ANOTHER 
  595. "REGISTER" (NATURE UNKNOWN, WHETHER IT BE THE DATA BUS, OR SOMETHING ELSE).  
  596. hOWEVER, IF oal IS PRECEDED BY CERTAIN OTHER INSTRUCTIONS LIKE nop, THE 
  597. CONSTANT VALUE ee REAPPEARS AND THE FOREGOING DOES NOT TAKE PLACE.
  598.  
  599. oN MY 64, xaa WORKS LIKE THIS.  wHILE x IS TRANSFERED TO a, BIT 0 AND BIT 4 
  600. ARE NOT.  iNSTEAD, THESE BITS ARE andED WITH THOSE BITS FROM a, AND THE 
  601. RESULT IS STORED IN a.
  602.  
  603. tHERE MAY BE MANY VARIATIONS IN THE BEHAVIOUR OF BOTH OPCODES.  xaa #$00 OR 
  604. oal #$00 ARE LIKELY QUITE RELIABLE IN ANY CASE.  iT SEEMS CLEAR THAT THE 
  605. VIDEO CHIP (I.E., vic-ii) BEARS RESPONSIBILITY FOR SOME SMALL PART OF THE 
  606. ANOMALOUSNESS, AT LEAST.  bEYOND THAT, THE ISSUE IS UNCLEAR.   
  607.  
  608. oNE IDEA i'LL JUST THROW UP IN THE AIR ABOUT WHY THE TWO OPCODES BEHAVE AS 
  609. THEY DO IS THIS OBSERVATION.  wHILE OTHER OPCODES LIKE 4b AND 6b PERFORM 
  610. and AS THEIR FIRST STEP, 8b AND ab DO NOT.  pERHAPS THIS DIFFERENCE LEADS 
  611. TO SOME INTERNAL CONFLICT IN THE MICROPROCESSOR.  bESIDES BEING SUBJECT TO 
  612. "NOISE", THE ACTUAL BASE OPERATIONS DO NOT VARY.
  613.  
  614. aLL OF THE OPCODES IN THIS LIST (AT LEAST UP TO THE DIVIDING LINE) USE THE 
  615. NAMING CONVENTION FROM THE ccisa aNTHOLOGY BOOK.  tHERE IS ANOTHER NAMING 
  616. CONVENTION USED, FOR EXAMPLE IN THE FIRST ISSUE OF c=hACKING.  tHE ONLY 
  617. ASSEMBLER i KNOW OF THAT SUPPORTS UNDOCUMENTED OPCODES IS pOWER aSSEMBLER.  
  618. aND IT USES THE SAME NAMING CONVENTIONS AS USED HERE.
  619.  
  620. oNE NOTE ON A DIFFERENT TOPIC.  a SMALL ERROR HAS BEEN POINTED OUT IN THE 
  621. 64 pROGRAMMERS rEFERENCE gUIDE WITH THE INSTRUCTION SET LISTING.  iN THE 
  622. LAST ROW, IN THE LAST COLUMN OF THE TWO INSTRUCTIONS and AND ora THERE 
  623. SHOULD BE AN ASTERISK, JUST AS THERE IS WITH adc.  tHAT IS THE INDIRECT,y 
  624. ADDRESSING MODE.  iN ANOTHER TABLE SEVERAL PAGES LATER CORRECT INFORMATION 
  625. IS GIVEN.
  626.  
  627. (a CORRECTION:  tHERE WAS ONE ERROR IN THIS DOCUMENT ORIGINALLY.  oNE
  628. ADDRESSING MODE FOR lax WAS GIVEN AS lax AB,x.  tHIS SHOULD HAVE BEEN
  629. lax AB,y (b7).  aLSO NOTE THAT pOWER aSSEMBLER APPARENTLY HAS THIS SAME
  630. ERROR, LIKELY BECAUSE BOTH IT AND THIS DOCUMENT DERIVE FIRST FROM THE SAME
  631. SOURCE AS REGARDS THESE OPCODES.  cODING lax $00,x IS ACCEPTED AND
  632. PRODUCES THE OUTPUT b7 00.)
  633.  
  634. rEFERENCES
  635.  
  636. O  jOEL sHEPHERD. "eXTRA iNSTRUCTIONS" compute!, oCTOBER 1983.
  637.  
  638. O  jIM bUTTERFIELD. "sTRANGE oPCODES" compute, mARCH 1993.
  639.  
  640. O  rAYMOND qUIRLING. "6510 oPCODES" tHE tRANSACTOR, mARCH 1986.
  641.  
  642. O  jOHN wEST, mARKO m{$e4}KEL{$e4}. '64DOC' FILE, 1994/06/03.
  643.