:F4:ASM80 :F5:AA16.SRC ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 1 LOC OBJ LINE SOURCE STATEMENT 1 $MACROFILE 2 ;INSITE ORDER NO. AA16 3 ; 4 ;TITLE/VERSION EXECUTIVE: REAL TIME 5 ; 6 ;REQ'D HARDWARE: 8080 7 ; TIMER THAT CAUSES PERIODIC INTERRUPT 8 ; 9 ;REQ'D SOFTWARE: NONE 10 ; 11 ;REGISTERS MODIFIED: ALL 12 ;RAM REQUIRED: 22 BYTES 13 ;ROM REQUIRED: 254 BYTES 14 ;MAX. SUBROUTINE NESTING LEVEL: 2 15 ; 16 ;PROGRAMMER: TED J. CLOWES 17 ; CUBIC CORPORATION 18 ; 4285 PONDEROSA 19 ; SAN DIEGO, CA 92123 20 ; 21 ;********************************************************************* 22 ; REAL TIME EXECUTIVE 23 ; 24 ; 25 ; THE REAL TIME EXECUTIVE IS DESIGNED TO PERFORM THE NECESSARY 26 ; SCHEDULING AND TASK INITIALIZATION AND TERMINATION THAT CAN BE 27 ; FOUND IN REAL-TIME ENVIRONMENTS. IT IS NOT DESIGNED TO HANDLE 28 ; A TIME SLICE ENVIRONMENT (I.E. TIMESHARING NETWORK). 29 ; 30 ; THE EXECUTIVE SHOULD BE USED AS A CONTROL PROGRAM FOR THE 31 ; VARIOUS APPLICATION TASKS A USER MIGHT WISH TO RUN. IT WILL SCHEDULE 32 ; TASKS ON A LIFO QUEUE FOR EXECUTION OR ON A TIME STACK FOR EXECUTION 33 ; AT A LATER TIME. THE CLOCK IS CURRENTLY SET UP ON AN 8-BIT WRAP- 34 ; AROUND WITH THE CLOCK INTERRUPT FORCING AN RST 7. A SMALLER TIME 35 ; BASE CAN BE USED BY SCHEDULING A ROUTINE THAT RESETS THE CLOCK, THEN 36 ; RESCHEDULES ITSELF. A LARGER TIME BASE WOULD REQUIRE CHANGING THE 37 ; CLOCK AND PERIODIC REQUEST ROUTINES TO HANDLE MORE CLOCK CELLS. 38 ; 39 ; THE EXECUTIVE HAS 6 ROUTINES OR PARTS, 8 EQUATES, AND 5 OPTIONAL 40 ; MACROS. THE EQUATES DEFINE THE STORAGE AREAS USED BY THE SYSTEM, THE 41 ; ROUTINES HANDLE THE VARIOUS FUNCTIONS, AND THE MACROS PROVIDE A MEDIUM 42 ; FOR USER CALLS TO THE SYSTEM. DEFINITIONS ARE PROVIDED IN TABLE #1. 43 ; 44 ; PLEASE NOTE THAT ALL THE STACKS AND QUEUES IN THE 45 ; SYSTEM GROW DOWNWARD IN MEMORY TO BE CONSISTENT WITH INTEL. THE 46 ; TIME STACK REQUIRES 3 BYTES PER ENTRY AND HAS A CELL OF ALL BINARY ONES 47 ; AT THE TOP TO PREVENT IT FROM RUN-AWAY IN CASE IT IS EMPTY. THE DISPATCH 48 ; QUEUE REQUIRES 2 BYTES PER ENTRY, IS LIFO IN DESIGN, AND HAS NO PROVI- 49 ; SIONS FOR ANOTHER PRIORITY SCHEME. THIS IMPLIES THAT ONCE STARTED A 50 ; ROUTINE OR TASK RUNS UNTIL COMPLETION ESCEPT FOR INTERRUPT PROCESSING. 51 ; 52 ; 53 ; 54 ; ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 2 LOC OBJ LINE SOURCE STATEMENT 55 ; 56 ; 57 ; TABLE #1 58 ; 59 ; NAME TYPE FUNCTION 60 ; 61 ; BRAM EQU DEFINES THE BASE OF RAM MEMORY 62 ; NRAMS EQU DEFINES THE NUMBER OF 256 BYTE RAM BLOCKS 63 ; ?TSTK EQU DEFINES THE LOCATION OF THE TIME STACK 64 ; ?SYS EQU DEFINES THE LOCATION OF THE SYSTEM STACK 65 ; ?QUEP EQU DEFINES THE LOCATION OF THE DISPATCH QUEUE 66 ; ?CLOK EQU DEFINES THE CLOCK CELL 67 ; ?QUE EQU HOLDS THE CURRENT QUEUE POINTER (2 CELLS) 68 ; ?STAK EQU HOLDS THE CURRENT TIME STACK POINTER (2 CELLS) 69 ; INITR MACRO CALLS ?INIT WITH THE ROUTINE ADDRESS AS PARAMETER 70 ; TERM MACRO CALLS ?DSPC (TERMINATES A ROUTINE) 71 ; INRET MACRO INTERRUPT RETURN WITH PSW RESTORE 72 ; PEREQ MACRO CALLS ?PERQ TO SCHEDULE A TASK FOR TIMED ENTRY 73 ; PARAMETERS: ADDRESS, TIME 74 ; PERDY MACRO CALLS ?PERQ TO SCHEDULE A TASK FOR DELAYED ENTRY 75 ; PARAMETERS: ADDRESS, DELAY 76 ; ?CLKI ROUTINE UPDATES THE CLOCK CELL AND CHECKS THE TOP OF THE 77 ; TIME STACK FOR TIMED ENTRIES 78 ; ?PERQ ROUTINE SCHEDULES A TASK TO BE ACTIVATED AT A LATER TIME, 79 ; DOESN'T ALLOW A TASK TO BE SCHEDULED TWICE FOR 80 ; THE SAME ACTIVATION TIME, MAINTAINS THE TIME STACK 81 ; IN INCREASING TIME ORDER. ADDRESS IN D,E; TIME IN A 82 ; ?INIT ROUTINE ADDS A ROUTINE TO THE DISPATCH QUEUE. ADDRESS IN 83 ; D,E. 84 ; ?DSPC ROUTINE TERMINATES A ROUTINE BY EXITING TO THE NEXT ROUTINE 85 ; ON THE DISPATCH QUEUE. 86 ; ?WAIT ROUTINE IDLES WHEN THE SYSTEM IS NOT BUSY, SHOULD ALWAYS BE 87 ; LAST ON THE DISPATCH QUEUE, IT RESCHEDULES ITSELF. 88 ; ?INTP ROUTINE INITIALIZES THE PROCESSOR BY CLEARING RAM, SETTING 89 ; UP POINTERS, AND SCHEDULING THE SYSTEM WAIT AND MAIN 90 ; USER ROUTINES. 91 ; 92 ; 93 ; PLEASE NOTE THAT THE EQUATES CAN BE CHANGED TO FIT A DIFFERENT MEMORY 94 ; CONFIGURATION AND THAT THE MAIN USER ROUTINE IS CURRENTLY LABELED ACQRE. 95 ; 96 ; 97 ; 98 ; 99 ; 100 ;THE FOLLOWING MACROS ARE REQUIRED BY THE EXECUTIVE 101 ; 102 INITR MACRO ADDR - 103 LXI D,ADDR - 104 CALL ?INIT 105 ENDM 106 TERM MACRO - 107 JMP ?DSPC 108 ENDM 109 ; ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 3 LOC OBJ LINE SOURCE STATEMENT 110 ;THESE MACROS ARE REQUIRED BY THE APPLICATIONS PROGRAM 111 ; 112 INRET MACRO - 113 POP PSW - 114 EI - 115 RET 116 ENDM 117 PEREQ MACRO ADDR,TIME - 118 LXI D,ADDR - 119 MVI A,TIME - 120 CALL ?PERQ 121 ENDM 122 PERDY MACRO ADDR,DELAY - 123 LXI D,ADDR - 124 LDA ?CLOK - 125 ADI DELAY - 126 CALL ?PERQ 127 ENDM 128 ; 129 ;THE FOLLOWING EQUATES ARE REQUIRED BY THE EXECUTIVE 130 ; 0800 131 BRAM EQU 04000Q 0002 132 NRAMS EQU 02 08C0 133 ?TSTK EQU BRAM+0300Q 0900 134 ?SYS EQU BRAM+0400Q 0880 135 ?QUEP EQU BRAM+0200Q 0800 136 ?CLOK EQU BRAM 0801 137 ?QUE EQU ?CLOK+1 0803 138 ?STAK EQU ?QUE+2 139 ; 140 ;THE FIRST 64D CELLS ARE THE INTERRUPT VECTORS 141 ; 0000 F3 142 DI ;PWER 0001 C3D000 143 JMP ?INTP ;UP 144 ; 145 ;THIS IS THE CLOCK INTERRUPT ROUTINE. 146 ;IT UPDATES THE CLOCK IN 116 CYCLES, TO ACTIVATE 147 ;A TASK REQUIRES 237 CYCLES + INIT TIME. 148 ; 0038 149 ORG 70Q ;RESTART 7 0038 F5 150 ?CLKI: PUSH PSW ;SAVE 0039 E5 151 PUSH H ;REGS 003A 210008 152 LXI H,?CLOK ;INCREMENT 003D 34 153 INR M ;CLOCK 003E 7E 154 MOV A,M ;CHECK 003F 2A0308 155 LHLD ?STAK ;TOP OF 0042 BE 156 CMP M ;STACK 0043 DA5900 157 JC ?CLEX ;NONE READY 0046 D5 158 PUSH D 159 ; 0047 23 160 ?CLP: INX H ;POP 0048 5E 161 MOV E,M ;ROUTINE 0049 23 162 INX H ;AND 004A 56 163 MOV D,M ;ADD 004B 23 164 INX H ;TO ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 4 LOC OBJ LINE SOURCE STATEMENT 004C E5 165 PUSH H ;DISPATCH 004D CDAB00 166 CALL ?INIT ;QUEUE 0050 E1 167 POP H ; 0051 BE 168 CMP M ;ANY MORE 0052 D24700 169 JNC ?CLP ;YES 0055 D1 170 POP D 0056 220308 171 SHLD ?STAK 172 ?CLEX: 0059 E1 173 POP H ;RESTORE 174 INRET ;REGS & EXIT 005A F1 175+ POP PSW 005B FB 176+ EI 005C C9 177+ RET 178 ; 179 ;THIS IS THE PERIODIC REQUEST ROUTINE. IT MANIPULATES THE 180 ;STACK AND THEREFORE MASKS OFF INTERRUPTS. PARAMETERS ARE 181 ;ROUTINE ADDRESS IN D,E AND TIME IN A. THE BEST CASE EXECUTION 182 ;IS 117 CYCLES, TO UNSTACK AND INSERT ONCE IS 329 CYCLES. 183 ;ALL REGS ARE DESTROYED. 184 ; 005D 0600 185 ?PERQ: MVI B,0 ;GET TIME 005F F3 186 DI ;STACK POINTER 0060 2A0308 187 LHLD ?STAK ;CHECK TOP 0063 BE 188 ?COMP: CMP M ;OF STACK 0064 DA9000 189 JC ?ASTK ;LOWER 0067 CA7900 190 JZ ?ADEQ ;EQUAL 006A 4F 191 MOV C,A ;HIGHER THAN 006B 7E 192 MOV A,M ;TOP OF 006C F5 193 PUSH PSW ;STACK 006D 23 194 INX H ;REMOVE IT 006E 7E 195 MOV A,M ;AND 006F F5 196 PUSH PSW ;SAVE IT 0070 23 197 INX H ; 0071 7E 198 MOV A,M ;ADJUST 0072 F5 199 PUSH PSW ;POINTER 0073 23 200 INX H ;AND 0074 79 201 MOV A,C ;TRY 0075 04 202 INR B ;AGAIN 0076 C36300 203 JMP ?COMP 0079 23 204 ?ADEQ: INX H ;TIME 007A 7B 205 MOV A,E ;EQUAL 007B BE 206 CMP M ;CHECK ADDRESS 007C C28600 207 JNZ ?RELD ;NOT EQUAL 007F 23 208 INX H ;CHECK REST 0080 7A 209 MOV A,D ;OF 0081 BE 210 CMP M ;ADDRESS 0082 CA8B00 211 JZ ?EQAD ;EQUAL 0085 2B 212 DCX H ;NOT EQUAL 0086 2B 213 ?RELD: DCX H ;RESTORE POINTER 0087 7E 214 MOV A,M ;TIME, AND 0088 C39000 215 JMP ?ASTK ;ADD TO STACK 008B 2B 216 ?EQAD: DCX H ;RESTORE 008C 2B 217 DCX H ;POINTER 008D C39600 218 JMP ?STKP ;POP STACK 0090 2B 219 ?ASTK: DCX H ;ADD REQUEST ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 5 LOC OBJ LINE SOURCE STATEMENT 0091 72 220 MOV M,D ;TO TOP 0092 2B 221 DCX H ;OF TIME 0093 73 222 MOV M,E ;STACK 0094 2B 223 DCX H ;ADJUST 0095 77 224 MOV M,A ;POINTER 0096 05 225 ?STKP:DCR B ;ANYTHING TO 0097 FAA600 226 JM ?PREX ;RESTORE 009A F1 227 POP PSW ;YES 009B 2B 228 DCX H ;RESTORE 009C 77 229 MOV M,A ;REQUEST 009D F1 230 POP PSW ;TO 009E 2B 231 DCX H ;TIME 009F 77 232 MOV M,A ;STACK 00A0 F1 233 POP PSW 00A1 2B 234 DCX H ;THEN 00A2 77 235 MOV M,A ;TRY 00A3 C39600 236 JMP ?STKP ;AGAIN 00A6 220308 237 ?PREX: SHLD ?STAK ;SAVE 00A9 FB 238 EI ;POINTER 00AA C9 239 RET ;AND EXIT 240 ; 241 ;INITIALIZER ROUTINE, ADDRESS IS PASSED IN D,E. 242 ;DESTROYS H,L. EXECUTION 74 CYCLES. 243 ; 00AB F3 244 ?INIT: DI ;ADD 00AC 2A0108 245 LHLD ?QUE ;PROGRAM 00AF 2B 246 DCX H ;TO 00B0 72 247 MOV M,D ;DISPATCH 00B1 2B 248 DCX H ;QUEUE 00B2 73 249 MOV M,E ; 00B3 220108 250 SHLD ?QUE 00B6 FB 251 EI 00B7 C9 252 RET 253 ; 254 ;DISPATCHER ROUTINE, ENTRANCE UPON TASK TERMINATION. 255 ;LIFO PRIORITY WITH EXIT TO NEXT TASK. (73 CYCLES). 256 ; 00B8 F3 257 ?DSPC: DI ;GET 00B9 2A0108 258 LHLD ?QUE ;NEXT 00BC 5E 259 MOV E,M ;TASK 00BD 23 260 INX H ;PROM 00BE 56 261 MOV D,M ;QUEUE 00BF 23 262 INX H ;ALTER 00C0 220108 263 SHLD ?QUE ;POINTER 00C3 EB 264 XCHG ;AND 00C4 FB 265 EI ;EXIT TO 00C5 E9 266 PCHL ;NEW TASK 267 ; 268 ;SYSTEM WAIT ROUTINE, ALWAYS LAST ON THE QUEUE. 269 ;IT WAITS UNTIL SOMETHING HAPPENS. 270 ; 271 ?WAIT: INITR ?WAIT ;RE-INIT 00C6 11C600 272+ LXI D,?WAIT 00C9 CDAB00 273+ CALL ?INIT 00CC 76 274 HLT ;WAIT ISIS-II 8080/8085 MACRO ASSEMBLER, V3.0 MODULE PAGE 6 LOC OBJ LINE SOURCE STATEMENT 275 TERM 00CD C3B800 276+ JMP ?DSPC 277 ; 278 ;PROCESSOR INITIALIZATION ROUTINE 279 ; 00D0 210008 280 ?INTP: LXI H,BRAM ;CLEAR 00D3 AF 281 XRA A ;RAM 00D4 01FF02 282 LXI B,(NRAMS SHL 8)+0FFH ;FROM BRAM 00D7 77 283 ?CLRL: MOV M,A ;FOR 00D8 23 284 INX H ;256*NRAMS 00D9 0B 285 DCX B ;BYTES 00DA B8 286 CMP B 00DB C2D700 287 JNZ ?CLRL 00DE 21C008 288 LXI H,?TSTK ;FIX 00E1 36FF 289 MVI M,0FFH ;TIME 00E3 220308 290 SHLD ?STAK ;STACK 00E6 218008 291 LXI H,?QUEP ;DISPATCH 00E9 220108 292 SHLD ?QUE ;QUEUE 00EC 310009 293 LXI SP,?SYS ;FINISH 294 INITR ?WAIT ;INIT 00EF 11C600 295+ LXI D,?WAIT 00F2 CDAB00 296+ CALL ?INIT 297 ; 298 ;BEGINNING OF APPLICATION ROUINES 299 ; 300 ACQRE: END PUBLIC SYMBOLS EXTERNAL SYMBOLS USER SYMBOLS ?ADEQ A 0079 ?ASTK A 0090 ?CLEX A 0059 ?CLKI A 0038 ?CLOK A 0800 ?CLP A 0047 ?CLRL A 00D7 ?COMP A 0063 ?DSPC A 00B8 ?EQAD A 008B ?INIT A 00AB ?INTP A 00D0 ?PERQ A 005D ?PREX A 00A6 ?QUE A 0801 ?QUEP A 0880 ?RELD A 0086 ?STAK A 0803 ?STKP A 0096 ?SYS A 0900 ?TSTK A 08C0 ?WAIT A 00C6 ACQRE A 00F5 BRAM A 0800 INITR + 0000 INRET + 0002 NRAMS A 0002 PERDY + 0004 PEREQ + 0003 TERM + 0001 ASSEMBLY COMPLETE, NO ERRORS