KIM-1 Cassette Tapes

From Makerspace Nanaimo
Revision as of 21:02, 8 March 2019 by Chrisgerlinsky (talk | contribs) (updated tape data for tones A0)
Jump to navigation Jump to search

A collection at Makerspace Nanaimo of data cassette tapes for late-1970's KIM-1 microcomputers.

KIM-1

The KIM-1 microcomputer was designed by MOS for their 6502 CPU, it cost $245 when released in 1976.

Micro-KIM

Micro-KIM is a nearly-100%-compatible KIM-1 clone, made in 2007. (no longer sold)

6502 utilities and information

Cassette Data Storage

Data is stored as a series of 2415 and 3623 Hz tones. The duration of one bit takes 7.452 milliseconds.

From Wikipedia:

Each bit is represented by three 2.484 ms long tones. The first is always 3700 Hz, the middle is 3700 Hz for "0" or 2400 Hz for "1", and the last one is always 2400 Hz. This gives an effective bit rate of 134.2 bit/s. Detection is done through a PLL using LM565.

The format of data on the tape is: 100 bytes with the value 0x16 (SYN, Synchronous Idle), one byte with the value 0x2A (*), the record identification number, the start address (two characters for the low byte of address, two characters for the high byte), the end address (in the same format), the actual data, one byte with the value 0x2F ("/" character ), a two-byte checksum, and two bytes with the value 0x04 (EOT, End Of Transmission).

Each byte of memory is stored as two sequential ASCII characters on tape, for example, hexadecimal B5 in memory (181 decimal) would be stored as two sequential ASCII characters "B" and "5" (42 and 35 hexadecimal).

Information sources:

Program: TONES A0 - Sound Effect

Source: TONES, FF, DAN OLIVER MAKES MUSIC WITH KIM COMPUTER - side 1


YouTube - TONES, FF, DAN OLIVER MAKES MUSIC WITH KIM COMPUTER.

This program starts around 1:36 into cassette tape - it's the first program stored on the tape.

Audio on the tape preceeding this program:

This is a sound effect subroutine at address 0200 to address 022C.
It can be varied to go up or down in frequency in any number of repeats.
Start with a jump to subroutine at address 0200.
ID is A0.

Cassette tape data: TONES A0 - Sound Effect

Timestamp Binary  Hex ASCII Description
1:35.863 01101000 0x16     SYN
1:35.927 01101000 0x16     SYN
1:35.990 01101000 0x16     SYN
1:36.053 01101000 0x16     SYN
1:36.116 01101000 0x16     SYN
1:36.179 01101000 0x16     SYN
1:36.243 01101000 0x16     SYN
1:36.306 01101000 0x16     SYN
1:36.369 01101000 0x16     SYN
1:36.432 01101000 0x16     SYN
1:36.495 01101000 0x16     SYN
1:36.559 01101000 0x16     SYN
1:36.622 01101000 0x16     SYN
1:36.685 01101000 0x16     SYN
1:36.749 01101000 0x16     SYN
1:36.812 01101000 0x16     SYN
1:36.875 01101000 0x16     SYN
1:36.938 01101000 0x16     SYN
1:37.001 01101000 0x16     SYN
1:37.064 01101000 0x16     SYN
1:37.127 01101000 0x16     SYN
1:37.191 01101000 0x16     SYN
1:37.254 01101000 0x16     SYN
1:37.317 01101000 0x16     SYN
1:37.380 01101000 0x16     SYN
1:37.443 01101000 0x16     SYN
1:37.506 01101000 0x16     SYN
1:37.570 01101000 0x16     SYN
1:37.633 01101000 0x16     SYN
1:37.696 01101000 0x16     SYN
1:37.760 01101000 0x16     SYN
1:37.822 01101000 0x16     SYN
1:37.885 01101000 0x16     SYN
1:37.949 01101000 0x16     SYN
1:38.012 01101000 0x16     SYN
1:38.075 01101000 0x16     SYN
1:38.138 01101000 0x16     SYN
1:38.202 01101000 0x16     SYN
1:38.265 01101000 0x16     SYN
1:38.328 01101000 0x16     SYN
1:38.392 01101000 0x16     SYN
1:38.455 01101000 0x16     SYN
1:38.517 01101000 0x16     SYN
1:38.581 01101000 0x16     SYN
1:38.644 01101000 0x16     SYN
1:38.707 01101000 0x16     SYN
1:38.770 01101000 0x16     SYN
1:38.833 01101000 0x16     SYN
1:38.897 01101000 0x16     SYN
1:38.960 01101000 0x16     SYN
1:39.023 01101000 0x16     SYN
1:39.086 01101000 0x16     SYN
1:39.149 01101000 0x16     SYN
1:39.212 01101000 0x16     SYN
1:39.276 01101000 0x16     SYN
1:39.339 01101000 0x16     SYN
1:39.402 01101000 0x16     SYN
1:39.465 01101000 0x16     SYN
1:39.528 01101000 0x16     SYN
1:39.591 01101000 0x16     SYN
1:39.655 01101000 0x16     SYN
1:39.718 01101000 0x16     SYN
1:39.781 01101000 0x16     SYN
1:39.844 01101000 0x16     SYN
1:39.907 01101000 0x16     SYN
1:39.970 01101000 0x16     SYN
1:40.034 01101000 0x16     SYN
1:40.097 01101000 0x16     SYN
1:40.160 01101000 0x16     SYN
1:40.223 01101000 0x16     SYN
1:40.286 01101000 0x16     SYN
1:40.349 01101000 0x16     SYN
1:40.413 01101000 0x16     SYN
1:40.476 01101000 0x16     SYN
1:40.539 01101000 0x16     SYN
1:40.602 01101000 0x16     SYN
1:40.665 01101000 0x16     SYN
1:40.729 01101000 0x16     SYN
1:40.791 01101000 0x16     SYN
1:40.854 01101000 0x16     SYN
1:40.918 01101000 0x16     SYN
1:40.981 01101000 0x16     SYN
1:41.044 01101000 0x16     SYN
1:41.107 01101000 0x16     SYN
1:41.170 01101000 0x16     SYN
1:41.234 01101000 0x16     SYN
1:41.297 01101000 0x16     SYN
1:41.360 01101000 0x16     SYN
1:41.423 01101000 0x16     SYN
1:41.486 01101000 0x16     SYN
1:41.549 01101000 0x16     SYN
1:41.613 01101000 0x16     SYN
1:41.676 01101000 0x16     SYN
1:41.739 01101000 0x16     SYN
1:41.802 01101000 0x16     SYN
1:41.866 01101000 0x16     SYN
1:41.929 01101000 0x16     SYN
1:41.992 01101000 0x16     SYN
1:42.055 01101000 0x16     SYN
1:42.118 01101000 0x16     SYN
1:42.181 01010100 0x2A '*' SOF
1:42.244 10000010 0x41 'A' ID1
1:42.307 00001100 0x30 '0' ID2
1:42.370 00001100 0x30 '0' START_ADDR_L1
1:42.434 00001100 0x30 '0' START_ADDR_L2
1:42.496 00001100 0x30 '0' START_ADDR_H1
1:42.560 01001100 0x32 '2' START_ADDR_H2
1:42.623 10000010 0x41 'A' END_ADDR_L1
1:42.686 00001100 0x30 '0' END_ADDR_L2
1:42.749 00001100 0x30 '0' END_ADDR_H1
1:42.812 00101100 0x34 '4' END_ADDR_H2
1:42.876 10000010 0x41 'A' DATA
1:42.939 10011100 0x39 '9' DATA
1:43.002 00001100 0x30 '0' DATA
1:43.065 00001100 0x30 '0' DATA
1:43.128 00011100 0x38 '8' DATA
1:43.191 10101100 0x35 '5' DATA
1:43.255 10100010 0x45 'E' DATA
1:43.318 10100010 0x45 'E' DATA
1:43.381 10000010 0x41 'A' DATA
1:43.444 10011100 0x39 '9' DATA
1:43.507 00001100 0x30 '0' DATA
1:43.570 10001100 0x31 '1' DATA
1:43.633 00011100 0x38 '8' DATA
1:43.697 00100010 0x44 'D' DATA
1:43.759 00001100 0x30 '0' DATA
1:43.823 01101100 0x36 '6' DATA
1:43.886 10001100 0x31 '1' DATA
1:43.949 11101100 0x37 '7' DATA
1:44.012 10000010 0x41 'A' DATA
1:44.075 10011100 0x39 '9' DATA
1:44.138 00001100 0x30 '0' DATA
1:44.201 10001100 0x31 '1' DATA
1:44.264 00011100 0x38 '8' DATA
1:44.328 00100010 0x44 'D' DATA
1:44.391 00001100 0x30 '0' DATA
1:44.454 10001100 0x31 '1' DATA
1:44.517 10001100 0x31 '1' DATA
1:44.580 11101100 0x37 '7' DATA
1:44.643 10100010 0x45 'E' DATA
1:44.706 10100010 0x45 'E' DATA
1:44.769 00001100 0x30 '0' DATA
1:44.832 00001100 0x30 '0' DATA
1:44.896 10001100 0x31 '1' DATA
1:44.958 11101100 0x37 '7' DATA
1:45.022 10000010 0x41 'A' DATA
1:45.084 01101100 0x36 '6' DATA
1:45.148 10100010 0x45 'E' DATA
1:45.210 10100010 0x45 'E' DATA
1:45.274 11000010 0x43 'C' DATA
1:45.337 10000010 0x41 'A' DATA
1:45.400 00100010 0x44 'D' DATA
1:45.463 00001100 0x30 '0' DATA
1:45.526 01100010 0x46 'F' DATA
1:45.589 00100010 0x44 'D' DATA
1:45.652 01001100 0x32 '2' DATA
1:45.715 11000010 0x43 'C' DATA
1:45.778 00001100 0x30 '0' DATA
1:45.841 11101100 0x37 '7' DATA
1:45.904 10001100 0x31 '1' DATA
1:45.967 11101100 0x37 '7' DATA
1:46.030 10001100 0x31 '1' DATA
1:46.093 00001100 0x30 '0' DATA
1:46.156 01100010 0x46 'F' DATA
1:46.220 11001100 0x33 '3' DATA
1:46.283 10100010 0x45 'E' DATA
1:46.346 01101100 0x36 '6' DATA
1:46.409 10100010 0x45 'E' DATA
1:46.472 10100010 0x45 'E' DATA
1:46.535 10000010 0x41 'A' DATA
1:46.598 10101100 0x35 '5' DATA
1:46.661 10100010 0x45 'E' DATA
1:46.724 10100010 0x45 'E' DATA
1:46.787 11000010 0x43 'C' DATA
1:46.850 10011100 0x39 '9' DATA
1:46.913 01100010 0x46 'F' DATA
1:46.976 01100010 0x46 'F' DATA
1:47.039 01100010 0x46 'F' DATA
1:47.102 00001100 0x30 '0' DATA
1:47.166 00001100 0x30 '0' DATA
1:47.228 01001100 0x32 '2' DATA
1:47.292 00100010 0x44 'D' DATA
1:47.354 00001100 0x30 '0' DATA
1:47.418 00100010 0x44 'D' DATA
1:47.481 01100010 0x46 'F' DATA
1:47.544 00011100 0x38 '8' DATA
1:47.607 00011100 0x38 '8' DATA
1:47.670 01100010 0x46 'F' DATA
1:47.733 00001100 0x30 '0' DATA
1:47.796 00001100 0x30 '0' DATA
1:47.859 01001100 0x32 '2' DATA
1:47.922 00100010 0x44 'D' DATA
1:47.985 00001100 0x30 '0' DATA
1:48.048 00100010 0x44 'D' DATA
1:48.111 10000010 0x41 'A' DATA
1:48.175 00101100 0x34 '4' DATA
1:48.238 11000010 0x43 'C' DATA
1:48.301 11110100 0x2F '/' EOF
1:48.364 01001100 0x32 '2' CSUML1
1:48.427 01001100 0x32 '2' CSUML2
1:48.490 10001100 0x31 '1' CSUMH2
1:48.553 11101100 0x37 '7' CSUMH2
1:48.616 00100000 0x04  ?  EOT1
1:48.684 00100000 0x04  ?  EOT2

Disassembly: TONES A0 - Sound Effect

Disassembled using https://www.masswerk.at/6502/disassembler.html.

                  * = 0200
0200   A9 00      LDA #$00
0202   85 EE      STA $EE
0204   A9 01      LDA #$01
0206   8D 06 17   STA $1706
0209   A9 01      LDA #$01
020B   8D 01 17   STA $1701
020E   EE 00 17   INC $1700
0211   A6 EE      LDX $EE
0213   CA         DEX
0214   D0 FD      BNE $0213
0216   2C 07 17   BIT $1707
0219   10 F3      BPL $020E
021B   E6 EE      INC $EE
021D   A5 EE      LDA $EE
021F   C9 FF      CMP #$FF
0221   F0 02      BEQ $0225
0223   D0 DF      BNE $0204
0225   88         DEY
0226   F0 02      BEQ $022A
0228   D0 DA      BNE $0204
022A   4C 00 00   JMP $0000
022D              .END