
    NSgδ                     ,    d dl mZ ddlZ G d d      Zy)   )Bus    Nc                   0   e Zd Zg dZ eg d      D  ci c]  \  }}||
 c}}} Z eg d      D  ci c]  \  }}||
 c}}} Z eg d      D  ci c]  \  }}||
 c}}} Z eg d      D  ci c]  \  }}||
 c}}} Z eg d      D  ci c]  \  }}||
 c}}} Z	 eg d      D  ci c]  \  }}||
 c}}} Z
 eg d      D  ci c]  \  }}||
 c}}} Zd	Zd
ZdZdZdZdZdZdZdZdZdZdZg dZd	Zd
ZdZdZdZdZdZdZ dZ!dZ"dZ#d
Z$dZ%g dZ&de'fdZ(d Z)d Z*d  Z+d! Z,d" Z-d# Z.d$ Z/d% Z0d& Z1d' Z2d( Z3d) Z4d* Z5d+ Z6d, Z7d- Z8d. Z9dd/Z:d0 Z;d1 Z<d2 Z=d3 Z>d4 Z?d5 Z@d6 ZAd7 ZBd8 ZCd9 ZDd: ZEd; ZFd< ZGd= ZHd> ZId? ZJd@ ZKdA ZLdB ZMdC ZNdD ZOdE ZPdF ZQdG ZRdH ZSdI ZTdJ ZUdK ZVdL ZWdM ZXdN ZYdO ZZdP Z[dQ Z\dR Z]dS Z^dT Z_dU Z`dV ZadW ZbdX ZcdY ZddZ Zed[ Zfd\ Zgd] Zhd^ Zid_ Zjd` Zkda Zldb Zmdc Zndd Zode Zpdf Zqdg Zrdh Zsdi Ztdj Zudk Zvdl Zwdm Zxdn Zydo Zzdp Z{dq Z|dr Z}ds Z~dt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdÄ ZdĄ Zdń ZdƄ ZdǄ ZdȄ ZdɄ Zdʄ Zd˄ Zd̄ Zd̈́ Zd΄ Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zd߄ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Zd Zd Zd Zd Zd Zd Zd Zd Z	d  Z
d Zd Zd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z.d% Z/d& Z0d' Z1d( Z2d) Z3d* Z4d+ Z5d, Z6d- Z7d. Z8d/ Z9d0 Z:d1 Z;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@d7 ZAd8 ZBd9 ZCd: ZDd; ZEd< ZFd= ZGd> ZHd? ZId@ ZJdA ZKdB ZLdC ZMdD ZNdE ZOdF ZPdG ZQdH ZRdI ZSdJ ZTdK ZUdL ZVdM ZWdN ZXdO ZYdP ZZdQ Z[dR Z\dS Z]dT Z^dU Z_dV Z`dW ZadX ZbdY ZcdZ Zdd[ Zed\ Zfd] Zgd^ Zhd_ Zid` Zjda Zkdb Zldc Zmdd Znde Zodf Zpdg Zqdh Zrdi Zsdj Ztdk Zudl Zvdm Zwdn Zxdo Zydp Zzdq Z{dr Z|ds Z}dt Z~du Zdv Zdw Zdx Zdy Zdz Zd{ Zd| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zyc c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w c c}}} w (  CPU(   BRKORAKILSLODOPr   ASLr
   PHPr   r   AACTOPr   r   r
   BPLr   r	   r
   r   r   r   r
   CLCr   NOPr
   r   r   r   r
   JSRANDr	   RLABITr   ROLr   PLPr   r   r   r   r   r   r   BMIr   r	   r   r   r   r   r   SECr   r   r   r   r   r   r   RTIEORr	   SREr   r   LSRr   PHAr   r   ASRJMPr   r   r   BVCr   r	   r   r   r   r   r   CLIr   r   r   r   r   r   r   RTSADCr	   RRAr   r%   RORr&   PLAr%   r'   ARRr!   r%   r'   r&   BVSr%   r	   r&   r   r%   r'   r&   SEIr%   r   r&   r   r%   r'   r&   r   STAr   AAXSTYr,   STXr-   DEYr   TXAXAAr.   r,   r/   r-   BCCr,   r	   AXAr.   r,   r/   r-   TYAr,   TXSXASSYAr,   SXAr4   LDYLDALDXLAXr:   r;   r<   r=   TAYr;   TAXATXr:   r;   r<   r=   BCSr;   r	   r=   r:   r;   r<   r=   CLVr;   TSXLARr:   r;   r<   r=   CPYCMPr   DCPrE   rF   DECrG   INYrF   DEXAXSrE   rF   rH   rG   BNErF   r	   rG   r   rF   rH   rG   CLDrF   r   rG   r   rF   rH   rG   CPXSBCr   ISCrN   rO   INCrP   INXrO   r   rO   rN   rO   rQ   rP   BEQrO   r	   rP   r   rO   rQ   rP   SEDrO   r   rP   r   rO   rQ   rP   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (   r      r   rU   r      rV   rV   r   r   
   r      rX   rX   rX   r   	   r   rY   r      rZ   rZ   r      r   r[      r\   r\   r\   rX   rU   r   rU   rV   rV   rV   rV   r   r   rW   r   rX   rX   rX   rX   r   rY   r   rY   r   rZ   rZ   rZ   r   r[   r   r[   r\   r\   r\   r\   r   rU   r   rU   r   rV   rV   rV   r   r   rW   r   rX   rX   rX   rX   r   rY   r   rY   r   rZ   rZ   rZ   r   r[   r   r[   r\   r\   r\   r\   r   rU   r   rU   r   rV   rV   rV   r   r   rW   r      rX   rX   rX   r   rY   r   rY   r   rZ   rZ   rZ   r   r[   r   r[   r\   r\   r\   r\   r   rU   r   rU   rV   rV   rV   rV   r   r   r   r   rX   rX   rX   rX   r   rY   r   rY   rZ   rZ      r^   r   r[   r   rV   r[   r\   r^   r[   r   rU   r   rU   rV   rV   rV   rV   r   r   r   rV   rX   rX   rX   rX   r   rY   r   rY   rZ   rZ   r^   r^   r   r[   r   r[   r\   r\   r[   r[   r   rU   r   rU   rV   rV   rV   rV   r   r   r   r   rX   rX   rX   rX   r   rY   r   rY   r   rZ   rZ   rZ   r   r[   r   r[   r\   r\   r\   r\   r   rU   r   rU   rV   rV   rV   rV   r   r   r   r   rX   rX   rX   rX   r   rY   r   rY   r   rZ   rZ   rZ   r   r[   r   r[   r\   r\   r\   r\   (   r   rV   r   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   rX   rV   r   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   r   rV   r   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   r   rV   r   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   rV   rV   rV   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   rV   rV   rV   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   rV   rV   rV   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   rV   rV   rV   rV   rV   rV   rV   rV   r   rV   r   rV   rX   rX   rX   rX   rV   rV   r   rV   rV   rV   rV   rV   r   rX   r   rX   rX   rX   rX   rX   (   r[   r\   r   rU   rX   rX   r^   r^   rX   rV   rV   rV   rZ   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   r\   r\   r   rU   rX   rX   r^   r^   rZ   rV   rV   rV   rZ   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   r\   r\   r   rU   rX   rX   r^   r^   rX   rV   rV   rV   rX   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   r\   r\   r   rU   rX   rX   r^   r^   rZ   rV   rV   rV   r^   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   rV   r\   rV   r\   rX   rX   rX   rX   rV   rV   rV   rV   rZ   rZ   rZ   rZ   rV   r\   r   r\   rZ   rZ   rZ   rZ   rV   r^   rV   r^   r^   r^   r^   r^   rV   r\   rV   r\   rX   rX   rX   rX   rV   rV   rV   rV   rZ   rZ   rZ   rZ   rV   r^   r   r^   rZ   rZ   rZ   rZ   rV   rZ   rV   rZ   rZ   rZ   rZ   rZ   rV   r\   rV   rU   rX   rX   r^   r^   rV   rV   rV   rV   rZ   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   rV   r\   rV   rU   rX   rX   r^   r^   rV   rV   rV   rV   rZ   rZ   r\   r\   rV   r^   r   rU   rZ   rZ   r\   r\   rV   rZ   rV   r[   rZ   rZ   r[   r[   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   r   r   r   rV   rV   rV   rV   r   r   r   r   r   r   r   r   r   rV   r   rV   rV   rV   rV   rV   r   r   rV   rX   rZ   r^   r\   r[   rU   rY   rW   r]   )Implied	ImmediateZeroPageAbsolute	ZeroPageX	ZeroPageY	AbsoluteX	AbsoluteY	IndirectX	IndirectYAccumulatorIndirect   @             )  rp   i  i  busc                    d| _         || _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        g | _        | j                  d       | j                          | j                          y )Nr   F)last_opcoderq   axysppcticks
interruptskilledcyclescycles_waitlog	set_flagsdef_opcodesdef_oper_address)selfrq   s     3D:\programming\emulation\nes\nes v0.4\engine\cpu.py__init__zCPU.__init__   s    DDH DFDFDFDGDG DJDODKDKDDHNN:    c           
         t        dd      5 }|j                  d       |j                  d       t        d      D ]  }|dz  }|j                  d|dd	       t        d
      D ]C  }|j                  d| j                  ||z         d       |dz  dk(  s3|j                  d       E |j                  d        	 d d d        y # 1 sw Y   y xY w)Nzhexdump.txtwz<0xADDR |  0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F
z<-----------------------------------------------------------
i   rZ   0x04xz |rn    02xrX   
)openwriterangemem_read)r   fiaddrjs        r   dumpzCPU.dump   s    	mS	! 	QggMNggMNV} !Av	"T#Jb!"r 	&A
''AdmmD1H-c23
4UaZ	& 	
	 	 	s   B	C&CCc                 l    t         j                  D cg c]  }t        d|z          c}| _        y c c}w )Nzself.oper_addr_)r   OP_ADDR_STRINGSevaloper_address)r   ss     r   r   zCPU.def_oper_address   s)    >A>Q>QR/!34RDRs   1c                     t        d      S Nzbad operand addressprintr   s    r   oper_addr_ImpliedzCPU.oper_addr_Implied       %0E*F#Fr   c                     | j                   S N)rx   r   s    r   oper_addr_ImmediatezCPU.oper_addr_Immediate   s
    $''>r   c                 8    | j                  | j                        S r   )r   rx   r   s    r   oper_addr_ZeroPagezCPU.oper_addr_ZeroPage  s    $--*@#@r   c                 8    | j                  | j                        S r   )mem_read_16rx   r   s    r   oper_addr_AbsolutezCPU.oper_addr_Absolute  s    $*:*:477*C#Cr   c                 X    | j                  | j                        | j                  z   dz  S N   )r   rx   ru   r   s    r   oper_addr_ZeroPageXzCPU.oper_addr_ZeroPageX  "    $--*@466*ID*P#Pr   c                 X    | j                  | j                        | j                  z   dz  S r   )r   rx   rv   r   s    r   oper_addr_ZeroPageYzCPU.oper_addr_ZeroPageY  r   r   c                 X    | j                  | j                        | j                  z   dz  S N  )r   rx   ru   r   s    r   oper_addr_AbsoluteXzCPU.oper_addr_AbsoluteX  $    $*:*:477*Cdff*Lv*U#Ur   c                 X    | j                  | j                        | j                  z   dz  S r   )r   rx   rv   r   s    r   oper_addr_AbsoluteYzCPU.oper_addr_AbsoluteY  r   r   c                 v    | j                  | j                  | j                        | j                  z   dz        S r   )mem_read_16_wrapr   rx   ru   r   s    r   oper_addr_IndirectXzCPU.oper_addr_IndirectX  s1    $*?*?dgg@VY]Y_Y_@_bf@f*g#gr   c                 v    | j                  | j                  | j                              | j                  z   dz  S r   )r   r   rx   rv   r   s    r   oper_addr_IndirectYzCPU.oper_addr_IndirectY  s1    $*?*?dgg@V*WZ^Z`Z`*`ci*i#ir   c                     t        d      S r   r   r   s    r   oper_addr_AccumulatorzCPU.oper_addr_Accumulator	  r   r   c                 V    | j                  | j                  | j                              S r   )r   r   rx   r   s    r   oper_addr_IndirectzCPU.oper_addr_Indirect
  s$    $*?*?@P@PQUQXQX@Y*Z#Zr   c                    |t         j                  z  dk7  | _        |t         j                  z  dk7  | _        |t         j
                  z  dk7  | _        |t         j                  z  dk7  | _        |t         j                  z  dk7  | _
        |t         j                  z  dk7  | _        |t         j                  z  dk7  | _        |t         j                  z  dk7  | _        y Nr   )r   MASK_Nflag_NMASK_Vflag_VMASK_Uflag_UMASK_Bflag_BMASK_Dflag_DMASK_Iflag_IMASK_Zflag_ZMASK_Cflag_Cr   values     r   r   zCPU.set_flags  s    #**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DKr   c                 2    | j                  |dz  dz         y )N   rm   )r   r   s     r   
_set_flagszCPU._set_flags  s    NN5:%
23r   c                     | j                   dz  | j                  dz  z  | j                  dz  z  | j                  dz  z  | j                  dz  z  | j
                  dz  z  | j                  dz  z  | j                  z  S )Nr[   r\   r^   rZ   rX   rV   r   )r   r   r   r   r   r   r   r   r   s    r   	get_flagszCPU.get_flags  s    
kkQ
kkQ
kkQ kkQ kkQ	
 kkQ kkQ kk	r   c                     | j                   dz  | j                  dz  z  t        j                  z  |dz  z  | j                  dz  z  | j
                  dz  z  | j                  dz  z  | j                  z  S )Nr[   r\   rZ   rX   rV   r   )r   r   r   r   r   r   r   r   )r   b_flags     r   
_get_flagszCPU._get_flags%  s    
kkQ
kkQ	jj Q kkQ	
 kkQ kkQ kk	r   c                 n     | j                   j                  | j                   j                  |      |      S r   )rq   
read_funcsread_func_idxr   r   s     r   r   zCPU.mem_read?  s-    <488txx55d;<TBBr   c                 r     | j                   j                  | j                   j                  |      ||       y r   )rq   write_funcswrite_func_idxr   r   r   s      r   	mem_writezCPU.mem_writeB  s,    7DHH0067eDr   c                 T    | j                  |      | j                  |dz         dz  z  S )Nr   rU   r   r   s     r   r   zCPU.mem_read_16E  s(    ==$--q"9Q">??r   c                     |dz  dk(  r)| j                  |      | j                  |dz        dz  z  S | j                  |      | j                  |dz         dz  z  S )Nr      rU   r   r   r   s     r   r   zCPU.mem_read_16_wrapH  sZ    f}]]4 DMM$-$@A$EFF==$--q"9Q">??r   c                 ^    | j                  ||dz         | j                  |dz   |dz	         y )Nr   r   rU   )r   r   s      r   mem_write_16zCPU.mem_write_16M  s*    NN4&NN4!8UaZ(r   c                 p    | j                  d| j                  z   |       | j                  dz
  dz  | _        y )Nro   r   r   )r   rw   r   s     r   
stack_pushzCPU.stack_pushQ  s,    NN5477?E*ww{d"DGr   c                 l    | j                   dz   dz  | _         | j                  d| j                   z         S )Nr   r   ro   )rw   r   r   s    r   
stack_pullzCPU.stack_pullU  s-    ww{d"DG==))r   c                 T    | j                  |dz	         | j                  |dz         y )NrU   r   )r   r   s     r   stack_push_16zCPU.stack_push_16Y  s"    OOEQJOOEDL!r   c                 J    | j                         | j                         dz  z  S NrU   )r   r   s    r   stack_pull_16zCPU.stack_pull_16]  s     ?? 1Q 677r   c                    | xj                   t        j                  | j                     z  c_         t        j                  | j                     dk(  rR| j
                  dz  | j
                  t        j                  | j                     z   dz  k7  r| xj                   dz  c_         | xj
                  t        j                  | j                     z  c_        y )Nr   r   )r}   r   OPCODE_CYCLES_MAPopcodeOPCODE_WRAP_MAPrx   OPCODE_SIZE_MAPOPCODE_SIZE_PC_MAPr   s    r   _opcode_cycleszCPU._opcode_cycles`  s    --dkk::
4;;'1,	6	TWWs':':4;;'GG&P	PAGGs%%dkk22Gr   c                 *     | j                   |          S r   )r   r   modes     r   _get_oper_addresszCPU._get_oper_addressg  s    "4T"$$r   c                 N    |t         j                  z  dk7  | _        |dk(  | _        y r   )r   r   r   r   r   s     r   _set_zn_flagszCPU._set_zn_flagsj  s"    #**$)DK1*DKr   c                    |s| xj                   dz  c_         y | j                  | j                         }| xj                  dz  c_        | j                   dz  | j                   |z   t        j                  | j
                     z   dz  k7  r| xj                  dz  c_        |dz  r| xj                   |dz  z  c_         y | xj                   |dz   z  c_         y )Nr   r   rk   r   )rx   r   r}   r   r   r   )r   	conditionoffss      r   _branchzCPU._branchn  s    
gglg==!Dww477T>C,?,?,LLvUU
!d{
ggg
gggr   c                     | j                   |z   | j                  z   }|dkD  | _        | j                   |z   | j                   |z  z  dz  dk7  | _        |dz  | _         | j                  | j                          y )Nr   rk   r   )rt   r   r   r  )r   r   sums      r   _add_to_accumulatorzCPU._add_to_accumulator~  si    
&&5.4;;
&C*DKFFUN#tvv|4t;q@DK4ZDFtvvr   c                 @    ||k\  | _         | j                  ||z
         y r   )r   r  )r   val0val1s      r   _comparezCPU._compare  s    $,DKtd{#r   c                 (   | j                  | j                         | j                  | j                         t        j
                  z  t        j                   z         d| _        d| _        | j                  t        j                  |         | _        y Nr   r   )r   rx   r   r   r   r   r   r   r   r   INT_ADDR)r   interrupt_types     r   
_interruptzCPU._interrupt  sd    twwOOT__&3

{BCDKDKs||N;<DGr   c                 h    | j                  | j                   | j                  |                       y r   r  r   r   r   s     r   _adczCPU._adc  s*    T]]+B4+<+<T+B+DEFr   c                     | xj                   | j                   | j                  |                z  c_         | j                  | j                          y r   rt   r   r   r  r   s     r   _andzCPU._and  <    FFdmm3D--d3566Ftvvr   c                     | j                   dz  dz  | j                   dz  dk7  c| _         | _        | j                  | j                          y Nr   r   rk   r   rt   r   r  r   s    r   _asl_acczCPU._asl_acc  s>    &&A+,dfftmq.@DFDKtvvr   c                      | j                   |          }| j                  |      }|dz  dz  |dz  dk7  c}| _        | j                  ||       | j	                  |       y r  r   r   r   r   r  r   r   r   r   s       r   _aslzCPU._asl  sa    "4T"$DMM$E!d*EDLA,=E4;NN4ur   c                 <    | j                  | j                          y r   r  r   r   s     r   _bcczCPU._bcc      LLT[[!r   c                 :    | j                  | j                         y r   r"  r   s     r   _bcszCPU._bcs      LLr   c                 :    | j                  | j                         y r   r  r   r   s     r   _beqzCPU._beq  r'  r   c                     | j                   | j                  |                }|t        j                  z  dk7  | _        |t        j
                  z  dk7  | _        || j                  z  dk(  | _        y r   )	r   r   r   r   r   r   r   rt   r   r   r   r   s      r   _bitzCPU._bit  s_    MM1$++D134E#**$)DK#**$)DK$&&.A%DKr   c                 :    | j                  | j                         y r   r  r   r   s     r   _bmizCPU._bmi  r'  r   c                 <    | j                  | j                          y r   r)  r   s     r   _bnezCPU._bne  r$  r   c                 <    | j                  | j                          y r   r/  r   s     r   _bplzCPU._bpl  r$  r   c                 B    | j                  t        j                         y r   )r  r   r   r   s     r   _brkzCPU._brk  s    OOCGGr   c                 <    | j                  | j                          y r   r  r   r   s     r   _bvczCPU._bvc  r$  r   c                 :    | j                  | j                         y r   r8  r   s     r   _bvszCPU._bvs  r'  r   c                     d| _         y r   r   r   s     r   _clczCPU._clc  	    DKr   c                     d| _         y r   r   r   s     r   _cldzCPU._cld  r?  r   c                     d| _         y r   r   r   s     r   _clizCPU._cli  r?  r   c                     d| _         y r   )r   r   s     r   _clvzCPU._clv  r?  r   c                     | j                   | j                  |                }| j                  |k\  | _        | j	                  | j                  |z
         y r   )r   r   rt   r   r  r,  s      r   _cmpzCPU._cmp  F    MM1$++D134E&&E/DKtvv~&r   c                     | j                   | j                  |                }| j                  |k\  | _        | j	                  | j                  |z
         y r   )r   r   ru   r   r  r,  s      r   _cpxzCPU._cpx  rJ  r   c                     | j                   | j                  |                }| j                  |k\  | _        | j	                  | j                  |z
         y r   )r   r   rv   r   r  r,  s      r   _cpyzCPU._cpy  rJ  r   c                      | j                   |          }| j                  |      dz
  dz  }| j                  ||       | j                  |       y Nr   r   r   r   r   r  r  s       r   _deczCPU._dec  sK    "4T"$D]]4 1$,ENN4ur   c                 h    | j                   dz
  dz  | _         | j                  | j                          y rP  ru   r  r   s     r   _dexzCPU._dex  (    ffqjD DFtvvr   c                 h    | j                   dz
  dz  | _         | j                  | j                          y rP  rv   r  r   s     r   _deyzCPU._dey  rV  r   c                     | xj                   | j                   | j                  |                z  c_         | j                  | j                          y r   r  r   s     r   _eorzCPU._eor  r  r   c                      | j                   |          }| j                  |      dz   dz  }| j                  ||       | j                  |       y rP  rQ  r  s       r   _inczCPU._inc  sK    "4T"$DMM$!#d*ENN4ur   c                 h    | j                   dz   dz  | _         | j                  | j                          y rP  rT  r   s     r   _inxzCPU._inx  (    VVaZ$DFtvvr   c                 h    | j                   dz   dz  | _         | j                  | j                          y rP  rX  r   s     r   _inyzCPU._iny  r`  r   c                 6     | j                   |          | _        y r   )r   rx   r   s     r   _jmpzCPU._jmp   s    %d%'DGr   c                 x    | j                  | j                  dz   dz          | j                  |          | _        y )Nr   r   )r   rx   r   r   s     r   _jsrzCPU._jsr  s4    tww{V+,%d%'DGr   c                     | j                   | j                  |                | _        | j                  | j                         y r   )r   r   rt   r  r   s     r   _ldazCPU._lda  5    ]]24,,T245DFtvvr   c                     | j                   | j                  |                | _        | j                  | j                         y r   )r   r   ru   r  r   s     r   _ldxzCPU._ldx  ri  r   c                     | j                   | j                  |                | _        | j                  | j                         y r   )r   r   rv   r  r   s     r   _ldyzCPU._ldy  ri  r   c                     | j                   t        j                  z  | _        | xj                   dz  c_         | j                   dk(  | _        d| _        y r  )rt   r   r   r   r   r   r   s    r   _lsr_acczCPU._lsr_acc  s9    &&3::%DKFFqLF&&A+DKDKr   c                      | j                   |          }| j                  |      }|dz	  |t        j                  z  c}| _        | j                  ||       |dk(  | _        d| _        y r  )r   r   r   r   r   r   r   r   r  s       r   _lsrzCPU._lsr  s`    "4T"$DMM$E!USZZ%7E4;NN41*DKDKr   c                      y r    r   s     r   _nopzCPU._nop!      r   c                     | xj                   | j                   | j                  |                z  c_         | j                  | j                          y r   r  r   s     r   _orazCPU._ora$  r  r   c                 :    | j                  | j                         y r   )r   rt   r   s     r   _phazCPU._pha(  s    OODFFr   c                 F    | j                  | j                  d             y )Nr   )r   )r   r   r   s     r   _phpzCPU._php+  s    OODOO1O-.r   c                 d    | j                         | _        | j                  | j                         y r   )r   rt   r  r   s     r   _plazCPU._pla.  s"    __DFtvvr   c                 B    | j                  | j                                y r   )r   r   r   s     r   _plpzCPU._plp2  s    OODOO%&r   c                     | j                   | j                  dz  dz  z  | j                  dz  dk7  c| _        | _         | j                  | j                         y r  )r   rt   r  r   s    r   _rol_acczCPU._rol_acc5  sG    ++1(<<dfftmq>PDFDKtvvr   c                      | j                   |          }| j                  |      }|dz  | j                  z  dz  |dz  dk7  c}| _        | j                  ||       | j	                  |       y r  r  r  s       r   _rolzCPU._rol9  sj    "4T"$DMM$E1*t{{2d:EDLA<ME4;NN4ur   c                     | j                   dz	  | j                  dz  z  | j                   dz  c| _         | _        | j                  | j                          y Nr   r[   r  r   s    r   _ror_acczCPU._ror_acc@  sB    66Q;4;;!+;<dffqjDFDKtvvr   c                      | j                   |          }| j                  |      }|dz	  | j                  dz  z  |dz  c}| _        | j                  ||       | j	                  |       y r  r  r  s       r   _rorzCPU._rorD  se    "4T"$DMM$E!dkkQ&66	E4;NN4ur   c                     | j                  | j                                | j                         | j                         dz  z  | _        y r   )r   r   rx   r   s     r   _rtizCPU._rtiK  s4    OODOO%&oo4??#4#9:DGr   c                 \    | j                         | j                         dz  z  dz   | _        y NrU   r   )r   rx   r   s     r   _rtszCPU._rtsO  s&     DOO$5$:;q@DGr   c                 n    | j                  | j                   | j                  |                dz         y r   r  r   s     r   _sbczCPU._sbcR  s/    T]]+B4+<+<T+B+DELMr   c                     d| _         y Nr   r=  r   s     r   _seczCPU._secU  r?  r   c                     d| _         y r  rA  r   s     r   _sedzCPU._sedX  r?  r   c                     d| _         y r  rD  r   s     r   _seizCPU._sei[  r?  r   c                 `    | j                   | j                  |          | j                         y r   )r   r   rt   r   s     r   _stazCPU._sta^  %    NN*4$$T*,dff5r   c                 `    | j                   | j                  |          | j                         y r   )r   r   ru   r   s     r   _stxzCPU._stxa  r  r   c                 `    | j                   | j                  |          | j                         y r   )r   r   rv   r   s     r   _styzCPU._styd  r  r   c                 \    | j                   | _        | j                  | j                         y r   )rt   ru   r  r   s     r   _taxzCPU._taxg      VVDFtvvr   c                 \    | j                   | _        | j                  | j                         y r   )rt   rv   r  r   s     r   _tayzCPU._tayk  r  r   c                 \    | j                   | _        | j                  | j                         y r   )rw   ru   r  r   s     r   _tsxzCPU._tsxo  s    WWDFtvvr   c                 \    | j                   | _        | j                  | j                         y r   )ru   rt   r  r   s     r   _txazCPU._txas  r  r   c                 &    | j                   | _        y r   )ru   rw   r   s     r   _txszCPU._txsw  s    ffDGr   c                 \    | j                   | _        | j                  | j                         y r   )rv   rt   r  r   s     r   _tyazCPU._tyaz  r  r   c                      | j                   |          }| j                  |      }| xj                  |z  c_        | j                  | j                         | j                  t        j
                  z  | _        y r   )r   r   rt   r  r   r   r   r  s       r   _aaczCPU._aac  sX    "4T"$DMM$EFFeOFtvv&&3::%DKr   c                 ~    | j                   | j                  z  }| j                   | j                  |          |       y r   )rt   ru   r   r   r,  s      r   _aaxzCPU._aax  s2    FFTVVOENN*4$$T*,e4r   c                     | j                  |       | j                  |       | j                  dz  dk7  }| j                  dz  dk7  }|| _        ||z  | _        y )Nrn   r   rU   )r  r  rt   r   r   )r   r   b5b6s       r   _arrzCPU._arr  sP    IIdOIIdO	*		!B	*		!BDKr'DKr   c                 H    | j                  |       | j                  |       y r   )r  rq  r   s     r   _asrzCPU._asr      IIdOIIdOr   c                      | j                   |          }| j                  |      }| xj                  |z  c_        | j                  | _        | j	                  | j                         y r   )r   r   rt   ru   r  r  s       r   _atxzCPU._atx  sO    "4T"$DMM$EFFeOFVVDFtvvr   c                     | j                   dz  }| j                   | j                  |          |       | j                  |       y )N   )rt   r   r   r  r,  s      r   _axazCPU._axa  s=    FFZENN*4$$T*,e4ur   c                     | xj                   | j                  z  c_         | j                   | j                   | j                  |                z
  dkD  | _        y )Ni  )ru   rt   r   r   r   r   s     r   _axszCPU._axs  sC    FFdffF&&4==)@):):4)@)BCCeKDKr   c                      | j                   |          }| j                  |      dz
  dz  }| j                  ||       | j                  | j                  |       y rP  )r   r   r   r  rt   )r   r   r   ress       r   _dcpzCPU._dcp  sO    "4T"$D=="d
*CNN4MM$&&#r   c                      y r   rs  r   s     r   _dopzCPU._dop  ru  r   c                      | j                   |          }| j                  |      dz   dz  }| j                  ||       | j                  |dz         y rP  )r   r   r   r  r  s       r   _isczCPU._isc  sO    "4T"$D]]4 1$,ENN4UT\*r   c                     d| _         y )NT)r{   r   s     r   _kilzCPU._kil  s	    DKr   c                     | j                   | j                  |                | j                  z  }|| _        || _        || _        | j                  |       y r   )r   r   rw   rt   ru   r  )r   r   r  s      r   _larzCPU._lar  sM    
--/))$/1
2TWW
<CDFDFDGsr   c                     | j                   | j                  |                }|| _        || _        | j	                  |       y r   )r   r   rt   ru   r  r,  s      r   _laxzCPU._lax  s=    MM1$++D134EDFDFur   c                 H    | j                  |       | j                  |       y r   )r  r  r   s     r   _rlazCPU._rla  r  r   c                 H    | j                  |       | j                  |       y r   )r  r  r   s     r   _rrazCPU._rra  r  r   c                 H    | j                  |       | j                  |       y r   )r   rw  r   s     r   _slozCPU._slo  r  r   c                 H    | j                  |       | j                  |       y r   )rq  r[  r   s     r   _srezCPU._sre  r  r   c                 v     | j                   |          }| j                  || j                  |dz	  dz   z         y r  )r   r   ru   r   r   r   s      r   _sxazCPU._sxa  6    "4T"$DNN4DAI?34r   c                 v     | j                   |          }| j                  || j                  |dz	  dz   z         y r  )r   r   rv   r  s      r   _syazCPU._sya  r  r   c                      y r   rs  r   s     r   _topzCPU._top  ru  r   c                      y r   rs  r   s     r   _xaazCPU._xaa  s    r   c                      | j                   |          }| j                  | j                  z  | _        | j	                  || j                  |dz  dz   z         y )Nr   r   )r   ru   rt   rw   r   r  s      r   _xaszCPU._xas  sK    "4T"$DfftvvoDGNN4D;$6!#;;<r   c                     | j                  | j                        | _        | xj                  dz  c_        | j                  | j                         y r  )r   rx   r   single_opcoder   s    r   execute_nextzCPU.execute_next  s5    --(DKGGqLGt{{#r   c                    d| _         d| _        d| _        d| _        | j	                  t
        j                  t
        j                           | _        | j                  d       d| _
        d| _        d| _        d| _        d| _        d| _        y )Nr      $   Fr[   )rt   ru   rv   rw   r   r   r  RESETrx   r   ry   r|   r{   r   rz   r}   r   s    r   resetz	CPU.reset  st    DFDFDFDGs||CII67DGNN:DJDKDKDKDODr   c                 H    | j                           | j                  |i | y r   )r  run)r   argskwargss      r   reset_and_runzCPU.reset_and_run  s    JJLDHHdfr   c                     t        dd      5 }|j                  dj                  | j                               d d d        y # 1 sw Y   y xY w)Nzlog.txtr   r   )r   r   joinr~   )r   r   s     r   save_logzCPU.save_log  s<    	i	 #ggdii!"# # #s   +AA
c                    | j                   dd| j                  ddt        j                  | j                     dkD  r%| j	                  | j                   dz   dz        ddndz   t        j                  | j                     dkD  r%| j	                  | j                   dz   dz        ddnd	z   t        j
                  | j                     z   dz   d
| j                  dd| j                  dd| j                  dd| j                         dd	z   d| j                  ddddt        t        | j                  j                  j                              z
  z   | j                  j                  j                   dz   ddt        t        | j                  j                  j                               z
  z   | j                  j                  j                    d| j                    z   S )N04Xz  02Xr   r   r   z   rV   z    zA:z X:z Y:z P:08bzSP:z PPU:rX   ,z CYC:)rx   r   r   r   r   OPCODE_NAMES_MAPrt   ru   rv   r   rw   lenstrrq   ppuscanliner|   r   s    r   log_linezCPU.log_line  s   ggc]"T[[-Q/8;8K8KDKK8X[\8\$--!f,
-c	2!4bgi9<9L9LT[[9Y\]9]$--!f,
-c	2"5cik 
4;;'( +// 	466#,c$&&SC8H7MQO	P
 	DGGC=cQS1F1F-G)H%HIJ488<<K`K`Jaabcd 
CDHHLL//011	23DHHLL4G4G3Hdkk][\ \r   Nc                 j   	 | j                   ry | j                  j                  | j                         | xj                  | j                  z  c_        d| _        | j                  j                         rE| j                  t        j                         | j                  xj                  dz  c_	         |        | j                  | j                        | _        | j                  dz   dz  | _         | j                  | j                             | j                          | xj                  dz  c_        3)Nr   r   r   )r{   rq   tickr}   r|   poll_nmir  r   NMIframesr   rx   r   opcode_funcsr   ry   )r   frame_interrupts     r   r  zCPU.run  s    
	
hhmmD$$%
kkT%%%kd				 1MM$''*dk!f$dg %d$& 
jjAoj9 r   c                 ,     | j                   |           y r   )r  )r   r   s     r   r  zCPU.single_opcode:  s    Dfr   c           
         t        d      D cg c]k  }t        j                  |   t        j                  t        j                  |      | j
                  |   dkD  r| j                  |   | j
                  |   z  ndfm }}|j                  d d       |D cg c]  \  }}}| d| d|  }}}}|S c c}w c c}}}w )Nro   r   c                     | d   S )NrV   rs  )ru   s    r   <lambda>z%CPU.calc_op_average.<locals>.<lambda>?  s
    1Q4 r   T)keyreversez - z: )r   r   r  r   OPCODE_ADDR_MAP	op_counts	op_timerssort)r   r   avgrt   bcs         r   calc_op_averagezCPU.calc_op_average=  s     ch  il  cm  n  ^_C  #S%8%89L9LQ9O%P{  |J  |J  KL  |M  PQ  |QRVR`R`abRcfjftftuvfwRw  WX  Y  nC  nHHH.,/
0
0AqaSA3b
0C
0J n
0s   A0B5B:c           	         t        d      D cg c]  }d c}| _        t        d      D cg c]  }d c}| _        t        d      D ci c]  }|| j                  d|d       c}| _        g | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  | j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  | jB                  | jD                  | jF                  | jH                  | jJ                  | jL                  | jN                  | jP                  | jR                  | jT                  | jV                  | jX                  | jZ                  | j\                  | j^                  | j`                  | jb                  | jd                  | jf                  | jh                  | jj                  | jl                  | jn                  | jp                  | jr                  | jt                  | jv                  | jx                  | jz                  | j|                  | j~                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  | j$                  | j&                  | j(                  | j*                  | j,                  | j.                  | j0                  | j2                  | j4                  | j6                  | j8                  | j:                  | j<                  | j>                  | j@                  | jB                  | jD                  | jF                  | jH                  | jJ                  | jL                  | jN                  | jP                  | jR                  | jT                  | jV                  | jX                  | jZ                  | j\                  | j^                  | j`                  | jb                  | jd                  | jf                  | jh                  | jj                  | jl                  | jn                  | jp                  | jr                  | jt                  | jv                  | jx                  | jz                  | j|                  | j~                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                   | j                  | j                  | j                  | j                  | _        y c c}w c c}w c c}w )Nro   r   _opr   (  r   r  r  __getattribute__r  _op00_op01_op02_op03_op04_op05_op06_op07_op08_op09_op0a_op0b_op0c_op0d_op0e_op0f_op10_op11_op12_op13_op14_op15_op16_op17_op18_op19_op1a_op1b_op1c_op1d_op1e_op1f_op20_op21_op22_op23_op24_op25_op26_op27_op28_op29_op2a_op2b_op2c_op2d_op2e_op2f_op30_op31_op32_op33_op34_op35_op36_op37_op38_op39_op3a_op3b_op3c_op3d_op3e_op3f_op40_op41_op42_op43_op44_op45_op46_op47_op48_op49_op4a_op4b_op4c_op4d_op4e_op4f_op50_op51_op52_op53_op54_op55_op56_op57_op58_op59_op5a_op5b_op5c_op5d_op5e_op5f_op60_op61_op62_op63_op64_op65_op66_op67_op68_op69_op6a_op6b_op6c_op6d_op6e_op6f_op70_op71_op72_op73_op74_op75_op76_op77_op78_op79_op7a_op7b_op7c_op7d_op7e_op7f_op80_op81_op82_op83_op84_op85_op86_op87_op88_op89_op8a_op8b_op8c_op8d_op8e_op8f_op90_op91_op92_op93_op94_op95_op96_op97_op98_op99_op9a_op9b_op9c_op9d_op9e_op9f_opa0_opa1_opa2_opa3_opa4_opa5_opa6_opa7_opa8_opa9_opaa_opab_opac_opad_opae_opaf_opb0_opb1_opb2_opb3_opb4_opb5_opb6_opb7_opb8_opb9_opba_opbb_opbc_opbd_opbe_opbf_opc0_opc1_opc2_opc3_opc4_opc5_opc6_opc7_opc8_opc9_opca_opcb_opcc_opcd_opce_opcf_opd0_opd1_opd2_opd3_opd4_opd5_opd6_opd7_opd8_opd9_opda_opdb_opdc_opdd_opde_opdf_ope0_ope1_ope2_ope3_ope4_ope5_ope6_ope7_ope8_ope9_opea_opeb_opec_oped_opee_opef_opf0_opf1_opf2_opf3_opf4_opf5_opf6_opf7_opf8_opf9_opfa_opfb_opfc_opfd_opfe_opff)r   _r   s      r   r   zCPU.def_opcodesC  sW   !&s,Aa,DN!&s,Aa,DNJOPS*UQD11C#w-@@UD!
jj!**!"jj!*.**!6:jj!BF**!NRjj!Z^ZdZd!
jj!**!"jj!*.**!6:jj!BF**!NRjj!Z^ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj	! **	! #jj	! +/**	! 7;jj	! CG**	! OSjj	! [_ZdZd	!
 jj!
 **!
 #jj!
 +/**!
 7;jj!
 CG**!
 OSjj!
 [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd! jj! **! #jj! +/**! 7;jj! CG**! OSjj! [_ZdZd!  jj!!  **!!  #jj!!  +/**!!  7;jj!!  CG**!!  OSjj!!  [_ZdZd!!" jj#!" **#!" #jj#!" +/**#!" 7;jj#!" CG**#!" OSjj#!" [_ZdZd#!$ jj%!$ **%!$ #jj%!$ +/**%!$ 7;jj%!$ CG**%!$ OSjj%!$ [_ZdZd%!& jj'!& **'!& #jj'!& +/**'!& 7;jj'!& CG**'!& OSjj'!& [_ZdZd'!( jj)!( **)!( #jj)!( +/**)!( 7;jj)!( CG**)!( OSjj)!( [_ZdZd)!* jj+!* **+!* #jj+!* +/**+!* 7;jj+!* CG**+!* OSjj+!* [_ZdZd+!, jj-!, **-!, #jj-!, +/**-!, 7;jj-!, CG**-!, OSjj-!, [_ZdZd-!. jj/!. **/!. #jj/!. +/**/!. 7;jj/!. CG**/!. OSjj/!. [_ZdZd/!0 jj1!0 **1!0 #jj1!0 +/**1!0 7;jj1!0 CG**1!0 OSjj1!0 [_ZdZd1!2 jj3!2 **3!2 #jj3!2 +/**3!2 7;jj3!2 CG**3!2 OSjj3!2 [_ZdZd3!4 jj5!4 **5!4 #jj5!4 +/**5!4 7;jj5!4 CG**5!4 OSjj5!4 [_ZdZd5!6 jj7!6 **7!6 #jj7!6 +/**7!6 7;jj7!6 CG**7!6 OSjj7!6 [_ZdZd7!8 jj9!8 **9!8 #jj9!8 +/**9!8 7;jj9!8 CG**9!8 OSjj9!8 [_ZdZd9!: jj;!: **;!: #jj;!: +/**;!: 7;jj;!: CG**;!: OSjj;!: [_ZdZd;!< jj=!< **=!< #jj=!< +/**=!< 7;jj=!< CG**=!< OSjj=!< [_ZdZd=!> jj?!> **?!> #jj?!> +/**?!> 7;jj?!> CG**?!> OSjj?!> [_ZdZd?!@ jjA!@ **A!@ #jjA!@ +/**A!@ 7;jjA!@ CG**A!@ OSjjA!@ [_ZdZdA!D -,Us   	s<	t
tc                 B    | j                  t        j                         y r   )r6  r   IMPLIEDr   s    r   r  z	CPU._op00l      499S[[)r   c                 B    | j                  t        j                         y r   )rw  r   
INDIRECT_Xr   s    r   r  z	CPU._op01m      499S^^,r   c                 B    | j                  t        j                         y r   r  r   r  r   s    r   r  z	CPU._op02n  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op03o  r  r   c                      y r   rs  r   s    r   r  z	CPU._op04p      r   c                 B    | j                  t        j                         y r   )rw  r   ZEROPAGEr   s    r   r  z	CPU._op05q      499S\\*r   c                 B    | j                  t        j                         y r   )r   r   r  r   s    r   r  z	CPU._op06r  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op07s  r  r   c                 B    | j                  t        j                         y r   )r{  r   r  r   s    r   r  z	CPU._op08t  r  r   c                 B    | j                  t        j                         y r   )rw  r   	IMMEDIATEr   s    r   r  z	CPU._op09u      499S]]+r   c                 $    | j                          y r   )r  r   s    r   r  z	CPU._op0av  
    4==?r   c                 B    | j                  t        j                         y r   r  r   r$  r   s    r   r  z	CPU._op0bw  r%  r   c                      y r   rs  r   s    r   r  z	CPU._op0cx  r  r   c                 B    | j                  t        j                         y r   )rw  r   ABSOLUTEr   s    r   r  z	CPU._op0dy  r  r   c                 B    | j                  t        j                         y r   )r   r   r,  r   s    r   r  z	CPU._op0ez  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r   z	CPU._op0f{  r  r   c                 B    | j                  t        j                         y r   )r4  r   r  r   s    r   r!  z	CPU._op10|  r  r   c                 B    | j                  t        j                         y r   )rw  r   
INDIRECT_Yr   s    r   r"  z	CPU._op11}  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r#  z	CPU._op12~  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r$  z	CPU._op13  r  r   c                      y r   rs  r   s    r   r%  z	CPU._op14  r  r   c                 B    | j                  t        j                         y r   )rw  r   
ZEROPAGE_Xr   s    r   r&  z	CPU._op15  r  r   c                 B    | j                  t        j                         y r   )r   r   r6  r   s    r   r'  z	CPU._op16  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r(  z	CPU._op17  r  r   c                 B    | j                  t        j                         y r   )r>  r   r  r   s    r   r)  z	CPU._op18  r  r   c                 B    | j                  t        j                         y r   )rw  r   
ABSOLUTE_Yr   s    r   r*  z	CPU._op19  r  r   c                      y r   rs  r   s    r   r+  z	CPU._op1a  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r,  z	CPU._op1b  r  r   c                      y r   rs  r   s    r   r-  z	CPU._op1c  r  r   c                 B    | j                  t        j                         y r   )rw  r   
ABSOLUTE_Xr   s    r   r.  z	CPU._op1d  r  r   c                 B    | j                  t        j                         y r   )r   r   r@  r   s    r   r/  z	CPU._op1e  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r0  z	CPU._op1f  r  r   c                 B    | j                  t        j                         y r   )rf  r   r,  r   s    r   r1  z	CPU._op20  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r2  z	CPU._op21  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r3  z	CPU._op22  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r4  z	CPU._op23  r  r   c                 B    | j                  t        j                         y r   )r-  r   r  r   s    r   r5  z	CPU._op24  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r6  z	CPU._op25  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r7  z	CPU._op26  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r8  z	CPU._op27  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r9  z	CPU._op28  r  r   c                 B    | j                  t        j                         y r   )r  r   r$  r   s    r   r:  z	CPU._op29  r%  r   c                 $    | j                          y r   )r  r   s    r   r;  z	CPU._op2a  r'  r   c                 B    | j                  t        j                         y r   r)  r   s    r   r<  z	CPU._op2b  r%  r   c                 B    | j                  t        j                         y r   )r-  r   r,  r   s    r   r=  z	CPU._op2c  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r>  z	CPU._op2d  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r?  z	CPU._op2e  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r@  z	CPU._op2f  r  r   c                 B    | j                  t        j                         y r   )r0  r   r  r   s    r   rA  z	CPU._op30  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   rB  z	CPU._op31  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   rC  z	CPU._op32  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   rD  z	CPU._op33  r  r   c                      y r   rs  r   s    r   rE  z	CPU._op34  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   rF  z	CPU._op35  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   rG  z	CPU._op36  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   rH  z	CPU._op37  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rI  z	CPU._op38  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   rJ  z	CPU._op39  r  r   c                      y r   rs  r   s    r   rK  z	CPU._op3a  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   rL  z	CPU._op3b  r  r   c                      y r   rs  r   s    r   rM  z	CPU._op3c  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   rN  z	CPU._op3d  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   rO  z	CPU._op3e  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   rP  z	CPU._op3f  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rQ  z	CPU._op40  r  r   c                 B    | j                  t        j                         y r   )r[  r   r  r   s    r   rR  z	CPU._op41  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   rS  z	CPU._op42  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rT  z	CPU._op43  r  r   c                      y r   rs  r   s    r   rU  z	CPU._op44  r  r   c                 B    | j                  t        j                         y r   )r[  r   r  r   s    r   rV  z	CPU._op45  r  r   c                 B    | j                  t        j                         y r   )rq  r   r  r   s    r   rW  z	CPU._op46  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rX  z	CPU._op47  r  r   c                 B    | j                  t        j                         y r   )ry  r   r  r   s    r   rY  z	CPU._op48  r  r   c                 B    | j                  t        j                         y r   )r[  r   r$  r   s    r   rZ  z	CPU._op49  r%  r   c                 $    | j                          y r   )ro  r   s    r   r[  z	CPU._op4a  r'  r   c                 B    | j                  t        j                         y r   )r  r   r$  r   s    r   r\  z	CPU._op4b  r%  r   c                 B    | j                  t        j                         y r   )rd  r   r,  r   s    r   r]  z	CPU._op4c  r  r   c                 B    | j                  t        j                         y r   )r[  r   r,  r   s    r   r^  z	CPU._op4d  r  r   c                 B    | j                  t        j                         y r   )rq  r   r,  r   s    r   r_  z	CPU._op4e  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r`  z	CPU._op4f  r  r   c                 B    | j                  t        j                         y r   )r9  r   r  r   s    r   ra  z	CPU._op50  r  r   c                 B    | j                  t        j                         y r   )r[  r   r1  r   s    r   rb  z	CPU._op51  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   rc  z	CPU._op52  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   rd  z	CPU._op53  r  r   c                      y r   rs  r   s    r   re  z	CPU._op54  r  r   c                 B    | j                  t        j                         y r   )r[  r   r6  r   s    r   rf  z	CPU._op55  r  r   c                 B    | j                  t        j                         y r   )rq  r   r6  r   s    r   rg  z	CPU._op56  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   rh  z	CPU._op57  r  r   c                 B    | j                  t        j                         y r   )rE  r   r  r   s    r   ri  z	CPU._op58  r  r   c                 B    | j                  t        j                         y r   )r[  r   r;  r   s    r   rj  z	CPU._op59  r  r   c                      y r   rs  r   s    r   rk  z	CPU._op5a  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   rl  z	CPU._op5b  r  r   c                      y r   rs  r   s    r   rm  z	CPU._op5c  r  r   c                 B    | j                  t        j                         y r   )r[  r   r@  r   s    r   rn  z	CPU._op5d  r  r   c                 B    | j                  t        j                         y r   )rq  r   r@  r   s    r   ro  z	CPU._op5e  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   rp  z	CPU._op5f  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rq  z	CPU._op60  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rr  z	CPU._op61  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   rs  z	CPU._op62  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rt  z	CPU._op63  r  r   c                      y r   rs  r   s    r   ru  z	CPU._op64  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rv  z	CPU._op65  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rw  z	CPU._op66  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   rx  z	CPU._op67  r  r   c                 B    | j                  t        j                         y r   )r}  r   r  r   s    r   ry  z	CPU._op68  r  r   c                 B    | j                  t        j                         y r   )r  r   r$  r   s    r   rz  z	CPU._op69  r%  r   c                 $    | j                          y r   )r  r   s    r   r{  z	CPU._op6a  r'  r   c                 B    | j                  t        j                         y r   )r  r   r$  r   s    r   r|  z	CPU._op6b  r%  r   c                 B    | j                  t        j                         y r   )rd  r   INDIRECTr   s    r   r}  z	CPU._op6c  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r~  z	CPU._op6d  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op6e  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op6f  r  r   c                 B    | j                  t        j                         y r   )r;  r   r  r   s    r   r  z	CPU._op70  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._op71  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._op72  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._op73  r  r   c                      y r   rs  r   s    r   r  z	CPU._op74  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._op75  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._op76  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._op77  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op78  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._op79  r  r   c                      y r   rs  r   s    r   r  z	CPU._op7a  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._op7b  r  r   c                      y r   rs  r   s    r   r  z	CPU._op7c  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._op7d  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._op7e  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._op7f  r  r   c                      y r   rs  r   s    r   r  z	CPU._op80  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op81  r  r   c                      y r   rs  r   s    r   r  z	CPU._op82  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op83  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op84  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op85  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op86  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op87  r  r   c                 B    | j                  t        j                         y r   )rY  r   r  r   s    r   r  z	CPU._op88  r  r   c                      y r   rs  r   s    r   r  z	CPU._op89  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op8a  r  r   c                      y r   rs  r   s    r   r  z	CPU._op8b  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op8c  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op8d  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op8e  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._op8f  r  r   c                 B    | j                  t        j                         y r   )r#  r   r  r   s    r   r  z	CPU._op90  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._op91  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._op92  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._op93  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._op94   r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._op95  r  r   c                 B    | j                  t        j                         y r   )r  r   
ZEROPAGE_Yr   s    r   r  z	CPU._op96  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op97  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op98  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._op99  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op9a  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op9b  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._op9c  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._op9d	  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._op9e
  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._op9f  r  r   c                 B    | j                  t        j                         y r   )rm  r   r$  r   s    r   r  z	CPU._opa0  r%  r   c                 B    | j                  t        j                         y r   )rh  r   r  r   s    r   r  z	CPU._opa1  r  r   c                 B    | j                  t        j                         y r   )rk  r   r$  r   s    r   r  z	CPU._opa2  r%  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opa3  r  r   c                 B    | j                  t        j                         y r   )rm  r   r  r   s    r   r  z	CPU._opa4  r  r   c                 B    | j                  t        j                         y r   )rh  r   r  r   s    r   r  z	CPU._opa5  r  r   c                 B    | j                  t        j                         y r   )rk  r   r  r   s    r   r  z	CPU._opa6  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opa7  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opa8  r  r   c                 B    | j                  t        j                         y r   )rh  r   r$  r   s    r   r  z	CPU._opa9  r%  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opaa  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opab  r  r   c                 B    | j                  t        j                         y r   )rm  r   r,  r   s    r   r  z	CPU._opac  r  r   c                 B    | j                  t        j                         y r   )rh  r   r,  r   s    r   r  z	CPU._opad  r  r   c                 B    | j                  t        j                         y r   )rk  r   r,  r   s    r   r  z	CPU._opae  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._opaf  r  r   c                 B    | j                  t        j                         y r   )r&  r   r  r   s    r   r  z	CPU._opb0  r  r   c                 B    | j                  t        j                         y r   )rh  r   r1  r   s    r   r  z	CPU._opb1  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._opb2  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._opb3  r  r   c                 B    | j                  t        j                         y r   )rm  r   r6  r   s    r   r  z	CPU._opb4   r  r   c                 B    | j                  t        j                         y r   )rh  r   r6  r   s    r   r  z	CPU._opb5!  r  r   c                 B    | j                  t        j                         y r   )rk  r   r  r   s    r   r  z	CPU._opb6"  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opb7#  r  r   c                 B    | j                  t        j                         y r   )rG  r   r  r   s    r   r  z	CPU._opb8$  r  r   c                 B    | j                  t        j                         y r   )rh  r   r;  r   s    r   r  z	CPU._opb9%  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opba&  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._opbb'  r  r   c                 B    | j                  t        j                         y r   )rm  r   r@  r   s    r   r  z	CPU._opbc(  r  r   c                 B    | j                  t        j                         y r   )rh  r   r@  r   s    r   r  z	CPU._opbd)  r  r   c                 B    | j                  t        j                         y r   )rk  r   r;  r   s    r   r  z	CPU._opbe*  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._opbf+  r  r   c                 B    | j                  t        j                         y r   )rN  r   r$  r   s    r   r  z	CPU._opc0,  r%  r   c                 B    | j                  t        j                         y r   )rI  r   r  r   s    r   r  z	CPU._opc1-  r  r   c                      y r   rs  r   s    r   r  z	CPU._opc2.  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opc3/  r  r   c                 B    | j                  t        j                         y r   )rN  r   r  r   s    r   r  z	CPU._opc40  r  r   c                 B    | j                  t        j                         y r   )rI  r   r  r   s    r   r  z	CPU._opc51  r  r   c                 B    | j                  t        j                         y r   )rR  r   r  r   s    r   r  z	CPU._opc62  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._opc73  r  r   c                 B    | j                  t        j                         y r   )rb  r   r  r   s    r   r  z	CPU._opc84  r  r   c                 B    | j                  t        j                         y r   )rI  r   r$  r   s    r   r  z	CPU._opc95  r%  r   c                 B    | j                  t        j                         y r   )rU  r   r  r   s    r   r  z	CPU._opca6  r  r   c                 B    | j                  t        j                         y r   )r  r   r$  r   s    r   r  z	CPU._opcb7  r%  r   c                 B    | j                  t        j                         y r   )rN  r   r,  r   s    r   r  z	CPU._opcc8  r  r   c                 B    | j                  t        j                         y r   )rI  r   r,  r   s    r   r  z	CPU._opcd9  r  r   c                 B    | j                  t        j                         y r   )rR  r   r,  r   s    r   r  z	CPU._opce:  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._opcf;  r  r   c                 B    | j                  t        j                         y r   )r2  r   r  r   s    r   r  z	CPU._opd0<  r  r   c                 B    | j                  t        j                         y r   )rI  r   r1  r   s    r   r  z	CPU._opd1=  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._opd2>  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._opd3?  r  r   c                      y r   rs  r   s    r   r  z	CPU._opd4@  r  r   c                 B    | j                  t        j                         y r   )rI  r   r6  r   s    r   r  z	CPU._opd5A  r  r   c                 B    | j                  t        j                         y r   )rR  r   r6  r   s    r   r  z	CPU._opd6B  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._opd7C  r  r   c                 B    | j                  t        j                         y r   )rB  r   r  r   s    r   r  z	CPU._opd8D  r  r   c                 B    | j                  t        j                         y r   )rI  r   r;  r   s    r   r  z	CPU._opd9E  r  r   c                      y r   rs  r   s    r   r  z	CPU._opdaF  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._opdbG  r  r   c                      y r   rs  r   s    r   r  z	CPU._opdcH  r  r   c                 B    | j                  t        j                         y r   )rI  r   r@  r   s    r   r  z	CPU._opddI  r  r   c                 B    | j                  t        j                         y r   )rR  r   r@  r   s    r   r  z	CPU._opdeJ  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._opdfK  r  r   c                 B    | j                  t        j                         y r   )rL  r   r$  r   s    r   r  z	CPU._ope0L  r%  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._ope1M  r  r   c                      y r   rs  r   s    r   r  z	CPU._ope2N  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._ope3O  r  r   c                 B    | j                  t        j                         y r   )rL  r   r  r   s    r   r  z	CPU._ope4P  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._ope5Q  r  r   c                 B    | j                  t        j                         y r   )r]  r   r  r   s    r   r  z	CPU._ope6R  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r  z	CPU._ope7S  r  r   c                 B    | j                  t        j                         y r   )r_  r   r  r   s    r   r  z	CPU._ope8T  r  r   c                 B    | j                  t        j                         y r   r  r   r$  r   s    r   r  z	CPU._ope9U  r%  r   c                      y r   rs  r   s    r   r  z	CPU._opeaV  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._opebW  r%  r   c                 B    | j                  t        j                         y r   )rL  r   r,  r   s    r   r  z	CPU._opecX  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r  z	CPU._opedY  r  r   c                 B    | j                  t        j                         y r   )r]  r   r,  r   s    r   r  z	CPU._opeeZ  r  r   c                 B    | j                  t        j                         y r   )r  r   r,  r   s    r   r   z	CPU._opef[  r  r   c                 B    | j                  t        j                         y r   )r*  r   r  r   s    r   r  z	CPU._opf0\  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._opf1]  r  r   c                 B    | j                  t        j                         y r   r  r   s    r   r  z	CPU._opf2^  r  r   c                 B    | j                  t        j                         y r   )r  r   r1  r   s    r   r  z	CPU._opf3_  r  r   c                      y r   rs  r   s    r   r  z	CPU._opf4`  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._opf5a  r  r   c                 B    | j                  t        j                         y r   )r]  r   r6  r   s    r   r  z	CPU._opf6b  r  r   c                 B    | j                  t        j                         y r   )r  r   r6  r   s    r   r  z	CPU._opf7c  r  r   c                 B    | j                  t        j                         y r   )r  r   r  r   s    r   r	  z	CPU._opf8d  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r
  z	CPU._opf9e  r  r   c                      y r   rs  r   s    r   r  z	CPU._opfaf  r  r   c                 B    | j                  t        j                         y r   )r  r   r;  r   s    r   r  z	CPU._opfbg  r  r   c                      y r   rs  r   s    r   r  z	CPU._opfch  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._opfdi  r  r   c                 B    | j                  t        j                         y r   )r]  r   r@  r   s    r   r  z	CPU._opfej  r  r   c                 B    | j                  t        j                         y r   )r  r   r@  r   s    r   r  z	CPU._opffk  r  r   )r   r   (  __name__
__module____qualname__r  	enumerateOPCODE_DOC_MAPr  r   r   r   OPCODE_PC_MAPr   r  r$  r  r,  r6  r  r@  r;  r  r1  	ACCUMULATr  r   IRQr   r  r  r   r   r   r   r   r   r   r   
STACK_PAGEr  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r#  r&  r*  r-  r0  r2  r4  r6  r9  r;  r>  rB  rE  rG  rI  rL  rN  rR  rU  rY  r[  r]  r_  rb  rd  rf  rh  rk  rm  ro  rq  rt  rw  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  ).0kvs   000r   r   r      sp   & &/ 
0 
& 
 
TQAqD 
. '0 1 '  daQT /& '0 1 '  daQT /& )2 3 )  1q!t & '0 1 '  daQT /& %. / %  DAq1a4 -& *3 4 *  A1 * ')((******)(/ 	
#	#	#
%&&&&&&&&*(# >
S G1@CPPUUgiFZ*4

4CE@@
)#*"83% $=G"&"""'
'
'
((	/';AN666&5
L	+55		=$
#\B 'R *,),***)+"+***),),,,,),,,,,*,),****)+"+****),),,,,),,,,,),),***)+"+****),),,,,),,,,,),),***)+"+****),),,,,),,,,,,,****))****),),,,,,),)*,,,,+,+,****)+)*****),),,,,,),),,,,,+,,****)+)+****),),,,,),,,,,+,,****)++****),),,,,),,,,,_"
&&&&&s(   ['[.[57[<\7\
\r   )rq   r   timer   rs  r   r   <module>r3     s     
d- d-r   