This is a community wiki non-answer for transcribing all that stuff.
Transcription of the program
Language: Intel 80x86 Assembly Language
%define REG(r) [REGS + r * 4]
%define PTR(p) [MEM + p]
U5_LE:
mov ecx, 0x200
mov edi, MEM
mov esi, DISK ; DISK = page 2 text?
rep movsb ; copy 1st 512 bytes from DISK to MEM
SPIN:
mov edx, REG(63) ; fetch instruction ( REG(63) = program counter )
mov edx, PTR(edx) ; edx = 32-bit instruction
add WORD REG(63), 4
mov WORD REG(0), 0
mov ebp, edx
shr ebp, 21
and ebp, 77o ; ebp = bits 26-21 of inst'n = destination register #
mov esi, edx
shr esi, 15
and esi, 77o ; esi = bits 20-15 of instruction
mov edi, edx
shr edi, 9
and edi, 77o ; edi = bits 14-9 of instruction
mov eax, edx
shr eax, 27 ; eax = bits 31-27 of instruction = op code
mov eax, [OP_TABLE + eax * 4]
jmp eax ; execute instruction
OP_TABLE:
dd OP_LOAD_B, OP_LOAD_H, OP_LOAD_W, 0, OP_STORE_B, OP_STORE_H, OP_STORE_W, \
0, OP_ADD, OP_MUL, OP_DIV, OP_NOR, 0, 0, 0, 0, OP_MOVI, 0, OP_CMOV, 0, 0, \
0, 0, 0, OP_IN, OP_OUT, OP_READ, OP_WRITE, 0, 0, 0, OP_HALT
OP_LOAD_W:
mov eax, REG(esi)
add eax, REG(edi)
mov eax, PTR(eax)
mov REG(ebp), eax
jmp SPIN
OP_MUL:
mov eax, REG(esi)
mul DWORD REG(edi)
mov REG(ebp), eax
jmp SPIN
OP_MOVI: ; -- MOVe Immediate (constant) value to register # ebp
mov eax, edx ; (edx = 32-bit instruction)
mov ecx, edx
shr eax, 5
and eax, 0xffff ; eax = bits 20-5 of instruction
and ecx, 37o ; ecs = bits 4-0 of instruction
shl eax, cl ; eax = (bits 20-5) * 2^(bits 4-0)
mov REG(ebp), eax ; (ebp = bits 26-21 of instruction)
jmp SPIN
OP_CMOV: ; -- Conditional MOVe
mov eax, REG(edi) ; (edi = bits 14-9 of instruction)
test eax, eax ; IF register # edi is not 0
jz .F
mov eax, REG(esi) ; (esi = bits 20-15 of instruction)
mov REG(ebp), eax ; THEN move value from register # esi to register # ebp
.F:
jmp SPIN
OP_OUT:
push DWORD REG(ebp)
call putchar
add esp, 4
jmp SPIN
OP_READ:
mov ecx, 0x200
mov esi, REG(esi) ; (esi = bits 20-15 of instruction)
shl esi, 9
lea esi, [DISK + esi]
mov edi, REG(ebp)
lea edi, PTR(edi)
rep movsb ; read 512-byte DISK block whose number is in register # esi
jmp SPIN
This program seems to be an assembly language emulator, but it looks like to be incomplete, since many entries of the table are not valid jump targets. I guess that completing the program is part of the challenge.
Transcription of the text
To make it easier to coordinate efforts and doublecheck the transcription, please transcribe the text in blocks, adding both the image blocks and the textual transcription below. Preserve the new lines and the hyphens, since we don't know if they are important or not. Use <pre></pre>
blocks instead of standard four spaces identation for two reasons:
Save some space (there is a 30K limit in answers, I am afraid to hit it).
Use <kbd></kbd>
for underscore text.
Also, be careful about characters that are too easy to confuse:
l
and 1
. You can distinguish them because 1
has a tail, and l
don't.
o
, O
and 0
. 0
is rectangular, O
is diamond-shaped. o
is smaller and round.
q
and g
. g
has a a small turn in the descent line. Be careful specially to a q
that is directly above another letter that has a transversal ascent line that could be confused with the g
descent line.
6
and b
. The 6
is very square. b
is rounded.
8
and B
. The B
is straight in its left, the 8
isn't.
Also, it is important that each part to be reviewed by at least one person other than the transcriber to ensure that there are no typos in the transcription. Two or more reviewers are better.
First part
[Transcribed by Victor Stafusa, reviewed by humn, second review welcome]
h+ABgKIA4IfCjYkhh+ACo4micpng-
CiCHAAAgzyEHIIcAACDP4A0ghwAA-
IM/hBICHAAAgz+AMIIcA-
ACDPJQAghwAAIM+gDCCHAAAg-
z+EGIIcAACDPIgMghwAAIM8gD-
SCHAAAgzyAMIIcAACDP4QYghwAA
IM/hBiCHAAAgz6AMIIcAACD-
PYA4ghwAAIM9gDiCHAAAgzyAEII-
cAACDPoQAghwAAIM8AAAD4goAA-
ZoKgCmKCwAvhIAsAANAAAABH6oAA-
hyACIs8gAACHIA0gzyAAAIcgDmD-
PIAAAhyANYM8gAACHIAAl-
zyAAAIcgByHPIAAAhyAMoM8gAA-
CHIAwgzyAAAIcgAyLPIAAAhyAAJc-
8gAACHIAygzyAAAIcgByHP-
IAAAhyAHIc8gAACHIA3gzyAAAIcg-
ByHPIAAAhyAEIM8gAACHIA-
ChzyAAAPgAAABHv4AAhyAAIl88-
8gBHvvIAhyAAIEe+8gCHwAA0g-
sAAYYKAACCCoAApXyooAELrcgC-
HIAAgQuvyAIcgAGJHP/IAl/yu-
AIcgDaJH/IAA0qoAAIcgACBCinIA-
hyAAKUKq8gCHIAuiR/yAAFqA-
AABSgCgAhyADpEc8gACX/KgA-
hyAUYkf8gACHIAggzyAAAIcgAm-
LPIAAAhyAKoM8gAACHIAAlzyAAA-
IcgDaDPIAAAhyAMIM8gAACH-
IANizyAAAIcgBmHPIAAAhy-
AOoM8gAACHIAbhzyAAAIcgDGD-
PIAAAhyADos8gAACHIA0gzyAAAIcg-
DeDPIAAAhyAG4c8gAA-
CHIAAlzyAAAIcgAKPPIAAAhyACIs-
8gAACHIAkgzyAAAIcgBWHPIAAAhy-
AF-
Second part
TO DO Please transcribe it.
Third part
TO DO Please transcribe it.
...
Add a lot of parts here...
Last part
[Transcribed by Silenus, reviewed by Victor Stafusa, second review welcome]
NWdNu+qgtKoyqoHspnuURTOjUVw-
Gy75nE7fcM0doZWLOI-
u50d+mbS46Z1+AqfXaA6/-
rT9AqdvNt4-
iA0yYRQwidXoRtqSzankRtG71Nn-
6vikbXTKSvk8ZrbdjYCxVoCDVpx-
pXRxT2hGC8OPhLk9537gU4-
rUoirNDzkuytvIQF+sH-
belshtabXTuWap0g2V+ZhA2w-
g1vZi78Fld/uP9VsDPNzgkD-
3jtXPPe0Xi-
l1AzDJN/7VWSKI9AfUXKrEx2Rl-
R3IR+18B7wsoRwCn9qbExo3meD-
vCER2NVcM81GNXcZV5JORUnE-
rVEtQJqwU4Rr1doiibD/JWu8n-
zLiYMG25C0QDQCGAx1FuhXGmqEA-
3Dy6fbgr6D+aUc2bUCviBv69-
UiHl+l7N7kkkdWKl5vwok8suTh/-
zgYXJNvQuFf19WtE6VIdabzOBc-
c1PwR3u0k/0eoglxqYqcD5L-
INh2iTzrMbW0SMGm5lhYoPXelf-
wsFbLQFBmR8Oz8Fwe0h/UbAw1w-
9JddVlDmHr0NDd+fbPL/N6Qe-
DPMxp3W2x-
FnKOPagBnmpxjOyeECNor/-
UhfbC5HCS0ojdS+ShclM/-
Y9rPb0bUC7zj7wdSG3BusbNa-
chJorOjDP9RBnGmBmPr9kxFKQqg-
dQfSvlGu+Z3H5HO/5OEKbDJps-
lPQzB5cWbFacYkKqNrvyCZQi-
LsM+omRCI3gM
Also,
Certain of the characters from page 2 are underlined (see here). The underlined characters are (at least) MzJYWNrZXI1NT6amt6a5vbm1vqo
. Perhaps these are the only characters that are important and the rest of the string can be ignored.