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 ;LSB OF VECTOR ADDRESS 0330 STA HATABS+1,X 0340 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
Back to previous page