[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Disk protection scheme source code (as found)



Hot Rod <hotrod.apple2@gmail.com> wrote:
> Here's an artifact that might interest one or two of you. :)
> 
> It's the actual source code used for a data protection scheme, apparently
> created by Funk Software and used by Turning Point Software (I haven't
> spent time figuring out what software they may have used this on).  I
> think I found this while snooping around one of their disks years ago.
> 
> ]HR
> 
> 
> 
> ;START
> ;
> @LBL =1
> ;
> ;**************************************
> ;
> ;       (C)COPYRIGHT 1983,1984
> ;       TURNING POINT SOFTWARE
> ;       11A MAIN STREET
> ;       WATERTOWN, MA 02172
> ;
> ;THE INFORMATION CONTAINED HERE IS
> ; PROPRIETARY.  THIS INFORMATION IS
> ; BEING PROVIDED UNDER THE TERMS OF
> ; A LICENSING AGREEMENT BETWEEN 
> ; TURNING POINT SOFTWARE AND FUNK
> ; SOFTWARE.
> ;
> ;**************************************
> ;
> ;PAUL: SET THE ORG AND OBJ AS REQUIRED.
> ;      THE PROGRAM IS $93 BYTES LONG.
> ;
> @ORG =$2000 ;RUN TIME ADDRESS
> @OBJ =$2000 ;ASSEMBLE AT THIS ADRS
> ;
> ;
> ;**************************************
> ;
> ;SET FUNK TO THE ZERO PAGE ADDRESS YOU
> ;   DESIRE.  IT IS INITIALIZED TO $FF
> ;   AND IS INCREASED FOR EACH ERROR
> ;   DURING CHECKING. THEN IT IS
> ;   EOR'D WITH SYNCL+1.  SYNCL+1 WILL
> ;   BE $11 IF DISK IS OK.
> ;
> FUNK =$06 ;=$EE IF DISK IS OK
>   ;= ?? IF DISK IS COPIED
> ;
> ;**************************************
> ;
> ;
> ;THE FOLLOWING LABELS ARE ADDRESSES
> ; USED BY THE CHECKER. THEY ARE VALID
> ; FOR DIVERSA DOS AND DOS 3.3.
> ;
> ;
> DRVPTCH =$BE4D ;PATCH TO MAKE DOS 
>   ; LEAVE DRIVE ON
> ;
> RWTS =$B7B5 ;ADDRESS OF RWTS
> PARMS =$B7E8 ;ADDRESS OF PARAMETERS
> ;
> ;
> ;
> ;**************************************
> ;
> ;THESE ARE HARDWARE ADDRESSES IN THE
> ; I/O SPACE.
> ;
> LC08C =$C08C ;DATA LATCH W/STROBE
> DRVOFF =$C088 ;ADDRESS TO TURN OF DRV
> ;
> ;
> ;**************************************
> ;
> ;PROGRAM START:
> ;
> ; GET DOS TO POS. HEAD ON TRACK=PROTRK
> ; AND LEAVE THE DRIVE ON
> ;
> PROTRK =$22
> ;
> ;**************************************
> ;
> ;
> CHECK LDA DRVPTCH ;SAVE DRIVE ON
>  PHA ;  ; PATCH BYTE
> ;
>  LDA #PROTRK ;SET IOBTRK TO
>  STA PARMS+4 ; PROTRK
> ;
>  LDA #$00 ;SET COMMAND TO
>  STA PARMS+C ; SEEK
> ;
>  LDA #$60 ;PATCH TO LEAVE
>  STA DRVPTCH ; DRIVE ON
> ;
>  LDY #PARMS
>  LDA #PARMS+1
>  JSR RWTS ;CALL DOS
> ;
>  PLA ;  ;RESTORE DRIVE
>  STA DRVPTCH ; ON PATCH
> ;
>  LDA #$FF ;INITIALIZE BYT
>  STA FUNK ; FOR FUNK
> ;
> ;**************************************
> ;
> ;DRIVE IS NOW ON WITH HEAD AT PROTRK
> ;
> ;    START ACTUAL CHECK OF TRACK
> ;
> ;**************************************
> ;
> FRSTD5 LDA LC08C,X ;FIND A $D5
>  BPL FRSTD5
>  PHA
>  PLA
>  CMP #$D5
>  BNE FRSTD5
> ;
> INIT LDY #$00 ;INIT SYNCL
>  STY SYNCL
> ;
> SCNDD5 LDA LC08C,X ;CHECK FOR NEXT
>  BPL SCNDD5 ; D5 AND BRANCH
>  CMP #$D5 ; WHEN FOUND
>  BEQ FOUND2
> ;
>  CMP #$F7 ;Y<>0 IF $F7
>  BNE NOTF7 ; FOUND BETWEEN
>  INY ;  ; TWO $D5'S
> NOTF7 CLC
>  ADC SYNCL ;CALC CHKSUM IN
>  STA SYNCL ; CASE THIS IS
>  JMP SCNDD5 ; D5-FA-F7-D5
> ;
> FOUND2 TYA ;  ;LOOP BACK IF
>  BEQ INIT ; IF NO FA IN
>    ; REGION
> ;
> FRSTSYN LDA LC08C,X ;READ SYNC
>  BPL FRSTSYN ; BYTES BEFORE
>  PHA ;  ; GLITCH
>  PLA
>  CMP #$FF
>  BEQ FRSTSYN
> ;
>  CMP #$D5 ;IF $D5 THEN NO
>  BNE CHKGLCH ; GLITCH
> ;
>  INC FUNK
> ;
> CHKGLCH LDY #$05 ;READ 5 BYTES
> SKPGLIT LDA LC08C,X ; TO PASS OVER
>  BPL SKPGLIT ; GLITCH
>  PHA
>  PLA
>  DEY
>  BNE SKPGLIT
> ;
> SCNDSYN LDA LC08C,X ;READ SYNC
>  BPL SCNDSYN ; BYTES AFTER
>  PHA ;  ; GLITCH
>  PLA
>  CMP #$FF
>  BEQ SCNDSYN
> ;
>  CMP #$D5 ;IF NOT $D5
>  BEQ CMPFF ; THEN MORE
>    ; THAN 1 GLITCH
> ;
>  INC FUNK
> ;
> CMPFF LDA LC08C,X ;CHECK THAT $D5
>  BPL CMPFF ; IS FOLLOWED
>  CMP #$FF ; BY $FF
>  BNE CHKSYNC
> ;
>  INC SYNCL
> ;
> CHKSYNC LDA SYNCL ;EOR SYNCL+1
>  EOR FUNK ; WITH FUNK
>  STA FUNK ; =$EE IF OK
> ;
>  LDA DRVOFF,X ;DRIVE OFF
> ;
>  RTS
> ;
> ;**************************************
> ;
> ;DATA BYTE - CONTAINS CHKSUM+1
> ;
> SYNCL .00
> ;
> ;
> ;**************************************
> ;
> ;
> ;END`

You may be interested to know that the printing utility Sideways also
contains the source for its protection. It is on the disk as a deleted
file. 

-michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon