peterdeco1, Here is a subroutine I wrote quite a few years back for a repeater. The plyrec flag is for playback/record. It uses the chip select, interrupt, eom, mosi and clock. It was for recording and playing back 6, 20 second messages from a 120 second part. I hope it helps....

Dave Purola,
N8NTA



'************************************************* ********************
ISDDVR1:' SPI DRIVER FOR ISD-33120 DVR
'************************************************* ********************
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[%00100\5] 'SEND POWER-UP COMMAND
ISDSEL = 1 'SET <>CE HIGH
PAUSTIME = 30 'WAIT FOR POWER-UP SEQUENCE TO COMPLETE
GOSUB WAITIME
IF PLYREC=0 THEN REC 'CHECK FOR RECORD MODE

PLY:
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[((DRCHANL MIN 5)*133)\11,%11100\5] 'START PLAYBACK @ ADDRESS
ISDSEL = 1 'SET <>CE HIGH
PAUSE 1
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[%11110\5] 'CONTINUE PLAYBACK @ ADDRESS
ISDSEL = 1 'SET <>CE HIGH
TIMSTAMP = 0
WHILE TIMSTAMP<20000 'WAIT FOR 20 SEC or UNTIL EOM
IF EOM_OVF=0 THEN CLRDR 'CHECK FOR EOM, IF NOT BUSY THEN FINISHED
WEND
GOTO CLRDR 'NO EOM BIT TO BE FOUND IN TIME

REC:
TIMSTAMP = 0
WHILE TIMSTAMP<3000 'START TIMING LOOP FOR UNKEY (~3 SEC)
IF COR=1 THEN CONTREC 'WAIT FOR COR/COS TO DROP
WEND
GOTO CLRDR 'NO UNKEY TO BE FOUND IN TIME

CONTREC:
TIMSTAMP = 0
WHILE TIMSTAMP<3000 'START TIMING LOOP FOR UNKEY (~3 SEC)
IF COR=0 THEN SREC 'CHECK FOR COR/COS PRESENT
WEND
GOTO CLRDR 'TIME IS UP SO, FINISH OPERATION

SREC:
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[((DRCHANL MIN 5)*133)\11,%10100\5] 'START RECORD @ ADDRESS
ISDSEL = 1 'SET <>CE HIGH
PAUSE 1
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[%10110\5] 'CONTINUE RECORD @ ADDRESS
ISDSEL = 1 'SET <>CE HIGH
TIMSTAMP = 0
WHILE TIMSTAMP<19900 'WAIT FOR 19.9 SEC or UNTIL EOM
IF EOM_OVF=0 OR COR=1 THEN CLRDR 'IF COR/COS DROPPED OR EOM THEN STOP RECORD
WEND

CLRDR:
ISDSEL = 0 'SET <>CE LOW
SHIFTOUT MOSI,SCLK,0,[%00000\5] 'STOP REC/PLY @ POWER DOWN
ISDSEL = 1 'SET <>CE HIGH
RETURN