Delta Music 2 replay -------------------- (C)1990 Bent Nielsen Reverse engineering by lclevy@club-internet.fr With some help from Bent Nielsen Jan 2000 000000 ANDI.B #3,D0 ;0-3 mask TST.B D0 BEQ.W START+$03BC ;0 = play music CMPI.B #1,D0 BEQ.W START+$01FC ;1 = init music CMPI.B #2,D0 BEQ.B START+$22 ;2 = set new song volume CMPI.B #3,D0 BEQ.B START+$30 ;3 = instrument sound fx MOVEQ #0,D0 RTS ;new song vol 000022 LEA (START+$0B8C,PC),A0 ANDI.B #$3F,D1 ;max $40 MOVE.B D1,($2E,A0) ;song vol RTS ;instrument soundfx 000030 LEA (START+$0B8C,PC),A6 ANDI.L #$7F,D2 ;instrument number (0-127) ANDI.W #$7F,D3 ;note (1-72) ANDI.L #$3F,D5 ;arp effect TST.B D1 ;channel (0-3) BNE.B START+$5A MOVE.W D4,($32,A6) ;how long LEA (START+$0878,PC),A0 ;channel 0 CLR.B ($32,A0) ;play mode = soundfx LEA (START+$09A4,PC),A0 BRA.B START+$9A 00005A CMPI.B #1,D1 BNE.B START+$72 MOVE.W D4,($34,A6) ;how long LEA (START+$08B4,PC),A0 ;channel 1 CLR.B ($32,A0) LEA (START+$09F4,PC),A0 BRA.B START+$9A 000072 CMPI.B #1,D1 ;should be cmp #2 ? BNE.B START+$8A MOVE.W D4,($36,A6) LEA (START+$0904,PC),A0 ;channel 2 CLR.B ($32,A0) LEA (START+$0A44,PC),A0 BRA.B START+$9A 00008A MOVE.W D4,($38,A6) LEA (START+$0954,PC),A0 ;channel 3 CLR.B ($32,A0) LEA (START+$0A94,PC),A0 00009A MOVEA.L (0,A0),A1 ;dff0a0, dff0b0... MOVE.W (4,A0),($DFF096).L MOVE.B D3,($1C,A0) ;note LEA (START+$0AE2,PC),A4 ;period table ADD.W D3,D3 MOVE.W (A4,D3.W),($1A,A0) ;period SUBQ.W #1,D2 :instrument ADD.L D2,D2 MOVEA.L (6,A6),A4 ;instrument offset table ADDA.L D2,A4 MOVEQ #0,D2 MOVE.W (A4),D2 ;relative instrument address ADD.L (2,A6),D2 MOVE.L D2,(6,A0) ;instr info address MOVEA.L D2,A2 MOVE.B ($26,A2),($33,A0) ;synth ? BPL.B START+$0106 ;yes MOVEQ #0,D0 MOVEA.L ($26,A6),A4 ;sample offset table MOVE.B ($27,A2),D0 ;instrument sample number ANDI.B #7,D0 ASL.L #2,D0 ADDA.L D0,A4 ;pos in table MOVEA.L (A4),A4 ;relative address ADDA.L ($22,A6),A4 ;sample address MOVE.L A4,(0,A1) ;A0 register MOVE.W (0,A2),(4,A1) ;A4 register = len MOVE.W (4,A0),D0 ;channel bit ORI.W #$8000,D0 MOVE.W D0,($DFF096).L ;set dmacon 000106 LEA (START+$0BCA,PC),A4 ;arpeggio table ASL.W #4,D5 ;*16 ADDA.L D5,A4 MOVE.L A4,($2C,A0) ;chosen arp CLR.B ($16,A0) CLR.B ($17,A0) CLR.W ($20,A0) CLR.B ($24,A0) CLR.W ($22,A0) CLR.W ($30,A0) CLR.B ($26,A0) CLR.B ($27,A0) CLR.W ($28,A0) MOVE.B ($16,A2),($2A,A0) ;vibrato len CLR.B ($34,A0) MOVE.B ($17,A2),($35,A0) ;vibrato sustain RTS 000148 db 'THIS PIECE OF MUSIC, WAS CREATED ON DELTA MU' db 'SIC V2.0 ... CODED BY : BENT NIELSEN, KY' db 'RADSERVEJ 19 B, 8700 HORSENS, DENMARK, ' db ' TLF. 75-601-868 ..... COPYRIGHT 1990 ......' db '. ',0 0001FC BSET #1,($BFE001).L ;len off LEA (START+$0FCA,PC),A0 ;track len table LEA (START+$0B8C,PC),A4 ;song data CLR.L ($32,A4) CLR.L ($36,A4) MOVEA.L A0,A2 LEA (START+$03AC,PC),A1 ;copy tracks lengths here MOVEQ #15,D7 ;4 longs 00021C MOVE.B (A0)+,(A1)+ DBRA D7,START+$021C MOVE.L A0,(10,A4) ;track1 adr MOVEQ #0,D0 MOVE.W (2,A2),D0 ;track1 len ADDA.L D0,A0 MOVE.L A0,(14,A4) ;track2 adr MOVEQ #0,D0 MOVE.W (6,A2),D0 ;track2 len ADDA.L D0,A0 MOVE.L A0,($12,A4) ;track3 adr MOVEQ #0,D0 MOVE.W (10,A2),D0 ;track3 len ADDA.L D0,A0 MOVE.L A0,($16,A4) ;track4 adr MOVEQ #0,D0 MOVE.W (14,A2),D0 ;track4 len ADDA.L D0,A0 MOVE.L (A0)+,D0 MOVE.L A0,($1A,A4) ;first block adr ADDA.L D0,A0 MOVE.L A0,(6,A4) ;instr offset table ADDA.L #$FE,A0 MOVEQ #0,D0 MOVE.W (A0)+,D0 ;highest offset MOVE.L A0,(2,A4) ;first instr info ADDA.L D0,A0 MOVE.L (A0)+,D0 MOVE.L A0,($1E,A4) ;first synth adr ADDA.L D0,A0 MOVE.L A0,($26,A4) ;sample offset table ADDI.L #$40,($26,A4) ADDA.L #$60,A0 MOVE.L A0,($22,A4) ;sample base adr LEA ($DFF000).L,A5 MOVE.W #15,($96,A5) ;dmacon MOVE.W #1,($A4,A5) ;len MOVE.W #1,($B4,A5) MOVE.W #1,($C4,A5) MOVE.W #1,($D4,A5) CLR.W ($A8,A5) ;vol CLR.W ($B8,A5) CLR.W ($C8,A5) CLR.W ($D8,A5) LEA (START+$0B8C,PC),A4 LEA (START+$0878,PC),A0 ,voice1 data MOVE.L (10,A4),(10,A0) ;track1 adr MOVE.L (START+$03AC,PC),($36,A0) ;track1 len BSR.W START+$036C ;init voice1 LEA (START+$08B4,PC),A0 ;voice2 data MOVE.L (14,A4),(10,A0) MOVE.L (START+$03B0,PC),($36,A0) BSR.W START+$036C LEA (START+$0904,PC),A0 ;voice3 data MOVE.L ($12,A4),(10,A0) MOVE.L (START+$03B4,PC),($36,A0) BSR.W START+$036C LEA (START+$0954,PC),A0 ;voice4 data MOVE.L ($16,A4),(10,A0) MOVE.L (START+$03B8,PC),($36,A0) BSR.W START+$036C LEA (START+$09A4,PC),A0 ;voice1 data MOVE.L (10,A4),(10,A0) MOVE.L (START+$03AC,PC),($36,A0) BSR.W START+$036C LEA (START+$09F4,PC),A0 ;voice2 data MOVE.L (14,A4),(10,A0) MOVE.L (START+$03B0,PC),($36,A0) BSR.W START+$036C LEA (START+$0A44,PC),A0 :voice3 data MOVE.L ($12,A4),(10,A0) MOVE.L (START+$03B4,PC),($36,A0) BSR.W START+$036C LEA (START+$0A94,PC),A0 ;voice4 data MOVE.L ($16,A4),(10,A0) MOVE.L (START+$03B8,PC),($36,A0) BSR.W START+$036C MOVE.B #1,($30,A4) ;speed counter RTS ;init voice 00036C CLR.W ($14,A0) CLR.W ($12,A0) MOVE.L (2,A4),(6,A0) ;first instr CLR.B ($33,A0) CLR.W ($30,A0) LEA (START+$0BCA,PC),A3 MOVE.L A3,($2C,A0) ;first arp CLR.W ($20,A0) CLR.W ($22,A0) CLR.B ($24,A0) CLR.B ($25,A0) CLR.W ($1E,A0) MOVE.B #$3F,($1D,A0) ;channel vol MOVE.B #1,($32,A0) ;play mode 1 = normal RTS 0003AC dl $90 ;track1 len 0003B0 dl $90 ;track2 len 0003B4 dl $90 0003B8 dl $90 ;play music 0003BC MOVEM.L D0-D7/A0-A6,-(SP) LEA (START+$0B8C,PC),A6 ;song data CLR.B (1,A6) ;dmacon audio channels bits MOVEA.L ($1E,A6),A3 ;first synth adr MOVE.L ($2A,A6),D1 MOVEQ #15,D0 ;16 times 0003D2 ROL.L #7,D1 ADDI.L #$6ECA756D,D1 ;random number generator (Thanks Bent Nielsen) EORI.L #$9E59A92B,D1 ;to generate noise instrument MOVE.L D1,(A3)+ DBRA D0,START+$03D2 MOVE.L D1,($2A,A6) ;new random value SUBQ.B #1,($30,A6) BPL.B START+$03F6 MOVE.B ($2F,A6),($30,A6) ;speed counter 0003F6 CLR.B ($31,A6) ;play mode = normal LEA (START+$0878,PC),A0 ;voice1 BSR.W START+$049E ;play LEA (START+$08B4,PC),A0 ;voice2 BSR.W START+$049E LEA (START+$0904,PC),A0 ;voice3 BSR.W START+$049E LEA (START+$0954,PC),A0 ;voice4 BSR.W START+$049E MOVE.B #1,($31,A6) ;play mode = same track pos, same block pos TST.W ($32,A6) ;track1 len counter BEQ.B START+$0432 SUBQ.W #1,($32,A6) LEA (START+$09A4,PC),A0 ;voice1 data BSR.B START+$049E BRA.B START+$043C 000432 LEA (START+$0878,PC),A0 MOVE.B #1,($32,A0) ;music mode = normal 00043C TST.W ($34,A6) ;track2 len counter BEQ.B START+$044E SUBQ.W #1,($34,A6) LEA (START+$09F4,PC),A0 ;voice2 BSR.B START+$049E BRA.B START+$0458 00044E LEA (START+$08B4,PC),A0 ;voice2 MOVE.B #1,($32,A0) 000458 TST.W ($36,A6) ;track3 len counter BEQ.B START+$046A SUBQ.W #1,($36,A6) LEA (START+$0A44,PC),A0 BSR.B START+$049E BRA.B START+$0474 00046A LEA (START+$0904,PC),A0 MOVE.B #1,($32,A0) 000474 TST.W ($38,A6) ;track4 len counter BEQ.B START+$0486 SUBQ.W #1,($38,A6) LEA (START+$0A94,PC),A0 BSR.B START+$049E BRA.B START+$0490 000486 LEA (START+$0904,PC),A0 MOVE.B #1,($32,A0) 000490 MOVE.W (0,A6),($DFF096).L MOVEM.L (SP)+,D0-D7/A0-A6 RTS ;play voice 00049E MOVEA.L (0,A0),A1 ;dff0a0, dff0b0... MOVEA.L (6,A0),A2 ;instr info TST.B ($33,A0) ;synth ? BPL.B START+$04E8 ;yes CLR.B ($33,A0) ;set to sample MOVEQ #0,D0 MOVEA.L ($26,A6),A3 ;sample offset table MOVE.B ($27,A2),D0 ;instrument sample number ANDI.B #7,D0 ASL.L #2,D0 ;*4 ADDA.L D0,A3 MOVEA.L (A3),A4 ;relative adr ADDA.L ($22,A6),A4 ;absolute adr MOVEQ #0,D0 TST.B ($32,A0) ;replay mode == soundfx ? BEQ.B START+$04D6 ;yes MOVE.W (4,A2),(4,A1) ;sample len 0004D6 MOVE.W (2,A2),D0 ;repeat CLR.W (A4) ADDA.L D0,A4 TST.B ($32,A0) ;replay mode == soundfx ? BEQ.B START+$04E8 ;yes MOVE.L A4,(0,A1) ;sample adr 0004E8 TST.B ($31,A6) ;play mode = same track pos and same block pos ? BNE.W START+$0612 ;yes TST.B ($30,A6) ;speed counter >0 BNE.W START+$0612 ;no TST.W ($14,A0) ;yes : pos in block == 0 ? BNE.B START+$052E ;no MOVEQ #0,D0 MOVEA.L (10,A0),A3 ;track adr MOVE.W ($12,A0),D1 ;pos in track MOVE.B (A3,D1.W),D0 ;block MOVE.B (1,A3,D1.W),($2B,A0) ;note transpose ASL.L #6,D0 ;*64 (block len) ADD.L ($1A,A6),D0 ;first block adr MOVE.L D0,(14,A0) ;current block adr ADDQ.W #2,D1 MOVE.W D1,($12,A0) ;next pos in track CMP.W ($38,A0),D1 ;end of track ? BMI.B START+$052E MOVE.W ($36,A0),($12,A0) ;track pos = track len : track ended 00052E MOVEQ #0,D0 MOVEA.L (14,A0),A3 ;current block MOVE.W ($14,A0),D0 ;pos in block ADDA.L D0,A3 ;command adr MOVEQ #0,D0 MOVE.B (A3),D0 ;note BEQ.W START+$05E6 ;no new note TST.B ($32,A0) BEQ.B START+$0550 ;music mode = soundfx MOVE.W (4,A0),($DFF096).L ;dmacon 000550 MOVE.B D0,($1C,A0) ;note LEA (START+$0AE2,PC),A4 ;period table ADD.B ($2B,A0),D0 ;note transposition ADD.W D0,D0 MOVE.W (A4,D0.W),($1A,A0) ;period MOVEQ #0,D1 MOVE.B (1,A3),D1 ;instrument ADD.L D1,D1 SUBQ.W #2,D1 MOVEA.L (6,A6),A4 ;instr offset table ADDA.L D1,A4 MOVEQ #0,D2 MOVE.W (A4),D2 ;offset ADD.L (2,A6),D2 ;instr info adr MOVE.L D2,(6,A0) ;current instr info MOVEA.L D2,A2 MOVE.B ($26,A2),($33,A0) ;is synth ? BPL.B START+$05B2 ;yes TST.B ($32,A0) BEQ.B START+$05B2 ;play mode=soundfx MOVEQ #0,D0 MOVEA.L ($26,A6),A4 ;sample offset table MOVE.B ($27,A2),D0 ;sample number ANDI.B #7,D0 ASL.L #2,D0 ADDA.L D0,A4 MOVEA.L (A4),A4 ADDA.L ($22,A6),A4 ;sample base adr MOVE.L A4,(0,A1) ;sample adr MOVE.W (0,A2),(4,A1) ;len 0005B2 CLR.B ($16,A0) CLR.B ($17,A0) CLR.W ($20,A0) CLR.B ($24,A0) CLR.W ($22,A0) CLR.W ($30,A0) CLR.B ($26,A0) CLR.B ($27,A0) CLR.W ($28,A0) MOVE.B ($16,A2),($2A,A0) ;vibrato len CLR.B ($34,A0) MOVE.B ($17,A2),($35,A0) ;vib sustain 0005E6 MOVE.B (2,A3),D0 ;effect number SUBQ.B #1,D0 BMI.B START+$0608 MOVE.B (3,A3),D1 ;effect data LEA (START+$0812,PC),A3 ;effect base adress LEA (START+$07F2,PC),A4 ;effect offset table ANDI.L #7,D0 ASL.L #2,D0 ADDA.L (A4,D0.W),A3 JSR (A3) ;jump to effect routine 000608 ADDQ.W #4,($14,A0) ;next block pos ANDI.W #$3F,($14,A0) ;modulo 64 000612 TST.B ($26,A2) BMI.B START+$0672 ;is sample TST.B ($16,A0) ;sample number BEQ.B START+$0624 SUBQ.B #1,($16,A0) BRA.B START+$0672 000624 MOVE.B ($27,A2),($16,A0) ;sample number MOVEQ #0,D0 MOVEQ #0,D2 LEA ($28,A2),A3 ;waveform table MOVE.B ($17,A0),D0 ;pos in waveform 000636 MOVE.B D0,D1 MOVE.B (A3,D0.W),D2 CMPI.B #$FF,D2 ;loop ? BNE.B START+$0652 MOVE.B (1,A3,D0.W),D0 ;next waveform MOVE.B (A3,D0.W),D2 CMPI.B #$FF,D2 BNE.B START+$0636 ;loop BRA.B START+$0672 000652 ASL.L #8,D2 ;*128 (synth len) ADD.L ($1E,A6),D2 ;synth base adr TST.B ($32,A0) BEQ.B START+$0668 ;music mode = soundfx MOVE.L D2,(0,A1) ;sample adr MOVE.W (0,A2),(4,A1) ;sample len 000668 ADDQ.B #1,D1 ANDI.B #$3F,D1 MOVE.B D1,($17,A0) ;next waveform pos 000672 MOVEQ #0,D0 LEA ($15,A2),A3 ;vibrator table MOVE.B ($34,A0),D0 ;vibrator pos ADDA.L D0,A3 MOVE.B (0,A3),D0 ;vib step TST.B ($27,A0) ;vib direction BNE.B START+$068E ADD.W D0,($28,A0) ;+ BRA.B START+$0692 00068E SUB.W D0,($28,A0) ;- 000692 SUBQ.B #1,($2A,A0) ;vib len BNE.B START+$06A2 MOVE.B (1,A3),($2A,A0) ;vib len NOT.B ($27,A0) ;change direction 0006A2 TST.B ($35,A0) ;vib sustain BEQ.B START+$06AE SUBQ.B #1,($35,A0) BRA.B START+$06C6 0006AE ADDQ.B #3,($34,A0) ;next vibrator pos CMPI.B #15,($34,A0) BNE.B START+$06C0 MOVE.B #12,($34,A0) ;vib end 0006C0 MOVE.B (5,A3),($35,A0) ;vib sustain 0006C6 TST.B ($24,A0) :vol sustain BEQ.B START+$06D2 SUBQ.B #1,($24,A0) BRA.B START+$072C 0006D2 MOVEQ #0,D0 MOVEQ #0,D1 MOVE.W ($22,A0),D0 ;pos in vol table LEA (6,A2),A3 ;vol table ADDA.L D0,A3 MOVE.B (A3),D0 ;vol rate MOVE.B (1,A3),D1 ;vol level CMP.W ($20,A0),D1 ;vol = target vol BPL.B START+$0706 SUB.W D0,($20,A0) ;- CMP.W ($20,A0),D1 BMI.B START+$072C MOVE.W D1,($20,A0) ;yes ADDQ.W #3,($22,A0) ;next vol pos MOVE.B (2,A3),($24,A0) ;vol sustain BRA.B START+$072C 000706 ADD.W D0,($20,A0) ;+ CMP.W ($20,A0),D1 BPL.B START+$072C MOVE.W D1,($20,A0) ADDQ.W #3,($22,A0) ;next vol pos CMPI.W #15,($22,A0) BNE.B START+$0726 MOVE.W #12,($22,A0) ;vol table end 000726 MOVE.B (2,A3),($24,A0) ;vol sustain 00072C MOVEQ #0,D0 MOVE.B ($25,A0),D0 ;portamento speed BEQ.B START+$075C MOVE.W ($1A,A0),D1 ;period CMP.W ($18,A0),D1 ;transposed period BPL.B START+$074E SUB.W D0,($18,A0) ;- CMP.W ($18,A0),D1 BMI.B START+$075C MOVE.W D1,($18,A0) ;resulting period BRA.B START+$075C 00074E ADD.W D0,($18,A0) ;+ CMP.W ($18,A0),D1 BPL.B START+$075C MOVE.W D1,($18,A0) ;resulting period 00075C MOVEQ #0,D0 MOVEA.L ($2C,A0),A3 ;arpeggio table MOVE.W ($30,A0),D1 ;arp pos MOVE.B (A3,D1.W),D0 TST.B D1 BEQ.B START+$077A CMPI.B #$80,D0 ;repeat ? BNE.B START+$077A CLR.W ($30,A0) ;yes BRA.B START+$075C 00077A ADDQ.W #1,($30,A0) ;next arp pos ANDI.W #15,($30,A0) ;end pos TST.B ($25,A0) BEQ.B START+$0790 ;portamento = 0 MOVE.W ($18,A0),D0 BRA.B START+$07A6 000790 LEA (START+$0AE2,PC),A3 ADD.B ($1C,A0),D0 ;note ADD.B ($2B,A0),D0 ;note transpose ADD.W D0,D0 MOVE.W (A3,D0.W),D0 MOVE.W D0,($18,A0) ;period 0007A6 MOVE.W ($24,A2),D1 ;instr bendrate SUB.W ($1E,A0),D1 ;channel bendrate SUB.W D1,($28,A0) ;final bendrate ADD.W ($28,A0),D0 ;modify period TST.B ($32,A0) BEQ.B START+$07C0 MOVE.W D0,(6,A1) ;period register 0007C0 MOVE.W ($20,A0),D0 ;vol / 4 ROR.W #2,D0 ANDI.W #$3F,D0 CMP.B ($1D,A0),D0 ;channel vol BMI.B START+$07D4 MOVE.B ($1D,A0),D0 0007D4 CMP.B ($2E,A6),D0 ;song vol BMI.B START+$07DE MOVE.B ($2E,A6),D0 0007DE TST.B ($32,A0) ;play mode BEQ.B START+$07F0 ;=soundfx MOVE.W D0,(8,A1) ;vol register MOVE.B (5,A0),D0 OR.B D0,(1,A6) ;dma audio bits RTS 0007F2 dl 0 0007F6 dl 10 0007FA dl $22 0007FE dl $2E 000802 dl $38 000806 dl $3E 00080A dl $48 00080E dl $52 ;effect 1 = play speed 000812 ANDI.B #15,D1 MOVE.B D1,($2F,A6) ;song speed RTS ;2 = led filter 00081C TST.B D1 BNE.B START+$082A BSET #1,($BFE001).L RTS 00082A BCLR #1,($BFE001).L RTS ;3 = channel bendrate up 000834 ANDI.W #$FF,D1 NEG.W D1 MOVE.W D1,($1E,A0) RTS ;4 = channel bendrate down 000840 ANDI.W #$FF,D1 MOVE.W D1,($1E,A0) RTS ;5 = portamento 00084A MOVE.B D1,($25,A0) RTS ;6 = channel vol 000850 ANDI.B #$3F,D1 MOVE.B D1,($1D,A0) RTS ;7 = song vol 00085A ANDI.B #$3F,D1 MOVE.B D1,($2E,A6) RTS ;8 = arpeggio 000864 ANDI.L #$3F,D1 ASL.L #4,D1 ;*16 LEA (START+$0BCA,PC),A4 ADDA.L D1,A4 MOVE.L A4,($2C,A0) RTS ;track1 data 000878 dl $DFF0A0 4 dw $0001 6 dl $00069568 a dl $0006875C e dl $00068A60 12 dw $0008 14 dw $0028 16 db $01 17 db $04 18 dw $03C0 1a dw $03C0 1c db $23 1d db $3F 1e dw $0000 20 dw $00D0 22 dw $0003 24 db $00 25 db $00 26 db $00 27 db $FF 28 dw $0000 2a db 01 2b db 00 2c dl $0006834C 30 dw $0007 32 db 01 33 db 00 34 db $00 35 db 03 36 dw 0000 38 dw $0090 0000 ;track2 data 0008B4 dl $DFF0B0 dw $0002 ;track3 000904 dl $DFF0C0 ;track4 000954 dl $DFF0D0 ;track1 0009A4 dl $00DFF0A0 4 dw $0001 6 dl 00069460 a dl 0006875C 12 dw 0000 14 dw 0000 16 db 00 17 db 00 18 dw 0000 1a dw 0000 1c db $00 1d db 3F 1e dw 0000 20 dw 0000 22 dw 0000 24 db 00 25 db 00 26 db 00 27 db 00 28 dw 0000 2a dw 0000 2c dl $0006834C 30 dw $0000 32 db 01 33 db 00 34 db 00 35 db 00 36 dw 0000 38 dw $0090 dw 0000 dl 00000000 dl 00000000 dl 00000000 dl 00000000 dl 00000000 ;track2 0009F4 dl $DFF0B0 ;track3 000A44 dl $DFF0C0 ;track4 000A94 dl $DFF0D0 ;period table 000AE2 dw 0 000AE4 dw $1AC0 000AE6 dw $1940 000AE8 dw $17D0 ... 000B84 dw $71 000B86 dw $71 000B88 dw $71 000B8A dw $71 ;voice data 000B8C dw $800F 2 dl 0012B4C8 6 dl 0012B3C8 a dl 0012A7C4 e dl 0012A854 12 dl 0012A8E4 16 dl 0012A974 1a dl 0012AA08 1e dl 0012B83C 22 dl 0006E234 26 dl 0006E214 2a dl 75C38EA6 2e db 3F 2f db 03 30 db $02 31 db 01 32 dw 0000 34 dw 0000 36 dw 0000 38 dw $0000 000bc6 db 2E464E4C ".FNL" See "dm2_fmt.txt"