home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol078 / interrup.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  7.0 KB  |  382 lines

  1.  
  2. ;
  3. ;  TO RUN THE ONE SECOND INTERRUPT A LINK IS NEEDED
  4. ;  ON THE SYSTEM SUPPORT BOARD.
  5. ;      BACKGROUND:-
  6. ;    WHEN THE FOLLOWING STATES ARE PRESENTED TO THE
  7. ;    'OKI CLOCK CHIP',
  8. ;     HOLD='0'
  9. ;     READ='1'
  10. ;     CS='1'
  11. ;     A0-A3='1'
  12. ;    THEN D0    = 1024HZ (50% DUTY)
  13. ;         D1 = 1HZ    122.1 USEC
  14. ;         D2 = 1/60 HZ   "
  15. ;         D3 = 1/3600 HZ  "
  16. ;
  17. ;    THE 1 SEC PULSE IS CONNECTED TO J7 PIN 7.
  18. ;    FOR AN INTERRUPT 1.
  19.  
  20.  
  21. ************************************************
  22. *                        *
  23. *  ROUTINE FOR INITIALISING MASTER AND SLAVE    *
  24. *    8259A'S ON THE SYSTEM SUPPORT 1        *
  25. *                        *
  26. ************************************************
  27.  
  28.  
  29. ; THIS PROGRAM IS SET TO I/O ADDRESS BASE 50H
  30. ;  (COMPUPRO STANDARD), FOR DIFFERENT ADDRESSES
  31. ;  CHANGE "BASE" IN EQUATES.
  32.  
  33.  
  34.     MACLIB    MACRO
  35.  
  36. INTJMP    EQU    200H    ;START OF INTERRUPT JUMPS
  37. SINTJMP    EQU    INTJMP+20H
  38.  
  39.  
  40. BASE    EQU    50H    ;STARTING ADDR OF BOARD
  41. MPRT0    EQU    BASE    ;LOWER MASTER PORT A0=0
  42. MPRT1    EQU    BASE+1    ;UPPER MASTER PORT (A0=1)
  43. SPRT0    EQU    BASE+2    ;LOWER SLAVE PORT (A0=0)
  44. SPRT1    EQU    BASE+3    ;UPPER SLAVE PORT (A0=1)
  45. CLKCMD    EQU    BASE+10    ;CLOCK COMMAND PORT
  46. CLKDAT    EQU    BASE+11    ;CLOCK DATA PORT
  47. SURTD    EQU    BASE+12    ;SS UART DATA PORT
  48. SURTS    EQU    BASE+13    ;SS UART STATUS PORT
  49. SURTM    EQU    BASE+14    ;UART MODE PORT
  50. SURTC    EQU    BASE+15    ;UART COMMAND PORT
  51.  
  52. CLKDATA    EQU    BASE+11    ;CLOCK DATA PORT
  53.  
  54.  
  55.  
  56.     ORG    100H
  57.  
  58. ; THIS ROUTINE INITIALISES THE MASTER 8259A
  59.  
  60. INIT:
  61.     DI        ;DISABLE INTERRUPTS
  62.     MVI    A,(INTJMP AND 0E0H) OR 00011101B    ;ICW1
  63.     OUT    MPRT0    ;SEND IT
  64.     MVI    A,HIGH INTJMP    ;UPPER BYTE OF ADDR INTERVAL
  65.     OUT    MPRT1    ;SEND IT
  66.     MVI    A,10000000B    ;IR7 HAS A SLAVE
  67.     OUT    MPRT1    ;SEND IT
  68.     MVI    A,00010000B    ;ICW4
  69.     OUT    MPRT1    ;SEND IT
  70.     MVI    A,0FFH    ;CLEAR ALL MASK BITS (OCW1)
  71.     OUT    MPRT1    ;SEND IT
  72.     MVI    A,10100000B    ;ROTATE ON NON-SPEC EOI
  73.     OUT    MPRT0    ;SEND IT
  74.     MVI    A,00001000B    ;OCW3
  75.     OUT    MPRT0    ;SEND IT
  76.  
  77.  
  78. ;  THIS ROUTINE INITIALISES THE SLAVE 8259A
  79.  
  80.  
  81.     MVI    A,(SINTJMP AND 0E0H) OR 00011101B    ;ICW1
  82.     OUT    SPRT0    ;SEND IT
  83.     MVI    A,HIGH SINTJMP    ;UPPER BYTE OF ADDR INTERVAL
  84.     OUT    SPRT1    ;SEND IT
  85.     MVI    A,07H    ;IR7 HAS A SLAVE
  86.     OUT    SPRT1    ;SEND IT
  87.     MVI    A,00010000B    ;ICW4
  88.     OUT    SPRT1    ;SEND IT
  89.     MVI    A,0FFH    ;CLEAR ALL MASK BITS (OCW1)
  90.     OUT    SPRT1    ;SEND IT
  91.     MVI    A,10100000B    ;ROTATE ON NON-SPEC EOI
  92.     OUT    SPRT0    ;SEND IT
  93.     MVI    A,00001000B    ;OCW3
  94.     OUT    SPRT0    ;SEND IT
  95.  
  96.  
  97. ;    SET UP OKI RTC FOR 1 SEC INTERRUPT
  98. ;      SET A0 - A3 = 1 (ADDRESS 15)
  99. ;      SET READ    = 1
  100. ;      SET WRITE   = 0
  101. ;      SET HOLD    = 0
  102. ;     BY OUTPUTING 1FH TO CLKCMD PORT
  103.  
  104.  
  105.     MVI    A,1FH    ;SET FOR TIME INTERRUPTS
  106.     OUT    CLKCMD    ;AND OUTPUT
  107.  
  108. ;    ENABLE INT15 ONLY
  109.  
  110.     MVI    A,07DH    ;ENABLE INT15 ONLY
  111.     OUT    MPRT1
  112.     MVI    A,07FH
  113.     OUT    SPRT1
  114.     EI        ;ENABLE
  115. LOOP    JMP    LOOP    ;LOOP FOREVER
  116.  
  117.  
  118. ************************************************
  119. *  STANDARD CONFIGURATION OF INTERRUPTS    *
  120. *   ON THE SYSTEM SUPPORT 1 BOARD        *
  121. *                        *
  122. ************************************************
  123.  
  124.  
  125. ;  MASTER CONTROLLER :-
  126. ; INTERRUPT        NO. SOURCE    OPTION
  127. ;    IRQ0        VI0        RINT
  128. ;    IRQ1        VI1        TINT
  129. ;    IRQ2        VI2        TIMER0
  130. ;    IRQ3        VI3        TIMER1
  131. ;    IRQ4        VI4        TIMER2
  132. ;    IRQ5        VI5        SVRQ(9511)
  133. ;    IRQ6        VI6        END(9511)
  134. ;    IRQ7        VI7        INT(SLAVE)
  135.  
  136.  
  137. ;  SLAVE CONTROLLER
  138. ; INTERRUPT    STANDARD SOURCE        OPTION
  139. ;    IRQ0        VI7
  140. ;    IRQ1        TIMER0
  141. ;    IRQ2        TIMER1
  142. ;    IRQ3        TIMER2
  143. ;    IRQ4        SVRQ(9511)
  144. ;    IRQ5        END(9511)
  145. ;    IRQ6        TINT
  146. ;    IRQ7        RINT
  147.  
  148. ;FOR THE INTERFACER 2 BOARD THE STANDARD INTERRUPTS
  149. ;
  150.  
  151. ;    VI0        INT J0 (PARALLEL CH 0)
  152. ;    VI1        INT J2 (PARALLEL CH 1)
  153. ;    VI2        INT J3 (PARALLEL (CH 2)
  154. ;    VI3        N.C.
  155. ;    VI4        TMRI (TIMER INTERRUPT)
  156. ;    VI5        N.C.
  157. ;    VI6        TXINT
  158. ;    VI7        RXINT
  159.  
  160.  
  161. ;    DISK 1 INTERRUPT OPTIONS
  162. ;      THE INTERRUPT ON THE DISK CONTROLLER
  163. ;      CAN BE STRAPPED TO VI0 TO VI7
  164. ;      NORMALLY VI0 (THE HIGHEST PRIORITY 
  165. ;      WOULD BE USED.
  166.  
  167.  
  168.     ORG    INTJMP
  169.  
  170. ************************************************
  171. *                        *
  172. *    INTERRUPT JUMP BLOCK            *
  173. *                        *
  174. ************************************************
  175.  
  176. INT0    JMP    INT0
  177.     NOP
  178.  
  179. ;    1 SEC INTERRUPT FROM RTC
  180.  
  181. INT1    DI        ;DISABLE INTERRUPTS
  182.     JMP    ONESEC    ;EXEC ONE SECOND INTERRUPT
  183. INT2    JMP    INT2
  184.     NOP
  185. INT3    JMP    INT3
  186.     NOP
  187. INT4    JMP    INT4
  188.     NOP
  189. INT5    JMP    INT5
  190.     NOP
  191. INT6    JMP    INT6
  192.     NOP
  193. INT7    JMP    INT7
  194.     NOP
  195. INT8    JMP    INT8
  196.     NOP
  197.  
  198.  
  199. ;    TIMER 0 INTERRUPT
  200.  
  201. INT9    JMP    INT9
  202.     NOP
  203.  
  204. ;    TIMER 1 INTERRUPT
  205.  
  206. INT10    JMP    INT10
  207.     NOP
  208.  
  209. ;    TIMER 2 INTERRUPT
  210.  
  211. INT11    JMP    INT11
  212.     NOP
  213.  
  214. ;    APU (9511) SVRQ INTERRUPT
  215.  
  216. INT12    JMP    INT12
  217.     NOP
  218.  
  219. ;    APU (9511) END INTERRUPT
  220.  
  221. INT13    JMP    INT13
  222.     NOP
  223.  
  224. ;    SYSTEM SUPPORT TINT INTERRUPT
  225.  
  226. INT14:
  227.     DI
  228.     JMP    STINT    ;UART TX INTERRUPT
  229.  
  230. ;    SYSTEM SUPPORT RINT INTERRUPT
  231.  
  232. INT15:
  233.     DI
  234.     JMP    SRINT
  235.  
  236.  
  237. ;    ONESEC INTERRUPT ROUTINE
  238.  
  239. ONESEC:
  240.     SAVE        ;SAVE B,D,AND H
  241.     PUSH    PSW    ;AND PSW
  242.     PRINT    <'ONE SECOND INTERRUPT ',CR,LF>
  243.     MVI    A,61H    ;SET SEOI
  244.     OUT    MPRT0    ;AND SEND
  245.     POP    PSW    ;RESTORE PSW
  246.     RESTORE        ;RESTORE B,D,AND H
  247.     EI        ;ENABLE INTERRUPTS
  248.     RET
  249.  
  250.  
  251.  
  252. ************************************************
  253. *                        *
  254. *    SYSTEM SUPPORT 1 UART I/P        *
  255. *    INTERRUPT ROUTINE            *
  256. *                        *
  257. ************************************************
  258.  
  259. ;    THIS ROUTINE CHECKS THE UART FOR DATA
  260. ;    READY, PRINT AN ERROR MESSAGE IF NOT
  261. ;    AVAILABLE. THEN TESTS TO SEE IF THE BUFFER
  262. ;    IS FULL, AGAIN OUTPUTS AN ERROR MESSAGE IF
  263. ;    FULL, AND THEN BUMPS THE COUNT,AND POINTER
  264. ;    BEFORE SENDING THE SEOI'S AND RESTORING THE
  265. ;    REGISTERS, ENABLING INTERRUPTS.
  266.  
  267. SSDAV    EQU    00000001B    ;SYSTEM SUPPORT DATA AVAIL
  268.  
  269. SRINT:
  270.     SAVE        ;PUSH B,D,H
  271.     PUSH    PSW    ;AND PSW
  272.     IN    SURTS    ;GET STATUS FROM UART
  273.     ANI    SSDAV    ;MASK DATA AVAIL.
  274.     JZ    RINTE    ;EXIT IF NOT READY
  275.     IN    SURTD    ;GET THE DATA
  276.     ANI    7FH    ;MASK PARITY
  277.     MOV    C,A    ;SAVE CHAR
  278.     LDA    SIBUFC    ;GET COUNT IN BUFFER
  279.     CPI    SIBUFL    ;AND SEE IF FULL
  280.     JZ    SIFUL    ;BRIF FULL
  281.     LHLD    SIBUFP    ;GET POINTER
  282.     MOV    M,C    ;AND STORE
  283.     INX    H    ;AND INDEX
  284.     SHLD    SIBUFP    ;AND SAVE
  285.     INR    A    ;THEN INDEX NO OF CHAR
  286.     STA    SIBUFC    ;AND SAVE
  287. SRINTEX:
  288.  
  289. ;    SEND SPECIFIC END OF INTERRUPT TO
  290. ;    BOTH MASTER AND SLAVE CONTROLLERS.
  291.  
  292.     MVI    A,67H    ;LOAD SEOI FOR MASTER
  293.     OUT    MPRT0    ;SEND IT
  294.     MVI    A,67H    ;LOAD SEOI FOR SLAVE
  295.     OUT    SPRT0    ;AND SEND IT
  296.  
  297.  
  298.     POP    PSW    ;RESTORE ALL REGISTERS
  299.     RESTORE
  300.     EI        ;ENABLE INTERRUPTS
  301.     RET
  302.  
  303. RINTE:
  304.     PRINT    <'SS UART INPUT ERROR',CR,LF>
  305.     CALL    SERROR    ;RESET USART ERRORS
  306.     JMP    SRINTEX    ;AND EXIT
  307.  
  308. SIFUL:
  309.     PRINT    <'SS UART INPUT BUFFER FULL',CR,LF>
  310.     JMP    SRINTEX    ;AND EXIT
  311.  
  312.  
  313. ;
  314. ;    THIS ROUTINE PERFORMS THE INITIALISATION
  315. ;    REQUIRED BY THE SYSTEM SUPPORT USART.
  316. ;
  317. STINIT:
  318.     MVI    A,11101110B    ;ASYNC,8BITS,EV,2STOP
  319.     OUT    SURTM    ;SET UP MODE REG. 1
  320.     MVI    A,01111110B    ;9600 BAUD
  321.     OUT    SURTM    ;SET UP MODE REG. 2
  322.     MVI    A,00100111B    ;TX ON,DTR LOW,REC ON,
  323.             ;NO BREAK,NO RESET,RTS LOW
  324.     OUT    SURTC    ;SET UP COMMAND PORT
  325.     RET
  326.  
  327.  
  328.  
  329. ;    SERROR - ROUTINE TO RESET ERROR FLAGS
  330. ;        ON THE SYSTEM SOPPORT UART.
  331. ;
  332.  
  333. SERROR:
  334.     MVI    A,00010000B    ;RESET UART
  335.     OUT    SURTC    ;TO COMMAND REG.
  336.     MVI    A,00100111B    ;RESUME
  337.     OUT    SURTC
  338.     RET
  339.  
  340.  
  341.  
  342. ************************************************
  343. *                        *
  344. *    SYSTEM SUPPORT 1 UART O/P        *
  345. *    INTERRUPT ROUTINE            *
  346. *                        *
  347. ************************************************
  348.  
  349.  
  350. STINT:
  351.     SAVE    ;PUSH B,D,H
  352.     PUSH    PSW
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374. SIBUFC    DB    0H    ;SS UART CHAR COUNT
  375. SIBUFP    DW    $+2    ;SS UART BUFFER POINTER
  376. SIBUF    DS    125    ;SI BUFFER
  377. SIBUFL    EQU    $-SIBUF    ;LENGTH OF SIBUFFER
  378.  
  379.  
  380.  
  381.     END
  382.