mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 09:24:19 +00:00
80 lines
2.1 KiB
Plaintext
80 lines
2.1 KiB
Plaintext
; 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
|
||
|