See also the companion page http://www.andrews.edu/~calkins/sigma/sigma7.htm
about the fully functional DOS-GCC based Sigma emulator.
This emulator, which only does limited CPU functions but has a nice
user interface with instruction decoding, was created in November and
December 2002 by Madhu Siddalingaiah with assistance from Keith G. Calkins.
A minimal configuration consists of the files sigma6.jar, sigma6.cfg,
and sighcp. Under DOS/UNIX: java -jar sigma6.jar sigma6.cfg
should bring up the front panel like object. Press reset, load,
and run and it should run through the Sigma Hard Core Diagnostic
deck and give you an "End of Deck!" message.
Below are exerpts from e-mails produced during debugging which indicate
the various known failures.
MEDIC
The RD,11 .10 at .268 does not zero out R11.
In fact, R11 remains a link address so it goes looking for an error.
(R0 is clobbered, in retrospect!)
} else if (addr == 0x0010) {
if (regR != 0) { // read/reset mem fault
currentRegisters[regR] = 0;
Note change in above line---was only changing R0!!!
That was all it needed:
SIGMA 5/7 MEMORY DIAGNOSTIC (MEDIC) 960-0401-G02
MEMORY SIZE: 0128K
SUCCESS TEST 01
SUCCESS TEST 02
SUCCESS TEST 03
SUCCESS TEST 04
SUCCESS TEST 05
SUCCESS TEST 06
SUCCESS TEST 07
SUCCESS TEST 08
SUCCESS TEST 09
SUCCESS TEST 10
SUCCESS TEST 11
SUCCESS TEST 12
SUCCESS TEST 13
SUCCESS TEST 14
RTC I realized the data chaining was overkill and changed the
first write to write all 47 bytes by changing
.32d from .8000000b to .2f. I thus obtained the following output:
SIGMA 5/7 REAL-TIME CLOCK TEST
704017-F00 MANUAL 901136 F
CP4 INTERRUPT MAP FEATURE INSTALLED.
IND. ADDRS MAPPING OPERATIONAL IN CPI4.
CPI4 MAP REPETITIVE TEST COMPLETE, SUCCESS.
LEVEL WD -TRIGGER- CLK/=0 FREQUENCY
CPI1 YES NO 0 * ERROR
CPI2 YES NO 0 * ERROR
CPI3 YES NO 189 * ERROR
CPI4 YES NO 189 * ERROR
CEZ1 YES NO * ERROR
CEZ2 YES NO * ERROR
CEZ3 YES YES
CEZ4 YES YES
500 CPS IS SLOW. CALCULATED BY AN INSTRUCTION LOOP
The error indication is because the WD vs Clock are different
(and these come in pairs so errors can appear because the pair
is different). With the error? I saw in 7INTRAP I won't pursue
this further now.
I looked over the code for LPSD and XPSD. I noted a lack of CALL support
in XPSD---see page 77, column 1, #2 where the R field get or'ed in, etc.
Backing up, I don't see support for trap .40 specialties (page 76, column 2,
#1, etc.) Maybe I'm just not seeing it because I thought you handled things
like nonexistant/privileged already.
I looked over the code for checkwaitinginterrupts and getinterruptlocation
and was troubled by the omissions of 57, 5E, 5F. I know they are "reserved",
but they still need to act like interrupts, .57 with no inhibit and .5E/.5F
as II (based on T-85 manual I have). This can explain some (but not all)
the problems. I noted with interest, however the lack of 011FFFF near the
bottom of the list.
for (int i=0x52; i<=0x57; i+=1)
for (int i=0x5C; i<=0x5F; i+=1) (don't do this one---see below)
(two places each)
These changes didn't change the error output, much. It changed the last
line from .0017BF0 to .0017FF0 which I assume is the bit for .57 since things
are misaligned. I was hoping for 7FFE or better .FFFE. That missing leading
8 bit might be key as well (location 52, counter 1).
This is where I would really groove on having a table output of the current
status of the interrupts--armed/enabled/triggered!
I'll have to reboot this beast (PC) soon--something (the usual) got
clobbered and it won't paint the screen.
It occurred to me to check bit alignment between the WD and interrupt
routines---oops another fix in WD:
for (int i=0; i<14; i+=1)
(maybe 7 places)
This may not have been a problem, since there was a symmetry between being
able to trigger/arm/enable/etc. but should explain the missing E above.
Actually, this caused another problem, although the problem is back in the
interrupt chassis, not the CPU. I think the CPU is right now, but I need
to pull that board for the .5E/.5F interrupt---interesting. The software
leaves 0's in .50/.51/.5E/.5F and now your emulator is complaining about
there being a zero. .50/.51 aren't a problem since you can't trigger
power on/off.
I also meant to say that debugging might be easier if you don't act like
all 14 external interrupt chassis are installed. One "bucket" of 16 should
be enough for debugging/CP-V/etc. Note that you could cable these in
different orders (external above clock/etc.)---that would be a simple
move and keep or two I'm thinking.
I'm running out of time, but I see two approaches: 1) figure out what
M6 is trying to print, if that really is all (where is 02?). My stop at
.31A seemed ineffective. 2) figure out what M2 is doing/what the deal is
with the missing line (011FFFF) and bit (8000). It doesn't seem to be
returning from that counter 1 interrupt quite correctly is my gut level
reaction.
1) A stop at .318 worked---maybe I forgot to hit enter yet again.
Note: others will tire quickly of converting doubleword address and
byte address to word address for lookup---perhaps a button near the
memory display would allow you to look up by dw/byte---the command double word
extractions can be time consuming. At .32C it prints the stuff---I failed
to note that it was command chained. What would be special about
F4?---group 15, level 4. Location .134?
for (int i=0x60; i<=0x6F; i+=1) (was 13F)
Two places (I don't like to make things more complicated than I have
to---too many cables, power supplies, and LT16's and other logic to fight).
Well that was interesting! It explained the missing line---there is
no group 1 (dah). .F4 is still there---that's bad---there seems no
(good) reason for you to be triggering that interrupt, especially now
that I powered off those 13 chassis of external interrupts. I'll leave
it there and let you figure those three items out (no 01 02 ... in M6,
no 8 bit on M2 group 0, why F4). I'd say that F4 is the biggest problem.
Oh, that interrupt table above may only need to do a group at a time
(or format compactly 16 lines, 50 AEA or blank if not
armed/enabled/active---more than one could be active, but that would
mean an interrupt got interrupted).
> machine on page 20, fig. 7. Instead, I was doing something that I
Yes, that diagram is a good one and we've used it many times (written signal
names in some manuals) and I remember going over it with George. I didn't
look at the code (past or present) too closely so didn't note the deviation.
I realized late this afternoon (Wed---I got interrupted in my reply) while
laying some floor that 01 being present and that 8 bit being absent were
consistent with each other and a good thing---you're way past that now!
> > Here's the complete output with all interrupts (except 0x5E, 0x5F) wired in:
That little 5E/5F bugaboo was totally unexpected. I wondered if the program
caught it on a TRAP40, but the code is not the easiest to read---a data
breakpoint (when location 40 changes) would do the trick, but I don't think
your breakpoint works quite that way (or does it?). (It does not---see
description on page 95, however). I guess .5F was so entrenced as JITLOC
(contained .8C00) that you couldn't put an LT16 board in there (and pass the
diagnostic)---I will have to file that one for future reference, maybe have
George try it if/when he powers his up (and see what 9INTRAP does). Also, we
didn't run 7INTRAP much because A) it rarely broke, and B) once we had
interprocessor communication cabled up it would kill the other system.
> > F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
That's a lot of interrupts!
Although the "CPU" (WD) needs to allow these, I don't think the "interrupt
chassis" needs to scan past .6F, thus allowing one set of 16, for now anyway.
Some of the real-time Sigmas running power stations may have used more, but
often that was hidden from Sigma.
> > For some reason, nothing appears after "RESPOND,". Not sure why or if
> > this is an error. If SS is set, run enters M7, which is correct.
What should appear after RESPOND is M6, but it is not only data chained to the
next CDW, but the next CDW is a transfer in control (an I/O branch, see page
90). This should be simple to implement/debug?. The set up is at lines 1778
with the LI,0 CDW at .4F5. This is followed by a B to a common routine which
soon does a BAL to a short routine to kill interrupts before the actual I/O
takes place. I retested the break point and you seem to be right, no CR is
required---my prior problem remains unexplained (and unexplainable now).
> > I have some questions on WD. On the bottom of page 81, there's a note
> > that says "These code clear the current interrupt...". Take a look at
> > what I did for codes 1, 2, 3 and see if I did that right. I think I did,
> > but I'm confused between "current interrupt" and "remove from active
> > state or waiting state all levels...".
I assume it means these interrupts have to be retriggered to occur--they may
have triggered once and have not been serviced, but to get service they will
have to be triggered again.
> > XPSD handling is a little convoluted. Part of the work is done in XPSD
> > and part of it is done in processInterrupt(), CALx etc. I did it based
> > on the Sig6 ref, rather than the logic equations. I think it would have
> > been cleaner if I had looked at the logic equations first. Anyway, I've
> > poured over it many times and it passes 7AUTO, so I think the
> > instructions are correct.
I looked again for code to handle page 76, col 2 and pg 77, col 1 of the XPSD
and am just not finding it. I am remembering now it was something we had to
add for CP-V but no diagnostics complained. However, if CP-V is happy, I'm
happy (7AUTO and SIGHCP just are good enough on this one).
> > I started thinking of that -- I'll do it today. It will be useful during
> > CP-V debug also.
With it passing 7INTRAP it becomes more academic, but as a memory centered,
event driven machine, it has always been something I've wanted so you know
what the hell is going on. There are deadlock situations which seemed to
occur so that it would not service the PCP/KSR=TTY interrupt and figuring out
why was not easy. In other words, there are some software bugs in CP-V which
a scope would help figure out. Generally, we didn't have the luxury of time
and knew the problem would go away with a reboot, but looking at the dump
generally didn't answer what got us into the mess we were in. Eventually we
figured out a COC line sending breaks continually could kill it, but someone
somewhere wasn't interruptable/reentrant. It seems that generated a 7E-40,
one of the most common software checks which only meant the monitor has trap
40'ed. We would often choose this to an operator recovery (don't remember
right off the advantages), but it was easy to put the machine in idle---see
that it was monitor code (address <.8BFF or unmapped=UMOV) clear the lights,
step, run.
> > If I do that, do I just ignore WD arm/enable/trig for groups higher than
> > group 2??
As above, I think the WD does it, but the interrupt scanner ignores it. This
will be closer to the way a real Sigma works and make subsequent changes
easier. I.e. put it in the CPU,but don't cable up the interrupt chassis.
> > I'll add a hex calculator window.
Addresses would be fine---enter an addresss, say it is B/D not W (rarely H)
and dump the locations. A "hex calculator" might be overkill.
> > I'll also add command chaining to TTY. I think it's critical now.
See TIC above.
> Win98 is really bogus. I avoided it altogether and used only Win95, NT,
> 2000 and XP. You might want to think about upgrading. I snagged an
> eMachines 2.4GHz Celeron for $299 with XP after rebate.
I've had this repainting problem since the original Windows 95 release---it
actually has been much rarer with '98. It seems exacerbated by using DOS
full-screen mode, so I suspect it won't get fixed anytime soon, but I also
suspect it is a more fundamental problem. Under '95 I could actually
reproduce it and sent them info thereto---might as well piss in a black
hole--pardon the French.
I added another diagnostic---those not using GUIDE or MTL are getting
rare (PORT, SWAP, FAULT), so I will have to jump that hurdle (or wait
until you can boot the diagnostic tape) soon. The diagnostic is called
SEX (maybe your e-mail filter will SPAM this!) for System EXerciser.
Our CE (Customer Engineer) George Snyder always said you needed to run
it once a week to keep the computer happy. I thought it was time to let
the emulator "get lucky", it has almost come of age (2 months?)! I put
it in the "standard drop", but chose to zip it this time.
I expect I will have to zip the compressed listings soon, but it has
been useful at times browsing/searching them in this form (but I use my
local not www copy). If you have an editor which will handle >1Mbyte files,
please change all occurances of "TELEFILE" to "SDS/XDS " and return a copy.
I will change the binary accordingly as well. I've been doing that before
releasing any of these---Telefile claims copyright/proprietary information,
but that claim is rather bogus (except, perhaps on their very minor changes).
(Since we had a "single" CPU at a very conservative University,
we didn't run this diagnostic much.) This diagnostic was good at putting
the system under some stress---giving it a workout on multiple channels/levels
at once--like mental, not just physical...
You may want to remove your nonexistant I/O address exception/wait since it
wants to determine what addresses are valid and scans most of .000-.7FF
(skipping .20-.7F on each IOP, I think). After you get through that it
gives a prompt. I will have to keep digging for what is expected there,
but it hosed when I gave it a ?. I seem to have gotten further than
George's emulator does---he complains about unimplemented orders (.FF)
and hangs before giving the prompt. Anyway, before the prompt it lists
configured I/O addresses---I don't know why it doesn't seem to
find "any"/but 1 at 0. This may have to do with TIO/TDV status
information. I will keep digging.
I found the manual. It recommends HARDCOR (how appropriate! =SIGHCP)
and AUTO be run fiist. I see it exercises various boundaries
(page, word, byte, doubleword), the map, ext. int., additional reg blocks
(with all those ext ints and reg blocks this could be very entertaining).
It should also read/write tape/disk and maybe give some useful error messages.
(George's also gives me some cannot configure errors as well as duplicate
channel which seem to be bogus--he has floating, we don't.) It seems to not
check for counter 1/2/=0/.57/.5E/.5F
TELEFILE SYSTEM EXERCISER 960-0050-H03
01FFFF MEMORY LAST WORD ADDRESS
SIGMA 7 CPU
DECIMAL
0020 REGISTER BLOCKS
MAP
WRITE LOCK
0000 GROUP INT. LEVELS 38F0
0002 GROUP INT. LEVELS FFFF
0003 GROUP INT. LEVELS FFFF
0004 GROUP INT. LEVELS FFFF
0005 GROUP INT. LEVELS FFFF
0006 GROUP INT. LEVELS FFFF
0007 GROUP INT. LEVELS FFFF
0008 GROUP INT. LEVELS FFFF
0009 GROUP INT. LEVELS FFFF
000A GROUP INT. LEVELS FFFF
000B GROUP INT. LEVELS FFFF
000C GROUP INT. LEVELS FFFF
000D GROUP INT. LEVELS FFFF
000E GROUP INT. LEVELS FFFF
000F GROUP INT. LEVELS FFFF
...
Thanks for the patches, but right now I'm using the exception as a
convenient place to stop and check out the code....
.356B (.3573, .357B) is where SEX does a TIO,12 *8 to the different
IOP's. It preloads location .20 with 0. If it remains 0, then it
concludes there is no such IOP. It is using address 0, .100, .200,
.300, ... for this and has logic to apparently differentiate between an
IIOP (Sigma 5, shared memory port with CPU) and Sigma 9 MIOP (but
perhaps uses Sigma 9 flag, so a Sigma 9/Telefile MIOP on a Sigma 6/7 may
not be detected here) . Anyway, this location .20 stuff is not
documented in the Ref manual, but see the Tech manual. It seems George
and I had to fix this before CP-V ran (but we probably caught it on the
tape/disk diags). Also, TIO has to return status to 12 for this logic
to work since it compares R12 with .20 (earlier copy). However, since
the TIO is not accepted (CC1=1), R12 isn't changed (I'm rambling).
Somehow it is trying to differentiate between an IOP that isn't there
and one that is. Note: for address 0, George returned a current command
address of .FF01---location R13/.21 had .10800348, apparently status and
byte count of a prior I/O---don't know what device right off. THUS the
branch at .356D is where we diverge.
NOTE, also, the TIO to 0 is accepted not rejected. I think this is a
special address.
.35A3/4 is where it does the device checking with an HIO/TIO. I don't
understand why address 2 is not being recognized---apparently your I/O
subsystem isn't implemented to that extent???
George hangs at .3646/7 doing a TIO after issuing a seek to a tape
drive. Apparently the tape drive has gone busy (CC2=1) and doesn't ever
quit. NOPping out .3647 isn't enough since it checks status bits as well
as CC. NOPping out the branch at .3649 means it hangs at the SIO. So,
what should it do with an invalid order---certainly not go busy? Wait,
it isn't invalid. SEEK=.03, set correction=.03. This bears more
investigate time than I have right now.
We may need to figure out how we want to procede with the I/O subsystem,
since the CPU and interrupt systems seem good to go. Right now I'm kind
of taking a scatter shot approach and not clear which bullet hits
something vital and/or what you might be stuck on (other than perhaps
the holiday season was too short).
I put PORT and the excuse for a listing "out there". I used PSEDIT to change
TELEFILE---it doesn't have a global change, but handles files bigger than
QEDIT (an older version) does. I should try SPRINT on these large files
sometime.
PORT halts with a WD .44 exception at .7ED. My research into what a .44
might be has so far turned up nothing. This comes directly after a pair of
.42 to toggle the music flip-flop. It seems the "lamp" may have been
addressable separate from the alarm and sound, but I'm not sure now.
The T-85 manual didn't say. I will nop it out/ignore it for now,
but it seems stuck in that code.
Then it does not have a line printer (address 2). I see I don't have such
in my configuration file. I will put something in (like a TTY), but wonder
where we are at on that score. It has output:
TCP/PORT-H02
MAX MEM=
but not the memory size yet (1FFFF), number of register blocks
(4---it ignores the extra), and a prompt.
Must run
More on PORT.
I verified that George does nothing for either the WD which sets clock
margins or this WD .44. My Sigma 9 ref manual also shed no light. I
expect to at least peak in the Sigma 6 tech manual sometime. For now I
think we should ignore it, but document that we are on the lookout for
what it does and that PORT issues it at .7ED.
After looking harder I thought I had discovered a real listing!
However, upon close examination it appears to be more related to
SWAP/SUPER SWAP which were programs I don't ever remember using. PORT,
however, was kind of nice to run every once in a while. I also found
instructions at home, but there should be another copy here at work in
the Honeywell DPM stuff. I did find a 13 page document---two
copies---both very poor, as well. If/when there is another mailing I
will try to include it.
PORT actually starts with a WAIT at .69 after enabling interrupts and
arming/enabling Clock 3/4 and clock4=0. The wait it followed by a B
$-1, so the WAIT exception/step/run aspect doesn't allow the interrupts
to take over and get us out of there. I think I mentioned before that I
NOPped this WAIT out and then we proceeded. After putting address 1 in
.5E and .5F the program loops with a constant chime, but still doesn't
output the memory size, nor prompt. In stepping through it I came to
location .80 (via a PLW,7 B 0,7) which could be an XPSD but really is
TEXTC. Will have to get back with you on this, must run now, but
something is broken!
The XPSD sends us to R0 which has EBCDIC "0" in byte 3, hence trap 40
sends us to .761 and the nasties continue (I think). It seems the IA
window isn't circular (it starts over when full?), the newest entries
are at the bottom, and it doesn't track LPSD/XPSD activity??? It was
useful earlier, but seems garbaged now.
It's not clear if I ran into a logic bug based on broken I/O or if
something is wrong with the PSW/PLW/interrupt/? aspect. Without a
descent listing it isn't clear if this is a good avenue to pursue. It
may be trap 40 related in find the memory size so I will likely
investigate a little more.
The WD of .44 I finally found in a Sigma 5 Ref. manual. It resets an
IIOP.
I also want to document here WD .47---on 9/T85/560's it turns on the MA
flag (46 turns it off). Don't know right off if implemented on a Big
6. Could well be it isn't. George ignores all 4x but 40,41,42. George
and I only needed it to allow big MAPs, not use more than 128K, so we
didn't go that far. I note this partly because PORT does this at .7FB.
The last entry in my copy of progress.txt (in sigma subdirectory) is
dated 12/16/02, so I hesitate to use it as current. Lots of nice ideas
there at the end. Some would be nice features, but may distract from
the critical path. There were nice acknowledgements for my
contributions (except on DL, DST)--thanks. CPU failures seem limited to
implementing remaining instructions which I expect to get to over the
next month or two. (I remain unclear as to some special trap 40/cal
XPSD stuff I haven't seen.) MAP/access/locks all seem to work. The
interrupt system passes the diagnostic. Hence this list, based on
various diagnostic test cases, primarily relates to I/O:
RTC data-chained output to TY (column 1 but no YES/NO/ERROR) also must
be faking a NL
7INTRAP command-chained output + TIC to TY (RESPOND, but no M6)
7INTRAP Reset should restart (not clear memory)
7PFS no way to activate PON/POFF interrupts (or save memory to disk :)
SEX IOP address recognition on address 0, .100, .200
SEX IO instructions changing locations .20/.21 on TIO (status returned
there before R/Ru1)
SEX needs to output fairly valid "attached" devices and associated model
numbers.
PORT wait at 69 doesn't wait allowing the triggered interrupts.
PORT PSM/PLM broken--see below.
CPCU.MT no data transfer (but no error reported either)
AUDIAG has an extraneous prompt ">"; TY input not forced to upper case;
lots of potential for device testing here!
TDIAG order 03 unsupported---SIO accepts, TIO returns CC1, loopus.
MTLU00 same as above.
Commentary generated during debugging: PORT starting at .A7A does a
CAL1,0 L547 to output "MAX MEM=" .48 (CAL1 loc) has XPSD,6 .9E. .9E
should send it to .668 which sends it to .693 which pushes three words
onto the empty stack (SPD=.12F4, stack at .16E0). From here we go
through .69D to .6A4 (address not equal 0 so so LF appended) where we
BAL,7 to .67A and push 3 more. At .67A we check for TIO to 1 and branch
to .74F where we pull three regs and return. We BAL to an SIO and a TIO
routine at .6A6/7, pull three regs, increment the CALled PSD and
return. So far so good. We save this max mem address at .A7C/D, and do
a CAL1,1 which goes to .669 ok (So the register ORing is occurring).
The stack is now empty. At .6BA we BAL to .6F2 apparently to convert the
hex value in R9 to a text value in R8/9. His happens, but I didn't come
back to .6BB without chiming (clock 4? and stopping on that WD,0 .44 at
.7ED which I will now NOP and see if I am dead yet). I may be dead
because I'm at .7F0 with an HIO to 0 where I have been (but not this
time). After NOPping these I am hosed here. We will go reload and stop
at .6BA and try again
Ah ha. In this routine we PSW,7; PSM,10 (2) and end with a PLM, 10 (2),
PLW,7. I'll swear we pushed our link address (.6BB), but we pulled what
had been in R9 (.1FFFF000). Thus our B 0,7 at .703 sends us to .1F000
which has .761 so we trap 40. Stay tuned (but I'm expecting a call home
anytime).
Back at .6BA and the BAL,7.6F2. The stack (.12F4/.16E3/) has three
words from a few instructions earlier. They are .11/.11/.EF/.11, but I
seem somewhat misaligned already (I guess not empty=0 I pointed at
.16E0, so the last nibble agrees). R7 was pushed to .16E4 (.6BB). (The
phone call came.) When we pushed two registers starting at R10, R9
clobbered .16E4, R10 may have gone in .16E5 and R11 may have gone into
.16E6. R10 and 11 were both zero so I could not tell for sure, but R12
was not pushed. Hence PSM is broken (and SUFFIX didn't complain---why
am I not surprised).
Note, in generating the above summary, I did a fairly complete
regression test, but after repairing PSM (and PLM) we will have to do it
again. Let's see, I wrote PSM/PLM so I suppose I should look into it.
It will be hours before I get back to this, however. Glad to find this
now and not in the operating system, even if this listing is virtually
trash.
> I added ack for DL/DST -- I like to give people credit where it's due.
Thanks. This month we have to do our faculty annual reports, so such
things are on my mind, colleagueality, national/international collaboration,
etc.
> This looks like real time commentary! :-) :-) :-)
Yup! Sure is hard to backtrack with you don't keep good notes.
> I think i<=count should be i go to count-1, not count. That's what PLM does. I could understand how
The problem is a bit more subtle. Indeed R-1 clobbers the prior entry,
but R gets put in the right place. Thus the problem is one of not
incrementing the storage location first. Thus in addition to the two
items cited above, value0++ in the memory access goes to ++value0 and
the value0--; line with comment gets deleted. With those changes it
passed SUFFIX (still/again). By the way/for the record, a stop at .145
and inspection of R3 hw 0 gives you a pass count for a success indicator,
in addition to:
CNT PULSE INTERRUPTS ARMED ON NEXT PASS. -- INTERRUPT AND CLEAR R5 TO DISARM.
In adding 7FLOAT to my list of diagnostics (but then commenting it out since
I didn't create the file and it complains if the file does not exist, this
check shouldn't happen on output devices like LP/CP) I discovered a limit of
24 "IOP's". It ignored iop.24!
PORT now gives the time prompt, accepts the time, and gives the H> prompt.
However, basically any input yields . I don't know why. GO should ask
for DATA MODE? WA for waterfall was one of my favorites. I also am not
hearing the tune to "Here I am to save the day!" which I should
(no big surprise and add that to the list?). This will also float that
PCP/TY interrupt high on the stack.
Good news---while looking for instructions here on running PORT,
hoping to find more information on that above, I found a listing
from Nov. 11, 1971 and Carleton University Computing Centre, an early
Sigma 9 site in Ottawa Canada. It seems to be only 2997 locations of
4906 locations or 2600 lines vs. 4700 lines, but it is better than the
nothing we had! There is no cross-reference. (There are a lot of
differences, BAL,7 to do SIO/TIO, R6 instead of R1 used, etc.)
Back to PORT. Having found the input routine I thought to stop and
compare listings. (I'm suspecting it isn't liking our activation character,
but I can't seem to send a LF (CNTRL J) and haven't figured out how to
EOM (.15?), so I'm stuck with a CR=.0D or CNTRL M). Curiously, I am at
.75C B 0,7 which doesn't seem to want to step---the computer goes into
RUN mode and won't come out. Maybe this is because of the TY read pending?
When I satisfy the read it will come out of the RUN the single step put it into.
Back to PORT at .6C6. G but not anything else is at the location it does a LB on.
Not clear yet if this is a TY read problem or something else.
By running GSP's emulator I discovered these are 1 byte reads and it keeps
issuing reads until that .15 character is typed. Your emulator doesn't
activate until the activation is sent, thus it only gets that first byte,
but knows we were activated. I hope that makes sense and I have to run again.
I'll need to stop loosing hours figuring these out probably for the
rest of the week anyway. Good luck.
In Progress.txt I don't see adding boxes for DW, HW, Byte address conversion
for address given.
Also, the two entries below overlap substantially.
> 7INTRAP Reset should restart (not clear mem
I'm not finding my reply to this e-mail of last August although I thought
I had sent you to George Plue. However, late October Madhu Siddalingaiah
started hacking together a Sigma 6 emulator in JAVA.
Since then we have about a dozen diagnonostics, including
SIGHCP, PATTERN, VERIFY, 7AUTO, 7SUFX, MAP, PROTECT, and 7INTRAP running.
We are moving on to the I/O subsystem. It is not as fast as the one
I helped George Plue with, but it is still many time faster than a Sigma 9
on this old 600Mhz system. The user interface is much better and I am hoping
we can have more easily integrate networking, which is where George bogged
down. We haven't clarified distribution, but I made it clear in my
involvement that I wanted something the Computer History Museum could use.
You might drop Madhu a line of encouragement. He is doing it as a hobby
and reviving memories of the short time he programmed at NASA.
---.-.----.-.-----...24+ years at AU and counting, ...(down to retirement?)
That tune PORT tries to play I mentioned earlier as "Here I am to save
the day" comes from the theme to the 1950's cartoon Mighty Mouse. I was
not able to find a sound clip on the internet although I tried.
George's emulator plays it---it isn't all that fast but sounds rather
"tinny". Thus I was surprised/not to find any apparent corrections for
processor speed. The WD is at .A88 and is followed by a BDR,4 $ for
frequency timing and embedded with BDR,3 for duration and BIR,2 for note
sequencing. Thus, as I see it, the short notes (2nd, 4th, 5th, 6th) get
105 (.69) repeats, the long notes (1st, 3rd) 210 (.D2), and the ending
note (7th) 630. The frequencies are .2A9 (681 for 1st, 7th), .32B (811
for 2nd, 6th), .3FC (1020 for 3rd, 5th), .553 (1363 for 4th). Perhaps I
can get my wife to sound it out music wise, but using Sigma 6 timing,
BDR $=1.4/WD=2.5 so maybe 4 microseconds per, so 681 would give 2.7ms or
367Hz or maybe F4#; 811 would be 308Hz, 1020 would be 245 Hz, and 1363
would be 183Hz. Thus, maybe F4# (.5), D4# (.25), B3 (.5), F3# (.25), B3
(.25), D4# (.25), and F4# (1.5), where # is sharp, () is timing, 3/4 is
octive. There is also LPSD/XPSD in here to confuse things further, but
I think we've about hit what they are attempting. This code may not
appear in my real listing. Also, later versions of PORT handled MOS
memory and MPC (microprocessor controlled=Honeywell) tapes/disks. This
explains much of the ballooning of code. Not sure why I don't hear
anything with your emulator, since somethings do emit sound.
I've done a fair bit of reading JAVAwise to discover that some