* MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 1 0001 * MTK16-CONFIG - MTK16 CONFIGURATION DATA 0002 * 0003 * MTK16 IS A SMALL MULTI TASKING KERNEL FOR DDP516/H316 0004 * HONEYWELL X16 16 BIT COMPUTER SOFTWARE 0005 * MTK16 IS CREATED BY THEO ENGEL (THEO.ENGEL@HETNET.NL) 0006 * 0007 SUBR ESKPCH,SCHN EXTERNAL INTERRUPT SKIP CHAIN 0008 SUBR CTAB TIMER TABLE 0009 SUBR ETAB SOFT-EVENT TABLE 0010 SUBR TTAB TASK CONTROL BLOCK TABLE 0011 SUBR IMSK INTERRUPT ENABLED MASK WORD 0012 SUBR PREEMT,PREE PREEMTPION FLAG 0013 SUBR MTKSTR,MSTR KERNEL CODE START ADDRESS 0014 SUBR MTKEND,MEND KERNEL CODE END ADDRESS 0015 * 0016 * INDIVIDUAL TCB ENTRY POINTS FOR THE TASKS (5 TASKS ARE CONFIGURED) 0017 SUBR P1 0018 SUBR P2 0019 SUBR P3 0020 SUBR P4 0021 SUBR P5 0022 * 0023 * THIS MODULE CAN BE LOCATED ANYWHERE, BUT STARTING AT A SECTOR 0024 * BOUNDARY IS EASY FOR TESTING 0025 ORG '1000 0026 01000 0 01 01137 JMP STR INITIALIZE 0027 * 0028 000061 RTC EQU '61 CLOCK LOCATION 0029 000063 INT EQU '63 INTERRUPT LOCATION 0030 * 0031 * INTERRUPT MASK BITS 0032 * CLK 0 000 000 000 000 001 0033 * TTY 0 000 000 000 100 000 0034 * PTR 0 000 000 010 000 000 0035 * PTP 0 000 000 001 000 000 0036 * 0037 * THE MASK WORD IS FILLED BY DEFAULT THE THE MASK BITS OF THE DEVICES * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 2 0038 * SUPPORTED BY THE BASIC KERNEL. IN CASE ADDITIONAL DEVIVES ARE SUPPORTED 0039 * BY EXTERNAL INTERRUPT HANDLERS, THEN THE CONTENT OF THE MASK WORD HAS 0040 * TO BE ADAPTED WITH THE MASK BITS OF THOSE ADDITIONAL DEVICES. 0041 * 0042 01001 000341 IMSK OCT '341 PTR, PTP, TTY AND RTC MASK BIT 0043 * 0044 * TASK PREEMPTION SCHEDULING 0045 * THE RING-1 CODE IS NOT REENTRANT. AFTER THE SERVICE OF AN INTERRUPT, THE 0046 * INTERRUPT HANDLER CAN NOT ENTER THE RING-1 SCHEDULER, WHICH DISABLES TASK 0047 * PREEMPTION. IN ORDER TO ENABLE PREEMPTION, THE RING-0 INTERRUPT CODE CHECKS 0048 * WHETHER AN INTERRUPT TOOK PLACE WHILE EXECUTING RING-1 CODE. IF THIS IS 0049 * NOT THE CASE AND THE PREEMPT FLAG IS 1, THEN RING-0 ENTERS THE SCHEDULER 0050 * AFTER AN INTERRUPT IS PROCESSED. OTHERWISE THE INTERRUPT HANDLER RETURNS 0051 * DIRECTLY TO THE INTERRUPTED CODE. 0052 * 0053 01002 000000 PREE OCT 0 FLAG = 0 NO PREEMPTION; FLAG = 1 THEN PREEMPTION 0054 * 0055 * THE CHECK IS DONE BY COMPARING THE ADDRESS WERE THE INTERRUPT OCCURED AGAINST 0056 * THE CONTENT OF THE FOLLOWING TWO WORDS, WHICH DESCRIBE WERE THE RING-1 CODE 0057 * IS LOCATED. BY DEFAULT THE LOCATIONS ARE FILLED BY THE LOADER WITH THE 0058 * LOCATION OF THE BASIC KERNEL. WHEN EXTERNAL RING-1 CODE IS ADDED TO THE SYSTEM 0059 * THEN THE CONTENT OF THESE LOCATIONS MUST BE ADAPTED ACCORDINGLY BY THE 0060 * INIT PROCEDURE. 0061 01003 0 000000 MSTR XAC KSTR DEFAULT BEGIN ADDRESS BASIC KERNEL ADDRESS RANGE 0062 01004 0 000000 MEND XAC KEND DEFAULT END ADDRESS BASIC KERNEL ADDRESS RANGE 0063 * 0064 * NO DEFAULT VALUES FOR MSTR AND MEND TO BE STORED BY INIT IN MSTR AND MEND 0065 * R1S OCT 'XXXXXXX RING-1 CODE ADDRESS RANGE BEGIN (INCL. EXTERNAL CODE) 0066 * R1E OCT 'XXXXXXX RING-1 CODE ADDRESS RANGE END (INCL. EXTERNAL CODE) 0067 * 0068 ***************** 0069 * SYSTEM TABLES * 0070 ***************** 0071 * TIMER TABLE (10 TIMERS DEFINED) 0072 * TIMERS CAN BE ADDED BY EXTENDING THE TIMER TABLE WITH 2 EMPTY WORDS PER TIMER. 0073 * THE TIMER TABLE MUST END WITH OCTAL 177777. 0074 * * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 3 0075 001005 CTAB EQU * 0076 01005 0 00 00000 *** ** POINTER TO TCB OF TASK WAITING FOR THIS TIMER 0077 01006 000000 OCT 0 - TICK VALUE 0078 01007 0 00 00000 *** ** 0079 01010 000000 OCT 0 0080 01011 0 00 00000 *** ** 0081 01012 000000 OCT 0 0082 01013 0 00 00000 *** ** 0083 01014 000000 OCT 0 0084 01015 0 00 00000 *** ** 0085 01016 000000 OCT 0 0086 01017 0 00 00000 *** ** 0087 01020 000000 OCT 0 0088 01021 0 00 00000 *** ** 0089 01022 000000 OCT 0 0090 01023 0 00 00000 *** ** 0091 01024 000000 OCT 0 0092 01025 0 00 00000 *** ** 0093 01026 000000 OCT 0 0094 01027 0 00 00000 *** ** 0095 01030 000000 OCT 0 0096 01031 177777 OCT '177777 END OF TIMER TABLE 0097 EJCT * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 4 0098 * 0099 * SOFT-EVENT TABLE (16 DEFINED IN THIS TABLE, MAX 63) 0100 * DEFAULT VALUE IS 0, WHICH IS THE START VALUE FOR A BINARY SEMAPHORE. 0101 * A BINARY SEMAPHORE IS INITIATED WITH: 0102 * CALL REVENT 0103 * OCT 1NN NN=SOFT-EVENT NUMBER 0104 * WHICH RESULTS IN A VALUE 1-1=0 IN THE WORD OF SOFT-EVENT NUMBER NN 0105 001031 ETAB EQU *-1 0106 01032 000000 OCT 0 DEFAULT COUNT VALUE 1 0107 01033 000000 OCT 0 DEFAULT COUNT VALUE 0108 01034 000000 OCT 0 DEFAULT COUNT VALUE 0109 01035 000000 OCT 0 DEFAULT COUNT VALUE 0110 01036 000000 OCT 0 DEFAULT COUNT VALUE 0111 01037 000000 OCT 0 DEFAULT COUNT VALUE 0112 01040 000000 OCT 0 DEFAULT COUNT VALUE 0113 01041 000000 OCT 0 DEFAULT COUNT VALUE 0114 01042 000000 OCT 0 DEFAULT COUNT VALUE 0115 01043 000000 OCT 0 DEFAULT COUNT VALUE 0116 01044 000000 OCT 0 DEFAULT COUNT VALUE 0117 01045 000000 OCT 0 DEFAULT COUNT VALUE 0118 01046 000000 OCT 0 DEFAULT COUNT VALUE 0119 01047 000000 OCT 0 DEFAULT COUNT VALUE 0120 01050 000000 OCT 0 DEFAULT COUNT VALUE 0121 01051 000000 OCT 0 DEFAULT COUNT VALUE 16 0122 EJCT * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 5 0123 * 0124 * TASK CONTROL BLOCK (TCB) TABLE FOR THE DEFINED TASKS 0125 001052 TTAB EQU * 0126 * 0127 01052 000001 P1 OCT 1 TASK 1, STATE / EVENT FLAG 0128 01053 0 000000 XAC PRTC LABEL (POINTER INTO TASK WHERE TO CONTINUE) 0129 01054 000000 OCT 0 SAVED A 0130 01055 000000 OCT 0 SAVED B 0131 01056 000000 OCT 0 SAVED X 0132 01057 000000 OCT 0 SAVED KEYS 0133 01060 0 000000 XAC PRTC START ADDRESS 0134 01061 000000 OCT 0 TASK EVENT 0135 01062 000000 OCT 0 ATTACHED DEVICES 0136 01063 000000 OCT 0 POINTER TO EVENT BLOCKED FOR 0137 * 0138 01064 000001 P2 OCT 1 TASK 2, STATE / EVENT FLAG 0139 01065 0 000000 XAC PTTY LABEL (POINTER INTO TASK WHERE TO CONTINUE) 0140 01066 000000 OCT 0 SAVED A 0141 01067 000000 OCT 0 SAVED B 0142 01070 000000 OCT 0 SAVED X 0143 01071 000000 OCT 0 SAVED KEYS 0144 01072 0 000000 XAC PTTY START ADDRESS 0145 01073 000000 OCT 0 TASK EVENT 0146 01074 000000 OCT 0 ATTACHED DEVICES 0147 01075 000000 OCT 0 POINTER TO EVENT BLOCKED FOR 0148 * 0149 01076 000000 P3 OCT 0 TASK 3, STATE / EVENT FLAG 0150 01077 000000 OCT 0 LABEL (POINTER INTO TASK WHERE TO CONTINUE) 0151 01100 000000 OCT 0 SAVED A 0152 01101 000000 OCT 0 SAVED B 0153 01102 000000 OCT 0 SAVED X 0154 01103 000000 OCT 0 SAVED KEYS 0155 01104 0 000000 XAC TSK3 START ADDRESS 0156 01105 000000 OCT 0 TASK EVENT 0157 01106 000000 OCT 0 ATTACHED DEVICES 0158 01107 000000 OCT 0 POINTER TO EVENT BLOCKED FOR * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 6 0159 * 0160 01110 000001 P4 OCT 1 TASK 4, STATE / EVENT FLAG 0161 01111 0 000000 XAC TSK4 LABEL (POINTER INTO TASK WERE TO CONTINUE) 0162 01112 000000 OCT 0 SAVED A 0163 01113 000000 OCT 0 SAVED B 0164 01114 000000 OCT 0 SAVED X 0165 01115 000000 OCT 0 SAVED KEYS 0166 01116 0 000000 XAC TSK4 START ADDRESS 0167 01117 000000 OCT 0 TASK EVENT 0168 01120 000000 OCT 0 ATTACHED DEVICES 0169 01121 000000 OCT 0 POINTER TO EVENT BLOCKED FOR 0170 * 0171 01122 000000 P5 OCT 0 TASK 5, STATE / EVENT FLAG 0172 01123 0 000000 XAC TSK5 LABEL (POINTER INTO TASK WERE TO CONTINUE) 0173 01124 000000 OCT 0 SAVED A 0174 01125 000000 OCT 0 SAVED B 0175 01126 000000 OCT 0 SAVED X 0176 01127 000000 OCT 0 SAVED KEYS 0177 01130 0 000000 XAC TSK5 START ADDRESS 0178 01131 000000 OCT 0 TASK EVENT 0179 01132 000000 OCT 0 ATTACHED DEVICES 0180 01133 000000 OCT 0 POINTER TO EVENT BLOCKED FOR 0181 01134 177777 OCT '177777 END OF TCB TABLE 0182 EJCT * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 7 0183 * EXTERNAL INTERRUPT SKIP CHAIN EXTENSION 0184 001135 SCHN EQU * 0185 ************************************************************* 0186 * ENTER ADDITIONAL 'SKS NOT INTERRUPTING' INSTRUCTIONS HERE * 0187 * SKS *** * 0188 * JMP EXTERNAL INTERRUPT HANDLING ROUTINE * 0189 * * 0190 * THE EXTERNAL INTERRUPT HANDLER MUST RETURN TO THE KERNEL * 0191 * AT THE END OF ITS PROCESSING WITH A: * 0192 * JMP IBACK * 0193 ************************************************************* 0194 01135 -0 01 01136 JMP* *+1 0195 01136 0 000000 XAC ISKPCH BACK TO INTERNAL INTERRUPT SKIP CHAIN 0196 EJCT * MTK16-CONFIG - MTK16 CONFIGURATION DATA PAGE 8 0197 * ONE TIME INITIALIZATION CODE. 0198 * IN CASE EXTERNAL INTERRUPT HANDLERS ARE ADDED WHICH NEED ONE TIME 0199 * INITIALIZATION, THAT INITIALIZATION CODE SHOULD BE ADDED HERE. 0200 * THIS CODE CAN BE OVERWRITTEN WITH DATA, AFTER INITIALIZATION 0201 ************** 0202 * INITIALIZE * 0203 ************** 0204 * 0205 * INIT THE INTERRUPT PROCESSING AND START SCHEDULING 0206 01137 -0 02 01151 STR LDA* ILNK INIT LOCATION '63 WITH THE INTERRUPT 0207 01140 0 04 00063 STA INT ENTRY POINT 0208 01141 0 02 01001 LDA IMSK SET INTERRUPT MASK TO ENABLE INTERRUPT 0209 01142 74 0020 SMK '20 FROM A SELECTED SET OF DEVICES 0210 01143 0 02 01152 LDA TICK SET CLOCK VALUE FOR GETTING THE NEXT TICK 0211 01144 0 04 00061 STA RTC 0212 01145 14 0020 OCP '20 START CLOCK BY RESETTING 0213 ********************************************************************** 0214 * ADD INITIALIZATION CODE FOR EXTERNAL INTERRUPT HANDLERS, ETC. HERE * 0215 * * 0216 * ******************************************************************** 0217 * ADD NON DEFAULT VALUES IN MSTR AND MEND IN CASE OF EXTERNAL RING-1 * 0218 * CODE * 0219 * LDA R1S * 0220 * STA MSTR * 0221 * LDA R1E * 0222 * STA MEND * 0223 ********************************************************************** 0224 01146 000401 ENB 0225 01147 -0 01 01150 JMP* *+1 TO SCHEDULER / PROCESS TASKS 0226 01150 0 000000 XAC SKED 0227 01151 0 000000 ILNK XAC ILINK INTERRUPT SERVICE ENTRY POINT 0228 01152 177773 TICK DEC -5 RTC CLOCK PULSES PER TICK (TICK = 0.1 SEC) 0229 * 0230 END STR NO ERRORS IN ABOVE ASSEMBLY. DAP-16 REV. E