
PAGE 01    DAI FIRMWARE 3EB26-3EC44  V1.1

002                         ORG   :EB26
003                 *
004                 *
005                 *
006                 ************
007                 * L - LOOK *
008                 ************
009                 *
010 EB26 0E03       LOOKK   MVI   C,:03     Nr datablocks allowed
011 EB28 CD07EB             CALL  :EB07     Scan keyb, display char,
012                                         get addresses on stack
013 EB2B 2A5D00             LHLD  :005D     Get addr next instr
014 EB2E EB                 XCHG            in DE
015 EB2F 79                 MOV   A,C       Get nr of inputs done
016 EB30 FE03               CPI   :03       No addr given?
017 EB32 3E00               MVI   A,:00
018 EB34 CC56EB             CZ    :EB56     No addr: Check CR given
019 EB37 C441EB             CNZ   :EB41     Else: store windows and
020                                         start program
021 EB3A 325000             STA   :0050     Set Look flag
022 EB3D EB                 XCHG            Addr next instr in HL
023 EB3E C335EF             JMP   :EF35     Init RST 0
024                 *
025                 * SET LOOK WINDOWS. START LOOK:
026                 *
027                 * Entry: A=0, C=3 minus number of fields read.
028                 * Exit:  Input 2 fields: A,C = 0.
029                 *        Input 3 fields: A,C = FF. DE corrupted.
030                 *        B preserved, HL corrupted.
031                 *
032 EB41 0D         L3E178  DCR   C
033 EB42 0D                 DCR   C
034 EB43 CA62EA             JZ    :EA62     Error if only 1 addr given
035 EB46 E1                 POP   H         Get returnaddr from stack
036 EB47 E3                 XTHL            haddr window in HL
037 EB48 224800             SHLD  :0048     Save haddr
038 EB4B E1                 POP   H         Return addr from stack
039 EB4C E3                 XTHL            laddr window in HL
040 EB4D 224A00             SHLD  :004A     Save laddr
041 EB50 0C                 INR   C
042 EB51 C8                 RZ              Ready if only window given
043                             
044                 * If startaddress given:
045                             
046 EB52 3D                 DCR   A         A=FF
047 EB53 E1                 POP   H         Get returnaddr from stack
048 EB54 D1                 POP   D         Get startaddr program in DE
049 EB55 E9                 PCHL            Return
050                 *
051                 ******************************
052                 * GO/LOOK: CHECK FOR CAR.RET *
053                 ******************************
054                 *
055                 * Entry: B: Character to be checked.
056                 * Exit:  AF corrupted, BCDEHL preserved.
057                 *
058 EB56 78         L3E179  MOV   A,B       Get last char typed in
059 EB57 D60D               SUI   :0D
060 EB59 C262EA             JNZ   :EA62     Error if not CR
061 EB5C C9                 RET 
062                 *
063                 *

PAGE 02    DAI FIRMWARE 3EB26-3EC44  V1.1

064                 *********************
065                 * RESTART 0 (RST 0) *
066                 *********************
067                 *
068                 * The RST 0 function is used to operate 'LOOK'.
069                 * Via a timer 1 interrupt, RST 0 is called.
070                 * The vectoraddress #EB5D must have been
071                 * initialised by a Z2 or Z3 command.
072                 *
073                 * On entry, HL and PC are on stack (see 0000
074                 * -0007).
075                 *
076 EB5D F5         L3E180  PUSH  PSW
077 EB5E 00                 NOP 
078 EB5F 3A4700             LDA   :0047     Get stored EI/DI
079 EB62 D6FB               SUI   :FB
080 EB64 CA6CEB             JZ    :EB6C     Jump if EI stored
081 EB67 3E01               MVI   A,:01     Else: Set int. mask
082 EB69 32F8FF             STA   :FFF8     for timer 1 only
083                             
084                 * Save all registers in RAM area:
085                             
086 EB6C FB         L3E181  EI  
087 EB6D F1                 POP   PSW       Restore PSW
088 EB6E E1                 POP   H         Restore HL
089 EB6F 225900             SHLD  :0059     Save HL
090 EB72 F5                 PUSH  PSW
091 EB73 C5                 PUSH  B
092 EB74 D5                 PUSH  D
093 EB75 E1                 POP   H
094 EB76 225700             SHLD  :0057     Save DE
095 EB79 E1                 POP   H
096 EB7A 225500             SHLD  :0055     Save BC
097 EB7D E1                 POP   H
098 EB7E 225300             SHLD  :0053     Save PSW
099 EB81 E1                 POP   H
100 EB82 225D00             SHLD  :005D     Save PC
101                             
102                 * Check if PC points to 004D-4E:
103                             
104 EB85 11B3FF             LXI   D,:FFB3
105 EB88 19                 DAD   D
106 EB89 EB                 XCHG            DE=PC+FFB3 (=PC-004D)
107 EB8A 2A5100             LHLD  :0051     Get addr where to continue
108 EB8D 7A                 MOV   A,D
109 EB8E B7                 ORA   A
110 EB8F C298EB             JNZ   :EB98     Jump if out of interrupt
111                                         routine
112 EB92 B3                 ORA   E
113 EB93 FE04               CPI   :04
114 EB95 DA3EEC             JC    :EC3E     Jump if PC = 004D-4E
115                             
116                 * Put returnaddress on stack if current instruction
117                 * is a RST or a CALL instruction:
118                             
119 EB98 06C7       L3E182  MVI   B,:C7
120 EB9A 7E                 MOV   A,M       Get instr code of next instr
121 EB9B FECD               CPI   :CD
122 EB9D CAACEB             JZ    :EBAC     Jump if it is a CALL
123 EBA0 A0                 ANA   B         ) Check if it is a RST
124 EBA1 B8                 CMP   B         )
125 EBA2 CAAEEB             JZ    :EBAE     Then jump

PAGE 03    DAI FIRMWARE 3EB26-3EC44  V1.1

126 EBA5 7E                 MOV   A,M       Get instr code
127 EBA6 A0                 ANA   B         ) Check if it is a
128 EBA7 FEC4               CPI   :C4       ) conditional CALL
129 EBA9 C2B0EB             JNZ   :EBB0     Jump if not
130 EBAC 23         L3E183  INX   H
131 EBAD 23                 INX   H
132 EBAE 23         L3E184  INX   H
133 EBAF E3                 XTHL            Addr next instr on stack
134                                         if it was a RST or CALL
135                             
136                 * Check if current instruction is inside window:
137                             
138 EBB0 210000     L3E185  LXI   H,:0000
139 EBB3 39                 DAD   SP
140 EBB4 225B00             SHLD  :005B     Save SP
141 EBB7 CDE7ED             CALL  :EDE7     Exchange bytes in reg. save
142                                         area
143 EBBA 2A5100             LHLD  :0051     Get addr current instr
144 EBBD EB                 XCHG            in DE
145 EBBE 2A4A00             LHLD  :004A     Get laddr window
146 EBC1 CD45EC             CALL  :EC45     Compare DE-HL
147 EBC4 FADCEB             JM    :EBDC     Jump if addr outside window
148 EBC7 2A4800             LHLD  :0048     Get haddr window
149 EBCA CD45EC             CALL  :EC45     Compare DE-HL
150 EBCD D2DCEB             JNC   :EBDC     Jump if addr outside window
151                             
152                 * Print registers contents if address inside window:
153                             
154 EBD0 CD3AED             CALL  :ED3A     Print car.ret
155 EBD3 115100             LXI   D,:0051   Startaddr reg. save area
156 EBD6 219CEE             LXI   H,:EE9C   Startaddr symbol table
157 EBD9 CD44EE             CALL  :EE44     Print reg. contents
158 EBDC CDC2EE     L3E186  CALL  :EEC2     Scan for Break pressed;
159                                         evt run Break
160 EBDF 2A5D00             LHLD  :005D     Get addr next instr
161                             
162                 * Disable UT to trace itself:
163                 * Entry from init, RST0.
164                 * HL is address where to continu.
165                             
166 EBE2 3EEA       L3E187  MVI   A,:EA
167 EBE4 BC                 CMP   H         Check if hibyte = EA
168 EBE5 C2EEEB             JNZ   :EBEE     Jump if not
169 EBE8 3E0D               MVI   A,:0D
170 EBEA BD                 CMP   L         Check if lobyte = 0D
171 EBEB CA62EA             JZ    :EA62     Then go to Error
172                             
173                 * Check if next opcode is RST or EI/DI:
174                             
175 EBEE F3         L3E188  DI  
176 EBEF 225100             SHLD  :0051     Save addr current instr
177 EBF2 114C00             LXI   D,:004C
178 EBF5 EB                 XCHG
179 EBF6 225D00             SHLD  :005D     Set addr next instr = 004C
180 EBF9 EB                 XCHG
181 EBFA 7E                 MOV   A,M       Get opcode of instr
182 EBFB E6C7               ANI   :C7
183 EBFD FEC7               CPI   :C7
184 EBFF CA33EC             JZ    :EC33     Jump if RST
185 EC02 3A5F00             LDA   :005F     Get int. mask
186 EC05 CD3EEF             CALL  :EF3E     Store it in TIC; set A=0
187 EC08 32F9FF             STA   :FFF9     Reset timer 1 (trap

PAGE 04    DAI FIRMWARE 3EB26-3EC44  V1.1

188                                         immediate)
189 EC0B 7E                 MOV   A,M       Get opcode of instr
190 EC0C E6F7               ANI   :F7       ) Check if EI or DI
191 EC0E D6F3               SUI   :F3       )
192 EC10 7E                 MOV   A,M       Get inst code
193 EC11 EB                 XCHG            HL = #004C
194 EC12 36FB               MVI   M,:FB     Load EI in #004C
195 EC14 0E03               MVI   C,:03     3 instr bytes to be loaded
196                                         into #004D-F
197 EC16 CA2CEC             JZ    :EC2C     Jump if instr is EI/DI
198                             
199                 * Load next instruction into 004D-4F:
200                             
201 EC19 1A         L3E189  LDAX  D         Get instr code
202 EC1A 23         L3E190  INX   H
203 EC1B 77                 MOV   M,A       Store it in #004D-F
204 EC1C 13                 INX   D
205 EC1D 0D                 DCR   C
206 EC1E C219EC             JNZ   :EC19     Next byte of instr
207                 *
208                 * Run LOOK: Register contents:
209                 *
210                 *   If 'normal instr': 004C:    EI.
211                 *                      004D-4F: Next instruction.
212                 *
213                 *   If RST *:          004C-4D: RST */ data **.
214                 *                      004E:    RST 0.
215                 *
216                 *   If EI/DI:          004C:    EI.
217                 *                      004D:    NOP.
218                 *                      004E-50: Next instruction.
219                 *                         This may cause problems,
220                 *                         because 0050 is LOOK init
221                 *                         flag.
222                 *
223 EC21 CD30EF             CALL  :EF30     XRA A; LXI H,#0050
224 EC24 BE                 CMP   M         Check look flag
225 EC25 77                 MOV   M,A       Reset flag
226 EC26 CA63EC             JZ    :EC63     If not Look init: restore
227                                         CPU reg; cont on (005D/E)=
228                                         004C
229 EC29 C39CED             JMP   :ED9C     Else: Restore TIC/GICC/
230                                         CPU reg/int.mask and 'GO'
231                                         to (005D/E)=004C
232                             
233                 * If instruction is EI or DI:
234                             
235 EC2C 324700     L3E191  STA   :0047     Store EI/DI instr
236 EC2F AF                 XRA   A
237 EC30 C31AEC             JMP   :EC1A     Load 00 in #004D, next instr
238                                         in 004E-0050
239                             
240                 * If a RST instruction:
241                             
242 EC33 EB         L3E192  XCHG            HL=004C
243 EC34 0E02               MVI   C,:02     Only 2-byte instruction
244 EC36 3EC7               MVI   A,:C7
245 EC38 324E00             STA   :004E     Set (004E)=#C7 (=RST0)
246 EC3B C344EF             JMP   :EF44     RST*/data ** in 004C/D
247                             
248                 * If PC points to 004D-004E:
249                             

PAGE 05    DAI FIRMWARE 3EB26-3EC44  V1.1

250 EC3E 19         L3E193  DAD   D         Set HL=0000-0001. This may
251                                         cause re-entry problems due
252                                         to stack manipulation
253 EC3F 225D00             SHLD  :005D     Save addr next instr (pnts
254                                         to RST0)
255 EC42 C3B0EB             JMP   :EBB0
256                 *
257                 *
258                 *
259 EC45                    END 
 
***************************
* S Y M B O L   T A B L E *
***************************
 
L3E178 EB41   L3E179 EB56   L3E180 EB5D   L3E181 EB6C   
L3E182 EB98   L3E183 EBAC   L3E184 EBAE   L3E185 EBB0   
L3E186 EBDC   L3E187 EBE2   L3E188 EBEE   L3E189 EC19   
L3E190 EC1A   L3E191 EC2C   L3E192 EC33   L3E193 EC3E   
LOOKK  EB26
