Science of Cambridge MK14

Компьютеры прошлого, не попавшие в другие разделы

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Science of Cambridge MK14

Post by Lavr »

Ой... настальгийяяя... АЛС-318... хотя, наверноe, здесь это не совсем он... или совсем не он... и по ссылке - не совсем ЮТ-88. :rotate:

Image
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А оригинальная схемотехника - попроще ЮТ-88 будет... Процессор, память, порт + индикатор...

Image
Увеличить ==> Источник
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Оооопаньки!!! А процессор-то у него - 8-bit National Semiconductor SC/MP!

http://www.robsons.org.uk/archive/members.aol.com/mk14emu/scmp.htm

Я такой вообще впервые вижу! :o

http://www.datasheetarchive.com/ISP-8A%2F600-datasheet.html
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

National Semiconductor SC/MP

Post by Lavr »

Lavr wrote:А процессор-то у него - 8-bit National Semiconductor SC/MP!
Я такой вообще впервые вижу! :o
Вчера вновь пришлось столкнуться в сети с этим микропроцессором, и решил я уделить ему поболее внимания.
L_NS-INS8060N.jpg
Микропроцессор интересен тем, что с его помощью National Semiconductor пыталась занять на рынке
нишу медленных, но дешевых микроконтроллеров. :roll:

Действительно, построить микроконтроллер, управляющий небыстрым процессом на его основе требовало
всего лишь двух внешних БИС.

А дешевизна (~$25 на 1976 год) объяснялась его конструктивными особенностями: АЛУ у него было последовательным, что объясняет его невысокое быстродействие.
(Тут мне стало приятно в душЕ - не столь уж непопулярным оказалось у меня последовательное АЛУ в моём самодельном 4-битном процессоре! ) :wink:

Благодаря дешевизне, National Semiconductor SC/MP оказался соблазнительным для любительских конструкций:
Elektor.png
https://www.elektormagazine.com/magazine/elektor-261/60700
https://www.elektormagazine.com/magazine/elektor-200504/17946

Все, кто в юности начинали свой путь в микропроцессорную технику с этого микропроцессора, потому что
родителям было не по средствам купить Altair 8080, свой SC/MP хвалят и пишут эмуляторы для потомства. :wink:

Image

http://xgistor-echo.scorchingbay.nz/scmp.htm
https://www.heinpragt.com/english/software_development/ins8060_or_scmp_processor.html
https://www.retrothing.com/2010/06/rebirth-of-the-first-sinclair-computer.html

Впрочем... мне ещё пока не встречалось, чтобы кто-то свой первый микропроцессор/компьютер ругал... :lol:
Всяк кулик... (далее по тексту). :D
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Science of Cambridge MK14

Post by Lavr »

Хорошая статья про первый компьютер от компании Клайва Синклера - Science of Cambridge - MK14
в музее старых компьютеров: https://www.old-computers.com/museum/computer.asp?c=961
Sinclair_MK14_System_1.png
Sinclair_MK14_System_s3.png
У кого траблы с английским, русская Википедия добросовестно пересказывает эту статью,
и местами дополняет отсебятинкой! :wink: https://ru.wikipedia.org/wiki/MK_14
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: National Semiconductor SC/MP

Post by Lavr »

Lavr wrote: 10 Jan 2023 12:47
Lavr wrote:А процессор-то у него - 8-bit National Semiconductor SC/MP!
Интересно... находятся любители и одноплатные компьютеры делают на ЦПУ этого семейства! :roll:
8073SBC-1.png
INS8073 Single Board Computer

Собственно... меня заинтересовал Tiny BASIC этого весьма несуразного CPU...
You do not have the required permissions to view the files attached to this post.
iLavr
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: Science of Cambridge MK14

Post by b2m »

На всякий случай, оставлю ссылку: https://norbert.old.no/extra/extra3.html
Last edited by b2m on 25 Feb 2025 01:26, edited 1 time in total.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Science of Cambridge MK14

Post by Lavr »

А некий англичанин Jim состряпал эмулятор этого самого "Science of Cambridge MK14" в Excel VBA! :roll:
MK14.gif
Jim’s MK14 emulator

Видимо, графика индикатора - таблицей...
Но у меня под Office 2007 это всё не взлетело... ошибка какой-то функции... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Science of Cambridge MK14

Post by Lavr »

b2m wrote: 24 Feb 2025 05:30 На всякий случай, оставлю ссылку: https://norbert.old.no/extra/extra3.html
Это называется:"На тебе, Боже, нечто негоже..." :lol:

С 1976 года есть ведь и более культурные версии:
nibl_listing.zip
You do not have the required permissions to view the files attached to this post.
iLavr
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: National Semiconductor SC/MP

Post by b2m »

Lavr wrote: 24 Feb 2025 02:15INS8073 Single Board Computer

Собственно... меня заинтересовал Tiny BASIC этого весьма несуразного CPU...
Мне показалось, ты про INS8073. То, что ты приаттачил, похоже для другого процессора. Ну нет, так нет, убрал ненужное.

 info
ISP-8A/500 SC/MP-1 Clocked at 1 MHz, first implementation (P Channel MOS technology)

INS 8060 ISP-8A/600 SC/MP-2 Clocked at 4 MHz (internally 2 MHz) first N Channel MOS version (single +5V supply)

INS 807x SC/MP-3 Clocked at 4 MHz (internally 2 MHz) included variations with up to 4 KB ROM (optional onboard BASIC (NIBL))

spoiler не работает?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

Re: Science of Cambridge MK14

Post by b2m »

Микропроцессор INS807х часто называют SC/MP III. Однако его не следует путать с процессором SC/MP с P-канальной технологией или с его прямым преемником INS8060 (SC/MP II) с N-канальной технологией. Основные различия между этими процессорами:

SC/MP и INS8060 (SC/MP II)
Не имеет Т-регистра.
Шина данных также используется для вывода 4 старших бит адреса и 4 дополнительных флагов.
Нет стека .
Команды для прямой установки или сброса флагов IE и CY/L доступны в регистре S.
Команды SIO и DLY для реализации простого последовательного ввода/вывода на контактах SIN и SOUT с использованием регистра E.
Подпрограммы сложно реализовать из-за отсутствия команд CALL, JSR и RET.
Только 8-битное сложение и вычитание.

INS8070 (SC/MP III)
Доступен дополнительный T-регистр.
Чистый 16-битный адрес и 8-битная шина данных. Четыре дополнительных флага в шине данных отсутствуют.
16-битный указатель стека .
Регистр S можно обрабатывать только через аккумулятор или с помощью инструкций И ​​или ИЛИ.
Регистр E может использоваться вместе с аккумулятором как 16-битный регистр EA. Контакты SIN и SOUT отсутствуют.
Доступны 16 коротких команд CALL (1 байт), одна команда JSR (3 байта) и RET.
Также 16-битные вычисления, включая умножение и деление.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: National Semiconductor SC/MP

Post by Shaos »

b2m wrote: 25 Feb 2025 01:46 spoiler не работает?
Работает, если имя указать (если по русски, то в кавычках)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: National Semiconductor SC/MP

Post by Lavr »

Lavr wrote: 10 Jan 2023 12:47
Lavr wrote:А процессор-то у него - 8-bit National Semiconductor SC/MP!
Собственно... меня заинтересовал Tiny BASIC этого весьма несуразного CPU...
Хотелось посмотреть в большой программе, как они обходят несуразности процессора SC/MP при пересечении границ сегмента.
Ибо кроме этого несуразностей у процессора SC/MP ой как много! :wink:

 SC/MP absurdities
National Semiconductor SC/MP wrote:National Semiconductor SC/MP
https://en.wikipedia.org/wiki/National_Semiconductor_SC/MP

Для снижения стоимости система использовала последовательное однобитное арифметико-логическое устройство (АЛУ) и, таким образом, была значительно медленнее современных ей разработок, таких как Intel 8080 или MOS 6502, которые имели параллельные АЛУ. Еще одной странностью было то, что счетчик программ мог получить доступ только к нижним 12 битам 16-битного адреса, а верхние 4 бита приходилось устанавливать с помощью специальных инструкций. Результатом было то, что инструкции обращались к основной памяти как к шестнадцати 4-килобайтным «страницам», и для достижения памяти за пределами этих страниц требовалось несколько инструкций.[a]
Как и большинство 8-битных микропроцессоров той эпохи, SC/MP микропроцессор основан на 16-битной адресной и 8-битной шине данных. Чтобы уменьшить количество контактов, внешняя адресная шина содержит только 12 контактов, разделяя 4 контакта с шиной данных для создания полного 16-битного адреса.[2] Внутри программный счетчик имеет ширину в двенадцать бит, и есть отдельные инструкции для установки старших четырех бит путем копирования 8-битного значения в старший байт. Это обеспечивает карту памяти из шестнадцати 4-килобайтных страниц, и программный код не может ссылаться на код или непосредственные или адресуемые относительно PC данные за пределами своей собственной страницы.[6] Таким образом, память организована как 16 страниц по 4 Кб каждая. Это приводит к любопытному эффекту конструкции: когда программный счетчик достигает конца страницы, он не переходит на следующую страницу, а возвращается в начало текущей страницы.[2]
Это было еще больше ограничено двухбайтовым форматом инструкции, который использовал один байт для кода операции и второй для указания смещения между 128 и +127, которое добавлялось к значению в регистрах процессора для получения полного 16-битного адреса. Например, адрес может ссылаться на местоположение в памяти, говоря, что это +10 позиций от значения в счетчике программ или +10 от значения в одном из 16-битных индексных регистров. Чтобы получить доступ к местоположению за пределами этого диапазона, адрес должен был быть сохранен в одном из индексных регистров, а затем смещение должно было быть установлено равным нулю.[6] Поскольку регистры 16-битные, а аккумулятор, загружающий значения, является 8-битным, для установки полного адреса требовалось несколько инструкций.[7]
Поскольку индексы были критически важны для модели адресации, SC/MP включал четыре индексных регистра, «регистры указателей» от PR0 до PR3. PR0 был счетчиком программ PC и обычно не доступен для манипуляции пользовательскими программами. По соглашению, PR1 обычно использовался как указатель на ПЗУ, PR2 на ОЗУ, а PR3 использовался для хранения адреса во время прерываний и вызовов подпрограмм.[5] SC/MP не имел стека, где возвращаемые значения обычно хранились в большинстве современных конструкций. Программы должны были сохранять адреса возврата с помощью явного кода.[7]
Система включает автоматическую обработку прерываний на линии Sense A. Когда получено прерывание и IE имеет высокий уровень (включен), перед началом выборки следующей инструкции система очищает IE, чтобы предотвратить другое прерывание, а затем обменивает значения в PC и PS3. Это приводит к сохранению адреса возврата в PR3 и отправке следующей инструкции в точку входа обработчика прерываний, ранее сохраненную в PR3.[8]
Система не включает привычный эквивалент возврата из прерывания. Это можно сделать с помощью операции XPPC, скопировав ранее сохраненный адрес в PR3 обратно в PC, и выполнение продолжится с того места, где оно было остановлено. Однако это оставляет неправильный адрес в PR3, не начало обработчика прерываний, а конец. Чтобы разрешить эту проблему, распространенным решением является размещение инструкции XPPC, которая возвращает управление в основной код, на одну инструкцию выше точки входа обработчика, а не в конце. Когда обработчик завершается, он возвращается к этой инструкции, поэтому при вызове XPPC PC указывается на одну позицию перед правильной точкой входа. Поскольку система увеличивает PC перед вызовом инструкции, это означает, что следующее прерывание приведет к его входу в правильную точку входа. Этот «обработчик выхода» обычно также сбрасывает IE в 1, чтобы снова включить прерывания.[9]

Но интересно, что если хоть раз конструировал собственный процессор, становится понятно, какие проблемы решали разработчики на пути упрощения конструкции, и каким образом это на странностях процессора отразилось…

Может быть, я бы ещё долго не собрался разобраться с этим древним процессором подробнее, но попался мне на глаза весьма интересный проект эмуляции этого раритетного МК-14 на платформе микроконтроллеров PIC16 от некоей широко известной в определённых кругах Karen Orton.
PIC14_circuit.PNG
https://techlib.com/area_50/Readers/Karen/micro.htm#PIC14

И я решил, почему бы не совместить полезное с приятным: разобраться подробно с устройством весьма несуразного процессора SC/MP и попрограммировать на его довольно нетривиальном языке ассемблера с помощью модели МК-14?

В итоге у меня получилось вот что:
MK-14_PIC14.png
После запуска проект ждёт ввода программы по последовательному интерфейсу в формате IntelHEX (это, собственно, текстовый файл, открываемый любым текстовым редактором).
В эмулятор терминала программа переносится через copy-paste.
Если загрузка закончилась успешно, выводится 0000__00 на индикатор.
Следует ввести с клавиатуры адрес запуска: обычно [0][F][2][0] и [-GO-].

Если загрузка не нужна, нажимаем [RESET], также выводится 0000__00 на индикатор.
Для работы с моделью МК-14 неплохо бы скачать MK14 Manual (later version).pdf – много где находится поисковиками.
Самое нужное я перевёл в файле: PIC14 keyboard.doc

В двух словах: ОЗУ начинается с адреса 0F00H, его немного, около 256 Байт.
Программы обычно начинают с адреса 0F20H. Нажимаем [0][F][2][0]. Видим содержимое ячейки памяти.
Нажатие [TERM] позволяет редактировать байт по этому адресу.
Нажатие [MEM] – сдвигает к следующему адресу.
Нажатие [ABORT] – позволяет выйти из редакции и ввести новый адрес.
[RESET] прерывает программу, выводит 0000__00 на индикатор, содержимое ОЗУ не портит.
RES_PIC вызывает начальную загрузку с терминала.

В общем, в архиве ниже – играть подано! :lol:
PIC_MK14.zip
Игрушка, правда, там одна: Duck Shoot, но как в неё играть, я не понял… :( Я в ассемблеры наигрался. 8)

P.S. Когда я уже почти всё закончил, попалась интересная ссылка:
Science of Cambridge MK14 simulator
Кто не уважает Proteus, по ссылке – онлайн simulator!
Ресурс добротный, интересного много там! :kruto:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: National Semiconductor SC/MP

Post by Lavr »

Lavr wrote: 02 Mar 2025 02:05Я в ассемблеры наигрался. 8)
С клавиатуры я осилил лишь одну программу: :-?

Code: Select all

[0][F][2][0]  [TERM]
90[MEM]00[MEM]C4[MEM]00[MEM]31[MEM]C4[MEM]0D[MEM]
35[MEM]C4[MEM]AA[MEM]CD[MEM]00[MEM]90[MEM]F4[MEM]
[RESET]
[0][F][2][0] [-GO-]
Потом решил, что можно использовать мой любимый ассемблер i8080:
The Intel 8080 Assembler by Jay Cotton and Claude Sylvai
https://sourceforge.net/projects/asm8080/
https://github.com/begoon/asm8080
Поскольку сохранение на терминал в модели PIC14 не реализовано.

Code: Select all

    ORG  0F20H

    DB   90H
    DB   00H
    DB   0C4H,00H
    DB   31H
    DB   0C4H,0DH
    DB   35H
    DB   0C4H,0AAH  ; 10101010
    DB   0CDH       ; 11001101 ST 1 01
    DB   00H
    DB   90H        ; JMP
    DB   0F4H
    END
Таким способом можно компилировать код из мануала MK14 Manual (later version).pdf,
оцифровав его через FineReader.

 Message.asm

Code: Select all

          ORG  0F20H
;         DB   01H      ;  Speed:  Всё проверено и верно!
          DB   0C4H,0DH ;  LDI  H(Disp)    ; Load AC Hi(Disp)
          DB   35H      ;  XPAH 1          ; Exchange P1Hi
          DB   0C4H,00H ;  LDI  L(Disp)    ; Load AC Lo(Disp)
          DB   31H      ;  XPAL 1          ; Exchange P1Hi

          DB   0C4H,0FH ;  LDI  H(Text)    ; Load AC Hi(Text)
          DB   36H      ;  XPAH 2          ; Exchange P2Hi
          DB   0C4H,71H ;  LDI  L(Text)-8  ; Load AC Lo(Text)-8 !!!
          DB   32H      ;  XPAL 2          ; Exchange P2Hi

          DB   0C4H,0E0H;  LDI  X'E0       ; Load AC 0E0H
          DB   0C8H,0F0H;  ST   Speed      ; Store P0(Speed)

          DB   0C4H,07H ;  LDI  7          ; Load AC 07H
          DB   01H      ;  XAE             ; Exchange E (E=7)
          DB   0C2H,80H ;  LD   -128(2)    ; Load AC  P2(Text)
          DB   0C9H,80H ;  ST   -128(1)    ; Store AC P1(Disp)

          DB   0C4H,0FFH;  LDI  X'FF       ; Load AC 0FFH (A=-1)
          DB   02H      ;  CCL             ; Clear Carry Flag
          DB   70H      ;  ADE             ; A=A+E=A-1 i.e. decrement
          DB   94H,0F5H ; =0F3H+2 JP Loop  ; Jump if Positive

          DB   0B8H,0E1H; =0DFH+2 DLD Speed; Speed=Speed-1
          DB   9CH,0EFH ; =0EDH+2 JNZ Again;

          DB   0C6H,0FFH;  LD   @-1(2)     ; Move letters
          DB   94H,0E7H ; =0E5H+2 JP  Move ; X'80 = end of text
          DB   90H,0DFH ; =0DDH+2 JMP  Go; 0DFH -33; 0DDH -35
;         DB   0D00H
;0F47
          DB   80H, 79H, 79H, 6DH, 40H, 37H ; 6
          DB   77H, 39H, 40H, 3EH, 3FH, 6EH ; 12
          DB   40H, 6DH, 77H, 40H, 6EH, 3EH ; 18
          DB   7FH, 40H, 79H, 37H, 30H, 71H ; 24
          DB   40H, 6EH, 38H, 38H, 3FH, 1FH ; 30
          DB   40H, 77H, 40H, 6DH, 30H, 40H ; 36
          DB   39H, 40H, 71H, 3FH, 40H, 6DH ; 42
;0F71
          DB   40H, 79H, 79H, 6DH, 40H, 37H ; 48
          DB   77H, 39H                     ; 50 = 32h
;
          END

Но если ошибёшься, трудно найти ошибку… и отладчика-то нет!
Поэтому с ассемблером хотя бы несколько веселее! :wink:

Я вспомнил про этого вот неленивого мужичка: https://www.sbprojects.net/sbasm/scmp.php
Я его ассемблером 'SB-Assembler version 2' пользуюсь при работе с кодом MOS 6502,
Особенно если несколько специфичные операторы имеются в коде, типа:

Code: Select all

           .=0F1F
Speed:     .=.+1
Disp        =    0D00
           .BYTE 077,039
Text        =.               ; start of message
Его 'SB-Assembler version 3' у меня тоже был «на всякий случай». :D
Но в моём архиве ещё не было SC/MP cross overlay.
Мужичок пишет, что перепахал 'SB-Assembler version 3' и сделал новую версию кроссплатформенной,
Но я почему-то не люблю кроссплатформенный софт, и не стал обновлять свой 'SB-Assembler version 3'.

В итоге с подачи этой самой Karen Orton скачал я 'AS' assembler by Alfred Arnold,
http://john.ccac.rwth-aachen.de:8000/ftp/as/precompiled/i286-unknown-dpmi/asxcurr.zip
Его многие хвалят, а я так вижу в первый раз… :-?
Хотя Дёмин пишет, что это лучший макроассемблер для i8080, который он когда-либо встречал. :roll:

Но с кодом для SC/MP этот ассемблер справился без проблем!
И синтаксис у него мне более привычен. Так что – рекомендую! :kruto:

Автор Science of Cambridge MK14 simulator пишет, что можно использовать NASM.
У меня NASM есть, но поддержки SC/MP в моей версии также не имеется… :(
Жаль я поздно встретил этот ресурс! Автор там весь MK14 Manual (later version).pdf оцифровал! :o

Lavr wrote: 10 Jan 2023 12:47Игрушка, правда, там одна: Duck Shoot, но как в неё играть, я не понял… :(
Что касается игрушек, то на 7-сегментном индикаторе я знаю лишь одну динамичную игру: :lol:
Digital Invaders

Ещё когда тестировал проекты PIC14 под Proteus, подумал, что если всё заработает, надо будет попробовать перенести эту игру под SC/MP платформу… :wink:
Жаль только памяти у PIC14 мало. Но есть ведь и другой вариант! :o

PICL - A PIC Emulation of a SC/MP NIBL Tiny Basic Computer

Я для этого и протестировал один вариант проекта PIC14 под PIC16F877! :rotate:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: National Semiconductor SC/MP

Post by Lavr »

Lavr wrote: 02 Mar 2025 02:05
Lavr wrote: 10 Jan 2023 12:47
Lavr wrote:А процессор-то у него - 8-bit National Semiconductor SC/MP!
Собственно... меня заинтересовал Tiny BASIC этого весьма несуразного CPU...
Хотелось посмотреть в большой программе, как они обходят несуразности процессора SC/MP при пересечении границ сегмента.
А никак не обходят! Вот это меня феноменально удивило в приложении к языкам типа BASIC ! :o
Всё-таки, как я всегда думал, задача языка BASIC на ранних компьютерах - скрыть аппаратные особенности,
и привести всё некоей однородности хотя бы в рамках этого языка. :-?

Но в National Semiconductor решили иначе: если не можешь что-то преодолеть, надо это возглавить! :wink:
NIBL wrote:The PAGE pseudo variable recognizes the SC/MP 4kbyte paging. The program code in each page is treated like a separate program (i.e. line numbers may begin from 1 in each). Moving between these separate program segments is achieved by assigning the PAGE pseudo variable, on which control will be transferred to the first statement on the identified page.
Перевод wrote:Псевдопеременная PAGE распознает страничную организацию SC/MP размером 4 Кбайт. Программный код на каждой странице рассматривается как отдельная программа (т.е. номера строк могут начинаться с 1 в каждой). Перемещение между этими отдельными сегментами программы достигается назначением псевдопеременной PAGE, при котором управление будет передано первому оператору на идентифицированной странице.
Ну что тут скажешь ещё? Сурово и неординарно! :kruto:
:mrgreen:
iLavr