ASM80 :F1:UFORTH ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 1 LOC OBJ SEQ SOURCE STATEMENT 1 ; 0000 C31800 2 JMP UFORTH 3 ; 0003 00 4 UAREA: DB 0 ; ? 0004 0500 5 S0: DW 5 ; PTR TO ADDRESS OF PARAMETER STACK 0006 07 6 BASE: DB 7 ; RADIX FOR NUMBER BASE 0007 0800 7 DP: DW 8 ; DICTIONARY PTR 0009 0A00 8 CONTEXT: DW 0AH ; ADDRESS OF TOP OF VOCAB TO SEARCH FIRST 000B 0C00 9 CURRENT: DW 0CH ; PTR TO TOP OF THE VOCAB TO ADD NEW DEFS 000D 0E 10 STATE: DB 0EH ; FLAG EXECUTE/COMPILE 000E 0F00 11 INP: DW 0FH ; PTR TO REL LOCATION IN INPUT STREAM BUFFER 0010 1000 12 BLK: DW 10H ; CURRENT BLOCK DURING LOAD 0012 1400 13 SCR: DW 14H ; CURRENT EDITOR SCREEN NUMBER 0014 1600 14 DW 16H ; ? 0016 1800 15 RPTR: DW 18H ; RAM PTR TO FREE SPACE 16 17 UFORTH: ; ASSUME ALL DEVICES AND MEMORY INITIALIZED 0018 01 18 S2D: DB 1,2DH ; DICTIONARY ENTRY FOR "-" 0019 2D 001A 0000 19 DW 0 ; BOTTOM OF THE DICTIONARY 001C 1E00 20 DW SD20 ; CODE PTR 001E D1 21 SD20: POP D 001F 7B 22 MOV A,E 0020 2F 23 CMA 0021 5F 24 MOV E,A 0022 7A 25 MOV A,D 0023 2F 26 CMA 0024 57 27 MOV D,A 0025 13 28 INX D 0026 FED1 29 CPI 0D1H 0028 E1 30 POP H 0029 19 31 DAD D 002A C3B800 32 JMP NEXT 33 ; 002D 01 34 S21: DB 1,21H ; DICTIONARY ENTRY FOR ! 002E 21 002F 1800 35 DW S2D ; LINK DOWN 0031 3300 36 DW S210 ; CODE PTR 0033 E1 37 S210: POP H 0034 D1 38 POP D 0035 73 39 MOV M,E 0036 23 40 INX H 0037 72 41 MOV M,D 0038 C3B800 42 JMP NEXT 43 ; 44 ; (MATCH) SEARCHES FOR THE 1ST OCCURANCE OF A STRING-A IN STRING-B 45 ; FOR A COUNT OF CHARACTERS. RETURNS ADDRESS+1 OF LAST MATCHED 46 ; CHARACTER IN STRING-B AND A NON-ZERO ON STACK TOP IF A MATCH 47 ; FOUND, OTHERWISE 0. 48 ; 49 ; STACK TOP STRING-A 50 ; 2ND COUNT-A ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 2 LOC OBJ SEQ SOURCE STATEMENT 51 ; 3RD STRING-B 52 ; 4TH COUNT-B 53 ; 54 ; RETURNS TOP NOT-0 IF MATCH 55 ; 2ND ADDRESS OF LAST MATCHED CHARACTER IN STRING-B 56 ; 003B 07 57 MATCH: DB 7,28H,'MATCH',29H 003C 28 003D 4D415443 0041 48 0042 29 0043 2D00 58 DW S21 ; DOWNWARD LINK 0045 4700 59 DW MATCH0 ; CODE PTR 0047 60 60 MATCH0: MOV H,B ; SAVE BC 0048 69 61 MOV L,C 0049 C1 62 POP B ; POP COUNT-B 004A 79 63 MOV A,C ; SAVE COUNT-B IN A 004B C1 64 POP B ; POP STRING-B 004C D1 65 POP D ; POP COUNT-A 004D 57 66 MOV D,A ; SAVE COUNT-B IN D, COUNT-A IN E 004E E3 67 XTHL ; SAVE HL ON STACK, POP STRING-A TO HL 68 ; 69 MATCH1: ; BEGIN OUTER LOOP 004F 0A 70 LDAX B ; FETCH CHARA OF STRING-B 0050 BE 71 CMP M ; COMPARE TO CHAR OF STRING-A 0051 C27700 72 JNZ MATCH5 ; QUIT EARLY NO MATCH 0054 C5 73 PUSH B ; PUSH STRING-B TO STACK 0055 D5 74 PUSH D ; PUSH CNT-A IN E, CNT-B IN D 0056 E5 75 PUSH H ; PUSH STRING-A TO STACK 76 MATCH2: 0057 23 77 INX H ; POINT TO NEXT IN STRING-A 0058 03 78 INX B ; POINT TO NEXT IN STRING-B 0059 15 79 DCR D ; REDUCE CNT-B 005A C26300 80 JNZ MATCH3 ; IF DONE THEN DO RETURN 005D D1 81 POP D ; TAKE 3 OFF THE STACK 005E D1 82 POP D ; DE IS GOING TO RETURN AS NON-ZERO 005F C1 83 POP B 0060 C3B600 84 JMP WHPUSH ; BUT RETURN WITH LAST STRING-A 85 MATCH3: ; MORE TO DO 0063 1D 86 DCR E ; REDUCE CNT-A 0064 C26F00 87 JNZ MATCH4 ; IF NO MORE IN STRING-A 0067 C1 88 POP B ; CLEAR THE 4 OFF THE STACK 0068 C1 89 POP B 0069 C1 90 POP B 91 MATCH6: 006A C1 92 POP B ; 006B 53 93 MOV D,E ; E WAS ZERO, NOW D IS TOO, PUSH 0 ON STACK 006C C3B600 94 JMP WHPUSH ; NO MATCH FOUND 95 MATCH4: 006F 0A 96 LDAX B ; GET NEXT IN STRING-B 0070 BE 97 CMP M ; SAME AS IN STRING-A? 0071 C25700 98 JNZ MATCH2 ; LOOP IF MATCHED 0074 E1 99 POP H ; OTHERWISE QUIT. POP OFF THE STACK 0075 D1 100 POP D 0076 C1 101 POP B ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 3 LOC OBJ SEQ SOURCE STATEMENT 102 MATCH5: 0077 23 103 INX H ; POINT TO NEXT IN STRING-A 0078 1D 104 DCR E ; REDUCE CNT-A 0079 C24F00 105 JNZ MATCH1 ; OUTER LOOP, E SAYS MORE 007C C36A00 106 JMP MATCH6 ; E WAS ZERO, RETURN 0 (NO MATCH) 107 ; 108 Z3BS: ; REALLY, CODE ;S STOPS THE LOADING OF A SCREEN 007F 3B 109 DB 3BH,'S' ; HEAD 0080 53 0081 3B00 110 DW MATCH ; DOWNWARD LINK 0083 8500 111 DW Z3BS0 ; CODE POINTER 112 Z3BS0: U 0085 2A0000 113 LHLD R ; GET POINTER R ( 0) 0088 4E 114 MOV C,M ; USE THAT TO RESTORE BC POINTER 0089 23 115 INX H 008A 46 116 MOV B,M 008B 23 117 INX H U 008C 220000 118 SHLD R ; NEW R ( 113) 008F C3B800 119 JMP NEXT 120 ; 0092 03 121 Z3FDD: DB 3,3FH,'DD' ; FOR INTEL SBC-202 DD DISK CONTROLLER 0093 3F 0094 4444 0096 7F00 122 DW Z3BS ; DOWNWARD LINK 0098 9A00 123 DW Z3FDD0 ; CODE PTR 124 Z3FDD0: 009A DB78 125 IN 78H 009C 210000 126 LXI H,0 ; PREPARE RESULT 009F E610 127 ANI 10H ; ISOLATE READY BIT 00A1 C2B700 128 JNZ HPUSH ; QUIT EARLY 00A4 23 129 INX H ; MAKE RESULT = 1 00A5 C3B700 130 JMP HPUSH ; NOW RETURN 131 ; 00A8 01 132 AT: DB 1,40H ; "@" GETS DATA AT THE ADDRESS ON STACK 00A9 40 00AA 9200 133 DW Z3FDD ; DOWNWARD LINK 00AC AE00 134 DW AT0 135 AT0: 00AE E1 136 POP H 00AF 5E 137 MOV E,M 00B0 23 138 INX H 00B1 56 139 MOV D,M 00B2 D5 140 PUSH D 00B3 C3B800 141 JMP NEXT 142 143 144 00B6 D5 145 WHPUSH: PUSH D 00B7 E5 146 HPUSH: PUSH H 147 NEXT: 148 149 END PUBLIC SYMBOLS EXTERNAL SYMBOLS USER SYMBOLS ISIS-II 8080/8085 MACRO ASSEMBLER, V2.0 MODULE PAGE 4 AT A 00A8 AT0 A 00AE BASE A 0006 BLK A 0010 CONTEX A 0009 CURREN A 000B DP A 0007 HPUSH A 00B7 INP A 000E MATCH A 003B MATCH0 A 0047 MATCH1 A 004F MATCH2 A 0057 MATCH3 A 0063 MATCH4 A 006F MATCH5 A 0077 MATCH6 A 006A NEXT A 00B8 RPTR A 0016 S0 A 0004 S21 A 002D S210 A 0033 S2D A 0018 SCR A 0012 SD20 A 001E STATE A 000D UAREA A 0003 UFORTH A 0018 WHPUSH A 00B6 Z3BS A 007F Z3BS0 A 0085 Z3FDD A 0092 Z3FDD0 A 009A ASSEMBLY COMPLETE, 2 ERRORS ( 118)