From 6f5d9731afb45f8d1145ddde0111e495013d1c9c Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Sat, 6 Feb 2021 02:55:17 -0500 Subject: [PATCH 1/2] ram2gs_asm.s: move _swap and _unswap procedures to top of file --- ram2gs_asm.s | 97 ++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 49 deletions(-) diff --git a/ram2gs_asm.s b/ram2gs_asm.s index e5be661..37c12ca 100644 --- a/ram2gs_asm.s +++ b/ram2gs_asm.s @@ -40,6 +40,54 @@ .segment "CODE" +.proc _unswap: near +.A8 +.I8 + ; Save current bank and accumulator + phb + pha + ; Switch to bank 0xFB + lda #$FB + pha + plb + ; Submit C1AD + lda #$C1 + sta $FFFE + lda #$AD + sta $FFFF + ; Pull and submit command + lda #$00 + sta $FFFD + ; Restore accumulator and bank and return + pla + plb + rts +.endproc + +.proc _swap: near +.A8 +.I8 + ; Save current bank and accumulator + phb + pha + ; Switch to bank 0xFB + lda #$FB + pha + plb + ; Submit C1AD + lda #$C1 + sta $FFFE + lda #$AD + sta $FFFF + ; Pull and submit command + lda #$01 + sta $FFFD + ; Restore accumulator and bank and return + pla + plb + rts +.endproc + .proc _ram2gs_getsize: near .A8 .I8 @@ -100,55 +148,6 @@ rts .endproc - -.proc _unswap: near -.A8 -.I8 - ; Save current bank and accumulator - phb - pha - ; Switch to bank 0xFB - lda #$FB - pha - plb - ; Submit C1AD - lda #$C1 - sta $FFFE - lda #$AD - sta $FFFF - ; Pull and submit command - lda #$00 - sta $FFFD - ; Restore accumulator and bank and return - pla - plb - rts -.endproc - -.proc _swap: near -.A8 -.I8 - ; Save current bank and accumulator - phb - pha - ; Switch to bank 0xFB - lda #$FB - pha - plb - ; Submit C1AD - lda #$C1 - sta $FFFE - lda #$AD - sta $FFFF - ; Pull and submit command - lda #$01 - sta $FFFD - ; Restore accumulator and bank and return - pla - plb - rts -.endproc - .proc _ram2gs_detect: near .A8 .I8 From 286c58269c58c6f0822f8ede44d022e022781843 Mon Sep 17 00:00:00 2001 From: Zane Kaminski Date: Sat, 6 Feb 2021 05:21:35 -0500 Subject: [PATCH 2/2] Thrash cache on TWGS --- bin/GWRAM.dbg.po | Bin 143360 -> 143360 bytes bin/GWRAM.po | Bin 143360 -> 143360 bytes ram2gs_asm.s | 223 ++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 209 insertions(+), 14 deletions(-) diff --git a/bin/GWRAM.dbg.po b/bin/GWRAM.dbg.po index 45f04a603ad8ea9a35459abb74e2e3b78ef19af3..4b8027cc24d2667f4a0b628963b39d5d724b496f 100644 GIT binary patch delta 4347 zcmZ`-4^R}>8Q)#*_$QFVNCczplRpve;O;mu5N}_!Gfi@4wwjubF-CATpl3QN{y~W( zy;C{nK(Vqv@m)J0V)5S^uOuI+cEJ&p&4; zWtg|$e*3-O_r33ZzwbTpj;DIZQ-{|YviVumv*u|=iaJRlA}~j2#!vq~*}&P>vFJi2 zx@HygB!qU_N_WMO!zMDLFSC7Dlg3Op#Jth@Y`1sJbW@ysi~C-vSdyPw!=k4V8ng>F zOOU6Al_;b*q*O9wh;vcE99N_h#avy1(rqw9q}q9@nEPXiR7eIB8M0vjJ0#e^J-p|` z5T-}GTDmlwyccj2=)o6>Iu!CMS;N!regq3om>TisuA{l{5E@3@X*>E)F>!1p15JkS z#V1Kj1|lb+_w3Rtu?p=sOMUP->j*O<0HD8F(U_II8c@I?9f(`#)04@(&l528g*JnQ z4(frg`byj58hy@GGN&<~3tcgdDE7udbVUwP{35|(I#HN)3r?{k$%Zm!OH?>1Ku9bJiiOq9pIBw~ef6bC8Yz$)yAaWx)Vg%7XB!Ur!o=+nZbmwxW4 z$AA=`?AQ`(q5QE)_1~vN3SK^>)a3JOQm`JMQZ+yd*5PP9){>)jSfqH7?&V3?<1i3- zbg+OF2x$KGkVg8R=qT=Bfpqzv1W)u1lubJ+3Pu=S))cQ1ZmX%>Hr2uo3D={J((JVl@E96Q{%cR!>vd0BldBV=N)TIvroRtI(OKZ(9yP z%`Hx#V{Jl2`c8ud>$P_Izv}~Z|WLi$8<#bxk zpye!DHqr7_TAoJBkI`~2Ezh9knY8>9T1K?|Og=3a(()6uTujSmS}vt!D=ph;*+I*d zwEQG3SJU!5T4rhaX?ooPN}(uq|2g{}_Y7sW+IqsiA2C=?ya2$WR8S zjb0tlY)Fy3XD96dJY`o1p_-W<&Wujm?;W|687cPo>3gLlnioqSzNNc`#^Uq0wxJO_ z_qLfxFu|{7ooeYsN6iO2)vFV2>Sf*q-`z^4_PCO+&0OeJ#ygYB;AU~&JW&`a{AhM( z3OWNf311;UQ4}fqsG!pj$@dARwb`B{*1%dUO%Cwz7|_yCjRPIAl6P>^Gtr|m6Z`q- z797}s(FYc3gNUI~p_qd^>5Oz$UtoM)!_3Fse6$HePM2A@@2o^jCgOw@M&GX1-Nm%RBIaX3R^?BFD6tWg-=YxEK*dAx=iL1YgJKS5JKaL|YK!M%=g?oAq&QDG zhZG`&4crnGU4u2F#G~!DiA6xH#Zf9|`r$ArlU?ngbeEc9B_6n?gefgWiil2b%z2;K zGl1BS>%?YC&Z0)!eO|ADPV_LZi#Wkrn5)Eip z1yHiLgw`xDCaXpMkzVwb1FjW!$Tdc!;E;K}a-32P3aw=k(=TAzcePAGl9LHyq&64;$eofm5Nn{IMv%G*t|q_Qv-YM*F_ zz1$P=_qU<+azYC(QVsyZrMg+nqIp6_eLmxH2=;pOV?~bEwuAouV5`3+7*6GE4qp(Q z3Jvwub(@@8+Sr(SLz)U}8QtvEt6;=C;niqG5o201|V3Wz${A(lmU{e&~N zsVQ)9SFvhl#GkvqiUqNKeKi}XW?`3IKs8WRv!wh2PFAXdut8#3i4A$(h%Sv*u|w4? zk18sL>j#cqca|{PEA93|A}!Ezg1uP!tH?muvxc9SKGUV)pB=mA41dBcsOWEx>~tL>;I0;{msCvD>!@{&uIUdAN~P3N(}d zYS^HqNGn842ruRx_4dtY$^QtL(W^;)FN1jFFm*h}sneqyk1Molk^-VFpgDtAoN(eC zR}GOZ{abzB)}3Mo+-i5)Pz_tUGX}pBAI847Tizj0A+@2f@T!xqMnAnXoYI@-4Xj{! oaq|3VC6+U=cI6CpTf2H5MB#;oUm3n-zhHNdG`v63K!^YIU&1)wQ2+n{ delta 4157 zcmZ`+4R90J5k8%MEZZ1l3dIgEeKrPLGL~i83AXPw(3wsm(i>=LhNLEGjsiinLx9i> zv`wo6Th1YT7kLhdXv*|*wH%-AbLB7zF~L}1(jYp`Tz@hYk_P7ohfp8~NeT^V+c=DhPmRrZn~;wUJ)TdwL-3 zS%a3>QjU-L#Ncv^f%*_SNWu&pH>&o2`B1)kC;Le`JRUn%hLE?{bZIt)?&LvAq2ZD@SL)1SvtTJOP8JCQ=ui-RO}MGXru_Tm8z_xED?-~&M$k}p2+?TC&+ zlQPk*6M>5zEe!k*ctqF%0V~Zd6fU;ZW>rM;h;QEmk(-dT zvSd*X!+NAh4x@-1*_gwaLKrKv49kp#x2fuaTkx{*=FQr@jkojaU3c6Pu>kj~b%s=p zFZ}YNmg!4Dv4s?GR=ZW%tkf&E7`F-;+ZaIp3IfZ!=AvKC0i-&!NL6Tb@HSTEt`@(o zQT}U7APjLT2w1zf;o16Sq`jTvuoaf076T0NQim=+4n@!SQ!Dp1?w)^=uD=synN4;MkpW z#(HUxfHxsoVV#*UX2Xs~-B?n_ zVf9Rb#1*aayv#pL}D*R8R-)Ie$4b3NOJ>~TB$nwNAgt1CHDj{(-Kk~Jk` zGd&sFEY8@?sq7P8?ICuHS9_8SwPdJ)l5RZ#Aey|y=d}cLVD$$3+IOIT*Rt<<2?YlPbMo=FIQoybD{fpF-(g(hLa-ms z6qz$K1?H^9d}b_euYvX*@Qqg_D_$*&=b}v*zsK4{F9%bvnU9inz#?nV zyJvilL61Mf>91h%C5-55?Ijfh{E<7z7Bb0QjUUp{T`BqxyE#3Ljbfzu*akl#U4-=e zVT^8XZ$(>t@`^`h(k(uD>m${XqxjNMymu6H+Ng?4)*r=j+c~x}m`rr$wIR3c)%KMG6_T+}CRqs?OmQ-n|RH zf4IzCBY$uY8BvQ5t@g1`R%?`6xbFZy;rR?UY7D1z0Gp+mY9L<5kOByZA#CPl<{0_X zK@7)O+k6#e0*0#>7K3}FS8&Fc)dzvPZ$9exiHEQ>j4L}1)ap%vOBjD27}=hS_IpGOJBTW}Q)^QaboW zt4IewX|-B9f|2CwY7G?jAA!!(F-o3BDL}Q=n$)6d4VQr?7My z>se2x4;;o9PGNln_gp-UQ!eQg?l_Gb^+WjLDcq|MW5Ts-R4>$(VH|_;5Y`W1!;U6Z zqZ!penuG-X;+rIrZ(;6us3ft5kMePPd|Oz~{HS{UWM*IrLz2_O3=|VWaj?sfK7dW9 z#-S1a_!2Vc< z<0J49X*i%vO(vrGj?RQS5o5!(q#DlQj|6YR&@cSbwfMf6%7SwU6eP-mdKwJV-3 zFq)FvojaU@Q9Q;QMM~jNcT;Cf@LXfd>SCVRT8%<=#>Qjtjysb=_YSnoD!}Z;04UI? zkb*SICCu9~Z~N4Ft-e>|amU&CxF8r8dWQBi$;Z}|)34RZ=hpbXzP_$~N0-nowF_;M z;%2whMJ4b?u6nf5Gt_M6pEzM$)uzI=hYvQ(8y}t7gaRFxv7W~axJh0m`R;8c>o1dH zX(1Bcq*oXe$PRHTQQvRUq$qx_K-g59y?PU$Qb$FY1MT;=Ht zYI!X7vG@42WK__Y{U3#2cX=;1o6R3Lvy}BGB1S4>#7ai0VuYcI39&9a1(=R{d3=Mv zaswls!Fn@ePERfgC6|T}HA0=iz2WH6aC8a$^0hT`6vfrcHoAP3;sCsNshHqhEq#&S z_Y^~ZVbjA`?E9Vr@@hXdl4gw=`i7B=&G2Y%sD81Lk(%JQwmM=slAF7K8s*!!sgvNF zFylu_X8yJ`{A)c5jy~J=8#2r3jTIHm4A+Rh@kJ^xkofjxykn1!?K4S`Y&o5Op5>j diff --git a/bin/GWRAM.po b/bin/GWRAM.po index 1b2dedc0798b15cc4f7383a14cb66f62a78128e5..ea530066f1ca7db514664775cf55a5fd0c6a8977 100644 GIT binary patch delta 4420 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 G*Z&77eX%$I diff --git a/ram2gs_asm.s b/ram2gs_asm.s index 37c12ca..23c4c12 100644 --- a/ram2gs_asm.s +++ b/ram2gs_asm.s @@ -6,6 +6,10 @@ .export _ram2gs_detect .export _ram2gs_cmd +.define GetTWConfig $BCFF3C +.define SetTWConfig $BCFF40 +.define DisableDataCache $BCFF4C + .macro A8 sep #$20 ; put the 65C816 in 8-bit accumulator mode .A8 @@ -40,6 +44,87 @@ .segment "CODE" + +.proc _thrash: near +.A8 +.I8 + ; Preamble + php ; Push status + AI16 + phb ; Push bank + pha ; Push accumulator + pha ; Push X + phy ; Push Y + + ; Read 0x100000-0x11FFFF + AI8 + lda #$20 ; A = 0x10 (bank) + _thrash_loop: + pha ; Switch to bank stored in A + plb + AI16 + lda #$0000 ; Get index in A + clc ; Clear carry in preparation to add in loop + + ; Read loop + _thrash_loop0: + tax ; Get index from A into X to do LDYs + ldy $0100,X ; Read 64 bytes + ldy $0102,X ; ... + ldy $0104,X + ldy $0106,X + ldy $0108,X + ldy $010A,X + ldy $010C,X + ldy $010E,X + ldy $0110,X + ldy $0112,X + ldy $0114,X + ldy $0116,X + ldy $0118,X + ldy $011A,X + ldy $011C,X + ldy $011E,X + ldy $0120,X + ldy $0122,X + ldy $0124,X + ldy $0126,X + ldy $0128,X + ldy $012A,X + ldy $012C,X + ldy $012E,X + ldy $0130,X + ldy $0132,X + ldy $0134,X + ldy $0136,X + ldy $0138,X + ldy $013A,X + ldy $013C,X + ldy $013E,X + adc #$0040 ; Add 64 to index in A + cmp #0 + bne _thrash_loop0 ; Repeat if we haven't passed 0xFFFF + + ; Bank increment + AI8 + phb ; Transfer bank to A + pla + inc ; Increment bank + cmp #$21 ; Stop after bank 0x20 + bne _thrash_loop + + + ; Postamble + AI16 + ply ; Restore Y + plx ; Restore X + pla ; Restore accumulator + plb ; Restore bank + AI8 + plp ; Restore status + rts +.endproc + .proc _unswap: near .A8 .I8 @@ -98,21 +183,55 @@ xce ; Clear emulation bit php ; Push status again, reflecting emulation bit phb ; Push bank - AI8 + ; Check for TranswarpGS + AI8 + lda #0 + pha ; Push "TWGS absent" flag +; AI16 +; lda $BCFF00 +; cmp #$5754 ; "WT" +; bne _ram2gs_getsize_notwgs1 +; lda $BCFF02 +; cmp #$5347 ; "SG" +; bne _ram2gs_getsize_notwgs1 +; +; ; Get and push TWGS config +; jsl GetTWConfig +; pha +; ; Disable TWGS data cache +; jsl DisableDataCache ; Disable data cache +; +; ; Pull to restore TWGS settings into A +; pla +; ; Pull "TWGS absent" flag into x, and discard it +; AI8 +; plx +; AI16 +; ; Push TWGS settings +; pha +; ; Push "TWGS exists" flag +; AI8 +; ldx #1 +; phx + + _ram2gs_getsize_notwgs1: + AI8 ; Go to bank 3F ldy #$3F phy plb ; Save 3F/3456 - ldx $3456 + lda $3456 + pha ; Go to bank 7F ldy #$7F phy plb - ; Invert 7F/3456 + ; Save and then invert 7F/3456 lda $3456 + pha eor #$FF sta $3456 @@ -121,29 +240,51 @@ phy plb ; Has 3F/3456 changed? - cpx $3456 - php + jsr _thrash + plx ; X = saved 7F/3456 + pla ; A = saved 3F/3456 + cmp $3456 + php ; Push to save processor status + + ; Go to bank 7F + ldy #$7F + phy + plb + ; Restore 3F/3456 + sta $3456 ; Go to bank 7F ldy #$7F phy plb ; Restore 7F/3456 - eor #$FF - sta $3456 + stx $3456 ; Check result ldx #$80 plp beq _ram2gs_getsize_return ldx #$40 + ; Restore TWGS config + _ram2gs_getsize_return: + pla ; Pull TWGS flag + phx ; Push to save return value +; beq _ram2gs_getsize_post ; Skip if no TWGS +; plx ; Get return value back +; AI16 +; pla ; Pull TWGS config +; AI8 +; phx +; AI16 +; jsl SetTWConfig +; AI8 ; Postamble - _ram2gs_getsize_return: + _ram2gs_getsize_post: + pla ; Pull return value plb ; Restore bank plp ; Restore status xce ; Restore emulation bit - txa ; Transfer bank count to A plp ; Pull status again to pull I flag rts .endproc @@ -158,8 +299,40 @@ xce ; Clear emulation bit php ; Push status again, reflecting emulation bit phb ; Push bank - AI8 + ; Check for TranswarpGS + AI8 + lda #0 + pha ; Push "TWGS absent" flag +; AI16 +; lda $BCFF00 +; cmp #$5754 ; "WT" +; bne _ram2gs_detect_notwgs1 +; lda $BCFF02 +; cmp #$5347 ; "SG" +; bne _ram2gs_detect_notwgs1 +; +; ; Get and push TWGS config +; jsl GetTWConfig +; pha +; ; Disable TWGS data cache +; jsl DisableDataCache ; Disable data cache +; +; ; Pull to restore TWGS settings into A +; pla +; ; Pull "TWGS absent" flag into x, and discard it +; AI8 +; plx +; AI16 +; ; Push TWGS settings +; pha +; ; Push "TWGS exists" flag +; AI8 +; ldx #1 +; phx + + _ram2gs_detect_notwgs1: + AI8 ; Switch to bank 0x3F lda #$3F pha @@ -168,11 +341,13 @@ ; Unswap jsr _unswap ; Save unswapped 3F/8000 + jsr _thrash lda $8000 pha ; Swap jsr _swap ; Save swapped 3F/8000 + jsr _thrash lda $8000 pha @@ -180,6 +355,7 @@ lda #$FF sta $8000 ; Verify 0xFF stored + jsr _thrash lda $8000 cmp #$FF bne _ram2gs_detect_fail @@ -190,6 +366,7 @@ lda #$00 sta $8000 ; Verify 0x00 stored + jsr _thrash lda $8000 cmp #$00 bne _ram2gs_detect_fail @@ -197,27 +374,45 @@ ; Swap jsr _swap ; Verify 0xFF stored + jsr _thrash lda $8000 cmp #$FF bne _ram2gs_detect_fail ; Get success return value and jump to postamble ldx #$01 ; Get success falue - bne _ram2gs_detect_return ; Jump to postamble + bne _ram2gs_detect_done ; Jump to postamble ; Fail _ram2gs_detect_fail: ldx #$00 ; Get fail value - ; Postamble - _ram2gs_detect_return: + ; Done, now put back clobbered bytes + _ram2gs_detect_done: jsr _swap ; Swap pla ; Get value to restore to swapped bank 3F sta $8000 ; Restore jsr _unswap ; Unswap pla ; Get value to restore to unswapped bank 3F sta $8000 ; Restore - txa ; Put return value in accumulator + + ; Restore TWGS config + _ram2gs_detect_return: + pla ; Pull TWGS flag + phx ; Push to save return value +; beq _ram2gs_detect_post ; Skip if no TWGS +; plx ; Get return value back +; AI16 +; pla ; Pull TWGS config +; AI8 +; phx +; AI16 +; jsl SetTWConfig +; AI8 + + ; Postamble + _ram2gs_detect_post: + pla ; Pull return value plb ; Restore bank plp ; Restore status xce ; Restore emulation bit