Skip to content

Instantly share code, notes, and snippets.

@Sturmlilie
Last active October 30, 2020 15:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Sturmlilie/627cf84daec656ffe5d7ecbf7005c3d0 to your computer and use it in GitHub Desktop.
Save Sturmlilie/627cf84daec656ffe5d7ecbf7005c3d0 to your computer and use it in GitHub Desktop.
Fibercraft password-protected door
User-facing cluster, IN = input (terminal), STK = stack, TEST = digest output (infrared)
The hash algo is roughly equivalent to
int digest = 0;
for (ch in input) {
int val = ch ^ (ch & 0x0101 ? (ch << 4) : 0) ^ ch << 8;
digest ^= val;
}
#DEFINE IN UP
#DEFINE STK RIGHT
#DEFINE TEST LEFT
INIT:
MOV NIL, ACC
RDCH: SAV
MOV IN, ACC
JEZ ENDL
MOV ACC, STK
SHL 4
MOV ACC, STK
SWP
MOV ACC, STK
SWP
SHL 4
MOV ACC, STK
#BWTM
SWP
XOR STK
SWP
MOV STK, ACC
AND 0X0101
JEZ XTRA
SWP
XOR STK
CONT:
XOR STK
JMP RDCH
ENDL:
SWP
MOV ACC, TEST
JMP INIT
XTRA:
SWP
MOV STK, NIL
JMP CONT
The testing cluster, IN = input (infrared), SND = sound, RED = redstone, TMR = timer, PW = hashed password
#DEFINE IN LEFT
#DEFINE SND RIGHT
#DEFINE RED UP
#DEFINE TMR DOWN
#DEFINE PW 0X1701
LOOP:
MOV IN, ACC
SUB PW
JEZ OPEN
JMP CLOSE
#BWTM
OPEN:
MOV 0X0988 SND
NOP
MOV 0X0688 SND
NOP
MOV 0X0E88 SND
MOV 15, RED
MOV 80, TMR
MOV TMR, NIL
MOV 0, RED
JMP LOOP
#BWTM
CLOSE:
MOV 0X098C SND
NOP
MOV 0X088C SND
NOP
MOV 0X078C SND
JMP LOOP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment