home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / HEATH / DIAL.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  7KB  |  242 lines

  1. ;TITLE - DIAL - Dialing Directory to phone nos. via POPCOM modem
  2. ; C.A.D. (Computer Aided Dialing ) Prog by R. Hirsh, 5-19-85  VER 1.1
  3. ;
  4. ; Program from REMARK Vol 6, Issue 10, Oct 85, page 73
  5. ;
  6. ;Prog is invoked with SHIFT-F12 key after installation.
  7. ;
  8. BIOS    SEGMENT AT 40H
  9.     ORG    9    ;DISPLAY CHAR IN AL
  10. BIOS_CONOUT LABEL FAR    ; ON CONSOLE - SEE BCONIO.ASM
  11.     ORG    18    ;OUTPUT CHAR IN AL
  12. BIOS_AUXOUT LABEL FAR    ; TO AUX DEVICE - SEE BAUXIO.ASM
  13. BIOS     ENDS
  14. ;
  15. ;DEFINITIONS
  16. ESC    EQU    27
  17. CR    EQU    13
  18. LF    EQU    10
  19. TAB    EQU    9
  20. DEN    EQU    21    ;NO. OF ENTRIES IN DIRECTORY
  21. KBDD    EQU    0F4H    ;KEYBOARD DATA PORT
  22. KBDS    EQU    0F5H    ;KEYBOARD STATUS PORT: BIT 0, 1=> CHAR TO READ
  23.             ; BIT 1, 0=>KBD PROCESSOR READY
  24. ;
  25. CODE    SEGMENT PARA PUBLIC 'CODE'
  26.     ASSUME CS:CODE, DS:CODE, SS:CODE
  27.     ORG    100H
  28. ;
  29. START:    JMP     INIT    ;INIT INSTALLS INT SERV ROUT ADDR INTO VECTOR TABLE
  30. ;
  31. ;VARIABLES
  32. BUFF    DB     3 DUP (?)    ;KEYBOARD INPUT BUFFER
  33. CHRS    DB     37        ;CHARS IN DIALING STRING
  34. INVMSG    DB     CR,ESC,'K','INVALID ENTRY!  ENTER A NUMBER: ',0
  35. ;
  36. OPTIONS    DB     ESC,'m70',ESC,'E',CR,LF
  37.     DB     ESC,'m50',TAB,TAB,TAB,TAB,'MODEM DIALER',ESC,'m70',CR,LF,CR,LF
  38.     DB     ESC,'m40','COMPUTERS:',ESC,'m70'
  39.     DB         '    0...VAX, Node A        6...Another BBS',CR,LF
  40.     DB     TAB,'    1...VAX, Node B        7...Byte BBS',CR,LF
  41.     DB     TAB,'    2...VAX, Node C        8...CompuServe',CR,LF
  42.     DB     TAB,'    3...VAX, Node D        9...    ',CR,LF
  43.     DB     TAB,'    4...DEC10            10...    ',CR,LF    
  44.     DB     TAB,'    5...Zenith BBS        11...    ',CR,LF
  45.     DB     ESC,'m20','HUMAN:    ',ESC,'m70'
  46.     DB         '   12...Blaze Pascal, Joliet, IL',CR,LF
  47.     DB     TAB,'   13...Connie Cobol, Chgo, IL',CR,LF
  48.     DB     TAB,'   14...Frank Fortran, Tampa, FL',CR,LF
  49.     DB     TAB,'   15...    ',CR,LF
  50.     DB     TAB,'   16...Weather    ',CR,LF
  51.     DB     TAB,'   17...Smart Graphics, StL, MO',CR,LF
  52.     DB     TAB,'   18...Heath Soft. Consult., OS and LangSoft.',CR,LF
  53.     DB     TAB,'   19...Heath Soft Consult., Appl. Pgms.',CR,LF
  54.     DB     TAB,'   20...    ',CR,LF
  55.     DB     TAB,'   21...EXIT DIAL',CR,LF,CR,LF
  56.     DB     ESC,'m60','Enter the number of the device or person you want to call and hit return: ',ESC,'m71',0
  57. HGMG    DB     CR,ESC,'K','Hit "H" to hang up or RETURN to exit DIAL program',0
  58. ;
  59. ;Enter numbers and special characters here (comma = 2 second pause)
  60. MSG0    DB     'ATD 123-4567,,,,,890123-111        ',CR    ;NODE A
  61.     DB     'ATD 123-4567,,,,,890123-222        ',CR    ;Node B
  62.     DB     'ATD 123-4567,,,,,890123-333        ',CR    ;Node C
  63.     DB     'ATD 123-4567,,,,,890123-444        ',CR    ;Node D
  64.     DB     'ATD 123-4567,,,,,890123-555        ',CR    ;Node D
  65.     DB     'ATD 616-982-3503            ',CR    ;ZEN 5
  66.     DB     'ATD                    ',CR    ;6
  67.     DB     'ATD 603-924-9820            ',CR    ;BYTE 7
  68.     DB     'ATD 241-3101            ',CR    ;COMS 8
  69.     DB     'ATD                    ',CR    ;9
  70.     DB     'ATD                 ',CR    ;10
  71.     DB     'ATD                    ',CR    ;11
  72.     DB     'ATD                    ',CR    ;12
  73.     DB     'ATD                    ',CR    ;13
  74.     DB     'ATD                    ',CR    ;14
  75.     DB     'ATD                    ',CR    ;15
  76.     DB     'ATD 321-2222            ',CR    ;WEA 16
  77.     DB     'ATD 314-962-7833            ',CR    ;SG 17
  78.     DB     'ATD 616-982-3860            ',CR    ;ZEN OS 18
  79.     DB     'ATD 616-982-3884            ',CR    ;ZEN PG 19
  80.     DB     'ATD                    ',CR    ;20
  81.     DB     'ATD                    ',CR    ;EXIT 21
  82. ;
  83. HGUP    DB     'ATH0',CR    ;HANG UP
  84. ;
  85. ;INT 5 SERVICE ROUTINE
  86. INT5:    PUSH    DS
  87.     PUSH    ES
  88.     PUSH    SI
  89.     PUSH    DI
  90.     PUSH    BP
  91.     PUSH    DX
  92.     PUSH    CX
  93.     PUSH    BX
  94.     PUSH    AX
  95.     PUSH     CS
  96.     POP    DS
  97.  
  98.     CALL    MAIN
  99.  
  100.     POP    AX
  101.     POP    BX
  102.     POP    CX
  103.     POP    DX
  104.     POP    BP
  105.     POP    DI
  106.     POP    SI
  107.     POP    ES
  108.     POP    DS
  109.     IRET
  110. ;
  111. ;MAIN PROGRAM
  112. MAIN    PROC    NEAR
  113.     MOV    SI,OFFSET OPTIONS    ;LIST THE DIRECTORY NUMBERS
  114.     CALL     DISPLAY
  115. ;
  116. GET_NUM:   CALL READKEYS        ;READ IN THE CHARS
  117.     CALL     ASCII_BIN        ;CONVERTS TO BINARY (NO. IN AX)
  118.     JNC     VALID            ;IS THE ENTRY VALID?
  119.     MOV     SI,OFFSET INVMSG        ; NO, DISPLAY ERROR MSG
  120.     CALL     DISPLAY
  121.     JMP     GET_NUM            ; AND TRY AGAIN
  122. VALID:    CMP     AL,DEN
  123.     JNB     THRU            ;EXI IF "DEN" OR GREATER IS CHOSEN
  124. ;
  125.     MOV     BX, OFFSET MSG0        ;POINT TO MSG0
  126.     MUL     CHRS            ;AX=AX*37
  127.     ADD     BX,AX            ;POINT TO DESIRED MSG
  128. ;
  129.     MOV     CX,37            ;GET SET TO SEND 37 CHARS
  130.     CALL     AUX_IT            ;SEND STRING OUT TO AUX PORT
  131. ;
  132.     MOV     SI,OFFSET HGMG        ;GIVE OPTION OF HANGING UP
  133.     CALL     DISPLAY
  134. ;
  135.     CALL     GET_KEY
  136.     CMP     AL,'H'            ;IS IT AN H?
  137.     JNE     THRU            ;NO, EXIT
  138. ;
  139.     MOV     BX, OFFSET HGUP        ; YES, HANG UP
  140.     MOV     CX,5            ;GET SET TO SEND 5 CHARS
  141.     CALL     AUX_IT            ;SEND STRING OUT AUX PORT
  142. ;
  143. THRU:    RET                ;EXIT DIAL PROG
  144. MAIN    ENDP
  145. ;
  146. ;PROC READS KEYS INTO BUFF UNTIL RETURN IS HIT.  ALLOWS THREE KEYS MAX.
  147. READKEYS  PROC     NEAR        ;ON RETURN, BUFF'S STARTING ADDRESS IS IN BX AND
  148.                 ;CHAR COUNT IS IN CX - FROM LJ SCANLON, P 236
  149.     MOV     DI,0        ;DI IS KEY COUNT
  150.     MOV     CX,3        ;GET READY FOR 3 KEYSTROKES MAX
  151. GETKEY:    CALL     GET_KEY        ;READ A KEY, PUT CHAR IN AL
  152.     CALL     BIOS_CONOUT    ;DISPLAY IT
  153.     CMP     AL,0DH        ;IS IT A RETURN?
  154.     JE     SAV_CNT        ;IF SO, EXIT VIA SAV_CNT
  155.     MOV     BUFF[DI],AL    ;IF NOT, STORE THE CHAR (AL) IN MEMORY
  156.                 ;LOCATION BUFF+DI (DI IS KEY COUNT)
  157.     INC     DI        ; AND UPDATE THE KEY COUNT
  158.     LOOP     GETKEY        ;GET NEXT KEY
  159. SAV_CNT: MOV     CX,DI        ;FINAL KEY COUNT IS PUT INTO CX
  160.     MOV     BX,OFFSET BUFF    ; AND LEAVE ADDRESS OF BUFF IN BX
  161.     RET
  162. READKEYS      ENDP
  163. ;
  164. ;UPON ENTRY, STARTING ADRESS OF STRING SHOULD BE IN BX AND
  165. ; NO. OF CHARS IN CX. UPON RET. BIN NO. IS IN AX.
  166. ; IF NO. TYPED IS NON VALID CHAR, CARRY FLAG IS SET TO SIGNAL ERROR.
  167. ASCII_BIN  PROC  NEAR
  168.     XOR    AX,AX
  169. ; CONVERT THE STRING
  170. RANGE:    CMP     BYTE PTR [BX],'0'    ;IS CHAR A NUMBER?
  171.     JB    NON_DIG            ;NO, JMP TO NON_DIG (ASCII CODE<30)
  172.     CMP     BYTE PTR [BX],'9'    ;IS CHAR A NUMBER?
  173.     JBE    DIGIT            ;YES, JMP TO DIGIT (ASCII CODE<=39)
  174. NON_DIG:    STC        ;IF NOT A DIGIT, SET CF FOR ERROR MARKING
  175.     JC     END_CONV    ; AND EXIT
  176. DIGIT:    MOV    SI,10        ;THE CHAR IS A NUMBER
  177.     PUSH    DX
  178.     MUL    SI        ; SO MULTIPLY AX BY 10
  179.     POP    DX        
  180.     MOV    DL,[BX]        ;FETCH CHAR AND PUT IT IN DL (6 IN ASCII IS 36)                    
  181.     AND    DX,0FH        ;SAVE ONLY LOW BITS (36H--> 06H)
  182.     ADD    AX,DX        ;UPDATE PARTIAL RESULTS
  183.     JC    END_CONV    ;EXIT IF RESULT IS TOO BIG (IF CF SET)
  184.     INC    BX        ;OTHERWISE, INC BX AND CONTINUE
  185.     LOOP    RANGE
  186.     CLC            ;WHEN DONE, CLEAR CF
  187. END_CONV:    RET
  188. ASCII_BIN    ENDP
  189. ;
  190. ;DISPLAY STRING AT SI ON CONSOLE
  191. DISPLAY    PROC    NEAR
  192.     MOV    AL,BYTE PTR [SI]
  193.     OR    AL,AL        ;DISPLAY IT UNTIL A '0' IS FOUND
  194.     JNZ    DISCALL
  195.     RET
  196. DISCALL:  CALL    BIOS_CONOUT    ;DISPLAY CHAR IN AL
  197.     INC    SI
  198.     JMP    SHORT DISPLAY
  199. DISPLAY    ENDP
  200. ;
  201. ;PROC WAITS FOR A KEY TO BE HIT AND RETURN WITH CHAR IN AL
  202. GET_KEY    PROC    NEAR
  203. WAIT:    IN    AL,KBDS        ;CHECK STATUS PORT
  204.     AND    AL,1        ; IF AL=1, CHAR TO READ
  205.     JZ    WAIT
  206.     IN    AL,KBDD        ;READ CHAR
  207.     RET
  208. GET_KEY    ENDP
  209. ;
  210. ;PROC SEND A STRING OUT THE AUX PORT.  ENTER WITH NO. OF CHARS TO SEND IN CX
  211. ; AND BX-->STARTING ADDRESS OF SRRING.
  212. AUX_IT    PROC    NEAR
  213. LOOP1:    MOV    AL,[BX]        ;PUT CHAR IN AL
  214.     CALL    BIOS_AUXOUT    ;OUTPUT CHAR TO MODEM PORT
  215.     INC    BX
  216.     LOOP    LOOP1        ;OUTP[UT ALL THE CHARS
  217.     RET
  218. AUX_IT    ENDP
  219. ;
  220. PGM_END    LABEL    NEAR    ;*CODE BEYOND THIS POINT IS LOST AFTER INSTALLATION
  221. ;
  222. ;INSTALL INTERUPT SERVICE ROUTINE ADDRESS IN JUMP TABLE
  223. INIT:    PUSH    DS
  224.     XOR    AX,AX
  225.     MOV    DS,AX        ;DS=SEGMENT OF INT SERV RT JMP TABLE (=0)
  226.     MOV    SI,5*4        ;OFFSET OF INT 5
  227.     CLI            ;INTS OFF
  228.     MOV    WORD PTR [SI],OFFSET INT5    ;INSTALL OFFSET OF ROUTINE
  229.     MOV    WORD PTR [SI+2],CS        ;INSTALL SEGMENT OF ROUTINE
  230.     STI                    ;START INTS
  231.     POP    DS
  232.     MOV    SI,OFFSET MG        ;PRINT INSTALLATION MESSAGE ON CRT
  233.     CALL    DISPLAY
  234.     MOV    DX,OFFSET PGM_END    ;TERMINATE AND STAY RESIDENT
  235.     INT    27H
  236. ;
  237. MG    DB    ESC,'m20','DIAL Software Installed!',ESC,'m40',CR,LF
  238.     DB    'Hit SHIFT-F12 when ready to dial.',ESC,'m70',CR,LF,0
  239. ;
  240. CODE    ENDS
  241.     END    START
  242.