[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Disk protection scheme source code (as found)
- Subject: Disk protection scheme source code (as found)
- From: Hot Rod <hotrod.apple2@gmail.com>
- Date: Tue, 11 Sep 2012 20:29:29 -0700 (PDT)
- Complaints-to: groups-abuse@google.com
- Injection-date: Wed, 12 Sep 2012 03:29:29 +0000
- Injection-info: glegroupsg2000goo.googlegroups.com; posting-host=75.73.130.159; posting-account=NsBJFwoAAACliuoc2Cfykslw7D5NuJ4-
- Newsgroups: comp.sys.apple2
- User-agent: G2/1.0
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`