KIM-1 Cassette Tapes: Difference between revisions

From Makerspace Nanaimo
Jump to navigation Jump to search
Line 7: Line 7:
* [https://en.wikipedia.org/wiki/KIM-1 Wikipedia: KIM-1]
* [https://en.wikipedia.org/wiki/KIM-1 Wikipedia: KIM-1]
* [http://users.telenet.be/kim1-6502/6502/usrman.html MOS KIM-1 User Manual]
* [http://users.telenet.be/kim1-6502/6502/usrman.html MOS KIM-1 User Manual]
* [https://archive.org/stream/byte-magazine-1976-04/1976_04_BYTE_00-08_Automation#page/n15/mode/2up archive.org: Byte Magazine Volume 00 Number 08 - What's New, KIM-o-sabee?]
* [https://archive.org/stream/byte-magazine-1976-05/1976_05_BYTE_00-09_Shooting_Stars#page/n9/mode/2up archive.org: Byte Magazine Volume 00 Number 09 - A Date with KIM]


== Micro-KIM ==
== Micro-KIM ==

Revision as of 19:24, 8 March 2019


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

KIM-1

Micro-KIM

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

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
0:00.055 01101000 0x16     SYN
0:00.114 01101000 0x16     SYN
0:00.173 01101000 0x16     SYN
0:00.233 01101000 0x16     SYN
0:00.292 01101000 0x16     SYN
0:00.352 01101000 0x16     SYN
0:00.411 01101000 0x16     SYN
0:00.471 01101000 0x16     SYN
0:00.530 01101000 0x16     SYN
0:00.590 01101000 0x16     SYN
0:00.649 01101000 0x16     SYN
0:00.709 01101000 0x16     SYN
0:00.768 01101000 0x16     SYN
0:00.828 01101000 0x16     SYN
0:00.887 01101000 0x16     SYN
0:00.947 01101000 0x16     SYN
0:01.006 01101000 0x16     SYN
0:01.066 01101000 0x16     SYN
0:01.125 01101000 0x16     SYN
0:01.185 01101000 0x16     SYN
0:01.244 01101000 0x16     SYN
0:01.304 01101000 0x16     SYN
0:01.363 01101000 0x16     SYN
0:01.423 01101000 0x16     SYN
0:01.482 01101000 0x16     SYN
0:01.542 01101000 0x16     SYN
0:01.601 01101000 0x16     SYN
0:01.661 01101000 0x16     SYN
0:01.720 01101000 0x16     SYN
0:01.780 01101000 0x16     SYN
0:01.839 01101000 0x16     SYN
0:01.898 01101000 0x16     SYN
0:01.957 01101000 0x16     SYN
0:02.017 01101000 0x16     SYN
0:02.077 01101000 0x16     SYN
0:02.136 01101000 0x16     SYN
0:02.195 01101000 0x16     SYN
0:02.255 01101000 0x16     SYN
0:02.314 01101000 0x16     SYN
0:02.374 01101000 0x16     SYN
0:02.434 01101000 0x16     SYN
0:02.493 01101000 0x16     SYN
0:02.553 01101000 0x16     SYN
0:02.612 01101000 0x16     SYN
0:02.672 01101000 0x16     SYN
0:02.731 01101000 0x16     SYN
0:02.790 01101000 0x16     SYN
0:02.850 01101000 0x16     SYN
0:02.909 01101000 0x16     SYN
0:02.969 01101000 0x16     SYN
0:03.028 01101000 0x16     SYN
0:03.088 01101000 0x16     SYN
0:03.147 01101000 0x16     SYN
0:03.207 01101000 0x16     SYN
0:03.266 01101000 0x16     SYN
0:03.326 01101000 0x16     SYN
0:03.385 01101000 0x16     SYN
0:03.445 01101000 0x16     SYN
0:03.504 01101000 0x16     SYN
0:03.563 01101000 0x16     SYN
0:03.623 01101000 0x16     SYN
0:03.682 01101000 0x16     SYN
0:03.742 01101000 0x16     SYN
0:03.801 01101000 0x16     SYN
0:03.861 01101000 0x16     SYN
0:03.920 01101000 0x16     SYN
0:03.980 01101000 0x16     SYN
0:04.039 01101000 0x16     SYN
0:04.099 01101000 0x16     SYN
0:04.158 01101000 0x16     SYN
0:04.218 01101000 0x16     SYN
0:04.277 01101000 0x16     SYN
0:04.337 01101000 0x16     SYN
0:04.396 01101000 0x16     SYN
0:04.455 01101000 0x16     SYN
0:04.515 01101000 0x16     SYN
0:04.574 01101000 0x16     SYN
0:04.634 01101000 0x16     SYN
0:04.693 01101000 0x16     SYN
0:04.753 01101000 0x16     SYN
0:04.812 01101000 0x16     SYN
0:04.872 01101000 0x16     SYN
0:04.932 01101000 0x16     SYN
0:04.991 01101000 0x16     SYN
0:05.050 01101000 0x16     SYN
0:05.110 01101000 0x16     SYN
0:05.169 01101000 0x16     SYN
0:05.229 01101000 0x16     SYN
0:05.288 01101000 0x16     SYN
0:05.348 01101000 0x16     SYN
0:05.407 01101000 0x16     SYN
0:05.467 01101000 0x16     SYN
0:05.526 01101000 0x16     SYN
0:05.586 01101000 0x16     SYN
0:05.645 01101000 0x16     SYN
0:05.705 01101000 0x16     SYN
0:05.764 01101000 0x16     SYN
0:05.824 01101000 0x16     SYN
0:05.883 01101000 0x16     SYN
0:05.943 01101000 0x16     SYN
0:06.002 01010100 0x2A '*' SOF
0:06.062 10000010 0x41 'A' ID1
0:06.121 00001100 0x30 '0' ID2
0:06.180 00001100 0x30 '0' START_ADDR_L1
0:06.240 00001100 0x30 '0' START_ADDR_L2
0:06.299 00001100 0x30 '0' START_ADDR_H1
0:06.359 01001100 0x32 '2' START_ADDR_H2
0:06.418 10000010 0x41 'A' END_ADDR_L1
0:06.478 00001100 0x30 '0' END_ADDR_L2
0:06.537 00001100 0x30 '0' END_ADDR_H1
0:06.597 00101100 0x34 '4' END_ADDR_H2
0:06.656 10000010 0x41 'A' DATA
0:06.716 10011100 0x39 '9' DATA
0:06.775 00001100 0x30 '0' DATA
0:06.835 00001100 0x30 '0' DATA
0:06.894 00011100 0x38 '8' DATA
0:06.954 10101100 0x35 '5' DATA
0:07.013 10100010 0x45 'E' DATA
0:07.073 10100010 0x45 'E' DATA
0:07.132 10000010 0x41 'A' DATA
0:07.192 10011100 0x39 '9' DATA
0:07.251 00001100 0x30 '0' DATA
0:07.311 10001100 0x31 '1' DATA
0:07.370 00011100 0x38 '8' DATA
0:07.430 00100010 0x44 'D' DATA
0:07.489 00001100 0x30 '0' DATA
0:07.549 01101100 0x36 '6' DATA
0:07.608 10001100 0x31 '1' DATA
0:07.668 11101100 0x37 '7' DATA
0:07.727 10000010 0x41 'A' DATA
0:07.787 10011100 0x39 '9' DATA
0:07.846 00001100 0x30 '0' DATA
0:07.905 10001100 0x31 '1' DATA
0:07.965 00011100 0x38 '8' DATA
0:08.024 00100010 0x44 'D' DATA
0:08.083 00001100 0x30 '0' DATA
0:08.143 10001100 0x31 '1' DATA
0:08.202 10001100 0x31 '1' DATA
0:08.262 11101100 0x37 '7' DATA
0:08.321 10100010 0x45 'E' DATA
0:08.381 10100010 0x45 'E' DATA
0:08.440 00001100 0x30 '0' DATA
0:08.499 00001100 0x30 '0' DATA
0:08.559 10001100 0x31 '1' DATA
0:08.619 11101100 0x37 '7' DATA
0:08.678 10000010 0x41 'A' DATA
0:08.738 01101100 0x36 '6' DATA
0:08.797 10100010 0x45 'E' DATA
0:08.857 10100010 0x45 'E' DATA
0:08.916 11000010 0x43 'C' DATA
0:08.976 10000010 0x41 'A' DATA
0:09.035 00100010 0x44 'D' DATA
0:09.094 00001100 0x30 '0' DATA
0:09.154 01100010 0x46 'F' DATA
0:09.214 00100010 0x44 'D' DATA
0:09.273 01001100 0x32 '2' DATA
0:09.332 11000010 0x43 'C' DATA
0:09.391 00001100 0x30 '0' DATA
0:09.451 11101100 0x37 '7' DATA
0:09.511 10001100 0x31 '1' DATA
0:09.570 11101100 0x37 '7' DATA
0:09.629 10001100 0x31 '1' DATA
0:09.689 00001100 0x30 '0' DATA
0:09.748 01100010 0x46 'F' DATA
0:09.807 11001100 0x33 '3' DATA
0:09.867 10100010 0x45 'E' DATA
0:09.927 01101100 0x36 '6' DATA
0:09.986 10100010 0x45 'E' DATA
0:10.045 10100010 0x45 'E' DATA
0:10.105 10000010 0x41 'A' DATA
0:10.164 10101100 0x35 '5' DATA
0:10.224 10100010 0x45 'E' DATA
0:10.283 10100010 0x45 'E' DATA
0:10.342 11000010 0x43 'C' DATA
0:10.402 10011100 0x39 '9' DATA
0:10.461 01100010 0x46 'F' DATA
0:10.521 01100010 0x46 'F' DATA
0:10.580 01100010 0x46 'F' DATA
0:10.640 00001100 0x30 '0' DATA
0:10.699 00001100 0x30 '0' DATA
0:10.758 01001100 0x32 '2' DATA
0:10.818 00100010 0x44 'D' DATA
0:10.877 00001100 0x30 '0' DATA
0:10.936 00100010 0x44 'D' DATA
0:10.996 01100010 0x46 'F' DATA
0:11.055 00011100 0x38 '8' DATA
0:11.115 00011100 0x38 '8' DATA
0:11.174 01100010 0x46 'F' DATA
0:11.233 00001100 0x30 '0' DATA
0:11.293 00001100 0x30 '0' DATA
0:11.353 01001100 0x32 '2' DATA
0:11.412 00100010 0x44 'D' DATA
0:11.471 00001100 0x30 '0' DATA
0:11.531 00100010 0x44 'D' DATA
0:11.590 10000010 0x41 'A' DATA
0:11.649 00101100 0x34 '4' DATA
0:11.709 11000010 0x43 'C' DATA
0:11.769 11110100 0x2F '/' EOF
0:11.828 01001100 0x32 '2' CSUML1
0:11.887 01001100 0x32 '2' CSUML2
0:11.947 10001100 0x31 '1' CSUMH2
0:12.006 11101100 0x37 '7' CSUMH2
0:12.066 00100000 0x04  ?  EOT1
(EOT2 missing due to .wav file being cut short)

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