initial commit

This commit is contained in:
2024-10-09 20:54:28 +02:00
commit 75314b9ff1
11 changed files with 643 additions and 0 deletions

14
.toml Normal file
View File

@@ -0,0 +1,14 @@
[db]
PressureOutput=55000
TemperatureOutput=296
PrefabHash="StructureFiltration"
[d0]
On=0
Lock=0
PrefabHash="StructureDigitalValve"
[d1]
On=0
Lock=0
PrefabHash="StructureDigitalValve"

16
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "ic10",
"request": "launch",
"name": "Debug ic10",
"program": "${file}",
"stopOnEntry": true,
"trace": false,
}
]
}

42
airctl.ic10 Normal file
View File

@@ -0,0 +1,42 @@
alias Bypass d0
alias Radiator d1
define minTemp 293.15
define maxTemp 295.15
s db Open 0
s Bypass Lock 1
s Radiator Lock 1
start:
yield
jal safety
pop r0
bnez r0 start #safety triggerd. Do not continue
l r0 db TemperatureOutput
sgt r1 r0 maxTemp
bgtzal r1 cooling
slt r1 r0 minTemp
seqz r1 r1
beqzal r1 cooling
j start
#safety():0|1 -> 0 : ok, 1 : overpressure
safety:
l r1 db PressureOutput #check the output pressure
sgt r0 r1 50000
push r0 # r0 == 1 if too high. Use the stack as resturn value
s Radiator On r0
seqz r0 r0
s Bypass On r0
slt r0 r1 55000
s db Mode r0 #emergency stop
j ra #return
#cooling(r1:0|1)
cooling:
s Radiator On r1
seqz r1 r1
s Bypass On r1
j ra

104
crafter/autoStacker.ic10 Normal file
View File

@@ -0,0 +1,104 @@
#IC chip that control flip flops to the machines input
define HelperIC HASH("IC Housing (flip flop helper)")
define ICHousing HASH("StructureCircuitHousing")
#flip flop just behind the stacker to return the reminder to the user
define OutputFlipFlop HASH("Chute Digital Flip Flop (Stacker input)")
#define FlipFlop HASH("StructureChuteDigitalFlipFlopSplitterRight")
define FlipFlop HASH("StructureChuteDigitalFlipFlopSplitterLeft")
#stacker
alias Stacker d0
alias stackValue r0
alias opVal r1
alias qteVal r2
alias reagentHash r3
alias StackerContent r4
alias MachinePort r5
alias StackerInputFull r6
alias WrongContent r7
alias oldQte r8
alias oldReagent r9
alias eq1 r10
alias eq2 r11
s Stacker Mode 1
move MachinePort 1
start:
yield
jal readReagent
s db Setting reagentHash #used to display on a console with CircuitboardHashDisplay
#set qte to the parsed value or default to 500
select qteVal qteVal qteVal 500
s Stacker Setting qteVal
#goto stacker if there is a requested item
bnez reagentHash stacker
#if not, set the output flipflop to return everything to the user
sbn FlipFlop OutputFlipFlop Mode 1
sbn FlipFlop OutputFlipFlop Setting 0
s Stacker Mode 0 #stacker auto
s Stacker Activate 0
jal findNextPort
j start
findNextPort:
#iterate over port 1-5 to look for a machine
add MachinePort MachinePort 1
sgt r6 MachinePort 5
breqz r6 2
move MachinePort 1
bdns dr5 iteratePort
j ra
waitReagentArrive:
#check if we need more
brlt StackerContent qteVal 2
s db Setting 0
move oldQte qteVal
move oldReagent reagentHash
waitReagentArriveLoop:
yield
push ra
jal readReagent
pop ra
sne eq1 oldQte qteVal
sne eq2 oldReagent reagentHash
or eq1 eq1 eq2
beqz eq1 waitReagentArriveLoop
j ra
readReagent:
get stackValue dr5 54
and opVal stackValue $ff #op
srl qteVal stackValue 8
and qteVal qteVal $ff #qte
sra reagentHash stackValue 16
rmap reagentHash dr5 reagentHash #reagentHash
j ra
stacker:
#write the active machine port id to the flipflop helper ic's setting
sbn ICHousing HelperIC Setting MachinePort
s Stacker Mode 1 #logic
ls StackerContent Stacker 2 Occupied #check if the working slot is occupied
beqz StackerContent start #if not return
ls StackerContent Stacker 2 OccupantHash #check the occupant hash
sne WrongContent reagentHash StackerContent
#if reagentHash != StackerContent then set the flipflop to output everything
sbn FlipFlop OutputFlipFlop Mode WrongContent
sbn FlipFlop OutputFlipFlop Setting 1
bnez WrongContent emptyStacker
ls StackerContent Stacker 2 Quantity
s Stacker Output 1
yield
emptyStacker:
s Stacker Activate 1
yield
s Stacker Activate 0
beqzal WrongContent waitReagentArrive
j start

View File

@@ -0,0 +1,23 @@
alias devicePointer r1
alias targetDevice r0
alias shouldOpen r2
move devicePointer 0
init:
brdns dr1 3
s dr1 On 1
s dr1 Setting 0
add devicePointer devicePointer 1
ble devicePointer 5 init
start:
yield
move devicePointer 0
l targetDevice db Setting
loop:
seq shouldOpen devicePointer targetDevice
brdns dr1 2
s dr1 Mode shouldOpen
add devicePointer devicePointer 1
ble devicePointer 5 loop
j start

44
crafter/recipe.ic10 Normal file
View File

@@ -0,0 +1,44 @@
alias Machine d0
alias Qte d1
alias Button d2
define StructureEmergencyButton HASH("StructureEmergencyButton")
alias IsStructureEmergencyButton r10
s Machine ClearMemory 1
clr Machine
l IsStructureEmergencyButton Button PrefabHash
seq IsStructureEmergencyButton IsStructureEmergencyButton StructureEmergencyButton
start:
yield
jal monitorOn
put Machine 0 PrinterInstruction.WaitUntilNextValid
l r0 Button Setting
beqz r0 start
breqz IsStructureEmergencyButton 2
s Button Open 0
s Button Lock 1
s Machine ClearMemory 1
l r0 Machine RecipeHash
sll r1 r0 16
l r0 Qte Setting
sll r2 r0 8
or r0 r1 r2
or r0 r0 PrinterInstruction.ExecuteRecipe
put Machine 1 r0
l r0 Qte Setting
yield
l r1 Machine ExportCount
brlt r1 r0 -2
s Button Lock 0
j start
monitorOn:
l r0 Machine On
breqz IsStructureEmergencyButton 4
brnez r0 2
s Button Open r0
s Button On r0
select r0 r0 0 1
s Button Lock r0
j ra

View File

@@ -0,0 +1,125 @@
define STATION -2
define TRASHSTATION -7
define RESERVE -9
define MAXRESERVESOLT 1
define DEBUG 0
alias arg r14
alias returnVal r15
alias robot d0
alias filterHash r13
alias printer d1
s db Open 0
start:
yield
l r0 db PressureOutput
slt r0 r0 50000
s db Mode r0
move arg 0
jal checkSlotSpent
bgtzal returnVal dumpFilter
move arg 1
jal checkSlotSpent
bgtzal returnVal dumpFilter
j start
checkSlotSpent:
#arg slotID
#returnVal : bool 0|1
move returnVal 0
ls r0 db arg Occupied
beqz r0 ra #if not occupied return 0
ls r0 db arg Quantity
sle returnVal r0 DEBUG
j ra
dumpFilter:
yield
#arg slotid
l r0 robot Setting
bnez r0 dumpFilter
push ra
push arg
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #pick
ls filterHash robot 0 OccupantHash
jal craft #craft a new filter
push arg
move arg TRASHSTATION
jal moveRobot #move to trash
move arg 0
jal activateRobot #place in trash
move arg RESERVE
jal moveRobot #move to reserve
jal pickAny #pick in reserve
ls r0 robot 0 Occupied
beqz r0 returnHome #if empty handed return home
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #put the picked filter in
push arg #push so it can be poped without stack underflow
returnHome:
pop arg
#return to base
s robot Setting 0
pop ra
j ra
pickAny:
push arg
move arg 0
searchLoop:
s robot TargetSlotIndex arg
ls r1 robot 255 Occupied
ls r2 robot 255 OccupantHash
add arg arg 1
beqz r1 searchLoop
bne r2 filterHash searchLoop
bgt r0 MAXRESERVESOLT ra
push ra
sub arg arg 1
jal activateRobot
pop ra
pop arg
j ra
waitRobotIdle:
yield
l r0 robot Idle
beqz r0 waitRobotIdle
j ra
activateRobot:
#arg TargetSlotId
s robot TargetSlotIndex arg
s robot Activate 1
push ra
jal waitRobotIdle
pop ra
j ra
moveRobot:
#arg target
s robot Setting arg
push ra
jal waitRobotIdle
pop ra #move the robotait for it to be idle
j ra #return
craft:
clr printer
s printer ClearMemory 1
sll r1 filterHash 16
sll r2 1 8
or r0 r1 r2
or r0 r0 PrinterInstruction.ExecuteRecipe
put printer 0 r0
yield
l r0 printer ExportCount
brlez r0 -2
j ra

View File

@@ -0,0 +1,106 @@
define STATION -2
define TRASHSTATION -7
define RESERVE 2
define MAXRESERVESOLT 9
alias arg r14
alias returnVal r15
alias robot d0
#alias Light d1
s db Open 0
start:
yield
l r0 db PressureOutput
slt r0 r0 50000
s db Mode r0
move arg 0
jal checkSlotSpent
bgtzal returnVal dumpFilter
move arg 1
jal checkSlotSpent
bgtzal returnVal dumpFilter
j start
checkSlotSpent:
#arg slotID
#returnVal : bool 0|1
move returnVal 0
ls r0 db arg Occupied
beqz r0 ra #if not occupied return 0
ls r0 db arg Quantity
seqz returnVal r0#if Quantity is 0 then return 1
j ra
dumpFilter:
yield
#arg slotid
l r0 robot Setting
bgtz r0 dumpFilter
push ra
push arg
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #pick
push arg
move arg TRASHSTATION
jal moveRobot #move to trash
move arg 0
jal activateRobot #place in trash
move arg RESERVE
jal moveRobot #move to reserve
jal pickAny #pick in reserve
ls r0 robot 0 Occupied
beqz r0 returnHome #if empty handed return home
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #put the picked filter in
push arg #push so it can be poped without stack underflow
returnHome:
pop arg
#return to base
s robot Setting 0
pop ra
j ra
pickAny:
push arg
move arg 0
searchLoop:
s robot TargetSlotIndex arg
ls r1 robot 255 Occupied
add arg arg 1
beqz r1 searchLoop
bgt r0 MAXRESERVESOLT ra
push ra
sub arg arg 1
jal activateRobot
pop ra
pop arg
j ra
waitRobotIdle:
yield
l r0 robot Idle
beqz r0 waitRobotIdle
j ra
activateRobot:
#arg TargetSlotId
s robot TargetSlotIndex arg
s robot Activate 1
push ra
jal waitRobotIdle
pop ra
j ra
moveRobot:
#arg target
s robot Setting arg
push ra
jal waitRobotIdle
pop ra #move the robotait for it to be idle
j ra #return

View File

@@ -0,0 +1,111 @@
define STATION -3
define TRASHSTATION -7
define RESERVE -8
define MAXRESERVESOLT 9
define DEBUG 0
alias arg r14
alias returnVal r15
alias robot d0
alias filterHash r13
#alias Light d1
s db Open 0
start:
yield
l r0 db PressureOutput
slt r0 r0 50000
s db Mode r0
move arg 0
jal checkSlotSpent
bgtzal returnVal dumpFilter
move arg 1
jal checkSlotSpent
bgtzal returnVal dumpFilter
j start
checkSlotSpent:
#arg slotID
#returnVal : bool 0|1
move returnVal 0
ls r0 db arg Occupied
beqz r0 ra #if not occupied return 0
ls r0 db arg Quantity
sle returnVal r0 DEBUG
j ra
dumpFilter:
yield
#arg slotid
l r0 robot Setting
bgtz r0 dumpFilter
push ra
push arg
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #pick
ls filterHash robot 0 OccupantHash
push arg
move arg TRASHSTATION
jal moveRobot #move to trash
move arg 0
jal activateRobot #place in trash
move arg RESERVE
jal moveRobot #move to reserve
jal pickAny #pick in reserve
ls r0 robot 0 Occupied
beqz r0 returnHome #if empty handed return home
move arg STATION
jal moveRobot #move to self
pop arg
jal activateRobot #put the picked filter in
push arg #push so it can be poped without stack underflow
returnHome:
pop arg
#return to base
s robot Setting 0
pop ra
j ra
pickAny:
push arg
move arg 0
searchLoop:
s robot TargetSlotIndex arg
ls r1 robot 255 Occupied
ls r2 robot 255 OccupantHash
add arg arg 1
beqz r1 searchLoop
bne r2 filterHash searchLoop
bgt r0 MAXRESERVESOLT ra
push ra
sub arg arg 1
jal activateRobot
pop ra
pop arg
j ra
waitRobotIdle:
yield
l r0 robot Idle
beqz r0 waitRobotIdle
j ra
activateRobot:
#arg TargetSlotId
s robot TargetSlotIndex arg
s robot Activate 1
push ra
jal waitRobotIdle
pop ra
j ra
moveRobot:
#arg target
s robot Setting arg
push ra
jal waitRobotIdle
pop ra #move the robotait for it to be idle
j ra #return

View File

@@ -0,0 +1,31 @@
alias Light d0
s db Open 0
init:
yield
bdns Light init
l r0 Light PrefabHash
bne r0 -1535893860 init
start:
yield
l r0 db PressureOutput
slt r0 r0 50000
s db Mode r0
move r0 0
jal checkSlot
move r2 r1
move r0 1
jal checkSlot
add r2 r2 r1
beq r2 2 start
s Light On 1
j start
checkSlot:
#r0 slotID
#return : r1 -> bool 0|1
ls r1 db r0 Occupied
beqz r1 ra
ls r1 db r0 Quantity
snez r1 r1
j ra

27
helmet.ic10 Normal file
View File

@@ -0,0 +1,27 @@
s db SoundAlert 0
start:
l r0 db PressureExternal
sgt r0 r0 60
bgtz r0 safeAthmo
bdns d0 noHelm1
s d0 Lock 1
s d0 Open 0
noHelm1:
s db AirRelease 1
s db On 1
l r0 db RatioCarbonDioxide
sgt r0 r0 0.2
s db Filtration r0
j start
safeAthmo:
bdns d0 noHelm2
s d0 Lock 0
s d0 Open 1
noHelm2:
s db Filtration 0
s db AirRelease 0
s db On 0
j start