📄 sa1ops.s
字号:
PushByte NMI3 xorl %ecx, %ecx movl %ecx, SA1ShiftedPB movb %cl, PB// XXX: FIXME: wrong vector xorl %edx, %edx movl FillRAM, %eax movw 0x2205(%eax), %dx jmp S9xSA1SetPCBase.NMI_EMULATION: movl PC, %eax subl SA1PCBase, %eax PushWord NMI4 S9xSA1PackStatus NMI2 movb FLAGS, %al andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte NMI5 xorl %ecx, %ecx movl %ecx, SA1ShiftedPB movb %cl, PB// XXX: FIXME: wrong vector xorl %edx, %edx movl FillRAM, %eax movw 0x2205(%eax), %dx jmp S9xSA1SetPCBase.data.LC3: .string "*** COP".textOp02:#ifdef DEBUGGER testb $TRACE_FLAG, SA1Flags 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 SA1PCBase, %eax incl %eax PushWord COP2 S9xSA1PackStatus COP movb FLAGS, %al andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte COP3 xorl %ecx, %ecx movl %ecx, SA1ShiftedPB movb %cl, PB movl $0xFFE4, %edx call S9xSA1GetWord movl %eax, %edx andl $0xffff, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop.COP_EMULATION: movl PC, %eax subl SA1PCBase, %eax incl %eax PushWord COP4 S9xSA1PackStatus COP2 movb FLAGS, %al andb $~Decimal, FLAGS orb $IRQ, FLAGS PushByte COP5 xorl %ecx, %ecx movl %ecx, SA1ShiftedPB movb %cl, PB movl $0xFFF4, %edx call S9xSA1GetWord movl %eax, %edx andl $0xffff, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* JML */OpDC: AbsoluteIndirectLong8 JML movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, SA1ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSA1SetPCBase jmp S9xSA1MainAsmLoopOp5C: AbsoluteLong8 JML movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, SA1ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* JMP */Op4C: Absolute8 JMP andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase CPUShutdown JMP jmp S9xSA1MainAsmLoopOp6C: AbsoluteIndirect8 JMP andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoopOp7C: AbsoluteIndexedIndirect8 JMP andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* JSL */Op22E1: movb PB, %al PushByte JSL_ABSL_E movl PC, %eax subl SA1PCBase, %eax addl $2, %eax PushWordENew JSL_ABSL_E AbsoluteLong8 JSL movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, SA1ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSA1SetPCBase jmp S9xSA1MainAsmLoopOp22: movb PB, %al PushByte JSL_ABSL movl PC, %eax subl SA1PCBase, %eax addl $2, %eax PushWord JSL_ABSL AbsoluteLong8 JSL movl %edx, %ecx andl $0xff0000, %ecx movl %ecx, SA1ShiftedPB sarl $16, %ecx movb %cl, PB call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* RTL */Op6BE1: 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, SA1ShiftedPB orl %eax, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoopOp6B: PullWord RTL pushl %eax PullByte RTL popl %edx movb %al, PB incw %dx andl $0xff, %eax andl $0xffff, %edx sall $16, %eax movl %eax, SA1ShiftedPB orl %eax, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* JSR ABS */Op20: movl PC, %eax subl SA1PCBase, %eax incl %eax PushWord JSR_ABS Absolute8 JSR_ABS andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* JSR ABS INDEXED INDIRECT */OpFCE1: movl PC, %eax subl SA1PCBase, %eax incl %eax PushWordENew JSR_AII_E AbsoluteIndexedIndirect8 JSR andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoopOpFC: movl PC, %eax subl SA1PCBase, %eax incl %eax PushWord JSR_AII AbsoluteIndexedIndirect8 JSR andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* RTS */Op60: PullWord RTS incl %eax movl %eax, %edx andl $0xffff, %edx orl SA1ShiftedPB, %edx call S9xSA1SetPCBase jmp S9xSA1MainAsmLoop/* MVN */Op54X1: xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, SA1ShiftedDB movb 1(PC), %dl sall $16, %edx movw XX, %dx call S9xSA1GetByte movl SA1ShiftedDB, %edx movw YY, %dx call S9xSA1SetByte incb XL incb YL movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVN_EXIT8 decl PC jmp S9xSA1MainAsmLoop.MVN_EXIT8: addl $2, PC jmp S9xSA1MainAsmLoopOp54X0: xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, SA1ShiftedDB movb 1(PC), %dl sall $16, %edx movw XX, %dx call S9xSA1GetByte movl SA1ShiftedDB, %edx movw YY, %dx call S9xSA1SetByte incw XX incw YY movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVN_EXIT16 decl PC jmp S9xSA1MainAsmLoop.MVN_EXIT16: addl $2, PC jmp S9xSA1MainAsmLoop/* MVP */Op44X1: xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, SA1ShiftedDB movb 1(PC), %dl sall $16, %edx movw XX, %dx call S9xSA1GetByte movl SA1ShiftedDB, %edx movw YY, %dx call S9xSA1SetByte decb XL decb YL movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVP_EXIT8 decl PC jmp S9xSA1MainAsmLoop.MVP_EXIT8: addl $2, PC jmp S9xSA1MainAsmLoopOp44X0: xorl %edx, %edx movb (PC), %dl movb %dl, DB sall $16, %edx movl %edx, SA1ShiftedDB movb 1(PC), %dl sall $16, %edx movw XX, %dx call S9xSA1GetByte movl SA1ShiftedDB, %edx movw YY, %dx call S9xSA1SetByte decw XX decw YY movw AA, %ax decw %ax movw %ax, AA cmpw $0xffff, %ax je .MVP_EXIT16 decl PC jmp S9xSA1MainAsmLoop.MVP_EXIT16: addl $2, PC jmp S9xSA1MainAsmLoop/* REP */OpC2: movb (PC), %al incl PC notb %al andb %al, FLAGS andb %al, SA1_Negative andb %al, SA1_Carry testb $Zero, %al setz %ah orb %ah, SA1_Zero shrb $6, %al andb %al, SA1_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: S9xSA1FixCycles REP CheckForIrq REP jmp S9xSA1MainAsmLoop/* SEP */OpE2: movb (PC), %al incl PC orb %al, FLAGS orb %al, SA1_Negative movb %al, %ah shrb $6, %ah andb $1, %ah orb %ah, SA1_Overflow test $Zero, %al jz .SEP_NO_ZERO movb $0, SA1_Zero.SEP_NO_ZERO: andb $1, %al orb %al, SA1_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: S9xSA1FixCycles SEP jmp S9xSA1MainAsmLoop/* XBA */OpEB: movb AL, %ah movb AH, %al movb %ah, AH movb %al, AL SetZN jmp S9xSA1MainAsmLoop/* RTI */Op40: 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 SA1ShiftedPB, %eax sarl $16, %eax.RTI_SKIP_EMU: movb %al, PB popl %edx sall $16, %eax orl %eax, %edx movl %eax, SA1ShiftedPB call S9xSA1SetPCBase testb $IndexFlag, FLAGS jz .RTI16 xorb %al, %al movb %al, XH movb %al, YH.RTI16: S9xSA1UnpackStatus RTI S9xSA1FixCycles RTI CheckForIrq RTI jmp S9xSA1MainAsmLoop/* WAI */OpCB: movb $1, SA1WaitingForInterrupt decl PC#if 0// XXX: FIXME movb Shutdown, %al testb %al, %al je .NoShutdown movl NextEvent, CYCLES cmpb $0, APUExecuting je S9xSA1MainAsmLoop movb $0, CPUExecuting.WAITExecAPU:#ifdef DEBUGGER testb $2,APUFlags je .WAITNoAPUS9xSA1Trace STORE_REGISTERS ccall S9xSA1TraceAPU LOAD_REGISTERS.WAITNoAPUS9xSA1Trace:#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 S9xSA1MainAsmLoop#endif.NoShutdown: jmp S9xSA1MainAsmLoop/* ??? */OpDB: decl PC orb $DEBUG_MODE_FLAG, SA1Flags jmp S9xSA1MainAsmLoopOp42: jmp S9xSA1MainAsmLoop.globl S9xSA1OpcodesM1X1.data .align 4S9xSA1OpcodesM1X1: .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 S9xSA1OpcodesE1.data .align 4S9xSA1OpcodesE1: .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 .long Op6FM1 .long Op70 .long Op71M1 .long Op72M1 .long Op73M1 .long Op74M1 .long Op75M1 .long Op76M1 .long Op77M1 .long Op78 .long Op79M1 .long Op7AE1 .long Op7B .long Op7C .long Op7DM1 .long Op7EM1 .long Op7FM1 .long Op80 .long Op81M1 .long Op82 .long Op83M1 .long Op84X1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -