да, [pc] конечно, что-то перемкнуло меня) главное, что ты понял верно

по сдвигам надо бы всё тщательно взвесить, одинарный сдвиг для быстрой арифметики маловато

насчёт асма, на мой взгляд, задятые достаточно заметно отделяют операнды (особенно на шрифтах фиксированной ширины), ну, и если хочется, никто же после них пробелы не запрещает! и второе, нужны ли вообще квадратные скобки? префикс в большинстве случаев лаконичней:

add [ 100 ] [ 20 ] [ 30 ]
add @100 @20 @30

скобки только для сложных выражений:

add @(label1+offset2) @(label2+offset3) @($1000/2)

хотя при наличии запятых необязательны и они, префикc действует на всё выражение:

add @label1+offset2, @label2+offset3, @$1000/2


также, void как по мне длинновато, может, применять какой-то другой значок или даже «пустое выражение»?

()

ну, или просто псевдами выражать (те же cmp, test...)
  • avatar aa-dav
  • 1
P.S.
Реализовал псевдорегистр 'void' и поведение с косвенной записью в PC. Теперь освободился еще один опкод — CMP.
Теперь сравнение делается так:

sub void A B ; экивалентно cmp A B во многих других ISA
jnz ...


побитовые тесты (любые в OR/XOR/AND):

and void r0 $0001
jz ...

… или сравнение числа с константой в диапазоне -8..+7 за инструкцию в одно слово (inplace immediate):

addi void r0 -3
jz ... ; r0 равен 3

… или проверка i-ого бита операнда через занос его в CF операцией RRCI:

rrci void r0 3 ; третий бит r0 попадёт в CF
jc ... ; переход если CF=1

Ляпота! Еще раз спасибо за идею! :)
  • avatar aa-dav
  • 0
1) куча пробелов выглядит хуже пары запятых и занимает больше места в исходнике
Тут забавно — изначально я просто «по быстрячку» (а исходники Simpleton-ов всегда развивались таким путём) воспользовался вводом строк из потоков C++, которые ведут себя именно таким образом — просто вводят от текущей позиции до следующих пробельных символов.
И думал что в режиме теста так проковыляю какое то время, а потом заменю на типовую схему. Однако уже и есть функция extraсtLexem, но… мне так понравилось! :)
Во первых я всегда следую (и в данном случае — всем рекомендую) орфографической традиции — после знаков препинания типа точек или запятых ставить пробелы. Это естественно как дышать и видно даже на этом самом тексте. Поэтому запятые только добавляют один символ к разделителю-пробелу в массе случаев. Их настоящая нужда в мейнстриме — это помощь с отделением друг от друга аргументов со сложными выражениями, что встречается относительно нечасто и может быть разрулено явными скобками.
Ну и просто попробовав я как то втянулся. Функцию extractLexem конечно можно переписать и получить более привычное поведение хотя бы со скобками, но мне после такой практики на это совершенно не хочется тратить время. :)

2) интересный вопрос, как устанавливаются флаги, когда приёмник — psw (как регистр) :)
Действительно отличный вопрос! Сейчас в эмуляторе АЛУ сперва обновляет биты арифметико-логических флагов как бы «напрямую» как если имеет в регистр флагов прямой вход через заднюю дверь (что весьма правдоподобно звучит для схемотехники, не зря он находится «с краю» регистрового файла), а уже после этого основное ядро извлекает результат из АЛУ и пишет его в регистровый файл. Т.е. запись в PSW ведёт себя довольно практично — изменение арифметических флагов будет забыто и операция вида «and psw psw маска» изменит только желаемый бит.
Однако возможно что ради скорости в схемотехнике эти операции могут происходить параллельно и результат сохранения в арфметико-логические флаги будет неопределён. Это может иметь некоторые последствия при обработке прерываний, но обдумав я нахожу что реальных проблем не будет. Поэтому на данный момент наверное лучше исходить из такого предположения.

> 3) не хватает прокрутки ЧЕРЕЗ перенос, а также сдвигов — для ускорения арифметики и возможной битовой графики
Я поэтому замер пока на операциях прокрутки и думаю какие лучше инструкции разместить в оставшейся части.
Во первых — по заветам MSP-430 операции ADD и ADC можно использовать как сдвиг и прокрутку влево:
add r0 r0 r0; сложение само с собой это умножение на 2 и сдвиг на 1 бит влево со вновь входящим нулевым битом
adc r0 r0 r0; сложение с переносом это сдвиг на 1 бит влево со входящим Carry и тут же исходящим Carry, т.е. идёт прокрутка влево через Carry, причём _через_ перенос.
Поэтому тот же MSP-430 не вводил аналогичных команд прокрутки и я не собираюсь.
Но вот прокрутка вправо уже должна быть в явном виде и чтобы побороть несколько проблем я пока решил сделать число прокручиваемых бит настраиваемым, а саму прокрутку — циклической с занесением в Carry, но не ЧЕРЕЗ Carry.
Почему так — потому что можно имитировать еще полезную команду SWAP BYTES просто прокрутив на 8 бит. Байты в слове поменялись местами.
Может быть полезно для упаковки и совместимости с типовыми файлами.
С другой стороны прокрутка вправо на 15 бит это же и прокрутка влево на 1 бит. Появляется взаимозаменяемость.
Далее — если кровь из носа нужен сдвиг влево/вправо на программируемое число бит мы можем подстроить счётчик чтобы нужные биты прокрутились куда требуется, а потом обнулением по «AND маска» занулить ненужные биты.
Так что как минимум беззнаковое деление на степени двойки делается. А если предварительно сделать условный переход по биту знака и в этой ветке сделать «OR маска», то и знаковые числа тоже можно будет делить и сдвигать таким образом.
Вот на этих размышлениях я пока подвис и пока еще думаю. Нужна практика наверное реального программирования на Simpleton 4 чтобы почувствовать что нужно остро и кровь из носу, а что достаточно сэмулировать серией базовых команд.
Тот же Gigatron вообще сдвиги делал через лукап-таблицы (!).

4) хорошо бы еще один регистр с автоинкрементами — для шитого кода (мб включать автоинкременты для регистров спецфлагами?)
Регистров в духе 8-биток тут немного, поэтому специализированного регистра точно не будет. А вот сделать в регистре флагов на первые 4 регистра по два флажка — «пост-инкремент» и «пре-декремент» — это интересная мысль, за неё спасибо. Её надо обдумать, хотя есть минусы. Например при входе в прерывания эти флаги надо обнулять и потом восстанавливать. Но! То как я планирую сделать вход в прерывания с этим похоже что прекрасно справляется. Да да да… Интересно…

5) зачем тратить опкод на отдельную команду cmp? когда можно принять запись в [psw] за игнор результата
А вот это супер-идея! Спасибо! Только и косвенное чтение и косвенная запись в PSW в Simpleton 4 уже заняты — это режим адресации immediate address с помощью которого можно вообще не загрязнять регистры:

[ $1000 ] = [ $1001 ] +s [ $1002 ] ; ни один регистр (включая флаги) кроме PC не изменился

Однако! Еще с Simpleton 3 была запрещена косвенная запись в PC! Здесь этот запрет сохранился, но я его не упомянул.
Пытаться писать прямо в поток выполняемых команд — это как минимум странно. :) Поэтому именно за [ PC ] в поле R и логично закрепить новый смысл — «игнорирование записи результата из АЛУ в файловый регистр или память». Гениально! :D
Действительно высвобождается специализированная инструкция CMP с одной стороны, а с другой стороны появляются булевы тесты и, например, такая экзотичка, как с помощью команды из одного слова — RRCI поместить в Carry любой на выбор бит из операнда. xD
Блин, это прикольная идея! Прям спасибо!
просмотрел очень бегло, но сразу же несколько замечаний и предложений:

1) куча пробелов выглядит хуже пары запятых и занимает больше места в исходнике
2) интересный вопрос, как устанавливаются флаги, когда приёмник — psw (как регистр) :)
3) не хватает прокрутки ЧЕРЕЗ перенос, а также сдвигов — для ускорения арифметики и возможной битовой графики
4) хорошо бы еще один регистр с автоинкрементами — для шитого кода (мб включать автоинкременты для регистров спецфлагами?)
5) зачем тратить опкод на отдельную команду cmp? когда можно принять запись в [psw] за игнор результата, и она появляется «бесплатно», так же как test и прочие логические аналоги (плюс тогда мб даже имеет смысл сделать сохраняющие результат обычные and/or/xor не устанавливающими флаги)
  • avatar frog
  • 0
Так чего прощать — я согласен, так и есть. Нормально снять на видео происходящее на экране осциллографа — проблематично. По крайней мере на мою Sony NEX7. Та же проблема была с Vectrex'ом — я там даже отбросил сразу несколько идей которые я точно знал, на видео не будут смотреться от слова совсем.
А вот я категорически не согласен с местами 1 и 2. На обеих лица неузнаваемы, потерялось именно характерное. Ящитаю, первые два места за 3 и 5 — даже несмотря на то, что к 5 таки есть за что придраться (изменена форма лица), всё равно она осталась самой похожей. Насчёт третьего места возможны варианты, но тоже не 1 и 2 скорее всего.

Не голосовал, есичо — как-то пропустил, завертевшись, хотя объявление раньше видел.
  • avatar diver4d
  • 2
Да простит меня автор статьи, тот случай, когда скриншот круче видео с работой. Ничуть не умаляю технической сложности, но в динамике разглядеть и понять очень сложно. В статике — 3D абстракция, что прикольно для осциллографа и такого размера интро.
  • avatar diver4d
  • 1
Как обычно, edgetouch, лупа…
  • avatar Schafft
  • 2
Начал на www.pixilart.com/draw продолжил в Aceprite, закончил в ZX Paintbrush.
  • avatar nodeus
  • 1
Обзор как всегда прекрасный и самобытный. Спасибо shuran33 !
У меня вопрос и просьба к авторам, поделитесь пожалуйста информацией, в чём и на чем вы рисуете все эти восхитительные работы?

Про себя могу сказать:
работа 9 — liv1 была нарисована в приложении для iPad PixelStudio и сконвертирована из png в scr с помощью Multipaint
работа 8 — liv2 была нарисована в Photoshop и сконвертирована из png в scr с помощью Multipaint (рисовал в photoshop, чтобы записать видео рисовки полностью, на десктопе это делать гораздо проще)
  • avatar nyuk
  • 2
tailor — портной. в руках у ппл — иголка с ниткой. всё интереснее…
  • avatar diver4d
  • 1
По 4 месту. Tyler не случайно заменена на tailor :)
Насколько я понял, картинка родилась как вольная сюжетная интерпретация имени Лив Тайлер. Был бы интересно узнать историю создания.
  • avatar diver4d
  • 1
У работы на 19 месте на самом деле оригинал — кадр из фильма The Ledge с Лив же Тайлер. Правда ценность работы увы от этого не возрастает, но формально на картинке Лив.
  • avatar VBI
  • 0

Арвен — великолепна
  • avatar VBI
  • 0
Спасибо за интервью!
  • avatar Shiru
  • 3
Учитывая количество движков, это займёт время, но постараюсь сделать.
  • avatar bfox
  • 0
очень бы хотелось такой обзор. причём без привязки к пятилетке, а консолидированную информацию по общей ситуации
  • avatar Shiru
  • 1
Я делал обзор биперных движков предшествующей пятилетки в 2016. С тех пор их стало значительно больше, а также были разобраны многие классические, так что, видимо, пора делать новый обзор. Всего старых и новых движков порядка 100 штук.
Спасибо за обзор, очень интересно почитать. Интересно, есть ли на hype статья с обзором биперных движков? Когда на патиплейс трек «Hey Beeper !» звучал при показе работ, мне четко казалось, что это не может быть бипером. Видимо акустика колонок придала сочности звучанию, я потом еще и проверял как работает tap. Спасибо!
  • avatar Vinnny
  • 1
Спасибо за обзор! Треки в этом году действительно были отменными!