10 ; SAM HANDLER›20 ; BY CHRIS BONE›30 ; (c)1985, ANTIC PUBLISHING›50       .OPT LIST›60 ;EQUATES›70 BUFFO =   $CB     ;BUFFER OFFSET IS                      A SAFE PAGE 0›71 ;                  LOCATION›80 BUFF  =   $2014   ;LOCATION OF SAM                       BUFFER›90 EOL   =   $9B     ;END OF LINE›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›0141 ;›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?›0221 ;›0230     CMP #'V     ;IS HANDLER                            ALREADY›0231 ;                INSTALLED?›0240     BEQ END     ;YES, SO QUIT›0241 ;›0250     INX ›0260     INX ›0270     INX         ;NEXT ENTRY›0280     BNE SEARCH›0281 ;›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 PROPER                         END OF TABLE›0380 END›0381     RTS ›0382 ;›0390 ;HANDLER TABLE UPDATED›0400 ;IN ORDER TO USE AFTER RESET›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›0461 ;                  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 ;         CANNOT BE DONE›0521     RTS ›0522 ;›0530 VOPEN ;         DO NOTHING BUT                        TELL O.S. THAT›0540 VSTATUS ;       EVERYTHING O.K.›0550     LDY #1      ;IF 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›0631 ;›0640     LDA #'.     ;YES, SO SEND A›0650     STA BUFF,X  ;PERIOD FOR                            INFLECTION›0660     INX ›0670     LDA #EOL    ;AND THEN SEND›0680     STA BUFF,X  ;END OF LINE›0690     JMP SPEAK   ;AND SAY IT›0691 ;›0700     STA BUFF,X›0710 NEXT›0711     CMP #',     ;IS IT A COMMA?›0720     BNE NEXT1   ;NO›0721 ;›0730     STA BUFF,X  ;YES SO SEND IT,›0740     INX ›0750     LDA #$20    ;AND A SPACE.›0760 NEXT1›0761     STA BUFF,X›0770     INX ›0780     TXA ›0790     STA BUFFO   ;INCREMENT BUFFER                      OFFSET›0800     CMP #$FE    ;BUFFER FULL?›0810     BNE NOTFULL›0811 ;›0820     LDA #EOL    ;BUFFER FULL SO                        SEND EOL TO›0830     STA BUFF,X  ;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›0901     LDY $01     ;MARK SUCCESS›0910     RTS ›0911 ;›0920 ;AND THAT'S IT!›0930 VCLOSE›0940     LDA #EOL›0950     STA BUFF,X›0960     JSR SAYIT   ;ON CLOSE, SPEAK                       WHAT ID IN›0961 ;                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 ›