home *** CD-ROM | disk | FTP | other *** search
- ; UBPMMI.ASM ver 1.1 as of 3/24/81
- ; by Keith Petersen, W8SDZ
- ;
- ;This is the user area for BSTMS version 1.2
- ;for use with a PMMI MM-103 modem.
- ;
- ;If you wish to use other registers such as HL,BC,DE
- ;(not including SP register) be sure to push BSTMS'S
- ;registers on to stack and pop them back off before
- ;returning to BSTMS. There is ample room to push all
- ;registers onto BSTMS's stack, plus room for 10 levels
- ;of calls.
- ;
- ;There are 300 bytes of user space available to you.
- ;
- ;The jumps coded at the beginning of this program
- ;cannot be moved in any way.
- ;
- ;Define ports
- ;
- PMCTL1 EQU 0C0H ;PMMI UART STATUS PORT
- PMDATA EQU PMCTL1+1 ;PMMI UART DATA PORT
- PMMDMS EQU PMCTL1+2 ;PMMI MODEM CHIP STATUS PORT
- PMCTL2 EQU PMCTL1+3 ;PMMI MODEM CHIP CONTROL PORT
- ;
- ;Conditional assembly switch
- ;
- FASTCLK EQU 1 ;0 = 2 MHZ, 1 = 4 MHZ SYSTEM CLOCK
- ;
- ;Define ASCII characters used
- ;
- CR EQU 0DH ;CARRIAGE RETURN
- LF EQU 0AH ;LINE FEED
- ;
- BEGIN: ORG 103H
- ;
- INITIL JMP INITIU ;UART/USART INITIALIZATION ENTRY POINT
- INSPORT JMP INSPRU ;STATUS PORT READ ENTRY POINT
- ERRSET JMP ERRSTU ;UART/USART ERROR RESET ENTRY POINT
- INPORT JMP INPRTU ;READ DATA PORT ENTRY POINT
- OUTPORT JMP OUTPRU ;WRITE DATA PORT ENTRY POINT
- ;
- ;
- ;This is the UART/USART initialization routine.
- ;To be compatible with most BSTMS users use following
- ;initialization guide lines:
- ; 1. Use 1 stop bit (optional - 2)
- ; 2. Use 8 data bits (must)
- ; 3. Use 1 start bit (must)
- ; 4. Use 16X for clock rate (must)
- ; 5. Use asynchronous mode only (must)
- ;
- ;We will not initialize the PMMI modem. That can be done
- ;with other programs like MODEM or DIAL.
- ;
- INITIU: CALL SIGNON ;TELL USER WHAT'S IMPLEMENTED
- IN PMDATA ;CLEAR INPUT PORT
- IN PMDATA ;AGAIN TO MAKE SURE
- RET ;RETURN TO BSTMS
- ;
- ;This is the status read port routine.
- ;When exiting this routine BSTMS expects in register A
- ;the following bits to be set if needed:
- ; 1. 20 bit set if framing error
- ; 2. 10 bit set if overrun error
- ; 3. 08 bit set if parity error
- ; 4. 04 bit set if transmitter empty (TEOC)
- ; 5. 02 bit set if receiver ready (DAV)
- ; 6. 01 bit set if transmitter ready (TBMT)
- ; 7. Do not set the 80 bit or 40 bit
- ;
- ;Before we do the UART status check we will check
- ;to see if carrier is lost.
- ;
- INSPRU: PUSH B ;SAVE REGISTERS USED
- PUSH D
- ;
- IF NOT FASTCLK ;FOR 2MHZ SYSTEM CLOCK
- MVI B,15 ;WAIT UP TO 15 SECONDS
- ENDIF
- ;
- IF FASTCLK ;FOR 4MHZ SYSTEM CLOCK
- MVI B,30 ;WAIT UP TO 15 SECONDS
- ENDIF
- ;
- ;One second time delay routine. Enter with desired
- ;number of seconds in B register.
- ;
- ONESEC: LXI D,50000 ;VALUE FOR 2 MHZ CLOCK
- ;
- TLOOP: IN PMMDMS ;GET MODEM CHIP STATUS
- ANI 04H ;GET CTS (CARRIER DETECT) BIT
- TLPAT: JZ CARROK ;CARRIER NOT LOST, EXIT AND RETURN
- DCR E ;DECREMENT TIME DELAY VALUE
- JNZ TLOOP ;NOT DONE, DO ANOTHER LOOP
- DCR D ;DECREMENT TIME DELAY VALUE
- JNZ TLOOP ;NOT DONE, DO ANOTHER LOOP
- DCR B ;DECREMENT NUMBER OF SECONDS
- JNZ ONESEC ;NOT DONE, DO ANOTHER ONE SEC DELAY
- ;
- ;If we get to here, we have lost carrier for 15 seconds
- ;
- XRA A
- OUT PMCTL1 ;CAUSE MODEM TO...
- OUT PMCTL2 ;...HANG UP
- LXI D,LSTMSG ;POINT TO MESSAGE
- MVI C,9
- CALL 5 ;PRINT IT
- MVI A,(JMP) ;GET OPCODE FOR JMP
- STA TLPAT ;SET BYPASS OF CARRIER CHECK
- IN PMDATA ;CLEAR INPUT PORT
- IN PMDATA ;AGAIN TO MAKE SURE
- JMP CARROK ;EXIT
- ;
- LSTMSG: DB CR,LF,' ++CARRIER LOST++'
- DB CR,LF,'The modem is now DISCONNECTED'
- DB CR,LF,'$'
- ;
- ;Carrier is not lost
- ;
- CARROK: POP D ;RESTORE DE REGS
- POP B
- ;
- ;Get UART status for BSTMS. In this case we discard all error
- ;test bits because the PMMI modem has no way to reset the error
- ;flags once they are up, causing a continuous display of error
- ;messages in BSTMS.
- ;
- IN PMCTL1 ;GET PMMI UART STATUS
- ANI 07H ;STRIP ALL BUT TEOC, DAV AND TBMT BITS
- RET
- ;
- ;This is the error reset for UART/USART routine.
- ;The PMMI modem has no way to reset the error flags,
- ;so we clear the input port and return.
- ;
- ERRSTU: IN PMDATA ;CLEAR INPUT PORT
- IN PMDATA ;AGAIN TO MAKE SURE
- RET ;RETURN TO BSTMS
- ;
- ;This is the read data port routine.
- ;
- INPRTU: IN PMDATA ;GET DATA FROM PORT
- ANI 7FH ;STRIP PARITY BIT
- RET ;RETURN TO BSTMS
- ;
- ;This is the write data port routine.
- ;
- OUTPRU: ANI 7FH ;STRIP PARITY BIT
- OUT PMDATA ;SEND DATA TO REMOTE CPU
- RET ;RETURN TO BSTMS
- ;
- SIGNON: PUSH B
- PUSH D
- PUSH H
- LXI D,MESSGE
- MVI C,9
- CALL 5 ;ANNOUNCE VERSION TO USER
- POP H
- POP D
- POP B
- RET
- ;
- MESSGE: DB CR,LF,CR,LF
- DB 'PMMI Modem ver 1.1 - no initialization done,'
- DB ' tests for loss of carrier.'
- DB CR,LF,'$'
- ;
- END