The Amiga version is the fastest one due to the presence of the built-in blitter chip that accelerates graphics operations.
Known versions:
Note: in the Dungeon Master demo version 2.0, the Shift + arrow keys for Move/Turn are swapped. Keep Caps lock off to play the demo with the keyboard.
Dungeon Master for Atari ST version 1.2 (English), cracked, hacked and ported to Amiga by Meynaf
Updated version 2006-02-14:
There are also programs that allow running some game versions from a hard disk:
Hard disk patches for Dungeon Master and Chaos Strikes Back from Aminet: In the directory “game/patch” of Aminet, there are two hard disk patches for Dungeon Master (dmpatch.lzh, dmhd.lha for version 3.6)
WHDLoad patch for Dungeon Master
Yet another hard disk patch for Dungeon Master
Compatibility with Amiga 1200
Dungeon Master for Amiga version 2.x was designed for Kickstart ROM version 1.2 or 1.3, found in Amiga 2000 and Amiga 500.
The game may not load on Amiga 1200 or 4000 computers because they contain a Kickstart ROM version 3.x.
Possible workarounds:
See also: How to play Amiga games under Windows? (Dungeon Master, Chaos Strikes Back and Dungeon Master II)
This section details how to crack Dungeon Master for Amiga version 2.0 French. This nice work was done by Meynaf in his spare time between October 2003 and January 2004). It helps in understanding the protection mechanisms and how to bypass them. Maybe people inspired by this crack will be able to crack other versions.
Meynaf also cracked Dungeon Master for Atari ST and ported it to Amiga. He also cracked Chaos Strikes Back for Amiga and made it playable from hard disk. You can also download the Chaos Strikes Back for Atari ST version 2.1 assembler source code on Chaos Strikes Back for Atari ST. It is the disassembled source code of the original game (non cracked). People can study it if they want.
In the csb.s file, the following labels mark the checksum functions used by the copy protection: u3048, vcfae, w17ea. The last one is called from two places in the code. The save game routine has 3 out of the 4 checksums in the game, the programmers really did not want it to be modified as it contains a copy protection check.
Offset in file "DM" | Replace XX By YY | Notes |
---|---|---|
22DD0 | 4E55 0000: In C language code, all functions start with 4E55 followed by 0000 or a negative value. This is a LINK instruction to create the stack frame. 7000 4E75: 70xx is moveq #val,D0, that means put the value in D0 register. 4E75 is a RTS (a return). So this returns the value 0. | First protection read After that the program runs until the presentation it switches on the floppy disk. The original function directly accesses the floppy drive controller hardware and returns 0 if everything went fine, or stops the program if a copy is detected. This function is replaced by a simple "return 0" to bypass the test. |
165F4 | 66: Conditional Branch 60: Unconditional Branch | Checksum |
17976 | 66: Conditional Branch 60: Unconditional Branch | Checksum |
18BE4 | 66: Conditional Branch 60: Unconditional Branch | Checksum |
1A29C | 6600 00A8: Conditional Branch 4E71 4E71: NOP NOP (no operation) | Checksum |
1275A | 4E55: LINK instruction to create the stack frame. 4E75: RTS (just a return) | Hidden routine The function that uses the graphic items as hidden protections is nearly identical, so it is easy to find. |
ACBC | 6606: bne (Conditional Branch on code at +$06) 6010: Unconditional Branch | A test that can display the "System error 60" message |
1906C | 63: Conditional Branch 60: Unconditional Branch | A test that can display the "System error 60" message |
1964E | 4267 4878 6000 0290 | Save game function |
Note: Three of the four checksums are performed on the save game function.
assign DungeonMaster: ""
Other versions of the game require similar changes, but it is not very easy to find the offsets where you need to change some bytes.
You need a good debugger (like devpac), try to find all abnormal disk accesses and neutralize them with NOP or RTS instructions.
You can search for disk access routines by looking for floppy disk controller address FF8600 on Atari ST and address BFD100 on Amiga.
Often conditional branches (6x codes) are replaced by unconditional branches (code 60, BRA). For example, after computing a checksum, the program branches depending on the value of the checksum. Replacing the conditional branch by an unconditional branch can bypass the checksum test.
You also need to find all the checksums in the code and neutralize them.
To find the code for checksums, you have to search for “ADD.W (A?)+”. One of the checksums is used on the dungeon.dat file so it can be ignored for the crack. For the others, you need to find which functions calls the checksum functions and which results they are looking for. Then you can neutralize the checksums by always giving the calling functions the results they want.
There is a word value “0C91” stored in binary item #558 in graphics.dat at offset 3234 which is used by the copy protection. In the program, a variable is compared to that value. Other values are written in the variable in case the protection fails which seem to cause the animation freeze. The variable is initialized with that value from the graphics.dat file.
To find the protections, some numerical constants are useful to search: 4ef9, 103e3, 88, 31e9, 22b, 459, c91, 1f4.
Some of them (88, 31e9, 22b, 459, c91) are arbitrary values only used to store the result of protection checks. Others (103e3, 1f4) are counter values: after these numbers of clock ticks, the game stops.
The 4ef9 value is the binary code for the JMP instruction. It is used by the checksum functions to ensure that they are working on the correct code. At the beginning of the program, there is a large list of JMP instructions that jump to various functions in the code. The checksum functions compare the first word of data of the function they have to check with the JMP code (4ef9) to ensure they are working on the function’s real code and not the JMP table at the beginning of the program.
These values seem to be identical in all versions, some of them can be found in Chaos Strikes Back for Windows.