mirror of
https://github.com/skoelle/dos-phobia-welcome-intro.git
synced 2026-09-17 20:50:24 +00:00
README.md
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
title: "Phobia Welcome Intro"
|
||||||
|
emoji: "💾"
|
||||||
|
category: code
|
||||||
|
subcategory: "Retro"
|
||||||
|
status: active
|
||||||
|
stack: [Turbo Pascal, DOS, VGA, SoundBlaster, X-LIB]
|
||||||
@@ -1,33 +1,33 @@
|
|||||||
# Phobia Welcome Intro
|
# 🎉 Phobia Welcome Intro
|
||||||
This Pascal program is an intro demo from 1994. It displays text messages and graphics using VGA graphics mode. The program handles palette changes, writes text to the screen, and manages sound through devices like PC Speaker and SoundBlaster. The main loop updates the screen and handles user input to control the demo.
|
This Pascal program is an intro demo from 1994. It displays text messages and graphics using VGA graphics mode. The program handles palette changes, writes text to the screen, and manages sound through devices like PC Speaker and SoundBlaster. The main loop updates the screen and handles user input to control the demo. 🚀
|
||||||
|
|
||||||
## Description
|
## 📝 Description
|
||||||
The Phobia Welcome Intro was programmed in 1994 using Turbo Pascal, with inline assembler for the graphics routines. The idea for this intro was inspired by an Amiga demo, though the specific name of the demo has been forgotten. All graphics and programming were done by Stefan Koelle on a 486 DX50 DOS PC.
|
The Phobia Welcome Intro was programmed in 1994 using Turbo Pascal, with inline assembler for the graphics routines. The idea for this intro was inspired by an Amiga demo, though the specific name of the demo has been forgotten. All graphics and programming were done by Stefan Koelle on a 486 DX50 DOS PC. 💾
|
||||||
|
|
||||||
This intro utilized an early version of the X-LIB unit, specifically the TextGraf.pas, which was also developed by Stefan Koelle. The source code for the intro is available on GitHub. The primary technique used in this intro to create the illusion of movement was through color palette changes, rather than altering the pixels on the screen.
|
This intro utilized an early version of the X-LIB unit, specifically the TextGraf.pas, which was also developed by Stefan Koelle. The source code for the intro is available on GitHub. The primary technique used in this intro to create the illusion of movement was through color palette changes, rather than altering the pixels on the screen. ✨
|
||||||
|
|
||||||
The music for the intro was borrowed from an old Amiga demo and played using a public Mod-Player. The font used in the intro was custom-created and compiled into the executable as an object, along with the music and graphics.
|
The music for the intro was borrowed from an old Amiga demo and played using a public Mod-Player. 🎵 The font used in the intro was custom-created and compiled into the executable as an object, along with the music and graphics. 🔤
|
||||||
|
|
||||||
[Phobia Website](https://www.moonweb.org/phobia/)
|
[🌐 Phobia Website](https://www.moonweb.org/phobia/)
|
||||||
|
|
||||||
[YouTube Video of the Intro](https://www.youtube.com/watch?v=Cj3RgjVs5dk&t=3s)
|
[🎬 YouTube Video of the Intro](https://www.youtube.com/watch?v=Cj3RgjVs5dk&t=3s)
|
||||||
|
|
||||||

|
 🖼️
|
||||||
|
|
||||||
## Requirements & Compatibility
|
## ⚙️ Requirements & Compatibility
|
||||||
|
|
||||||
This intro was written for **MS-DOS** in 1994 using **Turbo Pascal 7.0**. It uses
|
This intro was written for **MS-DOS** in 1994 using **Turbo Pascal 7.0**. It uses
|
||||||
real-mode (16-bit) memory access and direct hardware port communication (VGA,
|
real-mode (16-bit) memory access and direct hardware port communication (VGA,
|
||||||
PC Speaker, SoundBlaster), so it requires either:
|
PC Speaker, SoundBlaster), so it requires either:
|
||||||
|
|
||||||
- A real DOS machine with VGA-compatible graphics
|
- 🖥️ A real DOS machine with VGA-compatible graphics
|
||||||
- An emulator such as **DOSBox**, **DOSBox-X** (recommended) or **86Box**
|
- 💻 An emulator such as **DOSBox**, **DOSBox-X** (recommended) or **86Box**
|
||||||
|
|
||||||
The program will **not** run natively on modern Windows or Linux. A 386 or
|
The program will **not** run natively on modern Windows or Linux. A 386 or
|
||||||
better CPU is required for the sound routines; a 486 DX50 or faster is
|
better CPU is required for the sound routines; a 486 DX50 or faster is
|
||||||
recommended for the intended experience.
|
recommended for the intended experience. ⚡
|
||||||
|
|
||||||
## Directory Structure
|
## 📁 Directory Structure
|
||||||
|
|
||||||
| File | Description |
|
| File | Description |
|
||||||
|-------------------|----------------------------------------------------------|
|
|-------------------|----------------------------------------------------------|
|
||||||
@@ -41,7 +41,7 @@ recommended for the intended experience.
|
|||||||
| `PHO.EXE` | Pre-compiled executable (ready to run) |
|
| `PHO.EXE` | Pre-compiled executable (ready to run) |
|
||||||
| `images/screenshot.png` | Screenshot of the intro in action |
|
| `images/screenshot.png` | Screenshot of the intro in action |
|
||||||
|
|
||||||
## Building from Source
|
## 🔧 Building from Source
|
||||||
|
|
||||||
If you wish to rebuild the executable from source:
|
If you wish to rebuild the executable from source:
|
||||||
|
|
||||||
@@ -51,44 +51,44 @@ If you wish to rebuild the executable from source:
|
|||||||
|
|
||||||
> The `.OBJ` and `.TPU` files are pre-compiled external libraries that cannot be
|
> The `.OBJ` and `.TPU` files are pre-compiled external libraries that cannot be
|
||||||
> rebuilt from the original Pascal sources. The `PHO.EXE` binary in the repository
|
> rebuilt from the original Pascal sources. The `PHO.EXE` binary in the repository
|
||||||
> root is ready to run and does not require compilation.
|
> root is ready to run and does not require compilation. 🚫
|
||||||
|
|
||||||
## Running the Intro
|
## ▶️ Running the Intro
|
||||||
|
|
||||||
1. In DOSBox, mount the repository root as a drive (e.g. `Z:`).
|
1. In DOSBox, mount the repository root as a drive (e.g. `Z:`).
|
||||||
2. Run `PHO.EXE`.
|
2. Run `PHO.EXE`.
|
||||||
3. Select a sound device when prompted:
|
3. Select a sound device when prompted:
|
||||||
- **F1–F2**: PC Speaker (various frequencies)
|
- **F1–F2**: PC Speaker (various frequencies) 🔊
|
||||||
- **F3–F4**: SoundBlaster
|
- **F3–F4**: SoundBlaster 🎮
|
||||||
- **F5–F6**: Parallel port DAC
|
- **F5–F6**: Parallel port DAC 🎵
|
||||||
- **F7–F8**: Disney / Covox
|
- **F7–F8**: Disney / Covox 🎶
|
||||||
- **F9–F10**: Auto-detected
|
- **F9–F10**: Auto-detected 🤖
|
||||||
- **ESC**: No sound
|
- **ESC**: No sound 🔇
|
||||||
- **`+`**: Skip the intro
|
- **`+`**: Skip the intro ⏭️
|
||||||
|
|
||||||
## Credits & Sources
|
## 🏆 Credits & Sources
|
||||||
|
|
||||||
- **Coding & Graphics**: Stefan Koelle (NST / Phobia) — 1994
|
- **Coding & Graphics**: Stefan Koelle (NST / Phobia) — 1994 👨💻
|
||||||
- **Font**: Custom-created by Stefan Koelle
|
- **Font**: Custom-created by Stefan Koelle ✍️
|
||||||
- **Music**: Borrowed from an Amiga demo, played via a **public MOD-Player**
|
- **Music**: Borrowed from an Amiga demo, played via a **public MOD-Player**
|
||||||
(`MOD-Obj.OBJ`). Specific composer/demo name is unknown.
|
(`MOD-Obj.OBJ`). Specific composer/demo name is unknown. 🎶
|
||||||
- **X-LIB / TextGraf**: Early version also developed by Stefan Koelle
|
- **X-LIB / TextGraf**: Early version also developed by Stefan Koelle 📚
|
||||||
- **Inspiration**: Amiga demo scene (demo title lost to time)
|
- **Inspiration**: Amiga demo scene (demo title lost to time) 💭
|
||||||
|
|
||||||
## Troubleshooting
|
## 🔍 Troubleshooting
|
||||||
|
|
||||||
| Problem | Solution |
|
| Problem | Solution |
|
||||||
|--------------------------------------|-------------------------------------------|
|
|--------------------------------------|-------------------------------------------|
|
||||||
| No sound | Try a different device or run under DOSBox-X with a configured SoundBlaster |
|
| 🔇 No sound | Try a different device or run under DOSBox-X with a configured SoundBlaster |
|
||||||
| Palette glitches / wrong colors | Ensure emulation is in 256-color VGA mode ($13) |
|
| 🎨 Palette glitches / wrong colors | Ensure emulation is in 256-color VGA mode ($13) |
|
||||||
| Keyboard input not responding | Restart DOSBox-X, ensure keyboard mapping is correct |
|
| ⌨️ Keyboard input not responding | Restart DOSBox-X, ensure keyboard mapping is correct |
|
||||||
| `PHO.RSC` not found at runtime | Run the program from the repository root so the resource file is in the CWD |
|
| 📁 `PHO.RSC` not found at runtime | Run the program from the repository root so the resource file is in the CWD |
|
||||||
| Compile errors | Use the pre-built `PHO.EXE`; the `.OBJ`/`.TPU` files are from TP 7.0 and may not link with other Pascal distributions |
|
| ⚠️ Compile errors | Use the pre-built `PHO.EXE`; the `.OBJ`/`.TPU` files are from TP 7.0 and may not link with other Pascal distributions |
|
||||||
|
|
||||||
## Methods in the Turbo Pascal Code
|
## 🔧 Methods in the Turbo Pascal Code
|
||||||
|
|
||||||
|
|
||||||
### External Procedures
|
### 📦 External Procedures
|
||||||
These procedures are linked from an external object file (`MOD-obj.OBJ`).
|
These procedures are linked from an external object file (`MOD-obj.OBJ`).
|
||||||
|
|
||||||
1. **modvolume(v1, v2, v3, v4: integer)**
|
1. **modvolume(v1, v2, v3, v4: integer)**
|
||||||
@@ -106,33 +106,33 @@ These procedures are linked from an external object file (`MOD-obj.OBJ`).
|
|||||||
5. **modinit**
|
5. **modinit**
|
||||||
- Initializes the MOD player.
|
- Initializes the MOD player.
|
||||||
|
|
||||||
### Internal Procedures
|
### 🔧 Internal Procedures
|
||||||
|
|
||||||
1. **ch_pal**
|
1. **ch_pal** 🎨
|
||||||
- Changes the palette colors in a cyclic manner to create visual effects.
|
- Changes the palette colors in a cyclic manner to create visual effects.
|
||||||
|
|
||||||
2. **writeline(wly: integer; wls: string)**
|
2. **writeline(wly: integer; wls: string)** ✍️
|
||||||
- Writes a line of text to the screen at the specified vertical position (`wly`).
|
- Writes a line of text to the screen at the specified vertical position (`wly`).
|
||||||
|
|
||||||
3. **writeback(wly: integer; wls: string)**
|
3. **writeback(wly: integer; wls: string)** 🖌️
|
||||||
- Restores the background behind the text at the specified vertical position (`wly`).
|
- Restores the background behind the text at the specified vertical position (`wly`).
|
||||||
|
|
||||||
4. **CLI**
|
4. **CLI** 🚫
|
||||||
- Disables interrupts (inline assembly).
|
- Disables interrupts (inline assembly).
|
||||||
|
|
||||||
5. **STI**
|
5. **STI** ✅
|
||||||
- Enables interrupts (inline assembly).
|
- Enables interrupts (inline assembly).
|
||||||
|
|
||||||
## Main Program Logic
|
## ⚙️ Main Program Logic
|
||||||
The main program initializes the MOD player, sets up the graphics mode, and displays text and visual effects in a loop until a key is pressed.
|
The main program initializes the MOD player, sets up the graphics mode, and displays text and visual effects in a loop until a key is pressed.
|
||||||
|
|
||||||
### Key Features:
|
### 🌟 Key Features:
|
||||||
- **Graphics Mode Initialization**: Sets the graphics mode to 320x200 with 256 colors.
|
- **Graphics Mode Initialization**: Sets the graphics mode to 320x200 with 256 colors. 🖥️
|
||||||
- **Palette Cycling**: Creates visual effects by cycling through palette colors.
|
- **Palette Cycling**: Creates visual effects by cycling through palette colors. 🔄
|
||||||
- **Text Display**: Writes and restores text on the screen.
|
- **Text Display**: Writes and restores text on the screen. ✏️
|
||||||
- **Sound Setup**: Configures and plays sound using different devices and frequencies.
|
- **Sound Setup**: Configures and plays sound using different devices and frequencies. 🔊
|
||||||
- **User Interaction**: Responds to key presses to control the program flow and sound settings.
|
- **User Interaction**: Responds to key presses to control the program flow and sound settings. 🎮
|
||||||
|
|
||||||
## Lizenz
|
## 📜 Lizenz
|
||||||
|
|
||||||
Lizenziert unter der [MIT License](LICENSE) - Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de)
|
Lizenziert unter der [MIT License](LICENSE) - Copyright (c) 2026 Stefan Koelle (https://stefankoelle.de) 💖
|
||||||
|
|||||||
Reference in New Issue
Block a user