DRAGON'S LAIR II PC CONVERSION - 20 March 2000
Written and developed by Rob DiNapoli | Additional contributions by Andrew Hepburn

INTRODUCTION

For your laserdisc game playing enjoyment, here is a PC port of the Dragon's Lair II ROM.  The original DL2 ROM is 8088 based.  Some (actually, a lot of) changes have been made to the DL2 ROM to enable it to work on a PC.  You can read a little about these changes below.

PARTS NEEDED

DOWNLOAD

Full documentation including theory of operation and more are included in the download.

    DOWNLOAD  DL2conv.zip  NOW!

UPDATE!
The original version by Rob DiNapoli worked only with the second pressing of the DL2 laserdisc (part # C-910-00002-00).  Andrew Hepburn later added support for the first pressing as well (part # C-910-00001-00).  Be sure to read the notes below to find out what '.com' file you should use.

THEORY OF OPERATION

There are now 8 versions of the '.com' file included in the download to accomodate 8 different hardware configurations.  They are as follows:

File LD Player Input Disc Pressing
DL2v1_J_1450.com LDP-1450 Joystick 1st
DL2v1_J_2000.com LDP-2000* Joystick 1st
DL2v1_K_1450.com LDP-1450 Keyboard 1st
DL2v1_K_2000.com LDP-2000* Keyboard 1st
DL2v2_J_1450.com LDP-1450 Joystick 2nd
DL2v2_J_2000.com LDP-2000* Joystick 2nd
DL2v2_K_1450.com LDP-1450 Keyboard 2nd
DL2v2_K_2000.com LDP-2000* Keyboard 2nd
*OR COMPATIBLE
(ALL VERSIONS ARE DERIVATIVE FROM DL2 ROM v3.15)

Plug the LDP into com2 on the PC, and run the appropriate '.com' file.  The DL2 introduction should immediately begin.

Here are the keyboard inputs:

C - Insert Coin
1 - Player 1 start
2 - Player 2 start
M - Maintenance Mode
Space - Sword
Up, Down, Left, Right Arrows to move   (The keys on the keypad will not work.)

JOYSTICKS...  AND OTHER CABINET RELATED STUFF

Ooh, 'tis a cruel trick IBM played upon us with their analog joystick port!  DL2 uses the IBM joystick port in the ROM code.  To keep things short and simple, I'm going to avoid a detailed discussion of the joystick port, but I will leave you with a little background.  Suffice it to say...  It's EVIL.

'Analog' type joysticks use a variable resistor inside (like a volume control knob), which varies depending on the position of the joystick.  All PC joysticks are analog.
'Digital' type joysticks are relatively simple.  There is a switch for each direction; each direction is either 'on' or 'off'.  The DL2 joystick is digital.  (Almost all arcade joysticks are digital.)  There is hardware on the DL2 board that converts the on/off position to a value that is passed to the joystick port.

Repeat after me:  "Analog is evil."  Good.  Why?  Plugging the same joystick into a different speed computer will yield different values when reading it.  Plugging 2 different joysticks into the same computer will yield different values when reading them.  That's why you have to calibrate joysticks on a PC, and it makes for a lot of trouble for game programmers.  I really didn't want to have to write a calibration routine in assembly.

How do we work around this without too much pain?  We use the parallel port!  The parallel port has plenty of inputs; we need eight...  four for the directions (up, down, left, right) and four for buttons (1 player, 2 player, sword, coin).  Maintenance mode is triggered by a combination of the coin switch and the sword button, or the coin switch and 1 player button at the same time.

In order to use this, you must set the parallel port on the PC to 'Bi-Directional', or 'EPP' mode.

Here's how to wire it:

Parallel Port DL2 Joystick
Pin 2 Up
Pin 3 Down
Pin 4 Left
Pin 5 Right
Pin 6 1 Player
Pin 7 2 Player
Pin 8 Sword
Pin 9 Coin Switch
Pin 17 Ground

Note:  I don't own a DL2 cabinet.  (This is wired into my DL cabinet.)  Make sure that there is no voltage present between the coin switch and ground.  I can't imagine why they would do this, but who knows what these crazy game designers did?

Other cabinet notes:  The move 'beeps' come from the PC speaker.  You have to wire the PC speaker into the main cabinet speakers.  And while on the subject of sound, you'll need to get a small audio amplifier and wire it between the laserdisc player audio out and the cabinet speakers.

ROM MODIFICATIONS

You can look at the Tech Notes text files in the download for details.  Most of it might not make sense unless you know some assembly.

These are some of the modifications that were needed:

MR. GRUMPY ANSWERS YOUR QUESTIONS

Q: Hey, can you make this work with a normal PC joystick?
A: It would really, really require a lot of work...
A: No.

Q: Please?
A: No.

Q: Why is there a slight pause before searching?
A: The delay routine that I inserted is too long for your computer.  I was testing on a 400mhz machine.  See the 'Delay Tweaking' section for how to fix this.  There is no harm in the delay being too long; it's just annoying.

Q: Why does keyboard/joystick input feel sluggish?
A: See the previous question

Q: Hey, I made it to Level x, and all of a sudden the game 'froze'.
A: Most likely, you set the delay time too low.

Q: I suck at this game.  Can you tell me how to get infinite lives?
A: See the section below, marked 'I want to cheat'.

Q: What guarantee do I have that this will work for me?
A: None.  In fact, there's the possibility that you can make your parallel port go *poof* should you decide to pump voltage through it.

Q: So, there's no warranty, express or implied?
A: Absolutely none.

DELAY TWEAKING

If the keyboard/joystick input feels sluggish, or there are delays upon searching, then you can adjust the delay routines in the program.  As-is, the program runs fine on a 400mhz machine, and should run ok within 100mhz or so either way.  If you want to run the program on a much faster/slower machine, then you must adjust the delay routines.

There are two values that need adjusting.  They default to 0230h and 0150h.  When testing on a 100mhz laptop, values of 0080h and 0150h worked ok.  (These are not optimal values, I just chose them at 'random'; i.e., you can probably lower the second number also.)  Basically, the bigger the number, the longer the delay.  Faster machines need bigger numbers.

To change the values, execute the following commands from a DOS prompt:
(Yes, this seems lengthy, but it's really a simple process...)

Type:  debug DL2v2_K_1450.com  (press enter)  -  Substitute DL2v2_K_1450.com with the filename you are using.
               The system will respond with a '-' character.
Type:  a b001  (press enter)
               The system will respond with xxxx:b001
Type:  mov cx,0080  (press enter)  -  Substitute 0080 with the delay value you want.
               The system will respond with xxxx:b004
Press enter.
               The system will respond with a '-' character.
Type:  a b031  (press enter)
               The system will respond with xxxx:b031
Type:  mov cx,0150  (press enter)  -  This is the second delay value mentioned above.
               The system will respond with xxxx:b034
Press enter.
               The system will respond with a '-' character.
Type:  w  (press enter)  -  This writes the changes to disk.
Type:  q  (press enter)  -  This quits the debug program.

You did remember to make a backup copy of the file before you changed it, right?

Q: So what happens if I put in numbers that are too big?
A: Searches are slow, and the keyboard/joystick input seems sluggish.

Q: And if the numbers are too small?
A: Searches won't complete, or the program will reboot itself constantly.  If the delay time is only slightly too small, the game may play, but occasionally 'freeze' at a random spot.

I WANT TO CHEAT

Well, I was going to build a cheat mode into the ROM image and enable it with a keyboard key, but I really feel that this takes all the fun out of the game...  So, if you want the cheat mode, you're going to have to do a little work.  It's similar to the delay tweaking procedure above.  Keep in mind, that once you edit the ROM image, it stays changed.  Make sure you have a backup copy.

From a DOS prompt:

debug DL2v2_K_1450.com  (press enter)  -  Substitute the filename you are using.
a 2a76  (press enter)
nop  (press enter)
nop  (press enter)
nop  (press enter)
nop  (press enter)
(press enter)
w  (press enter)
q  (press enter)

KNOWN PROBLEMS

DISCLAIMER

The above is believed to be correct and works fine for the author.  No one is forcing you to do this.  If you break your game, it's your fault!

QUESTIONS? COMMENTS? PROBLEMS?
Contact Us

HOME | LASER GAMES | LASER COMMUNITY | TECH CENTER

This website was created by
Jeff Kinder & Dave Hallock, 1997 - 2024.
All trademarks and copyrighted materials are property of their respective owners.