CR EQU 0Dh ;CARRIAGE RETURN LF EQU 0Ah ;LINE FEED BDOS EQU 5 dr equ 01h ;Line status DR bit cts equ 10h ;Clear to send dsr equ 20h ;Data set ready thre equ 20h ;Status line THRE bit dlab equ 80h ;Divisor latch access bit mbase equ 48h ;Base address of Multi I/O or Decision I rbr equ mbase ;Read data buffer thr equ mbase ;Tranmitter data buffer dll equ mbase ;Divisor (lsb) strobe equ mbase ;parallel port strobe out status equ mbase ;parallel port status in dlm equ mbase+1 ;Divisor (msb) ier equ mbase+1 ;Interupt enable register clk equ mbase+2 ;WB14 printer select port lcr equ mbase+3 ;Line control register mcr equ mbase+4 lsr equ mbase+5 ;Line status register msr equ mbase+6 grpsel equ mbase+7 ;Group select port org 100h ; ; mvi a,group2 ; out base+7 ;select port 2 ; mvi a,dtroff ; out mcr ;bring pin 20 high to turn on modem ; jmp 0 ;warm boot ; ; end RDTAIL: lda 80h ;FIND NUMBER OF BYTES IN COMMAND TAIL CPi 2 ;OK IF 2 BYTES (A SPACE AND HOPEFULLY A DIGIT) Jnz ERRMSG ;NOT OK IF NOT 2 BYTES, GIVE ERROR MESSAGE LDa 82h ;LOAD THE ASCII CHARACTER FROM THE TAIL cpi '0' ;see if tail character is a ASCII DIGIT JC ERRMSG ;IS LESS THEN A '0' CPi '9'+1 JNC ERRMSG ;IS GREATER THAN A '9' STA RINGS ;PATCH NUMBER OF RINGS INTO THE STRING TO SEND lxi h,STRING ;COMMAND STRING TO SEND TO MODEM call message ;Send the STRING ; CALL RESULT ;LOOK FOR AN 'OK' FROM THE MODEM JMP 0 ;WARM BOOT ERRMSG: mvi C,9 ;BDOS PRINT STRING FUNCTION Lxi D,USEAGE ;STRING TO PRINT CALL BDOS JP 0 ;WARM BOOT USEAGE: DB CR,LF DB 'usage: MODEM n where n = 0-9 (number of rings)','$' MODin: call MODst ;select MODEM and test for char jz MODin in rbr ;Read character ani 7fh ;Strip parity ret ;MODEM Output ;-------------- ; MODout: call MODost ;Select MODEM and test status jz MODout mov a,c ;Character is in (c) ani 7fh out thr ;Output to transmitter buffer ret ;MODEM Status ;-------------- ; 1) Returns zero if character is not ready to be read; Otherwise, ; this routine returns 255 indicating a ready condition. ; MODst: call selMOD ;Select MODEM in lsr ;Read status register ani dr rz ;No charactter ready mvi a,0ffh ;Character ready ret ;MODEM Output Status Routine ;----------------------------- ; MODost: call selMOD in lsr ani thre rz mvi a,0ffh ret ;MODEM Select Routine ;---------------------- ; selMOD: ;lxi d,group ;pass to application ;ldax d ;ori congrp MVI A,2 ;SELECT PORT 2 out grpsel ret ;Utility routine to output the message pointed at by (hl) ;terminated with a null. ; message:mov a,m ;Get a character of the message inx h ;Bump text pointer ora a ;Test for end rz ;Return if done push h ;Save pointer to text mov c,a ;Output character in C call MODOUT ;Output the character KILTIME:MVI C, 0FFh mvi d, 0FFh LOOP: DCR C XCHG XCHG JNZ LOOP dcr d jnz loop pop h ;Restore the pointer jmp message ;Continue until null reached STRING: db 'ATS0=' RINGS: db '?', CR, LF DB 0 ;STRING TERMINATION END