| Comments: |
Это та израильская штучка, что ли?
Не врубился, в чём глубокий смысл прибавления через локальную переменную? set [.tmp], [pos_y] add [.tmp], 1 set pos_y, [.tmp], [.tid]
И не жирно ли будет по потоку на каждый объект? Сколько их там в среднем танецевать в результате будет?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 14th, 2012 - 09:33 pm |
|---|
| | | (Link) |
|
>Это та израильская штучка, что ли? ага. оно уже на 80% работоспособно.
>Не врубился, в чём глубокий смысл прибавления через локальную переменную? в том, что я постоянно забываю про форму математики (op0, op1, dest). %-) к тому же это тест ассемблера, тащемта. кстате, вот эта команда set с тремя операндами — это, на самом деле, изменение локальной переменной в другом потоке: set tvarindex, newvalue, threadid. операнды-то потокам не передаются другими путями, только спавн и жестокий фиксинг локалов.
>И не жирно ли будет по потоку на каждый объект? да фигле. даже Another World имел до 64-х потоков. а у нас давно не 286-е.
>Сколько их там в среднем танецевать в результате будет? теоретический максимум — 256 «активных» объектов на уровне (формат уровня диктует), практический — ну, десяток-полтора максимум. плюс периодически рождаются потоки для временной анимации чего-нибудь.
кстате, вот эта команда set с тремя операндами — это, на самом деле, изменение локальной переменной в другом потоке: set tvarindex, newvalue, threadid. операнды-то потокам не передаются другими путями, только спавн и жестокий фиксинг локалов. Неплохо. Только если через неё баги полезут, отстрелить их будет сложно.
Я бы тут не push, а pull передачу использовал, хотя это, конечно, было бы на порядок корявее.
да фигле. даже Another World имел до 64-х потоков. а у нас давно не 286-е. Ну это смотря как писать. Я в школе как-то накропал аналог нортоновского скринсейвера, где каждая звёздочка была отдельным объектом и сама управляла своим жизенным циклом. Тормозило жутко.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 14th, 2012 - 10:11 pm |
|---|
| | | (Link) |
|
>Только если через неё баги полезут, отстрелить их будет сложно. это часть кайфа. олдскул, все дела. в принципе, можно и компилятор с чего-то си-подобного под эту VM накропать, но это убивает весь фан.
а баги вряд ли полезут: переменные именованы, id-ы потоков тоже не с потолка. ни разу пока именно тут бага не поймал.
>Я бы тут не push, а pull передачу использовал, хотя это, конечно, было бы на порядок >корявее. тут такое дело, что VM вообще не дизайнилась, по сути, а «сама выросла». то есть, я хотел обойтись несколькими десятками команд. отсюда появились свободные биты, в которые я положил количество операндов. а дальше уже само… вот если команда add, а операндов нет? ну логично, что она тогда со стеком должна работать. ну, и понеслось. плюс по пути добавлял то, без чего жить было совсем сложно и неприятно.
в оригинале доступа к другим потокам не было, всё делалось через вызовы внешних функций движка. а потом я подумал: какого фига? если бы я хотел VM, защищённую от дури программера, то я бы и делал всё не так. а уж коли у нас принципиально всё вот такое — зачем программера ограничивать? и добыл из шкафа набор граблей побольше.
>Ну это смотря как писать. я тут в начале разработки забыл сделать fatal, если поток зациклился (сейчас лимит — миллион инструкций потока на кадр). так вот, у меня там парочка потоков ушла в цикл и выполняла по миллиону ерунды. пока fatal не поставил — не замечал, потому что оно даже одно ядро из моей корыдвадуба сожрать полностью не смогло.
а потоки, по сути, даже до десяти тысяч инструкций на кадр не доходят. а большинство укладывается в несколько сотен (поменять кадр анимации, проверить пару условий, всё сначала). только поток самого профессора чуть больше, да и то ненамного. там же логика простая очень.
я вот думаю попробовать потом на модифицированном движке сделать полноценный платформер, с кучей суетящихся врагов, и посмотреть, что из этого получится.
Кстати, действительно, ужэ не первый раз отмечаю, что писать на асме проще, чем на сях.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | March 15th, 2012 - 12:16 pm |
|---|
| | | (Link) |
|
в данном случае таки проще ещё и потому, что халявные сопрограммы. плюс я управляю стеком, и заместо кучи флажков могу его просто тупо вычистить и сделать jmp в нужный по логике обработчик. | |