home *** CD-ROM | disk | FTP | other *** search
- ;
- ;VERSION UH89 (revised JANUARY 30, 1981)
- ;
- ;User routines for BSTAM version 4.3, for use with
- ;Heath H8 with H8-4 or H89 with H-3 serial port.
- ;TBE=20H, RDA=01H. By Keith Petersen, W8SDZ
- ;
- ;BASE ADDRESS OF CP/M
- ;USE: 4200H FOR CP/M VERSION 1.43 AND BELOW.
- ; 0000H FOR CP/M VERSION 2.0 AND ABOVE.
- ;
- BASE EQU 0000H ;OFFSET OF CP/M FROM 0H
- ;
- ;DEFINE PORT
- ;
- PORT EQU 330Q ;8250 PORT BASE ADDRESS
- ;
- ;DEFINE BAUD RATE DIVISORS
- ;
- B75 EQU 0600H ;75 BAUD
- B110 EQU 041FH ;110 BAUD
- B150 EQU 0300H ;150 BAUD
- B300 EQU 0180H ;300 BAUD
- B600 EQU 00A0H ;600 BAUD
- B1200 EQU 0060H ;1200 BAUD
- B2400 EQU 0030H ;2400 BAUD
- B4800 EQU 0018H ;4800 BAUD
- B9600 EQU 000AH ;9600 BAUD
- B19200 EQU 0006H ;19200 BAUD
- ;
- ;DEFINE ASCII CHARACTERS USED
- ;
- CR EQU 0DH
- LF EQU 0AH
- ;
- ; IF YOU WISH TO USE OTHER REGISTERS SUCH AS HL,BC,DE
- ; (NOT INCLUDING SP REGISTER)
- ; BE SURE TO PUSH BSTAM'S REGISTERS ON TO 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 CALL'S.
- ;
- ; 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.
- ;
- BEGIN ORG 103H
- ;
- INITIL JMP INITIU ;UART/USART INITIALATION 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
- ;
- INITIU EQU $
- ; THIS IS THE UART/USART INITIALATION ROUTINE.
- ; TO BE COMPATIBLE WITH MOST BSTAM USERS USE FOLLOWING
- ; INITIALATION 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)
- ;
- MVI A,0 ;CLEAR
- OUT PORT+1 ;TO INTERRUPT ENABLE REGISTER
- MVI A,80H ;OPEN DIVISOR LATCHES (DLAB BIT = 80H)
- OUT PORT+3 ;TO LINE CONTROL REGISTER
- LXI H,B300 ;BAUD RATE DIVISOR (300 BAUD)
- MOV A,L ;LEAST SIGNIFIGENT BYTE
- OUT PORT ;TO DIVISOR LATCH (LS)
- MOV A,H ;MOST SIGNIFIGENT BYTE
- OUT PORT+1 ;TO DIVISOR LATCH (MS)
- MVI A,3 ;8 BITS, NO PARITY, 1 STOP BIT
- OUT PORT+3 ;TO LINE CONTROL REGISTER
- MVI A,0 ;CLEAR
- OUT PORT+4 ;TO MODEM CONTROL REGISTER
- CALL SIGNON ;TELL USER WHAT'S IMPLEMENTED
- RET ;RETURN TO BSTAM
- ;
- INSPRU EQU $
- ; 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
- ; IF YOUR UART/USART DOES NOT HAVE TRANSMITTER
- ; EMPTY FEATURE, THEN ALLWAYS SET THIS BIT ON.
- ; 5. 02 BIT SET IF RECEIVER READY
- ; 6. 01 BIT SET IF TRANSMITTER READY
- ; 7. DO NOT SET THE 80 BIT OR 40 BIT
- ;
- PUSH B
- IN PORT+5 ;TBE = 20H, RDA = 01H
- ANI 01H ;ISOLATE RDA BIT
- RAL ;MOVE TO 02 BIT
- MOV B,A ;SAVE RDA IN B REGISTER
- IN PORT+5 ;GET STATUS AGAIN
- ANI 20H ;ISOLATE TBE BIT
- RAR ;MOVE TO 04 BIT
- RAR
- RAR
- ORA B ;COMBINE TBE AND RDA BITS
- POP B
- ORI 1 ;PRESET TRANSMIT READY BIT
- RET
- ;
- ERRSTU EQU $
- ; THIS IS THE ERROR RESET FOR UART/USART ROUTINE.
- ; YOUR UART/USART MAY NOT NEED TO BE RESET IF FRAMING,
- ; OVERRUN, OR PARITY ERROR IS FOUND. IF THIS IS YOUR
- ; CASE, JUST DO A RETURN.
- ;
- RET ;RETURN TO BSTAM
- ;
- INPRTU EQU $
- ; THIS IS THE READ DATA PORT ROUTINE.
- ; BEFORE THIS ROUTINE IS ENTERED THE 02 BIT OF
- ; 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.
- ;
- IN PORT+0 ;GET DATA FROM PORT
- RET ;RETURN TO BSTAM
- ;
- OUTPRU EQU $
- ; 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.
- ;
- OUT PORT+0 ;SEND DATA TO REMOTE CPU
- RET ;RETURN TO BSTAM
- ;
- MESSGE: DB CR,LF,CR,LF
- DB 'Version 1.0 for H8/H89 as of 1/30/81',CR,LF
- DB '$'
- ;
- SIGNON: PUSH B
- PUSH D
- PUSH H
- LXI D,MESSGE
- MVI C,9
- CALL BASE+5 ;ANNOUNCE VERSION TO USER
- POP H
- POP D
- POP B
- RET
- ;
- END