Skip to content

Commit 57be3d8

Browse files
committed
upd sbbs
1 parent 4c8e9ad commit 57be3d8

1 file changed

Lines changed: 48 additions & 26 deletions

File tree

src/content/blog/sbbus.mdx

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import Callout from '@/components/Callout.astro'
1616

1717
Шина переключателей для Mindustry 7+. Проверено и работает в кампании и на сервере. Полезно на Соляных Равнинах.
1818

19+
В 2023 увидел на ютубе как челы управляют Солевым Хабом с помощью логики, понравилось, решил повторить. Получилось что получилось. А потом оказалось что те челы управляли хабом с помощью обычных энергоузлов.
20+
1921
Существуют версии:
2022

2123
- [1 канал (SBBus Instant)](#sbbus-instant) - 5237,5 блоков/сек
@@ -24,12 +26,19 @@ import Callout from '@/components/Callout.astro'
2426
- [256 каналов (SBBus 256)](#sbbus-256)
2527
- [512 каналов (SBBus 512)](#sbbus-512)
2628
- [Универсальные части (SBBus Uni)](#sbbus-uni)
29+
- [Набросок битовой упаковки (SBBus Bitty One)](#набросок-sbbus-bitty-one)
2730

2831
Версия на 1 канал самая молниеносная из всех.
2932

30-
Все версии можно ускорить доработав и поставив больше передатчиков между каждой ячейкой. В 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 канала.
3140

32-
А ещё при желании и доработке можно совместить SBBus на 32 канала, SBBus 512 и SBBus Instant и сделать чтобы через 1 большую банку памяти на 512 адресов шло 16 линий по 32 канала. В этом случае будут ставиться ячейки а между ними по 16 передатчиков, каждый на свой кусочек памяти.
41+
## Общий гайд по использованию
3342

3443
- Установите панель
3544
- Подключите шину состоящую из ячейка_панели-ячейка-передатчик-ячейка-передатчик-ячейка...
@@ -2344,7 +2353,7 @@ control enabled press1 result 0 0 0
23442353

23452354
![uni](/uploads/sbbus/uni.jpg)
23462355

2347-
Подходит к любой версии шины. Невероятно быстрый и оптимизированный.
2356+
Подходит к любой версии шины. Переписан на MLogJS - невероятно быстрый и оптимизированный.
23482357

23492358
Адреса суммируются, т.е. если подключить 8x8 сетку `switches`, макс возможный адрес будет 1024 + 1 (Присутствует лишний адрес - пустые сортеры, т.е. 8x8 сетка даст не 1024 а 1025 адресов), но это бесполезно т.к. макс банка памяти на 512 адресов.
23502359

@@ -2453,20 +2462,37 @@ jump 1 lessThan p @links
24532462
Код для `s1` транспилирован из недо-JS при помощи MLogJS. Вот исходники:
24542463

24552464
```js
2456-
const items = new MutableArray(["copper", "lead", "metaglass", "graphite", "sand", "coal", "titanium", "thorium", "scrap", "silicon", "plastanium", "phase-fabric", "surge-alloy", "spore-pod", "blast-compound", "pyratite"])
2465+
const items = new MutableArray([
2466+
'copper',
2467+
'lead',
2468+
'metaglass',
2469+
'graphite',
2470+
'sand',
2471+
'coal',
2472+
'titanium',
2473+
'thorium',
2474+
'scrap',
2475+
'silicon',
2476+
'plastanium',
2477+
'phase-fabric',
2478+
'surge-alloy',
2479+
'spore-pod',
2480+
'blast-compound',
2481+
'pyratite',
2482+
])
24572483

24582484
let firstLinks = 3
24592485
let lastLinks = 1
24602486
let sorters = Vars.links - firstLinks - lastLinks
24612487
let addr = 0
24622488

24632489
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
24692494
}
2495+
}
24702496
}
24712497

24722498
print(addr)
@@ -2484,13 +2510,15 @@ let work = true
24842510
control.enabled(switch1, work)
24852511

24862512
while (work) {
2487-
cellMemory[0] = busMemory[addr]
2488-
work = switch1.enabled
2513+
cellMemory[0] = busMemory[addr]
2514+
work = switch1.enabled
24892515
}
24902516
```
24912517

24922518
## Набросок SBBus Bitty One
24932519

2520+
На обычных версиях SBBus в передатчиках тратится около 1-6 тактов на передачу 1 ячейки, с концепцией из SBBus Bitty One за то же кол-во тактов можно будет передать уже 32 значения в виде 32-х битного числа.
2521+
24942522
Схема:
24952523

24962524
```plaintext
@@ -2541,17 +2569,17 @@ let lastLinks = 1
25412569
let switches = Vars.links - firstLinks - lastLinks
25422570

25432571
for (let addr = 0; addr < addrs; addr++) {
2544-
let result = 0
2545-
2546-
for (let i = 0; i < 32; i++) {
2547-
if ((addr * (32) + firstLinks + i) < firstLinks + switches) {
2548-
let config = getLink(addr * (32) + firstLinks + i).enabled
2549-
let shiftedConfig = config << i
2550-
result |= shiftedConfig
2551-
}
2572+
let result = 0
2573+
2574+
for (let i = 0; i < 32; i++) {
2575+
if (addr * 32 + firstLinks + i < firstLinks + switches) {
2576+
let config = getLink(addr * 32 + firstLinks + i).enabled
2577+
let shiftedConfig = config << i
2578+
result |= shiftedConfig
25522579
}
2580+
}
25532581

2554-
cellMemory[addr] = result
2582+
cellMemory[addr] = result
25552583
}
25562584
```
25572585

@@ -2566,9 +2594,3 @@ op and anded shifted 1
25662594
print anded
25672595
printflush message1
25682596
```
2569-
2570-
## ToDo
2571-
2572-
- сделать поддержку нескольких панелей при помощи сохранения номера обновления состояния шины
2573-
- сделать экспериментальную версию на энерго-узлах
2574-
- сделать панель и передатчик Uni, передатчик будет настраиваться на количество каналов по кнопкам

0 commit comments

Comments
 (0)