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
|
|
|