Open atsampson opened 6 years ago
I don't have it handy, but I can get it and will post something here when I do. I've assigned this ticket to myself.
The EJS; O > source is a midas program that just tells the user to use the "O" command in the GAME program. It does not include the source for Othello. In fact, I cannot find this source anywhere.
Binary installed as part of #907. But need to locate source and build from source.
TS O is a binary produced by Alan Snyder's C compiler (like STINKR, SHELL etc.).
In that case, maybe the source was on DM because that's where Alan Snyder did his work.
There's an XX:\
Maybe AS; OGAME 1.
No, not OGAME. That's just a record of one game.
I have studied the IPAK files, and now I'm quite sure the source code may be in an ITS or TOPS-20 "-IPAK-" file.
The file format seems designed to keep files private. The program checks the job UNAME and it must match a word in the file. There may also be encryption. To make matters worse, the format seems to exist in many incompatible versions. We have a 1977 TS IPAK, but there's also a 1978 TS OI and neither seem to work with some 1980 -IPAK- files.
Listing from \
File name Words Timestamp
O H 483 1979-12-13 20:23:36
O MAKTAP 14 1977-11-25 18:45:21
O NOTES 241 1977-08-01 10:40:02
O OLD 865 1977-11-08 08:50:55
O STINKR 30 1978-08-26 14:14:14
O-ITS C 801 1979-02-05 10:06:30
O-T20 C 780 1979-12-13 20:36:36
O-T20 STK 1692 1979-12-13 20:37:09
O-UNIX C 256 1979-02-05 10:06:55
O1 C 2507 1979-02-05 10:07:29
O1 STK 4141 1979-12-13 20:25:28
O2 C 2848 1977-11-23 17:40:06
O2 STK 3222 1979-12-13 20:26:25
O20 STINKR 21 1979-12-13 20:00:52
O3 C 3535 1978-08-22 08:42:56
O3 STK 3091 1979-12-13 20:27:29
O4 C 443 1977-11-23 17:38:43
O4 STK 457 1979-12-13 20:27:53
O5 C 776 1977-11-26 09:21:19
O5 STK 1000 1979-12-13 20:28:15
O6 C 374 1978-02-12 15:44:27
O6 STK 663 1979-12-13 20:28:35
O7 C 5 1977-12-02 17:01:33
O7 STK 681 1979-12-13 20:28:56
O8 C 4895 1977-12-03 08:22:43
O8 STK 3931 1979-12-13 20:29:37
O9 C 258 1978-08-12 13:02:03
O9 STK 369 1979-12-13 20:30:00
O9N C 83 1978-08-12 12:19:15
O9N STK 115 1979-12-13 20:30:15
OB H 298 1977-12-02 18:48:12
OB1 C 2372 1977-12-02 19:01:03
OB2 C 397 1977-12-02 18:30:55
OB3 C 8 1977-12-02 16:26:29
OBK CODE 490 1978-08-26 14:07:12
OBKTST C 639 1977-12-02 19:01:14
OBKTST STINKR 21 1978-07-20 07:08:07
OD CODE 560 1978-09-04 07:54:29
ODITS C 157 1978-09-03 10:42:28
ODT20 C 364 1979-12-13 19:52:00
ODT20 STK 1513 1979-12-13 20:33:05
ODUNIX C 200 1978-09-03 10:42:40
OISMOV CMID 152 1979-02-05 10:02:24
OISMOV MIDAS 157 1977-12-03 08:48:06
OISMOV STK 112 1979-02-05 10:02:54
OM STINKR 55 1978-08-12 12:41:22
OMEM CLU 248 1978-08-12 10:56:22
OPRINT C 607 1977-05-20 18:59:01
OPRINT STINKR 17 1978-07-20 07:03:47
OXGP C 2173 1977-12-02 08:33:04
TEST BOOK 33 1977-11-20 13:27:48
That's a lot of source code for this game! Are you going to try to compile/link it for ITS?
I think there are several programs. O, OB, and OD, then maybe OM too.
I'm not too keen on trying the files yet, since we are not free to share them.
This IPAK file has now been released to https://github.com/MITDDC/clu-1976-1989
It's the file clu/9005196/clusrc/}o.-ipak-
Have we successfully reconstructed the (or an) Othello executable from source yet?
No we haven't, that's why this issue is still open.
I put the contents of the ipak file on a branch called lars/o.
I see @eswenson1 is still assigned. Will you work on this? @atsampson is also taking a look.
If @atsampson wants to work on this feel free to reassign to him.
I successfully compiled o1,o2,o3,o4,o5,o6,o7,o8, and stdio, but when I link, I get this:
*:stinkr
=x c/clib
=l stdio.stk
=l o1.stk
=l o2.stk
=l o3.stk
=l o4.stk
=l o5.stk
=l o6.stk
=l o7.stk
=l o8.stk
=o ts.o
=
*** ZFPRIN multiply defined ***
*** ZFPRIN multiply defined ***
*** ZLOG multiply defined ***
*** ZLOG multiply defined ***
--- UNDEFINED SYMBOLS ---
Program O1
ZISMOV
--- SEGMENTS ---
0 0100 - 032172 (032073=13371)
1 032173 - 037775 (05603=2947)
2 040000 - 055530 (015531=7001)
3 055531 - 061512 (03762=2034)
:KILL
*
Haven't yet found where the duplicates are coming from. The undefined symbol will come from ISMOV1.MIDAS.
When I add in ISMOV1, I get:
*:stinkr
=x c/clib
=l stdio.stk
=l ismov1.stk
=l o1.stk
=l o2.stk
=l o3.stk
=l o4.stk
=l o5.stk
=l o6.stk
=l o7.stk
=l o8.stk
=o ts o
=
*** ZFPRIN multiply defined ***
*** ZFPRIN multiply defined ***
*** ZLOG multiply defined ***
*** ZLOG multiply defined ***
--- SEGMENTS ---
0 0100 - 032172 (032073=13371)
1 032173 - 037775 (05603=2947)
2 040000 - 055556 (015557=7023)
3 055531 - 061514 (03764=2036)
Segments overlap.
Initialization routine lost.
:KILL
*
And when I run the "TS O" from above, I get:
*:aso;o
ILOPR; 40005>>.CALL 55535
That makes sense, of course, given the messages:
Segments overlap.
Initialization routine lost.
I don't know enough about STINKR to know what to do here. @atsampson ?
fprintf
(ZFPRIN) is defined in clib (C10STD). Maybe C10STD and STDIO overlap in functionality.
I don't know about log
though. It's not in clib.
Segment 2 ends at 055556, and segment 3 begins at 055531 so there's the overlap.
C; CLIB STINKR has s 100,n,p,n
which says how to place the segments. n
means "next locatation" and p
means "next page". Segment 3 is n
, next. It looks like STINKR isn't doing the right thing here.
Maybe try s 100,n,p,055557
? This places segment 3 right after segment 2.
Ok. Will try that. I can also remove the fprintf from stdio.c to get rid of that dupe. Maybe clib didn't have it when O was created. But I can't find the log dupe either.
The dupes might not really be an issue if the loader uses the first or second and ignores the other. So the segment overlap issue is more important. I'll let you know what happens.
Ok, here is some progress. With this:
*:stinkr
=x c/clib
=s 100,n,p,055557
=l o1.stk
=l o2.stk
=l o3.stk
=l o4.stk
=l o5.stk
=l o6.stk
=l o7.stk
=l o8.stk
=l stdio.stk
=l ismov1.stk
=o ts.o
=
I get the output:
*** ZLOG multiply defined ***
*** ZLOG multiply defined ***
*** ZFPRIN multiply defined ***
*** ZFPRIN multiply defined ***
--- SEGMENTS ---
0 0100 - 032172 (032073=13371)
1 032173 - 037775 (05603=2947)
2 040000 - 055556 (015557=7023)
3 055557 - 061542 (03764=2036)
:KILL
*
But, when I run it, I get this:
··································································································································!
·········································* to move:
Running the TS O from GAMES, I get:
Othello
Have you played this program before (Y or N)?
So something isn't right yet.
I don't see the string "Have" or "played" in any of the .c or .h files.
If I knew how to play, or enter moves, I'd try. I guess I have to read up on Othello.
Too bad we don't have a debugger for C. Debugging with DDT can be really painful, I have learned.
Maybe this is an early/unpolished version without the friendly splash screen.
Here's some help:
char *helpmsg
"l - list legal moves\n\
a - analyze position (A=best)\n\
b - print board\n\
s - print score\n\
r - resign game (score is recorded)\n\
x - show board after move (toggle)\n\
h - set handicap (-4 .. 4)\n\
m - manual mode (user plays both sides)\n\
q - quit this game (score not recorded)\n\
rb - read board from file\n\
wb - write board to file\n";
There are lots of hints in o1.c.
{if (stcmp (username, "AS")) wizard=TRUE;
I'm looking at the PROG -IPAK-. It has OHACK, which says
cprint ("Play Othello and see if you can beat the system!\n");
if (!ask ("Have you played the Othello program before", 0))
{if (!ask ("Do you know how to play Othello", 0))
type_file ("DSK:.INFO.;O INFO");
else cprint ("Type ? for help.\n\
Moves are entered by typing the XY coordinates of the\n\
legal move followed by carriage return (no commas please).\n\
Type R<CR> to resign.\n");
cprint ("--MORE--");
utyi ();
}
And then runs SYS2; TS O.
Ahh. Nice find. So that is what the TS O in GAME uses.
The file AS; ARC -LOAD- has stinker files for many programs, including O. It says:
x c/clib
l ar3:c;blt
l random
l ismov1
l o1
l o2
l o3
l o4
l o5
l o6
l o7
l o8
l stdio
o ts o
In the list of games in JOBS.
MC:SYS2;TS O MC:.INFO.;O INFO MC:.INFO.;O ORDER
Compiled from MC:EJS;O 9. @eswenson1, do you still have that file?