home *** CD-ROM | disk | FTP | other *** search
-
- ***************************************
- * OPERATOR TABLES
- ***************************************
-
- OPR$TAB$B5:
- DW BLK1$A
- DW BLK2$A
- DW BLK3$A
- DW BLK4$A
- DW BLK5$A
- DW BLK1$B
-
- OPR$TAB$C1:
- DB (BLK2$A-BLK1$A)
- DB (BLK3$A-BLK2$A)/2
- DB (BLK4$A-BLK3$A)/3
- DB (BLK5$A-BLK4$A)/4
- DB (BLK1$B-BLK5$A)/5
-
- OPR$TAB$C6:
- DW BLK1$B
- DW BLK2$B
- DW BLK3$B
- DW BLK4$B
- DW BLK5$B
-
- BLK1$A:
- DB CR
- DB '('
- DB ')'
- DB '*'
- DB '+'
- DB ','
- DB '-'
- DB '/'
- DB 'A'
- DB 'B'
- DB 'C'
- DB 'D'
- DB 'E'
- DB 'H'
- DB 'L'
- DB 'M'
- DB 'X'
- DB 'Y'
-
- BLK2$A:
- DB 'DB'
- DB 'DI'
- DB 'DS'
- DB 'DW'
- DB 'EI'
- DB 'IF'
- DB 'IN'
- DB 'OR'
- DB 'SP'
-
- BLK3$A:
- DB 'ACI'
- DB 'ADC'
- DB 'ADD'
- DB 'ADI'
- DB 'ANA'
- DB 'AND'
- DB 'ANI'
- DB 'BIT'
- DB 'CCD'
- DB 'CCI'
- DB 'CMA'
- DB 'CMC'
- DB 'CMP'
- DB 'CPI'
- DB 'DAA'
- DB 'DAD'
- DB 'DCR'
- DB 'DCX'
- DB 'DEF'
- DB 'END'
- DB 'EQU'
- DB 'EXX'
- DB 'HLT'
- DB 'IM0'
- DB 'IM1'
- DB 'IM2'
- DB 'IND'
- DB 'INI'
- DB 'INP'
- DB 'INR'
- DB 'INX'
- DB 'JMP'
- DB 'JRC'
- DB 'JRZ'
- DB 'LDA'
- DB 'LDD'
- DB 'LDI'
- DB 'LXI'
- DB 'MOD'
- DB 'MOV'
- DB 'MVI'
- DB 'NEG'
- DB 'NOP'
- DB 'NOT'
- DB 'ORA'
- DB 'ORG'
- DB 'ORI'
- DB 'OUT'
- DB 'POP'
- DB 'PSW'
- DB 'RAL'
- DB 'RAR'
- DB 'RES'
- DB 'RET'
- DB 'RLC'
- DB 'RLD'
- DB 'RRC'
- DB 'RRD'
- DB 'RST'
- DB 'SBB'
- DB 'SBI'
- DB 'SET'
- DB 'SHL'
- DB 'SHR'
- DB 'STA'
- DB 'STC'
- DB 'SUB'
- DB 'SUI'
- DB 'SYM'
- DB 'XOR'
- DB 'XRA'
- DB 'XRI'
-
- BLK4$A:
- DB 'CALL'
- DB 'CCDR'
- DB 'CCIR'
- DB 'COPY'
- DB 'DADC'
- DB 'DADX'
- DB 'DADY'
- DB 'DJNZ'
- DB 'DSBC'
- DB 'EXAF'
- DB 'INDR'
- DB 'INIR'
- DB 'JMPR'
- DB 'JRNC'
- DB 'JRNZ'
- DB 'LBCD'
- DB 'LDAI'
- DB 'LDAR'
- DB 'LDAX'
- DB 'LDDR'
- DB 'LDED'
- DB 'LDIR'
- DB 'LHLD'
- DB 'LINK'
- DB 'LIXD'
- DB 'LIYD'
- DB 'LSPD'
- DB 'OTDR'
- DB 'OTIR'
- DB 'OUTD'
- DB 'OUTI'
- DB 'OUTP'
- DB 'PCHL'
- DB 'PCIX'
- DB 'PCIY'
- DB 'PUSH'
- DB 'RALR'
- DB 'RARR'
- DB 'RETI'
- DB 'RETN'
- DB 'RLCR'
- DB 'RRCR'
- DB 'SBCD'
- DB 'SDED'
- DB 'SHLD'
- DB 'SIXD'
- DB 'SIYD'
- DB 'SLAR'
- DB 'SPHL'
- DB 'SPIX'
- DB 'SPIY'
- DB 'SRAR'
- DB 'SRLR'
- DB 'SSPD'
- DB 'STAI'
- DB 'STAR'
- DB 'STAX'
- DB 'XCHG'
- DB 'XREF'
- DB 'XTHL'
- DB 'XTIX'
- DB 'XTIY'
-
- BLK5$A:
- DB 'EJECT'
- DB 'ENDIF'
- DB 'MACRO'
- DB 'OUTDR'
- DB 'OUTIR'
- DB 'TITLE'
-
- ******************************************************
- * OPCODE INDEX
- * FORMAT (SOURCE FORM)
- * XX-- OPCODE
- * --XX INDEX
- ******************************************************
-
- BLK1$B:
- DW 0A0FH ;CR
- DW 140CH ;(
- DW 1E0DH ;)
- DW 5000H ;*
- DW 4605H ;+
- DW 0A0EH ;COMMA
- DW 4606H ;-
- DW 5001H ;/
- DW 0710H ;A
- DW 0010H ;B
- DW 0110H ;C
- DW 0210H ;D
- DW 0310H ;E
- DW 0410H ;H
- DW 0510H ;L
- DW 0610H ;M
- DW 1410H ;X
- DW 2410H ;Y
-
- BLK2$B:
- DW 00111H ;DB
- DW 0F313H ;DI
- DW 00211H ;DS
- DW 00311H ;DW
- DW 0FB13H ;EI
- DW 00811H ;IF
- DW 0DB1AH ;IN
- DW 0280AH ;OR
- DW 00610H ;SP
-
- BLK3$B:
- DW 0CE1AH ;ACI
- DW 0881DH ;ADC
- DW 0801DH ;ADD
- DW 0C61AH ;ADI
- DW 0A01DH ;ANA
- DW 03209H ;AND
- DW 0E61AH ;ANI
- DW 04028H ;BIT
- DW 0A91CH ;CCD
- DW 0A11CH ;CCI
- DW 02F13H ;CMA
- DW 03F13H ;CMC
- DW 0B81DH ;CMP
- DW 0FE1AH ;CPI
- DW 02713H ;DAA
- DW 00915H ;DAD
- DW 0051EH ;DCR
- DW 00B1FH ;DCX
- DW 00B11H ;DEF (was NOW/SET)
- DW 00411H ;END
- DW 00711H ;EQU
- DW 0D913H ;EXX
- DW 07613H ;HLT
- DW 0461CH ;IM0
- DW 0561CH ;IM1
- DW 05E1CH ;IM2
- DW 0AA1CH ;IND
- DW 0A21CH ;INI
- DW 04021H ;INP
- DW 0041EH ;INR
- DW 0031FH ;INX
- DW 0C317H ;JMP
- DW 0382BH ;JRC
- DW 0282BH ;JRZ
- DW 03A17H ;LDA
- DW 0A81CH ;LDD
- DW 0A01CH ;LDI
- DW 00114H ;LXI
- DW 05002H ;MOD
- DW 04018H ;MOV
- DW 00619H ;MVI
- DW 0441CH ;NEG
- DW 00013H ;NOP
- DW 03C08H ;NOT
- DW 0B01DH ;ORA
- DW 00A11H ;ORG
- DW 0F61AH ;ORI
- DW 0D31AH ;OUT
- DW 0C116H ;POP
- DW 00610H ;PSW
- DW 01713H ;RAL
- DW 01F13H ;RAR
- DW 08028H ;RES
- DW 0C913H ;RET
- DW 00713H ;RLC
- DW 06F1CH ;RLD
- DW 00F13H ;RRC
- DW 0671CH ;RRD
- DW 0C720H ;RST
- DW 0981DH ;SBB
- DW 0DE1AH ;SBI
- DW 0C028H ;SET
- DW 05003H ;SHL
- DW 05004H ;SHR
- DW 03217H ;STA
- DW 03713H ;STC
- DW 0901DH ;SUB
- DW 0D61AH ;SUI
- DW 00D11H ;SYM
- DW 0280BH ;XOR
- DW 0A81DH ;XRA
- DW 0EE1AH ;XRI
-
- BLK4$B:
- DW 0CD17H ;CALL
- DW 0B91CH ;CCDR
- DW 0B11CH ;CCIR
- DW 01011H ;COPY
- DW 04A24H ;DADC
- DW 00929H ;DADX
- DW 0092AH ;DADY
- DW 0102BH ;DJNZ
- DW 04224H ;DSBC
- DW 00813H ;EXAF
- DW 0BA1CH ;INDR
- DW 0B21CH ;INIR
- DW 0182BH ;JMPR
- DW 0302BH ;JRNC
- DW 0202BH ;JRNZ
- DW 04B25H ;LBCD
- DW 0571CH ;LDAI
- DW 05F1CH ;LDAR
- DW 00A1BH ;LDAX
- DW 0B81CH ;LDDR
- DW 05B25H ;LDED
- DW 0B01CH ;LDIR
- DW 02A17H ;LHLD
- DW 00611H ;LINK
- DW 02A26H ;LIXD
- DW 02A27H ;LIYD
- DW 07B25H ;LSPD
- DW 0BB1CH ;OTDR
- DW 0B31CH ;OTIR
- DW 0AB1CH ;OUTD
- DW 0A31CH ;OUTI
- DW 04121H ;OUTP
- DW 0E913H ;PCHL
- DW 0E922H ;PCIX
- DW 0E923H ;PCIY
- DW 0C516H ;PUSH
- DW 0102CH ;RALR
- DW 0182CH ;RARR
- DW 04D1CH ;RETI
- DW 0451CH ;RETN
- DW 0002CH ;RLCR
- DW 0082CH ;RRCR
- DW 04325H ;SBCD
- DW 05325H ;SDED
- DW 02217H ;SHLD
- DW 02226H ;SIXD
- DW 02227H ;SIYD
- DW 0202CH ;SLAR
- DW 0F913H ;SPHL
- DW 0F922H ;SPIX
- DW 0F923H ;SPIY
- DW 0282CH ;SRAR
- DW 0382CH ;SRLR
- DW 07325H ;SSPD
- DW 0471CH ;STAI
- DW 04F1CH ;STAR
- DW 0021BH ;STAX
- DW 0EB13H ;XCHG
- DW 00E11H ;XREF
- DW 0E313H ;XTHL
- DW 0E322H ;XTIX
- DW 0E323H ;XTIY
-
- BLK5$B:
- DW 00F11H ;EJECT
- DW 00511H ;ENDIF
- DW 00911H ;MACRO
- DW 0BB1CH ;OUTDR
- DW 0B31CH ;OUTIR
- DW 00C11H ;TITLE
-
- ***************************************
- * JMP,CALL,RET LIST
- ***************************************
-
- JCR$LIST:
- DB 'NZ'
- DB 'Z '
- DB 'NC'
- DB 'C '
- DB 'PO'
- DB 'PE'
- DB 'P '
- DB 'M '
-
- ***************************************
-
- L0C8F:
- MVI E,0FFH
- INR B
- MVI C,0
-
- ***************************************
- * SCAN FOR OPERATOR
- * SCHEME PROCEEDS AS A SUCCESSIVE APPROXIMATION
- ***************************************
-
- L0C94:
- XRA A
- MOV A,B
- ADD C
- RAR
- CMP E
- JZ L0CD0
- MOV E,A
- PUSH H
- PUSH D
- PUSH B
- PUSH H
- MOV B,D
- MOV C,B
- MVI D,0
- LXI H,0
- L0CA8:
- DAD D
- DCR B
- JNZ L0CA8
- POP D
- DAD D
- LXI D,STRING
- L0CB2:
- LDAX D
- CMP M ;COMPARE INPUT STRING TO LIST.
- INX D
- INX H
- JNZ L0CC2
- DCR C
- JNZ L0CB2
- POP B
- POP D
- POP H
- MOV A,E
- RET
- L0CC2:
- POP B
- POP D
- POP H
- JC L0CCC
- MOV C,E
- JMP L0C94
- L0CCC:
- MOV B,E
- JMP L0C94
- L0CD0:
- XRA A
- INR A
- RET
- L0CD3:
- LDA STRING
- LXI B,LC217
- CPI 'J'
- RZ
- MVI B,0C4H
- CPI 'C'
- RZ
- LXI B,LC013
- CPI 'R'
- RET
-
- ***************************************
- * SCAN JMP,CALL,RET CONDITIONAL LIST
- ***************************************
-
- SCAN$JCR:
- LDA STR$SIZE
- CPI 4
- JNC L0D19
- CPI 3
- JZ L0CFE
- CPI 2
- JNZ L0D19
- LXI H,STRING+2
- MVI M,' '
- L0CFE:
- LXI B,8
- LXI D,JCR$LIST
- L0D04:
- LXI H,STRING+1
- LDAX D
- CMP M
- INX D
- JNZ L0D11
- LDAX D
- INX H
- CMP M
- RZ
- L0D11:
- INX D
- INR B
- DCR C
- JNZ L0D04
- INR C
- RET
- L0D19:
- XRA A
- INR A
- RET
-
- ***************************************
- * PREPARE TO SCAN FOR OPERATOR
- * FIRST INDEX INTO LISTS.
- ***************************************
-
- SCAN$OP:
- LDA STR$SIZE ;STRING CTR 0120H
- MOV C,A
- DCR A
- MOV E,A
- MVI D,0
- PUSH D
- CPI 5
- JNC L0D66 ;BR IF STRING > 5 CHAR. 0D66H
- LXI H,OPR$TAB$C1 ;BLOCK SIZE. 0AC1H
- DAD D
- MOV B,M ;B=NUMBER OF TABLE ENTRIES
- LXI H,OPR$TAB$B5
- DAD D
- DAD D
- MOV D,M
- INX H
- MOV H,M
- MOV L,D ;HL = START TABLE ADDRESS
- MOV D,C ;D = NUMBER CHARS IN STRING
- CALL L0C8F
- JNZ L0D51 ;OPERATOR NOT LISTED
- POP D
- LXI H,OPR$TAB$C6
- DAD D
- DAD D
- MOV E,M
- INX H
- MOV D,M ;POINT TO BLOCK ORG
- MOV L,A
- MVI H,0
- DAD H
- DAD D
- MOV A,M ;GET INDEX VALUES (BLK(X)$B
- INX H
- MOV B,M
- RET
- L0D51:
- POP D
- CALL L0CD3 ;IS FIRST CHARACTER A J,C OR R?
- RNZ ;NO--RETURN OP NOT FOUND
- PUSH B
- CALL SCAN$JCR ;IS IT FOLLOWED BY A CONDITION CODE?
- MOV A,B
- POP B
- RNZ ;NO--RETURN OP NOT FOUND
- ORA A ;A HAS THE CONDITION CODE FROM SCAN$JCR
- RAL
- RAL
- RAL
- ORA B
- MOV B,A
- MOV A,C
- CMP A
- RET
- L0D66:
- POP D
- XRA A
- INR A
- RET
-
- ***************************************
- * EXPRESSION STACKS
- * CONSISTS OF THREE STACKS
- * 00 = PRIMARY LIMIT 16
- * 01 = NEXT LEVEL 10
- * 02 = NEXT LEVEL 10
- ***************************************
-
- EXP$STAK$PTR02:
- DB 0
- EXP$STACK$01: ;EXP$STACK$01
- DB 0,0,0,0,0,0,0,0,0,0
- EXP$STACK$02:
- DB 0,0,0,0,0,0,0,0,0,0
- EXP$STACK$00:
- DB 0,0,0,0,0,0,0,0,0,0,0,0,0
- DB 0,0,0
- EXP$STAK$PTR01:
- DB 0
- EXP$STAK$PTR$00:
- DB 0
-
- ***************************************
- * PUT ITEM ON EXPRESSION STACK
- ***************************************
-
- PUT$EXP00$00:
- XCHG
- LXI H,EXP$STAK$PTR$00
- MOV A,M
- CPI 16 ;LIMIT EXCEEDED?
- JC PUT$EXP00$01
- CALL EXP$ERROR
- MVI M,0
- PUT$EXP00$01:
- MOV A,M
- INR M
- INR M
- MOV C,A
- MVI B,0
- LXI H,EXP$STACK$00
- DAD B
- MOV M,E
- INX H
- MOV M,D
- RET
- PUT$EXP$02:
- PUSH PSW
- LXI H,EXP$STAK$PTR01
- MOV A,M
- CPI 10 ;LIMIT EXCEEDED?
- JC PUT$EXP$03
- MVI M,0
- CALL EXP$ERROR
- PUT$EXP$03:
- MOV E,M
- MVI D,0
- INR M
- POP PSW
- LXI H,EXP$STACK$01 ;EXP$STACK$01H
- DAD D
- MOV M,A
- LXI H,EXP$STACK$02
- DAD D
- MOV M,B
- RET
-
- ***************************************
- * GET AN EXPRESSION ITEM
- * RETURN WITH IT IN (HL)
- ***************************************
-
- GET$EXP$ITEM:
- LXI H,EXP$STAK$PTR$00
- MOV A,M
- ORA A
- JNZ L0DDC
- CALL EXP$ERROR
- LXI H,0
- RET
- L0DDC:
- DCR M
- DCR M
- MOV C,M
- MVI B,0
- LXI H,EXP$STACK$00
- DAD B
- MOV C,M
- INX H
- MOV H,M
- MOV L,C
- RET
-
- ***************************************
- * GET TWO EXPRESSION ITEMS
- * RETURN WITH 1ST IN H
- * 2ND IN D
- ***************************************
-
- GET$2EXP$ITEMS:
- CALL GET$EXP$ITEM
- XCHG
- CALL GET$EXP$ITEM
- RET
-
- ***************************************
- * GET EXPRESSION OPERATOR
- ***************************************
-
- GET$EXP$OP:
- MOV L,A
- MVI H,0
- DAD H
- LXI D,EXP$OP$INDEX
- DAD D
- MOV E,M
- INX H
- MOV H,M
- MOV L,E
- PCHL
- EXP$OP$INDEX:
- DW AB$00 ; *
- DW AB$01 ; /
- DW AB$02 ; MOD
- DW AB$03 ; SHL
- DW AB$04 ; SHR
- DW AB$05 ; +
- DW AB$06 ; -
- DW AB$07 ; (unary)
- DW AB$08 ; NOT
- DW AB$09 ; AND
- DW AB$10 ; OR
- DW AB$11 ; XOR
- DW EXP$ERROR
-
- ***************************************
- * GET TWO EXPRESSION ITEMS
- * RETURN WITH 2ND ITEM IN ACC
- ***************************************
-
- GET$2EXP$01:
- CALL GET$2EXP$ITEMS
- MOV A,D
- ORA A
- JNZ L0E25
- MOV A,E
- CPI 11H
- RC
- L0E25:
- CALL EXP$ERROR
- MVI A,10H
- RET
- L0E2B:
- XRA A
- SUB L
- MOV L,A
- MVI A,0
- SBB H
- MOV H,A
- RET
- L0E33:
- CALL GET$2EXP$ITEMS
- L0E36:
- XCHG
- SHLD L0E69
- LXI H,L0E6B
- MVI M,11H
- LXI B,0
- PUSH B
- XRA A
- L0E44:
- MOV A,E
- RAL
- MOV E,A
- MOV A,D
- RAL
- MOV D,A
- DCR M
- POP H
- RZ
- MVI A,0
- ACI 0
- DAD H
- MOV B,H
- ADD L
- LHLD L0E69
- SUB L
- MOV C,A
- MOV A,B
- SBB H
- MOV B,A
- PUSH B
- JNC L0E62
- DAD B
- XTHL
- L0E62:
- LXI H,L0E6B
- CMC
- JMP L0E44
- L0E69:
- DB 0,0
- L0E6B:
- DB 0
- L0E6C:
- MOV B,H
- MOV C,L
- LXI H,0
- L0E71:
- XRA A
- MOV A,B
- RAR
- MOV B,A
- MOV A,C
- RAR
- MOV C,A
- JC L0E80
- ORA B
- RZ
- JMP L0E81
- L0E80:
- DAD D
- L0E81:
- XCHG
- DAD H
- XCHG
- JMP L0E71
-
- *****************************
- * MULTIPLY *
- *****************************
-
- AB$00: CALL GET$2EXP$ITEMS
- CALL L0E6C
- JMP PUT$EXP00$00
-
- *****************************
- * DIVIDE /
- *****************************
-
- AB$01: CALL L0E33
- XCHG
- JMP PUT$EXP00$00
-
- *****************************
- * MODULO ARITHMETIC (MOD)
- *****************************
-
- AB$02: CALL L0E33
- JMP PUT$EXP00$00
-
- *****************************
- * SHIFT LEFT SHL
- *****************************
-
- AB$03: CALL GET$2EXP$01
- L0EA0:
- ORA A
- JZ PUT$EXP00$00
- DAD H
- DCR A
- JMP L0EA0
-
- *****************************
- * SHIFT RIGHT SHR
- *****************************
-
- AB$04: CALL GET$2EXP$01
- L0EAC:
- ORA A
- JZ PUT$EXP00$00
- PUSH PSW
- XRA A
- MOV A,H
- RAR
- MOV H,A
- MOV A,L
- RAR
- MOV L,A
- POP PSW
- DCR A
- JMP L0EAC
-
- *****************************
- * PLUS +
- *****************************
-
- AB$05: CALL GET$2EXP$ITEMS
- L0EC0:
- DAD D
- JMP PUT$EXP00$00
-
- *****************************
- * MINUS -
- *****************************
-
- AB$06: CALL GET$2EXP$ITEMS
- XCHG
- CALL L0E2B
- JMP L0EC0
-
- *****************************
-
- AB$07: CALL GET$EXP$ITEM
- L0ED1:
- CALL L0E2B
- JMP PUT$EXP00$00
-
- *****************************
- * NOT
- *****************************
-
- AB$08: CALL GET$EXP$ITEM
- INX H
- JMP L0ED1
-
- *****************************
- * AND
- *****************************
-
- AB$09: CALL GET$2EXP$ITEMS
- MOV A,D
- ANA H
- MOV H,A
- MOV A,E
- ANA L
- MOV L,A
- JMP PUT$EXP00$00
-
- *****************************
- * OR
- *****************************
-
- AB$10: CALL GET$2EXP$ITEMS
- MOV A,D
- ORA H
- MOV H,A
- MOV A,E
- ORA L
- MOV L,A
- JMP PUT$EXP00$00
-
- *****************************
- * XOR
- *****************************
-
- AB$11: CALL GET$2EXP$ITEMS
- MOV A,D
- XRA H
- MOV H,A
- MOV A,E
- XRA L
- MOV L,A
- JMP PUT$EXP00$00
-
- *****************************
- * Input Expression Evaluator
- *****************************
-
- L0F02:
- LDA STR$TYPE
- CPI 4
- RNZ
- LDA STRING
- CPI CR ;Check Terminators
- RZ
- CPI ';'
- RZ
- CPI ','
- RZ
- CPI '!'
- RZ
- CPI '['
- RZ
- CPI ']'
- RZ
- RET
-
- L0F17:
- XRA A
- STA EXP$STAK$PTR01
- STA EXP$STAK$PTR$00
- DCR A
- STA EXP$STAK$PTR02
- LXI H,0
- SHLD L0161
- L0F28:
- CALL L0F02
- JNZ L0F5B
- L0F2E:
- LXI H,EXP$STAK$PTR01
- MOV A,M
- ORA A
- JZ L0F46
- DCR M
- MOV E,A
- DCR E
- MVI D,0
- LXI H,EXP$STACK$01
- DAD D
- MOV A,M
- CALL GET$EXP$OP
- JMP L0F2E
- L0F46:
- LDA EXP$STAK$PTR$00
- CPI 2
- CNZ EXP$ERROR
- LDA PRN$LINE
- CPI ' '
- RNZ
- LHLD EXP$STACK$00
- SHLD L0161
- RET
- L0F5B:
- LDA PRN$LINE
- CPI ' '
- JNZ L107D
- LDA STR$TYPE
- CPI 3
- JNZ L0F87
- LDA STR$SIZE
- ORA A
- CZ EXP$ERROR
- CPI 3
- CNC EXP$ERROR
- MVI D,0
- LXI H,STRING
- MOV E,M
- INX H
- DCR A
- JZ L0F83
- MOV D,M
- L0F83:
- XCHG
- JMP L106F
- L0F87:
- CPI 2
- JNZ L0F92
- LHLD STR$VAL
- JMP L106F
- L0F92:
- CALL SCAN$OP
- JNZ L102F
- CPI 10H
- JNC L1024
- CPI 0CH
- MOV C,A
- LDA EXP$STAK$PTR02
- JNZ L0FB3
- ORA A
- CZ EXP$ERROR
- MVI A,0FFH
- STA EXP$STAK$PTR02
- MOV A,C
- JMP L1001
- L0FB3:
- ORA A
- JNZ L100C
- L0FB7:
- PUSH B
- LDA EXP$STAK$PTR01
- ORA A
- JZ L0FDC
- MOV E,A
- DCR E
- MVI D,0
- LXI H,EXP$STACK$02
- DAD D
- MOV A,M
- CMP B
- JC L0FDC
- LXI H,EXP$STAK$PTR01
- MOV M,E
- LXI H,EXP$STACK$01
- DAD D
- MOV A,M
- CALL GET$EXP$OP
- POP B
- JMP L0FB7
- L0FDC:
- POP B
- MOV A,C
- CPI CR
- JNZ L1001
- LXI H,EXP$STAK$PTR01
- MOV A,M
- ORA A
- JZ L0FFA
- DCR A
- MOV M,A
- MOV E,A
- MVI D,0
- LXI H,EXP$STACK$01
- DAD D
- MOV A,M
- CPI 0CH
- JZ L0FFD
- L0FFA:
- CALL EXP$ERROR
- L0FFD:
- XRA A
- JMP L1006
- L1001:
- CALL PUT$EXP$02
- MVI A,0FFH
- L1006:
- STA EXP$STAK$PTR02
- JMP L107D
- L100C:
- MOV A,C
- CPI 5
- JZ L107D
- CPI 6
- JNZ L101C
- INR A
- MOV C,A
- JMP L0FB7
- L101C:
- CPI 8
- CNZ EXP$ERROR
- JMP L0FB7
- L1024:
- CPI 11H
- CZ EXP$ERROR
- MOV L,B
- MVI H,0
- JMP L106F
- L102F:
- LDA STR$TYPE
- CPI 4
- JNZ L104E
- LDA STRING
- CPI '$' ;24H
- JZ L1048
- CALL EXP$ERROR
- LXI H,0
- JMP L106F
- L1048:
- LHLD LOC$CTR2
- JMP L106F
- L104E:
- CALL SYM$SERCH
- CALL SYM$05
- JNZ L1062
- MVI A,'P' ;PHASE ERROR. 50H
- CALL ERR$COD
- CALL POST$SYM
- JMP L106C
- L1062:
- CALL SYM$18
- ANI 7
- MVI A,'U' ;UNDEFINED SYMBOL. 55H
- CZ ERR$COD
- L106C:
- CALL GET$SYM$VAL
- ;
- ; PUT XREF ITEM IN TABLE
- ;
- LDA PASS$NM
- ORA A
- JZ L106F
- LDA FLAG$BYT
- ANI XREFF ;XREF FLAG?
- JZ L106F
- PUSH H
- PUSH D
- INX D ;POINT TO SYMBOL LINE #.
- LHLD XREF$PTR ;GET NEXT XREF LOCATION
- LDAX D ;MOV IN SYMBOL LINE #.
- MOV M,A
- INX D
- INX H
- LDAX D
- MOV M,A
- INX H
- LDA LINE$NM
- MOV M,A
- INX H
- LDA LINE$NM+1
- MOV M,A
- LXI D,-7
- DAD D
- SHLD XREF$PTR
- XCHG
- LHLD SYM$TAB$PTR
- MOV A,L
- SUB E
- MOV A,H
- SBB D
- POP D
- POP H
- JNC SYM$15
- L106F:
- LDA EXP$STAK$PTR02
- ORA A
- CZ EXP$ERROR
- XRA A
- STA EXP$STAK$PTR02
- CALL PUT$EXP00$00
- L107D:
- CALL GET$STR
- JMP L0F28
-
- *****************************
- * EXPRESSION ERROR
- *****************************
-
- EXP$ERROR:
- PUSH H
- MVI A,'E' ;EXPRESSION ERROR. 45H
- CALL ERR$COD
- POP H
- RET
-
- *****************************
- * START OF PROCESSING
- *****************************
-
- MAIN:
- XRA A
- STA PASS$NM ;RESET PASS #
-
- LHLD CPM+6 ;GET TOP OF MEM
- LXI D,-808H ;BELOW CCP
- DAD D
- SHLD CCP$BEGIN
-
- LXI D,-8
- DAD D
- SHLD XREF$PTR ;INIT XREF POINTER
- CALL CL$SYM$HASH$LST ;CLEAR SYM$HASH$LST
-
- MAIN$00:
- CALL PRN$END$LINE ;PRINT END LINE
- LDA PASS$NM
- ADI '1'
- STA PAS$MSG+5
- LXI H,PAS$MSG ;ANNUNCIATE PASS 1
- CALL MSGOUT
- LXI H,SRCFCB ;MOVE FILE NAME
- CALL MOVNAM ;FROM TFCB TO SRC FCB
- CALL RESET$SRC ;RESET SOURCE FILE
- XRA A
- STA COPY$LEVEL
- STA OBJ$BYTE$CNT
- LXI H,0
- SHLD L1686
- SHLD LOC$CTR1
- SHLD LOC$CTR2
- SHLD L1688
-
- MAIN$01:
- CALL GET$STR ;GET STRING
-
- MAIN$02:
- LDA STR$TYPE
- CPI 2 ;IS IT NUMERIC?
- JZ MAIN$01
- CPI 4 ;OR OTHER DELIMITERS
- JNZ MAIN$03
- LDA STRING
- CPI '*'
- JNZ END$LINE
- CALL L159B
- JNZ SYNTAX$ERR
- JMP E$LINE$01
-
- MAIN$03:
- CPI 1 ;IF IT ISNT ALPHA, THEN ERROR
- JNZ SYNTAX$ERR
- CALL SCAN$OP ;SCAN OPERATION.
- JZ L1125 ;BR IF OPERATION FOUND.
- CALL SYM$SERCH ;ELSE SEE IF ITS A SYMBOL
- CALL SYM$05
- JNZ MAIN$04
- CALL POST$SYM
- LDA PASS$NM
- ORA A
- CNZ PHASE$ERR
- JMP MAIN$05
-
- MAIN$04:
- CALL SYM$18
- CPI 6
- JNZ MAIN$05
- CALL NOT$IMP$ERR
- JMP E$LINE$01
-
- MAIN$05:
- LHLD L1686
- MOV A,L
- ORA H
- CNZ LABLE$ERR
- LHLD SYM$HASH$PTR
- SHLD L1686
- CALL GET$STR
- LDA STR$TYPE
- CPI 4
- JNZ MAIN$02
- LDA STRING
- CPI ':'
- JNZ MAIN$02
- JMP MAIN$01