From 403b03e1158939cbe39d5adb4d927a19e5072e06 Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Wed, 9 Jul 2025 00:14:03 +0800 Subject: [PATCH] =?UTF-8?q?gcc=E7=89=88=E7=9A=84nes=E6=B1=87=E7=BC=96?= =?UTF-8?q?=E8=BF=98=E6=98=AF=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 6502_a.s是armcc编译出来的,用于对比调试 --- Project/6502_a.s | Bin 0 -> 272480 bytes Project/Src/NES/6502mac_gcc.S | 236 +++++++++++++++++----------------- 2 files changed, 117 insertions(+), 119 deletions(-) create mode 100644 Project/6502_a.s diff --git a/Project/6502_a.s b/Project/6502_a.s new file mode 100644 index 0000000000000000000000000000000000000000..95245ef1dfc535d734ac97f355d124fe3ab85b29 GIT binary patch literal 272480 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 LZjer|?fd^97+O%f literal 0 HcmV?d00001 diff --git a/Project/Src/NES/6502mac_gcc.S b/Project/Src/NES/6502mac_gcc.S index b44ccc2..8709d98 100644 --- a/Project/Src/NES/6502mac_gcc.S +++ b/Project/Src/NES/6502mac_gcc.S @@ -19,38 +19,37 @@ // 6502 ־ r0 .macro encodeP extra - and r0, r8, #0x4F // CYC_V+CYC_D+CYC_I+CYC_C - tst r3, #0x80000000 // PSR_N + and r0, cycles, #CYC_V+CYC_D+CYC_I+CYC_C // CYC_V+CYC_D+CYC_I+CYC_C + tst m6502_nz, #0x80000000 // PSR_N IT NE orrne r0, r0, #N // N ־ - tst r3, #0xFF // Z ־ + + tst m6502_nz, #0xFF // Z ־ IT EQ orreq r0, r0, #Z // Z ־ - orr r0, r0, \extra // Ӷ־ (B/R) + orr r0, r0, #\extra // Ӷ־ (B/R) .endm // r0 е 6502 ־ .macro decodeP - bic r8, r8, #0x4F // CYC_V+CYC_D+CYC_I+CYC_C + bic cycles,cycles,#CYC_V+CYC_D+CYC_I+CYC_C // CYC_V+CYC_D+CYC_I+CYC_C and r1, r0, #V+D+I+C // ȡ V/D/I/C ־ - orr r8, r8, r1 // д cycles - bic r3, r0, #0xFD // r0 is signed - eor r3, r3, #Z // ת Z λ + orr cycles,cycles,r1 // д cycles + bic m6502_nz, r0, #0xFD // r0 is signed + eor m6502_nz, m6502_nz, #Z // ת Z λ .endm // ȡһָִ .macro fetch count - ldr r0, [globalptr,#clocksh] + ldr r0, [r10,#clocksh] add r0, r0, \count str r0, [globalptr,#clocksh] ldr r1, [globalptr,#opz] - subs r8, r8, \count * 256 + subs cycles, cycles, \count*256 - IT PL - ldrbpl r0, [r9], #1 - - IT PL + ITT PL + ldrbpl r0, [m6502_pc], #1 ldrpl pc, [r1, r0, lsl #2] ldr pc, [globalptr,#nexttimeout] @@ -63,12 +62,10 @@ str r0, [globalptr,#clocksh] ldr r1, [globalptr,#opz] - sbcs r8, r8, \count * 256 + sbcs cycles, cycles, \count*256 - IT PL - ldrbpl r0, [r9], #1 - - IT PL + ITT PL + ldrbpl r0, [m6502_pc], #1 ldrpl pc, [r1, r0, lsl #2] ldr pc, [globalptr,#nexttimeout] @@ -76,42 +73,42 @@ // ڱ־ .macro clearcycles - and r8, r8, #0xFF // CYC_MASK + and cycles,cycles,#CYC_MASK // CYC_MASK .endm // Եַȡ .macro readmemabs - and r1, r12, #0xE000 + and r1, addy, #0xE000 adr lr, 0f lsr r1, r1, #11 - ldr pc, [r4, r1] + ldr pc, [m6502_rmem, r1] 0: .endm // ҳȡ .macro readmemzp - ldrb r0, [r11, r12] + ldrb r0, [cpu_zpage, addy] .endm // ҳȡλ .macro readmemzpi - lsr r0, r12, #24 - ldrb r0, [r11, r0] + lsr r0, addy, #24 + ldrb r0, [cpu_zpage, r0] .endm // RAM ȡ NZ .macro readmemzps - ldrsb r3, [r11, r12] + ldrsb m6502_nz, [cpu_zpage,addy] .endm // ȡ .macro readmemimm - ldrb r0, [r9], #1 + ldrb r0, [m6502_pc], #1 .endm // ȡ NZ .macro readmemimms - ldrsb r3, [r9], #1 + ldrsb m6502_nz, [m6502_pc], #1 .endm // ѡȡʽ @@ -131,7 +128,7 @@ .macro readmems .if _type == _ABS readmemabs - orr r3, r0, r0, lsl #24 + orr m6502_nz, r0, r0, lsl #24 .elseif _type == _ZP readmemzps .elseif _type == _IMM @@ -141,10 +138,11 @@ // Եַд .macro writememabs - and r1, r12, #0xE000 - // adr r2, writemem_tbl - ldr r2, =writemem_tbl - add r2, r10 + and r1, addy, #0xE000 + @ ldr r2, =writemem_tbl + @ add r2, globalptr + add r2, globalptr,#writemem_tbl + adr lr, 0f lsr r1, r1, #11 ldr pc, [r2, r1] @@ -153,13 +151,13 @@ // ҳд .macro writememzp - strb r0, [r11, r12] + strb r0, [cpu_zpage,addy] .endm // ҳд .macro writememzpi - lsr r1, r12, #24 - strb r0, [r11, r1] + lsr r1, addy, #24 + strb r0, [cpu_zpage, r1] .endm // ѡд뷽ʽ @@ -198,8 +196,8 @@ ldr r2, [globalptr,#m6502_s] ldrb r0, [r2], #-1 orr r2, r2, #0x100 - ldrb r9, [r2] - orr r9, r9, r0, lsl #8 + ldrb m6502_pc, [r2] + orr m6502_pc, m6502_pc, r0, lsl #8 .endm // 8λջչ @@ -208,7 +206,7 @@ add r2, r2, #1 strb r2, [globalptr,#m6502_s] orr r2, r2, #0x100 - ldrsb \x, [r11, r2] + ldrsb \x, [cpu_zpage, r2] .endm // Ѱַģʽ @@ -220,27 +218,27 @@ // Ѱַ .macro doABS .set _type, _ABS - ldrb r12, [r9], #1 - ldrb r0, [r9], #1 - orr r12, r12, r0, lsl #8 + ldrb addy, [m6502_pc], #1 + ldrb r0, [m6502_pc], #1 + orr addy, addy, r0, lsl #8 .endm // XĴ .macro doAIX .set _type, _ABS - ldrb r12, [r9], #1 - ldrb r0, [r9], #1 - orr r12, r12, r0, lsl #8 - add r12, r12, r6, lsr #24 + ldrb addy, [m6502_pc], #1 + ldrb r0, [m6502_pc], #1 + orr addy, addy, r0, lsl #8 + add addy, addy, m6502_x, lsr #24 .endm // YĴ .macro doAIY .set _type, _ABS - ldrb r12, [r9], #1 - ldrb r0, [r9], #1 - orr r12, r12, r0, lsl #8 - add r12, r12, r7, lsr #24 + ldrb addy, [m6502_pc], #1 + ldrb r0, [m6502_pc], #1 + orr addy, addy, r0, lsl #8 + add addy, addy, m6502_y, lsr #24 .endm // Ѱַ @@ -251,159 +249,159 @@ // XĴѰַ .macro doIIX .set _type, _ABS - ldrb r0, [r9], #1 - add r0, r6, r0, lsl #24 - lsr r12, r0, #24 - ldrb r12, [r11, r12] + ldrb r0, [m6502_pc], #1 + add r0, m6502_x, r0, lsl #24 + lsr addy, r0, #24 + ldrb addy, [cpu_zpage, addy] add r0, r0, #0x01000000 lsr r1, r0, #24 - ldrb r1, [r11, r1] - orr r12, r12, r1, lsl #8 + ldrb r1, [cpu_zpage, r1] + orr addy, addy, r1, lsl #8 .endm // YĴѰַ .macro doIIY .set _type, _ABS - ldrb r0, [r9], #1 - ldrb r12, [r11, r0] - add r0, r0, r11 + ldrb r0, [m6502_pc], #1 + ldrb addy, [r0,cpu_zpage] + add r0, r0, cpu_zpage ldrb r1, [r0, #1] - orr r12, r12, r1, lsl #8 - add r12, r12, r7, lsr #24 + orr addy, addy, r1, lsl #8 + add addy, addy, m6502_y, lsr #24 .endm // ҳѰַ .macro doZPI .set _type, _ABS - ldrb r0, [r9], #1 - ldrb r12, [r11, r0] - add r0, r0, r11 + ldrb r0, [m6502_pc], #1 + ldrb addy, [r0,cpu_zpage] + add r0, r0, cpu_zpage ldrb r1, [r0, #1] - orr r12, r12, r1, lsl #8 + orr addy, addy, r1, lsl #8 .endm // ҳѰַ .macro doZ .set _type, _ZP - ldrb r12, [r9], #1 + ldrb addy, [m6502_pc], #1 .endm // ҳ˫ֽѰַ bbr/bbs .macro doZ2 .set _type, _ZP - ldrb r12, [r9], #2 + ldrb addy, [m6502_pc], #2 .endm // ҳX .macro doZIX .set _type, _ZP - ldrb r12, [r9], #1 - add r12, r12, r6, lsr #24 - and r12, r12, #0xff + ldrb addy, [m6502_pc], #1 + add addy, addy, m6502_x, lsr #24 + and addy, addy, #0xff .endm // ҳXƣ .macro doZIXf .set _type, _ZPI - ldrb r12, [r9], #1 - add r12, r6, r12, lsl #24 + ldrb addy, [m6502_pc], #1 + add addy, m6502_x, addy, lsl #24 .endm // ҳY .macro doZIY .set _type, _ZP - ldrb r12, [r9], #1 - add r12, r12, r7, lsr #24 - and r12, r12, #0xff + ldrb addy, [m6502_pc], #1 + add addy, addy, m6502_y, lsr #24 + and addy, addy, #0xff .endm // ҳYƣ .macro doZIYf .set _type, _ZPI - ldrb r12, [r9], #1 - add r12, r7, r12, lsl #24 + ldrb addy, [m6502_pc], #1 + add addy, m6502_y, addy, lsl #24 .endm // ADC .macro opADC readmem - movs r1, r8, lsr #1 + movs r1, cycles, lsr #1 IT CS subcs r0, r0, #0x00000100 - adcs r5, r5, r0, ror #8 + adcs m6502_a, m6502_a, r0, ror #8 - mov r3, r5, asr #24 - orr r8, r8, #CYC_C+CYC_V + mov m6502_nz, m6502_a, asr #24 + orr cycles, cycles, #CYC_C+CYC_V IT VC - bicvc r8, r8, #CYC_V + bicvc cycles, cycles, #CYC_V .endm // AND .macro opAND readmem - and r5, r5, r0, lsl #24 - mov r3, r5, asr #24 + and m6502_a, m6502_a, r0, lsl #24 + mov m6502_nz, m6502_a, asr #24 .endm // ASL .macro opASL readmem add r0, r0, r0 - orrs r3, r0, r0, lsl #24 - orr r8, r8, #CYC_C + orrs m6502_nz, r0, r0, lsl #24 + orr cycles, cycles, #CYC_C writemem .endm // BIT .macro opBIT readmem - bic r8, r8, #CYC_V + bic cycles, cycles, #CYC_V tst r0, #V IT NE - orrne r8, r8, #CYC_V + orrne cycles, cycles, #CYC_V - and r3, r0, r5, lsr #24 - orr r3, r3, r0, lsl #24 + and m6502_nz, r0, m6502_a, lsr #24 + orr m6502_nz, m6502_nz, r0, lsl #24 .endm // Ƚϲ .macro opCOMP x readmem - subs r3, \x, r0, lsl #24 - mov r3, r3, asr #24 - orr r8, r8, #CYC_C + subs m6502_nz, \x, r0, lsl #24 + mov m6502_nz, m6502_nz, asr #24 + orr cycles, cycles, #CYC_C .endm // һ .macro opDEC readmem sub r0, r0, #1 - orr r3, r0, r0, lsl #24 + orr m6502_nz, r0, r0, lsl #24 writemem .endm // .macro opEOR readmem - eor r5, r5, r0, lsl #24 - mov r3, r5, asr #24 + eor m6502_a, m6502_a, r0, lsl #24 + mov m6502_nz, m6502_a, asr #24 .endm // һ .macro opINC readmem add r0, r0, #1 - orr r3, r0, r0, lsl #24 + orr m6502_nz, r0, r0, lsl #24 writemem .endm // ز .macro opLOAD x readmems - mov \x, r3, lsl #24 + mov \x, m6502_nz, lsl #24 .endm // ߼ @@ -411,52 +409,52 @@ .if _type == _ABS readmemabs movs r0, r0, lsr #1 - orr r8, r8, #CYC_C - mov r3, r0 + orr cycles, cycles, #CYC_C + mov m6502_nz, r0 writememabs .elseif _type == _ZP - ldrb r3, [r11, r12] - movs r3, r3, lsr #1 - orr r8, r8, #CYC_C - strb r3, [r11, r12] + ldrb m6502_nz, [cpu_zpage, addy] + movs m6502_nz, m6502_nz, lsr #1 + orr cycles, cycles, #CYC_C + strb m6502_nz, [cpu_zpage, addy] .elseif _type == _ZPI - lsr r3, r12, #24 - ldrb r3, [r11, r3] - movs r3, r3, lsr #1 - orr r8, r8, #CYC_C - lsr r1, r12, #24 - strb r3, [r11, r1] + lsr m6502_nz, addy, #24 + ldrb m6502_nz, [cpu_zpage, m6502_nz] + movs m6502_nz, m6502_nz, lsr #1 + orr cycles, cycles, #CYC_C + lsr r1, addy, #24 + strb m6502_nz, [cpu_zpage, r1] .endif .endm // OR .macro opORA readmem - orr r5, r5, r0, lsl #24 - mov r3, r5, asr #24 + orr m6502_a, m6502_a, r0, lsl #24 + mov m6502_nz, m6502_a, asr #24 .endm // ѭ .macro opROL readmem - movs r8, r8, lsr #1 + movs cycles, cycles, lsr #1 adc r0, r0, r0 - orrs r3, r0, r0, lsl #24 - adc r8, r8, r8 + orrs m6502_nz, r0, r0, lsl #24 + adc cycles, cycles, cycles writemem .endm // ѭ .macro opROR readmem - movs r8, r8, lsr #1 + movs cycles, cycles, lsr #1 IT CS orrcs r0, r0, #0x100 movs r0, r0, lsr #1 - orr r3, r0, r0, lsl #24 - adc r8, r8, r8 + orr m6502_nz, r0, r0, lsl #24 + adc cycles, cycles, cycles writemem .endm @@ -467,7 +465,7 @@ sbcs m6502_a, m6502_a, r0, lsl #24 and m6502_a, m6502_a, #0xff000000 mov m6502_nz, m6502_a, asr #24 - orr cycles, cycles, #CYC_C | CYC_V + orr cycles, cycles, #CYC_C+CYC_V IT VC bicvc cycles, cycles, #CYC_V