84 lines
2.5 KiB
Plaintext
84 lines
2.5 KiB
Plaintext
|
||
;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
|
||
|