home *** CD-ROM | disk | FTP | other *** search
-
- ; ===========================================================
- ; CLASS.Z80
- ; predicates, classifiers and tag-movers for E-Prolog
- ; June 22, 1985
-
- .Z80
-
- FALSE EQU 0
- TRUE EQU 1
- EMPTY EQU -1
- UNDEF EQU -2
-
- HT EQU 9
- LF EQU 10
- CR EQU 13
- CTLZ EQU 26
-
- CPM EQU 0000H
- BDOS EQU CPM+0005H
- CDMA EQU CPM+0080H
- TPA EQU CPM+0100H
-
-
- ;BOOLEAN
- ;atomp(p)
- ; char * p;
- ; {
- ; return (nelistp(p) && symbp(first(p)));
- ; }
- ATOMP::
- PUSH HL
- CALL NELP
- JP Z,POPF
- CALL @LEFT
- CALL SYMBP
- POP HL
- RET
-
- ;BOOLEAN
- ;clausep(p)
- ; char * p;
- ; {
- ; return (nelistp(p) && atomp(first(p)));
- ; }
- CLP::
- PUSH HL
- CALL NELP
- JP Z,POPF
- CALL @LEFT
- CALL ATOMP
- POP HL
- RET
-
- ;BOOLEAN
- ;listp(p)
- ; char * p;
- ; {
- ; return (p == empty || nelistp(p));
- ; }
- LISTP::
- PUSH HL
- CALL NELP
- JP NZ,POPT
- LD DE,EMPTY
- CALL CPHL##
- JP Z,POPT
- JP POPF
-
- ;BOOLEAN
- ;nelistp(p)
- ; char * p;
- ; {
- ; return (hbot <= p && p < hfree);
- ; }
- NELP::
- PUSH HL
- LD DE,(STOP##)
- CALL CPHL##
- JP C,POPF
- LD DE,(HFREE##)
- CALL CPHL##
- JP NC,POPF
- JP POPT
-
- ;BOOLEAN
- ;numbp(p)
- ; char * p;
- ; {
- ; return (0 <= p && p < sbot);
- ; }
- NUMBP::
- PUSH HL
- LD DE,(SBOT)
- CALL CPHL##
- JP C,POPT
- JP POPF
-
- ;BOOLEAN
- ;substp(x)
- ; /* distinguish (SUBST *) from (SEXPR *) in SUBVAL */
- ; SUBVAL * x;
- ; {
- ; return varp(x->vname);
- ; }
- SUBSTP::
- PUSH HL
- CALL @VNAME
- CALL VARP
- POP HL
- RET
-
- ;BOOLEAN
- ;symbp(p)
- ; char * p;
- ; {
- ; return (sbot <= p && p < sfree);
- ; }
- SYMBP::
- PUSH HL
- LD DE,(SBOT##)
- CALL CPHL##
- JP C,POPF
- LD DE,(SFREE##)
- CALL CPHL##
- JP NC,POPF
- JP POPT
-
- ;BOOLEAN
- ;varp(p)
- ; SYMBOL * p;
- ; {
- ; return (symbp(p) && (p->string[0] == '?'));
- ; }
- VARP::
- PUSH HL
- CALL SYMBP
- JR Z,POPF
- CALL @STR
- LD A,(HL)
- CP '?'
- JR Z,POPT
- JR POPF
- POPT: LD A,1
- OR A
- POP HL
- RET
- POPF: XOR A
- POP HL
- RET
-
- ; ------------ indirect reference routines ----------------
-
- INDIR::
- LD A,(HL)
- INC HL
- LD H,(HL)
- LD L,A
- RET
- @LINDIR:
- PUSH HL
- ADD HL,BC
- LINDIR::
- LD (HL),E
- INC HL
- LD (HL),D
- POP HL
- RET
- @INDIR: ADD HL,DE
- JR INDIR
- @IND0 EQU INDIR
- @IND2: LD DE,2
- JR @INDIR
- @IND4: LD DE,4
- JR @INDIR
- @IND6: LD DE,6
- JR @INDIR
- @LIND0: LD BC,0
- JR @LINDIR
- @LIND2: LD BC,2
- JR @LINDIR
- @LIND4: LD BC,4
- JR @LINDIR
- @LIND6: LD BC,6
- JR @LINDIR
-
- ; for (SYMBOL *) or VARIABLE
- PUBLIC @ADDR,@LPTR,@RPTR,@LADDR,@LLPTR,@LRPTR,@STR
- @ADDR EQU @IND0
- @LPTR EQU @IND2
- @RPTR EQU @IND4
- @LADDR EQU @LIND0
- @LLPTR EQU @LIND2
- @LRPTR EQU @LIND4
- @STR: LD DE,6 ; pointer
- ADD HL,DE
- RET
-
- ; for (NODE *) or PAIR
- PUBLIC @LEFT,@RIGHT,@LLEFT,@LRIGHT
- @LEFT EQU @IND0
- @RIGHT EQU @IND2
- @LLEFT EQU @LIND0
- @LRIGHT EQU @LIND2
-
- ; for (SUBST *) or LSUBST
- PUBLIC @VNAME,@BACK,@FORW,@LVNAME,@LBACK,@LFORW
- @VNAME EQU @IND0
- @BACK EQU @IND2
- @FORW EQU @IND4
- @LVNAME EQU @LIND0
- @LBACK EQU @LIND2
- @LFORW EQU @LIND4
-
- ; for (SEXPR *)
- PUBLIC @EXPR,@SLIST,@LEXPR,@LSLIST
- @EXPR EQU @IND0
- ;@BACK as above
- @SLIST EQU @IND4
- @LEXPR EQU @LIND0
- ;@LBACK as above
- @LSLIST EQU @LIND4
-
- ; for (ALPHASTATE *)
- PUBLIC @PRED,@XBACK
- @PRED EQU @IND0
- XPRED:: LD L,(IX+0)
- LD H,(IX+1)
- RET
- XGOAL:: LD L,(IX+2)
- LD H,(IX+3)
- RET
- XDATB:: LD L,(IX+4)
- LD H,(IX+5)
- RET
- XBACK:: LD L,(IX+6)
- LD H,(IX+7)
- RET
- @XBACK EQU @IND6
- XLPRED::
- LD (IX+0),L
- LD (IX+1),H
- RET
- XLGOAL::
- LD (IX+2),L
- LD (IX+3),H
- RET
- XLDATB::
- LD (IX+4),L
- LD (IX+5),H
- RET
- XLBACK::
- LD (IX+6),L
- LD (IX+7),H
- RET
-
- ; for (BETASTATE *)
- YPRED:: LD L,(IY+0)
- LD H,(IY+1)
- RET
- YASS:: LD L,(IY+2)
- LD H,(IY+3)
- RET
- YLPRED::
- LD (IY+0),L
- LD (IY+1),H
- RET
- YLASS:: LD (IY+2),L
- LD (IY+3),H
- RET
- YSUBST:: PUSH IY ; pointer
- POP HL
- @SUBST:: INC HL
- INC HL
- INC HL
- INC HL
- RET
-
- END