--------------------------------------------- PIC ASSEMBLER LISTING Line Address Opcode Instruction --------------------------------------------- 0001 0000 ; 0002 0000 ; ********************************************************* 0003 0000 ; * * 0004 0000 ; * Magic Sinewave Delta 28 simulation for PIC 16F628A * 0005 0000 ; * Version 5.07 copyright c 2003 by Don Lancaster * 0006 0000 ; * and Synergetics, Box 809 Thatcher AZ (928) 428-4073 * 0007 0000 ; * * 0008 0000 ; * http://www.tinaja.com/magsn01.asp don@tinaja.com * 0009 0000 ; * ALL commercial and media rights FULLY reserved. * 0010 0000 ; * * 0011 0000 ; ********************************************************* 0012 0000 0013 0000 ; A highly efficiency power frequency sinewave synthesizer that is fully 0014 0000 ; three phase compatible and ZEROS (!) all harmonics from 2 through 22. 0015 0000 0016 0000 ; Harmonics 23 and 25 are fairly strong and will require low pass filtering. 0017 0000 ; Further support at http://www.tinaja.com/magsn01.asp or don@tinaja.com 0018 0000 0019 0000 ; There are 28 pulses per cycle. Equal to 56 half-bridge switching events. 0020 0000 ; Magic sinewaves GUARANTEE the fewest switching events for the maximum 0021 0000 ; number of harmonics rejected. And thus are the most efficient possible. 0022 0000 ; See tutorials at http://www.tinaja.com/magsn01.asp 0023 0000 0024 0000 ; 10 MHz clock in = 60 Hertz sinewave out. 0025 0000 ; Change clock frequency to change output frequency. 0026 0000 0027 0000 ; Note that the UART is not usable owing to variable clock. 0028 0000 ; Certain other 16F628A features may be limited by the extreme timing required. 0029 0000 0030 0000 ; Preliminary version may still includes bugs. 0031 0000 ; Preliminary version is only partially populated. 0032 0000 ; Preliminary version is not yet distortion optimized. 0033 0000 ; Subject to further improvement and optimizations. 0034 0000 0035 0000 ; Custom development services via don@tinaja.com 0036 0000 0037 0000 ; Recommended demo amplitude is 0.53. 0038 0000 0039 0000 ; 100 constant amplitude steps plus zero. Steps 01, 02, and 03 are not usable. 0040 0000 ; These are all less than 0.1 percent power. They can be provided in a later version. 0041 0000 0042 0000 ; This preliminary demo/development .ASM file intended primarily for use with the 0043 0000 ; PIC Simulator IDE by http://www.oshonsoft.com 0044 0000 0045 0000 ; MEMORY MAP: 0046 0000 0047 0000 ; page 0 - startup plus main CYCLE sequence, 0048 0000 ; page 1 - continuation of main CYCLE sequence plus service subs 0049 0000 ; page 2 - additional service subs 0050 0000 0051 0000 ; page 3 - Precision time delay 0052 0000 0053 0000 ; page 4 - Delay tables A and B 0054 0000 ; page 5 - Delay tables C and D 0055 0000 ; page 6 - Delay tables E and F 0056 0000 ; page 7 - Delay tables G and H 0057 0000 0058 0000 ; Approximately 230 contiguous unused bytes remain on page two. Four blocks of 0059 0000 ; approximately 40 bytes each remain unused on pages 4 through 7. 0060 0000 ; Approximately 62 cycles remain available for additional UPDATE features. 0061 0000 0062 0000 ; Current update rate is once each sixty degrees maximum in SLEW mode. 0063 0000 ; In PULSE mode, minimum UPDATE pulse width is approximately 30 degrees on 0064 0000 ; and 30 degrees off. Equal to 3 milliseconds at 60 Hertz. 0065 0000 ; Current ON-OFF shutdown may include sixty degrees of latency. 0066 0000 ; All sequences are believed fully equalized and transient free. 0067 0000 0068 0000 ; PIN ASSIGNMENTS 0069 0000 0070 0000 ; A0 - INPUT - RUN - RUN if low; STOP if high. May have 60 degree latency. 0071 0000 ; A1 - INPUT - PULSE - Low = continuous; High = one count up/down per pulse. 0072 0000 ; A2 - INPUT - DOWN - Reduces amplitude if not zero. High = advance 0073 0000 ; A3 - INPUT - UP - Increases amplitude if not 100. High = retard 0074 0000 0075 0000 ; B0 - OUTPUT - A+ - Phase A 0 degree positive output 0076 0000 ; B1 - OUTPUT - A- - Phase A 0 degree negative output 0077 0000 ; B2 - OUTPUT - B+ - Phase B 120 degree positive output 0078 0000 ; B3 - OUTPUT - B- - Phase B 120 degree negative output 0079 0000 ; B4 - OUTPUT - C+ - Phase C 240 degree positive output 0080 0000 ; B5 - OUTPUT - C- - Phase C 240 degree negative output 0081 0000 0082 0000 ; Zero is presently LOW on all outputs. Negative outputs can be inverted if 0083 0000 ; required by the half bridge drivers. Requires different version. 0084 0000 0085 0000 ; NOTE: B0 may also be routed to a 100K resistor and 10 microfarad low pass 0086 0000 ; filter to provide a DC output equal to ONE HALF the rms output amplitude. 0087 0000 0088 0000 ; Outputs B0 and B1 may also be used for single phase output. But note that 0089 0000 ; A best efficiency version would reduce additional harmonics. 0090 0000 0091 0000 ; Maximum update rate in slew mode: 360 amplitudes per second. 0092 0000 ; Minimum input pulse width is 3 milliseconds on and off at 60 Hertz. 0093 0000 0094 0000 0095 0000 ; REGISTERS: 0096 0000 0097 0000 AMPLIT EQU 0x20 ; Desired ms amplitude 0098 0000 SLEWCN EQU 0x21 ; Slew rate counter sets cycles per change. 0099 0000 HANDSH EQU 0x22 ; handshake flag in pulse mode 1=old 0=ready 0100 0000 ; bit1 = upflag bit0 = downflag 0101 0000 0102 0000 DLYA EQU 0x23 ; prestored delay values allow more amplitudes. 0103 0000 DLYB EQU 0x24 ; amplitude can be updated every 30 degrees. 0104 0000 DLYC EQU 0x25 0105 0000 DLYD EQU 0x26 0106 0000 DLYE EQU 0x27 0107 0000 DLYF EQU 0x28 0108 0000 DLYG EQU 0x29 0109 0000 DLYH2 EQU 0x2A 0110 0000 0111 0000 0112 0000 ; DATA VALUES 0113 0000 0114 0000 UP EQU 03 ; portline on PORTA for UP high=higher amp 0115 0000 DN EQU 02 ; portline on PORTA for DOWN high=lower amp 0116 0000 PULSE EQU 01 ; low=continuous high=one count per pulse 0117 0000 RUN EQU 00 ; portline on PORTA for STOP-RUN Low=Run 0118 0000 0119 0000 SLEWR EQU 3 ; slew rate 1=360 hz 6=60 hz 36=10 hz 72=5hz 180=2 hz 0120 0000 0121 0000 APADVAL EQU 54 ; fixed padding for double A delay 0122 0000 DPADVAL EQU 41-7 ; fixed padding for D delay 0123 0000 0124 0000 OPENAMP EQU 53 ; opening amplitude for AMPLIT (53 recommended here) 0125 0000 0126 0000 ; ENTRY happens on a reset or if an invalid amplitude results. 0127 0000 0128 0000 ENTRY: ORG 0000 0129 0000 118A BCF PCLATH,3 ; low memory 0130 0001 120A BCF PCLATH,4 0131 0002 2805 GOTO SETUP 0132 0003 ORG 0004 0133 0004 0009 RETFIE 0134 0005 0135 0005 0185 SETUP: CLRF PORTA ; initialize porta 0136 0006 0186 CLRF PORTB ; initialize portb 0137 0007 3007 MOVLW 0x07 ; turn comparators off 0138 0008 009F MOVWF CMCON ; enable A pins for I/O 0139 0009 1683 BSF STATUS,RP0 ; set bank1 0140 000A 1303 BCF STATUS,RP1 0141 000B 300F MOVLW 0x0F ; make 4 a ports inputs 0142 000C 0085 MOVWF TRISA 0143 000D 3000 MOVLW 0x00 ; make 6 b ports outputs 0144 000E 0086 MOVWF TRISB 0145 000F 1283 BCF STATUS,RP0 ; set bank 0 0146 0010 1303 BCF STATUS,RP1 0147 0011 0186 CLRF PORTB ; verify zero outputs 0148 0012 01A2 CLRF HANDSH ; clear handshake flags. low=ok 0149 0013 0150 0013 3035 NEXTCYC MOVLW OPENAMP ; init to amplitude (53 recommended here) 0151 0014 00A0 MOVWF AMPLIT ; and save 0152 0015 0153 0015 3001 MOVLW 01 ; initialize slew rate counter 0154 0016 00A1 MOVWF SLEWCN ; 0155 0017 0156 0017 21B0 CALL GRABDLY ; init delay values (useful for debug) 0157 0018 0158 0018 0159 0018 ; %%%%%%%%%%%% GROUP OUTPUT CYCLE SEQUENCE %%%%%%%%%%%% 0160 0018 0161 0018 ; CYCLE code is unwrapped where necessary to realize very high or very low 0162 0018 ; amplitudes; uses subroutines otherwise. 0163 0018 0164 0018 ; Group A is preliminary delay. Also update and grabs delays A-D. 0165 0018 ; It realizes all amplitudes as subroutine. 0166 0018 ; The ending and beginning A delays of each 60 degree intervals are combined. 0167 0018 ; A "double A" delay happens on reset with zero outpus. 0168 0018 0169 0018 0170 0018 214C CYCLE CALL A2X0 ; input, expand, and stall-2 200 [OVH=202] 0171 0019 3024 MOVLW 0x24 ; a000 + bpos + cneg 1 0172 001A 0086 MOVWF PORTB ; write new port pattern 1 0173 001B 0174 001B ; Group B is pulse p5 + p6% 0175 001B ; It realizes all amplitudes as subroutine. 0176 001B 0177 001B 2153 B0L CALL BX ; expand and stall 15/20 [OVH=17/22] 0178 001C 3021 MOVLW 0x21 ; apos + b000 + cneg 1 0179 001D 0086 MOVWF PORTB ; write new port pattern 1 0180 001E 0181 001E 0182 001E ; Group C is pulse p1 + p6% 0183 001E ; Amplitudes 1 and 2 not realizable. 3 possibly approximate. 0184 001E 0185 001E 0825 C0L MOVF DLYC,0 ; Get 8-bit delay value 1 OVH=9 p1 and p6% 0186 001F 22FE CALL STALL ; Do 8-bit only delay 6 0187 0020 3000 MOVLW 0x00 ; all ports off 1 0188 0021 0086 MOVWF PORTB ; write new port pattern 1 0189 0022 0190 0022 ; Group D is the interpulse space and grabs delays E-H. 0191 0022 ; It realizes all amplitudes as subroutine. 0192 0022 0193 0022 215A D0L CALL DX ; grab expand and stall 59 [OVH=61] 0194 0023 3021 MOVLW 0x21 ; apos + b000 + cneg 1 0195 0024 0086 MOVWF PORTB ; write new port pattern 1 0196 0025 0197 0025 ; Group E is pulses p2 and p7%. 0198 0025 ; Amplitudes 1, 2 and 3 are not realizable. 4 is an approximation 0199 0025 ; OVH can be reduced by one with hairy pipelining and bit clearing. 0200 0025 0201 0025 0827 E0L MOVF DLYE,0 ; Get 8-bit delay value 1 OVH=9 p2 and p7% 0202 0026 22FE CALL STALL ; Do 8-bit only delay 6 0203 0027 3024 MOVLW 0x24 ; a000 + bpos + cneg 1 0204 0028 0086 MOVWF PORTB ; write new port pattern 1 0205 0029 0206 0029 0207 0029 ; Group F is pulses p4 and p7%. 0208 0029 ; Amplitude 1 is not realizable when used as subroutine. 0209 0029 0210 0029 215F F0L CALL FX ; grab expand and stall 15/20 [OVH=15/20] P4 and P7% 0211 002A 3021 MOVLW 0x21 ; apos + b000 + cneg 1 0212 002B 0086 MOVWF PORTB ; write new port pattern 1 0213 002C 0214 002C 0215 002C ; Group G is pulse p3 + p7% 0216 002C 0217 002C 2166 G0L CALL GX ; expand and stall 15/20 [OVH=17/22] 0218 002D 3000 MOVLW 0x00 ; all ports off 1 0219 002E 0086 MOVWF PORTB ; write new port pattern 1 0220 002F 0221 002F ; Group H2 is twice ending pulse delay. Special treatment is needed for 0222 002F ; amplitudes 99 [26 cycles] and 100 [8 cycles]. 0223 002F 0224 002F 0225 002F 0820 HOC MOVF AMPLIT,0 ; get amplitude 1 [OVH = 8*/26*/29/33] 0226 0030 3C64 SUBLW 100 ; test for 100 1 0227 0031 1903 BTFSC STATUS,Z ; amplitude 100? 1/2 0228 0032 2834 GOTO HOC1 ; yes, 100 2 0229 0033 216D CALL HX ; use sub if not 100 [19/22/26] 0230 0034 0000 HOC1 NOP ; burn 1 cycle 1 0231 0035 3024 MOVLW 0x24 ; aoff + bpos + cneg 1 0232 0036 0086 MOVWF PORTB ; 1 0233 0037 0234 0037 ; and wind down the next 30 degrees 0235 0037 0236 0037 2166 G0R CALL GX ; expand and stall 0237 0038 3021 MOVLW 0x21 ; apos boff cneg 0238 0039 0086 MOVWF PORTB ; write new port pattern 0239 003A 0240 003A 215F F0R CALL FX ; grab expand and stall 0241 003B 3024 MOVLW 0x24 ; aoff + bpos + cneg 0242 003C 0086 MOVWF PORTB ; write new port pattern 0243 003D 0244 003D 0827 E0R MOVF DLYE,0 ; Get 8-bit delay value 0245 003E 22FE CALL STALL ; Do 8-bit only delay 0246 003F 3000 MOVLW 0x00 ; all ports off 0247 0040 0086 MOVWF PORTB ; write new port pattern 0248 0041 0249 0041 215A D0R CALL DX ; grab expand and stall 0250 0042 3024 MOVLW 0x24 ; aoff + bpos + cneg 0251 0043 0086 MOVWF PORTB ; write new port pattern 0252 0044 0253 0044 0825 C0R MOVF DLYC,0 ; Get 8-bit delay value 0254 0045 22FE CALL STALL ; Do 8-bit only delay 0255 0046 3021 MOVLW 0x21 ; apos boff cneg 0256 0047 0086 MOVWF PORTB ; write new port pattern 0257 0048 0258 0048 2153 B0R CALL BX ; expand and stall 0259 0049 3000 MOVLW 0x00 ; all ports off 0260 004A 0086 MOVWF PORTB ; write new port pattern 0261 004B 0262 004B ; first 60 degrees complete here except for half of A 0263 004B ; starting 60 to 120 degrees 0264 004B 0265 004B 214B A1L CALL A2X ; input, expand, and stall-2 Note +2 for loop 0266 004C 3021 MOVLW 0x21 ; apos + b000 + cneg 0267 004D 0086 MOVWF PORTB ; write new port pattern 0268 004E 0269 004E 2153 B1L CALL BX ; expand and stall 0270 004F 3009 MOVLW 0x09 ; apos + bneg + c000 0271 0050 0086 MOVWF PORTB ; write new port pattern 0272 0051 0273 0051 0825 C1L MOVF DLYC,0 ; Get 8-bit delay value 0274 0052 22FE CALL STALL ; Do 8-bit only delay 0275 0053 3000 MOVLW 0x00 ; all ports off 0276 0054 0086 MOVWF PORTB ; write new port pattern 0277 0055 0278 0055 215A D1L CALL DX ; grab expand and stall 0279 0056 3009 MOVLW 0x09 ; apos + bneg + c000 0280 0057 0086 MOVWF PORTB ; write new port pattern 0281 0058 0282 0058 0827 E1L MOVF DLYE,0 ; Get 8-bit delay value 0283 0059 22FE CALL STALL ; Do 8-bit only delay 0284 005A 3021 MOVLW 0x21 ; apos + b000 + cneg 0285 005B 0086 MOVWF PORTB ; write new port pattern 0286 005C 0287 005C 215F F1L CALL FX ; grab expand and stall 0288 005D 3009 MOVLW 0x09 ; apos + bneg + c000 0289 005E 0086 MOVWF PORTB ; write new port pattern 0290 005F 0291 005F 2166 G1L CALL GX ; expand and stall 0292 0060 3000 MOVLW 0x00 ; all ports off 0293 0061 0086 MOVWF PORTB ; write new port pattern 0294 0062 0295 0062 0820 H1C MOVF AMPLIT,0 ; get amplitude 0296 0063 3C64 SUBLW 100 ; test for 100 0297 0064 1903 BTFSC STATUS,Z ; amplitude 100? 0298 0065 2867 GOTO H1C1 ; yes, 100 0299 0066 216D CALL HX ; use sub if not 100 0300 0067 0000 H1C1 NOP ; burn 1 cycle 0301 0068 3021 MOVLW 0x21 ; apos + b000 + cneg 0302 0069 0086 MOVWF PORTB ; 0303 006A 0304 006A 2166 G1R CALL GX ; expand and stall 0305 006B 3009 MOVLW 0x09 ; apos + bneg + c000 0306 006C 0086 MOVWF PORTB ; write new port pattern 0307 006D 0308 006D 215F F1R CALL FX ; grab expand and stall 0309 006E 3021 MOVLW 0x21 ; apos + b000 + cneg 0310 006F 0086 MOVWF PORTB ; write new port pattern 0311 0070 0312 0070 0827 E1R MOVF DLYE,0 ; Get 8-bit delay value 0313 0071 22FE CALL STALL ; Do 8-bit only delay 0314 0072 3000 MOVLW 0x00 ; all ports off 0315 0073 0086 MOVWF PORTB ; write new port pattern 0316 0074 0317 0074 215A D1R CALL DX ; grab expand and stall 0318 0075 3021 MOVLW 0x21 ; apos + b000 + cneg 0319 0076 0086 MOVWF PORTB ; write new port pattern 0320 0077 0321 0077 0825 C1R MOVF DLYC,0 ; Get 8-bit delay value 0322 0078 22FE CALL STALL ; Do 8-bit only delay 0323 0079 3009 MOVLW 0x09 ; aapos + bneg + c000 0324 007A 0086 MOVWF PORTB ; write new port pattern 0325 007B 0326 007B 2153 B1R CALL BX ; expand and stall 0327 007C 3000 MOVLW 0x00 ; all ports off 0328 007D 0086 MOVWF PORTB ; write new port pattern 0329 007E 0330 007E ; 60 to 120 degrees complete here except for half of A 0331 007E ; starting 120 to 180 degrees 0332 007E 0333 007E 214B A2L CALL A2X ; input, expand, and stall-2 0334 007F 3009 MOVLW 0x09 ; apos + bneg + c000 0335 0080 0086 MOVWF PORTB ; write new port pattern 0336 0081 0337 0081 2153 B2L CALL BX ; expand and stall 0338 0082 3018 MOVLW 0x18 ; a000 + bneg + cpos 0339 0083 0086 MOVWF PORTB ; write new port pattern 0340 0084 0341 0084 0825 C2L MOVF DLYC,0 ; Get 8-bit delay value 0342 0085 22FE CALL STALL ; Do 8-bit only delay 0343 0086 3000 MOVLW 0x00 ; all ports off 0344 0087 0086 MOVWF PORTB ; write new port pattern 0345 0088 0346 0088 215A D2L CALL DX ; grab expand and stall 0347 0089 3018 MOVLW 0x18 ; a000 + bneg + cpos 0348 008A 0086 MOVWF PORTB ; write new port pattern 0349 008B 0350 008B 0827 E2L MOVF DLYE,0 ; Get 8-bit delay value 0351 008C 22FE CALL STALL ; Do 8-bit only delay 0352 008D 3009 MOVLW 0x09 ; apos + bneg + c000 0353 008E 0086 MOVWF PORTB ; write new port pattern 0354 008F 0355 008F 215F F2L CALL FX ; grab expand and stall 0356 0090 3018 MOVLW 0x18 ; a000 + bneg + cpos 0357 0091 0086 MOVWF PORTB ; write new port pattern 0358 0092 0359 0092 2166 G2L CALL GX ; expand and stall 0360 0093 3000 MOVLW 0x00 ; all ports off 0361 0094 0086 MOVWF PORTB ; write new port pattern 0362 0095 0363 0095 0364 0095 0820 H2C MOVF AMPLIT,0 ; get amplitude 0365 0096 3C64 SUBLW 100 ; test for 100 0366 0097 1903 BTFSC STATUS,Z ; amplitude 100? 0367 0098 289A GOTO H2C1 ; yes, 100 0368 0099 216D CALL HX ; use sub if not 100 0369 009A 0000 H2C1 NOP ; burn 1 cycle 0370 009B 3009 MOVLW 0x09 ; apos + bneg + c000 0371 009C 0086 MOVWF PORTB ; 0372 009D 0373 009D 0374 009D 2166 G2R CALL GX ; expand and stall 0375 009E 3018 MOVLW 0x18 ; a000 + bneg + cpos 0376 009F 0086 MOVWF PORTB ; write new port pattern 0377 00A0 0378 00A0 215F F2R CALL FX ; grab expand and stall 0379 00A1 3009 MOVLW 0x09 ; apos + bneg + c000 0380 00A2 0086 MOVWF PORTB ; write new port pattern 0381 00A3 0382 00A3 0827 E2R MOVF DLYE,0 ; Get 8-bit delay value 0383 00A4 22FE CALL STALL ; Do 8-bit only delay 0384 00A5 3000 MOVLW 0x00 ; all ports off 0385 00A6 0086 MOVWF PORTB ; write new port pattern 0386 00A7 0387 00A7 215A D2R CALL DX ; grab expand and stall 0388 00A8 3009 MOVLW 0x09 ; apos + bneg + c000 0389 00A9 0086 MOVWF PORTB ; write new port pattern 0390 00AA 0391 00AA 0825 C2R MOVF DLYC,0 ; Get 8-bit delay value 0392 00AB 22FE CALL STALL ; Do 8-bit only delay 0393 00AC 3018 MOVLW 0x18 ; a000 + bneg + cpos 0394 00AD 0086 MOVWF PORTB ; write new port pattern 0395 00AE 0396 00AE 2153 B2R CALL BX ; expand and stall 0397 00AF 3000 MOVLW 0x00 ; all ports off 0398 00B0 0086 MOVWF PORTB ; write new port pattern 0399 00B1 0400 00B1 ; 120 to 180 degrees complete here except for half of A 0401 00B1 ; starting 180 to 210 degrees 0402 00B1 0403 00B1 214B A3L CALL A2X ; input, expand, and stall-2 0404 00B2 3018 MOVLW 0x18 ; a000 + bneg + cpos 0405 00B3 0086 MOVWF PORTB ; write new port pattern 0406 00B4 0407 00B4 2153 B3L CALL BX ; expand and stall 0408 00B5 3012 MOVLW 0x12 ; aneg + b000 + cpos 0409 00B6 0086 MOVWF PORTB ; write new port pattern 0410 00B7 0411 00B7 0825 C3L MOVF DLYC,0 ; Get 8-bit delay value 0412 00B8 22FE CALL STALL ; Do 8-bit only delay 0413 00B9 3000 MOVLW 0x00 ; all ports off 0414 00BA 0086 MOVWF PORTB ; write new port pattern 0415 00BB 0416 00BB 215A D3L CALL DX ; grab expand and stall 0417 00BC 3012 MOVLW 0x12 ; aneg + b000 + cpos 0418 00BD 0086 MOVWF PORTB ; write new port pattern 0419 00BE 0420 00BE 0827 E3L MOVF DLYE,0 ; Get 8-bit delay value 0421 00BF 22FE CALL STALL ; Do 8-bit only delay 0422 00C0 3018 MOVLW 0x18 ; a000 + bneg + cpos 0423 00C1 0086 MOVWF PORTB ; write new port pattern 0424 00C2 0425 00C2 215F F3L CALL FX ; grab expand and stall 0426 00C3 3012 MOVLW 0x12 ; aneg + b000 + cpos 0427 00C4 0086 MOVWF PORTB ; write new port pattern 0428 00C5 0429 00C5 2166 G3L CALL GX ; expand and stall 0430 00C6 3000 MOVLW 0x00 ; all ports off 0431 00C7 0086 MOVWF PORTB ; write new port pattern 0432 00C8 0433 00C8 ; starting 210 to 240 degrees 0434 00C8 0435 00C8 0436 00C8 0820 H3C MOVF AMPLIT,0 ; get amplitude 0437 00C9 3C64 SUBLW 100 ; test for 100 0438 00CA 1903 BTFSC STATUS,Z ; amplitude 100? 0439 00CB 28CD GOTO H3C1 ; yes, 100 0440 00CC 216D CALL HX ; use sub if not 100 0441 00CD 0000 H3C1 NOP ; burn 1 cycle 0442 00CE 3018 MOVLW 0x18 ; a000 + bneg + cpos 0443 00CF 0086 MOVWF PORTB ; 0444 00D0 0445 00D0 0446 00D0 2166 G3R CALL GX ; expand and stall 0447 00D1 3012 MOVLW 0x12 ; aneg + b000 + cpos 0448 00D2 0086 MOVWF PORTB ; write new port pattern 0449 00D3 0450 00D3 215F F3R CALL FX ; grab expand and stall 0451 00D4 3018 MOVLW 0x18 ; a000 + bneg + cpos 0452 00D5 0086 MOVWF PORTB ; write new port pattern 0453 00D6 0454 00D6 0827 E3R MOVF DLYE,0 ; Get 8-bit delay value 0455 00D7 22FE CALL STALL ; Do 8-bit only delay 0456 00D8 3000 MOVLW 0x00 ; all ports off 0457 00D9 0086 MOVWF PORTB ; write new port pattern 0458 00DA 0459 00DA 215A D3R CALL DX ; grab expand and stall 0460 00DB 3018 MOVLW 0x18 ; a000 + bneg + cpos 0461 00DC 0086 MOVWF PORTB ; write new port pattern 0462 00DD 0463 00DD 0825 C3R MOVF DLYC,0 ; Get 8-bit delay value 0464 00DE 22FE CALL STALL ; Do 8-bit only delay 0465 00DF 3012 MOVLW 0x12 ; aneg + b000 + cpos 0466 00E0 0086 MOVWF PORTB ; write new port pattern 0467 00E1 0468 00E1 2153 B3R CALL BX ; expand and stall 0469 00E2 3000 MOVLW 0x00 ; all ports off 0470 00E3 0086 MOVWF PORTB ; write new port pattern 0471 00E4 0472 00E4 ; 180 to 240 degrees complete here except for half of A 0473 00E4 ; starting 240 to 270 degrees 0474 00E4 0475 00E4 214B A4L CALL A2X ; input, expand, and stall-2 0476 00E5 3012 MOVLW 0x12 ; aneg + b000 + cpos 0477 00E6 0086 MOVWF PORTB ; write new port pattern 0478 00E7 0479 00E7 2153 B4L CALL BX ; expand and stall 0480 00E8 3006 MOVLW 0x06 ; aneg bpos c000 0481 00E9 0086 MOVWF PORTB ; write new port pattern 0482 00EA 0483 00EA 0825 C4L MOVF DLYC,0 ; Get 8-bit delay value 0484 00EB 22FE CALL STALL ; Do 8-bit only delay 0485 00EC 3000 MOVLW 0x00 ; all ports off 0486 00ED 0086 MOVWF PORTB ; write new port pattern 0487 00EE 0488 00EE 215A D4L CALL DX ; grab expand and stall 0489 00EF 3006 MOVLW 0x06 ; aneg bpos c000 0490 00F0 0086 MOVWF PORTB ; write new port pattern 0491 00F1 0492 00F1 0827 E4L MOVF DLYE,0 ; Get 8-bit delay value 0493 00F2 22FE CALL STALL ; Do 8-bit only delay 0494 00F3 3012 MOVLW 0x12 ; aneg + b000 + cpos 0495 00F4 0086 MOVWF PORTB ; write new port pattern 0496 00F5 0497 00F5 215F F4L CALL FX ; grab expand and stall 0498 00F6 3006 MOVLW 0x06 ; aneg bpos c000 0499 00F7 0086 MOVWF PORTB ; write new port pattern 0500 00F8 0501 00F8 2166 G4L CALL GX ; expand and stall 0502 00F9 3000 MOVLW 0x00 ; all ports off 0503 00FA 0086 MOVWF PORTB ; write new port pattern 0504 00FB 0505 00FB ; starting 270 to 300 degrees 0506 00FB 0507 00FB 0508 00FB 0820 H4C MOVF AMPLIT,0 ; get amplitude 0509 00FC 3C64 SUBLW 100 ; test for 100 0510 00FD 1903 BTFSC STATUS,Z ; amplitude 100? 0511 00FE 2900 GOTO H4C1 ; yes, 100 0512 00FF 216D CALL HX ; use sub if not 100 0513 0100 0000 H4C1 NOP ; burn 1 cycle 0514 0101 3012 MOVLW 0x12 ; aneg + b000 + cpos 0515 0102 0086 MOVWF PORTB ; 0516 0103 0517 0103 0518 0103 2166 G4R CALL GX ; expand and stall 0519 0104 3006 MOVLW 0x06 ; aneg bpos c000 0520 0105 0086 MOVWF PORTB ; write new port pattern 0521 0106 0522 0106 215F F4R CALL FX ; grab expand and stall 0523 0107 3012 MOVLW 0x12 ; aneg + b000 + cpos 0524 0108 0086 MOVWF PORTB ; write new port pattern 0525 0109 0526 0109 0827 E4R MOVF DLYE,0 ; Get 8-bit delay value 0527 010A 22FE CALL STALL ; Do 8-bit only delay 0528 010B 3000 MOVLW 0x00 ; all ports off 0529 010C 0086 MOVWF PORTB ; write new port pattern 0530 010D 0531 010D 215A D4R CALL DX ; grab expand and stall 0532 010E 3012 MOVLW 0x12 ; aneg + b000 + cpos 0533 010F 0086 MOVWF PORTB ; write new port pattern 0534 0110 0535 0110 0825 C4R MOVF DLYC,0 ; Get 8-bit delay value 0536 0111 22FE CALL STALL ; Do 8-bit only delay 0537 0112 3006 MOVLW 0x06 ; aaneg bpos c000 0538 0113 0086 MOVWF PORTB ; write new port pattern 0539 0114 0540 0114 2153 B4R CALL BX ; expand and stall 0541 0115 3000 MOVLW 0x00 ; all ports off 0542 0116 0086 MOVWF PORTB ; write new port pattern 0543 0117 0544 0117 ; 240 to 300 degrees complete here except for half of A 0545 0117 ; starting 300 to 330 0546 0117 0547 0117 0548 0117 214B A5L CALL A2X ; input, expand, and stall-2 0549 0118 3006 MOVLW 0x06 ; aneg bpos c000 0550 0119 0086 MOVWF PORTB ; write new port pattern 0551 011A 0552 011A 2153 B5L CALL BX ; expand and stall 0553 011B 3024 MOVLW 0x24 ; a000 + bpos + cneg 0554 011C 0086 MOVWF PORTB ; write new port pattern 0555 011D 0556 011D 0825 C5L MOVF DLYC,0 ; Get 8-bit delay value 0557 011E 22FE CALL STALL ; Do 8-bit only delay 0558 011F 3000 MOVLW 0x00 ; all ports off 0559 0120 0086 MOVWF PORTB ; write new port pattern 0560 0121 0561 0121 215A D5L CALL DX ; grab expand and stall 0562 0122 3024 MOVLW 0x24 ; a000 + bpos + cneg 0563 0123 0086 MOVWF PORTB ; write new port pattern 0564 0124 0565 0124 0827 E5L MOVF DLYE,0 ; Get 8-bit delay value 0566 0125 22FE CALL STALL ; Do 8-bit only delay 0567 0126 3006 MOVLW 0x06 ; aneg bpos c000 0568 0127 0086 MOVWF PORTB ; write new port pattern 0569 0128 0570 0128 215F F5L CALL FX ; grab expand and stall 0571 0129 3024 MOVLW 0x24 ; a000 + bpos + cneg 0572 012A 0086 MOVWF PORTB ; write new port pattern 0573 012B 0574 012B 2166 G5L CALL GX ; expand and stall 0575 012C 3000 MOVLW 0x00 ; all ports off 0576 012D 0086 MOVWF PORTB ; write new port pattern 0577 012E 0578 012E ; doing 330 to 360 degrees 0579 012E 0580 012E 0581 012E 0820 H5C MOVF AMPLIT,0 ; get amplitude 0582 012F 3C64 SUBLW 100 ; test for 100 0583 0130 1903 BTFSC STATUS,Z ; amplitude 100? 0584 0131 2933 GOTO H5C1 ; yes, 100 0585 0132 216D CALL HX ; use sub if not 100 0586 0133 0000 H5C1 NOP ; burn 1 cycle 0587 0134 3006 MOVLW 0x06 ; aneg bpos c000 0588 0135 0086 MOVWF PORTB ; 0589 0136 0590 0136 2166 G5R CALL GX ; expand and stall 0591 0137 3024 MOVLW 0x24 ; a000 + bpos + cneg 0592 0138 0086 MOVWF PORTB ; write new port pattern 0593 0139 0594 0139 215F F5R CALL FX ; grab expand and stall 0595 013A 3006 MOVLW 0x06 ; aneg bpos c000 0596 013B 0086 MOVWF PORTB ; write new port pattern 0597 013C 0598 013C 0827 E5R MOVF DLYE,0 ; Get 8-bit delay value 0599 013D 22FE CALL STALL ; Do 8-bit only delay 0600 013E 3000 MOVLW 0x00 ; all ports off 0601 013F 0086 MOVWF PORTB ; write new port pattern 0602 0140 0603 0140 215A D5R CALL DX ; grab expand and stall 0604 0141 3006 MOVLW 0x06 ; aneg bpos c000 0605 0142 0086 MOVWF PORTB ; write new port pattern 0606 0143 0607 0143 0825 C5R MOVF DLYC,0 ; Get 8-bit delay value 0608 0144 22FE CALL STALL ; Do 8-bit only delay 0609 0145 3024 MOVLW 0x24 ; a000 + bpos + cneg 0610 0146 0086 MOVWF PORTB ; write new port pattern 0611 0147 0612 0147 2153 B5R CALL BX ; expand and stall 0613 0148 3000 MOVLW 0x00 ; all ports off 0614 0149 0086 MOVWF PORTB ; write new port pattern 0615 014A 0616 014A ; 300 to 360 degrees complete here except for half of A 0617 014A 0618 014A 2818 GOTO CYCLE ; close loop. Equalized by A2X0. 0619 014B 0620 014B 0621 014B ; %%%%%%%%%%%%% Group CYCLE support subroutines %%%%%%%%%%%%%%% 0622 014B 0623 014B ; The ending and beginning A2 delays are combined to get more update time. 0624 014B ; A2 has a fixed delay consisting of UPDATE and GRABLO and PADD, plus 0625 014B ; a (100-AMPLIT)*14+6 expansion. 0626 014B 0627 014B 294C A2X GOTO A2X0 ; equalizes cycle closing GOTO 2* [OVH=200] 0628 014C 21C8 A2X0 CALL UPDATE ; check inputs for AMPLIT change 42 0629 014D 21B0 CALL GRABDLY ; grab delays A-H for fast access 75 0630 014E 22FB CALL APAD ; provide additional fixed delay 54+6+3 0631 014F 2175 CALL EXPANDA ; expand by (100-AMPLIT)*14 7+ 0632 0150 0823 MOVF DLYA,0 ; Get 8-bit delay value 1 0633 0151 22FE CALL STALL ; Do 8-bit only delay 6 0634 0152 0008 RETURN ; and go back (4) 0635 0153 0636 0153 0820 BX MOVF AMPLIT,0 ; get amplitude 1 [OVH = 15/20 ] 0637 0154 3C0A SUBLW 10 ; subtract 10-W for threshold 1 0638 0155 1C03 BTFSS STATUS,C ; skip if less than 10 1/2 0639 0156 217E CALL EXPANDB ; expand by 11*AMPLIT+6 6* P5 and P6% 0640 0157 0824 MOVF DLYB,0 ; Get 8-bit delay value 1 0641 0158 22FE CALL STALL ; Do 8-bit only delay 6 0642 0159 0008 RETURN ; and go back (4) 0643 015A 0644 015A ; CX is linear coded 0645 015A 0646 015A 22FD DX CALL DPAD ; provide additional fixed delay 41 [OVH=59] 0647 015B 2186 CALL EXPANDD ; expand by 16*(100-AMPLIT)+7 7 0648 015C 0826 MOVF DLYD,0 ; Get 8-bit delay value 1 0649 015D 22FE CALL STALL ; Do 8-bit only delay 6 0650 015E 0008 RETURN ; and go back (4) 0651 015F 0652 015F ; EX is linear coded 0653 015F 0654 015F ; FX uses threshold 20 0655 015F 0656 015F 0820 FX MOVF AMPLIT,0 ; get amplitude 1 [OVH = 15/20 ] 0657 0160 3C14 SUBLW 20 ; subtract 20-W for threshold 1 0658 0161 1C03 BTFSS STATUS,C ; skip if less than 20 1/2 0659 0162 2191 CALL EXPANDF ; expand by 8*AMPLIT+6 * 6 P4 and P7% 0660 0163 0828 MOVF DLYF,0 ; Get 8-bit delay value 1 0661 0164 22FE CALL STALL ; Do 8-bit only delay 6 0662 0165 0008 RETURN ; and go back (4) 0663 0166 0664 0166 ; GX uses threshold 40 0665 0166 0666 0166 0820 GX MOVF AMPLIT,0 ; get amplitude 1 [OVH = 15/20 ] 0667 0167 3C28 SUBLW 40 ; subtract 40-W for threshold 1 0668 0168 1C03 BTFSS STATUS,C ; skip if less than 40 1/2 0669 0169 2198 CALL EXPANDG ; expand by 5*AMPLIT+6 6* P5 and P6% 0670 016A 0829 MOVF DLYG,0 ; Get 8-bit delay value 1 0671 016B 22FE CALL STALL ; Do 8-bit only delay 6 0672 016C 0008 RETURN ; and go back (4) 0673 016D 0674 016D ; HX requires special treatment of 100 (already done) and 99... 0675 016D ; Plus expansion truncation required for AMPLIT>87. 0676 016D 0677 016D 0820 HX MOVF AMPLIT,0 ; get amplitude 1 [OVH = 19/22/26] 0678 016E 3C63 SUBLW 99 ; test for 99-H 1 0679 016F 1903 BTFSC STATUS,Z ; skip fancy stuff 1/2 0680 0170 29AC GOTO FIXH99 ; and exit via delay [16] 0681 0171 219D CALL EXPANDH2 ; trunc 8*(10-AMPL) [7/11] 0682 0172 082A MOVF DLYH2,0 ; get 8-bit delay value 1 0683 0173 22FE CALL STALL ; do 8-bit only delay 6* 0684 0174 0008 RETURN ; and go back [4] 0685 0175 0686 0175 0687 0175 ; %%%%%%%%%%% Group CYCLE EXPANSION Subroutines %%%%%%%%%%%%%%%% 0688 0175 0689 0175 ; The EXPANDX modules convert 8-bit data into 12-bit data by adding 0690 0175 ; a ramp, a differenced ramp, or a thresholded ramp. Threshold is 0691 0175 ; set by the calling routine except for EXPANDH2. 0692 0175 0693 0175 ; EXPANDA delays by (100-Amplitude)*14 plus 7 overhead cycles... 0694 0175 0695 0175 0820 EXPANDA MOVF AMPLIT,0 ; get amplitude 0696 0176 3C64 SUBLW 100 ; subtract it FROM 100 0697 0177 1903 LOOPA BTFSC STATUS,Z ; check zero flag 0698 0178 0008 INTA RETURN ; return when done 0699 0179 2178 CALL INTA ; burn four cycles 0700 017A 2178 CALL INTA ; burn four cycles 0701 017B 0000 NOP ; burn one cycle 0702 017C 3EFF ADDLW 0xFF ; count down - here saves an overhead cycle 0703 017D 2977 GOTO LOOPA ; and repeat for 14 0704 017E 0705 017E ; EXPANDB delays by Amplitude*11 plus 6 overhead cycles... 0706 017E 0707 017E 0820 EXPANDB MOVF AMPLIT,0 ; get amplitude 0708 017F 1903 LOOPB BTFSC STATUS,Z ; check zero flag 0709 0180 3400 RETLW 00 ; return when done 0710 0181 2185 CALL GOBACKB ; burn four cycles 0711 0182 2983 GOTO MOREB ; burn two cycles 0712 0183 3EFF MOREB ADDLW 0xFF ; count down - here saves an overhead cycle 0713 0184 297F GOTO LOOPB ; and repeat for nine 0714 0185 0715 0185 0008 GOBACKB RETURN ; must NOT be RETLW! 0716 0186 0717 0186 ; No EXPANDC is presently needed as C data is within 8-bit range. 0718 0186 0719 0186 ; EXPANDD delays by (100-Amplitude)*16 plus 7 overhead cycles... 0720 0186 0721 0186 0820 EXPANDD MOVF AMPLIT,0 ; get amplitude 1 [OVH=7] 0722 0187 3C64 SUBLW 100 ; subtract it FROM 100 1 0723 0188 1903 LOOPD BTFSC STATUS,Z ; check zero flag 2 1 0724 0189 3400 RETLW 00 ; -- (4) 0725 018A 2190 CALL GOBACKD ; burn 4 cycles 0726 018B 2190 CALL GOBACKD ; burn 4 more cycles 0727 018C 298D GOTO MORED ; burn 2 more cycles 0728 018D 0000 MORED NOP ; burn 1 more cycle 11 0729 018E 3EFF ADDLW 0xFF ; count down - here saves an overhead cycle 1 0730 018F 2988 GOTO LOOPD ; and repeat for sixteen 2 0731 0190 0732 0190 0008 GOBACKD RETURN ; must NOT be RETLW! 0733 0191 0734 0191 ; No EXPANDE is presently needed as E data is within 8-bit range. 0735 0191 0736 0191 ; EXPANDF delays by Amplitude*8 plus 6 overhead cycles... 0737 0191 0738 0191 0820 EXPANDF MOVF AMPLIT,0 ; get amplitude 0739 0192 1903 LOOPF BTFSC STATUS,Z ; check zero flag 0740 0193 3400 RETLW 00 ; return when done 0741 0194 0000 NOP ; burn one cycle 0742 0195 2996 GOTO MOREF ; burn two cycles 0743 0196 3EFF MOREF ADDLW 0xFF ; count down - here saves an overhead cycle 0744 0197 2992 GOTO LOOPF ; and repeat for six 0745 0198 0746 0198 ; EXPANDG delays by Amplitude*5 plus 6 overhead cycles... 0747 0198 0748 0198 0820 EXPANDG MOVF AMPLIT,0 ; get amplitude 0749 0199 1903 LOOPG BTFSC STATUS,Z ; check zero flag 0750 019A 3400 RETLW 00 ; return when done 0751 019B 3EFF ADDLW 0xFF ; count down - here saves an overhead cycle 0752 019C 2999 GOTO LOOPG ; and repeat for six 0753 019D 0754 019D ; Expand H2 does (100 - AMPLIT)*16 + 11 cycles ONLY IF AMPLIT<87. 0755 019D 0756 019D 0820 EXPANDH2 MOVF AMPLIT,0 ; get amplitude 1 [OVH = 7/11*] 0757 019E 3C57 SUBLW 87 ; is 87-H positive? 1 0758 019F 1C03 BTFSS STATUS,C ; 1/2 0759 01A0 0008 RETURN ; and go back (4)* 0760 01A1 0820 MOVF AMPLIT,0 ; get amplitude 0761 01A2 3C64 SUBLW 100 ; subtract it FROM 100 0762 01A3 1903 LOOPH BTFSC STATUS,Z ; check zero flag 0763 01A4 0008 RETURN ; return when done 0764 01A5 21AB CALL GOBACKH ; burn 4 cycles 0765 01A6 21AB CALL GOBACKH ; burn 4 more cycles 0766 01A7 29A8 GOTO MOREH ; burn 2 more cycles 0767 01A8 0000 MOREH NOP ; burn 1 more cycle 0768 01A9 3EFF ADDLW 0xFF ; count down - here saves an overhead cycle 0769 01AA 29A3 GOTO LOOPH ; and repeat for sixteen 0770 01AB 0771 01AB 0008 GOBACKH RETURN ; cycle burner 0772 01AC 0773 01AC ; FixH99 is a short fixed delay for the special H amplitude 99 case. 0774 01AC ; want 26 - (ho= 7) - (hx=5) = 14 0775 01AC 0776 01AC 21AB FIXH99 CALL GOBACKH ; burn 4 cycles for amplitude 4 0777 01AD 21AB CALL GOBACKH ; burn 4 cycles 4 0778 01AE 29AF GOTO FIXH99A ; burn 2 cycles 2 0779 01AF 0008 FIXH99A RETURN ; return to main H2C (4) 0780 01B0 0781 01B0 0782 01B0 ; %%%%%%%%%%%% Update Servicing Subroutines %%%%%%%%%%% 0783 01B0 0784 01B0 ; GRABLDLY preloads the AMPLIT delays into temporary storage registers. 0785 01B0 0786 01B0 3004 GRABDLY MOVLW 04 ; go to data page four 1 [ovh=75] 0787 01B1 008A MOVWF PCLATH ; to start tables 1 0788 01B2 2400 CALL GETDLYA ; lookup A delay value 7 0789 01B3 00A3 MOVWF DLYA ; and store 1 0790 01B4 2467 CALL GETDLYB ; lookup B delay value 7 0791 01B5 00A4 MOVWF DLYB ; and store 1 0792 01B6 0A8A INCF PCLATH,1 ; go to data page five 1 0793 01B7 2500 CALL GETDLYC ; lookup C delay value 7 0794 01B8 00A5 MOVWF DLYC ; and store 1 0795 01B9 2567 CALL GETDLYD ; lookup D delay value 7 0796 01BA 00A6 MOVWF DLYD ; and store 1 0797 01BB 0A8A INCF PCLATH,1 ; go to data page six 1 0798 01BC 2600 CALL GETDLYE ; lookup E delay value 7 0799 01BD 00A7 MOVWF DLYE ; and store 1 0800 01BE 2667 CALL GETDLYF ; lookup F delay value 7 0801 01BF 00A8 MOVWF DLYF ; and store 1 0802 01C0 0A8A INCF PCLATH,1 ; go to data page seven 1 0803 01C1 2700 CALL GETDLYG ; lookup G delay value 7 0804 01C2 00A9 MOVWF DLYG ; and store 1 0805 01C3 2767 CALL GETDLYH2 ; lookup H*2 delay value 7 0806 01C4 00AA MOVWF DLYH2 ; and store 1 0807 01C5 3003 MOVLW 03 ; reset to time delay page three 1 0808 01C6 008A MOVWF PCLATH ; 1 0809 01C7 0008 RETURN ; (4) 0810 01C8 0811 01C8 ; UPDATE sequence checks for an up or down command and alters AMPLIT if 0812 01C8 ; needed. Then updates LOWAMP flag. Then validates AMPLIT. 0813 01C8 ; Then checks for ZERO. Finally checks for RUN. Additional space available 0814 01C8 ; for fancier actions. 0815 01C8 0816 01C8 ; There are two main UPDATE modes, set by the PULSE input. When in PULSE 0817 01C8 ; mode, each UP or DN pulse advances ONE count, regardless of length. When 0818 01C8 ; in SLEW mode, counts continue advancing or declining as long as the UP or 0819 01C8 ; DN input is high. 0820 01C8 0821 01C8 ; There are two entry points to compensate for phase zero update. 0822 01C8 ; Code is believed to be fully equalized for all paths. 0823 01C8 0824 01C8 0825 01C8 1885 UPDATE BTFSC PORTA,PULSE ; are we in pulse mode? 1 [OVH=42] 0826 01C9 29F4 GOTO PULSEUP ; yes, use single pulse mode 24 0827 01CA 29D9 GOTO SLEWUP ; no, use slew rate limit or [24] 0828 01CB 0829 01CB ; VALIDA is entered from SLEWUP or PULSEUP and verifies a valid AMPLIT 0-100. 0830 01CB ; This is a safety check that NEVER should happen. 0831 01CB 0832 01CB 0820 VALIDA MOVF AMPLIT,0 ; get amplitude 1 [4] 0833 01CC 3C64 SUBLW 100 ; subtract FROM 100, set C if bad 1 0834 01CD 1C03 BTFSS STATUS,C ; test for set carry 2 0835 01CE 2800 GOTO ENTRY ; reinitialize if bad AMPLIT --- 0836 01CF 0837 01CF ; FLGRST resets handshake bits when UP or DOWN inputs return low. 0838 01CF ; Needed in PULSE mode only, but best left general. 0839 01CF 0840 01CF 1D85 FLGRST BTFSS PORTA,UP ; is UP input back to low? [4] 0841 01D0 10A2 BCF HANDSH,1 ; yes reset UP handshake bit 0842 01D1 1D05 BTFSS PORTA,DN ; is DN input back to low 0843 01D2 1022 BCF HANDSH,0 ; yes, reset DN handshake bit 0844 01D3 0845 01D3 ; NOZERO prevents any output on zero amplitude. Keeps looking for an 0846 01D3 ; UP command till a nonzero AMPLIT results. 0847 01D3 0848 01D3 08A0 NOZERO MOVF AMPLIT,1 ; set zero flag if AMPLIT=0 1 [3] 0849 01D4 1903 BTFSC STATUS,Z ; 2 0850 01D5 29C8 GOTO UPDATE ; retry till a new amplitude is set ---- 0851 01D6 0852 01D6 ; NORUN prevents any output if the RUN input is high. Hangs till RUN goes low. 0853 01D6 ; probably should reverse in final chip. Painful for debug otherwise. 0854 01D6 ; Presently can have up to 60 degrees latency. 0855 01D6 0856 01D6 1805 NORUN BTFSC PORTA, RUN ; hold if RUN input is low. 2 [2] 0857 01D7 29D6 GOTO NORUN ; --- 0858 01D8 0859 01D8 0008 RETURN ; exit UPDATE (4) [4] 0860 01D9 0861 01D9 ; SLEWUP attempts to alter AMPLIT when requested by UP or DN and when allowed 0862 01D9 ; by the SLEWCN slewrate counter. Used only in slewrate mode 0863 01D9 0864 01D9 0BA1 SLEWUP DECFSZ SLEWCN,1 ; decrement slew counter 2 [12] 0865 01DA 29EC GOTO EQS1 ; equalize 19 if not zero --- 0866 01DB 0867 01DB 3003 MOVLW SLEWR ; reload slew counter 1 0868 01DC 00A1 MOVWF SLEWCN ; for next countdown 1 0869 01DD 0870 01DD 0820 CKUPS MOVF AMPLIT,0 ; get amplitude 1 0871 01DE 3C64 SUBLW 100 ; is it 100? 1 0872 01DF 1903 BTFSC STATUS,Z ; z=1 if AMPLIT=100 2 0873 01E0 29EF GOTO EQS2 ; or equalize --- 0874 01E1 1985 UPOKS BTFSC PORTA,UP ; read UP input port bit 1 0875 01E2 0AA0 INCF AMPLIT,1 ; advance if high 1 0876 01E3 0000 NOP ; burn 1 cycles to equalize 1 0877 01E4 ; bypassed GOTO penalty (1) 0878 01E4 0879 01E4 08A0 CKDNS MOVF AMPLIT,1 ; check for zero 1 [12] 0880 01E5 1903 BTFSC STATUS,Z ; z=1 if AMPLIT=0 2 0881 01E6 29F0 GOTO EQS3 ; or equalize --- 0882 01E7 1905 DNOKS BTFSC PORTA,DN ; read DN input port bit 1 0883 01E8 03A0 DECF AMPLIT,1 ; advance if high 1 0884 01E9 0000 NOP ; burn 1 cycle to match pulse 1 0885 01EA 29EB DN1 GOTO TOVAL ; burn 2 cycles to match pulse 2 0886 01EB 29CB TOVAL GOTO VALIDA ; and continue with UPDATE (4) 0887 01EC 0888 01EC ; Slew mode equalizing routines... 0889 01EC 0890 01EC 3009 EQS1 MOVLW 9 ; delay 19 - 6 - 4 cycles 0891 01ED 22FE CALL STALL ; via usual long delay sub 0892 01EE 29CB GOTO VALIDA ; continue UPDATE at VALIDA 0893 01EF 0894 01EF 29E4 EQS2 GOTO CKDNS ; burn 2 cycles 0895 01F0 0896 01F0 0000 EQS3 NOP ; not critical - NOZERO dominates! 0897 01F1 29F2 GOTO EQS3A ; burn 2 cycles 0898 01F2 0000 EQS3A NOP ; burn 1 cycle 0899 01F3 29CB GOTO VALIDA ; continue UPDATE at VALIDA 0900 01F4 0901 01F4 ; PULSEUP attempts to alter AMPLIT when requested by UP or DN but only permitting 0902 01F4 ; ONE advance or retard per input pulse regardless of length. Used only in pulse 0903 01F4 ; mode. 0904 01F4 0905 01F4 18A2 PULSEUP BTFSC HANDSH,1 ; is this a new pulse? 2 [11] 0906 01F5 2A09 GOTO EQP1 ; equalize if old --- 0907 01F6 0820 CKUPP MOVF AMPLIT,0 ; get amplitude 1 0908 01F7 3C64 SUBLW 100 ; is it 100? 1 0909 01F8 1903 BTFSC STATUS,Z ; z=1 if AMPLIT=100 2 0910 01F9 2A0B GOTO EQP2 ; or equalize --- 0911 01FA 1D85 UPOKP BTFSS PORTA,UP ; read UP input port bit 2 0912 01FB 2A0C GOTO EQP3 ; 0913 01FC 0AA0 INCF AMPLIT,1 ; advance if high 1 0914 01FD 14A2 BSF HANDSH,1 ; and set lockout flag 1 0915 01FE 0000 NOP ; equalize equalize 1 0916 01FF 0917 01FF 1822 CKDNP BTFSC HANDSH,0 ; is this a new pulse? 2 [13] 0918 0200 2A0D GOTO EQP4 ; equalize if old --- 0919 0201 08A0 MOVF AMPLIT,1 ; check for zero 1 0920 0202 1903 BTFSC STATUS,Z ; z=1 if AMPLIT=0 2 0921 0203 2A0F GOTO EQP5 ; equalize if zero --- 0922 0204 1D05 BTFSS PORTA,DN ; read UP input port bit 2 0923 0205 2A10 GOTO EQP6 ; equalize 3 if low --- 0924 0206 03A0 DECF AMPLIT,1 ; advance if high 1 0925 0207 1422 BSF HANDSH,0 ; and set lockout flag 1 0926 0208 29CB GOTO VALIDA ; continue UPDATE at VALIDA (2+2=4) 0927 0209 0928 0209 ; Pulse mode equalizing routines... 0929 0209 0930 0209 2A0A EQP1 GOTO EQP1A ; equalize 1 2 0931 020A 2A0B EQP1A GOTO EQP2 ; equalize 2 2 0932 020B 2A0C EQP2 GOTO EQP3 ; equalize 2 2 0933 020C 29FF EQP3 GOTO CKDNP ; continue at CKDNP 2 0934 020D 0935 020D 0000 EQP4 NOP ; equalize 1 1 0936 020E 2A0F GOTO EQP5 ; equalize 2 2 0937 020F 2A10 EQP5 GOTO EQP6 ; equalize 2 **** 2 NOZERO dominates 0938 0210 0000 EQP6 NOP ; equalize 3 1 0939 0211 29CB GOTO VALIDA ; continue at VALIDA 2 0940 0212 0941 0212 0942 0212 ; ================ PRECISION DELAY ON PAGE THREE ================== 0943 0212 0944 0212 ; STALL is a special full page table lookup for low latency time delays 0945 0212 ; accurate to one cycle. It delays w + 6 cycles. w can range from 0 to 255. 0946 0212 0947 0212 ; APAD and DPAD are fixed delays that fall through to STALL. 0948 0212 ; Note that five bytes are also required at the end of page two. 0949 0212 0950 0212 ; PCLATH must be preset to page three. Note that the subtraction automatically 0951 0212 ; lands on page three because of a preset PCLATH. 0952 0212 ; Note also that a PCL change of zero advances you to the NEXT opcode. 0953 0212 0954 0212 ORG 0x2FB ; uses all of page three plus five prebytes 0955 02FB 3036 APAD MOVLW APADVAL ; fixed A padding delay 0956 02FC 2AFE GOTO STALL ; 3 extra cycles for 9 ovh total 0957 02FD 3022 DPAD MOVLW DPADVAL ; fixed D padding delay 7 total 0958 02FE 0282 STALL SUBWF PCL,1 ; relative jump to data Must be in location x00 -2 !!! 0959 02FF 0000 NOP 0960 0300 0961 0300 0000 NOP ; must be first byte on page 0962 0301 0000 NOP 0963 0302 0000 NOP 0964 0303 0000 NOP 0965 0304 0966 0304 0000 NOP 0967 0305 0000 NOP 0968 0306 0000 NOP 0969 0307 0000 NOP 0970 0308 0971 0308 0000 NOP 0972 0309 0000 NOP 0973 030A 0000 NOP 0974 030B 0000 NOP 0975 030C 0976 030C 0000 NOP 0977 030D 0000 NOP 0978 030E 0000 NOP 0979 030F 0000 NOP ; location 0F 0980 0310 0981 0310 0000 NOP 0982 0311 0000 NOP 0983 0312 0000 NOP 0984 0313 0000 NOP 0985 0314 0986 0314 0000 NOP 0987 0315 0000 NOP 0988 0316 0000 NOP 0989 0317 0000 NOP 0990 0318 0991 0318 0000 NOP 0992 0319 0000 NOP 0993 031A 0000 NOP 0994 031B 0000 NOP 0995 031C 0996 031C 0000 NOP 0997 031D 0000 NOP 0998 031E 0000 NOP 0999 031F 0000 NOP ; location 1F 1000 0320 1001 0320 0000 NOP 1002 0321 0000 NOP 1003 0322 0000 NOP 1004 0323 0000 NOP 1005 0324 1006 0324 0000 NOP 1007 0325 0000 NOP 1008 0326 0000 NOP 1009 0327 0000 NOP 1010 0328 1011 0328 0000 NOP 1012 0329 0000 NOP 1013 032A 0000 NOP 1014 032B 0000 NOP 1015 032C 1016 032C 0000 NOP 1017 032D 0000 NOP 1018 032E 0000 NOP 1019 032F 0000 NOP ; location 2F 1020 0330 1021 0330 0000 NOP 1022 0331 0000 NOP 1023 0332 0000 NOP 1024 0333 0000 NOP 1025 0334 1026 0334 0000 NOP 1027 0335 0000 NOP 1028 0336 0000 NOP 1029 0337 0000 NOP 1030 0338 1031 0338 0000 NOP 1032 0339 0000 NOP 1033 033A 0000 NOP 1034 033B 0000 NOP 1035 033C 1036 033C 0000 NOP 1037 033D 0000 NOP 1038 033E 0000 NOP 1039 033F 0000 NOP ; location 3F 1040 0340 1041 0340 0000 NOP 1042 0341 0000 NOP 1043 0342 0000 NOP 1044 0343 0000 NOP 1045 0344 1046 0344 0000 NOP 1047 0345 0000 NOP 1048 0346 0000 NOP 1049 0347 0000 NOP 1050 0348 1051 0348 0000 NOP 1052 0349 0000 NOP 1053 034A 0000 NOP 1054 034B 0000 NOP 1055 034C 1056 034C 0000 NOP 1057 034D 0000 NOP 1058 034E 0000 NOP 1059 034F 0000 NOP ; location 4F 1060 0350 1061 0350 0000 NOP 1062 0351 0000 NOP 1063 0352 0000 NOP 1064 0353 0000 NOP 1065 0354 1066 0354 0000 NOP 1067 0355 0000 NOP 1068 0356 0000 NOP 1069 0357 0000 NOP 1070 0358 1071 0358 0000 NOP 1072 0359 0000 NOP 1073 035A 0000 NOP 1074 035B 0000 NOP 1075 035C 1076 035C 0000 NOP 1077 035D 0000 NOP 1078 035E 0000 NOP 1079 035F 0000 NOP ; location 5F 1080 0360 1081 0360 0000 NOP 1082 0361 0000 NOP 1083 0362 0000 NOP 1084 0363 0000 NOP 1085 0364 1086 0364 0000 NOP 1087 0365 0000 NOP 1088 0366 0000 NOP 1089 0367 0000 NOP 1090 0368 1091 0368 0000 NOP 1092 0369 0000 NOP 1093 036A 0000 NOP 1094 036B 0000 NOP 1095 036C 1096 036C 0000 NOP 1097 036D 0000 NOP 1098 036E 0000 NOP 1099 036F 0000 NOP ; location 6F 1100 0370 1101 0370 0000 NOP 1102 0371 0000 NOP 1103 0372 0000 NOP 1104 0373 0000 NOP 1105 0374 1106 0374 0000 NOP 1107 0375 0000 NOP 1108 0376 0000 NOP 1109 0377 0000 NOP 1110 0378 1111 0378 0000 NOP 1112 0379 0000 NOP 1113 037A 0000 NOP 1114 037B 0000 NOP 1115 037C 1116 037C 0000 NOP 1117 037D 0000 NOP 1118 037E 0000 NOP 1119 037F 0000 NOP ; location 7F 1120 0380 1121 0380 0000 NOP 1122 0381 0000 NOP 1123 0382 0000 NOP 1124 0383 0000 NOP 1125 0384 1126 0384 0000 NOP 1127 0385 0000 NOP 1128 0386 0000 NOP 1129 0387 0000 NOP 1130 0388 1131 0388 0000 NOP 1132 0389 0000 NOP 1133 038A 0000 NOP 1134 038B 0000 NOP 1135 038C 1136 038C 0000 NOP 1137 038D 0000 NOP 1138 038E 0000 NOP 1139 038F 0000 NOP ; location 8F 1140 0390 1141 0390 0000 NOP 1142 0391 0000 NOP 1143 0392 0000 NOP 1144 0393 0000 NOP 1145 0394 1146 0394 0000 NOP 1147 0395 0000 NOP 1148 0396 0000 NOP 1149 0397 0000 NOP 1150 0398 1151 0398 0000 NOP 1152 0399 0000 NOP 1153 039A 0000 NOP 1154 039B 0000 NOP 1155 039C 1156 039C 0000 NOP 1157 039D 0000 NOP 1158 039E 0000 NOP 1159 039F 0000 NOP ; location 9F 1160 03A0 1161 03A0 0000 NOP 1162 03A1 0000 NOP 1163 03A2 0000 NOP 1164 03A3 0000 NOP 1165 03A4 1166 03A4 0000 NOP 1167 03A5 0000 NOP 1168 03A6 0000 NOP 1169 03A7 0000 NOP 1170 03A8 1171 03A8 0000 NOP 1172 03A9 0000 NOP 1173 03AA 0000 NOP 1174 03AB 0000 NOP 1175 03AC 1176 03AC 0000 NOP 1177 03AD 0000 NOP 1178 03AE 0000 NOP 1179 03AF 0000 NOP ; location AF 1180 03B0 1181 03B0 0000 NOP 1182 03B1 0000 NOP 1183 03B2 0000 NOP 1184 03B3 0000 NOP 1185 03B4 1186 03B4 0000 NOP 1187 03B5 0000 NOP 1188 03B6 0000 NOP 1189 03B7 0000 NOP 1190 03B8 1191 03B8 0000 NOP 1192 03B9 0000 NOP 1193 03BA 0000 NOP 1194 03BB 0000 NOP 1195 03BC 1196 03BC 0000 NOP 1197 03BD 0000 NOP 1198 03BE 0000 NOP 1199 03BF 0000 NOP ; location BF 1200 03C0 1201 03C0 0000 NOP 1202 03C1 0000 NOP 1203 03C2 0000 NOP 1204 03C3 0000 NOP 1205 03C4 1206 03C4 0000 NOP 1207 03C5 0000 NOP 1208 03C6 0000 NOP 1209 03C7 0000 NOP 1210 03C8 1211 03C8 0000 NOP 1212 03C9 0000 NOP 1213 03CA 0000 NOP 1214 03CB 0000 NOP 1215 03CC 1216 03CC 0000 NOP 1217 03CD 0000 NOP 1218 03CE 0000 NOP 1219 03CF 0000 NOP ; location CF 1220 03D0 1221 03D0 0000 NOP 1222 03D1 0000 NOP 1223 03D2 0000 NOP 1224 03D3 0000 NOP 1225 03D4 1226 03D4 0000 NOP 1227 03D5 0000 NOP 1228 03D6 0000 NOP 1229 03D7 0000 NOP 1230 03D8 1231 03D8 0000 NOP 1232 03D9 0000 NOP 1233 03DA 0000 NOP 1234 03DB 0000 NOP 1235 03DC 1236 03DC 0000 NOP 1237 03DD 0000 NOP 1238 03DE 0000 NOP 1239 03DF 0000 NOP ; location DF 1240 03E0 1241 03E0 0000 NOP 1242 03E1 0000 NOP 1243 03E2 0000 NOP 1244 03E3 0000 NOP 1245 03E4 1246 03E4 0000 NOP 1247 03E5 0000 NOP 1248 03E6 0000 NOP 1249 03E7 0000 NOP 1250 03E8 1251 03E8 0000 NOP 1252 03E9 0000 NOP 1253 03EA 0000 NOP 1254 03EB 0000 NOP 1255 03EC 1256 03EC 0000 NOP 1257 03ED 0000 NOP 1258 03EE 0000 NOP 1259 03EF 0000 NOP ; location EF 1260 03F0 1261 03F0 0000 NOP 1262 03F1 0000 NOP 1263 03F2 0000 NOP 1264 03F3 0000 NOP 1265 03F4 1266 03F4 0000 NOP 1267 03F5 0000 NOP 1268 03F6 0000 NOP 1269 03F7 0000 NOP 1270 03F8 1271 03F8 0000 NOP 1272 03F9 0000 NOP 1273 03FA 0000 NOP 1274 03FB 0000 NOP 1275 03FC 1276 03FC 0000 NOP 1277 03FD 0000 NOP 1278 03FE 0000 NOP 1279 03FF 3400 RETLW 00 ; location FF ~must~ be end of page. 1280 0400 1281 0400 1282 0400 ; ============== TABLES ON PAGES FOUR THROUGH SEVEN =============== 1283 0400 1284 0400 ; There is also approximately 200 bytes of free and unused space remaining in 1285 0400 ; four 50 byte blocks. 1286 0400 1287 0400 ; Note that the delay tables are not yet fully populated nor have they been 1288 0400 ; distortion optimized. This is preliminary development code only. 1289 0400 ; Contact don@tinaja.com for commercially available & fully functional products. 1290 0400 1291 0400 ; GETDLYA is the table lookup for group A for pregroup delay. This group 1292 0400 ; requires byte expansion of 14*(100-AMPLIT). Its overhead is 7 bytes. 1293 0400 ; Only certain amplitudes are presently usable. 1294 0400 ; 101+2 bytes must not cross a page boundary. 1295 0400 1296 0400 ; Delay B continues sequentially on page 4. 1297 0400 1298 0400 ORG 0x400 ; start page four 1299 0400 1300 0400 OVHA EQU 202 ; overhead to be subtracted 1301 0400 1302 0400 0820 GETDLYA MOVF AMPLIT,0 ; get amplitude 1303 0401 0782 ADDWF PCL,1 ; relative jump to data 1304 0402 1305 0402 3462 RETLW 300-OVHA ; Amplitude 0 Arguments MUST be positive! 1306 0403 34D0 RETLW 410-OVHA ; Amplitude 1 898*2 - 14*(100-1) = 410 [1796] 1307 0404 34CC RETLW 406-OVHA ; Amplitude 2 889*2 - 14*(100-2) = 406 [1778] 1308 0405 3462 RETLW 300-OVHA 1309 0406 3462 RETLW 300-OVHA 1310 0407 1311 0407 3462 RETLW 300-OVHA ; Amplitude 5 1312 0408 3462 RETLW 300-OVHA 1313 0409 3462 RETLW 300-OVHA 1314 040A 3462 RETLW 300-OVHA 1315 040B 3462 RETLW 300-OVHA 1316 040C 1317 040C 34BE RETLW 392-OVHA ; Amplitude 10 826*2 - 14*(100-10) = 392 [1652] 1318 040D 3462 RETLW 300-OVHA 1319 040E 3462 RETLW 300-OVHA 1320 040F 3462 RETLW 300-OVHA 1321 0410 3462 RETLW 300-OVHA 1322 0411 1323 0411 3462 RETLW 300-OVHA ; Amplitude 15 1324 0412 3462 RETLW 300-OVHA 1325 0413 3462 RETLW 300-OVHA 1326 0414 3462 RETLW 300-OVHA 1327 0415 3462 RETLW 300-OVHA 1328 0416 1329 0416 34AA RETLW 372-OVHA ; Amplitude 20 746*2 - 14*(100-20) = 372 [1492] 1330 0417 3462 RETLW 300-OVHA ; Amplitude 21 1331 0418 3462 RETLW 300-OVHA 1332 0419 3462 RETLW 300-OVHA 1333 041A 3462 RETLW 300-OVHA 1334 041B 1335 041B 3462 RETLW 300-OVHA ; Amplitude 25 1336 041C 3462 RETLW 300-OVHA 1337 041D 3462 RETLW 300-OVHA 1338 041E 3462 RETLW 300-OVHA 1339 041F 3462 RETLW 300-OVHA 1340 0420 1341 0420 3496 RETLW 352-OVHA ; Amplitude 30 666*2 -14*(100-30) = 352 [1332] 1342 0421 3462 RETLW 300-OVHA ; Amplitude 31 1343 0422 3462 RETLW 300-OVHA 1344 0423 3462 RETLW 300-OVHA 1345 0424 3462 RETLW 300-OVHA 1346 0425 1347 0425 3462 RETLW 300-OVHA ; Amplitude 35 1348 0426 3462 RETLW 300-OVHA 1349 0427 3462 RETLW 300-OVHA 1350 0428 3462 RETLW 300-OVHA 1351 0429 3462 RETLW 300-OVHA 1352 042A 1353 042A 1354 042A 3482 RETLW 332-OVHA ; Amplitude 40 586*2 - 14*(100-40) = 332 [1172] 1355 042B 3462 RETLW 300-OVHA ; Amplitude 41 1356 042C 3462 RETLW 300-OVHA 1357 042D 3462 RETLW 300-OVHA 1358 042E 3462 RETLW 300-OVHA 1359 042F 1360 042F 3462 RETLW 300-OVHA ; Amplitude 45 1361 0430 3462 RETLW 300-OVHA 1362 0431 3462 RETLW 300-OVHA 1363 0432 3462 RETLW 300-OVHA 1364 0433 3462 RETLW 300-OVHA 1365 0434 1366 0434 1367 0434 346E RETLW 312-OVHA ; Amplitude 50 506*2 -14*(100-50) = 312 [1012] [1012] 1368 0435 3462 RETLW 300-OVHA ; Amplitude 51 1369 0436 3462 RETLW 300-OVHA 1370 0437 346A RETLW 308-OVHA ; Amplitude 53 483*2 - 14*(100-53) = 308 VERIFIED [966] 1371 0438 3462 RETLW 300-OVHA 1372 0439 1373 0439 3462 RETLW 300-OVHA ; Amplitude 55 1374 043A 3462 RETLW 300-OVHA 1375 043B 3462 RETLW 300-OVHA 1376 043C 3462 RETLW 300-OVHA 1377 043D 3462 RETLW 300-OVHA 1378 043E 1379 043E 345C RETLW 294-OVHA ; Amplitude 60 427*2 - 14*(100-60) = 294 [854] 1380 043F 3462 RETLW 300-OVHA ; Amplitude 61 1381 0440 3462 RETLW 300-OVHA 1382 0441 3462 RETLW 300-OVHA 1383 0442 3462 RETLW 300-OVHA 1384 0443 1385 0443 3462 RETLW 300-OVHA ; Amplitude 65 1386 0444 3462 RETLW 300-OVHA 1387 0445 3462 RETLW 300-OVHA 1388 0446 3462 RETLW 300-OVHA 1389 0447 3462 RETLW 300-OVHA 1390 0448 1391 0448 1392 0448 3462 RETLW 300-OVHA ; Amplitude 70 1393 0449 3462 RETLW 300-OVHA ; Amplitude 71 1394 044A 3462 RETLW 300-OVHA 1395 044B 3462 RETLW 300-OVHA 1396 044C 3462 RETLW 300-OVHA 1397 044D 1398 044D 3462 RETLW 300-OVHA ; Amplitude 75 1399 044E 3462 RETLW 300-OVHA 1400 044F 3462 RETLW 300-OVHA 1401 0450 3462 RETLW 300-OVHA 1402 0451 3462 RETLW 300-OVHA 1403 0452 1404 0452 3462 RETLW 300-OVHA ; Amplitude 80 1405 0453 3462 RETLW 300-OVHA ; Amplitude 81 1406 0454 3462 RETLW 300-OVHA 1407 0455 3462 RETLW 300-OVHA 1408 0456 3462 RETLW 300-OVHA 1409 0457 1410 0457 3462 RETLW 300-OVHA ; Amplitude 85 1411 0458 3462 RETLW 300-OVHA 1412 0459 3462 RETLW 300-OVHA 1413 045A 3462 RETLW 300-OVHA 1414 045B 3462 RETLW 300-OVHA 1415 045C 1416 045C 3422 RETLW 236-OVHA ; Amplitude 90 188*2 - 14*(100-90) = 236 [376] 1417 045D 3462 RETLW 300-OVHA ; Amplitude 91 1418 045E 3462 RETLW 300-OVHA 1419 045F 3462 RETLW 300-OVHA 1420 0460 3462 RETLW 300-OVHA 1421 0461 1422 0461 3462 RETLW 300-OVHA ; Amplitude 95 1423 0462 3462 RETLW 300-OVHA 1424 0463 3462 RETLW 300-OVHA 1425 0464 3462 RETLW 300-OVHA 1426 0465 3462 RETLW 300-OVHA 1427 0466 1428 0466 340E RETLW 216-OVHA ; Amplitude 100 108*2 - 14*(100-100) = 216 [216] 1429 0467 1430 0467 ; GETDLYB is the table lookup for group B for pulses p5 and p6%. This group 1431 0467 ; requires byte expansion of AMPLIT*11 but ONLY for AMPLIT>16. 1432 0467 ; Overhead is 20 cycles for high amplitudes and 15 cycles for low. 1433 0467 ; GroupB covers all amplitudes. Amplitude 1 is approximated. 1434 0467 ; 101+2 bytes must not cross a page boundary. 1435 0467 1436 0467 ; Total group h overhead is presently 17/22 cycles. 1437 0467 ; Delay B continues sequentially on page 4. 1438 0467 1439 0467 OVHB EQU 22 ; overhead to be subtracted for AMPL>16 1440 0467 OVHBT EQU 17 ; overhead to be subtracted for AMPL=<16 1441 0467 1442 0467 0820 GETDLYB MOVF AMPLIT,0 ; get amplitude 1443 0468 0782 ADDWF PCL,1 ; relative jump to data 1444 0469 1445 0469 3453 RETLW 100-OVHBT ; Amplitude 0 Arguments MUST be positive 1446 046A 3400 RETLW 17-OVHBT ; 14 + no expansion !! 17 MINIMUM APPROXIMATION !! 1447 046B 340C RETLW 29-OVHBT ; 29 + no expansion 1448 046C 3453 RETLW 100-OVHBT 1449 046D 3453 RETLW 100-OVHBT 1450 046E 1451 046E 3453 RETLW 100-OVHBT ; Amplitude 1452 046F 3453 RETLW 100-OVHBT 1453 0470 3453 RETLW 100-OVHBT 1454 0471 3453 RETLW 100-OVHBT 1455 0472 3453 RETLW 100-OVHBT 1456 0473 1457 0473 347E RETLW 143-OVHBT ; Amplitude 10 approx 143 1458 0474 3453 RETLW 100-OVHBT 1459 0475 3453 RETLW 100-OVHBT 1460 0476 3453 RETLW 100-OVHBT 1461 0477 3453 RETLW 100-OVHBT 1462 0478 1463 0478 3453 RETLW 100-OVHBT ; Amplitude 15 approx 214 1464 0479 3453 RETLW 100-OVHBT ; Amplitude 16 approx 228 1465 047A 3453 RETLW 100-OVHBT ; Amplitude 17 approx 243 - 17*11 = 56 1466 047B 344E RETLW 100-OVHB 1467 047C 344E RETLW 100-OVHB 1468 047D 1469 047D 342C RETLW 66-OVHB ; Amplitude 20 286 - 11*20 --> 66 1470 047E 344E RETLW 100-OVHB ; Amplitude 21 1471 047F 344E RETLW 100-OVHB 1472 0480 344E RETLW 100-OVHB 1473 0481 344E RETLW 100-OVHB 1474 0482 1475 0482 344E RETLW 100-OVHB ; Amplitude 25 1476 0483 344E RETLW 100-OVHB 1477 0484 344E RETLW 100-OVHB 1478 0485 344E RETLW 100-OVHB 1479 0486 344E RETLW 100-OVHB 1480 0487 1481 0487 344B RETLW 97-OVHB ; Amplitude 30 427 - 11*30 ---> 97 1482 0488 344E RETLW 100-OVHB ; Amplitude 31 1483 0489 344E RETLW 100-OVHB 1484 048A 344E RETLW 100-OVHB 1485 048B 344E RETLW 100-OVHB 1486 048C 1487 048C 344E RETLW 100-OVHB ; Amplitude 35 1488 048D 344E RETLW 100-OVHB 1489 048E 344E RETLW 100-OVHB 1490 048F 344E RETLW 100-OVHB 1491 0490 344E RETLW 100-OVHB 1492 0491 1493 0491 1494 0491 344E RETLW 100-OVHB ; Amplitude 40 1495 0492 344E RETLW 100-OVHB ; Amplitude 41 1496 0493 344E RETLW 100-OVHB 1497 0494 344E RETLW 100-OVHB 1498 0495 344E RETLW 100-OVHB 1499 0496 1500 0496 344E RETLW 100-OVHB ; Amplitude 45 1501 0497 344E RETLW 100-OVHB 1502 0498 344E RETLW 100-OVHB 1503 0499 344E RETLW 100-OVHB 1504 049A 344E RETLW 100-OVHB 1505 049B 1506 049B 1507 049B 344E RETLW 100-OVHB ; Amplitude 50 1508 049C 344E RETLW 100-OVHB ; Amplitude 51 1509 049D 344E RETLW 100-OVHB 1510 049E 348B RETLW 161-OVHB ; Amplitude53 744 - 11*53 = 161 1511 049F 344E RETLW 100-OVHB 1512 04A0 1513 04A0 344E RETLW 100-OVHB ; Amplitude 55 1514 04A1 344E RETLW 100-OVHB 1515 04A2 344E RETLW 100-OVHB 1516 04A3 344E RETLW 100-OVHB 1517 04A4 344E RETLW 100-OVHB 1518 04A5 1519 04A5 344E RETLW 100-OVHB ; Amplitude 60 1520 04A6 344E RETLW 100-OVHB ; Amplitude 61 1521 04A7 344E RETLW 100-OVHB 1522 04A8 344E RETLW 100-OVHB 1523 04A9 344E RETLW 100-OVHB 1524 04AA 1525 04AA 344E RETLW 100-OVHB ; Amplitude 65 1526 04AB 344E RETLW 100-OVHB 1527 04AC 344E RETLW 100-OVHB 1528 04AD 344E RETLW 100-OVHB 1529 04AE 344E RETLW 100-OVHB 1530 04AF 1531 04AF 1532 04AF 344E RETLW 100-OVHB ; Amplitude 70 1533 04B0 344E RETLW 100-OVHB ; Amplitude 71 1534 04B1 344E RETLW 100-OVHB 1535 04B2 344E RETLW 100-OVHB 1536 04B3 344E RETLW 100-OVHB 1537 04B4 1538 04B4 344E RETLW 100-OVHB ; Amplitude 75 1539 04B5 344E RETLW 100-OVHB 1540 04B6 344E RETLW 100-OVHB 1541 04B7 344E RETLW 100-OVHB 1542 04B8 344E RETLW 100-OVHB 1543 04B9 1544 04B9 344E RETLW 100-OVHB ; Amplitude 80 1545 04BA 344E RETLW 100-OVHB ; Amplitude 81 1546 04BB 344E RETLW 100-OVHB 1547 04BC 344E RETLW 100-OVHB 1548 04BD 344E RETLW 100-OVHB 1549 04BE 1550 04BE 344E RETLW 100-OVHB ; Amplitude 85 1551 04BF 344E RETLW 100-OVHB 1552 04C0 344E RETLW 100-OVHB 1553 04C1 344E RETLW 100-OVHB 1554 04C2 344E RETLW 100-OVHB 1555 04C3 1556 04C3 344E RETLW 100-OVHB ; Amplitude 90 1557 04C4 344E RETLW 100-OVHB ; Amplitude 91 1558 04C5 344E RETLW 100-OVHB 1559 04C6 344E RETLW 100-OVHB 1560 04C7 344E RETLW 100-OVHB 1561 04C8 1562 04C8 344E RETLW 100-OVHB ; Amplitude 95 1563 04C9 344E RETLW 100-OVHB 1564 04CA 344E RETLW 100-OVHB 1565 04CB 344E RETLW 100-OVHB 1566 04CC 344E RETLW 100-OVHB 1567 04CD 1568 04CD 34AE RETLW 196-OVHB ; Amplitude 100 1296 - 100*11 = 196 1569 04CE 1570 04CE 1571 04CE ; GETDLYC is the table lookup for group C for pulses p1 and p6%. This group 1572 04CE ; requires no byte expansion. 1573 04CE ; 101+2 bytes must not cross a page boundary. 1574 04CE 1575 04CE ; Total group h overhead is presently 9 cycles. 1576 04CE ; Delay C opens page 5. 1577 04CE 1578 04CE ORG 0x500 ; start of next page 1579 0500 1580 0500 OVHC EQU 9 ; overhead to be subtracted 1581 0500 1582 0500 0820 GETDLYC MOVF AMPLIT,0 ; get amplitude 1583 0501 0782 ADDWF PCL,1 ; relative jump to data 1584 0502 1585 0502 345B RETLW 100-OVHC ; Amplitude 0 Arguments MUST be positive! 1586 0503 3400 RETLW 9-OVHC ; Amplitude 1 2 is badly approximated [9] 1587 0504 3400 RETLW 9-OVHC ; Amplitude 2 5 is badly approximated [9] 1588 0505 3400 RETLW 9-OVHC ; Amplitude 3 8 approximated by [9] needs checked 1589 0506 3401 RETLW 10-OVHC ; Amplitude 4 approximately 10 1590 0507 1591 0507 3403 RETLW 12 -OVHC ; Amplitude 5 approximately 12 1592 0508 345B RETLW 100-OVHC 1593 0509 345B RETLW 100-OVHC 1594 050A 345B RETLW 100-OVHC 1595 050B 345B RETLW 100-OVHC 1596 050C 1597 050C 340F RETLW 24-OVHC ; Amplitude 10 24 1598 050D 345B RETLW 100-OVHC ; 1599 050E 345B RETLW 100-OVHC ; 1600 050F 345B RETLW 100-OVHC ; 1601 0510 345B RETLW 100-OVHC 1602 0511 1603 0511 345B RETLW 100-OVHC ; Amplitude 15 1604 0512 345B RETLW 100-OVHC 1605 0513 345B RETLW 100-OVHC 1606 0514 345B RETLW 100-OVHC 1607 0515 345B RETLW 100-OVHC 1608 0516 1609 0516 345B RETLW 100-OVHC ; Amplitude 20 1610 0517 345B RETLW 100-OVHC ; Amplitude 21 1611 0518 345B RETLW 100-OVHC 1612 0519 345B RETLW 100-OVHC 1613 051A 345B RETLW 100-OVHC 1614 051B 1615 051B 345B RETLW 100-OVHC ; Amplitude 25 1616 051C 345B RETLW 100-OVHC 1617 051D 345B RETLW 100-OVHC 1618 051E 345B RETLW 100-OVHC 1619 051F 345B RETLW 100-OVHC 1620 0520 1621 0520 1622 0520 345B RETLW 100-OVHC ; Amplitude 30 1623 0521 345B RETLW 100-OVHC ; Amplitude 31 1624 0522 345B RETLW 100-OVHC 1625 0523 345B RETLW 100-OVHC 1626 0524 345B RETLW 100-OVHC 1627 0525 1628 0525 345B RETLW 100-OVHC ; Amplitude 35 1629 0526 345B RETLW 100-OVHC 1630 0527 345B RETLW 100-OVHC 1631 0528 345B RETLW 100-OVHC 1632 0529 345B RETLW 100-OVHC 1633 052A 1634 052A 1635 052A 345B RETLW 100-OVHC ; Amplitude 40 1636 052B 345B RETLW 100-OVHC ; Amplitude 41 1637 052C 345B RETLW 100-OVHC 1638 052D 345B RETLW 100-OVHC 1639 052E 345B RETLW 100-OVHC 1640 052F 1641 052F 345B RETLW 100-OVHC ; Amplitude 45 1642 0530 345B RETLW 100-OVHC 1643 0531 345B RETLW 100-OVHC 1644 0532 345B RETLW 100-OVHC 1645 0533 345B RETLW 100-OVHC 1646 0534 1647 0534 1648 0534 345B RETLW 100-OVHC ; Amplitude 50 1649 0535 345B RETLW 100-OVHC ; Amplitude 51 1650 0536 345B RETLW 100-OVHC 1651 0537 347D RETLW 134-OVHC ; Amplitude 53 134 ONLY ONE ALLOWED! 1652 0538 345B RETLW 100-OVHC 1653 0539 1654 0539 345B RETLW 100-OVHC ; Amplitude 55 1655 053A 345B RETLW 100-OVHC 1656 053B 345B RETLW 100-OVHC 1657 053C 345B RETLW 100-OVHC 1658 053D 345B RETLW 100-OVHC 1659 053E 1660 053E 1661 053E 345B RETLW 100-OVHC ; Amplitude 60 1662 053F 345B RETLW 100-OVHC ; Amplitude 61 1663 0540 345B RETLW 100-OVHC 1664 0541 345B RETLW 100-OVHC 1665 0542 345B RETLW 100-OVHC 1666 0543 1667 0543 345B RETLW 100-OVHC ; Amplitude 65 1668 0544 345B RETLW 100-OVHC 1669 0545 345B RETLW 100-OVHC 1670 0546 345B RETLW 100-OVHC 1671 0547 345B RETLW 100-OVHC 1672 0548 1673 0548 1674 0548 345B RETLW 100-OVHC ; Amplitude 70 1675 0549 345B RETLW 100-OVHC ; Amplitude 71 1676 054A 345B RETLW 100-OVHC 1677 054B 345B RETLW 100-OVHC 1678 054C 345B RETLW 100-OVHC 1679 054D 1680 054D 345B RETLW 100-OVHC ; Amplitude 75 1681 054E 345B RETLW 100-OVHC 1682 054F 345B RETLW 100-OVHC 1683 0550 345B RETLW 100-OVHC 1684 0551 345B RETLW 100-OVHC 1685 0552 1686 0552 345B RETLW 100-OVHC ; Amplitude 80 1687 0553 345B RETLW 100-OVHC ; Amplitude 81 1688 0554 345B RETLW 100-OVHC 1689 0555 345B RETLW 100-OVHC 1690 0556 345B RETLW 100-OVHC 1691 0557 1692 0557 345B RETLW 100-OVHC ; Amplitude 85 1693 0558 345B RETLW 100-OVHC 1694 0559 345B RETLW 100-OVHC 1695 055A 345B RETLW 100-OVHC 1696 055B 345B RETLW 100-OVHC 1697 055C 1698 055C 345B RETLW 100-OVHC ; Amplitude 90 1699 055D 345B RETLW 100-OVHC ; Amplitude 91 1700 055E 345B RETLW 100-OVHC 1701 055F 345B RETLW 100-OVHC 1702 0560 345B RETLW 100-OVHC 1703 0561 1704 0561 345B RETLW 100-OVHC ; Amplitude 95 1705 0562 345B RETLW 100-OVHC 1706 0563 345B RETLW 100-OVHC 1707 0564 345B RETLW 100-OVHC 1708 0565 345B RETLW 100-OVHC 1709 0566 1710 0566 3496 RETLW 159-OVHC ; Amplitude 100 159 1711 0567 1712 0567 ; GETDLYD is the table lookup for group D for intergroup delay. This group 1713 0567 ; requires byte expansion of 16*(100-AMPLIT). 1714 0567 ; Only amplitude 0.53 is presently usable. 1715 0567 ; 101+2 bytes must not cross a page boundary. 1716 0567 1717 0567 ; Total group h overhead is presently 61 cycles. 1718 0567 ; Delay D continues sequentially on page 5. 1719 0567 1720 0567 1721 0567 OVHD EQU 61 ; overhead to be subtracted 1722 0567 1723 0567 0820 GETDLYD MOVF AMPLIT,0 ; get amplitude 1724 0568 0782 ADDWF PCL,1 ; relative jump to data 1725 0569 1726 0569 3427 RETLW 100-OVHD ; Amplitude 0 Arguments MUST be positive! 1727 056A 34A6 RETLW 227-OVHD ; Amplitude 1 1811 - 16*(100-1) = 227 1728 056B 3427 RETLW 100-OVHD 1729 056C 3427 RETLW 100-OVHD 1730 056D 3427 RETLW 100-OVHD 1731 056E 1732 056E 3427 RETLW 100-OVHD ; Amplitude 5 1733 056F 3427 RETLW 100-OVHD 1734 0570 3427 RETLW 100-OVHD 1735 0571 3427 RETLW 100-OVHD 1736 0572 3427 RETLW 100-OVHD 1737 0573 1738 0573 3427 RETLW 100-OVHD ; Amplitude 10 1739 0574 3427 RETLW 100-OVHD 1740 0575 3427 RETLW 100-OVHD 1741 0576 3427 RETLW 100-OVHD 1742 0577 3427 RETLW 100-OVHD 1743 0578 1744 0578 3427 RETLW 100-OVHD ; Amplitude 15 1745 0579 3427 RETLW 100-OVHD 1746 057A 3427 RETLW 100-OVHD 1747 057B 3427 RETLW 100-OVHD 1748 057C 3427 RETLW 100-OVHD 1749 057D 1750 057D 3427 RETLW 100-OVHD ; Amplitude 20 1751 057E 3427 RETLW 100-OVHD ; Amplitude 21 1752 057F 3427 RETLW 100-OVHD 1753 0580 3427 RETLW 100-OVHD 1754 0581 3427 RETLW 100-OVHD 1755 0582 1756 0582 3427 RETLW 100-OVHD ; Amplitude 25 1757 0583 3427 RETLW 100-OVHD 1758 0584 3427 RETLW 100-OVHD 1759 0585 3427 RETLW 100-OVHD 1760 0586 3427 RETLW 100-OVHD 1761 0587 1762 0587 3427 RETLW 100-OVHD ; Amplitude 30 1763 0588 3427 RETLW 100-OVHD ; Amplitude 31 1764 0589 3427 RETLW 100-OVHD 1765 058A 3427 RETLW 100-OVHD 1766 058B 3427 RETLW 100-OVHD 1767 058C 1768 058C 3427 RETLW 100-OVHD ; Amplitude 35 1769 058D 3427 RETLW 100-OVHD 1770 058E 3427 RETLW 100-OVHD 1771 058F 3427 RETLW 100-OVHD 1772 0590 3427 RETLW 100-OVHD 1773 0591 1774 0591 1775 0591 3427 RETLW 100-OVHD ; Amplitude 40 1776 0592 3427 RETLW 100-OVHD ; Amplitude 41 1777 0593 3427 RETLW 100-OVHD 1778 0594 3427 RETLW 100-OVHD 1779 0595 3427 RETLW 100-OVHD 1780 0596 1781 0596 3427 RETLW 100-OVHD ; Amplitude 45 1782 0597 3427 RETLW 100-OVHD 1783 0598 3427 RETLW 100-OVHD 1784 0599 3427 RETLW 100-OVHD 1785 059A 3427 RETLW 100-OVHD 1786 059B 1787 059B 1788 059B 344B RETLW 136-OVHD ; Amplitude 50 936 - 16*(100-50) = 136 LOW BY FOUR????? 1789 059C 3427 RETLW 100-OVHD ; Amplitude 51 1790 059D 3427 RETLW 100-OVHD 1791 059E 3447 RETLW 132-OVHD ; Amplitude 53 884 - 16*(100-53) = 132 VERIFIED 1792 059F 3427 RETLW 100-OVHD 1793 05A0 1794 05A0 3427 RETLW 100-OVHD ; Amplitude 55 1795 05A1 3427 RETLW 100-OVHD 1796 05A2 3427 RETLW 100-OVHD 1797 05A3 3427 RETLW 100-OVHD 1798 05A4 3427 RETLW 100-OVHD 1799 05A5 1800 05A5 343D RETLW 122-OVHD ; Amplitude 60 762 - 16*(100-60) = 122 1801 05A6 3427 RETLW 100-OVHD ; Amplitude 61 1802 05A7 3427 RETLW 100-OVHD 1803 05A8 3427 RETLW 100-OVHD 1804 05A9 3427 RETLW 100-OVHD 1805 05AA 1806 05AA 3427 RETLW 100-OVHD ; Amplitude 65 1807 05AB 3427 RETLW 100-OVHD 1808 05AC 3427 RETLW 100-OVHD 1809 05AD 3427 RETLW 100-OVHD 1810 05AE 3427 RETLW 100-OVHD 1811 05AF 1812 05AF 1813 05AF 3427 RETLW 100-OVHD ; Amplitude 70 1814 05B0 3427 RETLW 100-OVHD ; Amplitude 71 1815 05B1 3427 RETLW 100-OVHD 1816 05B2 3427 RETLW 100-OVHD 1817 05B3 3427 RETLW 100-OVHD 1818 05B4 1819 05B4 3427 RETLW 100-OVHD ; Amplitude 75 1820 05B5 3427 RETLW 100-OVHD 1821 05B6 3427 RETLW 100-OVHD 1822 05B7 3427 RETLW 100-OVHD 1823 05B8 3427 RETLW 100-OVHD 1824 05B9 1825 05B9 3427 RETLW 100-OVHD ; Amplitude 80 1826 05BA 3427 RETLW 100-OVHD ; Amplitude 81 1827 05BB 3427 RETLW 100-OVHD 1828 05BC 3427 RETLW 100-OVHD 1829 05BD 3427 RETLW 100-OVHD 1830 05BE 1831 05BE 3427 RETLW 100-OVHD ; Amplitude 85 1832 05BF 3427 RETLW 100-OVHD 1833 05C0 3427 RETLW 100-OVHD 1834 05C1 3427 RETLW 100-OVHD 1835 05C2 3427 RETLW 100-OVHD 1836 05C3 1837 05C3 3427 RETLW 100-OVHD ; Amplitude 90 240 - 16*(100-90) = 80 1838 05C4 3427 RETLW 100-OVHD ; Amplitude 91 1839 05C5 3427 RETLW 100-OVHD 1840 05C6 3427 RETLW 100-OVHD 1841 05C7 3427 RETLW 100-OVHD 1842 05C8 1843 05C8 340C RETLW 73-OVHD ; Amplitude 95 153 - 16*(100-95) = 73 1844 05C9 3427 RETLW 100-OVHD 1845 05CA 3427 RETLW 100-OVHD 1846 05CB 3408 RETLW 69-OVHD ; Amplitude 98 101 - 16*(100-98) = 69 1847 05CC 3407 RETLW 68-OVHD ; Amplitude 99 84 - 16*(100-99) = 68 1848 05CD 1849 05CD 3406 RETLW 67-OVHD ; Amplitude 100 67 - 16*(100-100) = 67 1850 05CE 1851 05CE 1852 05CE ; GETDLYE is the table lookup for group E for p3 and p7%. Its overhead is 7 bytes. 1853 05CE ; Amplitudes 1,2, and 3 are not realizable. Amplitude 4 is an approximation. 1854 05CE ; 101+2 bytes must not cross a page boundary. 1855 05CE 1856 05CE ; Total group E overhead is presently 9 cycles. 1857 05CE ; Delay E opens page 6. 1858 05CE 1859 05CE ORG 0x600 1860 0600 OVHE EQU 9 ; overhead to be subtracted 1861 0600 1862 0600 0820 GETDLYE MOVF AMPLIT,0 ; get amplitude 1863 0601 0782 ADDWF PCL,1 ; relative jump to data 1864 0602 1865 0602 345B RETLW 100-OVHE ; Amplitude 0 Arguments MUST be positive! 1866 0603 3400 RETLW 9-OVHE ; Amplitude 1 is badly approximated 1867 0604 3400 RETLW 9-OVHE ; Amplitude 2 is badly approximated 1868 0605 3400 RETLW 9-OVHE ; Amplitude 3 is badly approximated 1869 0606 3400 RETLW 9-OVHE ; Amplitude 4 approximation 9 should be about 7 1870 0607 1871 0607 3400 RETLW 9-OVHE ; Amplitude 5 approx 9 = minimum 1872 0608 345B RETLW 100-OVHE 1873 0609 345B RETLW 100-OVHE 1874 060A 345B RETLW 100-OVHE 1875 060B 345B RETLW 100-OVHE 1876 060C 1877 060C 3409 RETLW 18-OVHE ; Amplitude 10 18 1878 060D 345B RETLW 100-OVHE 1879 060E 345B RETLW 100-OVHE 1880 060F 345B RETLW 100-OVHE 1881 0610 345B RETLW 100-OVHE 1882 0611 1883 0611 345B RETLW 100-OVHE ; Amplitude 15 1884 0612 345B RETLW 100-OVHE 1885 0613 345B RETLW 100-OVHE 1886 0614 345B RETLW 100-OVHE 1887 0615 345B RETLW 100-OVHE 1888 0616 1889 0616 345B RETLW 100-OVHE ; Amplitude 20 1890 0617 345B RETLW 100-OVHE ; Amplitude 21 1891 0618 345B RETLW 100-OVHE 1892 0619 345B RETLW 100-OVHE 1893 061A 345B RETLW 100-OVHE 1894 061B 1895 061B 345B RETLW 100-OVHE ; Amplitude 25 1896 061C 345B RETLW 100-OVHE 1897 061D 345B RETLW 100-OVHE 1898 061E 345B RETLW 100-OVHE 1899 061F 345B RETLW 100-OVHE 1900 0620 1901 0620 1902 0620 345B RETLW 100-OVHE ; Amplitude 30 1903 0621 345B RETLW 100-OVHE ; Amplitude 31 1904 0622 345B RETLW 100-OVHE 1905 0623 345B RETLW 100-OVHE 1906 0624 345B RETLW 100-OVHE 1907 0625 1908 0625 345B RETLW 100-OVHE ; Amplitude 35 1909 0626 345B RETLW 100-OVHE 1910 0627 345B RETLW 100-OVHE 1911 0628 345B RETLW 100-OVHE 1912 0629 345B RETLW 100-OVHE 1913 062A 1914 062A 1915 062A 345B RETLW 100-OVHE ; Amplitude 40 1916 062B 345B RETLW 100-OVHE ; Amplitude 41 1917 062C 345B RETLW 100-OVHE 1918 062D 345B RETLW 100-OVHE 1919 062E 345B RETLW 100-OVHE 1920 062F 1921 062F 345B RETLW 100-OVHE ; Amplitude 45 1922 0630 345B RETLW 100-OVHE 1923 0631 345B RETLW 100-OVHE 1924 0632 345B RETLW 100-OVHE 1925 0633 345B RETLW 100-OVHE 1926 0634 1927 0634 1928 0634 345B RETLW 100-OVHE ; Amplitude 50 1929 0635 345B RETLW 100-OVHE ; Amplitude 51 1930 0636 345B RETLW 100-OVHE 1931 0637 3438 RETLW 65-OVHE ; Amplitude 53 65 1932 0638 345B RETLW 100-OVHE 1933 0639 1934 0639 345B RETLW 100-OVHE ; Amplitude 55 1935 063A 345B RETLW 100-OVHE 1936 063B 345B RETLW 100-OVHE 1937 063C 345B RETLW 100-OVHE 1938 063D 345B RETLW 100-OVHE 1939 063E 1940 063E 1941 063E 345B RETLW 100-OVHE ; Amplitude 60 1942 063F 345B RETLW 100-OVHE ; Amplitude 61 1943 0640 345B RETLW 100-OVHE 1944 0641 345B RETLW 100-OVHE 1945 0642 345B RETLW 100-OVHE 1946 0643 1947 0643 345B RETLW 100-OVHE ; Amplitude 65 1948 0644 345B RETLW 100-OVHE 1949 0645 345B RETLW 100-OVHE 1950 0646 345B RETLW 100-OVHE 1951 0647 345B RETLW 100-OVHE 1952 0648 1953 0648 1954 0648 345B RETLW 100-OVHE ; Amplitude 70 1955 0649 345B RETLW 100-OVHE ; Amplitude 71 1956 064A 345B RETLW 100-OVHE 1957 064B 345B RETLW 100-OVHE 1958 064C 345B RETLW 100-OVHE 1959 064D 1960 064D 345B RETLW 100-OVHE ; Amplitude 75 1961 064E 345B RETLW 100-OVHE 1962 064F 345B RETLW 100-OVHE 1963 0650 345B RETLW 100-OVHE 1964 0651 345B RETLW 100-OVHE 1965 0652 1966 0652 345B RETLW 100-OVHE ; Amplitude 80 1967 0653 345B RETLW 100-OVHE ; Amplitude 81 1968 0654 345B RETLW 100-OVHE 1969 0655 345B RETLW 100-OVHE 1970 0656 345B RETLW 100-OVHE 1971 0657 1972 0657 345B RETLW 100-OVHE ; Amplitude 85 1973 0658 345B RETLW 100-OVHE 1974 0659 345B RETLW 100-OVHE 1975 065A 345B RETLW 100-OVHE 1976 065B 345B RETLW 100-OVHE 1977 065C 1978 065C 345B RETLW 100-OVHE ; Amplitude 90 1979 065D 345B RETLW 100-OVHE ; Amplitude 91 1980 065E 345B RETLW 100-OVHE 1981 065F 345B RETLW 100-OVHE 1982 0660 345B RETLW 100-OVHE 1983 0661 1984 0661 345B RETLW 100-OVHE ; Amplitude 95 1985 0662 345B RETLW 100-OVHE 1986 0663 345B RETLW 100-OVHE 1987 0664 345B RETLW 100-OVHE 1988 0665 345B RETLW 100-OVHE 1989 0666 1990 0666 34D1 RETLW 218-OVHE ; Amplitude 100 218 1991 0667 1992 0667 ; GETDLYF is the table lookup for group F for p4 and p7%. This group 1993 0667 ; requires byte expansion of asdfasdf. Its overhead is 7 bytes. 1994 0667 ; Amplitude 1 is not usable. 1995 0667 ; 101+2 bytes must not cross a page boundary. 1996 0667 1997 0667 ; Total group h overhead is presently 17 (below)/22 cycles. 1998 0667 ; Delay F follows sequentially on page 6 1999 0667 2000 0667 OVHF EQU 22 ; overhead to be subtracted 2001 0667 OVHFL EQU 17 ; low amplitude 16 overhead 2002 0667 2003 0667 0820 GETDLYF MOVF AMPLIT,0 ; get amplitude 2004 0668 0782 ADDWF PCL,1 ; relative jump to data 2005 0669 2006 0669 3453 RETLW 100-OVHFL ; Amplitude 0 Arguments MUST be positive! 2007 066A 3400 RETLW 17-OVHFL ; Amplitude 1 11 badly approximated 2008 066B 3405 RETLW 22-OVHFL ; Amplitude 2 22 accurate 2009 066C 3453 RETLW 100-OVHFL 2010 066D 3453 RETLW 100-OVHFL 2011 066E 2012 066E 3426 RETLW 55-OVHFL ; Amplitude 5 approx 55 2013 066F 3453 RETLW 100-OVHFL 2014 0670 3453 RETLW 100-OVHFL 2015 0671 3453 RETLW 100-OVHFL 2016 0672 3453 RETLW 100-OVHFL 2017 0673 2018 0673 345D RETLW 110-OVHFL ; Amplitude 10 110 2019 0674 3453 RETLW 100-OVHFL 2020 0675 3453 RETLW 100-OVHFL 2021 0676 3453 RETLW 100-OVHFL 2022 0677 3453 RETLW 100-OVHFL 2023 0678 2024 0678 3453 RETLW 100-OVHFL ; Amplitude 15 2025 0679 349E RETLW 175-OVHFL ; Amplitude 16 approx 175 2026 067A 341C RETLW 50-OVHF ; Amplitude 17 approx 186 - 8*17 = 50 2027 067B 344E RETLW 100-OVHF 2028 067C 344E RETLW 100-OVHF 2029 067D 2030 067D 3425 RETLW 59-OVHF ; Amplitude 20 219 - 8*20 = 59 2031 067E 344E RETLW 100-OVHF ; Amplitude 21 2032 067F 344E RETLW 100-OVHF 2033 0680 344E RETLW 100-OVHF 2034 0681 344E RETLW 100-OVHF 2035 0682 2036 0682 344E RETLW 100-OVHF ; Amplitude 25 2037 0683 344E RETLW 100-OVHF 2038 0684 344E RETLW 100-OVHF 2039 0685 344E RETLW 100-OVHF 2040 0686 344E RETLW 100-OVHF 2041 0687 2042 0687 2043 0687 344E RETLW 100-OVHF ; Amplitude 30 2044 0688 344E RETLW 100-OVHF ; Amplitude 31 2045 0689 344E RETLW 100-OVHF 2046 068A 344E RETLW 100-OVHF 2047 068B 344E RETLW 100-OVHF 2048 068C 2049 068C 344E RETLW 100-OVHF ; Amplitude 35 2050 068D 344E RETLW 100-OVHF 2051 068E 344E RETLW 100-OVHF 2052 068F 344E RETLW 100-OVHF 2053 0690 344E RETLW 100-OVHF 2054 0691 2055 0691 2056 0691 344E RETLW 100-OVHF ; Amplitude 40 2057 0692 344E RETLW 100-OVHF ; Amplitude 41 2058 0693 344E RETLW 100-OVHF 2059 0694 344E RETLW 100-OVHF 2060 0695 344E RETLW 100-OVHF 2061 0696 2062 0696 344E RETLW 100-OVHF ; Amplitude 45 2063 0697 344E RETLW 100-OVHF 2064 0698 344E RETLW 100-OVHF 2065 0699 344E RETLW 100-OVHF 2066 069A 344E RETLW 100-OVHF 2067 069B 2068 069B 2069 069B 344E RETLW 100-OVHF ; Amplitude 50 2070 069C 344E RETLW 100-OVHF ; Amplitude 51 2071 069D 344E RETLW 100-OVHF 2072 069E 3474 RETLW 138-OVHF ; Amplitude 53 562 - 8*53 = 138 2073 069F 344E RETLW 100-OVHF 2074 06A0 2075 06A0 344E RETLW 100-OVHF ; Amplitude 55 2076 06A1 344E RETLW 100-OVHF 2077 06A2 344E RETLW 100-OVHF 2078 06A3 344E RETLW 100-OVHF 2079 06A4 344E RETLW 100-OVHF 2080 06A5 2081 06A5 2082 06A5 344E RETLW 100-OVHF ; Amplitude 60 2083 06A6 344E RETLW 100-OVHF ; Amplitude 61 2084 06A7 344E RETLW 100-OVHF 2085 06A8 344E RETLW 100-OVHF 2086 06A9 344E RETLW 100-OVHF 2087 06AA 2088 06AA 344E RETLW 100-OVHF ; Amplitude 65 2089 06AB 344E RETLW 100-OVHF 2090 06AC 344E RETLW 100-OVHF 2091 06AD 344E RETLW 100-OVHF 2092 06AE 344E RETLW 100-OVHF 2093 06AF 2094 06AF 2095 06AF 344E RETLW 100-OVHF ; Amplitude 70 2096 06B0 344E RETLW 100-OVHF ; Amplitude 71 2097 06B1 344E RETLW 100-OVHF 2098 06B2 344E RETLW 100-OVHF 2099 06B3 344E RETLW 100-OVHF 2100 06B4 2101 06B4 344E RETLW 100-OVHF ; Amplitude 75 2102 06B5 344E RETLW 100-OVHF 2103 06B6 344E RETLW 100-OVHF 2104 06B7 344E RETLW 100-OVHF 2105 06B8 344E RETLW 100-OVHF 2106 06B9 2107 06B9 344E RETLW 100-OVHF ; Amplitude 80 2108 06BA 344E RETLW 100-OVHF ; Amplitude 81 2109 06BB 344E RETLW 100-OVHF 2110 06BC 344E RETLW 100-OVHF 2111 06BD 344E RETLW 100-OVHF 2112 06BE 2113 06BE 344E RETLW 100-OVHF ; Amplitude 85 2114 06BF 344E RETLW 100-OVHF 2115 06C0 344E RETLW 100-OVHF 2116 06C1 344E RETLW 100-OVHF 2117 06C2 344E RETLW 100-OVHF 2118 06C3 2119 06C3 344E RETLW 100-OVHF ; Amplitude 90 2120 06C4 344E RETLW 100-OVHF ; Amplitude 91 2121 06C5 344E RETLW 100-OVHF 2122 06C6 344E RETLW 100-OVHF 2123 06C7 344E RETLW 100-OVHF 2124 06C8 2125 06C8 344E RETLW 100-OVHF ; Amplitude 95 2126 06C9 344E RETLW 100-OVHF 2127 06CA 344E RETLW 100-OVHF 2128 06CB 344E RETLW 100-OVHF 2129 06CC 344E RETLW 100-OVHF 2130 06CD 2131 06CD 34CA RETLW 224-OVHF ; Amplitude 100 1024 - 8*100 = 224 2132 06CE 2133 06CE ; GETDLYG is the table lookup for group G for p3 and p7%. This group 2134 06CE ; requires byte expansion of 5*AMPLIT. Its overhead is 7 bytes. 2135 06CE ; Amplitudes 1 and 2 not usable, 3 is very marginal. 2136 06CE ; 101+2 bytes must not cross a page boundary. 2137 06CE 2138 06CE ; Total group h overhead is presently 17/22 cycles with threshold at 40 2139 06CE ; Delay G opens page 7. 2140 06CE 2141 06CE ORG 0x700 2142 0700 2143 0700 OVHG EQU 22 ; overhead to be subtracted 2144 0700 OVHGT EQU 17 ; low overhead to be subtracted 16 OR LESS 2145 0700 2146 0700 0820 GETDLYG MOVF AMPLIT,0 ; get amplitude 2147 0701 0782 ADDWF PCL,1 ; relative jump to data 2148 0702 2149 0702 3453 RETLW 100-OVHGT ; Amplitude 0 Arguments MUST be positive! 2150 0703 3400 RETLW 17-OVHGT ; Amplitude 1 4 VERY BAD APPROX 17 2151 0704 3400 RETLW 17-OVHGT ; Amplitude 2 7 VERY BAD APPROX 17 2152 0705 3400 RETLW 17-OVHGT ; Amplitude 3 approx 15 APPROX 17 2153 0706 3403 RETLW 20-OVHGT ; Amplitude 4 approx 20 2154 0707 2155 0707 3409 RETLW 26-OVHGT ; Amplitude 5 approx 26 2156 0708 3453 RETLW 100-OVHGT 2157 0709 3453 RETLW 100-OVHGT 2158 070A 3453 RETLW 100-OVHGT 2159 070B 3453 RETLW 100-OVHGT 2160 070C 2161 070C 3422 RETLW 51-OVHGT ; Amplitude 10 51 2162 070D 3453 RETLW 100-OVHGT 2163 070E 3453 RETLW 100-OVHGT 2164 070F 3453 RETLW 100-OVHGT 2165 0710 3453 RETLW 100-OVHGT 2166 0711 2167 0711 3453 RETLW 100-OVHGT ; Amplitude 15 2168 0712 3453 RETLW 100-OVHGT 2169 0713 3453 RETLW 100-OVHGT 2170 0714 3453 RETLW 100-OVHGT 2171 0715 3453 RETLW 100-OVHGT 2172 0716 2173 0716 3453 RETLW 100-OVHGT ; Amplitude 20 2174 0717 3453 RETLW 100-OVHGT ; Amplitude 21 2175 0718 3453 RETLW 100-OVHGT 2176 0719 3453 RETLW 100-OVHGT 2177 071A 3453 RETLW 100-OVHGT 2178 071B 2179 071B 3453 RETLW 100-OVHGT ; Amplitude 25 2180 071C 3453 RETLW 100-OVHGT 2181 071D 3453 RETLW 100-OVHGT 2182 071E 3453 RETLW 100-OVHGT 2183 071F 3453 RETLW 100-OVHGT 2184 0720 2185 0720 2186 0720 3495 RETLW 166-OVHGT ; Amplitude 30 166 2187 0721 3453 RETLW 100-OVHGT ; Amplitude 31 2188 0722 3453 RETLW 100-OVHGT 2189 0723 3453 RETLW 100-OVHGT 2190 0724 3453 RETLW 100-OVHGT 2191 0725 2192 0725 3453 RETLW 100-OVHGT ; Amplitude 35 2193 0726 3453 RETLW 100-OVHGT ; 2194 0727 3453 RETLW 100-OVHGT 2195 0728 3453 RETLW 100-OVHGT 2196 0729 3453 RETLW 100-OVHGT 2197 072A 2198 072A 2199 072A 34D6 RETLW 231-OVHGT ; Amplitude 40 231 threshold limit 2200 072B 344E RETLW 100-OVHG ; Amplitude 41 2201 072C 344E RETLW 100-OVHG 2202 072D 344E RETLW 100-OVHG 2203 072E 344E RETLW 100-OVHG 2204 072F 2205 072F 344E RETLW 100-OVHG ; Amplitude 45 2206 0730 344E RETLW 100-OVHG 2207 0731 344E RETLW 100-OVHG 2208 0732 344E RETLW 100-OVHG 2209 0733 344E RETLW 100-OVHG 2210 0734 2211 0734 2212 0734 344E RETLW 100-OVHG ; Amplitude 50 2213 0735 344E RETLW 100-OVHG ; Amplitude 51 2214 0736 344E RETLW 100-OVHG 2215 0737 3425 RETLW 59-OVHG ; Amplitude 53 324 - 5*53 = 59 2216 0738 344E RETLW 100-OVHG 2217 0739 2218 0739 344E RETLW 100-OVHG ; Amplitude 55 2219 073A 344E RETLW 100-OVHG 2220 073B 344E RETLW 100-OVHG 2221 073C 344E RETLW 100-OVHG 2222 073D 344E RETLW 100-OVHG 2223 073E 2224 073E 2225 073E 344E RETLW 100-OVHG ; Amplitude 60 2226 073F 344E RETLW 100-OVHG ; Amplitude 61 2227 0740 344E RETLW 100-OVHG 2228 0741 344E RETLW 100-OVHG 2229 0742 344E RETLW 100-OVHG 2230 0743 2231 0743 344E RETLW 100-OVHG ; Amplitude 65 2232 0744 344E RETLW 100-OVHG 2233 0745 344E RETLW 100-OVHG 2234 0746 344E RETLW 100-OVHG 2235 0747 344E RETLW 100-OVHG 2236 0748 2237 0748 2238 0748 344E RETLW 100-OVHG ; Amplitude 70 2239 0749 344E RETLW 100-OVHG ; Amplitude 71 2240 074A 344E RETLW 100-OVHG 2241 074B 344E RETLW 100-OVHG 2242 074C 344E RETLW 100-OVHG 2243 074D 2244 074D 344E RETLW 100-OVHG ; Amplitude 75 2245 074E 344E RETLW 100-OVHG 2246 074F 344E RETLW 100-OVHG 2247 0750 344E RETLW 100-OVHG 2248 0751 344E RETLW 100-OVHG 2249 0752 2250 0752 344E RETLW 100-OVHG ; Amplitude 80 2251 0753 344E RETLW 100-OVHG ; Amplitude 81 2252 0754 344E RETLW 100-OVHG 2253 0755 344E RETLW 100-OVHG 2254 0756 344E RETLW 100-OVHG 2255 0757 2256 0757 344E RETLW 100-OVHG ; Amplitude 85 2257 0758 344E RETLW 100-OVHG 2258 0759 344E RETLW 100-OVHG 2259 075A 344E RETLW 100-OVHG 2260 075B 344E RETLW 100-OVHG 2261 075C 2262 075C 344E RETLW 100-OVHG ; Amplitude 90 2263 075D 344E RETLW 100-OVHG ; Amplitude 91 2264 075E 344E RETLW 100-OVHG 2265 075F 344E RETLW 100-OVHG 2266 0760 344E RETLW 100-OVHG 2267 0761 2268 0761 344E RETLW 100-OVHG ; Amplitude 95 2269 0762 344E RETLW 100-OVHG 2270 0763 344E RETLW 100-OVHG 2271 0764 344E RETLW 100-OVHG 2272 0765 344E RETLW 100-OVHG 2273 0766 2274 0766 34CD RETLW 227-OVHG ; Amplitude 100 727 - 5*100 = 227 2275 0767 2276 0767 2277 0767 ; GETDLYH2 is the table lookup for group H, the post pulse delay. This group 2278 0767 ; requires byte expansion of 16(100-AMPLIT0. Its overhead is 29/33 bytes. 2279 0767 ; 101+2 bytes must not cross a page boundary. 2280 0767 2281 0767 ; Total group h overhead is presently ASDFASDF cycles. 2282 0767 ; This routine will hang on a delay request of VAL - OVHC = 00! 2283 0767 ; Delay H follows sequentially on mid page 7. 2284 0767 2285 0767 OVHH EQU 33 ; overhead to be subtracted active 2286 0767 OVHHT EQU 29 ; overhead to be subtracted above threshold 2287 0767 2288 0767 0820 GETDLYH2 MOVF AMPLIT,0 ; get amplitude 2289 0768 0782 ADDWF PCL,1 ; relative jump to data 2290 0769 2291 0769 3443 RETLW 100-OVHH ; Amplitude 0 Arguments MUST be positive! 2292 076A 3443 RETLW 100-OVHH ; Amplitude 1 2293 076B 3443 RETLW 100-OVHH 2294 076C 3443 RETLW 100-OVHH 2295 076D 3443 RETLW 100-OVHH 2296 076E 2297 076E 3443 RETLW 100-OVHH ; Amplitude 5 2298 076F 3443 RETLW 100-OVHH 2299 0770 3443 RETLW 100-OVHH 2300 0771 3443 RETLW 100-OVHH 2301 0772 3443 RETLW 100-OVHH 2302 0773 2303 0773 3443 RETLW 100-OVHH ; Amplitude 10 2304 0774 3443 RETLW 100-OVHH 2305 0775 3443 RETLW 100-OVHH 2306 0776 3443 RETLW 100-OVHH 2307 0777 3443 RETLW 100-OVHH 2308 0778 2309 0778 3443 RETLW 100-OVHH ; Amplitude 15 2310 0779 3443 RETLW 100-OVHH 2311 077A 3443 RETLW 100-OVHH 2312 077B 3443 RETLW 100-OVHH 2313 077C 3443 RETLW 100-OVHH 2314 077D 2315 077D 3443 RETLW 100-OVHH ; Amplitude 20 2316 077E 3443 RETLW 100-OVHH ; Amplitude 21 2317 077F 3443 RETLW 100-OVHH 2318 0780 3443 RETLW 100-OVHH 2319 0781 3443 RETLW 100-OVHH 2320 0782 2321 0782 3443 RETLW 100-OVHH ; Amplitude 25 2322 0783 3443 RETLW 100-OVHH 2323 0784 3443 RETLW 100-OVHH 2324 0785 3443 RETLW 100-OVHH 2325 0786 3443 RETLW 100-OVHH 2326 0787 2327 0787 2328 0787 3443 RETLW 100-OVHH ; Amplitude 30 2329 0788 3443 RETLW 100-OVHH ; Amplitude 31 2330 0789 3443 RETLW 100-OVHH 2331 078A 3443 RETLW 100-OVHH 2332 078B 3443 RETLW 100-OVHH 2333 078C 2334 078C 3443 RETLW 100-OVHH ; Amplitude 35 2335 078D 3443 RETLW 100-OVHH 2336 078E 3443 RETLW 100-OVHH 2337 078F 3443 RETLW 100-OVHH 2338 0790 3443 RETLW 100-OVHH 2339 0791 2340 0791 2341 0791 3443 RETLW 100-OVHH ; Amplitude 40 2342 0792 3443 RETLW 100-OVHH ; Amplitude 41 2343 0793 3443 RETLW 100-OVHH 2344 0794 3443 RETLW 100-OVHH 2345 0795 3443 RETLW 100-OVHH 2346 0796 2347 0796 3443 RETLW 100-OVHH ; Amplitude 45 2348 0797 3443 RETLW 100-OVHH 2349 0798 3443 RETLW 100-OVHH 2350 0799 3443 RETLW 100-OVHH 2351 079A 3443 RETLW 100-OVHH 2352 079B 2353 079B 2354 079B 3443 RETLW 100-OVHH ; Amplitude 50 2355 079C 3443 RETLW 100-OVHH ; Amplitude 51 2356 079D 3443 RETLW 100-OVHH 2357 079E 3447 RETLW 104-OVHH ; Amplitude 53 428*2=856 - 16*(100-53)= 104 2358 079F 3443 RETLW 100-OVHH 2359 07A0 2360 07A0 3443 RETLW 100-OVHH ; Amplitude 55 2361 07A1 3443 RETLW 100-OVHH 2362 07A2 3443 RETLW 100-OVHH 2363 07A3 3443 RETLW 100-OVHH 2364 07A4 3443 RETLW 100-OVHH 2365 07A5 2366 07A5 2367 07A5 3443 RETLW 100-OVHH ; Amplitude 60 2368 07A6 3443 RETLW 100-OVHH ; Amplitude 61 2369 07A7 3443 RETLW 100-OVHH 2370 07A8 3443 RETLW 100-OVHH 2371 07A9 3443 RETLW 100-OVHH 2372 07AA 2373 07AA 3443 RETLW 100-OVHH ; Amplitude 65 2374 07AB 3443 RETLW 100-OVHH 2375 07AC 3443 RETLW 100-OVHH 2376 07AD 3443 RETLW 100-OVHH 2377 07AE 3443 RETLW 100-OVHH 2378 07AF 2379 07AF 2380 07AF 3443 RETLW 100-OVHH ; Amplitude 70 2381 07B0 3443 RETLW 100-OVHH ; Amplitude 71 2382 07B1 3443 RETLW 100-OVHH 2383 07B2 3443 RETLW 100-OVHH 2384 07B3 3443 RETLW 100-OVHH 2385 07B4 2386 07B4 3443 RETLW 100-OVHH ; Amplitude 75 2387 07B5 3443 RETLW 100-OVHH 2388 07B6 3443 RETLW 100-OVHH 2389 07B7 3443 RETLW 100-OVHH 2390 07B8 3443 RETLW 100-OVHH 2391 07B9 2392 07B9 3443 RETLW 100-OVHH ; Amplitude 80 2393 07BA 3443 RETLW 100-OVHH ; Amplitude 81 2394 07BB 3443 RETLW 100-OVHH 2395 07BC 3443 RETLW 100-OVHH 2396 07BD 3443 RETLW 100-OVHH 2397 07BE 2398 07BE 3443 RETLW 100-OVHH ; Amplitude 85 2399 07BF 3443 RETLW 100-OVHH 2400 07C0 3403 RETLW 36-OVHH ; Amplitude 87 approx 122*2 - 16*(100-87) = 36 2401 07C1 3447 RETLW 100-OVHHT ; Amplitude 88 approx 113*2 = 226 2402 07C2 3447 RETLW 100-OVHHT ; Amplitude 89 approx 104*2 = 208 2403 07C3 2404 07C3 3497 RETLW 180-OVHHT ; Amplitude 90 95*2 = 180 2405 07C4 3447 RETLW 100-OVHHT ; Amplitude 91 2406 07C5 3447 RETLW 100-OVHHT 2407 07C6 3447 RETLW 100-OVHHT 2408 07C7 3447 RETLW 100-OVHHT 2409 07C8 2410 07C8 3447 RETLW 100-OVHHT ; Amplitude 95 100 2411 07C9 3447 RETLW 100-OVHHT 2412 07CA 3447 RETLW 100-OVHHT 2413 07CB 340F RETLW 44-OVHHT ; Amplitude 98 22*2=44 2414 07CC 3447 RETLW 100-OVHHT ; Amplitude 99 fixed at 26 - sub not called 2415 07CD 2416 07CD 3443 RETLW 100-OVHH ; Amplitude 100 fixed at 8 - sub not called 2417 07CE 2418 07CE ; End of listing 2419 07CE --------------------------------------------- Number of errors = 0