; ; UKAYPRO.ASM ver 1.0 as of 9/18/82 ; by Dave Hardy ; From Keith Petersen's UPMMI.ASM ; ;This is the user area for BSTAM version 4.3 as used with ; the serial port on a KAYPRO via an external modem. ; ; If you wish to use other registers such as HL,BC,DE ; (not including SP register), be sure to push BSTAM's ; registers onto the stack and pop them back off before ; returning to BSTAM. There is ample room to push all ; registers onto BSTAM's stack, plus room for 10 levels ; of CALLs. ; ; There are 300 bytes of user space available to you. ; ; THE JUMP'S CODED AT THE BEGINNING OF THIS PROGRAM ; CANNOT BE MOVED IN ANY WAY. ; ; Define ports and masks KPSTAT EQU 06H ;KayPro UART Status port KPDATA EQU 04H ;KayPro UART Data port KPTBE EQU 04H ;KayPro Transmit Buffer Empty bit in UART KPRDA EQU 01H ;KayPro Received Data Available bit in UART ; ; Define ASCII characters used CR EQU 0DH ;Carriage Return LF EQU 0AH ;Linefeed ; 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 BSTAM users, use the ; 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) ; ; NO INITIALIZATION IS DONE IN THIS VERSION OF UKAYPRO INITIU: CALL SIGNON ;Tell version number to user RET ;Return to BSTAM ; ; ; This is the STATUS READ PORT routine. ; When exiting this routine, BSTAM 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 ; ; Now get UART status for BSTAM. ; In this case, we discard all error test bits INSPRU: PUSH B MVI C,0 ;Init all flags IN KPSTAT ;Get Serial UART status MOV B,A ;Save it in B ANI 01H CNZ SETRDA ;Set RDA bit MOV A,B ANI 04H CNZ SETTBE MOV A,C ;Get flags into A POP B RET ; SETRDA MVI C,02H ;Set RDA flag RET ; SETTBE MOV A,C ORI 05H ;Set TBE and TEOC flags MOV C,A RET ; ; This is the ERROR RESET FOR UART/USART routine. ; No resetting is done in this version ERRSTU: RET ;Return to BSTAM ; ; ; This is the READ DATA PORT routine. ; Before this routine is entered, the 02 BIT of ; the STATUS READ routine MUST HAVE BEEN SET. ; Do NOT clear the 80 BIT from the DATA INPUT port. ; Return with REGISTER A loaded with input data. ; INPRTU: IN KPDATA ;Get data from port RET ;Return to BSTAM ; ; ; This is the WRITE DATA PORT routine. ; Before this routine is entered, the 04 BIT and 01 BIT ; of STATUS READ MUST BE SET. ; Do NOT clear the 80 BIT from the data output port. ; REGISTER A contains the output data. ; OUTPRU: OUT KPDATA ;Send data to remote CPU RET ;Return to BSTAM ; ; ; The SIGN-ON routine called from the INIT routines. 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 'KayPro serial port ver 1.0 - no initialization done,' DB CR,LF,'$' ; END BEGIN