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 production page: https://www.pouet.net/prod.php?which=57915
- Scene.org archive: https://files.scene.org/view/mirrors/hornet/party/invites/1995/juhla_95.zip
- Public screenshot: https://content.pouet.net/files/screenshots/00057/00057915.png
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.

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.


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

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:
juhla-95-invitation-der-piipo-runtime.gifandjuhla-95-invitation-der-piipo-runtime.pngare runtime evidence for the post-GUS graphics/theme state. They pair with the selector loop at0x192d5..0x192fb, the keyboard ISR at0x3d97a..0x3d9e0, the one-shot key reader at0x3da22, and theSPACEconsumer around0x3d5d0..0x3d5f9. The important recovered behavior is not "a static Der Piipo picture exists"; it is that the invite enters a keyboard-driven presentation state after the sound-port choice.juhla-95-invitation-pouet.pngis public still evidence for the later bilingual invitation-page grammar: page text over the brown/blue background, withSPACEas the visible advance cue. It matches the embedded Finnish text near0x19928, the English text near0x1a147, and the sameSPACEreader path used by the presentation loop.juhla-95-invitation-map.gifis package evidence only. It comes from the archive'sMAP.GIF, is explained byMAP.TXT, and should not be used as runtime renderer evidence.
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:
- PKLITE restores the protected-mode intro body.
- The intro presents a GUS I/O selector and can be run with a no-sound dummy address.
- It initializes the embedded music/player path.
- It enters a graphics/theme presentation path; the verified no-sound runtime pass displays the large Der Piipo cartoon face over a wavy background.
- Its custom keyboard layer consumes
SPACEto flip/advance a presentation state and uses raw scan code01has the exit path. - It displays bilingual invitation pages from the internal fixed-width script.
SPACEadvances through pages andESCexits 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
- The visual assets here are the direct public Pouet screenshot and package
MAP.GIF, plus Xvfb-observed DOSBox runtime GIF/still frames for the Der Piipo graphics path. - The Der Piipo runtime GIF/still are cropped only from the Xvfb desktop capture to the DOSBox framebuffer rectangle. They are not browser/page screenshots.
- Old BBS/contact advertising from the archive comment and support COM file is deliberately omitted.
- The depacked body is used for evidence offsets and strings, not claimed as a complete function map.
- The keyboard ISR, one-shot key reader,
SPACEstate flip, and ESC scan-code exit are mapped; distinct selectable visual themes are not proven.
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.