process my_process ( clkin uint#1 pin<44> clk, rstin uint#1 pin<33> rst, in uint#1 pin<36> text, in uint#8 pin<22-23,27-32> p_in, in uint#1 pin<20> sync, out uint#4 pin<5-8> dout, in uint#1 pin<3> sw1, in uint#1 pin<2> sw2, in uint#1 pin<42> sw3, in uint#1 pin<41> sw4, in uint#1 pin<40> sw5, in uint#1 pin<39> sw6, in uint#1 pin<38> sw7, in uint#1 pin<37> gr, in uint#1 pin<34> segb, in uint#1 pin<21> hsync) { uint#5 vshift = 0; uint#4 cshift = 0, lat; uint#3 lowcnt = 0; uint#3 pcnt = 0; uint#8 platch = 0; uint#1 ser = 1; uint#1 pd = 0; uint#1 valid = 0; while (1) { uint#1 sw1s, sw2s, sw3s, sw4s, sw5s, sw6s, sw7s; uint#1 syncs, grs, segbs, texts, hsyncs; uint#1 dhires, realtext; uint#4 v; grs = gr; segbs = segb; texts = text; hsyncs = hsync; syncs = sync; sw1s = sw1; sw2s = sw2; sw3s = sw3; sw4s = sw4; sw5s = sw5; sw6s = sw6; sw7s = sw7; dhires = (grs & texts & ~segbs); realtext = (~grs & texts); if (~hsyncs) { pcnt = 0; cshift=0b0011; lowcnt = 0; valid = 0; } else { if (~valid && lowcnt == 6) valid = 1; pcnt++; if (cshift==0b1100) { cshift = 0b1001; } else if (cshift==0b1001) { cshift = 0b0011; } else if (cshift==0b0011) { cshift = 0b0110; } else { cshift = 0b1100; } if (++lowcnt==7) lowcnt = 0; } if (~valid) v = 0; else if (realtext) { uint#1 p, pda, pdb; if (sw3s&sw4s&sw5s&sw6s) { pda = pd; pdb = 0; } else { pda = pdb = pd; } p = vshift#(3); v = ((p|pda)&sw3s)@((p|pdb)&sw4s)@((p|pda)&sw5s)@((p|pdb)&sw6s); pd = (sw1s?p:0); } else { uint#1 x=0; if (sw2s) { v = ((vshift#(3)&sw3s)@(vshift#(3)&sw4s)@(vshift#(3)&sw5s)@(vshift#(3)&sw6s)); } else { if (grs && ~segbs) { if (~dhires) { x = (vshift#(2)|vshift#(3)|(vshift#(1)&vshift#(4))); v = lat & (x@x@x@x); } else { v = lat; } } else { v = lat; } } } dout = v; if (pcnt==2) platch = p_in; ser = platch#(7); platch = platch#(6..0)@(uint#1)0; vshift = vshift#(3..0)@~ser; if (realtext | (grs & ~segbs) | dhires | (valid && (lowcnt==4))) { if (cshift==0b0110) lat = vshift#(3..0); else if (cshift==0b1100) lat = vshift#(0)@vshift#(3..1); else if (cshift==0b1001) lat = vshift#(1..0)@vshift#(3..2); else if (cshift==0b0011) lat = vshift#(2..0)@vshift#(3); } } }