Files
Digital-Research-Source-Code/MPM OPERATING SYSTEMS/MPM II/MPM II SOURCE/CONTROL/INTER.LIB
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

80 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; MACRO LIBRARY FOR BASIC INTERSECTION
;
; GLOBAL DEFINITIONS FOR DEBUG PROCESSING
TRUE EQU 0FFFFH ;VALUE OF TRUE
FALSE EQU NOT TRUE;VALUE OF FALSE
DEBUG SET FALSE ;INITIALLY FALSE
BDOS EQU 5 ;ENTRY TO CP/M BDOS
RCHAR EQU 1 ;READ CHARACTER FUNCTION
WBUFF EQU 9 ;WRITE BUFFER FUNCTION
CR EQU 0DH ;CARRIAGE RETURN
LF EQU 0AH ;LINE FEED
;
; INPUT/OUTPUT PORTS FOR LIGHT AND CLOCK
LIGHT EQU 00H ;TRAFFIC LIGHT CONTROL
CLOCK EQU 03H ;24 HOUR CLOCK (0,1,...,23)
;
; BIT POSITIONS FOR TRAFFIC LIGHT CONTROL
NSBITS EQU 4 ;NORTH SOUUTH BITS
EWBITS EQU 0 ;EAST WEST BITS
;
; CONSTANT VALUES FOR THE LIGHT CONTROL
OFF EQU 0 ;TURN LIGHT OFF
RED EQU 1 ;VALUE FOR RED LIGHT
YELLOW EQU 2 ;VALUE FOR YELLOW LIGHT
GREEN EQU 3 ;GREEN LIGHT
;
SETLITE MACRO DIR,COLOR
;; SET LIGHT GIVEN BY "DIR" TO COLOR GIVEN BY "COLOR"
IF DEBUG ;;PRINT INFO AT CONSOLE
LOCAL SETMSG,PASTMSG
MVI C,WBUFF ;;WRITE BUFFER FUNCTION
LXI D,SETMSG
CALL BDOS ;;WRITE THE TRACE INFO
JMP PASTMSG
SETMSG: DB CR,LF
DB '&DIR CHANGING TO &COLOR$'
PASTMSG:
EXITM
ENDIF
MVI A,COLOR SHL DIR&BITS ;;READIED
OUT LIGHT ;;SENT IN PROPER BIT POSITION
ENDM
;
TIMER MACRO SECONDS
;; CONSTRUCT INLINE TIME-OUT LOOP
LOCAL T1,T2,T3 ;;LOOP ENTRIES
MVI D,4*SECONDS ;;BASIC LOOP CONTROL
T1: MVI B,250 ;;250MSEC *4 = 1 SEC
T2: MVI C,182 ;;182*5.5USEC = 1MSEC
T3: DCR C ;;1 CY = .5 USEC
JNZ T3 ;;+10 CY = 5.5 USEC
DCR B ;;COUNT 250,249...
JNZ T2 ;;LOOP ON B REGISTER
DCR D ;;BASIC LOOP CONTROL
JNZ T1 ;;LOOP ON D REGISTER
;; ARRIVE HERE WITH APPROXIMATELY "SECONDS"
;; TIMEOUT, CONTINUE PROCESSING.
ENDM
;
CLOCK? MACRO LOW,HIGH,IFTRUE
;; CHECK FOR REAL-TIME CLOCK GREATER THAN OR
;; EQUAL TO "LOW." AND LESS THAN "HIGH."
;; CONTINUE AT "IFTRUE" WHEN BETWEEN THESE
;; TIMES.
LOCAL IFFALSE ;;ALTERNATE TO TRUE CASE
IN CLOCK ;;READ REAL-TIME CLOCK
IF NOT NUL HIGH ;;CHECK HIGH CLOCK
CPI HIGH ;;EQUAL OR GREATER?
JNC IFFALSE ;;SKIP TO END IF SO
ENDIF
CPI LOW ;;LESS THAN LOW VALUE?
JNC IFTRUE ;;SKIP TO LABEL IF NOT
IFFALSE:
ENDM
;
RETRY MACRO GOLABEL
;; CONTINUE EXECUTION AT "GOLABEL"
JMP GOLABEL
ENDM