You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/blog/sbbus.mdx
+48-26Lines changed: 48 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,6 +16,8 @@ import Callout from '@/components/Callout.astro'
16
16
17
17
Шина переключателей для Mindustry 7+. Проверено и работает в кампании и на сервере. Полезно на Соляных Равнинах.
18
18
19
+
В 2023 увидел на ютубе как челы управляют Солевым Хабом с помощью логики, понравилось, решил повторить. Получилось что получилось. А потом оказалось что те челы управляли хабом с помощью обычных энергоузлов.
20
+
19
21
Существуют версии:
20
22
21
23
-[1 канал (SBBus Instant)](#sbbus-instant) - 5237,5 блоков/сек
@@ -24,12 +26,19 @@ import Callout from '@/components/Callout.astro'
Все версии можно ускорить доработав и поставив больше передатчиков между каждой ячейкой. В 32-канальной SBBus 1 передатчик синхронизирует 32 адреса между 2 ячейками памяти, а можно сделать чтобы между этими 2 ячейками памяти стояло 8 передатчиков, и каждый будет синхронизировать только свой кусочек памяти, из 32/8=4 каналов.
33
+
## Хотелки
34
+
35
+
- Все версии можно ускорить доработав и поставив больше передатчиков между каждой ячейкой. В 32-канальной SBBus 1 передатчик синхронизирует 32 адреса между 2 ячейками памяти, а можно сделать чтобы между этими 2 ячейками памяти стояло 8 передатчиков, и каждый будет синхронизировать только свой кусочек памяти, из 32/8=4 каналов.
36
+
- При желании и доработке можно совместить SBBus на 32 канала, SBBus 512 и SBBus Instant и сделать чтобы через 1 большую банку памяти на 512 адресов шло 16 линий по 32 канала. В этом случае будут ставиться ячейки а между ними по 16 передатчиков, каждый на свой кусочек памяти.
37
+
- Хочется сделать поддержку нескольких панелей при помощи сохранения номера обновления состояния шины
38
+
- Сделать экспериментальную версию SBBus EnergyWormHole на энерго-узлах
39
+
- В планах совместить SBBus Uni и SBBus Bitty One в SBBus UniBitty, дабы получить невероятно быстрый клиент вкупе с упаковкой 32 значений в 1 ячейку, и сделать настройку (автоматическую?) количества блоков по 32 канала.
31
40
32
-
А ещё при желании и доработке можно совместить SBBus на 32 канала, SBBus 512 и SBBus Instant и сделать чтобы через 1 большую банку памяти на 512 адресов шло 16 линий по 32 канала. В этом случае будут ставиться ячейки а между ними по 16 передатчиков, каждый на свой кусочек памяти.
41
+
## Общий гайд по использованию
33
42
34
43
- Установите панель
35
44
- Подключите шину состоящую из ячейка_панели-ячейка-передатчик-ячейка-передатчик-ячейка...
@@ -2344,7 +2353,7 @@ control enabled press1 result 0 0 0
2344
2353
2345
2354

2346
2355
2347
-
Подходит к любой версии шины. Невероятно быстрый и оптимизированный.
2356
+
Подходит к любой версии шины. Переписан на MLogJS - невероятно быстрый и оптимизированный.
2348
2357
2349
2358
Адреса суммируются, т.е. если подключить 8x8 сетку `switches`, макс возможный адрес будет 1024 + 1 (Присутствует лишний адрес - пустые сортеры, т.е. 8x8 сетка даст не 1024 а 1025 адресов), но это бесполезно т.к. макс банка памяти на 512 адресов.
2350
2359
@@ -2453,20 +2462,37 @@ jump 1 lessThan p @links
2453
2462
Код для `s1` транспилирован из недо-JS при помощи MLogJS. Вот исходники:
for (let i = firstLinks; i <= firstLinks + sorters; i++) {
2464
-
let config =getLink(i).config
2465
-
for (let i =0; i <items.size; i++) {
2466
-
if (config ===lookup.item(i)) {
2467
-
addr += i +1
2468
-
}
2490
+
let config =getLink(i).config
2491
+
for (let i =0; i <items.size; i++) {
2492
+
if (config ===lookup.item(i)) {
2493
+
addr += i +1
2469
2494
}
2495
+
}
2470
2496
}
2471
2497
2472
2498
print(addr)
@@ -2484,13 +2510,15 @@ let work = true
2484
2510
control.enabled(switch1, work)
2485
2511
2486
2512
while (work) {
2487
-
cellMemory[0] = busMemory[addr]
2488
-
work =switch1.enabled
2513
+
cellMemory[0] = busMemory[addr]
2514
+
work =switch1.enabled
2489
2515
}
2490
2516
```
2491
2517
2492
2518
## Набросок SBBus Bitty One
2493
2519
2520
+
На обычных версиях SBBus в передатчиках тратится около 1-6 тактов на передачу 1 ячейки, с концепцией из SBBus Bitty One за то же кол-во тактов можно будет передать уже 32 значения в виде 32-х битного числа.
0 commit comments