Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
; 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