;
; TO RUN THE ONE SECOND INTERRUPT A LINK IS NEEDED
; ON THE SYSTEM SUPPORT BOARD.
; BACKGROUND:-
; WHEN THE FOLLOWING STATES ARE PRESENTED TO THE
; 'OKI CLOCK CHIP',
; HOLD='0'
; READ='1'
; CS='1'
; A0-A3='1'
; THEN D0 = 1024HZ (50% DUTY)
; D1 = 1HZ 122.1 USEC
; D2 = 1/60 HZ "
; D3 = 1/3600 HZ "
;
; THE 1 SEC PULSE IS CONNECTED TO J7 PIN 7.
; FOR AN INTERRUPT 1.
************************************************
* *
* ROUTINE FOR INITIALISING MASTER AND SLAVE *
* 8259A'S ON THE SYSTEM SUPPORT 1 *
* *
************************************************
; THIS PROGRAM IS SET TO I/O ADDRESS BASE 50H
; (COMPUPRO STANDARD), FOR DIFFERENT ADDRESSES
; CHANGE "BASE" IN EQUATES.
MACLIB MACRO
INTJMP EQU 200H ;START OF INTERRUPT JUMPS
SINTJMP EQU INTJMP+20H
BASE EQU 50H ;STARTING ADDR OF BOARD
MPRT0 EQU BASE ;LOWER MASTER PORT A0=0
MPRT1 EQU BASE+1 ;UPPER MASTER PORT (A0=1)
SPRT0 EQU BASE+2 ;LOWER SLAVE PORT (A0=0)
SPRT1 EQU BASE+3 ;UPPER SLAVE PORT (A0=1)
CLKCMD EQU BASE+10 ;CLOCK COMMAND PORT
CLKDAT EQU BASE+11 ;CLOCK DATA PORT
SURTD EQU BASE+12 ;SS UART DATA PORT
SURTS EQU BASE+13 ;SS UART STATUS PORT
SURTM EQU BASE+14 ;UART MODE PORT
SURTC EQU BASE+15 ;UART COMMAND PORT
CLKDATA EQU BASE+11 ;CLOCK DATA PORT
ORG 100H
; THIS ROUTINE INITIALISES THE MASTER 8259A
INIT:
DI ;DISABLE INTERRUPTS
MVI A,(INTJMP AND 0E0H) OR 00011101B ;ICW1
OUT MPRT0 ;SEND IT
MVI A,HIGH INTJMP ;UPPER BYTE OF ADDR INTERVAL
OUT MPRT1 ;SEND IT
MVI A,10000000B ;IR7 HAS A SLAVE
OUT MPRT1 ;SEND IT
MVI A,00010000B ;ICW4
OUT MPRT1 ;SEND IT
MVI A,0FFH ;CLEAR ALL MASK BITS (OCW1)
OUT MPRT1 ;SEND IT
MVI A,10100000B ;ROTATE ON NON-SPEC EOI
OUT MPRT0 ;SEND IT
MVI A,00001000B ;OCW3
OUT MPRT0 ;SEND IT
; THIS ROUTINE INITIALISES THE SLAVE 8259A
MVI A,(SINTJMP AND 0E0H) OR 00011101B ;ICW1
OUT SPRT0 ;SEND IT
MVI A,HIGH SINTJMP ;UPPER BYTE OF ADDR INTERVAL
OUT SPRT1 ;SEND IT
MVI A,07H ;IR7 HAS A SLAVE
OUT SPRT1 ;SEND IT
MVI A,00010000B ;ICW4
OUT SPRT1 ;SEND IT
MVI A,0FFH ;CLEAR ALL MASK BITS (OCW1)
OUT SPRT1 ;SEND IT
MVI A,10100000B ;ROTATE ON NON-SPEC EOI
OUT SPRT0 ;SEND IT
MVI A,00001000B ;OCW3
OUT SPRT0 ;SEND IT
; SET UP OKI RTC FOR 1 SEC INTERRUPT
; SET A0 - A3 = 1 (ADDRESS 15)
; SET READ = 1
; SET WRITE = 0
; SET HOLD = 0
; BY OUTPUTING 1FH TO CLKCMD PORT
MVI A,1FH ;SET FOR TIME INTERRUPTS
OUT CLKCMD ;AND OUTPUT
; ENABLE INT15 ONLY
MVI A,07DH ;ENABLE INT15 ONLY
OUT MPRT1
MVI A,07FH
OUT SPRT1
EI ;ENABLE
LOOP JMP LOOP ;LOOP FOREVER
************************************************
* STANDARD CONFIGURATION OF INTERRUPTS *
* ON THE SYSTEM SUPPORT 1 BOARD *
* *
************************************************
; DISK 1 INTERRUPT OPTIONS
; THE INTERRUPT ON THE DISK CONTROLLER
; CAN BE STRAPPED TO VI0 TO VI7
; NORMALLY VI0 (THE HIGHEST PRIORITY
; WOULD BE USED.
ONESEC:
SAVE ;SAVE B,D,AND H
PUSH PSW ;AND PSW
PRINT <'ONE SECOND INTERRUPT ',CR,LF>
MVI A,61H ;SET SEOI
OUT MPRT0 ;AND SEND
POP PSW ;RESTORE PSW
RESTORE ;RESTORE B,D,AND H
EI ;ENABLE INTERRUPTS
RET
************************************************
* *
* SYSTEM SUPPORT 1 UART I/P *
* INTERRUPT ROUTINE *
* *
************************************************
; THIS ROUTINE CHECKS THE UART FOR DATA
; READY, PRINT AN ERROR MESSAGE IF NOT
; AVAILABLE. THEN TESTS TO SEE IF THE BUFFER
; IS FULL, AGAIN OUTPUTS AN ERROR MESSAGE IF
; FULL, AND THEN BUMPS THE COUNT,AND POINTER
; BEFORE SENDING THE SEOI'S AND RESTORING THE
; REGISTERS, ENABLING INTERRUPTS.
SSDAV EQU 00000001B ;SYSTEM SUPPORT DATA AVAIL
SRINT:
SAVE ;PUSH B,D,H
PUSH PSW ;AND PSW
IN SURTS ;GET STATUS FROM UART
ANI SSDAV ;MASK DATA AVAIL.
JZ RINTE ;EXIT IF NOT READY
IN SURTD ;GET THE DATA
ANI 7FH ;MASK PARITY
MOV C,A ;SAVE CHAR
LDA SIBUFC ;GET COUNT IN BUFFER
CPI SIBUFL ;AND SEE IF FULL
JZ SIFUL ;BRIF FULL
LHLD SIBUFP ;GET POINTER
MOV M,C ;AND STORE
INX H ;AND INDEX
SHLD SIBUFP ;AND SAVE
INR A ;THEN INDEX NO OF CHAR
STA SIBUFC ;AND SAVE
SRINTEX:
; SEND SPECIFIC END OF INTERRUPT TO
; BOTH MASTER AND SLAVE CONTROLLERS.
MVI A,67H ;LOAD SEOI FOR MASTER
OUT MPRT0 ;SEND IT
MVI A,67H ;LOAD SEOI FOR SLAVE
OUT SPRT0 ;AND SEND IT
POP PSW ;RESTORE ALL REGISTERS
RESTORE
EI ;ENABLE INTERRUPTS
RET
;
; THIS ROUTINE PERFORMS THE INITIALISATION
; REQUIRED BY THE SYSTEM SUPPORT USART.
;
STINIT:
MVI A,11101110B ;ASYNC,8BITS,EV,2STOP
OUT SURTM ;SET UP MODE REG. 1
MVI A,01111110B ;9600 BAUD
OUT SURTM ;SET UP MODE REG. 2
MVI A,00100111B ;TX ON,DTR LOW,REC ON,
;NO BREAK,NO RESET,RTS LOW
OUT SURTC ;SET UP COMMAND PORT
RET
; SERROR - ROUTINE TO RESET ERROR FLAGS
; ON THE SYSTEM SOPPORT UART.
;
SERROR:
MVI A,00010000B ;RESET UART
OUT SURTC ;TO COMMAND REG.
MVI A,00100111B ;RESUME
OUT SURTC
RET
************************************************
* *
* SYSTEM SUPPORT 1 UART O/P *
* INTERRUPT ROUTINE *
* *
************************************************