Amigan Software
Signetics-based Machines Coding/Gaming Guide
This document was written on 29/8/08, and last updated on 30/12/24, by James Jacobs of Amigan Software. Information herein is believed to be generally accurate, though some is tentative. If you have anything to contribute, please email us.
This page is part of Emerson Arcadia 2001 Central. Emulators, ROMs, manuals and other resources can be found there.
Emerson Arcadia 2001 (coding)/(gaming)
Interton VC 4000 (coding)/(gaming)
Elektor TV Games Computer (coding)/(gaming)
PIPBUG/BINBUG-based machines
Signetics Instructor 50
Signetics TWIN
Central Data 2650
PHUNSY
Ravensburger Selbstbaucomputer
MIKIT 2650
Coin-ops
Multiplatform
PIPBUG/BINBUG-based Machines
These machine have been offered as kits and as assembled systems, in various configurations by various manufacturers, including Signetics (ie. Philips), Applied Technology, etc.Writing an output character is done from right to left (bit #0 first, then #1..#7), as follows:
Flag on
r5 = r0;
DLAY();
DLAY();
Flag off
for (r4 = 8; r4 > 0; r4--)
{ DLAY();
r5 >>= 1;
if (r5 & %10000000)
{ Flag on
} else
{ Flag off
} }
DLAY();
Flag on
CHIN returns with an input character in R0, but not until there is input
(ie. it is synchronous). The high bit is used for parity and is always
masked out by CHIN; therefore, only 7-bit input is supported. (Ie. the
extended ASCII set values $80..$FF are unsupported.)
The Sense bit is normally high. It pulses low during key transmission
(ie. whilst receiving clear bits of a byte). Waiting for the Sense bit to
become clear is therefore equivalent to "press any key to continue".
Randomization is normally done by asking the user for a keystroke, then
rapidly incrementing a register while waiting for the Sense bit to become
clear. Eg.
printf("PRESS ANY KEY");
HERE:
addi,r1 1
tpsu $80
bctr,eq HERE ;if Sense bit is set
will generate a random number (0..255) in r1.
There is also an optional 4-digit 7-segment LED display which can be
attached to the system as an additional output device. Writing to this is
done via the WRTD command. The operand is interpreted as follows:
bit 7: 1st digit
bit 6: 2nd digit
bit 5: 3rd digit
bit 4: 4th digit
bits 3..0: digit ($0..$9 = '0'..'9', $A..$F = ' ')
Eg. to write '7' to the 3rd digit would require an operand of $27. A delay is necessary between digit writes on the real machine, but not on the emulator. See the relevant magazine article for more information.
CHIN is used for cassette/papertape/keyboard. It works like this:
do
{ switch to alternate register bank
PORTC = $80; // enable tape reader
} while (Sense bit is set); // ie. until start of start bit
PORTC = 0; // disable tape reader
DLY(); // wait for half a bit (ie. until centre of start bit)
r4 = 0;
for (r5 = 8; r5 > 0; r5--)
{ DLAY(); // wait for one bit
r0 = PSU & %10000000;
r4 <<= 1;
r0 |= r4;
r4 = r0;
}
DLAY();
r4 &= %01111111; // delete parity bit
r0 = r4;
switch to main register bank
clear With Carry flag
return;
So it is expecting the following format:
.01234567#
and it returns in the middle of the stop bit (#).
So, we enable the tape reader, wait for the Sense bit to become clear,
and then disable the tape reader. Then, we read the eight bits from right
to left (bits 0..7) via direct sampling of the PSU at the appropriate
moment. The parity bit (bit 7) is then discarded (without checking it).
COUT is used for cassette/papertape/keyboard. r0 is passed as an argument; it is the ASCII character to be output. It works like this:
set Flag bit
r5 = r0;
DLAY();
DLAY();
clear Flag bit
for (r4 = 8; r4 > 0; r4--)
{ DLAY();
r5 >>= 1;
if (r5 & %10000000 == %10000000)
{ set Flag bit
} else
{ clear Flag bit
} }
DLAY();
set Flag bit
return;
So, we set the Flag bit, wait, and clear the Flag bit.
Then, we write the eight bits from left to right (bits 0..7).
The high bit is not treated any differently to the others. Then we wait
again, set the Flag bit and return.
Effectively, we write this for each byte:
##.01234567
where # means Flag set, . means Flag clear, and digits mean Flag is set/ cleared according to the relevant bit. We set the Flag before returning.
When loading, it waits until the input line goes low, then looks for the start character (':').
Some games have 110 baud and 300 baud versions. These are still all stored on cassette at 110 baud; the baud rate in this case actually refers to the speed of keyboard and screen operations, rather than cassette speed.
Various memory configurations are possible. Here are some examples, but this is not exhaustive:
Region | Size | EA 77up2 ("Baby") | ABC/PC1500/KT9500 | EA 78up5 or PC1001 | EA 78up5 + 78up10 | Modified ABC1500 with CP1002 |
$0000..$03FF | 1K | PIPBUG 1 monitor ROM | PIPBUG 1 monitor ROM | PIPBUG 1 monitor ROM | PIPBUG 1 monitor ROM | PIPBUG 2 monitor ROM |
$0400..$0436 | 55 bytes | RAM for PIPBUG 1 | RAM for PIPBUG 1 | RAM for PIPBUG 1 | RAM for PIPBUG 1 | PIPLA |
$0437..$04FF | 201 bytes | user RAM | user RAM | user RAM | user RAM | PIPLA |
$0500..$05FF | 256 bytes | mirror of $0400..$04FF | user RAM | user RAM | user RAM | PIPLA |
$0600..$07FF | 512 bytes | mirrors of $0400..$04FF | mirror of $0400..$05FF | user RAM | user RAM | PIPLA |
$0800..$0861 | 98 bytes | mirror of $0000..$0061 | mirror of $0000..$0061 | user RAM on 4K version | user RAM | SMI RAM used by PIPBUG 2 + PIPLA |
$0862..$087F | 30 bytes | mirror of $0062..$007F | mirror of $0062..$007F | user RAM on 4K version | user RAM | SMI RAM unused by PIPBUG 2 + PIPLA |
$0880..$0BFF | 896 bytes | mirror of $0080..$03FF | mirror of $0080..$03FF | user RAM on 4K version | user RAM | unused |
$0C00..$0DFF | 512 bytes | mirror of $0400..$05FF | mirror of $0400..$05FF | user RAM on 4K version | user RAM | motherboard RAM |
$0E00..$0FFF | 512 bytes | mirror of $0600..$07FF | mirror of $0600..$07FF | user RAM on 4K version | user RAM | optional RAM |
$1000..$13FF | 1K | mirror of $0000..$03FF | mirror of $0000..$03FF | user RAM on 4K version | user RAM | unmapped? |
$1400..$1EFF | 2.75K | mirror of $0400..$0EFF | mirror of $0400..$0EFF | unused? | user RAM | unmapped? |
$1F00..$1FFF | 256 bytes | mirror of $0F00..$0FFF | mirror of $0F00..$0FFF | unused? | user RAM | mirror of $0F00..$0FFF |
$2000..$2FF9 | 4090 bytes | mirror of $0000..$0FF9 | mirror of $0000..$0FF9 | unused? | user RAM | unmapped? |
$2FFA..$2FFF | 6 bytes | mirror of $0FFA..$0FFF | mirror of $0FFA..$0FFF | unused? | RAM (for use by EPROM) | unmapped? |
$3000..$3FFF | 4K | mirror of $0000..$0FFF | mirror of $0000..$0FFF | unused? | EPROM | unmapped? |
$4000..$41FF | 512 bytes | mirror of $0000..$01FF | mirror of $0000..$01FF | unused? | ROM? (for eg. ETI-686) | unmapped? |
$4200..$57FF | 5.5K | mirrors of $0000..$0FFF | mirrors of $0000..$0FFF | unused? | RAM (for eg. ETI-686?) | unmapped? |
$5800..$7CFF | 5.25K | mirrors of $0000..$0FFF | mirrors of $0000..$0FFF | unused? | RAM (for eg. ETI-686?) | unmapped? |
$6D00..$7FFF | 4.75K | mirrors of $0000..$0FFF | mirrors of $0000..$0FFF | unused? | RAM? (eg. for Linearisatie) | unmapped? |
EA 77up2 ("Baby"): 1K ROM + 256 bytes RAM
Signetics Adaptable Board Computer aka Signetics PC1500 aka Signetics KT9500: 1K ROM + 512 bytes RAM
EA 78up5 ("1K Mini Computer" aka "2650 Mini Computer") or Signetics PC1001: 1K ROM + 1K RAM
EA 78up5+78up10 ("Expanded Mini Computer with EPROM"): 1K ROM + 15.75K RAM + 4K EPROM
Modified ABC1500 with CP1002 (see TN132): 2K ROM + 1152 bytes RAM
The ABC also supports parallel and serial I/O, has an on-board clock,
and can be expanded to up to 24K of RAM. These features are not supported
by Ami/WinPIPBUG, as the mappings of the serial and parallel I/O ports and
clock are unknown.
The Signetics PC1001 Microprocessor Prototyping Card (1K RAM)
(assembled) is a different, though closely related, machine.
The Signetics PC2000 is a 4K expansion RAM board suitable for (at least)
the PC1001/PC1500/KT9500.
The Signetics PC3000 is another "evaluation kit" (as are the other
Signetics-manufactured machines), about which almost nothing is known.
While using PIPBUG 1 "A" and "S" commands, valid inputs are:
<CR> (ie. ENTER) to exit
<LF> (ie. Ctrl+J) to display the next address/register
<nn><CR> to change contents address/register to <nn> and exit
<nn><LF> (ie. type the value then press Ctrl+J) to change contents of address/register to
<nn> and display the next address/register.
PIPBUG 1 ROM areas are as follows:
$000..$01C: initialization
$01D..$05A: command handler
$05B..$0A3: input a cmd line into buffer
$0A4..$0AA: subr that stores double precision into temp
$0AB..$0F3: display and alter memory
$0F4..$139: selectively display and alter registers
$13A..$15F: goto address
$160..$1AA: breakpoint runtime code
$1AB..$1C9: subr to clear a bkpt
$1CA..$223: break point
$224..$23C: input two hex chars and form as byte in R1
$23D..$245: calculate the BCC char, EOR and then rotate left
$246..$24F: lookup ASCII char in hex value table
$250..$268: abort exit from any level of subr
$269..$285: byte in R1 output in hex
$286..$2A7: 110 baud input for papertape and char 1 MHz clock
$2A8..$2B3: delay for one bit time
$2B4..$2D4: COUT (Character OUT) routine
$2D5..$30F: get a number from the buffer into R1-R2
$310..$35A: dump to paper tape in object format
$35B..$3B4: subrs for outputting blanks
$3B5..$3FD: load from papertape in object format
$3FE..$3FF: unused?
Note that that PIPBUG, and programs for it, generally run with signed (arithmetic) comparisons, as opposed to the Arcadia, etc. which generally run with unsigned (logical) comparisons.
COUT has the following side effects when called:
PSL: CC = lt;
PSL: primary register bank (r1..r3) is always selected
PSU: Flag pin is always set
r0 = r4 = 0;
r5 = the old r0 (ie. what you passed)
You should not call it when SP > 5 (you need one level of stack for
COUT's return address and another level for DLAY's return address).
CHIN has the following side effects when called:
PSL: CC = gt;
PSL: primary register bank (r1..r3) is always selected
PSL: With Carry bit is always set
r0 = r4 = return code (1..127)
r5 = *(DATABUS) = 0;
You should not call it when SP > 5 (you need one level of stack for
CHIN's return address and another level for DLAY's/DLY's return
address).
Utility EPROM areas are as follows:
Region | Label | Area | Type |
$2FFA..$2FFB | START | RAM | data (1st CLI parameter) |
$2FFC..$2FFD | END | RAM | data (2nd CLI parameter) |
$2FFE..$2FFE | NEW | RAM | data (3rd CLI parameter) |
$3C07 | GPAR | EPROM | subroutine |
$3C2A | INCRT | EPROM | subroutine |
$3C3C | PADR | EPROM | subroutine |
$3C50 | HEXLIST | EPROM | subroutine |
$3C6A | SEARCH | EPROM | subroutine |
$3C8A | HEXIN | EPROM | subroutine |
$3CDD | VERIFY | EPROM | subroutine |
$3CF8 | OK | EPROM | code section |
$3CCB | ? | EPROM | subroutine |
$3CCE | ? | EPROM | subroutine |
$3D0E | FAULTY | EPROM | code section |
$3D3B | MOVE | EPROM | subroutine |
Some useful Ctrl-codes are:
Ctrl+G = BEL (7)
Ctrl+H = BS (8)
Ctrl+I = TAB (9)
Ctrl+J = LF (10)
Ctrl+M = CR (13)
Teletype I/O
At 1MHz, there are 1,000,000 short/fast cycles per second, which is 333,333.3' long/slow cycles per second. So each long/slow cycle lasts for 1,000,000÷333,333.3' = 3 µsecs.
At 110 baud, each bit ideally lasts for 9090.90' µsecs.
At 300 baud, each bit ideally lasts for 3333.3' µsecs.
At 1200 baud, each bit ideally lasts for 833.3' µsecs.
For a 110 baud teletype, a full bit delay is:
bsta,un TDLA ;3
TDLA:
eorz r0 ;2
bdrr,r0 $ ;256*3
bdrr,r0 $ ;256*3
TDLY:
bdrr,r0 $ ;256*3
lodi,r0 229 ;2
bdrr,r0 $ ;229*3
retc,un ;3
= 3001 long/slow cycles = 9003 µsecs
and a half bit delay is:
bsta,un TDLY ;3
TDLY:
bdrr,r0 $ ;256*3
lodi,r0 229 ;2
bdrr,r0 $ ;229*3
retc,un ;3
= 1463 long/slow cycles = 4389 µsecs
For a 1200 baud RS-232 terminal, a full bit delay is:
bsta,un DLAY ;3
DLAY:
lodi,r0 89 ;2
DL1:
bdrr,r0 DL1 ;3
retc,un ;3
3+2+(3*89)+3 = 275 long/slow cycles = 825 µsecs
and a half bit delay is:
bsta,un DLY ;3
DLY:
lodi,r0 58 ;2
bctr,un DL1 ;2
DL1:
bdrr,r0 DL1 ;3
retc,un ;3
3+2+2+(3*58)+3 = 184 long/slow cycle s = 552 µsecs
Note that these delays are shorter than the ideals. However, there is also code that must be run by the caller to process (emit/receive) each bit, which takes additional time to run.
Each character begins with a start bit (%0). Then data bits 0..6 are sent
(least significant bits first). Then a parity bit is sent. Then stop
bits are sent.
The letter "U" has the 7-bit ASCII code of $55 (%1010101). This would be
transmitted as %0,1010101,1,00.
Cassette I/O
A clear (0) bit (Sense bit off) is represented by a slowly pulsing signal.
About 10 slowly pulsing cycles represents a clear bit.
A set (1) bit (Sense bit on) is represented by a quickly pulsing signal.
About 20 quickly pulsing cycles represents a set bit.
The length of each bit, in time, is identical regardless of its value. (This is in contrast to the system used on the Elektor, which has identical pulses for all values and differentiates values by the positioning of the pulses.)
PIPBUG 1 encodes/decodes the files as Signetics Absolute Object Format (AOF) at 110 baud. There is a low start bit preceding each byte, and two high stop bits following each byte. The parity bit (bit 7 of the data) is always thrown away when reading. The data rate is approximately 10 raw data bytes per second. As values are encoded into ASCII pairs, the actual number of bytes loaded/saved per second from the user's point of view is about 5.
PIPBUG, BINBUG (except ACOS), CD2650 and (presumably) Selbstbaucomputer use a standard Kansas City Computer Users Tape Standard (CUTS) cassette interface to transform standard teletype I/O into cassette tape I/O (ie. high and low bits are turned into the appropriate pulse trains when recording, and pulse trains are analyzed and decoded into high and low bits during playback), usually at 110 baud:
Every "0" bit becomes 21.81' cycles (pulses) of a 2400 Hz tone, and
Every "1" bit becomes 10.90' cycles (pulses) of a 1200 Hz tone.
In practice, exactly 22 or 11 pulses should be done (as it is best to
wait until the next zero crossing before doing the next bit).
The BIOS and games only see the teletype Sense and Flag lines, they
cannot see the pulse trains. The cassette interface is invisible to the
software; as far as it knows there is only an ordinary teletype attached.
This means that you can record/play any sort of teletype I/O directly to/
from the tape, not just formal dumps.
300 baud is identical to 110 baud except that only 8 (instead of 22) or
4 (instead of 11) pulses are done; the pulses themselves are identical.
To load a tape, translate it to teletype format:
22 2400 Hz pulses in 9.09' msec = having teletype Sense low for 9.09' msec ("0").
11 1200 Hz pulses in 9.09' msec = having teletype Sense high for 9.09' msec ("1").
If we see a zero crossing every 413.2231 µsec it is a "0", and we should see 22 of those (or more if there are several 0 bits).
If we see a zero crossing every 826.4463 µsec it is a "1", and we should see 11 of those (or more if there are several 1 bits).
and vice versa when saving:
While teletype Sense is 0, flip the tape Sense every 413.2231 ÷ 2 µsec.
While teletype Sense is 1, flip the tape Sense every 826.4463 ÷ 2 µsec.
This is sufficient for all baud rates and encodings.
Here are diagrammatic views of the system, in record mode:
At computer | Tape | Terminal (VDU/keyboard) | ||
Flag | -> | tape can save this | -> | VDU |
Sense | <- | input comes from kybd | <- | Keyboard |
and in playback mode:
At computer | Tape | Terminal (VDU/keyboard) | ||
Flag | -> | tape ignores this | -> | VDU |
Sense | <- | input comes from tape | Neither |
Printer I/O
EA printer interface:
Uses the data port for (parallel) input and output.
Does not use buffering.
Can accept a new character every 64th of a second (in condensed mode)
or every 32nd of a second (in expanded mode).
As soon as the game writes to the data port, it prints the character.
While printing is in progress, the high bit of the input data port
is low. It is high while idle.
ETI-641 printer interface:
Uses extended port $19 (25) for (parallel) input and output.
Uses an internal 128-byte buffer.
Can accept a new character every 200,000th of a second (5 µsecs).
Once the internal buffer fills, or a CR is received by the printer, it
prints (and empties) the entire buffer.
While printing is in progress, the high bit of the input extended port
$19 (25) is low. It is high while idle.
To convert from ASCII to EUY format:
output = (input & 0x1F)
| ((input & 0x60) << 1);
output = ^output;
ASCII | EUY |
$00..$1F | $00..$1F |
$20..$3F | $40..$5F |
$40..$5F | $80..$9F |
$60..$7F | $C0..$DF |
$80..$9F | $00..$1F |
$A0..$BF | $40..$5F |
$C0..$DF | $80..$9F |
$E0..$FF | $C0..$DF |
Eg. 'A' would be $41 in ASCII format or $81 in EUY format.
The above table is before the one's complement (ie. flip all bits) operation.
Matsushita EUY-10E023LE printer model number can be decomposed as follows:
E = Electrosensitive
2 = 250mm flat cable, 372mm connector cable
3 = 32/21/16 cpl with 2 spacing dots (horizontally between each character)
L = left-to-right scanning, MSD character generator
E = manufacturer code
Unarchived Software
The following are confirmed but unavailable:
C-BUG, MultiBug, MATBUG, SBCBUG, etc.
"the program supplied with the PROM Programmer article (Jan 1979)"
(what article? which magazine?).
If you know of any other software, or have dumps/tapes/listings of any of the above software, please email us.
BINBUG Hardware
The FPGA640 + TCT PCG are mapped as follows:
Region | Description |
$7000..$700F | 1st..16th rows of UDG #0 imagery |
$7010..$701F | 1st..16th rows of UDG #1 imagery |
... | ... |
$77F0..$77FF | 1st..16th rows of UDG #127 imagery |
$7800..$783F | Contents and inverse video of 1st character row (1st..64th columns):
Bit 7: inverse video (0=off, 1=on) Bits 6..0: character ($00..$7F) |
$7840..$787F | Contents and inverse video of 2nd character row (1st..64th columns) |
... | ... |
$7BC0..$7BFF | Contents and inverse video of 16th character row (1st..64th columns) |
$7C00..$7C3F | Colours and attributes of 1st character row (1st..64th columns):
Bit 7: red (0=off, 1=on) Bit 6: green (0=off, 1=on) Bit 5: blue (0=off, 1=on) Bits 4..3: unused Bit 2: 0=PDG (Pre-Defined Graphic), 1=UDG (User-Defined Graphic) Bit 1: graphics (0=off, 1=on) Bit 0: flash (0=off, 1=on) |
$7C40..$7C7F | Colours and attributes of 2nd character row (1st..64th columns) |
... | ... |
$7FC0..$7FFF | Colours and attributes of 16th character row (1st..64th columns) |
To read the joystick buttons, you REDE from port $09. Bits are:
Bits 7..6: unused
Bits 5..3: switch bits for joystick A:
Switch '1' = %000 (fire/serve)
Switch '2' = %001
Switch '3' = %010
Switch '4' = %011
Switch '5' = %100
Switch '6' = %101
Switch '7' = %110
Nothing = %111
Bits 2..0: switch bits for joystick B (same format as for joystick A)
To read the joystick paddles, first WRTE a value of $00..$07 to port $EF, according to what you want to read:
Channel '1' (%000): 2nd joystick horizontal
Channel '2' (%001): 2nd joystick vertical
Channel '3' (%010): 1st joystick horizontal
Channel '4' (%011): 1st joystick vertical
Channel '5' (%100): 3rd joystick horizontal
Channel '6' (%101): 3rd joystick vertical
Channel '7' (%110): 4th joystick horizontal
Channel '8' (%111): 4th joystick vertical
Now REDE from port $EF in a loop until the MSB is low (ie. until something
in the $00..$7F range is returned).
The X-axis is inverted, ie. $00=right..$7F=left.
The Y-axis is normal, ie. $00=up..$7F=down.
BINBUG BIOS
The following routines are cross-compatible between PIPBUG 1 and BINBUG:
Address | Label |
$1D | EBUG |
$5B | LINE |
$8A | CRLF |
$A4 | STRT |
$269 | BOUT |
$27D | AGAP |
$286 | CHIN |
$2B4 | COUT |
$2DB | GNUM |
The following routines have the same names, and roughly equivalent functionality, under both PIPBUG 1 and BINBUG; however, they have different addresses and therefore are not directly cross-compatible. They may also have different register usage, stack usage, side effects, etc.:
PIPBUG 1 | BINBUG | Label |
$1F | $22 | MBUG |
$AB | $B9 | ALTE |
$F4 | $F1 | SREG |
$131 | $121 | GOTO |
$160 | $14A | BK01 |
$1AB | $17B | CLBK |
$1CA | $197 | CLR |
$1E5 | $1A1 | BKPT |
$246 | $28C | LKUP |
$2A8 | $39B | DLAY |
$2AD | $39F | DLY |
$310 | $2E5 | DUMP |
$35B | $27B | FORM |
$35F | $2FB | GAP |
$3B5 | $3C4 | LOAD |
Here is a useful table comparing various BIOSes for these machines. As there is insufficient information regarding C-BUG, SBCBUG, etc. they are not listed:
OS | Input baud | Output baud | Tape baud | MHz | Range | Year | Notes |
PIPBUG 1 | 110 | 110 | 110 | 1 | $0..$3FF | ? | EA 300 baud mod is possible |
PIPBUG 2 | 110/300 | 110/300 | 110/300? | 1 | $0..$3FF | ? | Supports both rates |
HYBUG | 300 | 300 | High-speed | 1 | ? | ? | 600 and 1200 baud mods are possible |
BINBUG 3.5 | 300/parallel? | DG640 | 300 | 1? | $0..$7FF | ? | - |
BINBUG 3.6 | 300/parallel? | DG640 | 300 | 1 | $0..$7FF | 1979 | BINBUG3.6.pdf |
BINBUG 4.4 | 300 | DG640 | ACOS | 1? | $0..$7FF | ? | Supports ACOS and DOS |
BINBUG 4.5 | ? | DG640 | ACOS | 1? | $0..$7FF | ? | Supports ACOS and DOS |
BINBUG 5.2 | 1200 | 1200 | ACOS | 1? | $0..$7FF | ? | Supports ACOS and DOS |
BINBUG 5.3 | ? | serial | ACOS | ? | $0..$7FF | ? | - |
BINBUG 6.0 | Eurocard | Eurocard | ACOS | ? | $0..$7FF | ? | - |
BINBUG 6.1 | 150?/300/1200/2400/parallel | DG640 | ACOS | ? | $0..$7FF | 1982 | sbcos_manual.pdf . Supports ACOS and VHSDOS |
BINBUG 7.1 | 300/1200/2400/parallel | 300/1200/2400 | ACOS | ? | $0..$7FF | 1982 | sbcos_manual.pdf . Supports ACOS and VHSDOS |
GBUG | 300 | DG640 | ? | 1/2 | $0..$7FF | ? | Optional parallel keyboard support |
MATBUG 4.1 | Eurocard | DG640 | ? | ? | $0..$7FF | ? | matbug_monitor_for_eurocard_system_notes.pdf |
MIKEBUG 3 | 300 | DG640 | ? | 1? | $0..$7FF | ? | - |
Multibug (serial version) | 300 | 300 | 300 | ? | $0..$7FF | 1981 | ETI-685 |
Multibug (memory-mapped version) | parallel | DG640 | 300 | ? | $0..$7FF | 1981 | ETI-685 |
MYBUG | 300 | DG640 | ? | 1? | $0..$7FF | ? | - |
ACOS 2.C | - | - | Control & data I/O ports | 1? | $6000..$63FF | ? | - |
ACOS 3.C | - | - | Extended I/O ports? | 1? | $6000..$63FF | ? | - |
ACOS 3.E | - | - | Extended I/O ports | 1 | $6000..$63FF | 1982 | sbcos_manual.pdf |
VHSDOS 2.6a | - | - | - | 1? | $6800..$6FFF | 1981 | vhs_dos_v26a_source_listing.pdf |
MicroDOS 4.5a | - | - | - | 1? | $6800..$6FFF | ? | MICRODOS.SRC |
Baud rates given assume 1 MHz operation (and are therefore doubled at 2 MHz).
BINBUG outputs both to the serial port (at 300 baud) and to the VDU (1K RAM at $7800..$7FFF).
According to ETI Oct 1982, BINBUG can work at 300, 1200 & 2400 baud (!).
SBCOS = SBCBUG = BINBUG 6.1 + BINBUG 7.1 + ACOS 3.E
BINBUG 6.1 & 7.1 support/expect ETI-685 processor board.
Floppy Disk I/O
Each block is 256 bytes, as follows:
0: next track (0..39).
1: next sector (1..10).
2..255: data bytes
CMD files are used by VHSDOS and MicroDOS for storage of games. They normally consist of two or more chunks concatenated together. Each chunk has a 3-byte header:
0..1: load address of chunk (big-endian)
2: length of payload in bytes (normally <= $FB)
then the payload itself (if any) follows.
The CMD file is terminated by a chunk like this:
0..1: start address of game (big-endian)
2: $00
with no payload.
CMD chunks can seamlessly cross block boundaries.
Note that the above assumes that the block header (ie. "next track" and
"next sector" bytes) have already been skipped.
The 10 sectors per track are numbered 1..10 and have an interleave of 7, ie.
1, 8, 5, 2, 9, 6, 3, 10, 7, 4. (The available disk images are already deinterleaved.)
At the flux level, there are 250,000 flux transitions per second.
Each bit is 1 clock flux + 1 data flux, so there are 125,000 bits per sec.
So theoretically 15,625 bytes per sec, if there were no sector headers,
inter-sector gaps, etc.
However, post-read processing must occur, so we can only really achieve
1/8th of that speed (hence the interleaving). Thus, an effective speed of
12,800 bytes ÷ 8 = 1,600 bytes per second.
After each 20 msec sector read, there is about 140 msec of post-processing
as the disk continues to spin. But the CPU has to keep up with the
drive as it reads each byte, because the drive has no buffer. Therefore most
of the time the CPU is not bothering to read the data passing under the head,
but is instead post-processing previously read data.
With an infinitely fast disk, it takes about 30,642 clocks. ie. about
30.642 msec, between reading an arbitrary byte in a given sector and
reading the equivalent byte in the next sector.
It also takes additional time to change tracks, and to start or stop the
motor.
Game Help
These do nothing very useful, but are not expected to (eg. they are for controlling unemulated hardware, or are code fragments for incorporation into your own games):
2708 EPROM Programmer
Linearization (Linearisatie)
Vector Magnetometer
Wind Furnace Controller
most routines
These games are hardcoded for 110 baud:
On-screen Clock
PPI-based EPROM Programmer
110 baud version of Lunar Lander (machine code)
110 baud version of Biorhythms
110 baud version of Funny Farm Races
These games are hardcoded for 300 baud:
Astro Trek (but an official 110 baud patch is provided with the listing)
Reaction Timer
300 baud version of Lunar Lander (machine code)
300 baud version of Biorhythms
300 baud version of Funny Farm Races
2650 Line Assembler:
"It is not identical but is very similar to the Line Assembler described in the article "2650 mini assembler simplifies programming" by Jamieson Rowe published in the April 1979 issue of Electronics Australia (p. 76-80) and the follow-up article "Improving the 2650 mini line assembler" by A. M. Kollosche in February 1980 (p. 76)." - Chris Burrows.
The start address begin at 2, and increments by 2 every time F5 (reset) is pressed, for some reason.
2650 Micro BASIC programs (eg. Acey-Deucy, Blackjack, Guessing Game (Micro BASIC version), Life (Micro BASIC version), Lunar Lander (Micro BASIC version), Number Game, Radio Log, Temperature Conversion):
Type G1 and then press ENTER to begin execution.
Alien Hunt:
Has ! and " at end of table rows, for some reason.
Assembler, AssemblerPlusDemonstration, AssemblerPlusAssemblerList:
AssemblerPlusDemonstration.pgm will assemble without errors, but the generated machine code is not being written to memory anywhere (we are asking in this case for ORG $2000, but it doesn't seem to matter where we ask for, it is never generated anywhere). Hence, the current dump of Assembler.pgm should be considered suspect (although it has been verified). As the other two are based on that dump, they are likewise suspect.
Binary Floating Point Routines (Application Note AS57):
The program's prompt is corrupt (maybe the emulated teletype is not ready
for it).
Each pair of hex digits is not shown until it has been completely input.
The spaces around operators are added automatically by the program rather
than by the user.
The start address determines the rounding mode, as follows:
G6A6 will run with rounding.
G6AA will run without rounding.
Give 8 hex digits, then an operator, then another 8 hex digits, then =
Supported operators are +, -, * and : (which is division).
Biorhythm:
Dates are expected to be in dd/mm/yy format.
Invalid dates will cause the program to hang.
Bit Echo:
Prints flashing garbage after each letter, for some reason.
Cricket:
Doesn't randomize very well, for some reason.
DG640 Driver:
To get the flashing cursor, you need PIPBUG (not BINBUG).
ETI-685 Memory Tester:
This expects BINBUG 6.1. It is used as follows:
G440
where Funny Farm Races:
1. At the "PLAYER 1-" prompt:
2. For each additional player you want to add:
3. Press ENTER to begin.
4. For each player:
5. Watch the race and then press ENTER.
6. Go to 4.
Furnace:
This program requires extra hardware (eg. various motors), which is not
emulated by Ami/WinPIPBUG. Although it will load and run, it will
not do anything useful on the emulators, and, intentionally, does not
produce output on the screen. Also, it expects a data table (starting at
!6000), which is not present.
Guessing Game (machine code version):
"When called, the program will wait until you enter any character. It will
then generate a random number between 1 and 99, which you must guess.
Starting address is $0440."
HexCal aka HexCalc:
Enter source address (2 hex digits).
Life-MachineCode:
"Life is a matrix game concerned with the life, death and birth of cells.
Imagine each cell to be in a two-dimensional linear matrix, such that each
cell location has eight possible neighbours, as shown:
The rules of cell life, death and birth are as follows:
1. A live cell will survive if it has two or three live neighbours.
To work with practical terminals the program operates with a limited size
matrix, but makes it effectively "infinite" by having "wrap around" from
side to side and from top to bottom.
and then switch to the appropriate baud rate (110 or 300 baud). Then
type a U for 110 baud operation, or a Y for 300 baud operation.
..O. GENERATION 2
.OO. GENERATION 3
.OO. GENERATION 4
.OO. GENERATION 5
One of the most interesting and simple patterns has been named the
"Glider". The seed for this is shown below:
If you are running Life at 1200 baud, it is better to use the autoprint
version, which prints out after every generation, and stops automatically
when the pattern stabilises.
For 110 baud, you just need to press U, as documented.
$C00..$C59: baud rate initialization routine?
LIFECOUT has the following side effects when called:
LIFECHIN has the following side effects when called:
Linearization (Linearisatie):
This program requires extra hardware, eg. light pen, which is not
supported by Ami/WinPIPBUG. Although it will load and run, it will
not do anything useful on the emulators, and, apparently intentionally,
does not produce output on the screen.
Lunar Lander (machine code version):
F = Fuel (out of 40)
The * is a graphical indicator of your distance from the surface.
Mastermind, Revised Mastermind:
You need to use Ctrl-L instead of ENTER after each line of input.
Maths Demonstration:
"This program provides the functions of a simple, 3-function calculator.
It will multiply, add or subtract two single digit decimal numbers. Normal
plus, minus and equals signs are used, with an asterisk symbol for
multiplication. Starts at $0440."
Note that the listing is self-contradictory (the
machine code bytes do not match the assembly source code).
SUBT:
MULT: // $48E
SUB1:
ZEND:
Memory Test:
You use the program as follows:
where <loops> is "01".."7F". ("80".."$FF" give infinite tests.)
Eg.:
If there is no resulting output other than linefeeds (just goes back to
the "*" prompt), this indicates success.
Z or S mean that cleared (zeroed) memory did not read back as $00.
The address of the error then follows the error code.
Message Editor:
"Upon being called, this program will give a prompt character, and await a
command character. Commands:
T allows a message to be entered
In text input mode, the DEL character acts as a destructive
backspace for correcting errors. To return to command mode, type an Esc.
MicroByte Adventure:
Due to its length, this has now been split off into a
separate document.
MicroWorld BASIC:
Note that this is *not* byte-for-byte identical to the official PIPBUG release
of MicroWorld BASIC, as evidenced by the fact that eg. the official BINBUG
patch (aka "personality module") for it will not work. The available dump
was originally for PIPBUG, then was ported to PHUNSY, then was ported back to
PIPBUG.
Mini-Disassembler:
You must type 6 consecutive hex digits. These are not echoed to the
screen (except that Ami/WinArcadia do this for you). The first 4
digits are the starting address (including any leading zeroes) and the
last 2 digits are the least significant byte of the ending address (the
most significant byte is always the same as that of the starting address).
Eg.:
will disassemble $440..$4FF.
To disassemble another region, type:
at the command prompt ("*"). If you get another "*", retry; otherwise,
now enter a new 6-digit address range.
Music:
"The "Music" program occupies locations $4A0 to $5D3, and uses PIPBUG
routines. It contains absolute addresses, and is not easily relocated. The
music is generated at the flag output of the 2650, and some form of audio
transducer is required. This can simply be an audio amplifier and speaker,
connected via a suitable attenuator, to the buffered flag output of the
CPU.
The last two parameters are optional. If they are not given, the program
will use the previous values. Thus, to play "Yankee Doodle", type:
and for "Bach", type:
These print garbage while playing, for some reason.
For the purposes of the above table, each "octave" is assumed to begin at
E.
Nim:
"The game of Nim: starting with 23 you and the program take turns at
subtracting a number from 1 to 3. The one that leaves 1 after their move
wins. Starting address is $0440."
Number Game:
The ! prompt means to hit ENTER (it presumably uses this user-dependant
delay for randomization).
On Screen Clock:
The original published version has a bug at $505 ($00 should be $0C).
There is a fixed version in the Games Pack.
This program needs the starting time to be poked into memory and registers
before execution.
Pause the machine and then set the time like this before starting at $500:
When the time reaches 13:00, it will reset back to 01:00.
Othello (Reversi) 2.0:
Input must be in Y,X (row,col) format.
Printer Routines, Trace Routine:
Of course, the provided binaries do nothing (ie. do not "work") by
themselves, as they are only subroutines. See the relevant magazine
articles for more information about how to use them in your own programs.
Reaction Timer:
You have to react when the cursor is in the leftmost column.
Relative Address Calculator:
Enter the 1st address (4 hex digits).
Relative Branch Calculator:
Enter source address (4 hex digits).
Rotate:
"The computer generates a 4*4 array of the first 16 letters of the
alphabet, arranged in a random order. The object of the game is to
rearrange the array into the following form:
The array can only be rearranged by rotating [2*2] blocks of four letters
clockwise. The block to be rotated is specified by the letter in its top
left hand corner. It is invalid to try to rotate by calling letters on
either the bottom row or the right hand column of the array.
and the computer will respond with "PRESS ANY KEY". Once this has been
done, a random pattern will be generated and printed, and the prompt
message "ROTATE:" given.
PRESS ANY KEY
OJMD
ROTATE: F
OJMD
ROTATE: N
OJMD
ROTATE: N
OJMD
ROTATE: F
OJMD
ROTATE: EXCHANGE: L,M
OJLD
ROTATE: P
OJLD
ROTATE: M
OJLD
ROTATE: CANCEL
OJLD
ROTATE: G
OJLD
ROTATE: YOU TOOK 07 MOVES If you wish to rotate a particular block, type the letter in the top left
hand corner of that block. If you wish to cancel a move, type carriage
return, and the program will respond with "CANCEL", and then reprint the
last but one block.
RYTMON:
This program does not echo your input to the screen.
Solitaire:
This game expects a display with more than 16 rows. The SVT-100 terminal
which is emulated by Ami/WinArcadia is only one of the output devices that
could be hooked up to a real PIPBUG machine. The game was probably
designed for a teletype. We suggest using the "Log|Echo I/O to console?"
option.
Star Shoot:
The objective is to reach the end configuration shown below in as few
moves as possible, by shooting stars. Each move consists of a digit 1-9
corresponding to the position of the star to shoot:
The only valid first move is 5. Shots have these results:
. means the star becomes a dot
Time:
This program uses cycle counting techniques. Under Ami/WinArcadia 8.41,
it appears to run too fast (ie. the "game" time goes faster
than the emulator time).
Vector Magnetometer:
This program expects extra input (eg. various sensors) and output (eg.
pitch and roll indicators) hardware, which is not supported by
Ami/WinPIPBUG. (The LED display, used for output of heading data, is
supported.) Although it will load and run, it will not do anything useful
on the emulators, and, intentionally, does not produce output on the main
screen (only via the LED display).
Signetics Instructor 50
This machine is a "microprocessor development board" aka "trainer".
I/O Devices
The 28-key keyboard is as follows:
MON, RST and ENT NXT are white on orange. All other keys are white on
blue. There are no paddles.
8-digit 8-segment LED display (red on black):
Each of the 8 digits is divided into 8 segments, as shown:
+0+ The + don't really exist, therefore it is really like this:
5 1
+6+ 0
4 2 5 1
+3+ 7 6
4 2
3 7
Eg. the bottom segment is controlled by bit 3 (so, $08 would set it, $00
would clear it).
The display is controllable at the segment level (ie. you can get 256
combinations) via direct hardware access (ie. bypassing USE BIOS functions
and using the WRTE instruction), using the bit numbers listed above.
"PARALLEL I/O" section, consisting of:
8 glow LEDs ("7".."0");
In NON-EXTENDED I/O mode:
REDD,rn to read from the toggle switches
In EXTENDED I/O mode:
REDE,rn $07 to read from the toggle switches
In MEMORY MAPPED I/O mode:
LODA,rn $0FFF to read from the toggle switches
"RUN" glow LED:
"It appears to be on all the time. It is on in monitor
mode, during stepping, and remains on at breakpoints. It will turn off
after the processor executes a HALT ($40) instruction. It won't turn
back on again until you hit MON, RST, in that order. You can't just
break back into monitor mode after hitting a HALT instruction. Hitting
MON, RST somehow brings the machine back to life and into monitor mode;
otherwise the machine is dark." - Tyler Whitney.
"FLAG" glow LED, showing the state of the Flag pin of the CPU.
"INTERRUPT" toggle switch: "DIRECT" or "INDIRECT":
When an interrupt is generated/received, the Instructor 50
writes $07 or $87 to the data bus, depending on the position of the
DIRECT/INDIRECT INTERRUPT switch. Then it does a ZBSR $07 or ZBSR *$07, as
appropriate.
"INTERRUPT SELECTOR" jumper (on underside of machine):
"A.C. LINE" (ie. 50Hz) or
S-100 bus (at rear) (not emulated).
"CASSETTE" jacks: "PHONE" and "MIC":
The cassette subsystem is somewhat like that of the Elektor TV Games
Computer, but uses 6 pulses for a "0" and 3 pulses for a "1", except that
3 extra pulses are appended to the last bit of each byte (giving 6+3=9
pulses for a "0" or 3+3=6 pulses for a "1").
USE BIOS
USE is an acronym for "User System Executive".
"When in Monitor mode, pressing anything on the hex keypad generates
Error 2 on the real machine. On the control keypad, you can hit most keys
with impunity. Hitting STEP while in monitor mode generates Error 9 on the
real machine." - Tyler Whitney.
The USRDSP (USeR DiSPlay) command is used as follows:
R0: Return code.
Note the trailing dots for "b." and "d.".
Game Help
Beat the Odds:
You can make a bet on any of the following results:
Note that in the table above, the bet "6..8 lamps lit" is listed twice, with different odds. This is authentic to the original Signetics documentation.
This game is intended to be played by multiple humans using real money.
One player would act as the "house" (ie. banker/dealer) and call for bets, take and record wagers, operate the computer, and pay winners according to the above odds.
The computer is used merely as a randomizer. There is no logic in the game for showing odds, taking bets, ascertaining winners, paying winners, etc.
Dice with Display:
The rightmost parallel I/O switch (bit 0) needs to be on, otherwise
the 7-segment LED digit area of the display will never change.
Game of Memories:
This is a Game of Life according to the rules from John
Horton Conway. It was written for the Ami/WinInstructor emulator.
The particularity of Game of Memories is that the field for the Game of Life is laid out
in a 16*16 byte grid storage area that the emulator can graphically represent and so the view can be resembled - whereby the
name of the program: Game of Memories.
When the progam is loaded into WinArcadia, the field is still not seen.
"Tools|Memory editor..." must be invoked. The field is in the memory bank
$0E00..$0EFF. You should set "Region" to that memory region, and "View as" to "Characters".
The original listing has an error in byte $125:
which causes an infinite loop. It should instead be:
The version in the Games Pack incorporates this fix.
Train:
Train components are:
Signetics TWIN The resident (non-overlay) part of SDOS contains:
job dispatcher
The master CPU runs DOS and handles all I/O (keyboard, CRT, floppies, etc.).
The slave CPU merely runs programs in its own memory, and asks the master
to perform I/O for it via service requests (and, of course,
can access prototype hardware, depending on which mode is in use).
To switch from master to slave, the master just executes a HALT instruction.
To switch from slave to master, any master interrupt (but not slave
interrupt) can be used. Eg. timer/keyboard/etc. interrupts and Service
Requests.
The master CPU has 16 interrupt priority levels. Master CPU interrupt handlers start at $0000 of master RAM and go up by 2 per entry.
The slave CPU has 8 interrupt priority levels. Slave CPU interrupt handlers start at $0000 of slave RAM and go up by 2 per entry.
Interrupt priorities 1 and 3 are used for master and slave RAM parity errors, respectively.
Lower priority numbers represent "higher" (more important) priorities.
Note that, in MOD headers, the destination base address specified by the Set Base
command start is always as viewed from the master CPU, even when loading
into slave RAM (as the loading as always done by the master CPU).
Errata: On page 1-17 of the Tektronix 8002A Service Manual, ITD should be OTD. Thus, to read a sector the steps are:
1. Go RST mode. Check disk status.
SDOS supports these formats:
"Hex" - Appendix C (AOF)
Here are the contents of the various "DOS areas" aka "bootblocks" (tracks 1..4) of the disks:
word_star_work_disk.img is only 311,296 bytes (missing the first track?).
TOS 1.0 asks for the current date and time on boot. If those are
entered, the timer is enabled.
I/O Ports
For reads:
For writes:
Central Data 2650 "Product: 2650 Single Board Computer
A typical configuration is:
Central Data 2650 computer (including CUTS cassette interface)
$1000..$103F: "In the first CD2650 Newsletter, April 1978, Jeff Roloff
says: '...if you get hold of some slow RAM for use in the display section,
the first four characters will be illegible because of timing problems.'
If the RAM was fast enough for the rest of the display it would be fast
enough at the beginning. I suspect that he had problems with resetting his
counters which made the first character spaces too narrow. I remember
designing a frequency synthesiser with 74 series ICs where the downcounter
had to start resetting at count 3 to be ready at count 0!" - Richard
Rogers.
The layout of display RAM is unusual:
To access a given cell, the formula is:
where x is 0..79 and y is 0..15.
Characters $00..$3F use the 1st character generator PROM. They are the uppercase alphabetic characters, numeric characters and punctuation characters.
Red is non-chessmen ("lowercase") character set.
Supervisor BIOS
A period (.) indicates that the supervisor program is ready for a command.
A: Alter or display memory
B: Set a breakpoint address
The registers and memory can now be examined as you see fit. After
the breakpoint has been executed, it is cleared and the program will be
allowed to run past the point next time through.
C: Clear a breakpoint address
E: Execute a program
I: Inspect CPU registers
The microcomputer will then display the data that was in this register
just before the program returned to the supervisor. You now have three
options:
There are also the D, L, R and V commands, which are used for tape
operations.
The available scan of the supervisor is poor; the following bytes could
conceivably be wrong:
The following unnamed variables are used by the supervisor:
The WCHR routine masks its character to the $00..$3F range (ie. it
prints everything as uppercase).
Ideally, full autodocs for the supervisor (and for the BIOSes of the TVGC,
PIPBUG and the SI50) would be available, eg.:
WRAD:
Unarchived Software
The following are confirmed but unavailable:
Spacewar (clone of "Scelbi's Galaxy Game for the 8008/8080"), by Roger Miskowicz
If you know of any other software, or have dumps/tapes/listings of any of
the above software, please
email
us.
Game Help
8KBASIC.pgm:
To start a game: press R (twice) then ENTER.
In editor (at COMMAND prompt):
In BASIC (at OPTION prompt):
The interpreter doesn't like blank lines (gives ARG ERROR),
but an empty comment (* only) is acceptable.
A normal floating point variable is 8..22 bytes:
1 byte for type ($0x)
A floating point array is 4+ bytes:
1 byte for type ($4x)
A string is 5..274 bytes:
1 byte for type ($8x)
Here is a summary of the differences between V1.0 and V1.3 of 8K BASIC
(all values in hex):
The handwritten annotations on the listing are generally transcriptions of
the V1.3 changes.
The following problems are hereby noted. This suggests there are bad
bytes in the current 8K BASIC dumps (even though they have been verified)
(and therefore also BASIC games), and therefore these dumps should all be
regarded as suspect. Or possibly (although very unlikely) even some bug in
the emulator's CPU core:
all values below 0.8 (eg. 0.799999) cause an OVerFlow error.
- (subtraction) operator: gives wrong results (3-2=9 apparently!).
^ (power of) operator: gives wrong results (3^2=16,330.57 apparently!).
COS function: bytes $3D90..$3D91 (in COS routine) are ambiguous (due
to a poor quality printout/photocopy). But logically they would be $06 $04 (LODI,r2 4).
Numbers are stored thus:
Bit 31 is the sign of the exponent (0=positive, 1=negative).
The integer part is obtained thus:
The mantissa will be shifted right by 23..0 bits, respectively,
for stored exponent of 0..23, to obtain the integer part.
The fractional part is obtained thus:
Mask out the leftmost bits of the mantissa (1..24 of them,
respectively, for stored exponent of 0..23).
12KBASIC-A.aof, 12KBASIC-B.aof:
It obeys one-letter commands of the form Xn, where X tells it
what to do and n is the line number (or number of lines?).
It only needs line numbers as GOTO (and GOSUB, etc.) destinations.
12KBASIC-A.aof was probably typed in by me from the listing.
Need to compare with 12KBASIC-B, which may have been modified for PHUNSY
or PoP, as there are 982 differences (4%) between them.
ALP.bin:
Neither of these has been typed in by me from the listing.
Need to verify these dumps against the listing and compare with each
other. One or both may have been modified for PHUNSY or PoP, as there
are 831 differences (4%) between them.
AntennaComputer.bin:
This is a good dump, as regards the actual antenna
computer program. The accompanying BASIC interpreter is why it is marked
as a suspect dump. Overflows are very easy to generate, eg. attempting a
LOOP of 1000 MHz.
Backup.aof:
This program appears to be incomplete. Eg. execution flows
beyond the listing into $15C3, it expects a TAPe OUT subroutine at $15C7
and a CLear SCReen subroutine at $1602. There is probably another
unscanned page to this listing.
Bootstrap.aof:
Might be the same as the IPL; needs reinvestigation.
Chess3.aof:
This does not appear to have been correctly ported to the CD2650. Eg.
the KBIN function of the BIOS will echo the keystroke, but the game itself
also echoes the keystroke, resulting in double echoing.
Also note that it swallows (ignores) the first keypress after booting
(although it might use the timing of that keypress for randomization or
similar purposes).
DOS.aof:
Got a "NOT READY" error, presumably due to incomplete disk
emulation. Needs reinvestigation.
Editor/Assembler:
Commands are similar to the 12K BASIC editor, except:
G: goes to the supervisor
Hamurabi.aof:
This is probably a good dump, as regards the actual game.
The accompanying BASIC interpreter is why it is marked
as a suspect dump. Overflows are very easy to generate, eg. at line 1780.
Input.aof:
This program is similar in purpose to TVTypewriter.aof except
that it supports both uppercase and lowercase I/O.
Life.aof:
Move around the screen with U/D/L/R for up/down/left/right.
Use O (not 0) to set cells (they will appear as small o characters or as
squares, depending on VDU setting) and the spacebar to clear them. To
begin the simulation, move (with D key) the cursor to the bottom row of
the screen. Never move the cursor above the top of the screen.
LunarLander.aof:
Here is the disassembly of the machine code routine:
MemoryTest.aof:
The provided dump tests the RAM at $2000..$7FFF. The
normal result of running this program is no output (ie. success). The byte
at $1512 is the high byte of the starting address. The low byte of the
starting address is always $00. The byte at $1513 is the high byte of the
(ending address + 1). The low byte of the ending address is always $FF.
Therefore, you must test $xx00..yyFF (a multiple of 256 bytes, aligned at
a 256-byte boundary). Eg. storing $80 at $1513 gives an ending address of
$7FFF, and storing $48 there would give an ending address of $47FF. Ie.
If you want to see error messages, you could change $1512 to $00 and $1513
to $80, to test $0000..$07FF (which is ROM and therefore fails the test).
Output will loop until a key is pressed. Memory is tested destructively.
Therefore, you must not test the $1510..$15A8 area, otherwise you will
overwrite the program. Contrary to what is stated in the instructions, the
are where the program is located ($1510..$15A8) is normal (ie. non-
display) user RAM, not display RAM.
MorseCode.aof:
This program lacks documentation. It might be originally
designed to be interactive rather than to use stored text.
NumbersGame.aof:
INT seems to round to the nearest integer, rather than
just dropping the fractional part. Therefore, "digits" range in value from
1..12.
Pattern.aof:
"The program has been typed into SCREENs 5 and 6. LOAD does
not work unless LIST has been used first." - Richard Rogers. To run this
program, type the following:
You can change the 123 to a different number; it controls the number of
blobs to write.
ScreenPrinter.aof:
This program refers to (external) printer routines at
$4000 and $4147.
TVTypewriter.aof:
This program seems to expect the address of KBIN to be
$309. However, the correct address is $30F. This change has been made to
the available dump. Also, the screen is filled with $00 ("@" symbol). This
may be authentic.
PHUNSY
PHUNSY means [Frank] PHilipse UNiversal SYstem.
Banks are:
U0: RAM
To run a BASIC game (after loading it):
To make BASIC usable (after loading it):
To use the label program:
There are various versions of the PHUNSY monitor:
PMON0400.BIN is 04-0 from 1982 (as used in Ami/WinArcadia)
Control port (ie. WRTC operand):
IOAD is the WRTZV pointer: normally $7AB (SROUT)
SERIN waits for a key to be pressed, then returns it. Its pseudocode is:
CHINP returns a key if one is currently being pressed, otherwise it
returns $7F (DEL). Its pseudocode is:
KEYIN waits for a key to be pressed, then returns it. Its pseudocode is:
Mini-PHUNSY
The 24-key keyboard is as follows:
which in the emulator is (by default):
Cas = Cassette
Output is 6 7-segment digits and 7 decimal points, as follows:
The first decimal point is always lit. The second to seventh are lit when IOPORT($13) is 1..6, respectively.
Game Help
These PHUNSY BINs are compatible with Ami/WinPHUNSY:
50-THEME
These dumps are incompatible, problematic or otherwise unusable:
300-BAUD
The reasons are various, eg.:
the program is accessing unemulated hardware (eg. SER-I/O);
Translations of game names:
Ravensburger Selbstbaucomputer "Selbstbaucomputer" translates to "Self-built computer".
The subsystems of this system are:
The system could also be operated without any monitor!
With this mode, you enter your code with a binary address switch and
data switch in single step mode ;-)
You start at address $0.
After entering your program, you could run it at 1 Hz or 1 MHz, or
stay in single step mode.
From the games book (autotranslated from German):
"At the beginning of all programs is the hardware used.
"Basic version" means: CPU, data and address input and output,
RAM memory and port module, without EPROM and without keyboard and
display unit. In these cases is the switch on the memory card in
Position "1" to bring so that the RAM area begins at address $0000.
If you have the keyboard and display unit use the switch
on the memory card in position "2" standing, so that the EPROM is at
the beginning of the addressing area.
Then you can use the data and address input and output units from
detach from the bus plate. You can but also leave them connected. In
the case need the data switch
There in position DAFLOT and the
Address switch Adr in position ADFLOT
standing, otherwise nothing works.
These two construction stages are of use to you
then if you have a program in
Single-STEP or single-CLOCK
clock through then the switch must
STEP-RUN on the keyboard in
stand in the STEP position so that the
seven-segment displays in case of her
activation not be overloaded.
You can then observe the program progress
on the data and observe address input and output."
The 24-key keyboard is as follows:
By default, these are mapped to the following host keys (on Ami/WinSelbstbaucomputer):
Diode colours are:
Monitor BIOS
V0.9 BIOS functions:
Note that byte $673 of the V0.9 BIOS is not listed in the PDF. Its correct value has been ascertained to be $82.
V2.0 BIOS functions:
Monitor commands are:
Alter
Game Help
These programs are contained in the "2650 Programme.pdf" book:
DecCalculation.aof:
The entire program is as follows:
GDEZ:
Dice.bin:
This shows the number in binary on the glow LEDs; ie:
DiceGame.bin:
The entire program is as follows:
SUMME:
RANDOM:
LottoNumbers.aof:
The entire program is as follows:
RANDOM:
$830 is the number that has just been drawn (1..49).
The randomizer constantly cycles through 1..49 and stops as soon as the Sense bit changes.
Morse Code Practice:
The data table is as follows:
MIKIT 2650 Both versions support keypad input and LED output.
The 8 glow LEDs controlled by writing to the Control port (WRTC).
The 24-key keyboard is as follows:
BLANK = ?
By default, these are mapped to the following host keys (on Ami/WinMIKIT):
Game Help
Stufenzaehler (Program 5):
The entire program is as follows:
Ein- und Aus-Schaltbare Blinklampe (Program 7):
The entire program is as follows:
Elektronischer Würfel (Program 8):
The entire program is as follows:
Reaktionzeittest (Program 12):
Press any key to begin.
Codiertes Schloss (Program 13):
You have to press three keys in succession within limited times.
Coin-ops Malzak
malzak.1 (containing tile imagery) is not accessible to the CPU,
nor is the teletext character imagery. Both are identical
between Malzak 1 and Malzak 2.
For Malzak 2, if *($14CC) is $00 (ie. test switch is at position 4), the
game will enter test mode when booting. When it enters test mode, it
clears the settings first.
Input devices are:
8-way digital joystick
Input bits are:
Bit 7: up (active high)
Maps of Malzak 1 and 2 are available in the Maps Pack at
http://amigan.yatho.com/maps.rar.
When you run out of fuel, your ship falls out of the sky, but your
exhaust continues to burn and does not fall. This is probably authentic.
Astro Wars & Galaxia
In Astro Wars, the yellow sprites are meteors, not bullets; this
explains why they do not emanate from the enemy ships.
Laser Battle & Lazarian
Extended I/O port $02 is multiplexed among four inputs. The games write
to extended I/O port $06 to control which input is selected. The input
ports are (all active low):
Zaccaria Pinball for Android
Here is how to run the latest version of Zaccaria Pinball (on Android
4.4+), with all tables. Unfortunately an internet connection is required
during play and there is only one ball (man/life) per game.
1. Go to https://d.apkpure.com/b/XAPK/hu.magicpixel.Zaccaria?versionCode=25
which will download Zaccaria Pinball_4.0.3_APKPure.apkx
(1,049,698,248 bytes).
2. Rename Zaccaria Pinball_4.0.3_APKPure.apkx
as Zaccaria Pinball_4.0.3_APKPure.zip
3. Extract this ZIP.
4. Make a new directory (folder):
Internal storage/Android/obb/hu.magicpixel.Zaccaria
5. Move main.25.hu.magicpixel.Zaccaria.obb
from wherever it was unZIPped to (typically Downloads), to
Internal storage/Android/obb/hu.magicpixel.Zaccaria
6. Install hu.magicpixel.Zaccaria.apk as normal (by clicking on it).
Zaccaria Pinball for Switch
Here is how to emulate the Switch version of Zaccaria Pinball on 64-bit Windows 11 (at least), with all tables.
Unfortunately the emulator crashes a lot, so perhaps an alternative
emulator should be used instead (but Yuzu EA 4176 has similar issues).
1. Download the emulator + keys + firmware package:
Nintendo Switch Emulator ryujinx 1.1.1403 win x64.torrent
.
2. Extract ryujinx-1.1.1403-win_x64.rar to eg. C:\EMULATORS .
3. Extract prod.keys and title.keys from Prodkeys.net_v19.0.0.zip to
C:\Users\username\AppData\Roaming\Ryujinx\system
, replacing username with your username.
4. Make a directory C:\EMULATORS\ryujinx-1.1.1403-win_x64\BIOS
and extract all files from Firmware 19.0.0.zip to there.
5. Download Zaccaria Pinball [010092400A678000]+[v1.0.4+72DLC][US]_Patched.xci.rar (1,370,161,805 bytes)
from https://send.cm/u79fqcimms2j.
6. Make a directory C:\EMULATORS\ryujinx-1.1.1403-win_x64\GAMES
and extract
Zaccaria Pinball [010092400A678000]+[v1.0.4+72DLC][US](nsw2u)_Patched.xci
into it.
7. Click "Options|Settings...|User Interface|Game Directories|Add...",
choose C:\EMULATORS\ryujinx-1.1.1403-win_x64\GAMES and click OK.
8. Right-click the Zaccaria Pinball icon, click "Manage Title Updates",
click "Bundled: Version 1.0.4", click "Save".
9. Right-click the Zaccaria Pinball icon, click "Manage DLC",
click "Enable All", click "Save".
10. Double-click the Zaccaria Pinball icon to run the game.
Pull the plunger back and release to launch the ball.
Click the left or right side of the screen to operate the appropriate flipper.
Zaccaria Pinball for Windows
Here is how to run the latest version of Zaccaria Pinball (on Windows
7/8/8.1/10/11), which otherwise would require Steam, without DRM and with
all tables:
1. Download Zaccaria_Pinball_v20220905_Steam_RiP from
https://filecrypt.cc/Container/066D918234.html .
2. Download Zaccaria_Pinball_v20220905_Cracks_Only from
https://filecrypt.cc/Container/C2CFA101D4.html .
3. Optionally, you can create a desktop shortcut as follows:
4. If you want a better icon for the shortcut:
5. At this point, you may be able to run SmartSteamLoader.exe to launch
the game. If this does not work, undertake the below steps as necessary.
6. If you get errors about missing MSVCP100.dll and/or MSVCR100.dll files,
or error 0xc000007b, you need either of these (your choice):
7. If you get errors about missing OpenAL32.dll, you need OpenAL.
Links were valid as at January 2023. The support thread is at
https://cs.rin.ru/forum/viewtopic.php?f=10&t=72437&e=0.
If any links are no longer working, please advise; we have copies of all
files archived.
These 16 tables have an annoying time-limited bonus ball:
Black Belt
These 11 games don't have the time-limited bonus ball:
Fire Mountain
Multiplatform Comparative Tables
* The 4.73 MHz (approx.) version of the Central Data 2650 operates at 1200 instead of 300 baud.
Speed = bytes per sector * sectors per track * revolutions per second.
Data is stored on the bottom (ie. non-label) side of a single-sided disk
(the read-write head of a single-sided drive is on the bottom).
Viewing the disk from below (ie. viewing the data side),
the disk spins clockwise (thus sectors are numbered anticlockwise).
.RAW files are raw disk files of 100K (102,400 bytes) (BINBUG) or 78.75K
(80,640 bytes) CD2650), lacking sector and block numbers.
BIOS/DOS command cross-reference:
Letters in lowercase are optional.
Timing table:
Astro Wars and Lazarian, although they use PAL USGs (2621), have NTSC master clocks
(14,318,180 Hz ÷ 4 = 3,579,545 Hz and 14,318,000 Hz ÷ 4 = 3,579,500 Hz, respectively).
CALM Notation
Addressing mode notation (for eg. LODx instruction):
Program Status Word bits:
Project Numbers
Electronics Australia:
Electronics Today International (Australia):
ETI-638,641,643 can be connected to any CPU (but the provided software is not written for the 2650).
Others:
Dark grey items are irrelevant. Light grey items are semi-relevant (eg. could be feasibly adapted).
Component Numbers
* Eg. BA 127, BA 217, BA 218, BA 221, BA 222, BA 317, BA 318, BAX 13, BAY 61, 1N914, 1N4148.
Signetics AOF (Absolute Object File) Format
Each block is as follows:
Files are normally terminated by a zero-length block. The load address of
this block is used as the start address of the game.
Eg. the following program:
would be encoded as follows:
For the 1st header:
For the 1st data:
For the 2nd header:
G440 1000 1FFF
Type in the name of the first player and press ENTER.
Press P. The machine will say "PLAYER 2-" (or whatever).
Type in the name of the player and then press ENTER.
The machine will ask "BET?".
For each bet you want to place:
a. Press Y and then press ENTER.
b. The machine will ask "DOG NO?".
c. Press the number (0..9) of your preferred dog and then press ENTER.
d. The machine will ask "HOW MUCH?".
Press N when this player has placed all their bets.
STRT = $440 code
INPT = $493 code
PRNT = $4A6 code
MSAG = $4B1 data
/ appears.
Enter destination address (2 hex digits).
= and result appears.
The first digit of each pair entered is not echoed to the display until the
second digit has been input.
Result is the relative offset (ie. the distance between the addresses). Eg.:
01/02=01
03/04=7F
05/05=00
20/30=10PAIR equ $45E
gosub CRLF;
for (r1 = 3; r1 >= 1; r1--)
{
PAIR = BINOUT();
COUT('/');
PAIR = (BINOUT() - PAIR) & $7F;
COUT('=');
BOUT(PAIR); // Byte output in hex
COUT(' ');
}
goto $3F00;
BINOUT: ;$46D
// Input two hex chars and output in hex
*($476) = BIN(); // Input two hex chars and form as byte
BOUT(*($476)); // Byte output in hex
return *($476);1 2 3
4 X 5
6 7 8
2. A live cell will die if it has less than two or more than three
live neighbours.
3. A birth in an empty cell will occur if it has exactly three live
neighbours.
4. Births and deaths take place simultaneously.
In our version of Life, live cells are represented by Os, and dead or
empty cells as blanks. The program starts with an initial pattern (fed in
by the player), and calculates the new patterns "generation by
generation".
The 32*16 versions are intended for use with the Low Cost VDU of EA
February and April 1978. The 32*24 versions are intended for terminals
such as the EME-1 VDU, described in the EA January and February 1977
issues.
To use the program, type:
GC00<CR>
The program will respond with the word "LIFE", followed by the prompt
character ":".
If you respond with "N", the program will expect a new matrix to be
supplied. The program will echo the N, followed by a carriage return and
line feed. A pattern may then be written in (or "seeded") by using the
space bar for blanks (these are printed as dots), Os for live cells, and
line feeds (LF) [Ctrl+J in Ami/WinArcadia] for new lines.
Blanks are not required on the right hand side of the pattern. Carriage
return (CR) will permit overwriting of a line, allowing error correction.
Once your pattern is complete, use LFs if necessary to advance to the
bottom of the matrix.
Once the pattern is completed, the program will reprint it, and give
the prompt sign again. If you now respond with a Gxx, $xx generations
will be evolved, with a printout after the last generation. G00 will
produce printout after 256 generations, while G01 will produce a
printout after only one generation. And so on...
Immediately after you have typed in this command, the program will
respond with a message such as <15S, to indicate that in less than 15
seconds it will print out the result of the Gxx instruction. After
printing the result the new generation count and prompt will appear at
the bottom left hand corner of the screen. This may overwrite live cells,
so try and keep your patterns in the centre of the screen (patterns to the
right will wrap around to the left).
The remaining instruction is P, which causes the program to print out
the existing matrix. The instruction is not used a great deal.
This is the result of a simple pattern. This stabilises after four
generations, and then continues forever unchanged:
..O. GENERATION 1
OOO.
....
.OO.
.O..
.OO.
.OO.
O..O
.OO.
O..O
.OO..O.
..O
OOO
Simply feed in a starting pattern (using the N command), and sit back
and watch. The program will continue until a stable pattern is achieved,
at which time it will stop. Note, however, that it cannot detect recurring
cyclical patterns, so watch out for these. To stop them, you will have to
use the reset facility of the 2650."
For 300 baud, you need to press U (not Y), then ENTER, contrary to the
documentation.
Then press N for a new field and set it up with Os and
spaces, using Ctrl-J repeatedly to move down.
$C26: LIFECRLF
$C39: LIFECOUT
$C5A: LIFECHIN
$C76..$EEC: Life game code
$EED..$F54: Life game variables
PSL: CC = eq;
PSL: primary register bank (r1..r3) is always selected
PSU: Flag pin is always set
r1 = *(DATABUS);
r0 = r6 = 0;
You should not call it when SP > 4 (you need one level of stack for
LIFECOUT's return address, another level for LIFEDELAY's return address,
and another level for LIFEDELAY_ALT's return address.
PSL: CC = gt;
PSL: primary register bank (r1..r3) is always selected
PSL: With Carry bit is always clear
r0 = r4 = return code (1..127)
r5 = r6 = 0;
You should not call it when SP > 4 (you need one level of stack for
LIFECHIN's return address, another level for LIFEDELAY's return address,
and another level for LIFEDELAY_ALT's return address.
V = Velocity (- is down (towards surface), + is up (away from surface))
D = Distance from surface (- is underground, + is above ground)
B = Burn
You must give a 2-digit burn each turn.
Neither digit is displayed until both have been entered.
STRT:
*(MOD) = ADDZ r3;
r3 = SUB1();
for (;;)
{ r0 = CHIN();
if (r0 == '+') goto PLUS;
elif (r0 == '-') goto SUBT;
elif (r0 == '*') goto MULT;
}
*(MOD) = SUBZ r3;
PLUS: // $45C
gosub COUT(r0); // print operation symbol ('+' or '-')
r2 = r3; // 1st argument
r3 = SUB1(); // 2nd argument
r0 = r2; // 1st argument
MOD:
r0 += r3, or r0 -= r3, depending on the desired operation
if (r0 < 0)
{ r0 = r3 - r2;
*(A1) = '-'; // store '-' as 1st character
r0 |= $30; // format for display
*(A2) = r0; // store r0 as 2nd character
} elif (r0 >= 10)
{ *(A1) = '1'; // store '1' as 1st character
r0 -= 10;
r0 |= $30; // format for display
*(A2) = r0; // store r0 as 2nd character
} else
{ r0 |= $30; // format for display
*(A1) = r0; // store as 1st character
r0 = NUL;
*(A2) = r0 [NUL]; // store as 2nd character
}
goto ZEND;
gosub COUT(r0); // print operation symbol ('*')
r2 = r3; // 1st argument
r3 = SUB1(); // 2nd argument
r0 = 0;
while (r2 != 0)
{ r0 += r3;
r2--;
}
while (r0 >= 10)
{ r0 -= 10;
r2++;
}
r2 |= $30; // format for display
*(A1) = r2;
r0 |= $30; // format for display
*(A2) = r0;
goto ZEND;
do
{ r0 = CHIN();
clear With Carry and COMpare bits
} while (r0 < '0' || r0 > '9');
r3 = r0;
gosub COUT(r0);
r3 &= $0F; // remove display formatting
return r3;
r1 = 0;
while (*(MSAG + ++r1) != 0)
{ COUT(r0);
}
gosub CRLF;
goto STRT;G48F <start-address> <end-address> <loops>
G48F 0500 3FFF 7F
Errors are as follows:
W means that a single bit of memory (eg. $10) did not read back
correctly.
L means that set memory did not read back as $FF.
C allows a stored message to be checked
R allows it to be repeated until the CPU is reset
If the message being stored is too long for the buffer, an F will be
displayed. Starts at $0440."
The first command you should issue is OLD. Then you can RUN or LIST the
program.
0440FF
Note that the mnemonics used are not always standard Signetics. Eg.:
HLT = HALT
LPU = LPSU
LPL = LPSL
PPU = PPSU
PPL = PPSLG440
There are bugs in the published program listing, causing incorrect
disassembly of some instructions. There is a fixed version in the
Enhancements Pack.
There is also the following unfixed bug: Some situations (eg. 3-byte
instruction at $1FE..$200 when range
argument was "0100FF") result in the mini-disassembler not detecting the
end of the range and instead wrapping back around.
Monotonic musical notes are generated by pulsing the flag output at
suitable rates, with the program "reading" the music from a section of
memory. The timing of the music is determined by a time value called
"UNIT", which is an even number of up to 15 bits, such that $5160 is about
1/32 of a second.
Each note is specified by two bytes. The first byte represents the
number of UNITs that the note will last: $01 gives a duration of 1 UNIT,
while $00 gives 256 UNITs, or 8 seconds with a UNIT value of $5160.
The second byte is split into three fields. The most significant bit,
bit 7, indicates either a note (%0) or a rest (%1). The next three bits,
bits 4, 5 and 6, specify the octave. %111 represents the top octave, while
%000 represents the lowest. In practice, the three lowest octaves are not
usable, giving a range of only five octaves.
The remaining four bits in the second byte represent the note within the
octave. The first note in any octave is E, represented by $0, while the
last note is D# (D sharp), represented by $B.
For rests, bits 6 to 0 are not used, so all rests become $80.
It is best to start and end all programs (tunes!) with $80 $80, a long
rest, to separate the music from the noises PIPBUG makes while
communicating with the terminal. To signify the end of a tune, insert $02
$FF after the long rest.
"Yankee Doodle" occupies locations $5D4 to $6B7, and requires a unit
value of $2800, while "Bach" occupies locations $6B8 to $7A3, and requires
a unit value of $7000.
To run the program, type:
G58C [<address of first note>] [<value of UNIT>] <CR>
G58C 5D4 2800<CR>
G58C 6B8 7000<CR>
"
Note
Very low
Low
Middle
High
Very high
E
$30
$40
$50
$60
$70
F
$31
$41
$51
$61
$71
F#/Gb
$32
$42
$52
$62
$72
G
$33
$43
$53
$63
$73
G#/Ab
$34
$44
$54
$64
$74
A
$35
$45
$55
$65
$75
A#/Bb
$36
$46
$56
$66
$76
B
$37
$47
$57
$67
$77
C
$38
$48
$58
$68
$78
C#/Db
$39
$49
$59
$69
$79
D
$3A
$4A
$5A
$6A
$7A
D#/Eb
$3B
$4B
$5B
$6B
$7B
Rest
$80
$80
$80
$80
$80
Note that there is a short delay for Yankee Doodle, and a long delay for
Bach, before they actually begin to play the song.
The winning strategy is as follows:
You will have a turn where there are 6..8 widgets. Taking 1..3 widgets
accordingly on this turn will leave 5 widgets.
The computer must then take 1..3 widgets, leaving 2..4 widgets.
You should then take 1..3 widgets accordingly, to leave 1 widget and
therefore win.
Ie.:
If 23 remaining on your turn, take 2 leaving 21.
If 22 remaining on your turn, take 1 leaving 21.
If 21 remaining on your turn, take 3 leaving 18 but you are in danger.
If 20 remaining on your turn, take 3 leaving 17.
If 19 remaining on your turn, take 2 leaving 17.
If 18 remaining on your turn, take 1 leaving 17.
If 17 remaining on your turn, take 3 leaving 14 but you are in danger.
If 16 remaining on your turn, take 3 leaving 13.
If 15 remaining on your turn, take 2 leaving 13.
If 14 remaining on your turn, take 1 leaving 13.
If 13 remaining on your turn, take 3 leaving 10 but you are in danger.
If 12 remaining on your turn, take 3 leaving 9.
If 11 remaining on your turn, take 2 leaving 9.
If 10 remaining on your turn, take 1 leaving 9.
If 9 remaining on your turn, you will eventually lose.
If 8 remaining on your turn, take 3 leaving 5.
If 7 remaining on your turn, take 2 leaving 5.
If 6 remaining on your turn, take 1 leaving 5.
If 5 remaining on your turn, you will soon lose.
If 4 remaining on your turn, take 3 leaving 1 and winning.
If 3 remaining on your turn, take 2 leaving 1 and winning.
If 2 remaining on your turn, take 1 leaving 1 and winning.
If 1 remaining on your turn, you have already lost.
Numbers up to 65535 are possible.
The target number is stored at $486..$487 in little-endian format.
The number of turns taken is stored at $4A8.
*($573) = tens of hours
r3 = ones of hours
r2 = tens of minutes
r1 = ones of minutes
All values are stored in ASCII format. Eg. for '5', use $35 (ASCII '5'),
not $05.
Eg. use this sequence of debugger commands for 11:58 am:
P
E $573 '1'
E R3 '1'
E R2 '5'
E R1 '8'
J $500
P
Enter the 2nd address (4 hex digits).
It will then display the value to use for a relative branch from the 1st
to the 2nd instruction (the same as Ami/WinArcadia debugger REL command
does).
Enter destination address (4 hex digits), then "=" appears, and tells you
the relative offset (or "?" if out of range).
The first digit of each pair entered is not echoed to the display until the
second digit has been input.
A B C D
E F G H
I J K L
M N O P
If a mistake is made, it can be corrected once between valid rotations.
Any two adjacent letters can be exchanged, with the proviso that only one
exchange is permitted. When the required pattern has been achieved, or
when the game is aborted, the program will print out the number of moves
used.
The program occupies locations $440 to $5C7, and uses routines from
PIPBUG. To run the program, type:
G440<CR>
Here is a sample printout. The "Z" command was used to terminate the
game.
*G440
EPLI
BFHK
CNAG
EPLI
BNFK
CAHG
EFLI
BANK
CHFG
EPLI
BAFN
CHGK
EPLI
BAGF
CHKN
EPMI
BAGF
CHKN
EAPI
BGMF
CHKN
EAPI
BGKM
CHNF
EAPI
GMNF
CHKN
EAPI
BHGF
CKMN
If you wish to exchange two adjacent letters, type X. The program will
respond with "EXCHANGE:", and expect you to type in the two desired
letters. If you cannot solve a particular pattern, type Z, and this will
abort the game.
An average pattern, with only one exchange permitted, should take
between 25 and 30 moves. Early attempts may take more."
Note that the game does not enforce the rule about only permitting one
exchange per game.
The unpatched version (ie. as found in the Games Pack) will not work on
Ami/WinArcadia. You should use the patched version (ie. as found in the
Enhancements Pack).
No.
Start
End
123
...
***
456
.*.
*.*
789
...
***
1
2
3
4
5
6
7
8
9
.!-
!!-
---
!.!
---
---
-!.
-!!
---
!--
.--
!--
-!-
!.!
-!-
--!
--.
--!
---
!!-
.!-
---
---
!.!
---
-!!
-!.
! means the star or dot becomes a dot or star (respectively).
- are unchanged.
It is possible to reach a configuration with zero stars and thus no
possible moves, losing the game.
The two most likely possibilities would be:
(a) the program was not originally tested and tuned to a sufficient
precision by its programmer; and/or
(b) the real machine is spending a certain number of cycles servicing
interrupts (which don't occur in the emulator).
Of course, since it starts counting from minute 1 rather than minute 0,
the time as shown in this program will be minute later than that shown by
the emulator.
When this program says "0100" (ie. "one hour"), emulator time should be
approximately "00:59:00.00" (though it would be fair to allow a few
milliseconds for initialization). However, emulator time when this event
occurs is actually only "00:58:47.20". So this program is 12.80 seconds
fast over that 59 minutes. (Or, conversely, you could suggest that the
emulator is slow by that amount, or a combination of both.)
Such accuracy is approximately 1:276.5625 (slightly worse than 1 second
fast per 5 minutes), which makes this program rather useless over lengthy
periods.
The start address for user programs can be specified at runtime by the
user as with eg. the Elektor TV Games Computer.
BIOS calls are made via
eg. ZBSR *DISPLY; there is a zero page jump table at $1FE6..$1FFF.
Region
Size
Basic version
Expanded version
$0000..$01FF
512 bytes
user RAM
user RAM
$0200..$0FFE
3582 bytes
unused
expansion RAM
$0FFF
1 byte
I/O port
I/O port
$1000..$177F
1920 bytes
unused
unused
$1780..$17BF
64 bytes
user RAM
user RAM
$17C0..$17FF
64 bytes
monitor RAM
monitor RAM
$1800..$1FFF
2K
monitor ROM
monitor ROM
$2000..$7FFF
24K
unused
expansion RAM
------Left Keypad------ ---------Right Keypad----------
.SENS.. .WCAS.. .BKPT.. ...C... ...D... ...E... ...F...
..INT.. .RCAS.. ..REG.. ...8... ...9... ...A... ...B...
..MON.. .STEP.. ..MEM.. ...4... ...5... ...6... ...7...
..RST.. ..RUN.. ENT NXT ...0... ...1... ...2... ...3...
8 corresponding toggle switches (unlabelled);
Toggle switch with 3 possible positions
(up, middle and down, corresponding to "MEMORY $0FFF", "EXTENDED I/O PORT $07"
and "NON-EXT DATA PORT", respectively).
"The default is probably EXTENDED I/O PORT $07."
WRTD,rn to write to the glow LEDs
WRTE,rn $07 to write to the glow LEDs
STRA,rn $0FFF to write to the glow LEDs
"KEYBOARD" (ie. INT key).
"The default is probably keyboard."
As with the Elektor, the rate at which bits (and thus bytes) can be
loaded/saved depends the actual data payload (ie. depends on whether they
are "0"s or "1"s).
Port $F8 bit 4 is FREQ. The BIOS is flipping that at a constant regular
rate (at least while recording).
Port $F8 bit 3 is ENV. That is high whilever we are actually recording a
bit, and goes low between bits. It stays high for longer for a "0" bit
than for a "1" bit.
So whilever ENV is high, we just write the current status of the FREQ bit
to the tape, and whilever ENV is low, we just write silence.
It gets NANDed, so if ENV and FREQ are both high, we are low, and
otherwise, we are high.
It sets port $F8 to $10 and $18 while writing, and $00 at rest.
During playback, the Sense bit is set directly from the tape
based on whether above or below the zero-crossing point.
Error 2 means: "Restricted command."
Error 9 means: "Next instruction is in the MONITOR area."
Ie. if the STEP button is pressed and the next instruction would be in
the monitor area, it will be reported by the appearance of Error 9.
R1..R2: Pointer to byte preceding string.
R3: $00/$01/$80. $01 returns immediately.
The USE BIOS only allows character-level (ie. glyph-level) access. The
character set is as follows:
$00
$01
$02
$03
$04
$05
$06
$07
$08
$09
$0A
$0B
$0C
$0D
$0E
$0F
$10
$11
$12
$13
$14
$15
$16
$17
$18
$19
$1A
$1B
$1C
0 or O
1 or I
2
3
4
5
6
7
8
9
A
b.
C
d.
E
F
P
L
U
r
H
o
=
space
J
-
.
Y
n
### ..# ### ### #.# ### ### ### ### ### ### #.. ### ..# ### ### ### #.. #.# ... #.# ... ... ... ..# ... ... #.# ...
# # . # . # . # # # # . # . . # # # # # # # # . # . . # # . # . # # # . # # . . # # . . . . . . . # . . . . # # . .
#.# ..# ### ### ### ### ### ..# ### ### ### ### #.. ### ### ### ### #.. #.# ### ### ### ### ... ..# ### ... ### ###
# # . # # . . # . # . # # # . # # # . # # # # # # . # # # . # . # . # . # # # . # # # # . . . . . # . . . . . # # #
### ..# ### ### ..# ### ### ..# ### ..# #.# ### # ### ### # ### #.. #.. ### ### #.. #.# ### ### ... ### ... ... # ### #.#
Available letters: ABCDEFGHIJLNOPRSUY
Unavailable letters: KMQTVWXZ
Event
Odds
0 lamps lit
250:1
1 lamp lit
15:1
2 lamps lit
7:1
3 lamps lit
7:2 (3.5:1)
4 lamps lit
5:2 (2.5:1)
5 lamps lit
7:2 (3.5:1)
6 lamps lit
7:1
7 lamps lit
15:1
8 lamps lit
250:1
0..1 lamps lit
25:1
2..3 lamps lit
2:1
4..5 lamps lit
1:1
6..8 lamps lit
6:1
0..2 lamps lit
11:2 (5.5:1)
3..5 lamps lit
2:5 (1:10)
6..8 lamps lit
11:2 (5.5:1)
Specific 2-digit number
250:1
Specific MS digit
15:1
Specific LS digit
15:1
Any one of 5 specified 2-digit numbers
50:1
Any one of 10 specified 2-digit numbers
25:1
The program relies on random data in uninitialized RAM for its random
number generation, hence you should ensure that "Settings|Emulator|
Randomize memory?" is on before loading the game.
0124 F9 7C BDRR,r1 $122
0124 F9 7E BDRR,r1 $124
Bits 6..4
Bits 3..0
%000: 0 mph (stopped)
%0000: oP...... HSE
%001: 80 mph
%0001: oPOOO... HSE + 3 FC
%010: 40 mph
%0010: oPOUU... HSE + 1 FC + 2 EC
%011: 27 mph
%0011: oPOUAo.. HSE + 1 FC + 1 EC + 1 HC + 1 C
%100: 19 mph
%0100: oPOOo... HSE + 2 FC + 1 C
%101: 15 mph
%0101: oPooo... HSE + 3 C
%110: 12 mph
%0110: oPUUUo.. HSE + 3 EC + 1 C
%111: 10 mph
%0111: o=ooo... LSE + 3 C
-
%1000: o=UUo... LSE + 2 EC + 1 C
-
%1001: o=AAo... LSE + 2 HC + 1 C
-
%1010: o=UUo... LSE + 2 EC + 1 C
-
%1011: o=OOOo.. LSE + 3 FC + 1 C
-
%1100: o=...... LSE
-
%1101: M....... MT
-
%1110: doooo... EM + 4 C
-
%1111: Mooo.... MT + 3 C
Abbreviation
Display
Description
EM
d
electric-powered mine engine
MT
M
battery-powered mine tractor
HSE
oP
high speed engine
LSE
o=
low speed engine
FC
O
full car
HC
A
half-full car
EC
U
empty car
C
o
caboose
Region
Size
Master CPU
Slave CPU
$0000..$00FF
256 bytes
bootstrap ROM (to boot SDOS from disk)
slave RAM
$0100..$14FF
5K
master RAM (for SDOS)
slave RAM
$1500..$187F
896 bytes
master RAM (overlay area 1)
slave RAM
$1880..$1BFF
896 bytes
master RAM (overlay area 2)
slave RAM
$1C00..$3FFD
9214 bytes
master RAM
slave RAM
$3FFE..$3FFF
2 bytes
DOS version number (except for very early versions)
slave RAM
$4000..$7FFF
16K
window into (ie. mirror of) slave RAM
unexpanded system: unmapped
expanded system: slave RAM
SVC processor
device handlers
GO, LOAD, SYSTEM, XEQ commands
2. Go SIO mode. Check disk status.
3. Go OTD mode. Send Normal Read command.
4. Go OTD mode. Send drive number.
5. Go OTD mode. Send sector number.
6. Go OTD mode. Send track number.
7. Go IND mode. Read 1st byte.
: : :
134. Go IND mode. Read 128th byte.
135. Go RST mode. Check disk status.
"SMS" - Appendix D (for PROM programmer)
"MOD" - "Binary load module"
"Com" - "Command file" (ie. batch/script file)
DOS (tracks 1..4)
Disk(s)
DIP4
diag_4.4_5-23-79
EXOS
HM19..22
PMON (expects 8080 slave)
pascal_I.4b
CP/M
0517-0135-01_8002_cpm_adm3_pe_ws_palasm
CP/M
0517-0136..0142-01
CP/M
8002_cpm_ws_hk
CP/M
88000141_8088_thor_of_ops
CP/M
arb_mgr_work_disk
CP/M
asm09src_cpm
CP/M
cpm_on_tek_ws_utilities
CP/M
cpm_trace_theory_of_ops
CP/M
cpm_whitesmiths_c
CP/M
debug_card_programmable_parts_2-3-81
CP/M
tek_cpm_prom_document_format
CP/M
wordstar_perkin-elmer_terminal
SDOS 2.0
van_erp
SDOS 2.0
HM02..04
SDOS 2.0
HM06..07
SDOS 2.0
HM13..14
SDOS 2.0
HM16..18
SDOS 2.0
HM23..25
SDOS 4.0
HM01
SDOS 4.0
HM10
SDOS 4.2
config42
SDOS 4.2
HM05
SDOS 4.2
HM15
SDOS 4.2
system42
SDOS 4.2
tss40
TEKDOS 2650 VER 1.6 REV A (aka UDOS)
tekdos_v1.6_2650
TEKDOS 6500 3.1
tekdos_3.1_6500_copy
TEKDOS 6800 1.9
tekdos_1.9_bkup_8-79
TEKDOS 6800 1.9
99900761-01-A_tekdos_1.9
TEKDOS 6800 3.1
99900809-01_9508
TEKDOS 6800 3.1
99900817-01_9508_9508_link_cpy2
TEKDOS 6800 3.1
99900818-01_9508_executive_copy2
TEKDOS 6800 3.1
99900819-01_9508_io_module_copy2
TEKDOS 6800 3.1
99900820-01_9508_system_subroutines_cpy2
TEKDOS 6800 3.1
99900821-01_9508_emulator_ctl_cpy2
TEKDOS 6800 3.1
99900822-01_9508_cmd_line_proc_cpy2
TEKDOS 6800 3.1
99900823-01_9508_9508_real_time_analyzer_cpy2
TEKDOS 6800 3.1
99900824-01_9508_memory_cpy2
TEKDOS 6800 3.1
99900825-01_9508_comm_cpy2
TEKDOS 6800 3.1
99900924-01_9508_executable_modules_cpy2
TEKDOS 6800 3.1
Tek8002_1a
TEKDOS 6800 3.1
Tek8002_2
TEKDOS 6800 3.3
TekDOS_3.3_6800_cpy1..2
TEKDOS 6801 3.1
6801_tekdos_v3.1_f001
TEKDOS 680X 3.2
Tek8002_12..14
TEKDOS 8048 3.1
chuck_tekdos_ice
TEKDOS 8080 3.0
Tek8002_3
TEKDOS 8080 3.1
Tek8002_4
TEKDOS 8080 3.1
Tek8002_6a
TEKDOS 8080 3.1
Tek8002_11
TEKDOS 8085 3.1
Tek8002_5
TEKDOS 8085 3.1
Tek8002_7a
TEKDOS Z80 2.2
99900862-01
TEKDOS Z80 2.2
99901253-01_9516_boot_listing
TEKDOS Z80 2.2
99901254-01_9516_boot_src_obj
TEKDOS Z80 2.2
99902585-01
TEKDOS Z80 3.1
0517-0143..0147-01
TEKDOS Z80 3.1
8048_v3.1_9-6-79
TEKDOS Z80 3.1
8086_fpgas
TEKDOS Z80 3.1
9516_debug_diagnostic_with_diagnostic_emulator
TEKDOS Z80 3.1
ed_lenox_z80_3.3
TEKDOS Z80 3.1
editor_for_slave_adapter_d0
TEKDOS Z80 3.1
hal_gillette_z80_v3.1_system
TEKDOS Z80 3.1
master_cmd_files_for_slave_adapter
TEKDOS Z80 3.1
master_cmd_files_for_slave_adapter_run_disk_0
TEKDOS Z80 3.1
progfpga_slave_adapter_ed_lennox_0
TEKDOS Z80 3.1
slave_adapter_drive_1_programmable_parts_hist
TEKDOS Z80 3.1
supervsrctl
TEKDOS Z80 3.1
Tek8002_8
TEKDOS Z80 3.1
Tek8002_10
TEKDOS Z80 3.1
Tek8002_17b
TEKDOS Z80 3.1
Tek8002_21
TEKDOS Z80 3.1
tekdosz80v3.1slaveadaptersupervisorrun
TEKDOS Z80 3.1
test_files_for_8086
TEKDOS Z80 3.1
z80_3.1_debug_checkout_8086_vehicle
TEKDOS Z80 3.2
Tek8002_16
TEKTIP 1.5
tektip_1.5
TOS 1.0
TWINBoot
"EMPTY" (all zeroes)
Tek8002_15
"EMPTY" (all zeroes)
Tek8002_23b
"SDOS" (all zeroes)
cmd_src_5b
"SDOS" (all zeroes)
HM08..09
"SDOS" (all zeroes)
HM11..HM12
"SDOS" (all zeroes)
margriet1
"SDOS" (all zeroes)
sdos42_link
"SDOS" (all zeroes)
TWINData
"TEKDOS" (all zeroes)
99900827-01_hazel_6809_cpy2
"TEKDOS" (all zeroes)
99900828-01_hazel_8080-85_cpy2
"TEKDOS" (all zeroes)
99900829-01_hazel_6800_cpy2
"TEKDOS" (all zeroes)
99900831-01_hazel_8048_cpy2
"TEKDOS" (all zeroes)
cpm-wordstar_ed_lennox
"TEKDOS" (all zeroes)
files
"TEKDOS" (all zeroes)
supv_edit_disk_slave_adapter_drive_1
"TEKDOS" (all zeroes)
supvhis2
"TEKDOS" (all zeroes)
supvhis3
"TEKDOS" (all zeroes)
Tek8002_1b
"TEKDOS" (all zeroes)
Tek8002_17a
"TEKDOS" (all zeroes)
Tek8002_22
"TEKDOS" (all zeroes)
Tek8002_25
Other file(s)
99900826-01_h2lasm_cpy2
Other file(s)
99900830-01_hazel_z80_cpy2
Other file(s)
99900878-01_com-ram-05_part1_v1.0_cpy2
Other file(s)
99900884-01_com-ram-05_part2_v1.0_cpy2
Other file(s)
99900889-01_com-ram-05_part3_v1.0_cpy2
Other file(s)
99901441-01
Other file(s)
sdos42_cmd_src_1..5
Other file(s)
Tek8002_9
Other file(s)
Tek8002_18..20
Other file(s)
Tek8002_23a
Other file(s)
Tek8002_24a
Other file(s)
Tek8002_24b
Other file(s)
Tek8002_26
Other file(s)
pas_src
Other file(s)
prom_mod9
Other file(s)
rasm
Other file(s)
sdos42_hwa
Other file(s)
sdos42_macro_src
Other file(s)
sdos42_opt_drv
Other file(s)
sdos42_res_link
Other file(s)
sdos42_res_master
Other file(s)
sdos42_util
Corrupt/missing
word_star_work_disk.img
Dark grey disks do not contain a valid bootable DOS for the Signetics 2650 CPU.
TEKDOS (apart from UDOS) switches to the slave CPU. Slave memory is all zeroes (why!?) so we just run endlessly through the first 8K page of slave memory. Changing the HALT at $1DC1 of master memory to NOP is sufficient to get TEKDOS working.
TEKTIP 1.5 doesn't like to get interrupts 4 and 5 (teletype I/O).
Port
Description
$E8
Data Byte
$E9
Status Byte:
bits 7..5: unused
bit 4: parity error
bit 3: framing error
bit 2: data overrun
bit 1: transmit buffer empty
bit 0: data available
$EA
"Controller Flag Byte"
$EB
"Disk Status Byte"
Port
Name
Description
$D0
PCPT
High Speed Paper Tape (HSPT) control port
$D1
PDPT
PDPT High Speed Paper Tape (HSPT) data port
$E8
?
CRT/TTY output
$E9
?
Bits 7..3: unused
Bit 2: enable TTY interrupts
Bit 1: parity select
Bit 0: TTY paper tape reader
$EA
?
Control Device (floppy drive and printer)
$EB
?
Data Device (floppy drive and printer)
$EC
?
Bits 7..1: ?
Bit 0: interval timer (0=disabled, 1=enabled)
$ED
?
"Master Memory Protect"
$EE
BSPT
Common memory bank select:
$00 = map slave RAM $0000..$3FFF to master RAM $4000..$7FFF
$01 = map slave RAM $4000..$7FFF to master RAM $4000..$7FFF
$02 = map slave RAM $8000..$BFFF to master RAM $4000..$7FFF
$03 = map slave RAM $C000..$FFFF to master RAM $4000..$7FFF
Company: Central Data Company
Features: Employs Signetics 2650 microprocessor.
There is an in-built 80 character by 16 line video display character
generator (64 upper case ASCII character set) with a user programmable
set of 64 characters (8x8 matrix) for non-standard characters.
There is a Kansas City Standard cassette interface, a 1024 byte PROM
monitor program, 2048 bytes of programmable memory of which 768 are
available for programming with the balance dedicated to the display,
one 8 bit input port and one 8 bit output port.
In addition there are sockets for 3K of PROM (which may include the
Central Data Company's editor and assembler).
A BASIC software package is available on cassette tape.
The user needs to supply 3A at 5V power supply, an ASCII keyboard, a
video monitor and possibly some additional memory."
- "Small Systems Computer Sourcebook" [sic], by J. C. Boonham.
ASCII-encoded keyboard
video monitor
tape deck
power supply
Region
Size
Description
$0000..$03FF
1K
monitor ("supervisor") ROM BIOS
$0400..$0FFF
3K
expansion ROM (optional)
$1000..$103F
64 bytes
display RAM (unusable)
$1040..$14FF
1216 bytes
display RAM
$1500..$150F
16 bytes
monitor RAM (unusable)
$1510..$17E9
730 bytes
user RAM
$17EA..$17FF
26 bytes
monitor RAM
$1800..$1FFF
2K
unused
$2000..$7FFF
24K
expansion RAM/ROM (optional)
$1500..$150F: "You can't use $1500..$150F because when you reach the end
of the line, WCHR at $0396 sends you to LFCR at $0024 which immediately
writes a space at the current (too big) cursor position." - Richard
Rogers.
$1000: 0,0
$1001: 0,1
$1002: 0,2
: : :
$100F: 0,15
$1010: 1,0
$1011: 1,1...address = $1000 + (x * 16) + y;
Characters $40..$7F use the optional 2nd character generator PROM, if available. These are generally used for eg. lower case characters, Star Trek characters, card symbols and chessmen.
Characters $80..$FF are not normally used.
The character sets are:
Code
$0
$1
$2
$3
$4
$5
$6
$7
$8
$9
$A
$B
$C
$D
$E
$F
$0
$1
$2
$3
$4
$5
$6
$7
$8
$9
$A
$B
$C
$D
$E
$F
$0
$1
$2
$3
$4
$5
$6
$7
$8
$9
$A
$B
$C
$D
$E
$F
$0x
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
$1x
P
Q
R
S
T
U
V
W
X
Y
Z
[
·
]
↑
←
P
Q
R
S
T
U
V
W
X
Y
Z
[
·
]
↑
←
P
Q
R
S
T
U
V
W
X
Y
Z
[
·
]
↑
←
$2x
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
$3x
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
$4x
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
♔
♕
♗
♖
♘
♙
♚
♛
♝
♜
♞
♟
■
◫
▣
□
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
$5x
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
■
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
■
P
Q
R
S
T
U
V
W
X
Y
Z
[
·
]
↑
←
$6x
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
-
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
-
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
$7x
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
■
Green is chessmen character set.
Character $4D (shown here as ◫) is actually a square with a horizontal (not vertical) bisecting line. Unicode sux :-(
Blue (ASCII) is used for Central Data DOS and P1 DOS.
Characters shown here in dark blue are control codes which will be displayed as inverse video.
An A indicates that it is waiting for you to type in an address.
At any time the supervisor is looking for a keyboard input, you can press Esc
which will terminate the present command and wait for a new one.
Press A.
It will then ask for a hexadecimal address.
The address and the data then appear on the next line.
You can now:
press Esc to quit the alter/display routine;
enter C to change the data at that location;
type in two hex characters to fill the memory location; or
press space to display the next memory location.
Press B.
It will then ask you for the address of the breakpoint.
When this address is reached in the program, the supervisor will save
all of the registers and wait for a new command. It signifies that the
breakpoint address has been reached by writing the message:
BP 1703
Press C.
The supervisor responds by typing the address that the breakpoint was
set at. Note that you must set breakpoints at an address position where
an instruction would begin. In other words, you cannot set a breakpoint
to be executed at an address which is the second or third byte of an
instruction.
Press E.
It will then ask for the address that is should start executing at.
It will then jump to the address and start executing instructions.
Press I.
It will then ask you to type a register number corresponding to the
register that you want, as follows:
0 register 0 (r0)
1 register 1, bank 0 (r1)
2 register 2, bank 0 (r2)
3 register 3, bank 0 (r3)
4 register 1, bank 1 (r4)
5 register 2, bank 1 (r5)
6 register 3, bank 1 (r6)
7 Program Status Word, Lower (PSL)
8 Program Status Word, Upper (PSU)
to stop by pressing Esc;
to change the register value by entering C; or
to inspect another register by pressing Space.
It seems to be possible to "hang" the supervisor; eg. by pressing E
repeatedly. This is because RETN ($288) branches to *ADD1, and sometimes
ADD1 has garbage such as $6EEE.
$13A, $16C, $181: probably $EB but maybe $E8
$316: probably $F8 but maybe $FB
$3C4: probably $2E but maybe $28 or $2B$17EB..$17F3
$17F8
$17FC
$17FD?
The KBIN routine can return characters in the $00..$7F range. However,
it can only print them as uppercase (because it uses WCHR).
The supervisor internally works with letters in the $41..$5A (65..90)
(ASCII uppercase "A".."Z") range. It relies on the masking performed by
WCHR to output them as $01..$2A (1..26) (CD2650 uppercase "A".."Z").
Stack required: 2.
Functions called: LFCR, HXOT, WRBL.
Pages: 3.
Addresses: $DB..$EF.
Can branch to: None.
RAM data accessed: ADD1/2.
ROM data accessed: None.
ROM constants used: INCD ($10), CUCD ($1C), SPCD ($20).
Subsections: L2.
Called by: ?.
Registers: r0 will be SPCD ($20), r3 will be CUCD ($1C).
PSW: WC is cleared.
Star Trek
Target
Now, from the "OPTION" prompt, press R (once).
- = go to beginning of file
+ = go to end of file
/ = go backwards 15 lines
Bx = go backwards x lines
space = go forwards 15 lines
Fx = go forwards x lines
Cx = change line x
Ix = insert after line x
Ctrl+C = done changing/inserting
Dx = delete x lines from top of screen
R = go to BASICI = Inspect variable
L = RUN to line
R = RUN
Esc = stop running
S = Single step
Esc = go to editor
Standard BASIC
8K BASIC
CLS
ERASE
var=PEEK(addr)
PEEK addr,var
PRINT"string"
PRINT'string'
PRINT var
PRINT #var
PRINT AT y,x
PRINT@y,x
'comment
*comment
IF a=b THEN
IF a=b
String concatenation (eg. A$='FOO'+'BAR') is not allowed.
String assignments (eg. A$='FOO') must exactly fill the
allocated (DIMensioned) storage.
When running programs: for multi-variable INPUT statements, each entry
should be terminated with the RETURN key (not a comma).
2 bytes for pointer to next variable
1..15 bytes for name
4 bytes for contents
2 bytes for pointer to next variable
1..15 bytes for name
(0..255)*4 bytes for contents
2 bytes for pointer to next variable
1..15 bytes for name
1 byte for length
0..255 bytes for contents
Range
V1.0
V1.3
1780..17AA
00s
<various>
25B9..25BB
70 F4 80
1F 3E 98
2C25..2C27
3F 34 0D
3F 3F EE
2E6F..2E74
EE 14 A5 9C 30 5A
CE 14 A5 C0 C0 C0 (unofficial)
33B9..33BC
1A 64 19 6F
9C 4F D1 C0
3995
04
03
3E88..3EAA
<various>
<various>
3F2F..3F31
3F 3C F5
1F 17 96
3F78..3F7A
1F 38 91
1F 17 82
3FD1..3FED
<none>
<various>
3FEE..3FF3
<none>
<various>
Eg. LET A=0.7 or PRINT 0.7
$3961 will jump to ERR15 (based on Carry bit test).
If you NOP the jump at $3961 out, $3976 will jump to ERR15 shortly afterwards (based on OVerFlow bit test).
If both are NOPped out, 0.799999 goes in as $FF66665C (-0.017120) instead of $037FFFFF (0.799999).
0.8 is fine (goes in as $04400000, as expected), and so are higher numbers.
Negative numbers do not work correctly (due to the unary subtraction bug mentioned below).
Processing of A=0.7 or A=0.8 or similar will pass through EVAL, ECONST, FPDIV. At $3961 (in FPDIV) the interpreter first detects
the overflow error (if any). So the bug must occur before then.
This includes unary subtraction, ie. negative numbers.
Eg. A=-1 sets A to 3.
Positive exponents represent large positive or negative numbers.
Negative exponents represent small positive or negative numbers (-0.5..0.5).
Bits 30..24 are the exponent, ie. the position of the "decimal" (really binary) point.
$40..$7F are probably negative (-64..-1).
Bit 23 is the sign of the mantissa.
Bits 22..0 are the mantissa.
Positive numbers that have been properly normalized will have
mantissa bytes of $400000..$7FFFFF.)
23 - exponent is how many times to halve the value of the left-hand bits.
Left shift this value 1..24 times, respectively, for stored exponent of 0..23.
This represents the fractional part in 16 millionth (approx.) units.
So divide this value by 16,777,216 to obtain the fractional part.
The exponent is how many times to double the value of the right-hand bits.
The exponent is how many bits are needed to store the
integer part of the number. Very small numbers will have negative exponents.
Exponent
"Decimal" point position
Notes
...
...
...
-3
%.000xxxxxxxxxxxxxxxxxxxxxxxx
-2
%.00xxxxxxxxxxxxxxxxxxxxxxxx
-1
%.0xxxxxxxxxxxxxxxxxxxxxxxx
Eg. 0.25 = %.100000000000000000000000 = $7F 40 00 00 = move 24 bits right = 0 (for integer part)
0
%.xxxxxxxxxxxxxxxxxxxxxxxx
Eg. 0.5 = %0.10000000000000000000000 = $00 40 00 00 = move 23 bits right = 0 (for integer part)
1
%x.xxxxxxxxxxxxxxxxxxxxxxx
Eg. 1.0 = %01.0000000000000000000000 = $01 40 00 00 = move 22 bits right = 1
2
%xx.xxxxxxxxxxxxxxxxxxxxxx
Eg. 2.0 = %010.000000000000000000000 = $02 40 00 00 = move 21 bits right = 2
3
%xxx.xxxxxxxxxxxxxxxxxxxxx
Eg. 5.0 = %0101.00000000000000000000 = $03 50 00 00 = move 20 bits right = 5
4
%xxxx.xxxxxxxxxxxxxxxxxxxx
Eg. 10.0 = %00101.0000000000000000000 = $04 50 00 00 = move 19 bits right = 10
5
%xxxxx.xxxxxxxxxxxxxxxxxxx
.
6
%xxxxxx.xxxxxxxxxxxxxxxxxx
.
7
%xxxxxxx.xxxxxxxxxxxxxxxxx
Eg. 100.0 = %01100100.0000000000000000 = $07 64 00 00 = move 16 bits right = 100
8
%xxxxxxxx.xxxxxxxxxxxxxxxx
.
9
%xxxxxxxxx.xxxxxxxxxxxxxxx
.
10
%xxxxxxxxxx.xxxxxxxxxxxxxx
Eg. 1000.0 = %01111101000.0000000000000 = $0A 7D 00 00 = move 13 bits right = 1000
11
%xxxxxxxxxxx.xxxxxxxxxxxxx
12
%xxxxxxxxxxxx.xxxxxxxxxxxx
13
%xxxxxxxxxxxxx.xxxxxxxxxxx
14
%xxxxxxxxxxxxxx.xxxxxxxxxx
15
%xxxxxxxxxxxxxxx.xxxxxxxxx
16
%xxxxxxxxxxxxxxxx.xxxxxxxx
17
%xxxxxxxxxxxxxxxxx.xxxxxxx
18
%xxxxxxxxxxxxxxxxxx.xxxxxx
19
%xxxxxxxxxxxxxxxxxxx.xxxxx
20
%xxxxxxxxxxxxxxxxxxxx.xxxx
21
%xxxxxxxxxxxxxxxxxxxxx.xxx
22
%xxxxxxxxxxxxxxxxxxxxxx.xx
23
%xxxxxxxxxxxxxxxxxxxxxxx.x
24
%xxxxxxxxxxxxxxxxxxxxxxxx.
25
%xxxxxxxxxxxxxxxxxxxxxxxx0.
26
%xxxxxxxxxxxxxxxxxxxxxxxx00.
27
%xxxxxxxxxxxxxxxxxxxxxxxx000.
...
...
...
S - save to tape (pauses during save)
L - load from tape
R - runs the BASIC program
Cn - change from line n onwards
D - deletes line 1
Dn - deletes lines from 1 to n
E - exits to supervisor
An - append after line n. If you have just inserted some lines, it will add them again after the designated line
F - scrolls forwards 1 line
Fn - scrolls forwards n lines
I - insert after line 1 - type in program, Ctrl-C (=ETX) ends input
In - insert after line n - type in program, Ctrl-C (=ETX) ends input
Bn - scrolls backwards n lines
X - scrolls forwards 1 line
Xn - ?
P - modify string?
G - go and run program with following options:
D - direct execution of a typed-in line
R - run the program
S - single step
Esc - exits
At $5800 there is a small test program. It looks as if whoever saved the
program first ran it with the extended functions deleted and wrote a small
program before saving. So some of the extended functions may be corrupted
or they may all be missing.
When an error is encountered: these OPTIONs are available:
D - direct mode
R - rerun the program
S - single step
Esc - exits
Additionally, the byte at $29C7 is erroneous. Presumably BSTA,un $2400
was meant rather than BSTA,un *$2400 [$7710]; therefore $A4 should be
changed to $24.
R: runs the assembler
Z: frees (zeroes) memory (changes BLOCKS LEFT from 00 to 50)
Since the code for backspace is the same as that for lowercase "h" (8),
and the code for a carriage return is the same as that for lowercase "m"
(13), these two lowercase letters are unusable in this program.
Note that this program has not been tested on the genuine machine and
the key bindings are mostly guesswork.
$5BF6: 73 REDD,r3
$5BF7: 3F 01 9A BSTA,un DECR
$5BFA: CB 02 STRR,r3 $5BFE
$5BFC: 17 RETC,un
$5BFD: ?? <unused>
$5BFE: <vv> <value>start address = *($1512) * $100;
end address = (*($1513) * $100) - 1;5 LIST 6 LIST 5 LOAD
123 PATTERN
Region
Size
Mini-PHUNSY
Full version
$0000..$07FF
2K
RAM
EPROM (PHUNSY BIOS)
$0800..$0BFF
1K
RAM (optional)
user RAM
$0C00..$0E40
577 bytes
RAM (optional)
MDCR RAM
$0E41..$0EDF
159 bytes
RAM (optional)
user RAM
$0EE0..$0EFF
32 bytes
RAM (optional)
monitor RAM (scratchpad)
$0F00..$0FFF
256 bytes
RAM (optional)
monitor RAM (command input buffer)
$1000..$17FF
2K
RAM (optional)
RAM (screen memory)
$1800..$1DFF
1536 bytes
RAM (for use by BIOS)
banked RAM ("U" bank)
$1E00..$1FFF
512 bytes
ROM (Mini-Monitor BIOS)
banked RAM ("U" bank)
$2000..$3FFF
8K
unmapped?
general purpose RAM
$4000..$7FFF
16K
unmapped?
banked RAM ("Q" bank)
U1: EPROM (PDCR (Portable Digital Cassette Recorder))
U2: EPROM (DASS (DisASSembler))
U3: EPROM (LABHND (LABel HaNDler))
U4..UF: RAM
Q0: EPROM (MWB (MicroWorld BASIC)) ($4000..$5983)
Q1..QF: RAM
Q (if necessary)
OLD
RUN
NEW
3UU
PMON0401.BIN is 04-1 from 1982
PMON0402.BIN is 04-2 from 1983
PMON0403.BIN is 04-3 from 1982 (sic)
03A-PMON0404.BIN and 04A-PMON0404.bin are 04-4 from 1983
Bits 7..4 select which U-bank to use at $1800..$1FFF
Bits 3..0 select which Q-bank to use at $4000..$7FFF
Control port reads (REDC) are for serial input.
Data port reads (REDD) are for parallel input.
If high bit of data port is clear, a key is down.
If high bit of data port is set, no key is down.
Sound is generated by rapidly toggling bit 1 of the data port (via WRTD).
Writing to extended port $7E (WRTE) sets the timer countdown. It is
specified in units of 10 milliseconds (ie. 1/100ths of a second), and
thus can range from 0.01 to 2.55 seconds ($01..$FF). After expiration,
an interrupt is generated, causing execution to jump to $001D. The timer
is automatically reloaded whenever it expires. Writing $00 disables the
timer.
IIAD is the REDZV pointer $7D8 (SERIN)
ICAD is the CHIZV pointer $7C4 (DCHIN)
r5 = 0;
r4 = 8;
do
{
r0 = PORTC & 1;
} while (r0 != 0);
gosub DELAYC;
for (r4 = 8; r4 >= 1; r4--)
{
gosub DELAY;
r0 = (PORTC & 1) | r5;
r5 = r0 >> 1;
}
gosub DELAY;
r0 = r5 & %01111111;
return;r0 = PORTD;
if (r0 & %10000000 == %10000000)
{
r0 = $7F [DEL];
}
else
{
PORTD = 4;
r0 = PORTD;
PORTD = 0;
do
{
r5 = PORTD;
} while (r5 & %10000000 == %10000000);
r0 &= $7F;
}
return;do
{
r0 = PORTD;
} while (r0 & %10000000 == %10000000);
PORTD = 4;
r0 = PORTD;
PORTD = 0;
do
{
r5 = PORTD;
} while (r5 & %10000000 == %10000000);
r0 &= $7F;
return;
...0... ...4... ...8... ...C... ..D->M. .Reset.
...1... ...5... ...9... ...D... ..M->D. ..Halt.
...2... ...6... ...A... ...E... ...G... DumpCas
...3... ...7... ...B... ...F... ...Cl.. LoadCas
...a1.. ...a2.. ...a3.. NumLock ...n/.. ...n*..
...Q... ...W... ...E... ...n7.. ...n8.. ...n9..
...A... ...S... ...D... ...n4.. ...n5.. ...n6..
...Z... ...X... ...C... ...n1.. ...n2.. ...n3..
Cl = Clear
D = Display
G = Go to
M = Memory
.1.2.3.4.5.6.
64>374
BELMACH
BELMACH0
BIG-CHAR:
This is a subroutine designed to be called by other programs, by putting
the desired ASCII value in r0 and calling $3700. The imagery for the
character set is at $3000..$32FF. See the commented disassembly of this
program for more details.
BMK
CHRPRNTR
CLEARMEM:
This works but takes a few moments.
COPY
This installs these routines:
800G show this help
803G read cassette to RAM
806G save RAM to cassette
809G continue read after error
DASS6800
FORTH-01
FUN-CLOCK
GEINTJE
GETS-002:
Unsure what it is showing.
Eventually gets into an infinite output loop.
GRAPJE-1..5
KLOK:
The emulator is too fast, or the "game" is too slow, by a 1:120 ratio (0.8%).
KRANT
L-KRANT
MODESTA,B,C,N (all except MODEST itself)
MWBAS-04,05,06 (all except 00 and M6):
Type NEW at startup, otherwise it will always just say "FILE ERROR".
MWBAS, 14A-MWBAS-06, 20A-MWBAS-06, MWBAS-M6 are the 24/12/1983 version.
13A-MWBAS-06 is the 23/4/1984 version.
MWBAS-07 is the 6/11/2010 version.
MWBAS-00, MWBAS-05 are undated.
OTHELLO
PASS (both dumps)
PAUZE
PEDT-004
PEDT-0A3
PIANO
PMONmini
QASS-003
RAMTEST
RUNLIGHT
SEE-C374:
Usage: U
Type eg. U0 to start viewing memory from address $0000.
SEE-CHAR:
Usage: 800G
Type eg. 800G0 to start viewing memory from address $0000.
SEE-EXT (all dumps)
all games in the MicroWorldBASIC/ directory
BASIO-20 (It reads from extended I/O port(s) for some reason; possibly non-PHUNSY.
Maybe it's eg. the CD2650 extended basic functions. Needs investigation.)
CASSDISK
CDC-I/O (It's expecting there to be code at $6003 and there isn't any.)
CLOCK (10-A and 16-A. FUN.MDCR version is OK.)
CONV2>0 (This gosubs to $19EC (which doesn't contain anything) for some reason.)
CONV6>2
COPYOV
DAME (This is an ASCII picture.)
DISK
FLXWR-02
FORTH-00
FPRINTER
GRAPHICS
GRAPHS
HEXDUMP
I/OPACK (This seems to expect a different BIOS.)
LKRANT
MEMTA (Flashes INPUT ERR very briefly. Probably needs arguments to be provided.)
MODEST (both dumps)
MWBAS-00
MWBAS-M6
PALASM
PCITALK (Reads/writes from/to extended I/O port(s) for some reason.)
PH-CHR
PHCSRD (This tries to read from the cassette (via the Sense pin).)
PHEDTR2 (both dumps) (This reads from extended I/O ports for some reason.)
PORT9600
PRPRG ((E)PR(OM) Pr(o)g(rammer)?
Has PHUNSY monitor 04-P4 (special edition?) in it, and Malotaux
programmer, and data for various non-Signetics chips.
READHEX
ROW->COL (both dumps)
SCR
SEND-JET (This jumps to $1914 (which doesn't contain anything) for some reason.)
SER-I/O
SOUTCASS
TERML
TPRINT-S
TPRINTER (both dumps)
TRNR-001
ZOOI
the "program" is really just a subroutine library for use by other programs (eg. BIG-CHAR);
the "program" is really just data;
the program might just have bugs (eg. FORTH-00?);
the program might be a bad dump;
the program is expecting command line arguments (eg. SEE-CHAR);
the program is not intended to produce any output (eg. CLEARMEM);
etc.
Dutch
English
Dame
Lady
Krant
Newspaper
Liedjes
Songs
Zooi
Mess
Region
Size
No BIOS
With BIOS
$0000..$07FF
2K
user RAM
2716 BIOS ROM or 28C16 BIOS EEPROM (bottom left of memory card)
$0800..$08FF
0.25K
user RAM?
6116 BIOS RAM (top left of memory card)
$0900..$0FFF
1.75K
user RAM?
6116 user RAM (top left of memory card)
$1000..$17FF
2K
user RAM?
6116 RAM, 2716 ROM, or 28C16 EEPROM (bottom right of memory card)
$1800..$1FFF
2K
user RAM?
6116 RAM, 2716 ROM, or 28C16 EEPROM (top right of memory card)
$2000..$7FFF
24K
unmapped?
unmapped?
No.
German
English
Pages
1
Netzteil
Power supply
69-80
2
Busplatte
Bus board or backplane
81-92
3
Daten eingabe anzeige
Data input display
93-110
4
CPU
CPU
111-140
5
Addressen eingabe anzeige
Address input display
141-147
6
Speicher
Memory
148-172
7
Porteinheit
Port unit
173-189
8
A/D-Wandler
A/D converter (analog-to-digital converter)
190-212
9
Tastatur & anzeige
Keyboard & display
213-239
10
Casetten-interface
Cassette interface
240-249
...C... ...D... ...E... ...F... ..CMD.. .FLAG..
...8... ...9... ...A... ...B... ..RUN.. ..MON..
...4... ...5... ...6... ...7... ..GOTO. ..PC...
...0... ...1... ...2... ...3... ..RST.. ..NXT.....a1.. ...a2.. ...a3.. .NumLk. ...n/.. ...n*..
...Q... ...W... ...E... ...n7.. ...n8.. ...n9..
...A... ...S... ...D... ...n4.. ...n5.. ...n6..
...Z... ...X... ...C... ...n1.. ...n2.. ...n3..
Diode
Colour
CLOCK
red
OPACK
green
OPREQ
yellow
M/IO
red
RUN/WAIT
green
WRP
red
FLAG
red
HEXDEZ (ZBSR,un *$3) @ $5E9 HEXBCD
CONV (ZBSR,un *$5) @ $230 CONVT
SEP (ZBSR,un *$7) @ $207 SEPNIB
COMB (ZBSR,un *$9) @ $21E COMNIB
DIS (ZBSR,un *$B) @ $E5 DISP
KIN (ZBSR,un *$D) @ $C4 KIN1
INIT (ZBSR,un *$F) @ $235 INIT1
SAVE (ZBSR,un *$11) @ $24E INIT2
RECAL (ZBSR,un *$13) @ $272 INIT3
CDIS (ZBSR,un *$15) @ $296 CDISP
BPGOT (ZBSR,un *$17) @ $574 BPFND
LODAT (ZBSR,un *$19) @ $149 LOAD
ADDSUB (ZBSR,un *$1B) @ $6A0 ADSB
MULT (ZBSR,un *$1D) @ $6CD MPYS
DIV (ZBSR,un *$1F) @ $700 DIVS
DEZHEX (ZBSR,un *$21) @ $649 BCDHEX
SEPD (ZBSR,un *$23) @ $197 SEPDIS
HEXD (ZBSR,un *$25) @ $774 HEXD1
DHEX (ZBSR,un *$27) @ $79D DHEX1
HEX (ZBSR,un *$29) @ $79F DHEX2
DEZ (ZBSR,un *$2B) @ $776 HEXD2
ERROR (ZBSR,un *$2D) @ $432 ERRKIN (ZBSR,un *$14) @ $384 KBIN
WBL (ZBSR,un *$16) @ $16A WRBL
WCH (ZBSR,un *$18) @ $425 WCHR
INPHX (ZBSR,un *$1A) @ $1B6 INHX
OUTHX (ZBSR,un *$1C) @ $4F HXO
LINEF (ZBSR,un *$1E) @ $45 LFC
PUT (ZBSR,un *$20) @ $2C1 SERO
GET (ZBSR,un *$22) @ $35E SERI
HXTAB (ZBSR,un *$24) @ $19A TABL
ADRES (ZBSR,un *$26) @ $185 ADDR
CONTR (ZBSR,un *$28) @ $48C CR
HO (ZBSR,un *$2A) @ $4E5 HOME1
CURSL (ZBSR,un *$2C) @ $4EE CURL3
CURSR (ZBSR,un *$2E) @ $52B CURR1
CURSU (ZBSR,un *$30) @ $5E6 CUUP1
CURSD (ZBSR,un *$32) @ $4C2 LF1
SCCLR (ZBSR,un *$34) @ $4CA CLR2
BACK (ZBSR,un *$36) @ $51A BACK1
B
C
Dump
E
I
Load
R
Verify
German Name
English Translation
440-Hz-Programm zum Abgleich des CLOCK-Oszillators
440 Hz program for the adjustment of clock oscillator
Portadressierung
Port addressing
Einfache Addition
Simple addition
Einfache Subtraktion
Simple subtraction
Einfache Multiplikation
Simple multiplication
Einfache Division
Simple division
Verkehrsampel 1
Traffic lights 1
Blinklicht
Beacon
Würfel
Dice
Metronom
Metronome
Lauflicht
Running light
Voltmeter mit dualer Anzeige
Dual display voltmeter
Denkzeitbegrenzer
Think time limiter
Verkehrsampel 2
Traffic lights 2
VU-Meter
Vumeter
Laufschrift
Scrolling text
Würfelspiel
Dice game
Reaktionstest
Reaction test
Stoppuhr
Stopwatch
Digitaluhr
Digital clock
HEX-DEZ-HEX-Wandlung
Hexadecimal-decimal-hexadecimal conversion
HEX-Rechnen
Hexadecimal calculation
DEZ-Rechnen
Decimal calculation
Lottozahlen
Lotto numbers
Morse-Übungsprogramm
Morse code practice
Voltmeter 2 (3stellig dezimal)
Voltmeter 2 (3-digit decimal)
for (;;)
{ gosub GDEZ;
*($827) = r3;
*($828) = r2;
do
{ gosub KIN;
r3 = *($800);
REGS = r3;
} while (r3 <= $0F || r3 >= $50);
gosub GDEZ;
*($829) = r3;
*($82A) = r2;
r3 = REGS;
switch (r3)
{
case '-': PSL |= COM ; gosub ADDSUB;
acase '+': PSL &= ~(COM); gosub ADDSUB;
acase '*': gosub MULT;
acase '/': gosub DIV;
adefault: r3 = *($812) = '3'; // 6th digit
goto ERROR;
}
gosub HEXD;
gosub KIN;
}
do
{ gosub CDIS;
gosub KIN;
PSL &= ~(WC);
r3 = *($800);
if (r3 == '+')
{ *($8FF) = '+';
r3 = *($80D) = 'P'; // 1st digit
} elif (r3 == '-')
{ *($8FF) = '-';
r3 = *($80D) = '-'; // 1st digit
} }
while (*($800) != '+' && *($800) != '-');
r2 = *($82D) = 5;
gosub LODAT;
r3 = $20;
if (*($8FF) != '-')
{ *($81A) |= $90;
}
*($82E..$830) = *($81A..$81C);
gosub DEZHEX;
r3 = *($82B);
r2 = *($82C);
return;.......* means 1 was rolled
......*. means 2 was rolled
......** means 3 was rolled
.....*.. means 4 was rolled
.....*.* means 5 was rolled
.....**. means 6 was rolledfor (;;)
{ *($80D..$812) = 0;
*($81B) = 0;
for (i = 0; i < 3; i++)
{ gosub RANDOM;
gosub SUMME;
gosub CONV;
*($80D + i) = r3; // 1st..3rd segments
gosub KIN;
} }
*($81C) = r3;
*($81B) += r3;
*($82B) = 0;
*($82C) = r3;
gosub HEXDEZ;
r3 = *($830);
*($801) = r3;
gosub SEP;
r3 = *($801);
gosub CONV;
*($811) = r3; // 5th segment
r3 = *($802);
gosub CONV;
*($812) = R3; // 6th segment
r3 = *($81C);
return;
r0 = PSU & Sense;
NEW:
r3 = 0;
LOOP:
r3++;
if (r3 == 7) goto NEW;
r0 = PSU & Sense;
compare r0 against *($815);
if (==) goto LOOP;
return;gosub CDIS; // clear display
*(LOTTO..LOTTO+14) = 0; // or, *($8F0..$8FE) = 0;
RSLT = 0;
for (*($8F7) = 1; *($8F7) <= 7; *($8F7)++)
{ *(LOTTO + *($8F7)) = RANDOM();
*($82C) = *($8F7);
gosub HEXDEZ;
r3 = *($830);
DATA2 = r3;
gosub SEP;
*($812) = CONV(DATA3); // 6th digit
*($811) = CONV(DATA2); // 5th digit
*($80D) = CONV(*($8F7)); // 1st digit
gosub KIN;
}
goto START;
WBUF = PSU & Sense;
for (r3 = 1; r3 <= 49; r3++)
{ if ((PSU & Sense) != WBUF)
{ r0 = r3;
for (r2 = 1; r2 <= 7; r2++)
{ if (r0 == *(LOTTO + r2))
{ goto RANDOM;
} } } }
return; // result is in r0 and also in r3
$8F1..$8F6 are the drawn numbers.
$8F7 is the sequence number (1..3).
Character
Data
Morse
Notes
A
$0240
%.-000000
-
B
$0480
%-...0000
-
C
$04A0
%-.-.0000
-
D
$0380
%-..00000
-
E
$0100
%.0000000
-
...
...
...
...
Z
$04C0
%--..0000
-
0
$05F8
%-----000
-
1
$0578
%.----000
-
...
...
...
...
9
$05F0
%----.000
-
=
$0588
%-...-000
-
;
$06A8
%-.-.-.00
-
,
$06CC
%--..--00
-
-
$0684
%-....-00
-
/
$0590
%-..-.000
-
:
$06E0
%---...00
-
?
$0630
%..--..00
-
.
$0654
%.-.-.-00
-
$05A8
%-.-.-000
Starting signal (/KA aka /CT)
+
$0550
%.-.-.000
New message follows (/RN aka /AR)
Region
Size
MIKIT 2650-K1, 2650-P1
MIKIT 2650-K21, 2650-P21, 2650-K1+2650-K2
$0000..$01FF
512 bytes
BIOS ROM
BIOS ROM
$0200..$03FF
512 bytes
unmapped?
BIOS ROM
$0400..$041F
32 bytes
BIOS RAM
BIOS RAM
$0420..$04FF
234 bytes
user RAM
user RAM
$0500..$07FF
768 bytes
unmapped?
user RAM
$0800..$7FFF
30K
unmapped?
unmapped?
MIKIT 2650-K1, 2650-P1 have 4 I/O ports, 512 bytes of ROM, 256 bytes of RAM.
MIKIT 2650-K21, 2650-P21, 2650-K1+2650-K2 have 8 I/O ports, 1K of ROM, 1K of RAM,
and support cassette and teletype I/O.
The 6 LED digits are at $402..$407 (in BIOS RAM).
$FD is the entry point to the BIOS display routine.
The cassette recorder uses port 227 ($E3) for input and port 228 ($E4) for output.
The teletype uses port 229 ($E5) for input and port 226 ($E2) for output.
.BLANK. ...R... ...C... ...D... ...E... ...F...
...+... ...G... ...8... ...9... ...A... ...B...
...H... ...P... ...4... ...P... ...6... ...7...
...L... ...S... ...0... ...1... ...2... ...3...
R = Read
+ = Add?
G = Go
H = Halt
P = Punch
L = Load
S = Store
...a1.. ...a2.. ...a3.. .NumLk. ...n/.. ...n*..
...Q... ...W... ...E... ...n7.. ...n8.. ...n9..
...A... ...S... ...D... ...n4.. ...n5.. ...n6..
...Z... ...X... ...C... ...n1.. ...n2.. ...n3..enable interrupts
use main register bank
clear With Carry
set signed compare
for (;;)
{ for (r1 = 1, r3 = N; r3 > 0; r1++, r3--)
{ r0 = *(&A + r3);
if (r1 == r0)
{ PORTC = r1;
}
while (PORTC != *(&B + r3));
} }enable interrupts
use main register bank
clear With Carry
set signed compare
AUS:
use main register bank
PORTC = ........; // clear glow LEDs
while (PORTC & %10000000);
for (;;)
{ PORTC = .......#; // light one glow LED
for (r4 = 256; r4 > 0; r4--)
{ for (r5 = 48; r5 > 0; r5--)
{ if (PORTC & %00000001 == %00000000)
{ goto AUS;
} } }
PORTC = ........; // clear glow LEDs
for (r4 = 256; r4 > 0; r4--)
{ for (r5 = 48; r5 > 0; r5--)
{ if (PORTC & %00000001 == %00000000)
{ goto AUS;
} } } }enable interrupts
use main register bank
clear With Carry
set unsigned compare
*($402..$407) = $66;
for (;;)
{ for (r1 = 6; r1 > 0; r1--)
{ gosub $FD;
if (PORTC & %10000000 == %00000000)
{ *($407) = r1;
do
{ gosub $FD;
r0 = PORTC;
} while (r0 >= 1 && r0 <= 127);
} } }
As soon as the numbers begin incrementing, press eg. the '1' key.
The keys you have to press are stored in *($52A..$52C) (in reverse order).
COD is $529.
Press 1, then 2, then 3.
The entire game is as follows:
enable interrupts
use main register bank
clear With Carry
set unsigned compare
PORTC = 0; // clear glow LEDs
while (PORTC != *($52D)); // wait for first key
for (r1 = 2; r1 >= 0; r1--)
{ for (r2 = 256; r2 > 0; r2--)
{ wait
if (PORTC == *(&COD + r1)) // if pressed correct key
{ goto S1;
} }
PORTC = ########; // lose
for (;;);
S1:
;
}
PORTC = #.#.#.#.; // win
for (;;);
Region
Size
Malzak 1
Malzak 2
$0000..$07FF
2K
from $0000..$07FF of malzak.5 (ROM code)
from $0000..$07FF of malzak.1a (ROM code)
$0800..$0BFF
1K
from $0000..$03FF of malzak.4 (ROM code)
from $0000..$03FF of malzak.2b (ROM code)
$0C00..$0FFF
1K
from $0000..$03FF of malzak.3 (ROM data) (screen data?)
banked area (controlled by bit 6 of I/O port $40)
Malzak 1: from $0000..$03FF of malzak.4d (ROM data) (screen data)
Malzak 2: from $0400..$07FF of malzak.4d (ROM data) (screen data)
$1000..$13FF
1K
RAM
RAM
$1400..$14FF
256 bytes
1st PVI
1st PVI
$1500..$15FF
256 bytes
2nd PVI
2nd PVI
$1600..$16FF
256 bytes
playfield tilemap
playfield tilemap
$1700..$17FF
256 bytes
RAM
NVRAM
$1800..$1E3F
1600 bytes
teletext screen contents
teletext screen contents
$1E40..$1FFF
448 bytes
RAM?
RAM?
$2000..$27FF
2K
from $0800..$0FFF of malzak.5 (ROM code)
from $0800..$0FFF of malzak.1a (ROM code)
$2800..$2BFF
1K
empty
from $0800..$0BFF of malzak.2b
$2C00..$2FFF
1K
empty
empty
$3000..$3FFF
4K
mirror of $1000..$1FFF
mirror of $1000..$1FFF
$4000..$43FF
1K
from $0400..$07FF of malzak.4 (ROM code) (terrain code)
from $0400..$07FF of malzak.2b (ROM code) (terrain code)
$4400..$4BFF
2K
from $0000..$07FF of malzak.3 (ROM data) (terrain data)
banked area? If so...
Malzak 1: from $0000..$07FF of malzak.3 (ROM data) (terrain data)
Malzak 2: from $0000..$07FF of malzak.3c (ROM data) (terrain data)
$4C00..$4FFF
1K
empty
empty
$5000..$5FFF
4K
mirror of $1000..$1FFF
mirror of $1000..$1FFF
$6000..$63FF
1K
empty
from $0C00..$0FFF of malzak.2b
$6400..$6FFF
3K
empty
empty
$7000..$7FFF
4K
mirror of $1000..$1FFF
mirror of $1000..$1FFF
$1xxx is deliberately mirrored at $3xxx, $5xxx, $7xxx, because on
the 2650, you can only access data on the same 8K page, so mirroring is
very useful for the game programmer (otherwise code in the $2000..$7FFF
region could not directly access any of the RAM).
P1, P2 buttons
Firebutton
Coin slot
Test switch (Malzak 2 only)
Bit 6: left (active high)
Bit 5: right (active high)
Bit 4: fire (active high)
Bit 3: 2P (active high)
Bit 2: 1P (active high)
Bit 1: down (active high)
Bit 0: coin slot (active low)
Region
Size
Astro Wars
Galaxia
$0000..$03FF
1K
from $0000..$03FF of 08h.bin (ROM)
from $0000..$03FF of 08h.bin (ROM)
$0400..$07FF
1K
from $0000..$03FF of 10h.bin (ROM)
from $0000..$03FF of 10h.bin (ROM)
$0800..$0BFF
1K
from $0000..$03FF of 11h.bin (ROM)
from $0000..$03FF of 11h.bin (ROM)
$0C00..$0FFF
1K
from $0000..$03FF of 13h.bin (ROM)
from $0000..$03FF of 13h.bin (ROM)
$1000..$13FF
1K
from $0000..$03FF of 08i.bin (ROM)
from $0000..$03FF of 08i.bin (ROM)
$1400..$14FF
256 bytes
RAM
banked:
when Flag bit of PSU is clear: bullet RAM
when Flag bit of PSU is set: palette RAM (16 bytes)
$1500..$15FF
256 bytes
PVI
1st PVI
$1600..$16FF
256 bytes
unmapped?
2nd PVI
$1700..$17FF
256 bytes
unmapped?
3rd PVI
$1800..$1BFF
1K
banked:
when Flag bit of PSU is clear: screen colours
when Flag bit of PSU is set: screen contents
banked:
when Flag bit of PSU is clear: screen colours
when Flag bit of PSU is set: screen contents
$1C00..$1CFF
256 bytes
banked:
when Flag bit of PSU is clear: bullet RAM
when Flag bit of PSU is set: palette RAM (16 bytes)
RAM
$1D00..$1FFF
768 bytes
unmapped?
RAM
$2000..$23FF
1K
from $0000..$03FF of 10i.bin (ROM)
from $0000..$03FF of 10i.bin (ROM)
$2400..$27FF
1K
from $0000..$03FF of 11i.bin (ROM)
from $0000..$03FF of 11i.bin (ROM)
$2800..$2BFF
1K
from $0000..$03FF of 13i.bin (ROM)
from $0000..$03FF of 13i.bin (ROM)
$2C00..$2FFF
1K
from $0000..$03FF of 11l.bin (ROM)
from $0000..$03FF of 11l.bin (ROM)
$3000..$33FF
1K
from $0000..$03FF of 13l.bin (ROM)
from $0000..$03FF of 13l.bin (ROM)
$3400..$3FFF
3K
mirror of $1400..$1FFF
mirror of $1400..$1FFF
$4000..$53FF
5K
unknown
unknown
$5400..$5FFF
3K
mirror of $1400..$1FFF
mirror of $1400..$1FFF
$6000..$73FF
5K
unknown
unknown
$7400..$7FFF
3K
mirror of $1400..$1FFF
mirror of $1400..$1FFF
Region
Size
Laser Battle
Lazarian
$0000..$03FF
1K
from $0000..$03FF of lb02.7c/laz.7c/02-1.7c
from $0000..$03FF of lb02.7c/laz.7c/02-1.7c
$0400..$07FF
1K
from $0000..$03FF of lb02.6c/laz.6c/02-2.6c
from $0000..$03FF of lb02.6c/laz.6c/02-2.6c
$0800..$0BFF
1K
from $0000..$03FF of lb02.5c/laz.5c/02-3.5c
from $0000..$03FF of lb02.5c/laz.5c/02-3.5c
$0C00..$0FFF
1K
from $0000..$03FF of lb02.3c/laz.3c/02-4.3c
from $0000..$03FF of lb02.3c/laz.3c/02-4.3c
$1000..$13FF
1K
from $0000..$03FF of lb02.2c/laz.2c/02-5.2c
from $0000..$03FF of lb02.2c/laz.2c/02-5.2c
$1400..$14FF
256 bytes
unused
unused
$1500..$15FF
256 bytes
1st PVI
1st PVI
$1600..$16FF
256 bytes
2nd PVI
2nd PVI
$1700..$17FF
256 bytes
3rd PVI
3rd PVI
$1800..$1BFF
1K
display RAM (write-only)
display RAM (write-only)
$1C00..$1FFF
1K
user RAM
user RAM
$2000..$23FF
1K
from $0000..$03FF of lb02.7b/laz.7b/02-6.7b
from $0000..$03FF of lb02.7b/laz.7b/02-6.7b
$2400..$27FF
1K
from $0000..$03FF of lb02.6b/laz.6b/02-7.6b
from $0000..$03FF of lb02.6b/laz.6b/02-7.6b
$2800..$2BFF
1K
from $0000..$03FF of lb02.5b/laz.5b/02-8.5b
from $0000..$03FF of lb02.5b/laz.5b/02-8.5b
$2C00..$2FFF
1K
from $0000..$03FF of lb02.3b/laz.3b/02-9.3b
from $0000..$03FF of lb02.3b/laz.3b/02-9.3b
$3000..$33FF
1K
from $0000..$03FF of lb02.2b
from $0800..$0BFF of laz10-62.2b
$3400..$37FF
1K
mirror of $1400..$17FF
mirror of $1400..$17FF
$3800..$3BFF
1K
mirror of $1800..$1BFF?
from $0000..$03FF of laz10-62.2b
$3C00..$3FFF
1K
mirror of $1C00..$1FFF
mirror of $1C00..$1FFF
$4000..$43FF
1K
from $0400..$07FF of lb02.7c/laz.7c/02-1.7c
from $0400..$07FF of lb02.7c/laz.7c/02-1.7c
$4400..$47FF
1K
from $0400..$07FF of lb02.6c/laz.6c/02-2.6c
from $0400..$07FF of lb02.6c/laz.6c/02-2.6c
$4800..$4BFF
1K
from $0400..$07FF of lb02.5c/laz.5c/02-3.5c
from $0400..$07FF of lb02.5c/laz.5c/02-3.5c
$4C00..$4FFF
1K
from $0400..$07FF of lb02.3c/laz.3c/02-4.3c
from $0400..$07FF of lb02.3c/laz.3c/02-4.3c
$5000..$53FF
1K
from $0400..$07FF of lb02.2c/laz.2c/02-5.2c
from $0400..$07FF of lb02.2c/laz.2c/02-5.2c
$5400..$5FFF
3K
mirror of $1400..$1FFF?
mirror of $1400..$1FFF?
$6000..$63FF
1K
from $0400..$07FF of lb02.7b/laz.7b/02-6.7b
from $0400..$07FF of lb02.7b/laz.7b/02-6.7b
$6400..$67FF
1K
from $0400..$07FF of lb02.6b/laz.6b/02-7.6b
from $0400..$07FF of lb02.6b/laz.6b/02-7.6b
$6800..$6BFF
1K
from $0400..$07FF of lb02.5b/laz.5b/02-8.5b
from $0400..$07FF of lb02.5b/laz.5b/02-8.5b
$6C00..$6FFF
1K
from $0400..$07FF of lb02.3b/laz.3b/02-9.3b
from $0400..$07FF of lb02.3b/laz.3b/02-9.3b
$7000..$73FF
1K
from $0C00..$0FFF of lb02.2b/laz10-62.2b/02-10-11.2b
from $0C00..$0FFF of lb02.2b/laz10-62.2b/02-10-11.2b
$7400..$77FF
1K
mirror of $1400..$17FF?
mirror of $1400..$17FF?
$7800..$7BFF
1K
mirror of $1800..$1BFF?
from $0400..$07FF of laz10-62.2b
$7C00..$7FFF
1K
mirror of $1C00..$1FFF?
mirror of $1C00..$1FFF?
Input
Bit(s)
Laser Battle
Lazarian
$00
7
Button 4 (0=pressed, 1=unpressed)
Button 4 (0=pressed, 1=unpressed)
$00
6
Button 3 (0=pressed, 1=unpressed)
Button 3 (0=pressed, 1=unpressed)
$00
5
Button 2 (0=pressed, 1=unpressed)
Button 2 (0=pressed, 1=unpressed)
$00
4
Button 1 (0=pressed, 1=unpressed)
Button 1 (0=pressed, 1=unpressed)
$00
3
Service A (0=pressed, 1=unpressed)
Service A (0=pressed, 1=unpressed)
$00
2
Coin B (0="pressed", 1="unpressed")
Coin B (0="pressed", 1="unpressed")
$00
1
P2 start (0=pressed, 1=unpressed)
P2 start (0=pressed, 1=unpressed)
$00
0
P1 start (0=pressed, 1=unpressed)
P1 start (0=pressed, 1=unpressed)
$10
7
Reset (0="pressed", 1="unpressed")
Reset (0="pressed", 1="unpressed")
$10
6
Coin A (0="pressed", 1="unpressed")
Coin A (0="pressed", 1="unpressed")
$10
5
?
?
$10
4
?
?
$10
3
?
?
$10
2
?
?
$10
1
?
?
$10
0
?
?
$20
7
Collision detection (0=off, 1=on)
Collision detection (0=off, 1=on)
$20
6
Infinite lives (0=off, 1=on)
Calibration display (0=off, 1=on)
$20
5..4
Lives:
%00 = 2 lives
%01 = 3 lives
%10 = 5 lives
%11 = 6 lives
Lives:
%00 = 2 lives
%01 = 3 lives
%10 = 4 lives
%11 = 5 lives
$20
3..2
Coin B generosity:
%00 = 2 credits
%01 = 3 credits
%10 = 5 credits
%11 = 7 credits
Coin B generosity:
%00 = 2 credits
%01 = 3 credits
%10 = 5 credits
%11 = 7 credits
$20
1..0
Coin A generosity:
%00 = 1 credit
%01 = 2 credits
%10 = 3 credits
%11 = 5 credits
Coin A generosity:
%00 = ½ credit
%01 = 1 credit
%10 = 2 credits
%11 = 3 credits
$30
7
Joystick down (0=yes, 1=no)
Joystick down (0=yes, 1=no)
$30
6
Joystick up (0=yes, 1=no)
Joystick up (0=yes, 1=no)
$30
5
Joystick right (0=yes, 1=no)
Joystick right (0=yes, 1=no)
$30
4
Joystick left (0=yes, 1=no)
Joystick left (0=yes, 1=no)
$30
3
?
?
$30
2
?
Freeze (0=off, 1=on)
$30
1
?
Firing (0=rapid, 1=normal)
$30
0
?
?
If WinRAR complains that the file is corrupt, your WinRAR version is
probably too old (eg. WinRAR 3.62 and earlier are definitely too old);
you will need to download and install a more recent version of WinRAR
from https://www.rarlab.com .
Extract it all to somewhere (eg. C:\GAMES\ZACCARIA). The password is cs.rin.ru .
If WinRAR complains that the file is corrupt, your WinRAR version is
probably too old (eg. WinRAR 3.62 and earlier are definitely too old);
you will need to download and install a more recent version of WinRAR
from https://www.rarlab.com .
Extract everything from SSE_v1.4.3 directory into the same directory as
previously (thus overwriting ZaccariaPinball.exe and steam_api.dll).
The password is cs.rin.ru .
3a. Click on an empty part of the desktop, right-click and choose
"New|Shortcut".
3b. Click "Browse...".
3c. Navigate to where SmartSteamLoader.exe is located (eg.
C:\GAMES\ZACCARIA), click the SmartSteamLoader.exe file, and click
"OK".
3d. Click "Next...".
3e. Change the shortcut name to eg. "Zaccaria Pinball" or whatever and
press ENTER.
4a. Download the icon from
https://cdn.cloudflare.steamstatic.com/steamcommunity/public/images/apps/444930/08bf6c6da88227cce20ef9e1993f128235a8a46f.ico
(or "Save as.." the icon here on the right)
into the same directory as SmartSteamLoader.exe (C:\GAMES\ZACCARIA or wherever).
4b. Click on the shortcut, right-click and choose "Properties".
4c. Click "Change Icon...".
4d. Click "Browse...".
4e. Double-click the 08bf6c6da88227cce20ef9e1993f128235a8a46f.ico file.
4f. Click "OK" twice.
6a. Microsoft Visual C++ 2008 Redistributable Package (4,483,040 bytes)
from
https://download.microsoft.com/download/5/D/8/5D8C65CB-C849-4025-8E95-C3966CAFD8AE/vcredist_x86.exe. Run the installer.
Or:
6b. Microsoft Visual C++ 2010 SP1 Redistributable Package MFC Security
Update (8,993,774 bytes) from
https://download.microsoft.com/download/1/6/5/165255E7-1014-4D0A-B094-B6A430A6BFFC/vcredist_x86.exe. Run the installer and choose the "Repair" option.
(You need the x86 (32-bit) version even if you have an x64 (64-bit) CPU.)
You can get this from https://openal.org/downloads/oalinst.zip.
Extract oalinst.exe anywhere and run it.
Clown
Devil Riders
Earth, Wind, Fire
Farfalla
Locomotion
Magic Castle
Mexico '86
Pinball Champ
Pool Champion
Robot
Soccer Kings
Spooky
Star's Phoenix
Time Machine
Zankor
Futureworld
Hot Wheels
House of Diamonds
Mystic Star
Shooting the Rapids
Space Shuttle
Stargod
Strike
Winter Sports
Platform
Keyboard input
VDU output
Tape input
Tape output
Tape format
Motor control
Emerson Arcadia 2001
Memory mapped
Memory mapped
n/a
n/a
n/a
n/a
Interton VC 4000
Memory mapped
Memory mapped
n/a
n/a
n/a
n/a
Elektor TV Games Computer
Memory mapped
Memory mapped
1515+ baud raw via CASIN
1515+ baud raw via CASOUT
EOF
No
PIPBUG 1
110 baud teletype via Sense
110 baud teletype via Flag
110 baud CUTS via Sense
110 baud CUTS via Flag
AOF
No
PIPBUG 2
110/300 baud teletype via Sense
110/300 baud teletype via Flag
110/300 baud CUTS via Sense
110/300 baud CUTS via Flag
AOF?
No?
HYBUG
300/600/1200 baud teletype?
300/600/1200 baud teletype?
300/600/1200 baud?
300/600/1200 baud?
?
?
BINBUG 3.6
300 baud teletype via Sense
Memory mapped
?
?
?
Yes, with ACOS
Signetics Instructor 50
Memory mapped
?
? baud via Sense
? baud via extended I/O port $F8
AOF
No?
Central Data 2650
Parallel keyboard via Data port
Memory mapped, 80*16 characters
Monochrome
300* baud CUTS via Sense
clear bit = 4 cycles of 1200Hz
set bit = 8 cycles of 2400Hz
300* baud CUTS via Flag
clear bit = 4 cycles of 1200Hz
set bit = 8 cycles of 2400Hz
AOF
Yes
PHUNSY
?
Memory mapped, 64*32 characters
8-level greyscale
?
?
?
?
Ravensburger Selbstbaucomputer
Parallel keyboard via port $07
Ports $1B & $1C
110 baud CUTS? via Sense
110 baud CUTS? via Flag
?
Yes
Platform
Drives
Size
Tracks
Track size
Sectors/track
Sector size
Sectors
Capacity
Format(s)
Dir sectors
DOS sectors
Max files
Controller
RPM
Speed
BINBUG
0+
5.25"
40 (0..39)
2.5K
10 (1..10)
256 bytes
400
100K
RAW
10
3
100
1 MHz FD1771
300
12.5K/sec
Central Data 2650
0-4
5.25"
35 (0..34)
2.25K
9 (1..9)
256 bytes
315
78.75K
RAW
18
128
64
1 MHz FD1771
300
11.25K/sec
Signetics TWIN
2
8"
77 (0..76)
4K
32 (0..31)
128 bytes
308
308K
IMG, TWIN
4
27
78
?
360
24K/sec
(Speed of reading/writing processed bytes, assuming an infinitely fast CPU.)
The drive motor on 8" floppy drives runs on 230V AC and is always on.
The drive is kept spinning at all times. The head is unloaded when idle,
but the disk is always spinning within its sleeve.
The drive motor on 5.25" floppy drives is turned on and off as required.
.IMG files are raw disk files of 308K (315,392 bytes), lacking sector and
block numbers.
.TWIN files are disk files of 320,320 bytes, the same as .IMG except that
each 128-byte sector is prepended with the track and sector numbers (thus
becoming 130 bytes per sector).
Printer
EUY-10E023LE
Centronics Model 306C
Condensed width
32 columns * 8 dots = 256 dots
132 columns
Normal width
32 columns * 8 dots = 256 dots
80 columns
Expanded width
16 columns * 16 dots = 256 dots
?
Speed
2 lines/sec (512 dots/sec)
?
Paper size (printable area)
? cm * 60 m
2.5..8" * 11"
Paper size (total)
6 cm * 60 m
4..9.5" * 11"
Horizontal characters per inch (condensed mode)
?
16.5
Horizontal characters per inch (normal mode)
?
10
Vertical characters per inch
?
6
CPU:
TVGC
PIPBUG 1
BINBUG 3.6
SI50
SDOS 3.0
Supervisor
Selbst
Ami/WinArcadia
See & alter IAR
PC
REG C
PC
J|JUMP
See & alter PSU
REG
S 7
S7
REG 7
SEt PSU
I8
CMD A
E|POKE PSU
See & alter PSL
REG
S 8
S8
REG 8
SEt PSL
I7
CMD A
E|POKE PSL
See & alter registers
REG
S 0..6
S0..S6
REG 0..6
SEt R0..R6
I0..I6
CMD A
E|POKE R0..R6
Set slave CPU mode
Ice
Memory:
TVGC
PIPBUG 1
BINBUG 3.6
SI50
SDOS 3.0
Supervisor
PHUNSY
Selbst
MIKIT
Ami/WinArcadia
Compare (verify) memory
V
COMP
Copy (move) memory
MOVe
M
NXT
COPY|MOVE
Dump memory to screen
D address1 address2
Dump
I
D|PEEK
Fill memory
Fill
P
FILL
Patch memory
REG F
Patch
:
See & alter memory
MEM
A address
A
MEM
Exam
WRite
A
:
NXT
Read
E|POKE
D|PEEK
Program control:
TVGC
PIPBUG 1
BINBUG 6/7
SI50
SDOS 3.0
CD2650
PHUNSY
Selbst
MIKIT
Ami/WinArcadia
Abort program
Abort
Cold start DOS
K
Continue program
Cont
G|P
Execute program
START
G address
G
RUN
Go
E (supervisor)
EXEC (CD DOS)
G
RUN
GOTO
PC
Go
G|P
Generate an interrupt
INT
GI
Reset machine
RST
RST
MON
F5 key
Step instruction
STEP
S
Suspend program
Suspend
G|P
Warm start DOS
W
Debugging:
TVGC
PIPBUG 1
BINBUG 3.6
SI50
SDOS 3.0
Supervisor
PHUNSY
Selbst
MIKIT
Ami/WinArcadia
Clear breakpoint
BP
C 1|2
C
BKPT
CLBp
C
BP1/2
CMD C
BC
Load debugger
DEBug
Relocate debug utility programs
Upr
Set breakpoint
BP
B 1|2 address
B
BKPT
BKpt
B
BP1/2
CMD B
Halt
BP
Set trace mode
TRace
T
Show status of debugger
DStat
V|VIEW CPU
BL, IL, WL
Show status of slave program
STatus
Tapes:
TVGC
PIPBUG 1
BINBUG 3.6
SI50
Supervisor
PHUNSY
Selbst
MIKIT
Adjust tape
REG A
Issue MDCR command
T
Load memory as AOF/EOF from tape
RCAS
L
L
RCAS
L
R
CMD F
Load
Run tape recorder
R
Save (dump) memory as AOF/EOF to tape
WCAS
D address1 address2
D
WCAS
D
W
CMD D
Store
Verify (check) tape
V
CMD E
Disks:
SDOS 3.0
CD DOS
Ami/WinArcadia
Copy disk
DUP
DISKCOPY
Format (initialize) disk
FORMAT
List files on disk
Ldir
LIST
DIR
List open files
LOPEN
Raw read
DISKRD
Raw write
DISKWR
Relabel disk
REName
Reset disk drives
RESTORE
Set default drive
DUNIT
Set system drive
SYstem
Show free disk space
Ldir
FREE
DIR
Show (inspect) raw sector(s)
INSPECT
Verify (check) disk
Verify
Files on disk:
SDOS 3.0
CD DOS
Ami/WinArcadia
Assemble source code
ASM
ASM
Compare files
CMPf
Copy file(s)
COPy
Delete file
DELete
DELETE
DEL
Dump file (to screen) as hex and ASCII
DFil
Edit file on disk
EDIT
Load (read) AOF file from device
Rhex
Load (read) IMAG file from disk
LOAD
Load (read) & run IMAG file from disk
RUN
Load (read) binary? file from disk
READ
Load (read) MOD file from device
LOad
Load (read) & run MOD file from device
XEQ
Rename file
REName
RENAME
Print file without line numbers
PRint
Print file with line numbers
PRINTL
Reserve disk space for a new file
ALLOC
Save (write) AOF file to device
WHex
Save (write) binary? file to disk
WRITE
Save (write) MOD file to device
Module
Save (write) IMAG file to disk
IMAGE
Set change code on file
CCODE
Set inspection code on file
ICODE
Truncate file
DEALLOC
Channels:
SDOS 3.0
CD DOS
Assign device to channel
ASSign
Close channel/file
CLose
CLOSE
Inform OS of peripheral availability
DEVice
Open file
OPEN
PROMs:
SDOS 3.0
MIKIT
Compare PROM against slave memory
CProm
Compare SMS file against slave memory
CSms
Punch memory as BPNF file to papertape
Punch
Read/write/verify PROM
PROm
Read PROM into slave memory
RProm
Write slave memory to PROM
WProm
Save (write) SMS file to device
WSms
Command (script) files:
SDOS 3.0
Comment
*
Toggle termination condition
Kill
Toggle echoing
TYpe
Memory banks:
PHUNSY
"Q" bank select/execute
Q
"U" bank select/execute
U
Show selected banks
=
I/O ports:
SDOS 3.0
Ami/WinArcadia
Read from I/O port
REad
READPORT
Write to I/O port
WRite
WRITEPORT
Miscellaneous:
SDOS 3.0
CD DOS
PHUNSY
Ami/WinArcadia
Log in/on
SIGNON
Set date
DATE
Set default file type
DTYPE
Set default codeword
ENTER
Show date
WHEN
Show error message
S
ERROR
Show OS ID
X
Area
Arcadia (2622)
2621
BINBUG (DG640)
CD2650
PHUNSY
AY-3-8500-1
AY-3-8550
Horizontal back porch (pre-colourburst)
-17..-16 (2)
-21..-19 (3)
?
-
58..65 (8)
?
?
Horizontal back porch (colourburst)
-15..-7 (9)
-18..-10 (9)
?
-
66..81 (16)
?
?
Horizontal back porch (post-colourburst)
-6..-1 (6)
-9..-1 (9)
?
-
82..127 (46)
?
?
Horizontal back porch (total)
-17..-1 (17)
-21..-1 (21)
702?..767 (66?)
776..903 (128)
58..127 (70)
0..26 (27)
0..26 (27)
Main display area (horizontal)
0..-40 (188)
0..-44 (184)
0..575 (576)
0..639 (640)
128..511 (384)
27..99 (73)
27..99 (73)
Horizontal front porch
-39..-35 (5)
-43..-39 (5)
576..641? (66?)
640..711 (72)
0..25 (26)
100..115 (16)
100..115 (16)
Horizontal retrace
-34..-18 (17)
-38..-22 (17)
642?..701? (60?)
712..775 (64)
26..57 (32)
116..127 (12)
116..127 (12)
Total (horizontal)
-49..177 (227)
-49..177 (227)
0..767 (768)
0..903 (904)
0..511 (512)
0..127 (128)
0..127 (128)
Vertical back porch
-14..-1 (14)
-28..-1 (28)
~286.5?..312.5 (~26?)
228..263 (36)
273..312 (40)
0..41 (42)
0..43 (44)
Main display area (vertical)
0..241 (242)
0..268 (269)
0..255 (256)
0..191 (192)
0..255 (256)
42..233 (192)
44..275 (232)
Vertical front porch
-20..-18 (3)
-43..~-30.5 (~13.5)
256..281? (26?)
192..215 (24)
256..268 (13)
234..257 (24)
276..305 (30)
Vertical retrace
-17..-15 (3)
~-30.5..-29 (~2.5)
282?..~286.5? (~4.5?)
216..227 (12)
269..272 (4)
258..261 (4)
306..311 (6)
Total (vertical)
0..261 (262)
0..311 (312)
0..311.5 (312.5)
0..263 (264)
0..312 (313)
0..261 (262)
0..311 (312)
Main display
188*242=45,496
188*269=50,572
576*256=147,456
640*192=122,880
384*256=98,304
73*192=14,016
73*232=16,936
Entire display
227*262=59,474
227*312=70,824
768*312.5=240,000
904*264=238,656
512*313=160,256
128*262=33,536
128*312=39,936
Pixels per CPU cycle
4
4
12
12
8
-
-
Pixels per second (method A)
59,474*60=3,568,440
70,824*50=3,541,200
240,000*50=12,000,000
238,656*60=14,319,360
160,256*50=8,012,800
33,536*60=2,012,160
39,936*50=1,996,800
Pixels per second (method B)
227÷64=3,546,875
227÷64=3,546,875
768÷64=12,000,000
904÷64=14,125,000
512÷64=8,000,000
128÷64=2,000,000
128÷64=2,000,000
Pixels per second (method C)
3,579,545 (+/- 10)
3,546,895 (+/- 35)
?
14,192,640
?
?
?
CPU speed (Hz) (method A)
3,568,440÷4=892,110
3,541,200÷4=885,300
12,000,000÷12=1,000,000
14,319,360÷12=1,193,280
8,012,800÷8=1,001,600
-
-
CPU speed (Hz) (method B)
227÷4÷64=886,718.75
227÷4÷64=886,718.75
768÷12÷64=1,000,000
904÷12÷64=1,177,083'
512÷8÷64=1,000,000
-
-
CPU speed (Hz) (method C)
3,579,545÷4=894,886.25
3,546,895÷4=886,723.75
?
14,192,640÷12=1.18272
?
-
-
Frames per second (method A)
60÷1.001=~59.94 (NTSC)
50 (PAL)
50 (PAL)
60÷1.001=~59.94 (NTSC)
50 (PAL)
60÷1.001=~59.94 (NTSC)
50 (PAL)
Frames per second (method B)
3,546,875
÷59,474=~59.63740
3,546,875
÷70,824=~50.08013
12,000,000
÷240,000=50
14,125,000
÷238,656=~59.18561
8,000,000
÷160,256=~49.92013
2,000,000
÷33,536=~59.63740
2,000,000
÷39,936=~50.08013
Frames per second (method C)
3,579,545
÷59,474=~60.18672
3,546,895
÷70,824=~50.08040
?
14,192,640
÷238,656=~59.46903
?
?
?
To calculate pixels per µsec:
Divide width of screen (eg. 227) by duration of line (64 µsecs) = 3.546875 pixels per µsec.
To calculate µsecs per pixel:
Divide duration of line (64 µsecs) by width of screen (eg. 227) = 0.281938 µsecs per pixel (datasheet says 282 nsecs).
Method A assumes exactly 50/60 frames per second, and calculates all timings relative to that. (60÷1.001 would be more accurate than 60 for
colour NTSC.)
Method B assumes exactly 64 µsecs per rastline, and calculates all timings relative to that.
Method C uses the master clock frequency as documented in eg. service manual, and calculates all timings relative to that.
This is the most accurate method.
Addressing Mode
Signetics Format
Signetics Example
CALM Format
CALM Example
Register
LODZ r
LODZ r1
LOAD A,r
LOAD A,B
Immediate
LODI,r n
LODI,r0 12
LOAD r,#n
LOAD A,#12
Relative direct
LODR,r m
LODR,r0 1234
LOAD r,^m
LOAD A,^1234
Relative indirect
LODR,r *m
LODR,r0 *1234
LOAD r,^@m
LOAD A,^@1234
Absolute direct
LODA,r m
LODA,r0 1234
LOAD r,m
LOAD A,1234
Absolute indirect
LODA,r *m
LODA,r0 *1234
LOAD r,@m
LOAD A,@1234
Indexed direct
LODA,r0 m,r
LODA,r0 1234,r1
LOAD A,(r)+m
LOAD A,(B)+1234
Indexed indirect
LODA,r0 *m,r
LODA,r0 *1234,r1
LOAD A,(r)+@m
LOAD A,(B)+@1234
Indexed direct with pre-increment
LODA,r0 m,r+
LODA,r0 1234,r1+
LOAD A,(+r)+m
LOAD A,(+B)+1234
Indexed indirect with pre-increment
LODA,r0 *m,r+
LODA,r0 *1234,r1+
LOAD A,(+r)+@m
LOAD A,(+B)+@1234
Indexed direct with pre-decrement
LODA,r0 m,r-
LODA,r0 1234,r1-
LOAD A,(-r)+m
LOAD A,(-B)+1234
Indexed indirect with pre-decrement
LODA,r0 *m,r-
LODA,r0 *1234,r1-
LOAD A,(-r)+@m
LOAD A,(-B)+@1234
Signetics Name
Signetics Abbrev.
Signetics Letter
CALM Name
CALM Abbrev.
CALM Letter
Sense
S
S
Input
I
I
Flag
F
F
Output
O
O
Interrupt Inhibit
II
I
Interrupt mask bit
IOF
F
Inter-Digit Carry
IDC
D
Half carry
H
H
Register Select
RS
R
BANK1
B
B
With Carry
WC
W
WITHCARRY
W
W
Overflow
OVF
O
OVERFLOW
V
V
Compare
COM
M
LOGICOMP
L
L
Carry
C
C
CARRY
C
C
Project
Description
Magazine
CPU
EA 77cc4
aka 2/CC/19
CUTS cassette interface
EA Apr 1977
-
EA 77up2
2650 Baby Computer
EA Mar 1977
2650
EA 77up5
"Mini-SCAMP" computer
EA Apr 1977
SC/MP
EA 77ut2
Video Data Terminal
EA Jan-Feb 1977
-
EA 78m5
Video modulator (for Low Cost VDU)
EA Apr 1978
-
EA 78up5
2650 Mini Computer
EA May 1978
2650
EA 78up9
aka 2/CC/32
2650 Expansion Board (for EA 78up5)
EA Nov 1978
2650
EA 78up10
aka 2/CC/-
Extra RAM for the 2650 (for EA 78up5)
EA Dec 1978
2650
EA 78ut4
Keyboard (for Low Cost VDU)
EA Apr 1978
-
EA 2/CC/30
Alternative keyboard (for Low Cost VDU)
EA Sep 1978
-
EA 78ut9
Ultra Low Cost VDU
EA Sep 1978
-
EA 79up1
aka 2/CC/35
EPROM Programmer (for EA 78up5 et al.)
EA Feb 1979
2650
EA 2/CC/23
aka 2/CC/28-29
Low Cost VDU
EA Feb 1978
-
Project
Description
Magazine
CPU
ETI-560
Low Cost VDU
ETI AU Aug-Oct 1976
-
ETI-560
Mains Cable Seeker
ETI AU May 1980
-
ETI-604
Metronome
ETI AU
-
ETI-606
Tuning fork
ETI AU
-
ETI-630
Hex display
ETI AU Dec 1976
-
ETI-631
ASCII keyboard
ETI AU Dec 1976, ETI UK Apr 1977
-
ETI-631-2
Keyboard encoder (UART/baud rate generator)
ETI AU Apr 1977
-
ETI-632
VDU for 2650-based machines (and others)
ETI AU Jan-Mar 1977
-
ETI-633
TV Sync Generator for the ETI-632 (and others)
ETI AU Jan 1977
-
ETI-634
8080-based machine
ETI AU
8080
ETI-635
Microcomputer Power Supply
ETI AU Sep 1977
-
ETI-636
Low Cost S-100 Motherboard
ETI AU May 1980
-
ETI-637
CUTS cassette interface
ETI AU Jan 1978
-
ETI-638
EPROM programmer
ETI AU July 1978
6800
ETI-639
Computerized musical doorbell
ETI AU
-
ETI-640
aka DG640, MW640
VDU for 2650-based machines (and others)
ETI AU Apr-Jun 1978
-
ETI-641
Thermal printer based on Philips EUR-10E023LE
ETI AU Sep 1978
8080
ETI-642
16K S-100 RAM card
ETI AU Feb 1979
-
ETI-643
Universal EPROM programmer card
ETI AU Dec 1979-Jan 1980
8080
ETI-644
Modem
ETI AU Oct 1982, ETI Computer Projects #1
?
ETI-644A
A revision for the ETI-644 modem
ETI Computer Projects #1
?
ETI-645
A turtle robot (aka "Tasman Turtle")
ETI AU Apr-Jun 1982
-
ETI-646
A hand controller for the turtle robot
ETI AU Jul 1982
-
ETI-650
STAC (Standard Timer And Controller) timer
ETI AU
?
ETI-651
Binary-to-hex number converter
ETI AU Jun 1979
2650
ETI-652
Atari joystick interface for System 80
ETI AU Aug 1982
Z80
ETI-656
EPROM debugger
ETI Computer Projects #1
?
ETI-658
RS-232 breakout box
ETI Computer Projects #1
?
ETI-660
1802-based machine (for Chip-8)
ETI AU
1802
ETI-668
Microbee EPROM programmer
ETI AU Feb 1983
Z80
ETI-670
Low Cost ASCII Keyboard (for ETI-685)
ETI AU May 1982
-
ETI-671
Microbee parallel printer interface
ETI Computer Projects #1
Z80
ETI-672
Microbee teletype printer interface
ETI Computer Projects #1
Z80
ETI-673
Microbee multi-PROM interface
ETI Computer Projects #1
Z80
ETI-675
Microbee serial-parallel interface
ETI Computer Projects #1
Z80
ETI-676
Microbee RS-232 interface
ETI Computer Projects #1
Z80
ETI-678
Microbee ROM reader
ETI Computer Projects #1
Z80
ETI-680
Z80-based machine (aka DG680)
ETI AU
Z80
ETI-681
Programmable Character Generator for the ETI-640
ETI AU Jun 1980
?
ETI-682
S-100 PROM board
ETI AU March 1981
?
ETI-685
2650-based Single Board Computer for S-100 bus
ETI AU Dec 1981
2650
ETI-686
PPI-based EPROM Programmer for ETI-685 (and others)
ETI AU Oct 1982, also in ETI Computer Projects #1
2650
ETI-690
"Little Big Board" computer
ETI Computer Projects #1
Z80A
ETI-692
Current Loop Interface
ETI AU Jan 1985
?
ETI-694
FORTH computer
ETI AU May 1985
R65F11
ETI-804
AY-3-8500-based Pong game
ETI AU Nov 1976
-
ETI-811
AY-3-8710-based Tank game
ETI AU Oct 1978
-
KB04
Universal Keyboard in Teletype Model 33 ASR layout
ETI AU Feb 1978, p. 70
?
KB05
Number Pad for KB04
ETI AU
?
KB06
Cursor Control for KB04
ETI AU
?
KB10
Spare key switches for KB04
ETI AU
?
ETI-645 is compatible with ETI-685 as mentioned in ETI Aug 1982, p. 91.
ETI-681 is also known as the TCT PCG.
ETI-685 can use PIPBUG, BINBUG or SBCBUG.
It is compatible with
ETI-635,636,640,642,645,670,681,682,686.
The cassette interface (promised in ETI AU Dec 1981, p.
104) and real-time clock/calendar (promised in ETI AU
Mar 1982, p. 95) were never published.
Project
Description
Company/Magazine
CT750
Kansas City cassette interface
?
MW850
S-100 motherboard
MicroWorld
KB05
Fully encoded ASCII keyboard
Elektor Nov 1978
?
Elekterminal
Elektor Dec 1978
Component
Manufacturer
Description
Used in
1N4003
?
Silicon diode
Astro Wars CPU [44]
1N4004
?
Silicon diode
Lazarian game, Lazarian sound
1N4148
1N484A
1N914
1N914A
?
Silicon diode
Voltmace [D9], PC1001 [D20], EA 78up5, ETI-685 [D1..3], ETI-640 [D1..11], ETI-681 [D3,4], Selbstbaucomputer data input display, Selbstbaucomputer address input display, Selbstbaucomputer keyboard & display, Astro Wars CPU [45], Astro Wars sound [D1..4], Lazarian game, Lazarian sound
OA91
?
Germanium diode
ETI-640 [D12..15]
2N2219
?
Silicon NPN transistor
Elekterminal [T4]
2N2894
2N4258
?
Silicon NPN transistor
ETI-640 [Q2]
2N3055
?
Silicon NPN transistor
ETI-636 [Q3]
2101-1N
?
256*4-bit (128-byte) SRAM
Astro Wars CPU [27]
2102
2102-1
2102A4
2102AL4
21L02-1
Signetics
1024*1-bit (128-byte) SRAM
EA LCVDU [IC40..45], Elekterminal [IC1..6], ETI-640 [IC22..31], ETI-681 [IC7,8], CD2650 [IC30..45], Galaxia
2112B
2112-2
2112-A4
MM2112-4
?
256*4-bit (128-byte) SRAM
Basic Elektor [IC13..28], EA 77up2, ETI LCVDU [IC24,25], Instructor 50, Astro Wars CPU [28]
2114
2114-A4
2114L-4
Fairchild
1024*4-bit (512-byte) SRAM
Arcadia [U11,U12], Interton, expanded Elektor [IC4..9], EA 78up5, ETI-685 [IC11..14,26..29], ETI-681 [IC14..17], Astro Wars CPU [29], Galaxia, Lazarian game
2332
Commodore
4K PROM
Arcadia
2504
Signetics
1024-bit DSR (Dynamic Shift Register)
?
2513
RO-3-2513
Signetics
General Instrument
Character Generator
EA LCVDU [IC35], ETI LCVDU [IC7], Elekterminal [IC11]
2519
Signetics
40-bit SSR (Static Shift Register)
?
2602
Signetics
1024*1-bit (128-byte) SRAM
?
2606
Signetics
256*4-bit (128-byte) SRAM
PC1001 [IC6..9,15..18]
2608 (CN0035)
Signetics
1K PROM (PIPBUG 1 monitor)
EA77 up2, EA 78up5
2616
Signetics
2K PROM
Interton, basic Elektor [IC2] (monitor BIOS)
2621
2621-I
Signetics
PAL USG (Universal Sync Generator)
Arcadia, Fountain [IC7], Voltmace, basic Elektor [IC4], Astro Wars CPU [24], Galaxia, Lazarian game
2622
Signetics
NTSC USG (Universal Sync Generator)
Arcadia [U7]
2632
Signetics
4K PROM
Interton
2636
2636-I
Signetics
PVI (Programmable Video Interface)
Fountain [IC2], Voltmace [U2], basic Elektor [IC3], Astro Wars CPU [25], Galaxia, Lazarian game
2637
Signetics
UVI (Universal Video Interface)
Arcadia [U9]
2650
Signetics
CPU (<= 1.25 MHz, 1975)
Arcadia [U10], PC1001 [IC23], EA 77up2, EA 78up5, Instructor 50, CD2650 [IC1], main PHUNSY, Galaxia, Lazarian
2650-1
Signetics
CPU (<= 2 MHz, <= 1976)
?
2650A
2650-AI
Signetics
CPU (<= 1.25 MHz, 1977)
Fountain [IC1], Voltmace [U1], basic Elektor [IC1], ETI-685 [IC30], Astro Wars CPU [26]
MAB 2650A
Philips
CPU (<= 1.25 MHz, 197x)
Selbstbaucomputer CPU [IC1]
2650A-1
Signetics
CPU (<= 2 MHz, 1977)
Malzak
2650B
Signetics
CPU (<= 1.25 MHz, 1977)
Not produced?
2650B-1
Signetics
CPU (<= 2 MHz, 1977?)
Not produced?
2650-P-02
Synertek
*NOT* Signetics 2650-compatible!
-
2651
Signetics
PCI (Programmable Communications Interface)
MIKIT?
2652
Signetics
Multi-Protocol Comms Circuit (incl. Sync. Data Link Control (SDLC))
?
2653
Signetics
Polynomial Generator/Checker
?
2655
8255A
Signetics
Intel
PPI (Programmable Peripheral Interface)
ETI-685 [IC32]
2656
Signetics
SMI (System Memory Interface)
Instructor 50
2657
Signetics
DMA (Direct Memory Access) controller
?
2661
Signetics
EPCI (Enhanced Programmable Communication Interface)
?
2670
Signetics
Display Character and Graphics Generator
?
2671
Signetics
Programmable Keyboard and Communications Controller
?
2672
Signetics
Programmable Video Timing Controller
?
2673
Signetics
Video Attributes Controller
?
2681
Signetics
DUART (Dual Asynchronous Receiver/Transmitter)
?
2708
?
1024*8-bit (1K) EPROM
ETI-685 [IC15,16], Astro Wars [31..42], Galaxia
2716
Texas Instruments
2K*8-bit (2K) EPROM
Elektor, ETI-685 [IC15,16], Selbstbaucomputer memory [IC3], Galaxia, Lazarian game
2732
D2732D
?
4K*8-bit (4K) EPROM
Voltmace cartridges [U1], Elektor, Lazarian game
28C16
Intel
2K EEPROM
Selbstbaucomputer
2981
?
?
Instructor 50
3624
?
PROM
CD2650 [IC13..20,48..49]
4011
HEF 4011
?
Quad 2-input NAND gate
Elekterminal [IC16], Selbstbaucomputer cassette interface [IC2]
4015
?
Dual 4-stage shift register
Elektor randomizer [IC2]
4016
HEF 4016
4066
?
Quad analog switch
Arcadia [U4], expanded Elektor [IC14], Selbstbaucomputer cassette interface [IC4], Lazarian sound
4024
?
7-stage binary ripple counter
Elekterminal [IC14,15]
CD 4040
?
12-stage binary ripple counter
ETI-640 [IC38,39]
4049
?
Hex inverter (CMOS)
PC1001 [IC30]
4051
?
Single 8-channel analog multiplexer/demultiplexer
ETI-681 [IC28]
CD 4053
HEF 4053B
?
Triple 2-channel multiplexer/demultiplexer
Fountain [IC6], Basic Elektor [IC10]
4069
?
Hex inverter gate
Arcadia [U6]
4070
?
Quad 2-input XOR gate
Elektor randomizer [IC1]
4072
?
Dual 4-input OR gate
ETI-685 [IC50]
4081
?
Quad 2-input AND gate
Elekterminal [IC17,21]
4097
?
Single differential 8-channel analog multiplexer/demultiplexer
Galaxia
CD 4099
?
8-bit addressable latch
Basic Elektor [IC9]
40097
?
3-state hex driver
Astro Wars CPU [30], Lazarian game
4116
?
2K DRAM
PHUNSY memory
HEF 4528
?
Dual monostable multivibrator
Selbstbaucomputer cassette interface [IC3]
5082-4870450
Hewlett-Packard
LED indicator
DS [L1..41]
555
NE555
Signetics
?
Timer
Elektor EPROM [IC1], ETI-685 [IC40], EA LCVDU [IC8], ETI LCVDU [IC1..4,28], ETI-640 [IC8], ETI-681 [IC31..33], CD2650 [IC72], main PHUNSY, Astro Wars sound [IC5], Galaxia
555-3007
Dialco
LED indicator
PC1001 [D1..19]
6116
IDT
2048*8-bit (2K) SRAM
Selbstbaucomputer memory [IC2]
7400
74LS00
?
Quad 2-input NAND gate
Arcadia [U1], Voltmace cartridges [U2A..E], Basic Elektor [IC37], expanded Elektor [IC30..31], Elektor EPROM [IC2], PC1001 [IC28], ETI-685 [IC5,39], EA LCVDU [IC4], ETI LCVDU [IC5,13,14,16,20,21,29], Elekterminal [IC19], ETI-640 [IC16], ETI-681 [IC4,30], Instructor 50, CD2650 [IC25,71,76], PHUNSY interface, PHUNSY video, PHUNSY memory, Selbstbaucomputer CPU [IC5,6], Selbstbaucomputer port unit [IC2], Selbstbaucomputer A/D converter [IC4], Astro Wars CPU [2], Lazarian game
741
?
?
ETI-685 [IC6]
7402
74LS02
?
Quad 2-input NOR gate
EA 78up9, ETI-685 [IC44], EA LCVDU [IC1,11,21], Instructor 50, PHUNSY memory, Selbstbaucomputer port unit [IC3], Selbstbaucomputer display [IC2], Astro Wars CPU [3], Galaxia, Lazarian game
7403
74LS03
?
Quad 2-input NAND gate
ETI LCVDU [IC8,9], Instructor 50
7404
74LS04
74S04
?
Hex 1-input inverter gate
Arcadia [U2], Basic Elektor [IC31], expanded Elektor [IC24,26,28], ETI-685 [IC31,36], EA LCVDU [IC23,28], ETI LCVDU [IC10], Elekterm,48inal [IC18], ETI-640 [IC9,32], Instructor 50, CD2650 [IC53,63,67], main PHUNSY, PHUNSY video, Astro Wars CPU [4,5], Astro Wars sound [IC2], Lazarian game, Lazarian sound
74LS05
?
Hex 1-input inverter gate
Basic Elektor [IC30], Selbstbaucomputer data input display [IC1,2], Selbstbaucomputer CPU [IC4], Selbstbaucomputer address input display [IC1,2]
7406
?
Hex 1-input open collector inverter gate
DS [IC5..9], PHUNSY interface, Astro Wars CPU [6], Lazarian game, Lazarian sound
7407
?
Hex buffer gate
Main PHUNSY, PHUNSY video
7408
74LS08
?
Quad 2-input AND gate
Basic Elektor [IC29], expanded Elektor [IC25], PC1001 [IC29,33], ETI-685 [IC19], EA LCVDU [IC9,11,21,31], Instructor 50, CD2650 [IC11,64,69], Astro Wars CPU [7], Astro Wars sound [IC1], Lazarian game
7410
74LS10
?
Triple 3-input NAND gate
Basic Elektor [IC41], EA LCVDU [IC12], ETI-640 [IC33], Instructor 50, main PHUNSY, PHUNSY interface, PHUNSY video, PHUNSY memory, CD2650 [IC54], Astro Wars CPU [8], Galaxia, Lazarian game
7411
74LS11
?
Triple 3-input AND gate
Instructor 50, CD2650 [IC61,68]
74LS13
?
Dual 4-input NAND gate
Main PHUNSY
7414
74LS14
?
Hex 1-input inverter gate
ETI-685 [IC17], Instructor 50, CD2650 [IC12], Selbstbaucomputer CPU [IC3], Astro Wars CPU [11], Lazarian game
7420
74LS20
?
Dual 4-input NAND gate
Expanded Elektor [IC32], ETI-685 [IC45], EA LCVDU [IC15,20], CD2650 [IC62], PHUNSY video
7421
74LS21
?
Dual 4-input AND gate
Expanded Elektor [IC29], ETI LCVDU [IC15], Lazarian game
7425
?
Dual 4-input NOR gate with strobe
CD2650 [IC70]
74LS26
?
Quad 2-input NAND gate
Lazarian game
74LS27
?
Triple 3-input NOR gate
Instructor 50, Lazarian game
7430
74LS30
?
Single 8-input NAND gate
Expanded Elektor [IC16..17,27], PC1001 [IC19], EA LCVDU [IC24], ETI LCVDU [IC30], main PHUNSY, PHUNSY video, PHUNSY memory, Astro Wars CPU [9]
7432
74LS32
?
Quad 2-input OR gate
Expanded Elektor [IC21..23], ETI-685 [IC38], ETI-681 [IC24], Instructor 50, CD2650 [IC59], PHUNSY interface, Lazarian game
7438
74LS38
?
Quad 2-input NAND open collector gate
PC1001 [IC34], DS [IC11], EA 77up2, EA 78up5
7442
?
BCD to decimal decoder
ETI LCVDU [IC11]
74LS51
?
?
Instructor 50
7470
?
AND-gated positive edge triggered J-K flip-flop, asynchronous preset and clear
PHUNSY video
7473
74LS73
?
Dual J-K flip-flop, asynchronous clear
ETI-640 [IC1,2]
7474
74LS74
?
Dual D positive edge triggered flip-flop, asynchronous preset and clear
Voltmace [U10A,10B], Expanded Elektor [IC20], DS [IC12], ETI-685 [IC43,46], EA LCVDU [IC5], ETI-640 [IC18], Instructor 50, CD2650 [IC23,24,65,75,77], Astro Wars CPU [12], Galaxia, Lazarian game
7475
74LS75
?
4-bit bistable latch, complementary outputs
PC1001 [IC36..39], ETI LCVDU [IC26,27], ETI-681 [IC29]
74LS76
?
Dual J-K flip-flop, asynchronous preset and clear
Selbstbaucomputer CPU [IC2]
7485
74LS85
?
4-bit magnitude comparator
Elektor randomizer [IC4..7], EA LCVDU [IC37,38], Lazarian game
7486
74LS86
?
Quad 2-input XOR gate
Arcadia [U3,5], basic Elektor [IC32], ETI LCVDU [IC22,23], ETI-640 [IC17], ETI-685 [IC5,23], PHUNSY video, PHUNSY memory, Astro Wars CPU [10], Lazarian game
7490
74LS90
?
Decade counter
ETI LCVDU [IC6,12], ETI-640 [IC13], Lazarian game
7492
74LS92
?
Divide-by-12 counter
EA LCVDU [IC26,36], ETI-640 [IC40]
7493
74LS93
?
4-bit binary counter
EA LCVDU [IC2,3,10,17..19,27,34,39], ETI LCVDU [IC17..19], ETI-640 [IC10..12,15], main PHUNSY
7495
?
4-bit shift register, parallel in, parallel out, serial input
EA LCVDU [IC25,33]
74LS107
?
Dual J-K flip-flop, clear
ETI-685 [IC42]
74109
74LS109
?
Dual J-NotK positive-edge-triggered flip-flop, clear and preset
Basic Elektor [IC34], Instructor 50, CD2650 [IC66]
74S112
72LS112
?
Dual J-K negative-edge-triggered flip-flop, clear and preset
Astro Wars CPU [17], Galaxia, Lazarian game
74LS113
?
Dual J-K negative-edge-triggered flip-flop, preset
Basic Elektor [IC33,35,36]
74123
74LS123
?
Dual monostable Schmitt trigger
EA 77up2, EA 78up5, EA LCVDU [IC6,7,13,14,32], CD2650 [IC73], Selbstbaucomputer A/D converter [IC5]
74125
74LS125
?
Quad bus buffer, negative enable
Elekterminal [IC20], CD2650 [IC46,47], Lazarian game
74126
?
Quad bus buffer, positive enable
CD2650 [IC2..10,21,22,78,79]
74LS132
?
Quad 2-input NAND gate
ETI-685 [IC21], Selbstbaucomputer A/D converter [IC3]
74LS135
?
Quad XOR/XNOR gate, two inputs to select logic type
Galaxia
74LS136
?
Quad 2-input XOR gate
Basic Elektor [IC40]
74LS138
?
3:8 line decoder/demultiplexer, inverting outputs
Basic Elektor [IC7], expanded Elektor [IC19], EA 78up9, ETI-685 [IC9,49], Selbstbaucomputer memory [IC1], Selbstbaucomputer display [IC1]
74LS139
?
Dual 2:4 line decoder/demultiplexer, inverting outputs
Basic Elektor [IC6], expanded Elektor [IC15], ETI-685 [IC18], Instructor 50, Astro Wars CPU [13], Lazarian game
74145
?
4-bit D flp-flp w/ complementary outputs & reset (keypad inputs)
Arcadia [U14]
74148
?
8:3 line priority encoder
Selbstbaucomputer keyboard [IC4,5]
74153
74LS153
?
Dual 4:1 line selector/multiplexer, non-inverting outputs
ETI-640 [IC14]
74LS154
Valvo
4:16 line decoder/demultiplexer, inverting outputs
Selbstbaucomputer port unit [IC1]
74LS155
?
Dual 2:4 line decoder/demultiplexer, totem pole
Astro Wars CPU [14], Galaxia, Lazarian game
74LS156
?
Dual 2:4 line decoder/demultiplexer, open collector
Fountain [IC4], basic Elektor [IC11], Astro Wars CPU [15], Galaxia, Lazarian game, Lazarian sound
74157
74LS157
?
Quad 2:1 line selector/multiplexer, non-inverting outputs
ETI-640 [IC5,6,19..21], ETI-685 [IC6,9..12], CD2650 [IC27..29], PHUNSY video, Astro Wars CPU [16], Galaxia, Lazarian game
74LS161
?
Synchronous presettable 4-bit binary counter, asynchronous clear
Expanded Elektor [IC18], Instructor 50, Astro Wars CPU [18], Galaxia, Lazarian game, Lazarian sound
74163
74LS163
74LS163A
?
Synchronous presettable 4-bit binary counter, synchronous clear
Elekterminal [IC13], CD2650 [IC50..52,55..58], PHUNSY video, PHUNSY memory
74LS164
?
8-bit SIPO shift register, asynchronous clear, not output latch
Astro Wars CPU [19], Galaxia, Lazarian game
74165
74LS165
?
8-bit PISO shift register, parallel load, complementary outputs
Elekterminal [IC12], ETI-640 [IC7]
74166
74LS166
?
Parallel-load 8-bit shift register
CD2650 [IC60], PHUNSY video, Astro Wars CPU [20], Galaxia, Lazarian game
74174
74LS174
?
Hex D flip-flop, common asynchronous clear
DS [IC1..4], Elekterminal [IC9], Astro Wars CPU [21], Lazarian game
74LS175
?
Quad D edge-triggered flip-flop, comp. outputs and async. clear
ETI-685 [IC8], Instructor 50
74191
?
Synchronous presettable up/down 4-bit binary counter
EA LCVDU [IC29,30]
74LS193
?
Synchronous presettable up/down 4-bit binary counter, clear
ETI-681 [IC25,26]
74LS221
?
Dual monostable multivibrator
ETI-640 [IC3,41]
74LS241
?
Octal buffer, non-inverting outputs
Expanded Elektor [IC10..11]
74LS243
?
?
Instructor 50
74244
74LS244
L4LS244
?
Octal buffer, non-inverting outputs
Expanded Elektor [IC1..2], Elektor randomizer [IC3], Instructor 50, PHUNSY interface, PHUNSY video, PHUNSY memory, Astro Wars CPU [22], Galaxia, Lazarian game
74LS245
8T245
?
Octal bus transceiver, non-inverting outputs
Expanded Elektor [IC3], main PHUNSY, Selbstbaucomputer port unit [IC5], Lazarian game
74LS251
?
8:1 selector/multiplexer, complementary outputs
Basic Elektor [IC8,38..39]
74LS253
?
?
Instructor 50
74258
?
Quad 2:1 multiplexer (3-state) (keypad inputs)
Arcadia [U8]
74LS258
?
Quad 2:1 selector/multipler, inverting outputs
Fountain [IC5], basic Elektor [IC12]
74LS260
74S260
?
Dual 5-input NOR gate
PHUNSY video, Astro Wars CPU [23], Galaxia
74LS273
?
8-bit register, asynchronous clear
Instructor 50, Main PHUNSY, PHUNSY interface, Selbstbaucomputer port unit [IC4]
74LS283
?
4-bit binary full adder
Lazarian game
74LS365
?
Hex buffer, non-inverting outputs
Main PHUNSY, PHUNSY video
74367
74LS367
8097
8T97
?
Hex buffer, non-inverting outputs
ETI-685 [IC20,35,41], ETI-640 [IC35..37], ETI-681 [IC2,19..22,27]
74368
74LS368
8098
8T98
?
Hex buffer, inverting outputs
PC1001 [IC40..42], ETI-640 [IC35..37]
74LS373
?
Octal transparent latch
PHUNSY memory, Selbstbaucomputer A/D converter [IC1], Lazarian game
74C374
74LS374
?
Octal tri-state latch
EA 78up9, PHUNSY video, Selbstbaucomputer A/D converter [IC1], Lazarian game, Lazarian sound
74LS378
?
6-bit clock enable
Fountain [IC8], Voltmace [U8], expanded Elektor [IC1]
74LS379
?
4-bit clock enable and complementary outputs
PHUNSY video
74S387
SFC 71301E 1-0
?
256*4-bit (128-byte) PROM
Elekterminal [IC7]
74LS393
?
Dual 4-bit binary counter, asynchronous clear
PHUNSY memory
74S471
?
256*8-bit (256-byte) PROM
Dolphin
74LS514
?
?
ETI-681 [IC1]
74LS640
74LS640-1
?
Octal bus transceiver, inverting outputs
Selbstbaucomputer keyboard & display [IC3]
7805
µA7805
LM340T-5
LM340T-5.0
?
?
Texas Instruments
+5V power regulator
Arcadia [U13], Fountain [IC11], Voltmace, , EA 78up5, ETI-636 [IC1], ETI-681 [IC34], Selbstbaucomputer power [IC1]
7812
µA7812
?
+12V power regulator
Voltmace, ETI-636 [IC2], ETI-685 [IC1]
7905
79L05
?
-5V power regulator
ETI-685 [IC2], PHUNSY memory, Selbstbaucomputer power [IC2]
7912
79L12
?
-12V power regulator
ETI-636 [IC3], ETI-685 [IC4]
8131
?
128*8-bit (128-byte) SRAM?
ETI-685 [IC33,37], ETI-640 [IC34], ETI-681 [IC3,18]
81LS95
?
Octal tri-state buffer
EA 78up9
81LS97
?
Octal buffer
ETI-685 [IC22..25]
81LS98
?
Octal buffer
ETI-685 [IC10]
8250
?
1 of 8 decoder
PC1001 [IC20]
N82S100
Signetics
FPLA (PROM)
Lazarian game
82S103
Signetics
Bipolar FPGA
Instructor 50
82S115
Signetics
512*8-bit (512-byte) PROM
CD2650 (eg. IPL 1.1), PHUNSY video
82S123
Signetics
32*8-bit (32-byte) PROM
PC1001 [IC35], ETI-685 [IC34], Instructor 50, Main PHUNSY
82S129
Signetics
512*8-bit (512-byte) PROM?
PC1001 [IC2..5,11..14] (CK267..274)
82S130
Signetics
256*4-bit (256-byte) PROM?
Galaxia
8T15
?
E1A driver (RS232)
PC1001 [IC26]
8T16
?
E1A receiver (RS232)
PC1001 [IC43]
8T26
?
Quad bus driver/receiver
PC1001 [IC1,10,24,25]
9344
Fairchild
4-bit by 2-bit multiplier
CD2650 [IC26]
AM25LS2520
?
Octal D type flip-flop
ETI-685 [IC47]
AM9519PC
AMD
DMA (Direct Memory Access) controller
ETI-685 [IC7]
AY-3-8900
General Instrument
Standard Television Interface Chip
?
AY-3-8910
General Instrument
PSG (Programmable Sound Generator)
Expanded Elektor [IC12..13]
AY-5-1013
MM5303
General Instrument
Motorola
UART
Elekterminal [IC8]
AY-5-2376
General Instrument
Keyboard encoder
ETI-670, Elektor KB05
BC107B
BC547B
?
NPN bipolar transistor
Elekterminal [T1]
BC108
BC548
?
NPN bipolar transistor
EA 77up2, EA 78up5, ETI-685 [Q1..3], ETI-640 [Q1,3], ETI-681 [Q1], Lazarian game
BC177B
BC557
BC557B
?
Audio amplifier
Elekterminal [T2], Lazarian sound
BC327
?
?
Selbstbaucomputer display
BC337
?
NPN bipolar transistor
PHUNSY interface, Astro Wars CPU [46], Lazarian game
BC517
?
NPN bipolar transistor
Basic Elektor [T1]
BC558
?
NPN bipolar transistor
ETI-686 [Q1]
BD140
?
NPN bipolar transistor
ETI-686 [Q2]
BF451
?
NPN bipolar transistor
Elekterminal [T3]
BS170
?
Field effect transistor
Elektor randomizer [T1]
CA3081
?
NPN transistor array
Lazarian game
CA3130
?
Operational amplifier
CD2650 [IC74]
EM401
?
Silicon diode
EA 78up5
HDSP 3531
HP 5082-7611
Hewlett-Packard
7-segment LED display
Selbstbaucomputer display
SF.F 96364
Thomson-CSF (Sescosem)
CRT (Cathode Ray Tube) Controller (more advanced than EF9364)
Elekterminal [IC10]
DUS
-
Diode, Universal, Silicon*
Elekterminal [D1..4]
EF9364
Thomson
CRT (Cathode Ray Tube) Controller (less advanced than SF.F 96364)
Selbstbaucomputer
LF356
LF357
?
?
Selbstbaucomputer A/D converter [IC6,7]
LM309
LM309K
Texas Instruments
+5V regulator
ETI LCVDU [REG1], ETI-640 [IC42], Selbstbaucomputer power
LM323K
?
?
ETI-685 [IC3]
LM339
Nat. Semi.
Quad differential comparator
Basic Elektor [IC5], PHUNSY interface
LM393
?
?
Instructor 50
LM3900
?
Quad operational amplifier
Astro Wars sound [IC4]
MCM6574
MCM6674
Motorola
Character Generator
ETI-640 [IC4], ETI-681 [IC13]
PEIX
?
?
Fountain [IC3]
SAA5050
Signetics
Teletext Character Generator
Malzak
SN76477
Texas Instruments
Sound effect generator
Malzak, Laser Battle, Lazarian sound
S9014
?
?
Voltmace [Q1,2,5,6]
TCA 520B
?
?
Selbstbaucomputer cassette interface [IC1]
TDA 1010
TDA 1010A
?
Audio amplifier
Astro Wars sound [IC6], Lazarian sound
TEA 1002
Mullard
PAL Colour Encoder & Video Summer
Interton, Voltmace [U3]
TIL220
?
Red LED
ETI-681 [D1]
TIL222
?
Green LED
ETI-681 [D2]
TL084
?
Operational amplifier
Expanded Elektor [IC33]
TMS 2516
Texas Instruments
16,384*8-bit (2K) EEPROM
Main PHUNSY
TMS 3615
Texas Instruments
OMTS (Octave Multiple Tone Synthesizer)
Lazarian sound
TMS 4045
TMS 4045-20
Texas Instruments
1024*4-bit (512-byte) SRAM
1024*4-bit (512-byte) SRAM (200 ns)
Main PHUNSY, PHUNSY video
ULN2003
?
?
Instructor 50
UM1285-8
Astec
VHF modulator
Arcadia
ZN425E
?
Monolithic 8-bit D-A converter
Selbstbaucomputer A/D converter [IC2]
Components listed together are not necessarily interchangable drop-in equivalents (eg. speeds, power requirements, etc. may differ).
Only semiconductors are listed, not capacitors, resistors, etc.
Offset(s)
Description
0
colon (:) ($3A)
1..2
load address (big-endian)
3
block length:
0 = last block
1..255 = 2..256 bytes (respectively)
4
checksum for header bytes 0..3
5..n-1
data (ASCII-encoded hex, each character representing 1 nybble)
n
checksum for data
Checksums start as $00. For each emitted byte, the following algorithm is
applied:
SUMC ^= data;
SUMC <<= 1;$1600: C0 C0 C0 C0
3A 16 00 03 15 (1st block header)
C0 C0 C0 C0 88 (1st block data)
3A 00 00 00 A3 (2nd block header)SUMC = 0; // SUMC is %00000000 [$00];
SUMC ^= $3A; // SUMC is %00111010 [$3A];
SUMC <<= 1; // SUMC is %01110100 [$74];
SUMC ^= $16; // SUMC is %01100010 [$62];
SUMC <<= 1; // SUMC is %11000100 [$C4];
SUMC ^= $00; // SUMC is %11000100 [$C4];
SUMC <<= 1; // SUMC is %10001001 [$89];
SUMC ^= $03; // SUMC is %10001010 [$8A];
SUMC <<= 1; // SUMC is %00010101 [$15];SUMC = 0; // SUMC is %00000000 [$00];
SUMC ^= $C0; // SUMC is %11000000 [$C0];
SUMC <<= 1; // SUMC is %10000001 [$81];
SUMC ^= $C0; // SUMC is %01000001 [$41];
SUMC <<= 1; // SUMC is %10000010 [$82];
SUMC ^= $C0; // SUMC is %01000010 [$42];
SUMC <<= 1; // SUMC is %10000100 [$84];
SUMC ^= $C0; // SUMC is %01000100 [$44];
SUMC <<= 1; // SUMC is %10001000 [$88];SUMC = 0; // SUMC is %00000000 [$00];
SUMC ^= $3A; // SUMC is %00111010 [$3A];
SUMC <<= 1; // SUMC is %01110100 [$74];
SUMC ^= $00; // SUMC is %01110100 [$74];
SUMC <<= 1; // SUMC is %11101000 [$E8];
SUMC ^= $00; // SUMC is %11101000 [$E8];
SUMC <<= 1; // SUMC is %11010001 [$D1];
SUMC ^= $00; // SUMC is %11010001 [$D1];
SUMC <<= 1; // SUMC is %10100011 [$A3];