


       NAM CRCC
       OPT O
BUFFER EQU $0000 START OF BUFFER
EBUF   EQU $0010 END OF BUFFER
POL    EQU $94 POLYNOMIAL FOR CASSETTE CRCC CHECKING
       SPC 2
*
*
       ORG $00FC MEMORY LOCATIONS
XTEMP  RMB 2 TEMPORARY X STORAGE
CR     RMB 1 CRCC CHECK CHARACTER STORAGE
TEMP   RMB 1 TEMPORARY STORAGE
*
*
*
       ORG $0100
SCRCC  PSH B STORE PRESENT VALUES
       PSH A
       STX XTEMP
       CLR CR CLEAR CR INITIALLY
       LDX #BUFFER BEGINNING OF DATA BUFFER
S1     LDA A 0,X DATA WORD
       STA A TEMP DATA WORD TO TEMP
       LDA A #$80 ACCA POINTS TO BIT TO BE INTERROGATED
SCR1   ASL CR SHIFT 0 INTO LOW CR,SHIFT HIGH CR TO CY
       BIT A TEMP IS CURRENT BIT 0 OR 1
       BEQ SCR2 IF EQ, CURRENT BIT =0
       BCS NOCHA BIT=1,FEEDBACK FROM CRCC=1,NO CHANGE TO CR
       BRA CHANG BIT=1,FEEDBACK =0,CHANGE CR
SCR2   BCC NOCHA BIT=0,FEEDBACK=0, NO CHANGE TO CR
CHANG  LDA B #POL BIT=0,FEEDBACK=2,FEEDBACK=0
       EOR B CR DO EXCLUSIVE OR WITH CR
       STA B CR
NOCHA  LSR A INTERROGATE NEXT BIT
       BNE SCR1
       INX WORD FINISHED,GO TO NEXT WORD
       CPX #EBUF IS BUFFER DONE?
       BNE S1
       PUL A FINISHED, RESTORE VALUES
       PUL B
       LDX XTEMP
       RTS RETURN TO CALLING ROUTINE
*
*
*
*TEST  PROGRAM WILL CALCULATE CR FOR LOCATING 0000-000F
*TAKE  CR AND PUT IT AT END OF BUFFER(0010)THEN CHANGE
*THE   SCRCC PROGRAM TO ALLOW FOR ONE MORE WORD IN THE
*BUFFERTHEN CALCULATE THE CR FOR THE ENLARGED BUFFER.
*AT    THE END OF THIS PROCEDURE, CR AND ACCA=0 INDICATING
*A     CORRECT CRCC
TEST   LDS #$007F
       BSR SCRCC CALCULATE CR FOR LOCATIONS 0-F
       LDA A CR PUT CR AT END OF BUFFER
       LDX #EBUF

       STA A 0,X
       INC NOCHA+6 INCREASE VALUE OF EBUFFER IN PROGRAM
       BSR SCRCC
       DEC NOCHA+6 RESTORE VALUE OF EBUFFER IN PROGRAM
       LDA A CR
       SWI SET BREAKPOINT ERROR IN EXORCISOR FOR EXAMINATION
       END
