********************* speech peripheral driver *** * for mc145414/mc3417 peripheral circuit * * A program to record and play,serial CSVD data * * ENTER STARTING MEMORY LOCATION FOR DATA STORAGE * AT LOCATIONS $A000 - $A001 * * ENTER ENDING MEMORRY LOCATIONS FOR DATA STORAGE * AT LOCATIONS $A002 - $A003 * * PIA IS LOCATED AT ADDRESSES $8004 - $8007 * PIA PB7, PIN 17 IS DATA TO MC3417 PIN 9 * PIA PB4, PIN 14 IS LEVEL FROM ENCODE/DECODE * SWITCH (ENCODE = "1"). * PIA PB0, PIN 10 IS DATA TO MC3417 PIN 13 * PIA CB1, PIN 18 IS DATA CLOCK FROM MC14040 PIN2 *PIA PIN-25(E) IS 1.00 MHZ CLOCK TO MC14040 PIN 10 * PIA PIN-20 IS +5 VOLTS DC * PIA PIN-1 IS POWER GROUND PIAA EQU $8004 PIACRA EQU $8005 PIAB EQU $8006 PIACRB EQU $8007 * DATSRT EQU $A000 DATEND EQU $A002 COUNTR EQU $A004 * * *********************INITIALIZE PIA ************** ORG $C000 LDAA #$00 ACCESS DATA DIRECTION REGISTER STAA PIACRB LDAA #$01 BIT FOR OUTPUT STAA PIAB LDAA #$06 CB1 INTERRUPT GOING HIGH STAA PIACRB ********* DETERMINE WHICH FUNCTION FROM SWITCH ** LDAA #$10 SET MASK FOR ENCODE ANDA PIAB LOOK FOR ENCODE SET BEQ DECODE BRANCH TO APPROPRIATE ROUTINE **********************ENCODE ROUTINE*********** ENCODE LDX DATSRT GET STARTING ADDRESS BYTLP1 LDAB #$08 SETUP BIT COUNTER STAB COUNTR BITLP1 LDAB PIACRB CHECK FOR CLOCK TRANSITION ROLB BCC BITLP1 GO BACK FOR CLOCK ROL PIAB SHIFT CODE TO CARRY RORA SHIFT CARRY TO ACCUMULATOR DEC COUNTR DECREMENT COUNTER BNE BITLP1 STAA 0,X PUT BYTE IN MEMORY INX POINT TO NEXT BYTE CPX DATEND CHECK FOR END OF MEMORY BLOCK BNE BYTLP1 SWI **********************DECODE ROUTINE*********** DECODE LDX DATSRT GET STARTING ADDRESS BYTLP2 LDAB #$08 SETUP BIT COUNTER STAB COUNTR LDAA 0,X GET A BYTE FROM MEMORY BITLP2 LDAB PIACRB CHECK FOR CLOCK TRANSITION ROLB BCC BITLP2 RORA ROLL DATA INTO CARRY BIT ROL PIAB ROLL CARRY BIT OUT DEC COUNTR BNE BITLP2 INX POINT TO NEXT BYTE CPX DATEND CHECK FOR END OF MEMORY BLOCK BNE BYTLP2 SWI END