From 41b6a76b2a09628117bd1455bf5d86986cef883e Mon Sep 17 00:00:00 2001 From: Josh Dersch Date: Thu, 3 Mar 2016 16:28:05 -0800 Subject: [PATCH] Implemented the 3K control RAM configuration, fixed bug in SWMODE (should use modified NEXT, not the NEXT from the uinstruction to determine bank.) --- Contralto/CPU/Tasks/EmulatorTask.cs | 14 +++----- Contralto/CPU/Tasks/Task.cs | 7 ++-- Contralto/CPU/UCodeMemory.cs | 52 ++++++++++++++++++++++++---- Contralto/Disk/Josh.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/allgames.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/bravox.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/diag.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/st76boot.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/tdisk8.dsk | Bin 2601648 -> 2601648 bytes Contralto/Disk/xmsmall.dsk | Bin 2601648 -> 2601648 bytes Contralto/IO/DiskController.cs | 2 +- Contralto/IO/UDPEncapsulation.cs | 18 +++------- 12 files changed, 60 insertions(+), 33 deletions(-) diff --git a/Contralto/CPU/Tasks/EmulatorTask.cs b/Contralto/CPU/Tasks/EmulatorTask.cs index e61cfcd..f4d6564 100644 --- a/Contralto/CPU/Tasks/EmulatorTask.cs +++ b/Contralto/CPU/Tasks/EmulatorTask.cs @@ -143,18 +143,14 @@ namespace Contralto.CPU _wrtRam = true; break; - case EmulatorF1.LoadESRB: - // For now, this is always 0; we do not yet support the 3K RAM system with 8 banks of S registers. + case EmulatorF1.LoadESRB: _rb = (ushort)((_busData & 0xe) >> 1); - if (_rb != 0) + if (_rb != 0 && Configuration.SystemType != SystemType.ThreeKRam) { - _rb = 0; - Logging.Log.Write(Logging.LogType.Warning, Logging.LogComponent.EmulatorTask, "ESRB<- ({0}) not fully implemented.", - Conversion.ToOctal((_busData & 0xe) >> 1)); - - throw new NotImplementedException("ESRB<-"); - } + // Force bank 0 for machines with only 1K RAM. + _rb = 0; + } break; default: diff --git a/Contralto/CPU/Tasks/Task.cs b/Contralto/CPU/Tasks/Task.cs index 649c663..c84371e 100644 --- a/Contralto/CPU/Tasks/Task.cs +++ b/Contralto/CPU/Tasks/Task.cs @@ -446,12 +446,13 @@ namespace Contralto.CPU // // Switch banks if the last instruction had an SWMODE F1; - // this depends on the value of the NEXT field in this instruction + // this depends on the value of the NEXT field in this instruction. + // (And apparently the modifier applied to NEXT in this instruction -- MADTEST expects this.) // if (swMode) { - UCodeMemory.SwitchMode(instruction.NEXT, _taskType); - Logging.Log.Write(Logging.LogComponent.Microcode, "SWMODE: uPC {0}, next uPC {1}", Conversion.ToOctal(_mpc), Conversion.ToOctal(instruction.NEXT)); + UCodeMemory.SwitchMode((ushort)(instruction.NEXT | nextModifier), _taskType); + Logging.Log.Write(Logging.LogComponent.Microcode, "SWMODE: uPC {0}, next uPC {1}", Conversion.ToOctal(_mpc), Conversion.ToOctal(instruction.NEXT | nextModifier)); } // diff --git a/Contralto/CPU/UCodeMemory.cs b/Contralto/CPU/UCodeMemory.cs index 84f4c23..4db1658 100644 --- a/Contralto/CPU/UCodeMemory.cs +++ b/Contralto/CPU/UCodeMemory.cs @@ -109,11 +109,10 @@ namespace Contralto.CPU case SystemType.TwoKRom: _ramBank = 0; break; - case SystemType.ThreeKRam: - if (_ramBank > 3) + case SystemType.ThreeKRam: + if (_ramBank > 2) { - // TODO: clip or not. - throw new InvalidOperationException(String.Format("Unexpected RAM bank value of {0}.", _ramBank)); + _ramBank = 2; } break; } @@ -152,8 +151,49 @@ namespace Contralto.CPU } break; - case SystemType.ThreeKRam: - throw new NotImplementedException("3K uCode RAM not yet implemented."); + case SystemType.ThreeKRam: + if ((nextAddress & 0x100) == 0) + { + switch(_microcodeBank[(int)task]) + { + case MicrocodeBank.ROM0: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.RAM0 : MicrocodeBank.RAM2; + break; + + case MicrocodeBank.RAM0: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.ROM0 : MicrocodeBank.RAM2; + break; + + case MicrocodeBank.RAM1: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.ROM0 : MicrocodeBank.RAM2; + break; + + case MicrocodeBank.RAM2: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.ROM0 : MicrocodeBank.RAM1; + break; + } + } + else + { + switch (_microcodeBank[(int)task]) + { + case MicrocodeBank.ROM0: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.RAM1 : MicrocodeBank.RAM0; + break; + + case MicrocodeBank.RAM0: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.RAM1 : MicrocodeBank.RAM1; + break; + + case MicrocodeBank.RAM1: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.RAM0 : MicrocodeBank.RAM0; + break; + + case MicrocodeBank.RAM2: + _microcodeBank[(int)task] = (nextAddress & 0x80) == 0 ? MicrocodeBank.RAM0 : MicrocodeBank.RAM0; + break; + } + } break; } diff --git a/Contralto/Disk/Josh.dsk b/Contralto/Disk/Josh.dsk index 6d808bc85d331466a9c2cff75ca8c365e828257a..867d8f8bffae5b266b768732fb5bf4ce9469a0ad 100644 GIT binary patch delta 21639 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 delta 14089 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 delta 3091 zcmZ8j4Rln+6}~h3_U-#wci(P)$RFfo10h68W005v!e&_@C!}G;kYGfmG4&u=NNB56 zL-GQPn}`hwSs6nR0#pQx6%W>Dtw_R2Yp_O)M=hY#4N&!@ttPa`{FIvB*+{j#J>R)A zbHBMW^Ua-|IsVsusg5B;ls zo3GOJRg%m;;xyOKptD<*<-cF%A%x?~?7Z(b3pZKQO@!V{}trY7xk~bXYr{o)QOL z!}0Lv;Z8YmR0S0}`B#m4fwu3hE%E*U6@Ry4) zM`Rq{3BtJ3KGnWF?4>r4++oCnAn5+aW5F|#U!(6vbEgC zHk?-1m_J)=D<)=1hPBXX+DmOy2zx!(I>w9-)NJwWTUFhw-eBdcY@NvfZ3Fp3&kQ{u z*>Sc1KXQLee^UQb=YDZD9%5Pj?baD=FwZKAfb&lEn%DBI1|@>IWuEmO3!ewDb4x5) zeD|1fpRLebz0i7uP!v_nw_Xs)i>!aK^;FyjvVojGGh#qR?$Fnx?eeMxD9lhpUyfnej1Xy)mndJK?@S!SvD@rMHyg6pzmrUMBIp z^;rF}mSfdepk=s!0Q-RzZi`thS|GXfp1VvVq&zOrS!GOmQt7!-LH|UAmyVNT2Y7_? z>k;;?vQ^r~$Ae#?lDN2Jrr&FGuhZGxS6l6L#mgdm)vD1;XvfeV{H+LIx4LP? zDwZ-P1?>P@N7znJ|4syVSfeXm6Cob0`}ZOw zVf%Y%r(nI}b+HaS*uisBgbZvLLz{(!*WM6e7S;<-iI9VSrBj4ltY1Pq7wZSZA}m1r z=u;y2(5~1m!V>gnF%b%}K7h6u>!+U75d&YBCJD4;XV;IV0#7HP1xbmei0tVz?(Wmc$E7Oh)~P@Xt#3zK@lG3 z{zD=>!TrAyp^5v^?g~rv(z7D$4g>Wa7GV$ix!s4hT*1O0TQgwlX%TZ`n%QkrrD4nVwl09tysjae7ogD( zngad=t&tx{;ukdVg63}A?g5bfX_O%6X}^J-qRi~JofdGAA|V?&QV!<`F8_2&E&&{o zjEEabq`*v)&_>IJ6*2RxD>CUQPe_f z#3{58f6#>-&0UY#C**srZWjfpsxcyQ6vc^DZNtGJFBE}J&@YeFvo5E~@UKXyL!s6H zY!@^=wKk{TXA^ypkfno+R`-LEpa7olm#b* zjtJkb-Jo^$YZ!L0nl;T+Gg(588qZQpC5G)RQ{ym~ir7PUsuF8jsHTuc_UnaeI%#8P z(FnNj5!O+x>f|V!^?LCPg9n?Tuos6ylO1V{%DH8-c{7qY}T#nbPSx# zj+d))-3Us^w<*%(L;;QBsQ`ms-c%zEjnXcM5lvJ)yO|!XUch#O61ybide3C=e846U z65J9^r$#hk^$G68IVV+|OY}2KW;z-Q4)w!U2?IH;v^#p<^*T2c2>Rf}fhPfqlK^e` z_8c-4sC0u*lF~J67j;Arz8ATYw_)Oh+XBI!8srvi_v}2dCjBZFC7*6hqjAxb?oEXn z&5(l8lTNA{Ff7pv7JFJ+0y+hQb5qkiK` zwkP!I7{FqorMDVbNv&G6jMk08ssjF!K~3Nfy~3@vzUCioG)|2@Y*-<=Z=><)*gL&n zX1$rc(Rio#@7bqj$7Cun{NSFii{Dq^lio+A&$1Kya7me(`L|kihtsa*+VK5kfnB}M zT&BBhYvX?M!N14x+4#RtfIL#d#+%fS@R{<_PIY~uaB}qID0}yUI*V<-pxP}taGM#r zpeD)+GAW0U%mNSK<4t3um(`yuG7%tCZA>z9Lz}Ot2s`2?gahG3Xb6|N`HFkyZTJiy zYY!bsjzPpC;t=tONr(hQA|eTqj7ULDModAZB6LI=!h=XhOhrsXWSB>ir%UX=Y>s4f diff --git a/Contralto/Disk/diag.dsk b/Contralto/Disk/diag.dsk index 82809666b23fb533c8f486d1a78726285fec126c..1736cd994a751bc1c69c9d31bd88efd8789ad6c2 100644 GIT binary patch delta 359 zcmW;GKS%;$7zXh7JwGo!?@li*wXCl43#l+0f&zsi8zMCE578FUSlHlP1by7rDnUp? zTZLPNo&8|Spbl_%Knef` zAO)ZbyPNxk?d(pen9Ntsj3c{ta+s`EjhaL|{Dt*ifW^@3xGYB8(q*aFaU}|}v7*|{ z2jHiXf3mZtE-*Bmenurj#6!HYpV5|{&?C4{a9waia8q!<-~quc!G|As@cdotxB-^w z&^N1}zFF(_Tc+lnbT>#sWQ2^8Fo}>T86)E)MkdH4nIblsCNpG~#0i(_?p*EV53+Y_ AUjP6A delta 343 zcmXBOze@sP9LMqR_wMo1yYt7TcKxtA%O{Qsqai3zD5y3=N@?v6h;pzwf*x*bl^`Uj ztwj)drbvQ_)(8S2r*h08Tq3Bi#D^Dr#&_+binYG9qPqz2ufD9D7SX8R?%q7JZnxc) z`?DBRFf32zG52lW{XRbA%=NX6LSaW5ixlw5Dy5dSTDfG} qmX~QqNsPqF5V6TH86l%&j3mf7nIMzIAxSbtrb&u$nQ70IU;Y3W*m89M diff --git a/Contralto/Disk/st76boot.dsk b/Contralto/Disk/st76boot.dsk index 390aa003ac77c6b2e30347bb2b60f96d3e3bd8a5..a87c2f59bb752ebc230c1a5d2f33dcb775424c4e 100644 GIT binary patch delta 382 zcmWm6JxfAS90u@v&OPVetJl}`R%*W9>RRAXU^ax*(9#fvGz1OpB9st9LoXEEwW*U! zItCg@5~ne@+Ux^3ic_DV9)}7A2nk z+WN&iH*h!ZIuqHMkU^4LSS@+ZX~p0=W?g>!DUYj6QRR!?gR%i5yiQ$d5Penw0Y+JS{W!Ry)g0g%&!P=2OQQEPtjZ5Dks47T? z%c>(jPsovc%(90u@k>YN4&wnN0&d0Rpn(nscx1)&rgJ=nf68qXykLS4{1AX3gdhwv z5P>LIFbi`q4>5>C0u~?%)6O(xAPYI!DA-P!oQYP|J{Dh9J4#aWw`#YD+pXEK2urXm JyETXH{sX~OZ!!P? delta 379 zcmWm8OG^S#6bJBouXE?&_^Pyg=3}Y}L}&t=gouJ#31PU3`Ud49A%qq^D43Qls=-aQ za-$1L;O(up- zPw|?y^6ubP-w>6ARF_y;aR*oO9xGbz$5zB}?Toaq?+{8}wQsp!`g85=$fbJjy9-j% z%0K@4%5MLNTH+}y-H&KMmVpIQ`I@hpnwXRsOsKyj+ZbmIgNrBbnt;60uY1{ zOu;nFKo}x03v&>K7{nm~Nl3vwq#*-Y$caY5FgIz%eK|G`MD)aXpp$}nrkck3tZjW6R!4CaUm&CeYaIkpmrDi*1;K89 zfh>g}cghD4H>W}gbkSLdPA;Cx;di!kI-f7BGh{2eMnproa8nU`EE`7q!AF9qLcUvN zph&l>K7TR8SIq<@rD|$XMYk~eC*QWTT7u>LL0yBC9MseCT9Jq$ME9z<)AE|94e!Q2 zF1H$ow&xiwdA^_BW2qh@P0xZIk?8eL2?-`RW(vtHG%Q=la_4SER6TtzuK|^G5hwfwj6hL#Q7K)fslcro7p)y z%+b%))m<+rG>CWl!{>tin;V!i7~3D@Z~!sq_6Ip!E|VE~TUEJRRe4%ffegM@RsL30 zfmT()R#l;`s=}GK882_|zb!1v#Q9O4fx!@H?%wH)X3W~{H|`1pu?P^00S*@PK4gm8qeZT+! diff --git a/Contralto/Disk/xmsmall.dsk b/Contralto/Disk/xmsmall.dsk index 2805a9a7c4e91206ffe350e226ade2f4acbde9aa..6333a3980977be5c9972a2bbf76088cf331995b5 100644 GIT binary patch delta 247 zcmXxbJx;=49KhlC{aZe&fguvuZXs{ z>q5MIU&xQ%CZ)K#9;cI5!)NvpDiAsG^2COkCm$78+=xg*H04Mi)2e!A2jq bxWfPrh8V$xhcWK)fC;9U!OtWA@ijRC;H^rD delta 250 zcmXxTJx;=49KhlC{ZqjTMXG`*D1JbJ1QUh^*<5=IPTNIV80qSH{_eSf=jz0BWw0)#tFQU~ z$Lm%^tHs++T4KE<_Bi*W7qd*7+6=->m`lRU`0SZwrPTkxcMh0mfrm7C#3D> 8); } - // - // Grab the source and destination host addresses from the packet we're sending - // and build 10mbit versions. - // - byte destinationHost = packetBytes[3]; - byte sourceHost = packetBytes[2]; - - Log.Write(LogComponent.HostNetworkInterface, "Sending packet; source {0} destination {1}, length {2} words.", - Conversion.ToOctal(sourceHost), - Conversion.ToOctal(destinationHost), + Log.Write(LogType.Verbose, LogComponent.HostNetworkInterface, "Sending packet via UDP; source {0} destination {1}, length {2} words.", + Conversion.ToOctal(packetBytes[2]), + Conversion.ToOctal(packetBytes[3]), length); _udpClient.Send(packetBytes, packetBytes.Length, _broadcastEndpoint); - - Log.Write(LogComponent.HostNetworkInterface, "Encapsulated 3mbit packet sent via UDP."); } ///

@@ -167,8 +158,7 @@ namespace Contralto.IO // properly.) Log.Write(LogComponent.HostNetworkInterface, "UDP Receiver thread started."); - IPEndPoint groupEndPoint = new IPEndPoint(IPAddress.Any, _udpPort); - //return; + IPEndPoint groupEndPoint = new IPEndPoint(IPAddress.Any, _udpPort); while (true) {