home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PARASOL / PARASOLS.ARK / LBASE.ASM < prev    next >
Assembly Source File  |  1986-10-05  |  28KB  |  1,144 lines

  1. ;-----------------------------------------------------
  2. ;
  3. ;  copyright (C), 1981, 1982    Shaylor O. Walters, Jr
  4. ;        , 1983        Shay O. Walters
  5. ;                Parametric Software (tm)
  6. ;                Para-Soft (tm)
  7. ;
  8. ;   This document and the resulting object code are
  9. ;   protected under the copyright laws of the
  10. ;   United States and other countries,  and may not
  11. ;   be reproduced, copied, transmitted, or stored
  12. ;   in any form without the express written consent
  13. ;   of Para-Soft and Shay Walters.
  14. ;
  15. ;------------------------------------------------------
  16.     org    0100h
  17.     jmp    start
  18. ;
  19. ;
  20. ;
  21. ;
  22. ;
  23. ;
  24. ;
  25. ;
  26. ;-----------------------********--------------
  27. ;    patch area        patch area
  28. ;
  29. ;-----------------------********--------------
  30. ;
  31. ;
  32.     ds    50
  33. ;
  34. ;
  35. ;
  36. ;
  37. ;
  38. ;
  39. copyright.notice:
  40.     db    'Parasol Version 1.6 -- '
  41.     db    'Copyright (C) 1982-1985 Para-Soft'
  42.     db    13,10,'$'
  43. ;
  44. ;---------------version 03/31/85--------------------
  45. ;
  46. ;
  47. ;
  48. ;
  49. ;-------------------------------
  50. ;     default system addresses
  51. ;-------------------------------
  52. boot        equ    00h
  53. io.byte        equ    03h
  54. dflt.drive    equ    04h
  55. entry        equ    05h
  56. dflt.fcb    equ    5ch
  57. dflt.2nd.fcb    equ    6ch
  58. dflt.dma    equ    80h
  59. ;-------------------------------
  60. ;     fcb field offsets
  61. ;-------------------------------
  62. fcb.drive    equ    0
  63. fcb.name    equ    1
  64. fcb.ext        equ    9
  65. fcb.ext.num    equ    12
  66. fcb.s1        equ    13
  67. fcb.s2        equ    14
  68. fcb.rec.cnt    equ    15
  69. fcb.dsk.map    equ    16
  70. fcb.cur.rec    equ    32
  71. fcb.rnd.rec    equ    33
  72. ;-------------------------------
  73. ;     extension flags
  74. ;-------------------------------
  75. fcb.flags    equ    36
  76. fcb.status    equ    37
  77. fcb.buf.addr    equ    38
  78. fcb.buf.ix    equ    40
  79. fcb.buf.size    equ    42
  80. fcb.rec.addr    equ    44
  81. fcb.name.addr    equ    46
  82. fcb.file.id    equ    48    ;MPM file-id
  83. fcb.limit    equ    50
  84. ;-------------------------------
  85. ;     record-mode flags
  86. ;-------------------------------
  87. ;fcb.flags    equ    36
  88. ;fcb.status    equ    37
  89. fcb.rec.buf.sctr    equ    38    ;sctr # in buff
  90. fcb.rec.key        equ    40    ;cp/m sector key
  91. fcb.rec.size        equ    42    ;#bytes in rec
  92. ;fcb.rec.addr        equ    44
  93. ;fcb.name.addr        equ    46
  94. ;fcb.file.id    equ    48
  95. fcb.rec.blk.fac        equ    50    ;# recs / sctr
  96.                     ; 0 = unblocked
  97. fcb.rec.buffer        equ    52    ;start of sctr buff
  98. ;
  99. ;
  100. ;----------------
  101. ;---word types---
  102. ;----------------
  103. ;
  104. wtp.unreq    equ    0
  105. wtp.ident    equ    1
  106. wtp.string    equ    2
  107. wtp.cnst    equ    4
  108. wtp.oprtr    equ    8
  109. wtp.delim    equ    10h
  110. wtp.ptr        equ    20h
  111. ;
  112. ;------------------------------
  113. ;---symbol table entry types---
  114. ;------------------------------
  115. ;
  116. stet.end.tbl        equ    0
  117. ;
  118. stet.BIT        equ    1
  119. stet.BYTE        equ    2
  120. stet.WORD        equ    3
  121. stet.STRING        equ    4
  122. stet.FIELD        equ    5
  123. stet.BCD        equ    6
  124. stet.RECORD        equ    7
  125. stet.byte.ptr        equ    8
  126. stet.word.ptr        equ    9
  127. stet.string.ptr        equ    10
  128. stet.bcd.ptr        equ    11
  129. stet.spcl.cnst        equ    12
  130. stet.spcl.lit.str    equ    13
  131. stet.spcl.word.ptr    equ    14
  132. stet.spcl.byte.ptr    equ    15
  133. stet.spcl.string.ptr    equ    16
  134. stet.spcl.bcd.ptr    equ    17
  135. stet.label        equ    18
  136. stet.SET.cnst        equ    19
  137. stet.SET.word        equ    20
  138. ;
  139. stet.FILE        equ    21
  140. stet.level.marker    equ    22
  141. ;
  142. stet.blk.scope.limit    equ    30
  143. ;
  144. ;
  145. stet.fwd.ref        equ    40
  146. stet.deleted        equ    80h
  147. ;
  148. ;
  149. ;
  150. ;---------------------------------
  151. ;---reserved word table indexes---
  152. ;---------------------------------
  153. ;
  154. rwix.not.rsvd        equ    0
  155. rwix.end.of.source    equ    rwix.not.rsvd + 1
  156. rwix.pound        equ    rwix.end.of.source + 1
  157. rwix.dollar        equ    rwix.pound + 1
  158. rwix.amper        equ    rwix.dollar + 1
  159. rwix.lpar        equ    rwix.amper + 1
  160. rwix.rpar        equ    rwix.lpar + 1
  161. rwix.star        equ    rwix.rpar + 1
  162. rwix.plus        equ    rwix.star + 1
  163. rwix.comma        equ    rwix.plus + 1
  164. rwix.minus        equ    rwix.comma + 1
  165. rwix.slash        equ    rwix.minus + 1
  166. rwix.colon        equ    rwix.slash + 1
  167. rwix.semicolon        equ    rwix.colon + 1
  168. rwix.leq        equ    rwix.semicolon + 1
  169. rwix.lss        equ    rwix.leq + 1
  170. rwix.neq        equ    rwix.lss + 1
  171. rwix.eql        equ    rwix.neq + 1
  172. rwix.geq        equ    rwix.eql + 1
  173. rwix.gtr        equ    rwix.geq + 1
  174. rwix.at            equ    rwix.gtr + 1
  175. rwix.lbrckt        equ    rwix.at + 1
  176. rwix.rbrckt        equ    rwix.lbrckt + 1
  177. rwix.ACCEPT        equ    rwix.rbrckt + 1
  178. rwix.ADDRESS        equ    rwix.ACCEPT + 1
  179. rwix.ADD        equ    rwix.ADDRESS + 1
  180. rwix.AND        equ    rwix.ADD + 1
  181. rwix.ANY        equ    rwix.AND + 1
  182. rwix.APPEND        equ    rwix.ANY + 1
  183. rwix.BCDPTR        equ    rwix.APPEND + 1
  184. rwix.BCD        equ    rwix.BCDPTR + 1
  185. rwix.BEGIN        equ    rwix.BCD + 1
  186. rwix.BIT        equ    rwix.BEGIN + 1
  187. rwix.BLOCKED        equ    rwix.BIT + 1
  188. rwix.BP            equ    rwix.BLOCKED + 1
  189. rwix.BYTE        equ    rwix.BP + 1
  190. rwix.BY            equ    rwix.BYTE + 1
  191. rwix.BUFFER        equ    rwix.BY + 1
  192. rwix.CALL        equ    rwix.BUFFER + 1
  193. rwix.CASE        equ    rwix.CALL + 1
  194. rwix.CLOSE        equ    rwix.CASE + 1
  195. rwix.COMMENT        equ    rwix.CLOSE + 1
  196. rwix.CONVERT        equ    rwix.COMMENT + 1
  197. rwix.CON        equ    rwix.CONVERT + 1
  198. rwix.COPY        equ    rwix.CON + 1
  199. rwix.CSTACK        equ    rwix.COPY + 1
  200. rwix.DECIMAL        equ    rwix.CSTACK + 1
  201. rwix.DEC        equ    rwix.DECIMAL + 1
  202. rwix.DISABLE        equ    rwix.DEC + 1
  203. rwix.DISK        equ    rwix.DISABLE + 1
  204. rwix.DISPLAY        equ    rwix.DISK + 1
  205. rwix.DIVIDE        equ    rwix.DISPLAY + 1
  206. rwix.DO            equ    rwix.DIVIDE + 1
  207. rwix.EDIT        equ    rwix.DO + 1
  208. rwix.ELSE        equ    rwix.EDIT + 1
  209. rwix.ENABLE        equ    rwix.ELSE + 1
  210. rwix.ENDREC        equ    rwix.ENABLE + 1
  211. rwix.ENDREDEF        equ    rwix.ENDREC + 1
  212. rwix.ENDSWITCH        equ    rwix.ENDREDEF + 1
  213. rwix.END        equ    rwix.ENDSWITCH + 1
  214. rwix.EOF        equ    rwix.END + 1
  215. rwix.ERROR        equ    rwix.EOF + 1
  216. rwix.EXCHANGE        equ    rwix.ERROR + 1
  217. rwix.EXECUTE        equ    rwix.EXCHANGE + 1
  218. rwix.EXITBEGIN        equ    rwix.EXECUTE + 1
  219. rwix.EXITDO        equ    rwix.EXITBEGIN + 1
  220. rwix.EXITSWITCH        equ    rwix.EXITDO + 1
  221. rwix.EXIT        equ    rwix.EXITSWITCH + 1
  222. rwix.EXTERNAL        equ    rwix.EXIT + 1
  223. rwix.FALSE        equ    rwix.EXTERNAL + 1
  224. rwix.FIELD        equ    rwix.FALSE + 1
  225. rwix.FILE1        equ    rwix.FIELD + 1
  226. rwix.FILE2        equ    rwix.FILE1 + 1
  227. rwix.FILE        equ    rwix.FILE2 + 1
  228. rwix.FILL        equ    rwix.FILE + 1
  229. rwix.FIND        equ    rwix.FILL + 1
  230. rwix.FI            equ    rwix.FIND + 1
  231. rwix.FOR        equ    rwix.FI + 1
  232. rwix.FRESH        equ    rwix.FOR + 1
  233. rwix.FROM        equ    rwix.FRESH + 1
  234. rwix.FULL        equ    rwix.FROM + 1
  235. rwix.GIVING        equ    rwix.FULL + 1
  236. rwix.GOTO        equ    rwix.GIVING + 1
  237. rwix.GO            equ    rwix.GOTO + 1
  238. rwix.HEXADECIMAL    equ    rwix.GO + 1
  239. rwix.HEX        equ    rwix.HEXADECIMAL + 1
  240. rwix.HIMEM        equ    rwix.HEX + 1
  241. rwix.IF            equ    rwix.HIMEM + 1
  242. rwix.INDEX        equ    rwix.IF + 1
  243. rwix.INPUT        equ    rwix.INDEX + 1
  244. rwix.INTERRUPTS        equ    rwix.INPUT + 1
  245. rwix.IO            equ    rwix.INTERRUPTS + 1
  246. rwix.JUSTIFY        equ    rwix.IO + 1
  247. rwix.KEY        equ    rwix.JUSTIFY + 1
  248. rwix.LABEL        equ    rwix.KEY + 1
  249. rwix.LEFT        equ    rwix.LABEL + 1
  250. rwix.LENGTH        equ    rwix.LEFT + 1
  251. rwix.LEVEL        equ    rwix.LENGTH + 1
  252. rwix.LIMIT        equ    rwix.LEVEL + 1
  253. rwix.LOCK        equ    rwix.LIMIT + 1
  254. rwix.LOWER        equ    rwix.LOCK + 1
  255. rwix.LST        equ    rwix.LOWER + 1
  256. rwix.MAP        equ    rwix.LST + 1
  257. rwix.MATCH        equ    rwix.MAP + 1
  258. rwix.MAX        equ    rwix.MATCH + 1
  259. rwix.MCALL        equ    rwix.MAX + 1
  260. rwix.MIN        equ    rwix.MCALL + 1
  261. rwix.MOD        equ    rwix.MIN + 1
  262. rwix.MOVE        equ    rwix.MOD + 1
  263. rwix.MPM        equ    rwix.MOVE + 1
  264. rwix.MULTIPLY        equ    rwix.MPM + 1
  265. rwix.NEXT        equ    rwix.MULTIPLY + 1
  266. rwix.NONE        equ    rwix.NEXT + 1
  267. rwix.NOT        equ    rwix.NONE + 1
  268. rwix.NOWARN        equ    rwix.NOT + 1
  269. rwix.NO            equ    rwix.NOWARN + 1
  270. rwix.NSTAR        equ    rwix.NO + 1
  271. rwix.NULL        equ    rwix.NSTAR + 1
  272. rwix.NUMBER        equ    rwix.NULL + 1
  273. rwix.OCTAL        equ    rwix.NUMBER + 1
  274. rwix.OCT        equ    rwix.OCTAL + 1
  275. rwix.OD            equ    rwix.OCT + 1
  276. rwix.OFF        equ    rwix.OD + 1
  277. rwix.OF            equ    rwix.OFF + 1
  278. rwix.OI            equ    rwix.OF + 1
  279. rwix.ON            equ    rwix.OI + 1
  280. rwix.OPEN        equ    rwix.ON + 1
  281. rwix.OR            equ    rwix.OPEN + 1
  282. rwix.OUTPUT        equ    rwix.OR + 1
  283. rwix.PAGE        equ    rwix.OUTPUT + 1
  284. rwix.PARTIAL        equ    rwix.PAGE + 1
  285. rwix.POINTER        equ    rwix.PARTIAL + 1
  286. rwix.POP        equ    rwix.POINTER + 1
  287. rwix.PRINT        equ    rwix.POP + 1
  288. rwix.PRN        equ    rwix.PRINT + 1
  289. rwix.PROCEDURE        equ    rwix.PRN + 1
  290. rwix.PUN        equ    rwix.PROCEDURE + 1
  291. rwix.PUSH        equ    rwix.PUN + 1
  292. rwix.RANDOM        equ    rwix.PUSH + 1
  293. rwix.RDR        equ    rwix.RANDOM + 1
  294. rwix.READ        equ    rwix.RDR + 1
  295. rwix.REBOOT        equ    rwix.READ + 1
  296. rwix.RECORD        equ    rwix.REBOOT + 1
  297. rwix.REDEFINE        equ    rwix.RECORD + 1
  298. rwix.REMAINDER        equ    rwix.REDEFINE + 1
  299. rwix.REMOVE        equ    rwix.REMAINDER + 1
  300. rwix.RENAME        equ    rwix.REMOVE + 1
  301. rwix.REVERSE        equ    rwix.RENAME + 1
  302. rwix.RIGHT        equ    rwix.REVERSE + 1
  303. rwix.SAVE        equ    rwix.RIGHT + 1
  304. rwix.SCAN        equ    rwix.SAVE + 1
  305. rwix.SEGMENTED        equ    rwix.SCAN + 1
  306. rwix.SET        equ    rwix.SEGMENTED + 1
  307. rwix.SHARED        equ    rwix.SET + 1
  308. rwix.SIZE        equ    rwix.SHARED + 1
  309. rwix.SP            equ    rwix.SIZE + 1
  310. rwix.STACK        equ    rwix.SP + 1
  311. rwix.STANDALONE        equ    rwix.STACK + 1
  312. rwix.STANDARD        equ    rwix.STANDALONE + 1
  313. rwix.STATUS        equ    rwix.STANDARD + 1
  314. rwix.STRING        equ    rwix.STATUS + 1
  315. rwix.SUBTRACT        equ    rwix.STRING + 1
  316. rwix.SWITCH        equ    rwix.SUBTRACT + 1
  317. rwix.TABLE        equ    rwix.SWITCH + 1
  318. rwix.TAB        equ    rwix.TABLE + 1
  319. rwix.TEXT        equ    rwix.TAB + 1
  320. rwix.THEN        equ    rwix.TEXT + 1
  321. rwix.TO            equ    rwix.THEN + 1
  322. rwix.TRACEBACK        equ    rwix.TO + 1
  323. rwix.TRAILING        equ    rwix.TRACEBACK + 1
  324. rwix.TRUE        equ    rwix.TRAILING + 1
  325. rwix.TTY        equ    rwix.TRUE + 1
  326. rwix.UNLOCK        equ    rwix.TTY + 1
  327. rwix.UNSTRING        equ    rwix.UNLOCK + 1
  328. rwix.UNTIL        equ    rwix.UNSTRING + 1
  329. rwix.UPPER        equ    rwix.UNTIL + 1
  330. rwix.USING        equ    rwix.UPPER + 1
  331. rwix.VALUE        equ    rwix.USING + 1
  332. rwix.WHILE        equ    rwix.VALUE + 1
  333. rwix.WITH        equ    rwix.WHILE + 1
  334. rwix.WORD        equ    rwix.WITH + 1
  335. rwix.WP            equ    rwix.WORD + 1
  336. rwix.WRITE        equ    rwix.WP + 1
  337. rwix.XOR        equ    rwix.WRITE + 1
  338. rwix.Z80        equ    rwix.XOR + 1
  339. rwix.table.limit    equ    rwix.Z80 + 1
  340. ;
  341. ;
  342. ;
  343. reserved.word.table:
  344.  db 1ah,0,        wtp.delim
  345.  db '#',0,        wtp.delim
  346.  db '$',0,        wtp.delim
  347.  db '&',0,        wtp.delim
  348.  db '(',0,        wtp.delim
  349.  db ')',0,        wtp.delim
  350.  db '*',0,        wtp.oprtr
  351.  db '+',0,        wtp.oprtr
  352.  db ',',0,        wtp.delim
  353.  db '-',0,        wtp.oprtr
  354.  db '/',0,        wtp.oprtr
  355.  db ':',0,        wtp.delim
  356.  db ';',0,        wtp.delim
  357.  db '<=',0,        wtp.oprtr
  358.  db '<',0,        wtp.oprtr
  359.  db '<>',0,        wtp.oprtr
  360.  db '=',0,        wtp.oprtr
  361.  db '>=',0,        wtp.oprtr
  362.  db '>',0,        wtp.oprtr
  363.  db '@',0,        wtp.delim
  364.  db '[',0,        wtp.delim
  365.  db ']',0,        wtp.delim
  366.  db 'accept',0,        wtp.ident
  367.  db 'address',0,    wtp.ident
  368.  db 'add',0,        wtp.ident
  369.  db 'and',0,        wtp.oprtr + wtp.ident
  370.  db 'any',0,        wtp.ident
  371.  db 'append',0,        wtp.ident
  372.  db 'bcdptr',0,        wtp.ident
  373.  db 'bcd',0,        wtp.ident
  374.  db 'begin',0,        wtp.ident
  375.  db 'bit',0,        wtp.ident
  376.  db 'blocked',0,    wtp.ident
  377.  db 'bp',0,        wtp.ident
  378.  db 'byte',0,        wtp.ident
  379.  db 'by',0,        wtp.ident
  380.  db 'buffer',0,        wtp.ident
  381.  db 'call',0,        wtp.ident
  382.  db 'case',0,        wtp.ident
  383.  db 'close',0,        wtp.ident
  384.  db 'comment',0,    wtp.ident
  385.  db 'convert',0,    wtp.ident
  386.  db 'con',0,        wtp.ident
  387.  db 'copy',0,        wtp.ident
  388.  db 'cstack',0,        wtp.ident
  389.  db 'decimal',0,    wtp.ident
  390.  db 'dec',0,        wtp.ident
  391.  db 'disable',0,    wtp.ident
  392.  db 'disk',0,        wtp.ident
  393.  db 'display',0,    wtp.ident
  394.  db 'divide',0,        wtp.ident
  395.  db 'do',0,        wtp.ident
  396.  db 'edit',0,        wtp.ident
  397.  db 'else',0,        wtp.ident
  398.  db 'enable',0,        wtp.ident
  399.  db 'endrec',0,        wtp.ident
  400.  db 'endredef',0,    wtp.ident
  401.  db 'endswitch',0,    wtp.ident
  402.  db 'end',0,        wtp.ident
  403.  db 'eof',0,        wtp.ident
  404.  db 'error',0,        wtp.ident
  405.  db 'exchange',0,    wtp.ident
  406.  db 'execute',0,    wtp.ident
  407.  db 'exitbegin',0,    wtp.ident
  408.  db 'exitdo',0,        wtp.ident
  409.  db 'exitswitch',0,    wtp.ident
  410.  db 'exit',0,        wtp.ident
  411.  db 'external',0,    wtp.ident
  412.  db 'false',0,        wtp.ident
  413.  db 'field',0,        wtp.ident
  414.  db 'file1',0,        wtp.ident
  415.  db 'file2',0,        wtp.ident
  416.  db 'file',0,        wtp.ident
  417.  db 'fill',0,        wtp.ident
  418.  db 'find',0,        wtp.ident
  419.  db 'fi',0,        wtp.ident
  420.  db 'for',0,        wtp.ident
  421.  db 'fresh',0,        wtp.ident
  422.  db 'from',0,        wtp.ident
  423.  db 'full',0,        wtp.ident
  424.  db 'giving',0,        wtp.ident
  425.  db 'goto',0,        wtp.ident
  426.  db 'go',0,        wtp.ident
  427.  db 'hexadecimal',0,    wtp.ident
  428.  db 'hex',0,        wtp.ident
  429.  db 'himem',0,        wtp.ident
  430.  db 'if',0,        wtp.ident
  431.  db 'index',0,        wtp.ident
  432.  db 'input',0,        wtp.ident
  433.  db 'interrupts',0,    wtp.ident
  434.  db 'io',0,        wtp.ident
  435.  db 'justify',0,    wtp.ident
  436.  db 'key',0,        wtp.ident
  437.  db 'label',0,        wtp.ident
  438.  db 'left',0,        wtp.ident
  439.  db 'length',0,        wtp.ident
  440.  db 'level',0,        wtp.ident
  441.  db 'limit',0,        wtp.ident
  442.  db 'lock',0,        wtp.ident
  443.  db 'lower',0,        wtp.ident
  444.  db 'lst',0,        wtp.ident
  445.  db 'map',0,        wtp.ident
  446.  db 'match',0,        wtp.ident
  447.  db 'max',0,        wtp.ident + wtp.oprtr
  448.  db 'mcall',0,        wtp.ident
  449.  db 'min',0,        wtp.ident + wtp.oprtr
  450.  db 'mod',0,        wtp.ident + wtp.oprtr
  451.  db 'move',0,        wtp.ident
  452.  db 'mpm',0,        wtp.ident
  453.  db 'multiply',0,    wtp.ident
  454.  db 'next',0,        wtp.ident
  455.  db 'none',0,        wtp.ident
  456.  db 'not',0,        wtp.ident + wtp.oprtr
  457.  db 'nowarn',0,        wtp.ident
  458.  db 'no',0,        wtp.ident
  459.  db 'nstar',0,        wtp.ident
  460.  db 'null',0,        wtp.ident
  461.  db 'number',0,        wtp.ident
  462.  db 'octal',0,        wtp.ident
  463.  db 'oct',0,        wtp.ident
  464.  db 'od',0,        wtp.ident
  465.  db 'off',0,        wtp.ident
  466.  db 'of',0,        wtp.ident
  467.  db 'oi',0,        wtp.ident
  468.  db 'on',0,        wtp.ident
  469.  db 'open',0,        wtp.ident
  470.  db 'or',0,        wtp.ident + wtp.oprtr
  471.  db 'output',0,        wtp.ident
  472.  db 'page',0,        wtp.ident
  473.  db 'partial',0,    wtp.ident
  474.  db 'pointer',0,    wtp.ident
  475.  db 'pop',0,        wtp.ident
  476.  db 'print',0,        wtp.ident
  477.  db 'prn',0,        wtp.ident
  478.  db 'procedure',0,    wtp.ident
  479.  db 'pun',0,        wtp.ident
  480.  db 'push',0,        wtp.ident
  481.  db 'random',0,        wtp.ident
  482.  db 'rdr',0,        wtp.ident
  483.  db 'read',0,        wtp.ident
  484.  db 'reboot',0,        wtp.ident
  485.  db 'record',0,        wtp.ident
  486.  db 'redefine',0,    wtp.ident
  487.  db 'remainder',0,    wtp.ident
  488.  db 'remove',0,        wtp.ident
  489.  db 'rename',0,        wtp.ident
  490.  db 'reverse',0,    wtp.ident
  491.  db 'right',0,        wtp.ident
  492.  db 'save',0,        wtp.ident
  493.  db 'scan',0,        wtp.ident
  494.  db 'segmented',0,    wtp.ident
  495.  db 'set',0,        wtp.ident
  496.  db 'shared',0,        wtp.ident
  497.  db 'size',0,        wtp.ident
  498.  db 'sp',0,        wtp.ident
  499.  db 'stack',0,        wtp.ident
  500.  db 'standalone',0,    wtp.ident
  501.  db 'standard',0,    wtp.ident
  502.  db 'status',0,        wtp.ident
  503.  db 'string',0,        wtp.ident
  504.  db 'subtract',0,    wtp.ident
  505.  db 'switch',0,        wtp.ident
  506.  db 'table',0,        wtp.ident
  507.  db 'tab',0,        wtp.ident
  508.  db 'text',0,        wtp.ident
  509.  db 'then',0,        wtp.ident
  510.  db 'to',0,        wtp.ident
  511.  db 'traceback',0,    wtp.ident
  512.  db 'trailing',0,    wtp.ident
  513.  db 'true',0,        wtp.ident
  514.  db 'tty',0,        wtp.ident
  515.  db 'unlock',0,        wtp.ident
  516.  db 'unstring',0,    wtp.ident
  517.  db 'until',0,        wtp.ident
  518.  db 'upper',0,        wtp.ident
  519.  db 'using',0,        wtp.ident
  520.  db 'value',0,        wtp.ident
  521.  db 'while',0,        wtp.ident
  522.  db 'with',0,        wtp.ident
  523.  db 'word',0,        wtp.ident
  524.  db 'wp',0,        wtp.ident
  525.  db 'write',0,        wtp.ident
  526.  db 'xor',0,        wtp.oprtr + wtp.ident
  527.  db 'z80',0,        wtp.ident
  528. ;
  529.         db    0,0,0        ;end of table
  530.         ds    10        ;patch area
  531. ;
  532. ;
  533. ;
  534. ;
  535. ;
  536. ;
  537. ;
  538. ;
  539. ;
  540. ;
  541. ;
  542. ;
  543. ;
  544. ;
  545. ;
  546. ;
  547. ;
  548. ;------------------------------------------
  549. ;-----built-in routine types and flags-----
  550. ;------------------------------------------
  551. ;
  552. ;
  553. bir.routine.base    equ    80h
  554. bir.routine.limit    equ    0e0h
  555. ;
  556. ;
  557. ;
  558. bir.ACCEPT        equ    bir.routine.base
  559. bir.overlay.load    equ    bir.ACCEPT + 1
  560. bir.index        equ    bir.overlay.load + 1
  561. bir.move.field        equ    bir.index + 1
  562. bir.move.field.2.str    equ    bir.move.field + 1
  563. bir.cmp.field        equ    bir.move.field.2.str + 1
  564. bir.cmp.field.2.str    equ    bir.cmp.field + 1
  565. bir.file1.move        equ    bir.cmp.field.2.str + 1
  566. bir.rename.file        equ    bir.file1.move + 1
  567. bir.remove.file        equ    bir.rename.file + 1
  568. bir.find.file        equ    bir.remove.file + 1
  569. bir.execute.program    equ    bir.find.file + 1
  570. bir.BCD.multiply    equ    bir.execute.program + 1
  571. bir.BCD.divide        equ    bir.BCD.multiply + 1
  572. bir.BCD.move.2.dbl    equ    bir.BCD.divide + 1
  573. bir.BCD.add        equ    bir.BCD.move.2.dbl + 1
  574. bir.BCD.subtract    equ    bir.BCD.add + 1
  575. bir.BCD.sub.do.it    equ    bir.BCD.subtract + 1
  576. bir.BCD.add.entry    equ    bir.BCD.sub.do.it + 1
  577. bir.BCD.sub.entry    equ    bir.BCD.add.entry + 1
  578. bir.BCD.prep        equ    bir.BCD.sub.entry + 1
  579. bir.cvt.str.bcd        equ    bir.BCD.prep + 1
  580. bir.cvt.bcd.str        equ    bir.cvt.str.bcd + 1
  581. bir.cvt.bcd.bin        equ    bir.cvt.bcd.str + 1
  582. bir.cvt.bin.bcd        equ    bir.cvt.bcd.bin + 1
  583. bir.BCD.shift.right    equ    bir.cvt.bin.bcd + 1
  584. bir.BCD.shift.left    equ    bir.BCD.shift.right + 1
  585. bir.edit.string        equ    bir.BCD.shift.left + 1
  586. bir.justify.left    equ    bir.edit.string + 1
  587. bir.justify.right    equ    bir.justify.left + 1
  588. bir.move.bcd        equ    bir.justify.right + 1
  589. bir.BCD.compare        equ    bir.move.bcd + 1
  590. bir.rec.read        equ    bir.BCD.compare + 1
  591. bir.rec.write        equ    bir.rec.read + 1
  592. bir.locate.rec        equ    bir.rec.write + 1
  593. bir.rec.sctr.read    equ    bir.locate.rec + 1
  594. bir.rec.sctr.write    equ    bir.rec.sctr.read + 1
  595. bir.rec.sctr.updt    equ    bir.rec.sctr.write + 1
  596. bir.cmp.blk        equ    bir.rec.sctr.updt + 1
  597. bir.DISPLAY        equ    bir.cmp.blk + 1
  598. bir.DISPLAY.crlf    equ    bir.DISPLAY + 1
  599. bir.UNSTRING        equ    bir.DISPLAY.crlf + 1
  600. bir.SCAN        equ    bir.UNSTRING + 1
  601. bir.SCAN.ANY        equ    bir.SCAN + 1
  602. bir.SCAN.NO        equ    bir.SCAN.ANY + 1
  603. bir.SCAN.TRAILING    equ    bir.SCAN.NO + 1
  604. bir.SIZE        equ    bir.SCAN.TRAILING + 1
  605. bir.cvt.bin.oct        equ    bir.SIZE + 1
  606. bir.cvt.dec.bin        equ    bir.cvt.bin.oct + 1
  607. bir.cvt.hex.bin        equ    bir.cvt.dec.bin + 1
  608. bir.cvt.oct.bin        equ    bir.cvt.hex.bin + 1
  609. bir.and.16        equ    bir.cvt.oct.bin + 1
  610. bir.or.16        equ    bir.and.16 + 1
  611. bir.xor.16        equ    bir.or.16 + 1
  612. bir.cvt.bin.dec        equ    bir.xor.16 + 1
  613. bir.cmp.str        equ    bir.cvt.bin.dec + 1
  614. bir.mul.16        equ    bir.cmp.str + 1
  615. bir.div.16        equ    bir.mul.16 + 1
  616. bir.sub.16        equ    bir.div.16 + 1
  617. bir.APPEND        equ    bir.sub.16 + 1
  618. bir.mov.str        equ    bir.APPEND + 1
  619. bir.exchange        equ    bir.mov.str + 1
  620. bir.fmt.filnm        equ    bir.exchange + 1
  621. bir.cvt.upper.case    equ    bir.fmt.filnm + 1
  622. bir.cvt.lower.case    equ    bir.cvt.upper.case + 1
  623. bir.dsk.ch.close    equ    bir.cvt.lower.case + 1
  624. bir.dsk.ch.out.open    equ    bir.dsk.ch.close + 1
  625. bir.dsk.ch.in.open    equ    bir.dsk.ch.out.open + 1
  626. bir.dsk.ch.out        equ    bir.dsk.ch.in.open + 1
  627. bir.dsk.ch.in        equ    bir.dsk.ch.out + 1
  628. bir.dsk.ch.help        equ    bir.dsk.ch.in + 1
  629. bir.disk.sctr.io    equ    bir.dsk.ch.help + 1
  630. bir.open.disk        equ    bir.disk.sctr.io + 1
  631. bir.close.disk        equ    bir.open.disk + 1
  632. bir.pmc.16        equ    bir.close.disk + 1
  633. bir.neg.hl        equ    bir.pmc.16 + 1
  634. bir.mov.rev        equ    bir.neg.hl + 1
  635. bir.set.dflt.dma    equ    bir.mov.rev + 1
  636. bir.file.not.open    equ    bir.set.dflt.dma + 1
  637. bir.open.error        equ    bir.file.not.open + 1
  638. bir.close.error        equ    bir.open.error + 1
  639. bir.read.error        equ    bir.close.error + 1
  640. bir.write.error        equ    bir.read.error + 1
  641. bir.file.error        equ    bir.write.error + 1
  642. bir.traceback        equ    bir.file.error + 1
  643. bir.move.str.2.field    equ    bir.traceback + 1
  644. bir.mov.blk        equ    bir.move.str.2.field + 1
  645. bir.cvt.bin.hex        equ    bir.mov.blk + 1
  646. bir.cmp.16        equ    bir.cvt.bin.hex + 1
  647. ;
  648. ;---dividend MUST be at end of table---
  649. ;
  650. bir.dividend        equ    bir.cmp.16 + 1
  651. bir.actual.limit    equ    bir.dividend + 1
  652. ;
  653. ;---- special forward references which are not
  654. ;---- subroutine calls to built-in routines
  655. ;
  656. bir.hi.mem        equ    bir.routine.limit
  657. bir.EXITBEGIN        equ    bir.hi.mem + 1
  658. bir.EXITIF        equ    bir.EXITBEGIN + 1
  659. bir.EXITDO        equ    bir.EXITIF + 1
  660. bir.EXITSWITCH        equ    bir.EXITDO + 1
  661. bir.1st.code        equ    bir.EXITSWITCH + 1
  662. bir.WHILE.TRUE        equ    bir.1st.code + 1
  663. bir.UNTIL.FALSE        equ    bir.WHILE.TRUE + 1
  664. bir.THEN        equ    bir.UNTIL.FALSE + 1
  665. bir.ELSE        equ    bir.THEN + 1
  666. bir.OPEN.fwd        equ    bir.ELSE + 1
  667. bir.CLOSE.fwd        equ    bir.OPEN.fwd + 1
  668. bir.READ.fwd        equ    bir.CLOSE.fwd + 1
  669. bir.WRITE.fwd        equ    bir.READ.fwd + 1
  670. bir.SWITCH        equ    bir.WRITE.fwd + 1
  671. bir.SWITCH.multiple    equ    bir.SWITCH + 1
  672. bir.SWITCH.range.fail    equ    bir.SWITCH.multiple + 1
  673. bir.SCAN.TRUE.fwd    equ    bir.SWITCH.range.fail + 1
  674. bir.SCAN.FALSE.fwd    equ    bir.SCAN.TRUE.fwd + 1
  675. bir.cpm.stack        equ    bir.SCAN.FALSE.fwd + 1
  676. bir.END            equ    bir.cpm.stack + 1
  677. bir.stack.fwd        equ    bir.END + 1
  678. ;
  679. ;
  680. ;---any of above not in this table are addresses only--
  681. ;
  682. ;---all in this table are built-in routines---
  683. ;
  684. built.in.rtn.flags:
  685. ;
  686.     ds    bir.routine.limit - bir.routine.base
  687. ;
  688.     db    0ffh    ;end marker
  689. ;
  690. ;
  691. ;
  692. ;
  693. ;
  694. ;
  695. ;
  696. ;
  697. ;----------------------------
  698. ;   compiler limit equates
  699. ;----------------------------
  700. max.edit.len        equ    80
  701. bcd.size        equ    8
  702. max.word.length        equ    80
  703. ;
  704. ;
  705. ;------------------------------------------------
  706. ;-----temp word / symbol-table-entry storage-----
  707. ;------------------------------------------------
  708. ;
  709. symbol.table.entry:
  710. ste.type:        ds    1
  711. ste.address:        ds    2
  712. ste.block.level:    ds    1
  713. ste.ovl.key        ds    2
  714. ste.length:        ds    2
  715. ste.name:        ds    max.word.length
  716. ;
  717. ste.BIT.posn        equ    ste.length
  718. ste.FILE.device        equ    ste.length
  719. ste.FILE.misc.flag    equ    ste.length + 1
  720. ;
  721. ;
  722. ;
  723. ;
  724. sym.tbl.entry.A:
  725. ste.A.type:        ds    1
  726. ste.A.address:        ds    2
  727. ste.A.block.level:    ds    1
  728. ste.A.ovl.key        ds    2
  729. ste.A.length:        ds    2
  730. ste.A.name:        ds    max.word.length
  731. ;
  732. ste.A.BIT.posn        equ    ste.A.length
  733. ste.A.FILE.device    equ    ste.A.length
  734. ste.A.FILE.misc.flag    equ    ste.A.length + 1
  735. ;
  736. ;
  737. ;
  738. ;
  739. sym.tbl.entry.B:
  740. ste.B.type:        ds    1
  741. ste.B.address:        ds    2
  742. ste.B.block.level:    ds    1
  743. ste.B.ovl.key        ds    2
  744. ste.B.length:        ds    2
  745. ste.B.name:        ds    max.word.length
  746. ;
  747. ste.B.BIT.posn        equ    ste.B.length
  748. ste.B.FILE.device    equ    ste.B.length
  749. ste.B.FILE.misc.flag    equ    ste.B.length + 1
  750. ;
  751. ;
  752. ;
  753. ;
  754. sym.tbl.entry.C:
  755. ste.C.type:        ds    1
  756. ste.C.address:        ds    2
  757. ste.C.block.level:    ds    1
  758. ste.C.ovl.key        ds    2
  759. ste.C.length:        ds    2
  760. ste.C.name:        ds    max.word.length
  761. ;
  762. ste.C.BIT.posn        equ    ste.C.length
  763. ste.C.FILE.device    equ    ste.C.length
  764. ste.C.FILE.misc.flag    equ    ste.C.length + 1
  765. ;
  766. ;
  767. ;---------------------------
  768. ;  miscellaneous storage
  769. ;---------------------------
  770. ;
  771. ;
  772. ;
  773. ;
  774. curr.block.level:    db    0
  775. ;---the following two bytes must be contiguous---
  776. code.started.this.blk:    db    0
  777. data.started.this.blk:    db    0
  778. ;
  779. ;
  780. redef.ctr        db    0
  781. ;
  782. ;
  783. ;
  784. curr.BIT.posn:        db    80h
  785. curr.BIT.build:        db    0
  786. ;
  787. curr.expr.oprtr:    db    0
  788. no.fall.thru.addr:    dw    0
  789. fall.thru.true:        db    0
  790. no.fall.thru.fwd.flag:    db    0
  791. curr.fwd.no.fall.thru:    db    0
  792. ;
  793. AND.OR.XOR.type:    db    0
  794. SCAN.type.flag:        db    0
  795. SCAN.pos.flag:        db    0
  796. SCAN.addr.flag:        db    0
  797. blk.mov.this.stmt:    db    0
  798. A.word.type:        db    0
  799. B.word.type:        db    0
  800. C.word.type:        db    0
  801. gvx.word.type:        db    0
  802. gvx.cnst.value:        dw    0
  803. gvx.word:        ds    max.word.length
  804. last.label        ds    30
  805. ;
  806. curr.ptr.type:        db    0
  807. curr.cvt.type:        db    0
  808. first.switch.flag    db    0
  809. copy.nest.count:    db    0
  810. size.cnt.flag:        db    0
  811. ;
  812. ;
  813. cmd.line.flag:        db    0
  814. decimal.work:        ds    10
  815. ;
  816. ;
  817. ;--------------------------
  818. ;  src file and buffer
  819. ;--------------------------
  820. src.in:            ds    36
  821. src.char:        ds    1
  822. sctr.size        equ    128
  823. src.buf.sctrs        equ    1
  824. src.buf.ix:        dw    sctr.size * src.buf.sctrs
  825. src.buffer:        ds    sctr.size * src.buf.sctrs
  826. ;
  827. ;--------------------------
  828. ;   current source word
  829. ;--------------------------
  830. ;
  831. word.length:        ds    1
  832. word.type:        ds    1
  833. rsvd.wd.ix:        ds    1
  834. word.cnst.ptr:        ds    2
  835. word:            ds    max.word.length
  836. word.save:        ds    max.word.length
  837. cnst.value:        ds    4
  838. cnst.value.save:    ds    4
  839. minus.word.flag:    ds    1
  840. ;
  841. curr.src.line.num:    dw    1
  842. ;
  843. ;
  844. bcd.cnst.value.wk:    ds    bcd.size
  845. ;
  846. copy.swap.limit:
  847. ;
  848. ;
  849. ;--------------------------------------------------
  850. ;   end of memory swapped during COPY processing
  851. ;--------------------------------------------------
  852. ;
  853. ;
  854. ;--------------------------------------
  855. ;   temp swap area for COPY operation
  856. ;--------------------------------------
  857. ;
  858. copy.nest.limit        equ    2
  859. ;
  860. copy.swap.area:
  861.     ds    (copy.swap.limit - src.in) * copy.nest.limit
  862. copy.move.size        equ    $ - copy.swap.area
  863. ;
  864. ;
  865. ;
  866. ;
  867. ;
  868. ;
  869. ;------------------------------
  870. ;-----code file and buffer-----
  871. ;------------------------------
  872. ;
  873. code.fcb:        ds    36
  874. code.buffer:        ds    128
  875. start.code.addr:    dw    0100h
  876. ;
  877. code.file.map:        ds    512
  878. ;
  879. curr.code.addr:        dw    0100h
  880. curr.read.key:        dw    0
  881. ;
  882. ;
  883. ;
  884. ;---------------------------------------
  885. ;-----overlay file & buffer-------------
  886. ;---------------------------------------
  887. ;
  888. ovl.fcb            ds    36
  889.                     org    ovl.fcb + fcb.ext
  890.                     db    'OVL'
  891.                     rorg
  892.                     org    ovl.fcb + fcb.rnd.rec
  893.                     dw    0ffffh
  894.                     rorg
  895. any.overlay        db    0
  896. overlay.in.process    db    0
  897. highest.ovl.addr    dw    0
  898. curr.ovl.ste.ptr    dw    0ffffh    ;ptr to seg-proc name
  899. curr.ovl.start.key    dw    0
  900. ovl.sctr.offset        dw    0
  901. ;
  902. code.fcb.save        ds    36
  903. code.map.save        ds    512
  904. ;
  905. ;
  906. ;
  907. ;---------------------------
  908. ;   print file and buffer
  909. ;---------------------------
  910. print.line.size        equ    132
  911. print.line:        ds    print.line.size
  912. print.line.ix:        dw    print.line
  913. error.this.line:    db    0
  914. print.word.flag:    db    0
  915. print.buff:        ds    128
  916. err.ctr:        dw    0
  917. statement.counter:    dw    0
  918. print.line.ctr:        dw    0
  919. curr.print.colm:    db    0
  920. curr.print.addr:    dw    100h
  921. curr.block.match:    dw    0
  922. ;
  923. print.fcb:        db    0
  924.             db    'PRINT   '
  925.             db    'PRN'
  926.             db    0,0,0,0,0,0,0,0,0,0
  927.             db    0,0,0,0,0,0,0,0,0,0
  928.             db    0,0,0,0
  929.             db    26h    ;text output open
  930.             db    0
  931.             dw    print.buff
  932.             dw    0
  933.             dw    128
  934.             dw    src.char
  935.             dw    0
  936. ;
  937. ;
  938. ;
  939. ;
  940. ;
  941. ;
  942. ;
  943. ;
  944. ;
  945. ;
  946. ;---------------------------------
  947. ;   FILE flag bits
  948. ;---------------------------------
  949.                     ;C = compile-time switch
  950.                     ;R = run-time switch
  951. FILE.cr.flag.FILE1    equ    80h    ;C & R
  952. FILE.cr.flag.FILE2    equ    40h    ;C & R
  953. FILE.c.flag.TEXT    equ    20h    ;C
  954. FILE.r.flag.no.buff    equ    20h    ;R
  955. FILE.c.flag.RANDOM    equ    10h    ;C
  956. FILE.r.flag.INPUT    equ    08h    ;C
  957. FILE.r.flag.OUTPUT    equ    04h    ;R
  958. FILE.c.flag.rec.mode    equ    02h    ;C
  959. FILE.r.flag.OPEN    equ    02h    ;R
  960. FILE.r.flag.SHARED    equ    01h    ;R
  961. FILE.c.flag.ext.name    equ    01h    ;C
  962. ;
  963. ;
  964. ;-----FILE statement flags-----
  965. ;
  966. FILE.flags:
  967. FILE.c.flags:        db    0
  968. FILE.device:        db    0
  969. FILE.r.flags:        db    0
  970. file.flags.end:
  971. ;
  972. curr.fcb:        ds    fcb.rec.buffer
  973. ;
  974. ;
  975. ;
  976. file.new.flag:        db    0
  977. curr.file.name:        ds    max.word.length
  978. ;
  979. ;
  980. ;
  981. ;---------------------------
  982. ;   compiler option flags
  983. ;---------------------------
  984. print.flag:        db    0ffh
  985. print.console:        db    0
  986. print.printer.flag:    db    0
  987. print.disk.flag:    db    01h
  988. string.move.block.flag:    db    0
  989. print.code.addr.flag:    db    0
  990. print.blk.lvl.flag:    db    0
  991. print.blk.match.flag:    db    0
  992. print.line.num.flag:    db    0
  993. print.tab.mask:        db    3
  994. stack.none.flag:    db    0
  995. stack.save.flag:    db    0
  996. stack.id.flag:        db    0
  997. stack.id.size:        dw    0
  998. my.stack.size:        dw    256    ;default
  999. my.top.stk.addr:    dw    my.stack.top
  1000. nowarn.flag:        db    0
  1001. standalone.flag:    db    0
  1002. auto.execute.flag:    db    0
  1003. reloc.map.flag:        db    0
  1004. table.fwd.flag:        db    0
  1005. print.on.off.flag:    db    0
  1006. MPM.flag:        db    0
  1007. Z80.flag:        db    0
  1008. limit.word.flag:    db    0
  1009. ;
  1010. ;
  1011. ;
  1012. ;-------------------------
  1013. ;   relocation-work data
  1014. ;------------------------
  1015. curr.rtn.strt.addr:    dw    0
  1016. curr.rtn.addr:        dw    0
  1017. strt.map.loc:        dw    0
  1018. curr.map.loc:        dw    0
  1019. curr.reloc.bit:        db    80h
  1020. curr.rtn.code.strt.addr: dw    0
  1021. curr.rtn.fwd.tbl:    dw    0
  1022. curr.rtn.desc.addr:    dw    0
  1023. fwd.tbl.addr:        dw    0
  1024. ;
  1025. ;
  1026. ;
  1027. ;----------------------------------
  1028. ;   symbol table working storage
  1029. ;----------------------------------
  1030. start.sym.tbl.addr:    dw    0
  1031. end.sym.tbl.addr:    dw    0
  1032. wk.sym.tbl.addr:    dw    0
  1033. start.wk.sym.tbl.addr:    dw    0
  1034. tot.sym.space:        dw    0
  1035. used.sym.space:        dw    0
  1036. prev.sym.tbl.addr:    dw    0
  1037. curr.sym.tbl.bottom:    dw    0
  1038. lowest.sym.tbl.addr:    dw    0
  1039. ;
  1040. ;
  1041. ;
  1042. ;
  1043. ;
  1044. ;
  1045. ;
  1046. ;
  1047. ;
  1048. ;
  1049. ;
  1050. ;
  1051. MAIN.try.open:
  1052.     lxi    d,l.ovly.fcb
  1053.     mvi    c,15
  1054.     call    entry
  1055.     inr    a
  1056.     ret
  1057. ;
  1058. ;
  1059. ;
  1060. ;---end of program---
  1061. ;
  1062. MAIN.END.pgm:
  1063.     mvi    c,25
  1064.     call    entry
  1065.     sta    MAIN.END.curr.disk
  1066.     mvi    c,32
  1067.     mvi    e,0ffh    ;get user
  1068.     call    entry
  1069.     sta    MAIN.END.curr.user
  1070.     call    MAIN.try.open
  1071.     jnz    MAIN.END.ovly.open
  1072. ;---if not user 0, try user 0 of default drive---
  1073.     lda    MAIN.END.curr.user
  1074.     ora    a
  1075.     jz    MAIN.END.user.0
  1076.     mvi    c,32
  1077.     mvi    e,0
  1078.     call    entry
  1079.     call    MAIN.try.open
  1080.     jnz    MAIN.END.ovly.open
  1081. ;---if not drive A, try drive A---
  1082. MAIN.END.user.0:
  1083.     lda    MAIN.END.curr.disk
  1084.     ora    a
  1085.     jz    MAIN.END.ovly.err
  1086.     mvi    c,14
  1087.     mvi    e,0
  1088.     call    entry
  1089.     call    MAIN.try.open
  1090.     jnz    MAIN.END.ovly.open
  1091. MAIN.END.ovly.err:
  1092.     lxi    d,ovly.open.err
  1093.     mvi    c,9
  1094.     call    entry
  1095.     jmp    boot
  1096. ovly.open.err:
  1097.     db    'PARASOL OVERLAY FILE NOT FOUND$'
  1098. MAIN.END.ovly.open:
  1099.     lxi    h,ovly.start.loc - 100h
  1100.     dad    h
  1101.     mov    l,h
  1102.     mvi    h,0
  1103.     shld    l.ovly.fcb + fcb.rnd.rec
  1104.     lxi    d,ovly.start.loc
  1105. ovly.lup:
  1106.     lxi    h,128
  1107.     dad    d
  1108.     push    h
  1109.     mvi    c,26
  1110.     call    entry
  1111.     lxi    d,l.ovly.fcb
  1112.     mvi    c,33
  1113.     call    entry
  1114.     pop    d
  1115.     lhld    l.ovly.fcb + fcb.rnd.rec
  1116.     inx    h
  1117.     shld    l.ovly.fcb + fcb.rnd.rec
  1118.     ora    a
  1119.     jz    ovly.lup
  1120. ;---set user & disk back---
  1121.     lda    MAIN.END.curr.user
  1122.     mov    e,a
  1123.     mvi    c,32
  1124.     call    entry
  1125.     lda    MAIN.END.curr.disk
  1126.     mov    e,a
  1127.     mvi    c,14
  1128.     call    entry
  1129.     jmp    ovly.start.loc
  1130. MAIN.END.curr.user:    db    0
  1131. MAIN.END.curr.disk:    db    0
  1132. l.ovly.fcb:
  1133.     db    0    ;default drive
  1134.     db    'PARASOL2OVL'
  1135.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1136.     db    0,0,0,0,0,0,0,0,0,0
  1137. ;
  1138. ;
  1139. ovly.start.loc    equ    ($+127) and 0ff80h    ;sector boundary
  1140. ;
  1141. ;
  1142. ;***********end of PARASOL RESIDENT SECTION************
  1143. ;
  1144.