alias raw d0 alias furnace d1 alias hotpump d3 alias coldpump d4 define HASH_TANK_si HASH("StructureTankSmallInsulated") alias hot_moles r15 alias cold_moles r14 alias furnace_remove r13 alias furnacetemp r12 define KLUDGE 2 start: yield l r0 furnace Open bgtz r0 idle l r0 furnace On bgtz r0 operate idle: s db Setting 1 s coldpump On 0 s hotpump On 0 s furnace SettingInput 100 s furnace SettingOutput 0 j start operate: ls r0 furnace 0 Quantity # unmelted #s db Setting r0 beqz r0 ready l r0 furnace Pressure bgt r0 1500 purge l furnacetemp furnace Temperature sle r0 furnacetemp 400 # not all the inputs have melted. trick: s db Setting 10 s coldpump On 0 s hotpump On r0 s hotpump Setting KLUDGE s furnace SettingInput 100 s furnace SettingOutput 0 j start purge: s db Setting 11 s furnace SettingOutput 100 s furnace SettingInput 100 s coldpump Setting 0 s hotpump Setting 0 yield l r0 furnace Pressure bgt r0 10 purge j start ready: s db Setting 2 l r0 furnace Reagents blez r0 idle # nothing to operate on get hot_moles raw 490 get cold_moles raw 491 get furnace_remove raw 492 bgtz furnace_remove drain # do we have to drain even to hit max pressure? get hot_moles raw 480 get cold_moles raw 481 get furnace_remove raw 482 blez furnace_remove pressurize # we do not have to drain to reach min pressure get hot_moles raw 500 get cold_moles raw 501 get furnace_remove raw 502 # add hot to reach temp without removing pressurize: s db Setting 3 s furnace SettingOutput 0 lbn r0 HASH_TANK_si HASH("cold tank") Volume Sum lbn r1 HASH_TANK_si HASH("cold tank") TotalMoles Sum div r0 r0 r1 mul r0 r0 cold_moles max r0 r0 KLUDGE s coldpump Setting r0 s coldpump On 1 lbn r0 HASH_TANK_si HASH("hot tank") Volume Sum lbn r1 HASH_TANK_si HASH("hot tank") TotalMoles Sum div r0 r0 r1 mul r0 r0 hot_moles max r0 r0 KLUDGE s hotpump Setting r0 s hotpump On 1 j start mode_drain: # sticky mode to drain the furnace s db Setting 4 yield l r0 furnace Open bnez r0 idle get furnace_remove raw 482 blez furnace_remove start # drain: s db Setting 5 l r0 furnace TotalMoles div r0 furnace_remove r0 mul r0 r0 1010 s db Setting r0 max r0 1 r0 s furnace SettingOutput r0 s hotpump Setting 0 s coldpump Setting 0 j mode_drain # idle 1 # trick 10 # purge 11 # ready 2 |
MIPS is the programming language used by IC (integrated circuits) in the game Stationeers. Stationeering web site has a MIPS emulator with syntax highlighting and error detection.