; .LIST ME ;MACRO EXPANSIONS ; .LIST TTM ;TERMINAL FORMAT ; ; PROGRAM F\R ATT LARMA PERSONS\KARE 0047 - 697 37 AUTOMATISKT ; VIA MODEN ASSIGNAT TILL LUN #1. PROGRAMMET GER SIG ALDRIG F\RR[N VOICE ; DETECTED HAR ERH]LLITS. EFTERSOM LINJEN KAN VARA UPPTAGEN B\RJAR ; PROGRAMMET ALLTID MED ATT G\R HANGUP P] DEN OM DEN [R INLOGGAD. ; MODEMET SKA ST] I 2400 BAUD, LINJEN ]TERST[LLES EFTER ANROPET TILL ; VAD DEN STOD I. OM DET INTE G]R MED 2400 F\RS\KER DEN MED 1200. ; ; HISTORIK: ; DATUM NAMN ]TG[RD ; 8604?? PER SUNDSTR\M,DEC URUPPF\RANDE(DECUS MEETING) ; 870119 B-E TAPPER ANPASSNING TILL CDS-MODEM OCH UB ; 880124 B-E TAPPER EXIT AST ; ; .MCALL QIOW$S,EXST$S,ASTX$S,MRKT$S,DIR$,GMCR$ .MCALL CLEF$S,WTSE$S,STLO$S,RDAF$S,SETF$S,SREA$S ; FLGBUF: .BLKW 4 ;EVENT FLAG BUFFER ; .EVEN IOSB: .BLKW 2 ;IO STATUS BLOCK ; .EVEN SETT1: .BYTE TC.TTP ;CHRACTERISTICS F\R LINJEN VID DIAL .BYTE T.UNK0 ;UNKNOWN .BYTE TC.DLU ;REMOTE STATUS .BYTE 2 ;BY-PASS DTR .BYTE TC.ABD ;AUTO-BAUD DETECTION .BYTE 0 ;NO .BYTE TC.RSP ;RECIVE SPEED SPD1: .BYTE S.1200 ;SET TO 1200 .BYTE TC.ASP ;ANSWER SPEED SPD2: .BYTE S.1200 ;SET TO 1200 .BYTE TC.XSP ;TRANSMIT SPEED SPD3: .BYTE S.1200 ;SET TO 1200 .BYTE TC.TSY ;TERMINAL SYNC .BYTE 1 ;ON .BYTE TC.CTS ;CTRL-Q,CTRL-S,CTRL-O STATE .BYTE 0 ;CLEAR IT .BYTE TC.TBF ;TYPE-AHEAD .BYTE 0 ;FLUSH BUFFER .BYTE TC.NEC ;NO ECHO .BYTE 1 ;YES .BYTE TC.FDX ;FULL DUPLEX .BYTE 1 ;YES .BYTE TC.NBR ;NO BROADCAST .BYTE 1 ;YES (I.E. NO BROADCAST) .BYTE TC.RAT ;TYPE AHAEAD .BYTE 1 ;YES ; SETT1L =.-SETT1 ; .EVEN GETT1: .BYTE TC.TTP ;SPARADE CHARACTERISTICS .BYTE 0 .BYTE TC.DLU ;REMOTE STATUS .BYTE 0 .BYTE TC.ABD ;AUTO-BAUD DETECTION .BYTE 0 .BYTE TC.RSP ;RECIVE SPEED .BYTE 0 .BYTE TC.ASP ;ANSWER SPEED .BYTE 0 .BYTE TC.XSP ;TRANSMIT SPEED .BYTE 0 .BYTE TC.TSY ;TERMINAL SYNC .BYTE 0 .BYTE TC.TBF ;TYPE-AHEAD .BYTE 0 .BYTE TC.NEC ;NO ECHO .BYTE 0 .BYTE TC.FDX ;FULL DUPLEX .BYTE 0 .BYTE TC.NBR ;NO BROADCAST .BYTE 0 .BYTE TC.RAT ;TYPE AHAEAD .BYTE 0 GETT1L =.-GETT1 ; LOADED: .WORD 0 ;SET TO 1 IF CHARACTERISTICS WAS LOADED OK VDET: .WORD 0 ;SET TO 1 IF 'V IS DETECTED DDET: .WORD 0 ;SET TO 1 IF 'D IS DETECTED AND VDET IS 1 HUP: .WORD 0 ;SET TO 1 IF HANG-UP ALREADY TRIED ; INBUF: .BLKB 20. ;INPUT BUFFER FOR OK AND DT STATUSES INMAX= .-INBUF INSTAT: .WORD ;IOSTAT(1) INLEN: .WORD ;IOSTAT(2) == INLEN ; ASTCHA: .WORD ;AST CHAR REC ON STACK ; EXSTAT: .WORD 0 ;OK STATUS TO BE SET, INITALLY 0 = PENDING GMCR: GMCR$ ;DEFINE GMCR MACRO ; .EVEN ASC0: .ASCII /0/ ASC9: .ASCII /9/ SPACE: .ASCII <40> ; .EVEN TIMT: .ASCII <15><12>/RNG - Time-out f|r indata !/<15> TIMTL= .-TIMT .EVEN ABO: .ASCII <15><12>/RNG - Aborted via directive or CLI !/<15> ABOL= .-ABO .EVEN BRO1: .ASCII <15><12>/SYSTEMETS AUTOMATLARM BEH\VER MODEMET !/<15> BRO1L= .-BRO1 .EVEN BRO2: .ASCII <15><12>/NEDKOPPLING KOMMER ATT SKE !/<15> BRO2L= .-BRO2 .EVEN FELT: .ASCII <15><12>/RNG - Fel i indata !/<15> FELTL= .-FELT .EVEN T120: .ASCII <15><12>/RNG - F|rs|ker med 1200 Baud !/<15> T120L= .-T120 .EVEN T240: .ASCII <15><12>/RNG - F|rs|ker med 2400 Baud !/<15> T240L= .-T240 .EVEN PROMP: .ASCII <15><12>/RNG - Ge |nskad kod (3 siffror) >/<15> PROMPL= .-PROMP .EVEN TEX3: .ASCII <15><12>/**** RNG - Larm 1/ TXX3: .ASCII /000/ TEJ3: .ASCII / EJ S[NT!/ TEJ4: .ASCII / NYTT F\RS\K !/<15> TEX3L =.-TEX3 TOK3: .ASCII / s{nt. / TOK4: .ASCII / /<15> ;MUST MATCH LENGTH OF TEJ3/TEJ4 TOK4L =.-TOK4 TOK3L =.-TOK3 .EVEN TEX4: .ASCII <15><12>/RNG - Modemet tv}ngsnedkopplat./<15> TEX4L =.-TEX4 .EVEN WAKE: .ASCII <15><15>/B/<15> ;V[CK MODEMET WAKEL =.-WAKE .EVEN DIAL: .ASCII /D 004769737A01/ ;EVEN F\R ATT PASSA MED N[STA DEL NUM: .ASCII /000/<15> ;DEFAULT MESSAGE + REDIAL 9 + CR DIALL =.-DIAL .EVEN ; ; STYRSEKTION ; RNG:: ; ; - GET MCR COMMANDLINE AND EVALUATE ; DIR$ #GMCR ;GET MCR COMMANDLINE BCS MANUAL MOV $DSW,R4 ;LOAD #CHAR INTO R4 SUB #3,R4 ;DRA IFR]N 4 (RNG.) JMP COMCOD ; MANAGA: QIOW$S #IO.WVB,#5,#5,,,,<#FELT,#FELTL,> ;REJECTED ; MANUAL: QIOW$S #IO.RPR!TF.TMO,#5,#5,,#IOSB,,<#GMCR+G.MCRB+4,#20.,#1,#PROMP,#PROMPL,#0> CMP #IS.TMO,IOSB BEQ TMOT CMPB #IS.SUC,IOSB BNE MANAGA ;IO FAILED, TRY AGAIN MOV IOSB+2,R4 ;LOAD # CHARS INTO R4 MOVB SPACE, ;BEFORE IO BUFFER ADRESS (SPACE) BR COMCOD ;JOIN COMMON CODE ; TMOT: QIOW$S #IO.WBT,#5,#5,,,,<#TIMT,#TIMTL,> ;TIME-OUT MOV #2,EXSTAT JMP EXIT COMCOD: CLR R3 ;USED TO COUNT NUMBER OF NUMERICS MOV #,R5 ;MCR BUFFER ADRESS, FIRST ITEM MOV #NUM,R0 ;NUMBER PART OF DIAL BUFFER MOV #TXX3,R1 ;NUMBER PART OF SUCCESS MESSAGE BUFFER TST R4 ;DRA IFR]N 4 (RNG.) BEQ 2$ ;OM INGA TECKEN - HOPPA CMPB (R5)+,SPACE ;SPACE ? BEQ 3$ ;YES, ASSUME NUMBER PART STARTS NEXT POSITION ; 2$: CLR R4 ;NO NUMBERS IN THERE OR INVALID BUFFER JMP MANAGA ;PROMPT FOR CODE ; 3$: CMP #3,R4 ;FLER [N 3 TECKEN ? BPL 5$ ;NEJ DET [R DET INTE, JOIN COMMON CODE MOV #3,R4 ;TESTA BARA 3 ST ; 5$: CMP R3,R4 ;ANTAL TECKEN ATT TESTA >= GODK[NDA BPL SETLIN ;INGA FLER ATT TESTA, R3 = ANTALET, R4 = MAX CMPB (R5),ASC0 ;TECKEN >= "0" ? BMI SETLIN ;N[H[, INTE SIFFRA CMPB ASC9,(R5) ;TECKEN <= "9" ? BMI SETLIN ;N[H[, INTE SIFFRA MOVB (R5),(R0)+ ;MOVE TO DIAL, POINT TO NEXT DIAL MOVB (R5)+,(R1)+ ;MOVE TO MESSAGE, POINT TO NEXT MES AND NEXT CHR INC R3 ;ETT TECKEN TESTAT BR 5$ ;KOLLA N[STA TECKEN ; ; ; - TRY TO SET UP LINE FOR 2400 BAUD OPERATION ; SETLIN: QIOW$S #SF.GMC,#1,#1,,#IOSB,,<#GETT1,#GETT1L> ;L[S TT1: STATUS BCS HANGUP ;DIRECTIVE FAILED, TRY TO HANG-UP CMPB #IS.SUC,IOSB BNE HANGUP ;IO FAILED, TRY TO HANG UP MOV #1,LOADED ;MARK CHARACTERISTICS AS LOADED, PREVENT RELOAD SREA$S #ABORT ;SPECIFY EXIT AST BCC 4$ JMP CLOS ;DIRECTIVE FAILED 4$: QIOW$S #SF.SMC,#1,#1,,#IOSB,,<#SETT1,#SETT1L> ;SKRIV NY STATUS BCS HANGUP ;DIRECTIVE FAILED CMPB #IS.SUC,IOSB BNE HANGUP ;IO FAILED QIOW$S #IO.ATA!TF.XCC,#1,#1,,#IOSB,,<#AST> ;ATTACH TT1:UNSOL.AST BCS HANGUP ;DIRECTIVE FAILED CALL DEBUG CMPB #IS.SUC,IOSB BNE HANGUP ;IO FAILED JMP GOFRIT ;GO FOR IT ; ; - TRY REINITIATING BY HANGING UP THE PHONE ; HANGUP: ADD #1,HUP ;HANG UP TRIED ONCE MORE QIOW$S #IO.WBT,#5,#5,,,,<#TEX4,#TEX4L,> ;HANGING UP ! QIOW$S #IO.WBT,#1,#1,,,,<#BRO1,#BRO1L,> ;SYSTEMET TAR \VER! QIOW$S #IO.WBT,#1,#1,,,,<#BRO2,#BRO2L,> ;NEDKOPPLING! QIOW$S #IO.DET,#1,#1 ;DETACH DEVICE (MIGHT BE ATT) QIOW$S #IO.HNG,#1,#1,,#IOSB ;HANG UP IF BUSY BCS CLOS ;DIRECTIVE FAILED, GIVE UP CALL DEBUG CMPB #IS.SUC,IOSB BNE CLOS ;IO FAILED, GIVE UP CALL WAIT3 ;WAIT 8 SECONDS FOR LOG-OUT TST LOADED ;IS CHARACTERISTICS ALREADY LOADED BNE 20$ ;IF NE YES, DONT DO IT AGAIN ; QIOW$S #SF.GMC,#1,#1,,#IOSB,,<#GETT1,#GETT1L> ;L[S TT1: STATUS BCS CLOS ;DIRECTIVE FAILED CMPB #IS.SUC,IOSB BNE CLOS ;IO FAILED MOV #1,LOADED ;MARK CHARACTERISTICS AS LOADED SREA$S #ABORT ;SPECIFY EXIT AST BCS CLOS ;DIRECTIVE FAILED ; 20$: QIOW$S #SF.SMC,#1,#1,,#IOSB,,<#SETT1,#SETT1L> ;SKRIV NY STATUS BCS CLOS ;DIRECTIVE FAILED CMPB #IS.SUC,IOSB BNE CLOS ;IO FAILED ; QIOW$S #IO.ATA!TF.XCC,#1,#1,,#IOSB,,<#AST> ;ATTACH TT1:UNSOL.AST BCS CLOS ;DIRECTIVE FAILED CALL DEBUG CMPB #IS.SUC,IOSB BEQ GOFRIT ;IO OK ; CLOS: MOV #3,EXSTAT ;NOTE THAT THIS MUST HAVE GONE WRONG JMP CLOSIT .EVEN ; ABORT: QIOW$S #IO.WBT,#5,#5,,,,<#ABO,#ABOL,> ;ABORTED MOV #10.,EXSTAT ;ALL RIGHT MOV #TOK4L,R0 ;L[NGD P] MESSAGE MOV #TOK4,R1 ;ADRESS TILL D:O MOV #TEJ4,R2 ;ADRESS TILL FELMEDDELANDE (BLANKA) 40$: MOVB (R1)+,(R2)+ ;FLYTTA SOB R0,40$ ;FLYTTA N[STA JMP CLOSIT .; .EVEN ; ; - RING UPP MBS-S\KAREN ; GOFRIT: ;GO FOR IT ; ; - V[CK MODEMET OCH L[S SVARET UTAN EKO MED TIMEOUT 10 SEKUNDER ; CALL WAIT ;LUGN QIOW$S #IO.RPR!TF.TMO!TF.RNE,#1,#1,,#IOSB,,<#INBUF,#2.,#1,#WAKE,#WAKEL,#000> BCC 8$ JMP ERROR ; 8$: CALL DEBUG CMPB #IS.SUC,IOSB BNE HANG ;IO FAILED, TRY AGAIN CMP #IS.TMO,IOSB BEQ HANG ;IO FAILED, TRY AGAIN CMP INBUF,#"OK BNE HANG ;ANSWER IS WRONG, RETRY ; ; - GE NUMRET ; QIOW$S #IO.RPR!TF.TMO!TF.RNE,#1,#1,,#IOSB,,<#INBUF,#2.,#1,#DIAL,#DIALL,#000> ;MATA UT NUMRET BCC 9$ JMP ERROR ; 9$: CALL DEBUG CMPB #IS.SUC,IOSB BNE HANG ;IO FAILED CMP #IS.TMO,IOSB BEQ HANG ;IO FAILED CMP INBUF,#"DT BNE HANG ;ANSWER IS WRONG CLEF$S #3 ;CLEAR FLAG 3 MRKT$S #4,#120.,#2 ;TRIGGER FLAG 4 FOR 360 SECONDS = 2 MINUTES STLO$S 0,#14 ;WAIT FOR FLAG 3 OR 4 RDAF$S #FLGBUF ;READ EVENT FLAGS MOV #2,EXSTAT ;DIDNT WORK BIT FLGBUF,#4 ;TEST FLAG 3 BEQ HANG ;OM EJ SATT - TIME OUT - TRY AGAIN MOV #10.,EXSTAT ;ALL RIGHT MOV #TOK3L,R0 ;L[NGD P] OK-MESSAGE MOV #TOK3,R1 ;ADRESS TILL D:O MOV #TEJ3,R2 ;ADRESS TILL FELMEDDELANDE 11$: MOVB (R1)+,(R2)+ ;FLYTTA SOB R0,11$ ;FLYTTA N[STA BR CLOSIT ; HANG: CMP HUP,#3 ;TRIED 3 TIMES BEQ 12$ ;IF EQ YES CMP HUP,#6 ;TRIED 6 TIMES BEQ 13$ ;IF EQ YES JMP HANGUP ;TRY HANGING UP AGAIN ; 12$: MOVB #S.2400,SPD1 ;TRY TO SET UP ANOTHER SPEED MOVB #S.2400,SPD2 ;TRY TO SET UP ANOTHER SPEED MOVB #S.2400,SPD3 ;TRY TO SET UP ANOTHER SPEED QIOW$S #IO.WBT,#5,#5,,,,<#T240,#T240L,> ;TRYING 2400 BAUD ; 13$: MOV #0,HUP MOVB #S.1200,SPD1 ;TRY TO SET UP ANOTHER SPEED MOVB #S.1200,SPD2 ;TRY TO SET UP ANOTHER SPEED MOVB #S.1200,SPD3 ;TRY TO SET UP ANOTHER SPEED QIOW$S #IO.WBT,#5,#5,,,,<#T120,#T120L,> ;TRYING 1200 BAUD JMP HANGUP ;TRY HANGING UP AGAIN ; CLOSIT: ; ; - L[GG P] OCH KVITTERA ; QIOW$S #IO.HNG,#1,#1 ;HANG UP LINE QIOW$S #IO.WBT,#5,#5,,,,<#TEX3,#TEX3L,> ;MESSAGE (NOT) SENT BCC 7$ JMP ERROR 7$: TST LOADED ;IS CHARACTERISTICS ALREADY LOADED BEQ EXIT ;IF EQ NO, DONT TRY TO RE-LOAD QIOW$S #SF.SMC,#1,#1,,,,<#GETT1,#GETT1L> ;RESTORE LINE BCC EXIT JMP ERROR ; EXIT: EXST$S EXSTAT ;EXIT WITH STATUS ; AST: ;AST TO GET UNSOLIC. CHARS. MOV (SP)+,ASTCHA ;TAKE IT OFF STACK (ITS A WORD) ; CMPB ASTCHA,#'V BNE NOTV MOV #1,VDET BR EXAST NOTV: TST VDET BEQ CLEAR ;F\RRA EJ V ELLER VD - CLEAR CMPB ASTCHA,#'D ;D ? BNE NOTD ;NE NO, BUT DDET MIGHT BE SET MOV #1,DDET ;EQ, MARK IT BR EXAST NOTD: TST DDET BEQ CLEAR ;F\RRA EJ D - CLEAR CMPB ASTCHA,#'T BNE CLEAR ;THIRD IS NOT T SETF$S #3 ;SET FLAG 3 BR EXAST CLEAR: MOV #0,VDET MOV #0,DDET EXAST: QIOW$S #IO.WBT,#5,#5,,,,<#ASTCHA,#1,> ;WRITE IT ON TERMINAL ASTX$S WAIT: MRKT$S #1,#10.,#1 ;10 TICKS WTSE$S #1 RETURN WAIT3: MRKT$S #1,#8.,#2 ;8 SECONDS WTSE$S #1 RETURN ERROR: CALL DEBUGG MOV $DSW,R0 MOV IOSB,R1 IOT ; DEBBUF: .ASCII <12><15>/*** RNG - DSW=/ DEB1: .REPT 6. .BYTE 40 ;SPACE .ENDR .ASCII / IOSB1L=/ DEB2: .REPT 6. .BYTE 40 ;SPACE .ENDR .ASCII / IOSB1H=/ DEB3: .REPT 6. .BYTE 40 ;SPACE .ENDR .ASCII / IOSB2=/ DEB4: .REPT 6. .BYTE 40 ;SPACE .ENDR DEBLEN= .-DEBBUF ; .EVEN DEBUG: CALL WAIT ; RETURN ;REMOVE RETURN FOR DEBUG DEBUGG: MOV #DEB1,R0 MOVB $DSW,R1 CLR R2 INC R2 CALL $CBDSG MOV #DEB2,R0 MOVB IOSB,R1 CLR R2 INC R2 CALL $CBDSG MOV #DEB3,R0 MOVB IOSB+1,R1 CLR R2 INC R2 CALL $CBDSG MOV #DEB4,R0 MOV IOSB+2,R1 CLR R2 INC R2 CALL $CBDSG QIOW$S #IO.WBT,#5,#5,,,,<#DEBBUF,#DEBLEN,> ;WRITE IT ON TERMINAL QIOW$S #IO.WBT,#5,#5,,,,<#INBUF,#2,> ;WRITE IT ON TERMINAL RETURN ; .END RNG