;Making SYMPHONY ver 1.00 to run with out SYMPHONY'S master disk - ;unprotecting it: ; ;A>REN SYMPHONY.CMP SYMPHONY.XXX ;A>DEBUG SYMPHONY.XXX ;-R ;find the segment where loaded and add 1000 to it ; ;DS=0DFA - xxxx=1DFA (0DFAH+1000H=1DFAH) ;-E xxxx:3A05 75 ;change INT 13 to INT 75H (see label SYMINT below) ;-W ;save changed file ;-Q ;exit debuger ;A>REN SYMPHONY.XXX SYMPHONY.CMP ;A>SYMPH ;execute THIS PROGRAM (it modifies the changed interupt ; ;back to 13H since SYMPHONY does checksum of it's self) ; ; ; ; assemble, link, exe2bin ; ;Execute this program before using SYMPHONY. ;There is no need to re-execute this program after exit from SYMPHONY, in ;order to use the SYMPHONY again, since it is a resident program ; ; ;to further examine the symphony for possibly other way to solve this, using ;DEBUG, do: ;A>DEBUG SYMPHONY.EXE ;-G2 ;-T3 ;-G8A40 ;-T ;at this point you will find the the subroutine that fills ; ;location ds:8735 with n and int 13 (the second one) which ; ;reads the serial number from flopy disk in A. Zeroing 8735 ; ;fools the symphony, and prevents it from testing for special ; ;track/sector structure on the flopy. If the location 8735 is ; ;not zeroed, debugging will not be possible after IP 8A4D, ; ;since INT 3 will be modified by SYMPHONY. ; SYMINT EQU 75H ;interupt to use SYMFLG EQU 8735H ;see above for info CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG ORG 100H PROGRA: XOR AX,AX MOV ES,AX ;set to segment 0 (interupt table) XOR DX,DX MOV AL,SYMINT ;interupt number MOV CX,4 ;get position in interupt table MUL CX MOV BX,AX TEST WORD PTR ES:[BX],0 ;test if set? JZ DOIT ;no, go set it INT 20H ;exit to dos with out mod DOIT: ;get interupt routine address MOV word ptr ES:[BX],offset corc ;store it at the apropriate int address MOV ES:[BX+2],CS ;also store the segment MOV DX,5+16 ;lenght of this pgm in segments MOV AX,3103H ;exit & stay resident INT 21H ;this is the actual interupt CORC: CLI PUSH ES ;save all used registers PUSH BP PUSH BX MOV BP,SP MOV ES,[BP+8] ;get calling segment from stack MOV BX,[BP+6] ;get calling address from stack DEC BX ;back up one MOV BYTE PTR ES:[BX],13H ;store interupt 13h there MOV BYTE PTR DS:SYMFLG,0 ;zero out the flopy test flag POP BX ;restore registers POP BP POP ES STI IRET ;back to symphony CSEG ENDS END PROGRA