CHIP 8008: 20 0B 90 23 JSR LATCH 800B: B1 08 24 LDA (PTR),Y ;GET DATA FROM TABLE 800D: 8D 01 C4 25 STA ORA 8010: 20 16 90 26 JSR WRITE ;STORE IN REGISTER 8013: C0 0F 27 CPY #$0F ;END OF DATA? 8015: F0 04 28 BEQ DONE ;YES, EXIT 8017: CB 29 INY 8018: 4C 05 80 30 JMP LOOP ;NO, GET NEXT SET A-13 APPENDIX F Assembly Language Program Listings (continued) 801B: 60 31 DONE RTS ;RETURN 32 * 33 *ROUTINES FOR SECOND 6522 34 * 801C: 20 4D 90 35 START2 JSR RESET2 ;SAME INSTRUCTIONS AS 801F: A0 00 36 LDY #$00 ;ABOVE 8021: 8C 81 C4 37 LOOP2 STY ORA2 8024: 20 37 90 38 JSR LATCH2 8027: B1 0A 39 LDA (PTR2),Y 8029: 8D 81 C4 40 STA ORA2 802C: 20 42 90 41 JSR WRITE2 802F: C0 0F 42 CPY #$0F 8031: F0 04 43 BEQ DONE2 8033: CB 44 INY 8034: 4C 22 80 45 JMP LOOP2 8037: 60 46 DONE2 RTS 1 "PROCESSOR LOOP 2 "FOR LASER AND BOMB 3 "SOUND EFFECT 4 * 5 ORG $8F00 6 * ;FOR FIRST 6522 7 * 8 PTR EQU $08 ;DATA POINTE 9 TONE EQU $0A ;TONAL VALUE 10 TIME EQU $0B ;TIME VALUE FOR DELAY 11 BASE EQU $C400 ;CARD ADDRESS 12 ORA EQU BASE+1 ;PORT A 13 TAR EQU $8000 ; TABLE ACCESS ROUTINE 14 LATCH EQU $900B ;LATCH SUBROUTINE A-14 APPENDIX F Assembly Language Program Listings (continued) 15 WRITE EQU $9016 ;WRITE SUBROUTINE 16 RESET EQU $9021 ;RESET SUBROUTINE 17 WAIT EQU $FCAB ;WAIT SUBROUTINE 18 * 19 * 8F00: A9 00 20 LASER LDA #$00 ;LOAD HIGHEST 8F02 85 0A 21 STA TONE ;FREQUENCY VALUE 8F04: A9 0F 22 LDA #$0F ;LOAD SHORT 8F06: 85 0B 23 STA TIME ;TIME DELAY 8F08: 4C 13 8F 24 JMP START ;AND START 8F0B: A9 30 25 BOMB LOA #$30 ;LOAD MIDDLE 8F0D: 85 0A 26 STA TONE ;FREQUENCY VALUE 8F0F: A9 40 27 LDA #$40 ;LOAD LONGER 8F11: 85 0B 28 STA TIME ;TIME DELAY 8F13: A9 90 29 START LDA #$90 ;SET TABLE ADDRESS 8F15: 85 08 30 STA PTR 8F17: A9 81 31 LDA #$81 8F19: 85 09 32 STA PTR+1 8F1B: 20 00 80 33 JSR TAR ;TRANSFER DATA 8F1E: A9 00 34 LDA #$00 ;LATCH FIRST REGISTER 8F20: 8D 01 C4 35 STA ORA ;ADDRESS 8F23: 20 0B 90 36 JSR LATCH 8F26: A5 0A 37 LOOP LDA TONE ;GET TONE VALUE 8F28: 8D 01 C4 38 STA ORA ;STORE IN REGISTER 8F2B: 20 16 90 39 JSR WRITE 8F2E: A5 0B 40 LDA TIME ;GET TIME VALUE A-15 APPENDIX F Assembly Language Program Listings (continued) 8F30: 20 A8 FC 41 JSR WAIT ;AND DELAY 8F33: E6 0A 42 INC TONE ;INCREMENT TONE VALUE 8F35: A9 FF 43 LDA #$FF ;END OF INCREASE? BF37: C5 0A 44 CMP TONE 8F39: F0 03 45 BEQ DONE ;YES,EXIT 8F3B: 4C 26 8F 46 JMP LOOP ;NO, START AGAIN 8F3E: A5 0B 47 DONE LDA TIME ;GET TIME VALUE 8F40: 20 AB FC 48 JSR WAIT ;DELAY 8F43: A9 00 49 LDA #$00 ;RESTORE ORIGINAL 8F45: 85 0A 50 STA TONE ;TONE VALUE 8F47: 20 21 90 51 JSR RESET ;CLEAR SOUND CHIP 8F4A: 60 52 RTS ;REGISTERS AND RETURN 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 This document was scanned and put through Corel's OCR, the application had a difficult time distinguishing between "o's" and zeroes and "i's" and ones. If you encounter any problems please e-mail me at: laserdog@bright.net June 17,1999 -end of part 8- (This concluded the entire Mockingboard Manual)