home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol092 / litl-ada.prn < prev    next >
Encoding:
Text File  |  1984-04-29  |  43.5 KB  |  1,174 lines

  1. L/1 Interpreter Source list                     August 10, 1980
  2. Copywrite 1980 by Ralph E. Kenyon Jr.           page  1
  3. Abstract Systems, etc.                          Ph 413-354-7875
  4. RFD Lower Prospect Hill
  5. Chester MA, 01011
  6.  
  7.                 ;Little-Ada L/0 machine interperter
  8.                 ;Edited June 21, 1980
  9.                 ;Copyright 1980 by Ralph E. Kenyon Jr.
  10.                 ;Version 1547 Re-designated L/1 Jan 81
  11.                 ;Stripped down, no debug version
  12.  
  13.                         REFS SYSTEM.SY  ;Library file
  14.                         REF Warm        ;Warmstart
  15.                         REF WH0         ;Consol Char in
  16.                         REF WH1         ;Consol Char out
  17.                         REF Msg         ;Message writer
  18.                         REF USER        ;Start of user memory
  19.                         REF MEMTOP      ;Last good memory
  20.                         REF Ret         ;Return from overlay
  21.                         REF Dio         ;Disk In/Out
  22.                         REF Err         ;System error handler
  23.                         REF FILE        ;File data buffer
  24.                         REF Ovrto       ;Overlay handler
  25.                         REF CMPTR       ;Command buffer pointer
  26.                         REF Ioret       ;Return from Interupt
  27.  
  28.                         REFS <#>L0CODE.SY
  29.                 ;Open L/0 code MACRO Library
  30.                         REF L0CODE
  31.                 ;Macro which defines all L/0 code macros.
  32.  
  33.  
  34. 000D            CR      EQU 13
  35.  
  36. 3200                    ORG USER
  37. 3200                    IDNT $,$        ;$ is current value PC
  38.  
  39. 3200  C32F3A            JMP Start
  40. 3203  C31135            JMP GO
  41.  
  42.                         L0CODE
  43. 0000                    LIST 0
  44.  
  45. 3206  0D446976  DBZ     DB CR,'Division by zero not defined!',CR,0
  46. 320A  6973696F
  47. 320E  6E206279
  48. 3212  207A6572
  49. 3216  6F206E6F
  50. 321A  74206465
  51. 321E  66696E65
  52. 3222  64210D00
  53. 3226            Inst    DS 1    ;Instruction register
  54. 3227            Base    DS 2    ;Base register
  55. 3229            Static  DS 2    ;Static link conversion register
  56. 322B            Level   DS 1    ;Level register
  57. 322C            AR1     DS 2    ;Arithemetic storage 1
  58. 322E            AR2     DS 2    ;Arithemetic storage 2
  59. 3230            AR3     DS 2    ;Arithemetic storage 3
  60. 3232            TMStack DS 2    ;Stack start
  61.  
  62.  
  63.  
  64. L/1 Interpreter Source list                     August 10, 1980
  65. Copywrite 1980 by Ralph E. Kenyon Jr.           page  2
  66.  
  67. 3234            FDB     DS 44   ;File descriptor buffer
  68.  
  69. 3260            IFD     DS 1    ;Input file drive
  70. 3261            IFA     DS 2    ;Input file disk address
  71. 3263            IFS     DS 2    ;Input file disk sector
  72. 3265            IFP     DS 2    ;Input file buffer pointer
  73. 3267            IFB     DS 256  ;Input file buffer
  74.  
  75. 3367            OFD     DS 1    ;Output file drive
  76. 3368            OFA     DS 2    ;Output file disk address
  77. 336A            OFS     DS 2    ;Output file disk sector
  78. 336C            OFP     DS 2    ;Output file buffer pointer
  79. 336E            OFB     DS 256  ;Output file buffer
  80. 346E            Flag    DS 1    ;Output file in use flag
  81.  
  82. 346F  01        IFflg   DB 1    ;initialize flag
  83. 3470  01        OFflg   DB 1    ;initialize flag
  84.  
  85.  
  86. 3471  0A        Fetch   LDAX B  ;Instruction fetch cycle
  87. 3472  03                INX B
  88. 3473  322632            STA Inst
  89. 3476  B7                ORA A
  90. 3477  C9                RET
  91.  
  92. 3478  73        Push    MOV M,E         ;DE to S(t)
  93. 3479  2B                DCX H           ;t+1 to HL
  94. 347A  72                MOV M,D
  95. 347B  2B                DCX H
  96. 347C  C9                RET
  97.  
  98. 347D  23        Pop     INX H           ;S(t) to DE
  99. 347E  56                MOV D,M         ;t-1 to HL
  100. 347F  23                INX H
  101. 3480  5E                MOV E,M
  102. 3481  C9                RET
  103.  
  104. 3482  F5        MinDE   PUSH PSW        ;Two's complement
  105. 3483  7A                MOV A,D         ;of DE. All other
  106. 3484  2F                CMA             ;registers preserved.
  107. 3485  57                MOV D,A
  108. 3486  7B                MOV A,E
  109. 3487  2F                CMA
  110. 3488  5F                MOV E,A
  111. 3489  13                INX D
  112. 348A  F1                POP PSW
  113. 348B  C9                RET
  114.  
  115. 348C  E5        CONV    PUSH H          ;Requires T in DE
  116. 348D  CD8234            CALL MinDE      ;(Static)
  117. 3490  2A3232            LHLD TMStack
  118. 3493  19                DAD D           ;<[(TMStack)-(Static)]
  119. 3494  7C                MOV A,H         ;We're going to divide by 2
  120. 3495  BC                CMP H           ;(Just reset carry)
  121.  
  122.  
  123.  
  124. L/1 Interpreter Source list                     August 10, 1980
  125. Copywrite 1980 by Ralph E. Kenyon Jr.           page  3
  126.  
  127. 3496  1F                RAR             ;Puts lo bit in carry
  128. 3497  57                MOV D,A         ;Right shifted by 1
  129. 3498  7D                MOV A,L         ;Lo byte
  130. 3499  1F                RAR             ;Carry goes into hi bit
  131. 349A  5F                MOV E,A         ;(16 bits right shift)
  132. 349B  E1                POP H
  133. 349C  C9                RET             ;Result in DE
  134.  
  135.                 ;This section computes the static link
  136.                 ;by finding the ltack position base for
  137.                 ;L levels down.
  138.  
  139. 349D  F5        GStL    PUSH PSW
  140. 349E  E5                PUSH H
  141. 349F  3A2632            LDA Inst        ;get & stow level
  142. 34A2  E60F      GStL1   ANI 0FH
  143. 34A4  2A2732            LHLD Base       ;get & stow base
  144. 34A7  222932            SHLD Static
  145. 34AA  C3C534            JMP BASE
  146. 34AD  2A2932    BASE1   LHLD Static     ;get base
  147. 34B0  EB                XCHG
  148. 34B1  2A3232            LHLD TMStack
  149. 34B4  13                INX D           ;We need to be above by 1
  150. 34B5  CD8234            CALL MinDE
  151. 34B8  19                DAD D           ;(MEMTOP-2*T)
  152. 34B9  19                DAD D           ;stack address now in hl
  153. 34BA  CD7D34            CALL Pop        ;Get S(S(t))
  154. 34BD  EB                XCHG
  155. 34BE  222932            SHLD Static
  156. 34C1  3A2B32            LDA Level       ;get level
  157. 34C4  3D                DCR A
  158. 34C5  322B32    BASE    STA Level
  159. 34C8  C2AD34            JNZ BASE1
  160. 34CB  EB                XCHG            ;Returns static level in DE
  161. 34CC  E1                POP H
  162. 34CD  F1                POP PSW
  163. 34CE  C9                RET
  164.  
  165. 34CF  1E02      Out2    MVI E,2         ;Output file already exists
  166. 34D1  C3D634            JMP Out0
  167. 34D4  1E03      Out3    MVI E,3         ;Input file not specified
  168. 34D6  1607      Out0    MVI D,7
  169. 34D8  C30F04    Out     JMP Err
  170.                 
  171. 34DB  3EE0      Gf      MVI A,0E0H
  172. 34DD  CD1204    Gf1     CALL Ovrto
  173. 34E0  47666964          DB 'Gfid'
  174. 34E4  C9                RET
  175.  
  176.                 ;Parameters for Dio set up by start code
  177.                 ;Here's where we get the file to be
  178.                 ;interpretered
  179.  
  180. 34E5  CD0604    GETP    CALL Dio        ;Go get it.
  181.  
  182.  
  183.  
  184. L/1 Interpreter Source list                     August 10, 1980
  185. Copywrite 1980 by Ralph E. Kenyon Jr.           page  4
  186.  
  187. 34E8  DAD834            JC Out          ;Something Wrong!
  188. 34EB  212F3A            LXI H,Pgmaddr   ;get the program
  189. 34EE  E5                PUSH H
  190. 34EF  C1                POP B           ;Set TMPC to first byte
  191. 34F0  2A3232            LHLD TMStack    ;Set initialize TMSP
  192. 34F3  110000            LXI D,0         ;First position on stack for
  193. 34F6  CD7834            CALL Push       ;Character in/out
  194. 34F9  CD7834            CALL Push       ;Static link
  195. 34FC  13                INX D
  196. 34FD  EB                XCHG
  197. 34FE  222732            SHLD Base       ;set Base 1st
  198. 3501  EB                XCHG
  199. 3502  CD7834            CALL Push       ;Dynamic link same
  200. 3505  112E3A            LXI D,Origin    ;addr of that 'hlt' byte
  201. 3508  CD7834            CALL Push
  202. 350B  CDFF37            CALL INB
  203. 350E  CD5039            CALL OUTB
  204.  
  205.                 ;This routine sets itself up as a return address
  206.  
  207. 3511  E5        GO      PUSH H          ;Return to here
  208. 3512  211135            LXI H,GO
  209. 3515  E3                XTHL            ;Put our addr on stack
  210. 3516  CD7134            CALL Fetch
  211. 3519  17                RAL
  212. 351A  D2A635            JNC branch      ;0 means br or bnz
  213. 351D  17                RAL
  214. 351E  D26935            JNC oprlic
  215. 3521  17                RAL
  216. 3522  D8                RC              ;111XXXXX is NOP
  217. 3523  CD9D34            CALL GStL       ;For both lad & call
  218. 3526  17                RAL             ;Now which one
  219. 3527  DA3C35            JC Call         ;do we have?
  220.  
  221.                 ;Here we have to get the address from
  222.                 ;the program immediate data (two bytes)
  223.  
  224. 352A  E5        Lad     PUSH H
  225. 352B  2A2932            LHLD Static
  226. 352E  CD7134            CALL Fetch
  227. 3531  57                MOV D,A         ;Address hi byte
  228. 3532  CD7134            CALL Fetch
  229. 3535  5F                MOV E,A         ;Address lo byte
  230. 3536  19                DAD D           ;Add in the stack base
  231. 3537  EB                XCHG            ;put it in DE
  232. 3538  E1                POP H
  233. 3539  C37834            JMP Push        ;Let push return
  234.  
  235.                 ;This routine puts links on stack
  236.                 ;followed by return address
  237.  
  238. 353C  E5        Call    PUSH H          ;We need TMSP later
  239. 353D  EB                XCHG
  240. 353E  2A2932            LHLD Static
  241.  
  242.  
  243.  
  244. L/1 Interpreter Source list                     August 10, 1980
  245. Copywrite 1980 by Ralph E. Kenyon Jr.           page  5
  246.  
  247. 3541  EB                XCHG
  248. 3542  CD7834            CALL Push       ;Static link first
  249. 3545  EB                XCHG
  250. 3546  2A2732            LHLD Base
  251. 3549  EB                XCHG
  252. 354A  CD7834            CALL Push       ;Dynamic link second
  253. 354D  E3                XTHL            ;TMSP to stack
  254. 354E  EB                XCHG
  255. 354F  CD8C34            CALL CONV
  256. 3552  EB                XCHG
  257. 3553  222732            SHLD Base       ;Set new base
  258. 3556  CD7134            CALL Fetch      ;lets get that address
  259. 3559  57                MOV D,A
  260. 355A  CD7134            CALL Fetch
  261. 355D  5F                MOV E,A
  262. 355E  212F3A            LXI H,Pgmaddr
  263. 3561  19                DAD D
  264. 3562  E3                XTHL            ;Addr to top of stack
  265. 3563  C5                PUSH B
  266. 3564  D1                POP D
  267. 3565  C1                POP B
  268. 3566  C37834            JMP Push        ;return address
  269.  
  270. 3569  17        oprlic  RAL             ;Check next bit for oprlic
  271. 356A  DA8135            JC Lic
  272.  
  273.                 ;For opr, we must get last 5 bits from inst
  274.                 ;We'll use a computed goto to get the
  275.                 ;routine for the sub-operation.
  276.  
  277. 356D  3A2632    opr     LDA Inst
  278. 3570  E61F              ANI 1FH
  279. 3572  87                ADD A           ;Times 2
  280. 3573  5F                MOV E,A
  281. 3574  1600              MVI D,0
  282. 3576  E5                PUSH H          ;save TMSP
  283. 3577  21CB35            LXI H,Jtbl      ;jmp table
  284. 357A  19                DAD D           ;add position
  285. 357B  5E                MOV E,M
  286. 357C  23                INX H
  287. 357D  56                MOV D,M
  288. 357E  EB                XCHG            ;addr to HL
  289. 357F  E3                XTHL            ;addr to stack
  290. 3580  C9                RET             ;Jump to addr
  291.  
  292.                 ;Now we've got to sort out the number of
  293.                 ;bytes used for the constant in this lic
  294.  
  295. 3581  17        Lic     RAL
  296. 3582  DA8F35            JC Lic1
  297. 3585  3A2632            LDA Inst        ;1 byte
  298. 3588  E60F              ANI 0FH
  299. 358A  1600              MVI D,0
  300. 358C  C3A235            JMP lic4
  301.  
  302.  
  303.  
  304. L/1 Interpreter Source list                     August 10, 1980
  305. Copywrite 1980 by Ralph E. Kenyon Jr.           page  6
  306.  
  307. 358F  17        Lic1    RAL
  308. 3590  DA9B35            JC lic2
  309. 3593  3A2632            LDA Inst        ;2 byte
  310. 3596  E607              ANI 7
  311. 3598  C39E35            JMP lic3
  312. 359B  CD7134    lic2    CALL Fetch      ;3 byte
  313. 359E  57        lic3    MOV D,A
  314. 359F  CD7134            CALL Fetch
  315. 35A2  5F        lic4    MOV E,A
  316. 35A3  C37834            JMP Push        ;let push RET for us
  317.  
  318. 35A6  17        branch  RAL
  319. 35A7  D2B935            JNC Br
  320. 35AA  CD7D34            CALL Pop
  321. 35AD  7A                MOV A,D
  322. 35AE  B7                ORA A
  323. 35AF  C2B935            JNZ Br          ;(bnz)
  324. 35B2  83                ADD E
  325. 35B3  C2B935            JNZ Br          ;(bnz)
  326. 35B6  C37134            JMP Fetch       ;Skip this byte
  327.                                         ;let Fetch return
  328.  
  329. 35B9  3A2632    Br      LDA Inst
  330. 35BC  E63F              ANI 3FH         ;Kill opcode
  331. 35BE  57                MOV D,A         ;Hi addr
  332. 35BF  CD7134            CALL Fetch      ;rest of addr
  333. 35C2  5F                MOV E,A         ;Lo addr
  334. 35C3  E5                PUSH H
  335. 35C4  212F3A            LXI H,Pgmaddr   ;Adjust for program
  336. 35C7  19                DAD D           ;load address
  337. 35C8  E3                XTHL
  338. 35C9  C1                POP B
  339. 35CA  C9                RET
  340.  
  341. 35CB  0B36      Jtbl    DW Halt         ;0
  342.  
  343.                 ; Halt closes both the input and the
  344.                 ; output files before invoking Exec.
  345.                 ; The input and output file setup routines
  346.                 ; are restored to IFR and OFR also.
  347.  
  348. 35CD  1636              DW addsub       ;1
  349. 35CF  1636              DW addsub       ;2
  350. 35D1  2D36              DW muldiv       ;3
  351. 35D3  2D36              DW muldiv       ;4
  352. 35D5  F236              DW Mod          ;5
  353. 35D7  3637              DW Neg          ;6
  354. 35D9  3F37              DW Not          ;7
  355. 35DB  8837              DW Sete         ;8
  356. 35DD  A837              DW Setlg        ;9
  357. 35DF  A837              DW Setlg        ;A
  358. 35E1  5737              DW Swap         ;B
  359. 35E3  6837              DW retn         ;C
  360. 35E5  CB37              DW Rav          ;D
  361.  
  362.  
  363.  
  364. L/1 Interpreter Source list                     August 10, 1980
  365. Copywrite 1980 by Ralph E. Kenyon Jr.           page  7
  366.  
  367. 35E7  DF37              DW Sto          ;E
  368. 35E9  F637              DW inc          ;F
  369. 35EB  FF37      IFR     DW INB          ;10
  370.  
  371.                 ; INB sets up the input file data for Dio
  372.                 ; and puts the address of Inb into IFR.
  373.                 ; If a file is not selected, INB puts the
  374.                 ; address of Cinb into IFR (input from consol)
  375.  
  376. 35ED  5039      OFR     DW OUTB         ;11
  377.  
  378.                 ; OUTB sets up the output file data for Dio
  379.                 ; and puts the address of Outb into OFR.
  380.                 ; If a file is not selected, OUTB puts the
  381.                 ; address of Coutb into OFR (output to consol)
  382.  
  383.                 ;These remaining are all treated as nop
  384.  
  385. 35EF  2805              DW Ret          ;12 insurance
  386. 35F1  2805              DW Ret          ;13
  387. 35F3  2805              DW Ret          ;14
  388. 35F5  2805              DW Ret          ;15
  389. 35F7  2805              DW Ret          ;16
  390. 35F9  2805              DW Ret          ;17
  391. 35FB  2805              DW Ret          ;18
  392. 35FD  2805              DW Ret          ;19
  393. 35FF  2805              DW Ret          ;1A
  394. 3601  2805              DW Ret          ;1B
  395. 3603  2805              DW Ret          ;1C
  396. 3605  2805              DW Ret          ;1D
  397. 3607  2805              DW Ret          ;1E
  398. 3609  2805              DW Ret          ;1F
  399.  
  400. 360B  CDE539    Halt    CALL TURNOFF    ;Close open output file
  401. 360E  21FF37            LXI H,INB       ;Restore Input file
  402. 3611  22EB35            SHLD IFR        ;Open sequence
  403. 3614  D1                POP D           ;Clean up stack
  404. 3615  C9                RET
  405.  
  406. 3616  CD7D34    addsub  CALL Pop        ;S(t)
  407. 3619  D5                PUSH D
  408. 361A  CD7D34            CALL Pop        ;S(t-1)
  409. 361D  E3                XTHL            ;S(t) to HL
  410. 361E  EB                XCHG            ;S(t) to DE
  411. 361F  3A2632            LDA Inst
  412. 3622  E602              ANI 2           ;is it a subtract?
  413. 3624  C48234            CNZ MinDE
  414. 3627  19                DAD D           ;S(t-1)-S(t) IN HL
  415. 3628  EB                XCHG
  416. 3629  E1                POP H           ;Get TMSP back
  417. 362A  C37834            JMP Push        ;let push return for us
  418.  
  419. 362D  CD7D34    muldiv  CALL Pop
  420. 3630  EB                XCHG
  421.  
  422.  
  423.  
  424. L/1 Interpreter Source list                     August 10, 1980
  425. Copywrite 1980 by Ralph E. Kenyon Jr.           page  8
  426.  
  427. 3631  222C32            SHLD AR1
  428. 3634  EB                XCHG
  429. 3635  CD7D34            CALL Pop
  430. 3638  EB                XCHG
  431. 3639  222E32            SHLD AR2
  432. 363C  3A2632            LDA Inst
  433. 363F  E604              ANI 4           ;not multiply?
  434. 3641  CC4E36            CZ MULT
  435. 3644  C49936            CNZ DIVD
  436. 3647  2A3032            LHLD AR3
  437. 364A  EB                XCHG
  438. 364B  C37834            JMP Push        ;let push return for us
  439.  
  440. 364E  F5        MULT    PUSH PSW        ;16 bit multiply
  441. 364F  C5                PUSH B          ;with no overflow test
  442. 3650  D5                PUSH D          ;returns product mod 10000H
  443. 3651  E5                PUSH H
  444. 3652  2A2C32            LHLD AR1
  445. 3655  7C                MOV A,H
  446. 3656  B7                ORA A
  447. 3657  C25F36            JNZ MULT1
  448. 365A  85                ADD L
  449. 365B  CA9036            JZ MULT7
  450. 365E  EB                XCHG
  451. 365F  2A2E32    MULT1   LHLD AR2
  452. 3662  7C                MOV A,H
  453. 3663  B7                ORA A
  454. 3664  C26B36            JNZ MULT2
  455. 3667  85                ADD L
  456. 3668  CA9036            JZ MULT7
  457. 366B  4C        MULT2   MOV C,H         ;save hi byte
  458. 366C  7D                MOV A,L         ;do lo byte
  459. 366D  210000            LXI H,0
  460. 3670  0608              MVI B,8
  461. 3672  0F        MULT3   RRC
  462. 3673  D27736            JNC MULT4
  463. 3676  19                DAD D
  464. 3677  EB        MULT4   XCHG
  465. 3678  29                DAD H
  466. 3679  EB                XCHG
  467. 367A  05                DCR B
  468. 367B  C27236            JNZ MULT3
  469. 367E  79                MOV A,C         ;now do hi byte
  470. 367F  0608              MVI B,8
  471. 3681  0F        MULT5   RRC
  472. 3682  D28636            JNC MULT6
  473. 3685  19                DAD D
  474. 3686  EB        MULT6   XCHG
  475. 3687  29                DAD H
  476. 3688  EB                XCHG
  477. 3689  05                DCR B
  478. 368A  C28136            JNZ MULT5
  479. 368D  C39336            JMP MULT8
  480. 3690  210000    MULT7   LXI H,0
  481.  
  482.  
  483.  
  484. L/1 Interpreter Source list                     August 10, 1980
  485. Copywrite 1980 by Ralph E. Kenyon Jr.           page  9
  486.  
  487. 3693  223032    MULT8   SHLD AR3
  488. 3696  C36400            JMP Ioret
  489.  
  490. 3699  F5        DIVD    PUSH PSW
  491. 369A  C5                PUSH B
  492. 369B  D5                PUSH D
  493. 369C  E5                PUSH H
  494. 369D  010000            LXI B,0         ;Result goes here
  495. 36A0  2A2C32            LHLD AR1
  496. 36A3  7C                MOV A,H         ;lets see if
  497. 36A4  B7                ORA A           ;the idiot wants
  498. 36A5  C2AC36            JNZ DIVD1       ;to divide by
  499. 36A8  85                ADD L           ;zero.
  500. 36A9  CAE536            JZ DBZER        ;He does!
  501.  
  502. 36AC  EB        DIVD1   XCHG            ;nope, so get
  503. 36AD  2A2E32            LHLD AR2        ;dividend
  504. 36B0  7A                MOV A,D         ;If it's
  505. 36B1  B7                ORA A           ;zero
  506. 36B2  C2BF36            JNZ DIVD2       ;then
  507. 36B5  85                ADD E           ;result's
  508. 36B6  C2BF36            JNZ DIVD2       ;also
  509. 36B9  210000    DIVD7   LXI H,0         ;zero
  510. 36BC  C3DF36            JMP DIVD6
  511.  
  512. 36BF  7C        DIVD2   MOV A,H
  513. 36C0  BA                CMP D
  514. 36C1  DADD36            JC DIVD4
  515. 36C4  CACB36            JZ DIVD3
  516. 36C7  03                INX B
  517. 36C8  C3D436            JMP SUBT
  518. 36CB  7D        DIVD3   MOV A,L
  519. 36CC  BB                CMP E
  520. 36CD  DADD36            JC DIVD4
  521. 36D0  03                INX B
  522. 36D1  CADD36            JZ DIVD4
  523. 36D4  D5        SUBT    PUSH D
  524. 36D5  CD8234            CALL MinDE
  525. 36D8  19                DAD D
  526. 36D9  D1                POP D
  527. 36DA  C3BF36            JMP DIVD2
  528. 36DD  C5        DIVD4   PUSH B
  529. 36DE  E1                POP H
  530. 36DF  223032    DIVD6   SHLD AR3
  531. 36E2  C36400            JMP Ioret
  532.  
  533. 36E5  CDEB36    DBZER   CALL DBZ1
  534. 36E8  C3B936            JMP DIVD7
  535.  
  536. 36EB  210632    DBZ1    LXI H,DBZ
  537. 36EE  CD0C04            CALL Msg
  538. 36F1  C9                RET
  539.  
  540. 36F2  CD7D34    Mod     CALL Pop        ;S(t) to DE
  541.  
  542.  
  543.  
  544. L/1 Interpreter Source list                     August 10, 1980
  545. Copywrite 1980 by Ralph E. Kenyon Jr.           page  10
  546.  
  547. 36F5  D5                PUSH D          ;S(t) to top of stack
  548. 36F6  CD7D34            CALL Pop        ;S(t-1) to DE
  549. 36F9  E3                XTHL            ;S(t) to HL
  550. 36FA  7C                MOV A,H         ;lets see if
  551. 36FB  B7                ORA A           ;the idiot wants
  552. 36FC  C20937            JNZ Mod1        ;to divide by
  553. 36FF  85                ADD L           ;zero.
  554. 3700  C20937            JNZ Mod1
  555. 3703  CDEB36            CALL DBZ1
  556. 3706  C32D37            JMP Mod3        ;He does!
  557.  
  558. 3709  7A        Mod1    MOV A,D         ;see if we
  559. 370A  B7                ORA A           ;start with
  560. 370B  C21D37            JNZ TEST        ;zero
  561. 370E  83                ADD E
  562. 370F  C21D37            JNZ TEST
  563. 3712  C32D37            JMP Mod3
  564.  
  565. 3715  EB        SUBTR   XCHG
  566. 3716  D5                PUSH D          ;Save
  567. 3717  CD8234            CALL MinDE
  568. 371A  19                DAD D           ;Add -DE
  569. 371B  D1                POP D           ;Restore
  570. 371C  EB                XCHG
  571. 371D  7A        TEST    MOV A,D         ;Hi byte of S(t)
  572. 371E  BC                CMP H
  573. 371F  DA3037            JC Done         ;Hi byte of S(t-1)
  574.                                         ;<Hi byte of S(t)
  575. 3722  C21537            JNZ SUBTR       ;its bigger
  576. 3725  7B                MOV A,E         ;It's equal so
  577. 3726  BD                CMP L           ;Check lo byte
  578. 3727  DA3037            JC Done
  579. 372A  C21537            JNZ SUBTR       ;its bigger
  580. 372D  110000    Mod3    LXI D,0         ;its equal
  581. 3730  EB        Done    XCHG
  582. 3731  E3                XTHL
  583. 3732  D1                POP D
  584. 3733  C37834            JMP Push        ;let push return for us
  585.  
  586. 3736  CD7D34    Neg     CALL Pop        ;S(t) to DE
  587. 3739  CD8234            CALL MinDE
  588. 373C  C37834            JMP Push        ;DE to S(t) let push ret
  589.  
  590. 373F  CD7D34    Not     CALL Pop        ;look
  591. 3742  7A                MOV A,D         ;hi byte
  592. 3743  B7                ORA A           ;set flags
  593. 3744  C25137            JNZ Not2
  594. 3747  83        Not1    ADD E           ;lo byte
  595. 3748  C25137            JNZ Not2
  596. 374B  110100            LXI D,1         ;its Zero so change result
  597. 374E  C37834            JMP Push
  598. 3751  110000    Not2    LXI D,0
  599. 3754  C37834            JMP Push        ;onto stack let
  600.                                         ;push ret for us
  601.  
  602.  
  603.  
  604. L/1 Interpreter Source list                     August 10, 1980
  605. Copywrite 1980 by Ralph E. Kenyon Jr.           page  11
  606.  
  607.  
  608. 3757  CD7D34    Swap    CALL Pop        ;S(t)
  609. 375A  D5                PUSH D          ;to TOS
  610. 375B  CD7D34            CALL Pop        ;S(t-1) to DE
  611. 375E  E3                XTHL            ;S(t) TO HL, t-1 to TOS
  612. 375F  EB                XCHG            ;S(t) to DE, S(t-1) to HL
  613. 3760  E3                XTHL            ;t-1 to HL, S(t-1) to TOS
  614. 3761  CD7834            CALL Push       ;S(t-1) to TOS
  615. 3764  D1                POP D           ;S(t-1) to DE
  616. 3765  C37834            JMP Push        ;S(t-1) to TMS
  617.                                         ;let push return for us.
  618.  
  619. 3768  2A2732    retn    LHLD Base
  620. 376B  110300            LXI D,3
  621. 376E  19                DAD D
  622. 376F  29                DAD H
  623. 3770  EB                XCHG
  624. 3771  CD8234            CALL MinDE
  625. 3774  2A3232            LHLD TMStack
  626. 3777  19                DAD D
  627. 3778  CD7D34            CALL Pop        ;TMPC
  628. 377B  D5                PUSH D
  629. 377C  C1                POP B
  630. 377D  CD7D34            CALL Pop        ;Dynamic link
  631. 3780  EB                XCHG
  632. 3781  222732            SHLD Base
  633. 3784  EB                XCHG
  634. 3785  23                INX H           ;We don't need that
  635. 3786  23                INX H           ;static link now
  636. 3787  C9                RET
  637.  
  638. 3788  CD7D34    Sete    CALL Pop
  639. 378B  D5                PUSH D
  640. 378C  CD7D34            CALL Pop
  641. 378F  E3                XTHL
  642. 3790  7A                MOV A,D
  643. 3791  BC                CMP H
  644. 3792  C2A137            JNZ SETE1
  645. 3795  7B                MOV A,E
  646. 3796  BD                CMP L
  647. 3797  C2A137            JNZ SETE1
  648. 379A  110100            LXI D,1         ;they're equal
  649. 379D  E1                POP H
  650. 379E  C37834            JMP Push        ;let push return for us
  651.  
  652. 37A1  110000    SETE1   LXI D,0         
  653. 37A4  E1                POP H
  654. 37A5  C37834            JMP Push        ;let push return for us
  655.  
  656. 37A8  CD7D34    Setlg   CALL Pop
  657. 37AB  D5                PUSH D          ;S(t) to TOS
  658. 37AC  CD7D34            CALL Pop        ;S(t-1) to DE
  659. 37AF  E3                XTHL            ;S(t) to HL
  660. 37B0  3A2632            LDA Inst
  661.  
  662.  
  663.  
  664. L/1 Interpreter Source list                     August 10, 1980
  665. Copywrite 1980 by Ralph E. Kenyon Jr.           page  12
  666.  
  667. 37B3  E602              ANI 2           ;Setgt?
  668. 37B5  CAB937            JZ Set1
  669. 37B8  EB                XCHG            ;Reverse for Setgt
  670. 37B9  CD8234    Set1    CALL MinDE      ;-S(t-1)
  671. 37BC  19                DAD D           ;Want 0<S(t)-S(t-1)
  672. 37BD  2B                DCX H           ;Sign test uses >= 0
  673. 37BE  7C                MOV A,H         ;Look at sign
  674. 37BF  B7                ORA A           ;Set flags
  675. 37C0  E1                POP H           ;TMSP
  676. 37C1  110100            LXI D,1         ;Assume true
  677. 37C4  F2C837            JP Set2         ;Jump if true
  678. 37C7  1B                DCX D           ;Falls thru if false
  679. 37C8  C37834    Set2    JMP Push        ;Let Push return for us
  680.  
  681.                 ;Note: RAV assumes that the address on the stack
  682.                 ;is a relative address from the TM stack pointer
  683.                 ;with 1 for each 16 bit push or pop.  We multiply
  684.                 ;the two's complement by 2 and add it to
  685.                 ;the address in TMStack (Top of memory)
  686.  
  687. 37CB  CD7D34    Rav     CALL Pop        ;Get S(t)
  688. 37CE  E5                PUSH H          ;Save SP
  689. 37CF  2A3232            LHLD TMStack
  690. 37D2  13                INX D           ;We need to be above by 1
  691. 37D3  CD8234            CALL MinDE
  692. 37D6  19                DAD D           ;(MEMTOP-2*T)
  693. 37D7  19                DAD D           ;stack address now in hl
  694. 37D8  CD7D34            CALL Pop        ;Get S(S(t))
  695. 37DB  E1                POP H           ;Restore TMSP
  696. 37DC  C37834            JMP Push        ;S(t):=S(S(t))
  697.  
  698. 37DF  CD7D34    Sto     CALL Pop        ;S(t) to be stowed
  699. 37E2  D5                PUSH D          ;save it
  700. 37E3  CD7D34            CALL Pop        ;address to stow S(t) in
  701. 37E6  E3                XTHL            ;(We'll want S(t) first)
  702. 37E7  E5                PUSH H          ;Need to use HL
  703. 37E8  CD8234            CALL MinDE      ;Convert Stack
  704. 37EB  2A3232            LHLD TMStack    ;address
  705. 37EE  19                DAD D           ;(MEMTOP-2*T)
  706. 37EF  19                DAD D           ;stack address now in hl
  707. 37F0  D1                POP D           ;Get S(t)
  708. 37F1  CD7834            CALL Push       ;S(S(T-1)):=S(T)
  709. 37F4  E1                POP H           ;T-2 to TMSP
  710. 37F5  C9                RET
  711.  
  712. 37F6  CD7D34    Inc     CALL Pop        ;S(t) to de, t-1 in HL
  713. 37F9  CD8234            CALL MinDE
  714. 37FC  19                DAD D
  715. 37FD  19                DAD D           ;S(t)+t-1 to HL
  716. 37FE  C9                RET
  717.  
  718. 37FF  E5        INB     PUSH H          ;Save VMSP
  719. 3800  C5                PUSH B          ;Save VMPC
  720. 3801  216F38            LXI H,Ifpr      ;get one from him.
  721.  
  722.  
  723.  
  724. L/1 Interpreter Source list                     August 10, 1980
  725. Copywrite 1980 by Ralph E. Kenyon Jr.           page  13
  726.  
  727. 3804  11CB2D    IFR1    LXI D,FILE      ;File descriptor buffer
  728. 3807  014441            LXI B,'AD'      ;Default file extension
  729. 380A  CDDB34            CALL Gf
  730. 380D  D28C38            JNC IFR2        ;Gfid found the file
  731.                                         ;so go read it
  732.  
  733. 3810  AF                XRA A           ;Checks for error
  734. 3811  82                ADD D           ;code 0503H
  735. 3812  FE05              CPI 5
  736. 3814  C20F04            JNZ Err         ;Wrong one
  737. 3817  83                ADD E
  738. 3818  FE08              CPI 8           ;adds up to 8
  739. 381A  C20F04            JNZ Err         ;No good!
  740. 381D  212638            LXI H,Cinb      ;Set up to get input
  741. 3820  22EB35            SHLD IFR        ;from the consol
  742. 3823  C1                POP B           ;VMPC
  743. 3824  E1                POP H           ;VMSP
  744. 3825  C9                RET
  745.  
  746.                 ; Additional inputs jump to here
  747.  
  748. 3826  CD200C    Cinb    CALL WH0        ;We're inputting from
  749. 3829  E5                PUSH H          ;the consol
  750. 382A  2A3232            LHLD TMStack    ;Where it goes
  751. 382D  77                MOV M,A         ;Put it in
  752. 382E  E1                POP H           ;VMSP
  753. 382F  C9                RET
  754.  
  755. 3830  0D546865  Ifprn   DB CR,'The input file''s empty.'
  756. 3834  20696E70
  757. 3838  75742066
  758. 383C  696C6527
  759. 3840  7320656D
  760. 3844  7074792E
  761. 3848  0D576861  DB CR,'What''s the continuation file''s name? ',0
  762. 384C  74277320
  763. 3850  74686520
  764. 3854  636F6E74
  765. 3858  696E7561
  766. 385C  74696F6E
  767. 3860  2066696C
  768. 3864  65277320
  769. 3868  6E616D65
  770. 386C  3F2000
  771. 386F  57686174  Ifpr    DB 'What''s the input file name? ',0
  772. 3873  27732074
  773. 3877  68652069
  774. 387B  6E707574
  775. 387F  2066696C
  776. 3883  65206E61
  777. 3887  6D653F20
  778. 388B  00
  779.  
  780. 388C  21CB2D    IFR2    LXI H,FILE      ;READ starts here
  781.  
  782.  
  783.  
  784. L/1 Interpreter Source list                     August 10, 1980
  785. Copywrite 1980 by Ralph E. Kenyon Jr.           page  14
  786.  
  787. 388F  7E                MOV A,M
  788. 3890  E607              ANI 7           ;trim down to drive no.
  789. 3892  326032            STA IFD         ;Drive number
  790. 3895  23                INX H
  791. 3896  7E                MOV A,M         ;FDE flag byte
  792. 3897  E61F              ANI 1FH         ;trim to file size
  793. 3899  C603              ADI 3           ;point past extension
  794. 389B  5F                MOV E,A         ;Put into DE
  795. 389C  1600              MVI D,0
  796. 389E  19                DAD D           ;Add to Address in HL
  797. 389F  EB                XCHG            ;FDA pointer now in DE
  798. 38A0  216132            LXI H,IFA       ;Where the addresses go
  799. 38A3  0E04              MVI C,4         ;4 bytes to copy
  800. 38A5  1A        CIFD    LDAX D          ;Get the data
  801. 38A6  77                MOV M,A         ;from the FDB (FILE)
  802. 38A7  23                INX H           ;and copy into the
  803. 38A8  13                INX D           ;areas for our Dio
  804. 38A9  0D                DCR C           ;routines
  805. 38AA  C2A538            JNZ CIFD        ;More to copy
  806. 38AD  216733            LXI H,IFB+100H  ;Reset the
  807. 38B0  226532            SHLD IFP        ;buffer pointer too
  808. 38B3  21BC38            LXI H,Inb       ;Furthur calls to Reader
  809. 38B6  22EB35            SHLD IFR        ;the reader
  810. 38B9  C1                POP B           ;VMPC
  811. 38BA  E1                POP H           ;VMSP
  812. 38BB  C9                RET
  813.  
  814.                 ; Routine to input from an open file
  815.  
  816. 38BC  E5        Inb     PUSH H          ;Save VMSP
  817. 38BD  C5                PUSH B          ;Save VMPC
  818. 38BE  2A6532    RD1     LHLD IFP
  819. 38C1  116733            LXI D,IFB+100H
  820. 38C4  7C                MOV A,H
  821. 38C5  BA                CMP D
  822. 38C6  C2CE38            JNZ RD2
  823. 38C9  7D                MOV A,L
  824. 38CA  BB                CMP E
  825. 38CB  CADA38            JZ RD3
  826. 38CE  7E        RD2     MOV A,M
  827. 38CF  23                INX H
  828. 38D0  226532            SHLD IFP
  829. 38D3  C1                POP B           ;VMPC
  830. 38D4  2A3232            LHLD TMStack    ;Here's where
  831. 38D7  77                MOV M,A         ;we put it
  832. 38D8  E1                POP H           ;VMSP
  833. 38D9  C9                RET
  834.  
  835. 38DA  2A6332    RD3     LHLD IFS
  836. 38DD  7C                MOV A,H
  837. 38DE  B7                ORA A
  838. 38DF  C2EC38            JNZ RD4
  839. 38E2  B5                ORA L
  840. 38E3  C2EC38            JNZ RD4
  841.  
  842.  
  843.  
  844. L/1 Interpreter Source list                     August 10, 1980
  845. Copywrite 1980 by Ralph E. Kenyon Jr.           page  15
  846.  
  847.  
  848.                 ; We've reached the end of the input file
  849.                 ; so, we ask for another one
  850.  
  851. 38E6  213038            LXI H,Ifprn
  852. 38E9  C30438            JMP IFR1
  853.  
  854. 38EC  2B        RD4     DCX H           ;Got to get another
  855. 38ED  226332            SHLD IFS        ;sector from disk
  856. 38F0  216732            LXI H,IFB
  857. 38F3  226532            SHLD IFP
  858. 38F6  D5                PUSH D
  859. 38F7  EB                XCHG
  860. 38F8  2A6132            LHLD IFA        ;Get disk address
  861. 38FB  23                INX H           ;update for next time
  862. 38FC  226132            SHLD IFA        ;and save
  863. 38FF  2B                DCX H           ;back to the one we want
  864. 3900  C5                PUSH B          ;going to preserve B
  865. 3901  0601              MVI B,1         ;Read
  866. 3903  3A6032            LDA IFD         ;Drive for input file
  867. 3906  4F                MOV C,A         ;into C
  868. 3907  3E01              MVI A,1         ;1 sector
  869. 3909  CD0604            CALL Dio        ;Get it
  870. 390C  C1                POP B           ;restore
  871. 390D  D1                POP D           ;this too
  872. 390E  D2BE38            JNC RD1         ;Now we can get another byte
  873. 3911  C30F04            JMP Err
  874.  
  875. 3914  57686174  Ofpr    DB 'What''s the output file name? ',0
  876. 3918  27732074
  877. 391C  6865206F
  878. 3920  75747075
  879. 3924  74206669
  880. 3928  6C65206E
  881. 392C  616D653F
  882. 3930  2000
  883.  
  884. 3932  FE03      CK1     CPI 3           ;Now lets check
  885. 3934  C20F04            JNZ Err         ;for the 0503 error
  886. 3937  82                ADD D
  887. 3938  FE08              CPI 8           ;adds up to 8
  888. 393A  C20F04            JNZ Err         ;No good!
  889. 393D  214639            LXI H,Coutb
  890. 3940  22ED35            SHLD OFR
  891. 3943  C1                POP B           ;VMPC
  892. 3944  E1                POP H           ;VMSP
  893. 3945  C9                RET
  894.  
  895.                 ; Ouputs jump to here
  896.  
  897. 3946  E5        Coutb   PUSH H          ;We're outputting to the consol
  898. 3947  2A3232            LHLD TMStack
  899. 394A  7E                MOV A,M
  900. 394B  CD240C            CALL WH1
  901.  
  902.  
  903.  
  904. L/1 Interpreter Source list                     August 10, 1980
  905. Copywrite 1980 by Ralph E. Kenyon Jr.           page  16
  906.  
  907. 394E  E1                POP H
  908. 394F  C9                RET
  909.  
  910. 3950  E5        OUTB    PUSH H          ;Save VMSP
  911. 3951  C5                PUSH B          ;Save VMPC
  912. 3952  211439            LXI H,Ofpr      ;get one from him.
  913. 3955  113432            LXI D,FDB       ;File descriptor buffer
  914. 3958  014941            LXI B,'AI'      ;('AI' is default ext)
  915. 395B  CDDB34            CALL Gf
  916. 395E  D2CF34            JNC Out2
  917. 3961  AF                XRA A           ;Checks for error
  918. 3962  83                ADD E           ;code 0300H or 0503H
  919. 3963  C23239            JNZ CK1         ;Does not return
  920. 3966  82                ADD D           ;unless one was
  921. 3967  FE03              CPI 3           ;found. Sets CARRY
  922. 3969  C20F04            JNZ Err         ;Need to have
  923.                                         ;a 0300 error
  924. 396C  213432            LXI H,FDB       ;We need to save this
  925.                                         ;for close
  926. 396F  7E                MOV A,M
  927. 3970  E607              ANI 7           ;trim down to drive no.
  928. 3972  326733            STA OFD         ;Drive number
  929. 3975  23                INX H
  930. 3976  7E                MOV A,M         ;FDE flag byte
  931. 3977  E61F              ANI 1FH         ;trim to file size
  932. 3979  C603              ADI 3           ;point past extension
  933. 397B  5F                MOV E,A         ;Put into DE
  934. 397C  1600              MVI D,0
  935. 397E  19                DAD D           ;Add to Address in HL
  936. 397F  EB                XCHG            ;FDA pointer now in DE
  937. 3980  216833            LXI H,OFA       ;Where the addresses go
  938. 3983  0E04              MVI C,4         ;4 bytes to copy
  939. 3985  1A        COFD    LDAX D          ;Get the data
  940. 3986  77                MOV M,A         ;from the FDB
  941. 3987  23                INX H           ;and copy into the
  942. 3988  13                INX D           ;areas for our Dio
  943. 3989  0D                DCR C           ;routines
  944. 398A  C28539            JNZ COFD        ;More to copy
  945. 398D  216E33            LXI H,OFB       ;Reset the
  946. 3990  226C33            SHLD OFP        ;buffer pointer too
  947. 3993  219C39            LXI H,Outb      ;characters thru
  948. 3996  22ED35            SHLD OFR
  949. 3999  C1                POP B           ;VMPC
  950. 399A  E1                POP H           ;VMSP
  951. 399B  C9                RET
  952.  
  953.                 ; Routine to output to an open file
  954.                 ; thru calls to Outb
  955.  
  956. 399C  F5        Outb    PUSH PSW        ;For writing
  957. 399D  C5                PUSH B
  958. 399E  D5                PUSH D
  959. 399F  E5                PUSH H
  960. 39A0  216400            LXI H,Ioret
  961.  
  962.  
  963.  
  964. L/1 Interpreter Source list                     August 10, 1980
  965. Copywrite 1980 by Ralph E. Kenyon Jr.           page  17
  966.  
  967. 39A3  E5                PUSH H
  968. 39A4  2A3232            LHLD TMStack    ;Get the char
  969. 39A7  7E                MOV A,M
  970.  
  971.                 ;The rest of this is called as a subroutine for
  972.                 ;filling up the last sector with zeros also.
  973.  
  974. 39A8  2A6C33    Store   LHLD OFP
  975. 39AB  77                MOV M,A         ;put char in buffer
  976. 39AC  116E34            LXI D,Flag
  977. 39AF  1A                LDAX D
  978. 39B0  B7                ORA A
  979. 39B1  C2B639            JNZ Store1
  980. 39B4  3D                DCR A           ;We've been had!
  981. 39B5  12                STAX D
  982. 39B6  23        Store1  INX H           ;bump pointer
  983. 39B7  226C33            SHLD OFP
  984. 39BA  116E33            LXI D,OFB
  985. 39BD  25                DCR H
  986. 39BE  7C                MOV A,H
  987. 39BF  BA                CMP D
  988. 39C0  C0                RNZ
  989. 39C1  7D                MOV A,L
  990. 39C2  BB                CMP E
  991. 39C3  C0                RNZ
  992.  
  993.                 ;pointer now points at OFB so do DIO.
  994.                 
  995. 39C4  226C33            SHLD OFP        ;DE points at OFB
  996. 39C7  2A6A33            LHLD OFS        ;Number of sectors
  997. 39CA  23                INX H           ;One more
  998. 39CB  226A33            SHLD OFS
  999. 39CE  2A6833            LHLD OFA        ;Disk address
  1000. 39D1  23                INX H           ;Up date for next time
  1001. 39D2  226833            SHLD OFA
  1002. 39D5  2B                DCX H           ;Here's where we write
  1003. 39D6  3A6733            LDA OFD         ;Drive
  1004. 39D9  4F                MOV C,A         ;Drive no.
  1005. 39DA  0600              MVI B,0         ;Write
  1006. 39DC  3E01              MVI A,1         ;one sector
  1007. 39DE  CD0604            CALL Dio
  1008. 39E1  DA0F04            JC Err
  1009. 39E4  C9                RET
  1010.  
  1011.                 ; Routines for closing the file
  1012.  
  1013.  
  1014. 39E5  E5        TURNOFF PUSH H          ;Save VMSP
  1015. 39E6  C5                PUSH B          ;Save VMPC
  1016. 39E7  3A6E34            LDA Flag        ;See if we're
  1017.                                         ;still Virgin.
  1018. 39EA  B7                ORA A           ;(Also for closing
  1019. 39EB  CA213A            JZ TO1          ;a read file.)
  1020. 39EE  3A6C33    Fill    LDA OFP         ;Not virgin,
  1021.  
  1022.  
  1023.  
  1024. L/1 Interpreter Source list                     August 10, 1980
  1025. Copywrite 1980 by Ralph E. Kenyon Jr.           page  18
  1026.  
  1027. 39F1  FE6E              CPI OFB AND 0FFH
  1028. 39F3  3E00              MVI A,0
  1029. 39F5  CAFE39            JZ Close1
  1030. 39F8  CDA839            CALL Store      ;fill up last sector
  1031. 39FB  C3EE39            JMP Fill        ;with zeros
  1032.  
  1033. 39FE  213532    Close1  LXI H,FDB+1
  1034. 3A01  7E                MOV A,M
  1035. 3A02  E61F              ANI 1FH         ;strip down to length
  1036. 3A04  C605              ADI 5           ;Point past ext and FDA
  1037. 3A06  5F                MOV E,A
  1038. 3A07  1600              MVI D,0
  1039. 3A09  19                DAD D
  1040. 3A0A  EB                XCHG            ;adr of DNS now in DE
  1041. 3A0B  2A6A33            LHLD OFS
  1042. 3A0E  EB                XCHG
  1043. 3A0F  73                MOV M,E
  1044. 3A10  23                INX H
  1045. 3A11  72                MOV M,D         ;length now updated
  1046. 3A12  213432            LXI H,FDB
  1047. 3A15  7E                MOV A,M
  1048. 3A16  E67F              ANI 7FH
  1049. 3A18  77                MOV M,A
  1050. 3A19  3E01              MVI A,1         ;enter new output
  1051.                                         ;file in directory
  1052. 3A1B  CDDD34            CALL Gf1
  1053. 3A1E  DA0F04            JC Err
  1054. 3A21  AF        TO1     XRA A           ;Virgin exit.
  1055. 3A22  326E34            STA Flag
  1056. 3A25  215039    Out1    LXI H,OUTB      ;Restore calling address
  1057. 3A28  22ED35            SHLD OFR        ;to open a file
  1058. 3A2B  C1                POP B           ;VMPC
  1059. 3A2C  E1                POP H           ;VMSP
  1060. 3A2D  C9                RET
  1061.  
  1062.                 Origin  hlt     ;L0 MACRO instruction
  1063. 3A2E  80        Origin  DB 80H
  1064. 3A2F            Pgmaddr EQU $
  1065.                 
  1066.                 ; We load the executable file on top
  1067.                 ;of the Start code !!
  1068.  
  1069. 3A2F  2A802D    Start   LHLD MEMTOP
  1070. 3A32  223232            SHLD TMStack
  1071. 3A35  210032            LXI H,USER
  1072. 3A38  36C9              MVI M,RET       ;Don't START again
  1073. 3A3A  2AC72D            LHLD CMPTR      ;Cmd pointer
  1074. 3A3D  7E                MOV A,M
  1075. 3A3E  FE0D              CPI CR
  1076. 3A40  CAD434            JZ Out3
  1077. 3A43  113432            LXI D,FDB       ;File descriptor block
  1078.                                         ;built by Gfid
  1079. 3A46  01304C            LXI B,4C30H     ;L/0 extension for
  1080.                                         ;default is L0
  1081.  
  1082.  
  1083.  
  1084. L/1 Interpreter Source list                     August 10, 1980
  1085. Copywrite 1980 by Ralph E. Kenyon Jr.           page  19
  1086.  
  1087. 3A49  3E60              MVI A,60H
  1088. 3A4B  CDDD34            CALL Gf1
  1089. 3A4E  DAD834            JC Out          ;Something Wrong!
  1090. 3A51  213432            LXI H,FDB
  1091. 3A54  7E                MOV A,M
  1092. 3A55  E607              ANI 7           ;Kill flags
  1093. 3A57  77                MOV M,A
  1094. 3A58  23                INX H           ;Move up to FDE flags.
  1095. 3A59  7E                MOV A,M
  1096. 3A5A  E61F              ANI 1FH         ;Kill flags
  1097. 3A5C  C603              ADI 3           ;Point past ext
  1098. 3A5E  5F                MOV E,A
  1099. 3A5F  1600              MVI D,0
  1100. 3A61  19                DAD D           ;Addr of FDA
  1101. 3A62  5E                MOV E,M
  1102. 3A63  23                INX H
  1103. 3A64  56                MOV D,M
  1104. 3A65  23                INX H
  1105. 3A66  3A3432            LDA FDB
  1106. 3A69  4F                MOV C,A         ;Drive to C
  1107. 3A6A  0601              MVI B,1         ;Read
  1108. 3A6C  7E                MOV A,M         ;DNS
  1109. 3A6D  EB                XCHG            ;FDA to HL
  1110. 3A6E  112F3A            LXI D,Pgmaddr   ;Where to put it
  1111. 3A71  C3E534            JMP GETP
  1112.  
  1113.                         END
  1114.  
  1115.  
  1116.  
  1117. Error total = 0
  1118.  
  1119.  
  1120.         Macros defined in this assembly:
  1121.  
  1122. L0CODE          add             bnz             br
  1123. call            div             hlt             inb
  1124. inc             lad             lic             mod
  1125. mul             neg             nop             not
  1126. outb            rav             ret             sete
  1127. setgt           setlt           sto             sub
  1128. swap
  1129.  
  1130.         Labels defined in this assembly:
  1131.  
  1132. AR1     322C AR2        322E AR3        3230 BASE       34C5
  1133. BASE1   34AD Base       3227 Br         35B9 CIFD       38A5
  1134. CK1     3932 CMPTR      2DC7 COFD       3985 CONV       348C
  1135. CR      000D Call       353C Cinb       3826 Close1     39FE
  1136. Coutb   3946 DBZ        3206 DBZ1       36EB DBZER      36E5
  1137. DIVD    3699 DIVD1      36AC DIVD2      36BF DIVD3      36CB
  1138. DIVD4   36DD DIVD6      36DF DIVD7      36B9 Dio        0406
  1139. Done    3730 Err        040F FDB        3234 FILE       2DCB
  1140. Fetch   3471 Fill       39EE Flag       346E GETP       34E5
  1141.  
  1142.  
  1143.  
  1144. L/1 Interpreter Source list                     August 10, 1980
  1145. Copywrite 1980 by Ralph E. Kenyon Jr.           page  20
  1146.  
  1147. GO      3511 GStL       349D GStL1      34A2 Gf         34DB
  1148. Gf1     34DD Halt       360B IFA        3261 IFB        3267
  1149. IFD     3260 IFP        3265 IFR        35EB IFR1       3804
  1150. IFR2    388C IFS        3263 IFflg      346F INB        37FF
  1151. Ifpr    386F Ifprn      3830 Inb        38BC Inc        37F6
  1152. Inst    3226 Ioret      0064 Jtbl       35CB Lad        352A
  1153. Level   322B Lic        3581 Lic1       358F MEMTOP     2D80
  1154. MULT    364E MULT1      365F MULT2      366B MULT3      3672
  1155. MULT4   3677 MULT5      3681 MULT6      3686 MULT7      3690
  1156. MULT8   3693 MinDE      3482 Mod        36F2 Mod1       3709
  1157. Mod3    372D Msg        040C Neg        3736 Not        373F
  1158. Not1    3747 Not2       3751 OFA        3368 OFB        336E
  1159. OFD     3367 OFP        336C OFR        35ED OFS        336A
  1160. OFflg   3470 OUTB       3950 Ofpr       3914 Origin     3A2E
  1161. Out     34D8 Out0       34D6 Out1       3A25 Out2       34CF
  1162. Out3    34D4 Outb       399C Ovrto      0412 Pgmaddr    3A2F
  1163. Pop     347D Push       3478 RD1        38BE RD2        38CE
  1164. RD3     38DA RD4        38EC Rav        37CB Ret        0528
  1165. SETE1   37A1 SUBT       36D4 SUBTR      3715 Set1       37B9
  1166. Set2    37C8 Sete       3788 Setlg      37A8 Start      3A2F
  1167. Static  3229 Sto        37DF Store      39A8 Store1     39B6
  1168. Swap    3757 TEST       371D TMStack    3232 TO1        3A21
  1169. TURNOFF 39E5 USER       3200 WH0        0C20 WH1        0C24
  1170. Warm    0403 addsub     3616 branch     35A6 lic2       359B
  1171. lic3    359E lic4       35A2 muldiv     362D opr        356D
  1172. oprlic  3569 retn       3768
  1173.  
  1174.