* * ORG $-1/16*16+16 * **INPCH JMP IOCOM ADDRESS OF CHARACTER GET ROUTINE **OUTCH JMP IOCOM+020H ADDRESS OF CHARACTER PUT ROUTINE **OPNFIL JMP IOCOM+040H ADDRESS OF FILE OPENER **CLSFIL JMP IOCOM+050H ADDRESS OF FILE CLOSE ROUTINE DISP DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 PROCTBL DS 2 BASE DS 2 MP DS 2 NP DS 2 HBASS DS 2 SAVE1 DW 0 *PCDEAREA DW PCODORG MEMEND DB HEAPEND FLG8 DB 0 FLW DB 0 PFLG DB 0 TO FLAG PACKED/UNPACKED STRINGS * * * P.T. INTERFACE FOR PASCAL I/O * * ORG $-1/16*16+16 IOCOM EQU $ ERRXIT EQU IOCOM+040H ERROR EXIT ROUTINE STNDXIT EQU IOCOM+040H STANDARD EXIT ROUTINE ** SYS EQU 0BCBCH RB EQU 0BCB9H WB EQU 0BCB6H * INPCH EQU IOCOM OUTCH EQU IOCOM+010H OPNFIL EQU IOCOM+020H CLSFIL EQU IOCOM+030H * GCH PUSH B PUSH D PUSH H DCX H CALL 0C800H POP H POP D POP B RET , * ORG IOCOM+010H PUT THE NEXT BYTE PCH PUSH PSW PUSH B PUSH D PUSH H DCX H CALL 0C803H POP H POP D POP B POP PSW RET , * ORG IOCOM+020H OPEN A FILE OPN PUSH PSW PUSH B PUSH D PUSH H DCX H CALL 0C809H POP H POP D POP B POP PSW RET , * ORG IOCOM+030H CLOSE ALL FILES CLS PUSH H SET UP FILE NUMBER PUSH D PUSH B MOV A,M INR A CNZ 0C806H CL1 POP B POP D POP H RET , * ORG IOCOM+040H PROGRAM EXIT ADDRESS FIN CALL SYS DB 13 'RETURN' OPERATION * ORG IOCOM+050H FILEDEFS DB -1,0 FILE 'INPUT' DB -1,0 FILE 'OUTPUT' DB -1,0 FILE 'PRD' DB -1,0 FILE 'PRR' DB 0,0 DB 0,0 DB 0,0 DB 0,0 * ORG IOCOM+060H * * THIS ROUTINE IS CALLED ONLY ONCE AT THE BEGINNING * TO SET UP THE P.M. ENVIRONMENT AND IT MIGHT BE * DESTROYED BY THE 'OVER GROWTH' OF THE 8080 STACK * SETUP LHLD PSTKORG LDA MEMEND INITIALIZE STORE SIZE FIELD PSTKSET LXI B,PCODORG DAD B COMPUTE ABSOLUTE ADR OF P_STK MOV D,H MOV E,L CALL INCHL8 HL,FLGAREA ALLOW SPACE FOR FILE FLAGS SHLD MP SHLD DISP INITIALIZE MARK/DISPLAY POINTERS MVI L,0 ASSUMES THAT HEAP ENDS AT PAGE BOUNDARY MOV H,A SHLD HBASS END OF STACK IS THE HEAP SHLD NP LHLD PCODLEN DAD B COMPUTE ABS. ADDRESS OF PROC_TBL SHLD PROCTBL * * RELOCATE THE USER PROC TABLE STARTING AT 'HL', ENDING * AT 'DE' * LDA PSTKEND TEST PROC. RELOCATION FLAG ANA A JNZ RLOCDONE IF ALREADY RELOCATED, SKIP THIS MVI A,TRUE STA PSTKEND SET RELOCATION FLAG TO 'DONE' NXTPROC MOV A,M ADD C MOV M,A INX H MOV A,M ADC B MOV M,A INX H MOV A,L CMP E END OF PROC TABLE ? JNZ NXTPROC * RLOCDONE LHLD EPADR DAD B SHLD BASE SET THE ENTRY POINT ADR FOR P_CODE PUSH H SAVE THE BASE ADR OF MAIN BLOCK INX H INX H GET THE SIZE OF MAIN'S DATA AREA MOV A,M INX H MOV L,M MOV H,A PUSH H MVI C,FLGAREA+BUFAREA LXI H,FILEDEFS COPY FILE DEFINITIONS * SETFLGS MOV A,M STAX D INX H INX D DCR C JNZ SETFLGS * POP H DAD D XCHG , DE <-- CURRENT P_STK PTR POP B BC <-- CURRENT P_PC LXI H,ENTAREA-1 DAD B MOV B,H POINT TO FIRST INSTR. IN THE CODE MOV C,L RET , * * * * OPCODE TABLE * * ADDR. OF ALL 256 P_CODE INTERPRETIVE ROUTINES. * FIRST THE 256 BYTES OF LOW ADDR. * THEN THE 256 BYTES OF HIGH ADDR. * THIS TABLE HAS TO BE ALIGNED ON A PAGE BOUNDARY. * ZFLT EQU ERROR UNDEFINED OPCODES ZFLO EQU ERROR ZCSP EQU ERROR ZCSP1 EQU ERROR ZCMP8 EQU ERROR ZIXA0 EQU ERROR ZORD EQU ERROR ZCHR EQU ERROR ZUND1 EQU ERROR ZUND2 EQU ERROR ZUND3 EQU ERROR ZUND4 EQU ERROR ZUND5 EQU ERROR * ** ALLOW AT LEAST 2 PAGES (512 BYTES) FOR THE INTERPRETER STACK * DS 300 ISTK EQU $-1/256*256+256 ORG ISTK OPCTBL DB >ZLDC1 == 0 DB >ZLDC1 == 1 DB >ZLDC1 == 2 DB >ZLDC1 == 3 DB >ZLDC1 == 4 DB >ZLDC1 == 5 DB >ZLDC1 == 6 DB >ZLDC1 == 7 DB >ZLDC1 == 8 DB >ZLDC1 == 9 DB >ZLDC1 == 10 DB >ZLDC1 == 11 DB >ZLDC1 == 12 DB >ZLDC1 == 13 DB >ZLDC1 == 14 DB >ZLDC1 == 15 DB >ZLDC1 == 16 DB >ZLDC1 == 17 DB >ZLDC1 == 18 DB >ZLDC1 == 19 DB >ZLDC1 == 20 DB >ZLDC1 == 21 DB >ZLDC1 == 22 DB >ZLDC1 == 23 DB >ZLDC1 == 24 DB >ZLDC1 == 25 DB >ZLDC1 == 26 DB >ZLDC1 == 27 DB >ZLDC1 == 28 DB >ZLDC1 == 29 DB >ZLDC1 == 30 DB >ZLDC1 == 31 DB >ZLDC2 == 32 DB >ZLDC == 33 DB >ZLDC8 == 34 DB >ZLOD2 == 35 DB >ZLOD == 36 DB >ZLOD8 == 37 DB >ZUND3 == 38 DB >ZUND1 == 39 DB >ZCUP == 40 DB >ZCSP == 41 DB >ZIND == 42 DB >ZIND8 == 43 DB >ZLDALG == 44 DB >ZUND5 == 45 DB >ZIXA == 46 DB >ZSPWP == 47 DB >ZSTRLG == 48 DB >ZSTR == 49 DB >ZSTR8 == 50 DB >ZMVP == 51 DB >ZADIC == 52 DB >ZLDA == 53 DB >ZLCA == 54 DB >ZXJP == 55 DB >ZCMPM == 56 DB >ZEQU == 57 DB >ZNEQ == 58 DB >ZLEQ == 59 DB >ZLES == 60 DB >ZGEQ == 61 DB >ZGRT == 62 DB >ZCMP8 == 63 DB >ZMST8 == 64 DB >ZMOV == 65 DB >ZMST == 66 DB >ZRET == 67 DB >ZSTO == 68 DB >ZSTO8 == 69 DB >ZRET8 == 70 DB >ZORD == 71 DB >ZCHR == 72 DB >ZADI == 73 DB >ZSBI == 74 DB >ZDVI == 75 DB >ZMOD == 76 DB >ZMPI == 77 DB >ZNGI == 78 DB >ZRST == 79 DB >ZDEC1 == 80 DB >ZODD == 81 DB >ZFLT == 82 DB >ZFLO == 83 DB >ZABI == 84 DB >ZSGS == 85 DB >ZINN == 86 DB >ZUNI == 87 DB >ZINT == 88 DB >ZDIF == 89 DB >ZNEW == 90 DB >ZAND == 91 DB >ZIOR == 92 DB >ZNOT == 93 DB >ZMSTF == 94 DB >ZRETF == 95 DB >ZCUP1 == 96 DB >ZCUP1 == 97 DB >ZCUP1 == 98 DB >ZCUP1 == 99 DB >ZCUP1 == 100 DB >ZCUP1 == 101 DB >ZCUP1 == 102 DB >ZCUP1 == 103 DB >ZCUP1 == 104 DB >ZCUP1 == 105 DB >ZCUP1 == 106 DB >ZCUP1 == 107 DB >ZCUP1 == 108 DB >ZCUP1 == 109 DB >ZCUP1 == 110 DB >ZCUP1 == 111 DB >ZSPGET == 112 DB >ZSPPUT == 113 DB >ZSPRLN == 114 DB >ZSPWLN == 115 DB >ZSPRDC == 116 DB >ZSPWRC == 117 DB >ZSPRS == 118 DB >ZSPWS == 119 DB >ZSPRI == 120 DB >ZSPWI == 121 DB >ZSPEOF == 122 DB >ZSPELN == 123 DB >ZSPEIO == 124 DB >ZSPXIT == 125 DB >ZSPRES == 126 DB >ZSPRW == 127 DB >ZFJP == 128 DB >ZFJP == 129 DB >ZFJP == 130 DB >ZFJP == 131 DB >ZFJP == 132 DB >ZFJP == 133 DB >ZFJP == 134 DB >ZFJP == 135 DB >ZFJP == 136 DB >ZFJP == 137 DB >ZFJP == 138 DB >ZFJP == 139 DB >ZFJP == 140 DB >ZFJP == 141 DB >ZFJP == 142 DB >ZFJP == 143 DB >ZUJP == 144 DB >ZUJP == 145 DB >ZUJP == 146 DB >ZUJP == 147 DB >ZUJP == 148 DB >ZUJP == 149 DB >ZUJP == 150 DB >ZUJP == 151 DB >ZUJP == 152 DB >ZUJP == 153 DB >ZUJP == 154 DB >ZUJP == 155 DB >ZUJP == 156 DB >ZUJP == 157 DB >ZUJP == 158 DB >ZUJP == 159 DB >ZIND1 == 160 DB >ZIND1 == 161 DB >ZIND1 == 162 DB >ZIND1 == 163 DB >ZIND1 == 164 DB >ZIND1 == 165 DB >ZIND1 == 166 DB >ZIND1 == 167 DB >ZIND1 == 168 DB >ZIND1 == 169 DB >ZIND1 == 170 DB >ZIND1 == 171 DB >ZIND1 == 172 DB >ZIND1 == 173 DB >ZIND1 == 174 DB >ZIND1 == 175 DB >ZIXA0 == 176 DB >ZIXA0 == 177 DB >ZIXA2 == 178 DB >ZIXA0 == 179 DB >ZIXA4 == 180 DB >ZIXA0 == 181 DB >ZIXA1 == 182 DB >ZIXA0 == 183 DB >ZIXA8 == 184 DB >ZIXA0 == 185 DB >ZIXA1 == 186 DB >ZIXA0 == 187 DB >ZIXA1 == 188 DB >ZIXA0 == 189 DB >ZIXA1 == 190 DB >ZIXA0 == 191 DB >ZLODG == 192 DB >ZLODL == 193 DB >ZLODG == 194 DB >ZLODL == 195 DB >ZLODG == 196 DB >ZLODL == 197 DB >ZLODG == 198 DB >ZLODL == 199 DB >ZLODG == 200 DB >ZLODL == 201 DB >ZLODG == 202 DB >ZLODL == 203 DB >ZLODG == 204 DB >ZLODL == 205 DB >ZLODG == 206 DB >ZLODL == 207 DB >ZLODG == 208 DB >ZLODL == 209 DB >ZLODG == 210 DB >ZLODL == 211 DB >ZLODG == 212 DB >ZLODL == 213 DB >ZLODG == 214 DB >ZLODL == 215 DB >ZLODG == 216 DB >ZLODL == 217 DB >ZLODG == 218 DB >ZLODL == 219 DB >ZLODG == 220 DB >ZLODL == 221 DB >ZLODG == 222 DB >ZLODL == 223 DB >ZLODG == 224 DB >ZLODL == 225 DB >ZLODG == 226 DB >ZLODL == 227 DB >ZLODG == 228 DB >ZLODL == 229 DB >ZLODG == 230 DB >ZLODL == 231 DB >ZLODG == 232 DB >ZLODL == 233 DB >ZLODG == 234 DB >ZLODL == 235 DB >ZLODG == 236 DB >ZLODL == 237 DB >ZLODG == 238 DB >ZLODL == 239 DB >ZLODG == 240 DB >ZLODL == 241 DB >ZLODG == 242 DB >ZLODL == 243 DB >ZLODG == 244 DB >ZLODL == 245 DB >ZLODG == 246 DB >ZLODL == 247 DB >ZLODG == 248 DB >ZLODL == 249 DB >ZLODG == 250 DB >ZLODL == 251 DB >ZLODG == 252 DB >ZLODL == 253 DB >ZLODG == 254 DB >ZLODL == 255 DB