50 .OPT LIST›60 ;EQUATES›70 BUFFO = $CB ;BUFFER OFFSET IS A SAFE PAGE 0 LOCATION›80 BUFF = $2014 ;LOCATION OF SAM BUFFER›90 EOL = $9B ;END OF LINE CHARACTER CODE›0100 SAYIT = $200B ;RECITER ENTRY POINT›0110 HATABS = $031A ;START OF HANDLER TABLE›0120 ;THIS IS IT›0130 ;INSTALLATION ROUTINE›0140 ;LOCATED IN PAGE 6›0150 *= $0600›0160 HANDLOAD›0170 PLA ;REMOVE UNUSED BASIC ARGUMENT›0180 LDX #0 ;START AT THE BEGINNING›0190 STX BUFFO ;MARK BUFFER EMPTY›0200 SEARCH›0210 LDA HATABS,X ;CHECK DEVICE NAME›0220 BEQ NOMORE ;LAST ENTRY?›0230 CMP #'V ;IS HANDLER ALREADY INSTALLED?›0240 BEQ END ;YES, SO QUIT›0250 INX ›0260 INX ›0270 INX ;NEXT ENTRY›0280 BNE SEARCH›0290 NOMORE ; LOAD HANDLER›0300 LDA #'V ;DEVICE NAME, "V:"(VOICE)›0310 STA HATABS,X ;TO HANDLER TABLE›0320 LDA # SAMHAND ;MSB OF VECTOR ADDRESS›0350 STA HATABS+2,X›0360 LDA #0›0370 STA HATABS+3,X ;ENSURE CORRECT END OF TABLE›0380 END RTS ›0390 ;HANDLER TABLE UPDATED›0400 ;IN ORDER TO USE, AFTER RESET SAY,›0410 ;USE "A=USR(1536)"›0420 .PAGE "THIS IS SAM HANDLER"›0430 SAMHAND›0440 .WORD VOPEN-1›0450 .WORD VCLOSE-1›0460 .WORD VGETB-1 ;IMPOSSIBLE, BUT A VECTOR IS REQUIRED›0470 .WORD VPUTB-1›0480 .WORD VSTATUS-1›0490 .WORD VXIO-1›0500 JMP VXIO ;FOR SAFETY!›0510 VXIO ; ERROR IT›0520 VGETB RTS ;CANNOT BE DONE›0530 VOPEN ; DO NOTHING BUT TELL›0540 VSTATUS ; O.S. THAT EVERYTHING O.K.›0550 LDY #1 ;IF THEY ARE CALLED›0560 RTS ;THEY SIGNAL SUCCESS!›0570 VPUTB›0580 PHA ;SAVE DATA BYTE›0590 LDA BUFFO›0600 TAX ;BUFFER OFFSET IN X›0610 PLA ›0620 CMP #EOL ;IS IT AN END OF LINE›0630 BNE NEXT ;NO›0640 LDA #'. ;YES, SO SEND A›0650 STA BUFF,X ;PERIOD FOR INFLECTION›0660 INX ›0670 LDA #EOL ;AND THEN SEND THE›0680 STA BUFF,X ;END OF LINE›0690 JMP SPEAK ;AND SAY IT›0700 STA BUFF,X›0710 NEXT CMP #', ;IS IT A COMMA?›0720 BNE NEXT1 ;NO›0730 STA BUFF,X ;YES SO SEND IT,›0740 INX ›0750 LDA #$20 ;AND A SPACE.›0760 NEXT1 STA BUFF,X›0770 INX ›0780 TXA ›0790 STA BUFFO ;INCREMENT BUFFER OFFSET›0800 CMP #$FE ;BUFFER FULL?›0810 BNE NOTFULL›0820 LDA #EOL ;BUFFER FULL SO SEND EOL›0830 STA BUFF,X ;TO BUFFER AND SAY IT.›0840 SPEAK›0850 JSR SAYIT›0860 LDA #EOL›0870 STA BUFF ;EMPTY BUFFER›0880 LDA #0›0890 STA BUFFO ;MARK BUFFER EMPTY›0900 NOTFULL LDY $01 ;MARK SUCCESS›0910 RTS ›0920 ;AND THAT'S IT!›0930 VCLOSE›0940 LDA #EOL›0950 STA BUFF,X›0960 JSR SAYIT ;ON CLOSE, SPEAK WHAT ID IN BUFFER›0970 LDA #EOL›0980 STA BUFF ;EMPTY BUFFER›0990 LDA #0›1000 STA BUFFO ;MARK BUFFER EMPTY›1010 LDY #1 ;SIGNAL SUCCESS›1020 RTS ›