nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 08:38



Reply to topic  [ 15 posts ] 
Форт-компьютеры на рассыпухе 
Author Message
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
My4TH - Minimalistic FORTH computer with discrete CPU

http://mynor.org/my4th

Attachment:
My4th-testled.gif
My4th-testled.gif [ 444.47 KiB | Viewed 4529 times ]


Attachment:
My4th-colored.png
My4th-colored.png [ 507.66 KiB | Viewed 4529 times ]

Attachment:
Screenshot from 2023-04-01 01-19-41.png
Screenshot from 2023-04-01 01-19-41.png [ 71.65 KiB | Viewed 4529 times ]


Last edited by forthuser on 01 Apr 2023 00:56, edited 1 time in total.



29 Mar 2023 10:59
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Просьба к топикстартеру - избавиться от линканья внешних картинок (ибо источники могут пропасть в любой момент)
Берём все необходммые картинки, уменьшаем до 800-1000 пикселов по горизонтали и цепляем прямо в сообщение
Потом решим куда переносить... например в подборку процессоров на рассыпухе

_________________
:dj: https://mastodon.social/@Shaos


29 Mar 2023 17:45
Profile WWW
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
Shaos wrote:
Просьба к топикстартеру - избавиться от линканья внешних картинок (ибо источники могут пропасть в любой момент)

Вряд ли, т.к. это с авторского сайта, страничку которого если нужно, можно разместить и в Веб-архиве, что кто то уже сделал.

P.S. А, теге размещения картинок, вроде, бывает возможность указывать их разрешение для отображения.


29 Mar 2023 20:40
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Что значит вряд ли? У нас половина старых тем уже "потеряли" свои прилинованные извне картинки и ни в каких вебархивах они не остались...

_________________
:dj: https://mastodon.social/@Shaos


29 Mar 2023 20:47
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Потом решим куда переносить... например в подборку процессоров на рассыпухе

Можно отдельно сделать топик: Minimalistic FORTH computer with discrete CPU.
Я, собственно, сюда вынес - на твоё усмотрение.

_________________
iLavr


30 Mar 2023 10:01
Profile
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
Ещё вариант минималистического "Форт" процессора в TTL TOM1 (14 цифровых TTL компонент)
Модель процессора отлажена в программе Digital
(в опциях программы есть возможность экспорта в VHDL, VERILOG)

Code:
Opcodes

This is a non-exhaustive list of opcodes supported by the TOM-1:

    halt
    no_op
    push_literal — pushes a 16-bit operand to the top of stack
    branch0 — if the top of stack is equal to 0, jump to a 16-bit address (operand)
    add — pops values A and B from the data stack, pushes the value A + B to the top of stack
    nand — pops values A and B from the data stack, pushes the value A nand B to the top of stack
    load — pops an address from the stack, pushes the value of that address in RAM to the top of stack
    store — pops an address, then a value, from the stack and sets that address in RAM to the value
    return_push — pushes the value at the top of the stack onto the return stack
    return_pop — pops a value off the return stack and pushes it to the top of stack
    dup — duplicates the value a the top of stack
    drop — drops the top of the stack
    in — read a value from the 8-bit I/O port
    out — output a value on the 8-bit I/O port

I/O Port

The I/O port on the TOM-1 is a bidirectional transceiver that can read and write to any address in RAM. This port has the following pins:

    Power
    GND
    8 bits of data (low byte of 2-byte value in RAM)
    CLK
    Data Valid


По дизайну и системе команд: nybbleForth (Verilog)
Code:
            Code     Name          Size     Operation

            0         noop         4         No operation
            1         @            4         Load word from memory                                             
            2         call         4+16      Push P to return stack, fetch a word and jump                                               
            3         exit         4         Pop P from return stack
            4         (literal)    4+16      Fetch a word and push to stack
            7         r>           4         Pop return stack and push to data stack
            8         +            4         Add top two items on data stack                                           
            9         nand         4          Inverted conjunction of the two top items on data stack
            10        >r           4         Pop data stack and push to return stack
            11        0branch      4+8        Fetch a byte and add to P if popped data stack is zero
            12        !            4         Store word into memory


01 Apr 2023 00:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Картинки поправил сам и заодно перенёс топик в более правильный раздел

_________________
:dj: https://mastodon.social/@Shaos


01 Apr 2023 01:26
Profile WWW
Doomed
User avatar

Joined: 04 Jan 2016 09:15
Posts: 649
Location: Russia, S.- Peterburg
Reply with quote
Интересный проект.

Продублировал участникам по троичности. Как сделать можно сделать троичный комп без процессора - можно.
Двигать для обработки не один бит, а трит.

_________________
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)


01 Apr 2023 04:59
Profile WWW
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
askfind wrote:
Интересный проект.

Интересный. Идея поместить микрокод и обычный код в одно ПЗУ с точки зрения минимизации достаточно здравая.
Но со сбросом там не всё понятно. Ладно если в регистре инструкций при включении окажется ноль или корректная команда. А если мусор? Может так случиться, что на микрокод чтения команды он так и не попадёт.

askfind wrote:
Двигать для обработки не один бит, а трит.

Мне показалось, что из этого проекта вполне можно сделать более производительный процессор, если избавиться от NOR АЛУ, разбить регистр данных на две половинки по 4 бита, сделав возможным загрузку только младших 4 бит, а функции АЛУ полностью переложить на таблицы.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


01 Apr 2023 10:20
Profile WWW
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
Ещё на рассыпухе есть такой Форт процессор.

Mark 1
Mark 2

Но он, в сравнении с сабжем, "монстр" по количеству задействованных корпусов TTL микросхем. :)

P.S. А, в плане, реализации Форт процессора на FPGA и с числом базовых команд не более 16-ти (в 4-е бита) был в обсуждении топик на русскоязычном Форт форуме Как сделать форт-процессор 2022

b2m wrote:
... если избавиться от NOR АЛУ, разбить регистр данных на две половинки по 4 бита, сделав возможным загрузку только младших 4 бит, а функции АЛУ полностью переложить на таблицы.

Про расширение операций АЛУ таблицами тоже подумал, но уже когда включится в работу Форт система для их реализации.

А, 4-e бита на регистр представляется достаточно компромисным решением для такого процессора.
К примеру Форт контроллер от Atmel Mark-4 имел 4-ёх битный формат данных.

Однобитное АЛУ, возможно, неплохо ложится на работу с последовательными интерфейсами,
а предложенная концепция процессора масштабируется на обработку многих таких линий с данными и в силу использования стеков Форта в вычислительной модели и возможности быстрого
переключения контекста обработки при возникновении прерывания.

Как понимаю и применённые микросхемы памяти EEPROM (I2C) со временем доступа (120Нс), как это
описано на странице проекта тоже дополняют возможности процессора (помимо обычных ОЗУ/ПЗУ) в рамках такой концепции закрывая какие то вопросы к быстродействию и функциональности предложенного решения.

А, может, если "пофантазировать", такой дизайн вычислительного устройства применён в качестве вычислителя нейроузла. :)


01 Apr 2023 18:43
Profile
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
Автоперевод логики работы микропрограммного автомата процессора со страницы автора проекта wrote:
Но остается один вопрос: как все это работает?

Все начинается со счетчика адресов микрокода, который является чем-то вроде «сердца» компьютера. Каждая машинная инструкция состоит из 128 микрокоманд, при этом микрокоманда состоит из двух частей: 8-битного управляющего слова и необязательного 8-битного слова данных. Машинная инструкция («код OP»), которая должна быть выполнена, применяется к адресным линиям с A8 по A14 EPROM, а адресный счетчик микрокода подключается к A0 по A7. Счетчик адреса микрокода считает все микрокоманды текущего кода OP.

В каждом «четном» такте (когда A0 равно нулю) первая часть микрокоманды, а именно управляющее слово, сохраняется в защелке управляющего слова. 5 из 8 сигналов этого управляющего слова используются для управления потоком данных через процессор путем выбора исходного и целевого устройства. Окончательная передача данных происходит в следующем «нечетном» тактовом цикле, когда A0 равен единице. Поскольку в этом втором такте сама СППЗУ также может служить источником данных, можно легко сохранять постоянные значения, определяемые микрокодом, в различных регистрах и ОЗУ. Однако, поскольку в этом цикле в СППЗУ может быть введен любой адрес, можно выполнять произвольный доступ для чтения к СППЗУ, так что прикладная программа (интерпретатор Форта) может выполняться из СППЗУ.

Как видите, основной целью всей логики является передача данных из различных источников в различные пункты назначения под управлением микрокода. Регистры ЦП, такие как PC, SP, Accu и т. д., хранятся в ОЗУ. Счетчик программ увеличивается с помощью справочной таблицы в EPROM.

Обработка данных осуществляется через один вентиль ИЛИ-НЕ на линии данных D0. Возможно, вы уже знаете, что из функции НЕ-ИЛИ можно вывести любую логическую функцию, даже такие сложные функции, как сложение и вычитание. Но чтобы обработать все биты байта, My4TH должен перебрать все биты данных и обрабатывать их бит за битом. Необходимая функция сдвига данных также реализована в виде справочной таблицы в EPROM.

Условные переходы возможны только в пределах 128 позиций микрокода кода OP. Когда микрокоду необходимо выполнить условный переход, он сначала загружает целевой адрес (который находится в диапазоне от 0 до 127) в младшие 8 бит 16-битной защелки адреса. Управляющий сигнал, поступающий от защелки управляющего слова, затем разрешает условную загрузку нового адреса в счетчик микрокоманд в зависимости от значения D0 в течение нечетного тактового цикла.

Если вас больше интересует микрокод, рекомендую изучить документ "Инструкция MyNOR ADD", где я описываю, как я реализовал инструкцию ADD в микрокоде для компьютера MyNOR. Поскольку MyNOR и My4TH очень похожи, микрокод функции ADD работает точно так же на My4TH. Но для повышения производительности я немного схитрил My4TH, реализовав однобитный сумматор через небольшую справочную таблицу в EPROM.


Quote:
Когда вы закончили сборку собственной компьютерной платы My4TH, вы можете выполнить первый тест. Для этого теста подключите светодиод к контактам 2 (+) и 5 (-) разъема RS-232 и соедините контакты SCL и RXD разъема J2 проволочной перемычкой. После подачи напряжения питания светодиод должен мигать. Частота мигания светодиода составляет 1 Гц, когда My4TH тактируется генератором с частотой 8 МГц.
Этот тест мигания светодиода очень полезен, если вы хотите проверить максимальную тактовую частоту, с которой My4TH все еще может работать. Например, если вы запрограммировали EPROM с образом для работы на частоте 8 МГц, вы не сможете установить соединение RS-232, если вы синхронизируете My4TH с частотой 10 МГц, потому что скорость передачи имеет необычное значение 6000 бод. В этом случае светодиод может дать вам первую подсказку, может ли My4TH работать на этой более высокой частоте. В качестве второго шага теперь вы можете записать EPROM с образом, предназначенным для работы на частоте 10 МГц.

Если у вас есть доступ к My4TH через последовательный терминал, вы можете использовать следующую однострочную строку, чтобы проверить, стабильно ли My4TH работает с новой частотой. В строке выводится простой лабиринт, состоящий из случайных символов / и \:

: test begin 2 random if 47 else 92 then emit again ; test


Quote:
Использование Форта

Если вы еще этого не сделали, пожалуйста, сначала прочитайте учебник "Starting Forth" Лео Броди. Учебник содержит множество примеров, которые вы можете опробовать на My4TH. Еще одно действительно хорошее введение в Forth — Forth Primer And So Forth... Ганса Беземера. Этот учебник также представляет собой набор очень полезных фрагментов кода Forth. И это еще один очень хороший учебник для начинающих, особенно для начинающих: A Beginner's Guide to Forth.

Вот два примера простых программ на Форте, которые вы можете ввести и запустить на My4TH:

Квадратный корень из целого числа без знака можно вычислить следующим образом:

: sqrt dup begin 2dup / over + 2 / swap over - abs 2 < until nip ;

Строка выше реализует метод Герона для нахождения квадратного корня числа. Ведущее двоеточие сообщает Форту, что нужно скомпилировать новое слово "sqrt", которое состоит из всех следующих слов. Замыкающая точка с запятой говорит Forth снова выйти из режима компиляции. После того, как вы вошли в строку, Форт ответит «ОК». Когда вы сейчас войдете

49 sqrt .

вы получите правильный результат 7.

Вот еще один пример. Программа ниже рисует треугольник Паскаля:

: triangle cr dup 0 ?do 1 over 1- i - 2* spaces i 1+ 0
?do dup 4 .r j i - * i 1+ / loop cr drop loop drop ;

Обратите внимание, что строка слишком длинная и не умещается в 80 символов. Это не проблема, потому что вы можете разделить линию пополам. Forth не выходит из режима компиляции, пока не увидит завершающую точку с запятой. Форт подтверждает первую строку словом «скомпилировано», а вторую строку словом «ОК».

Чтобы указать My4TH напечатать первые 10 строк треугольника, вам просто нужно ввести

10 triangle

и у вас получится вот такой красивый треугольник:
Code:
                     1
                   1   1
                 1   2   1
               1   3   3   1
             1   4   6   4   1
           1   5  10  10   5   1
         1   6  15  20  15   6   1
       1   7  21  35  35  21   7   1
     1   8  28  56  70  56  28   8   1
   1   9  36  84 126 126  84  36   9   1

OK


Quote:
Реализация Форт

Моя реализация Forth для My4TH отличается от стандарта, потому что я немного изменил расположение "слов" в памяти, чтобы увеличить скорость. Слова хранятся в простом связанном списке в словаре. Первоначальная реализация, разработанная Чарльзом Х. Муром, изображена ниже:

Каждое «слово» снабжено заголовком, содержащим имя слова и указатель на следующее слово в памяти. Для Форта характерно, что имя представлено не как строка с нулем в конце, а как длина плюс строка. Длина строки хранится в байте, предшествующем строке. Поле под названием «полезная нагрузка» содержит фактический программный код. Этот код может состоять из машинного кода или списка 16-битных адресов-указателей, указывающих на другие слова, которые, в свою очередь, вызываются как подпрограммы. Реализация на My4TH теперь отличается тем, что слово в памяти начинается не с его имени, а с указателя на следующее слово. Это значительно ускоряет поиск в списке слов («словаре»), поскольку не требуется инструкции медленного сложения (в противном случае, чтобы получить указатель на следующее слово, нужно было бы добавить байт длины строки к начальному адресу слова). слово, чтобы получить указатель на указатель на следующее слово).
Attachment:
1.png
1.png [ 23.67 KiB | Viewed 4313 times ]

А это реализация на My4TH:
Attachment:
2.png
2.png [ 19.86 KiB | Viewed 4313 times ]


Кроме того, My4TH не использует классическую модель Direct Threaded Code (DTC), которая содержит только указатели функций в поле полезной нагрузки. Вместо этого я выбрал для My4TH подход "потокового кода подпрограммы" (STC) из соображений скорости. Здесь поле кода слова всегда содержит только чистый машинный код, а вызов подслов фактически выполняется вызовом JSR. К сожалению, этот метод приводит к увеличению использования памяти на слово примерно на 30%, поскольку в дополнение к 16-битному целевому адресу для подслова также должна храниться инструкция JSR (8-битная). Если вам нравится углубляться в эту тему, я рекомендую прочитать Портирование Форта. ч1. адресная интерпретация, регистры

Чтобы еще больше увеличить скорость выполнения Forth на My4TH, многие слова Forth уже хранятся в оптимизированном машинном коде в ПЗУ. Таким образом, Форт уже имеет приличный размер 13 Кб в ПЗУ. В отличие от ПЗУ, ОЗУ все еще почти пусто, так что у пользователя все еще есть 30 КБ свободной памяти, доступной для самоопределяемых слов и составленных из них программ. Схема оперативной памяти выглядит так:

Attachment:
3.png
3.png [ 49.16 KiB | Viewed 4313 times ]


Традиционно Forth работает с двумя стеками: стеком данных и стеком вызовов. Из соображений скорости два стека совместно используют общую область памяти на компьютере My4TH, а именно стек процессора. Стек вызовов занимает верхнюю половину области стека процессора с 8180h по 81FFh, а стек данных занимает нижнюю половину с 8100h по 817Fh. Оба стека адресуются с помощью обычных инструкций быстрого стека PSH и POP. Кроме того, в My4TH Forth реализованы еще два стека: «стек управления потоком», который необходим компилятору для разрешения вложенных IF / ELSE / THEN, и «стек управления циклом», который необходим во время выполнения цикла. переменные (индекс и приращение). Эти два стека можно было бы объединить с обычным стеком данных, но разделение стеков имеет два преимущества: во-первых, ограниченное пространство для хранения в стеке данных зарезервировано для фактических данных. Во-вторых, Loop Control Stack упрощает для новичка в Forth программирование циклов, поскольку нет необходимости учитывать параметры цикла при доступе к данным в стеке. На самом деле, это может привести к путанице, если вы не можете получить доступ к данным в стеке данных, как обычно, из цикла, который был помещен в стек до того, как вы вошли в цикл. Кстати, стек управления потоком допускает глубину вложенности до 32 IF/ELSE/THEN, а стек управления циклом допускает до 16 вложенных циклов.

Хорошо, это только половина правды. В моей реализации на Форте на самом деле есть два других стека: во-первых, расширенный стек возврата, доступ к которому осуществляется с помощью слов Форта >r и r>, и стек системных данных, который используется для внутренних функций операционной системы. Отделение этих стеков от стека вызова процессора имеет два основных преимущества: во-первых, увеличивается доступная глубина прыжка за счет освобождения стека процессора, а во-вторых, программирование «экранов» намного проще для новичка, которому не нужно беспокоиться об экране. границы блоков, поскольку стеки данных Forth и возвратов по-прежнему содержат согласованные данные после перехода от одного экрана к другому, и система не вставляет управляющие данные для служебных функций.


Quote:
Что нужно знать о Forth на My4TH

Встроенный редактор

My4TH имеет встроенный редактор, позволяющий редактировать экраны прямо на компьютере My4TH. Чтобы получить доступ к редактору, просто введите номер экрана, который вы хотите отредактировать, а затем слово «EDIT».

Экран 0 предназначен только для документации

Согласно стандарту Forth экран номер 0 не может использоваться для хранения кода. Я рекомендую использовать экран 0 только для документации. Например, экран 0 можно использовать для ведения оглавления блоков, используемых в данный момент.

Механизм автозапуска после включения питания

Вы можете настроить автоматическую загрузку экрана после включения My4TH. Для этого просто напишите номер экрана (десятичное число) в начале первой строки экрана 0.

Слово RUN

Чтобы стандартизировать способ запуска программ, я ввел слово RUN. Вы должны добавить свое собственное слово RUN в конец вашей программы, которое действует как точка входа в вашу программу (подобно «основной» функции в C). Например, после того, как вы скомпилировали свою программу и сохранили ее как двоичный образ в EEPROM, вы можете просто набрать «RUN-IMAGE», чтобы загрузить и запустить вашу программу с помощью одной команды.

Сохранение бинарных образов программ

Чтобы ускорить загрузку программы, вы можете хранить предварительно скомпилированные бинарные образы в EEPROM. Когда вы полностью вошли в свою программу на Форте (или загрузили и скомпилировали все нужные вам экраны), вы можете использовать слово SAVE-IMAGE для сохранения бинарного образа RAM в EEPROM. Двоичные экраны затем могут быть загружены или загружены и запущены с использованием слов LOAD-IMAGE и RUN-IMAGE.

My4TH Forth для компьютера MyNOR

Если вы уже собрали компьютер MyNOR и хотите попробовать My4TH Forth, вы можете загрузить пакет программного обеспечения My4TH. Пакет содержит файлы образа My4TH EPROM, а также файл образа EPROM специально для MyNOR. Для полной совместимости с инструментом передачи данных my4th вы должны синхронизировать MyNOR на частоте 8 МГц, иначе скорость последовательной передачи данных будет слишком низкой. My4TH Forth для MyNOR имеет ограниченную функциональность. Он не поддерживает платы расширения MyNOR (нет поддержки ЖК-дисплея и клавиатуры), а доступная оперативная память ограничена 8 КБ. Для поддержки всех трех выходных портов MyNOR этот специальный вариант Forth реализует дополнительные слова WOP1/WOP2/WOP3 и ROP1/ROP2/ROP3.

Передача данных между My4TH и ПК

Я написал инструмент под названием «my4th», который упрощает передачу данных между платой My4TH и ПК. С помощью этого инструмента вы можете переносить так называемые «экраны» Форта с ПК во встроенную EEPROM и наоборот. Это значительно упрощает разработку ваших собственных программ на Форте, поскольку вы можете использовать свой любимый текстовый редактор на ПК для редактирования экранов. Инструмент my4th также имеет специальную функцию, позволяющую загружать неформатированный исходный код («спагетти-код») в EEPROM. Тем не менее, мой любимый метод тестирования кода Forth на целевой платформе — режим «выполнения» инструмента my4th: в этом специальном режиме инструмент отправляет ваш исходный код Forth построчно на доску My4TH для выполнения. И в качестве бонуса, если вы используете Linux, инструмент позволяет вам оставаться на связи с My4TH через встроенный режим эмуляции терминала. Таким образом, вы можете загрузить свой код в My4TH на первом этапе, а затем запустить и отладить код на консоли терминала (без необходимости запуска отдельного эмулятора терминала, такого как putty). Это моя любимая команда my4th:

$ my4th exec /dev/ttyS0 file myforthprogram.txt -t

Еще один совет: инструмент my4th по умолчанию использует скорость передачи 4800 бод. Если частота вашей платы ниже (например, 4 МГц вместо 8 МГц), вы можете указать my4th подключаться со скоростью 2400 бод, добавив параметр -l после имени последовательного порта:

$ my4th exec /dev/ttyS0 -l file myforthprogram.txt -t

Подробное описание инструмента переноса my4th см. в этом документе: My4TH_Data_Exchange.pdf

Примечание:

Вы можете найти еще больше полезной информации в FAQ внизу этой страницы.

Quote:
Часто задаваемые вопросы

Каковы основные различия между MyNOR и My4TH?

My4TH меньше (меньше размер, меньше компонентов), быстрее (до 14 МГц) и имеет больше памяти (32 КБ RAM и 256 КБ EEPROM), чем MyNOR. Кроме того, My4TH разработан специально для программирования FORTH.

Применима ли реализация MyNOR FORTH для приложений «реального мира»?

Нет, реализация MyNOR FORTH имеет несколько известных ошибок и считается доказательством концепции. My4TH стремится обеспечить более стабильную и полную реализацию FORTH.

Можно ли использовать My4TH с оборудованием MyNOR?

Да, для оборудования MyNOR доступна специальная версия My4TH Forth, но с некоторыми ограничениями из-за 8 КБ SRAM MyNOR. My4TH Forth для MyNOR также не поддерживает платы расширения MyNOR.

В чем разница в обмене файлами между MyNOR и My4TH?

My4TH использует инструмент командной строки для выгрузки и загрузки отдельных экранов или полного исходного кода FORTH вместо копирования текстовых файлов в окно терминала, как в MyNOR.

Могу ли я удалить Форт-слова из памяти?

К сожалению, архитектура Forth не позволяет удалять из памяти определенные слова. Однако вы можете использовать слова FORGET и MARKER, чтобы удалить все слова, скомпилированные после определенного момента.

Как исправить ошибки и обновить My4TH-ROM?

Поскольку проект с открытым исходным кодом, вы можете исправить ошибки в исходном коде. Затем вам нужно создать новый файл образа EPROM с помощью кросс-компилятора myca. Однако не рекомендуется исправлять ошибку самостоятельно. Вместо этого, пожалуйста, сообщите мне об этом, чтобы я мог исправить это в обновленной версии прошивки.

Как я могу сбросить My4TH из самой программы?

Вы можете создать простое слово для выполнения процедуры аппаратного сброса. Для этого скомпилируйте в My4TH следующий код:

hex : reset 2D00 execute ;

Когда вы вводите команду RESET, My4TH выполняет инструкцию по адресу 0x2D00, которая является переходом к процедуре аппаратного сброса.

Как я могу сохранить переменные в EEPROM, используя My4TH?

Вы можете использовать слова BLOCK, UPDATE и SAVE-BUFFERS в My4TH Forth. Используйте BLOCK для загрузки блока из EEPROM в RAM, который возвращает указатель на блок. Затем вы можете копировать свои переменные в блок и из него (рассматривайте буфер как большую двоичную структуру данных). Используйте UPDATE, чтобы пометить блок как измененный после изменения переменной, и SAVE-BUFFERS, чтобы записать измененный блок обратно в EEPROM.

Почему я теряю 1024 байта памяти при использовании команд BLOCK и BUFFER?

Потеря памяти происходит из-за того, что буфер блока выделяется командой BUFFER. Однажды выделенный, он не освобождается. Вы можете обойти эту проблему, установив маркер перед использованием команд, а затем освободив память после того, как закончите.

Как я могу очистить все ранее определенные слова и сбросить память, как «новая» команда в реализации MyNOR для проверки концепции?

Вы можете создать собственное НОВОЕ слово на основе примера из оригинального редактора MyNOR-Forth:

: execnew s" forget new : new execnew ;" execute ;
: new execnew ;

Введите эти две строки после перезагрузки компьютера, а затем вы можете использовать команду «NEW» по желанию.

Почему моя программа вылетает через определенное время?

Проблема может быть связана с тем, что стек данных переполняется. My4TH Forth не проверяет переполнение стека. Если стек данных переполняется, стек возврата перезаписывается и программа аварийно завершает работу.

Как я могу отладить стек данных?

Вы можете использовать команду .S для отображения текущего содержимого стека данных. Это может быть очень полезно для целей отладки.

Почему KEY? слово ждёт нажатия клавиши?

Если вы используете My4TH через последовательный терминал, My4TH должен опрашивать интерфейс RS-232 в программном обеспечении. Поэтому, чтобы не пропустить ни одного события клавиатуры, важно как можно быстрее опрашивать последовательный порт. По этой причине невозможно реализовать неблокирующее чтение с клавиатуры на My4TH. Если вам нужно неблокирующее взаимодействие с вашей программой, вы можете подключить дополнительные внешние ключи к входам/выходам и считывать их с помощью RINP.

Как я могу создать неблокирующий способ прерывания работающей программы?

Вы можете использовать команду RINP для прямого чтения вывода RXD. Вот пример:

: test 0 begin rinp 1 and while 1 + dup . repeat cr ." break, a key was pressed" ;

Имейте в виду, что вам может потребоваться удерживать клавишу нажатой некоторое время, чтобы убедиться, что программа прерывается должным образом.

Как заменить редактор на новый, загруженный из EEPROM?

Вы можете определить новое слово «EDIT», которое реализует новый редактор. Тогда старый редактор будет "перегружен". Например, вы можете определить слово ' : EDIT ." I am not an editor!" ; ' и вызовите EDIT. Если вы нажмете FORGET EDIT, эффект исчезнет, и EDIT будет работать как обычно.

Что возвращает слово UP?

Слово UP возвращает адрес указателя, указывающего на начало 256-байтовой области памяти, которая может свободно использоваться пользователем. Чтобы получить адрес начала этой области памяти, необходимо ввести «UP@».

Как My4TH отображает доступную память I2C EEPROM?

My4TH Forth сопоставляет доступную память I2C EEPROM с доступными 1K-блоками, независимо от их адресов. Например, если вы установите две EEPROM 24LC512 с любыми адресами I2C, вам будут доступны экраны с 0 по 127. Однако на плате MyNOR не совсем понятно, в какой EEPROM будет храниться конкретный экран.

Что произойдет с MyNOR, если я добавлю еще одну EEPROM в существующую конфигурацию?

Добавление еще одного EEPROM к существующей конфигурации на плате MyNOR может вызвать проблемы с поиском ранее сохраненных экранов. Новая EEPROM может быть назначена на номера экранов, которые ранее были назначены другой EEPROM. Рекомендуется не добавлять больше EEPROM после того, как у вас будет рабочая конфигурация, чтобы не потерять доступ к сохраненным экранам.

Могу ли я использовать другие конфигурации EEPROM с MyNOR/My4TH, например, 1x 24LC1026 и 2x 24LC512?

Да, возможны другие конфигурации. Однако максимальное расширение памяти в 512 КБ может быть достигнуто только с восемью 24LC512, или двумя 24LC1026, и четырьмя 24LC512, или четырьмя 24LC1026. Вы также можете использовать четыре 24LC1025 вместо четырех 24LC1026, а 24LCxxx можно заменить типами 24AAxxx. Всегда сверяйтесь с техническими данными, чтобы убедиться в правильности конфигурации контактов и избежать конфликтов адресов. Но сокеты на плате My4 могут быть заполнены только EEPROM 24LC512 или 24LC1026.

Могу ли я использовать EEPROM 24LC1025 с MyNOR/My4TH?

ЭСППЗУ 24LC1025 немного странные - контакт A2 выбора адреса должен быть подтянут к высокому уровню, иначе ЭСППЗУ не будет работать должным образом. К сожалению, на разъемах My4TH, а также на плате MyNOR контакт A2 подключен к GND. Тем не менее, по-прежнему можно использовать EEPROM 24LC1025 на обеих платформах, если подключить контакт 3 (A2) EEPROM к контакту 8 (+5 В). Но убедитесь, что контакт 3 не должен быть вставлен в гнездо на плате (просто отогните контакт от корпуса EEPROM).

Могу ли я использовать симулятор EPROM на веб-сайте с My4TH?

Нет, эмулятор EPROM нельзя использовать с платой My4TH. My4TH использует контакт 20 EPROM, который, к сожалению, неправильно подключен к плате эмулятора.

Могу ли я заменить EPROM на флэш-память для My4TH?

К сожалению, невозможно заменить СППЗУ флэш-памятью, поскольку микросхемы флэш-памяти часто намного медленнее, чем СППЗУ. Для My4TH вам понадобится EPROM с максимальным временем доступа 120 нс, если вы хотите запустить его на частоте 8 МГц. Самые быстрые чипы флэш-памяти, доступные сегодня, имеют время доступа 150 нс, что означает, что вы можете запустить MyNOR только на частоте 1/150 нс = 6,7 МГц. Также микросхемы флэш-памяти имеют немного другую распиновку, поэтому разъем на плате My4TH необходимо перепаять. Доступны одноразовые программируемые (OTP) СППЗУ со временем доступа до 45 нс. Кроме того, СППЗУ более «ретро» и поэтому лучше подходят для этого проекта.

Quote:
License Information
This work (My4TH hardware and software) is licensed under a
Creative Commons Attribution-ShareAlike 4.0 International License. Creative Commons License

The cross assembler "myca" is licensed under the GNU General Public License, Version 3.
Impressum
and contact information: Dennis Kuschel
Corintostraße 21
28279 Bremen, Germany
email: dennis_k@freenet.de
web: mynor.org and mycpu.eu website visits


02 Apr 2023 05:53
Profile
Doomed
User avatar

Joined: 04 Jan 2016 09:15
Posts: 649
Location: Russia, S.- Peterburg
Reply with quote
Эмулятор процессора J1 Forth в языке программирования Go
(ссылки, обзор, быстрый тест)

---------------------------------------
Тестирование (3 шага)
Шаг 1. Клонируем проект
$ git clone https://github.com/dim13/j1.git

Шаг 2 Тестируем j1
$ cd ./j1
$ go test .

ok github.com/dim13/j1 (cached)

Шаг 2 Тестируем j1
$ go build cmd/j1e/main.go

Шаг 3 Запуск j1
$ ./main
ok

eforth j1 v1.04

Шаг .4. Работаем
ok
4 7 * .
4 7 * . 1C ok

4 5 + .
4 5 + . 9 ok

words

: 3EA2

cold hi ver words (words) see >name (>name) .s dump dm+ _type vocabulary widof >voc previous also only set-order order vocs !wid .wid >wid get-order order@ wordlist .id is defer constant [char] char does> compile-only (does>) variable create <create> user immediate : ] ; <;> exit overt <overt> abort" $compile $,n <$,n> ?unique definitions set-current get-current +to (+to) to (to) >body ." $" endcase (endcase) endof of (of) case (case) while else aft skip repeat then if again until i (i) +loop (+loop) loop ?do (?do) unloop (unloop) (loop) leave (leave) do (do) next (next) begin for $," ['] literal pick recurse compile [compile] branch ?branch call, , allot ' abort quit preset $eval eval .ok [ $interpret forget <?abort"> abort1 abort2 query accept ktap tap ^h name? <name?> find same? name> token word \ <\> ( .( parse (parse) ? pack$ cmove . u. u.r .r ."| .$ $"| do$ cr type spaces space nuf? key emit ?key tx! ?rx number? digit? decimal hex str #> sign #s # hold <# extract digit erase fill @id21399841 (@execute) pad align aligned here count 2@ 2! +! >char bl cells cell- cell+ */ */mod m* * um* / mod /mod m/mod um/mod within min max abs - dnegate negate 2dup 2drop rot ?dup 'create '; 'overt '$,n 'name? '\ 'boot 'emit '?key last dp current forth-wordlist context hld 'abort 'eval tib #tib >in temp base douser up dovar um+ c! c@ bye execute sp@ 1+ 2* 2/ -rot tuck >= 0> > 0= 0< <> ! @ r@ r> >r 1- rshift lshift nip over drop dup u> swap u< < = invert or and xor + noop ok


---------------------------------------
Обзор документации:

Каталог: doc
$ tree -L 1
.
├── buzzard
├── eForthOverviewv5.pdf
├── j1
├── j1demo
├── j1eforth
├── j1.txt
├── jonesforth
├── learnforth.fs
├── README.md
├── rtx2000
├── samples.fs
└── tcjassem.txt

1. Ссылка: "The J1 Forth CPU emulator in Go" https://github.com/dim13/j1?ysclid=lg0morlpeo857927386

_________________
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)


03 Apr 2023 12:01
Profile WWW
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
askfind wrote:
├── jonesforth

Переведённый JonesForth
здесь на сохранённой версии сайта в WebArxive https://rigidus.ru/

Репа сайта

P.S. SwapForth авторский Форт для J1A ...
от автора.

Процессор Forth J1 в FPGA плате M02mini
\ статья на marsohod.ru
\ Процессор языка Forth в FPGA
\ Простейший интерпретатор Forth в плате M02mini

В рамхах системы команд этого процессора для него реализовали и TCP подключение. :)
Firmware IP камеры wge100


03 Apr 2023 12:22
Profile
Senior

Joined: 12 Jan 2023 07:26
Posts: 165
Reply with quote
Опубликоана статья по теме сабжа на Хабр (попала и в дневной топ):

My4TH — домашний компьютер без процессора


03 Jun 2023 22:52
Profile
Junior

Joined: 18 Sep 2023 19:35
Posts: 3
Reply with quote
proteus vsm 8.15 is my4th(no test???) project my4th assembler?

http://www.nedopc.org/forum/viewtopic.php?f=81&t=22154


18 Sep 2023 19:45
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 15 posts ] 

Who is online

Users browsing this forum: No registered users and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.