* MTK16-CONFIG - MTK16 CONFIGURATION DATA * * MTK16 IS A SMALL MULTI TASKING KERNEL FOR DDP516/H316 * HONEYWELL X16 16 BIT COMPUTER SOFTWARE * MTK16 IS CREATED BY THEO ENGEL (THEO.ENGEL@HETNET.NL) * SUBR ESKPCH,SCHN EXTERNAL INTERRUPT SKIP CHAIN SUBR CTAB TIMER TABLE SUBR ETAB SOFT-EVENT TABLE SUBR TTAB TASK CONTROL BLOCK TABLE SUBR IMSK INTERRUPT ENABLED MASK WORD SUBR PREEMT,PREE PREEMTPION FLAG SUBR MTKSTR,MSTR KERNEL CODE START ADDRESS SUBR MTKEND,MEND KERNEL CODE END ADDRESS * * INDIVIDUAL TCB ENTRY POINTS FOR THE TASKS (5 TASKS ARE CONFIGURED) SUBR P1 SUBR P2 SUBR P3 SUBR P4 SUBR P5 * * THIS MODULE CAN BE LOCATED ANYWHERE, BUT STARTING AT A SECTOR * BOUNDARY IS EASY FOR TESTING ORG '1000 JMP STR INITIALIZE * RTC EQU '61 CLOCK LOCATION INT EQU '63 INTERRUPT LOCATION * * INTERRUPT MASK BITS * CLK 0 000 000 000 000 001 * TTY 0 000 000 000 100 000 * PTR 0 000 000 010 000 000 * PTP 0 000 000 001 000 000 * * THE MASK WORD IS FILLED BY DEFAULT THE THE MASK BITS OF THE DEVICES * SUPPORTED BY THE BASIC KERNEL. IN CASE ADDITIONAL DEVIVES ARE SUPPORTED * BY EXTERNAL INTERRUPT HANDLERS, THEN THE CONTENT OF THE MASK WORD HAS * TO BE ADAPTED WITH THE MASK BITS OF THOSE ADDITIONAL DEVICES. * IMSK OCT '341 PTR, PTP, TTY AND RTC MASK BIT * * TASK PREEMPTION SCHEDULING * THE RING-1 CODE IS NOT REENTRANT. AFTER THE SERVICE OF AN INTERRUPT, THE * INTERRUPT HANDLER CAN NOT ENTER THE RING-1 SCHEDULER, WHICH DISABLES TASK * PREEMPTION. IN ORDER TO ENABLE PREEMPTION, THE RING-0 INTERRUPT CODE CHECKS * WHETHER AN INTERRUPT TOOK PLACE WHILE EXECUTING RING-1 CODE. IF THIS IS * NOT THE CASE AND THE PREEMPT FLAG IS 1, THEN RING-0 ENTERS THE SCHEDULER * AFTER AN INTERRUPT IS PROCESSED. OTHERWISE THE INTERRUPT HANDLER RETURNS * DIRECTLY TO THE INTERRUPTED CODE. * PREE OCT 0 FLAG = 0 NO PREEMPTION; FLAG = 1 THEN PREEMPTION * * THE CHECK IS DONE BY COMPARING THE ADDRESS WERE THE INTERRUPT OCCURED AGAINST * THE CONTENT OF THE FOLLOWING TWO WORDS, WHICH DESCRIBE WERE THE RING-1 CODE * IS LOCATED. BY DEFAULT THE LOCATIONS ARE FILLED BY THE LOADER WITH THE * LOCATION OF THE BASIC KERNEL. WHEN EXTERNAL RING-1 CODE IS ADDED TO THE SYSTEM * THEN THE CONTENT OF THESE LOCATIONS MUST BE ADAPTED ACCORDINGLY BY THE * INIT PROCEDURE. MSTR XAC KSTR DEFAULT BEGIN ADDRESS BASIC KERNEL ADDRESS RANGE MEND XAC KEND DEFAULT END ADDRESS BASIC KERNEL ADDRESS RANGE * * NO DEFAULT VALUES FOR MSTR AND MEND TO BE STORED BY INIT IN MSTR AND MEND * R1S OCT 'XXXXXXX RING-1 CODE ADDRESS RANGE BEGIN (INCL. EXTERNAL CODE) * R1E OCT 'XXXXXXX RING-1 CODE ADDRESS RANGE END (INCL. EXTERNAL CODE) * ***************** * SYSTEM TABLES * ***************** * TIMER TABLE (10 TIMERS DEFINED) * TIMERS CAN BE ADDED BY EXTENDING THE TIMER TABLE WITH 2 EMPTY WORDS PER TIMER. * THE TIMER TABLE MUST END WITH OCTAL 177777. * CTAB EQU * *** ** POINTER TO TCB OF TASK WAITING FOR THIS TIMER OCT 0 - TICK VALUE *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 *** ** OCT 0 OCT '177777 END OF TIMER TABLE EJCT * * SOFT-EVENT TABLE (16 DEFINED IN THIS TABLE, MAX 63) * DEFAULT VALUE IS 0, WHICH IS THE START VALUE FOR A BINARY SEMAPHORE. * A BINARY SEMAPHORE IS INITIATED WITH: * CALL REVENT * OCT 1NN NN=SOFT-EVENT NUMBER * WHICH RESULTS IN A VALUE 1-1=0 IN THE WORD OF SOFT-EVENT NUMBER NN ETAB EQU *-1 OCT 0 DEFAULT COUNT VALUE 1 OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE OCT 0 DEFAULT COUNT VALUE 16 EJCT * * TASK CONTROL BLOCK (TCB) TABLE FOR THE DEFINED TASKS TTAB EQU * * P1 OCT 1 TASK 1, STATE / EVENT FLAG XAC PRTC LABEL (POINTER INTO TASK WHERE TO CONTINUE) OCT 0 SAVED A OCT 0 SAVED B OCT 0 SAVED X OCT 0 SAVED KEYS XAC PRTC START ADDRESS OCT 0 TASK EVENT OCT 0 ATTACHED DEVICES OCT 0 POINTER TO EVENT BLOCKED FOR * P2 OCT 1 TASK 2, STATE / EVENT FLAG XAC PTTY LABEL (POINTER INTO TASK WHERE TO CONTINUE) OCT 0 SAVED A OCT 0 SAVED B OCT 0 SAVED X OCT 0 SAVED KEYS XAC PTTY START ADDRESS OCT 0 TASK EVENT OCT 0 ATTACHED DEVICES OCT 0 POINTER TO EVENT BLOCKED FOR * P3 OCT 0 TASK 3, STATE / EVENT FLAG OCT 0 LABEL (POINTER INTO TASK WHERE TO CONTINUE) OCT 0 SAVED A OCT 0 SAVED B OCT 0 SAVED X OCT 0 SAVED KEYS XAC TSK3 START ADDRESS OCT 0 TASK EVENT OCT 0 ATTACHED DEVICES OCT 0 POINTER TO EVENT BLOCKED FOR * P4 OCT 1 TASK 4, STATE / EVENT FLAG XAC TSK4 LABEL (POINTER INTO TASK WERE TO CONTINUE) OCT 0 SAVED A OCT 0 SAVED B OCT 0 SAVED X OCT 0 SAVED KEYS XAC TSK4 START ADDRESS OCT 0 TASK EVENT OCT 0 ATTACHED DEVICES OCT 0 POINTER TO EVENT BLOCKED FOR * P5 OCT 0 TASK 5, STATE / EVENT FLAG XAC TSK5 LABEL (POINTER INTO TASK WERE TO CONTINUE) OCT 0 SAVED A OCT 0 SAVED B OCT 0 SAVED X OCT 0 SAVED KEYS XAC TSK5 START ADDRESS OCT 0 TASK EVENT OCT 0 ATTACHED DEVICES OCT 0 POINTER TO EVENT BLOCKED FOR OCT '177777 END OF TCB TABLE EJCT * EXTERNAL INTERRUPT SKIP CHAIN EXTENSION SCHN EQU * ************************************************************* * ENTER ADDITIONAL 'SKS NOT INTERRUPTING' INSTRUCTIONS HERE * * SKS *** * * JMP EXTERNAL INTERRUPT HANDLING ROUTINE * * * * THE EXTERNAL INTERRUPT HANDLER MUST RETURN TO THE KERNEL * * AT THE END OF ITS PROCESSING WITH A: * * JMP IBACK * ************************************************************* JMP* *+1 XAC ISKPCH BACK TO INTERNAL INTERRUPT SKIP CHAIN EJCT * ONE TIME INITIALIZATION CODE. * IN CASE EXTERNAL INTERRUPT HANDLERS ARE ADDED WHICH NEED ONE TIME * INITIALIZATION, THAT INITIALIZATION CODE SHOULD BE ADDED HERE. * THIS CODE CAN BE OVERWRITTEN WITH DATA, AFTER INITIALIZATION ************** * INITIALIZE * ************** * * INIT THE INTERRUPT PROCESSING AND START SCHEDULING STR LDA* ILNK INIT LOCATION '63 WITH THE INTERRUPT STA INT ENTRY POINT LDA IMSK SET INTERRUPT MASK TO ENABLE INTERRUPT SMK '20 FROM A SELECTED SET OF DEVICES LDA TICK SET CLOCK VALUE FOR GETTING THE NEXT TICK STA RTC OCP '20 START CLOCK BY RESETTING ********************************************************************** * ADD INITIALIZATION CODE FOR EXTERNAL INTERRUPT HANDLERS, ETC. HERE * * * * ******************************************************************** * ADD NON DEFAULT VALUES IN MSTR AND MEND IN CASE OF EXTERNAL RING-1 * * CODE * * LDA R1S * * STA MSTR * * LDA R1E * * STA MEND * ********************************************************************** ENB JMP* *+1 TO SCHEDULER / PROCESS TASKS XAC SKED ILNK XAC ILINK INTERRUPT SERVICE ENTRY POINT TICK DEC -5 RTC CLOCK PULSES PER TICK (TICK = 0.1 SEC) * END STR