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