; THIS BEGINS THE SECTION THAT MUST BE MODIFIED
; TO YOUR PARTICULAR SYSTEM. THE FIRST THING YOU
; SHOULD DO IS PUT YOUR SYSTEM IDENTIFICATION INTO
; THE PROGRAM. TO DO THIS, CHANGE THE 'IMSAI 8080'
; IN THE STATEMENT LABELED "SYSID:" TO WHATEVER
; TYPE OF SYSTEM YOU HAVE. NOTE THAT "SYSID:" CAN
; BE NO LONGER THAN 23 CHARACTERS AND THE LAST
; CHARACTER MUST BE A 00 BYTE.
; THIS IS SET TO FALSE IF YOUR MODEM PORT READY FLAGS
; ARE ACTIVE LOW. (ZERO IMPLIES READY)
RDYHI EQU TRUE ; TRUE IF UART READY FLAGS ARE
; ACTIVE HIGH (1=READY). FALSE
; IF FLAGS ARE ACTIVE LOW (0=READY).
; THIS ENDS THE SECTION THAT MUST BE
; MODIFIED TO YOUR PARTICULAR SYSTEM
; UNLESS YOU NEED UART INITIALIZATION.
; IF YOU DO NEED TO INITAILIZE YOUR
; MODEM UART, CHANGE "SIOINI:" (AT THE
; END OF THIS PROGRAM) TO SET UP YOUR
; UART TO USE 8 DATA BITS, NO PARITY
; AND 1 STOP BIT.
ORG TBASE+3 ; OVERLAY TRANSFER VECTOR AND ID STRING
INISIO: JMP SIOINI ; INITIALIZE MODEM UART
GETSIO: JMP SIOGET ; GET CHAR FROM MODEM UART
PUTSIO: JMP SIOPUT ; PUT A CHAR TO MODEM UART
SYSID: DB 'Z-80 Homebrew',0 ; IDENTIFIES YOUR SYSTEM
; MAXIMUM LENGTH IS 23 CHARACTERS.
; LAST CHARACTER MUST BE A 00
ORG OVLOC ; MOVE BEYOND EXEC FOR MODEM PORT I/O ROUTINES
; THIS ROUTINE INPUTS A CHARACTER FROM THE MODEM'S UART (OR USART)
SIOGET: IN CTL ; GET MIO STATUS FLAGS
ANI SIOIR ; ISOLATE INPUT READY FLAG
IF RDYLO ; INVERT IF ACTIVE LOW
XRI SIOIR ; INVERT IT
ENDIF
RZ ; RETURN IF Z = 1
IN SIO ; ELSE GET MODEM CHARACTER
RET ; AND RETURN (Z FLAG = 0)
; THIS ROUTINE OUTPUT CONTENTS OF A TO THE MODEM'S UART
SIOPUT: PUSH PSW ; WRITE (A) TO SIO
PUTSI1: IN CTL ; WAIT FOR FLAG TO = 0
ANI SIOTR
IF RDYLO ; SENSE OF JUMP
JNZ PUTSI1
ENDIF
IF RDYHI ; SENSE OF JUMP
JZ PUTSI1
ENDIF
POP PSW
OUT SIO
RET
; THIS ROUTINE INITIALIZES THE MODEM UART FOR OPERATION
SIOINI: RET ; INITILIZE MODEM UART HERE
; IF UART NEEDS IT
; 8 DATA BITS
; NO PARITY
; 1 STOP BIT