📄 cpuops.s
字号:
PushByte NMI3 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $12, CYCLES movl $0xFFEA, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx jmp S9xSetPCBase.NMI_EMULATION: movl PC, %eax subl PCBase, %eax PushWord NMI4 S9xPackStatus NMI2 movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte NMI5 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $6, CYCLES movl $0xFFFA, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx jmp S9xSetPCBase.data.LC3: .string "*** COP".textOp02:#ifdef DEBUGGER testb $TRACE_FLAG, Flags je .COP_NO_TRACE pushl $.LC3 ccall S9xTraceMessage addl $4,%esp.COP_NO_TRACE:#endif testw $Emulation, FLAGS16 jnz .COP_EMULATION movb PB, %al PushByte COP1 movl PC, %eax subl PCBase, %eax incl %eax PushWord COP2 S9xPackStatus COP movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte COP3 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $12, CYCLES movl $0xFFE4, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx call S9xSetPCBase jmp MainAsmLoop.COP_EMULATION: movl PC, %eax subl PCBase, %eax incl %eax PushWord COP4 S9xPackStatus COP2 movb FLAGS, %al movb %al, OpenBus andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte COP5 xorl %ecx, %ecx movl %ecx, ShiftedPB movb %cl, PB addl $6, CYCLES movl $0xFFF4, %edx call S9xGetWord movl %eax, %edx andl $0xffff, %edx call S9xSetPCBase jmp MainAsmLoop/* JML */OpDC: AbsoluteIndirectLong8 JML JUMP movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, ShiftedPB sarl $16, %ecx movb %cl, PB addl $12, CYCLES call S9xSetPCBase jmp MainAsmLoopOp5C: AbsoluteLong8 JML JUMP movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSetPCBase jmp MainAsmLoop/* JMP */Op4C: Absolute8 JMP JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoopOp6C: AbsoluteIndirect8 JMP JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoopOp7C: AbsoluteIndexedIndirect8 JMP JUMP addl $6, CYCLES andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* JSL */Op22E1: movb PB, %al PushByte JSL_ABSL_E movl PC, %eax subl PCBase, %eax addl $2, %eax PushWordENew JSL_ABSL_E AbsoluteLong8 JSL JUMP movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSetPCBase jmp MainAsmLoopOp22: movb PB, %al PushByte JSL_ABSL movl PC, %eax subl PCBase, %eax addl $2, %eax PushWord JSL_ABSL AbsoluteLong8 JSL JUMP movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSetPCBase jmp MainAsmLoop/* RTL */Op6BE1: addl $12, CYCLES PullWord RTL_E pushl %eax PullByte RTL_E movl SS, %edx addl $0xFF, %edx movb $0x01, %dh movw %dx, SS popl %edx movb %al, PB incw %dx andl $0xff, %eax andl $0xffff, %edx sall $16, %eax movl %eax, ShiftedPB orl %eax, %edx call S9xSetPCBase jmp MainAsmLoopOp6B: addl $12, CYCLES PullWord RTL pushl %eax PullByte RTL popl %edx movb %al, PB incw %dx andl $0xff, %eax andl $0xffff, %edx sall $16, %eax movl %eax, ShiftedPB orl %eax, %edx call S9xSetPCBase jmp MainAsmLoop/* JSR ABS */Op20: addl $6, CYCLES movl PC, %eax subl PCBase, %eax incl %eax PushWord JSR_ABS Absolute8 JSR_ABS JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* JSR ABS INDEXED INDIRECT */OpFCE1: addl $6, CYCLES movl PC, %eax subl PCBase, %eax incl %eax PushWordENew JSR_AII_E AbsoluteIndexedIndirect8 JSR JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoopOpFC: addl $6, CYCLES movl PC, %eax subl PCBase, %eax incl %eax PushWord JSR_AII AbsoluteIndexedIndirect8 JSR JUMP andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* RTS */Op60: addl $6 * 3, CYCLES PullWord RTS incl %eax movl %eax, %edx andl $0xffff, %edx orl ShiftedPB, %edx call S9xSetPCBase jmp MainAsmLoop/* MVN */Op54X1: addl MemSpeedx2, CYCLES addl $12, CYCLES xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, ShiftedDB movb 1(PC), %dl movb %dl, OpenBus sall $16, %edx movw XX, %dx call S9xGetByte movl ShiftedDB, %edx movw YY, %dx call S9xSetByte incb XL incb YL movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVN_EXIT8 decl PC jmp MainAsmLoop.MVN_EXIT8: addl $2, PC jmp MainAsmLoopOp54X0: addl MemSpeedx2, CYCLES addl $12, CYCLES xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, ShiftedDB movb 1(PC), %dl movb %dl, OpenBus sall $16, %edx movw XX, %dx call S9xGetByte movl ShiftedDB, %edx movw YY, %dx call S9xSetByte incw XX incw YY movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVN_EXIT16 decl PC jmp MainAsmLoop.MVN_EXIT16: addl $2, PC jmp MainAsmLoop/* MVP */Op44X1: addl MemSpeedx2, CYCLES addl $12, CYCLES xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, ShiftedDB movb 1(PC), %dl movb %dl, OpenBus sall $16, %edx movw XX, %dx call S9xGetByte movl ShiftedDB, %edx movw YY, %dx call S9xSetByte decb XL decb YL movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVP_EXIT8 decl PC jmp MainAsmLoop.MVP_EXIT8: addl $2, PC jmp MainAsmLoopOp44X0: addl MemSpeedx2, CYCLES addl $12, CYCLES xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, ShiftedDB movb 1(PC), %dl movb %dl, OpenBus sall $16, %edx movw XX, %dx call S9xGetByte movl ShiftedDB, %edx movw YY, %dx call S9xSetByte decw XX decw YY movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVP_EXIT16 decl PC jmp MainAsmLoop.MVP_EXIT16: addl $2, PC jmp MainAsmLoop/* REP */OpC2: addl MemSpeed, CYCLES addl $6, CYCLES movb (PC), %al incl PC notb %al andb %al, FLAGS andb %al, _Negative andb %al, _Carry testb $Zero, %al setz %ah orb %ah, _Zero shrb $6, %al andb %al, _Overflow testw $Emulation, FLAGS16 jz .REP_NO_EMU orb $(MemoryFlag | IndexFlag), FLAGS .REP_NO_EMU: testb $IndexFlag, FLAGS jz .REP16 xorb %al, %al movb %al, XH movb %al, YH.REP16: S9xFixCycles REP/* CheckForIrq REP */ jmp MainAsmLoop/* SEP */OpE2: addl MemSpeed, CYCLES addl $6, CYCLES movb (PC), %al incl PC orb %al, FLAGS orb %al, _Negative movb %al, %ah shrb $6, %ah andb $1, %ah orb %ah, _Overflow test $Zero, %al jz .SEP_NO_ZERO movb $0, _Zero.SEP_NO_ZERO: andb $1, %al orb %al, _Carry testw $Emulation, FLAGS16 jz .SEP_NO_EMU orb $(MemoryFlag | IndexFlag), FLAGS .SEP_NO_EMU: testb $IndexFlag, FLAGS jz .SEP16 xorb %al, %al movb %al, XH movb %al, YH.SEP16: S9xFixCycles SEP jmp MainAsmLoop/* XBA */OpEB: addl $12, CYCLES movb AL, %ah movb AH, %al movb %ah, AH movb %al, AL SetZN jmp MainAsmLoop/* RTI */Op40: addl $12, CYCLES PullByte RTI movb %al, FLAGS PullWord RTI andl $0xffff, %eax pushl %eax testw $Emulation, FLAGS16 jnz .RTI_EMU PullByte RTI2 andl $0xff, %eax jmp .RTI_SKIP_EMU.RTI_EMU: orb $(MemoryFlag | IndexFlag), FLAGS /*XXX: HERE xorl %eax, %eax*/ movl ShiftedPB, %eax sarl $16, %eax.RTI_SKIP_EMU: movb %al, PB popl %edx sall $16, %eax orl %eax, %edx movl %eax, ShiftedPB call S9xSetPCBase testb $IndexFlag, FLAGS jz .RTI16 xorb %al, %al movb %al, XH movb %al, YH.RTI16: S9xUnpackStatus RTI S9xFixCycles RTI/* CheckForIrq RTI */ jmp MainAsmLoop/* WAI */OpCB:#if 0 cmpb $0, IRQActive je .L5334 addl $12, CYCLES jmp MainAsmLoop.L5334:#endif movb $1, WaitingForInterrupt decl PC movb Shutdown, %al testb %al, %al je .NoShutdown movl NextEvent, CYCLES SAVE_CYCLES ccall S9xUpdateAPUTimer cmpb $0, APUExecuting je MainAsmLoop movb $0, CPUExecuting.WAITExecAPU:#ifdef DEBUGGER testb $2,APUFlags je .WAITNoAPUS9xTrace STORE_REGISTERS ccall S9xTraceAPU LOAD_REGISTERS.WAITNoAPUS9xTrace:#endif xorl %eax,%eax#ifdef SPC700_C movl APUPC,%edx SAVE_CYCLES movb (%edx),%al#else movb (APUPC),%al#endif movl S9xAPUCycles(,%eax,4), %edx movl S9xApuOpcodes(,%eax,4),%eax addl %edx, APUCycles call *%eax#ifdef SPC700_C LOAD_CYCLES#endif movl NextEvent, %eax cmpl %eax, APUCycles jl .WAITExecAPU movb $1, CPUExecuting jmp MainAsmLoop.NoShutdown: addl $12, CYCLES jmp MainAsmLoop/* STP */OpDB: decl PC orb $DEBUG_MODE_FLAG, Flags jmp MainAsmLoop/* Reserved opcode (WDM) */Op42: jmp MainAsmLoop.globl S9xOpcodesM1X1.data .align 4S9xOpcodesM1X1: .long Op00 .long Op01M1 .long Op02 .long Op03M1 .long Op04M1 .long Op05M1 .long Op06M1 .long Op07M1 .long Op08 .long Op09M1 .long Op0AM1 .long Op0B .long Op0CM1 .long Op0DM1 .long Op0EM1 .long Op0FM1 .long Op10 .long Op11M1 .long Op12M1 .long Op13M1 .long Op14M1 .long Op15M1 .long Op16M1 .long Op17M1 .long Op18 .long Op19M1 .long Op1AM1 .long Op1B .long Op1CM1 .long Op1DM1 .long Op1EM1 .long Op1FM1 .long Op20 .long Op21M1 .long Op22 .long Op23M1 .long Op24M1 .long Op25M1 .long Op26M1 .long Op27M1 .long Op28 .long Op29M1 .long Op2AM1 .long Op2B .long Op2CM1 .long Op2DM1 .long Op2EM1 .long Op2FM1 .long Op30 .long Op31M1 .long Op32M1 .long Op33M1 .long Op34M1 .long Op35M1 .long Op36M1 .long Op37M1 .long Op38 .long Op39M1 .long Op3AM1 .long Op3B .long Op3CM1 .long Op3DM1 .long Op3EM1 .long Op3FM1 .long Op40 .long Op41M1 .long Op42 .long Op43M1 .long Op44X1 .long Op45M1 .long Op46M1 .long Op47M1 .long Op48M1 .long Op49M1 .long Op4AM1 .long Op4B .long Op4C .long Op4DM1 .long Op4EM1 .long Op4FM1 .long Op50 .long Op51M1 .long Op52M1 .long Op53M1 .long Op54X1 .long Op55M1 .long Op56M1 .long Op57M1 .long Op58 .long Op59M1 .long Op5AX1 .long Op5B .long Op5C .long Op5DM1 .long Op5EM1 .long Op5FM1 .long Op60 .long Op61M1 .long Op62 .long Op63M1 .long Op64M1 .long Op65M1 .long Op66M1 .long Op67M1 .long Op68M1 .long Op69M1 .long Op6AM1 .long Op6B .long Op6C .long Op6DM1 .long Op6EM1 .long Op6FM1 .long Op70 .long Op71M1 .long Op72M1 .long Op73M1 .long Op74M1 .long Op75M1 .long Op76M1 .long Op77M1 .long Op78 .long Op79M1 .long Op7AX1 .long Op7B .long Op7C .long Op7DM1 .long Op7EM1 .long Op7FM1 .long Op80 .long Op81M1 .long Op82 .long Op83M1 .long Op84X1 .long Op85M1 .long Op86X1 .long Op87M1 .long Op88X1 .long Op89M1 .long Op8AM1 .long Op8B .long Op8CX1 .long Op8DM1 .long Op8EX1 .long Op8FM1 .long Op90 .long Op91M1 .long Op92M1 .long Op93M1 .long Op94X1 .long Op95M1 .long Op96X1 .long Op97M1 .long Op98M1 .long Op99M1 .long Op9A .long Op9BX1 .long Op9CM1 .long Op9DM1 .long Op9EM1 .long Op9FM1 .long OpA0X1 .long OpA1M1 .long OpA2X1 .long OpA3M1 .long OpA4X1 .long OpA5M1 .long OpA6X1 .long OpA7M1 .long OpA8X1 .long OpA9M1 .long OpAAX1 .long OpAB .long OpACX1 .long OpADM1 .long OpAEX1 .long OpAFM1 .long OpB0 .long OpB1M1 .long OpB2M1 .long OpB3M1 .long OpB4X1 .long OpB5M1 .long OpB6X1 .long OpB7M1 .long OpB8 .long OpB9M1 .long OpBAX1 .long OpBBX1 .long OpBCX1 .long OpBDM1 .long OpBEX1 .long OpBFM1 .long OpC0X1 .long OpC1M1 .long OpC2 .long OpC3M1 .long OpC4X1 .long OpC5M1 .long OpC6M1 .long OpC7M1 .long OpC8X1 .long OpC9M1 .long OpCAX1 .long OpCB .long OpCCX1 .long OpCDM1 .long OpCEM1 .long OpCFM1 .long OpD0 .long OpD1M1 .long OpD2M1 .long OpD3M1 .long OpD4 .long OpD5M1 .long OpD6M1 .long OpD7M1 .long OpD8 .long OpD9M1 .long OpDAX1 .long OpDB .long OpDC .long OpDDM1 .long OpDEM1 .long OpDFM1 .long OpE0X1 .long OpE1M1 .long OpE2 .long OpE3M1 .long OpE4X1 .long OpE5M1 .long OpE6M1 .long OpE7M1 .long OpE8X1 .long OpE9M1 .long OpEA .long OpEB .long OpECX1 .long OpEDM1 .long OpEEM1 .long OpEFM1 .long OpF0 .long OpF1M1 .long OpF2M1 .long OpF3M1 .long OpF4 .long OpF5M1 .long OpF6M1 .long OpF7M1 .long OpF8 .long OpF9M1 .long OpFAX1 .long OpFB .long OpFC .long OpFDM1 .long OpFEM1 .long OpFFM1.globl S9xOpcodesE1.data .align 4S9xOpcodesE1: .long Op00 .long Op01M1 .long Op02 .long Op03M1 .long Op04M1 .long Op05M1 .long Op06M1 .long Op07M1 .long Op08E1 .long Op09M1 .long Op0AM1 .long Op0BE1 .long Op0CM1 .long Op0DM1 .long Op0EM1 .long Op0FM1 .long Op10 .long Op11M1 .long Op12M1 .long Op13M1 .long Op14M1 .long Op15M1 .long Op16M1 .long Op17M1 .long Op18 .long Op19M1 .long Op1AM1 .long Op1B .long Op1CM1 .long Op1DM1 .long Op1EM1 .long Op1FM1 .long Op20 .long Op21M1 .long Op22E1 .long Op23M1 .long Op24M1 .long Op25M1 .long Op26M1 .long Op27M1 .long Op28E1 .long Op29M1 .long Op2AM1 .long Op2BE1 .long Op2CM1 .long Op2DM1 .long Op2EM1 .long Op2FM1 .long Op30 .long Op31M1 .long Op32M1 .long Op33M1 .long Op34M1 .long Op35M1 .long Op36M1 .long Op37M1 .long Op38 .long Op39M1 .long Op3AM1 .long Op3B .long Op3CM1 .long Op3DM1 .long Op3EM1 .long Op3FM1 .long Op40 .long Op41M1 .long Op42 .long Op43M1 .long Op44X1 .long Op45M1 .long Op46M1 .long Op47M1 .long Op48E1 .long Op49M1 .long Op4AM1 .long Op4BE1 .long Op4C .long Op4DM1 .long Op4EM1 .long Op4FM1 .long Op50 .long Op51M1 .long Op52M1 .long Op53M1 .long Op54X1 .long Op55M1 .long Op56M1 .long Op57M1 .long Op58 .long Op59M1 .long Op5AE1 .long Op5B .long Op5C .long Op5DM1 .long Op5EM1 .long Op5FM1 .long Op60 .long Op61M1 .long Op62E1 .long Op63M1 .long Op64M1 .long Op65M1 .long Op66M1 .long Op67M1 .long Op68E1 .long Op69M1 .long Op6AM1 .long Op6BE1 .long Op6C .long Op6DM1 .long Op6EM1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -