Analysis model: gpt-5.5 xhigh

Juhla 95 Invitation by Crypton and Orange - Technical Dissection

Juhla 95 Invitation is a January 1995 MS-DOS/GUS invitation intro by Crypton and Orange for the first Juhla party. The archive is more useful than it first looks: besides the PKLITE-packed intro executable, it includes Finnish and English party info files plus a hand-drawn map GIF.

The intro itself is a key-driven invitation rather than a long effects demo, but it is not just a text pager. A runtime pass after the GUS/no-sound selector reaches a full-screen Der Piipo graphics theme before the text sections. The technical interest is in the compact delivery: packed MZ loader, 386/GUS requirement, depacked protected-mode body, embedded bilingual page text, GUSPLAY/PMODE credits, a built-in music/player path rather than a separate module file, and a graphics/theme presentation path that the earlier pass missed.

Sources

Pouet metadata:

title:        Juhla 95 Invitation
groups:       Crypton, Orange
type:         invitation
platform:     MS-Dos/gus
release date: January 1995
invitation:   Juhla 1995

Archive SHA-256:

7c4819cfddec00f6fa7e35e421e6620d3c8d8b916abae4d273226d4024360ede

The extracted archive contains:

File Size SHA-256
JUHLA.EXE 94,254 1ae3f8e41c7f4e28b8b2cb1a66bee40ac43e61295210be80aa8d60b73add69b4
JUHLAENG.TXT 10,688 03f1916dfffadd9903b40d1bfc287ce200d463262adb21eff239ed88a471f20c
JUHLAINV.TXT 10,561 944cb40e5f14ec850990537c887442b865bb50423cdb5276eaf5d87f53f7172a
MAP.GIF 20,727 46422de5ce0f7f49bb1b85353bef1ed6a3ec9ba9c94887b948d3c67660077c94
MAP.TXT 378 45ba22854cd1a2f51361829b824ff2fabfa913870eb6875b3d160a247eb8d3bb
TRIP0401.COM 4,072 391e7e3b7e8b561fff4397d7c15c33506a6037c78abf157906cefa805382d6f9
FILE_ID.DIZ 166 264f7d2e8a6a9359c4b39d7de0772aa017626da30f00dafe8266bdfac882e6e4

The ZIP comment and TRIP0401.COM contain old BBS/contact advertising. They are intentionally not reproduced here.

Visual Evidence

The public Pouet screenshot is a direct 320x200 indexed PNG.

Juhla 95 Invitation public Pouet screenshot

The screenshot shows the core screen grammar recovered from the executable: language-specific invitation pages over a brown/blue graphic background, with a SPACE prompt used as the page-advance cue.

The corrected runtime pass also reaches the Der Piipo graphics theme after the GUS selector. This observation run used DOSBox-X 2026.01.02 under Xvfb with external key injection: 7 selected the unused-address/no-sound GUS path, and subsequent SPACE presses advanced the presentation. The source was a 1024x768 Xvfb emulator observation capture; the public assets below are cropped to the 640x400 DOSBox framebuffer rectangle, not taken from a browser or page lightbox.

Juhla 95 Invitation Der Piipo runtime theme animation

Juhla 95 Invitation Der Piipo runtime theme still

The archive also includes a 640x480 hand-drawn party-location map:

Juhla 95 package map GIF

MAP.TXT explains that the map was drawn by hand because the scanner was not available. This is package evidence, not a runtime screenshot.

The Der Piipo assets are runtime observation evidence, not the original internal DOSBox recorder output. I tried DOSBox-X internal dx-capture, but the program split/aborted around the text-to-graphics mode switch in this headless run and left the graphics segment too short to use. The Xvfb pass was therefore used only to observe the emulator window and document the graphics path.

Release Metadata

FILE_ID.DIZ says the final invitation requires a 386 and recommends a 486 with GUS for best results. The English info file describes the party at Yla-Savon Ammattioppilaitos in Iisalmi, Finland on January 14-15, 1995.

The embedded English script in the executable credits:

Role Credit
Code Hoplite
Graphics Der Piipo
Music Dune
Player Robban's GUSPLAY with PMODE modifications by Phantom/Sonic
PMODE header Tran

The same credit block appears in Finnish earlier in the depacked text table.

Executable Format

JUHLA.EXE is a PKLITE-packed MZ executable:

PKLITE marker:      file offset 0x1e
MZ pages:           185
Header paragraphs:  6
Relocations:        1
Initial IP:         0x0100
Initial CS:         0xfff0
Initial SS:         0x1703
Initial SP:         0x0200
File size:          94,254 bytes

The CS=0xfff0 entry is the packed-loader shape, not the real application entry. The original file exposes almost no useful strings beyond the PKLITE stub.

Running depklite -d produces a 252,510-byte raw protected-mode image:

00d3bd9726ad82c84c859cfc548e4df41d088e87ccfb6e61bd6b67525adbbeda

As with several small Orange-era intros, the depacked output is not a clean container with a convenient header. It is still a strong boundary for strings, tables, and code islands.

Music and GUS Path

There is no separate .MOD or .S3M file in the archive. The music path is inside JUHLA.EXE.

The depacked body includes module-format probes near 0x3038:

M.K.
FLT4
6CHN
8CHN
OCTA

That is consistent with a ProTracker-family player that can recognize common channel-count signatures.

The GUS selection text appears at 0x5449:

GUS I/O:       (for nosound, use a free address)
1-> 210h
2-> 220h
3-> 230h
4-> 240h
5-> 250h
6-> 260h
7-> 270h

This matches the DIZ recommendation: the intro targets Gravis UltraSound, but the selector has a no-sound escape by letting the user choose an unused address.

Keyboard and Theme State

The later correction was not just "there is another picture after the prompt." The depacked body also shows why the presentation feels interactive. It installs a custom keyboard path and then polls a one-shot key value during the graphics/text loop.

The GUS selector is a small numeric loop:

0x192d5  print GUS I/O selector text
0x192df  call one-shot key reader
0x192e4  reject below '0'
0x192e8  reject above '7'
0x192ec  subtract '1'
0x192f3  index the GUS-port table at decoded+0x3a6b
0x192fb  store selected port word at decoded+0x0ae9

That covers only the sound port choice. The graphics section uses a separate keyboard layer. Near the tail, the decoded image contains an IRQ-style keyboard handler that reads port 60h, updates key-state tables, stores the last translated key byte, and acknowledges the PIC:

0x3d97a  in al,60h
0x3d986  update key-state byte table
0x3d9b6  store translated key at decoded+0x3be88
0x3d9bb  set "new key" flag at decoded+0x3be8a
0x3d9dc  out 20h,al
0x3d9e0  iret
0x3da22  one-shot key reader clears the new-key flag and returns AX

The main presentation loop then consumes SPACE explicitly:

0x3d5d0  call one-shot key reader
0x3d5d5  cmp al,20h          ; SPACE
0x3d5dd  test decoded+0x1b3bc
0x3d5ea  set decoded+0x1b3b0 to -1
0x3d5f9  set decoded+0x1b3b0 to  1

That state flip is the concrete control-flow evidence behind the runtime observation: SPACE advances or flips a presentation/theme state instead of merely dumping a static text file. The same loop checks raw keyboard scan code 01h from port 60h near the retrace wait and sets an exit flag, matching the visible PRESS ESC / PAINA ESC ending.

What is still not proven is a plain multi-theme chooser. Saved observation runs for the 1, 2, and 3 attempts after the no-sound GUS choice all show the same Der Piipo graphics path, and the string table has no readable theme menu text. So the safe conclusion is narrower: the intro has a real keyboard-driven graphics/theme state machine; this pass has not proven distinct selectable visual themes.

Runtime-To-Code Concordance

The three visual evidence classes map to different parts of the package and runtime, so they should not be treated as interchangeable screenshots:

This split is the main correction to the earlier shallow reading. The runtime GIF proves the intro reaches an interactive graphics/theme path; the package map proves the archive carried auxiliary party material; the public still proves the invitation text page layout. The code currently proves stateful keyboard control and the Der Piipo path, but still does not prove separate selectable visual themes.

Embedded Page Text

The depacked body contains the Finnish script starting around 0x19928 and the English script starting around 0x1a147. The table is not stored as normal line-wrapped text; it is a fixed-width screen script with page delimiters such as SPACE embedded directly into the data.

The Finnish block contains the visible title language from the screenshot, including CRYPTON KUTSUU SINUA and PARTYN NIMI ON JUHLA'95. The English block contains the matching CRYPTON INVITES YOU TO JUHLA'95 page. The end of the English block contains TEXT ENDS. PRESS ESC.

This proves the text screens are not loaded from JUHLAENG.TXT or JUHLAINV.TXT at runtime. Those files are package information files; the intro uses its own embedded bilingual screen script.

What the Intro Does

The recovered execution model is:

  1. PKLITE restores the protected-mode intro body.
  2. The intro presents a GUS I/O selector and can be run with a no-sound dummy address.
  3. It initializes the embedded music/player path.
  4. It enters a graphics/theme presentation path; the verified no-sound runtime pass displays the large Der Piipo cartoon face over a wavy background.
  5. Its custom keyboard layer consumes SPACE to flip/advance a presentation state and uses raw scan code 01h as the exit path.
  6. It displays bilingual invitation pages from the internal fixed-width script.
  7. SPACE advances through pages and ESC exits at the end of the text.

The brown background and face-like graphic are visible in the public screenshot, and the separate runtime pass proves that the invitation also contains a full-screen Der Piipo graphics-theme state before/around the page flow. This pass still does not prove whether those images are stored as raw bitmap data or generated from compact tables. The depacked tail has large high-density data regions, so both remain plausible until the renderer/data layout is mapped.

The theme-selection detail is now bounded more tightly. The code proves a keyboard-driven graphics/theme state and the runtime runs prove the Der Piipo path. It does not yet prove separate selectable themes; the tested 1, 2, and 3 sequences after the no-sound GUS choice all landed on the same visible path.

Boundaries

Conclusion

Juhla 95 Invitation is a practical early-1995 Finnish party invite with enough technical evidence to be more than a still-frame note. Its compact packed executable embeds the visible bilingual pages, the GUS/player setup, the Der Piipo graphics theme, a custom keyboard state path, and the credits, while the archive carries the conventional info files and a separate hand-drawn map. It is a clear predecessor to Orange's later 1995 invitation intros, but this one still has the rougher Crypton/party-organizer utility shape: configure sound, enter the graphics presentation, get the details on screen, play the tune if GUS is available, and move through the pages with the keyboard.