Mr. Frank Davis
513 E. Main St.
Peru, IN 46970
Dear Frank,
Supplying all code corrections is not possible because of attrition, nevertheless, I am enclosing some of what I can reconstruct at this time. Some “corrections” are unique to my system, and do not apply (like my EXROM DOS).
While I was developing corrections, it became clear that I was doing salvage work — repairing sabotage in effect. I am sure you can see how obvious this becomes once repairs have been started. Knowing what NOT to believe made figuring out what to do easier.
I am only human. I don’t remember what I wound up with in my core memory. It just grew. A brief summary is some help, along with data from my book. The picture of EXROM code there (showing censorship), will help to explain what happened to those routines maintaining OPEN # and structures supporting SELECT, OPEN, & CLOSE in RAM.
The restored EXROM code is fairly simple except for SYTAX checking of passed parameters. There is an image of the default table configuration to be copied below SYSCON.
What I am sending you fixes almost all the damage in HOME ROM. I sent Bob Orrfeldt my reconstruction of lower EXROM but lost my copy. It allowed RST calls to replace more complex bank switching instructions in tape routines, saving lots of memory space and eliminating the NMI conflict with LKDOS and others.
You will see that PASSING is restored to HOME bank where it belongs.
Corrections to initialization code in EXROM are pretty simple, though tricky because of good camouflage and snow-job.
Corrections to memory remapping code consist mainly in removing dependence on VIDMOD, redefining it as CONFIG. It is also necessary to account for nonstandard UDG banks. The corresponding FIX table needs extensive updating and the DISPATCH jump table needs the same.
The bank switching services image in EXROM is unusable as it stands. Adequate changes are highly difficult to explain, so some clarification is in order.
The main difficulty with bank switching is to provide a common program access site to all banks. TIMEX use of chunk 3 or 7 conditiionally is a clumsy, but usable convention for simpler systems. This still leaves a problem when transferring bytes from one bank to another. TIMEX uses the stack repeatedly to do this, but using a block of RAM in I/O space is much safer and more efficient. It is also a better place to store the image of bank switching code.
More attention to I/O space leads to a configuration which includes these features, and at the same time makes PC compatibilty possible for clone cards.
Obviously, these are my designs which don’t carry much weight. In spite of this, there are some bank switching code corrections to account for sabotage which should precede any consideration of changes. I have some of this not previously published, and will send it along soon.
Except for barrier corrections, all low level code revisions are to WRITE_BS_REG and READ_BS_REG. This is the only code which directly interfaces to the bank switching controller. The TIMEX version never existed in workable form, so I invented and recommend, my CCOT system in one of its three levels.
Level 1 adds memory beyond 64K contiguously.
Level 2 adds memory beyond 64K in any configuration mappable in RAM.
Level 3 conforms to auto-configuration as provided in EXROM for TIMEX style devices.
Respectfully yours,
William J. Pedersen
[address omitted]
MODEL 1: Each BANK is 64k on 64k boundaries. A total of 256 BANKS can be defined. Each of 8 CHUNKS can be filled from any of these banks in any order. All 16 TS2068 address bits are required to specify a location within a selected BANK. The planned TS2068 method distributed the owner registers to each expansion bank, making multiple ownership a problem solved by programming convention.
There are conceptual problems with this method, but to most users, it is convenient to associate a DEVICE with a BANK. DEVICES cannot be reassigned to other CHUNKS.

MODEL 2: 8 out of 64 “handles” can be assigned. Each handle accesses a pointer stored in RAM. 64 pointers are available, though only eight are current at any time.
There is enough room in RAM, and enough handles to contain and select multiple memory maps for multitasking, and multiuser network operation. This arrangement covers memory sizes up to 2M, but is obviously easily expanded. A pointer accesses an 8K segment on 8K boundaries.
In effect, CHUNKS are being manipulated instead of BANKS.






