Stunts Forum

Stunts - the Game => Stunts Reverse Engineering => Topic started by: llm on June 04, 2021, 12:02:52 PM

Title: MT15.DRV reverse engineering project
Post by: llm on June 04, 2021, 12:02:52 PM
my MT15.DRV reverse engineering project goes very well - when i find free time to work on it :)

DONE:

i've found some functions that are not in use (dead code) in both drv versions, and init data that is also not used
its very relevant for the C port to test these "cleaned-up" versions if there is anything strange happen (both work on my side so far)

attached are the re-assembled versions without the dead code/data stuff
anyone interested in testing?

NEXT:

im using Dosbox Staging for testing - the lastest development version integrates the MT32 stuff so its easier to get it going
download the alpha here if you got a github account: https://dosbox-staging.github.io/downloads/devel/ (clicks windows link and the the bottom dosbox-staging-windows-x64-v0.77.0-alpha-856-g2e93f file)
 
your dosbox staging config should then contain

[midi]
mididevice=mt32

[mt32]
romdir=rom-dir #  use the mame roms
model=mt32_old # for original stunts release version of MT32
#model=cm32l_102 # or the new one
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 06, 2021, 09:53:22 AM
interestingly i find many small dead code parts in the MT15.DRV - sometimes parts of functions or complete functions that are not in use in the newer or not used in both versions - does not speak for the review quality of that time :)

for example a counter in one of the primary sub-functions - responsible to transfer data bytes to the MPU401
- the complete cx  register based/using code is just not used - a jump skips that part completely

it seemd first had a max try count of 65535 and then then the code for the try-count was disabled - leaving you waiting forever if the hardware does not
return the wanted feedback

someone able to confirm that?


this is the hex-code for the complete function from stunts 1 driver (the 1.1 driver is identical)
Code: [Select]
51 52 50 BA 31 03 B9 FF FF EC A8 40 74 13 D0 C0 73 1A EB EF 49 83 F9 01 7D EF 58
B8 FF FF EB 09 90 BA 30 03 58 EE B8 00 00 5A 59 C3 56 2E 8B 36 72 01 BA 30 03 EC
2E 88 84 4A 01 46 83 FE 28 75 02 33 F6 2E 89 36 72 01 5E EB B8

disassembled in shell-storm online, or ndisasm from nasm or IDA/Gidra with code starting at offset 0

http://shell-storm.org/online/Online-Assembler-and-Disassembler/?opcodes=51+52+50+BA+31+03+B9+FF+FF+EC+A8+40+74+13+D0+C0+73+1A+EB+EF+49+83+F9+01+7D+EF+58+B8+FF+FF+EB+09+90+BA+30+03+58+EE+B8+00+00+5A+59+C3+56+2E+8B+36+72+01+BA+30+03+EC+2E+88+84+4A+01+46+83+FE+28+75+02+33+F6+2E+89+36+72+01+5E+EB+B8&arch=x86-16&endianness=little&dis_with_addr=True&dis_with_raw=True&dis_with_ins=True#disassembly]http://shell-storm.org/online/Online-Assembler-and-Disassembler/?opcodes=51+52+50+BA+31+03+B9+FF+FF+EC+A8+40+74+13+D0+C0+73+1A+EB+EF+49+83+F9+01+7D+EF+58+B8+FF+FF+EB+09+90+BA+30+03+58+EE+B8+00+00+5A+59+C3+56+2E+8B+36+72+01+BA+30+03+EC+2E+88+84+4A+01+46+83+FE+28+75+02+33+F6+2E+89+36+72+01+5E+EB+B8&arch=x86-16&endianness=little&dis_with_addr=True&dis_with_raw=True&dis_with_ins=True#disassembly]http://shell-storm.org/online/Online-Assembler-and-Disassembler/?opcodes=51+52+50+BA+31+03+B9+FF+FF+EC+A8+40+74+13+D0+C0+73+1A+EB+EF+49+83+F9+01+7D+EF+58+B8+FF+FF+EB+09+90+BA+30+03+58+EE+B8+00+00+5A+59+C3+56+2E+8B+36+72+01+BA+30+03+EC+2E+88+84+4A+01+46+83+FE+28+75+02+33+F6+2E+89+36+72+01+5E+EB+B8&arch=x86-16&endianness=little&dis_with_addr=True&dis_with_raw=True&dis_with_ins=True#disassembly (http://shell-storm.org/online/Online-Assembler-and-Disassembler/?opcodes=51+52+50+BA+31+03+B9+FF+FF+EC+A8+40+74+13+D0+C0+73+1A+EB+EF+49+83+F9+01+7D+EF+58+B8+FF+FF+EB+09+90+BA+30+03+58+EE+B8+00+00+5A+59+C3+56+2E+8B+36+72+01+BA+30+03+EC+2E+88+84+4A+01+46+83+FE+28+75+02+33+F6+2E+89+36+72+01+5E+EB+B8&arch=x86-16&endianness=little&dis_with_addr=True&dis_with_raw=True&dis_with_ins=True#disassembly))

disassembler gives following result:

Code: [Select]
0x0000000000000000:  51                push cx
0x0000000000000001:  52                push dx
0x0000000000000002:  50                push ax
0x0000000000000003:  BA 31 03          mov  dx, 0x331
0x0000000000000006:  B9 FF FF          mov  cx, 0xffff
0x0000000000000009:  EC                in   al, dx
0x000000000000000a:  A8 40             test al, 0x40
0x000000000000000c:  74 13             je   0x21
0x000000000000000e:  D0 C0             rol  al, 1
0x0000000000000010:  73 1A             jae  0x2c
0x0000000000000012:  EB EF             jmp  3
0x0000000000000014:  49                dec  cx
0x0000000000000015:  83 F9 01          cmp  cx, 1
0x0000000000000018:  7D EF             jge  9
0x000000000000001a:  58                pop  ax
0x000000000000001b:  B8 FF FF          mov  ax, 0xffff
0x000000000000001e:  EB 09             jmp  0x29
0x0000000000000020:  90                nop 
0x0000000000000021:  BA 30 03          mov  dx, 0x330
0x0000000000000024:  58                pop  ax
0x0000000000000025:  EE                out  dx, al
0x0000000000000026:  B8 00 00          mov  ax, 0
0x0000000000000029:  5A                pop  dx
0x000000000000002a:  59                pop  cx
0x000000000000002b:  C3                ret 
0x000000000000002c:  56                push si
0x000000000000002d:  2E 8B 36 72 01    mov  si, word ptr cs:[0x172]
0x0000000000000032:  BA 30 03          mov  dx, 0x330
0x0000000000000035:  EC                in   al, dx
0x0000000000000036:  2E 88 84 4A 01    mov  byte ptr cs:[si + 0x14a], al
0x000000000000003b:  46                inc  si
0x000000000000003c:  83 FE 28          cmp  si, 0x28
0x000000000000003f:  75 02             jne  0x43
0x0000000000000041:  33 F6             xor  si, si
0x0000000000000043:  2E 89 36 72 01    mov  word ptr cs:[0x172], si
0x0000000000000048:  5E                pop  si
0x0000000000000049:  EB B8             jmp  3

my IDA Pro makes it more beautiful :)

Code: [Select]
; __int16 __usercall isub2<ax>(__int8 mpu_command_@<al>)
isub2 proc near
push cx
push dx
push ax

isub2_0:
mov dx, 331h
mov cx, 0FFFFh ; <==== NOT IN USE DUE TO DEAD CODE

isub2_1:
in al, dx

test al, 40h
jz short isub2_2

    rol al, 1
jnb short isub2_4
   
jmp short isub2_0

; <==== THIS IS DEAD CODE (due to the jump before)

dec cx
cmp cx, 1
jge short isub2_1
   
pop ax
mov ax, 0FFFFh
jmp short isub2_3

nop
<===== UNTIL HERE

isub2_2:
mov dx, 330h
pop ax
out dx, al
mov ax, 0

isub2_3: ; <=== UNUSED LABLE DUE TO DEAD CODE
pop dx
pop cx
retn
; ---------------------------------------------------------------------------

isub2_4:
push si
mov si, cs:word_172
mov dx, 330h
in al, dx
mov cs:byte_14A[si], al
inc si
cmp si, lengthof byte_14A
jnz short isub2_5
xor si, si

isub2_5:
mov cs:word_172, si
pop si
jmp short isub2_0
isub2 endp

Gihdra just ignores the dead code parts and shows only question marks for the bytes

that is the C port of that code - dead-code already removed

Code: [Select]
#define MPU_401_BASE 0x330
#define MPU_401_DATA (MPU_401_BASE+0)
#define MPU_401_STATUS_AND_COMMAND (MPU_401_BASE+1) // write => COMMAND-Port, read => STATUS-Port

#define MPU_401_OUTPUT_READY 0x40 // bit 6
#define MPU_401_INPUT_AVAIL 0x80 // bit 7

static uint16_t word_172;
static uint8_t byte_14A[40];

static inline uint16_t isub2(const uint8_t mpu_command_)
{
  for(;;)
  {
    const uint8_t val = inb(MPU_401_STATUS_AND_COMMAND);
   
    // is command send allowed?
    if( ( val & MPU_401_OUTPUT_READY ) == 0 )
    {
      break;
    }   
   
    // still data waiting?
    if( ( val & MPU_401_INPUT_AVAIL ) == 0 )
    {
      byte_14A[word_172++] = inb(MPU_401_DATA);
      if( word_172 == sizeof(byte_14A))
      {
        word_172 = 0;
      }
    }   
  }
 
  outb( MPU_401_DATA, mpu_command_ );
  return 0;
}
Title: Re: MT15.DRV reverse engineering project
Post by: Duplode on June 06, 2021, 04:46:37 PM
anyone interested in testing?

I have done some quick testing with the reassembled drivers in the first post with 1991 Stunts, and didn't notice any difference so far. In particular, the 1.1 driver remains obviously buggy, and with the 1.0 driver the issue of missing sound effects after loading a replay from the pause menu also remains. Later I will replace the driver in my main Stunts setup when I start racing in Z239, and will also do some tests with 1990 4D.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 06, 2021, 04:58:16 PM
thanks for testing, i think there will be some releases but better small changes then bigger that makes it hard to understand what of my changes introducing new bugs

In particular, the 1.1 driver remains obviously buggy, and with the 1.0 driver the issue of missing sound effects after loading a replay from the pause menu also remains.

so there are two bugs? never heard of the replay sound bug
is there a list of bugs in the MT15 driver and versions?

hope that the much simpler C code will let us do a bugfree version of the driver
Title: Re: MT15.DRV reverse engineering project
Post by: Duplode on June 06, 2021, 05:38:20 PM
so there are two bugs? never heard of the replay sound bug
is there a list of bugs in the MT15 driver and versions?

I should note that one is not specifically a MT15 bug; in my experience, it happens with all drivers. (That is unlike, say, the 1990 4D issue I had mentioned in the other thread (http://forum.stunts.hu/index.php?topic=2757.msg78946#msg78946), an that I'll try to reproduce later.)
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 06, 2021, 06:42:59 PM
your link does not work, post action inlined in url, but i know the post

does that also happen to dosbox staging or a real MT32?
Title: Re: MT15.DRV reverse engineering project
Post by: Duplode on June 07, 2021, 02:02:23 AM
Link (http://forum.stunts.hu/index.php?topic=2757.msg78946#msg78946) fixed, thanks.

does that also happen to dosbox staging or a real MT32?

I have seen those issues on vanilla DosBox + munt, dosbox-staging + munt and, as you suggested, standalone dosbox-staging. No idea about a real MT32, unfortunately.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 07, 2021, 07:12:44 AM
We should ask on vogons if there is someone who can test the know bugs on a real DOS/MT32? also recording would be great
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 09, 2021, 08:48:59 AM
another finding:

stunts 1.1 + 1.1 DRV sends sometimes wrong MT32 sysex messages for some "Patch Temporary Area" and "BENDER RANGE" value

Code: [Select]
F0 41 10 16 12 03 00          F7  <-- Incomplete message
F0 41 10 16 12 03 00 04 18 61 F7  Patch Temporary Area (part 1), BENDER RANGE =  24
F0 41 10 16 12 03 00 14 00 69 F7  Patch Temporary Area (part 2), BENDER RANGE =   0
F0 41 10 16 12 03 00 24 00 59 F7  Patch Temporary Area (part 3), BENDER RANGE =   0
F0 41 10 16 12 03 00 34 00 49 F7  Patch Temporary Area (part 4), BENDER RANGE =   0
F0 41 10 16 12 03 00 44 00 39 F7  Patch Temporary Area (part 5), BENDER RANGE =   0
F0 41 10 16 12 03 00 44 02 37 F7  Patch Temporary Area (part 5), BENDER RANGE =   2
F0 41 10 16 12 03 00 54 00 29 F7  Patch Temporary Area (part 6), BENDER RANGE =   0
F0 41 10 16 12 03 00 54(70)39 F7  Patch Temporary Area (part 6), BENDER RANGE = 112 <-- This is not a valid setting
F0 41 10 16 12 03 00 64 00 19 F7  Patch Temporary Area (part 7), BENDER RANGE =   0
F0 41 10 16 12 03 00 74 02 07 F7  Patch Temporary Area (part 8), BENDER RANGE =   2

the first message gets ignored by the MT32 due to checksum error and the invalid value 112 for the bender-range gets clamped to 24 by the MT32

stunts 1.1 + 1.0 DRV does not contain the code to send these sysex messages
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 09, 2021, 09:18:38 AM
these are sysex midi messages from a listen-to-some-music-gameplay - while tracing messages :)

Code: [Select]
Patch Temp Area/Bender range
F0 41 10 16 12 03 00 04 18 61 F7
F0 41 10 16 12 03 00 14 00 69 F7
F0 41 10 16 12 03 00 14 18 51 F7
F0 41 10 16 12 03 00 24 00 59 F7
F0 41 10 16 12 03 00 34 00 49 F7
F0 41 10 16 12 03 00 44 00 39 F7
F0 41 10 16 12 03 00 44 02 37 F7
F0 41 10 16 12 03 00 54 02 27 F7
F0 41 10 16 12 03 00 54 70 39 F7 # <-- 0x00-0x18 is allowed range, 0x70 gets clamped to 0x18 [Patch Temporary Area (part 6), BENDER RANGE = 112]
F0 41 10 16 12 03 00 74 02 07 F7
F0 41 10 16 12 03 00 F7 # <-- illformed, wrong checksum

Patch Memory, full, from MT32.PLB
F0 41 10 16 12 05 00 00 02 00 18 32 18 00 00 00 17 F7
F0 41 10 16 12 05 00 08 02 01 18 32 0C 00 01 00 19 F7
F0 41 10 16 12 05 00 10 02 02 18 32 0C 00 01 00 10 F7
F0 41 10 16 12 05 00 18 02 03 18 32 0C 00 01 00 07 F7
F0 41 10 16 12 05 00 20 02 04 18 32 0C 00 01 00 7E F7

Timbre Memory, full, from MT32.PLB
F0 41 10 16 12 08 00 00 45 6E 67 69 6E 65 20 31 20 20 07 05 0F 00 17 15 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 17 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 18 32 0B 01 01 35 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 00 00 0B 01 01 2B 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 53 F7
F0 41 10 16 12 08 02 00 53 71 75 65 65 6C 20 20 20 20 00 08 0F 00 24 19 0B 01 00 25 64 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 24 56 0B 01 00 25 58 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 13 0B 0B 01 01 35 25 07 00 00 00 00 00 00 00 00 4E 4E 4E 00 32 64 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 02 00 00 00 64 63 00 64 07 5E 0B 01 00 35 64 07 00 00 00 00 00 00 00 00 50 50 51 00 21 64 00 1C 1E 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 3C F7
F0 41 10 16 12 08 04 00 44 61 6D 61 67 65 20 20 20 20 05 05 0F 00 15 00 0F 00 00 12 42 00 04 00 00 14 1E 00 00 00 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 0E 00 46 00 0A 00 61 00 00 09 00 0F 00 00 13 41 00 04 00 00 14 14 00 00 64 50 00 00 00 0A 1E 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 13 11 3B 37 00 00 63 2D 04 12 00 0F 00 00 18 41 04 08 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 00 41 1D 0E 00 5E 17 03 14 00 0F 00 00 53 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 32 33 50 0C 53 64 2D 00 44 F7
F0 41 10 16 12 08 06 00 4D 65 74 61 6C 43 6C 61 6E 6B 08 09 03 00 05 00 0F 00 00 45 41 00 03 00 00 14 1E 00 00 31 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 3F 3D 00 0A 62 00 00 00 0D 00 0F 00 01 58 41 00 04 00 00 3D 00 00 00 31 2F 00 00 00 18 0D 05 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 0C 04 2A 64 00 00 00 24 00 0F 00 00 18 41 04 05 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 40 06 17 1D 64 00 00 00 36 00 0F 00 00 53 41 00 02 00 00 0A 0A 00 00 64 50 32 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 00 26 2C 64 00 00 00 04 F7
F0 41 10 16 12 08 08 00 45 6E 67 69 6E 65 20 31 20 20 02 02 0F 00 24 32 0B 01 00 53 64 0E 00 00 00 37 2D 2D 23 0A 32 46 46 14 13 64 10 22 00 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0D 32 40 0C 00 0C 00 00 05 00 00 00 13 64 64 64 64 18 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 16 32 0B 01 01 58 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0E 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 0C 36 0B 01 00 00 32 07 02 00 00 37 28 32 23 32 32 37 40 14 0D 10 10 38 12 0B 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 23 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 29 F7

System Area/Master volume (these messages just set volume between 0-100)
F0 41 10 16 12 10 00 16 00 5A F7
F0 41 10 16 12 10 00 16 02 58 F7
F0 41 10 16 12 10 00 16 04 56 F7
F0 41 10 16 12 10 00 16 06 54 F7
F0 41 10 16 12 10 00 16 08 52 F7
F0 41 10 16 12 10 00 16 0A 50 F7
F0 41 10 16 12 10 00 16 0C 4E F7
F0 41 10 16 12 10 00 16 0E 4C F7
F0 41 10 16 12 10 00 16 10 4A F7
F0 41 10 16 12 10 00 16 12 48 F7
F0 41 10 16 12 10 00 16 14 46 F7
F0 41 10 16 12 10 00 16 16 44 F7
F0 41 10 16 12 10 00 16 18 42 F7
F0 41 10 16 12 10 00 16 1A 40 F7
F0 41 10 16 12 10 00 16 1C 3E F7
F0 41 10 16 12 10 00 16 1E 3C F7
F0 41 10 16 12 10 00 16 20 3A F7
F0 41 10 16 12 10 00 16 22 38 F7
F0 41 10 16 12 10 00 16 24 36 F7
F0 41 10 16 12 10 00 16 26 34 F7
F0 41 10 16 12 10 00 16 28 32 F7
F0 41 10 16 12 10 00 16 2A 30 F7
F0 41 10 16 12 10 00 16 2C 2E F7
F0 41 10 16 12 10 00 16 2E 2C F7
F0 41 10 16 12 10 00 16 30 2A F7
F0 41 10 16 12 10 00 16 32 28 F7
F0 41 10 16 12 10 00 16 34 26 F7
F0 41 10 16 12 10 00 16 36 24 F7
F0 41 10 16 12 10 00 16 38 22 F7
F0 41 10 16 12 10 00 16 3A 20 F7
F0 41 10 16 12 10 00 16 3C 1E F7
F0 41 10 16 12 10 00 16 3E 1C F7
F0 41 10 16 12 10 00 16 40 1A F7
F0 41 10 16 12 10 00 16 42 18 F7
F0 41 10 16 12 10 00 16 44 16 F7
F0 41 10 16 12 10 00 16 46 14 F7
F0 41 10 16 12 10 00 16 48 12 F7
F0 41 10 16 12 10 00 16 4A 10 F7
F0 41 10 16 12 10 00 16 4C 0E F7
F0 41 10 16 12 10 00 16 4E 0C F7
F0 41 10 16 12 10 00 16 50 0A F7
F0 41 10 16 12 10 00 16 52 08 F7
F0 41 10 16 12 10 00 16 54 06 F7
F0 41 10 16 12 10 00 16 56 04 F7
F0 41 10 16 12 10 00 16 58 02 F7
F0 41 10 16 12 10 00 16 5A 00 F7
F0 41 10 16 12 10 00 16 5C 7E F7
F0 41 10 16 12 10 00 16 5E 7C F7
F0 41 10 16 12 10 00 16 60 7A F7
F0 41 10 16 12 10 00 16 62 78 F7
F0 41 10 16 12 10 00 16 64 76 F7

LCD text
F0 41 10 16 12 20 00 00 20 20 28 43 29 31 39 39 30 2C 31 39 39 31 20 44 53 49 20 20 79 F7

and the "Timbre Memory" and "Patch Memory" bytes directly comming from the MT32.PLB - seems to be sound effects for the engine, crash etc.

Code: [Select]
Sysex messages

F0 41 10 16 12 08 00 00   45 6E 67 69 6E 65 20 31 20 20 07 05 0F 00 17 15 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 17 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 18 32 0B 01 01 35 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 00 00 0B 01 01 2B 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64   53 F7
F0 41 10 16 12 08 02 00   53 71 75 65 65 6C 20 20 20 20 00 08 0F 00 24 19 0B 01 00 25 64 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 24 56 0B 01 00 25 58 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 13 0B 0B 01 01 35 25 07 00 00 00 00 00 00 00 00 4E 4E 4E 00 32 64 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 02 00 00 00 64 63 00 64 07 5E 0B 01 00 35 64 07 00 00 00 00 00 00 00 00 50 50 51 00 21 64 00 1C 1E 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63   3C F7
F0 41 10 16 12 08 04 00   44 61 6D 61 67 65 20 20 20 20 05 05 0F 00 15 00 0F 00 00 12 42 00 04 00 00 14 1E 00 00 00 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 0E 00 46 00 0A 00 61 00 00 09 00 0F 00 00 13 41 00 04 00 00 14 14 00 00 64 50 00 00 00 0A 1E 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 13 11 3B 37 00 00 63 2D 04 12 00 0F 00 00 18 41 04 08 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 00 41 1D 0E 00 5E 17 03 14 00 0F 00 00 53 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 32 33 50 0C 53 64 2D 00   44 F7
F0 41 10 16 12 08 06 00   4D 65 74 61 6C 43 6C 61 6E 6B 08 09 03 00 05 00 0F 00 00 45 41 00 03 00 00 14 1E 00 00 31 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 3F 3D 00 0A 62 00 00 00 0D 00 0F 00 01 58 41 00 04 00 00 3D 00 00 00 31 2F 00 00 00 18 0D 05 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 0C 04 2A 64 00 00 00 24 00 0F 00 00 18 41 04 05 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 40 06 17 1D 64 00 00 00 36 00 0F 00 00 53 41 00 02 00 00 0A 0A 00 00 64 50 32 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 00 26 2C 64 00 00 00   04 F7
F0 41 10 16 12 08 08 00   45 6E 67 69 6E 65 20 31 20 20 02 02 0F 00 24 32 0B 01 00 53 64 0E 00 00 00 37 2D 2D 23 0A 32 46 46 14 13 64 10 22 00 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0D 32 40 0C 00 0C 00 00 05 00 00 00 13 64 64 64 64 18 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 16 32 0B 01 01 58 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0E 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 0C 36 0B 01 00 00 32 07 02 00 00 37 28 32 23 32 32 37 40 14 0D 10 10 38 12 0B 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 23 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64   29 F7

MT32.PLB content

05 -> 5 sounds
02 00 18 32 18 00 00 00   45 6E 67 69 6E 65 20 31 20 20 07 05 0F 00 17 15 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 17 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 18 32 0B 01 01 35 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 00 00 0B 01 01 2B 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64  ...2....Engine 1  ..........5....7(2#.2FF....#..i.7....*.d2ddddd2[..........dddd.L....5....7(2#.2FF....#..i.7....*.d2ddddd2[..........dddd.2...5%....7--#.2FF....9..i.7....*,d2ddddd2[..........ddcd.....+5....7(2#.2FF....#..i.7....*.d2ddddd2[..........dddd
02 01 18 32 0C 00 01 00   53 71 75 65 65 6C 20 20 20 20 00 08 0F 00 24 19 0B 01 00 25 64 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 24 56 0B 01 00 25 58 07 00 00 00 00 06 00 00 00 64 64 64 00 48 64 00 03 1E 09 69 07 64 00 00 00 00 00 00 00 00 64 64 64 64 32 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63 13 0B 0B 01 01 35 25 07 00 00 00 00 00 00 00 00 4E 4E 4E 00 32 64 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 02 00 00 00 64 63 00 64 07 5E 0B 01 00 35 64 07 00 00 00 00 00 00 00 00 50 50 51 00 21 64 00 1C 1E 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 46 64 5B 0C 1B 0C 00 00 05 00 00 00 00 64 63 00 63  ...2....Squeel    ....$....%d.........ddd.Hd....i.d........dddd2d[..........dc.c$V...%X.........ddd.Hd....i.d........dddd2d[..........dc.c.....5%.........NNN.2d.9..i.7....*,d2ddddFd[..........dc.d.^...5d.........PPQ.!d....i.7....*,d2ddddFd[..........dc.c
02 02 18 32 0C 00 01 00   44 61 6D 61 67 65 20 20 20 20 05 05 0F 00 15 00 0F 00 00 12 42 00 04 00 00 14 1E 00 00 00 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 0E 00 46 00 0A 00 61 00 00 09 00 0F 00 00 13 41 00 04 00 00 14 14 00 00 64 50 00 00 00 0A 1E 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 13 11 3B 37 00 00 63 2D 04 12 00 0F 00 00 18 41 04 08 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 00 41 1D 0E 00 5E 17 03 14 00 0F 00 00 53 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 32 33 50 0C 53 64 2D 00  ...2....Damage    ..........B..........(.....d.................dL........F...a........A........dP......d.................dL........;7..c-.......A....L...4.......d.................dL........A...^.......SA................d.................dL.......23P.Sd-.
02 03 18 32 0C 00 01 00   4D 65 74 61 6C 43 6C 61 6E 6B 08 09 03 00 05 00 0F 00 00 45 41 00 03 00 00 14 1E 00 00 31 14 28 00 00 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 3F 3D 00 0A 62 00 00 00 0D 00 0F 00 01 58 41 00 04 00 00 3D 00 00 00 31 2F 00 00 00 18 0D 05 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 0C 04 2A 64 00 00 00 24 00 0F 00 00 18 41 04 05 00 00 4C 17 13 0A 34 00 00 00 11 05 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 40 06 17 1D 64 00 00 00 36 00 0F 00 00 53 41 00 02 00 00 0A 0A 00 00 64 50 32 00 00 00 00 00 64 00 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 4C 00 00 00 00 00 00 00 39 00 26 2C 64 00 00 00  ...2....MetalClank.........EA........1.(.....d.................dL.......?=..b........XA....=...1/......d.................dL.......9..*d...$.....A....L...4.......d.................dL.......@...d...6....SA........dP2.....d.................dL.......9.&,d...
02 04 18 32 0C 00 01 00   45 6E 67 69 6E 65 20 31 20 20 02 02 0F 00 24 32 0B 01 00 53 64 0E 00 00 00 37 2D 2D 23 0A 32 46 46 14 13 64 10 22 00 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0D 32 40 0C 00 0C 00 00 05 00 00 00 13 64 64 64 64 18 4C 0B 01 01 00 35 07 00 00 00 37 28 32 23 0A 32 46 46 14 0D 10 10 23 14 09 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 64 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64 16 32 0B 01 01 58 25 07 00 00 00 37 2D 2D 23 0A 32 46 46 14 0C 00 10 39 14 09 69 07 37 00 00 00 00 2A 2C 64 32 64 64 64 64 0E 32 5B 0C 1B 0C 00 00 05 00 00 00 1D 64 64 63 64 0C 36 0B 01 00 00 32 07 02 00 00 37 28 32 23 32 32 37 40 14 0D 10 10 38 12 0B 69 07 37 00 00 00 00 2A 2E 64 32 64 64 64 64 23 32 5B 0C 1B 0C 00 00 05 00 00 00 19 64 64 64 64  ...2....Engine 1  ....$2...Sd....7--#.2FF..d."..i.7....*,d2dddd.2@..........dddd.L....5....7(2#.2FF....#..i.7....*.d2ddddd2[..........dddd.2...X%....7--#.2FF....9..i.7....*,d2dddd.2[..........ddcd.6....2....7(2#227@....8..i.7....*.d2dddd#2[..........dddd
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 10, 2021, 08:19:11 AM
so i think im fully aware of the System exclusive (sysex) message that are used/generated by Stunts - now i need to look at the ordinary midi messages

and then back to porting
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 10, 2021, 09:16:49 AM
anyone got a nice c/cpp example for playing midi under dosbox, all the old samples i've tried do just nothing :/
Title: Re: MT15.DRV reverse engineering project
Post by: Cas on June 10, 2021, 07:43:43 PM
Somewhere... but it will take me quite some time to find... I had code I downloaded once for DOS that could play CMF files. These files contain MIDI, only they use OPL2 FM instruments, but the procedure is pretty much the same. I have a "driver" that came with the SBPro/SB16 called SBFMDRV.COM, that assisted in playing those files too. That one is easy to provide, but reading it would mean disassembling. It's not long, though. But the code I mentioned did this without using SBFMDRV. It was in QuickBasic. Easy to read. If you're interested, I can look it up in the mess I have.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 10, 2021, 11:14:33 PM
A simple c/cpp code would be best, qbasic would be problematic under pure dosbox without the interpreter, i just want some reference for midi playing
Title: First release of the assembler based unified (1.0 and 1.1 together) MT15-Driver
Post by: llm on June 11, 2021, 07:47:27 PM
better documented and combined assembler code (https://pastebin.ubuntu.com/p/6MHxkS8tbf/) of the Stunts 1.0 and 1.1 MT15.DRV - ready to reassembled - same binary as original but with fresher bits :)
next step is the C Port

1. Download the 7z
2. Install the needed tools (Win64 currently) - its easy, see: \tools\install_howto.txt - you need at least uasm, ulink and watcom (for later C source)
3. run \stunts_drvs\unified_MT15\build.cmd (and the resulting files are compared against the original drivers)
4. find 100% identical version 1.0 and 1.1 in DRV in _build\unified_MT15\10 or 11

should looks likes this on console output:

https://pasteboard.co/K6dGjHF.png

what the 7z contains:

Code: [Select]
\stunts_drvs\setup_env.cmd <-- helper to find the tools (not for direct use)

\stunts_drvs\unified_MT15\build.cmd <-- builds Version 1.0 and 1.1 of the MT15.DRV <- this is the one you want to run
\stunts_drvs\unified_MT15\build_helper.cmd  <-- build-helper (not for direct use)
\stunts_drvs\unified_MT15\MT15.asm <-- the combined 1.0 and 1.1 MT15.DRV source code

\stunts_drvs\unified_MT15\org\10\MT15.DRV <-- original 1.0 MT15.DRV - used for compare the result
\stunts_drvs\unified_MT15\org\11\MT15.DRV <-- original 1.1 MT15.DRV - used for compare the result

\tools\ <-- here do you need to copy the needed tools
\tools\install_howto.txt <-- what is needed to get the tools
\tools\result_tree.txt <-- how should the tree look like after installation
Title: First release with all internal isub-functions ported zu C
Post by: llm on June 13, 2021, 09:16:50 AM
there are isub-Functions (internal helper functions) that all get multiple called from the pluing-interface functions - i've ported all the isub functions to C now!
these are the mostly used functions - this is a big step for the C port, now i need others to re-check the behavior

attached are the version 1.0 and 1.1 binaries partially based on C-code (will release the source later when its clean)

i've compared mine and the original and they seems to be identical
bugs could be: it would sound strange (like a very slow free style jazz session for example), do just nothing, hangs, hickups, or too fast or slow or just crazy - that is all i've  heard while porting :)

can someone re-check the sound/music behavior compared to the originals? Im looking at you, Duplode :)

i don't know which wild stunts 1.0/1.1 + my driver version 1.0/1.1 combination should/can be tested
Title: Next C Port release
Post by: llm on June 20, 2021, 02:38:05 PM
these Stunts 1.0/1.1 MT15.DRV version are nearly fully ported to C - ~2000 lines of assembler reduced to ~600 lines well(over) documented C :)

but there is still is a risk that i introduce micro bugs while porting
for me the both version are sounding identical to the original + comparing midi output etc.
but wider testing would be great

there are only 4 (of 29 functions) left to port, so its nearly done

source is released when im done with the full port - then i really need help to understand the complete midi-sound values pushed through the driver
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 23, 2021, 11:27:11 PM
only two functions left :)
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 26, 2021, 02:37:34 PM
one function left
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 27, 2021, 10:06:10 AM
fully ported to C !!!

would be great if someone can test a little bit


Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on June 27, 2021, 10:44:24 AM
I would love to. I've you can tell me how.
I don't know (understand) what I need to setup to use the driver.
(I have WX [Windows 10] and defend dosbox manager)
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 27, 2021, 02:04:06 PM
>I would love to. I've you can tell me how.

no problem :)

>I don't know (understand) what I need to setup to use the driver.
>(I have WX [Windows 10] and defend dosbox manager)

you need original dosbox with munt patch or dosbox staging (develop version with already integrated MT32)
and the MT32 roms

grab the develop-version of staging which already integrated MT32 support:
i've uploaded the current development version (im also using) to: https://easyupload.io/nbo5r5

create following pathes

C:\temp\mt15_tests\romfiles <- fill that with the mame rom files: seach for "mame mt32 rom" you should find a mt32.zip and a cm32l.zip (extract copy all .rom/.bin into this folder without sub-folder)
C:\temp\mt15_tests\stunts11 <- your stunts 1.1 copy AND unpacked game.exe from the restunts projects (also attached)
C:\temp\mt15_tests\dosbox <- put in here the dosbox staging alpha files AND the attached dosbox.conf

then run the dosbox exe - stunts should start automaticly
relevant lines in the dosbox.conf are marked with "# !!Daniel3D!!" but should work out of the box if you can use the pathes as stated above

then you can check if
reMT15/10/MT15.DRV sounds/behaves the same as the stunts 1.0 MT15.DRV (org/10)
reMT15/11/MT15.DRV sounds/behaves the same as the stunts 1.1 MT15.DRV (org/11)
used with stunts 1.1

attach-info:
game.exe from the restunts project - copy into the stunts11 folder
dosbox.conf - copy into the dosbox folder
reMT15.7z - contains my 1.0 and 1.1 version of the Stunts MT15.drv
org.7z - contains the original 1.0 and 1.1 version of the Stunts MT15.drv





Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 29, 2021, 06:27:04 AM
Big question: do the sound glitches that Duplode talked about sill occure, in the first step the driver should behave exactly like the original
Title: Re: MT15.DRV reverse engineering project
Post by: llm on June 30, 2021, 08:28:51 AM
@Daniel3D - did you get it running?
Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on June 30, 2021, 02:01:52 PM
@Daniel3D - did you get it running?
Haven't had the chance to work on it yet (late shifts). Maybe tomorrow.
Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on July 01, 2021, 04:21:20 PM
Got it running without any problems.
Strange to play with this sound. I never heard it live before.

I played a while without and with the new driver.
The only thing I noticed, that is new for me.
That is that there seems to be a fade out between music (from intro to main menu en from there to racing)
With the new driver that fade seems longer...
Title: Re: MT15.DRV reverse engineering project
Post by: llm on July 01, 2021, 05:26:27 PM
Quote
That is that there seems to be a fade out between music (from intro to main menu en from there to racing)
With the new driver that fade seems longer...

the original MT15.DRV 1.0 uses a different timing method then original MT15.DRV 1.1 - does the delay also happen there?

so its very relevant to first test the difference between original 1.0 and 1.1 MT15.DRV
to give you a feeling was the original differences are

and then compare

orginal 1.0 to reMT15 1.0

and then

original 1.1 to reMT15 1.1


comparing original/MT15.DRV 1.0 with reMT15.DRV 1.1 makes no sense because i think even the orginal version 1.0 and 1.1 are different in behavior
Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on July 01, 2021, 05:36:16 PM
I only tested 1.1 stunts with the old and new 1.1 driver.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on July 02, 2021, 08:17:29 AM
using stunts 1.1: comparing original 1.0 and original 1.1 drv -> "fading out" is slower with 1.1 - isn't that the case in your installation? or did you maybe mixed up the versions?
Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on July 02, 2021, 09:37:38 AM
I only tested 1.1 stunts with the old and new 1.1 driver.
The new 1.1 driver seems to fade slower than the original 1.1 driver.

I'll double check. I will also check if my original driver is the same as your original one.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on July 02, 2021, 10:28:55 AM
Quote
The new 1.1 driver seems to fade slower than the original 1.1 driver.

a little bit or dramaticly? it seems that the fading slowing effect depents very much on the current played sound
it could maybe sound slower because you stopped at a different position

maybe its possible to automatize the mouse clicks and timing between with some sort of mouse-macro recorder software
between and record the output sound - to get a real reproducible test-scenario

do you know such tools? something like this: https://github.com/hukatama024e/MacroRecoderCsScript (allows mouse recording and playback, also on command line)
so i can write a batch script that starts dosbox with stunts and then the tool moves the mouse + clicks  and timeing automatically - this way some get record fail scenarios :)


Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on July 02, 2021, 11:57:27 AM
a little bit or dramaticly? it seems that the fading slowing effect depents very much on the current played sound
it could maybe sound slower because you stopped at a different position
Enough to notice while not paying attention to this.
But also definitely at a different position.
So not enough data for meaningful answer.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on July 02, 2021, 01:23:50 PM
i will test this macro recorder and sound recording to get a better "test scenario" environment - thanks for your testing
Title: Re: MT15.DRV reverse engineering project
Post by: Daniel3D on July 02, 2021, 01:59:53 PM
i will test this macro recorder and sound recording to get a better "test scenario" environment - thanks for your testing
That would be helpful.
[with this instance of the game i have no I believe 10x stunts on my laptop, 2x on my phone and one on my chromebook]

I still want the FM towns version with emulator.
Title: Re: MT15.DRV reverse engineering project
Post by: llm on July 02, 2021, 06:35:02 PM
Quote
I still want the FM towns version with emulator.

the FM towns support of MAME seems to be good