A monkey in a three-storey school, a sum with one digit covered, ten cards hanging from the platforms and crabs after him. Everything on this page comes from reading the code that does it and measuring it in the emulator.

At the top, the equation in big 2×2-tile digits (0x7207), with a ? on the digit you have to find. Below, four platforms —the floor, the top one and two in between, with gaps— and hanging from them the ten cards of the stage, visible only by their edge (the red 2×2 of 0x5082). Eight fruits hang too, three flowers decorate, and on the right the panel: TIME, HI, the score, the lives, STAGE and the ©Konami 1984.
Top right paces the professor, who is the player's monkey sprite in dark red (0x7ED9). He goes from 0xB8 to 0xE8 and back, one pixel every two frames.
?, the balloon rises and the digit is revealed (0x6D27): you lose a life.? and writes it in (0x74D5), goes back to his spot and both dance with the big face (0x6DFC). Three equations like that and the stage is cleared: the time left turns into points, 10 per second (0x77ED).In between, the crabs.
Left and right walk (state 2, one pixel per step, sound 3 every four). Fire jumps: with no direction, straight up (state 3, the 24-delta table of 0x6423: up 3 3 3 2 1 1 1 0 1 0 1 0 and down 0 1 0 1 0 1 1 1 2 3 3 3, one every two frames); with a direction and more than 12 pixels from the edge, up through a gap (state 4): it climbs four pixels a frame moving one pixel sideways, and if it finds a platform less than 17 pixels above that covers it (0x696B) it gets on. Otherwise it falls. Walk off a platform's edge and you fall (state 6), four pixels a frame.
There are no ladders: you go up through the gaps and down over the edges.
Three more actors, with the same states as the monkey (0x602E) and their type in the low nibble of +0x5B: 1, 2 and 3. All three start hidden with timers of 0x20, 0x40 and 0x60 (0x4B24), appear at the top centre (Y = 0x10, X = 0x60), lower themselves through the top platform (state 7, one pixel every four frames while the tile is not empty) and drop to the first floor.
How many of them are in play depends on the stage (0x4850: stage/8 + 2 actors, monkey included, capped at 4): just one up to stage 7, two from stage 8 to 15 and all three from stage 16 (E051 is binary, not BCD, so the step is at 16, not at 10). The loop at 0x4860 calls ACTOR_PASO with the actor number in B, last to first; and one frame in four (0xE272) only the monkey moves. Measured in a real game: in stages 1 and 2 the monkey took 1003 steps in 1003 frames, the first crab 752, the other two none. And how long they wait hidden before coming back: ((8 − stage mod 8) mod 8) × 16 + 17 frames, dropping from 129 to 17 over eight stages and starting over; from stage 32, one frame (0x6585). Reaching the left edge of the floor they leave through it (0x61C2).
If one touches you within 16 pixels (0x69B0): scared face (0x65AE), sound 0xA0 and one life less.
Eight per stage (0x6806): apples (0xF8), bananas (0x78) and grapes (0x7C), hanging in rows 3, 10 and 17. You pick one by jumping into it (0x5FA7): 100 points, sound 7, and the monkey carries it on his head (bits 2-3 of 0xE260, sprite set 1 with the arms up). With a fruit on his head fire does not jump: it throws it the way he faces (state 8, 0x64EA), and the fruit flies along one of the two arcs of 0x742F/0x7451.
Every eight steps it looks at what is underneath (0x73E1): if there is a platform it goes back to step 0 with the rising arc and keeps flying, and it only starts to fall once there is nothing below. The two arcs are also the same table read 17 bytes apart: the same dY values with the sign of dX flipped, and bit 5 of the state picks the side.
A fruit in the air kills whatever it hits: a crab, which dies showing a white "500" for 0x20 frames (0x5FF5); or the monkey, who loses a life (0x5FE8). Type 3 crabs do exactly the same to you. Landing on a fruit from above knocks it down (0x6496), and one that leaves the screen disappears.
Each life starts with 5:00 on the clock (0x47E1) and loses a second every 64 frames (0x6CC6); under ten seconds the 0x0C warning sounds every frame, and at zero the life is lost. Coming back to play, if less than 0:30 was left it is set to 0:30 (0x6CEF). Clearing the stage counts the clock down into points, one second every four frames, and back to 5:00.
Three lives (0x47E1). One more on passing 10,000 points and then every 20,000 (30,000, 50,000...; 0x4974: 0xE052 holds the ten-thousands of the next one, starts at 0 and grows by 2), sound 0x10. Measured: the first came at 10,260. Points: 100 a fruit picked, 500 a crab, 500 the right answer, 500 for delivering it, 10 per second left over. The high score lives at 0xE040 and is painted at once.
At the start of the game, and again after every stage cleared, LEVEL SELECT appears: keys 1 to 5 (0x765F), a minute of waiting and it goes on with whatever was set. Each player picks their own (0xE153/0xE154). The level is the script of the equation (0x7117):
| level | script | shape | measured example |
|---|---|---|---|
| 1 | 0A 0E | A + B = R | 89+9?=188 |
| 2 | 0B 0E | A − B = R, signed if negative | 89−9?=−10 |
| 3 | 0D 0E | (D × E) ÷ D = E | 72÷?=9 |
| 4 | 0C 0E | A × b = R, b one digit | ?3×3=129 |
| 5 | 0C 10 0A 11 0E | a × ( b + c ) = R, all one digit | 7×(?+4)=56 |
A and B are two BCD digits with units between 2 and 9. The digit that gets covered is chosen by subtracting a random 0-15 from the value of the first digit of the equation (0x7253), so it never falls beyond that position: with a 1 in front the ? is always in the first operand, and in 400 sampled equations only 67 have it in the result.
At boot the KONAMI rises from row 21 (0x6C42), VIDEO CARTRIDGE appears, and the "Monkey Academy" sign is painted one pixel row at a time (0x4C77) into tiles 0xB8-0xFF with three colour bands. Below, PLAY SELECT: 1 and 2 with joystick, 3 and 4 with keyboard, for one or two players. Touch nothing and after 256 frames the demo starts: the equation 3 + ? = 5, with the digit 2 hidden, played by the 120-byte script at 0x4B78, one input every eight frames.
With two players they alternate on losing a life (state 14 swaps 0xE050-0xE06F with 0xE080-0xE09F), each with their own joystick (0x4905 picks the port), their own cards and their own equation.