00001 *************************
00002 *
00003 * CF83COR7.ASM
00004 * MDJ 06-13-91
00005 *
00006 * CF83 CORE WORDS
00007 * SET #7
00008 *
00009 * "FORGET"
00010 *
00011 *************************
00012 *
00013 * MUST ALTER  ON
00014 * ==========  ==
00015 * CF83COR6    ZRGETN
00016 *
00017 *************************
00018 *
00019 ZOCABN  EQU     $6B96
00020 COLON   EQU     $07
00021 SEMI    EQU     $0D
00022 DPDP    EQU     $1B
00023 TDPDP   EQU     $1D
00024 LAST    EQU     $1F
00025 TLAST   EQU     $21
00026 TCON    EQU     $25
00027 TCUR    EQU     $29
00028 VOCAB   EQU     $0989
00029 CONTXT  EQU     $098B
00030 CURENT  EQU     $098D
00031 VAF00   EQU     $0991
00032 VAF26   EQU     $09F9
00033 FENCEL  EQU     $09FB
00034 ZESTR7  EQU     $559A
00035 ZTICKC  EQU     $6705
00036         ORG     $6C89
00037 ZRGETN  FCB     6
00038         FCC     'FORGET'
00039 FRGETL  FDB     ZOCABN
00040         FDB     0
00041 FRGETC  FDB     COLON
00042 FRGETP  FDB     FRGETA
00043         FDB     ZTICKC
00044         FDB     FRGETB
00045         FDB     SEMI
00046 FRGETA  FDB     *+2
00047         PSHS    X
00048         LDX     CONTXT  SAVE CONTEXT VOCABULARY POINTER
00049         STX     CTEMP
00050         LDX     CURENT  MAKE CURRENT VOCAB. SEARCH TOP
00051         STX     CONTXT
00052         LEAX    -2,X
00053         STX     VOCAB
00054         PULS    X
00055         LDX     ,Y++
00056         JMP     [,X++]
00057 FRGETB  FDB     *+2
00058         PSHS    A,B,X,Y
 
 
 
 
 
 
 
 
00059         PULU    Y       GET FORGET WORD CFA FROM U-STACK
00060         LEAY    -4,Y    POINT TO FORGET WORD LFA
00061         LDX     ,Y      GET NFA OF PREVIOUS WORD
00062         LDB     ,X      GET CHARACTER COUNT
00063         ANDB    #127    CLEAR HIGH BIT
00064         ABX             BUMP PAST WORD NAME
00065         LEAX    3,X     POINT TO PREVIOUS WORD FFA
00066         LDY     ,X      GET NFA OF FORGET WORD
00067         CMPY    FENCEL  IS IT GREATER THAN FENCE ADDRESS?
00068         BHI     FRGTB1  GO IF YES
00069         LDY     FENCEL  USE FENCE ADDRESS INSTEAD
00070 FRGTB1  STY     FRGTXX  TEMPORARILY STORE FORGET ADDRESS
00071         LDX     [VOCAB] POINT TO FIRST WORD NFA
00072         CMPX    FRGTXX  WOULD CURRENT VOCAB. BE DELETED?
00073         BLO     FRGTB2  GO IF NO
00074         JMP     ZESTR7  ERROR - RESTART
00075 FRGTB2  STY     DPDP    SET NEW DICTIONARY POINTER
00076         TFR     Y,X     COPY DPDP TO X
00077         LDB     ,X      GET CHARACTER COUNT
00078         ANDB    #127    CLEAR HIGH BIT
00079         ABX             BUMP PAST WORD NAME
00080         LEAX    1,X     POINT TO LFA
00081         LDX     ,X      GET NEW LAST WORD NFA
00082         STX     [CURENT] SET NEW CURRENT ADDRESS
00083         STX     LAST
00084         LDB     ,X      GET CHARACTER COUNT
00085         ANDB    #127    CLEAR HIGH BIT
00086         ABX             BUMP PAST WORD NAME
00087         LEAX    3,X     POINT TO FFA
00088         CLR     ,X+     CLEAR FFA
00089         CLR     ,X
00090         LDX     #VAF00  POINT TO FORTH FIRST WORD NFA
00091 FRGTB3  CMPX    #VAF26  DONE?
00092         BHS     FRGTB7  GO IF YES
00093         LDD     ,X      GET ENTRY (FIRST WORD NFA)
00094         CMPD    #0      IS IT EMPTY?
00095         BEQ     FRGTB6  GO IF YES
00096         CMPD    DPDP    IS IT TO BE DELETED?
00097         BLO     FRGTB4  GO IF NO
00098         PSHS    X       SAVE X REGISTER
00099         LDX     ,X      GET FIRST WORD NFA
00100         LEAX    1,X     POINT TO FIRST CHARACTER IN NAME
00101         CLR     ,X      CORRUPT VOCABULARY NAME
00102         PULS    X       RESTORE X REGISTER
00103         CLR     ,X+     CLEAR VAF AND VAL
00104         CLR     ,X+
00105         CLR     ,X+
00106         CLR     ,X+
00107         BRA     FRGTB3  RETURN FOR NEXT VAF
00108 FRGTB4  LDD     2,X     GET VAL ENTRY
00109         CMPD    DPDP    IS IT BELOW DPDP
00110         BLO     FRGTB6  GO IF YES
00111         PSHS    X       SAVE X REGISTER
00112         TFR     D,X     MOVE VAL ENTRY TO X
00113         BRA     FRGTBX
00114 FRGTB5  LDB     ,X      GET LAST WORD CHARACTER COUNT
00115         ANDB    #127    CLEAR HIGH BIT
00116         ABX             BUMP PAST WORD NAME
 
 
 
 
 
 
 
 
00117         LEAX    1,X     POINT TO LFA
00118         LDX     ,X      GET PREVIOUS WORD NFA
00119 FRGTBX  CMPX    DPDP    IS IT LESS THAN NEW DPDP?
00120         BHS     FRGTB5  GO IF NO
00121         TFR     X,D     MOVE NEW VAL ENTRY TO D
00122         PULS    X       RESTORE X REGISTER
00123         PSHS    X       SAVE IT AGAIN
00124         STD     2,X     STORE NEW VAL ADDRESS
00125         TFR     D,X     NEW VAL ENTRY BACK TO X
00126         LDB     ,X      GET CHARACTER COUNT
00127         ANDB    #127    CLEAR HIGH BIT
00128         ABX             BUMP PAST WORD NAME
00129         LEAX    3,X     POINT TO FFA
00130         CLR     ,X+     CLEAR FFA
00131         CLR     ,X
00132         PULS    X       RESTORE X REGISTER AGAIN
00133 FRGTB6  LEAX    4,X     POINT TO NEXT VAF
00134         BRA     FRGTB3  RETURN FOR NEXT VAF
00135 FRGTB7  LDX     CTEMP   RESTORE CONTEXT VOCABULARY POINTER
00136         STX     CONTXT
00137         LEAX    -2,X
00138         STX     VOCAB
00139         LDX     [CONTXT] GET CONTEXT FIRST WORD NFA
00140         CMPX    #0      WAS VOCABULARY DELETED?
00141         BNE     FRGTB8  GO IF NO
00142         LDX     CURENT  MAKE CURRENT VOCAB. SEARCH TOP
00143         STX     CONTXT
00144         LEAX    -2,X
00145         STX     VOCAB
00146 FRGTB8  LDX     DPDP    SET TEMPORARY PARAMETERS
00147         STX     TDPDP
00148         LDX     LAST
00149         STX     TLAST
00150         LDX     [CURENT]
00151         STX     TCUR
00152         LDX     [CONTXT]
00153         STX     TCON
00154         PULS    A,B,X,Y
00155         LDX     ,Y++
00156         JMP     [,X++]
00157 CTEMP   RMB     2
00158 FRGTXX  RMB     2
00159 ZEND    NOP
00160         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
