Ok, TI-30 is alive here, but with bugs due to incomplete emulation I assume (microinstructions like SSS and CME). I'm also not sure if page decoding is correct yet. Row decoding should be right though. It's the same as on TMS1000.

That big lookuptable is basically a translation of the 1-of-32 selector, right?

10000 16 -> roworder[16+0]=0, roworder[16+32]=1
00000 0 -> roworder[0+32]=2, roworder[0+0]=3
00001 1 -> roworder[1+0]=4, roworder[1+32]=5
10001 17 -> roworder[17+32]=6, etc.
10010 18
00010 2
00011 3
10011 19
...

On TMS0980, the 1-of-64 selector is sequential (0,1,2,3,4,...), so decoding it is not as complex.

Code
	int lut1[2]={0,3};
	int lut2[2]={1,2};

	for (page=0;page<16;page++)
	{
		for (pc=0;pc<128;pc++)
		{
			for (bit=8;bit>=0;bit--)
			{
				int myrow=pc;
				if (myrow<64) myrow=(myrow&0x3e)*2 +lut1[myrow&1];
				else myrow=(myrow&0x3e)*2 +lut2[myrow&1];
				
				int mypage=page; // TODO/verify

				mypos=myrow*144+bit*16+mypage;
				mybit=in_raw[mypos/8]>>(mypos&7)&1;

				outpos=page*128+pc;
				out_dump[outpos]=out_dump[outpos]*2+mybit;
			}
		}
	}