1
0
vt100-games/LadderTP/README.md

109 lines
4.4 KiB
Markdown

# Ladder
The classic CP/M game Ladder reverse engineered in Turbo Pascal.
Original GitHub repository: https://github.com/mecparts/Ladder
Additional information and compiled version by Anna Christina Naß <acn@acn.wtf>
I've added a compiled ``LADDER.COM`` file for just playing the game (on a VT100
terminal at about 8 MHz, eg. a RC2014), and added more information on
compiling the game.
## Keys
The file ``LADDER.DAT`` is the configuration file that holds the key definitions.
These can be changed by using ``LADCONF.COM`` (the terminal definition
in LADCONF is not used! This LADDER uses the Turbo Pascal terminal definitions).
The default keys in this ``LADDER.DAT`` are:
Up = 8 Down = 2 Left = 4 Right = 6
Jump = Space Stop = Other
(Jump and Stop are not configurable)
Also, "bell" sound is enabled and "wise crack marks" are disabled.
## Compiling notes from Anna:
To compile LADDER, just use Turbo Pascal from the ``TP/`` directory.
It's TP 3.0A for CP/M-80, only without the demo source code.
* Copy the TP files together with the LADDER files to one disk
* The terminal definition is already set to ANSI and the speed is set to 8 MHz (for a
standard RC2014), so running TINST is not needed
* Run Turbo Pascal using TURBO
* Set the compiler options to "compile -> Com-file" (press O, C, Q)
* Compile ``LADDER.PAS``: press C (Compile), then enter ``ladder`` as Work file name.
This should result in a ``LADDER.COM`` file.
The rest of this file is mostly the README from the original repository.
# Original README content:
## About
This is a rewrite in Turbo Pascal of the classic CP/M game "Ladder",
originally written by Yahoo Software (not Yahoo!).
Ladder is an ASCII character based platform arcade game similar to
Donkey Kong. You travel through levels with platforms and ladders
where rocks fall down from the top while you collect statues
before reaching the exit.
Back in 1999 Stephen Ostermiller made a version of [Ladder in
Java](http://ostermiller.org/ladder/). Later, Mats Engstrom of
SmallRoomLabs started another version in of [Ladder in
golang](https://github.com/SmallRoomLabs/ladder). Between my own
memories of playing the original game on a Kaypro, and Stephen
Ostermiller's and Mats Engstrom's code, I was able to come up
with this version.
This version will use the original LADCONF.COM configuration program
and LADDER.DAT configuration file. Since this version is a Turbo
Pascal program, the terminal configuration portion of LADCONF
isn't used, though it still does set up the movement keys, sound
and back chatter options.
## Compiling the game
You'd need Turbo Pascal, of course. You'll also need to edit
LADCONST.PAS to set the cursor on and off sequences for your
terminal. LADDER.PAS is the main part of the program. I've
successfully compiled this on a 58K CP/M system, so available RAM
isn't a particularly critical limitation.
Once you've compiled LADDER.COM, copy LADCONF.COM to the same user area.
If you don't have a LADDER.DAT file, when you run LADDER the first time
it'll automatically load LADCONF to set up the movement keys and
options, then transfer you back to LADDER.
## Limitations
At the moment, once you've successfully completed the 7th distinct level
(Gang Land), the program just cycles through all 7 seven levels over and
over again until the bonus time becomes too short to actually finish a
level. If anyone knows what the original program actually did (I never
managed to get anywhere near to completing the original game), let me
know and I'll see what I can do.
The Delay(ms) call in Turbo Pascal only works for a Z80 running
at up to 32MHz (and TINST will only allow you to specify a value of up
to 20MHZ if I recall correctly). So if you're trying to run this on a
system with an effective clock speed of greater than 32MHz, you're going
to have to come up with another mechanism. That's not an insurmountable
roadblock though; on my 144MHz-Z80-equivalent RunCPM box running on a
Teensy 4.0, I patched the Turbo Pascal runtime to make a call to a BDOS
extension I created to call the Arduino's delay() function. Works like
a charm. If your system includes any kind of millisecond counter you can
read, that's a good spot to start looking.
## References
[Original Ladder game](http://www.classiccmp.org/cpmarchives/cpm/Software/WalnutCD/lambda/soundpot/f/ladder13.lbr)<br>
[Ladder in Java](http://ostermiller.org/ladder/)<br>
[Ladder in golang](https://github.com/SmallRoomLabs/ladder)<br>