From 3a04b5b18d7f11ffb5a4d09d6f510fe0cbc45968 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 18 Apr 2025 04:57:13 -0500 Subject: [PATCH] 6502 command stream player, part 6 preparing NES test player --- src/asm/6502/nes/chr.bin | Bin 0 -> 8192 bytes src/asm/6502/nes/chr.gif | Bin 0 -> 1504 bytes src/asm/6502/nes/nes.i | 23 ++++++++++++++++++++ src/asm/6502/nes/test.s | 6 ++++++ src/asm/6502/seq.bin | Bin 0 -> 938 bytes src/asm/6502/stream.s | 44 ++++++++++++++++++++++++++++++--------- 6 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 src/asm/6502/nes/chr.bin create mode 100644 src/asm/6502/nes/chr.gif create mode 100644 src/asm/6502/nes/nes.i create mode 100644 src/asm/6502/nes/test.s create mode 100644 src/asm/6502/seq.bin diff --git a/src/asm/6502/nes/chr.bin b/src/asm/6502/nes/chr.bin new file mode 100644 index 0000000000000000000000000000000000000000..160679aaa964c4a4f45f8675a7d760a76cd65230 GIT binary patch literal 8192 zcmeI0p_=O;5QRq|A|ggcR79*mToF-$s6ZehDpnv?tca+%Vnt;|9{!%0aI$@e3)}8r zV3;rm!k39iFI|CO1=Nb*ukqvK=p*AEBfdgvs>@W9k|hi}=OUy=y{_w3PQtqtyNZ=j z=XuugE zCJ$sszXj%;g4+k@FvWEr1|j#HUm?7NoaX#0uqSu8fj~kgbXxx#Z(&%h?)1s~{7nN7 zvc+k2#62!~8PQG(e0jKy+Z3h^4UHZL9FfzXTEFv6NR6@VrC_}dzDlu=ke4~#vtU=+p!*vaPGT-^osD-*k#tin@CCF zX6r-d{Pif0FX(#^9VH_^GKA~h>`8QEsc+Wpyv*|pcR1GjptyNRr29quq{@Ps@F)$#ZnHOc$}+5`0)q=GWi`6$tl5 zxP%yyXa^yv=onS_K=|}k*RjWecm?HY);KBoNlBGCC?%TrXqvxqdWG ztQ;(tp5A*-K_BTFo~kHM4j;dA0)44dSI3$;efk_(W0-+*fbrwWJYy0~t}R z%+UCJE(T3?F+qe0y;7cQ(&XycVS#nqXg5Q@sz?XQ2KO{M&ngp9g{(VTbYGf(0+Vw6 zZrbzgrU5S0T~jtc$D{73GR6q!Om%mxw*zptJ%VA14I0Q1Y*ymN zl4r{?5}lUiT$!MF<9TUQdnl^tooJY~V~3IOd1)qt$2@7AhjcWBXMi|5S)zS>6c;2i zbsm_ZX1QI*9-WD21l1@r#rIucbX{MTP%4w&behO-+qK-;xsivNaYO1QP z%4(~wz6xusvd&6tt+w8ZYp%NP%4@H_{t9fc!VXJpvBn;YY_iJ#F3W7Q&OQrmw9-yX zZMD{3i*2^rZp&@A-hK;ixZ;jWZn@^3yWNYto%SW1Cj!Z3o9Iy~$!}!dyT&R^_Ly3~ zwv0$8E=+P+;B4LS2jILj2FYK;cV-7vlz)l{9tc0?qho&Z#tS2x4xhHmzV4Am%X&h= zi87HYEZPFg3rAGrzvLlvRm?D4<=AdL@m1oL!chc~iDGs54KXR-)S{NT(FT*pFz0dO zZ4uYVUe$Ae5np|RVKt$canAS=#O!t*@oW^*wVT<_op*70j8%DGy_@muc9JUVa;nP} zR4ixQb3ZsYmcz){CB2`7I1@cQyC@!Z5{JXY$!i*o^ip#FSq>A9V`W{6cV&&<^I=CrquaD4e#sSaRlYMb`h->0eeq2e6&8k&Ch_zgCFYj)u>|)Y;TNU zn*+&qr1^xcfmd^rp89kP0czrGcB>nUgg2lig^*qcv(cTT*9NXouXUlr4G5)yjXZg- zP`)GLht!rpKt0St--BHY_W>Ht;HQa7+~0(dN5m7c9&ThMBVEq~w~YhxOL%RQ0mC|o zDZP=vgcZ6*3tzZJj^Th$Ujy4(-lZ6YZEue=yB`U+XTBnC?tg_U*iyzwJ`{1WPLqpI z7dS^p@m1k(isE0HmN>pH8pe+toY*=BcZfkvuy${gPx$oXrygVwU94=SD_;rASjuvi zw5+8qZ;8uX>T;L7?4>V%3Cv&$bC|>|rZJC+%w#HanapgaGoJ~~Xi9UM)U2j8uSu!` G002AND&}7R literal 0 HcmV?d00001 diff --git a/src/asm/6502/nes/nes.i b/src/asm/6502/nes/nes.i new file mode 100644 index 000000000..cf161934a --- /dev/null +++ b/src/asm/6502/nes/nes.i @@ -0,0 +1,23 @@ +; this is a definition file for a NES ROM. + +.MEMORYMAP +DEFAULTSLOT 1 +; 2KB RAM +SLOT 0 START $0000 SIZE $800 +; 32KB ROM +SLOT 1 START $8000 SIZE $8000 +.ENDME + +.ROMBANKMAP +BANKSTOTAL 2 +; iNES header +BANKSIZE $10 +; program ROM data +BANKSIZE $8000 +BANKS 1 +; character ROM data + +.ENDRO + +.BANK 1 SLOT 1 +.ORGA $8000 diff --git a/src/asm/6502/nes/test.s b/src/asm/6502/nes/test.s new file mode 100644 index 000000000..c7f2433d9 --- /dev/null +++ b/src/asm/6502/nes/test.s @@ -0,0 +1,6 @@ +; command stream player test - NES version +; NES because it's what I am most familiar with, besides Atari 2600 + +.include "nes.i" + +main: diff --git a/src/asm/6502/seq.bin b/src/asm/6502/seq.bin new file mode 100644 index 0000000000000000000000000000000000000000..d88a8e3e805deac2530357ea7eb0321150aa1ddf GIT binary patch literal 938 zcmZ{iF^kkt5XX}|xynMc(8f+gtVC>t>x8QXu{f4x*|4lEYeL9vE@WA^QxpVS!OCyo z!4`f3YpY{s3qQk565+b@Ka*|U_y4`TeQ)06pZDhE#jEH>6h$}h9X+^xjKP0?PomT4 zee@&xjdc+JjDAJ*Ix)R<{fP)FVrc)&f?_8YkEBG268h-+920cMB>S<&CeDy_mk8|= zdhEK033_Of{U-|z&LM3;+K|vU*JVtXvC{Ln2km}`=!r~Z3B0HKK}PZhOzCBiRB|wr zIa=xc4F9LXbQ(;l>nfqEglQQ}E7x^G*9q6ss6p>SBWu~nT1%<^rtQ34I60nqTRIh< zRl9C09?Mu3GFJ5Pqwa@}0wgT8mh>nrbtw+4mza4P&h;E?c$+kg_tcomHAiTrl{iwt z3Vf(J*|1_C_EuUWz%h%q=mA^V>H*m@zF>n1`CTh@8V+ikXq(Ho#b!?glyz=+ER#jgmWDROGK`yk-ESDj(v{sxtFG!wExMvx;ixjay1-2qcxIe;c~_{#<(hRF#yQq%tl^fh zPG1AW^gTd~dQh(iR(OXUg&Aes)o3Ug9=;RX+3o~MN?|)p literal 0 HcmV?d00001 diff --git a/src/asm/6502/stream.s b/src/asm/6502/stream.s index c46d3e6a5..1dadeb1b0 100644 --- a/src/asm/6502/stream.s +++ b/src/asm/6502/stream.s @@ -194,18 +194,19 @@ fcsOptPlaceholder: rts fcsCallI: - jsr fcsPushCall ; get address jsr fcsReadNext - tay + pha jsr fcsReadNext + pha ; ignore next two bytes jsr fcsIgnoreNext jsr fcsIgnoreNext - ; a has high byte - ; y has low byte - sty chanPC,x + jsr fcsPushCall + pla sta chanPC+1,x + pla + sta chanPC,x rts fcsOffWait: @@ -221,21 +222,44 @@ fcsFullCmd: rts fcsCall: - jsr fcsPushCall ; get address jsr fcsReadNext - tay + pha jsr fcsReadNext - ; a has high byte - ; y has low byte - sty chanPC,x + pha + jsr fcsPushCall + pla sta chanPC+1,x + pla + sta chanPC,x rts +; push channel PC to stack fcsPushCall: + lda chanStackPtr,x + tay + lda chanPC,x + sta fcsGlobalStack,y + iny + lda chanPC+1,x + sta fcsGlobalStack,y + iny + tya + sta chanStackPtr,x rts +; retrieve channel PC from stack fcsRet: + lda chanStackPtr,x + tay + dey + lda fcsGlobalStack,y + sta chanPC+1,x + dey + lda fcsGlobalStack,y + sta chanPC,x + tya + sta chanStackPtr,x rts fcsJump: