Войти
ФлеймФорумЖелезо

Мой виртуальный 16-битный процессор Simpleton (4 стр)

Страницы: 1 2 3 4
#45
(Правка: 9:43) 9:40, 6 янв. 2020

=A=L=X=
> на пенсии когда делать нечего будет совсем

Не стоит откладывать такие задачи на пенсионный возраст. До пенсии надо дожить, а дожив - сохранить хоть какую-то степень способности мозга к интеллектуальным задачам, да и старческие болячки будут сильно мешать концентрироваться. Человека отправляют на пенсию не за то, что он "заслужил отдых", а за то, что он больше не способен продуктивно работать.


#46
9:57, 6 янв. 2020

Dmitry_Milk

Забавно, что в юности я сперва начал делать из радиодеталек большой дедовской коллекции небольшие схемы по чертежам из разных журналов (дед был заядлым радиолюбителем), а потом уже в журналах этих обнаружил компьютерные какие то описания и листовки машкодов примитивной операционки уровня монитор-отладчик для бытового ПК Радио-РК.
Так вот железо оставило на всю жизнь привкус того, что я его решительно не понимаю. Осталось стойкое ощущение, что сами радиолюбители действуют на уровне "магии" - что-то работает не так как надо потому что где то в цепи появился новый элемент и отвалилось что-то старое - и его потом начинают шунтировать всячески и изгалятся почти что наобум чтобы и паразитку побороть и сохранить работоспособность новых элементов добавленных в схему. В общем радиосхемы оставили стойкое ощущение, что их отдельные части как раз не обладают свойством лёгкого конструирования чего либо как из кубиков лего - не выполняется принцип что сложное это лишь сумма простых элементарных элементов - без щупов, осциллографов и такой то матери ничего нового я сам создать не смогу.
Это меня порядком огорчило и сильно отбило желание возится с этим всем дальше и тут как раз как на удачу я увидел что есть мир компьютеров и программ - мир в котором всё сложное только так и делается - из набора элементарных операций которые создают сложное только методом суммирования и лишь только им. Вот туда то я и направился.
К схемотехнике у меня до сих пор столь же подозрительное отношение как к чему то некрасивому и нелогичному и поэтому если я и потрачу когда-нибудь на неё силы, то только тогда когда вообще будет незаподло.

#47
(Правка: 13:43) 13:36, 20 янв. 2020

Из любопытства посмотрел что за адский язык программирования Gcl в Gigatron TTL: https://github.com/kervinck/gigatron-rom/blob/master/Docs/GCL-language.txt
Думал может там черпану что-нибудь для вдохновения.
Но там та еще жесть. Если кто забыл что такое Gigatron память можно освежить тут https://gamedev.ru/flame/forum/?id=231674&page=7&m=4783587#m100
Сам гигатрон 8-битный, но в рамках решения ряда задач на нём трудится виртуальная машина 16-битного процессора vCPU у которого 4 всего регистра - аккумулятор, счётчик инструкций, указатель стека и адрес возврата для последнего call (link register). Т.е. виртуальный процессор тоже архитектуры аккумулятор-память.
И есть в общем то ассемблер, но программы сами они предпочитают писать на полукостыльном языке Gcl.
Например демонстрационная программа выглядит так:

gcl1 {GCL version}
                                        {Approximate BASIC equivalent}
{Function to draw binary value as pixels}

[def                                    {10 GOTO 80}
  $4448 D= {Middle of screen}           {20 D=$4448: REM MIDDLE OF SCREEN}
  [do
    C [if<0 15 else 5] D.               {30 IF C<0 POKE D,15 ELSE POKE D,5}
    C C+ C=                             {40 C=C+C}
    D 1+ D=                             {50 D=D+1}
    -$4458 D+ if<0 loop]                {60 IF D<$4458 THEN 30}
  ret                                   {70 RETURN}
] Plot=

{Compute largest 16-bit Fibonacci number and plot it on screen}

[do
  0 A=                                  {80 A=0}
  1 B=                                  {90 B=1}
  [do
    A B+ C=                             {100 C=A+B}
    B A= C B=                           {110 A=B: B=C}
    if>0 loop]                          {120 IF B>0 THEN 100}
  Plot!                                 {130 GOSUB 20}
  loop]                                 {140 GOTO 80}
Здесь в { } даны комментарии аналогичного кода на бейсике.
Так вот язык этот вращается весь вокруг виртуального процессора.
Так, встреча константы в коде загружает её в аккумулятор.
X+ прибавляет к аккумулятору переменную X.
X= сохраняет аккумулятор в переменную X.
Т.е. теперь можно понять что делает строчка например
A B+ C=
- сперва загружает в аккумулятор A, потом прибавляет к нему B и сохраняет результат в C. Т.е. действительно C = A + B.
Теперь так же легче можно понять что делает строчка
C [if<0 15 else 5] D.
- загружает в аккумулятор C, проверяет меньше ли он нуля (заметьте, что if<0 это единый идентификатор - есть все возможные сравнения с нулём определенные таким образом) и по тесту в аккумулятор загружается 5 или 15. А точка после D это значит сохранить аккумулятор по адресу который находится в переменной D (т.е. действительно POKE D, 15 или 5).
Еще забавно, что [def ...] не просто создаёт процедуру, но во время исполнения перепрыгивает через её тело в её конец где в аккумулятор сразу же загружается адрес её начала - именно поэтому там сразу же располагается конструкция Plot= - и это действительно запись адреса начала процедуры в переменную (!) Plot. Plot! же в коде ниже это именно вызов процедуры адрес которой хранится в переменной Plot - т.е. имена процедур сами по себе в коде не существуют, а явным образом записываются в выделяемые переменные.
Не, ну это конечно проще чем голый ассемблер, но намного ли?
Действительно какой то странный полуасм с привкусом форта.
Забавно, но такого вдохновения мне не надо.

Страницы: 1 2 3 4
ФлеймФорумЖелезо