
    ZSh                     ,    S SK Jr  SSKr " S S5      rg)   )Bus    Nc                      \ rS rSr/ SQr\" / SQ5      r\" / SQ5      r\" / SQ5      r\" / SQ5      r	\" / SQ5      r
\" / SQ5      r\" / S	Q5      rS
rSrSrSrSrSrSrSrSrSrSrSr/ SQrS
rSrSrSrSrSrSr Sr!Sr"Sr#Sr$Sr%Sr&/ SQr'S\(4S jr)S r*S r+S  r,S! r-S" r.S# r/S$ r0S% r1S& r2S' r3S( r4S) r5S* r6S+ r7S, r8S- r9S. r:GSS/ jr;S0 r<S1 r=S2 r>S3 r?S4 r@S5 rAS6 rBS7 rCS8 rDS9 rES: rFS; rGS< rHS= rIS> rJS? rKS@ rLSA rMSB rNSC rOSD rPSE rQSF rRSG rSSH rTSI rUSJ rVSK rWSL rXSM rYSN rZSO r[SP r\SQ r]SR r^SS r_ST r`SU raSV rbSW rcSX rdSY reSZ rfS[ rgS\ rhS] riS^ rjS_ rkS` rlSa rmSb rnSc roSd rpSe rqSf rrSg rsSh rtSi ruSj rvSk rwSl rxSm rySn rzSo r{Sp r|Sq r}Sr r~Ss rSt rSu rSv rSw rSx rSy rSz rS{ rS| rS} rS~ rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rGSS jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS Gr S GrS GrS GrS GrS GrS GrS GrS GrS Gr	S Gr
GS  GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS	 GrGS
 GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS Gr GS Gr!GS Gr"GS Gr#GS Gr$GS Gr%GS Gr&GS Gr'GS Gr(GS Gr)GS Gr*GS  Gr+GS! Gr,GS" Gr-GS# Gr.GS$ Gr/GS% Gr0GS& Gr1GS' Gr2GS( Gr3GS) Gr4GS* Gr5GS+ Gr6GS, Gr7GS- Gr8GS. Gr9GS/ Gr:GS0 Gr;GS1 Gr<GS2 Gr=GS3 Gr>GS4 Gr?GS5 Gr@GS6 GrAGS7 GrBGS8 GrCGS9 GrDGS: GrEGS; GrFGS< GrGGS= GrHGS> GrIGS? GrJGS@ GrKGSA GrLGSB GrMGSC GrNGSD GrOGSE GrPGSF GrQGSG GrRGSH GrSGSI GrTGSJ GrUGSK GrVGSL GrWGSM GrXGSN GrYGSO GrZGSP Gr[GSQ Gr\GSR Gr]GSS Gr^GST Gr_GSU Gr`GSV GraGSW GrbGSX GrcGSY GrdGSZ GreGS[ GrfGS\ GrgGS] GrhGS^ GriGS_ GrjGS` GrkGSa GrlGSb GrmGSc GrnGSd GroGSe GrpGSf GrqGSg GrrGSh GrsGSi GrtGSj GruGSk GrvGSl GrwGSm GrxGSn GryGSo GrzGSp Gr{GSq Gr|GSr Gr}GSs Gr~GSt GrGSu GrGSv GrGSw GrGSx GrGSy GrGSz GrGS{ GrGS| GrGS} GrGS~ GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGSGrg(  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-   r0   r.   BCCr-   r
   AXAr/   r-   r0   r.   TYAr-   TXSXASSYAr-   SXAr5   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   DCPrF   rG   DECrH   INYrG   DEXAXSrF   rG   rI   rH   BNErG   r
   rH   r   rG   rI   rH   CLDrG   r   rH   r   rG   rI   rH   CPXSBCr   ISCrO   rP   INCrQ   INXrP   r   rP   rO   rP   rR   rQ   BEQrP   r
   rQ   r   rP   rR   rQ   SEDrP   r   rQ   r   rP   rR   rQ   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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      rW   rW   r   r   
   r      rY   rY   rY   r   	   r   rZ   r      r[   r[   r   r   r   r      r\   r\   r\   rY   rV   r   rV   rW   rW   rW   rW   r   r   rX   r   rY   rY   rY   rY   r   rZ   r   rZ   r   r[   r[   r[   r   r   r   r   r\   r\   r\   r\   r   rV   r   rV   r   rW   rW   rW   r   r   rX   r   rY   rY   rY   rY   r   rZ   r   rZ   r   r[   r[   r[   r   r   r   r   r\   r\   r\   r\   r   rV   r   rV   r   rW   rW   rW   r   r   rX   r      rY   rY   rY   r   rZ   r   rZ   r   r[   r[   r[   r   r   r   r   r\   r\   r\   r\   r   rV   r   rV   rW   rW   rW   rW   r   r   r   r   rY   rY   rY   rY   r   rZ   r   rZ   r[   r[      r^   r   r   r   rW   r   r\   r^   r   r   rV   r   rV   rW   rW   rW   rW   r   r   r   rW   rY   rY   rY   rY   r   rZ   r   rZ   r[   r[   r^   r^   r   r   r   r   r\   r\   r   r   r   rV   r   rV   rW   rW   rW   rW   r   r   r   r   rY   rY   rY   rY   r   rZ   r   rZ   r   r[   r[   r[   r   r   r   r   r\   r\   r\   r\   r   rV   r   rV   rW   rW   rW   rW   r   r   r   r   rY   rY   rY   rY   r   rZ   r   rZ   r   r[   r[   r[   r   r   r   r   r\   r\   r\   r\   (   r   rW   r   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   rY   rW   r   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   r   rW   r   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   r   rW   r   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   rW   rW   rW   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   rW   rW   rW   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   rW   rW   rW   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   rW   rW   rW   rW   rW   rW   rW   rW   r   rW   r   rW   rY   rY   rY   rY   rW   rW   r   rW   rW   rW   rW   rW   r   rY   r   rY   rY   rY   rY   rY   (   r   r\   r   rV   rY   rY   r^   r^   rY   rW   rW   rW   r[   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   r\   r\   r   rV   rY   rY   r^   r^   r[   rW   rW   rW   r[   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   r\   r\   r   rV   rY   rY   r^   r^   rY   rW   rW   rW   rY   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   r\   r\   r   rV   rY   rY   r^   r^   r[   rW   rW   rW   r^   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   rW   r\   rW   r\   rY   rY   rY   rY   rW   rW   rW   rW   r[   r[   r[   r[   rW   r\   r   r\   r[   r[   r[   r[   rW   r^   rW   r^   r^   r^   r^   r^   rW   r\   rW   r\   rY   rY   rY   rY   rW   rW   rW   rW   r[   r[   r[   r[   rW   r^   r   r^   r[   r[   r[   r[   rW   r[   rW   r[   r[   r[   r[   r[   rW   r\   rW   rV   rY   rY   r^   r^   rW   rW   rW   rW   r[   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   rW   r\   rW   rV   rY   rY   r^   r^   rW   rW   rW   rW   r[   r[   r\   r\   rW   r^   r   rV   r[   r[   r\   r\   rW   r[   rW   r   r[   r[   r   r   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   (   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   r   r   r   rW   rW   rW   rW   r   r   r   r   r   r   r   r   r   rW   r   rW   rW   rW   rW   rW   r   r   rW   rY   r[   r^   r\   rV   rZ   rX   r]   )Implied	ImmediateZeroPageAbsolute	ZeroPageX	ZeroPageY	AbsoluteX	AbsoluteY	IndirectX	IndirectYAccumulatorIndirect   @             )  rp   i  i  busc                    SU l         Xl        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        / U l        U R                  S5        U R                  5         U R                  5         g )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     9C:\Users\trevor\Downloads\nes_v0.5\nes_v0.5\engine\cpu.py__init__CPU.__init__   s    DH DFDFDFDGDG DJDODKDKDDHNN:    c           
         [        SS5       nUR                  S5        UR                  S5        [        S5       H  nUS-  nUR                  SUS S	35        [        S
5       HE  nUR                  SU R                  X4-   5      S 35        US-  S:X  d  M4  UR                  S5        MG     UR                  S5        M     S S S 5        g ! , (       d  f       g = f)Nzhexdump.txtwz<0xADDR |  0  1  2  3   4  5  6  7   8  9  A  B   C  D  E  F
z<-----------------------------------------------------------
i   r[   0x04xz |rn    02xrY   
)openwriterangemem_read)r   fiaddrjs        r   dumpCPU.dump   s    	mS	!QggMNggMNV}!Av	"T#Jb!"rA
''AdmmDH-c23
4UaZ  	
  
"	!	!s   BC*C
Cc                 r    [         R                   Vs/ s H  n[        SU-   5      PM     snU l        g s  snf )Nzself.oper_addr_)r   OP_ADDR_STRINGSevaloper_address)r   ss     r   r   CPU.def_oper_address   s/    >A>Q>QR>Q/!34>QRDRs   4c                     [        S5      $ Nzbad operand addressprintr   s    r   oper_addr_ImpliedCPU.oper_addr_Implied       %0E*F#Fr   c                     U R                   $ N)rx   r   s    r   oper_addr_ImmediateCPU.oper_addr_Immediate   s
    $''>r   c                 8    U R                  U R                  5      $ r   )r   rx   r   s    r   oper_addr_ZeroPageCPU.oper_addr_ZeroPage  s    $--*@#@r   c                 8    U R                  U R                  5      $ r   )mem_read_16rx   r   s    r   oper_addr_AbsoluteCPU.oper_addr_Absolute  s    $*:*:477*C#Cr   c                 X    U R                  U R                  5      U R                  -   S-  $ N   )r   rx   ru   r   s    r   oper_addr_ZeroPageXCPU.oper_addr_ZeroPageX  "    $--*@466*ID*P#Pr   c                 X    U R                  U R                  5      U R                  -   S-  $ r   )r   rx   rv   r   s    r   oper_addr_ZeroPageYCPU.oper_addr_ZeroPageY  r   r   c                 X    U R                  U R                  5      U R                  -   S-  $ N  )r   rx   ru   r   s    r   oper_addr_AbsoluteXCPU.oper_addr_AbsoluteX  $    $*:*:477*Cdff*Lv*U#Ur   c                 X    U R                  U R                  5      U R                  -   S-  $ r   )r   rx   rv   r   s    r   oper_addr_AbsoluteYCPU.oper_addr_AbsoluteY  r   r   c                 v    U R                  U R                  U R                  5      U R                  -   S-  5      $ r   )mem_read_16_wrapr   rx   ru   r   s    r   oper_addr_IndirectXCPU.oper_addr_IndirectX  s1    $*?*?dgg@VY]Y_Y_@_bf@f*g#gr   c                 v    U R                  U R                  U R                  5      5      U R                  -   S-  $ r   )r   r   rx   rv   r   s    r   oper_addr_IndirectYCPU.oper_addr_IndirectY  s1    $*?*?dgg@V*WZ^Z`Z`*`ci*i#ir   c                     [        S5      $ r   r   r   s    r   oper_addr_AccumulatorCPU.oper_addr_Accumulator	  r   r   c                 V    U R                  U R                  U R                  5      5      $ r   )r   r   rx   r   s    r   oper_addr_IndirectCPU.oper_addr_Indirect
  s$    $*?*?@P@PQUQXQX@Y*Z#Zr   c                    U[         R                  -  S:g  U l        U[         R                  -  S:g  U l        U[         R
                  -  S:g  U l        U[         R                  -  S:g  U l        U[         R                  -  S:g  U l
        U[         R                  -  S:g  U l        U[         R                  -  S:g  U l        U[         R                  -  S:g  U l        g 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   CPU.set_flags  s    #**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DK#**$)DKr   c                 2    U R                  US-  S-  5        g )N   rm   )r   r   s     r   
_set_flagsCPU._set_flags  s    NN5:%
23r   c                     U R                   S-  U R                  S-  -  U R                  S-  -  U R                  S-  -  U R                  S-  -  U R
                  S-  -  U R                  S-  -  U R                  -  $ )Nr   r\   r^   r[   rY   rW   r   )r   r   r   r   r   r   r   r   r   s    r   	get_flagsCPU.get_flags  s    
kkQ
kkQ
kkQ kkQ kkQ	
 kkQ kkQ kk	r   c                     U R                   S-  U R                  S-  -  [        R                  -  US-  -  U R                  S-  -  U R
                  S-  -  U R                  S-  -  U R                  -  $ )Nr   r\   r[   rY   rW   r   )r   r   r   r   r   r   r   r   )r   b_flags     r   
_get_flagsCPU._get_flags%  s    
kkQ
kkQ	jj Q kkQ	
 kkQ kkQ kk	r   c                 n    U R                   R                  U R                   R                  U      " U5      $ r   )rq   
read_funcsread_func_idxr   r   s     r   r   CPU.mem_read?  s+    88txx55d;<TBBr   c                 p    U R                   R                  U R                   R                  U      " X5        g r   )rq   write_funcswrite_func_idxr   r   r   s      r   	mem_writeCPU.mem_writeB  s(    HH0067Dr   c                 T    U R                  U5      U R                  US-   5      S-  -  $ )Nr   rV   r   r   s     r   r   CPU.mem_read_16E  s(    ==$--q"9Q">??r   c                     US-  S:X  a)  U R                  U5      U R                  US-  5      S-  -  $ U R                  U5      U R                  US-   5      S-  -  $ )Nr      rV   r   r   r   s     r   r   CPU.mem_read_16_wrapH  sZ    f}]]4 DMM$-$@A$EFF==$--q"9Q">??r   c                 \    U R                  XS-  5        U R                  US-   US-	  5        g )Nr   r   rV   )r   r   s      r   mem_write_16CPU.mem_write_16M  s(    NN4&NN4!8UaZ(r   c                 p    U R                  SU R                  -   U5        U R                  S-
  S-  U l        g )Nro   r   r   )r   rw   r   s     r   
stack_pushCPU.stack_pushQ  s,    NN5477?E*ww{d"DGr   c                 l    U R                   S-   S-  U l         U R                  SU R                   -   5      $ )Nr   r   ro   )rw   r   r   s    r   
stack_pullCPU.stack_pullU  s-    ww{d"DG==))r   c                 T    U R                  US-	  5        U R                  US-  5        g )NrV   r   )r  r   s     r   stack_push_16CPU.stack_push_16Y  s"    OOEQJOOEDL!r   c                 J    U R                  5       U R                  5       S-  -  $ NrV   )r  r   s    r   stack_pull_16CPU.stack_pull_16]  s     ?? 1Q 677r   c                    U =R                   [        R                  U R                     -  sl         [        R                  U R                     S:X  aS  U R
                  S-  U R
                  [        R                  U R                     -   S-  :w  a  U =R                   S-  sl         U =R
                  [        R                  U R                     -  sl        g )Nr   r   )r}   r   OPCODE_CYCLES_MAPopcodeOPCODE_WRAP_MAPrx   OPCODE_SIZE_MAPOPCODE_SIZE_PC_MAPr   s    r   _opcode_cyclesCPU._opcode_cycles`  s    --dkk::
4;;'1,	6	TWWs':':4;;'GG&P	PAGGs%%dkk22Gr   c                 *    U R                   U   " 5       $ r   )r   r   modes     r   _get_oper_addressCPU._get_oper_addressg  s    T"$$r   c                 N    U[         R                  -  S:g  U l        US:H  U l        g r   )r   r   r   r   r   s     r   _set_zn_flagsCPU._set_zn_flagsj  s"    #**$)DK1*DKr   c                    U(       d  U =R                   S-  sl         g U R                  U R                   5      nU =R                  S-  sl        U R                   S-  U R                   U-   [        R                  U R
                     -   S-  :w  a  U =R                  S-  sl        US-  (       a  U =R                   US-  -  sl         OU =R                   US-   -  sl         U =R                   S-  sl         g )Nr   r   rk   r   r   )rx   r   r}   r   r  r  )r   	conditionoffss      r   _branchCPU._branchn  s    
gglg==!Dww477T>C,?,?,LLvUU
!d{
ggg
gggGGvGr   c                     U R                   U-   U R                  -   nUS:  U l        U R                   U-  ) U R                   U-  -  S-  S:g  U l        US-  U l         U R                  U R                   5        g )Nr   rk   r   )rt   r   r   r  )r   r   sums      r   _add_to_accumulatorCPU._add_to_accumulator  si    
&&5.4;;
&C*DKFFUN#tvv|4t;q@DK4ZDFtvvr   c                 <    X:  U l         U R                  X-
  5        g r   )r   r  )r   val0val1s      r   _compareCPU._compare  s    ,DKt{#r   c                 (   U R                  U R                  5        U R                  U R                  5       [        R
                  -  [        R                  ) -  5        SU l        SU l        U R                  [        R                  U   5      U l        g Nr   r   )r  rx   r  r   r   r   r   r   r   r   INT_ADDR)r   interrupt_types     r   
_interruptCPU._interrupt  sd    twwOOT__&3

{BCDKDKs||N;<DGr   c                 h    U R                  U R                  U R                  U   " 5       5      5        g r   r(  r   r   r  s     r   _adcCPU._adc  s'    T]]4+<+<T+B+DEFr   c                     U =R                   U R                  U R                  U   " 5       5      -  sl         U R                  U R                   5        g r   rt   r   r   r  r  s     r   _andCPU._and  9    FFdmmD--d3566Ftvvr   c                     U R                   S-  S-  U R                   S-  S:g  sU l         U l        U R                  U R                   5        g Nr   r   rk   r   rt   r   r  r   s    r   _asl_accCPU._asl_acc  s>    &&A+,dfftmq.@DFDKtvvr   c                     U R                   U   " 5       nU R                  U5      nUS-  S-  US-  S:g  so0l        U R                  X#5        U R	                  U5        g r?  r   r   r   r   r  r   r  r   r   s       r   _aslCPU._asl  s[    T"$DMM$E!d*EDLA,=E;NN4ur   c                 D    U R                  U R                  (       + 5        g r   r$  r   r  s     r   _bccCPU._bcc      LLT[[!r   c                 :    U R                  U R                  5        g r   rI  r  s     r   _bcsCPU._bcs      LLr   c                 :    U R                  U R                  5        g r   r$  r   r  s     r   _beqCPU._beq  rP  r   c                     U R                  U R                  U   " 5       5      nU[        R                  -  S:g  U l        U[        R
                  -  S:g  U l        X R                  -  S:H  U l        g r   )	r   r   r   r   r   r   r   rt   r   r   r  r   s      r   _bitCPU._bit  sZ    MM$++D134E#**$)DK#**$)DK&&.A%DKr   c                 :    U R                  U R                  5        g r   r$  r   r  s     r   _bmiCPU._bmi  rP  r   c                 D    U R                  U R                  (       + 5        g r   rR  r  s     r   _bneCPU._bne  rL  r   c                 D    U R                  U R                  (       + 5        g r   rZ  r  s     r   _bplCPU._bpl  rL  r   c                 B    U R                  [        R                  5        g r   )r3  r   r   r  s     r   _brkCPU._brk  s    OOCGGr   c                 D    U R                  U R                  (       + 5        g r   r$  r   r  s     r   _bvcCPU._bvc  rL  r   c                 :    U R                  U R                  5        g r   rg  r  s     r   _bvsCPU._bvs  rP  r   c                     SU l         g r   r   r  s     r   _clcCPU._clc  	    DKr   c                     SU l         g r   r   r  s     r   _cldCPU._cld  rq  r   c                     SU l         g r   r   r  s     r   _cliCPU._cli  rq  r   c                     SU l         g r   )r   r  s     r   _clvCPU._clv  rq  r   c                     U R                  U R                  U   " 5       5      nU R                  U:  U l        U R	                  U R                  U-
  5        g r   )r   r   rt   r   r  rV  s      r   _cmpCPU._cmp  C    MM$++D134E&&E/DKtvv~&r   c                     U R                  U R                  U   " 5       5      nU R                  U:  U l        U R	                  U R                  U-
  5        g r   )r   r   ru   r   r  rV  s      r   _cpxCPU._cpx  r  r   c                     U R                  U R                  U   " 5       5      nU R                  U:  U l        U R	                  U R                  U-
  5        g r   )r   r   rv   r   r  rV  s      r   _cpyCPU._cpy  r  r   c                     U R                   U   " 5       nU R                  U5      S-
  S-  nU R                  X#5        U R                  U5        g Nr   r   r   r   r   r  rE  s       r   _decCPU._dec  sG    T"$D]]4 1$,ENN4ur   c                 h    U R                   S-
  S-  U l         U R                  U R                   5        g r  ru   r  r  s     r   _dexCPU._dex  (    ffqjD DFtvvr   c                 h    U R                   S-
  S-  U l         U R                  U R                   5        g r  rv   r  r  s     r   _deyCPU._dey  r  r   c                     U =R                   U R                  U R                  U   " 5       5      -  sl         U R                  U R                   5        g r   r:  r  s     r   _eorCPU._eor  r=  r   c                     U R                   U   " 5       nU R                  U5      S-   S-  nU R                  X#5        U R                  U5        g r  r  rE  s       r   _incCPU._inc  sG    T"$DMM$!#d*ENN4ur   c                 h    U R                   S-   S-  U l         U R                  U R                   5        g r  r  r  s     r   _inxCPU._inx  (    VVaZ$DFtvvr   c                 h    U R                   S-   S-  U l         U R                  U R                   5        g r  r  r  s     r   _inyCPU._iny  r  r   c                 6    U R                   U   " 5       U l        g r   )r   rx   r  s     r   _jmpCPU._jmp  s    %'DGr   c                 x    U R                  U R                  S-   S-  5        U R                  U   " 5       U l        g )Nr   r   )r  rx   r   r  s     r   _jsrCPU._jsr  s2    tww{V+,%'DGr   c                     U R                  U R                  U   " 5       5      U l        U R                  U R                  5        g r   )r   r   rt   r  r  s     r   _ldaCPU._lda  2    ]]4,,T245DFtvvr   c                     U R                  U R                  U   " 5       5      U l        U R                  U R                  5        g r   )r   r   ru   r  r  s     r   _ldxCPU._ldx  r  r   c                     U R                  U R                  U   " 5       5      U l        U R                  U R                  5        g r   )r   r   rv   r  r  s     r   _ldyCPU._ldy  r  r   c                     U R                   [        R                  -  U l        U =R                   S-  sl         U R                   S:H  U l        SU l        g r0  )rt   r   r   r   r   r   r   s    r   _lsr_accCPU._lsr_acc  s9    &&3::%DKFFqLF&&A+DKDKr   c                     U R                   U   " 5       nU R                  U5      nUS-	  U[        R                  -  so0l        U R                  X#5        US:H  U l        SU l        g r0  )r   r   r   r   r   r   r   r   rE  s       r   _lsrCPU._lsr  sZ    T"$DMM$E!USZZ%7E;NN41*DKDKr   c                     g r    r  s     r   _nopCPU._nop"      r   c                     U =R                   U R                  U R                  U   " 5       5      -  sl         U R                  U R                   5        g r   r:  r  s     r   _oraCPU._ora%  r=  r   c                 :    U R                  U R                  5        g r   )r  rt   r  s     r   _phaCPU._pha)  s    OODFFr   c                 @    U R                  U R                  SS95        g )Nr   )r   )r  r   r  s     r   _phpCPU._php,  s    OODOO1O-.r   c                 d    U R                  5       U l        U R                  U R                  5        g r   )r  rt   r  r  s     r   _plaCPU._pla/  s"    __DFtvvr   c                 B    U R                  U R                  5       5        g r   )r   r  r  s     r   _plpCPU._plp3  s    OODOO%&r   c                     U R                   U R                  S-  S-  -  U R                  S-  S:g  sU l        U l         U R                  U R                  5        g r?  )r   rt   r  r   s    r   _rol_accCPU._rol_acc6  sG    ++1(<<dfftmq>PDFDKtvvr   c                     U R                   U   " 5       nU R                  U5      nUS-  U R                  -  S-  US-  S:g  so0l        U R                  X#5        U R	                  U5        g r?  rD  rE  s       r   _rolCPU._rol:  sd    T"$DMM$E1*t{{2d:EDLA<ME;NN4ur   c                     U R                   S-	  U R                  S-  -  U R                   S-  sU l         U l        U R                  U R                   5        g Nr   r   r@  r   s    r   _ror_accCPU._ror_accA  sB    66Q;4;;!+;<dffqjDFDKtvvr   c                     U R                   U   " 5       nU R                  U5      nUS-	  U R                  S-  -  US-  so0l        U R                  X#5        U R	                  U5        g r  rD  rE  s       r   _rorCPU._rorE  s_    T"$DMM$E!dkkQ&66	E;NN4ur   c                     U R                  U R                  5       5        U R                  5       U R                  5       S-  -  U l        g r  )r   r  rx   r  s     r   _rtiCPU._rtiL  s4    OODOO%&oo4??#4#9:DGr   c                 \    U R                  5       U R                  5       S-  -  S-   U l        g NrV   r   )r  rx   r  s     r   _rtsCPU._rtsP  s&     DOO$5$:;q@DGr   c                 n    U R                  U R                  U R                  U   " 5       5      S-  5        g r   r6  r  s     r   _sbcCPU._sbcS  s,    T]]4+<+<T+B+DELMr   c                     SU l         g Nr   rn  r  s     r   _secCPU._secV  rq  r   c                     SU l         g r  rs  r  s     r   _sedCPU._sedY  rq  r   c                     SU l         g r  rw  r  s     r   _seiCPU._sei\  rq  r   c                 `    U R                  U R                  U   " 5       U R                  5        g r   )r   r   rt   r  s     r   _staCPU._sta_  "    NN4$$T*,dff5r   c                 `    U R                  U R                  U   " 5       U R                  5        g r   )r   r   ru   r  s     r   _stxCPU._stxb  r  r   c                 `    U R                  U R                  U   " 5       U R                  5        g r   )r   r   rv   r  s     r   _styCPU._stye  r  r   c                 \    U R                   U l        U R                  U R                  5        g r   )rt   ru   r  r  s     r   _taxCPU._taxh      VVDFtvvr   c                 \    U R                   U l        U R                  U R                  5        g r   )rt   rv   r  r  s     r   _tayCPU._tayl  r  r   c                 \    U R                   U l        U R                  U R                  5        g r   )rw   ru   r  r  s     r   _tsxCPU._tsxp  s    WWDFtvvr   c                 \    U R                   U l        U R                  U R                  5        g r   )ru   rt   r  r  s     r   _txaCPU._txat  r  r   c                 &    U R                   U l        g r   )ru   rw   r  s     r   _txsCPU._txsx  s    ffDGr   c                 \    U R                   U l        U R                  U R                  5        g r   )rv   rt   r  r  s     r   _tyaCPU._tya{  r  r   c                     U R                   U   " 5       nU R                  U5      nU =R                  U-  sl        U R                  U R                  5        U R                  [        R
                  -  U l        g r   )r   r   rt   r  r   r   r   rE  s       r   _aacCPU._aac  sV    T"$DMM$EFFeOFtvv&&3::%DKr   c                 ~    U R                   U R                  -  nU R                  U R                  U   " 5       U5        g r   )rt   ru   r   r   rV  s      r   _aaxCPU._aax  s/    FFTVVOENN4$$T*,e4r   c                     U R                  U5        U R                  U5        U R                  S-  S:g  nU R                  S-  S:g  nX0l        X#-  U l        g )Nrn   r   rV   )r;  r  rt   r   r   )r   r  b5b6s       r   _arrCPU._arr  sL    IIdOIIdO	*		!B	*		!BK'DKr   c                 H    U R                  U5        U R                  U5        g r   )r;  r  r  s     r   _asrCPU._asr      IIdOIIdOr   c                     U R                   U   " 5       nU R                  U5      nU =R                  U-  sl        U R                  U l        U R	                  U R                  5        g r   )r   r   rt   ru   r  rE  s       r   _atxCPU._atx  sM    T"$DMM$EFFeOFVVDFtvvr   c                     U R                   S-  nU R                  U R                  U   " 5       U5        U R                  U5        g )N   )rt   r   r   r  rV  s      r   _axaCPU._axa  s:    FFZENN4$$T*,e4ur   c                     U =R                   U R                  -  sl         U R                   U R                  U R                  U   " 5       5      -
  S:  U l        g )Ni  )ru   rt   r   r   r   r  s     r   _axsCPU._axs  s@    FFdffF&&4==):):4)@)BCCeKDKr   c                     U R                   U   " 5       nU R                  U5      S-
  S-  nU R                  X#5        U R                  U R                  U5        g r  )r   r   r   r-  rt   )r   r  r   ress       r   _dcpCPU._dcp  sK    T"$D=="d
*CNN4MM$&&#r   c                     g r   r  r  s     r   _dopCPU._dop  r  r   c                     U R                   U   " 5       nU R                  U5      S-   S-  nU R                  X#5        U R                  US-  5        g r  )r   r   r   r(  rE  s       r   _iscCPU._isc  sK    T"$D]]4 1$,ENN4UT\*r   c                     SU l         g )NT)r{   r  s     r   _kilCPU._kil  s	    DKr   c                     U R                  U R                  U   " 5       5      U R                  -  nX l        X l        X l        U R                  U5        g r   )r   r   rw   rt   ru   r  )r   r  r$  s      r   _larCPU._lar  sD    
--))$/1
2TWW
<CFFGsr   c                     U R                  U R                  U   " 5       5      nX l        X l        U R	                  U5        g r   )r   r   rt   ru   r  rV  s      r   _laxCPU._lax  s6    MM$++D134EFFur   c                 H    U R                  U5        U R                  U5        g r   )r  r;  r  s     r   _rlaCPU._rla  r  r   c                 H    U R                  U5        U R                  U5        g r   )r  r7  r  s     r   _rraCPU._rra  r  r   c                 H    U R                  U5        U R                  U5        g r   )rF  r  r  s     r   _sloCPU._slo  r  r   c                 H    U R                  U5        U R                  U5        g r   )r  r  r  s     r   _sreCPU._sre  r  r   c                 t    U R                   U   " 5       nU R                  X R                  US-	  S-   -  5        g r  )r   r   ru   r   r  r   s      r   _sxaCPU._sxa  2    T"$DNN4DAI?34r   c                 t    U R                   U   " 5       nU R                  X R                  US-	  S-   -  5        g r  )r   r   rv   rC  s      r   _syaCPU._sya  rF  r   c                     g r   r  r  s     r   _topCPU._top  r  r   c                      SR                     g )N.)__doc__r  s     r   _xaaCPU._xaa  s    KKr   c                     U R                   U   " 5       nU R                  U R                  -  U l        U R	                  X R                  US-  S-   -  5        g )Nr   r   )r   ru   rt   rw   r   rC  s      r   _xasCPU._xas  sG    T"$DfftvvoDGNN4D;$6!#;;<r   c                     U R                  U R                  5      U l        U =R                  S-  sl        U R                  U R                  5        g r  )r   rx   r  single_opcoder   s    r   execute_nextCPU.execute_next  s5    --(DKGGqLGt{{#r   c                    SU l         SU l        SU l        SU l        U R	                  [
        R                  [
        R                     5      U l        U R                  S5        SU l
        SU l        SU l        SU l        SU l        SU l        g )Nr      $   Fr   )rt   ru   rv   rw   r   r   r1  RESETrx   r   ry   r|   r{   r  rz   r}   r   s    r   reset	CPU.reset  st    DFDFDFDGs||CII67DGNN:DJDKDKDKDODr   c                 H    U R                  5         U R                  " U0 UD6  g r   )r\  run)r   argskwargss      r   reset_and_runCPU.reset_and_run	  s    JJLHHdfr   c                     [        SS5       nUR                  SR                  U R                  5      5        S S S 5        g ! , (       d  f       g = f)Nzlog.txtr   r   )r   r   joinr~   )r   r   s     r   save_logCPU.save_log  s3    	i	ggdii!" 
		s   +A
Ac                    U R                   S SU R                  S S3[        R                  U R                     S:  a%  U R	                  U R                   S-   S-  5      S S3OS-   [        R                  U R                     S:  a%  U R	                  U R                   S-   S-  5      S S3OS	-   [        R
                  U R                     -   S-   S
U R                  S SU R                  S SU R                  S SU R                  5       S S3	-   SU R                  S SSS[        [        U R                  R                  R                  5      5      -
  -   U R                  R                  R                   S3-   SS[        [        U R                  R                  R                   5      5      -
  -   U R                  R                  R                    SU R                    3-   $ )N04Xz  02Xr   r   r   z   rW   z    zA:z X:z Y:z P:08bzSP:z PPU:rY   ,z CYC:)rx   r  r   r  r   OPCODE_NAMES_MAPrt   ru   rv   r   rw   lenstrrq   ppuscanliner|   r   s    r   log_line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                     U R                   (       a  g U R                  R                  U R                  5        U =R                  U R                  -  sl        SU l        U R                  R                  5       (       aj  U R                  R                  R                  (       a>  U R                  [        R                  5        U R                  =R                  S-  sl        U" 5         U R                  S:X  a
  [        5       eU R                  U R                  5      U l        U R                  S-   S-  U l        U R                   U R                     " 5         U R#                  5         U =R$                  S-  sl        GM}  )Nr   r   i   r   )r{   rq   tickr}   r|   poll_nmirp  ctrl_flag_Vr3  r   NMIframesrx   	Exceptionr   r  opcode_funcsr  ry   )r   frame_interrupts     r   r_  CPU.run  s   
	
hhmmD$$%
kkT%%%kd					88<<##
//#''
"
((//Q
/ 
F	kMM$''*dk!f$dg $& 
jjAojE r   c                 ,    U R                   U   " 5         g r   )r{  )r   r  s     r   rU  CPU.single_opcodeB  s    fr   c           
         [        S5       Vs/ s Hm  n[        R                  U   [        R                  [        R                  U      U R
                  U   S:  a  U R                  U   U R
                  U   -  OS4PMo     nnUR                  S SS9  U VVVs/ s H  u  p4oS SU SU 3PM     nnnnU$ s  snf s  snnnf )Nro   r   c                     U S   $ )NrW   r  )ru   s    r   <lambda>%CPU.calc_op_average.<locals>.<lambda>G  s    1Q4r   T)keyreversez - z: )r   r   rm  r   OPCODE_ADDR_MAP	op_counts	op_timerssort)r   r   avgrt   bcs         r   calc_op_averageCPU.calc_op_averageE  s     ch  il  cm  n  cm  ^_C  #S%8%89L9LQ9O%P{  |J  |J  KL  |M  PQ  |QRVR`R`abRcfjftftuvfwRw  WX  Y  cmC  nHHH.,/
0CqSA3bCC
0J n
0s   A4B7B<c           	      (   [        S5       Vs/ s H  nSPM     snU l        [        S5       Vs/ s H  nSPM     snU l        [        S5       Vs0 s H  o"U R                  SUS 35      _M     snU l        / U R
                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                   PU R"                  PU R$                  PU R&                  PU R(                  PU R*                  PU R,                  PU R.                  PU R0                  PU R2                  PU R4                  PU R6                  PU R8                  PU R:                  PU R<                  PU R>                  PU R@                  PU RB                  PU RD                  PU RF                  PU RH                  PU RJ                  PU RL                  PU RN                  PU RP                  PU RR                  PU RT                  PU RV                  PU RX                  PU RZ                  PU R\                  PU R^                  PU R`                  PU Rb                  PU Rd                  PU Rf                  PU Rh                  PU Rj                  PU Rl                  PU Rn                  PU Rp                  PU Rr                  PU Rt                  PU Rv                  PU Rx                  PU Rz                  PU R|                  PU R~                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU R                  PU GR                   PU GR                  PU GR                  PU GR                  PU GR                  PU GR
                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                   PU GR"                  PU GR$                  PU GR&                  PU GR(                  PU GR*                  PU GR,                  PU GR.                  PU GR0                  PU GR2                  PU GR4                  PU GR6                  PU GR8                  PU GR:                  PU GR<                  PU GR>                  PU GR@                  PU GRB                  PU GRD                  PU GRF                  PU GRH                  PU GRJ                  PU GRL                  PU GRN                  PU GRP                  PU GRR                  PU GRT                  PU GRV                  PU GRX                  PU GRZ                  PU GR\                  PU GR^                  PU GR`                  PU GRb                  PU GRd                  PU GRf                  PU GRh                  PU GRj                  PU GRl                  PU GRn                  PU GRp                  PU GRr                  PU GRt                  PU GRv                  PU GRx                  PU GRz                  PU GR|                  PU GR~                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                  PU GR                   PU GR                  PU GR                  PU GR                  PU GR                  P7U l        g s  snf s  snf s  snf )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   CPU.def_opcodesK  sa   !&s,Aa,DN!&s,Aa,DNJOPS*U*QD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   tt
tc                 B    U R                  [        R                  5        g r   )rd  r   IMPLIEDr   s    r   r  	CPU._op00t      499S[[)r   c                 B    U R                  [        R                  5        g r   )r  r   
INDIRECT_Xr   s    r   r  	CPU._op01u      499S^^,r   c                 B    U R                  [        R                  5        g r   r.  r   r  r   s    r   r  	CPU._op02v  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op03w  r  r   c                     g r   r  r   s    r   r  	CPU._op04x      4r   c                 B    U R                  [        R                  5        g r   )r  r   ZEROPAGEr   s    r   r  	CPU._op05y      499S\\*r   c                 B    U R                  [        R                  5        g r   )rF  r   r  r   s    r   r  	CPU._op06z  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op07{  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op08|  r  r   c                 B    U R                  [        R                  5        g r   )r  r   	IMMEDIATEr   s    r   r  	CPU._op09}      499S]]+r   c                 $    U R                  5         g r   )rA  r   s    r   r  	CPU._op0a~  
    4==?r   c                 B    U R                  [        R                  5        g r   r  r   r  r   s    r   r  	CPU._op0b  r  r   c                     g r   r  r   s    r   r  	CPU._op0c  r  r   c                 B    U R                  [        R                  5        g r   )r  r   ABSOLUTEr   s    r   r  	CPU._op0d  r  r   c                 B    U R                  [        R                  5        g r   )rF  r   r  r   s    r   r  	CPU._op0e  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op0f  r  r   c                 B    U R                  [        R                  5        g r   )ra  r   r  r   s    r   r  	CPU._op10  r  r   c                 B    U R                  [        R                  5        g r   )r  r   
INDIRECT_Yr   s    r   r  	CPU._op11  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op12  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op13  r  r   c                     g r   r  r   s    r   r  	CPU._op14  r  r   c                 B    U R                  [        R                  5        g r   )r  r   
ZEROPAGE_Xr   s    r   r  	CPU._op15  r  r   c                 B    U R                  [        R                  5        g r   )rF  r   r  r   s    r   r  	CPU._op16  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op17  r  r   c                 B    U R                  [        R                  5        g r   )ro  r   r  r   s    r   r  	CPU._op18  r  r   c                 B    U R                  [        R                  5        g r   )r  r   
ABSOLUTE_Yr   s    r   r  	CPU._op19  r  r   c                     g r   r  r   s    r   r  	CPU._op1a  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op1b  r  r   c                     g r   r  r   s    r   r  	CPU._op1c  r  r   c                 B    U R                  [        R                  5        g r   )r  r   
ABSOLUTE_Xr   s    r   r  	CPU._op1d  r  r   c                 B    U R                  [        R                  5        g r   )rF  r   r  r   s    r   r  	CPU._op1e  r  r   c                 B    U R                  [        R                  5        g r   )r=  r   r  r   s    r   r  	CPU._op1f  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op20  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op21  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op22  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op23  r  r   c                 B    U R                  [        R                  5        g r   )rW  r   r  r   s    r   r  	CPU._op24  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op25  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op26  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op27  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op28  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op29  r  r   c                 $    U R                  5         g r   )r  r   s    r   r  	CPU._op2a  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op2b  r  r   c                 B    U R                  [        R                  5        g r   )rW  r   r  r   s    r   r  	CPU._op2c  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op2d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op2e  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op2f  r  r   c                 B    U R                  [        R                  5        g r   )r[  r   r  r   s    r   r  	CPU._op30  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op31  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op32  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op33  r  r   c                     g r   r  r   s    r   r  	CPU._op34  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op35  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op36  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op37  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op38  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op39  r  r   c                     g r   r  r   s    r   r  	CPU._op3a  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op3b  r  r   c                     g r   r  r   s    r   r  	CPU._op3c  r  r   c                 B    U R                  [        R                  5        g r   )r;  r   r  r   s    r   r  	CPU._op3d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op3e  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op3f  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op40  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op41  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op42  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op43  r  r   c                     g r   r  r   s    r   r  	CPU._op44  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op45  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op46  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op47  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op48  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op49  r  r   c                 $    U R                  5         g r   )r  r   s    r   r  	CPU._op4a  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op4b  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op4c  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op4d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op4e  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op4f  r  r   c                 B    U R                  [        R                  5        g r   )rh  r   r  r   s    r   r  	CPU._op50  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op51  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op52  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op53  r  r   c                     g r   r  r   s    r   r  	CPU._op54  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op55  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op56  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op57  r  r   c                 B    U R                  [        R                  5        g r   )rx  r   r  r   s    r   r  	CPU._op58  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op59  r  r   c                     g r   r  r   s    r   r  	CPU._op5a  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op5b  r  r   c                     g r   r  r   s    r   r  	CPU._op5c  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op5d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op5e  r  r   c                 B    U R                  [        R                  5        g r   )r@  r   r  r   s    r   r  	CPU._op5f  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op60  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op61  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op62  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op63  r  r   c                     g r   r  r   s    r   r  	CPU._op64  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op65  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op66  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op67  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op68  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op69  r  r   c                 $    U R                  5         g r   )r  r   s    r   r  	CPU._op6a  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op6b  r  r   c                 B    U R                  [        R                  5        g r   )r  r   INDIRECTr   s    r   r  	CPU._op6c  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op6d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r   	CPU._op6e  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op6f  r  r   c                 B    U R                  [        R                  5        g r   )rk  r   r  r   s    r   r  	CPU._op70  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op71  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._op72  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op73  r  r   c                     g r   r  r   s    r   r  	CPU._op74  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op75  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op76  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r	  	CPU._op77  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r
  	CPU._op78  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op79  r  r   c                     g r   r  r   s    r   r  	CPU._op7a  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op7b  r  r   c                     g r   r  r   s    r   r  	CPU._op7c  r  r   c                 B    U R                  [        R                  5        g r   )r7  r   r  r   s    r   r  	CPU._op7d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op7e  r  r   c                 B    U R                  [        R                  5        g r   )r:  r   r  r   s    r   r  	CPU._op7f  r  r   c                     g r   r  r   s    r   r  	CPU._op80  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op81  r  r   c                     g r   r  r   s    r   r  	CPU._op82  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op83  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op84  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op85  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op86  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op87  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op88  r  r   c                     g r   r  r   s    r   r  	CPU._op89  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op8a  r  r   c                     g r   r  r   s    r   r  	CPU._op8b  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op8c   r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._op8d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r   	CPU._op8e  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r!  	CPU._op8f  r  r   c                 B    U R                  [        R                  5        g r   )rJ  r   r  r   s    r   r"  	CPU._op90  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r#  	CPU._op91  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r$  	CPU._op92  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r%  	CPU._op93  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r&  	CPU._op94  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r'  	CPU._op95	  r  r   c                 B    U R                  [        R                  5        g r   )r  r   
ZEROPAGE_Yr   s    r   r(  	CPU._op96
  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r)  	CPU._op97  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r*  	CPU._op98  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r+  	CPU._op99  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r,  	CPU._op9a  r  r   c                 B    U R                  [        R                  5        g r   )rR  r   r  r   s    r   r-  	CPU._op9b  r  r   c                 B    U R                  [        R                  5        g r   )rH  r   r  r   s    r   r.  	CPU._op9c  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r/  	CPU._op9d  r  r   c                 B    U R                  [        R                  5        g r   )rD  r   r  r   s    r   r0  	CPU._op9e  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r1  	CPU._op9f  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r2  	CPU._opa0  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r3  	CPU._opa1  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r4  	CPU._opa2  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   r5  	CPU._opa3  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r6  	CPU._opa4  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r7  	CPU._opa5  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r8  	CPU._opa6  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   r9  	CPU._opa7  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r:  	CPU._opa8  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r;  	CPU._opa9  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r<  	CPU._opaa  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r=  	CPU._opab  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r>  	CPU._opac   r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r?  	CPU._opad!  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r@  	CPU._opae"  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   rA  	CPU._opaf#  r  r   c                 B    U R                  [        R                  5        g r   )rN  r   r  r   s    r   rB  	CPU._opb0$  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rC  	CPU._opb1%  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   rD  	CPU._opb2&  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   rE  	CPU._opb3'  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rF  	CPU._opb4(  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rG  	CPU._opb5)  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rH  	CPU._opb6*  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   rI  	CPU._opb7+  r  r   c                 B    U R                  [        R                  5        g r   )r{  r   r  r   s    r   rJ  	CPU._opb8,  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rK  	CPU._opb9-  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rL  	CPU._opba.  r  r   c                 B    U R                  [        R                  5        g r   )r1  r   r  r   s    r   rM  	CPU._opbb/  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rN  	CPU._opbc0  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rO  	CPU._opbd1  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rP  	CPU._opbe2  r  r   c                 B    U R                  [        R                  5        g r   )r4  r   r  r   s    r   rQ  	CPU._opbf3  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rR  	CPU._opc04  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   rS  	CPU._opc15  r  r   c                     g r   r  r   s    r   rT  	CPU._opc26  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   rU  	CPU._opc37  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rV  	CPU._opc48  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   rW  	CPU._opc59  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rX  	CPU._opc6:  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   rY  	CPU._opc7;  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rZ  	CPU._opc8<  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   r[  	CPU._opc9=  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r\  	CPU._opca>  r  r   c                 B    U R                  [        R                  5        g r   )r!  r   r  r   s    r   r]  	CPU._opcb?  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r^  	CPU._opcc@  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   r_  	CPU._opcdA  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r`  	CPU._opceB  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   ra  	CPU._opcfC  r  r   c                 B    U R                  [        R                  5        g r   )r^  r   r  r   s    r   rb  	CPU._opd0D  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   rc  	CPU._opd1E  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   rd  	CPU._opd2F  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   re  	CPU._opd3G  r  r   c                     g r   r  r   s    r   rf  	CPU._opd4H  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   rg  	CPU._opd5I  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rh  	CPU._opd6J  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   ri  	CPU._opd7K  r  r   c                 B    U R                  [        R                  5        g r   )rt  r   r  r   s    r   rj  	CPU._opd8L  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   rk  	CPU._opd9M  r  r   c                     g r   r  r   s    r   rl  	CPU._opdaN  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   rm  	CPU._opdbO  r  r   c                     g r   r  r   s    r   rn  	CPU._opdcP  r  r   c                 B    U R                  [        R                  5        g r   )r~  r   r  r   s    r   ro  	CPU._opddQ  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rp  	CPU._opdeR  r  r   c                 B    U R                  [        R                  5        g r   )r%  r   r  r   s    r   rq  	CPU._opdfS  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rr  	CPU._ope0T  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rs  	CPU._ope1U  r  r   c                     g r   r  r   s    r   rt  	CPU._ope2V  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   ru  	CPU._ope3W  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rv  	CPU._ope4X  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rw  	CPU._ope5Y  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rx  	CPU._ope6Z  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   ry  	CPU._ope7[  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   rz  	CPU._ope8\  r  r   c                 B    U R                  [        R                  5        g r   r  r   r  r   s    r   r{  	CPU._ope9]  r  r   c                     g r   r  r   s    r   r|  	CPU._opea^  r  r   c                 B    U R                  [        R                  5        g r   rz  r   s    r   r}  	CPU._opeb_  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r~  	CPU._opec`  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opeda  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opeeb  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   r  	CPU._opefc  r  r   c                 B    U R                  [        R                  5        g r   )rS  r   r  r   s    r   r  	CPU._opf0d  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opf1e  r  r   c                 B    U R                  [        R                  5        g r   r  r   s    r   r  	CPU._opf2f  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   r  	CPU._opf3g  r  r   c                     g r   r  r   s    r   r  	CPU._opf4h  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opf5i  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opf6j  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   r  	CPU._opf7k  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opf8l  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opf9m  r  r   c                     g r   r  r   s    r   r  	CPU._opfan  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   r  	CPU._opfbo  r  r   c                     g r   r  r   s    r   r  	CPU._opfcp  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opfdq  r  r   c                 B    U R                  [        R                  5        g r   )r  r   r  r   s    r   r  	CPU._opfer  r  r   c                 B    U R                  [        R                  5        g r   )r+  r   r  r   s    r   r  	CPU._opffs  r  r   )rt   rq   r|   r}   r   r   r   r   r   r   r   r   rz   r{   rs   r~   r  r  r  r{  r   rx   rw   ry   ru   rv   )r   r   (  __name__
__module____qualname____firstlineno__rm  	bytearrayOPCODE_DOC_MAPr  r  r  r  OPCODE_PC_MAPr  r  r  r  r  r  r  r  r  r  r  	ACCUMULATr~  r   IRQr   rx  r[  r   r   r   r   r   r   r   r   
STACK_PAGEr1  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r$  r(  r-  r3  r7  r;  rA  rF  rJ  rN  rS  rW  r[  r^  ra  rd  rh  rk  ro  rt  rx  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r(  r+  r.  r1  r4  r7  r:  r=  r@  rD  rH  rK  rO  rR  rV  r\  rb  rf  rr  r_  rU  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  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  __static_attributes__r  r   r   r   r      s   &  
 
.   /&   /&   ! &   /&   -& ! " * ')((******)(/ 	
#	#	#
%&&&&&&&&*(# >
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	
=$
#\$N 'R *,),***)+"+***),),,,,),,,,,*,),****)+"+****),),,,,),,,,,),),***)+"+****),),,,,),,,,,),),***)+"+****),),,,,),,,,,,,****))****),),,,,,),)*,,,,+,+,****)+)*****),),,,,,),),,,,,+,,****)+)+****),),,,,),,,,,+,,****)++****),),,,,),,,,,,r   r   )rq   r   timer   r  r   r   <module>r     s     
l- l-r   