I have devised and built and successfully tested a programmable dwarven computer. As opposed to the legends of the older days, who decided to built a _fully_ programmable computer, i wisely decided to pick a language that's easy to program in, and found -
hq9+!
Yes, it is a joke language. Consequently, the entire computer is a cheap if somewhat elaborate joke.
hq9+ has several advantages: it does everything it does with a mere four instructions, and requires nothing but the instruction list as input. No declaration of variables, no data structures, no true-or-false decisions. And it can do all the things typically done when demonstrating the capabilities of a freshly-minted programming language: it can print "Hello World", it can add one to the accumulator, it can print its source code and it can print the text of "99 bottles of beer".
It can do absolutely nothing else, but what else do you really need?
So, investing a few dwarf years and about 600 mechanisms, i built a dwarven computer which reads and executes hq9+ programs. It runs programs consisting of exactly eight instructions. Non-input is not admissible, the interpreter treats it as a "h" instruction but it makes the "q" output inaccurate.
The complete display before the testing run, with the test program already entered.

The bridge array in the middle is already set to the actual source code, the retracted bridge corresponds to
h+
q9
in each cell; however, the source is not being output - the bridges to the north and south are all raised and thus the dwarfs cannot read it.
The hatch in the south is the indicator from the accumulator, it gets opened for about 100 steps everytime one gets added.
Program input and regulator:

One individual lever for each of the four possible instructions and each of the eight positions within the program. Only one instruction per position.
The bauxite lever advances the program execution by one position every time it is pulled.
The petrified wood bridge to the east lifts and lowers once every time the program has been executed in full.
So, let's run the program! First instruction: "h"

Yay! The computer printed "Hallo WELT"!
Admittedly, it's not easy to recognise it as such, even when told what it's supposed to be. I found it quite bad enough that it took 28 link jobs just to get this shitty thing to retract/extend, i wasn't going to kill my brain by creating a display needing a hundred or more.
Second instruction: "q"

The extended cobaltite bridge signifies that the raising bridges are all lowered, so dwarfs can go and read the source code. "q" successfully executed.
Third instruction: "9"

"99 !", i.e. ninety-nine flasks (of booze) are clearly printed. Yay! The cobaltite bridge to the north-east is no longer visible - the source code display is no longer accessible.
Fourth instruction: "+"

One has been added to the accumulator, therefore the hatch cover has temporarily opened.
The actual interpreter looks like this:

The biggest part is the input reader to the left, a loop of eight reading cells.


The cart comes from the east, passes two of the three roller switches (resulting in a four-way split) and is sent back and forth over a pressure plate by a pair of opposing rollers, sending the signal corresponding to the instruction at the current location to one of the four outputs. When the next instruction is to be read, the "exit" roller is deactivated and the cart proceeds to the next cell.
Three of the four outputs simply lower/extend a bunch of bridges, thus they're simply powered NOT gates: a 2x2 round track holding down a pressure plate unless a signal comes from one of the inputs and disengages the powering mechanism.
The fourth output is the accumulator:

A perpetual-motion counter circuit, which simply returns to its original state whenever it receives an advancement signal. Ramps in the three-part angled pit in the west are E-W, NSE (with hatch cover operated by the "+" signal), and north a NS ramp under a closed ceiling. There's a half-covered EW pit to the east, although a ramp with wall would have worked as well.
When the hatch is closed, the cart bounces back and forth in the angled pit, between the northern wall and the closed hatch cover. When the hatch opens, the cart exits south, goes through the southern loop and is fed back into the angled pit, which it will pass in a straight e-w line back and forth until the hatch cover closes again.
The basic design is that of a counter but here, adding one to the counter just returns the counter to its previous state. That's because this is a _unary_ counter with a memory capacity of one unit. The held information never changes, but for demonstration purposes i've added a signal whenever it receives an advancement signal.