Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

80 lines
2.1 KiB
Plaintext
Raw Permalink 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