From 5c60601e0051aa85a55f2dfb096cbc95d10ff405 Mon Sep 17 00:00:00 2001 From: beeanyew Date: Fri, 4 Jun 2021 09:37:33 +0200 Subject: [PATCH] Fix PiStorm dev memcpy, correct extern gayle_emulation_enabled type --- platforms/amiga/amiga-platform.c | 2 +- platforms/amiga/amiga-registers.c | 2 +- platforms/amiga/pistorm-dev/pistorm-dev.c | 19 ++++++++++++++++-- .../pistorm-dev/pistorm_dev_amiga/CopyMems | Bin 9976 -> 10084 bytes .../pistorm-dev/pistorm_dev_amiga/PiSimple | Bin 17592 -> 17676 bytes .../pistorm-dev/pistorm_dev_amiga/copymems.c | 11 ++++++++-- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/platforms/amiga/amiga-platform.c b/platforms/amiga/amiga-platform.c index 160d2f9..a395d8c 100644 --- a/platforms/amiga/amiga-platform.c +++ b/platforms/amiga/amiga-platform.c @@ -40,7 +40,7 @@ extern int ac_z3_pic_count; extern int ac_z3_done; extern int ac_z3_type[AC_PIC_LIMIT]; extern int ac_z3_index[AC_PIC_LIMIT]; -extern int gayle_emulation_enabled; +extern uint8_t gayle_emulation_enabled; char *z2_autoconf_id = "z2_autoconf_fast"; char *z2_autoconf_zap_id = "^2_autoconf_fast"; diff --git a/platforms/amiga/amiga-registers.c b/platforms/amiga/amiga-registers.c index 056d4c9..5d2f887 100644 --- a/platforms/amiga/amiga-registers.c +++ b/platforms/amiga/amiga-registers.c @@ -5,7 +5,7 @@ #include "amiga-registers.h" uint8_t rtc_emulation_enabled = 1; -extern int gayle_emulation_enabled; +extern uint8_t gayle_emulation_enabled; void configure_rtc_emulation_amiga(uint8_t enabled) { if (enabled == rtc_emulation_enabled) diff --git a/platforms/amiga/pistorm-dev/pistorm-dev.c b/platforms/amiga/pistorm-dev/pistorm-dev.c index 9668daf..84cafa1 100644 --- a/platforms/amiga/pistorm-dev/pistorm-dev.c +++ b/platforms/amiga/pistorm-dev/pistorm-dev.c @@ -15,6 +15,7 @@ #include #include +#include #define DEBUG_PISTORM_DEVICE @@ -39,6 +40,7 @@ extern uint32_t do_reset; extern void adjust_ranges_amiga(struct emulator_config *cfg); extern uint8_t rtg_enabled, rtg_on, pinet_enabled, piscsi_enabled, load_new_config, end_signal; extern struct emulator_config *cfg; +extern int cpu_emulation_running; char cfg_filename[256] = "default.cfg"; char tmp_string[256]; @@ -180,6 +182,18 @@ void handle_pistorm_dev_write(uint32_t addr_, uint32_t val, uint8_t type) { pi_string[0] = 0; pi_ptr[0] = 0; break; + case PI_CMD_MEMCPY_Q: + DEBUG("CopyMemQuick.\n"); + if ((pi_ptr[0] & 0x03) != 0) { + DEBUG("[!!!PISTORM-DEV] CopyMemQuick src not aligned: %.8X\n", pi_ptr[0]); + } + if (pi_ptr[1] & 0x03) { + DEBUG("[!!!PISTORM-DEV] CopyMemQuick dst not aligned: %.8X\n", pi_ptr[1]); + } + if (val & 0x03) { + DEBUG("[!!!PISTORM-DEV] CopyMemQuick size not aligned: %.8X\n", val); + } + // Fallthrough case PI_CMD_MEMCPY: //DEBUG("[PISTORM-DEV} Write to MEMCPY: %d (%.8X)\n", val, val); if (pi_ptr[0] == 0 || pi_ptr[1] == 0) { @@ -189,6 +203,7 @@ void handle_pistorm_dev_write(uint32_t addr_, uint32_t val, uint8_t type) { printf("[PISTORM-DEV] MEMCPY called with size 0. Aborting.\n"); pi_cmd_result = PI_RES_INVALIDVALUE; } else { + //DEBUG("[PISTORM-DEV] Copy %d bytes from $%.8X to $%.8X\n", val, pi_ptr[0], pi_ptr[1]); int32_t src = get_mapped_item_by_address(cfg, pi_ptr[0]); int32_t dst = get_mapped_item_by_address(cfg, pi_ptr[1]); if (cfg->map_type[dst] == MAPTYPE_ROM) @@ -202,10 +217,10 @@ void handle_pistorm_dev_write(uint32_t addr_, uint32_t val, uint8_t type) { uint16_t tmps = 0; for (uint32_t i = 0; i < val; i++) { while (i + 2 < val) { - if (src == -1) tmps = (uint16_t)m68k_read_memory_16(pi_ptr[0] + i); + if (src == -1) tmps = (uint16_t)htobe16(m68k_read_memory_16(pi_ptr[0] + i)); else memcpy(&tmps, &cfg->map_data[src][pi_ptr[0] - cfg->map_offset[src] + i], 2); - if (dst == -1) m68k_write_memory_16(pi_ptr[1] + i, tmps); + if (dst == -1) m68k_write_memory_16(pi_ptr[1] + i, be16toh(tmps)); else memcpy(&cfg->map_data[dst][pi_ptr[1] - cfg->map_offset[dst] + i], &tmps, 2); i += 2; } diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/CopyMems index d6276f18798fb49848dc8d5c90a66d6f43c53a77..70c845e4316385a45953507ef044f1d07404a748 100755 GIT binary patch delta 1824 zcmaKsZERCj7=X|1X1~_&(t@LO9V^gGMyCu=VsIi1f>2SwG-P_|+KyGq+Vlg5Y20G= zqml&%hafS=@WYtJ7|=`!nuZXwpfUTSVnUR}#Sk*d0%SkPBm;f!1ry^Bn>_bD=RNQD zxxI5cuE$0fy3YwAQqU$u-5)|ccJ6pYRpQ61e<^pyt4g+hFlz0ngxY`p6Ps+f+Fl8D z{GhKx@3vPI^P}}pSdEqc*D~~P%h(F4EnV{rY0nXLo&N2AYZ4w~9w zi=Ak>#4fw_tq1owJM!@Ck+%BMZLvtVi%5rQF@3k1zBMSFa@I0zjNxys%8K=KB`;Ss zsLCCAwBdmBO1LwAY}?TOLt4eQ5oxyVS86hETc^y*G23looVMo_rB9ljKPi*)nsW{A z9@iGuqpn54jc*7?$guslO}1EBk5DTq(N?iiTYEK=CvdH~GCY^NztjS_w;9|)8Sxw^ z&DWkbRMVd4mC5l|?|p+ZCL{i1gAqE^e%(SSVB}Vf>)|4N3d`X#l;D;SCOnJ>PIJ zg4~B}6vB_ApJ1X}b}#&OaFQ~9;f1>bQ!oP$&{;t%tq&;GMCoSIT1a8R+iHX`C2fMe z@I722>jp~skj&^DJIUAu{qPYG*WC&GsHPRp3eo5l7>^0DfCN6?KR@&FzXPwxiAC=X z(tz=8_yEpR2JXg>VI}MJ$h$}zG7HnJ>!AuYUB)7pwx#7TDNNAvYjzGV3AM*!q^jvv8UHMPvj?L%xmBAL8*o5WvS+ zd?!I*Q00OQa8k}SMwNLPS={8Fx8my#@aXF6pdkn!d- z>I=F2VLmJ`mov!&ymNQuP+*~QMV=0{v@tJHud3MrHIYj7W)u61y03$a7j>$trUx>m zVkwo$(aLT)9e8nboD+kZO(zbeHB)1Vhh~|~my>;IErGC1@Gz*EVxm+!%+gWO_r0lH zKHabF=j6bWsQaj{EhI8UJ(6u!URcs&a71Jv7}e&ahb^W{=|Z8O{K8g~`+}?a9Gnd9 zQf|oU;OfU;MNRp7nb}NFAyLSr>A+u+9Zg%7_2~(Eli8e}!K00>PVLI{r*}S-G%HuYKL4LMyV9kua(}Xv$7+zdH-Q1$2WOwt5J(@kk_3lRY zaQWJJVp=cACqeu1H!x`z0Q!*Id0WHmHG6Fq*!ylEAK9DY<5!#Ol;#Vl_}R648RcU+ Sr0tM|?nL@-jL$EfulpOhD~sj; delta 1712 zcmXw(e`r%z6vyvNYtp1i^O7{R&e|qzZL6s5)()MN;YMvs=dyx7=%kpY`C&6-Q7>XI*~$>hmHz4x4R z&;6crU-BTd`gUQX=dutY20Mi)`a_5fmoGGhwfYPBHEn)2uceA#59YPM@TUST!H?Ew zZNW1yW?D&TG;~;q(6>Uk=7PM%Y15Mv4%4H2+r z=X=f^A5%M=eX`woT+7QD=Wgw$Tyj34A$MG9O>2|w?q9Sisq3$@y;JXEeoo)!${Skq zcCkZk_9;uHT+)3+FY8I(M?K%DJ>DLR{z&$FFOd1McPFMQ-y7Q0>@nYSi)P6Fiu2=* zh*M9$5E@upzzP$Pm=NOeQ+QCr9@)v*Wr61N-Z!5cVUTQI^Z-NPQjQEo@YXo zVb`BRf%R3!UBH*n;GGx3jloM&?>UTpj61MB6vEHO3X+L;<;9J^k53`zC%6X>knyz$frASsfhz9xcOGR>f&v*b5`@BR(f^y610HoPs;V z8bXwlzs!FVN%W&41l6)+)1~n}$oLwNWz8UK6)9Fmim{Q(`XThd5G=wi?1vx^6kejF zz64Fsi;V`9Ft=S~M3%je`84wa=^xMt5oVk+THF)n;Z zXle^aDsfvd-e*HEoB}rKp8*Nn4fytum^cpyxonCPFxza-b^d3#W47#84uWKADJ__OfZYQdPH;PKn~M@{w!F2!9*-rQibuxcDs;o2>ygos(dbY-dV;0Bz{?U& zW+R620n@T>bDfB#N8-b3eOvyzrP;%65S57}vt}meO<7(&XmPE`Ty?YRkSQP=H{zMh zFy{+rUd~sy^21-QKB!%j9W||+YB3|d)UM4A)jccv57UcgJOBUy diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/PiSimple index 7238b900ce732d6fe89f50ae91d23b69c7ae290c..247706aa9d28e3d37e9d4f03ec9e4e0380e7bbd6 100755 GIT binary patch delta 2356 zcmb7FeN0=|6+ibq1IBT);1WI(z{WPlfU%7sj&WRU9$$_@Zc3}p{ZKIwY}iP!2-yfj z!l4ti$SRCmbrV8uR8^>xrgWR7h(%Krb*SpHD3zkDt2UIfh^5LFwNcfT&&2yZP?u@x zKh@Lk{qDy(=bn4cx%V!<$`Vs-CO7LNBI*WAMB*JH^+&%kcQ9s2zQXRLvn4*L{4+ZK z%q)h^^C~a1@Hy2F4_d6_!QT<(B|_8E*)TmQ@{eqVEyk={YpWv1XpOD#fVK?(A?+X7O46m9 zVk)~iG;KaZWLx1^i=RL+Rr*@?4sX=I#ZD$y_1|L+tNXH}B34Ukjs z&(2c|WQbDw0k9ox0#||^U>&#)TmcSnr}2fcE5cd0o3eOFu`f+bkCI|Br;M0J6hzum zi_{yXw3{t=h~=>Qe-TR;>2DZ)x{DNH;bmFV@e_A?aBD^o6^diu{TutPDq{TGG(_p) z_`{aaCdPMrOrtoq+Y;l>QBwTn3+mM!W}TGQdxA1v;;)yK3mJR)<&vii?>c<8R_ZnT z5l)vh>CULJky9y9T2%QXc3~n)%HzDoRLOk2%T$#)cM($Eq{!y;rZTq5KQK+Q5D%6f z%=l|SLV^-JR$9hx@ww8*JlT-Lw_}RZ7Iw|IZf^a9>#RoA13S{vA0=Ul-z+UWs`8E! zBiA5vGHJ5)3u<;}SXh|uf2n2^gWV6o$02leHE5}w`3*YHlZ2FqdHw4VnmzF(O0Ejk(#=8cb=D)^;}!~3s4DzSZut1JfOz-noI zEQnpjq$W9o8*x5iF{E7!6YJvVEe69IG(ZY+Hu|!0)a7c|``wvQ}o z%acsvjg@890bJP*MB;xda`Wrj-HKd)TaJk->xK7^zW?8tT;Peya$$3uFIH-qk$+NI zti6ci5b(B=8^;f~(uPxNfMZTMDByOUW3@WhuA?5^@`>uA^*lKvQTlhUu~mx0BWIu~ zs&U%L^>LGQ)**VE$rYxxbGkP9_~_S$?NyHInnTXRuG-G7?&Cd?hy8k~p|Pnsxn#{? z8Ou7{@YZF1-DYE8*j*eZ+@75o!C1ilBgUjf(P zEB2v12V8>B>A=S@1)mK-)dYb3R&4^1sk#MR0206zU>VDdW4UbJ?+R+F%|s-0oEjSJ zJ`qE+=q|tN`mLtgvojn!J=Bc`JXqy3wOxYU%)hEVg16o7HZXRQKXc?g)ThGpyio1o zVUG>3_>AXB{#|G&IyyS~PWBD;_jL_+4)*n&!m<&*>S@i|#;njW*wfkHKLG1Rqulqz zpK#f#>)g$H<<4YB$EhE8oksNZ2-vQBLj$M#vE!AUeyqEH;8YKqk0UZ9VyPWtk>lu5 z!73lE)8dt#ulqUvHQv&!6$}fI>K-~1gBmKP-)qAQJnub>=lq8ENw&?6J{yZ9pYav3 Sy^b2$4jlH$PAB8_F7ZDIosby- delta 2250 zcmb7Fe{56N6+ZVp+cCyvi4~dvj-A+!W9Nro^0pacLhL;9!%dh=(@D)TL`(v9x*1}* zff7jdivgX@44rkd+xdC-aB!cU44U1m6d!*M1z2nNW4R2{P4G~e#Xq1*V!E%o8?LU zU(pGzD`DvL83N4A&l!HY#q4=C{5zuZiQY-&WP~1BLdRBnRf)ySE7xy=mVf;VFq~Ll z#MnaSEn}y!aW*_H387=T?cr(s_jNu{wKGc_;(DQKneQ$8CDZezvQ2CzV<;aNST-}g z`93p+zO1x4Bq|MGqqrm3H5%K)&zrY&7S|soVyW=^xi1`49VAW6EE&`QHr!T58%@2F zyFPEzgbzEKv8;bbK2b-?CN?T0CUS+50&_#f8=K<0C*jv`pF+t^$DhqhlcPv)NOJ8WmRxHLwh%}7)oC2g?vE-_`8ytYtjxltf{ zjC3Y&BiI6N0M~*m!Cr73Sm7OxAD{S0IEjdJ_06Oy){43qX)ZtOCT0=^kyec&4aG=1 z-+71Fv#j-B#B?J49nu#ENYg94rdrBB_v^x|Q-bK%gueZE;@g^tsc*6nHILF3CRAvNDerO8{Ov0ms@%%RLg!#BWx=U{A|IshfseA*9o%jQfke zCy`e#kT#}2!mf@{c&lE%nqoNl(j=bhus&-d1BDZ1CCV1p8T zw8qT__{EyGux*%ztS^&D9j;LCB^pv4%R$w3lyv66abo04GA~ocyT76ie^EWd(eORi z!cO!Qg6dvby~J;L9P+~zBclZ7`2f5>M#3%d%iup_ljD%T13rlUA@EPYQGU*4Z;e80 z7+ZZ7oC1Fe?gg)@?i-JjK^gB{(SE9oA&@hwq6~h2GksT)NN_r<9;DimJ;c**|{s8VWu_4{jycQ?eTg z;VIe0g!q)~OhP04;7NzCqTYob!Q>_ZOK=2Q$seJ$IY&4CZO*Q)u_&!=jx5z{pDdLK zt?uQY)t0U62q<}*E8J9PZ+$zkQ!OPm+0i3NZ*k{}IQC?6k;Iw&rWx~FmdbBfQmq+h z2~X9%R3UtWg{v0hj*ZR+ez$Jx#v4y-tYx{c-p&s3J@wts>__}#O1rvY58mdp^>*#u z2(fc~0UEQ@4Heom5n8^=Z4J+}UY=}lTan#IvMcm|rMYtdr9x>g&+$(hYK2uNUum$S z=r?<+DsH2I{OXYypyjh_regHpMMt+X3ddJ?pU2}}*5O=S4s??r=MdM^1GBOd;h5Db z1N*w#V=2{7Joxfp>vF0P{pm3&1~#FflBlbVS72>u7 zO_;Cg6mSiQ0Pxdv1i*Anrvdno6(Gwm`@$x95n&4buZ$!I4<^vGEb!uOADHB|yf|@q zWDpHRkmcEJ1A?^3eg5rulSlk^#ytG&_Digshno8Yd5vFamhk#!o42zWUc94>Ik{^` zcggjpWEj=!)Ae0PiATeX}Y?C*c&X9I_^MjO&o2xesXFxGCpiN4t1 z-=8;*?njTz^ZaIu6_4Rk%dhZ%Jy27UhFE~s;K#=@ ZO3aygFKA&Kn(nE7kO39WOt#f0{tq~ZaS8wc diff --git a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/copymems.c b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/copymems.c index 973a66e..e1919b1 100644 --- a/platforms/amiga/pistorm-dev/pistorm_dev_amiga/copymems.c +++ b/platforms/amiga/pistorm-dev/pistorm_dev_amiga/copymems.c @@ -40,7 +40,7 @@ struct Screen *(*oldOpenScreen)(struct NewScreen *asm("a0")); #define AUTO_MONITOR_ID ((options.bits.auto_mon==0)?(PAL_MONITOR_ID):((options.bits.auto_mon==1)?(NTSC_MONITOR_ID):(DEFAULT_MONITOR_ID))) extern unsigned int pistorm_base_addr; -#define WRITELONG(cmd, val) *(unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val; +#define WRITELONG(cmd, val) *(volatile unsigned int *)((unsigned int)(pistorm_base_addr+cmd)) = val; void pi_CopyMem(unsigned char *src asm("a0"), unsigned char *dst asm("a1"), unsigned int size asm("d0")) { WRITELONG(PI_PTR1, (unsigned int)src); @@ -48,6 +48,12 @@ void pi_CopyMem(unsigned char *src asm("a0"), unsigned char *dst asm("a1"), unsi WRITELONG(PI_CMD_MEMCPY, size); } +void pi_CopyMemQuick(unsigned char *src asm("a0"), unsigned char *dst asm("a1"), unsigned int size asm("d0")) { + WRITELONG(PI_PTR1, (unsigned int)src); + WRITELONG(PI_PTR2, (unsigned int)dst); + WRITELONG(PI_CMD_MEMCPY_Q, size); +} + int leave(int x) { Forbid(); @@ -87,7 +93,8 @@ int main(int argc,char *argv[]) oldCopyMemPtr = (APTR)SetFunction((struct Library *)SysBase, -0x270, pi_CopyMem); - oldCopyMemQuickPtr = (APTR)SetFunction((struct Library *)SysBase, -0x276, pi_CopyMem); + oldCopyMemQuickPtr = (APTR)SetFunction((struct Library *)SysBase, -0x276, pi_CopyMemQuick); + //oldCopyMemQuickPtr = (APTR)SetFunction((struct Library *)SysBase, -0x276, pi_CopyMem); do { -- 2.39.2