1 *SPEECH-COMPOSITE DRIVER 2 * 3 ORG $6D00 4 * 5 TABPTR EQU $F9 ;DATA POINTER 6 OUTPTR EQU $FB ;START OF DATA POINTER 7 ENDPTR EQU $FD ;END OF DATA POINTER 8 BUSY EQU $FF ;BUSY FLAG 9 IRQL EQU $03FE ;INTERRUPT VECTOR, LOW BYTE A-16 APPENDIX F Assembly Language Program Listings (continued) 10 IRQH EQU $03FF ;INTERRUPT VECTOR, HIGH BYTE 11 BASE EQU $C440 ;FIRST SPEECH CHIP 12 DURPHON EQU BASE ;REGISTER 0 OF SPEECH CHIP 13 INFLECT EQU BASE+$01 ;REGISTER 1 OF SPEECH CHIP 14 RATEINF EQU BASE+$02 ;REGISTER 2 OF SPEECH CHIP 15 CTTRAMP EQU BASE+$03 ;REGISTER 3 OF SPEECH CHIP 16 FILFREQ EQU BASE+$04 ;REGISTER 4 OF SPEECH CHIP 17 PCR EQU $C0C ;PERIPHERAL CONTROL REG-6522 18 IFR EQU $C40D ;INTERRUPT FLAG REG-6522 19 PCR EQU $C48C ;INTERRUPT ENABLE REG-6522 20 IFR EQU $C48D 21 IER EQU $C48E 22 *SETUP ROUTINE 23 * 6D00: 78 24 SEI ;DISABLE INTERRUPTS 6D01: A9 4D 25 LDA #INTERR ;SERVICE ROUTINE A-17 APPENDIX F Assembly Language Program Listings (continued) 6D08: 8D FF 03 28 STA IRQH 29 * 6D0B: AS FA 30 LDA TABPTR+1 ;GET HIGH ADDRESS OF DATA 6D0D: 85 FC 31 STA OUTPTR+1 ;STORE IN WORK POINTER 6D0F: A6 F9 32 LDX TABPTR ;GET LOW ADDRESS OF DATA 6D11: E8 33 INX ;INCREMENT TWICE 6D12: E8 34 INX ;TO SKIP OVER LENGTH BYTES 6D13: D0 02 35 BNE CONT ;CHECK FOR PAGE BOUNDARY 6D15: E6 FC 36 INC OUTPTR+1 6D17: 86 FB 37 CONT STX OUTPTR ;STORE LOW BYTE 38 * 6D19: A0 01 39 LDY #$01 6D1B: B1 F9 40 LDA (TABPTR),Y ;GET HIGH LENGTH BYTE 6D1D: 18 41 CLC 6D1E: 65 FA 42 ADC TABPTR+1 ;AND ADD TO BASE ADDRESS 6D20: 85 FE 43 STA ENDPTR+1 ;STORE END ADDRESS 6D22: 88 44 DEY 6D23: 81 F9 45 LDA (TABPRT),Y ;GET LOW LENGTH BYTE A-18 APPENDIX F Assembly Language Program Listings (continued) 6D25: 18 46 CLC 6D26: 65 F9 47 ADC TABPTR ;AND ADD TO BASE ADDRESS 6D28: 90 02 48 BCC CONT1 ;CHECK FOR PAGE BOUNDARY 6D2A: E6 FE 49 INC ENDPTR+1 6D2C: 85 FD 50 CONT1 STA ENDPTR ;STORE END ADDRESS 51 * 6D2E: A9 FF 52 CONT5 LDA #$FF ;SET BUSY FLAG 6D30: 85 FF 53 STA BUSY ;AND SET PERIPHERAL CONTROL 6D32: A9 0C 54 LDA #$0C ;REGISTER TO RECOGNIZE 6D34: 8D 0C C4 55 STA PCR ;SIGNAL FROM SPEECH CHIP 6D37: A9 80 56 LDA #$80 ;RAISE CTRL BIT IN REGISTER 3 6D39: 8D 23 C4 57 STA CTTRAMP 6D3C: A9 C0 58 LDA #$C0 ;SET TRANSITIONED INFLECTION 6D3E: 8D 20 C4 59 STA DURPHON ;MODE IN REGISTER 0 6D41: A9 70 60 LDA #$70 ;LOWER CTRL BIT 6D43: 8D 23 C4 61 STA CTTRAMP 6D46: A9 82 62 LDA #$82 ;ENABLE 6522 INTERRUPTS 6D48: 8D 0E C4 63 STA IER 6D48: 58 64 CLI ;CLEAR INTERRUPT MASK A-19 APPENDIX F Assembly Language Program Listings (continued) 6D4C: 60 65 RTS ;RETURN TO CALLER 66 * 67 *INTERRUPT ROUTINE 6D4D: 8A 68 INTERR TXA ;SAVE REGISTERS 6D4E: 48 69 PHA 6D4F: 98 70 TYA 6D50: 48 71 PHA 6D51: A9 02 72 LDA #$02 ;CLEAR INTERRUPT FLAG 6D53: 8D 0D C4 73 STA IFR 6D56: A0 00 74 LDY #$00 ;INIT REGISTERS 6D58: A2 04 75 LDX #$04 6D5A: A5 FB 76 LDA OUTPRT ;CHECK FOR END OF DATA FILE 6D5C: C5 FD 77 CMP ENDPTR 6DSE: D0 20 78 BCC CONT6 ;IF NOT THEN CONTINUE 6D60: A5 FC 79 LDA OUTPTR+1 ;CHECK HIGH ADDRESS ALSO 6D62: C5 FE 80 CMP ENDPRT+1 6D64: D0 1A 81 BCC CONT6 ;IF NOT THEN CONTINUE 6D66: A9 00 82 LDA #$00 ;IF END, TURN EVERY- THING OFF 6D68: 8D 20 C4 83 STA DURPHON ;STORE PAUSE PHONEME 6D68: A9 70 84 LDA #$70 ;ZERO AMPLITUDE A-20 APPENDIX F Assembly Language Program Listings (continued) 6D6D: 8D 23 C4 85 STA CTTRAMP 6D70: A9 00 86 LDA #$00 ;CLEAR BUSY FLAG 6D72: 85 FF 87 STA BUSY 6D74: A9 02 88 LDA #$02 ;CLEAR INTERRUPT ENABLE 6D76: 8D 0E C4 89 STA IER ;IN 6522 6D79: 68 90 RET PLA ;RESTORE REGISTERS 6D7A: A8 91 TAY 6D7B: 68 92 PLA 6D7C: AA 93 TAX 6D7D: A5 45 94 LDA $45 6D7F: 40 95 RTI ;RETURN FROM INTERRUPT 96 * 6D80: B1 FB 97 CONT6 LDA (OUTPTR),Y ;GET DATA 6D82: 9D 20 C4 98 STA BASE,X ;STORE IN SPEECH CHIP 6D8F: E6 FB 99 INC OUTPTR ;NEXT DATA 6D87: D0 02 100 BNE CONT7 6D89: E6 FC 101 INC OUTPTR+1 102 * 6D88: CA 103 CONT7 DEX ;NEXT REGISTER 6D8C: E0 FF 104 CPX #$FF ;LAST REGISTER? 6D8E: D0 F0 105 BNE CONT6 ;NO, CONTINUE 6D90: F0 E7 106 BEQ RET ;YES, RETURN ADDEMDUM Page A-15, SPEECH-COMPOSITE DRIVER update as follows: INSERT After line 16: DDRB EQU $C402 DDRA EQU $C403 After line 29: LDA #$00 STA DDRA STA DDRB After line 89: LDA #SFF STA DDRA LDA #$07 STA DDRB