Kenbak-1 | |
---|---|
| |
Тип | Персональный компьютер |
Разработчик | John Blankenbaker[вд] |
Производитель | Kenbak Corporation |
Дата выпуска | 1971 |
Медиафайлы на Викискладе |
Kenbak-1 — по мнению Музея компьютерной истории,[1] Компьютерного музея Америки[2] и Американского компьютерного музея[3],является первым в мире «персональным компьютером»,[4]изобретенным Джоном Бланкенбейкером (род. 1929) из корпорации Kenbak в 1970 году и впервые проданный в начале 1971 года.[5] Всего было построено менее 50 машин, для которых использовались корпуса Bud Industries.[6] Цена за изделие $750.[7] На сегодняшний день в мире известно всего 14 машин.,[8][9] в руках различных коллекционеров и музеев. Производство «Кенбак-1» прекратилось в 1973 году,[10] когда компания Kenbak потерпела неудачу и была поглощена CTI Education Products, Inc. CTI провела ребрендинг инвентаря и переименовала его в 5050, хотя продажи оставались слабыми.[11]
Поскольку «Кенбак-1» был изобретен до появления первого микропроцессора, машина не имела однокристального процессора, а была построена исключительно на малогабаритных интегральных микросхемах TTL.[12] 8-битная машина предлагала 256 байт памяти.[13] Реализовано на сдвиговых МОП-регистрах Intel типа 1404A с кремниевым затвором.[14] Период тактового сигнала составлял 1 микросекунду (что соответствует тактовой частоте 1 МГц), но скорость выполнения программ в среднем была ниже 1000 инструкций в секунду из-за большого количества тактов, необходимых для каждой операции и медленного доступа к последовательной памяти..[12]
Машина была запрограммирована в чистом машинном коде с помощью набора кнопок и переключателей. Выходной сигнал состоял из ряда лампочек.
Внутри Kenbak-1 имеет архитектуру последовательного компьютера, обрабатывающего по одному биту за раз.[15][16]
Kenbak-1 был назван в честь компании Kenbak Corporation, основанной Джоном Блюкенбейкером для продажи этого устройства.
07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | () |
Основные регистры | ||||||||
A | A | |||||||
B | B | |||||||
X | X (Index) | |||||||
P | Program Counter | |||||||
Флаги | ||||||||
000000 | C | O | A flags | |||||
000000 | C | O | B flags | |||||
000000 | C | O | X flags | |||||
Вход/выход | ||||||||
Output | Lights | |||||||
Input | Switches |
Всего в Kenbak-1 девять регистров. Все они отображаются в памяти. В нем есть три регистра общего назначения: A, B и X. Регистр A является неявным адресатом некоторых операций. Регистр X, также известный как индексный регистр, превращает прямой и косвенный режимы в индексированный прямой и индексированный косвенный режимы. Кроме того, в нем есть программный счетчик, называемый регистром P, три регистра «переполнения и переноса» для A, B и X, соответственно, а также регистр ввода и регистр вывода[17].
Инструкции Add, Subtract, Load, Store, Load Complement, And и Or работают между регистром и другим операндом, используя пять режимов адресации:
Инструкции кодируются в 8 битах, при этом второй байт может содержать непосредственное значение или адрес. Некоторые инструкции имеют несколько возможных кодировок.[18]
Матрица опкодов для набора инструкций Kenbak-1 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Старшие восьмеричные разряд | Младший восьмеричный разряд | |||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |||||||||||
00 | HALT | SFTR A1 | SET 0 b0 XXX | ADD A #XXX | ADD A XXX | ADD A (XXX) | ADD A XXX, X | ADD A (XXX), X | ||||||||||
01 | HALT | SFTR A2 | SET 0 b1 XXX | SUB A #XXX | SUB A XXX | SUB A (XXX) | SUB A XXX, X | SUB A (XXX), X | ||||||||||
02 | HALT | SFTR A3 | SET 0 b2 XXX | LOAD A #XXX | LOAD A XXX | LOAD A (XXX) | LOAD A XXX, X | LOAD A (XXX), X | ||||||||||
03 | HALT | SFTR A4 | SET 0 b3 XXX | STORE A #XXX | STORE A XXX | STORE A (XXX) | STORE A XXX, X | STORE A (XXX), X | ||||||||||
04 | HALT | SFTR B1 | SET 0 b4 XXX | JPD A ≠0 XXX | JPD A =0 XXX | JPD A <0 XXX | JPD A ≥0 XXX | JPD A >0 XXX | ||||||||||
05 | HALT | SFTR B2 | SET 0 b5 XXX | JPI A ≠0 XXX | JPI A =0 XXX | JPI A <0 XXX | JPI A ≥0 XXX | JPI A >0 XXX | ||||||||||
06 | HALT | SFTR B3 | SET 0 b6 XXX | JMD A ≠0 XXX | JMD A =0 XXX | JMD A <0 XXX | JMD A ≥0 XXX | JMD A >0 XXX | ||||||||||
07 | HALT | SFTR B4 | SET 0 b7 XXX | JMI A ≠0 XXX | JMI A =0 XXX | JMI A <0 XXX | JMI A ≥0 | JMI A >0 XXX | ||||||||||
10 | HALT | ROTR A1 | SET 1 b0 XXX | ADD B #XXX | ADD B XXX | ADD B (XXX) | ADD B XXX, X | ADD B (XXX), X | ||||||||||
11 | HALT | ROTR A2 | SET 1 b1 XXX | SUB B #XXX | SUB B XXX | SUB B (XXX) | SUB B XXX, X | SUB B (XXX), X | ||||||||||
12 | HALT | ROTR A3 | SET 1 b2 XXX | LOAD B #XXX | LOAD B XXX | LOAD B (XXX) | LOAD B XXX, X | LOAD B (XXX), X | ||||||||||
13 | HALT | ROTR A4 | SET 1 b3 XXX | STORE B #XXX | STORE B XXX | STORE B (XXX) | STORE B XXX, X | STORE B (XXX), X | ||||||||||
14 | HALT | ROTR B1 | SET 1 b4 XXX | JPD B ≠0 XXX | JPD B =0 XXX | JPD B <0 XXX | JPD B ≥0 XXX | JPD B >0 XXX | ||||||||||
15 | HALT | ROTR B2 | SET 1 b5 XXX | JPI B ≠0 XXX | JPI B =0 XXX | JPI B <0 XXX | JPI B ≥0 XXX | JPI B >0 XXX | ||||||||||
16 | HALT | ROTR B3 | SET 1 b6 XXX | JMD B ≠0 XXX | JMD B =0 XXX | JMD B <0 XXX | JMD B ≥0 XXX | JMD B >0 XXX | ||||||||||
17 | HALT | ROTR B4 | SET 1 b7 XXX | JMI B ≠0 XXX | JMI B =0 XXX | JMI B <0 XXX | JMI B ≥0 XXX | JMI B >0 XXX | ||||||||||
20 | NOOP | SFTL A1 | SKP 0 b0 XXX | ADD X #XXX | ADD X XXX | ADD X (XXX) | ADD X XXX, X | ADD X (XXX), X | ||||||||||
21 | NOOP | SFTL A2 | SKP 0 b1 XXX | SUB X #XXX | SUB X XXX | SUB X (XXX) | SUB X XXX, X | SUB X (XXX), X | ||||||||||
22 | NOOP | SFTL A3 | SKP 0 b2 XXX | LOAD X #XXX | LOAD X XXX | LOAD X (XXX) | LOAD X (XXX) | LOAD X (XXX), X | ||||||||||
23 | NOOP | SFTL A4 | SKP 0 b3 XXX | STORE X #XXX | STORE X XXX | STORE X (XXX) | STORE X XXX, X | STORE X (XXX), X | ||||||||||
24 | NOOP | SFTL B1 | SKP 0 b4 XXX | JPD X ≠0 XXX | JPD X =0 XXX | JPD X <0 XXX | JPD X ≥0 XXX, X | JPD X >0 XXX | ||||||||||
25 | NOOP | SFTL B2 | SKP 0 b5 XXX | JPI X ≠0 XXX | JPI X =0 XXX | JPI X <0 XXX | JPI X ≥0 XXX | JPI X >0 XXX | ||||||||||
26 | NOOP | SFTL B3 | SKP 0 b6 XXX | JMD X ≠0 XXX | JMD X =0 XXX | JMD X <0 XXX | JMD X ≥0 XXX | JMD X >0 XXX | ||||||||||
27 | NOOP | SFTL B4 | SKP 0 b7 XXX | JMI X ≠0 XXX | JMI X =0 XXX | JMI X <0 XXX | JMI X ≥0 XXX | JMI X >0 XXX | ||||||||||
30 | NOOP | ROTL A1 | SKP 1 b0 XXX | OR #XXX | OR XXX | OR (XXX) | OR XXX, X | OR (XXX), X | ||||||||||
31 | NOOP | ROTL A2 | SKP 1 b1 XXX | — | — | — | — | — | ||||||||||
32 | NOOP | ROTL A3 | SKP 1 b2 XXX | AND #XXX | AND XXX | AND (XXX) | AND XXX, X | AND (XXX), X | ||||||||||
33 | NOOP | ROTL A4 | SKP 1 b3 XXX | LNEG #XXX | LNEG XXX | LNEG (XXX) | LNEG XXX, X | LNEG (XXX), X | ||||||||||
34 | NOOP | ROTL B1 | SKP 1 b4 XXX | JPD UNC XXX | JPD UNC XXX | JPD UNC XXX | JPD UNC XXX | JPD UNC XXX | ||||||||||
35 | NOOP | ROTL B2 | SKP 1 b5 XXX | JPI UNC XXX | JPI UNC XXX | JPI UNC XXX | JPI UNC XXX | JPI UNC XXX | ||||||||||
36 | NOOP | ROTL B3 | SKP 1 b6 XXX | JMD UNC XXX | JMD UNC XXX | JMD UNC XXX | JMD UNC XXX | JMD UNC XXX | ||||||||||
37 | NOOP | ROTL B4 | SKP 1 b7 XXX | JMI UNC XXX | JMI UNC XXX | JMI UNC XXX | JMI UNC XXX | JMI UNC XXX |