With french commentaries, how lucky you are.
rngvalues={
{1;8;10;12;13;14;15;16};
{17;18;19;20;21;21;22;23};
{24;24;25;25;26;27;28;29};
{30;30;31;32;33;34;35;35};
{36;37;38;39;40;40;41;42};
{43;44;45;45;46;47;48;49};
{50;50;51;52;53;54;55;55};
{56;57;58;59;60;60;61;62};
{63;64;65;65;66;67;68;69};
{70;70;71;72;73;74;75;75};
{76;77;77;78;79;80;80;81};
{82;83;84;85;86;87;88;89};
{91;93;95;98;255;255;255;255};
{255;255;255;255;255;255;255;255};
{255;255;255;255;255;255;255;255};
{255;255;255;255;255;255;255;255}
}
while true do
State1 = savestate.create();
rng=memory.readword(0x000CC270)
ref=rng
predict={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
for i=rng-3,math.min(624,rng+16) do
byte1=memory.readbytesigned(0x000E9848+i*0x00000004)
byte2=memory.readbytesigned(0x000E9848+i*0x00000004+0x00000001)
byte3=memory.readbytesigned(0x000E9848+i*0x00000004+0x00000002)
byte4=memory.readbytesigned(0x000E9848+i*0x00000004+0x00000003)
line=1
col=1
pol=0
-------------------------------------------------------------byte1 col
if byte1 % 64 > 31 then
col=col+4
end
if byte1 % 16 > 7 then
pol=pol+1
end
-------------------------------------------------------------byte1 line
D=1
--if byte2 % 128 > 63 then
-- D=-D
--end
--if byte3 % 8 > 3 then
-- D=-D
--end
--if byte4 % 64 > 31 then
-- D=-D
--end
--if byte4 % 4 > 1 then
-- D=-D
--end
if byte1 % 256 > 127 then
line=line+2*D
end
-------------------------------------------------------------byte2 col
C=2*math.floor((byte2 % 32)/8)
D=1
col=col+D*C --peut aussi aller en diminuant // corrig�
if byte2 % 8 > 3 then
pol=pol+1
end
if byte2 % 128 > 63 then
pol=pol+1
end
-------------------------------------------------------------byte2 line
line=((line-1) % 16) + 1
F=line
G=2*math.floor(byte2/64)
--if byte4 % 4 > 1 then
-- G=-G
--end
--if byte4 % 64 > 31 then
-- G=-G
--end
--if byte3 % 8 > 3 then
-- G=-G
--end
if byte1 % 256 > 127 then
G=-G
end
line=line+G --peut aller en diminuant // corrig�
if (line-1) % 16 > 7 then
if (F-1) % 16 < 8 then
line=line+8
end
else if (F-1) % 16 > 7 then
line=line+8
end
end
-------------------------------------------------------------byte3
if byte3 % 2 == 1 then
line=line+8
col=col+4
end
if byte3 % 8 > 3 then
F=2
-- if byte4 % 4 > 1 then
-- F=-1
-- end
-- if byte4 % 64 > 31 then
-- F=-1
-- end
if byte2 % 128 > 63 then
F=-F
end
if byte1 % 256 > 127 then
F=-F
end
line=line+F --peut aussi aller en augmentant // corrig�
end
if byte3 % 64 > 31 then
if line % 2 == 1 then
line=line+1
else line=line-1
end
pol=pol+1
end
A=2*math.floor((byte3 % 32)/8)
if byte2 % 16 > 7 then
A=-A
end
if byte3 % 128 > 63 then
A=-A
end
col=col+A
Q=2*math.floor(byte3/64)
if byte2 % 16 > 7 then
Q=-Q
end
col=col+Q
-------------------------------------------------------------byte4 col
M=2*math.floor(byte4/64)
A=2*math.floor(byte4/4)
if byte4 % 128 > 63 then
A=-A
end
if byte2 % 16 > 7 then
A=-A
M=-M
end
if byte3 % 16 > 7 then
A=-A
M=-M
end
if byte3 % 128 > 63 then
A=-A
M=-M
end
col=col+A+M -- corrig� ?
if byte4 % 4 > 1 then
pol=pol+1
end
-------------------------------------------------------------byte4 line
if byte4 % 2 == 1 then
line=line+8
end
J=2*math.floor(byte4/32)
if byte3 % 8 > 3 then
J=-J
end
if byte2 % 128 > 63 then
J=-J
end
if byte1 % 256 > 127 then
J=-J
end
if byte4 % 32 > 15 then
if line % 2 == 1 then
line=line+1
else line=line-1
end
end
line=line+J
K=2*math.floor(byte4/2)
if byte3 % 8 > 3 then
K=-K
end
if byte2 % 128 > 63 then
K=-K
end
if byte1 % 256 > 127 then
K=-K
end
if byte4 % 64 > 31 then
K=-K
end
line=line+K
L=1
if byte4 % 64 > 31 then
L=-L
end
if byte4 % 128 > 63 then
L=-L
end
if byte3 % 8 > 3 then
L=-L
end
if byte2 % 256 > 127 then
L=-L
end
if byte2 % 128 > 63 then
L=-L
end
if byte1 % 256 > 127 then
L=-L
end
if (L==-1) and byte4 % 8 > 3 then
line=line+8
end
N=1
if byte1 % 256 > 127 then
N=-N
end
if byte2 % 256 > 127 then
N=-N
end
if byte2 % 128 > 63 then
N=-N
end
if byte3 % 8 > 3 then
N=-N
end
if N==-1 and (byte4 % 128 > 63) then
line=line+8
end
------------------------------------------------------------- fin
pol=pol % 2
if pol == 1 then
col=col+1
end
line=((line-1) % 16)+1
col=((col-1) % 8)+1
predict[i-rng+4]=rngvalues[line][col]
end
while rng==ref do
gui.text(300,21,predict[1])
gui.text(300,31,predict[2])
gui.text(300,41,predict[3])
gui.text(300,51,predict[4])
gui.text(300,61,predict[5])
gui.text(300,71,predict[6])
gui.text(300,81,predict[7])
gui.text(300,91,predict[8])
gui.text(300,101,predict[9])
gui.text(300,111,predict[10])
gui.text(300,121,predict[11])
gui.text(300,131,predict[12])
gui.text(300,141,predict[13])
gui.text(300,151,predict[14])
gui.text(300,161,predict[15])
gui.text(300,171,predict[16])
gui.text(300,181,predict[17])
gui.text(300,191,predict[18])
gui.text(300,201,predict[19])
gui.text(300,211,predict[20])
gui.text(290,51,"->")
gui.text(280,21,rng)
gui.text(280,31,memory.readbyte(0x000E984C))
emu.frameadvance();
rng=memory.readword(0x000CC270)
end
end