home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RBBS in a Box Volume 1 #3.1
/
RBBSIABOX31.cdr
/
pcpo
/
pcdraw14.unp
< prev
next >
Wrap
Text File
|
1985-08-22
|
3KB
|
72 lines
FOR THE USERS THAT HAVE 'PC-DRAW' V1.4.
---------------------------------------------
The base for this procedure is PC-DRAW.UNP (for 1.2) found on this BBS.
It is recommened that PC-DRAW.UNP be downloaded and read first. I will
not repeat that information, but only detail the differences.
---------------------------------------------
The target file to change is now PC-DRAW.EXE and not DIAGRAM.EXE.
It seems that the intent of the protection is to access two different
sectors on the orignal PC-DRAW #1 disk. This access is done with
IBM ROM BIOS interrupt 13. On return from this interrupt the carry flag
is set or reset to indicate failed or successful access. To pass the
protection successfully the first access must always be successful and
the second access must always fail. If this does not happen, the system
will drop into an endless loop, outputting to the screen a string
through interrupt 21.
---------------------------------------------
Interrupt 13 is a two byte instruction. The first byte will be replaced
by the instruction that sets or resets the carry flag to the condition
that will allow the system not to fall into the endless loop. The
second byte will be NOPed.
---------------------------------------------
First access to disk.
Setup for interrupt 13, exit based on CY
0A98:4D36 B200 MOV DL,00-->drive #
0A98:4D38 B402 MOV AH,02-->read operation
0A98:4D3A B600 MOV DH,00-->head #
0A98:4D3C B525 MOV CH,25-->track #
0A98:4D3E B100 MOV CL,08-->sector #
0A98:4D40 B001 MOV AL,01--># sectors to read
0A98:4D42 BB0000 MOV BX,0000
0A98:4D45 CD13 INT 13----|------>CLC (First change)
\----->NOP
0A98:4D47 721F JB 4D68-->If access failed, CY=1. Then jump to
endless loop. Else continue.
(must never fail)
----------------------------------------------
Second access to disk.
Setup for interrupt 13, exit based on CY
0A98:4D49 B200 MOV DL,00-->drive #
0A98:4D4B B402 MOV AH,02-->read operation
0A98:4D4D B600 MOV DH,00-->head #
0A98:4D4F B527 MOV CH,27-->track #
0A98:4D51 B108 MOV CL,08-->sector #
0A98:4D53 B001 MOV AL,01--># of sectors to read
0A98:4D55 BB0000 MOV BX,0000
0A98:4D58 CD13 INT 13----|------>STC (Second change)
\----->NOP
0A98:4D5A 7209 JB 4D65-->If access failed, CY=1. Then jump to
program continue. Else endless loop.
(must always fail)
----------------------------------------
Endless loop for second access to disk if passed.
0A98:4D5C BA0102 MOV DX,0201
0A98:4D5F B409 MOV AH,09-->DOS function (output string)
0A98:4D61 CD21 INT 21----->DOS function call(AH=function)
0A98:4D63 EBF7 JMP 4D5C--->Do it again (forever!!)
-----------------------------------------
Just passing through to program continuation.
0A98:4D65 EB0A JMP 4D71
0A98:4D67 90 NOP
-----------------------------------------
Endless loop for first access to disk if failed.
0A98:4D68 BA0102 MOV DX,0201
0A98:4D6B B409 MOV AH,09-->DOS function (output string)
0A98:4D6D CD21 INT 21----->DOS function call(AH=function)
0A98:4D6F EFB7 JMP 4D68--->Do it again (forever!!)
------------------------------------------
continue program
0A98:4D71 07 POP ES
...
JMP 4D68--->Do it again (forever!!)
----------------------------