Walkthrough
All 300 Puzzles
Every puzzle of Syscall 2: Firmware in campaign order: 100 Signal boards, 100 Bench circuits, 50 Shuffle boards, and 50 Driver tickets, across 12 chapters. Each page sets out the task, the board, the key idea, and hints that go from a nudge to nearly the answer.
No spoilers here
This page lists the puzzles and nothing more. On each puzzle page the hints open one at a time, and the full solution stays hidden until you choose to reveal it.
Chapter 1
Arrival
4 puzzles: 4 Signal
Signal 4
- 1FIRST SIGNALUse IN to read a value from a pin and OUT to write it to another.
- 2RELAYUse OUT on core a and IN on core b to pass each value along the wire between them.
- 3SPLITTEROUT does not change A, so use two OUTs on core a to send each value to b and to c.
- 4BIASArithmetic works on A. Use ADD between IN and OUT to change a value on its way.
Chapter 2
Workshop
8 puzzles: 6 Signal, 1 Bench, and 1 Shuffle
Signal 6
- 5MIXERAdd each value from X to the matching value from Y and send the sum to P.
- 6FLOOROnly values greater than 0 may reach P. Drop zero and every negative value.
- 7FIXED STAGEP must receive 4 times each value from X, plus 8.
- 8ECHOP must receive each value from X doubled.
- 9SORTED JOINP must receive each value from X with its sign removed.
- 10SWITCHBOARDYou are the operator. Each locked caller sends two values and waits for their sum.
Chapter 3
Chains and rings
22 puzzles: 9 Signal, 10 Bench, and 3 Shuffle
Signal 9
- 11SHIFT REGISTERP must receive every value from X five places late. Zeros fill the first five.
- 12TALLYP must receive the running total of X. A zero clears the total and sends 0.
- 13PASSING PLACEP must receive X minus Y, and Q must receive Y minus X.
- 14EDGE DETECTORP must receive 1 when a value is 10 or more away from the one before it, else 0.
- 15WINDOWP must receive the sum of each value from X and the two before it.
- 16RING BUFFERP must receive each value from X minus the one three places before it.
- 17HIGH WATERP must receive the largest of each value from X and the two before it.
- 18STREAKFor each value, P must receive how many equal values in a row end with it.
- 19COMPARATORX arrives in pairs. P must receive each pair with the smaller value first.
Bench 10
- B02DIMMERP0 is a PWM pin: OUT P0 sets the share of each period it spends high, 0 to 100 percent.
- B03INVERTERP0 drives the base of Q1 through R1. While P0 is high, Q1 conducts and pulls CH1 to ground.
- B04STAIRCASEBuild a staircase on CH1: five steps from 0 to 5 volts, then start over.
- B05DIVIDERV1 sends a square wave into P0, a digital input.
- B06QUADRATURETwo LEDs, two channels: P0 drives the red one, P1 the green one.
- B07BAR GRAPHP0 is an analog input: IN P0 reads its voltage as a percent of the 5 volt supply.
- B08BREATHEMake CH1 breathe: a triangle from 0 up to 5 volts and back down, over and over.
- B09RECTIFIERV1 and V2 put a sine wave on P0, swinging 2 volts either side of 2.5 volts.
- B10SAMPLE AND HOLDP0 reads a sine wave and P1 a clock. On each rising edge of the clock, sample P0.
- B11RAILROADTwo lamps share the chip. P0 drives the red lamp, P1 the amber lamp.
Chapter 4
Stars and hubs
32 puzzles: 10 Signal, 11 Bench, 4 Shuffle, and 7 Driver
Signal 10
- 20BROADCASTSend each X value three ways: times 3 to P, negated to Q, and minus 10 to R.
- 21SUMMITP must receive the sum of X, Y, and Z, one value from each.
- 22SIGN SORTERPositive values from X go to P and negative ones to Q, in order.
- 23SELECTORWhen X is 0, P takes the next Y. Otherwise P takes the next Z.
- 24SORTING OFFICEEach Y parcel has an address on X: 1 sends it to P, 2 to Q, 3 to both.
- 25ROUND ROBINP must receive 4 times each X value, plus 1, in order.
- 26DIRECTORYFor each index 0 to 5 on X, P must receive that entry of the directory.
- 27TICKET OFFICEX brings a queue of 0, 1, and 2. For each, P must receive that number's ticket count so far.
- 28WINNERP must receive which of X, Y, and Z is largest: 0, 1, or 2.
- 29MEDIANP must receive the middle value of X, Y, and Z each time.
Bench 11
- B12WICKP0 drives the lamp through R1. Any value but 0 lights it.
- B13LANDINGP0 is a PWM pin into R1 and C1. Duty is a percent of the 5 volt supply.
- B14SQUAREP0 drives the base of Q1 through R1. While P0 is high, Q1 pulls CH1 down.
- B15SKYLINEP0 is a PWM pin into R1 and C1, so its duty sets the level on CH1.
- B16RESERVOIRP0 charges C1 through the diode D1. A diode lets current through one way only.
- B17SHARK FINP0 charges C1 through R1. The capacitor fills and drains slowly,
- B18SPIKEC1 passes only changes: CH1 spikes up when P0 rises, then settles back through R1.
- B19CHOKEL1 is an inductor. The current through it cannot jump: it grows and dies away slowly.
- B20CLIPPERZ1 is a zener diode. It holds CH1 at 3.3 volts at most and lets lower levels pass.
- B21ATTENUATORR1 and R2 form a divider: CH1 gets half of what P0 puts out. C1 smooths the PWM.
- B22FOLLOWERV1 sends a square wave through R1 into C1, so its edges reach P0 slowly.
Shuffle 4
Driver 7
- D1CARRIER CHECKTransmit 55 AA 55 AA, then halt.
- D2LOOPBACKTransmit every received byte back, unchanged.
- D3UPLINKTransmit each host message, then $0D $0A.
- D4DOWNLINKDeliver received bytes to the host, except $0D.
- D5FIXED WIDTHTransmit each host message padded with spaces to 8 bytes.
- D6SIGN WRITERDeliver printable bytes in capitals; drop the rest.
- D7LENGTH PREFIXTransmit each host message as a length byte, then the message.
Chapter 5
Half duplex
34 puzzles: 10 Signal, 12 Bench, 6 Shuffle, and 6 Driver
Signal 10
- 30METERThe locked meter adds each value it gets, writes its total to P, and sends the total back.
- 31INTERCOMP on the left must receive X plus Y. Q on the right must receive Y minus X.
- 32STEP UPA value of X higher than the one before it goes to P. Any other value goes to Q.
- 33ONE LANE BRIDGEEach step, Z picks a way across. On 0, X crosses to Q. On 1, Y crosses to P.
- 34ORDER DESKEach value of Y is an order for that many values of X, from 1 to 3.
- 35COMMON GROUNDP must receive the largest number that divides both X and Y. Each runs from 1 to 99.
- 36SPEED LIMITP starts at 0 and follows X, but each step it moves by 10 at most.
- 37SAFE CRACKERSend guesses to the judge. It answers -1 when a guess is low, 1 when high, and 0 when right.
- 38PARTY LINEEach step names an account on X, from 1 to 3, and an amount on Y.
- 39PLATE STACKA value of X that is not 0 puts a plate on the stack. A 0 takes the top plate off to P.
Bench 12
- B23PUSH PULLV1 drives P0 with a square wave. P1 and P2 each drive an LED.
- B24COINCIDENCEV1 and V2 send square waves to P0 and P1 at different rates.
- B25EXCLUSIVEP0 and P1 read two square waves. Light the LED on P2 while exactly one of them is high.
- B26ALARMP0 is an analog input: IN P0 reads its voltage as a percent of the 5 volt supply.
- B27POLARITYV1 and V2 put a sine wave on P0, swinging 2 volts either side of 2.5 volts.
- B28TOLERANCEP0 reads a slow triangle wave as a percent of the 5 volt supply.
- B29SCHMITTP0 reads a slow sine wave with a fast ripple on top.
- B30ASTABLEP0 charges C1 through R1, and P1 reads C1 back as a digital input.
- B31THERMOSTATP0 heats C1 through R1, and P1 reads its charge back as a percent of the supply.
- B32ENABLEP0 reads an enable switch, a slow square wave from V1. P2 ticks every 20 cycles.
- B33BEACONA beacon flashes twice, then rests. P1 ticks every 10 cycles and P0 drives the lamp.
- B34SOFT STARTA soft start brings a supply up gently instead of all at once.
Shuffle 6
- S12FLIP GATEA working program, swapped about. Restore each core.
- S13BOTH HANDSThe lines are shuffled. Swap them back into an order that runs.
- S14QUIET DROPA short one. The three lines are out of order.
- S15LOOSE BULBThe blink program is all here, swapped about. Put it back.
- S16WRONG NUMBERThe operator's code is here, its pieces swapped. Put them back.
- S17TALKBACKTwo cores, their pieces swapped. Swaps stay inside a core.
Driver 6
- D8UNPACKDeliver the payload of each length prefixed frame to the host.
- D9CHECKSUMFrame each host message with $C1, its length, and a sum check byte.
- D10CHECKSUM GATEDeliver the payloads of frames whose sum check matches; drop the rest.
- D11THE CRC ENGINEWrap each host message in the house frame, with its CRC-16.
- D12STOP AND WAITSend each order as a frame and wait for the ACK.
- D13DOUBLE BACKTransmit every received byte twice, back to back. A single echo is not enough.
Chapter 6
Trees
27 puzzles: 8 Signal, 9 Bench, 5 Shuffle, and 5 Driver
Signal 8
- 40TAXICABX and Y are one point and Z and W another. P must receive their distance on a grid.
- 41UPSIDE DOWNEach locked core sends on the larger of the two values it gets.
- 42HEAP CHECKX is the top of a heap with Y and Z under it, and W is under Y.
- 43HEADCOUNTP must receive how many of Y, Z, and W are less than X.
- 44ODD ONE OUTThree of X, Y, Z, and W always match, and one does not.
- 45LONGEST BRANCHX is the trunk, Y grows from X, and Z and W are two twigs on Y.
- 46NEARESTP must receive 0 when Y is nearer to X than Z is, and 1 when Z is nearer.
- 47BUTTERFLYP must receive the largest of X, Y, Z, and W minus the smallest.
Bench 9
- B35TRAFFIC LIGHTP0, P1, and P2 drive the red, yellow, and green lamps. P3 ticks every 20 cycles.
- B36BIT BANGP0 is a plain digital pin this time, not PWM, and R1 and C1 smooth what it puts out.
- B37ONE SHOTV1 drives P0 with a slow square wave. On each rising edge, light the LED on P1 for 30 cycles.
- B38LATCHP0 is SET and P1 is RESET, two square waves from V1 and V2. P2 drives the LED.
- B39PRESCALERV1 drives P0 with a fast square wave. Divide it by six for the LED on P1:
- B40STEPPERV1 sends a clock to P0. On each rising edge, raise the duty on P1 by 25 percent.
- B41DELAY LINEOn each tick of P2, sample P0, and light the LED on P1 the way P0 read on the tick before.
- B42COUNTERThree LEDs count the ticks of P3 in binary: P0 is the ones bit, P1 the twos, P2 the fours.
- B43THREE PHASEThree lamps share the ticks of P3. Each is dark one tick in three and lit the other two.
Shuffle 5
- S18SEESAWThe railroad lamps, their code swapped about. Swap it back.
- S19EVERY OTHERThe divider, swapped about. Swap it back.
- S20HIGH TIDETwo copies of one core, each with its pieces swapped. Swaps stay inside a core.
- S21ROUGH EDGESThe edge detector, swapped about. Swap its pieces back.
- S22LOSING STREAKThe streak counter, swapped about. Swap its pieces back.
Driver 5
- D14NIBBLESSplit each received byte. Transmit the high four bits, then the low four bits.
- D15PAIR SUMBytes arrive in pairs. Transmit the low byte of each pair's sum.
- D16GAPTransmit $A5, wait six ticks, transmit $5A, then halt.
- D17BYTE ORDERTransmit each pair of host bytes in the opposite order.
- D18XOR CHECKTransmit each host message, then the XOR of all its bytes.
Chapter 7
Frames and loops
33 puzzles: 10 Signal, 11 Bench, 6 Shuffle, and 6 Driver
Signal 10
- 48ROUND TRIPX is a stream of frames: each frame is a few values and then a 0.
- 49LEADERThree stations stand in a ring, and each one hears its own stream.
- 50ACKNOWLEDGEP must receive a copy of X. The line from tx to rx is locked and loses values.
- 51TIMES TABLEP must receive X times Y. There is no instruction that multiplies.
- 52RABBITSP must receive Fibonacci number X, where X is from 1 to 11.
- 53REPLAYX is a stream of frames of 1 to 3 values, each ended by a 0.
- 54RUN LENGTHX is a stream of frames, each ended by a 0. Within a frame, a run is one value repeated.
- 55LEVELX is a stream of frames of 1 to 3 values from -15 to 15, each ended by a 0.
- 56CHECKSUM GATEX is a stream of frames, each ended by a 0. The first value is a check and the rest are data.
- 57POWERSP must receive X to the power Y: X multiplied by itself Y times.
Bench 11
- B44LADDERR1, R2, and R3 add P0 and P1 into one voltage on CH1.
- B45SCANNERThese LEDs hang from V1 and light when their pin pulls low: a pin at 0 lights its LED.
- B46GAINV1 and V2 make a sine wave from 0.5 to 4.5 volts, but R1 and R2 halve it before P0.
- B47INVERTINGP0 reads a sine wave as a percent of the supply.
- B48LIMITERP0 reads a sine wave. Pass it on to CH2 through the PWM pin P1, but clip it:
- B49QUANTIZERP0 reads a triangle wave. Round each reading down to a quarter of the supply,
- B50AVERAGERP0 reads a slow triangle wave with a fast square ripple on top. P2 ticks every 20 cycles,
- B51SLEWP0 reads a square wave that jumps between 0 and 5 volts.
- B52UPHILLP0 reads a sine wave. On each tick of P2, compare the reading with the one before.
- B53ZERO CROSSP0 reads a sine wave around 2.5 volts. P2 ticks every 10 cycles.
- B54PEAKA peak meter jumps up with its input and sinks back slowly. P0 reads a sine wave.
Shuffle 6
- S23SPLIT DECISIONThe sign sorter, swapped about. Swap its pieces back.
- S24SCATTERSHOTOne hub feeds three answers, and every piece is out of place.
- S25OFFBEATThe quadrature blinker, swapped about. Swap it back.
- S08TANGLEA quad core program, out of order. More than one arrangement sums the window.
- S26JUNK DRAWERThe directory clerk's code, swapped about. Swap it back.
- S27COMEDOWNThe landing program, swapped about. Swap it back.
Driver 6
- D19HEX DUMPTransmit each received byte as two hex digits and a space.
- D20HEX LOADERDeliver the bytes spelled by pairs of hex digits; skip spaces and line breaks.
- D21EVEN PARITYTransmit each host byte with bit 7 set to make its count of ones even.
- D22READOUTDeliver each received byte to the host in decimal digits, then a space.
- D23KEYPADTransmit each typed number as a 16-bit value, high byte first.
- D24WORD SUMTransmit the 16-bit sum of each host message's readings, high byte first.
Chapter 8
Scarcity
29 puzzles: 8 Signal, 9 Bench, 7 Shuffle, and 5 Driver
Signal 8
- 58LITEP must receive 8 times each X value.
- 59GATEWhen Y is above 0, P must receive the next X. Otherwise Q must receive it.
- 60HEADROOMP must receive each X value held between -20 and 60: lower values become -20, higher ones 60.
- 61SHORT HANDP must receive the sum of each group of 4 values from X. A part group at the end is dropped.
- 62SQUARESFor each X from 1 to 5, P must receive X times X.
- 63RECTIFIERP must receive a copy of X, which runs from -99 to 99.
- 64SHARED LINEP must receive X plus Y, and Q must receive X minus Y. Both streams reach dx on one wire.
- 65DETOURP must receive 100 minus 8 times each X value.
Bench 9
- B55IDEAL DIODETwo diodes joined at their cathodes pass whichever input is higher, less 0.6 volts.
- B56ENVELOPEP0 is a gate, a slow square wave from V1. P2 ticks every 10 cycles.
- B57LOW SIDEM1 is a MOSFET switch. While P0 holds its gate high, M1 connects the LED to ground.
- B58SOLENOIDP1 drives a solenoid through Q1. Full current pulls it in; far less holds it there.
- B59HIGH SIDEQ1 is a PMOS between V1 and the lamp. It conducts while P0 is low and stops while P0 is high.
- B60H BRIDGEP0 reads a direction knob on CH1. P1 and P2 drive the two halves of a motor's H bridge.
- B61BICOLORP0 and P1 drive two LEDs back to back. Current flows from the high pin to the low one.
- B62ZONESP0 reads the input on CH1 as a percent of the supply.
- B63BROWNOUTP0 reads the supply on CH1 as a percent. P1 is the RUN line: high lets the system run.
Shuffle 7
- S05SWITCHBACKEvery piece of a working gate is here, out of place. Swap them back.
- S06MIRROR MAZETwo cores of a working program, their pieces swapped about. Swaps stay inside a core.
- S28SPOTLIGHTOne LED at a time, and every piece of the program is out of place.
- S29PHOTO FINISHThe race judge, swapped about. Swaps stay inside a core.
- S30BACKCHATTwo cores on one wire, their pieces swapped. Swaps stay inside a core.
- S31LOST COMBINATIONThe safe cracker, swapped about. Swap its pieces back.
- S32TALL ORDERThe order desk and the stock room, swapped about. Swaps stay inside a core.
Driver 5
- D25ODOMETERKeep a 24-bit running total of the received bytes and transmit it after each one.
- D26DELTADeliver the readings rebuilt from a start value and signed changes, high byte first.
- D27IDLE LINEDeliver received bytes; after 20 quiet ticks, deliver $0A once.
- D28GAP METERDeliver each received byte after the ticks since the byte before it.
- D29LINE EDITORDeliver each typed line when $0D arrives, with every backspace applied.
Chapter 9
Special nodes
26 puzzles: 8 Signal, 9 Bench, 4 Shuffle, and 5 Driver
Signal 8
- 66WIDE WINDOWP must receive the sum of the last four X values, with zeros before the first one.
- 67QUEUEEach X value that is not 0 joins the back of a queue. Each 0 takes the oldest out for P.
- 68REPEATERP must receive each X value as many times as Y says. Y is from 1 to 3.
- 69ROTATEP must receive 3X minus 4Y, and Q 4X plus 3Y: the point X, Y turned and stretched.
- 70SERIALX is a serial line that rests at 0. A 1 starts a frame: the next four bits are a value.
- 71SLOPEEach X code, 1 or -1, moves a level that starts at 0 by the code times a step.
- 72POLYNOMIALX sends three numbers, a, b, and c, once at the start of each test.
- 73ENCODERP must receive a code for each X sample: 1 if X is at or above the level, -1 if below.
Bench 9
- B64LOG SCALEP0 reads a signal on CH1 that spans a wide range. Show it on a log scale through P1.
- B65DEAD TIMEP1 and P2 drive the high and low sides of a half bridge. Both on at once shorts the supply.
- B66SPEED TRAPP0 and P1 read two light gates on CH1 and CH2. A car trips P0 first, then P1.
- B67MANCHESTERP0 reads data on CH1, one bit for every two ticks of P2, starting with the first tick.
- B68TRACKERP0 reads a target on CH1. P1 charges C1 through R1, and P2 reads C1 back.
- B69DIFF AMPP0 and P1 read two signals on CH1 and CH2. Amplify the difference between them.
- B70BURSTP0 reads a trigger on CH1. On each rising edge, send four pulses on P1.
- B71SERVOP0 reads a knob on CH1. Each frame, P1 sends a pulse, then rests low for 4 ticks of P2.
- B72HICCUPP0 switches Q1, which runs current from the supply through R2 and the sense resistor R3.
Shuffle 4
- S33LONG WAY ROUNDThree cores of a grid walker, each swapped about. Swaps stay inside a core.
- S34SAY AGAINBoth ends of a lossy line, swapped about. Swaps stay inside a core.
- S35HAREBRAINEDThe rabbit counter, swapped about. Swaps stay inside a core.
- S36BROKEN RECORDThe run length encoder, swapped about. Swap its pieces back.
Driver 5
- D30FIELD SELECTDeliver the third comma separated field of each line, then $0A.
- D31BYTE STUFFINGTransmit each host message as a SLIP frame: escape $C0 and $DB, end with $C0.
- D32UNSTUFFDeliver each SLIP frame's length, then its bytes with the escapes undone.
- D33EXPANDDeliver the bytes each header and the bytes after it stand for.
- D34RUN LENGTHTransmit each host message as pairs of a run length and a byte.
Chapter 10
Meshes
24 puzzles: 7 Signal, 8 Bench, 4 Shuffle, and 5 Driver
Signal 7
- 74STAGESSquare X, take 7 away, square that, take 20 away, multiply by 3, and take 1 away.
- 75CROSSINGP must receive X times Y, and Q must receive X minus Y.
- 76SIDE WIREX runs from 0 to 7. Below 4, P must receive X cubed; from 4 up, 100 minus X squared.
- 77SPOKESP must receive 2 times X cubed, minus 3 times X squared, minus 11 times X, plus 6.
- 78KNOCKOUTP must receive the largest of X, Y, and Z each time, and Q the smallest.
- 79INTERCHANGEP must receive each X cubed, and Q must receive each Y cubed.
- 80SORT THREEX arrives in groups of three. P must receive each group from the smallest to the largest.
Bench 8
- B73DEBOUNCEP0 reads a button on CH1. A sample of 50 or more is pressed, under 50 released.
- B74AUTO RANGEP0 reads a small signal on CH1. A meter shows it through P1, smoothed onto CH2.
- B75REGULATORP0 is a PWM pin feeding the output on CH1 through R1. R2 loads it, and V1 adds a load step.
- B76SET POINTP2 reads the set point from a dial on CH1. P0 heats C1 through R1, and R2 leaks heat away.
- B77GAMMAP0 reads a brightness knob on CH1. Eyes see brightness on a curve, not a straight line.
- B78SEQUENCERP0 reads an enable switch on CH1. P1 powers the core rail on CH2, P2 the IO rail on CH3.
- B79INTERLOCKP0 asks the hoist to go up, P1 asks it to go down. P2 drives up, P3 drives down.
- B80MAGNITUDEP0 reads a signal on CH1 that swings around 50 percent. P1 is a PWM pin on the base of Q1.
Shuffle 4
Driver 5
- D35BUSY SIGNALAsk with $05 until the far end answers $06, then transmit the record and $04.
- D36RETRYPoll with each host byte; poll again after 30 quiet ticks, and give up after 3 polls.
- D37FLETCHERTransmit each host message, then its two Fletcher check bytes.
- D38SOFT CRCTransmit each host message, then its CRC-8, computed without a CRC engine.
- D39THE OTHER ENDCheck each house frame's CRC: deliver the payload and answer $06, or answer $15.
Chapter 11
Capstones
33 puzzles: 10 Signal, 11 Bench, 6 Shuffle, and 6 Driver
Signal 10
- 81CLOCKX is a time in minutes, from 0 to 240.
- 82SIEVEX is from 2 to 120. P must receive only the primes: 2, 3, 5, 7, 11, 13, and so on.
- 83CHECK DIGITX is from 0 to 99. Double its ones digit; a 14 counts as 1 plus 4. Add the tens digit.
- 84FAIR SHAREX holds frames of up to 6 numbers from 1 to 99, each ended by a 0.
- 85FRACTIONX is from -30 to 30 and Y from 1 to 30. P over Q must be X over Y in lowest terms.
- 86HAILSTONEA step halves an even number and takes an odd one to 3 times it plus 1.
- 87ROOTX is from 0 to 121. P must receive its whole square root: 15 sends 3, and 16 sends 4.
- 88FACTORSX is from 2 to 127. P must receive its prime factors from smallest to largest, then a 0.
- 89SORTERX holds frames of 1 to 5 numbers from 1 to 99, and a 0 ends each frame.
- 90EXCHANGEX carries packets: a header of 10 times a port plus a count, then that many numbers.
Bench 11
- B81LOW PASSP0 reads a slow swing with a coarse ripple on CH1. P1 is a fast PWM pin, filtered onto CH2.
- B82NOISEMake noise: a pseudorandom bit stream on P0, one bit for each tick of P1.
- B83STRETCHP0 reads pulses of different lengths on CH1. Sample it on each tick of P2.
- B84RETRIGGERP0 reads bursts of short pulses on CH1. Sample it on each tick of P2.
- B85SIGMA DELTAP0 reads a knob on CH1. P1 is a plain digital pin; R1 and C1 average it onto CH2.
- B86VCOP0 reads a knob on CH1. On each tick of P2, add the reading DIV 10 to a phase kept in B.
- B87DUTY METERP0 reads a digital signal on CH1. IN P2 waits for a tick and returns the ticks so far.
- B88FAN CURVEP0 reads the temperature on CH1. P1 drives the fan with PWM, smoothed onto CH2.
- B89UARTSend the knob's reading out of P1 as serial, one bit per tick of P2, in frames of 16 ticks.
- B90PULSE METERP0 reads pulses of different lengths on CH1. Sample it on each tick of P2.
- B91JOLTP0 reads a knob on CH1 with a small ripple on top. Sample it on each tick of P2.
Shuffle 6
- S41SECOND THOUGHTSA trigger that takes its time, with every piece out of place.
- S42TOPSY TURVYTwo signal processors, swapped about. Swaps stay inside a core.
- S43STILL LIFEThe sample and hold, swapped about. Swap it back.
- S44PILEUPA four stage line, each stage swapped about. Swaps stay inside a core.
- S45TOP SHELFPeak hold, with every piece of the program out of place.
- S46LOST TIMEThe clock code, swapped about. Swap it back.
Driver 6
- D40ALTERNATING BITAnswer every frame with its sequence bit; deliver each payload only once.
- D41OUT OF ORDERDeliver the numbered readings in number order, each as soon as it can go.
- D42FULL DUPLEXTransmit host bytes and deliver received bytes, both at once.
- D43WINDOWSend the orders as house frames without waiting between them; pass on every ACK.
- D44SENTENCE CHECKDeliver the body of each sentence whose XOR check matches; drop the rest.
- D45WILL AND WONTDeliver the text between Telnet commands, and refuse every option.
Chapter 12
Shared buses
28 puzzles: 10 Signal, 9 Bench, 4 Shuffle, and 5 Driver
Signal 10
- 91BUS STOPa, b, and c share one bus. X arrives at a.
- 92LEFT FIRSTa, b, and c share a bus. Y arrives at a, and X at c.
- 93SECOND CHANCEa reads X onto a bus it shares with b and c.
- 94ROLL CALLa, b, c, and d share a bus. X arrives at a.
- 95TAKE TURNSa, b, c, and d share a bus. X arrives at a, Y at b, and Z at c.
- 96HANDSHAKEa, b, and c share a bus. X arrives at a, and Y at c.
- 97HELP DESKb asks s for the root of each X: it writes X on the bus and reads back the answer.
- 98ROUTE NUMBERa reads X and Y and shares a bus with b and c. Y is 0 or 1 and says where its X goes.
- 99DOUBLE DECKa reads X, and c reads Y. b sits on both buses.
- 100LAST STOPX and Y are from 1 to 99. P over Q must be X over Y in lowest terms.
Bench 9
- B92PORCH LIGHTP0 reads a motion sensor on CH1 and P1 the daylight on CH2. Sample both on each tick of P3.
- B93TAREP0 reads a scale on CH1 as a percent. P1 reads its TARE button on CH2.
- B94FSKP1 reads a data bit on CH1. Send it as a tone on P0: fast for a 1, slow for a 0.
- B95LONG DELAYP0 reads a digital signal on CH1. Sample it on each tick of P2.
- B96PATTERNP0 reads a signal on CH1. Sample it on each tick of P2; a reading DIV 33 is the bit.
- B97FUSEP0 reads the load current on CH1. P1 switches the lamp through Q1; CH2 is its drain.
- B98CRUISE CONTROLP0 is a PWM pin feeding the output on CH1 through R1. R2 loads it, and V1 adds a load step.
- B99SIRENThis chip is an SC-4, with registers C and D as well. P1 ticks every 20 cycles.
- B100WINCHP0 reads the winch's speed knob on CH1: 50 is stop, above reels in, below lets out.
Shuffle 4
- S47HAILSTORMThe hailstone counter, swapped about. Swaps stay inside a core.
- S48SQUARE ONEA square root, swapped about. Every piece is out of place.
- S49PECKING ORDERThree cores on a bus, their pieces swapped. Put each core back.
- S50CROSSTALKThe bus handshake, every piece swapped about. Swaps stay inside a core.
Driver 5
- D46AT COMMANDSAnswer each command line with OK or ERROR, as the modem would.
- D47GUARD TIMEPass received bytes to the host until +++ arrives alone between quiet spells; then answer OK.
- D48HEX RECORDSTransmit each host message as a hex record with its address and check byte.
- D49GATEWAYWrap every SLIP packet from the radio in a house frame for the trunk line.
- D50ELASTIC BUFFERTransmit every received byte on a slower line, in order, without losing any.