# cpp -undef -nostdinc -traditional -Wcomment -DLANGUAGE_ASSEMBLY -Dz80 -DP8x r58.asm # ! XXX # ! *lakki* kun toistin on avattu ja tx menee kiinni mutta on vielä avattavissa # ! +kantoaallolla, toistin ei aukea jos lähettää avauspiippaa mutta kantoaallolla # ! +aukeaa # # ! #define ALLOW_6_25_kHz # # !---------------------------------------------------------------------- # # # # # # !------------- # ! # ! For R58 logics P8N/P8E and A8N # ! RF decks: # ! RB58 64/45.0 S8B # ! RC58 64/21.4 S8C # ! RD58 128/86.5125 S8D # ! # ! RB660 synthesizer works as syncrd=s8c, (logics swapped to 1/A8N) # ! some changes needed: # ! tpc-line (add resistor (only if power settings do not work)) # ! on txvco (+ ->|- VBUFF ????? only during tuneup ????), # ! and txon-line (remove one inverter from circuit). # ! # ! RB58VY or RB580 do NOT work like RB660. # ! # !------------- # !! # !! 2.0 000421 Too many changes here and there to mention specifically. # !! 2.1 000507 TX does not affect reception if Func != Std. # !! 1kHz off rx_freq dpy (because of + and - of if_freq) fixed. # !! 2.2 000508 Scanner things. Works after 42 nanosec of testing. # !! 2.3 000510 Ghost digit after bitbanged dtmf fixed. # !! Perm rejects honored. # !! It already was fixed in v1.7. ugh. # !! Fix rejecting a memory if scanning (vip_freq, not the mem index) # !! CU58AF fix. Was broken from 2.0. # !! Display during opened squelch. # !! 2.4 000513 Tail-less squelch with fully quieting signals. # !! Tail timer was not always properly rewound. # !! 2.5 000514 Shorter "quick press" of "monitor" thingy. # !! RFC wipe and blank-filler in setup. No default RFC (of 85 if 0). # !! 2.6 000514 Repeater stuff first cuts. # !! 2.7 000515 Second cuts. Blips etc. Just placeholders really. # !! Setup "tabs" show ??? if value out-of-range. # !! SqL BIG display similar like SqL display. # !! Pathetic troubles with OUT0 cleanup. # !! Why on earth was AUDIOC on during CCIR xmit ? Local noise # !! audible when signalling in duplex mode ! # !! Repeater tx_on left SERV & audio open with certain conditions. # !! Scanner fouled slices badly in sort. # !! 2.8 000715 Stuff for repeater CW. # !! Wrong check of [txon] in DTMF-keypad, [pttdn] instead now. # !! Cumbersome alpha input in menu. # !! 3.0 000718 DTMF * repeater open. repeater opens when /PTT released. # !! Open squelch required to accept 1750 Hz or DTMF *. # !! Check for 0xC0 Call packet (will be other formats) # !! #9 closes repeater. # !! ## "gives a report". Report scaling needs more work. # !! 3.1 000718 UR_59 with 5x if tailless sqclose, 4x if tail. # !! In basic display, 99-rssi instead of 99-txpwr, if rptr. # !! 3.2 000723 Additional A/D inputs, first cuts. # !! 3.3 000723 PA HOT and ANT BAD alert messages from repeater, blip-time. # !! Sense of AF relaying wrt /MIC selectable. # !! 3.4 000725 Tone Access bypass flag for repeater. # !! powerdown keeps power relay on, if not Std Function. # !! 3.5 000730 FSK pager receiver wrong in versions 3.0 upto including 3.4. # !! 3.6 000805 Toggling scanmask bits leaves channel immediately. # !! Carrier access to repeater gave excess ID messages. # !! Scanner pushed all spikes into "vip list", now only those # !! which really open squelch. # !! single-digit+PTT indirect from shortcut 0...9. # !! Repeater MIC selection might have failed until local PTT used. # !! Remote config first cuts. # !! Squelch lights up handset, just like local manipulation. # !! Separate Greet, During and Bye repeater cwid messages. # !! Backspace in menu is now really backspace, basic dpy # !! retains "clear all" CL effect. # !! 3.7 000807 Secretive config passwd rearranged, hide it and only it # !! from remote queries. # !! Requirement for repeater access, initial carrier less than # !! 10 seconds, more than 1/4 second. Else stays idle. # !! Accesstone for "closing" repeater waits tone to end, # !! then tx and open audio. # !! Accept DisplayConfig packet only when own cfg_remote_id is set. # !! Repeater access methods. # !! 3.8 000808 Remote access of CFG_DYN values. Yucko stuff, as always. # !! Squelch tightening and txpower increase as DTMF commands. # !! Display phone icon when setup has remote data visible. # !! 3.9 000810 Config packets lengthened. # !! Some new packets added. # !! Remote access also to set values, not only get. # !! 3.A 000811 Cursor _ for digbuf. # !! First erase one chr, then all if CL kept down. # !! Separate, slightly slower scroll of letter input. # !! Fixed bug with 8 characters of remote config sent. # !! Empty remote record by trying to set 9 or more chrs. # !! String records have _ padding (so leading spaces stand out). # !! volume/audio_dst changed positions, silly debug. # !! slight delay into CU53 keypad. Fixed probs reported by OH2BGN. # !! 3.B 001029 SPEECH ja SC:AutoSC # !! 3.C 001030 Fixes to try to solve stuck FSK receive. # !! Fixes to try to solve nvram foulup. # !! un-SERV at txon (audio/led/status-pin) # !! ad_tp4 aka TEMP slope is negative for increasing temperature. # !! autoqsy - generalization of AutoSC # !! save_nvdata after FSK configuration. # !! continuous redraw when PTT down in menu - status displays # !! 3.D 001110 keyclick pitch table # !! 3.E 001121 UnReject timeout. # !! Quick setup positioning with n(n(n)) ENT. # !! dtmf 1,2 alarm strings in setup, wrong nvram addresses. # !! 3.F 001124 SC:nodAtA # !! 3.F 010213 "ILL" 4 more out-of-band tx spots. # !! 3.F 010216 PH:LO Inj above/below for 220 things # !! 3.F 010616 -DTCXO= compilation switch # !! 3.F 010703 PTT in repeater mode mimics access (simple linking method) # !! Separate blip for normal use and link use. # !! Separate cw pitches for above blips. # !! 3.G 011003 CTCSS tones were wrong. # !! 3.H 011220 6.25kHz step tried. # !! 3.J 020409 If id_bye == "", tx unnecessary. # !! PA_Hot and ant_bad messages as strings in setup, # !! no fixed usage (though very suggestive names). # !! Repeater USEcnt open counter. # !! Repeater USEhrS transmitter hours. # !! Repeater blip is pre-empted by carrier. # !! Repeater (re-)enters open state when /LOCAL pin rises, # !! useful for triggering cwid externally. # !! Repeater gives better S-reports (setup S1rSSi, S9rSSi), # !! rssi below s1rSSi = 1, rssi above S9rSSi = 9. # !! 6.25kHz step hidden. # !! Power relay is toggled with delay when battery dries, # !! relay stays in On position with bench supply, # !! Lo_batt shown in LCD, # !! If voltage rises back over 10 volts, # !! lo_batt ends and normal operation resumes. # !! Powering up powerbutton in off-position, the livelock removed. # !! CCIR CALL also rings bell. # !! FSK modem is re-enabled every hour (unstuck). # !! Repeater CTCSS access method, input EXIN2, polarity selectable # !! with rP:CtCPol = POS/nEG, configured with rP:ACCESS = CtCSS. # !! CTCSS freq and channel step are kept separately in memories. # !! CTCSS tx indicator is the little mast icon. # !! GE:onHook/oFFHook scripts. REMEMBER to clear them from setup. # !! Command input fixed to understand either 0xC or 'C' for CL. # !! Little button just aborts scanner, if scanning. # !! XXX halfway with mute operation. # !! onHook-script can execute 'T' -> selkun Taakse. any key, # !! hook or alarm bell clears the mute (no re-triggers here). # !! Mute (Selective) indicator is the little key icon. # !! Repeater CCIR commands like DTMF commands, using prefix # !! from rP:ccirPF, for example when prefix is "1234" # !! ccir 1234 = dtmf ##, 12340 = #0, 12341 = #1 and 12349 = #9. # !! multidigit commands are not (yet) understood. # !! Temporary rejects now max 20, parameter rJ:n_tEmP can trim # !! the lifo length into 1...20 (0=20) # !! APRS transmit aux ptt from /LOCAL. Quick qsy into other freq, # !! tx while /LOCAL is low and qsy back to original frequency. # !! Settings are GE:APrS=off/on and tr:trAPrS=kHz # !! APRS /PTT sense was wrong. # !! Scanner 'carrier wait' lingering parameters b*:SCtAIL # !! now presented in seconds. # !! Repeater 'hog' message now configureable. # !! Scanner b*:SCLIStEn value 255 means now 'infinite patience'. # !! # !! Setup checklist: # !! b*:SCtAIL unit is now seconds # !! GE:onHoo clear this # !! GE:oFFHoo clear this # !! # !! 3.L 020523 Sq:BonGo Hz for local blip from closing squelch. # !! Key blip and serv blip setting 0 -> no corresponding blip. # !! dF:EntLen safety for entering setup. # !! 020527 Memory uses the corresponding b?-band, setting band_xxx # !! variables ok. # !! Also CTCSS updates in setup use the mem- or the vfo-variable # !! as needed. # !! AL3 EXAL changeable from keypad, fsk, dtmf and ccir. # !! GE:GPio1 has the control on/off state; # !! io:ctl 1c and io:ctl 1d are command prefixes to set it # !! from ccir and dtmf, respectively. # !! warm boot thru setup (dF:reboot). # !! repeater suspension (rP:SUSP*). # !! display "CALL" runs also a HH:MM:SS counter. # !! rP:HidE_9 pass/hide to block abuse of #9 command. # !! AL4 repeater_TBLIP cSEC counter. # !! 3.N 020703 Hide9 bug fixed (when hidden, #9 tightened squelch instead). # !! Longstanding bug in piob_mode fixed, overwritten by _bss bzero. # !! # !---------------------------------------------------------------------- # # # # # # ! Looks like P8E works all right with (unnecessary) P8N saves/restores. # # # # # # # # # # !---------------------------------------------------------------------- # # # # # # !---------------------------------------------------------------------- # ! selectable channel steps (logical, not physical) # # # # # # # # # ! RF decks # # # # # # ! datatypes in setup, note the ugliness of cSEC # # # # # # # # # # # # # ! setup strings are padded with this, 0x00 is valid and means '0' # # # !---------------------------------------------------------------------- # ! # ! duplex states # # # # # # # !---------------------------------------------------------------------- # ! # ! Convenience macros # ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ! from hl to de, bc also mashed # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! I/O map # ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! FX429 # ! # # # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! 8254 timer # ! # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! 0x10 defs # ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! Output latch bits # ! # # # # # # # # # # # # # # # # # # ! # ! Changes only by mainline. # ! # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! 0x00 and 0x10 controls # ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! CU58AF defines # ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! LATCH bits # ! # # # # # # # # # # # # # # # # # # # # ! Special LCD segments # # # # # # # # # # # # # # # # # # # !---------------------------------------------------------------------- # ! # ! realstart # ! # .text # # .org 0 # L0000: F3 # di # ld sp, 0 ! stack down from end of ram (last 16kB) L0001: 31 00 00 # # ld a, 0x08 L0004: 3E 08 L0006: D3 60 # out [0x60], a # ld a, 0x80 L0008: 3E 80 L000A: D3 70 # out [0x70], a # # # # # # # # ! [3J] got power, but on/off-button in off-position. shut down. # # ld hl, init_chips L000C: 21 AB 00 # ld b, PIOA_INIT L000F: 06 05 # ld c, 0x00+2 L0011: 0E 02 L0013: ED B3 # otir ! configure port to be able to read /PWR pin L0015: DB 00 # in a, [0x00+0] # and 0x08 L0017: E6 08 # jp nz, powerdown_now L0019: C2 4F 20 # # # # ld hl, 0x0FFF ! Depends on clock freq... XXX shit L001C: 21 FF 0F # 1: L001F: 2B # dec hl L0020: 7C # ld a, h L0021: B5 # or l # jr nz, 1b ! Wait but not too long for defined wd state L0022: 20 FB # L0024: D3 90 # out [0x90], a ! ok, now start # jp start L0026: C3 54 01 # # !---------------------------------------------------------------------- # # .org 0x0038 # L0038: F3 # di L0039: D3 90 # out [0x90], a # ld sp, 0 ! stack down from end of ram (last 16kB) L003B: 31 00 00 # jp start L003E: C3 54 01 # # !---------------------------------------------------------------------- # ! # ! NMI # ! # .org 0x0066 # # v_nmi: L0066: F3 # di ! IFF1 and IFF2 cleared L0067: D3 90 # out [0x90], a # # jp save_nvmisc_and_restart L0069: C3 83 3B # # !---------------------------------------------------------------------- # L006C: 40 28 23 29 # .ascii "@(#)" # banner: L0070: 52 35 38 20 # .ascii "R58 " L0074: 76 # .ascii "v" # version: L0075: 33 5F 4E # .ascii "3_N" L0078: 20 # .ascii " " L0079: 41 4C 30 # .ascii "AL0" L007C: 20 # .ascii " " L007D: 30 33 2E 30 37 2E 32 30 30 32 # .ascii "03.07.2002" L0087: 20 # .ascii " " # L0088: 50 38 45 2F 50 38 4E 20 # .ascii "P8E/P8N " L0090: 53 38 42 2F 53 38 43 2F 53 38 44 20 # .ascii "S8B/S8C/S8D " # L009C: 43 55 35 33 78 78 2F 43 55 35 38 41 46 # .ascii "CU53xx/CU58AF" L00A9: 0A # .ascii "\n" # .byte 0xFF L00AA: FF # # !---------------------------------------------------------------------- # ! # ! Initialization commands for 0x00, 0x10 and 8254 # ! In that order, A/B, A/B, 0/1/2 ! # ! # # init_chips: # 1: # .byte LO(pioa_base) ! load interrupt vector L00AB: 50 # .byte 0xcf ! set operating mode 3 L00AC: CF # .byte 0xff ! i/o selection, 1 for input, 0 for output L00AD: FF # .byte 0x97 ! set interrupt control, IE, OR, LOW, MASK L00AE: 97 # .byte 0xfe ! input bit monitoring mask, A0. L00AF: FE # PIOA_INIT = . - 1b # # 1: # .byte LO(piob_base) ! load interrupt vector L00B0: 52 # .byte 0xCF ! set operating mode 3 L00B1: CF # .byte 0x3E ! i/o selection, 1 for input, 0 for output L00B2: 3E # .byte 0x97 ! set interrupt control, IE, OR, LOW, MASK L00B3: 97 # !.byte 0xDF ! input bit monitoring mask, only B5 (TMR0) # .byte 0xFF ! input bit monitoring mask, nothing L00B4: FF # PIOB_INIT = . - 1b # # 1: # .byte 0x18 L00B5: 18 L00B6: 04 # .byte 4, 0x04 | 0x40 L00B7: 44 L00B8: 03 # .byte 3, 0xc0 L00B9: C0 L00BA: 05 # .byte 5, 0x60 | 0x02 | 0x80 L00BB: E2 L00BC: 01 # .byte 1, 0x04 | 0x01 L00BD: 05 # SIOA_INIT = . - 1b # # 1: # .byte 0x18 L00BE: 18 L00BF: 04 # .byte 4, 0x04 | 0x40 L00C0: 44 L00C1: 03 # .byte 3, 0xc0 | 0x01 L00C2: C1 L00C3: 05 # .byte 5, 0x60 | 0x02 | 0x80 | 0x08 L00C4: EA L00C5: 01 # .byte 1, 0x04 | 0x01 | 0x02 | 0x10 L00C6: 17 L00C7: 02 # .byte 2, LO(sio_base) L00C8: 40 # SIOB_INIT = . - 1b # # ! # ! All timer-gates are fixed on. # ! timer-clocks 0 and 1 are 4.032 MHz, 2 is 1968.75 Hz # ! # ! System hz is 100, from 0x00 A0 change-interrupt 1968.75 Hz # ! divided with software # ! # # # MT_300HZ = (4032000 / (300)) # MT_500HZ = (4032000 / (500)) # MT_600HZ = (4032000 / (600)) # MT_1000HZ = (4032000 / (1000)) # MT_1200HZ = (4032000 / (1200)) # MT_1400HZ = (4032000 / (1400)) # MT_1500HZ = (4032000 / (1500)) # MT_1750HZ = (4032000 / (1750)) # MT_2000HZ = (4032000 / (2000)) # MT_2500HZ = (4032000 / (2500)) # MT_3000HZ = (4032000 / (3000)) # MT_3500HZ = (4032000 / (3500)) # # !---------------------------------------------------------------------- # ! # ! 76543210 # ! 876543210 # ! # ! PV QQ SS Pwr Vol sQuelch Sig # ! MM-434775 mem frequency # ! # ! 0 1 23456789 # ! 10 1112 # # # # # # ! top row # # # # # # !---------------------------------------------------------------------- # ! # ! XXYYZZ # ! 9876543210 # ! # ! V P S vola pwr srssi # ! CH 433500 channel frequency # ! # # ! bottom row # # CU53AN_segs_bottom_row: L00C9: 38 L00CA: 39 L00CB: 3A L00CC: 3B L00CD: 78 L00CE: 79 # CU53AN_segs_d_digit_9: .byte 56, 57, 58, 59, 120, 121, 122 L00CF: 7A L00D0: 3C L00D1: 3D L00D2: 3E L00D3: 3F L00D4: 7C L00D5: 7D # CU53AN_segs_d_digit_8: .byte 60, 61, 62, 63, 124, 125, 126 L00D6: 7E L00D7: 00 L00D8: 01 L00D9: 02 L00DA: 03 L00DB: 40 L00DC: 41 # CU53AN_segs_d_digit_7: .byte 0, 1, 2, 3, 64, 65, 66 L00DD: 42 L00DE: 04 L00DF: 05 L00E0: 06 L00E1: 07 L00E2: 44 L00E3: 45 # CU53AN_segs_d_digit_6: .byte 4, 5, 6, 7, 68, 69, 70 L00E4: 46 L00E5: 08 L00E6: 09 L00E7: 0A L00E8: 0B L00E9: 48 L00EA: 49 # CU53AN_segs_d_digit_5: .byte 8, 9, 10, 11, 72, 73, 74 L00EB: 4A L00EC: 0C L00ED: 0D L00EE: 0E L00EF: 0F L00F0: 4C L00F1: 4D # CU53AN_segs_d_digit_4: .byte 12, 13, 14, 15, 76, 77, 78 L00F2: 4E L00F3: 10 L00F4: 11 L00F5: 12 L00F6: 13 L00F7: 50 L00F8: 51 # CU53AN_segs_d_digit_3: .byte 16, 17, 18, 19, 80, 81, 82 L00F9: 52 L00FA: 14 L00FB: 15 L00FC: 16 L00FD: 17 L00FE: 54 L00FF: 55 # CU53AN_segs_d_digit_2: .byte 20, 21, 22, 23, 84, 85, 86 L0100: 56 L0101: 18 L0102: 19 L0103: 1A L0104: 1B L0105: 58 L0106: 59 # CU53AN_segs_d_digit_1: .byte 24, 25, 26, 27, 88, 89, 90 L0107: 5A L0108: 1C L0109: 1D L010A: 1E L010B: 1F L010C: 5C L010D: 5D # CU53AN_segs_d_digit_0: .byte 28, 29, 30, 31, 92, 93, 94 L010E: 5E # # ! top row # L010F: 20 L0110: 21 L0111: 22 L0112: 23 L0113: 60 L0114: 61 # CU53AN_segs_u_digit_5: .byte 32, 33, 34, 35, 96, 97, 98 L0115: 62 L0116: 24 L0117: 25 L0118: 26 L0119: 27 L011A: 64 L011B: 65 # CU53AN_segs_u_digit_4: .byte 36, 37, 38, 39, 100, 101, 102 L011C: 66 L011D: 28 L011E: 29 L011F: 2A L0120: 2B L0121: 68 L0122: 69 # CU53AN_segs_u_digit_3: .byte 40, 41, 42, 43, 104, 105, 106 L0123: 6A L0124: 2C L0125: 2D L0126: 2E L0127: 2F L0128: 6C L0129: 6D # CU53AN_segs_u_digit_2: .byte 44, 45, 46, 47, 108, 109, 110 L012A: 6E L012B: 30 L012C: 31 L012D: 32 L012E: 33 L012F: 70 L0130: 71 # CU53AN_segs_u_digit_1: .byte 48, 49, 50, 51, 112, 113, 114 L0131: 72 L0132: 34 L0133: 35 L0134: 36 L0135: 37 L0136: 74 L0137: 75 # CU53AN_segs_u_digit_0: .byte 52, 53, 54, 55, 116, 117, 118 L0138: 76 # # !---------------------------------------------------------------------- # ! # ! Interrupt table, short-aligned, on one page. # ! IV is a flag for save_nvxxx, boot complete. # ! # .align 4 L0139: 00 [ 07 ] # # intvec: ASSERT(HI(intvec) == 1) ! gah, as bug, no != in ASS() # # sio_base: # .word siob_tbe L0140: 57 02 # .word siob_esc L0142: A3 02 # .word siob_rca L0144: 84 02 # .word siob_src L0146: C0 02 # .word sioa_tbe L0148: CD 02 # .word sioa_esc L014A: DB 02 # .word sioa_rca L014C: D5 02 # .word sioa_src L014E: 64 03 # # pioa_base: # .word pioa_int L0150: 72 03 # piob_base: # .word piob_int L0152: 6E 03 # # !====================================================================== # ! # ! Initialization before main # ! # # start: L0154: F3 # di L0155: D3 90 # out [0x90], a # # ld sp, 0 ! stack down from end of ram (last 16kB) L0157: 31 00 00 # # ! # ! Output latches # ! # # ld a, 0x08 ! volume setting at lowest level L015A: 3E 08 L015C: 32 00 D0 # ld [output_0], a L015F: D3 60 # out [0x60], a # # ld a, 0x80 ! no tx, idle all L0161: 3E 80 L0163: 32 01 D0 # ld [output_1], a L0166: D3 70 # out [0x70], a # L0168: D3 90 # out [0x90], a # ! # ! Prep RAM selects for max workspace # ! # ld a, 0x08 ! select ram 0, i hope, on L016A: 3E 08 L016C: D3 80 # out [0x80], a # # ld a, 1 L016E: 3E 01 L0170: D3 B0 # out [0xB0], a ! select full 16k page of ram on , nop on # L0172: D3 90 # out [0x90], a # # ! # ! Disable NMT modem # ! # # ld a, 0x00 L0174: 3E 00 L0176: D3 A3 # out [0xA0 + 3], a # # ! # ! 0x00, 0x10 and 8254 # ! # # ld a, 0x3E L0178: 3E 3E L017A: 32 E7 D0 # ld [piob_mode], a # # ld a, 0 L017D: 3E 00 L017F: D3 01 # out [0x00+1], a ! B0, EXAL, OFF all zero. SDA low but direction read. # # ld hl, init_chips ! few runs of 'otir' below ------------- L0181: 21 AB 00 # # ld b, PIOA_INIT L0184: 06 05 # ld c, 0x00+2 L0186: 0E 02 L0188: ED B3 # otir L018A: D3 90 # out [0x90], a # # ld b, PIOB_INIT L018C: 06 05 # ld c, 0x00+3 L018E: 0E 03 L0190: ED B3 # otir L0192: D3 90 # out [0x90], a # # ! Set output bits, and check if restarted from powerdown nmi. # # ld a, 0 L0194: 3E 00 L0196: D3 01 # out [0x00+1], a ! B0, EXAL, OFF all zero, again ? # L0198: DB 00 # in a, [0x00+0] # and 0x08 L019A: E6 08 # jp nz, powerdown_now L019C: C2 4F 20 # # ld b, SIOA_INIT L019F: 06 09 # ld c, 0x10+2 L01A1: 0E 12 L01A3: ED 78 # in a, [c] L01A5: ED B3 # otir L01A7: D3 90 # out [0x90], a # # ld b, SIOB_INIT L01A9: 06 0B # ld c, 0x10+3 L01AB: 0E 13 L01AD: ED 78 # in a, [c] L01AF: ED B3 # otir ! last otir ------------------- L01B1: D3 90 # out [0x90], a # # call check_for_P8E_cpu ! timers messed up L01B3: CD 84 3D # L01B6: D3 90 # out [0x90], a # # call init_timer1 L01B8: CD 68 22 # call ctcss_off L01BB: CD 10 3A # L01BE: D3 90 # out [0x90], a # # ! ----------------- zero variables ------------------------ # ld de, _bss L01C0: 11 16 D0 # ld a, 0 L01C3: 3E 00 # 1: L01C5: D3 90 # out [0x90], a L01C7: 12 # ld [de], a L01C8: 13 # inc de # ld hl, _end L01C9: 21 37 D8 L01CC: A7 # and a L01CD: ED 52 # sbc hl, de # jr nz, 1b L01CF: 20 F4 # # ! # ! Initialize variables after bss clear # ! # ld a, 0x3E L01D1: 3E 3E L01D3: 32 E7 D0 # ld [piob_mode], a ! 3.N fix after bss bzero. # # ld hl, mbusrx_buf L01D6: 21 00 D5 L01D9: 22 02 D0 # ld [mbusrx_rp], hl L01DC: 22 04 D0 # ld [mbusrx_wp], hl # # ld hl, mbustx_buf L01DF: 21 00 D6 L01E2: 22 06 D0 # ld [mbustx_rp], hl L01E5: 22 08 D0 # ld [mbustx_wp], hl # L01E8: D3 90 # out [0x90], a # # ld a, 0xFF L01EA: 3E FF L01EC: 32 B1 D0 # ld [dark], a L01EF: 32 02 D8 # ld [ad_batt], a L01F2: 32 AD D0 # ld [nosir], a # # ld hl, packet L01F5: 21 FA D0 L01F8: 22 0A D1 # ld [pkt_ptr], hl ! rewind packet pointer # # ld a, -1 L01FB: 3E FF L01FD: 32 B0 D0 # ld [key], a L0200: 32 AF D0 # ld [lastkey], a L0203: 32 AE D0 # ld [lastdigit], a # # call load_nvdata L0206: CD D1 3B # L0209: D3 90 # out [0x90], a # # call init_modem L020B: CD 47 15 # L020E: D3 90 # out [0x90], a # # ld b, 2 L0210: 06 02 # ld c, 0 L0212: 0E 00 # ld d, 0 ! delay 2 * 256 * 256 L0214: 16 00 # 1: L0216: D3 90 # out [0x90], a L0218: 00 # nop L0219: 00 # nop L021A: 00 # nop L021B: 00 # nop L021C: 15 # dec d # jr nz, 1b L021D: 20 F7 L021F: 0D # dec c # jr nz, 1b L0220: 20 F4 L0222: 05 # dec b # jr nz, 1b ! Give time for LCD to reset itself ! L0223: 20 F1 # L0225: DB 23 # in a, [0x20+3] ! dummy read to raise 0x00 B5 (remove int) L0227: D3 90 # out [0x90], a # # !---------------------------------------------- # ! Check some input pins at bootup # L0229: DB 01 # in a, [0x00+1] # and 0x02 L022B: E6 02 # jr nz, 1f L022D: 20 05 # ld a, 1 L022F: 3E 01 L0231: 32 EE D0 # ld [portable], a ! /POR grounded # 1: # # ld a, 0x10 L0234: 3E 10 L0236: D3 13 # out [0x10+3], a L0238: DB 13 # in a, [0x10+3] L023A: 32 2F D8 # ld [sio_bctrl_mirror], a L023D: 32 30 D8 # ld [sio_bctrl_local], a # # and 0x10 ! inverted... L0240: E6 10 # jp z, 1f ! go if LOCAL idle high, bit inverted L0242: CA 4A 02 # ld a, 1 L0245: 3E 01 L0247: 32 EF D0 # ld [local_mode], a # 1: # # !---------------------------------------------- # ! # ! Flag for powerdown - have we booted up fully. # # ld a, HI(intvec) L024A: 3E 01 L024C: ED 47 # ld iv, a L024E: ED 5E # im2 # # jp main L0250: C3 9A 09 # # !====================================================================== # ! # ! # ! Remember, E register keeps live values in "other" registerset, # ! decremented and systick called every 20th 1969 Hz interrupt. # ! # # doreti: L0253: F1 # pop af L0254: FB # ei L0255: ED 4D # reti # # !---------------------------------------------------------------------- # ! # ! 0x10 interrupts # ! # # siob_tbe: L0257: F5 # push af L0258: 3A 1A D0 # ld a, [mbustx_cnt] L025B: 3D # dec a L025C: 32 1A D0 # ld [mbustx_cnt], a # jr z, siob_tbe_close L025F: 28 14 L0261: E5 # push hl L0262: 2A 06 D0 # ld hl, [mbustx_rp] L0265: 7E # ld a, [hl] L0266: 2C # inc l L0267: 22 06 D0 # ld [mbustx_rp], hl L026A: E1 # pop hl L026B: D3 11 # out [0x10+1], a # ld a, 25 L026D: 3E 19 L026F: 32 1C D0 # ld [mbus_timer], a ! keep transmit timer on # jp doreti L0272: C3 53 02 # # siob_tbe_close: # ld a, 0x28 L0275: 3E 28 L0277: D3 13 # out [0x10+3], a # jp doreti L0279: C3 53 02 # # siob_rca_drop: # call bleep L027C: CD 99 22 # # siob_rca_ignore: L027F: DB 11 # in a, [0x10+1] # # jp doreti L0281: C3 53 02 # # siob_rca: L0284: F5 # push af L0285: 3A 1C D0 # ld a, [mbus_timer] L0288: B7 # or a # jr nz, siob_rca_ignore L0289: 20 F4 L028B: 3A 1B D0 # ld a, [mbusrx_cnt] L028E: 3C # inc a # jr z, siob_rca_drop ! no room L028F: 28 EB L0291: 32 1B D0 # ld [mbusrx_cnt], a L0294: E5 # push hl L0295: 2A 04 D0 # ld hl, [mbusrx_wp] L0298: DB 11 # in a, [0x10+1] L029A: 77 # ld [hl], a L029B: 2C # inc l L029C: 22 04 D0 # ld [mbusrx_wp], hl L029F: E1 # pop hl # jp doreti L02A0: C3 53 02 # # ! # ! 0x10 B ext/status change - PTT, LOCAL, DMIDLE changes # ! # siob_esc: L02A3: F5 # push af L02A4: DB 13 # in a, [0x10+3] L02A6: 32 2F D8 # ld [sio_bctrl_mirror], a # and 0x20 L02A9: E6 20 L02AB: 3A B3 D0 # ld a, [pttdn] # jr z, 1f L02AE: 28 04 L02B0: CB C7 # set 0, a # jr 2f L02B2: 18 02 # 1: L02B4: CB 87 # res 0, a # 2: L02B6: 32 B3 D0 # ld [pttdn], a # # ld a, 0x10 L02B9: 3E 10 L02BB: D3 13 # out [0x10+3], a # jp doreti L02BD: C3 53 02 # # ! # ! 0x10 B special receive condition # ! # siob_src: L02C0: F5 # push af L02C1: DB 11 # in a, [0x10+1] # ld a, 0x30 L02C3: 3E 30 L02C5: D3 13 # out [0x10+3], a # # call bleep L02C7: CD 99 22 # # jp doreti L02CA: C3 53 02 # # sioa_tbe: L02CD: F5 # push af # ld a, 0x28 L02CE: 3E 28 L02D0: D3 12 # out [0x10+2], a # jp doreti L02D2: C3 53 02 # # sioa_rca: L02D5: F5 # push af L02D6: DB 10 # in a, [0x10+0] # jp doreti L02D8: C3 53 02 # # ! # ! 0x10 A ext/status change - DA, HK, Modem and timer 0x80 # ! # ! # ! CU53 and CU58AF behave differently. # ! # ! CU53 raises DA on make, and drops it on break. # ! CU58AF drops /INT each time a button makes or breaks. # ! 'keydown' flags a pressed key, and is also used for debouncing. # ! When it increments to 10 in systick() the data is fetched from CU. # ! With CU53 the break is detected here, but CU58AF has to fetch # ! nil data with i2c. 'keydown' is restarted from 1 on each i2c /INT. # ! # sioa_esc: L02DB: F5 # push af # L02DC: 3A EC D0 # ld a, [cu_is_known] L02DF: B7 # or a # jp z, 9f ! disregard until CU53/CU58AF is known L02E0: CA 20 03 # # ! # ! /CTS inverts the input... # ! L02E3: 3A ED D0 # ld a, [cu_is_alfa] L02E6: B7 # or a # jr nz, 3f L02E7: 20 0F # L02E9: DB 12 # in a, [0x10+2] # and 0x20 L02EB: E6 20 # jp nz, 1f ! go (skip) if DA low L02ED: C2 06 03 L02F0: 3A B4 D0 # ld a, [keydown] L02F3: B7 # or a # jr nz, 2f ! go if already seen it L02F4: 20 2A # jr 4f L02F6: 18 07 # 3: L02F8: DB 12 # in a, [0x10+2] # and 0x20 L02FA: E6 20 # jp z, 2f ! go (skip) if /INT high. We only look for drops. L02FC: CA 20 03 # 4: # ld a, 1 L02FF: 3E 01 L0301: 32 B4 D0 # ld [keydown], a ! start debouncing # jr 2f L0304: 18 1A # 1: # ld a, 0 L0306: 3E 00 L0308: 32 1F D0 # ld [key_timer], a L030B: 32 B4 D0 # ld [keydown], a L030E: 3A AE D0 # ld a, [lastdigit] # cp -1 L0311: FE FF # jr z, 2f L0313: 28 0B L0315: 3A AE D0 # ld a, [lastdigit] L0318: 32 B0 D0 # ld [key], a ! Quick press of digit. # ld a, -1 L031B: 3E FF L031D: 32 AE D0 # ld [lastdigit], a # 2: # 9: # # # # # # # L0320: DB A3 # in a, [0xA0 + 3] # and 0x40 | 0x01 L0322: E6 41 # jr z, 1f ! no sync nor data L0324: 28 35 L0326: E5 # push hl # cp 0x40 L0327: FE 40 # jr nz, 3f ! not sync only (never both simultaneously ?!?!?) L0329: 20 08 # ld hl, packet L032B: 21 FA D0 L032E: 22 0A D1 # ld [pkt_ptr], hl ! rewind packet pointer # jr 2f L0331: 18 27 # 3: # and 0x01 L0333: E6 01 # jr z, 2f L0335: 28 23 L0337: DB A2 # in a, [0xA0 + 2] L0339: 2A 0A D1 # ld hl, [pkt_ptr] L033C: 77 # ld [hl], a L033D: 23 # inc hl L033E: 22 0A D1 # ld [pkt_ptr], hl L0341: 7D # ld a, l # cp LO(packet + 2) L0342: FE FC # jr nz, 3f L0344: 20 06 # ld a, 0x04 | 0x08 L0346: 3E 0C L0348: D3 A3 # out [0xA0 + 3], a # jr 2f L034A: 18 0E # 3: # cp LO(packet + SHORT_PACLEN) L034C: FE 02 # jr z, 3f L034E: 28 07 # cp LO(packet + LONG_PACLEN) L0350: FE 09 # call z, check_long_packet L0352: CC E2 1A # jr 2f L0355: 18 03 # 3: # call check_short_packet L0357: CD 7A 1A # 2: L035A: E1 # pop hl # 1: # # L035B: DB 23 # in a, [0x20+3] ! dummy read to raise 0x00 B5 (remove int) # # ld a, 0x10 L035D: 3E 10 L035F: D3 12 # out [0x10+2], a # # jp doreti L0361: C3 53 02 # # ! # ! 0x10 A special receive condition # ! # sioa_src: L0364: F5 # push af L0365: DB 10 # in a, [0x10+0] # ld a, 0x30 L0367: 3E 30 L0369: D3 12 # out [0x10+2], a # jp doreti L036B: C3 53 02 # # !---------------------------------------------------------------------- # ! # ! 0x00 interrupts # ! # # ! Change in B5 # ! Should not get this now, as monitormask is empty... # # piob_int: L036E: F5 # push af # # jp doreti L036F: C3 53 02 # # ! Change in A0, 1968.75 Hz square - systick and D/A read every now and then # # pioa_int: L0372: 08 # ex af L0373: D9 # exx L0374: 1D # dec e # jr z, systick ! 100 Hz this, L0375: 28 1B # ! else another reading from A/D # ld h, HI(ad_bytes) L0377: 26 D8 L0379: 3A CF D0 # ld a, [ad_select] ; ASSERT(LO(ad_bytes) == 0) L037C: 6F # ld l, a ! this is now ready L037D: 3C # inc a # and 7 L037E: E6 07 L0380: 32 CF D0 # ld [ad_select], a ! this is next reading from A/D # add 0x50 L0383: C6 50 L0385: 4F # ld c, a ! this is the write address for start next meas. L0386: ED 40 # in b, [c] ! read from anywhere inside 0x50 address range L0388: 70 # ld [hl], b ! save it, current L0389: ED 79 # out [c], a ! value not important L038B: ED 79 # out [c], a ! twice to settle analog mux, it changed L038D: 08 # ex af L038E: D9 # exx L038F: FB # ei L0390: ED 4D # reti # # systick: L0392: D3 90 # out [0x90], a ! keep watchdog happy. # # !---------------------------- # ! Hook interest # ! L0394: 3A E8 D0 # ld a, [pioa_data] L0397: 6F # ld l, a ! old bits L0398: DB 00 # in a, [0x00+0] L039A: 32 E8 D0 # ld [pioa_data], a ! save 0x00 0, check CCIR decode again at end L039D: AD # xor l ! extract change # and 0x02 L039E: E6 02 # jr z, 9f ! not changed L03A0: 28 1D # # ! Change in hook here # L03A2: 3A E8 D0 # ld a, [pioa_data] # and 0x02 L03A5: E6 02 # ld a, 1 L03A7: 3E 01 # jr z, 1f L03A9: 28 02 # ld a, 2 L03AB: 3E 02 # 1: L03AD: 32 32 D8 # ld [script_req], a ! execute onhook/offhook-scripts later # L03B0: 3A 22 C7 # ld a, [cfg_light_seconds] ! light up ? L03B3: B7 # or a # jp z, 9f ! 0 seconds lights on. L03B4: CA BF 03 # # call cu_lights_on L03B7: CD 23 24 # ld hl, sir L03BA: 21 AC D0 L03BD: CB CE # set DPYSIR, [hl] ! Update CU later # 9: # # !------------------------- # L03BF: 3A 03 C0 # ld a, [scan_on] ! scan_timer counts ticks, possibly scan_timer_secs times 100 ticks. L03C2: B7 # or a # jr z, 1f ! not scanning L03C3: 28 1D L03C5: 3A 29 D0 # ld a, [scan_timer] L03C8: B7 # or a # jr z, 1f ! timer not running L03C9: 28 17 L03CB: 3D # dec a L03CC: 32 29 D0 # ld [scan_timer], a ! ticks-- # jr nz, 1f ! if ticks not down to 0 L03CF: 20 11 L03D1: 3A 2A D0 # ld a, [scan_timer_secs] L03D4: B7 # or a # jr z, 1f ! repeat so many secs L03D5: 28 0B L03D7: 3D # dec a L03D8: 32 2A D0 # ld [scan_timer_secs], a # jr z, 1f ! seconds down to 0, stay 0/0 L03DB: 28 05 # ld a, 100 L03DD: 3E 64 L03DF: 32 29 D0 # ld [scan_timer], a ! prep ticks for another second # 1: # !------------------------- # L03E2: 3A 1E D0 # ld a, [mt_timer] L03E5: B7 # or a # jr z, 1f L03E6: 28 0F L03E8: 3A 00 D0 # ld a, [output_0] L03EB: D3 60 # out [0x60], a ! XXX check this L03ED: 3A 1E D0 # ld a, [mt_timer] L03F0: 3D # dec a L03F1: 32 1E D0 # ld [mt_timer], a # call z, stop_marker_tone L03F4: CC 34 23 # 1: # # ! # ! Decrement MBUS activity timer # ! L03F7: 3A 1C D0 # ld a, [mbus_timer] L03FA: B7 # or a # jr z, 1f L03FB: 28 04 L03FD: 3D # dec a L03FE: 32 1C D0 # ld [mbus_timer], a # 1: # ! # ! ccir timer # ! L0401: 3A 28 D0 # ld a, [ccir_tx_timer] L0404: B7 # or a # jr z, 1f L0405: 28 04 L0407: 3D # dec a L0408: 32 28 D0 # ld [ccir_tx_timer], a # 1: # ! # ! One second trail after end of xmit # ! L040B: 3A 25 D0 # ld a, [txtail_timer] L040E: B7 # or a # jr z, 1f ! Not counting anymore L040F: 28 0D L0411: 3A CC D0 # ld a, [txon] L0414: B7 # or a # jr nz, 1f ! Still xmit L0415: 20 07 L0417: 3A 25 D0 # ld a, [txtail_timer] L041A: 3D # dec a L041B: 32 25 D0 # ld [txtail_timer], a ! One 10msec less of tail # 1: # ! # ! See if keypad has data coming and debouncing # ! allows it to be fetched # ! L041E: 3A B4 D0 # ld a, [keydown] L0421: B7 # or a # jr z, 9f ! not key down L0422: 28 1C L0424: 3C # inc a # jr z, 1f ! been a long time, 256 softicks L0425: 28 0C L0427: 32 B4 D0 # ld [keydown], a # cp 10 L042A: FE 0A # jr nz, 1f ! not at debounce-position L042C: 20 05 # ld hl, sir L042E: 21 AC D0 L0431: CB C6 # set KEYSIR, [hl] ! go get it. # 1: L0433: 3A 1F D0 # ld a, [key_timer] ! Typematic ? L0436: B7 # or a # jr z, 9f L0437: 28 07 L0439: 3D # dec a L043A: 32 1F D0 # ld [key_timer], a # # call z, typematic L043D: CC 02 22 # 9: # # ! S meter and squelch control, tone decoders # L0440: 3A 25 D0 # ld a, [txtail_timer] # cp 90 L0443: FE 5A # jp nc, 9f ! Skip if tx during last 100 msec L0445: D2 5B 04 L0448: 3A CA D0 # ld a, [mton] L044B: B7 # or a # jp nz, 9f ! Skip if tone on. L044C: C2 5B 04 # # call squelch L044F: CD 5C 06 # call rssi_disp L0452: CD 85 07 # call ccir_decoder L0455: CD A4 07 # call dtmf_decoder L0458: CD 20 09 # 9: # # !-------------------- # # ! REPEATER fasttimo # L045B: 3A 16 C7 # ld a, [cfg_function] # cp 1 L045E: FE 01 # call z, repeater_step_10msec L0460: CC B4 3F # # !-------------------- # L0463: 3A D0 D0 # ld a, [sec100] L0466: 3C # inc a # cp 100 L0467: FE 64 # jr c, 1f ! less than full second. L0469: 38 2C # L046B: 3A D1 D0 # ld a, [seconds] L046E: 3C # inc a # cp 60 L046F: FE 3C # jr c, 2f ! less than full minute L0471: 38 1C L0473: 3A D2 D0 # ld a, [minutes] L0476: 3C # inc a # cp 60 L0477: FE 3C # jr c, 3f L0479: 38 0C L047B: 3A D3 D0 # ld a, [hours] L047E: 3C # inc a ! overflows to 0... L047F: 32 D3 D0 # ld [hours], a # call once_per_hour L0482: CD 1D 06 # ld a, 0 L0485: 3E 00 # 3: L0487: 32 D2 D0 # ld [minutes], a # call once_per_minute L048A: CD C3 05 # ld a, 0 L048D: 3E 00 # 2: L048F: 32 D1 D0 # ld [seconds], a # call once_per_second L0492: CD 06 05 # ld a, 0 L0495: 3E 00 # 1: L0497: 32 D0 D0 # ld [sec100], a # # !-------------------- # # ld e, 20 ! 1969 / 100 hard ticks to next L049A: 1E 14 L049C: D9 # exx # # ! softlevel # L049D: 3A AD D0 # ld a, [nosir] L04A0: B7 # or a # jr nz, 1f ! Cannot do it now. L04A1: 20 06 L04A3: 3A AC D0 # ld a, [sir] L04A6: B7 # or a # jr nz, 2f ! there are sirs L04A7: 20 04 # 1: L04A9: 08 # ex af # 8: L04AA: FB # ei L04AB: ED 4D # reti # 2: L04AD: CB 7F # bit INSIR, a # jr nz, 1b ! already here L04AF: 20 F8 # L04B1: CB FF # set INSIR, a L04B3: 32 AC D0 # ld [sir], a ! note sir starting # L04B6: 08 # ex af # L04B7: F5 # push af L04B8: C5 # push bc L04B9: D5 # push de L04BA: E5 # push hl L04BB: DD E5 # push ix L04BD: FD E5 # push iy ! sir runs with normal regset # # call 8b L04BF: CD AA 04 # call dosir L04C2: CD D8 04 L04C5: F3 # di # L04C6: 3A AC D0 # ld a, [sir] L04C9: CB BF # res INSIR, a L04CB: 32 AC D0 # ld [sir], a # L04CE: FD E1 # pop iy L04D0: DD E1 # pop ix L04D2: E1 # pop hl L04D3: D1 # pop de L04D4: C1 # pop bc L04D5: F1 # pop af # L04D6: FB # ei # ret L04D7: C9 # # dosir: # # ld hl, sir L04D8: 21 AC D0 L04DB: CB 46 # bit KEYSIR, [hl] # jr z, 1f L04DD: 28 05 L04DF: CB 86 # res KEYSIR, [hl] # call keypad L04E1: CD C0 20 # 1: # ld hl, sir L04E4: 21 AC D0 L04E7: CB 4E # bit DPYSIR, [hl] # jr z, 1f L04E9: 28 0A L04EB: CB 8E # res DPYSIR, [hl] # call display L04ED: CD 18 29 # ld a, 1 L04F0: 3E 01 L04F2: 32 D5 D0 # ld [drawn], a # 1: # ld hl, sir L04F5: 21 AC D0 L04F8: CB 56 # bit DTMFSIR, [hl] # jr z, 1f L04FA: 28 09 L04FC: CB 96 # res DTMFSIR, [hl] L04FE: 3A ED D0 # ld a, [cu_is_alfa] L0501: B7 # or a # call nz, i2c_dtmf L0502: C4 15 2A # 1: # # ret L0505: C9 # # !---------------------------------------------------------------------- # # once_per_second: # L0506: 3A CC D0 # ld a, [txon] L0509: B7 # or a # jp z, 1f L050A: CA 30 05 # # ! transmitter hours counter # L050D: 2A 53 C9 # ld hl, [transmitter_hours_second_counter] L0510: 23 # inc hl L0511: 22 53 C9 # ld [transmitter_hours_second_counter], hl L0514: 7D # ld a, l # cp LO(3600) L0515: FE 10 # jr nz, 1f L0517: 20 17 L0519: 7C # ld a, h # cp HI(3600) L051A: FE 0E # jr nz, 1f L051C: 20 12 # # ld hl, 0 L051E: 21 00 00 L0521: 22 53 C9 # ld [transmitter_hours_second_counter], hl # # ld hl, transmitter_hours L0524: 21 50 C9 L0527: 34 # inc [hl] # jr nz, 1f L0528: 20 06 L052A: 23 # inc hl L052B: 34 # inc [hl] # jr nz, 1f L052C: 20 02 L052E: 23 # inc hl L052F: 34 # inc [hl] ! about 2000 years. not likely to overflow. # 1: # # ! # ! Alert timer # ! L0530: 3A 23 D0 # ld a, [alert_timer] L0533: B7 # or a # jp z, 1f L0534: CA 3B 05 L0537: 3D # dec a L0538: 32 23 D0 # ld [alert_timer], a # 1: # ! # ! slower scanner timer # ! L053B: 3A 03 C0 # ld a, [scan_on] L053E: B7 # or a # jp z, 1f L053F: CA 4C 05 L0542: 3A 2B D0 # ld a, [scan_patience] L0545: B7 # or a # jr z, 1f L0546: 28 04 L0548: 3D # dec a L0549: 32 2B D0 # ld [scan_patience], a # 1: # ! # ! _INCREMENT_ timer for handset lights # ! L054C: 3A B4 D0 # ld a, [keydown] L054F: B7 # or a # jr nz, 1f ! not if button still pressed L0550: 20 09 L0552: 3A 24 D0 # ld a, [lights_timer] L0555: 3C # inc a # jr z, 1f ! walk and stay at 255 seconds L0556: 28 03 L0558: 32 24 D0 # ld [lights_timer], a # 1: # # ! any pending DTMF codes buffered ? # L055B: 3A F8 D0 # ld a, [dtmf_idletime] L055E: B7 # or a # jp z, 1f L055F: CA 72 05 L0562: 3C # inc a # ld hl, cfg_dtmf_holdtime L0563: 21 81 C8 L0566: BE # cp [hl] # jp c, 2f L0567: DA 6F 05 # call dtmf_decoder_timeout L056A: CD 59 09 # ld a, 0 L056D: 3E 00 # 2: L056F: 32 F8 D0 # ld [dtmf_idletime], a # 1: # # ! REPEATER timers # L0572: 3A 16 C7 # ld a, [cfg_function] # cp 1 L0575: FE 01 # call z, repeater_step_1sec L0577: CC 9D 3F # # ! DisplayData Buffer # L057A: 3A 26 D8 # ld a, [display_buffer_time] L057D: B7 # or a # jr z, 1f L057E: 28 0B L0580: 3D # dec a L0581: 32 26 D8 # ld [display_buffer_time], a # jr nz, 1f L0584: 20 05 # ld a, 1 L0586: 3E 01 L0588: 32 D4 D0 # ld [redraw_req], a # 1: # # ! EXAL update # L058B: 3A 8E C9 # ld a, [cfg_exal_state] L058E: B7 # or a # jr z, 1f L058F: 28 02 # ld a, 0x40 ! if non-zero, use the correct bit, else 0 ok. L0591: 3E 40 # 1: L0593: D3 01 # out [0x00+1], a # # ! call timer ? # L0595: 3A AA D0 # ld a, [call_dpyed] L0598: B7 # or a # jr z, 1f L0599: 28 27 # L059B: 3A 36 D8 # ld a, [call_timer_sec] L059E: 3C # inc a # cp 60 L059F: FE 3C # jr c, 2f L05A1: 38 1C L05A3: 3A 35 D8 # ld a, [call_timer_min] L05A6: 3C # inc a # cp 60 L05A7: FE 3C # jr c, 3f L05A9: 38 0F L05AB: 3A 34 D8 # ld a, [call_timer_hour] L05AE: 3C # inc a # cp 99 L05AF: FE 63 # jr c, 4f L05B1: 38 02 # ld a, 99 L05B3: 3E 63 # 4: L05B5: 32 34 D8 # ld [call_timer_hour], a # ld a, 0 L05B8: 3E 00 # 3: L05BA: 32 35 D8 # ld [call_timer_min], a # ld a, 0 L05BD: 3E 00 # 2: L05BF: 32 36 D8 # ld [call_timer_sec], a # 1: # ! done # # ret L05C2: C9 # # !---------------------------------------------------------------------- # # once_per_minute: # # ! TOT overrun ? # L05C3: 3A CC D0 # ld a, [txon] L05C6: B7 # or a # jp z, 1f L05C7: CA D5 05 L05CA: 3A 24 C7 # ld a, [cfg_tx_tot_minutes] # ld hl, tx_tot_timer L05CD: 21 26 D0 L05D0: BE # cp [hl] ! if cfg is 255, never carry # jp c, powerdown_now L05D1: DA 4F 20 L05D4: 34 # inc [hl] # 1: # # ! When idle_timer passes over cfg_idlefn_delay, # ! restart scan or do other things # L05D5: 3A 03 C0 # ld a, [scan_on] L05D8: B7 # or a # jp nz, 1f ! no idle timer if scanner already on L05D9: C2 19 06 L05DC: 3A C9 D0 # ld a, [squelch_open] L05DF: B7 # or a # jp nz, 1f ! no idle timer if squelch open L05E0: C2 19 06 L05E3: 3A B0 D0 # ld a, [key] # cp -1 L05E6: FE FF # jp nz, 1f ! no idle timer if key pending L05E8: C2 19 06 L05EB: 3A B5 D0 # ld a, [digidx] L05EE: B7 # or a # jp nz, 1f ! no idle timer if digit buffer pending L05EF: C2 19 06 L05F2: 3A 10 D1 # ld a, [menu_active] L05F5: B7 # or a # jp nz, 1f ! no idle timer if in setup L05F6: C2 19 06 L05F9: 3A B3 D0 # ld a, [pttdn] L05FC: B7 # or a # jp nz, 1f ! no idle timer if PTT L05FD: C2 19 06 # # ld hl, idle_timer L0600: 21 22 D0 L0603: 7E # ld a, [hl] L0604: 3C # inc a # jp z, 1f ! stay at 255 minutes L0605: CA 19 06 # L0608: 77 # ld [hl], a ! bump idle_timer # L0609: 3A 22 C9 # ld a, [cfg_idlefn_delay] L060C: B7 # or a # jp z, 1f ! delay=0 == no autoscan L060D: CA 19 06 # L0610: BE # cp [hl] ! cfg - timer # jp nz, 1f ! jump if not at exact point L0611: C2 19 06 # # ld a, 1 L0614: 3E 01 L0616: 32 27 D8 # ld [idlefn_flag], a # 1: # ! # ! Decay temporary reject timers # ! # call unreject_timer L0619: CD 55 10 # # ret L061C: C9 # # !---------------------------------------------------------------------- # # once_per_hour: # # ! APO overrun ? # L061D: DB 01 # in a, [0x00+1] # and 0x04 ! aka /IGN L061F: E6 04 # jr z, 1f ! /IGN still grounded L0621: 28 0B L0623: 3A 23 C7 # ld a, [cfg_ign_apo_hours] # ld hl, ign_apo_timer L0626: 21 27 D0 L0629: BE # cp [hl] ! if cfg is 255, never carry # jp c, powerdown_now L062A: DA 4F 20 L062D: 34 # inc [hl] # 1: # # call re_enable_modem L062E: CD 5A 15 # ret L0631: C9 # # !====================================================================== # # # read_squelcher_value: L0632: 3A 30 D0 # ld a, [squelch_tightening] L0635: 47 # ld b, a L0636: 3A 26 C7 # ld a, [cfg_squelch_source] ! +SQL, -SQL or +RSSI # cp 0 L0639: FE 00 # jp nz, 1f L063B: C2 46 06 L063E: 3A 01 D8 # ld a, [ad_sql] L0641: 90 # sub b ! I'm positive Benjamin will not accept this :) L0642: D0 # ret nc # ld a, 0 L0643: 3E 00 # ret L0645: C9 # 1: # cp 1 L0646: FE 01 # jp nz, 2f L0648: C2 54 06 L064B: 3A 01 D8 # ld a, [ad_sql] L064E: 2F # cpl L064F: 90 # sub b L0650: D0 # ret nc # ld a, 0 L0651: 3E 00 # ret L0653: C9 # 2: L0654: 3A 00 D8 # ld a, [ad_rssi] L0657: 90 # sub b L0658: D0 # ret nc # ld a, 0 L0659: 3E 00 # ret L065B: C9 # # !---------------------------------------------------------------------- # # squelch: # call read_squelcher_value ! current sql L065C: CD 32 06 # L065F: ED 4B C6 D0 # ld bc, [squelch_prev_ones] L0663: 51 # ld d, c ! d has sql 20 msec ago L0664: 48 # ld c, b L0665: 47 # ld b, a ! b has sql now L0666: ED 43 C6 D0 # ld [squelch_prev_ones], bc # L066A: 3A 29 C7 # ld a, [cfg_squelch_hyst] L066D: CB 3F # srl a L066F: 4F # ld c, a ! c has half hysteresis # L0670: 3A C9 D0 # ld a, [squelch_open] L0673: B7 # or a # jp nz, 9f L0674: C2 A8 06 # # ! squelch was closed -------------------------------- # L0677: 3A 27 C7 # ld a, [cfg_squelch_level] L067A: 81 # add c ! a has open limit # jr nc, 1f L067B: 30 02 # ld a, 0xFF L067D: 3E FF # 1: L067F: B8 # cp b ! open_limit - sql # jp nc, squelch_is_closed ! if open_limit >= sql, stay closed L0680: D2 EA 06 # # ! sql now rised above open limit # L0683: 3A C8 D0 # ld a, [squelch_delay] L0686: B7 # or a # jp z, 1f L0687: CA 8F 06 L068A: 3D # dec a L068B: 32 C8 D0 # ld [squelch_delay], a ! still dragging to open L068E: C0 # ret nz # 1: # ! opening delay expired, open and prep delay for tail # # call cu_serv_on L068F: CD 5E 24 # call cu_lights_on_from_squelch L0692: CD 1E 24 # call pull_down_EXIN1 L0695: CD 75 09 # call squelch_is_open L0698: CD F6 06 # ld hl, sir L069B: 21 AC D0 L069E: CB CE # set DPYSIR, [hl] # L06A0: 3A 2C D0 # ld a, [squelch_muted] L06A3: B7 # or a L06A4: C0 # ret nz ! Scanner etc forced no audio. # # jp audioc_on L06A5: C3 07 07 # # ! squelch was open --------------------------------- # 9: L06A8: 3A 27 C7 # ld a, [cfg_squelch_level] L06AB: 91 # sub c L06AC: 4F # ld c, a # jr nc, 1f L06AD: 30 02 # ld c, 0 ! c has close limit L06AF: 0E 00 # 1: L06B1: 78 # ld a, b ! a has sql L06B2: B9 # cp c ! sql - close_limit # jp nc, squelch_is_open ! if sql >= close_limit, stay open L06B3: D2 F6 06 # # ! sql now below close limit, tail delay ? # # ld c, 0 ! assume no tail L06B6: 0E 00 # L06B8: 3A 28 C7 # ld a, [cfg_squelch_BIG] L06BB: BA # cp d ! monster_threshold - sql_20_msec_ago # jp c, 1f ! last value was above MONSTER, tail-less L06BC: DA CD 06 # # ld c, 1 ! close action has tail L06BF: 0E 01 # L06C1: 3A C8 D0 # ld a, [squelch_delay] L06C4: B7 # or a # jp z, 1f L06C5: CA CD 06 L06C8: 3D # dec a L06C9: 32 C8 D0 # ld [squelch_delay], a ! still dragging L06CC: C0 # ret nz # 1: L06CD: 79 # ld a, c L06CE: 32 12 D8 # ld [last_sqtail], a ! remember how squelch closed # # ! closing delay expired, close and prep delay for opening delay # # call cu_serv_off L06D1: CD 6D 24 # call release_EXIN1 L06D4: CD 7D 09 # call squelch_is_closed L06D7: CD EA 06 # ld hl, sir L06DA: 21 AC D0 L06DD: CB CE # set DPYSIR, [hl] # # call serv_blip ! possible local blip from closing squelch L06DF: CD 87 22 # L06E2: 3A 02 C0 # ld a, [squelch_forced] L06E5: B7 # or a L06E6: C0 # ret nz ! Manually forced open. # # jp audioc_off L06E7: C3 12 07 # # squelch_is_closed: # ld a, 0 L06EA: 3E 00 L06EC: 32 C9 D0 # ld [squelch_open], a L06EF: 3A 2A C7 # ld a, [cfg_squelch_head] L06F2: 32 C8 D0 # ld [squelch_delay], a # ret L06F5: C9 # # squelch_is_open: # ld a, 1 L06F6: 3E 01 L06F8: 32 C9 D0 # ld [squelch_open], a L06FB: 3A 2B C7 # ld a, [cfg_squelch_tail] L06FE: 32 C8 D0 # ld [squelch_delay], a # ld a, 0 L0701: 3E 00 L0703: 32 22 D0 # ld [idle_timer], a # ret L0706: C9 # # audioc_on: L0707: 3A 00 D0 # ld a, [output_0] # or 0x10 L070A: F6 10 L070C: 32 00 D0 # ld [output_0], a L070F: D3 60 # out [0x60], a # ret L0711: C9 # # audioc_off: L0712: 3A 00 D0 # ld a, [output_0] # and ~0x10 L0715: E6 EF L0717: 32 00 D0 # ld [output_0], a L071A: D3 60 # out [0x60], a # ret L071C: C9 # # ! # ! Cut audio during TX (maybe) # ! # # tx_cut_local_audio: L071D: 3A 16 C7 # ld a, [cfg_function] L0720: B7 # or a L0721: C0 # ret nz ! function is not "Std", keep audio # # call close_squelch_really L0722: CD BE 23 # L0725: 3A 00 D0 # ld a, [output_0] # and ~ 0x10 L0728: E6 EF # and ~ 0x20 L072A: E6 DF L072C: 32 00 D0 # ld [output_0], a L072F: D3 60 # out [0x60], a ! cut audio # # ld a, 100 L0731: 3E 64 L0733: 32 25 D0 # ld [txtail_timer], a ! shall count 1 second after tx ends # ret L0736: C9 # # !--------------------- # # mic_off_ccir_off: L0737: F3 # di L0738: 3A 00 D0 # ld a, [output_0] # and ~0x20 L073B: E6 DF # or 0x80 L073D: F6 80 # jp 1f L073F: C3 7E 07 # # mic_on: L0742: F3 # di # call silence_timer1 L0743: CD 6C 22 L0746: 3A 00 D0 # ld a, [output_0] # and ~(0x20 | 0x80) ! No tones, no mic mute L0749: E6 5F # jp 1f L074B: C3 7E 07 # # mic_off: L074E: F3 # di L074F: 3A 00 D0 # ld a, [output_0] # or 0x80 L0752: F6 80 # jp 1f L0754: C3 7E 07 # # ccir_on: L0757: F3 # di L0758: 3A 00 D0 # ld a, [output_0] # or 0x20 L075B: F6 20 # jp 1f L075D: C3 7E 07 # # ccir_off: L0760: F3 # di # call silence_timer1 L0761: CD 6C 22 L0764: 3A 00 D0 # ld a, [output_0] # and ~0x20 L0767: E6 DF # jp 1f L0769: C3 7E 07 # # mtc_on: L076C: F3 # di L076D: 3A 00 D0 # ld a, [output_0] # or 0x40 L0770: F6 40 # jp 1f L0772: C3 7E 07 # # mtc_off: L0775: F3 # di # call silence_timer1 L0776: CD 6C 22 L0779: 3A 00 D0 # ld a, [output_0] # and ~0x40 L077C: E6 BF # 1: L077E: 32 00 D0 # ld [output_0], a L0781: D3 60 # out [0x60], a L0783: FB # ei # ret L0784: C9 # # !---------------------------------------------------------------------- # # rssi_disp: # # ! smoothing rssi display # L0785: 3A 00 D8 # ld a, [ad_rssi] L0788: 47 # ld b, a # L0789: 3A CE D0 # ld a, [srssi] L078C: B8 # cp b ! smoothed - rssi # jr c, 1f ! go if raising L078D: 38 06 L078F: 3A 1D D0 # ld a, [rssi_timer] L0792: 3D # dec a # jr nz, 2f ! go if still timing L0793: 20 0B # 1: # ld a, 1 L0795: 3E 01 L0797: 32 D4 D0 # ld [redraw_req], a L079A: 78 # ld a, b L079B: 32 CE D0 # ld [srssi], a # ld a, 50 ! one second L079E: 3E 32 # 2: L07A0: 32 1D D0 # ld [rssi_timer], a # ret L07A3: C9 # # !---------------------------------------------------------------------- # ! # ! CCIR decoder called 100 times a second from systick if tx is off # ! # ccir_decoder: L07A4: 3A F3 D0 # ld a, [ccir_tonetime] L07A7: 57 # ld d, a ! duration to d L07A8: 3C # inc a # jr z, 1f L07A9: 28 03 L07AB: 32 F3 D0 # ld [ccir_tonetime], a ! length of serie 10 msec longer # 1: L07AE: 3A E8 D0 # ld a, [pioa_data] # and 0xf0 ! CCIR bits from the top of systick L07B1: E6 F0 L07B3: 47 # ld b, a L07B4: DB 00 # in a, [0x00+0] # and 0xf0 ! current bits L07B6: E6 F0 L07B8: B8 # cp b L07B9: C0 # ret nz ! CCIR bits are changing # # cp 0xF0 ! restart duration if notone L07BA: FE F0 # jp nz, 1f L07BC: C2 C4 07 # ld a, 0 L07BF: 3E 00 L07C1: 32 F3 D0 # ld [ccir_tonetime], a # 1: # L07C4: 3A F0 D0 # ld a, [ccir_prevdata] ! old ccir bits L07C7: B8 # cp b L07C8: C8 # ret z ! same bits as old L07C9: 78 # ld a, b L07CA: 32 F0 D0 # ld [ccir_prevdata], a ! remember these new bits # # ! 'inc l' is used a lot below, to walk in the 256-byte ringbuffer # # ld h, HI(ccir_history) ! KEPT VALID A LONG TIME L07CD: 26 D2 L07CF: 3A F2 D0 # ld a, [ccir_hist_idx] L07D2: 6F # ld l, a L07D3: 3C # inc a L07D4: 32 F2 D0 # ld [ccir_hist_idx], a ! idx points to next free slot # L07D7: 78 # ld a, b ! new bits # cp 0xF0 L07D8: FE F0 # jr z, 1f ! tone F L07DA: 28 17 # # ! NEW TONE # # cp 0xE0 L07DC: FE E0 # jr nz, 2f ! not repeat L07DE: 20 09 L07E0: 2D # dec l L07E1: 7E # ld a, [hl] ! peek previous chr L07E2: 2C # inc l # cp ' ' L07E3: FE 20 # jr nz, 3f ! repeat with previous tone L07E5: 20 0A # ld a, 0xE0 ! huh ? starts with repeat L07E7: 3E E0 # 2: L07E9: CB 3F # srl a L07EB: CB 3F # srl a L07ED: CB 3F # srl a L07EF: CB 3F # srl a ; ASSERT(0xf0 == 0xf0) # 3: L07F1: 77 # ld [hl], a # ret L07F2: C9 # 1: # ! NOTONE # # ld a, ' ' L07F3: 3E 20 L07F5: 77 # ld [hl], a # L07F6: 3A 80 C8 # ld a, [cfg_ccir_minlen] ! accept only N csec or longer series L07F9: BA # cp d ! minimum_time - duration # jp c, 1f L07FA: DA 04 08 L07FD: 3A F4 D0 # ld a, [ccir_toneptr] L0800: 32 F2 D0 # ld [ccir_hist_idx], a ! next tone will overwrite this bad one # ret L0803: C9 # 1: # ! okay decode # # call ccir_ok_serie L0804: CD 12 08 # L0807: 3A F2 D0 # ld a, [ccir_hist_idx] L080A: 32 F4 D0 # ld [ccir_toneptr], a ! next serie starts here (after blank) L080D: 3D # dec a L080E: 32 F1 D0 # ld [ccir_hist_finger], a ! reposition peeking finger also (over blank) # ret L0811: C9 # # ccir_ok_serie: # # ! check ours # # ld de, cfg_ccir_1 L0812: 11 40 C8 # call compare_ccir_serie L0815: CD 49 08 # jp z, ccir_match L0818: CA EF 08 # ld de, cfg_ccir_2 L081B: 11 48 C8 # call compare_ccir_serie L081E: CD 49 08 # jp z, ccir_match L0821: CA EF 08 # ld de, cfg_ccir_3 L0824: 11 50 C8 # call compare_ccir_serie L0827: CD 49 08 # jp z, ccir_match L082A: CA EF 08 # # ld de, cfg_repeater_suspend_ccir_cmd L082D: 11 A0 C9 # call compare_ccir_serie L0830: CD 49 08 # jp z, repeater_toggle_suspend L0833: CA AF 3D # # ld de, repeater_cfg_ccir_cmd_pfx L0836: 11 6F C9 # call compare_ccir_prefix L0839: CD 9A 08 # jp z, ccir_repeater_cmd ! cmd in A L083C: CA B1 3E # # ld de, cfg_exal_ccir_cmd_pfx L083F: 11 8F C9 # call compare_ccir_prefix L0842: CD 9A 08 # jp z, exal_command ! cmd in A L0845: CA 6C 0A # # ret L0848: C9 # # compare_ccir_serie: L0849: 3A F4 D0 # ld a, [ccir_toneptr] L084C: 6F # ld l, a # jp compare_tone_serie L084D: C3 57 08 # # compare_dtmf_serie: L0850: 3A F9 D0 # ld a, [dtmf_toneptr] L0853: 6F # ld l, a # jp compare_tone_serie L0854: C3 57 08 # # compare_tone_serie: L0857: 1A L0858: BE L0859: C2 93 08 L085C: 13 L085D: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L085E: 1A L085F: BE L0860: C2 93 08 L0863: 13 L0864: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L0865: 1A L0866: BE L0867: C2 93 08 L086A: 13 L086B: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L086C: 1A L086D: BE L086E: C2 93 08 L0871: 13 L0872: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L0873: 1A L0874: BE L0875: C2 93 08 L0878: 13 L0879: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L087A: 1A L087B: BE L087C: C2 93 08 L087F: 13 L0880: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L0881: 1A L0882: BE L0883: C2 93 08 L0886: 13 L0887: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L0888: 1A L0889: BE L088A: C2 93 08 L088D: 13 L088E: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l # ld a, ' ' L088F: 3E 20 L0891: BE # cp [hl] ! heard one must also end # ret L0892: C9 # 1: # cp 0xFF ! if mismatch, both strings must be at end L0893: FE FF L0895: C0 # ret nz ! cfg continues # ld a, ' ' ! cfg ends, heard one must also L0896: 3E 20 L0898: BE # cp [hl] # ret L0899: C9 # # ! return Z if prefix match, A = command byte # # compare_ccir_prefix: L089A: 3A F4 D0 # ld a, [ccir_toneptr] L089D: 6F # ld l, a # jp compare_tone_prefix L089E: C3 A8 08 # # compare_dtmf_prefix: L08A1: 3A F9 D0 # ld a, [dtmf_toneptr] L08A4: 6F # ld l, a # jp compare_tone_prefix L08A5: C3 A8 08 # # compare_tone_prefix: L08A8: 1A L08A9: BE L08AA: C2 E4 08 L08AD: 13 L08AE: 2C # ld a, [de]; cp [hl]; jp nz, 2f; inc de; inc l ! first one must be valid L08AF: 1A L08B0: BE L08B1: C2 E2 08 L08B4: 13 L08B5: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08B6: 1A L08B7: BE L08B8: C2 E2 08 L08BB: 13 L08BC: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08BD: 1A L08BE: BE L08BF: C2 E2 08 L08C2: 13 L08C3: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08C4: 1A L08C5: BE L08C6: C2 E2 08 L08C9: 13 L08CA: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08CB: 1A L08CC: BE L08CD: C2 E2 08 L08D0: 13 L08D1: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08D2: 1A L08D3: BE L08D4: C2 E2 08 L08D7: 13 L08D8: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l L08D9: 1A L08DA: BE L08DB: C2 E2 08 L08DE: 13 L08DF: 2C # ld a, [de]; cp [hl]; jp nz, 1f; inc de; inc l # # ! prefix was full 8 characters. Z condition from above cp. # L08E0: 7E # ld a, [hl] # ret ! Z = match, A has command L08E1: C9 # 1: # cp 0xFF ! if mismatch, cfg must be at end. L08E2: FE FF # 2: L08E4: C0 # ret nz ! cfg continues, heard was too short, return NZ # L08E5: 7E # ld a, [hl] ! cfg ends, heard one must NOT end, but have single tone left. # cp ' ' L08E6: FE 20 # jr nz, 1f ! Z if heard has blank (end of sequence) L08E8: 20 03 # ld a, '#' L08EA: 3E 23 # ret ! Z, prefix match fully, no explicit command == command # L08EC: C9 # 1: L08ED: BF # cp a ! command digit ok, set Z condition. # ret L08EE: C9 # # # ccir_match: # ld a, 2 L08EF: 3E 02 L08F1: 32 31 D8 # ld [ding_req], a # call start_call_timer L08F4: CD F8 08 # ret L08F7: C9 # # start_call_timer: L08F8: 32 AA D0 # ld [call_dpyed], a # ld a, 0 L08FB: 3E 00 L08FD: 32 36 D8 # ld [call_timer_sec], a L0900: 32 35 D8 # ld [call_timer_min], a L0903: 32 34 D8 # ld [call_timer_hour], a # ret L0906: C9 # # ccir_decoder_init: # ld hl, ccir_history L0907: 21 00 D2 # ld a, ' ' L090A: 3E 20 # 1: L090C: 77 # ld [hl], a L090D: 2C # inc l # jr nz, 1b L090E: 20 FC # ret L0910: C9 # # !====================================================================== # # dtmf_decoder_init: # ld hl, dtmf_history L0911: 21 00 D3 # ld a, ' ' L0914: 3E 20 # 1: L0916: 77 # ld [hl], a L0917: 2C # inc l # jr nz, 1b L0918: 20 FC # ld a, 0x00 L091A: 3E 00 L091C: 32 F5 D0 # ld [dtmf_prevdata], a ! start from notone # ret L091F: C9 # # dtmf_decoder: L0920: 3A 00 80 # ld a, [0x8000] L0923: CB 7F # bit 7, a # jp nz, 1f ! if StD high L0925: C2 2E 09 # ld a, 0 L0928: 3E 00 L092A: 32 F5 D0 # ld [dtmf_prevdata], a ! no StD, allow dtmf_idletime to grow # ret L092D: C9 # 1: # and 0xF8 L092E: E6 F8 L0930: 47 # ld b, a ! b is StD Q4...1 X X X # # ld a, 1 L0931: 3E 01 L0933: 32 F8 D0 # ld [dtmf_idletime], a ! rewind dtmf notone timer # L0936: 3A F5 D0 # ld a, [dtmf_prevdata] L0939: B8 # cp b L093A: C8 # ret z ! same as old # L093B: 78 # ld a, b L093C: 32 F5 D0 # ld [dtmf_prevdata], a ! remember as old L093F: CB 3F # srl a L0941: CB 3F # srl a L0943: CB 3F # srl a ! 0 0 0 StD Q4 Q3 Q2 Q1 # and 0x0F L0945: E6 0F # L0947: 21 80 38 # ld hl, dtmf_8870_tab ; ASSERT(LO(dtmf_8870_tab) < 240) ! L wont carry L094A: 85 # add l L094B: 6F # ld l, a L094C: 46 # ld b, [hl] ! map into digit or code # # ld h, HI(dtmf_history) L094D: 26 D3 L094F: 3A F7 D0 # ld a, [dtmf_hist_idx] L0952: 6F # ld l, a L0953: 3C # inc a L0954: 32 F7 D0 # ld [dtmf_hist_idx], a ! idx points to next free slot now L0957: 70 # ld [hl], b ! stash digit/code # # ret L0958: C9 # # dtmf_decoder_timeout: # # ld h, HI(dtmf_history) L0959: 26 D3 L095B: 3A F9 D0 # ld a, [dtmf_toneptr] L095E: 47 # ld b, a # L095F: 3A F7 D0 # ld a, [dtmf_hist_idx] L0962: 6F # ld l, a L0963: 32 F6 D0 # ld [dtmf_hist_finger], a ! finger points to blank after codes L0966: 3C # inc a L0967: 32 F7 D0 # ld [dtmf_hist_idx], a ! idx points to next free slot now L096A: 32 F9 D0 # ld [dtmf_toneptr], a ! ptr also # ld a, ' ' L096D: 3E 20 L096F: 77 # ld [hl], a ! stash digit/code # L0970: 68 # ld l, b # call dtmf_commands L0971: CD 79 3E # ret L0974: C9 # # !====================================================================== # # pull_down_EXIN1: # ld hl, piob_mode L0975: 21 E7 D0 L0978: CB 8E # res 1, [hl] ! i/o selection, 1 for input, 0 for output # jp 1f L097A: C3 92 09 # # release_EXIN1: # ld hl, piob_mode L097D: 21 E7 D0 L0980: CB CE # set 1, [hl] ! i/o selection, 1 for input, 0 for output # jp 1f L0982: C3 92 09 # # pull_down_DCU: # ld hl, piob_mode L0985: 21 E7 D0 L0988: CB 9E # res 3, [hl] ! i/o selection, 1 for input, 0 for output # jp 1f L098A: C3 92 09 # # release_DCU: # ld hl, piob_mode L098D: 21 E7 D0 L0990: CB DE # set 3, [hl] ! i/o selection, 1 for input, 0 for output # 1: # ld a, 0xCF ! operating mode 3 L0992: 3E CF L0994: D3 03 # out [0x00+3], a L0996: 7E # ld a, [hl] L0997: D3 03 # out [0x00+3], a # ret L0999: C9 # # !====================================================================== # # main: L099A: FB # ei # # call probe_cu58af L099B: CD 93 29 # # call ccir_decoder_init L099E: CD 07 09 # call dtmf_decoder_init L09A1: CD 11 09 # call enable_modem L09A4: CD 64 15 # # call set_vola L09A7: CD 76 0D # call init_menu L09AA: CD 62 46 # call init_LPF L09AD: CD 30 22 # call zero_txpwr L09B0: CD 0A 32 # # call cu_now_known L09B3: CD 88 29 # 1: # call is_key_down L09B6: CD 27 0B # jp nz, 1b ! wait release L09B9: C2 B6 09 L09BC: 3A B3 D0 # ld a, [pttdn] L09BF: B7 # or a # jp nz, 1b ! wait release L09C0: C2 B6 09 # # call halt_txsynth L09C3: CD F5 30 # call set_channel_step L09C6: CD F3 2F # call changed_frequency_duplex_okay L09C9: CD A6 2C # call cu_manipulated L09CC: CD 42 0B # call light_on_led L09CF: CD F1 23 # call resync_squelch_if_forced L09D2: CD 47 23 # call repeater_init L09D5: CD BA 3D # # call redraw L09D8: CD DA 23 # call redraw L09DB: CD DA 23 # L09DE: 3A 03 C0 # ld a, [scan_on] L09E1: B7 # or a # jr z, 1f L09E2: 28 08 # ld a, 0 L09E4: 3E 00 L09E6: 32 03 C0 # ld [scan_on], a # call scanner_start L09E9: CD 7F 11 # 1: # # mainloop: # call redrawcheck L09EC: CD 03 0B # call battcheck L09EF: CD CA 0A # call pttcheck L09F2: CD F8 1D # call aprs_ptt_check L09F5: CD 9A 1E # call keycheck L09F8: CD 11 0B # call fskcheck L09FB: CD 39 15 # call ccircheck L09FE: CD 5E 0A # call dim_lights_if_idle L0A01: CD 53 0A # call idlefn_check L0A04: CD 89 0A # call script_check L0A07: CD 13 0A # call scanner_run L0A0A: CD 70 11 # call repeater_run L0A0D: CD D5 3D # # ! halt # ! jr mainloop # jp mainloop L0A10: C3 EC 09 # # !====================================================================== # # ! execute [script_req] if it is nonzero. # # script_check: # L0A13: 3A 32 D8 # ld a, [script_req] L0A16: B7 # or a L0A17: C8 # ret z # L0A18: F5 # push af # call open_selective ! before script (so it can (re)start mute) L0A19: CD 6B 23 L0A1C: F1 # pop af # # ! reset flag # L0A1D: 47 # ld b, a # ld a, 0 L0A1E: 3E 00 L0A20: 32 32 D8 # ld [script_req], a L0A23: 78 # ld a, b # # ! 8 bytes from HL # # ld b, 8 L0A24: 06 08 # ld hl, cfg_onhook_script L0A26: 21 5E C9 # cp 1 L0A29: FE 01 # jr z, 1f L0A2B: 28 08 # ld hl, cfg_offhook_script L0A2D: 21 66 C9 # cp 2 L0A30: FE 02 # jr z, 1f L0A32: 28 01 # # ret ! did not recognize it, ignore. L0A34: C9 # 1: L0A35: 7E # ld a, [hl] L0A36: 23 # inc hl ! next character # cp 0xFF L0A37: FE FF # jr z, 1f ! End of string character L0A39: 28 17 L0A3B: E5 # push hl L0A3C: C5 # push bc # L0A3D: 4F # ld c, a ! chr in C # # ld a, 0 L0A3E: 3E 00 L0A40: 32 B2 D0 # ld [key_time], a ! this gives only quick simple presses L0A43: 32 B4 D0 # ld [keydown], a # ld a, -1 L0A46: 3E FF L0A48: 32 B0 D0 # ld [key], a # # call dokey_not_menu ! process the character L0A4B: CD 60 0B # L0A4E: C1 # pop bc L0A4F: E1 # pop hl # djnz 1b ! 8 characters max L0A50: 10 E3 # 1: # ret L0A52: C9 # # !====================================================================== # # dim_lights_if_idle: L0A53: 3A 22 C7 # ld a, [cfg_light_seconds] # ld hl, lights_timer L0A56: 21 24 D0 L0A59: BE # cp [hl] ! setting - idleseconds # call c, cu_lights_off ! dim if idle longer than configured time L0A5A: DC 40 24 # ret L0A5D: C9 # # !---------------------------------------------------------------------- # # ccircheck: L0A5E: 3A 31 D8 # ld a, [ding_req] L0A61: B7 # or a L0A62: C8 # ret z # ld a, 0 L0A63: 3E 00 L0A65: 32 31 D8 # ld [ding_req], a # # call ding L0A68: CD CB 22 # ret L0A6B: C9 # # exal_command: # cp '1' L0A6C: FE 31 # jr z, 1f L0A6E: 28 0D # cp 1 L0A70: FE 01 # jr z, 1f L0A72: 28 09 # # cp '0' L0A74: FE 30 # jr z, 2f L0A76: 28 0B # cp 0 L0A78: FE 00 # jr z, 2f L0A7A: 28 07 # # ret L0A7C: C9 # 1: # ld a, 1 L0A7D: 3E 01 L0A7F: 32 8E C9 # ld [cfg_exal_state], a # ret L0A82: C9 # 2: # ld a, 0 L0A83: 3E 00 L0A85: 32 8E C9 # ld [cfg_exal_state], a # ret L0A88: C9 # # !---------------------------------------------------------------------- # # idlefn_check: L0A89: 3A 27 D8 # ld a, [idlefn_flag] L0A8C: B7 # or a L0A8D: C8 # ret z # # ld a, 0 L0A8E: 3E 00 L0A90: 32 27 D8 # ld [idlefn_flag], a # L0A93: 3A 23 C9 # ld a, [cfg_idlefn] # # cp 1 L0A96: FE 01 # jp z, scanner_start L0A98: CA 7F 11 # # cp 2 L0A9B: FE 02 # jp z, def_memo L0A9D: CA 68 0F # # ret L0AA0: C9 # # !---------------------------------------------------------------------- # # ! Battery dangerously low. # ! Twiddle here for a moment, waiting voltage to revive, return back then. # ! After a couple of seconds turn off power relay. # # battcheck_lobatt: # # call feedback_lobatt L0AA1: CD 6B 27 # call force_redraw L0AA4: CD CB 23 # L0AA7: 3A D1 D0 # ld a, [seconds] # add 5 ! 5 seconds twiddling at powerwait L0AAA: C6 05 # cp 60 L0AAC: FE 3C # jr c, 1f L0AAE: 38 02 # sub 60 L0AB0: D6 3C # 1: L0AB2: 47 # ld b, a ! save, couple of seconds into future, modulo minutes # # 1: L0AB3: 3A D1 D0 # ld a, [seconds] L0AB6: B8 # cp b # jp z, powerdown_now ! timeout. OFF! L0AB7: CA 4F 20 # L0ABA: 3A 02 D8 # ld a, [ad_batt] # cp 100 * 256 / 156 ! 10V L0ABD: FE A4 # jr c, 1b ! loop if below. L0ABF: 38 F2 # # ! whoa, battery reanimation # # call clear_clock_icon L0AC1: CD 3A 25 # call no_feedback L0AC4: CD F6 26 # # jp redraw ! returns to caller of battcheck() L0AC7: C3 DA 23 # # # battcheck: # L0ACA: 3A 25 D0 # ld a, [txtail_timer] ! did xmit lately ? L0ACD: B7 # or a L0ACE: 3A 02 D8 # ld a, [ad_batt] # jr z, 2f L0AD1: 28 0D # cp 80 * 256 / 156 ! 8V L0AD3: FE 83 # jp c, battcheck_lobatt L0AD5: DA A1 0A # # cp 90 * 256 / 156 ! 9V, was 11.2V, 184 L0AD8: FE 93 # jr c, 1f L0ADA: 38 11 # call clear_clock_icon L0ADC: CD 3A 25 # ret L0ADF: C9 # 2: # cp 90 * 256 / 156 ! 9V, was 10.2V, 167 L0AE0: FE 93 # jp c, battcheck_lobatt L0AE2: DA A1 0A # # cp 100 * 256 / 156 ! 10V, was 11.2V, 184 L0AE5: FE A4 # jr c, 1f L0AE7: 38 04 # call clear_clock_icon L0AE9: CD 3A 25 # ret L0AEC: C9 # # 1: # call draw_clock_icon L0AED: CD 28 25 # L0AF0: 3A 23 D0 # ld a, [alert_timer] L0AF3: B7 # or a L0AF4: C0 # ret nz # # ld a, 60 L0AF5: 3E 3C L0AF7: 32 23 D0 # ld [alert_timer], a ! every 60 sec # # ld hl, MT_300HZ L0AFA: 21 80 34 # ld d, 100 ! one second alert tone L0AFD: 16 64 # call start_marker_tone L0AFF: CD 1F 23 # # ret L0B02: C9 # # !====================================================================== # # redrawcheck: # L0B03: 3A D4 D0 # ld a, [redraw_req] # cp 0 L0B06: FE 00 L0B08: C8 # ret z # # ld a, 0 L0B09: 3E 00 L0B0B: 32 D4 D0 # ld [redraw_req], a # # jp redraw L0B0E: C3 DA 23 # # !====================================================================== # # keycheck: # L0B11: 3A B0 D0 # ld a, [key] # cp -1 L0B14: FE FF L0B16: C8 # ret z # L0B17: 4F # ld c, a # call clear_key L0B18: CD 04 0E # call dokey L0B1B: CD 59 0B # call no_feedback L0B1E: CD F6 26 # call open_selective L0B21: CD 6B 23 # jp redraw L0B24: C3 DA 23 # # is_key_down: L0B27: 3A B4 D0 # ld a, [keydown] L0B2A: B7 # or a L0B2B: C0 # ret nz ! NZ key down # call clear_key L0B2C: CD 04 0E L0B2F: BF # cp a # ret ! Z not L0B30: C9 # # waitkey: # 1: L0B31: 3A B2 D0 # ld a, [key_time] # cp 255 L0B34: FE FF # call z, feedback_let_go_the_darn_button L0B36: CC 5E 27 # call redraw L0B39: CD DA 23 # call is_key_down L0B3C: CD 27 0B # jr nz, 1b L0B3F: 20 F0 # ret L0B41: C9 # # !---------------------------------------------------------------------- # # cu_manipulated: # ld a, 0 L0B42: 3E 00 L0B44: 32 27 D0 # ld [ign_apo_timer], a L0B47: 32 22 D0 # ld [idle_timer], a # ld a, 0 L0B4A: 3E 00 L0B4C: 32 AA D0 # ld [call_dpyed], a L0B4F: 32 26 D8 # ld [display_buffer_time], a # call cu_call_off L0B52: CD 8B 24 # call cu_lights_on L0B55: CD 23 24 # ret L0B58: C9 # # !---------------------------------------------------------------------- # # dokey: ! whatever we call will do ret # L0B59: 3A 10 D1 # ld a, [menu_active] L0B5C: B7 # or a # jp nz, menu_input L0B5D: C2 DF 0B # # ! fallthru # # dokey_not_menu: # L0B60: 79 # ld a, c # cp 10 L0B61: FE 0A # jp c, insdig_or_scan_toggle L0B63: DA 0C 0E # # cp 'T' L0B66: FE 54 # jp z, mute_squelch_selective L0B68: CA A5 23 # # cp '#' L0B6B: FE 23 # jp z, execute L0B6D: CA 72 0C # cp 'C' L0B70: FE 43 # jp z, backspace L0B72: CA 2D 0E # cp 0xC L0B75: FE 0C # jp z, backspace L0B77: CA 2D 0E # cp 'E' L0B7A: FE 45 # jp z, toggle_or_position_menu L0B7C: CA 1F 49 # cp 0xE L0B7F: FE 0E # jp z, toggle_or_position_menu L0B81: CA 1F 49 # cp '*' L0B84: FE 2A # jp z, beep_or_fsk_send L0B86: CA 1D 0F # cp '+' L0B89: FE 2B # jp z, up_vola L0B8B: CA 6E 0D # cp '-' L0B8E: FE 2D # jp z, dn_vola L0B90: CA 72 0D # cp 'B' L0B93: FE 42 # jp z, monitor_audio L0B95: CA B1 0C # cp 0xB L0B98: FE 0B # jp z, monitor_audio L0B9A: CA B1 0C # # cp 0x81 L0B9D: FE 81 # jp z, up_sqlv L0B9F: CA 4C 0D # cp 0x84 L0BA2: FE 84 # jp z, dn_sqlv L0BA4: CA 5D 0D # cp 0x87 L0BA7: FE 87 # jp z, def_sqlv L0BA9: CA 20 0D # # cp 0x82 L0BAC: FE 82 # jp z, up_memo L0BAE: CA 1B 1D # cp 0x85 L0BB1: FE 85 # jp z, dn_memo L0BB3: CA 48 1D # cp 0x88 L0BB6: FE 88 # jp z, def_memo L0BB8: CA 68 0F # # cp 0x83 L0BBB: FE 83 # jp z, up_freq L0BBD: CA 08 0D # cp 0x86 L0BC0: FE 86 # jp z, dn_freq L0BC2: CA 14 0D # cp 0x89 L0BC5: FE 89 # jp z, def_freq L0BC7: CA 7A 0F # # cp 0x80 L0BCA: FE 80 # jp z, def_vola L0BCC: CA 59 0F # # cp 'S' L0BCF: FE 53 # jp z, scanner_key L0BD1: CA 27 0F # # cp 'R' L0BD4: FE 52 # jp z, duplex_key L0BD6: CA CD 0E # # cp 'K' L0BD9: FE 4B # jp z, step_audio_dst L0BDB: CA AB 29 # # ret L0BDE: C9 # # menu_input: # L0BDF: 79 # ld a, c # cp 10 L0BE0: FE 0A # jp c, insdig L0BE2: DA 15 0E # # cp 'C' L0BE5: FE 43 # jp z, backspace L0BE7: CA 2D 0E # cp 0xC L0BEA: FE 0C # jp z, backspace L0BEC: CA 2D 0E # cp 'E' L0BEF: FE 45 # jp z, toggle_or_position_menu L0BF1: CA 1F 49 # cp 0xE L0BF4: FE 0E # jp z, toggle_or_position_menu L0BF6: CA 1F 49 # cp '#' L0BF9: FE 23 # jp z, menu_enter_or_walk L0BFB: CA AC 49 # cp '*' L0BFE: FE 2A # jp z, menu_defval_or_exec L0C00: CA BC 49 # cp '+' L0C03: FE 2B # jp z, menu_up_value L0C05: CA 85 4B # cp '-' L0C08: FE 2D # jp z, menu_dn_value L0C0A: CA 8A 4B # cp 'B' L0C0D: FE 42 # jp z, monitor_audio L0C0F: CA B1 0C # cp 0xB L0C12: FE 0B # jp z, monitor_audio L0C14: CA B1 0C # # cp 0x81 ! alphanumeric input with long digit presses L0C17: FE 81 # jp z, insdig_alpha L0C19: CA 8D 0E # cp 0x82 L0C1C: FE 82 # jp z, insdig_alpha L0C1E: CA 8D 0E # cp 0x83 L0C21: FE 83 # jp z, insdig_alpha L0C23: CA 8D 0E # cp 0x84 L0C26: FE 84 # jp z, insdig_alpha L0C28: CA 8D 0E # cp 0x85 L0C2B: FE 85 # jp z, insdig_alpha L0C2D: CA 8D 0E # cp 0x86 L0C30: FE 86 # jp z, insdig_alpha L0C32: CA 8D 0E # cp 0x87 L0C35: FE 87 # jp z, insdig_alpha L0C37: CA 8D 0E # cp 0x88 L0C3A: FE 88 # jp z, insdig_alpha L0C3C: CA 8D 0E # cp 0x89 L0C3F: FE 89 # jp z, insdig_alpha L0C41: CA 8D 0E # cp 0x80 L0C44: FE 80 # jp z, insdig_punct L0C46: CA 7C 0E # # cp 'S' L0C49: FE 53 # jp z, menu_next_group L0C4B: CA FC 49 # # cp 'R' L0C4E: FE 52 # jp z, menu_prev L0C50: CA 22 4A # # cp 'K' L0C53: FE 4B # jp z, step_audio_dst L0C55: CA AB 29 # # ret L0C58: C9 # # !---------------------------------------------------------------------- # # handle_key_during_tx: # # call clear_key L0C59: CD 04 0E # # ! volume buttons step xmit power when transmitting # # cp '+' L0C5C: FE 2B # jp z, step_txpwr_up L0C5E: CA 2B 20 # cp '-' L0C61: FE 2D # jp z, step_txpwr_down L0C63: CA 3D 20 # # ! other buttons emit DTMF # L0C66: 4F # ld c, a L0C67: 3A ED D0 # ld a, [cu_is_alfa] L0C6A: B7 # or a L0C6B: 79 # ld a, c # jp nz, dtmf_cu58af L0C6C: C2 BC 29 # # jp dtmf_bang_tone L0C6F: C3 32 3C # # !---------------------------------------------------------------------- # # execute: L0C72: 3A 03 C0 # ld a, [scan_on] L0C75: B7 # or a # jp nz, scanner_stop ! Just stop it, nothing else L0C76: C2 54 13 # call 1f L0C79: CD 80 0C # call save_nvdata L0C7C: CD AE 3B # ret L0C7F: C9 # 1: L0C80: 3A B2 D0 # ld a, [key_time] L0C83: B7 # or a # jp nz, save_memory ! long press starting, go handle memories L0C84: C2 81 1C # # call is_key_down L0C87: CD 27 0B # jr nz, 1b L0C8A: 20 F4 # L0C8C: 3A B5 D0 # ld a, [digidx] # cp 0 L0C8F: FE 00 # jp z, next_vip ! just #, no digits L0C91: CA 0A 10 # cp 3 L0C94: FE 03 # jp c, go_mem ! 1...2 digits L0C96: DA 75 1D # cp 5 L0C99: FE 05 # call c, fill_implied ! if 3 or 4 digits, fix to abs. L0C9B: DC D5 0D # # call a2i L0C9E: CD 57 3A L0CA1: 22 08 C0 L0CA4: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call leave_memories L0CA7: CD F2 1D # call remember_vip L0CAA: CD B0 0F # call changed_frequency L0CAD: CD 9F 2C # ret L0CB0: C9 # # !---------------------------------------------------------------------- # # monitor_audio: # L0CB1: 3A 03 C0 # ld a, [scan_on] L0CB4: B7 # or a # jp nz, scanner_stop ! thingy just stops scanner, if scanning. L0CB5: C2 54 13 # # ! possibly enter repeater input # L0CB8: 2A 08 C0 L0CBB: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L0CBE: F5 # push af L0CBF: E5 # push hl # call compare_tx_rx_freq L0CC0: CD 98 0F L0CC3: F5 # push af ! Remember to re-swap rx/tx if needed # jp z, 1f ! Simplex. No channel change L0CC4: CA D6 0C # L0CC7: 2A 0B C0 L0CCA: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L0CCD: 22 08 C0 L0CD0: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call temporary_change_rx_freq L0CD3: CD B0 2C # 1: L0CD6: 3A 02 C0 # ld a, [squelch_forced] ! remember which way it was L0CD9: 4F # ld c, a # call force_squelch ! anyways it is open when button down L0CDA: CD 51 23 # # ! wait button release, note if over 1 sec down. # # ld b, 0 ! assume "quick" L0CDD: 06 00 # 1: L0CDF: C5 # push bc # call redraw L0CE0: CD DA 23 L0CE3: C1 # pop bc L0CE4: 3A B4 D0 # ld a, [keydown] # cp 20 L0CE7: FE 14 # jr c, 2f L0CE9: 38 02 # ld b, 1 ! no, "long" after 200 msec L0CEB: 06 01 # 2: # call is_key_down L0CED: CD 27 0B # jr nz, 1b L0CF0: 20 ED # # ! close squelch if long press, toggle if short. We opened it above, so # ! close squelch if long press _or_ it was already forced # L0CF2: 78 # ld a, b ! NZ if long L0CF3: B1 # or c ! NZ if forced already # call nz, unforce_squelch L0CF4: C4 5C 23 # # ! restore frequency if changed # L0CF7: F1 # pop af L0CF8: E1 # pop hl L0CF9: C1 # pop bc # jp z, 1f ! Simplex. No channel change L0CFA: CA 07 0D L0CFD: 78 # ld a, b L0CFE: 22 08 C0 L0D01: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call temporary_change_rx_freq L0D04: CD B0 2C # 1: # ret L0D07: C9 # # # up_freq: # call leave_memories L0D08: CD F2 1D # call clear_buffer L0D0B: CD FC 0D # call scanner_stop L0D0E: CD 54 13 # jp step_channel_up L0D11: C3 C5 2F # # dn_freq: # call leave_memories L0D14: CD F2 1D # call clear_buffer L0D17: CD FC 0D # call scanner_stop L0D1A: CD 54 13 # jp step_channel_down L0D1D: C3 DB 2F # # # def_sqlv: # call clear_buffer L0D20: CD FC 0D # call feedback_default L0D23: CD 1D 27 # call redraw L0D26: CD DA 23 # 1: L0D29: 3A B2 D0 # ld a, [key_time] # cp 2 L0D2C: FE 02 # jr nc, 1f ! set default L0D2E: 30 0F # call is_key_down L0D30: CD 27 0B # jr nz, 1b L0D33: 20 F4 # L0D35: 3A 2C C7 # ld a, [cfg_def_squelch] L0D38: 32 27 C7 # ld [cfg_squelch_level], a # # call unforce_squelch ! Adjusting opened sq removes hard open. L0D3B: CD 5C 23 # ret L0D3E: C9 # 1: L0D3F: 3A 27 C7 # ld a, [cfg_squelch_level] L0D42: 32 2C C7 # ld [cfg_def_squelch], a # # call feedback_stored L0D45: CD 2A 27 # call waitkey L0D48: CD 31 0B # ret L0D4B: C9 # # up_sqlv: # call clear_buffer L0D4C: CD FC 0D # L0D4F: 3A 27 C7 # ld a, [cfg_squelch_level] # add 1 L0D52: C6 01 # sbc 0 L0D54: DE 00 L0D56: 32 27 C7 # ld [cfg_squelch_level], a # call unforce_squelch ! Adjusting opened sq removes hard open. L0D59: CD 5C 23 # ret L0D5C: C9 # # dn_sqlv: # call clear_buffer L0D5D: CD FC 0D # L0D60: 3A 27 C7 # ld a, [cfg_squelch_level] # sub 1 L0D63: D6 01 # adc 0 L0D65: CE 00 L0D67: 32 27 C7 # ld [cfg_squelch_level], a # call unforce_squelch ! Adjusting opened sq removes hard open. L0D6A: CD 5C 23 # ret L0D6D: C9 # # up_vola: # ld a, 1 L0D6E: 3E 01 # jr 1f L0D70: 18 06 # dn_vola: # ld a, -1 L0D72: 3E FF # jr 1f L0D74: 18 02 # set_vola: # ld a, 0 L0D76: 3E 00 # 1: # ld hl, volume L0D78: 21 01 C0 L0D7B: 86 # add [hl] # # set_vola_a: # cp 10 L0D7C: FE 0A # jr z, 1f ! 9 -> 10 L0D7E: 28 06 # jr c, 2f ! 0 -> -1 L0D80: 38 06 # ld a, 0 L0D82: 3E 00 # jr 2f L0D84: 18 02 # 1: # ld a, 9 L0D86: 3E 09 # 2: L0D88: 32 01 C0 # ld [volume], a # cp 0 L0D8B: FE 00 # jr z, 1f L0D8D: 28 1E # cp 1 L0D8F: FE 01 # jr z, 2f L0D91: 28 2E # sub 2 ! 9 - 2 -> 7 L0D93: D6 02 # and 7 L0D95: E6 07 L0D97: 47 # ld b, a L0D98: F3 # di L0D99: 3A 00 D0 # ld a, [output_0] # and ~0x07 L0D9C: E6 F8 # and ~0x08 L0D9E: E6 F7 L0DA0: B0 # or b L0DA1: 32 00 D0 # ld [output_0], a L0DA4: D3 60 # out [0x60], a # ld hl, sir L0DA6: 21 AC D0 L0DA9: CB D6 # set DTMFSIR, [hl] L0DAB: FB # ei # ret L0DAC: C9 # 1: L0DAD: F3 # di L0DAE: 3A 00 D0 # ld a, [output_0] # and ~0x07 L0DB1: E6 F8 # or 0x08 L0DB3: F6 08 L0DB5: 32 00 D0 # ld [output_0], a L0DB8: D3 60 # out [0x60], a # ld hl, sir L0DBA: 21 AC D0 L0DBD: CB D6 # set DTMFSIR, [hl] L0DBF: FB # ei # ret L0DC0: C9 # 2: L0DC1: F3 # di L0DC2: 3A 00 D0 # ld a, [output_0] # and ~0x07 L0DC5: E6 F8 # and ~0x08 L0DC7: E6 F7 L0DC9: 32 00 D0 # ld [output_0], a L0DCC: D3 60 # out [0x60], a # ld hl, sir L0DCE: 21 AC D0 L0DD1: CB D6 # set DTMFSIR, [hl] L0DD3: FB # ei # ret L0DD4: C9 # # !---------------------------------------------------------------------- # # fill_implied: # # ! 3 or 4 digits, use implied for initial part of frequency # # ld de, digbuf + 5 L0DD5: 11 BB D0 # ld hl, digbuf + 2 L0DD8: 21 B8 D0 # ld bc, 6 L0DDB: 01 06 00 L0DDE: 3A B5 D0 # ld a, [digidx] # cp 3 L0DE1: FE 03 # jr z, 1f L0DE3: 28 03 L0DE5: 23 # inc hl L0DE6: ED A8 # ldd # 1: L0DE8: ED A8 # ldd L0DEA: ED A8 # ldd L0DEC: ED A8 # ldd # ld hl, cfg_implied L0DEE: 21 17 C7 # ld de, digbuf L0DF1: 11 B6 D0 L0DF4: ED B0 # ldir ! 2 or 3 count in bc # ld a, 6 L0DF6: 3E 06 L0DF8: 32 B5 D0 # ld [digidx], a ! abs. freq now # # ret L0DFB: C9 # # !---------------------------------------------------------------------- # # clear_buffer: L0DFC: F5 # push af # ld a, 0 L0DFD: 3E 00 L0DFF: 32 B5 D0 # ld [digidx], a L0E02: F1 # pop af # ret L0E03: C9 # # clear_key: L0E04: F5 # push af # ld a, -1 L0E05: 3E FF L0E07: 32 B0 D0 # ld [key], a L0E0A: F1 # pop af # ret L0E0B: C9 # # insdig_or_scan_toggle: L0E0C: 5F # ld e, a L0E0D: 3A 03 C0 # ld a, [scan_on] L0E10: B7 # or a L0E11: 7B # ld a, e # jp nz, toggle_scan_mask L0E12: C2 C5 11 # # ! FALL THRU # # insdig: L0E15: 5F # ld e, a L0E16: 3A B5 D0 # ld a, [digidx] # cp 16 L0E19: FE 10 # jr nc, 1f L0E1B: 30 0C # ld hl, digbuf L0E1D: 21 B6 D0 # ld b, 0 L0E20: 06 00 L0E22: 4F # ld c, a L0E23: 09 # add hl, bc L0E24: 3C # inc a L0E25: 73 # ld [hl], e L0E26: 32 B5 D0 # ld [digidx], a # 1: # call scanner_stop L0E29: CD 54 13 # ret L0E2C: C9 # # backspace: # call decoder_hist_rewind L0E2D: CD A2 48 # # ld a, 0 L0E30: 3E 00 L0E32: 32 D6 D0 # ld [vip_idx], a # # call scanner_stop L0E35: CD 54 13 # L0E38: 3A B4 D0 # ld a, [keydown] # cp 20 L0E3B: FE 14 # jr nc, 1f L0E3D: 30 0B L0E3F: 3A B5 D0 # ld a, [digidx] # sub 1 ! initial CL press, erase one L0E42: D6 01 # adc 0 L0E44: CE 00 L0E46: 32 B5 D0 # ld [digidx], a # ret L0E49: C9 # 1: # ld a, 0 ! Brute force clear all if repeating CL L0E4A: 3E 00 L0E4C: 32 B5 D0 # ld [digidx], a # ret L0E4F: C9 # # alpha_punct: L0E50: 2F L0E51: 2D L0E52: 3F # .byte '/', '-', '?', '#' L0E53: 23 L0E54: 24 L0E55: 3D L0E56: 2E # .byte '$', '=', '.', 0 L0E57: 00 # alpha_tab: L0E58: 0A L0E59: 0B L0E5A: 0C # .byte 0xA, 0xB, 0xC, 1 L0E5B: 01 L0E5C: 0D L0E5D: 0E L0E5E: 0F # .byte 0xD, 0xE, 0xF, 2 L0E5F: 02 L0E60: 47 L0E61: 48 L0E62: 49 # .byte 'G', 'H', 'I', 3 L0E63: 03 L0E64: 4A L0E65: 4B L0E66: 4C # .byte 'J', 'K', 'L', 4 L0E67: 04 L0E68: 4D L0E69: 4E L0E6A: 4F # .byte 'M', 'N', 'O', 5 L0E6B: 05 L0E6C: 50 L0E6D: 51 L0E6E: 52 # .byte 'P', 'Q', 'R', 6 L0E6F: 06 L0E70: 53 L0E71: 54 L0E72: 55 # .byte 'S', 'T', 'U', 7 L0E73: 07 L0E74: 56 L0E75: 57 L0E76: 58 # .byte 'V', 'W', 'X', 8 L0E77: 08 L0E78: 20 L0E79: 59 L0E7A: 5A # .byte ' ', 'Y', 'Z', 9 L0E7B: 09 # # insdig_punct: # ld hl, alpha_punct L0E7C: 21 50 0E L0E7F: 3A B2 D0 # ld a, [key_time] # sub 1 L0E82: D6 01 # and 7 L0E84: E6 07 L0E86: 5F # ld e, a # ld d, 0 L0E87: 16 00 L0E89: 19 # add hl, de # jp 1f L0E8A: C3 A3 0E # # ! JMPOVER # # insdig_alpha: # and 0xF L0E8D: E6 0F # sub 1 ! table starts from 1 L0E8F: D6 01 L0E91: 87 # add a ! *= 2 L0E92: 87 # add a ! *= 4 L0E93: 5F # ld e, a # ld d, 0 L0E94: 16 00 # ld hl, alpha_tab L0E96: 21 58 0E L0E99: 19 # add hl, de L0E9A: 3A B2 D0 # ld a, [key_time] # sub 1 L0E9D: D6 01 # and 3 L0E9F: E6 03 L0EA1: 5F # ld e, a L0EA2: 19 # add hl, de # 1: L0EA3: 5E # ld e, [hl] # # ld hl, digbuf L0EA4: 21 B6 D0 L0EA7: 3A B5 D0 # ld a, [digidx] # ld b, 0 L0EAA: 06 00 L0EAC: 4F # ld c, a L0EAD: 09 # add hl, bc # cp 16 L0EAE: FE 10 L0EB0: D0 # ret nc ! forget if buffer full L0EB1: 3A B5 D0 # ld a, [digidx] # cp 0 L0EB4: FE 00 # jp z, 1f ! impossible, digidx 0 but rnot first alpha XXX L0EB6: CA C4 0E L0EB9: 3A B2 D0 # ld a, [key_time] # cp 1 L0EBC: FE 01 # jp z, 1f ! go if first alpha L0EBE: CA C4 0E # L0EC1: 2B # dec hl ! else overwrite current char L0EC2: 73 # ld [hl], e # ret L0EC3: C9 # 1: L0EC4: 73 # ld [hl], e L0EC5: 3A B5 D0 # ld a, [digidx] L0EC8: 3C # inc a L0EC9: 32 B5 D0 # ld [digidx], a # ret L0ECC: C9 # # !---------------------------------------------------------------------- # # duplex_key: L0ECD: 3A B5 D0 # ld a, [digidx] # cp 2 L0ED0: FE 02 # jp c, step_duplex_state ! too few digits, simplex/duplex/reverse L0ED2: DA 3F 2F # 1: # call redraw L0ED5: CD DA 23 L0ED8: 3A B2 D0 # ld a, [key_time] # cp 1 L0EDB: FE 01 # jp nc, 1f L0EDD: D2 E8 0E # call is_key_down L0EE0: CD 27 0B # jr nz, 1b L0EE3: 20 F0 # jp step_duplex_state ! quick press, simplex/duplex/reverse L0EE5: C3 3F 2F # 1: # call feedback_shift_neg L0EE8: CD 37 27 # 1: # call redraw L0EEB: CD DA 23 L0EEE: 3A B2 D0 # ld a, [key_time] # cp 2 L0EF1: FE 02 # jp nc, 1f L0EF3: D2 FE 0E # call is_key_down L0EF6: CD 27 0B # jr nz, 1b L0EF9: 20 F0 # jp set_duplex_shift_neg ! longer press, temp. duplex shift override L0EFB: C3 70 2F # 1: # call feedback_shift_pos L0EFE: CD 44 27 # 1: # call redraw L0F01: CD DA 23 L0F04: 3A B2 D0 # ld a, [key_time] # cp 3 L0F07: FE 03 # jp nc, 1f L0F09: D2 14 0F # call is_key_down L0F0C: CD 27 0B # jr nz, 1b L0F0F: 20 F0 # jp set_duplex_shift_pos ! longer press, temp. duplex shift override L0F11: C3 84 2F # 1: # call feedback_split L0F14: CD 51 27 # call waitkey L0F17: CD 31 0B # jp set_tx_freq ! even longer press, temp. tx freq override L0F1A: C3 95 2F # # # beep_or_fsk_send: L0F1D: 3A B5 D0 # ld a, [digidx] L0F20: B7 # or a # jp nz, send_call_packet L0F21: C2 A5 18 # # jp beep1750 ! No digits, repeater beep L0F24: C3 2F 1F # # !---------------------------------------------------------------------- # # scanner_key: # 1: # call redraw L0F27: CD DA 23 L0F2A: 3A B2 D0 # ld a, [key_time] # cp 1 L0F2D: FE 01 # jp nc, 1f L0F2F: D2 3A 0F # call is_key_down L0F32: CD 27 0B # jr nz, 1b L0F35: 20 F0 # jp scanner_start L0F37: C3 7F 11 # 1: # call feedback_reject L0F3A: CD 03 27 # 1: # call redraw L0F3D: CD DA 23 L0F40: 3A B2 D0 # ld a, [key_time] # cp 2 L0F43: FE 02 # jp nc, 1f L0F45: D2 50 0F # call is_key_down L0F48: CD 27 0B # jr nz, 1b L0F4B: 20 F0 # jp add_reject L0F4D: C3 DD 10 # 1: # call feedback_cleared L0F50: CD 10 27 # call waitkey L0F53: CD 31 0B # jp clear_rejects L0F56: C3 CB 10 # # !---------------------------------------------------------------------- # # def_vola: # call clear_buffer L0F59: CD FC 0D # # call feedback_default L0F5C: CD 1D 27 # call waitkey L0F5F: CD 31 0B # L0F62: 3A 31 C7 # ld a, [cfg_def_volume] # jp set_vola_a L0F65: C3 7C 0D # # def_memo: # call clear_buffer L0F68: CD FC 0D # call scanner_stop L0F6B: CD 54 13 # # call feedback_default L0F6E: CD 1D 27 # call waitkey L0F71: CD 31 0B # L0F74: 3A 2D C7 # ld a, [cfg_def_memory] # jp go_mem_a L0F77: C3 A3 1D # # def_freq: # call clear_buffer L0F7A: CD FC 0D # call scanner_stop L0F7D: CD 54 13 # # call feedback_default L0F80: CD 1D 27 # call waitkey L0F83: CD 31 0B # # call leave_memories L0F86: CD F2 1D L0F89: 2A 2E C7 L0F8C: 3A 30 C7 # ld hl, [cfg_def_frequency] ; ld a, [(cfg_def_frequency) + 2] L0F8F: 22 08 C0 L0F92: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # jp changed_frequency L0F95: C3 9F 2C # # ! tx_freq - rx_freq into ahl and CY and Z # # compare_tx_rx_freq: L0F98: 2A 0B C0 L0F9B: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L0F9E: ED 5B 08 C0 L0FA2: A7 L0FA3: ED 52 L0FA5: ED 5B 0A C0 L0FA9: 9B # ld de, [rx_freq]; and a; sbc hl, de; ld de, [(rx_freq) + 2]; sbc e; ! tx - rx L0FAA: D8 # ret c ! CY set, Z clear L0FAB: 5F # ld e, a ! result in ahl L0FAC: B5 # or l L0FAD: B4 # or h L0FAE: 7B # ld a, e # ret ! CY clear, Z valid L0FAF: C9 # # !====================================================================== # ! # ! Push current memory/frequency # ! into vip_list, forgetting oldest record. # ! Duplicates raise into head of list. # ! # remember_vip: # # ld ix, vip_list L0FB0: DD 21 7C C0 # ld b, VIP_COUNT L0FB4: 06 0A # L0FB6: 2A 08 C0 L0FB9: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L0FBC: 22 18 C0 L0FBF: 32 1A C0 # ld [vip_freq], hl ; ld [(vip_freq) + 2], a L0FC2: EB # ex de, hl L0FC3: 4F # ld c, a L0FC4: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L0FC7: E6 01 # jp z, 1f ! on "vfo" L0FC9: CA D4 0F L0FCC: 3A 07 C0 # ld a, [mem_idx] L0FCF: 5F # ld e, a ! on memories # ld d, 0 L0FD0: 16 00 # ld c, 0 L0FD2: 0E 00 # 1: # ! Push CDE to vips # 2: L0FD4: DD 6E 00 # ld l, [ix+0] ! next in list L0FD7: DD 66 01 # ld h, [ix+1] L0FDA: DD 7E 02 # ld a, [ix+2] L0FDD: DD 73 00 # ld [ix+0], e ! replaced by new L0FE0: DD 72 01 # ld [ix+1], d L0FE3: DD 71 02 # ld [ix+2], c L0FE6: 5D # ld e, l ! flip for next round L0FE7: 54 # ld d, h L0FE8: 4F # ld c, a L0FE9: 3A 7C C0 # ld a, [vip_list+0] L0FEC: BB # cp e # jr nz, 1f L0FED: 20 0D L0FEF: 3A 7D C0 # ld a, [vip_list+1] L0FF2: BA # cp d # jr nz, 1f L0FF3: 20 07 L0FF5: 3A 7E C0 # ld a, [vip_list+2] L0FF8: B9 # cp c # jr nz, 1f L0FF9: 20 01 # ret ! overwrote duplicate, leave rest. L0FFB: C9 # 1: L0FFC: DD 23 # inc ix L0FFE: DD 23 # inc ix L1000: DD 23 # inc ix # djnz 2b L1002: 10 D0 # ret L1004: C9 # # back_to_last_vip: # ld a, 0 L1005: 3E 00 L1007: 32 D6 D0 # ld [vip_idx], a # # ! FALL THRU # # next_vip: # L100A: 3A D6 D0 # ld a, [vip_idx] L100D: 4F # ld c, a L100E: 3C # inc a # cp VIP_COUNT L100F: FE 0A # jr c, 1f L1011: 38 02 # ld a, 0 L1013: 3E 00 # 1: L1015: 32 D6 D0 # ld [vip_idx], a # # ld hl, vip_list L1018: 21 7C C0 # ld b, 0 L101B: 06 00 L101D: 09 # add hl, bc L101E: 09 # add hl, bc L101F: 09 # add hl, bc # L1020: E5 # push hl L1021: DD E1 # pop ix # L1023: DD 6E 00 L1026: DD 66 01 L1029: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] L102C: B4 # or h # jp nz, 1f ! larger than 255, must be frequency L102D: C2 34 10 L1030: 7D # ld a, l # jp go_mem_a ! a memory else L1031: C3 A3 1D # 1: L1034: DD 6E 00 L1037: DD 66 01 L103A: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] L103D: 22 08 C0 L1040: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call leave_memories L1043: CD F2 1D # jp changed_frequency L1046: C3 9F 2C # # !---------------------------------------------------------------------- # # load_num_tmp_rejects: # L1049: 3A 83 C9 # ld a, [cfg_num_tmp_rejects] L104C: B7 # or a # jr z, 1f ! 0 = max L104D: 28 03 # cp NUM_TMP_REJECTS L104F: FE 14 L1051: D8 # ret c ! less than max allowed # 1: # ld a, NUM_TMP_REJECTS ! array has only this many available L1052: 3E 14 # ret L1054: C9 # # ! # ! Decay temporary rejects # ! # unreject_timer: # ld hl, tmp_rejects L1055: 21 58 D0 # call load_num_tmp_rejects L1058: CD 49 10 L105B: 47 # ld b, a # 2: L105C: 23 # inc hl L105D: 23 # inc hl L105E: 23 # inc hl ! over 3 L105F: 7E # ld a, [hl] # sub 1 L1060: D6 01 # jr c, 1f ! was 0, stay 0 (inactive reject) L1062: 38 05 # cp 254 L1064: FE FE # jr z, 1f ! was 255, stay 255 (semi-permanent reject) L1066: 28 01 L1068: 77 # ld [hl], a ! 1...254: step down # 1: L1069: 23 # inc hl ! over timer byte # djnz 2b L106A: 10 F0 # ret L106C: C9 # # is_freq_rejected_temp: L106D: 4F # ld c, a ! CHL has freq # # ld ix, tmp_rejects L106E: DD 21 58 D0 # call load_num_tmp_rejects L1072: CD 49 10 L1075: 47 # ld b, a # # 2: L1076: DD 7E 03 # ld a, [ix + 3] L1079: B7 # or a # jp z, 3f ! timer has counted reject into stale condition ? L107A: CA 90 10 # L107D: 7D # ld a, l L107E: DD BE 00 # cp [ix + 0] # jr nz, 1f L1081: 20 0F L1083: 7C # ld a, h L1084: DD BE 01 # cp [ix + 1] # jr nz, 1f L1087: 20 09 L1089: 79 # ld a, c L108A: DD BE 02 # cp [ix + 2] # jr nz, 1f L108D: 20 03 # ret ! Z - rejected L108F: C9 # 3: # or 1 ! make NZ in case last one (jump c was wrongly Z) L1090: F6 01 # 1: L1092: DD 23 # inc ix ! flags not harmed L1094: DD 23 # inc ix L1096: DD 23 # inc ix ; ASSERT(3 == 3) L1098: DD 23 # inc ix # djnz 2b ! flags not harmed L109A: 10 DA # ret ! NZ - not rejected L109C: C9 # # # is_freq_rejected_perm: L109D: 4F # ld c, a ! CHL has freq # # ld ix, cfg_reject_0 ! 10 permanent in first group L109E: DD 21 AA C7 # call check_ten_rejects L10A2: CD AD 10 L10A5: C8 # ret z # ld ix, cfg_reject_10 ! 10 permanent in second group L10A6: DD 21 82 C8 # jp check_ten_rejects L10AA: C3 AD 10 # # # check_ten_rejects: # ld b, 10 L10AD: 06 0A # 2: L10AF: 7D # ld a, l L10B0: DD BE 00 # cp [ix + 0] # jr nz, 1f L10B3: 20 0D L10B5: 7C # ld a, h L10B6: DD BE 01 # cp [ix + 1] # jr nz, 1f L10B9: 20 07 L10BB: 79 # ld a, c L10BC: DD BE 02 # cp [ix + 2] # jr nz, 1f L10BF: 20 01 # ret ! Z - rejected L10C1: C9 # 1: L10C2: DD 23 # inc ix ! flags not harmed L10C4: DD 23 # inc ix L10C6: DD 23 # inc ix # djnz 2b ! flags not harmed L10C8: 10 E5 # ret ! NZ - not rejected L10CA: C9 # # !---------------------------------------------------------------------- # # clear_rejects: # ld b, NUM_TMP_REJECTS ! all of the array L10CB: 06 14 # ld a, 0 L10CD: 3E 00 # ld hl, tmp_rejects L10CF: 21 58 D0 # 1: L10D2: 77 L10D3: 23 # ld [hl], a; inc hl L10D4: 77 L10D5: 23 # ld [hl], a; inc hl L10D6: 77 L10D7: 23 # ld [hl], a; inc hl ; ASSERT(3 == 3) L10D8: 77 L10D9: 23 # ld [hl], a; inc hl # djnz 1b L10DA: 10 F6 # ret L10DC: C9 # # add_reject: # # ! Determine the frequency to reject -- into IY # # ld iy, rx_freq ! reject current rx frequency L10DD: FD 21 08 C0 L10E1: 3A 03 C0 # ld a, [scan_on] L10E4: B7 # or a # jr z, 1f L10E5: 28 04 # ld iy, vip_freq ! when scanning use vip[0] instead L10E7: FD 21 18 C0 # 1: # # ! This frequency already in list ? Use the same slot, if so. # ! At the same time, locate the next record to become clear. # # ld ix, tmp_rejects L10EB: DD 21 58 D0 # call load_num_tmp_rejects L10EF: CD 49 10 L10F2: 47 # ld b, a # # ld c, 255 ! special timer value -- wont crawl down L10F3: 0E FF # 1: L10F5: DD 7E 00 # ld a, [ix+0] L10F8: FD BE 00 # cp [iy+0] # jr nz, 2f L10FB: 20 13 L10FD: DD 7E 01 # ld a, [ix+1] L1100: FD BE 00 # cp [iy+0] # jr nz, 2f L1103: 20 0B L1105: DD 7E 02 # ld a, [ix+2] L1108: FD BE 02 # cp [iy+2] # jr nz, 2f L110B: 20 03 # jp add_reject_out ! found, fill it L110D: C3 4C 11 # 2: L1110: DD 7E 03 # ld a, [ix+3] L1113: B9 # cp c ! this_timer - prev # jr nc, 2f ! nc if this timer older or equal prev L1114: 30 04 L1116: DD E5 # push ix L1118: E1 # pop hl ! remember it L1119: 4F # ld c, a ! found an older one # 2: L111A: DD 23 # inc ix L111C: DD 23 # inc ix L111E: DD 23 # inc ix L1120: DD 23 # inc ix ! 4 byte per tmp_reject record # djnz 1b L1122: 10 D1 # L1124: 79 # ld a, c # cp 255 L1125: FE FF # jr z, 1f ! z if did not find any aging slot L1127: 28 06 L1129: E5 # push hl L112A: DD E1 # pop ix # jp add_reject_out L112C: C3 4C 11 # 1: # # ! Still no slot ? Just pick the next one # # call load_num_tmp_rejects L112F: CD 49 10 L1132: 47 # ld b, a L1133: 3A 57 D0 # ld a, [reject_idx] L1136: 3C # inc a L1137: B8 # cp b # jr c, 1f L1138: 38 02 # ld a, 0 L113A: 3E 00 # 1: L113C: 32 57 D0 # ld [reject_idx], a L113F: CB 27 # sla a L1141: CB 27 # sla a ; ASSERT(3 == 3) ! and one byte of timer: *= 4 L1143: 4F # ld c, a # ld b, 0 L1144: 06 00 # ld ix, tmp_rejects L1146: DD 21 58 D0 L114A: DD 09 # add ix, bc # # ! Add reject - slot found # # add_reject_out: ! slot at IX, freq at IY L114C: FD 7E 00 # ld a, [iy + 0] L114F: DD 77 00 # ld [ix + 0], a L1152: FD 7E 01 # ld a, [iy + 1] L1155: DD 77 01 # ld [ix + 1], a L1158: FD 7E 02 # ld a, [iy + 2] L115B: DD 77 02 # ld [ix + 2], a ! freq stored # L115E: 3A 24 C9 # ld a, [cfg_unreject_mins] L1161: B7 # or a # jr nz, 1f L1162: 20 02 # ld a, 255 ! XXX 0 behaves as 255 L1164: 3E FF # 1: L1166: DD 77 03 # ld [ix + 3], a ! timer stored # # ld hl, scan_do_step L1169: 21 74 13 L116C: 22 2D D0 # ld [scanner_state], hl # # ret L116F: C9 # # !---------------------------------------------------------------------- # ! # ! Called from mainloop, enters scanner in [scanner_state] # ! scanner_ret updates [scanner_state] for next call. # # scanner_run: L1170: 3A 03 C0 # ld a, [scan_on] L1173: B7 # or a L1174: C8 # ret z L1175: 2A 2D D0 # ld hl, [scanner_state] L1178: E5 # push hl # ret L1179: C9 # scanner_ret: L117A: E1 # pop hl L117B: 22 2D D0 # ld [scanner_state], hl # ret L117E: C9 # # scanner_start: # call unforce_squelch L117F: CD 5C 23 # call draw_scanner_icon L1182: CD CE 24 # # ld hl, scan_do_step L1185: 21 74 13 L1188: 22 2D D0 # ld [scanner_state], hl # # call build_scan_mask L118B: CD A4 11 L118E: 7C # ld a, h L118F: B5 # or l # jr nz, 1f L1190: 20 03 # ld hl, 0x0003 ! if not given and no previous L1192: 21 03 00 # 1: L1195: 22 04 C0 # ld [scan_mask], hl # call clear_buffer L1198: CD FC 0D # call build_scan_slicetab ! selected band to sorted (collapsed ?) slices L119B: CD 8E 12 # ld a, 1 L119E: 3E 01 L11A0: 32 03 C0 # ld [scan_on], a # ret L11A3: C9 # # build_scan_mask: L11A4: 2A 04 C0 # ld hl, [scan_mask] ! previous scan mask # ld ix, digbuf L11A7: DD 21 B6 D0 L11AB: 3A B5 D0 # ld a, [digidx] L11AE: B7 # or a L11AF: C8 # ret z ! lone STO, use previous L11B0: 47 # ld b, a # ld hl, 0 ! collect new mask L11B1: 21 00 00 # 1: L11B4: DD 7E 00 # ld a, [ix+0] L11B7: DD 23 # inc ix # call digit_to_scan_mask ! map digit to mask bit L11B9: CD 13 12 L11BC: 7C # ld a, h L11BD: B2 # or d L11BE: 67 # ld h, a L11BF: 7D # ld a, l L11C0: B3 # or e L11C1: 6F # ld l, a ! hl |= de # djnz 1b L11C2: 10 F0 # ret L11C4: C9 # # toggle_scan_mask: # call 1f L11C5: CD DB 11 # L11C8: 2A 04 C0 # ld hl, [scan_mask] L11CB: 7D # ld a, l L11CC: AB # xor e L11CD: 6F # ld l, a L11CE: 7C # ld a, h L11CF: AA # xor d L11D0: 67 # ld h, a L11D1: 22 04 C0 # ld [scan_mask], hl # # ld hl, scan_do_step L11D4: 21 74 13 L11D7: 22 2D D0 # ld [scanner_state], hl # # ret L11DA: C9 # 1: # ld de, 0x0040 L11DB: 11 40 00 # cp 0 L11DE: FE 00 L11E0: C8 # ret z ! 0 0040 memblocks 0x # L11E1: CB 23 # sla e # cp 1 ! 1 0080 memblocks 1x L11E3: FE 01 L11E5: C8 # ret z # # ld de, 0x0100 L11E6: 11 00 01 # cp 2 ! 2 0100 2x L11E9: FE 02 L11EB: C8 # ret z # L11EC: CB 22 # sla d # cp 3 ! 3 0200 3x L11EE: FE 03 L11F0: C8 # ret z # L11F1: CB 22 # sla d # cp 4 ! 4 0400 4x L11F3: FE 04 L11F5: C8 # ret z # L11F6: CB 22 # sla d # cp 5 ! 5 0800 5x L11F8: FE 05 L11FA: C8 # ret z # L11FB: CB 22 # sla d # cp 6 ! 6 1000 6x L11FD: FE 06 L11FF: C8 # ret z # L1200: CB 22 # sla d # cp 7 ! 7 2000 7x L1202: FE 07 L1204: C8 # ret z # L1205: CB 22 # sla d # cp 8 ! 8 4000 8x L1207: FE 08 L1209: C8 # ret z # L120A: CB 22 # sla d # cp 9 ! 9 8000 9x L120C: FE 09 L120E: C8 # ret z # # ld de, 0 L120F: 11 00 00 # ret L1212: C9 # # !---------------------------------------------------------------------- # # digit_to_scan_mask: # ld de, 0x0001 L1213: 11 01 00 # cp 1 L1216: FE 01 L1218: C8 # ret z ! 1 0001 band 1 # L1219: CB 23 # sla e # cp 2 L121B: FE 02 L121D: C8 # ret z ! 2 0002 # L121E: CB 23 # sla e # cp 3 L1220: FE 03 L1222: C8 # ret z ! 3 0004 # L1223: CB 23 # sla e # cp 4 L1225: FE 04 L1227: C8 # ret z ! 4 0008 # L1228: CB 23 # sla e # cp 5 L122A: FE 05 L122C: C8 # ret z ! 5 0010 # L122D: CB 23 # sla e # cp 6 L122F: FE 06 L1231: C8 # ret z ! 6 0020 band 6 # # ld de, 0x2000 L1232: 11 00 20 # cp 7 L1235: FE 07 L1237: C8 # ret z ! 7 2000 memblock 7x # L1238: CB 22 # sla d # cp 8 L123A: FE 08 L123C: C8 # ret z ! 8 4000 memblock 8x # L123D: CB 22 # sla d # cp 9 L123F: FE 09 L1241: C8 # ret z ! 9 8000 memblock 9x # # ld de, 0x1FC0 L1242: 11 C0 1F # cp 0 L1245: FE 00 L1247: C8 # ret z ! 0 1FC0 memblocks 0x...6x XXX # # ret L1248: C9 # # scan_this_memblock: ! a has mem idx, return NZ if yes # L1249: 2A 04 C0 # ld hl, [scan_mask] # cp 90 L124C: FE 5A # jr c, 1f L124E: 38 03 L1250: CB 7C # bit 7, h ! 9x, bit 15 # ret L1252: C9 # 1: # cp 80 L1253: FE 50 # jr c, 1f L1255: 38 03 L1257: CB 74 # bit 6, h ! 8x, bit 14 # ret L1259: C9 # 1: # cp 70 L125A: FE 46 # jr c, 1f L125C: 38 03 L125E: CB 6C # bit 5, h ! 7x, bit 13 # ret L1260: C9 # 1: # cp 60 L1261: FE 3C # jr c, 1f L1263: 38 03 L1265: CB 64 # bit 4, h ! 6x, bit 12 # ret L1267: C9 # 1: # cp 50 L1268: FE 32 # jr c, 1f L126A: 38 03 L126C: CB 5C # bit 3, h ! 5x, bit 11 # ret L126E: C9 # 1: # cp 40 L126F: FE 28 # jr c, 1f L1271: 38 03 L1273: CB 54 # bit 2, h ! 4x, bit 10 # ret L1275: C9 # 1: # cp 30 L1276: FE 1E # jr c, 1f L1278: 38 03 L127A: CB 4C # bit 1, h ! 3x, bit 9 # ret L127C: C9 # 1: # cp 20 L127D: FE 14 # jr c, 1f L127F: 38 03 L1281: CB 44 # bit 0, h ! 2x, bit 8 # ret L1283: C9 # 1: # cp 10 L1284: FE 0A # jr c, 1f L1286: 38 03 L1288: CB 7D # bit 7, l ! 1x, bit 7 # ret L128A: C9 # 1: L128B: CB 75 # bit 6, l ! 0x, bit 6 # ret L128D: C9 # # !---------------------------------------------------------------------- # # ! # ! Pick scanned bands and sort by start freq into scan_slices. # ! List might have overlaps or touching edges. # ! # build_scan_slicetab: # # ! copy scanned bands into runtime list from config ------------------- # # ld iy, cfg_band1_start ! from config L128E: FD 21 48 C7 # ld ix, scan_slices ! to scratch L1292: DD 21 33 D0 # ld h, 0 ! # of taken bands L1296: 26 00 # ld l, 1 ! mask to check if band scanned L1298: 2E 01 # ld b, num_bandrecs L129A: 06 06 # 3: L129C: 3A 04 C0 # ld a, [scan_mask] L129F: A5 # and l # jp z, 2f ! this band not scanned L12A0: CA D2 12 L12A3: FD 5E 00 # ld e, [iy+0] L12A6: FD 56 01 # ld d, [iy+1] L12A9: FD 4E 02 # ld c, [iy+2] ! bandX_start L12AC: 79 # ld a, c L12AD: B2 # or d L12AE: B3 # or e # jr z, 2f ! empty band, starts with 0 L12AF: 28 21 L12B1: DD 73 00 # ld [ix+0], e L12B4: DD 72 01 # ld [ix+1], d L12B7: DD 71 02 # ld [ix+2], c L12BA: FD 5E 03 # ld e, [iy+3] L12BD: FD 56 04 # ld d, [iy+4] L12C0: FD 4E 05 # ld c, [iy+5] ! bandX_end L12C3: DD 73 03 # ld [ix+3], e L12C6: DD 72 04 # ld [ix+4], d L12C9: DD 71 05 # ld [ix+5], c # ld de, 3 * 2 L12CC: 11 06 00 L12CF: DD 19 # add ix, de L12D1: 24 # inc h # 2: # ld de, size_bandrec ! next band config L12D2: 11 0E 00 L12D5: FD 19 # add iy, de L12D7: CB 25 # sla l ! shift mask for next band # djnz 3b L12D9: 10 C1 # # ! sort scanlist ------------------------------- # L12DB: 7C # ld a, h L12DC: 32 32 D0 # ld [scan_slicecnt], a ! # of bands [count, 0] # cp 2 L12DF: FE 02 L12E1: D8 # ret c ! one band or no bands at all # L12E2: 3D # dec a L12E3: 47 # ld b, a ! [count - 1, 1] # 3: L12E4: C5 # push bc # ld ix, scan_slices ! b bubbles from the list beginning L12E5: DD 21 33 D0 # 1: L12E9: DD 5E 00 # ld e, [ix+0] L12EC: DD 56 01 # ld d, [ix+1] L12EF: DD 4E 02 # ld c, [ix+2] ! cde list[i] start L12F2: DD 6E 06 # ld l, [ix+6] L12F5: DD 66 07 # ld h, [ix+7] L12F8: DD 7E 08 # ld a, [ix+8] ! ahl list[i+1] start L12FB: A7 # and a L12FC: ED 52 # sbc hl, de L12FE: 99 # sbc c # jr nc, 2f ! skip if correct ascending order L12FF: 30 48 # # ! XXX also by end ? # L1301: DD 7E 00 L1304: DD 4E 06 L1307: DD 77 06 L130A: DD 71 00 # ld a, [ix+0]; ld c, [ix+ 6]; ld [ix+ 6], a; ld [ix+0], c ! swap [0] [6] L130D: DD 7E 01 L1310: DD 4E 07 L1313: DD 77 07 L1316: DD 71 01 # ld a, [ix+1]; ld c, [ix+ 7]; ld [ix+ 7], a; ld [ix+1], c L1319: DD 7E 02 L131C: DD 4E 08 L131F: DD 77 08 L1322: DD 71 02 # ld a, [ix+2]; ld c, [ix+ 8]; ld [ix+ 8], a; ld [ix+2], c L1325: DD 7E 03 L1328: DD 4E 09 L132B: DD 77 09 L132E: DD 71 03 # ld a, [ix+3]; ld c, [ix+ 9]; ld [ix+ 9], a; ld [ix+3], c L1331: DD 7E 04 L1334: DD 4E 0A L1337: DD 77 0A L133A: DD 71 04 # ld a, [ix+4]; ld c, [ix+10]; ld [ix+10], a; ld [ix+4], c L133D: DD 7E 05 L1340: DD 4E 0B L1343: DD 77 0B L1346: DD 71 05 # ld a, [ix+5]; ld c, [ix+11]; ld [ix+11], a; ld [ix+5], c ! swap [5] [11] # 2: # ld de, 2 * 3 L1349: 11 06 00 L134C: DD 19 # add ix, de # djnz 1b ! bubble rises L134E: 10 99 L1350: C1 # pop bc # djnz 3b ! one bubble less L1351: 10 91 # # ret L1353: C9 # # !---------------------------------------------------------------------- # # scanner_stop: L1354: 3A 03 C0 # ld a, [scan_on] L1357: B7 # or a L1358: C8 # ret z # # ld a, 0 L1359: 3E 00 L135B: 32 03 C0 # ld [scan_on], a L135E: 32 D6 D0 # ld [vip_idx], a ! re-enter most current in next_vip # # call restore_squelch_scanner L1361: CD 83 23 # call clear_scanner_icon L1364: CD E0 24 # call next_vip L1367: CD 0A 10 # ret L136A: C9 # # # scan_bad: # call scanner_stop L136B: CD 54 13 # call scanner_ret L136E: CD 7A 11 # ! not reached after scanner_stop # # # scan_do_step_again: # # call scanner_ret ! ready to step again next check L1371: CD 7A 11 # # scan_do_step: # # ld a, 0 L1374: 3E 00 L1376: 32 2F D0 # ld [scan_paused], a # # call redraw L1379: CD DA 23 # call mute_squelch_scanner L137C: CD 97 23 # L137F: 3A 06 C0 # ld a, [mem_flags] L1382: B7 # or a # jp nz, scan_next_memory L1383: C2 52 14 # # jp scan_next_frequency L1386: C3 A8 13 # # !---------------------------------------------------------------------- # # scan_first_frequency: # # call scanner_ret ! if scanner gets stuck without any channels L1389: CD 7A 11 # ! allow kbd to abort # call leave_memories L138C: CD F2 1D L138F: 3A 32 D0 # ld a, [scan_slicecnt] L1392: B7 # or a # jp z, scan_first_memory ! no slices at all L1393: CA 36 14 # L1396: 2A 33 D0 L1399: 3A 35 D0 # ld hl, [scan_slices] ; ld a, [(scan_slices) + 2] L139C: 22 08 C0 L139F: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call changed_frequency L13A2: CD 9F 2C # jp scan_did_step_freq ! rewind and go L13A5: C3 88 14 # # scan_next_frequency: # L13A8: 3A 32 D0 # ld a, [scan_slicecnt] L13AB: B7 # or a # jp z, scan_first_memory ! no slices to scan L13AC: CA 36 14 L13AF: 47 # ld b, a ! nleft # ld ix, scan_slices ! lp L13B0: DD 21 33 D0 # # ! locate slice we are in now # 1: L13B4: 2A 08 C0 L13B7: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L13BA: DD 5E 03 L13BD: DD 56 04 L13C0: DD 4E 05 # ld e, [ix+3]; ld d, [ix+4]; ld c, [ix+5] ! lp->end L13C3: A7 # and a L13C4: ED 52 # sbc hl, de L13C6: 99 # sbc c # jp c, 1f ! jump if rx_freq < lp->end L13C7: DA D4 13 # ld de, 2 * 3 L13CA: 11 06 00 L13CD: DD 19 # add ix, de # djnz 1b L13CF: 10 E3 # jp scan_first_memory ! passed over all slices L13D1: C3 36 14 # 1: # ! orient in this slice # L13D4: 2A 08 C0 L13D7: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L13DA: DD 5E 00 L13DD: DD 56 01 L13E0: DD 4E 02 # ld e, [ix+0]; ld d, [ix+1]; ld c, [ix+2] ! lp->start L13E3: A7 # and a L13E4: ED 52 # sbc hl, de L13E6: 99 # sbc c # jp nc, 1f ! skip if rx_freq >= lp->start L13E7: D2 F8 13 L13EA: 79 # ld a, c L13EB: ED 53 08 C0 # ld [rx_freq+0], de ! else skip over to this slice L13EF: 32 0A C0 # ld [rx_freq+2], a # call changed_frequency L13F2: CD 9F 2C # jp scan_did_step_freq L13F5: C3 88 14 # 1: L13F8: C5 # push bc L13F9: DD E5 # push ix # call step_channel_up ! in band, step one channel, rx loaded L13FB: CD C5 2F L13FE: DD E1 # pop ix L1400: C1 # pop bc ! restore nleft and lp L1401: 2A 08 C0 L1404: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L1407: DD 5E 03 L140A: DD 56 04 L140D: DD 4E 05 # ld e, [ix+3]; ld d, [ix+4]; ld c, [ix+5] ! lp->end L1410: A7 # and a L1411: ED 52 # sbc hl, de L1413: 99 # sbc c # jp c, scan_did_step_freq ! stayed in band, scan this freq L1414: DA 88 14 # # ! passed the slice, another there to skip over to ? # L1417: 78 # ld a, b L1418: 3D # dec a # jp z, scan_first_memory ! nope. nleft now 0 L1419: CA 36 14 # # ld de, 2 * 3 L141C: 11 06 00 L141F: DD 19 # add ix, de ! ++lp L1421: DD 6E 00 L1424: DD 66 01 L1427: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] ! lp->start L142A: 22 08 C0 L142D: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a # call changed_frequency L1430: CD 9F 2C # jp scan_did_step_freq L1433: C3 88 14 # # !---------------------------------------------------------------------- # # scan_first_memory: # # call scanner_ret ! if scanner gets stuck without any channels L1436: CD 7A 11 # ! allow kbd to abort # L1439: 3A 05 C0 # ld a, [scan_mask+1] ! bits 0xFFC0 are memory blocks # and 0xFF L143C: E6 FF # jp nz, 1f L143E: C2 49 14 L1441: 3A 04 C0 # ld a, [scan_mask+0] # and 0xC0 L1444: E6 C0 # jp z, scan_first_frequency ! no memoryblocks scanned L1446: CA 89 13 # 1: # ld a, 0 ! start from mem 00 L1449: 3E 00 # ld ix, memories L144B: DD 21 FE C0 # jp 1f ! try 00 L144F: C3 5B 14 # # scan_next_memory: # L1452: 3A 07 C0 # ld a, [mem_idx] # call point_ix_memory_a L1455: CD 8C 1D # jp 2f ! step first, then try L1458: C3 76 14 # 1: # cp 100 L145B: FE 64 # jp nc, scan_first_frequency ! if passing mem 99, run bands then L145D: D2 89 13 # call scan_this_memblock L1460: CD 49 12 # jr z, 2f ! block not in mask L1463: 28 11 L1465: 5F # ld e, a L1466: DD 7E 06 # ld a, [ix + mem_FLAGS] # and MEM_VALID | MEM_SCANNABLE L1469: E6 05 # cp MEM_VALID | MEM_SCANNABLE L146B: FE 05 L146D: 7B # ld a, e # jr nz, 2f ! empty or scanblocked L146E: 20 06 # call go_mem_a ! Ah. L1470: CD A3 1D # jp scan_did_step L1473: C3 94 14 # 2: # ld de, mem_SIZE L1476: 11 0C 00 L1479: DD 19 # add ix, de L147B: 3C # inc a # jp 1b L147C: C3 5B 14 # # !---------------------------------------------------------------------- # # ! like squelch_open 1/0, but disregards hysteresis and squelch slowness # # is_sql_over_level: # call read_squelcher_value L147F: CD 32 06 L1482: 47 # ld b, a L1483: 3A 27 C7 # ld a, [cfg_squelch_level] L1486: B8 # cp b ! limit - value, CY if value > limit # ret L1487: C9 # # scan_did_step_freq: # L1488: 2A 08 C0 L148B: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] # call is_freq_rejected_perm L148E: CD 9D 10 # jp z, scan_do_step_again L1491: CA 71 13 # # scan_did_step: # L1494: 2A 08 C0 L1497: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] # call is_freq_rejected_temp L149A: CD 6D 10 # jp z, scan_do_step_again L149D: CA 71 13 # # ! step wait -------------- # L14A0: 3A C9 D0 # ld a, [squelch_open] L14A3: B7 # or a L14A4: 3A 25 C7 # ld a, [cfg_scan_rate] ! Wait time # jr z, 1f L14A7: 28 05 L14A9: 87 # add a ! Make it double long if channel is busy. # jr nc, 1f L14AA: 30 02 # ld a, 255 L14AC: 3E FF # 1: L14AE: F3 # di L14AF: 32 29 D0 # ld [scan_timer], a # ld a, 0 L14B2: 3E 00 L14B4: 32 2A D0 # ld [scan_timer_secs], a L14B7: FB # ei ! 'rate' times 10 msec # 1: # call scanner_ret L14B8: CD 7A 11 # L14BB: 3A 29 D0 # ld a, [scan_timer] L14BE: B7 # or a # jr nz, 1b ! The wait. L14BF: 20 F7 # # ! after step wait, look around -------------- # L14C1: 3A 02 C0 # ld a, [squelch_forced] L14C4: B7 # or a # jp nz, 2f ! Squelch manually forced open, act as if signal. L14C5: C2 D3 14 # # call is_sql_over_level L14C8: CD 7F 14 # jp nc, scan_do_step ! No signal. Next. L14CB: D2 74 13 # # ld a, 1 L14CE: 3E 01 L14D0: 32 2F D0 # ld [scan_paused], a ! allow normal display # 2: # call redraw L14D3: CD DA 23 # call get_scan_patience L14D6: CD 91 2E # cp 255 L14D9: FE FF # jr z, 4f L14DB: 28 03 L14DD: 32 2B D0 # ld [scan_patience], a ! Stay N seconds with or without signal. # 4: # L14E0: 3A 25 C9 # ld a, [cfg_scan_skip_fsk_channels] ! XXX L14E3: B7 # or a # jp z, 1f L14E4: CA EE 14 # L14E7: DB A3 # in a, [0xA0 + 3] # and 0x04 L14E9: E6 04 # jp nz, scan_do_step L14EB: C2 74 13 # 1: # call scanner_ret L14EE: CD 7A 11 # # call get_scan_patience L14F1: CD 91 2E # cp 255 ! 255 means listen forever L14F4: FE FF # jr z, 4f L14F6: 28 07 L14F8: 3A 2B D0 # ld a, [scan_patience] L14FB: B7 # or a # jp z, scan_do_step ! Lost patience. Next. L14FC: CA 74 13 # 4: # # call restore_squelch_scanner ! Open audio. L14FF: CD 83 23 # L1502: 3A 02 C0 # ld a, [squelch_forced] L1505: B7 # or a # jr nz, 2b ! Squelch forced open. Stay forever and 15 sec more. L1506: 20 CB L1508: 3A C9 D0 # ld a, [squelch_open] L150B: B7 # or a # jr z, 3f ! No signal. Go wait for a while. L150C: 28 05 # call remember_vip L150E: CD B0 0F # jr 1b ! There is signal. Stay. L1511: 18 DB # 3: # call get_scan_tail ! Stay N seconds without signal. L1513: CD 8D 2E # cp 255 L1516: FE FF # jr z, 5f ! 255 means listen forever L1518: 28 0D L151A: F3 # di L151B: 32 2A D0 # ld [scan_timer_secs], a L151E: B7 # or a # jr z, 4f ! no ticks if 0 seconds L151F: 28 02 # ld a, 100 L1521: 3E 64 # 4: L1523: 32 29 D0 # ld [scan_timer], a ! 'secs' times 1 second (100 ticks) L1526: FB # ei # 5: # 2: # call scanner_ret L1527: CD 7A 11 # L152A: 3A C9 D0 # ld a, [squelch_open] L152D: B7 # or a # jr nz, 1b ! Again signal. Keep listening. L152E: 20 BE # L1530: 3A 2A D0 # ld a, [scan_timer_secs] L1533: B7 # or a # jr nz, 2b ! No signal for N seconds... L1534: 20 F1 # # jp scan_do_step ! ... so Next. L1536: C3 74 13 # # !====================================================================== # ! # ! FSK stuff # # fskcheck: L1539: 3A 0F D1 # ld a, [packet_rdy] L153C: B7 # or a L153D: C8 # ret z # call packet_for_whom L153E: CD 69 15 # ld a, 0 L1541: 3E 00 L1543: 32 0F D1 # ld [packet_rdy], a ! Ignores quick successive packets # ret L1546: C9 # # init_modem: # ! # ! Initialize NMT modem # ! # # ld a, 0x04 L1547: 3E 04 L1549: D3 A3 # out [0xA0 + 3], a ! Write 04 to control register # # ld hl, 10000 L154B: 21 10 27 # 1: L154E: D3 90 # out [0x90], a # L1550: 2B # dec hl L1551: 7C # ld a, h L1552: B5 # or l # jr nz, 1b ! Wait at least 1 bit. L1553: 20 F9 # # ld a, 0x00 L1555: 3E 00 L1557: D3 A3 # out [0xA0 + 3], a ! Write zeros to control register # # ret L1559: C9 # # re_enable_modem: # # ld hl, packet L155A: 21 FA D0 L155D: 22 0A D1 # ld [pkt_ptr], hl ! rewind packet pointer # # ld a, 0x00 L1560: 3E 00 L1562: D3 A3 # out [0xA0 + 3], a ! disable modem # # ! fallthru # # enable_modem: ! Enable modem receiver # # ld a, 0x04 L1564: 3E 04 L1566: D3 A3 # out [0xA0 + 3], a # ret L1568: C9 # # packet_for_whom: L1569: 3A 0E D1 # ld a, [packet_good] L156C: 6F # ld l, a # ld h, HI(fsk_history) L156D: 26 D4 L156F: 7E # ld a, [hl] # # cp 0xC L1570: FE 0C # jp z, handle_call_packet L1572: CA 06 17 # # cp 0xA L1575: FE 0A # jp z, handle_config_packets ! ask L1577: CA 85 15 # cp 0xE L157A: FE 0E # jp z, handle_config_packets ! enter L157C: CA 85 15 # cp 0xD L157F: FE 0D # jp z, handle_display_packets L1581: CA EF 15 # # ret L1584: C9 # # handle_config_packets: # L1585: 47 # ld b, a ! remember msnibble of tag, Ask or Enter L1586: 2C # inc l # L1587: 7E # ld a, [hl] L1588: 2C # inc l # cp 0xC ! AC/EC ii DD ptr PTR possible data L1589: FE 0C L158B: C0 # ret nz # # ! destined to us ? # L158C: ED 5B D0 C8 # ld de, [cfg_remote_id] L1590: 7A # ld a, d L1591: B3 # or e L1592: C8 # ret z ! remote id zero equals not used # L1593: 7E # ld a, [hl] L1594: 2C # inc l L1595: CB 27 L1597: CB 27 L1599: CB 27 L159B: CB 27 # sla a ; sla a ; sla a ; sla a L159D: B6 # or [hl] L159E: 2C # inc l L159F: BB # cp e L15A0: C0 # ret nz L15A1: 7E # ld a, [hl] L15A2: 2C # inc l L15A3: CB 27 L15A5: CB 27 L15A7: CB 27 L15A9: CB 27 # sla a ; sla a ; sla a ; sla a L15AB: B6 # or [hl] L15AC: 2C # inc l L15AD: BA # cp d L15AE: C0 # ret nz # # ! ours. get variable pointer (0xABCD is "CDAB") # L15AF: 7E # ld a, [hl] L15B0: 2C # inc l L15B1: CB 27 L15B3: CB 27 L15B5: CB 27 L15B7: CB 27 # sla a ; sla a ; sla a ; sla a L15B9: B6 # or [hl] L15BA: 2C # inc l L15BB: 5F # ld e, a # L15BC: 7E # ld a, [hl] L15BD: 2C # inc l L15BE: CB 27 L15C0: CB 27 L15C2: CB 27 L15C4: CB 27 # sla a ; sla a ; sla a ; sla a L15C6: B6 # or [hl] L15C7: 2C # inc l L15C8: 57 # ld d, a # L15C9: E5 # push hl L15CA: DD E1 # pop ix # # ! Would be too easy :-) # # ld hl, cfg_remote_passwd + SIZE(cfg_remote_passwd) - 1 L15CC: 21 1A C9 L15CF: A7 # and a L15D0: ED 52 # sbc hl, de ! last - ptr # jr c, 1f ! CY -> after passwd L15D2: 38 08 # ld hl, cfg_remote_passwd - 8 ! reply data length max L15D4: 21 0B C9 L15D7: ED 52 # sbc hl, de # jr nc, 1f ! NC -> before passwd L15D9: 30 01 # # ret ! refuse to reveal/modify passwd data L15DB: C9 # 1: # # ! Setting or just Asking ? # L15DC: 78 # ld a, b ! Ask or Enter # cp 0xE L15DD: FE 0E # jr nz, 1f L15DF: 20 0B # L15E1: D5 # push de ! save ptr L15E2: DD E5 # push ix L15E4: E1 # pop hl # call remote_config_execute ! Enter: de=ptr, hl=data (wrap page) L15E5: CD 4A 4A # call leaved_setup L15E8: CD 2F 47 L15EB: D1 # pop de # 1: # ! FSK reply in either case # # jp send_display_config_packet ! ptr in DE L15EC: C3 8E 17 # # # handle_display_packets: L15EF: 2C # inc l L15F0: 7E # ld a, [hl] # cp 0xD L15F1: FE 0D # jp z, handle_display_data L15F3: CA 87 16 # cp 0xC L15F6: FE 0C # jp z, handle_display_config L15F8: CA FC 15 # ret L15FB: C9 # # handle_display_config: L15FC: ED 5B D0 C8 # ld de, [cfg_remote_id] L1600: 7A # ld a, d L1601: B3 # or e L1602: C8 # ret z ! dont bother when remote id zeroed. # # ld de, remote_display_buffer L1603: 11 16 D8 L1606: 2C # inc l # L1607: 7E L1608: 2C L1609: CB 27 L160B: CB 27 L160D: CB 27 L160F: CB 27 L1611: B6 L1612: 2C L1613: 12 L1614: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L1615: 7E L1616: 2C L1617: CB 27 L1619: CB 27 L161B: CB 27 L161D: CB 27 L161F: B6 L1620: 2C L1621: 12 L1622: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L1623: 7E L1624: 2C L1625: CB 27 L1627: CB 27 L1629: CB 27 L162B: CB 27 L162D: B6 L162E: 2C L162F: 12 L1630: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L1631: 7E L1632: 2C L1633: CB 27 L1635: CB 27 L1637: CB 27 L1639: CB 27 L163B: B6 L163C: 2C L163D: 12 L163E: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de # L163F: 7E L1640: 2C L1641: CB 27 L1643: CB 27 L1645: CB 27 L1647: CB 27 L1649: B6 L164A: 2C L164B: 12 L164C: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L164D: 7E L164E: 2C L164F: CB 27 L1651: CB 27 L1653: CB 27 L1655: CB 27 L1657: B6 L1658: 2C L1659: 12 L165A: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L165B: 7E L165C: 2C L165D: CB 27 L165F: CB 27 L1661: CB 27 L1663: CB 27 L1665: B6 L1666: 2C L1667: 12 L1668: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L1669: 7E L166A: 2C L166B: CB 27 L166D: CB 27 L166F: CB 27 L1671: CB 27 L1673: B6 L1674: 2C L1675: 12 L1676: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de # L1677: 3E FF L1679: 12 # ld a, 0xFF ; ld [de], a # # ld a, 5 L167A: 3E 05 L167C: 32 26 D8 # ld [display_buffer_time], a # # ld a, 0 L167F: 3E 00 L1681: 32 B5 D0 # ld [digidx], a ! As an ack # # jp redraw L1684: C3 DA 23 # # handle_display_data: # ld de, remote_display_buffer L1687: 11 16 D8 L168A: 2C # inc l # L168B: 7E L168C: 2C L168D: CB 27 L168F: CB 27 L1691: CB 27 L1693: CB 27 L1695: B6 L1696: 2C L1697: 12 L1698: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L1699: 7E L169A: 2C L169B: CB 27 L169D: CB 27 L169F: CB 27 L16A1: CB 27 L16A3: B6 L16A4: 2C L16A5: 12 L16A6: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16A7: 7E L16A8: 2C L16A9: CB 27 L16AB: CB 27 L16AD: CB 27 L16AF: CB 27 L16B1: B6 L16B2: 2C L16B3: 12 L16B4: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16B5: 7E L16B6: 2C L16B7: CB 27 L16B9: CB 27 L16BB: CB 27 L16BD: CB 27 L16BF: B6 L16C0: 2C L16C1: 12 L16C2: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16C3: 7E L16C4: 2C L16C5: CB 27 L16C7: CB 27 L16C9: CB 27 L16CB: CB 27 L16CD: B6 L16CE: 2C L16CF: 12 L16D0: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16D1: 7E L16D2: 2C L16D3: CB 27 L16D5: CB 27 L16D7: CB 27 L16D9: CB 27 L16DB: B6 L16DC: 2C L16DD: 12 L16DE: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16DF: 7E L16E0: 2C L16E1: CB 27 L16E3: CB 27 L16E5: CB 27 L16E7: CB 27 L16E9: B6 L16EA: 2C L16EB: 12 L16EC: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de L16ED: 7E L16EE: 2C L16EF: CB 27 L16F1: CB 27 L16F3: CB 27 L16F5: CB 27 L16F7: B6 L16F8: 2C L16F9: 12 L16FA: 13 # ld a, [hl]; inc l; sla a ; sla a ; sla a ; sla a; or [hl]; inc l; ld [de], a; inc de # L16FB: 3E FF L16FD: 12 # ld a, 0xFF ; ld [de], a # # ld a, 5 L16FE: 3E 05 L1700: 32 26 D8 # ld [display_buffer_time], a # # jp redraw L1703: C3 DA 23 # # handle_call_packet: # L1706: 7D # ld a, l # add 6 ! destination address offset L1707: C6 06 L1709: 6F # ld l, a # ld ix, cfg_mycall_1 L170A: DD 21 28 C8 # L170E: 7E L170F: 2C L1710: DD BE 00 L1713: C0 # ld a, [hl]; inc l; cp [ix + 0]; ret nz L1714: 7E L1715: 2C L1716: DD BE 01 L1719: C0 # ld a, [hl]; inc l; cp [ix + 1]; ret nz L171A: 7E L171B: 2C L171C: DD BE 02 L171F: C0 # ld a, [hl]; inc l; cp [ix + 2]; ret nz L1720: 7E L1721: 2C L1722: DD BE 03 L1725: C0 # ld a, [hl]; inc l; cp [ix + 3]; ret nz L1726: 7E L1727: 2C L1728: DD BE 04 L172B: C0 # ld a, [hl]; inc l; cp [ix + 4]; ret nz # # ld a, 1 L172C: 3E 01 # call start_call_timer L172E: CD F8 08 # # call cu_lights_on L1731: CD 23 24 # call cu_call_on L1734: CD 7C 24 # call redraw L1737: CD DA 23 # call ding L173A: CD CB 22 # ret L173D: C9 # # ! PTT in menu, send query or config packet # # send_remote_config_packets: # L173E: 2A D0 C8 # ld hl, [cfg_remote_id] L1741: 7C # ld a, h L1742: B5 # or l L1743: C8 # ret z ! dont bother when remote id zeroed. # # call mic_off_ccir_off L1744: CD 37 07 # L1747: 3A B5 D0 # ld a, [digidx] L174A: B7 # or a # jp z, send_remote_config_query L174B: CA 6E 17 # # ! Enter config then # L174E: DD 2A 11 D1 # ld ix, [menu_ptr] ! current record # ld de, outpacket L1752: 11 D7 D0 # L1755: 3E EC L1757: 12 L1758: 13 # ld a, 0xEC; ld [de], a; inc de ! "Enter Config" ... # L1759: 2A D0 C8 # ld hl, [cfg_remote_id] L175C: 7D # ld a, l L175D: 12 L175E: 13 # ld [de], a; inc de ! ... with this remote config identifier L175F: 7C # ld a, h L1760: 12 L1761: 13 # ld [de], a; inc de # # call fill_enter_config_packet L1762: CD 03 18 # call append_secret_packet_crc L1765: CD 8D 19 # # ld b, LONG_PACLEN L1768: 06 0F # call send_packet_buffer L176A: CD 1E 1C # ret L176D: C9 # # send_remote_config_query: L176E: DD 2A 11 D1 # ld ix, [menu_ptr] ! current record # ld de, outpacket L1772: 11 D7 D0 # L1775: 3E AC L1777: 12 L1778: 13 # ld a, 0xAC; ld [de], a; inc de ! "Ask Config" ... # L1779: 2A D0 C8 # ld hl, [cfg_remote_id] L177C: 7D # ld a, l L177D: 12 L177E: 13 # ld [de], a; inc de ! ... from this rig identifier L177F: 7C # ld a, h L1780: 12 L1781: 13 # ld [de], a; inc de # # call fill_query_config_packet L1782: CD 2D 18 # call append_short_packet_crc L1785: CD 40 19 # # ld b, SHORT_PACLEN L1788: 06 08 # call send_packet_buffer L178A: CD 1E 1C # ret L178D: C9 # # ! at DE is the variable XXX # # send_display_config_packet: # L178E: 3A CC D0 # ld a, [txon] L1791: B7 # or a # jr nz, 1f ! in case tx already on, repeater ? L1792: 20 09 # L1794: D5 # push de # call tx_on L1795: CD 0F 32 L1798: D1 # pop de # jp c, tx_error L1799: DA 88 1E # L179C: 97 # sub a ! Z, must txoff # 1: L179D: F5 # push af ! txon flag for later # L179E: D5 # push de # call mic_off_ccir_off L179F: CD 37 07 # L17A2: E1 # pop hl ! swap de to hl # ld de, outpacket L17A3: 11 D7 D0 # L17A6: 3E DC L17A8: 12 L17A9: 13 # ld a, 0xDC; ld [de], a; inc de # # call fill_display_config_packet L17AA: CD 43 18 # call append_long_packet_crc L17AD: CD E7 19 # # ld b, LONG_PACLEN L17B0: 06 0F # call send_packet_buffer L17B2: CD 1E 1C # call mdm_delay L17B5: CD 67 1C # ld b, LONG_PACLEN L17B8: 06 0F # call send_packet_buffer L17BA: CD 1E 1C # L17BD: F1 # pop af # call z, tx_off ! turned on, so turn off also L17BE: CC 49 32 # ret L17C1: C9 # # !-------------------------------------------------- # # map_special_ptrs: L17C2: 7C # ld a, h # cp HI(version) L17C3: FE 00 # jr nz, 1f L17C5: 20 09 L17C7: 7D # ld a, l # cp LO(version) L17C8: FE 75 # jr nz, 1f L17CA: 20 04 # ld hl, 0 ! "3_N" = 0 L17CC: 21 00 00 # ret L17CF: C9 # 1: L17D0: 7C # ld a, h # cp HI(menu_rfc_change) L17D1: FE 48 # jr nz, 1f L17D3: 20 09 L17D5: 7D # ld a, l # cp LO(menu_rfc_change) L17D6: FE 1D # jr nz, 1f L17D8: 20 04 # ld hl, 1 ! RFC = 1 L17DA: 21 01 00 # ret L17DD: C9 # 1: L17DE: 7C # ld a, h # cp HI(menu_sql_change) L17DF: FE 48 # jr nz, 1f L17E1: 20 09 L17E3: 7D # ld a, l # cp LO(menu_sql_change) L17E4: FE 6C # jr nz, 1f L17E6: 20 04 # ld hl, 2 ! SQL = 2 L17E8: 21 02 00 # ret L17EB: C9 # 1: L17EC: 7C # ld a, h # cp HI(menu_sqB_change) L17ED: FE 48 # jr nz, 1f L17EF: 20 09 L17F1: 7D # ld a, l # cp LO(menu_sqB_change) L17F2: FE 7E # jr nz, 1f L17F4: 20 04 # ld hl, 3 ! SQL BI = 3 L17F6: 21 03 00 # ret L17F9: C9 # 1: # ret ! unchanged L17FA: C9 # L17FB: FF L17FC: FF L17FD: FF L17FE: FF L17FF: FF L1800: FF L1801: FF # onesies: .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF L1802: FF # # fill_enter_config_packet: # # call load_menu_ptr ! variable is specified by RAM address L1803: CD 05 47 # call map_special_ptrs ! or page 0 pseudoptr L1806: CD C2 17 # L1809: 7D # ld a, l L180A: 12 L180B: 13 # ld [de], a; inc de L180C: 7C # ld a, h L180D: 12 L180E: 13 # ld [de], a; inc de ! ptr # # ld bc, 8 ! assume will copy 8 chars, b clear L180F: 01 08 00 # ld hl, digbuf L1812: 21 B6 D0 L1815: 3A B5 D0 # ld a, [digidx] ! depending on number of characters: # cp 8 L1818: FE 08 # jr c, 1f ! less than 8, padding L181A: 38 04 # jr z, 2f ! exact 8 L181C: 28 0C # jr 3f ! 9 or more -> means 0 characters (silly) L181E: 18 07 # 1: L1820: 4F # ld c, a ! valid chars # ld a, 8 L1821: 3E 08 L1823: 91 # sub c ! this much padding L1824: ED B0 # ldir ! copy L1826: 4F # ld c, a ! padding now # 3: # ld hl, onesies L1827: 21 FB 17 # 2: L182A: ED B0 # ldir ! copy # ret L182C: C9 # # fill_query_config_packet: # # call load_menu_ptr ! variable is specified by RAM address L182D: CD 05 47 # call map_special_ptrs L1830: CD C2 17 # L1833: 7D # ld a, l L1834: 12 L1835: 13 # ld [de], a; inc de L1836: 7C # ld a, h L1837: 12 L1838: 13 # ld [de], a; inc de # ld hl, onesies L1839: 21 FB 17 L183C: ED A0 # ldi L183E: ED A0 # ldi L1840: ED A0 # ldi # ret L1842: C9 # # fill_display_config_packet: L1843: 7C # ld a, h L1844: B7 # or a L1845: 7D # ld a, l # jr z, 1f ! special variables look like they live in page 0 L1846: 28 11 # 5: L1848: ED A0 # ldi L184A: ED A0 # ldi # 3: L184C: ED A0 # ldi L184E: ED A0 # ldi L1850: ED A0 # ldi L1852: ED A0 # ldi L1854: ED A0 # ldi L1856: ED A0 # ldi # ret L1858: C9 # 1: # cp 0 ! "3_N" = 0 L1859: FE 00 # jr nz, 1f L185B: 20 06 # ld hl, version L185D: 21 75 00 # jp 5b L1860: C3 48 18 # 1: # cp 1 ! RFC = 1 L1863: FE 01 # jr nz, 1f L1865: 20 10 # ld hl, rfc L1867: 21 CD D0 L186A: ED A0 # ldi # ld hl, ad_rssi L186C: 21 00 D8 L186F: ED A0 # ldi # ld hl, onesies L1871: 21 FB 17 # jp 3b L1874: C3 4C 18 # 1: # cp 2 ! SQL = 2 L1877: FE 02 # jr nz, 1f L1879: 20 10 # ld hl, cfg_squelch_level L187B: 21 27 C7 L187E: ED A0 # ldi # call read_squelcher_value L1880: CD 32 06 L1883: 12 L1884: 13 # ld [de], a; inc de # ld hl, onesies L1885: 21 FB 17 # jp 3b L1888: C3 4C 18 # 1: # cp 3 ! SQL BI = 3 L188B: FE 03 # jr nz, 1f L188D: 20 10 # ld hl, cfg_squelch_BIG L188F: 21 28 C7 L1892: ED A0 # ldi # call read_squelcher_value L1894: CD 32 06 L1897: 12 L1898: 13 # ld [de], a; inc de # ld hl, onesies L1899: 21 FB 17 # jp 3b L189C: C3 4C 18 # 1: # ld hl, onesies L189F: 21 FB 17 # jp 5b L18A2: C3 48 18 # # !-------------------------------------------------- # # send_call_packet: # # call tx_on L18A5: CD 0F 32 # jp c, tx_error L18A8: DA 88 1E # # call mic_off_ccir_off L18AB: CD 37 07 # # call waitkey L18AE: CD 31 0B # # call build_call_packet_buffer L18B1: CD D3 18 # call append_short_packet_crc L18B4: CD 40 19 # # ld b, SHORT_PACLEN L18B7: 06 08 # call send_packet_buffer L18B9: CD 1E 1C # call mdm_delay L18BC: CD 67 1C # ld b, SHORT_PACLEN L18BF: 06 08 # call send_packet_buffer L18C1: CD 1E 1C # call mdm_delay L18C4: CD 67 1C # ld b, SHORT_PACLEN L18C7: 06 08 # call send_packet_buffer L18C9: CD 1E 1C # # call tx_off L18CC: CD 49 32 # call clear_buffer L18CF: CD FC 0D # # ret L18D2: C9 # # build_call_packet_buffer: # # ld hl, digbuf L18D3: 21 B6 D0 L18D6: 3A B5 D0 # ld a, [digidx] L18D9: 47 # ld b, a # cp 1 L18DA: FE 01 # jr nz, 1f L18DC: 20 04 L18DE: 7E # ld a, [hl] # cp 0 L18DF: FE 00 L18E1: C8 # ret z ! 0* = send it again # 1: # ld de, outpacket L18E2: 11 D7 D0 # ld ix, cfg_mycall_1 L18E5: DD 21 28 C8 L18E9: 3E C0 L18EB: DD B6 00 L18EE: 12 L18EF: 13 # ld a, 0xC0; or [ix + 0]; ld [de], a; inc de L18F0: DD 7E 01 L18F3: CB 27 L18F5: CB 27 L18F7: CB 27 L18F9: CB 27 L18FB: DD B6 02 L18FE: 12 L18FF: 13 # ld a, [ix + 1]; sla a ; sla a ; sla a ; sla a; or [ix + 2]; ld [de], a; inc de L1900: DD 7E 03 L1903: CB 27 L1905: CB 27 L1907: CB 27 L1909: CB 27 L190B: DD B6 04 L190E: 12 L190F: 13 # ld a, [ix + 3]; sla a ; sla a ; sla a ; sla a; or [ix + 4]; ld [de], a; inc de # ld c, 3 L1910: 0E 03 # 1: L1912: 0C # inc c L1913: 7E # ld a, [hl] L1914: 23 # inc hl L1915: CB 27 L1917: CB 27 L1919: CB 27 L191B: CB 27 # sla a; sla a; sla a; sla a # or 0xF L191D: F6 0F L191F: 12 # ld [de], a L1920: 13 # inc de L1921: 05 # dec b # jr z, 1f L1922: 28 0F # and 0xF0 L1924: E6 F0 L1926: B6 # or [hl] L1927: 23 # inc hl L1928: 1B # dec de L1929: 12 # ld [de], a L192A: 13 # inc de L192B: 05 # dec b # jr z, 1f L192C: 28 05 L192E: 79 # ld a, c # cp 6 L192F: FE 06 # jr nz, 1b L1931: 20 DF # 1: L1933: 79 # ld a, c # cp 6 L1934: FE 06 # jr z, 1f L1936: 28 07 # ld a, 0xFF L1938: 3E FF L193A: 12 # ld [de], a L193B: 13 # inc de L193C: 0C # inc c # jr 1b L193D: 18 F4 # 1: # ret L193F: C9 # # !---------------------------------------------------------------------- # ! # ! crc = crchi ^ crc16_table[crclo ^ c] # ! # # # # # # # # # # # # append_short_packet_crc: # # ld ix, outpacket L1940: DD 21 D7 D0 L1944: 3E FF L1946: 47 # ld a, 0xFF; ld b, a # L1947: 26 35 L1949: DD AE 00 L194C: 6F L194D: 78 L194E: 46 L194F: 24 L1950: AE L1951: 26 35 L1953: DD AE 01 L1956: 6F L1957: 78 L1958: 46 L1959: 24 L195A: AE L195B: 26 35 L195D: DD AE 02 L1960: 6F L1961: 78 L1962: 46 L1963: 24 L1964: AE L1965: 26 35 L1967: DD AE 03 L196A: 6F L196B: 78 L196C: 46 L196D: 24 L196E: AE L196F: 26 35 L1971: DD AE 04 L1974: 6F L1975: 78 L1976: 46 L1977: 24 L1978: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1979: 26 35 L197B: DD AE 05 L197E: 6F L197F: 78 L1980: 46 L1981: 24 L1982: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; # L1983: 2F # cpl L1984: DD 77 07 # ld [ix + 7], a L1987: 78 # ld a, b L1988: 2F # cpl L1989: DD 77 06 # ld [ix + 6], a # # ret L198C: C9 # # append_secret_packet_crc: # L198D: 3E FF L198F: 47 # ld a, 0xFF; ld b, a # # ld ix, cfg_remote_passwd L1990: DD 21 13 C9 # L1994: 26 35 L1996: DD AE 00 L1999: 6F L199A: 78 L199B: 46 L199C: 24 L199D: AE L199E: 26 35 L19A0: DD AE 01 L19A3: 6F L19A4: 78 L19A5: 46 L19A6: 24 L19A7: AE L19A8: 26 35 L19AA: DD AE 02 L19AD: 6F L19AE: 78 L19AF: 46 L19B0: 24 L19B1: AE L19B2: 26 35 L19B4: DD AE 03 L19B7: 6F L19B8: 78 L19B9: 46 L19BA: 24 L19BB: AE L19BC: 26 35 L19BE: DD AE 04 L19C1: 6F L19C2: 78 L19C3: 46 L19C4: 24 L19C5: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L19C6: 26 35 L19C8: DD AE 05 L19CB: 6F L19CC: 78 L19CD: 46 L19CE: 24 L19CF: AE L19D0: 26 35 L19D2: DD AE 06 L19D5: 6F L19D6: 78 L19D7: 46 L19D8: 24 L19D9: AE L19DA: 26 35 L19DC: DD AE 07 L19DF: 6F L19E0: 78 L19E1: 46 L19E2: 24 L19E3: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (6)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (7)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; # jp 1f L19E4: C3 EA 19 # # ! JMPOVER # # append_long_packet_crc: # L19E7: 3E FF L19E9: 47 # ld a, 0xFF; ld b, a # 1: # ld ix, outpacket L19EA: DD 21 D7 D0 # L19EE: 26 35 L19F0: DD AE 00 L19F3: 6F L19F4: 78 L19F5: 46 L19F6: 24 L19F7: AE L19F8: 26 35 L19FA: DD AE 01 L19FD: 6F L19FE: 78 L19FF: 46 L1A00: 24 L1A01: AE L1A02: 26 35 L1A04: DD AE 02 L1A07: 6F L1A08: 78 L1A09: 46 L1A0A: 24 L1A0B: AE L1A0C: 26 35 L1A0E: DD AE 03 L1A11: 6F L1A12: 78 L1A13: 46 L1A14: 24 L1A15: AE L1A16: 26 35 L1A18: DD AE 04 L1A1B: 6F L1A1C: 78 L1A1D: 46 L1A1E: 24 L1A1F: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1A20: 26 35 L1A22: DD AE 05 L1A25: 6F L1A26: 78 L1A27: 46 L1A28: 24 L1A29: AE L1A2A: 26 35 L1A2C: DD AE 06 L1A2F: 6F L1A30: 78 L1A31: 46 L1A32: 24 L1A33: AE L1A34: 26 35 L1A36: DD AE 07 L1A39: 6F L1A3A: 78 L1A3B: 46 L1A3C: 24 L1A3D: AE L1A3E: 26 35 L1A40: DD AE 08 L1A43: 6F L1A44: 78 L1A45: 46 L1A46: 24 L1A47: AE L1A48: 26 35 L1A4A: DD AE 09 L1A4D: 6F L1A4E: 78 L1A4F: 46 L1A50: 24 L1A51: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (6)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (7)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (8)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (9)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1A52: 26 35 L1A54: DD AE 0A L1A57: 6F L1A58: 78 L1A59: 46 L1A5A: 24 L1A5B: AE L1A5C: 26 35 L1A5E: DD AE 0B L1A61: 6F L1A62: 78 L1A63: 46 L1A64: 24 L1A65: AE L1A66: 26 35 L1A68: DD AE 0C L1A6B: 6F L1A6C: 78 L1A6D: 46 L1A6E: 24 L1A6F: AE # ld h, HI(crctbls) ; xor [ix + (10)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (11)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (12)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; # L1A70: 2F # cpl L1A71: DD 77 0E # ld [ix + 14], a L1A74: 78 # ld a, b L1A75: 2F # cpl L1A76: DD 77 0D # ld [ix + 13], a # # ret L1A79: C9 # # ! af bc de hl ix allowed to changed # # check_short_packet: L1A7A: C5 # push bc L1A7B: D5 # push de L1A7C: DD E5 # push ix # # ld ix, packet L1A7E: DD 21 FA D0 L1A82: 3E FF L1A84: 47 # ld a, 0xFF; ld b, a # L1A85: 26 35 L1A87: DD AE 00 L1A8A: 6F L1A8B: 78 L1A8C: 46 L1A8D: 24 L1A8E: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1A8F: 26 35 L1A91: DD AE 01 L1A94: 6F L1A95: 78 L1A96: 46 L1A97: 24 L1A98: AE # ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1A99: 26 35 L1A9B: DD AE 02 L1A9E: 6F L1A9F: 78 L1AA0: 46 L1AA1: 24 L1AA2: AE # ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1AA3: 26 35 L1AA5: DD AE 03 L1AA8: 6F L1AA9: 78 L1AAA: 46 L1AAB: 24 L1AAC: AE # ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1AAD: 26 35 L1AAF: DD AE 04 L1AB2: 6F L1AB3: 78 L1AB4: 46 L1AB5: 24 L1AB6: AE # ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1AB7: 26 35 L1AB9: DD AE 05 L1ABC: 6F L1ABD: 78 L1ABE: 46 L1ABF: 24 L1AC0: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; # L1AC1: 2F # cpl L1AC2: DD BE 07 # cp [ix + 7] # jr nz, 1f L1AC5: 20 16 L1AC7: 78 # ld a, b L1AC8: 2F # cpl L1AC9: DD BE 06 # cp [ix + 6] # jr nz, 1f L1ACC: 20 0F # # ld a, 0x04 L1ACE: 3E 04 L1AD0: D3 A3 # out [0xA0 + 3], a # # ld hl, packet L1AD2: 21 FA D0 L1AD5: 22 0A D1 # ld [pkt_ptr], hl ! its short, rewind packet pointer # # ld c, 6 L1AD8: 0E 06 # call check_packet L1ADA: CD EB 1B # 1: L1ADD: DD E1 # pop ix L1ADF: D1 # pop de L1AE0: C1 # pop bc # ret L1AE1: C9 # # check_long_packet: L1AE2: C5 # push bc L1AE3: D5 # push de L1AE4: DD E5 # push ix # L1AE6: 3A FA D0 # ld a, [packet+0] # cp 0xEC L1AE9: FE EC L1AEB: 3E FF L1AED: 47 # ld a, 0xFF; ld b, a # jr nz, 1f L1AEE: 20 54 # ld ix, cfg_remote_passwd L1AF0: DD 21 13 C9 L1AF4: 26 35 L1AF6: DD AE 00 L1AF9: 6F L1AFA: 78 L1AFB: 46 L1AFC: 24 L1AFD: AE L1AFE: 26 35 L1B00: DD AE 01 L1B03: 6F L1B04: 78 L1B05: 46 L1B06: 24 L1B07: AE L1B08: 26 35 L1B0A: DD AE 02 L1B0D: 6F L1B0E: 78 L1B0F: 46 L1B10: 24 L1B11: AE L1B12: 26 35 L1B14: DD AE 03 L1B17: 6F L1B18: 78 L1B19: 46 L1B1A: 24 L1B1B: AE L1B1C: 26 35 L1B1E: DD AE 04 L1B21: 6F L1B22: 78 L1B23: 46 L1B24: 24 L1B25: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1B26: 26 35 L1B28: DD AE 05 L1B2B: 6F L1B2C: 78 L1B2D: 46 L1B2E: 24 L1B2F: AE L1B30: 26 35 L1B32: DD AE 06 L1B35: 6F L1B36: 78 L1B37: 46 L1B38: 24 L1B39: AE L1B3A: 26 35 L1B3C: DD AE 07 L1B3F: 6F L1B40: 78 L1B41: 46 L1B42: 24 L1B43: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (6)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (7)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; # 1: # ld ix, packet L1B44: DD 21 FA D0 # L1B48: 26 35 L1B4A: DD AE 00 L1B4D: 6F L1B4E: 78 L1B4F: 46 L1B50: 24 L1B51: AE L1B52: 26 35 L1B54: DD AE 01 L1B57: 6F L1B58: 78 L1B59: 46 L1B5A: 24 L1B5B: AE L1B5C: 26 35 L1B5E: DD AE 02 L1B61: 6F L1B62: 78 L1B63: 46 L1B64: 24 L1B65: AE L1B66: 26 35 L1B68: DD AE 03 L1B6B: 6F L1B6C: 78 L1B6D: 46 L1B6E: 24 L1B6F: AE L1B70: 26 35 L1B72: DD AE 04 L1B75: 6F L1B76: 78 L1B77: 46 L1B78: 24 L1B79: AE # ld h, HI(crctbls) ; xor [ix + (0)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (1)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (2)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (3)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (4)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1B7A: 26 35 L1B7C: DD AE 05 L1B7F: 6F L1B80: 78 L1B81: 46 L1B82: 24 L1B83: AE L1B84: 26 35 L1B86: DD AE 06 L1B89: 6F L1B8A: 78 L1B8B: 46 L1B8C: 24 L1B8D: AE L1B8E: 26 35 L1B90: DD AE 07 L1B93: 6F L1B94: 78 L1B95: 46 L1B96: 24 L1B97: AE L1B98: 26 35 L1B9A: DD AE 08 L1B9D: 6F L1B9E: 78 L1B9F: 46 L1BA0: 24 L1BA1: AE L1BA2: 26 35 L1BA4: DD AE 09 L1BA7: 6F L1BA8: 78 L1BA9: 46 L1BAA: 24 L1BAB: AE # ld h, HI(crctbls) ; xor [ix + (5)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (6)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (7)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (8)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (9)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ; L1BAC: 26 35 L1BAE: DD AE 0A L1BB1: 6F L1BB2: 78 L1BB3: 46 L1BB4: 24 L1BB5: AE L1BB6: 26 35 L1BB8: DD AE 0B L1BBB: 6F L1BBC: 78 L1BBD: 46 L1BBE: 24 L1BBF: AE L1BC0: 26 35 L1BC2: DD AE 0C L1BC5: 6F L1BC6: 78 L1BC7: 46 L1BC8: 24 L1BC9: AE # ld h, HI(crctbls) ; xor [ix + (10)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (11)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; ld h, HI(crctbls) ; xor [ix + (12)] ; ld l, a ; ld a, b ; ld b, [hl] ; inc h ; xor [hl] ;; # L1BCA: 2F # cpl L1BCB: DD BE 0E # cp [ix + 14] # jr nz, 1f L1BCE: 20 0C L1BD0: 78 # ld a, b L1BD1: 2F # cpl L1BD2: DD BE 0D # cp [ix + 13] # jr nz, 1f L1BD5: 20 05 # # ld c, 13 L1BD7: 0E 0D # call check_packet L1BD9: CD EB 1B # 1: L1BDC: DD E1 # pop ix L1BDE: D1 # pop de L1BDF: C1 # pop bc # # ld hl, packet L1BE0: 21 FA D0 L1BE3: 22 0A D1 # ld [pkt_ptr], hl ! short or long, rewind packet pointer # # ld a, 0x04 L1BE6: 3E 04 L1BE8: D3 A3 # out [0xA0 + 3], a # # ret L1BEA: C9 # # check_packet: # L1BEB: 3A 0D D1 # ld a, [fsk_hist_idx] L1BEE: 32 0E D1 # ld [packet_good], a L1BF1: 6F # ld l, a # ld h, HI(fsk_history) L1BF2: 26 D4 # 1: L1BF4: DD 7E 00 # ld a, [ix+0] L1BF7: CB 3F L1BF9: CB 3F L1BFB: CB 3F L1BFD: CB 3F # srl a ; srl a ; srl a ; srl a L1BFF: 77 # ld [hl], a L1C00: 2C # inc l L1C01: DD 7E 00 # ld a, [ix+0] # and 0xF L1C04: E6 0F L1C06: 77 # ld [hl], a L1C07: 2C # inc l L1C08: DD 23 # inc ix L1C0A: 0D # dec c # jr nz, 1b L1C0B: 20 E7 # # ld a, ' ' L1C0D: 3E 20 L1C0F: 77 # ld [hl], a L1C10: 7D # ld a, l L1C11: 32 0C D1 # ld [fsk_hist_finger], a ! reposition viewing also, over blank L1C14: 3C # inc a L1C15: 32 0D D1 # ld [fsk_hist_idx], a ! insert point after blank # ld a, 1 L1C18: 3E 01 L1C1A: 32 0F D1 # ld [packet_rdy], a # ret L1C1D: C9 # # send_packet_buffer: # L1C1E: C5 # push bc ! length in b # # ld hl, nosir L1C1F: 21 AD D0 L1C22: CB C6 # set 0, [hl] # # ld a, 0x01 L1C24: 3E 01 L1C26: D3 A3 # out [0xA0 + 3], a # # ld hl, packet_header L1C28: 21 50 1C # ld b, packet_header_size L1C2B: 06 07 # call send_some_data L1C2D: CD 57 1C # # ld hl, outpacket L1C30: 21 D7 D0 L1C33: C1 # pop bc # call send_some_data L1C34: CD 57 1C # # ld hl, nosir L1C37: 21 AD D0 L1C3A: CB 86 # res 0, [hl] # # call mdm_delay L1C3C: CD 67 1C # 1: L1C3F: DB A3 # in a, [0xA0 + 3] # and 0x10 L1C41: E6 10 # jr z, 1b L1C43: 28 FA # # ld hl, packet L1C45: 21 FA D0 L1C48: 22 0A D1 # ld [pkt_ptr], hl ! rewind packet pointer # # ld a, 0x04 L1C4B: 3E 04 L1C4D: D3 A3 # out [0xA0 + 3], a # # ret L1C4F: C9 # # packet_header: # .byte 0b10101010 L1C50: AA # .byte 0b10101010 L1C51: AA # .byte 0b10101010 L1C52: AA # .byte 0b10101010 L1C53: AA # .byte 0b10101010 L1C54: AA # .byte 0b11000100 L1C55: C4 # .byte 0b11010111 L1C56: D7 # packet_header_size = . - packet_header # # send_some_data: # 1: # call mdm_delay L1C57: CD 67 1C L1C5A: DB A3 # in a, [0xA0 + 3] # and 0x08 L1C5C: E6 08 # jr z, 1b L1C5E: 28 F7 L1C60: 7E # ld a, [hl] L1C61: 23 # inc hl L1C62: D3 A2 # out [0xA0 + 2], a # djnz 1b L1C64: 10 F1 # ret L1C66: C9 # # mdm_delay: L1C67: 00 L1C68: 00 L1C69: 00 L1C6A: 00 L1C6B: 00 # nop; nop; nop; nop; nop L1C6C: 00 L1C6D: 00 L1C6E: 00 L1C6F: 00 L1C70: 00 # nop; nop; nop; nop; nop L1C71: 00 L1C72: 00 L1C73: 00 L1C74: 00 L1C75: 00 # nop; nop; nop; nop; nop L1C76: 00 L1C77: 00 L1C78: 00 L1C79: 00 L1C7A: 00 # nop; nop; nop; nop; nop L1C7B: 00 L1C7C: 00 L1C7D: 00 L1C7E: 00 L1C7F: 00 # nop; nop; nop; nop; nop # ret L1C80: C9 # # !====================================================================== # # save_memory: L1C81: 3A B5 D0 # ld a, [digidx] L1C84: B7 # or a # jr nz, 1f L1C85: 20 05 L1C87: 3A 07 C0 # ld a, [mem_idx] # jr 2f L1C8A: 18 03 # 1: # call a2i_byte L1C8C: CD 50 46 # 2: # cp 130 L1C8F: FE 82 # jr c, 1f L1C91: 38 02 # ld a, 99 L1C93: 3E 63 # 1: # L1C95: 32 07 C0 # ld [mem_idx], a # # ld a, MEM_VALID | MEM_SCANNABLE L1C98: 3E 05 L1C9A: 32 06 C0 # ld [mem_flags], a # call redraw L1C9D: CD DA 23 # 7: L1CA0: 3A 06 C0 # ld a, [mem_flags] L1CA3: 47 # ld b, a L1CA4: 3A B2 D0 # ld a, [key_time] # cp 2 L1CA7: FE 02 # jr c, 1f L1CA9: 38 02 # ld b, MEM_VALID ! 2-long L1CAB: 06 01 # 1: L1CAD: 3A B2 D0 # ld a, [key_time] # cp 3 L1CB0: FE 03 # jr c, 1f L1CB2: 38 02 # ld b, MEM_VALID | MEM_HIDDEN ! 3-long L1CB4: 06 03 # 1: L1CB6: 3A 06 C0 # ld a, [mem_flags] L1CB9: B8 # cp b # jr z, 1f L1CBA: 28 07 L1CBC: 78 # ld a, b L1CBD: 32 06 C0 # ld [mem_flags], a # call redraw L1CC0: CD DA 23 # 1: # call is_key_down L1CC3: CD 27 0B # jr nz, 7b ! keep waiting L1CC6: 20 D8 # # call point_ix_memory L1CC8: CD 89 1D # L1CCB: 2A 08 C0 L1CCE: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L1CD1: DD 75 00 L1CD4: DD 74 01 L1CD7: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a L1CDA: 2A 0B C0 L1CDD: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L1CE0: DD 75 03 L1CE3: DD 74 04 L1CE6: DD 77 05 # ld [ix+3], l; ld [ix+4], h; ld [ix+5], a # L1CE9: 3A 06 C0 # ld a, [mem_flags] L1CEC: DD 77 06 # ld [ix + 6], a ! scan/valid flags are saved # # ! ld a, [cfg_ctcss_hz] # ! ld [ix + mem_CTCSS], a ! ctcss is NOT saved here # L1CEF: 3A 13 C0 # ld a, [band_step] L1CF2: DD 77 08 # ld [ix + mem_BAND], a ! band step is saved, but it is not used when recalled # # ld a, 0 L1CF5: 3E 00 L1CF7: DD 77 09 # ld [ix + mem_FOO1], a L1CFA: DD 77 0A # ld [ix + mem_FOO2], a L1CFD: DD 77 0B # ld [ix + mem_FOO3], a # # call save_nvdata L1D00: CD AE 3B # ret L1D03: C9 # # ! up down memories from "vfo", just go back to last memory # # maybe_just_reenter_last: # call clear_buffer L1D04: CD FC 0D # call scanner_stop L1D07: CD 54 13 L1D0A: 3A 06 C0 # ld a, [mem_flags] # cp 0 L1D0D: FE 00 L1D0F: C0 # ret nz ! NZ, already on memories # call get_mem_flags L1D10: CD EB 1D # and MEM_VALID | MEM_HIDDEN L1D13: E6 03 # cp MEM_VALID ! Z if okay this L1D15: FE 01 L1D17: 3A 07 C0 # ld a, [mem_idx] ! ... last memory # ret ! and Z condition L1D1A: C9 # # up_memo: # call maybe_just_reenter_last L1D1B: CD 04 1D # jp z, go_mem_a L1D1E: CA A3 1D # ld e, 132 L1D21: 1E 84 # 2: L1D23: 1D # dec e # jr z, 8f L1D24: 28 1C L1D26: 3A 07 C0 # ld a, [mem_idx] L1D29: 3C # inc a # cp 130 L1D2A: FE 82 # jr c, 1f L1D2C: 38 02 # ld a, 0 L1D2E: 3E 00 # 1: L1D30: 32 07 C0 # ld [mem_idx], a # call get_mem_flags L1D33: CD EB 1D # and MEM_VALID | MEM_HIDDEN L1D36: E6 03 # cp MEM_VALID L1D38: FE 01 # jr nz, 2b L1D3A: 20 E7 # L1D3C: 3A 07 C0 # ld a, [mem_idx] # jp go_mem_a L1D3F: C3 A3 1D # 8: # ld a, 0 L1D42: 3E 00 L1D44: 32 06 C0 # ld [mem_flags], a # ret L1D47: C9 # # dn_memo: # call maybe_just_reenter_last L1D48: CD 04 1D # jp z, go_mem_a L1D4B: CA A3 1D # ld e, 132 L1D4E: 1E 84 # 2: L1D50: 1D # dec e # jr z, 8f L1D51: 28 1C L1D53: 3A 07 C0 # ld a, [mem_idx] L1D56: 3D # dec a # cp 130 L1D57: FE 82 # jr c, 1f L1D59: 38 02 # ld a, 129 L1D5B: 3E 81 # 1: L1D5D: 32 07 C0 # ld [mem_idx], a # call get_mem_flags L1D60: CD EB 1D # and MEM_VALID | MEM_HIDDEN L1D63: E6 03 # cp MEM_VALID L1D65: FE 01 # jr nz, 2b L1D67: 20 E7 # L1D69: 3A 07 C0 # ld a, [mem_idx] # jp go_mem_a L1D6C: C3 A3 1D # 8: # ld a, 0 L1D6F: 3E 00 L1D71: 32 06 C0 # ld [mem_flags], a # ret L1D74: C9 # # go_mem: # call a2i_byte L1D75: CD 50 46 # call go_mem_a L1D78: CD A3 1D # call remember_vip L1D7B: CD B0 0F # ret L1D7E: C9 # # save_memory_ctcss: # call point_ix_memory L1D7F: CD 89 1D L1D82: 3A 1C C0 # ld a, [mem_ctcss_hz] L1D85: DD 77 07 # ld [ix + mem_CTCSS], a # ret L1D88: C9 # # !====================================================================== # # point_ix_memory: L1D89: 3A 07 C0 # ld a, [mem_idx] # point_ix_memory_a: # cp 130 L1D8C: FE 82 # jr c, 1f L1D8E: 38 02 # ld a, 99 L1D90: 3E 63 # 1: # ld h, 0 L1D92: 26 00 L1D94: 6F # ld l, a L1D95: 29 # add hl, hl ! *= 2 L1D96: 29 # add hl, hl ! *= 4 L1D97: E5 # push hl L1D98: C1 # pop bc L1D99: 29 # add hl, hl ! *= 8 L1D9A: 09 # add hl, bc # ld bc, memories L1D9B: 01 FE C0 L1D9E: 09 # add hl, bc L1D9F: E5 # push hl L1DA0: DD E1 # pop ix # ret L1DA2: C9 # # go_mem_a: # cp 130 L1DA3: FE 82 # jr c, 1f L1DA5: 38 02 # ld a, 99 L1DA7: 3E 63 # 1: L1DA9: 32 07 C0 # ld [mem_idx], a # call point_ix_memory_a L1DAC: CD 8C 1D # L1DAF: DD 6E 00 L1DB2: DD 66 01 L1DB5: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] L1DB8: 22 08 C0 L1DBB: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a L1DBE: DD 6E 03 L1DC1: DD 66 04 L1DC4: DD 7E 05 # ld l, [ix+3]; ld h, [ix+4]; ld a, [ix+5] L1DC7: 22 0B C0 L1DCA: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # L1DCD: DD E5 # push ix # call locate_band ! preset band_xxx variables, override below L1DCF: CD 01 2D L1DD2: DD E1 # pop ix # L1DD4: DD 7E 06 # ld a, [ix + mem_FLAGS] # or MEM_VALID ! make it valid, even if the real record is cleared L1DD7: F6 01 L1DD9: 32 06 C0 # ld [mem_flags], a # L1DDC: DD 7E 07 # ld a, [ix + mem_CTCSS] L1DDF: 32 1C C0 # ld [mem_ctcss_hz], a ! load ctcss of memory # # ! ld a, [ix + mem_BAND] # ! ld [mem_step], a ! this is not (yet) used # # call set_duplex_from_tx_rx L1DE2: CD 89 2D # call set_channel_step L1DE5: CD F3 2F # jp changed_frequency_duplex_okay ! overridden duplex rx/tx data. L1DE8: C3 A6 2C # # get_mem_flags: # call point_ix_memory L1DEB: CD 89 1D L1DEE: DD 7E 06 # ld a, [ix + mem_FLAGS] # ret L1DF1: C9 # # leave_memories: # ld a, 0 L1DF2: 3E 00 L1DF4: 32 06 C0 # ld [mem_flags], a # ret L1DF7: C9 # # !---------------------------------------------------------------------- # # pttcheck: L1DF8: 3A B3 D0 # ld a, [pttdn] L1DFB: B7 # or a L1DFC: C8 # ret z ! PTT is not pressed # # call open_selective L1DFD: CD 6B 23 # # ld a, 1 L1E00: 3E 01 L1E02: 32 2B D8 # ld [repeater_ptt_seen], a # L1E05: 3A 16 C7 # ld a, [cfg_function] # cp 1 L1E08: FE 01 L1E0A: C8 # ret z ! Repeater mode, ignore PTT here. # # ! PTT is down, normal or slave mode. # # call cu_manipulated L1E0B: CD 42 0B # # ! Try to start TX, bail out if illegal # # call tx_on L1E0E: CD 0F 32 # jp c, tx_error L1E11: DA 88 1E # # ! Hum on, if necessary # # call ctcss_maybe L1E14: CD 19 3A # # ! Pending digits in basic display # L1E17: 3A 10 D1 # ld a, [menu_active] ! in menu ? L1E1A: B7 # or a # jr nz, 1f L1E1B: 20 07 L1E1D: 3A B5 D0 # ld a, [digidx] ! no, CCIR if digits, then /PTT down L1E20: B7 # or a # call nz, ptt_ccir_xmit L1E21: C4 93 1F # 1: # call mic_on L1E24: CD 42 07 # # call tx_tune_tone_maybe L1E27: CD 57 1F # # ! Then watch PTT # # call battcheck L1E2A: CD CA 0A # call redraw L1E2D: CD DA 23 L1E30: 3A 02 D8 # ld a, [ad_batt] L1E33: 5F # ld e, a # 1: L1E34: 3A 02 D8 # ld a, [ad_batt] L1E37: 93 # sub e # jr z, 2f L1E38: 28 12 # cp 1 L1E3A: FE 01 # jr z, 2f L1E3C: 28 0E # cp -1 L1E3E: FE FF # jr z, 2f L1E40: 28 0A # call battcheck L1E42: CD CA 0A # call redraw L1E45: CD DA 23 L1E48: 3A 02 D8 # ld a, [ad_batt] L1E4B: 5F # ld e, a # 2: L1E4C: D5 # push de L1E4D: 3A 10 D1 # ld a, [menu_active] L1E50: B7 # or a # call nz, redraw ! keep redrawing if in menu - status displays L1E51: C4 DA 23 # L1E54: 3A B0 D0 # ld a, [key] ! keys pressed after /PTT ? # cp -1 L1E57: FE FF # call nz, handle_key_during_tx L1E59: C4 59 0C # call is_key_down L1E5C: CD 27 0B # call z, stop_dtmf_tone L1E5F: CC F5 29 L1E62: D1 # pop de L1E63: 3A B3 D0 # ld a, [pttdn] L1E66: B7 # or a # jp nz, 1b L1E67: C2 34 1E # # ! Trailing end of PTT, query/command if in menu # L1E6A: 3A 10 D1 # ld a, [menu_active] L1E6D: B7 # or a # call nz, send_remote_config_packets L1E6E: C4 3E 17 # # ! Voice ID ? # L1E71: 3A 21 C9 # ld a, [cfg_voice_id] L1E74: B7 # or a # call nz, bang_voice_id L1E75: C4 07 3D # # ! EOT # # call tx_off L1E78: CD 49 32 # call stop_dtmf_tone L1E7B: CD F5 29 # call redraw L1E7E: CD DA 23 # # call remember_vip L1E81: CD B0 0F # # call repeater_operator_ptt L1E84: CD 61 3E # ret L1E87: C9 # # tx_error: # ld hl, MT_300HZ L1E88: 21 80 34 # ld d, 100 L1E8B: 16 64 # call start_marker_tone L1E8D: CD 1F 23 # 1: # call waitkey L1E90: CD 31 0B L1E93: 3A B3 D0 # ld a, [pttdn] L1E96: B7 # or a # jr nz, 1b L1E97: 20 F7 # # ret L1E99: C9 # # !---------------------------------------------------------------------- # # aprs_ptt_check: L1E9A: 3A 77 C9 # ld a, [cfg_aprs_tx] L1E9D: B7 # or a L1E9E: C8 # ret z ! Not configured # L1E9F: 3A 2F D8 # ld a, [sio_bctrl_mirror] # and 0x10 L1EA2: E6 10 L1EA4: C8 # ret z ! /LOCAL not pulled, bit inverted # L1EA5: 3A 22 C9 # ld a, [cfg_idlefn_delay] L1EA8: 47 # ld b, a L1EA9: 3A 22 D0 # ld a, [idle_timer] L1EAC: B8 # cp b L1EAD: D8 # ret c ! abort if not idle enough # # ld ix, cfg_aprs_tx_freq L1EAE: DD 21 78 C9 L1EB2: DD 7E 00 # ld a, [ix + 0] L1EB5: DD B6 01 # or [ix + 1] L1EB8: DD B6 02 # or [ix + 2] L1EBB: C8 # ret z ! Not configured # # ! Committed to blurt the aprs packet # L1EBC: 2A 0B C0 L1EBF: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] ! save frequency data L1EC2: F5 # push af L1EC3: E5 # push hl L1EC4: 2A 12 D0 L1EC7: 3A 14 D0 # ld hl, [tx_divisor] ; ld a, [(tx_divisor) + 2] L1ECA: F5 # push af L1ECB: E5 # push hl L1ECC: 2A 0D D0 # ld hl, [tx_refdiv] L1ECF: E5 # push hl L1ED0: 2A 18 D0 # ld hl, [tx_bstep_cfg] L1ED3: E5 # push hl # L1ED4: 2A 78 C9 L1ED7: 3A 7A C9 # ld hl, [cfg_aprs_tx_freq] ; ld a, [(cfg_aprs_tx_freq) + 2] ! load temp freq L1EDA: 22 0B C0 L1EDD: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # # call update_tx_vco_band L1EE0: CD D4 30 # # call 1f ! xmit L1EE3: CD 02 1F # L1EE6: E1 # pop hl L1EE7: 22 18 D0 # ld [tx_bstep_cfg], hl L1EEA: E1 # pop hl L1EEB: 22 0D D0 # ld [tx_refdiv], hl L1EEE: E1 # pop hl L1EEF: F1 # pop af L1EF0: 22 12 D0 L1EF3: 32 14 D0 # ld [tx_divisor], hl ; ld [(tx_divisor) + 2], a L1EF6: E1 # pop hl L1EF7: F1 # pop af L1EF8: 22 0B C0 L1EFB: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # # call update_tx_vco_band L1EFE: CD D4 30 # ret L1F01: C9 # # 1: # call locate_tx_band ! into [ix] L1F02: CD C7 2C L1F05: DD 7E 09 # ld a, [ix+9] ! logical channel step designator into A # call channel_step_parms L1F08: CD 0C 30 L1F0B: 22 0D D0 # ld [tx_refdiv], hl L1F0E: ED 43 18 D0 # ld [tx_bstep_cfg], bc # # call determine_tx_div_split L1F12: CD FB 2D # call close_squelch L1F15: CD B3 23 # # call tx_on_legal_or_not ! error ignored L1F18: CD 18 32 # call redraw L1F1B: CD DA 23 # call mic_on ! MIC is on. L1F1E: CD 42 07 # 1: L1F21: 3A 2F D8 # ld a, [sio_bctrl_mirror] # and 0x10 L1F24: E6 10 # jr nz, 1b ! Then watch /LOCAL here, bit inverted L1F26: 20 F9 # # call tx_off L1F28: CD 49 32 # call redraw L1F2B: CD DA 23 # ret L1F2E: C9 # # !---------------------------------------------------------------------- # # beep1750: # # call tx_on L1F2F: CD 0F 32 # jp c, tx_error L1F32: DA 88 1E # # call battcheck L1F35: CD CA 0A # # call mic_off_ccir_off L1F38: CD 37 07 # L1F3B: F3 # di # ld a, 0 L1F3C: 3E 00 L1F3E: 32 1E D0 # ld [mt_timer], a # ld a, LO(MT_1750HZ) L1F41: 3E 00 L1F43: D3 21 # out [0x20 + 1], a # ld a, HI(MT_1750HZ) L1F45: 3E 09 L1F47: D3 21 # out [0x20 + 1], a L1F49: FB # ei # # call ccir_on L1F4A: CD 57 07 # call waitkey L1F4D: CD 31 0B # # call ccir_off L1F50: CD 60 07 # call tx_off L1F53: CD 49 32 # ret L1F56: C9 # # tx_tune_tone_maybe: # L1F57: 3A 10 D1 # ld a, [menu_active] L1F5A: B7 # or a L1F5B: C8 # ret z ! not in menu # L1F5C: ED 5B 11 D1 # ld de, [menu_ptr] L1F60: 7A # ld a, d # cp HI(tune_tone_position) L1F61: FE 57 L1F63: C0 # ret nz L1F64: 7B # ld a, e # cp LO(tune_tone_position) L1F65: FE A0 L1F67: C0 # ret nz ! not in "t tune" display # L1F68: ED 5B 1F C9 # ld de, [cfg_txtune_hz] L1F6C: 7A # ld a, d L1F6D: B3 # or e L1F6E: C8 # ret z ! 0 Hz = no tx tuning help tone # L1F6F: 21 00 86 # ld hl, (4032000) % 65536 ; ld a, (4032000) / 65536 L1F72: 3E 3D # ld bc, -1 ! XXX erm, -2 in fact ? L1F74: 01 FF FF L1F77: A7 # and a # 1: L1F78: 03 # inc bc L1F79: ED 52 # sbc hl, de # sbc 0 L1F7B: DE 00 # jr nc, 1b ! 4032000 / HZ = CNT, into bc L1F7D: 30 F9 # L1F7F: F3 # di # ld a, 0 L1F80: 3E 00 L1F82: 32 1E D0 # ld [mt_timer], a L1F85: 79 # ld a, c L1F86: D3 21 # out [0x20 + 1], a L1F88: 78 # ld a, b L1F89: D3 21 # out [0x20 + 1], a L1F8B: FB # ei # # call mic_off L1F8C: CD 4E 07 # call ccir_on L1F8F: CD 57 07 # ret L1F92: C9 # # !---------------------------------------------------------------------- # # ptt_ccir_xmit: # # call redraw L1F93: CD DA 23 # L1F96: F3 # di L1F97: 3A 00 D0 # ld a, [output_0] L1F9A: F5 # push af # and ~0x07 L1F9B: E6 F8 L1F9D: 32 00 D0 # ld [output_0], a L1FA0: D3 60 # out [0x60], a L1FA2: FB # ei # # call mic_off_ccir_off L1FA3: CD 37 07 # # ld a, 20 ! 10 ms systicks, 200 ms silence before ccir L1FA6: 3E 14 L1FA8: 32 28 D0 # ld [ccir_tx_timer], a # 1: L1FAB: 3A 28 D0 # ld a, [ccir_tx_timer] L1FAE: B7 # or a # jr nz, 1b L1FAF: 20 FA # # call mtc_on L1FB1: CD 6C 07 # call ccir_on L1FB4: CD 57 07 # # call ccir_from_digbuf_or_setup L1FB7: CD D7 1F # # call ccir_off L1FBA: CD 60 07 # call mtc_off L1FBD: CD 75 07 # # call silence_timer1 L1FC0: CD 6C 22 # # ld a, 10 L1FC3: 3E 0A L1FC5: 32 28 D0 # ld [ccir_tx_timer], a # 1: L1FC8: 3A 28 D0 # ld a, [ccir_tx_timer] L1FCB: B7 # or a # jr nz, 1b ! add one 100msec of silence for sure L1FCC: 20 FA # L1FCE: F3 # di L1FCF: F1 # pop af L1FD0: 32 00 D0 # ld [output_0], a L1FD3: D3 60 # out [0x60], a L1FD5: FB # ei ! restored port 0 # # ret L1FD6: C9 # # ! # ! singledigit CCIRs indirect to setup shortcuts # ! # ccir_from_digbuf_or_setup: L1FD7: 3A B5 D0 # ld a, [digidx] # cp 1 L1FDA: FE 01 # jp nz, ccir_from_digbuf L1FDC: C2 F3 1F # # ld b, 8 L1FDF: 06 08 # ld ix, cfg_shortcut_0 L1FE1: DD 21 D8 C7 # ld de, 8 L1FE5: 11 08 00 L1FE8: 3A B6 D0 # ld a, [digbuf+0] # 1: L1FEB: B7 # or a # jr z, 1f L1FEC: 28 0D L1FEE: DD 19 # add ix, de L1FF0: 3D # dec a # jr 1b L1FF1: 18 F8 # # ! JUMPOVER # # ccir_from_digbuf: # ld ix, digbuf ! Start of digits L1FF3: DD 21 B6 D0 L1FF7: 3A B5 D0 # ld a, [digidx] L1FFA: 47 # ld b, a ! Digit count # 1: # ld c, -1 ! Prev digit L1FFB: 0E FF # ld d, 0 ! MSB of hl offset L1FFD: 16 00 # 1: L1FFF: DD 7E 00 # ld a, [ix] ! Pick a digit # cp 0xFF L2002: FE FF L2004: C8 # ret z ! Setup has 0xFF and limit, digbuf only count L2005: DD 23 # inc ix L2007: B9 # cp c # jr nz, 3f L2008: 20 02 # ld a, 0xE L200A: 3E 0E # 3: L200C: 4F # ld c, a L200D: 5F # ld e, a L200E: CB 23 # sla e ! two bytes per record in table # ld hl, ccirtbl L2010: 21 AA 32 L2013: 19 # add hl, de # L2014: F3 # di L2015: 7E # ld a, [hl] L2016: 23 # inc hl L2017: D3 21 # out [0x20 + 1], a L2019: 7E # ld a, [hl] L201A: D3 21 # out [0x20 + 1], a # # ld a, 10 ! 10 ms systicks L201C: 3E 0A L201E: 32 28 D0 # ld [ccir_tx_timer], a L2021: FB # ei # 3: L2022: 3A 28 D0 # ld a, [ccir_tx_timer] L2025: B7 # or a # jr nz, 3b L2026: 20 FA # # djnz 1b ! foreach digit L2028: 10 D5 # # ret L202A: C9 # # !---------------------------------------------------------------------- # # step_txpwr_up: L202B: 3A 1F C7 # ld a, [cfg_txpwr] # add 26 L202E: C6 1A # jr nc, 1f L2030: 30 02 # ld a, 0xFF L2032: 3E FF # 1: L2034: 32 1F C7 # ld [cfg_txpwr], a # call update_txpwr L2037: CD 04 32 # jp redraw L203A: C3 DA 23 # # step_txpwr_down: L203D: 3A 1F C7 # ld a, [cfg_txpwr] # sub 26 L2040: D6 1A # jr nc, 1f L2042: 30 02 # ld a, 0 L2044: 3E 00 # 1: L2046: 32 1F C7 # ld [cfg_txpwr], a # call update_txpwr L2049: CD 04 32 # jp redraw L204C: C3 DA 23 # # !====================================================================== # ! # ! Powerdown # ! # # powerdown_now: # L204F: F3 # di # ld a, 0x80 L2050: 3E 80 L2052: D3 70 # out [0x70], a # L2054: 3A 16 C7 # ld a, [cfg_function] L2057: B7 # or a # jr nz, 1f ! Not Std Function -> keep power relay on L2058: 20 04 # # ld a, 0x80 L205A: 3E 80 L205C: D3 01 # out [0x00+1], a ! B0, EXAL low OFF high. # 1: L205E: 76 # halt # jp powerdown_now L205F: C3 4F 20 # # !---------------------------------------------------------------------- # ! # ! MBUS putchar, character in c # ! # # putchar: # ld hl, mbustx_cnt L2062: 21 1A D0 # 1: L2065: 7E # ld a, [hl] L2066: 3C # inc a # jr z, 1b ! wait until not full L2067: 28 FC L2069: F3 # di L206A: 7E # ld a, [hl] L206B: 34 # inc [hl] L206C: B7 # or a # jr z, putchar_start ! tx not active, go start it L206D: 28 0A L206F: 2A 08 D0 # ld hl, [mbustx_wp] L2072: 71 # ld [hl], c L2073: 2C # inc l L2074: 22 08 D0 # ld [mbustx_wp], hl L2077: FB # ei # ret L2078: C9 # putchar_start: L2079: 79 # ld a, c L207A: D3 11 # out [0x10+1], a # ld a, 25 L207C: 3E 19 L207E: 32 1C D0 # ld [mbus_timer], a L2081: FB # ei # ret L2082: C9 # # iputc: L2083: F5 # push af L2084: 3A 1A D0 # ld a, [mbustx_cnt] L2087: 3C # inc a # jr z, 1f ! full L2088: 28 12 L208A: 32 1A D0 # ld [mbustx_cnt], a L208D: 3D # dec a # jr z, 2f ! tx not active, go start it L208E: 28 0E L2090: F1 # pop af L2091: E5 # push hl L2092: 2A 08 D0 # ld hl, [mbustx_wp] L2095: 77 # ld [hl], a L2096: 2C # inc l L2097: 22 08 D0 # ld [mbustx_wp], hl L209A: E1 # pop hl # ret L209B: C9 # 1: L209C: F1 # pop af # ret L209D: C9 # 2: L209E: F1 # pop af L209F: D3 11 # out [0x10+1], a # ld a, 25 L20A1: 3E 19 L20A3: 32 1C D0 # ld [mbus_timer], a # ret L20A6: C9 # # # getchar: # ld hl, mbusrx_cnt L20A7: 21 1B D0 L20AA: 7E # ld a, [hl] L20AB: B7 # or a # jr z, getchar L20AC: 28 F9 L20AE: F3 # di L20AF: 35 # dec [hl] L20B0: 2A 02 D0 # ld hl, [mbusrx_rp] L20B3: 7E # ld a, [hl] L20B4: 2C # inc l L20B5: 22 02 D0 # ld [mbusrx_rp], hl L20B8: FB # ei # ret L20B9: C9 # # !====================================================================== # # slight_delay: L20BA: 00 # nop L20BB: 00 # nop L20BC: 00 # nop L20BD: 00 # nop L20BE: 00 # nop # ret L20BF: C9 # # keypad: # L20C0: 3A ED D0 # ld a, [cu_is_alfa] L20C3: B7 # or a # jp z, 1f L20C4: CA DE 20 # # call keypad_cu58af L20C7: CD DD 2A L20CA: C8 # ret z # L20CB: F5 # push af # ld a, 0 L20CC: 3E 00 L20CE: 32 1F D0 # ld [key_timer], a L20D1: 32 B2 D0 # ld [key_time], a # call cu_manipulated L20D4: CD 42 0B # call blip L20D7: CD 75 22 L20DA: F1 # pop af # # jp 2f L20DB: C3 3D 21 # 1: # # ld a, 0 ! CU53AN then L20DE: 3E 00 L20E0: 32 1F D0 # ld [key_timer], a L20E3: 32 B2 D0 # ld [key_time], a # # call cu_manipulated L20E6: CD 42 0B # call blip L20E9: CD 75 22 # # ! # ! strobe the data into shifter # ! # ld a, (0x08 | 0x20) L20EC: 3E 28 L20EE: D3 80 # out [0x80], a # call slight_delay L20F0: CD BA 20 # # ld a, (0x08 | 0) L20F3: 3E 08 L20F5: D3 80 # out [0x80], a # call slight_delay L20F7: CD BA 20 # # ld a, (0x08 | 0) | 0x40 L20FA: 3E 48 L20FC: D3 80 # out [0x80], a # call slight_delay L20FE: CD BA 20 # # ld a, (0x08 | 0) L2101: 3E 08 L2103: D3 80 # out [0x80], a # call slight_delay L2105: CD BA 20 # # ld a, (0x08 | 0x20) L2108: 3E 28 L210A: D3 80 # out [0x80], a # call slight_delay L210C: CD BA 20 # call slight_delay L210F: CD BA 20 # L2112: DB 01 # in a, [0x00+1] ! from LDR # and 0x08 L2114: E6 08 L2116: 32 B1 D0 # ld [dark], a # # ! # ! shift 5 keycode bits to l # ! # ld c, 0 ! collect bits here L2119: 0E 00 # ld b, 5 ! this many L211B: 06 05 # 1: # ld a, (0x08 | 0x20) | 0x40 L211D: 3E 68 L211F: D3 80 # out [0x80], a # call slight_delay L2121: CD BA 20 # # ld a, (0x08 | 0x20) L2124: 3E 28 L2126: D3 80 # out [0x80], a # call slight_delay L2128: CD BA 20 # call slight_delay L212B: CD BA 20 # L212E: DB 01 # in a, [0x00+1] # and 0x08 L2130: E6 08 # sub 1 L2132: D6 01 L2134: CB 11 # rl c # djnz 1b L2136: 10 E5 # # ld hl, keytbl_cu53an ! table L2138: 21 62 32 L213B: 09 # add hl, bc ! b is already 0 from djnz L213C: 7E # ld a, [hl] ! map code to character # # 2: # # ! common again for CU53 and CU58 # L213D: 32 AF D0 # ld [lastkey], a # # cp '*' L2140: FE 2A # jr z, 1f ! * does not repeat L2142: 28 06 # cp 'B' L2144: FE 42 # jr z, 1f ! thingy does not either L2146: 28 02 # jr 2f L2148: 18 04 # 1: L214A: 32 B0 D0 # ld [key], a # ret L214D: C9 # 2: # cp 10 ! digit ? L214E: FE 0A # jr nc, 1f L2150: 30 6D # ! Yes, downtime determines 0..9 or function. L2152: 32 AE D0 # ld [lastdigit], a # L2155: 3A B3 D0 # ld a, [pttdn] L2158: B7 # or a L2159: 3A AE D0 # ld a, [lastdigit] # jr nz, 1b ! PTT down, digits are DTMF. No repeat L215C: 20 EC # L215E: 3A 10 D1 # ld a, [menu_active] L2161: B7 # or a L2162: 3A AE D0 # ld a, [lastdigit] # jr nz, 5f ! digits in menu L2165: 20 28 # # cp 1 L2167: FE 01 # jr z, 2f L2169: 28 44 # cp 4 L216B: FE 04 # jr z, 2f L216D: 28 40 # # cp 7 L216F: FE 07 # jr z, 3f L2171: 28 2C # cp 8 L2173: FE 08 # jr z, 3f L2175: 28 28 # cp 9 L2177: FE 09 # jr z, 3f L2179: 28 24 # cp 0 L217B: FE 00 # jr z, 3f L217D: 28 20 # 4: # ld a, 255 ! 2356 memory/freq adjust L217F: 3E FF L2181: 32 21 D0 # ld [key_blips], a # ld a, 50 L2184: 3E 32 L2186: 32 1F D0 # ld [key_timer], a # ld a, 33 L2189: 3E 21 L218B: 32 20 D0 # ld [key_speed], a # ret L218E: C9 # 5: # ld a, 255 ! digits in menu, scroll letters L218F: 3E FF L2191: 32 21 D0 # ld [key_blips], a # ld a, 50 L2194: 3E 32 L2196: 32 1F D0 # ld [key_timer], a # ld a, 66 L2199: 3E 42 L219B: 32 20 D0 # ld [key_speed], a # ret L219E: C9 # 3: # ld a, 2 ! 7890 default buttons L219F: 3E 02 L21A1: 32 21 D0 # ld [key_blips], a # ld a, 50 L21A4: 3E 32 L21A6: 32 1F D0 # ld [key_timer], a # ld a, 100 L21A9: 3E 64 L21AB: 32 20 D0 # ld [key_speed], a # ret L21AE: C9 # 2: # ld a, 8 ! 14 squelch adjust L21AF: 3E 08 L21B1: 32 20 D0 # ld [key_speed], a # ld a, 50 L21B4: 3E 32 L21B6: 32 1F D0 # ld [key_timer], a # ld a, 1 L21B9: 3E 01 L21BB: 32 21 D0 # ld [key_blips], a # ret L21BE: C9 # 1: L21BF: 32 B0 D0 # ld [key], a # # cp '+' L21C2: FE 2B # jr z, 1f L21C4: 28 2C # cp '-' L21C6: FE 2D # jr z, 1f L21C8: 28 28 # # cp 'S' L21CA: FE 53 # jr z, 2f L21CC: 28 14 # cp 'R' L21CE: FE 52 # jr z, 2f L21D0: 28 10 # # ld a, 100 L21D2: 3E 64 L21D4: 32 1F D0 # ld [key_timer], a # ld a, 100 L21D7: 3E 64 L21D9: 32 20 D0 # ld [key_speed], a # ld a, 4 L21DC: 3E 04 L21DE: 32 21 D0 # ld [key_blips], a # ret ! Not digit nor +/- L21E1: C9 # 2: # ld a, 100 L21E2: 3E 64 L21E4: 32 1F D0 # ld [key_timer], a # ld a, 100 L21E7: 3E 64 L21E9: 32 20 D0 # ld [key_speed], a # ld a, 3 L21EC: 3E 03 L21EE: 32 21 D0 # ld [key_blips], a # ret L21F1: C9 # 1: # ld a, 50 L21F2: 3E 32 L21F4: 32 1F D0 # ld [key_timer], a # ld a, 20 L21F7: 3E 14 L21F9: 32 20 D0 # ld [key_speed], a # ld a, 255 L21FC: 3E FF L21FE: 32 21 D0 # ld [key_blips], a # ret L2201: C9 # # typematic: L2202: 3A 20 D0 # ld a, [key_speed] L2205: 32 1F D0 # ld [key_timer], a L2208: 3A B2 D0 # ld a, [key_time] L220B: 3C # inc a # jr z, 1f L220C: 28 03 L220E: 32 B2 D0 # ld [key_time], a # 1: L2211: 3A 21 D0 # ld a, [key_blips] L2214: B7 # or a # jr z, 1f L2215: 28 07 L2217: 3D # dec a L2218: 32 21 D0 # ld [key_blips], a # call blip L221B: CD 75 22 # 1: L221E: 3A AF D0 # ld a, [lastkey] # cp 10 L2221: FE 0A # jr nc, 1f L2223: 30 02 # or 0x80 ! Repeating digit is a function. L2225: F6 80 # 1: L2227: 32 B0 D0 # ld [key], a # ld a, -1 L222A: 3E FF L222C: 32 AE D0 # ld [lastdigit], a # ret L222F: C9 # # !====================================================================== # ! # ! 4032000 / N = LPF CLK LP_3600HZ = 4032000 / 3600 / 100 # ! 4032000 / N = Hz * 100 # ! 4032000 / (Hz * 100) = N # ! 40320 / Hz = N Hz 2000....5000 # ! 2016 / (Hz / 20) = N Hz/20 0...255 # # init_LPF: # ld c, 20 ! /= 20, scale Hz L2230: 0E 14 # ld a, 0 L2232: 3E 00 L2234: 2A 3D C7 # ld hl, [cfg_lpf_hz] ! binary Hz in AHL L2237: 22 14 D1 # ld [lpf_hz_now], hl # call div248 ! Hz/20 in L (5100/20 = 255, max Hz) L223A: CD 31 3B # L223D: 4D # ld c, l ! /= (Hz/20) # ld a, 0 L223E: 3E 00 # ld hl, 2016 L2240: 21 E0 07 # call div248 L2243: CD 31 3B # # ld a, 0x00 | 0x30 | 0x06 L2246: 3E 36 L2248: D3 23 # out [0x20 + 3], a L224A: 7D # ld a, l L224B: D3 20 # out [0x20 + 0], a L224D: 7C # ld a, h L224E: D3 20 # out [0x20 + 0], a # ret L2250: C9 # # update_LPF: # ld ix, cfg_lpf_hz L2251: DD 21 3D C7 L2255: 3A 14 D1 # ld a, [lpf_hz_now + 0] L2258: DD BE 00 # cp [ix+0] # jp nz, init_LPF L225B: C2 30 22 L225E: 3A 15 D1 # ld a, [lpf_hz_now + 1] L2261: DD BE 01 # cp [ix+1] # jp nz, init_LPF L2264: C2 30 22 # ret L2267: C9 # # !------------------- # ! marker and tx tones # # init_timer1: # ld a, 0x40 | 0x30 | 0x06 L2268: 3E 76 L226A: D3 23 # out [0x20 + 3], a # ! and ... # silence_timer1: # ld a, 0x04 L226C: 3E 04 L226E: D3 21 # out [0x20 + 1], a ! But it leaks anyway, highest possible # ld a, 0x00 L2270: 3E 00 L2272: D3 21 # out [0x20 + 1], a ! tone causes the least harm... brrh. # ret L2274: C9 # # blip: ! from keypad L2275: 3A 21 C7 # ld a, [cfg_key_blip_pitch] L2278: B7 # or a L2279: C8 # ret z # L227A: E5 # push hl L227B: D5 # push de # call blip_hz L227C: CD A4 22 # ld d, 3 ! length in ticks L227F: 16 03 # call start_marker_tone L2281: CD 1F 23 L2284: D1 # pop de L2285: E1 # pop hl # ret L2286: C9 # # serv_blip: ! from closing squelch L2287: 3A 8C C9 # ld a, [cfg_serv_blip_pitch] L228A: B7 # or a L228B: C8 # ret z # L228C: E5 # push hl L228D: D5 # push de # call blip_hz L228E: CD A4 22 # ld d, 3 ! length in ticks L2291: 16 03 # call start_marker_tone L2293: CD 1F 23 L2296: D1 # pop de L2297: E1 # pop hl # ret L2298: C9 # # bleep: L2299: E5 # push hl # ld hl, MT_300HZ L229A: 21 80 34 # ld d, 100 L229D: 16 64 # call start_marker_tone L229F: CD 1F 23 # L22A2: E1 # pop hl # ret L22A3: C9 # # blip_hz: ! input A = 1, 2, ..., set HL to MT_xxxHZ # # ld hl, MT_500HZ L22A4: 21 80 1F L22A7: 3D # dec a ! --1 L22A8: C8 # ret z ! == 0 # ld hl, MT_1000HZ L22A9: 21 C0 0F L22AC: 3D # dec a L22AD: C8 # ret z # ld hl, MT_1500HZ L22AE: 21 80 0A L22B1: 3D # dec a L22B2: C8 # ret z # ld hl, MT_2000HZ L22B3: 21 E0 07 L22B6: 3D # dec a L22B7: C8 # ret z # ld hl, MT_2500HZ L22B8: 21 4C 06 L22BB: 3D # dec a L22BC: C8 # ret z # ld hl, MT_3000HZ L22BD: 21 40 05 L22C0: 3D # dec a L22C1: C8 # ret z # ld hl, MT_3500HZ L22C2: 21 80 04 L22C5: 3D # dec a L22C6: C8 # ret z # # ld hl, MT_500HZ ! out of range L22C7: 21 80 1F # ret L22CA: C9 # # ding: # L22CB: C5 # push bc # L22CC: F3 # di # call stop_marker_tone L22CD: CD 34 23 L22D0: 3A 00 D0 # ld a, [output_0] L22D3: F5 # push af # and ~0x10 L22D4: E6 EF L22D6: D3 60 # out [0x60], a # and ~0x08 L22D8: E6 F7 L22DA: D3 60 # out [0x60], a # or 0x07 L22DC: F6 07 L22DE: D3 60 # out [0x60], a L22E0: 32 00 D0 # ld [output_0], a # ld a, 1 L22E3: 3E 01 L22E5: 32 CA D0 # ld [mton], a L22E8: FB # ei # # ld b, 5 L22E9: 06 05 # 2: L22EB: E5 # push hl # ld hl, MT_1200HZ L22EC: 21 20 0D # ld d, 5 L22EF: 16 05 # call start_marker_tone L22F1: CD 1F 23 L22F4: E1 # pop hl # 1: L22F5: 3A 1E D0 # ld a, [mt_timer] L22F8: B7 # or a # jr nz, 1b L22F9: 20 FA # L22FB: E5 # push hl # ld hl, MT_1400HZ L22FC: 21 40 0B # ld d, 5 L22FF: 16 05 # call start_marker_tone L2301: CD 1F 23 L2304: E1 # pop hl # 1: L2305: 3A 1E D0 # ld a, [mt_timer] L2308: B7 # or a # jr nz, 1b L2309: 20 FA # # djnz 2b L230B: 10 DE # L230D: F3 # di L230E: F1 # pop af L230F: 32 00 D0 # ld [output_0], a L2312: D3 60 # out [0x60], a # ld a, 0 L2314: 3E 00 L2316: 32 CA D0 # ld [mton], a L2319: FB # ei # L231A: C1 # pop bc # # call open_selective L231B: CD 6B 23 # ret L231E: C9 # # ! # ! Duration in 10ms in d, pitch in hl # ! # start_marker_tone: # # ld a, 0 L231F: 3E 00 L2321: 32 1E D0 # ld [mt_timer], a # L2324: 7D # ld a, l L2325: D3 21 # out [0x20 + 1], a L2327: 7C # ld a, h L2328: D3 21 # out [0x20 + 1], a ! pitch # # ld hl, output_0 L232A: 21 00 D0 L232D: CB F6 # set 6, [hl] # L232F: 7A # ld a, d L2330: 32 1E D0 # ld [mt_timer], a ! duration in 10ms units # # ret L2333: C9 # # stop_marker_tone: # # ld a, 0 L2334: 3E 00 L2336: 32 1E D0 # ld [mt_timer], a # L2339: 3A 00 D0 # ld a, [output_0] # and ~0x40 L233C: E6 BF L233E: 32 00 D0 # ld [output_0], a L2341: D3 60 # out [0x60], a ! Cut tone from local audio # # call silence_timer1 L2343: CD 6C 22 # # ret L2346: C9 # # !====================================================================== # # resync_squelch_if_forced: L2347: F3 # di L2348: 3A 02 C0 # ld a, [squelch_forced] L234B: B7 # or a # call nz, audioc_on L234C: C4 07 07 L234F: FB # ei # ret L2350: C9 # # force_squelch: L2351: F3 # di # ld a, 1 L2352: 3E 01 L2354: 32 02 C0 # ld [squelch_forced], a # call audioc_on L2357: CD 07 07 L235A: FB # ei # ret L235B: C9 # # unforce_squelch: L235C: F3 # di L235D: 3A C9 D0 # ld a, [squelch_open] L2360: B7 # or a # call z, audioc_off L2361: CC 12 07 # ld a, 0 L2364: 3E 00 L2366: 32 02 C0 # ld [squelch_forced], a L2369: FB # ei # ret L236A: C9 # # open_selective: L236B: F3 # di L236C: 3A 2C D0 # ld a, [squelch_muted] L236F: CB 4F # bit 1, a ! selective was on ? # jr z, 1f L2371: 28 0E # and ~2 ! bit1 selective muting L2373: E6 FD L2375: 32 2C D0 # ld [squelch_muted], a # jr nz, 1f ! mute had other bits active L2378: 20 07 L237A: 3A C9 D0 # ld a, [squelch_open] L237D: B7 # or a # call nz, audioc_on L237E: C4 07 07 # 1: L2381: FB # ei # ret L2382: C9 # # restore_squelch_scanner: L2383: F3 # di L2384: 3A 2C D0 # ld a, [squelch_muted] # and ~1 ! bit0 scanner muting L2387: E6 FE L2389: 32 2C D0 # ld [squelch_muted], a # jr nz, 1f ! mute did not get all zero L238C: 20 07 L238E: 3A C9 D0 # ld a, [squelch_open] L2391: B7 # or a # call nz, audioc_on L2392: C4 07 07 # 1: L2395: FB # ei # ret L2396: C9 # # mute_squelch_scanner: L2397: F3 # di L2398: 3A 2C D0 # ld a, [squelch_muted] # or 1 L239B: F6 01 L239D: 32 2C D0 # ld [squelch_muted], a # call audioc_off ! XXX and squelch_is_closed ? L23A0: CD 12 07 L23A3: FB # ei # ret L23A4: C9 # # mute_squelch_selective: L23A5: F3 # di L23A6: 3A 2C D0 # ld a, [squelch_muted] # or 2 L23A9: F6 02 L23AB: 32 2C D0 # ld [squelch_muted], a # call audioc_off L23AE: CD 12 07 L23B1: FB # ei # ret L23B2: C9 # # close_squelch: L23B3: 3A 02 C0 # ld a, [squelch_forced] L23B6: B7 # or a L23B7: C0 # ret nz ! Manually forced open. # L23B8: F3 # di # call close_squelch_really L23B9: CD BE 23 L23BC: FB # ei # ret L23BD: C9 # # close_squelch_really: # call cu_serv_off L23BE: CD 6D 24 # call release_EXIN1 L23C1: CD 7D 09 # call squelch_is_closed L23C4: CD EA 06 # call audioc_off L23C7: CD 12 07 # ret L23CA: C9 # # !====================================================================== # ! # ! Build up display buffer # ! # # ! PVQQSS # ! MM_-FFFFFF # ! # ! PV_QQ_SS # ! MM-FFFFFF # # force_redraw: # ld a, 0 L23CB: 3E 00 L23CD: 32 D5 D0 # ld [drawn], a # call redraw L23D0: CD DA 23 # 1: L23D3: 3A D5 D0 # ld a, [drawn] L23D6: B7 # or a # jr z, 1b L23D7: 28 FA # ret L23D9: C9 # # redraw: # # ld a, 0 L23DA: 3E 00 L23DC: 32 AB D0 # ld [dpx_ind_flags], a # # call draw_upper_row L23DF: CD D1 25 # call draw_lower_row L23E2: CD CF 27 # call draw_dpx_ind L23E5: CD 73 25 # call draw_ctcss_and_mute_ind L23E8: CD 9A 24 # # ld hl, sir L23EB: 21 AC D0 L23EE: CB CE # set DPYSIR, [hl] # # ret L23F0: C9 # # !---------------------------------------------------------------------- # # light_on_led: # ld hl, indicators L23F1: 21 40 D7 L23F4: 3A ED D0 # ld a, [cu_is_alfa] L23F7: B7 # or a # jr nz, 1f L23F8: 20 03 L23FA: CB EE # set 5, [hl] # ret L23FC: C9 # 1: L23FD: CB D6 # set 2, [hl] # ret L23FF: C9 # # dim_transmit_led: # ld hl, indicators L2400: 21 40 D7 L2403: 3A ED D0 # ld a, [cu_is_alfa] L2406: B7 # or a # jr nz, 1f L2407: 20 03 L2409: CB 96 # res 2, [hl] # ret L240B: C9 # 1: L240C: CB 9E # res 3, [hl] # ret L240E: C9 # # light_transmit_led: # ld hl, indicators L240F: 21 40 D7 L2412: 3A ED D0 # ld a, [cu_is_alfa] L2415: B7 # or a # jr nz, 1f L2416: 20 03 L2418: CB D6 # set 2, [hl] # ret L241A: C9 # 1: L241B: CB DE # set 3, [hl] # ret L241D: C9 # # cu_lights_on_from_squelch: ! XXX differentiate from cu manip L241E: 3A DA C8 # ld a, [cfg_light_sql] L2421: B7 # or a L2422: C8 # ret z # # ! FALLTHRU # # cu_lights_on: # ld a, 0 L2423: 3E 00 L2425: 32 24 D0 # ld [lights_timer], a L2428: 3A 22 C7 # ld a, [cfg_light_seconds] L242B: B7 # or a L242C: C8 # ret z # ld hl, indicators L242D: 21 40 D7 L2430: 3A ED D0 # ld a, [cu_is_alfa] L2433: B7 # or a # jr nz, 1f L2434: 20 05 L2436: CB F6 # set 6, [hl] ! lit the lights. L2438: CB DE # set 3, [hl] # ret L243A: C9 # 1: L243B: CB F6 # set 6, [hl] ! lit the lights. L243D: CB EE # set 5, [hl] # ret L243F: C9 # # ! XXX this has a race # # cu_lights_off: # ld hl, indicators L2440: 21 40 D7 L2443: 3A ED D0 # ld a, [cu_is_alfa] L2446: B7 # or a L2447: 7E # ld a, [hl] # jr nz, 1f L2448: 20 0A L244A: CB B6 # res 6, [hl] ! lit the lights. L244C: CB 9E # res 3, [hl] L244E: CB 5F # bit 3, a L2450: C8 # ret z # jp redraw L2451: C3 DA 23 # 1: L2454: CB B6 # res 6, [hl] ! lit the lights. L2456: CB AE # res 5, [hl] L2458: CB 6F # bit 5, a L245A: C8 # ret z # jp redraw L245B: C3 DA 23 # # cu_serv_on: # ld hl, indicators L245E: 21 40 D7 L2461: 3A ED D0 # ld a, [cu_is_alfa] L2464: B7 # or a # jr nz, 1f L2465: 20 03 L2467: CB E6 # set 4, [hl] # ret L2469: C9 # 1: L246A: CB C6 # set 0, [hl] # ret L246C: C9 # # cu_serv_off: # ld hl, indicators L246D: 21 40 D7 L2470: 3A ED D0 # ld a, [cu_is_alfa] L2473: B7 # or a # jr nz, 1f L2474: 20 03 L2476: CB A6 # res 4, [hl] # ret L2478: C9 # 1: L2479: CB 86 # res 0, [hl] # ret L247B: C9 # # cu_call_on: # ld hl, indicators L247C: 21 40 D7 L247F: 3A ED D0 # ld a, [cu_is_alfa] L2482: B7 # or a # jr nz, 1f L2483: 20 03 L2485: CB CE # set 1, [hl] # ret L2487: C9 # 1: L2488: CB CE # set 1, [hl] # ret L248A: C9 # # cu_call_off: # ld hl, indicators L248B: 21 40 D7 L248E: 3A ED D0 # ld a, [cu_is_alfa] L2491: B7 # or a # jr nz, 1f L2492: 20 03 L2494: CB 8E # res 1, [hl] # ret L2496: C9 # 1: L2497: CB 8E # res 1, [hl] # ret L2499: C9 # # draw_ctcss_and_mute_ind: L249A: 3A ED D0 # ld a, [cu_is_alfa] L249D: B7 # or a L249E: C0 # ret nz ! sorry, no ctcss indicator on AF # # ! CTCSS indicator --------- # L249F: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L24A2: E6 01 L24A4: 3A 3C C7 # ld a, [cfg_ctcss_hz] # jr z, 1f ! which var is used. L24A7: 28 03 L24A9: 3A 1C C0 # ld a, [mem_ctcss_hz] # 1: L24AC: B7 # or a # jr z, 1f ! is the var zero ? L24AD: 28 07 L24AF: 21 0B D7 L24B2: CB FE # ld hl, segments + ((0x5f) / 8); set (0x5f) % 8, [hl] # jr 2f L24B4: 18 05 # 1: L24B6: 21 0B D7 L24B9: CB BE # ld hl, segments + ((0x5f) / 8); res (0x5f) % 8, [hl] # 2: # ! SELECTIVE mute indicator ------------- # L24BB: 3A 2C D0 # ld a, [squelch_muted] # and 2 ! bit1 is selmute L24BE: E6 02 # jr z, 1f L24C0: 28 06 L24C2: 21 0E D7 L24C5: CB DE # ld hl, segments + ((0x73) / 8); set (0x73) % 8, [hl] # ret L24C7: C9 # 1: L24C8: 21 0E D7 L24CB: CB 9E # ld hl, segments + ((0x73) / 8); res (0x73) % 8, [hl] # ret L24CD: C9 # # draw_scanner_icon: L24CE: 3A ED D0 # ld a, [cu_is_alfa] L24D1: B7 # or a # jr nz, 1f L24D2: 20 06 L24D4: 21 0F D7 L24D7: CB FE # ld hl, segments + ((0x7f) / 8); set (0x7f) % 8, [hl] # ret L24D9: C9 # 1: L24DA: 21 03 D7 L24DD: CB D6 # ld hl, segments + (((24 + 2)) / 8); set ((24 + 2)) % 8, [hl] # ret L24DF: C9 # # clear_scanner_icon: L24E0: 3A ED D0 # ld a, [cu_is_alfa] L24E3: B7 # or a # jr nz, 1f L24E4: 20 06 L24E6: 21 0F D7 L24E9: CB BE # ld hl, segments + ((0x7f) / 8); res (0x7f) % 8, [hl] # ret L24EB: C9 # 1: L24EC: 21 03 D7 L24EF: CB 96 # ld hl, segments + (((24 + 2)) / 8); res ((24 + 2)) % 8, [hl] # ret L24F1: C9 # # draw_upper_colons: L24F2: 3A ED D0 # ld a, [cu_is_alfa] L24F5: B7 # or a L24F6: C0 # ret nz L24F7: 21 0C D7 L24FA: CB DE # ld hl, segments + ((0x63) / 8); set (0x63) % 8, [hl] L24FC: 21 09 D7 L24FF: CB FE # ld hl, segments + ((0x4f) / 8); set (0x4f) % 8, [hl] # ret L2501: C9 # # clear_upper_colons: L2502: 3A ED D0 # ld a, [cu_is_alfa] L2505: B7 # or a L2506: C0 # ret nz L2507: 21 0C D7 L250A: CB 9E # ld hl, segments + ((0x63) / 8); res (0x63) % 8, [hl] L250C: 21 09 D7 L250F: CB BE # ld hl, segments + ((0x4f) / 8); res (0x4f) % 8, [hl] # ret L2511: C9 # # draw_lower_colon: L2512: 3A ED D0 # ld a, [cu_is_alfa] L2515: B7 # or a L2516: C0 # ret nz L2517: 21 0A D7 L251A: CB FE # ld hl, segments + ((0x57) / 8); set (0x57) % 8, [hl] # ret L251C: C9 # # clear_lower_colon: L251D: 3A ED D0 # ld a, [cu_is_alfa] L2520: B7 # or a L2521: C0 # ret nz L2522: 21 0A D7 L2525: CB BE # ld hl, segments + ((0x57) / 8); res (0x57) % 8, [hl] # ret L2527: C9 # # draw_clock_icon: L2528: 3A ED D0 # ld a, [cu_is_alfa] L252B: B7 # or a # jr nz, 1f L252C: 20 06 L252E: 21 09 D7 L2531: CB DE # ld hl, segments + ((0x4b) / 8); set (0x4b) % 8, [hl] # ret L2533: C9 # 1: L2534: 21 03 D7 L2537: CB CE # ld hl, segments + (((24 + 1)) / 8); set ((24 + 1)) % 8, [hl] # ret L2539: C9 # # clear_clock_icon: L253A: 3A ED D0 # ld a, [cu_is_alfa] L253D: B7 # or a # jr nz, 1f L253E: 20 06 L2540: 21 09 D7 L2543: CB 9E # ld hl, segments + ((0x4b) / 8); res (0x4b) % 8, [hl] # ret L2545: C9 # 1: L2546: 21 03 D7 L2549: CB 8E # ld hl, segments + (((24 + 1)) / 8); res ((24 + 1)) % 8, [hl] # ret L254B: C9 # # draw_squelch_ind: L254C: 3A ED D0 # ld a, [cu_is_alfa] L254F: B7 # or a # jp nz, 1f L2550: C2 65 25 L2553: 3A 02 C0 # ld a, [squelch_forced] L2556: B7 # or a # jr nz, 2f L2557: 20 06 L2559: 21 0D D7 L255C: CB 9E # ld hl, segments + ((0x6b) / 8); res (0x6b) % 8, [hl] # ret L255E: C9 # 2: L255F: 21 0D D7 L2562: CB DE # ld hl, segments + ((0x6b) / 8); set (0x6b) % 8, [hl] # ret L2564: C9 # 1: L2565: 3A 02 C0 # ld a, [squelch_forced] L2568: B7 # or a # ld a, ' ' L2569: 3E 20 # jr z, 2f L256B: 28 02 # ld a, '*' L256D: 3E 2A # 2: # call dpydig L256F: CD 2D 45 # ret L2572: C9 # # draw_dpx_ind: # L2573: 3A ED D0 # ld a, [cu_is_alfa] L2576: B7 # or a L2577: 3A AB D0 # ld a, [dpx_ind_flags] # jp nz, 3f L257A: C2 B0 25 L257D: CB 47 # bit 0, a !!!!!!! CU53 # jr z, 1f L257F: 28 07 L2581: 21 0A D7 L2584: CB DE # ld hl, segments + ((0x53) / 8); set (0x53) % 8, [hl] # jr 2f L2586: 18 05 # 1: L2588: 21 0A D7 L258B: CB 9E # ld hl, segments + ((0x53) / 8); res (0x53) % 8, [hl] # 2: L258D: CB 4F # bit 1, a # jr z, 1f L258F: 28 07 L2591: 21 08 D7 L2594: CB DE # ld hl, segments + ((0x43) / 8); set (0x43) % 8, [hl] # jr 2f L2596: 18 05 # 1: L2598: 21 08 D7 L259B: CB 9E # ld hl, segments + ((0x43) / 8); res (0x43) % 8, [hl] # 2: L259D: 3A 26 D8 # ld a, [display_buffer_time] L25A0: B7 # or a # jr z, 1f L25A1: 28 07 L25A3: 21 08 D7 L25A6: CB FE # ld hl, segments + ((0x47) / 8); set (0x47) % 8, [hl] # jr 2f L25A8: 18 05 # 1: L25AA: 21 08 D7 L25AD: CB BE # ld hl, segments + ((0x47) / 8); res (0x47) % 8, [hl] # 2: # ret L25AF: C9 # 3: !!!!!!!! ALPHA L25B0: CB 47 # bit 0, a # jr z, 1f L25B2: 28 07 L25B4: 21 03 D7 L25B7: CB E6 # ld hl, segments + (((24 + 4)) / 8); set ((24 + 4)) % 8, [hl] # jr 2f L25B9: 18 05 # 1: L25BB: 21 03 D7 L25BE: CB A6 # ld hl, segments + (((24 + 4)) / 8); res ((24 + 4)) % 8, [hl] # 2: L25C0: CB 4F # bit 1, a # jr z, 1f L25C2: 28 07 L25C4: 21 03 D7 L25C7: CB EE # ld hl, segments + (((24 + 5)) / 8); set ((24 + 5)) % 8, [hl] # jr 2f L25C9: 18 05 # 1: L25CB: 21 03 D7 L25CE: CB AE # ld hl, segments + (((24 + 5)) / 8); res ((24 + 5)) % 8, [hl] # 2: # ret L25D0: C9 # # !---------------------------------------------------------------------- # # draw_upper_row: # # ld de, CU53AN_segs_u_digit_5 L25D1: 11 0F 01 L25D4: 3A ED D0 # ld a, [cu_is_alfa] L25D7: B7 # or a # jr z, 1f L25D8: 28 03 # ld de, (segments + 2 * 2) L25DA: 11 04 D7 # 1: # L25DD: 3A 10 D1 # ld a, [menu_active] L25E0: B7 # or a # jp nz, draw_menu_title L25E1: C2 6B 46 # L25E4: 3A AA D0 # ld a, [call_dpyed] L25E7: B7 # or a # jp nz, draw_call_timer L25E8: C2 3E 26 # # call draw_upper_colons L25EB: CD F2 24 # # ! txpwr volume squelch rssi # # call real_txpwr ! txpwr 0..255 into 0..9 L25EE: CD F1 31 # call dpydiv9 L25F1: CD 1E 45 # L25F4: 3A 01 C0 # ld a, [volume] ! volume # call dpydig L25F7: CD 2D 45 # L25FA: 3A ED D0 # ld a, [cu_is_alfa] ! audio whereto if alfa handset L25FD: B7 # or a # jr z, 2f L25FE: 28 15 L2600: 3A 00 C0 # ld a, [audio_dst] # cp 1 L2603: FE 01 # ld l, '>' L2605: 2E 3E # jr z, 1f L2607: 28 08 # cp 2 L2609: FE 02 # ld l, '<' L260B: 2E 3C # jr z, 1f L260D: 28 02 # ld l, ' ' L260F: 2E 20 # 1: L2611: 7D # ld a, l # call dpydig L2612: CD 2D 45 # 2: # L2615: 3A 27 C7 # ld a, [cfg_squelch_level] ! squelch setting 0..255 into 0..99 # call dpydiv99 L2618: CD 17 45 # # call draw_squelch_ind ! icon or a star character to cursor++ L261B: CD 4C 25 # L261E: 3A 16 C7 # ld a, [cfg_function] # cp 1 L2621: FE 01 # jp z, 1f L2623: CA 32 26 L2626: 3A CC D0 # ld a, [txon] ! srssi if rx/rptr; txpwr if normal tx L2629: B7 # or a # jr z, 1f L262A: 28 06 # call real_txpwr L262C: CD F1 31 # jp dpydiv99 ! upper row complete L262F: C3 17 45 # 1: L2632: 3A CE D0 # ld a, [srssi] # jp dpydiv99 ! upper row complete L2635: C3 17 45 # # !---------------------------------------------------------------------- # # toggle_upper_colons: # jp nz, draw_upper_colons L2638: C2 F2 24 # jp clear_upper_colons L263B: C3 02 25 # # draw_call_timer: L263E: 3A 36 D8 # ld a, [call_timer_sec] # and 1 L2641: E6 01 # call toggle_upper_colons L2643: CD 38 26 # L2646: 3A ED D0 # ld a, [cu_is_alfa] L2649: B7 # or a # jr z, 1f L264A: 28 0A # # ld a, ' ' L264C: 3E 20 # call dpydig L264E: CD 2D 45 # ld a, ' ' L2651: 3E 20 # call dpydig L2653: CD 2D 45 # 1: L2656: 3A 34 D8 # ld a, [call_timer_hour] # call dpyval99 L2659: CD 00 45 L265C: 3A 35 D8 # ld a, [call_timer_min] # call dpyval99 L265F: CD 00 45 L2662: 3A 36 D8 # ld a, [call_timer_sec] # call dpyval99 L2665: CD 00 45 # # ret L2668: C9 # # !---------------------------------------------------------------------- # # draw_digit_buffer: # ld ix, digbuf L2669: DD 21 B6 D0 L266D: 3A B5 D0 # ld a, [digidx] # cp 10 ! positions max L2670: FE 0A # jr c, 1f L2672: 38 02 # ld a, 10 L2674: 3E 0A # 1: L2676: 47 # ld b, a ! to show L2677: ED 44 # neg # add 10 L2679: C6 0A L267B: 4F # ld c, a ! to blank # 1: L267C: DD 7E 00 # ld a, [ix] L267F: DD 23 # inc ix # call dpydig L2681: CD 2D 45 # djnz 1b L2684: 10 F6 # L2686: 79 # ld a, c L2687: B7 # or a L2688: C8 # ret z ! no blanks needed L2689: 47 # ld b, a # ld a, '_' L268A: 3E 5F # call dpydig L268C: CD 2D 45 L268F: 05 # dec b L2690: C8 # ret z # 1: # ld a, ' ' L2691: 3E 20 # call dpydig L2693: CD 2D 45 # djnz 1b L2696: 10 F9 # # ret L2698: C9 # # !---------------------------------------------------------------------- # # draw_memory_info: # L2699: 3A 16 C7 # ld a, [cfg_function] # cp 1 L269C: FE 01 # jp nz, 1f L269E: C2 B0 26 # ld a, 'r' ! rP_ L26A1: 3E 72 # call dpydig L26A3: CD 2D 45 # ld a, 'P' L26A6: 3E 50 # call dpydig L26A8: CD 2D 45 # ld a, ' ' L26AB: 3E 20 # jp dpydig ! and ret L26AD: C3 2D 45 # 1: L26B0: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L26B3: E6 01 # jp nz, 1f L26B5: C2 C7 26 # ld a, ' ' ! blank out memory info digits L26B8: 3E 20 # call dpydig L26BA: CD 2D 45 # ld a, ' ' L26BD: 3E 20 # call dpydig L26BF: CD 2D 45 # ld a, ' ' ! and status blanked L26C2: 3E 20 # jp dpydig ! and ret L26C4: C3 2D 45 # 1: # ! Active memory exists # L26C7: 3A 07 C0 # ld a, [mem_idx] # call dpyval99 ! memory number, 2 digits L26CA: CD 00 45 # # ld b, '=' L26CD: 06 3D L26CF: 3A 06 C0 # ld a, [mem_flags] # and MEM_HIDDEN L26D2: E6 02 # jr nz, 1f ! = if hidden set L26D4: 20 0B # ld b, '-' L26D6: 06 2D L26D8: 3A 06 C0 # ld a, [mem_flags] # and MEM_SCANNABLE L26DB: E6 04 # jr z, 1f ! - if scannable clear L26DD: 28 02 # ld b, ' ' L26DF: 06 20 # 1: L26E1: 78 # ld a, b # jp dpydig ! memory status L26E2: C3 2D 45 # # set_dpx_ind_from_rx_tx_freq: L26E5: D5 # push de # call compare_tx_rx_freq L26E6: CD 98 0F L26E9: D1 # pop de L26EA: C8 # ret z ! tx = rx # ld a, 2 L26EB: 3E 02 # jp nc, 1f ! tx above L26ED: D2 F2 26 # ld a, 1 ! tx below L26F0: 3E 01 # 1: L26F2: 32 AB D0 # ld [dpx_ind_flags], a # ret L26F5: C9 # # !---------------------------------------------------------------------- # # no_feedback: # ld iy, 0 L26F6: FD 21 00 00 L26FA: FD E5 # push iy # 2: L26FC: FD E1 # pop iy L26FE: FD 22 A8 D0 # ld [adj_feedback], iy # ret L2702: C9 # # feedback_reject: # call 2b L2703: CD FC 26 L2706: 20 72 45 4A 45 43 74 45 64 20 # .ascii " rEJECtEd " # # feedback_cleared: # call 2b L2710: CD FC 26 L2713: 20 20 43 4C 45 41 72 45 64 20 # .ascii " CLEArEd " # # feedback_default: # call 2b L271D: CD FC 26 L2720: 20 20 64 45 46 41 55 4C 74 20 # .ascii " dEFAULt " # # feedback_stored: # call 2b L272A: CD FC 26 L272D: 20 20 20 53 74 6F 72 45 64 20 # .ascii " StorEd " # # feedback_shift_neg: # call 2b L2737: CD FC 26 L273A: 53 48 49 46 74 20 4E 45 47 20 # .ascii "SHIFt NEG " # # feedback_shift_pos: # call 2b L2744: CD FC 26 L2747: 53 48 49 46 74 20 50 4F 53 20 # .ascii "SHIFt POS " # # feedback_split: # call 2b L2751: CD FC 26 L2754: 53 50 4C 49 74 20 20 20 20 20 # .ascii "SPLIt " # # feedback_let_go_the_darn_button: # call 2b L275E: CD FC 26 L2761: 41 4C 4C 72 49 47 48 74 20 20 # .ascii "ALLrIGHt " # # feedback_lobatt: # call 2b L276B: CD FC 26 L276E: 20 4C 6F 20 62 61 74 74 20 20 # .ascii " Lo batt " # # feedback_hold: # call 2b L2778: CD FC 26 L277B: 20 48 6F 6C 64 20 49 74 20 20 # .ascii " Hold It " # # # draw_adjust_feedback: # ld b, 10 L2785: 06 0A L2787: 3A ED D0 # ld a, [cu_is_alfa] L278A: B7 # or a # jp z, 1f L278B: CA 90 27 # ld b, 9 ! sorry L278E: 06 09 # 1: L2790: 7E # ld a, [hl] L2791: 23 # inc hl L2792: E5 # push hl # call dpydig L2793: CD 2D 45 L2796: E1 # pop hl # djnz 1b L2797: 10 F7 # ret L2799: C9 # # !---------------------------------------------------------------------- # draw_scan_mask: # ld b, 10 L279A: 06 0A L279C: 3A ED D0 # ld a, [cu_is_alfa] L279F: B7 # or a # jp z, 1f L27A0: CA A5 27 # ld b, 9 ! sorry L27A3: 06 09 # 1: L27A5: 2A 04 C0 # ld hl, [scan_mask] ! 9876543210FEDCBA bitpositions # ld c, 0xA ! ABC DEF 0 123 456 789 whatever fits L27A8: 0E 0A # 1: L27AA: CB 3C # srl h L27AC: CB 1D # rr l # jr nc, 2f L27AE: 30 0A L27B0: C5 # push bc L27B1: E5 # push hl L27B2: 79 # ld a, c # call dpydig L27B3: CD 2D 45 L27B6: E1 # pop hl L27B7: C1 # pop bc L27B8: 05 # dec b L27B9: C8 # ret z ! filled screen # 2: L27BA: 0C # inc c L27BB: 79 # ld a, c # cp 0x10 L27BC: FE 10 # jr nz, 2f L27BE: 20 02 # ld c, 0 ! after F comes 0 L27C0: 0E 00 # 2: L27C2: 7C # ld a, h L27C3: B5 # or l # jp nz, 1b ! more bits to show L27C4: C2 AA 27 # 1: # ld a, '-' L27C7: 3E 2D # call dpydig ! pad rest with ---------- L27C9: CD 2D 45 # djnz 1b L27CC: 10 F9 # ret L27CE: C9 # # !---------------------------------------------------------------------- # # ! Lower left, 2 digits, lower right, 8 digits # # draw_lower_row: # # ld de, CU53AN_segs_bottom_row L27CF: 11 C9 00 L27D2: 3A ED D0 # ld a, [cu_is_alfa] L27D5: B7 # or a # jr z, 1f L27D6: 28 03 # ld de, (segments + 2 * 11) ! Cursor at lower left L27D8: 11 16 D7 # 1: # # call clear_lower_colon L27DB: CD 1D 25 # L27DE: 3A AA D0 # ld a, [call_dpyed] L27E1: B7 # or a # jp nz, draw_call_notice L27E2: C2 38 28 # L27E5: 2A A8 D0 # ld hl, [adj_feedback] L27E8: 7C # ld a, h L27E9: B5 # or l # jp nz, draw_adjust_feedback L27EA: C2 85 27 # L27ED: 3A B5 D0 # ld a, [digidx] ! digit buffer non-empty ? L27F0: B7 # or a # jp nz, draw_digit_buffer L27F1: C2 69 26 # L27F4: 3A 10 D1 # ld a, [menu_active] L27F7: B7 # or a # jp nz, draw_menu_lower_row L27F8: C2 A6 46 # # ! Cursor still at lower left, scanner running ? # L27FB: 3A 03 C0 # ld a, [scan_on] L27FE: B7 # or a # jp z, 1f ! not scanning, std display L27FF: CA 13 28 L2802: 3A 2F D0 # ld a, [scan_paused] L2805: B7 # or a # jp nz, 1f ! scanner paused, std display L2806: C2 13 28 L2809: 3A 02 C0 # ld a, [squelch_forced] L280C: B7 # or a # jp nz, 1f ! squelch opened, std display L280D: C2 13 28 # # jp draw_scan_mask ! else show mask what are being scanned L2810: C3 9A 27 # 1: # # ! Cursor still at lower left, now memory number and frequency # # call draw_memory_info L2813: CD 99 26 # # call set_dpx_ind_from_rx_tx_freq L2816: CD E5 26 # L2819: 3A ED D0 # ld a, [cu_is_alfa] L281C: 32 13 D1 # ld [yucko_alfa_draw_long_6_only], a # L281F: 3A CC D0 # ld a, [txon] L2822: B7 # or a # jp nz, 1f L2823: C2 2F 28 L2826: 2A 08 C0 L2829: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] # jp draw_long L282C: C3 B3 45 # 1: L282F: 2A 0B C0 L2832: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] # jp draw_long L2835: C3 B3 45 # # # draw_call_notice: # L2838: CD 3D 44 L283B: 43 41 4C 4C 00 # call sput ; .asciz "CALL" # L2840: 3A ED D0 # ld a, [cu_is_alfa] L2843: B7 # or a # jr nz, 1f L2844: 20 05 L2846: CD 3D 44 L2849: 20 00 # call sput ; .asciz " " # 1: L284B: 3A AA D0 # ld a, [call_dpyed] # cp 1 L284E: FE 01 # jp z, 1f L2850: CA 62 28 # cp 2 L2853: FE 02 # jp z, 2f L2855: CA 8E 28 L2858: CD 3D 44 L285B: 20 20 3F 3F 3F 00 # call sput ; .asciz " ???" # ret L2861: C9 # 1: # ld h, HI(fsk_history) L2862: 26 D4 L2864: 3A 0E D1 # ld a, [packet_good] # add 1 ! source address offset L2867: C6 01 L2869: 6F # ld l, a L286A: 7E L286B: 2C L286C: E5 L286D: CD 2D 45 L2870: E1 # ld a, [hl]; inc l; push hl; call dpydig; pop hl L2871: 7E L2872: 2C L2873: E5 L2874: CD 2D 45 L2877: E1 # ld a, [hl]; inc l; push hl; call dpydig; pop hl L2878: 7E L2879: 2C L287A: E5 L287B: CD 2D 45 L287E: E1 # ld a, [hl]; inc l; push hl; call dpydig; pop hl L287F: 7E L2880: 2C L2881: E5 L2882: CD 2D 45 L2885: E1 # ld a, [hl]; inc l; push hl; call dpydig; pop hl L2886: 7E L2887: 2C L2888: E5 L2889: CD 2D 45 L288C: E1 # ld a, [hl]; inc l; push hl; call dpydig; pop hl # ret L288D: C9 # 2: L288E: CD 3D 44 L2891: 20 43 43 49 72 00 # call sput ; .asciz " CCIr" # ret L2897: C9 # # !---------------------------------------------------------------------- # # segment_onoff: # jr nc, segment_off L2898: 30 3F # # segment_on: # L289A: 26 D7 # ld h, HI(segments) ; ASSERT(LO(segments) == 0) L289C: 6F # ld l, a L289D: CB 3D # srl l L289F: CB 3D # srl l L28A1: CB 3D # srl l ! byte ptr ok # # ! Uhhuh. Maybe not so bad as it looks :) # # and 7 ! bit number L28A3: E6 07 # L28A5: FE 04 # cp 4; jr nc, 4f ! >= 4 L28A7: 30 18 L28A9: FE 02 # cp 2; jr nc, 2f ! >= 2, < 4 L28AB: 30 0A L28AD: FE 01 # cp 1; jr nc, 1f ! >= 1, < 2 L28AF: 30 03 L28B1: CB C6 # set 0, [hl] ; ret L28B3: C9 L28B4: CB CE # 1: set 1, [hl] ; ret L28B6: C9 L28B7: FE 03 # 2: cp 3; jr nc, 3f ! >= 3, < 4 L28B9: 30 03 L28BB: CB D6 # set 2, [hl] ; ret L28BD: C9 L28BE: CB DE # 3: set 3, [hl] ; ret L28C0: C9 L28C1: FE 06 # 4: cp 6; jr nc, 6f ! >= 6 L28C3: 30 0A L28C5: FE 05 # cp 5; jr nc, 5f ! >= 5, < 6 L28C7: 30 03 L28C9: CB E6 # set 4, [hl] ; ret L28CB: C9 L28CC: CB EE # 5: set 5, [hl] ; ret L28CE: C9 L28CF: FE 07 # 6: cp 7; jr nc, 7f ! >= 7 L28D1: 30 03 L28D3: CB F6 # set 6, [hl] ; ret L28D5: C9 L28D6: CB FE # 7: set 7, [hl] ; ret L28D8: C9 # # segment_off: # L28D9: 26 D7 # ld h, HI(segments) ; ASSERT(LO(segments) == 0) L28DB: 6F # ld l, a L28DC: CB 3D # srl l L28DE: CB 3D # srl l L28E0: CB 3D # srl l ! byte ptr ok # # ! Uhhuh. Maybe not so bad as it looks :) # # and 7 ! bit number L28E2: E6 07 # L28E4: FE 04 # cp 4; jr nc, 4f ! >= 4 L28E6: 30 18 L28E8: FE 02 # cp 2; jr nc, 2f ! >= 2, < 4 L28EA: 30 0A L28EC: FE 01 # cp 1; jr nc, 1f ! >= 1, < 2 L28EE: 30 03 L28F0: CB 86 # res 0, [hl] ; ret L28F2: C9 L28F3: CB 8E # 1: res 1, [hl] ; ret L28F5: C9 L28F6: FE 03 # 2: cp 3; jr nc, 3f ! >= 3, < 4 L28F8: 30 03 L28FA: CB 96 # res 2, [hl] ; ret L28FC: C9 L28FD: CB 9E # 3: res 3, [hl] ; ret L28FF: C9 L2900: FE 06 # 4: cp 6; jr nc, 6f ! >= 6 L2902: 30 0A L2904: FE 05 # cp 5; jr nc, 5f ! >= 5, < 6 L2906: 30 03 L2908: CB A6 # res 4, [hl] ; ret L290A: C9 L290B: CB AE # 5: res 5, [hl] ; ret L290D: C9 L290E: FE 07 # 6: cp 7; jr nc, 7f ! >= 7 L2910: 30 03 L2912: CB B6 # res 6, [hl] ; ret L2914: C9 L2915: CB BE # 7: res 7, [hl] ; ret L2917: C9 # # !---------------------------------------------------------------------- # # display: # L2918: 3A ED D0 # ld a, [cu_is_alfa] L291B: B7 # or a # jp nz, display_cu58af L291C: C2 A9 2B # # display_cu53an: # # ld hl, segments L291F: 21 00 D7 # # ld a, (0x08 | 0x20 | 0x10) L2922: 3E 38 L2924: D3 80 # out [0x80], a # # ld a, (0x08 | 0x20) ! start 1st half of LCD1 L2926: 3E 28 # call display_group L2928: CD 59 29 # call display_bit_zero L292B: CD 7B 29 # # ld a, (0x08 | 0x20 | 0x10) ! start 1st half of LCD2 L292E: 3E 38 # call display_group L2930: CD 59 29 # call display_bit_zero L2933: CD 7B 29 # # ld a, (0x08 | 0x20) ! start 2nd half of LCD1 L2936: 3E 28 # call display_group L2938: CD 59 29 # call display_bit_one L293B: CD 79 29 # # ld a, (0x08 | 0x20 | 0x10) ! start 2nd half of LCD2 L293E: 3E 38 # call display_group L2940: CD 59 29 # call display_bit_one L2943: CD 79 29 # # ld a, (0x08 | 0x20) ! unselect LATCH L2946: 3E 28 L2948: D3 80 # out [0x80], a # # ld hl, indicators L294A: 21 40 D7 # call display_byte L294D: CD 6B 29 # # ld a, (0x08 | 0x10) ! select LATCH L2950: 3E 18 L2952: D3 80 # out [0x80], a # ld a, (0x08 | 0x20) ! unselect LATCH L2954: 3E 28 L2956: D3 80 # out [0x80], a # # ret L2958: C9 # # display_group: L2959: D3 80 # out [0x80], a # # call display_bit_zero L295B: CD 7B 29 # call display_byte L295E: CD 6B 29 # call display_byte L2961: CD 6B 29 # call display_byte L2964: CD 6B 29 # call display_byte L2967: CD 6B 29 # ret L296A: C9 # # ! # ! 4032000 Hz pclk # ! 0.24 us T-state # ! # display_byte: L296B: 4E # ld c, [hl] L296C: 23 # inc hl # ld b, 8 L296D: 06 08 # 1: L296F: CB 39 # srl c # call display_bit L2971: CD 77 29 # djnz 1b L2974: 10 F9 # ret L2976: C9 # # display_bit: # jr nc, display_bit_zero L2977: 30 02 # display_bit_one: # or 0x80 L2979: F6 80 # display_bit_zero: # or 0x40 L297B: F6 40 L297D: D3 80 # out [0x80], a ! data & clock set 11 T 2.7 us # and ~0x40 L297F: E6 BF L2981: D3 80 # out [0x80], a ! clock edge 2.7 us # and ~0x80 L2983: E6 7F L2985: D3 80 # out [0x80], a ! clear data 2.7 us # # ret L2987: C9 # # !====================================================================== # ! # ! CU58AF things # # cu_now_known: # ld a, 1 L2988: 3E 01 L298A: 32 EC D0 # ld [cu_is_known], a # ld a, 0 L298D: 3E 00 L298F: 32 AD D0 # ld [nosir], a # ret L2992: C9 # # probe_cu58af: # # ! flush /INT from CU58AF, DA floats; no effect on CU53, DA low # # call cu58af_init L2993: CD 7E 2A # call cu58af_init L2996: CD 7E 2A # L2999: DB 12 # in a, [0x10+2] # and 0x20 ! inverted... L299B: E6 20 # jp nz, 1f ! go if DA low, idle state DA low vs. /INT high L299D: C2 AA 29 # # ld a, 1 L29A0: 3E 01 L29A2: 32 ED D0 # ld [cu_is_alfa], a # ld a, 0 L29A5: 3E 00 L29A7: 32 40 D7 # ld [indicators], a # 1: # ret L29AA: C9 # # # step_audio_dst: # L29AB: 3A 00 C0 # ld a, [audio_dst] L29AE: 3C # inc a # cp 3 L29AF: FE 03 # jr c, 1f L29B1: 38 02 # ld a, 0 ! 0, 1 and 2 possible L29B3: 3E 00 # 1: L29B5: 32 00 C0 # ld [audio_dst], a # # call set_vola L29B8: CD 76 0D # ret L29BB: C9 # # dtmf_cu58af: # # ld l, 0x3F ! 1760Hz from button Codes for PCF3312 L29BC: 2E 3F # cp 'B' L29BE: FE 42 # jr z, 1f L29C0: 28 29 # # ld l, 0x1A ! A from STO L29C2: 2E 1A # cp 'S' L29C4: FE 53 # jr z, 1f L29C6: 28 23 # # ld l, 0x1B ! B from RCL L29C8: 2E 1B # cp 'R' L29CA: FE 52 # jr z, 1f L29CC: 28 1D # # ld l, 0x1C ! C from CL L29CE: 2E 1C # cp 'C' L29D0: FE 43 # jr z, 1f L29D2: 28 17 # # ld l, 0x1D ! D from ENT L29D4: 2E 1D # cp 'E' L29D6: FE 45 # jr z, 1f L29D8: 28 11 # # ld l, 0x1E ! * L29DA: 2E 1E # cp '*' L29DC: FE 2A # jr z, 1f L29DE: 28 0B # # ld l, 0x1F ! # L29E0: 2E 1F # cp '#' L29E2: FE 23 # jr z, 1f L29E4: 28 05 # # and 0x0F ! 0..9 digits L29E6: E6 0F # or 0x10 L29E8: F6 10 L29EA: 6F # ld l, a # 1: L29EB: 7D # ld a, l L29EC: 32 EA D0 # ld [dtmf_code], a # ld hl, sir L29EF: 21 AC D0 L29F2: CB D6 # set DTMFSIR, [hl] # ret L29F4: C9 # # stop_dtmf_tone: L29F5: 3A EA D0 # ld a, [dtmf_code] L29F8: B7 # or a L29F9: C8 # ret z ! no tone on # ld a, 0 L29FA: 3E 00 L29FC: 32 EA D0 # ld [dtmf_code], a # ld hl, sir L29FF: 21 AC D0 L2A02: CB D6 # set DTMFSIR, [hl] # ret L2A04: C9 # # i2c_dtmf_tone: # # ld a, 0b00000100 | 0b00010000 | 0b00100000 | 0b00000010 L2A05: 3E 36 # ld c, 0b01111100 L2A07: 0E 7C # call i2c_send_a L2A09: CD 7E 2C # L2A0C: 3A EA D0 # ld a, [dtmf_code] # ld c, 0b01001000 L2A0F: 0E 48 # call i2c_send_a L2A11: CD 7E 2C # # ret L2A14: C9 # # i2c_dtmf: # L2A15: 3A EA D0 # ld a, [dtmf_code] L2A18: B7 # or a # jr nz, i2c_dtmf_tone L2A19: 20 EA # # ld a, 0 ! End tone L2A1B: 3E 00 # ld c, 0b01001000 L2A1D: 0E 48 # call i2c_send_a L2A1F: CD 7E 2C # # ASSERT(0b11100000 == 0xE0) # L2A22: 3A 01 C0 # ld a, [volume] ! 0..9 # cp 0 L2A25: FE 00 # jr z, 2f ! no at all L2A27: 28 4A # sub 1 ! 0..8 L2A29: D6 01 # cp 7 L2A2B: FE 07 # jr c, 1f L2A2D: 38 02 # ld a, 7 ! 0..7 L2A2F: 3E 07 # 1: # and 7 ! -----210 L2A31: E6 07 L2A33: CB 0F # rrc a ! 0-----21 L2A35: CB 0F # rrc a ! 10-----2 L2A37: CB 0F # rrc a ! 210----- # L2A39: 47 # ld b, a ! volume bits in position # L2A3A: 3A 00 C0 # ld a, [audio_dst] # cp 1 L2A3D: FE 01 # jr nz, 1f L2A3F: 20 10 L2A41: F3 # di L2A42: 3A 00 D0 # ld a, [output_0] # or 0x08 L2A45: F6 08 L2A47: 32 00 D0 # ld [output_0], a L2A4A: D3 60 # out [0x60], a L2A4C: FB # ei # ld a, 0b00000001 L2A4D: 3E 01 # jr 2f L2A4F: 18 22 # 1: # cp 2 L2A51: FE 02 # jr nz, 1f L2A53: 20 10 L2A55: F3 # di L2A56: 3A 00 D0 # ld a, [output_0] # or 0x08 L2A59: F6 08 L2A5B: 32 00 D0 # ld [output_0], a L2A5E: D3 60 # out [0x60], a L2A60: FB # ei # ld a, 0b00010000 L2A61: 3E 10 # jr 2f L2A63: 18 0E # 1: L2A65: F3 # di L2A66: 3A 00 D0 # ld a, [output_0] # and ~0x08 L2A69: E6 F7 L2A6B: 32 00 D0 # ld [output_0], a L2A6E: D3 60 # out [0x60], a L2A70: FB # ei # ld a, 0 L2A71: 3E 00 # 2: # xor 0b00000001 L2A73: EE 01 # or 0b00000100 | 0b00001000 L2A75: F6 0C L2A77: B0 # or b # ld c, 0b01111100 L2A78: 0E 7C # call i2c_send_a L2A7A: CD 7E 2C # # ret L2A7D: C9 # # ! # ! before 'ei' # ! # cu58af_init: # # ld c, 0b01000100 L2A7E: 0E 44 # ld b, 0b00000100 | 0b00100000 | 0b01000000 L2A80: 06 64 # call i2c_send L2A82: CD 7F 2C # # ld a, 0 L2A85: 3E 00 L2A87: 32 EA D0 # ld [dtmf_code], a # call i2c_dtmf L2A8A: CD 15 2A # # ld c, 0b01000000 L2A8D: 0E 40 # ld b, 0xFF ! All inputs L2A8F: 06 FF # call i2c_send L2A91: CD 7F 2C # # ld c, 0b01001100 L2A94: 0E 4C # ld b, 0 L2A96: 06 00 # call i2c_send L2A98: CD 7F 2C # # ! # ! LCD needs more attention # ! # call i2c_start L2A9B: CD 64 2C # # ld c, 0b01110000 ! /WR as required. L2A9E: 0E 70 # call i2c_wrbyte L2AA0: CD 21 2C # ld c, 0b11001100 ! C, normal mode, enabled, 1/2 bias, 4 backplanes L2AA3: 0E CC # call i2c_wrbyte L2AA5: CD 21 2C # ld c, 0b10000000 ! C, data pointer rewind L2AA8: 0E 80 # call i2c_wrbyte L2AAA: CD 21 2C # ld c, 0b11100000 ! C, device select 0 L2AAD: 0E E0 # call i2c_wrbyte L2AAF: CD 21 2C # ld c, 0b11111000 ! C, bank select 0 L2AB2: 0E F8 # call i2c_wrbyte L2AB4: CD 21 2C # ld c, 0b01110000 ! /C, blink off L2AB7: 0E 70 # call i2c_wrbyte L2AB9: CD 21 2C # # ld b, 40 L2ABC: 06 28 # 1: # ld c, 0xFF L2ABE: 0E FF # call i2c_wrbyte L2AC0: CD 21 2C # djnz 1b L2AC3: 10 F9 # # call i2c_stop L2AC5: CD 71 2C # # ld c, 0b01000000 L2AC8: 0E 40 # call i2c_recv L2ACA: CD 8F 2C # ld c, 0b01001100 L2ACD: 0E 4C # call i2c_recv ! Flush /int L2ACF: CD 8F 2C # ld c, 0b01000000 L2AD2: 0E 40 # call i2c_recv L2AD4: CD 8F 2C # ld c, 0b01001100 L2AD7: 0E 4C # call i2c_recv ! Flush /int L2AD9: CD 8F 2C # # ret L2ADC: C9 # # keypad_cu58af: # # ! Read columns (and buttons) # # ld c, 0b01000000 L2ADD: 0E 40 # call i2c_recv L2ADF: CD 8F 2C # L2AE2: 4F # ld c, a ! buttons.. # # and 0b00100000 L2AE3: E6 20 # jr z, 2f ! Not pressed (anymore) L2AE5: 28 0D L2AE7: 3A EB D0 # ld a, [spkrbtn] L2AEA: B7 # or a # jr nz, 3f ! Was already pressed L2AEB: 20 0A # ld a, 'K' L2AED: 3E 4B L2AEF: 32 B0 D0 # ld [key], a # ld a, 1 ! Mark as down L2AF2: 3E 01 # 2: L2AF4: 32 EB D0 # ld [spkrbtn], a # 3: # # ld hl, pttdn L2AF7: 21 B3 D0 L2AFA: 79 # ld a, c # and 0b01000000 L2AFB: E6 40 # jr z, 1f L2AFD: 28 04 L2AFF: CB CE # set 1, [hl] # jr 2f L2B01: 18 02 # 1: L2B03: CB 8E # res 1, [hl] # 2: # # ASSERT(0b00000111 == 7) # # ld b, 0 L2B05: 06 00 # L2B07: 79 # ld a, c L2B08: CB 1F # rr a # jr c, 1f ! column 0 L2B0A: 38 2D L2B0C: 04 # inc b L2B0D: CB 1F # rr a # jr c, 1f ! column 1 L2B0F: 38 28 L2B11: 04 # inc b L2B12: CB 1F # rr a # jr c, 1f ! column 2 L2B14: 38 23 # L2B16: F3 # di # ld a, 0 L2B17: 3E 00 L2B19: 32 1F D0 # ld [key_timer], a L2B1C: 32 B4 D0 # ld [keydown], a L2B1F: 32 E9 D0 # ld [last_columns], a L2B22: 3A AE D0 # ld a, [lastdigit] # cp -1 L2B25: FE FF # jr z, 2f L2B27: 28 0B L2B29: 3A AE D0 # ld a, [lastdigit] L2B2C: 32 B0 D0 # ld [key], a ! Quick press of digit. # ld a, -1 L2B2F: 3E FF L2B31: 32 AE D0 # ld [lastdigit], a # 2: L2B34: FB # ei # ld a, 0 ! NOKEY L2B35: 3E 00 L2B37: B7 # or a # ret L2B38: C9 # 1: L2B39: 3A E9 D0 # ld a, [last_columns] L2B3C: A9 # xor c # and 0b00000111 L2B3D: E6 07 L2B3F: 79 # ld a, c L2B40: 32 E9 D0 # ld [last_columns], a L2B43: C8 # ret z # L2B44: C5 # push bc # # ! rows to inputs # # ld c, 0b01001100 L2B45: 0E 4C # ld b, 0xFF L2B47: 06 FF # call i2c_send L2B49: CD 7F 2C # # ! columns to outputs (low) # # ld c, 0b01000000 L2B4C: 0E 40 # ld b, ~0b00000111 L2B4E: 06 F8 # call i2c_send L2B50: CD 7F 2C # # ! Read rows (8 lines) # # ld c, 0b01001100 L2B53: 0E 4C # call i2c_recv L2B55: CD 8F 2C # # ASSERT(0b00000111 == 7) ! 3 keys (columns) per row # ! 0x7F row bits # # ld b, 0 ! 0 L2B58: 06 00 L2B5A: CB 1F # rr a # jr c, 1f L2B5C: 38 28 # # ld b, 3 ! 1 L2B5E: 06 03 L2B60: CB 1F # rr a # jr c, 1f L2B62: 38 22 # # ld b, 6 ! 2 L2B64: 06 06 L2B66: CB 1F # rr a # jr c, 1f L2B68: 38 1C # # ld b, 9 ! 3 L2B6A: 06 09 L2B6C: CB 1F # rr a # jr c, 1f L2B6E: 38 16 # # ld b, 12 ! 4 L2B70: 06 0C L2B72: CB 1F # rr a # jr c, 1f L2B74: 38 10 # # ld b, 15 ! 5 L2B76: 06 0F L2B78: CB 1F # rr a # jr c, 1f L2B7A: 38 0A # # ld b, 18 ! 6 L2B7C: 06 12 L2B7E: CB 1F # rr a # jr c, 1f L2B80: 38 04 # L2B82: C1 # pop bc # ld b, 0 ! NOKEY L2B83: 06 00 L2B85: C5 # push bc # 1: # L2B86: C5 # push bc # # ! columns back to inputs (high) # # ld c, 0b01000000 L2B87: 0E 40 # ld b, 0xFF L2B89: 06 FF # call i2c_send L2B8B: CD 7F 2C # # ! rows back to outputs (low) # # ld c, 0b01001100 L2B8E: 0E 4C # ld b, 0 L2B90: 06 00 # call i2c_send L2B92: CD 7F 2C # # ld c, 0b01000000 L2B95: 0E 40 # call i2c_recv ! Flush int from changes L2B97: CD 8F 2C # L2B9A: C1 # pop bc L2B9B: 78 # ld a, b L2B9C: C1 # pop bc L2B9D: 80 # add b # # ld hl, keytbl_cu58af L2B9E: 21 82 32 # ld b, 0 L2BA1: 06 00 L2BA3: 4F # ld c, a L2BA4: 09 # add hl, bc L2BA5: 7E # ld a, [hl] ! map code to character # cp 'Z' L2BA6: FE 5A # ret L2BA8: C9 # # ! # ! Update LCD and LEDs # ! # display_cu58af: # # ld hl, indicators L2BA9: 21 40 D7 # ld c, 0b01000100 L2BAC: 0E 44 L2BAE: 46 # ld b, [hl] # call i2c_send L2BAF: CD 7F 2C # # call i2c_start L2BB2: CD 64 2C # # ld c, 0b01110000 ! /WR as required. L2BB5: 0E 70 # call i2c_wrbyte L2BB7: CD 21 2C # ld c, 0b10000000 ! C, data pointer rewind L2BBA: 0E 80 # call i2c_wrbyte L2BBC: CD 21 2C # ld c, 0b01100000 ! /C, device select 0 L2BBF: 0E 60 # call i2c_wrbyte L2BC1: CD 21 2C # # ld hl, segments L2BC4: 21 00 D7 # ld b, 40 L2BC7: 06 28 # 1: L2BC9: 4E # ld c, [hl] L2BCA: 23 # inc hl # call i2c_wrbyte L2BCB: CD 21 2C # djnz 1b L2BCE: 10 F9 # # call i2c_stop L2BD0: CD 71 2C # # ret L2BD3: C9 # # ! # ! SDA into carry # ! # # i2c_getbit: L2BD4: DB 01 # in a, [0x00+1] # and 0x08 L2BD6: E6 08 # sub 1 L2BD8: D6 01 # jp i2c_delay L2BDA: C3 02 2C # # ! # ! Pull or release SDA wrt carry. NOT INTERRUPT PROTECTED. # ! # # i2c_putbit: # jp c, i2c_sda_high L2BDD: DA EA 2B # # # # i2c_sda_low: L2BE0: E5 # push hl L2BE1: F3 # di # call pull_down_DCU L2BE2: CD 85 09 L2BE5: FB # ei L2BE6: E1 # pop hl # jp i2c_delay L2BE7: C3 02 2C # # i2c_sda_high: L2BEA: E5 # push hl L2BEB: F3 # di # call release_DCU L2BEC: CD 8D 09 L2BEF: FB # ei L2BF0: E1 # pop hl # jp i2c_delay L2BF1: C3 02 2C # # i2c_scl_low: # ld a, 0x08 L2BF4: 3E 08 L2BF6: D3 80 # out [0x80], a # jp i2c_delay L2BF8: C3 02 2C # # i2c_scl_high: # ld a, 0x08 | 0x40 L2BFB: 3E 48 L2BFD: D3 80 # out [0x80], a # jp i2c_delay L2BFF: C3 02 2C # # ! # ! Call/return implicit delay should be enough... # ! # i2c_delay: # L2C02: D3 90 # out [0x90], a L2C04: D3 90 # out [0x90], a L2C06: D3 90 # out [0x90], a ! some delay anyway... # # # # # # # # # ret L2C08: C9 # # i2c_sendbit: L2C09: CB 21 # sla c ! MSB of C (reg) into C (carry). Hmpfth... # call i2c_putbit L2C0B: CD DD 2B # call i2c_scl_high L2C0E: CD FB 2B # call i2c_scl_low L2C11: CD F4 2B # ret L2C14: C9 # # i2c_recvbit: # call i2c_scl_high L2C15: CD FB 2B # call i2c_getbit L2C18: CD D4 2B L2C1B: CB 11 # rl c # call i2c_scl_low L2C1D: CD F4 2B # ret L2C20: C9 # # ! # ! I2C byte write from reg c # ! # i2c_wrbyte: # # call i2c_sendbit L2C21: CD 09 2C # call i2c_sendbit L2C24: CD 09 2C # call i2c_sendbit L2C27: CD 09 2C # call i2c_sendbit L2C2A: CD 09 2C # # call i2c_sendbit L2C2D: CD 09 2C # call i2c_sendbit L2C30: CD 09 2C # call i2c_sendbit L2C33: CD 09 2C # call i2c_sendbit L2C36: CD 09 2C # # call i2c_sda_high L2C39: CD EA 2B # call i2c_scl_high L2C3C: CD FB 2B # call i2c_getbit ! ack ? L2C3F: CD D4 2B L2C42: F5 # push af # call i2c_scl_low L2C43: CD F4 2B L2C46: F1 # pop af ! Return carry clear if acknowledged. # ret L2C47: C9 # # ! # ! I2C byte read to reg c. One and only one byte at a time. # ! # i2c_rdbyte: # # call i2c_sda_high L2C48: CD EA 2B # # call i2c_recvbit L2C4B: CD 15 2C # call i2c_recvbit L2C4E: CD 15 2C # call i2c_recvbit L2C51: CD 15 2C # call i2c_recvbit L2C54: CD 15 2C # # call i2c_recvbit L2C57: CD 15 2C # call i2c_recvbit L2C5A: CD 15 2C # call i2c_recvbit L2C5D: CD 15 2C # call i2c_recvbit L2C60: CD 15 2C # # ret L2C63: C9 # # i2c_start: # # call i2c_sda_high L2C64: CD EA 2B # call i2c_scl_high L2C67: CD FB 2B # # call i2c_sda_low ! start ... L2C6A: CD E0 2B # call i2c_scl_low ! ... condition. L2C6D: CD F4 2B # # ret L2C70: C9 # # i2c_stop: # # call i2c_scl_low L2C71: CD F4 2B # call i2c_sda_low L2C74: CD E0 2B # # call i2c_scl_high ! stop ... L2C77: CD FB 2B # call i2c_sda_high ! ... condition. L2C7A: CD EA 2B # # ret L2C7D: C9 # # i2c_send_a: L2C7E: 47 # ld b, a # # i2c_send: # L2C7F: CB 81 # res 0, c ! /WR # # call i2c_start L2C81: CD 64 2C # # call i2c_wrbyte ! Send address from C L2C84: CD 21 2C L2C87: 48 # ld c, b # call i2c_wrbyte ! Send data from B L2C88: CD 21 2C # # call i2c_stop L2C8B: CD 71 2C # # ret L2C8E: C9 # # i2c_recv: # L2C8F: CB C1 # set 0, c ! RD # # call i2c_start L2C91: CD 64 2C # # call i2c_wrbyte ! Send address from C L2C94: CD 21 2C # call i2c_rdbyte ! Get data to C L2C97: CD 48 2C # # call i2c_stop L2C9A: CD 71 2C # L2C9D: 79 # ld a, c ! Return in A # ret L2C9E: C9 # # !====================================================================== # ! # ! 25 kHz # ! 512, 12800 / 512 quot 25 rem 0, /= 25 shift 0 # ! # ! 20 kHz # ! 640, 12800 / 640 quot 20 rem 0, /= 20 shift 0 # ! # ! 15 kHz # ! 853, 12800 / 853 quot 15 rem 0, /= 15 shift 0 NOT EXACT XXX # ! # ! 12.5 kHz # ! 1024, 12800 / 1024 quot 12 rem 512 # ! 12800 / 512 quot 25 rem 0, /= 25 shift 1 # ! # ! 10 kHz # ! 1280, 12800 / 1280 quot 10 rem 0, /= 10 shift 0 # ! # ! 6.25 kHz # ! 2048, 12800 / 2048 quot 6 rem 512 # ! 12800 / 1024 quot 12 rem 512 # ! 12800 / 512 quot 25 rem 0, /= 25 shift 2 # ! # ! 3.125 kHz # ! 4096, 12800 / 4096 quot 3 rem 512 # ! 12800 / 2048 quot 6 rem 512 # ! 12800 / 1024 quot 12 rem 512 # ! 12800 / 512 quot 25 rem 0, /= 25 shift 3 # ! # ! 5 kHz # ! 2560, 12800 / 2560 quot 5 rem 0, 5 too small, use /= 10 shift 1 # ! # # changed_frequency: # call parameters_from_band L2C9F: CD C0 2C # call changed_frequency_duplex_okay L2CA2: CD A6 2C # ret L2CA5: C9 # # changed_frequency_duplex_okay: # call temporary_change_rx_freq L2CA6: CD B0 2C # call determine_tx_div L2CA9: CD A9 2D # call set_legal_tx_flag L2CAC: CD 95 2E # ret L2CAF: C9 # # temporary_change_rx_freq: # call close_squelch L2CB0: CD B3 23 # call lookup_rfc ! input: rx_freq L2CB3: CD 43 3B # call update_vco_bands ! input: rx_freq & tx_freq L2CB6: CD A4 30 # call determine_rx_div L2CB9: CD 1C 2E # call load_rxsynth L2CBC: CD 4D 31 # ret L2CBF: C9 # # parameters_from_band: # call locate_band L2CC0: CD 01 2D # call set_channel_step ! input: bandx logical step L2CC3: CD F3 2F # ret L2CC6: C9 # # locate_tx_band: # # ld ix, cfg_band1_start L2CC7: DD 21 48 C7 # ld b, num_bandrecs L2CCB: 06 06 # 1: L2CCD: 2A 0B C0 L2CD0: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2CD3: DD 5E 00 # ld e, [ix+0] L2CD6: DD 56 01 # ld d, [ix+1] L2CD9: DD 4E 02 # ld c, [ix+2] L2CDC: A7 # and a L2CDD: ED 52 # sbc hl, de L2CDF: 99 # sbc c ! current - start # jp c, 2f ! current < start, try next L2CE0: DA F9 2C L2CE3: 2A 0B C0 L2CE6: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2CE9: DD 5E 03 # ld e, [ix+3] L2CEC: DD 56 04 # ld d, [ix+4] L2CEF: DD 4E 05 # ld c, [ix+5] L2CF2: A7 # and a L2CF3: ED 52 # sbc hl, de L2CF5: 99 # sbc c ! current - end # jp c, 3f ! current < end, found ! L2CF6: DA 00 2D # 2: # ld de, size_bandrec L2CF9: 11 0E 00 L2CFC: DD 19 # add ix, de # djnz 1b L2CFE: 10 CD # # ! none of the bands, we now point into defaults for "other, b is 0 # 3: # ret L2D00: C9 # # locate_band: # ld a, 1 L2D01: 3E 01 L2D03: 32 0E C0 # ld [duplex_state], a ! assume duplex # # ld ix, cfg_band1_start L2D06: DD 21 48 C7 # ld b, num_bandrecs L2D0A: 06 06 # 1: L2D0C: 2A 08 C0 L2D0F: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L2D12: DD 5E 00 # ld e, [ix+0] L2D15: DD 56 01 # ld d, [ix+1] L2D18: DD 4E 02 # ld c, [ix+2] L2D1B: A7 # and a L2D1C: ED 52 # sbc hl, de L2D1E: 99 # sbc c ! current - start # jp c, 2f ! current < start, try next L2D1F: DA 38 2D L2D22: 2A 08 C0 L2D25: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L2D28: DD 5E 03 # ld e, [ix+3] L2D2B: DD 56 04 # ld d, [ix+4] L2D2E: DD 4E 05 # ld c, [ix+5] L2D31: A7 # and a L2D32: ED 52 # sbc hl, de L2D34: 99 # sbc c ! current - end # jp c, 3f ! current < end, found ! L2D35: DA 44 2D # 2: # ld de, size_bandrec L2D38: 11 0E 00 L2D3B: DD 19 # add ix, de # djnz 1b L2D3D: 10 CD # # ! none of the bands, we now point into defaults for "other, b is 0 # # ld a, 0 L2D3F: 3E 00 L2D41: 32 0E C0 # ld [duplex_state], a ! default to simplex outside bands # 3: L2D44: 78 # ld a, b L2D45: B7 # or a # jp z, 1f L2D46: CA 4C 2D # ld a, num_bandrecs + 1 L2D49: 3E 07 L2D4B: 90 # sub b ! b is 6....1, want 1...6, 7 - 6 = 1, 7 - 1 = 6 # 1: L2D4C: 32 12 C0 # ld [band], a # L2D4F: DD 6E 06 # ld l, [ix+6] ! offset of duplex shift L2D52: DD 66 07 # ld h, [ix+7] L2D55: DD 7E 08 # ld a, [ix+8] # call set_band_duplex_shift L2D58: CD 6E 2D # L2D5B: DD 7E 09 # ld a, [ix+9] ! rest of band parameters L2D5E: 32 13 C0 # ld [band_step], a L2D61: DD 7E 0A # ld a, [ix+10] L2D64: 32 16 C0 # ld [band_sctail], a L2D67: DD 7E 0B # ld a, [ix+11] L2D6A: 32 17 C0 # ld [band_sclisten], a # # ret L2D6D: C9 # # ! duplex shift is set in band 1..6 only if it is "repeater band" # ! "other" shift does not imply autoduplex # # set_band_duplex_shift: L2D6E: 22 0F C0 L2D71: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a L2D74: B4 # or h L2D75: B5 # or l L2D76: C0 # ret nz ! band has shift # L2D77: 2A A2 C7 L2D7A: 3A A4 C7 # ld hl, [cfg_other_duplex] ; ld a, [(cfg_other_duplex) + 2] L2D7D: 22 0F C0 L2D80: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a # ld a, 0 ! not a duplex band, prepare with "other" shift L2D83: 3E 00 L2D85: 32 0E C0 # ld [duplex_state], a # ret L2D88: C9 # # set_duplex_from_tx_rx: # call compare_tx_rx_freq ! ahl has subtract value, CY and Z also L2D89: CD 98 0F L2D8C: 22 0F C0 L2D8F: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a # ld a, 1 L2D92: 3E 01 # jp nz, 1f L2D94: C2 A5 2D L2D97: 2A A2 C7 L2D9A: 3A A4 C7 # ld hl, [cfg_other_duplex] ; ld a, [(cfg_other_duplex) + 2] L2D9D: 22 0F C0 L2DA0: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a # ld a, 0 L2DA3: 3E 00 # 1: L2DA5: 32 0E C0 # ld [duplex_state], a # ret L2DA8: C9 # # !------------- # ! duplex state 0: tx = rx_freq # ! 1: tx = rx_freq + duplex_shift (sign included in shift) # ! 2: tx = rx_freq - duplex_shift (sign included in shift) # ! 3: tx = tx_freq # # determine_tx_div: L2DA9: 3A 0E C0 # ld a, [duplex_state] # cp 1 L2DAC: FE 01 # jp z, 1f L2DAE: CA CA 2D # cp 2 L2DB1: FE 02 # jp z, 2f L2DB3: CA E3 2D # cp 3 L2DB6: FE 03 # jp z, 3f L2DB8: CA FB 2D L2DBB: 2A 08 C0 L2DBE: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] ! duplex 0, tx follows rx L2DC1: 22 0B C0 L2DC4: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # jp 3f L2DC7: C3 FB 2D # 1: L2DCA: 2A 08 C0 L2DCD: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] ! duplex 1, tx = rx + shift (shift neg. usually) L2DD0: ED 5B 0F C0 L2DD4: 19 L2DD5: ED 5B 11 C0 L2DD9: 8B # ld de, [duplex_shift]; add hl, de; ld de, [(duplex_shift) + 2]; adc e; L2DDA: 22 0B C0 L2DDD: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # jp 3f L2DE0: C3 FB 2D # 2: L2DE3: 2A 08 C0 L2DE6: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] ! duplex 2, tx = rx + shift L2DE9: ED 5B 0F C0 L2DED: A7 L2DEE: ED 52 L2DF0: ED 5B 11 C0 L2DF4: 9B # ld de, [duplex_shift]; and a; sbc hl, de; ld de, [(duplex_shift) + 2]; sbc e; L2DF5: 22 0B C0 L2DF8: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # 3: # ! fallthru # # determine_tx_div_split: # L2DFB: 2A 0B C0 L2DFE: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2E01: ED 4B 18 D0 # ld bc, [tx_bstep_cfg] # call freq2div L2E05: CD 62 30 L2E08: 22 12 D0 L2E0B: 32 14 D0 # ld [tx_divisor], hl ; ld [(tx_divisor) + 2], a L2E0E: ED 4B 18 D0 # ld bc, [tx_bstep_cfg] # call div2freq L2E12: CD 52 30 L2E15: 22 0B C0 L2E18: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a ! and back in aligned # ret L2E1B: C9 # # determine_rx_div: # L2E1C: 2A 08 C0 L2E1F: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L2E22: ED 4B 16 D0 # ld bc, [rx_bstep_cfg] # call freq2div ! linear NA L2E26: CD 62 30 L2E29: 22 0F D0 L2E2C: 32 11 D0 # ld [rx_divisor], hl ; ld [(rx_divisor) + 2], a ! without I/F L2E2F: ED 4B 16 D0 # ld bc, [rx_bstep_cfg] # call div2freq L2E33: CD 52 30 L2E36: 22 08 C0 L2E39: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a ! without I/F # L2E3C: 3A 32 C9 # ld a, [cfg_inj_below] L2E3F: B7 # or a # jp nz, 1f L2E40: C2 61 2E # L2E43: 2A 33 C7 L2E46: 3A 35 C7 # ld hl, [cfg_if_freq] ; ld a, [(cfg_if_freq) + 2] L2E49: ED 4B 16 D0 # ld bc, [rx_bstep_cfg] # call freq2div ! linear NA L2E4D: CD 62 30 L2E50: ED 5B 0F D0 L2E54: 19 L2E55: ED 5B 11 D0 L2E59: 8B # ld de, [rx_divisor]; add hl, de; ld de, [(rx_divisor) + 2]; adc e; L2E5A: 22 0F D0 L2E5D: 32 11 D0 # ld [rx_divisor], hl ; ld [(rx_divisor) + 2], a ! with vco # ret L2E60: C9 # 1: L2E61: 2A 33 C7 L2E64: 3A 35 C7 # ld hl, [cfg_if_freq] ; ld a, [(cfg_if_freq) + 2] L2E67: ED 4B 16 D0 # ld bc, [rx_bstep_cfg] # call freq2div ! linear NA L2E6B: CD 62 30 L2E6E: 22 28 D8 L2E71: 32 2A D8 # ld [if_tmp], hl ; ld [(if_tmp) + 2], a L2E74: 2A 0F D0 L2E77: 3A 11 D0 # ld hl, [rx_divisor] ; ld a, [(rx_divisor) + 2] L2E7A: ED 5B 28 D8 L2E7E: A7 L2E7F: ED 52 L2E81: ED 5B 2A D8 L2E85: 9B # ld de, [if_tmp]; and a; sbc hl, de; ld de, [(if_tmp) + 2]; sbc e; L2E86: 22 0F D0 L2E89: 32 11 D0 # ld [rx_divisor], hl ; ld [(rx_divisor) + 2], a ! with vco # ret L2E8C: C9 # # get_scan_tail: L2E8D: 3A 16 C0 # ld a, [band_sctail] # ret L2E90: C9 # get_scan_patience: L2E91: 3A 17 C0 # ld a, [band_sclisten] # ret L2E94: C9 # # set_legal_tx_flag: L2E95: 2A 42 C7 L2E98: 3A 44 C7 # ld hl, [cfg_tx_band_start] ; ld a, [(cfg_tx_band_start) + 2] L2E9B: ED 5B 0B C0 L2E9F: A7 L2EA0: ED 52 L2EA2: ED 5B 0D C0 L2EA6: 9B # ld de, [tx_freq]; and a; sbc hl, de; ld de, [(tx_freq) + 2]; sbc e; # jp nc, 2f ! start >= vfo, illegal L2EA7: D2 BF 2E # L2EAA: 2A 0B C0 L2EAD: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2EB0: ED 5B 45 C7 L2EB4: A7 L2EB5: ED 52 L2EB7: ED 5B 47 C7 L2EBB: 9B # ld de, [cfg_tx_band_end]; and a; sbc hl, de; ld de, [(cfg_tx_band_end) + 2]; sbc e; # jp c, 1f ! vfo < end, and start < vfo, legal L2EBC: DA 39 2F # 2: L2EBF: 2A 0B C0 L2EC2: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2EC5: ED 5B 3F C7 L2EC9: A7 L2ECA: ED 52 L2ECC: ED 5B 41 C7 L2ED0: 9B # ld de, [cfg_tx_oob_0]; and a; sbc hl, de; ld de, [(cfg_tx_oob_0) + 2]; sbc e; L2ED1: B5 # or l L2ED2: B4 # or h # jp z, 1f ! vfo at "oob tx spot", legal after all L2ED3: CA 39 2F L2ED6: 2A 0B C0 L2ED9: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2EDC: ED 5B 26 C9 L2EE0: A7 L2EE1: ED 52 L2EE3: ED 5B 28 C9 L2EE7: 9B # ld de, [cfg_tx_oob_1]; and a; sbc hl, de; ld de, [(cfg_tx_oob_1) + 2]; sbc e; L2EE8: B5 # or l L2EE9: B4 # or h # jp z, 1f ! vfo at "oob tx spot", legal after all L2EEA: CA 39 2F L2EED: 2A 0B C0 L2EF0: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2EF3: ED 5B 29 C9 L2EF7: A7 L2EF8: ED 52 L2EFA: ED 5B 2B C9 L2EFE: 9B # ld de, [cfg_tx_oob_2]; and a; sbc hl, de; ld de, [(cfg_tx_oob_2) + 2]; sbc e; L2EFF: B5 # or l L2F00: B4 # or h # jp z, 1f ! vfo at "oob tx spot", legal after all L2F01: CA 39 2F L2F04: 2A 0B C0 L2F07: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2F0A: ED 5B 2C C9 L2F0E: A7 L2F0F: ED 52 L2F11: ED 5B 2E C9 L2F15: 9B # ld de, [cfg_tx_oob_3]; and a; sbc hl, de; ld de, [(cfg_tx_oob_3) + 2]; sbc e; L2F16: B5 # or l L2F17: B4 # or h # jp z, 1f ! vfo at "oob tx spot", legal after all L2F18: CA 39 2F L2F1B: 2A 0B C0 L2F1E: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2F21: ED 5B 2F C9 L2F25: A7 L2F26: ED 52 L2F28: ED 5B 31 C9 L2F2C: 9B # ld de, [cfg_tx_oob_4]; and a; sbc hl, de; ld de, [(cfg_tx_oob_4) + 2]; sbc e; L2F2D: B5 # or l L2F2E: B4 # or h # jp z, 1f ! vfo at "oob tx spot", legal after all L2F2F: CA 39 2F # L2F32: 3A EF D0 # ld a, [local_mode] ! illegal if not local_mode L2F35: 32 CB D0 # ld [tx_is_legal], a # ret L2F38: C9 # 1: # ld a, 1 L2F39: 3E 01 L2F3B: 32 CB D0 # ld [tx_is_legal], a # ret L2F3E: C9 # # ! split and temporary shift overrides are forgotten if this is used # # step_duplex_state: L2F3F: 3A 0E C0 # ld a, [duplex_state] L2F42: 3C # inc a # cp 3 L2F43: FE 03 # jr c, 1f L2F45: 38 02 # ld a, 0 L2F47: 3E 00 # 1: L2F49: 32 0E C0 # ld [duplex_state], a # cp 1 L2F4C: FE 01 # jp z, 1f L2F4E: CA 6D 2F L2F51: 2A 08 C0 L2F54: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] ! 1 to 2 or 2 to 0, flip rx/tx L2F57: F5 # push af L2F58: E5 # push hl L2F59: 2A 0B C0 L2F5C: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L2F5F: 22 08 C0 L2F62: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a L2F65: E1 # pop hl L2F66: F1 # pop af L2F67: 22 0B C0 L2F6A: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # 1: # jp changed_frequency_duplex_okay L2F6D: C3 A6 2C # # ! set duplex shift temporarily # # set_duplex_shift_neg: # call a2i L2F70: CD 57 3A # call negate_ahl L2F73: CD 47 3A L2F76: 22 0F C0 L2F79: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a # ld a, 1 L2F7C: 3E 01 L2F7E: 32 0E C0 # ld [duplex_state], a # jp changed_frequency_duplex_okay L2F81: C3 A6 2C # # set_duplex_shift_pos: # call a2i L2F84: CD 57 3A L2F87: 22 0F C0 L2F8A: 32 11 C0 # ld [duplex_shift], hl ; ld [(duplex_shift) + 2], a # ld a, 1 L2F8D: 3E 01 L2F8F: 32 0E C0 # ld [duplex_state], a # jp changed_frequency_duplex_okay L2F92: C3 A6 2C # # ! set tx freq to given memory (rx of the memory) # ! or given frequency (short 3/4 digit freq ok) # # set_tx_freq: L2F95: 3A B5 D0 # ld a, [digidx] # cp 3 L2F98: FE 03 # jp c, 1f ! 1...2 digits L2F9A: DA A8 2F # cp 5 L2F9D: FE 05 # call c, fill_implied ! if 3 or 4 digits, fix to abs. L2F9F: DC D5 0D # call a2i ! AHL freq L2FA2: CD 57 3A # jp 2f L2FA5: C3 B7 2F # 1: # call a2i_byte L2FA8: CD 50 46 # call point_ix_memory_a L2FAB: CD 8C 1D L2FAE: DD 6E 00 L2FB1: DD 66 01 L2FB4: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] ! use memory rx frequency as tx freq # 2: L2FB7: 22 0B C0 L2FBA: 32 0D C0 # ld [tx_freq], hl ; ld [(tx_freq) + 2], a # # ld a, 3 L2FBD: 3E 03 L2FBF: 32 0E C0 # ld [duplex_state], a # jp changed_frequency_duplex_okay L2FC2: C3 A6 2C # # # step_channel_up: L2FC5: 2A 08 C0 L2FC8: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L2FCB: ED 5B 14 C0 # ld de, [band_step_hz] L2FCF: 19 # add hl, de # adc 0 L2FD0: CE 00 L2FD2: 22 08 C0 L2FD5: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a ! XXX align stepping into current band # jp changed_frequency L2FD8: C3 9F 2C # # step_channel_down: L2FDB: 2A 08 C0 L2FDE: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L2FE1: ED 5B 14 C0 # ld de, [band_step_hz] L2FE5: A7 # and a L2FE6: ED 52 # sbc hl, de # sbc 0 L2FE8: DE 00 L2FEA: 22 08 C0 L2FED: 32 0A C0 # ld [rx_freq], hl ; ld [(rx_freq) + 2], a ! XXX align stepping into current band # jp changed_frequency L2FF0: C3 9F 2C # # # set_channel_step: # L2FF3: 3A 13 C0 # ld a, [band_step] # call channel_step_parms L2FF6: CD 0C 30 # L2FF9: ED 43 16 D0 # ld [rx_bstep_cfg], bc L2FFD: ED 43 18 D0 # ld [tx_bstep_cfg], bc ! XXX no need to force same stepping tx/rx L3001: 22 0B D0 # ld [rx_refdiv], hl L3004: 22 0D D0 # ld [tx_refdiv], hl # L3007: ED 53 14 C0 # ld [band_step_hz], de # ret L300B: C9 # # ! A has logical channel step designator # # channel_step_parms: # # ld hl, 12800 / 25 * 2 ! phys 12.5 L300C: 21 00 04 # ld bc, 25 | (1 << 8) L300F: 01 19 01 # # ld de, 25 ! user visible 25, 12.5 phys. L3012: 11 19 00 # cp 0 L3015: FE 00 L3017: C8 # ret z # # ld de, 12 ! user visible 12.5, 12.5 phys L3018: 11 0C 00 # cp 3 L301B: FE 03 L301D: C8 # ret z # # ld hl, 12800 / 10 ! phys 10 L301E: 21 00 05 # ld bc, 10 L3021: 01 0A 00 # # ld de, 20 ! user visible 20, 10 phys L3024: 11 14 00 # cp 1 L3027: FE 01 L3029: C8 # ret z # # ld de, 10 ! user visible 10, 10 phys L302A: 11 0A 00 # cp 4 L302D: FE 04 L302F: C8 # ret z # # ld hl, 12800 / 15 ! phys 15 L3030: 21 55 03 # ld bc, 15 L3033: 01 0F 00 # # ld de, 15 ! user visible 15, 15 phys. L3036: 11 0F 00 # cp 2 L3039: FE 02 L303B: C8 # ret z # # ld hl, 12800 / 25 * 4 L303C: 21 00 08 # ld bc, 25 | (2 << 8) ! 25/4 L303F: 01 19 02 # ld de, 6 L3042: 11 06 00 # cp 5 L3045: FE 05 L3047: C8 # ret z # # ld hl, 12800 / 25 * 2 L3048: 21 00 04 # ld bc, 25 | (1 << 8) ! 25/2 L304B: 01 19 01 # ld de, 25 L304E: 11 19 00 # # ret L3051: C9 # # # ! AHL has divisor, BC has step config # # div2freq: # # call mul248 ! AHL * C -> CYAHL L3052: CD 1B 3B L3055: 04 # inc b # jr 2f L3056: 18 07 # 1: L3058: CB 1F # rr a L305A: CB 1C # rr h L305C: CB 1D # rr l L305E: A7 # and a # 2: # djnz 1b L305F: 10 F7 # # ret L3061: C9 # # ! # ! freq / 25 * 2 = linear divisor # ! AHL has freq in Hz, BC has step config # ! # # freq2div: # # call div248 ! AHL / C -> HL,A L3062: CD 31 3B # ld e, 0 ! MSb L3065: 1E 00 L3067: 04 # inc b # jr 2f L3068: 18 0E # 1: L306A: 37 # scf ! remainder * 2 + 1 L306B: CB 17 # rl a ! L306D: B9 # cp c ! compare with divider # jr c, 3f L306E: 38 01 L3070: 91 # sub c # 3: L3071: 3F # ccf L3072: CB 15 # rl l ! and shift in L3074: CB 14 # rl h L3076: CB 13 # rl e # 2: # djnz 1b L3078: 10 F0 # # ! divisor almost there, check last remainder L307A: CB 17 # rl a L307C: B9 # cp c # jr c, 3f L307D: 38 07 L307F: 2C # inc l # jr nz, 3f L3080: 20 04 L3082: 24 # inc h # jr nz, 3f L3083: 20 01 L3085: 1C # inc e # 3: # call check_and_clamp_divisor ! EHL -> AHL L3086: CD 8A 30 # ret L3089: C9 # # check_and_clamp_divisor: L308A: 3A 32 C7 # ld a, [cfg_synth_card] # cp 0 L308D: FE 00 L308F: 7B # ld a, e ! get 3rd byte of divisor # jp nz, 1f ! go if RC58 or RB58 case L3090: C2 9C 30 # cp 2 ! RD58 case L3093: FE 02 L3095: D8 # ret c ! ok, E was 0/1, AHL now 0/1HL L3096: 21 FF FF # ld hl, (0x1FFFF) % 65536 ; ld a, (0x1FFFF) / 65536 L3099: 3E 01 # ret L309B: C9 # 1: L309C: B7 # or a L309D: C8 # ret z ! ok, E was 0, AHL now 0HL, RC58 and RB58 case L309E: 21 FF FF # ld hl, (0xFFFF) % 65536 ; ld a, (0xFFFF) / 65536 L30A1: 3E 00 # ret L30A3: C9 # # !====================================================================== # # update_vco_bands: L30A4: 3A 0A D0 # ld a, [synth_ctrl] # or 0xF0 ! Max deviation (b7..b4) L30A7: F6 F0 L30A9: 32 0A D0 # ld [synth_ctrl], a # # call update_rx_vco_band L30AC: CD B3 30 # call update_tx_vco_band L30AF: CD D4 30 # ret L30B2: C9 # # update_rx_vco_band: L30B3: 3A 0A D0 # ld a, [synth_ctrl] # or 0x01 ! assume vco bit "1" L30B6: F6 01 L30B8: 4F # ld c, a L30B9: 2A 08 C0 L30BC: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L30BF: ED 5B 36 C7 L30C3: A7 L30C4: ED 52 L30C6: ED 5B 38 C7 L30CA: 9B # ld de, [cfg_rx_vco_center]; and a; sbc hl, de; ld de, [(cfg_rx_vco_center) + 2]; sbc e; # jr c, 1f L30CB: 38 02 L30CD: CB 81 # res 0, c ! "0" = high band # 1: L30CF: 79 # ld a, c L30D0: 32 0A D0 # ld [synth_ctrl], a # ret L30D3: C9 # # update_tx_vco_band: L30D4: 3A 0A D0 # ld a, [synth_ctrl] # or 0x02 ! assume vco bit "1" L30D7: F6 02 L30D9: 4F # ld c, a L30DA: 2A 0B C0 L30DD: 3A 0D C0 # ld hl, [tx_freq] ; ld a, [(tx_freq) + 2] L30E0: ED 5B 39 C7 L30E4: A7 L30E5: ED 52 L30E7: ED 5B 3B C7 L30EB: 9B # ld de, [cfg_tx_vco_center]; and a; sbc hl, de; ld de, [(cfg_tx_vco_center) + 2]; sbc e; # jr c, 1f L30EC: 38 02 L30EE: CB 89 # res 1, c ! "0" = high band # 1: L30F0: 79 # ld a, c L30F1: 32 0A D0 # ld [synth_ctrl], a # ret L30F4: C9 # # halt_txsynth: L30F5: 3A 0A D0 # ld a, [synth_ctrl] L30F8: CB D7 # set 2, a ! cut supply, prediv & pll L30FA: CB 9F # res 3, a ! cut supply, vco and amps L30FC: 32 0A D0 # ld [synth_ctrl], a # jp load_synth_ctrl L30FF: C3 0F 31 # # enable_txsynth: L3102: 3A 0A D0 # ld a, [synth_ctrl] L3105: CB 97 # res 2, a ! supply on, prediv & pll L3107: CB DF # set 3, a ! supply on, vco and amps L3109: 32 0A D0 # ld [synth_ctrl], a # jp load_synth_ctrl L310C: C3 0F 31 # # load_synth_ctrl: L310F: 3A 0A D0 # ld a, [synth_ctrl] L3112: 4F # ld c, a # # ld a, 0x80 L3113: 3E 80 L3115: D3 70 # out [0x70], a # # ld b, 8 L3117: 06 08 # call send_to_synth L3119: CD C7 31 # # or 0x02 L311C: F6 02 # call strobe_to_synth L311E: CD C0 31 # ret L3121: C9 # # load_txsynth: # # ! Control register, tx vco band A/B and txsynth ON bits # # call enable_txsynth L3122: CD 02 31 # # ! Channel spacing - R # # ld a, 0x80 L3125: 3E 80 L3127: D3 70 # out [0x70], a # L3129: 2A 0D D0 # ld hl, [tx_refdiv] L312C: 4C # ld c, h # ld b, 8 ! has excess bits... they overflow ok L312D: 06 08 # call send_to_synth L312F: CD C7 31 L3132: 4D # ld c, l # ld b, 8 L3133: 06 08 # call send_to_synth L3135: CD C7 31 # # call one_to_synth ! single "1" bit - to R register L3138: CD E4 31 # # or 0x04 L313B: F6 04 # call strobe_to_synth L313D: CD C0 31 # # ! Divisor # L3140: 2A 12 D0 L3143: 3A 14 D0 # ld hl, [tx_divisor] ; ld a, [(tx_divisor) + 2] L3146: 5F # ld e, a # # ld d, 0x04 L3147: 16 04 # call send_NA_to_synth L3149: CD 78 31 # # ret L314C: C9 # # load_rxsynth: # # ! Control register, rx vco band A/B # # call load_synth_ctrl L314D: CD 0F 31 # # ! Channel spacing - R # # ld a, 0x80 L3150: 3E 80 L3152: D3 70 # out [0x70], a # L3154: 2A 0B D0 # ld hl, [rx_refdiv] ! channel spacing L3157: 4C # ld c, h # ld b, 8 ! has excess bits... they overflow ok L3158: 06 08 # call send_to_synth L315A: CD C7 31 L315D: 4D # ld c, l # ld b, 8 L315E: 06 08 # call send_to_synth L3160: CD C7 31 # # call one_to_synth ! single "1" bit - to R register L3163: CD E4 31 # # or 0x01 L3166: F6 01 # call strobe_to_synth L3168: CD C0 31 # # ! Divisor # L316B: 2A 0F D0 L316E: 3A 11 D0 # ld hl, [rx_divisor] ; ld a, [(rx_divisor) + 2] L3171: 5F # ld e, a # # ld d, 0x01 L3172: 16 01 # call send_NA_to_synth L3174: CD 78 31 # # ret L3177: C9 # # !---------------------------------------------------------------------- # # ! # ! 10 bits of N, 7 bits of A, single zerobit to selector # ! # ! RD58 NNNNNNNNNNAAAAAAA # ! GFEDCBA9876543210 effective bit numbers # ! EHHHHHHHHLLLLLLLL # ! # ! RB58S # ! RC58 NNNNNNNNNN0AAAAAA # ! FEDCBA9876 543210 effective bit numbers # ! HHHHHHHHLL LLLLLL # ! # ! NA in EHL register triple # # send_NA_to_synth: L3178: 3A 32 C7 # ld a, [cfg_synth_card] # cp 0 L317B: FE 00 # jp nz, send_NA_64_to_synth ! RB58 or RC58 L317D: C2 A0 31 # # ! RD58 default synthesizer 0, fall thru to # # send_NA_128_to_synth: # # ! A used thru routine # # ld a, 0x80 L3180: 3E 80 L3182: D3 70 # out [0x70], a # # ! MSbit of N # L3184: 4B # ld c, e L3185: CB 09 # rrc c ! Align lowest bit for MSb first shifting just 1 bit # ld b, 1 L3187: 06 01 # call send_to_synth ! send MSb (lowest of e) L3189: CD C7 31 # # ! Rest of NA # L318C: 4C # ld c, h # ld b, 8 L318D: 06 08 # call send_to_synth L318F: CD C7 31 L3192: 4D # ld c, l # ld b, 8 L3193: 06 08 # call send_to_synth L3195: CD C7 31 # # call zero_to_synth ! single "0" bit - to A/N registers L3198: CD D7 31 # L319B: B2 # or d # call strobe_to_synth ! which synth L319C: CD C0 31 # # ret L319F: C9 # # send_NA_64_to_synth: # # ! A used thru routine # # ld a, 0x80 L31A0: 3E 80 L31A2: D3 70 # out [0x70], a # # ! NA # L31A4: 4C # ld c, h # ld b, 8 L31A5: 06 08 # call send_to_synth L31A7: CD C7 31 L31AA: 4D # ld c, l # ld b, 2 L31AB: 06 02 # call send_to_synth L31AD: CD C7 31 # call zero_to_synth ! pad for 64/65 prescaler, instead of linear 128/129 L31B0: CD D7 31 # ld b, 6 L31B3: 06 06 # call send_to_synth L31B5: CD C7 31 # # call zero_to_synth ! single "0" bit - to A/N registers L31B8: CD D7 31 # L31BB: B2 # or d # call strobe_to_synth ! which synth L31BC: CD C0 31 # # ret L31BF: C9 # # # strobe_to_synth: # L31C0: D3 70 # out [0x70], a # and ~(0x02 | 0x04 | 0x01 | 0x10) L31C2: E6 E8 L31C4: D3 70 # out [0x70], a # ret L31C6: C9 # # send_to_synth: # 2: L31C7: CB 11 # rl c # jr c, 1f L31C9: 38 06 # call zero_to_synth L31CB: CD D7 31 # djnz 2b L31CE: 10 F7 # ret L31D0: C9 # 1: # call one_to_synth L31D1: CD E4 31 # djnz 2b L31D4: 10 F1 # ret L31D6: C9 # # zero_to_synth: # # and ~0x10 L31D7: E6 EF L31D9: D3 70 # out [0x70], a # or 0x08 L31DB: F6 08 L31DD: D3 70 # out [0x70], a # and ~(0x08) L31DF: E6 F7 L31E1: D3 70 # out [0x70], a # # ret L31E3: C9 # # one_to_synth: # # or 0x10 L31E4: F6 10 L31E6: D3 70 # out [0x70], a # or 0x08 L31E8: F6 08 L31EA: D3 70 # out [0x70], a # and ~(0x08) L31EC: E6 F7 L31EE: D3 70 # out [0x70], a # # ret L31F0: C9 # # !====================================================================== # # ! # ! Key up TX # ! # real_txpwr: L31F1: E5 # push hl L31F2: 3A 1F C7 # ld a, [cfg_txpwr] # ld hl, txpwr_increment L31F5: 21 31 D0 L31F8: 86 # add [hl] # jr nc, 1f L31F9: 30 02 # ld a, 0xFF L31FB: 3E FF # 1: L31FD: E1 # pop hl # ret ! A has real tx power (still just a byte) L31FE: C9 # # update_txpwr_if_tx: L31FF: 3A CC D0 # ld a, [txon] L3202: B7 # or a L3203: C8 # ret z # # ! FALLTHRU # # update_txpwr: # call real_txpwr L3204: CD F1 31 L3207: D3 40 # out [0x40], a # ret L3209: C9 # # zero_txpwr: # ld a, 0 L320A: 3E 00 L320C: D3 40 # out [0x40], a # ret L320E: C9 # # tx_on: # call scanner_stop L320F: CD 54 13 # L3212: 3A CB D0 # ld a, [tx_is_legal] # sub 1 L3215: D6 01 L3217: D8 # ret c ! outside band # # ! fallthru # # tx_on_legal_or_not: # L3218: 3A 24 C7 # ld a, [cfg_tx_tot_minutes] ! TOT=0 means no TX anywhere # sub 1 L321B: D6 01 L321D: D8 # ret c # # call update_LPF L321E: CD 51 22 # L3221: F3 # di # ld a, 0 L3222: 3E 00 L3224: 32 26 D0 # ld [tx_tot_timer], a # ld a, 1 L3227: 3E 01 L3229: 32 CC D0 # ld [txon], a # # call stop_marker_tone L322C: CD 34 23 # call tx_cut_local_audio L322F: CD 1D 07 L3232: FB # ei # # ld a, 0x80 L3233: 3E 80 L3235: D3 70 # out [0x70], a # call zero_txpwr L3237: CD 0A 32 # call load_txsynth L323A: CD 22 31 # # ld a, 0 L323D: 3E 00 L323F: D3 70 # out [0x70], a # call update_txpwr L3241: CD 04 32 # # call light_transmit_led L3244: CD 0F 24 L3247: A7 # and a ! return carry clear # ret L3248: C9 # # # tx_off: # ld a, 0x80 L3249: 3E 80 L324B: D3 70 # out [0x70], a # call zero_txpwr L324D: CD 0A 32 # # ld a, 0 L3250: 3E 00 L3252: 32 CC D0 # ld [txon], a # # call ctcss_off ! XXX consider CTCSS-less tail of 100msec L3255: CD 10 3A # call halt_txsynth L3258: CD F5 30 # # # # # # # call dim_transmit_led L325B: CD 00 24 # call resync_squelch_if_forced L325E: CD 47 23 # ret L3261: C9 # # !====================================================================== # # ! this needs no align # keytbl_cu53an: L3262: 5A L3263: 5A L3264: 5A L3265: 5A L3266: 5A L3267: 5A L3268: 5A # .byte 'Z','Z','Z','Z','Z','Z','Z','Z' L3269: 5A L326A: 5A L326B: 5A L326C: 5A L326D: 5A L326E: 2B L326F: 2D L3270: 3F # .byte 'Z','Z','Z','Z','+','-','?','B' L3271: 42 L3272: 45 L3273: 2A L3274: 00 L3275: 23 L3276: 52 L3277: 07 L3278: 08 # .byte 'E','*', 0 ,'#','R', 7 , 8 , 9 L3279: 09 L327A: 53 L327B: 04 L327C: 05 L327D: 06 L327E: 43 L327F: 01 L3280: 02 # .byte 'S', 4 , 5 , 6 ,'C', 1 , 2 , 3 L3281: 03 # # ! this needs no align # keytbl_cu58af: L3282: 5A L3283: 5A L3284: 42 L3285: 04 L3286: 02 L3287: 01 L3288: 05 # .byte 'Z','Z','B', 4 , 2 , 1 , 5 , 6 L3289: 06 L328A: 03 L328B: 07 L328C: 08 L328D: 09 L328E: 2A L328F: 00 L3290: 23 # .byte 3 , 7 , 8 , 9 ,'*', 0 ,'#','-' L3291: 2D L3292: 43 L3293: 45 L3294: 2B L3295: 53 L3296: 52 L3297: 5A L3298: 5A # .byte 'C','E','+','S','R','Z','Z','Z' L3299: 5A L329A: 5A L329B: 5A L329C: 5A L329D: 5A L329E: 5A L329F: 5A L32A0: 5A # .byte 'Z','Z','Z','Z','Z','Z','Z','Z' L32A1: 5A L32A2: 5A L32A3: 5A L32A4: 5A L32A5: 5A L32A6: 5A L32A7: 5A L32A8: 5A # .byte 'Z','Z','Z','Z','Z','Z','Z','Z' L32A9: 5A # # ! this needs no align # ccirtbl: # .word (4032000 / (1981)) ! 0 L32AA: F3 07 # .word (4032000 / (1124)) ! 1 L32AC: 03 0E # .word (4032000 / (1197)) ! 2 L32AE: 28 0D # .word (4032000 / (1275)) ! 3 L32B0: 5A 0C # .word (4032000 / (1358)) ! 4 L32B2: 99 0B # .word (4032000 / (1446)) ! 5 L32B4: E4 0A # .word (4032000 / (1540)) ! 6 L32B6: 3A 0A # .word (4032000 / (1640)) ! 7 L32B8: 9A 09 # .word (4032000 / (1747)) ! 8 L32BA: 03 09 # .word (4032000 / (1860)) ! 9 L32BC: 77 08 # .word (4032000 / (2400)) ! A L32BE: 90 06 # .word (4032000 / ( 930)) ! B L32C0: EF 10 # .word (4032000 / (2247)) ! C L32C2: 02 07 # .word (4032000 / ( 991)) ! D L32C4: E4 0F # .word (4032000 / (2110)) ! E L32C6: 76 07 # .word 4 ! F L32C8: 04 00 # # ! # ! ----- 3 # ! |\|/| 6 2 E F B # ! -- -- 5 A # ! |/|\| 4 0 1 D 9 # ! ----- C # # ! this needs no align # cu58af_font: # # ! FEDCBA9876543210 # .word 0b1001101001011001 ! 0 L32CA: 59 9A # .word 0b0100000000000010 ! 1 L32CC: 02 40 # .word 0b0001110000111000 ! 2 L32CE: 38 1C # .word 0b0001111000101000 ! 3 L32D0: 28 1E # .word 0b0000111001100000 ! 4 L32D2: 60 0E # .word 0b0001011001101000 ! 5 L32D4: 68 16 # .word 0b0001011001111000 ! 6 L32D6: 78 16 # .word 0b0000101000001000 ! 7 L32D8: 08 0A # .word 0b0001111001111000 ! 8 L32DA: 78 1E # .word 0b0001111001101000 ! 9 L32DC: 68 1E # .word 0b0000111001111000 ! A L32DE: 78 0E # .word 0b1011000001111000 ! B L32E0: 78 B0 # .word 0b0001000001011000 ! C L32E2: 58 10 # .word 0b0101101000001010 ! D L32E4: 0A 5A # .word 0b0001010001111000 ! E L32E6: 78 14 # .word 0b0000010001111000 ! F L32E8: 78 04 # ! FEDCBA9876543210 # # .word 0b0001011001011000 ! G L32EA: 58 16 # ! FEDCBA9876543210 # # .org cu58af_font + 2*' ' # # ! FEDCBA9876543210 # .word 0b0000000000000000 ! - - - - - - - L330A: 00 00 # .word 0b1001000110001100 ! ! - - 2 3 - - - L330C: 8C 91 # .word 0b0100000111000000 ! " 0 - - 3 - - - L330E: C0 41 # .word 0b0001011110110000 ! # - 1 2 - - 5 6 L3310: B0 17 # .word 0b0101011111101010 ! $ 0 - 2 - - 5 - L3312: EA 57 # .word 0b1000001111000001 ! % 0 - 2 - - - - L3314: C1 83 # .word 0b1011000110001101 ! & - 1 - 3 - 5 6 L3316: 8D B1 # .word 0b0000000111000000 ! ' - - - 3 - - - L3318: C0 01 # .word 0b1010000110000000 ! ( - - 2 3 - - - L331A: 80 A1 # .word 0b0000000110000101 ! ) 0 1 - - - - - L331C: 85 01 # .word 0b1110010110100111 ! * - - - - 4 5 6 L331E: A7 E5 # .word 0b0100010110100010 ! + 0 1 - - - 5 - L3320: A2 45 # .word 0b0000000110000001 ! , - 1 - - - - - L3322: 81 01 # .word 0b0000010110100000 ! - - - - - - 5 - L3324: A0 05 # .word 0b0000000110010000 ! . - 1 - - - - - L3326: 90 01 # .word 0b1000000110000001 ! / - 1 - 3 - 5 - L3328: 81 81 # .word 0b1001101001011001 ! 0 L332A: 59 9A # .word 0b0100000000000010 ! 1 L332C: 02 40 # .word 0b0001110000111000 ! 2 L332E: 38 1C # .word 0b0001111000101000 ! 3 L3330: 28 1E # .word 0b0000111001100000 ! 4 L3332: 60 0E # .word 0b0001011001101000 ! 5 L3334: 68 16 # .word 0b0001011001111000 ! 6 L3336: 78 16 # .word 0b0000101000001000 ! 7 L3338: 08 0A # .word 0b0001111001111000 ! 8 L333A: 78 1E # .word 0b0001111001101000 ! 9 L333C: 68 1E # .word 0b0000000111010000 ! : - - - - 4 - 6 L333E: D0 01 # .word 0b0100000110000001 ! ; - - - 3 - - 6 L3340: 81 41 # .word 0b1010000110000000 ! < - - 2 3 - 5 - L3342: 80 A1 # .word 0b0001010110100000 ! = - - - - - 5 6 L3344: A0 15 # .word 0b0000000110000101 ! > 0 1 - - - 5 - L3346: 85 01 # .word 0b1000000110001010 ! ? - 1 - 3 4 5 - L3348: 8A 81 # .word 0b0101110111011000 ! @ - 1 2 3 4 5 6 L334A: D8 5D # ! FEDCBA9876543210 # .word 0b0000111001111000 ! A L334C: 78 0E # .word 0b1011000001111000 ! B L334E: 78 B0 # .word 0b0001000001011000 ! C L3350: 58 10 # .word 0b0101101000001010 ! D L3352: 0A 5A # .word 0b0001010001111000 ! E L3354: 78 14 # .word 0b0000010001111000 ! F L3356: 78 04 # .word 0b0001011001011000 ! G L3358: 58 16 # .word 0b0000111111110000 ! H 0 1 2 3 - 5 - L335A: F0 0F # .word 0b0101000110001010 ! I - - 2 3 - - - L335C: 8A 51 # .word 0b0001101110010000 ! J - 1 2 3 - - 6 L335E: 90 1B # .word 0b1010000111110000 ! K - 1 2 3 - - 6 L3360: F0 A1 # .word 0b0001000111010000 ! L 0 1 - - - - 6 L3362: D0 11 # .word 0b1000101111010100 ! M 0 1 2 3 4 - - L3364: D4 8B # .word 0b0010101111010100 ! N - 1 2 - - 5 - L3366: D4 2B # .word 0b0001101111011000 ! O 0 1 2 3 4 - 6 L3368: D8 1B # .word 0b0000110111111000 ! P 0 1 - 3 4 5 - L336A: F8 0D # .word 0b0011101111011000 ! Q 0 - 2 3 4 5 - L336C: D8 3B # .word 0b0010110111111000 ! R 0 1 - 3 4 - - L336E: F8 2D # .word 0b0011000110001100 ! S 0 - 2 - 4 5 6 L3370: 8C 31 # .word 0b0100000110001010 ! T 0 1 - - 4 - - L3372: 8A 41 # .word 0b0001101111010000 ! U 0 1 2 3 - - 6 L3374: D0 1B # .word 0b1000000111010001 ! V 0 1 2 3 - - 6 L3376: D1 81 # .word 0b0010101111010001 ! W 0 1 2 3 - - 6 L3378: D1 2B # .word 0b1010000110000101 ! X - - - - 4 5 6 L337A: 85 A1 # .word 0b1000000110000110 ! Y 0 - 2 3 - 5 6 L337C: 86 81 # .word 0b1001000110001001 ! Z - 1 - 3 4 5 6 L337E: 89 91 # .word 0b0000000110000000 ! [ 0 1 - - 4 - 6 L3380: 80 01 # ! FEDCBA9876543210 # .word 0b0010000110000100 ! \ 0 - 2 - - 5 - L3382: 84 21 # .word 0b0000000110000000 ! ] - - 2 3 4 - 6 L3384: 80 01 # .word 0b0000000110000000 ! ^ - - - - 4 - - L3386: 80 01 # .word 0b0001000110000000 ! _ - - - - - - 6 L3388: 80 11 # .word 0b0000000110000100 ! ` 0 - - - - - - L338A: 84 01 # # .word 0b0000111001111000 ! a L338C: 78 0E # .word 0b1011000001111000 ! b L338E: 78 B0 # .word 0b0001000001011000 ! c L3390: 58 10 # .word 0b0101101000001010 ! D L3392: 0A 5A # .word 0b0001010001111000 ! E L3394: 78 14 # .word 0b0000010001111000 ! F L3396: 78 04 # .word 0b0001011001011000 ! G L3398: 58 16 # .word 0b0000111111110000 ! H 0 1 2 3 - 5 - L339A: F0 0F # .word 0b0101000110001010 ! I - - 2 3 - - - L339C: 8A 51 # .word 0b0001101110010000 ! J - 1 2 3 - - 6 L339E: 90 1B # .word 0b1010000111110000 ! K - 1 2 3 - - 6 L33A0: F0 A1 # .word 0b0001000111010000 ! L 0 1 - - - - 6 L33A2: D0 11 # .word 0b1000101111010100 ! M 0 1 2 3 4 - - L33A4: D4 8B # .word 0b0010101111010100 ! N - 1 2 - - 5 - L33A6: D4 2B # .word 0b0001101111011000 ! O 0 1 2 3 4 - 6 L33A8: D8 1B # .word 0b0000110111111000 ! P 0 1 - 3 4 5 - L33AA: F8 0D # .word 0b0011101111011000 ! Q 0 - 2 3 4 5 - L33AC: D8 3B # .word 0b0010110111111000 ! R 0 1 - 3 4 - - L33AE: F8 2D # .word 0b0011000110001100 ! S 0 - 2 - 4 5 6 L33B0: 8C 31 # .word 0b0100000110001010 ! T 0 1 - - 4 - - L33B2: 8A 41 # .word 0b0001101111010000 ! U 0 1 2 3 - - 6 L33B4: D0 1B # .word 0b1000000111010001 ! V 0 1 2 3 - - 6 L33B6: D1 81 # .word 0b0010101111010001 ! W 0 1 2 3 - - 6 L33B8: D1 2B # .word 0b1010000110000101 ! X - - - - 4 5 6 L33BA: 85 A1 # .word 0b1000000110000110 ! Y 0 - 2 3 - 5 6 L33BC: 86 81 # .word 0b1001000110001001 ! Z - 1 - 3 4 5 6 L33BE: 89 91 # # .word 0b0000000110000000 ! { - 1 - - - 5 6 L33C0: 80 01 # .word 0b0100000110000010 ! | - 1 - - - - - L33C2: 82 41 # .word 0b0000000110000000 ! } - - 2 - - 5 6 L33C4: 80 01 # .word 0b0000000110001000 ! ~ - - - - 4 - - L33C6: 88 01 # .word 0b0000000110000000 ! ^? - 1 - 3 4 5 6 L33C8: 80 01 # # ASSERT((. - cu58af_font) == (2 * 128)) # # !====================================================================== # # .align 8, 0xFF L33CA: FF [ 36 ] # div99tbl: L3400: 00 L3401: 00 L3402: 01 L3403: 01 L3404: 02 L3405: 02 L3406: 02 L3407: 03 L3408: 03 # .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04 L3409: 04 L340A: 04 L340B: 04 L340C: 05 L340D: 05 L340E: 05 L340F: 06 L3410: 06 L3411: 07 L3412: 07 # .byte 0x04, 0x04, 0x05, 0x05, 0x05, 0x06, 0x06, 0x07, 0x07, 0x07 L3413: 07 L3414: 08 L3415: 08 L3416: 09 L3417: 09 L3418: 09 L3419: 10 L341A: 10 L341B: 11 L341C: 11 # .byte 0x08, 0x08, 0x09, 0x09, 0x09, 0x10, 0x10, 0x11, 0x11, 0x11 L341D: 11 L341E: 12 L341F: 12 L3420: 12 L3421: 13 L3422: 13 L3423: 14 L3424: 14 L3425: 14 L3426: 15 # .byte 0x12, 0x12, 0x12, 0x13, 0x13, 0x14, 0x14, 0x14, 0x15, 0x15 L3427: 15 L3428: 16 L3429: 16 L342A: 16 L342B: 17 L342C: 17 L342D: 18 L342E: 18 L342F: 18 L3430: 19 # .byte 0x16, 0x16, 0x16, 0x17, 0x17, 0x18, 0x18, 0x18, 0x19, 0x19 L3431: 19 L3432: 20 L3433: 20 L3434: 20 L3435: 21 L3436: 21 L3437: 21 L3438: 22 L3439: 22 L343A: 23 # .byte 0x20, 0x20, 0x20, 0x21, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23 L343B: 23 L343C: 23 L343D: 24 L343E: 24 L343F: 25 L3440: 25 L3441: 25 L3442: 26 L3443: 26 L3444: 27 # .byte 0x23, 0x24, 0x24, 0x25, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27 L3445: 27 L3446: 27 L3447: 28 L3448: 28 L3449: 29 L344A: 29 L344B: 29 L344C: 30 L344D: 30 L344E: 30 # .byte 0x27, 0x28, 0x28, 0x29, 0x29, 0x29, 0x30, 0x30, 0x30, 0x31 L344F: 31 L3450: 31 L3451: 32 L3452: 32 L3453: 32 L3454: 33 L3455: 33 L3456: 34 L3457: 34 L3458: 34 # .byte 0x31, 0x32, 0x32, 0x32, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35 L3459: 35 L345A: 35 L345B: 36 L345C: 36 L345D: 36 L345E: 37 L345F: 37 L3460: 37 L3461: 38 L3462: 38 # .byte 0x35, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x39 L3463: 39 L3464: 39 L3465: 39 L3466: 40 L3467: 40 L3468: 41 L3469: 41 L346A: 41 L346B: 42 L346C: 42 # .byte 0x39, 0x39, 0x40, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43 L346D: 43 L346E: 43 L346F: 43 L3470: 44 L3471: 44 L3472: 45 L3473: 45 L3474: 45 L3475: 46 L3476: 46 # .byte 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x45, 0x46, 0x46, 0x46 L3477: 46 L3478: 47 L3479: 47 L347A: 48 L347B: 48 L347C: 48 L347D: 49 L347E: 49 L347F: 50 L3480: 50 # .byte 0x47, 0x47, 0x48, 0x48, 0x48, 0x49, 0x49, 0x50, 0x50, 0x50 L3481: 50 L3482: 51 L3483: 51 L3484: 52 L3485: 52 L3486: 52 L3487: 53 L3488: 53 L3489: 54 L348A: 54 # .byte 0x51, 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54 L348B: 54 L348C: 55 L348D: 55 L348E: 55 L348F: 56 L3490: 56 L3491: 57 L3492: 57 L3493: 57 L3494: 58 # .byte 0x55, 0x55, 0x55, 0x56, 0x56, 0x57, 0x57, 0x57, 0x58, 0x58 L3495: 58 L3496: 59 L3497: 59 L3498: 59 L3499: 60 L349A: 60 L349B: 61 L349C: 61 L349D: 61 L349E: 62 # .byte 0x59, 0x59, 0x59, 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62 L349F: 62 L34A0: 62 L34A1: 63 L34A2: 63 L34A3: 64 L34A4: 64 L34A5: 64 L34A6: 65 L34A7: 65 L34A8: 66 # .byte 0x62, 0x63, 0x63, 0x64, 0x64, 0x64, 0x65, 0x65, 0x66, 0x66 L34A9: 66 L34AA: 66 L34AB: 67 L34AC: 67 L34AD: 68 L34AE: 68 L34AF: 68 L34B0: 69 L34B1: 69 L34B2: 70 # .byte 0x66, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x70, 0x70 L34B3: 70 L34B4: 70 L34B5: 71 L34B6: 71 L34B7: 71 L34B8: 72 L34B9: 72 L34BA: 73 L34BB: 73 L34BC: 73 # .byte 0x70, 0x71, 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x73, 0x74 L34BD: 74 L34BE: 74 L34BF: 75 L34C0: 75 L34C1: 75 L34C2: 76 L34C3: 76 L34C4: 77 L34C5: 77 L34C6: 77 # .byte 0x74, 0x75, 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x77, 0x78 L34C7: 78 L34C8: 78 L34C9: 79 L34CA: 79 L34CB: 79 L34CC: 80 L34CD: 80 L34CE: 80 L34CF: 81 L34D0: 81 # .byte 0x78, 0x79, 0x79, 0x79, 0x80, 0x80, 0x80, 0x81, 0x81, 0x82 L34D1: 82 L34D2: 82 L34D3: 82 L34D4: 83 L34D5: 83 L34D6: 84 L34D7: 84 L34D8: 84 L34D9: 85 L34DA: 85 # .byte 0x82, 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86 L34DB: 86 L34DC: 86 L34DD: 86 L34DE: 87 L34DF: 87 L34E0: 87 L34E1: 88 L34E2: 88 L34E3: 89 L34E4: 89 # .byte 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89, 0x89 L34E5: 89 L34E6: 90 L34E7: 90 L34E8: 91 L34E9: 91 L34EA: 91 L34EB: 92 L34EC: 92 L34ED: 93 L34EE: 93 # .byte 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x93 L34EF: 93 L34F0: 94 L34F1: 94 L34F2: 95 L34F3: 95 L34F4: 95 L34F5: 96 L34F6: 96 L34F7: 96 L34F8: 97 # .byte 0x94, 0x94, 0x95, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97 L34F9: 97 L34FA: 98 L34FB: 98 L34FC: 98 L34FD: 99 L34FE: 99 # .byte 0x98, 0x98, 0x98, 0x99, 0x99, 0x99 L34FF: 99 # # !====================================================================== # # .align 8, 0xFF # crctbls: # crctbl_hi: L3500: 00 L3501: 11 L3502: 23 L3503: 32 # .byte HI( 0); .byte HI( 4489); .byte HI( 8978); .byte HI(12955); L3504: 46 L3505: 57 L3506: 65 L3507: 74 # .byte HI(17956); .byte HI(22445); .byte HI(25910); .byte HI(29887); L3508: 8C L3509: 9D L350A: AF L350B: BE # .byte HI(35912); .byte HI(40385); .byte HI(44890); .byte HI(48851); L350C: CA L350D: DB L350E: E9 L350F: F8 # .byte HI(51820); .byte HI(56293); .byte HI(59774); .byte HI(63735); L3510: 10 L3511: 01 L3512: 33 L3513: 22 # .byte HI( 4225); .byte HI( 264); .byte HI(13203); .byte HI( 8730); L3514: 56 L3515: 47 L3516: 75 L3517: 64 # .byte HI(22181); .byte HI(18220); .byte HI(30135); .byte HI(25662); L3518: 9C L3519: 8D L351A: BF L351B: AE # .byte HI(40137); .byte HI(36160); .byte HI(49115); .byte HI(44626); L351C: DA L351D: CB L351E: F9 L351F: E8 # .byte HI(56045); .byte HI(52068); .byte HI(63999); .byte HI(59510); L3520: 21 L3521: 30 L3522: 02 L3523: 13 # .byte HI( 8450); .byte HI(12427); .byte HI( 528); .byte HI( 5017); L3524: 67 L3525: 76 L3526: 44 L3527: 55 # .byte HI(26406); .byte HI(30383); .byte HI(17460); .byte HI(21949); L3528: AD L3529: BC L352A: 8E L352B: 9F # .byte HI(44362); .byte HI(48323); .byte HI(36440); .byte HI(40913); L352C: EB L352D: FA L352E: C8 L352F: D9 # .byte HI(60270); .byte HI(64231); .byte HI(51324); .byte HI(55797); L3530: 31 L3531: 20 L3532: 12 L3533: 03 # .byte HI(12675); .byte HI( 8202); .byte HI( 4753); .byte HI( 792); L3534: 77 L3535: 66 L3536: 54 L3537: 45 # .byte HI(30631); .byte HI(26158); .byte HI(21685); .byte HI(17724); L3538: BD L3539: AC L353A: 9E L353B: 8F # .byte HI(48587); .byte HI(44098); .byte HI(40665); .byte HI(36688); L353C: FB L353D: EA L353E: D8 L353F: C9 # .byte HI(64495); .byte HI(60006); .byte HI(55549); .byte HI(51572); L3540: 42 L3541: 53 L3542: 61 L3543: 70 # .byte HI(16900); .byte HI(21389); .byte HI(24854); .byte HI(28831); L3544: 04 L3545: 15 L3546: 27 L3547: 36 # .byte HI( 1056); .byte HI( 5545); .byte HI(10034); .byte HI(14011); L3548: CE L3549: DF L354A: ED L354B: FC # .byte HI(52812); .byte HI(57285); .byte HI(60766); .byte HI(64727); L354C: 88 L354D: 99 L354E: AB L354F: BA # .byte HI(34920); .byte HI(39393); .byte HI(43898); .byte HI(47859); L3550: 52 L3551: 43 L3552: 71 L3553: 60 # .byte HI(21125); .byte HI(17164); .byte HI(29079); .byte HI(24606); L3554: 14 L3555: 05 L3556: 37 L3557: 26 # .byte HI( 5281); .byte HI( 1320); .byte HI(14259); .byte HI( 9786); L3558: DE L3559: CF L355A: FD L355B: EC # .byte HI(57037); .byte HI(53060); .byte HI(64991); .byte HI(60502); L355C: 98 L355D: 89 L355E: BB L355F: AA # .byte HI(39145); .byte HI(35168); .byte HI(48123); .byte HI(43634); L3560: 63 L3561: 72 L3562: 40 L3563: 51 # .byte HI(25350); .byte HI(29327); .byte HI(16404); .byte HI(20893); L3564: 25 L3565: 34 L3566: 06 L3567: 17 # .byte HI( 9506); .byte HI(13483); .byte HI( 1584); .byte HI( 6073); L3568: EF L3569: FE L356A: CC L356B: DD # .byte HI(61262); .byte HI(65223); .byte HI(52316); .byte HI(56789); L356C: A9 L356D: B8 L356E: 8A L356F: 9B # .byte HI(43370); .byte HI(47331); .byte HI(35448); .byte HI(39921); L3570: 73 L3571: 62 L3572: 50 L3573: 41 # .byte HI(29575); .byte HI(25102); .byte HI(20629); .byte HI(16668); L3574: 35 L3575: 24 L3576: 16 L3577: 07 # .byte HI(13731); .byte HI( 9258); .byte HI( 5809); .byte HI( 1848); L3578: FF L3579: EE L357A: DC L357B: CD # .byte HI(65487); .byte HI(60998); .byte HI(56541); .byte HI(52564); L357C: B9 L357D: A8 L357E: 9A L357F: 8B # .byte HI(47595); .byte HI(43106); .byte HI(39673); .byte HI(35696); L3580: 84 L3581: 95 L3582: A7 L3583: B6 # .byte HI(33800); .byte HI(38273); .byte HI(42778); .byte HI(46739); L3584: C2 L3585: D3 L3586: E1 L3587: F0 # .byte HI(49708); .byte HI(54181); .byte HI(57662); .byte HI(61623); L3588: 08 L3589: 19 L358A: 2B L358B: 3A # .byte HI( 2112); .byte HI( 6601); .byte HI(11090); .byte HI(15067); L358C: 4E L358D: 5F L358E: 6D L358F: 7C # .byte HI(20068); .byte HI(24557); .byte HI(28022); .byte HI(31999); L3590: 94 L3591: 85 L3592: B7 L3593: A6 # .byte HI(38025); .byte HI(34048); .byte HI(47003); .byte HI(42514); L3594: D2 L3595: C3 L3596: F1 L3597: E0 # .byte HI(53933); .byte HI(49956); .byte HI(61887); .byte HI(57398); L3598: 18 L3599: 09 L359A: 3B L359B: 2A # .byte HI( 6337); .byte HI( 2376); .byte HI(15315); .byte HI(10842); L359C: 5E L359D: 4F L359E: 7D L359F: 6C # .byte HI(24293); .byte HI(20332); .byte HI(32247); .byte HI(27774); L35A0: A5 L35A1: B4 L35A2: 86 L35A3: 97 # .byte HI(42250); .byte HI(46211); .byte HI(34328); .byte HI(38801); L35A4: E3 L35A5: F2 L35A6: C0 L35A7: D1 # .byte HI(58158); .byte HI(62119); .byte HI(49212); .byte HI(53685); L35A8: 29 L35A9: 38 L35AA: 0A L35AB: 1B # .byte HI(10562); .byte HI(14539); .byte HI( 2640); .byte HI( 7129); L35AC: 6F L35AD: 7E L35AE: 4C L35AF: 5D # .byte HI(28518); .byte HI(32495); .byte HI(19572); .byte HI(24061); L35B0: B5 L35B1: A4 L35B2: 96 L35B3: 87 # .byte HI(46475); .byte HI(41986); .byte HI(38553); .byte HI(34576); L35B4: F3 L35B5: E2 L35B6: D0 L35B7: C1 # .byte HI(62383); .byte HI(57894); .byte HI(53437); .byte HI(49460); L35B8: 39 L35B9: 28 L35BA: 1A L35BB: 0B # .byte HI(14787); .byte HI(10314); .byte HI( 6865); .byte HI( 2904); L35BC: 7F L35BD: 6E L35BE: 5C L35BF: 4D # .byte HI(32743); .byte HI(28270); .byte HI(23797); .byte HI(19836); L35C0: C6 L35C1: D7 L35C2: E5 L35C3: F4 # .byte HI(50700); .byte HI(55173); .byte HI(58654); .byte HI(62615); L35C4: 80 L35C5: 91 L35C6: A3 L35C7: B2 # .byte HI(32808); .byte HI(37281); .byte HI(41786); .byte HI(45747); L35C8: 4A L35C9: 5B L35CA: 69 L35CB: 78 # .byte HI(19012); .byte HI(23501); .byte HI(26966); .byte HI(30943); L35CC: 0C L35CD: 1D L35CE: 2F L35CF: 3E # .byte HI( 3168); .byte HI( 7657); .byte HI(12146); .byte HI(16123); L35D0: D6 L35D1: C7 L35D2: F5 L35D3: E4 # .byte HI(54925); .byte HI(50948); .byte HI(62879); .byte HI(58390); L35D4: 90 L35D5: 81 L35D6: B3 L35D7: A2 # .byte HI(37033); .byte HI(33056); .byte HI(46011); .byte HI(41522); L35D8: 5A L35D9: 4B L35DA: 79 L35DB: 68 # .byte HI(23237); .byte HI(19276); .byte HI(31191); .byte HI(26718); L35DC: 1C L35DD: 0D L35DE: 3F L35DF: 2E # .byte HI( 7393); .byte HI( 3432); .byte HI(16371); .byte HI(11898); L35E0: E7 L35E1: F6 L35E2: C4 L35E3: D5 # .byte HI(59150); .byte HI(63111); .byte HI(50204); .byte HI(54677); L35E4: A1 L35E5: B0 L35E6: 82 L35E7: 93 # .byte HI(41258); .byte HI(45219); .byte HI(33336); .byte HI(37809); L35E8: 6B L35E9: 7A L35EA: 48 L35EB: 59 # .byte HI(27462); .byte HI(31439); .byte HI(18516); .byte HI(23005); L35EC: 2D L35ED: 3C L35EE: 0E L35EF: 1F # .byte HI(11618); .byte HI(15595); .byte HI( 3696); .byte HI( 8185); L35F0: F7 L35F1: E6 L35F2: D4 L35F3: C5 # .byte HI(63375); .byte HI(58886); .byte HI(54429); .byte HI(50452); L35F4: B1 L35F5: A0 L35F6: 92 L35F7: 83 # .byte HI(45483); .byte HI(40994); .byte HI(37561); .byte HI(33584); L35F8: 7B L35F9: 6A L35FA: 58 L35FB: 49 # .byte HI(31687); .byte HI(27214); .byte HI(22741); .byte HI(18780); L35FC: 3D L35FD: 2C L35FE: 1E L35FF: 0F # .byte HI(15843); .byte HI(11370); .byte HI( 7921); .byte HI( 3960); # crctbl_lo: L3600: 00 L3601: 89 L3602: 12 L3603: 9B # .byte LO( 0); .byte LO( 4489); .byte LO( 8978); .byte LO(12955); L3604: 24 L3605: AD L3606: 36 L3607: BF # .byte LO(17956); .byte LO(22445); .byte LO(25910); .byte LO(29887); L3608: 48 L3609: C1 L360A: 5A L360B: D3 # .byte LO(35912); .byte LO(40385); .byte LO(44890); .byte LO(48851); L360C: 6C L360D: E5 L360E: 7E L360F: F7 # .byte LO(51820); .byte LO(56293); .byte LO(59774); .byte LO(63735); L3610: 81 L3611: 08 L3612: 93 L3613: 1A # .byte LO( 4225); .byte LO( 264); .byte LO(13203); .byte LO( 8730); L3614: A5 L3615: 2C L3616: B7 L3617: 3E # .byte LO(22181); .byte LO(18220); .byte LO(30135); .byte LO(25662); L3618: C9 L3619: 40 L361A: DB L361B: 52 # .byte LO(40137); .byte LO(36160); .byte LO(49115); .byte LO(44626); L361C: ED L361D: 64 L361E: FF L361F: 76 # .byte LO(56045); .byte LO(52068); .byte LO(63999); .byte LO(59510); L3620: 02 L3621: 8B L3622: 10 L3623: 99 # .byte LO( 8450); .byte LO(12427); .byte LO( 528); .byte LO( 5017); L3624: 26 L3625: AF L3626: 34 L3627: BD # .byte LO(26406); .byte LO(30383); .byte LO(17460); .byte LO(21949); L3628: 4A L3629: C3 L362A: 58 L362B: D1 # .byte LO(44362); .byte LO(48323); .byte LO(36440); .byte LO(40913); L362C: 6E L362D: E7 L362E: 7C L362F: F5 # .byte LO(60270); .byte LO(64231); .byte LO(51324); .byte LO(55797); L3630: 83 L3631: 0A L3632: 91 L3633: 18 # .byte LO(12675); .byte LO( 8202); .byte LO( 4753); .byte LO( 792); L3634: A7 L3635: 2E L3636: B5 L3637: 3C # .byte LO(30631); .byte LO(26158); .byte LO(21685); .byte LO(17724); L3638: CB L3639: 42 L363A: D9 L363B: 50 # .byte LO(48587); .byte LO(44098); .byte LO(40665); .byte LO(36688); L363C: EF L363D: 66 L363E: FD L363F: 74 # .byte LO(64495); .byte LO(60006); .byte LO(55549); .byte LO(51572); L3640: 04 L3641: 8D L3642: 16 L3643: 9F # .byte LO(16900); .byte LO(21389); .byte LO(24854); .byte LO(28831); L3644: 20 L3645: A9 L3646: 32 L3647: BB # .byte LO( 1056); .byte LO( 5545); .byte LO(10034); .byte LO(14011); L3648: 4C L3649: C5 L364A: 5E L364B: D7 # .byte LO(52812); .byte LO(57285); .byte LO(60766); .byte LO(64727); L364C: 68 L364D: E1 L364E: 7A L364F: F3 # .byte LO(34920); .byte LO(39393); .byte LO(43898); .byte LO(47859); L3650: 85 L3651: 0C L3652: 97 L3653: 1E # .byte LO(21125); .byte LO(17164); .byte LO(29079); .byte LO(24606); L3654: A1 L3655: 28 L3656: B3 L3657: 3A # .byte LO( 5281); .byte LO( 1320); .byte LO(14259); .byte LO( 9786); L3658: CD L3659: 44 L365A: DF L365B: 56 # .byte LO(57037); .byte LO(53060); .byte LO(64991); .byte LO(60502); L365C: E9 L365D: 60 L365E: FB L365F: 72 # .byte LO(39145); .byte LO(35168); .byte LO(48123); .byte LO(43634); L3660: 06 L3661: 8F L3662: 14 L3663: 9D # .byte LO(25350); .byte LO(29327); .byte LO(16404); .byte LO(20893); L3664: 22 L3665: AB L3666: 30 L3667: B9 # .byte LO( 9506); .byte LO(13483); .byte LO( 1584); .byte LO( 6073); L3668: 4E L3669: C7 L366A: 5C L366B: D5 # .byte LO(61262); .byte LO(65223); .byte LO(52316); .byte LO(56789); L366C: 6A L366D: E3 L366E: 78 L366F: F1 # .byte LO(43370); .byte LO(47331); .byte LO(35448); .byte LO(39921); L3670: 87 L3671: 0E L3672: 95 L3673: 1C # .byte LO(29575); .byte LO(25102); .byte LO(20629); .byte LO(16668); L3674: A3 L3675: 2A L3676: B1 L3677: 38 # .byte LO(13731); .byte LO( 9258); .byte LO( 5809); .byte LO( 1848); L3678: CF L3679: 46 L367A: DD L367B: 54 # .byte LO(65487); .byte LO(60998); .byte LO(56541); .byte LO(52564); L367C: EB L367D: 62 L367E: F9 L367F: 70 # .byte LO(47595); .byte LO(43106); .byte LO(39673); .byte LO(35696); L3680: 08 L3681: 81 L3682: 1A L3683: 93 # .byte LO(33800); .byte LO(38273); .byte LO(42778); .byte LO(46739); L3684: 2C L3685: A5 L3686: 3E L3687: B7 # .byte LO(49708); .byte LO(54181); .byte LO(57662); .byte LO(61623); L3688: 40 L3689: C9 L368A: 52 L368B: DB # .byte LO( 2112); .byte LO( 6601); .byte LO(11090); .byte LO(15067); L368C: 64 L368D: ED L368E: 76 L368F: FF # .byte LO(20068); .byte LO(24557); .byte LO(28022); .byte LO(31999); L3690: 89 L3691: 00 L3692: 9B L3693: 12 # .byte LO(38025); .byte LO(34048); .byte LO(47003); .byte LO(42514); L3694: AD L3695: 24 L3696: BF L3697: 36 # .byte LO(53933); .byte LO(49956); .byte LO(61887); .byte LO(57398); L3698: C1 L3699: 48 L369A: D3 L369B: 5A # .byte LO( 6337); .byte LO( 2376); .byte LO(15315); .byte LO(10842); L369C: E5 L369D: 6C L369E: F7 L369F: 7E # .byte LO(24293); .byte LO(20332); .byte LO(32247); .byte LO(27774); L36A0: 0A L36A1: 83 L36A2: 18 L36A3: 91 # .byte LO(42250); .byte LO(46211); .byte LO(34328); .byte LO(38801); L36A4: 2E L36A5: A7 L36A6: 3C L36A7: B5 # .byte LO(58158); .byte LO(62119); .byte LO(49212); .byte LO(53685); L36A8: 42 L36A9: CB L36AA: 50 L36AB: D9 # .byte LO(10562); .byte LO(14539); .byte LO( 2640); .byte LO( 7129); L36AC: 66 L36AD: EF L36AE: 74 L36AF: FD # .byte LO(28518); .byte LO(32495); .byte LO(19572); .byte LO(24061); L36B0: 8B L36B1: 02 L36B2: 99 L36B3: 10 # .byte LO(46475); .byte LO(41986); .byte LO(38553); .byte LO(34576); L36B4: AF L36B5: 26 L36B6: BD L36B7: 34 # .byte LO(62383); .byte LO(57894); .byte LO(53437); .byte LO(49460); L36B8: C3 L36B9: 4A L36BA: D1 L36BB: 58 # .byte LO(14787); .byte LO(10314); .byte LO( 6865); .byte LO( 2904); L36BC: E7 L36BD: 6E L36BE: F5 L36BF: 7C # .byte LO(32743); .byte LO(28270); .byte LO(23797); .byte LO(19836); L36C0: 0C L36C1: 85 L36C2: 1E L36C3: 97 # .byte LO(50700); .byte LO(55173); .byte LO(58654); .byte LO(62615); L36C4: 28 L36C5: A1 L36C6: 3A L36C7: B3 # .byte LO(32808); .byte LO(37281); .byte LO(41786); .byte LO(45747); L36C8: 44 L36C9: CD L36CA: 56 L36CB: DF # .byte LO(19012); .byte LO(23501); .byte LO(26966); .byte LO(30943); L36CC: 60 L36CD: E9 L36CE: 72 L36CF: FB # .byte LO( 3168); .byte LO( 7657); .byte LO(12146); .byte LO(16123); L36D0: 8D L36D1: 04 L36D2: 9F L36D3: 16 # .byte LO(54925); .byte LO(50948); .byte LO(62879); .byte LO(58390); L36D4: A9 L36D5: 20 L36D6: BB L36D7: 32 # .byte LO(37033); .byte LO(33056); .byte LO(46011); .byte LO(41522); L36D8: C5 L36D9: 4C L36DA: D7 L36DB: 5E # .byte LO(23237); .byte LO(19276); .byte LO(31191); .byte LO(26718); L36DC: E1 L36DD: 68 L36DE: F3 L36DF: 7A # .byte LO( 7393); .byte LO( 3432); .byte LO(16371); .byte LO(11898); L36E0: 0E L36E1: 87 L36E2: 1C L36E3: 95 # .byte LO(59150); .byte LO(63111); .byte LO(50204); .byte LO(54677); L36E4: 2A L36E5: A3 L36E6: 38 L36E7: B1 # .byte LO(41258); .byte LO(45219); .byte LO(33336); .byte LO(37809); L36E8: 46 L36E9: CF L36EA: 54 L36EB: DD # .byte LO(27462); .byte LO(31439); .byte LO(18516); .byte LO(23005); L36EC: 62 L36ED: EB L36EE: 70 L36EF: F9 # .byte LO(11618); .byte LO(15595); .byte LO( 3696); .byte LO(8185); L36F0: 8F L36F1: 06 L36F2: 9D L36F3: 14 # .byte LO(63375); .byte LO(58886); .byte LO(54429); .byte LO(50452); L36F4: AB L36F5: 22 L36F6: B9 L36F7: 30 # .byte LO(45483); .byte LO(40994); .byte LO(37561); .byte LO(33584); L36F8: C7 L36F9: 4E L36FA: D5 L36FB: 5C # .byte LO(31687); .byte LO(27214); .byte LO(22741); .byte LO(18780); L36FC: E3 L36FD: 6A L36FE: F1 L36FF: 78 # .byte LO(15843); .byte LO(11370); .byte LO( 7921); .byte LO(3960); # # !====================================================================== # # .align 8, 0xFF # dtmf_sintab: L3700: 21 L3701: 21 L3702: 22 L3703: 23 L3704: 24 L3705: 24 L3706: 25 # .byte 33, 33, 34, 35, 36, 36, 37, 38 L3707: 26 L3708: 27 L3709: 28 L370A: 28 L370B: 29 L370C: 2A L370D: 2B L370E: 2B # .byte 39, 40, 40, 41, 42, 43, 43, 44 L370F: 2C L3710: 2D L3711: 2E L3712: 2E L3713: 2F L3714: 30 L3715: 31 L3716: 31 # .byte 45, 46, 46, 47, 48, 49, 49, 50 L3717: 32 L3718: 33 L3719: 33 L371A: 34 L371B: 34 L371C: 35 L371D: 36 L371E: 36 # .byte 51, 51, 52, 52, 53, 54, 54, 55 L371F: 37 L3720: 37 L3721: 38 L3722: 39 L3723: 39 L3724: 3A L3725: 3A L3726: 3B # .byte 55, 56, 57, 57, 58, 58, 59, 59 L3727: 3B L3728: 3C L3729: 3C L372A: 3C L372B: 3D L372C: 3D L372D: 3E L372E: 3E # .byte 60, 60, 60, 61, 61, 62, 62, 62 L372F: 3E L3730: 3F L3731: 3F L3732: 3F L3733: 3F L3734: 40 L3735: 40 L3736: 40 # .byte 63, 63, 63, 63, 64, 64, 64, 64 L3737: 40 L3738: 40 L3739: 41 L373A: 41 L373B: 41 L373C: 41 L373D: 41 L373E: 41 # .byte 64, 65, 65, 65, 65, 65, 65, 65 L373F: 41 L3740: 41 L3741: 41 L3742: 41 L3743: 41 L3744: 41 L3745: 41 L3746: 41 # .byte 65, 65, 65, 65, 65, 65, 65, 65 L3747: 41 L3748: 40 L3749: 40 L374A: 40 L374B: 40 L374C: 40 L374D: 3F L374E: 3F # .byte 64, 64, 64, 64, 64, 63, 63, 63 L374F: 3F L3750: 3F L3751: 3E L3752: 3E L3753: 3E L3754: 3D L3755: 3D L3756: 3C # .byte 63, 62, 62, 62, 61, 61, 60, 60 L3757: 3C L3758: 3C L3759: 3B L375A: 3B L375B: 3A L375C: 3A L375D: 39 L375E: 39 # .byte 60, 59, 59, 58, 58, 57, 57, 56 L375F: 38 L3760: 37 L3761: 37 L3762: 36 L3763: 36 L3764: 35 L3765: 34 L3766: 34 # .byte 55, 55, 54, 54, 53, 52, 52, 51 L3767: 33 L3768: 33 L3769: 32 L376A: 31 L376B: 31 L376C: 30 L376D: 2F L376E: 2E # .byte 51, 50, 49, 49, 48, 47, 46, 46 L376F: 2E L3770: 2D L3771: 2C L3772: 2B L3773: 2B L3774: 2A L3775: 29 L3776: 28 # .byte 45, 44, 43, 43, 42, 41, 40, 40 L3777: 28 L3778: 27 L3779: 26 L377A: 25 L377B: 24 L377C: 24 L377D: 23 L377E: 22 # .byte 39, 38, 37, 36, 36, 35, 34, 33 L377F: 21 L3780: 21 L3781: 20 L3782: 1F L3783: 1E L3784: 1D L3785: 1D L3786: 1C # .byte 33, 32, 31, 30, 29, 29, 28, 27 L3787: 1B L3788: 1A L3789: 19 L378A: 19 L378B: 18 L378C: 17 L378D: 16 L378E: 16 # .byte 26, 25, 25, 24, 23, 22, 22, 21 L378F: 15 L3790: 14 L3791: 13 L3792: 13 L3793: 12 L3794: 11 L3795: 10 L3796: 10 # .byte 20, 19, 19, 18, 17, 16, 16, 15 L3797: 0F L3798: 0E L3799: 0E L379A: 0D L379B: 0D L379C: 0C L379D: 0B L379E: 0B # .byte 14, 14, 13, 13, 12, 11, 11, 10 L379F: 0A L37A0: 0A L37A1: 09 L37A2: 08 L37A3: 08 L37A4: 07 L37A5: 07 L37A6: 06 # .byte 10, 9, 8, 8, 7, 7, 6, 6 L37A7: 06 L37A8: 05 L37A9: 05 L37AA: 05 L37AB: 04 L37AC: 04 L37AD: 03 L37AE: 03 # .byte 5, 5, 5, 4, 4, 3, 3, 3 L37AF: 03 L37B0: 02 L37B1: 02 L37B2: 02 L37B3: 02 L37B4: 01 L37B5: 01 L37B6: 01 # .byte 2, 2, 2, 2, 1, 1, 1, 1 L37B7: 01 L37B8: 01 L37B9: 00 L37BA: 00 L37BB: 00 L37BC: 00 L37BD: 00 L37BE: 00 # .byte 1, 0, 0, 0, 0, 0, 0, 0 L37BF: 00 L37C0: 00 L37C1: 00 L37C2: 00 L37C3: 00 L37C4: 00 L37C5: 00 L37C6: 00 # .byte 0, 0, 0, 0, 0, 0, 0, 0 L37C7: 00 L37C8: 01 L37C9: 01 L37CA: 01 L37CB: 01 L37CC: 01 L37CD: 02 L37CE: 02 # .byte 1, 1, 1, 1, 1, 2, 2, 2 L37CF: 02 L37D0: 02 L37D1: 03 L37D2: 03 L37D3: 03 L37D4: 04 L37D5: 04 L37D6: 05 # .byte 2, 3, 3, 3, 4, 4, 5, 5 L37D7: 05 L37D8: 05 L37D9: 06 L37DA: 06 L37DB: 07 L37DC: 07 L37DD: 08 L37DE: 08 # .byte 5, 6, 6, 7, 7, 8, 8, 9 L37DF: 09 L37E0: 0A L37E1: 0A L37E2: 0B L37E3: 0B L37E4: 0C L37E5: 0D L37E6: 0D # .byte 10, 10, 11, 11, 12, 13, 13, 14 L37E7: 0E L37E8: 0E L37E9: 0F L37EA: 10 L37EB: 10 L37EC: 11 L37ED: 12 L37EE: 13 # .byte 14, 15, 16, 16, 17, 18, 19, 19 L37EF: 13 L37F0: 14 L37F1: 15 L37F2: 16 L37F3: 16 L37F4: 17 L37F5: 18 L37F6: 19 # .byte 20, 21, 22, 22, 23, 24, 25, 25 L37F7: 19 L37F8: 1A L37F9: 1B L37FA: 1C L37FB: 1D L37FC: 1D L37FD: 1E L37FE: 1F # .byte 26, 27, 28, 29, 29, 30, 31, 32 L37FF: 20 # # !====================================================================== # .align 8, 0xFF # cu53an_font: # # .byte 0x5f ! 0 0 1 2 3 4 - 6 L3800: 5F # .byte 0x0c ! 1 - - 2 3 - - - L3801: 0C # .byte 0x7a ! 2 - 1 - 3 4 5 6 L3802: 7A # .byte 0x7c ! 3 - - 2 3 4 5 6 L3803: 7C # .byte 0x2d ! 4 0 - 2 3 - 5 - L3804: 2D # .byte 0x75 ! 5 0 - 2 - 4 5 6 L3805: 75 # .byte 0x77 ! 6 0 1 2 - 4 5 6 L3806: 77 # .byte 0x1c ! 7 - - 2 3 4 - - L3807: 1C # .byte 0x7f ! 8 0 1 2 3 4 5 6 L3808: 7F # .byte 0x7d ! 9 0 - 2 3 4 5 6 L3809: 7D # .byte 0x3f ! A 0 1 2 3 4 5 - L380A: 3F # .byte 0x67 ! b 0 1 2 - - 5 6 L380B: 67 # .byte 0x53 ! C 0 1 - - 4 - 6 L380C: 53 # .byte 0x6e ! d - 1 2 3 - 5 6 L380D: 6E # .byte 0x73 ! E 0 1 - - 4 5 6 L380E: 73 # .byte 0x33 ! F 0 1 - - 4 5 - L380F: 33 # # .byte 0x57 ! G 0 1 2 - 4 - 6 L3810: 57 # # .org cu53an_font + ' ' # # .byte 0x00 ! - - - - - - - L3820: 00 # .byte 0x0c ! ! - - 2 3 - - - L3821: 0C # .byte 0x09 ! " 0 - - 3 - - - L3822: 09 # .byte 0x66 ! # - 1 2 - - 5 6 L3823: 66 # .byte 0x25 ! $ 0 - 2 - - 5 - L3824: 25 # .byte 0x05 ! % 0 - 2 - - - - L3825: 05 # .byte 0x6a ! & - 1 - 3 - 5 6 L3826: 6A # .byte 0x08 ! ' - - - 3 - - - L3827: 08 # .byte 0x0c ! ( - - 2 3 - - - L3828: 0C # .byte 0x03 ! ) 0 1 - - - - - L3829: 03 # .byte 0x70 ! * - - - - 4 5 6 L382A: 70 # .byte 0x23 ! + 0 1 - - - 5 - L382B: 23 # .byte 0x02 ! , - 1 - - - - - L382C: 02 # .byte 0x20 ! - - - - - - 5 - L382D: 20 # .byte 0x02 ! . - 1 - - - - - L382E: 02 # .byte 0x2a ! / - 1 - 3 - 5 - L382F: 2A # .byte 0x5f ! 0 0 1 2 3 4 - 6 L3830: 5F # .byte 0x0c ! 1 - - 2 3 - - - L3831: 0C # .byte 0x7a ! 2 - 1 - 3 4 5 6 L3832: 7A # .byte 0x7c ! 3 - - 2 3 4 5 6 L3833: 7C # .byte 0x2d ! 4 0 - 2 3 - 5 - L3834: 2D # .byte 0x75 ! 5 0 - 2 - 4 5 6 L3835: 75 # .byte 0x77 ! 6 0 1 2 - 4 5 6 L3836: 77 # .byte 0x1c ! 7 - - 2 3 4 - - L3837: 1C # .byte 0x7f ! 8 0 1 2 3 4 5 6 L3838: 7F # .byte 0x7d ! 9 0 - 2 3 4 5 6 L3839: 7D # .byte 0x50 ! : - - - - 4 - 6 L383A: 50 # .byte 0x48 ! ; - - - 3 - - 6 L383B: 48 # .byte 0x2c ! < - - 2 3 - 5 - L383C: 2C # .byte 0x60 ! = - - - - - 5 6 L383D: 60 # .byte 0x23 ! > 0 1 - - - 5 - L383E: 23 # .byte 0x3a ! ? - 1 - 3 4 5 - L383F: 3A # .byte 0x7e ! @ - 1 2 3 4 5 6 L3840: 7E # .byte 0x3f ! A 0 1 2 3 4 5 - L3841: 3F # .byte 0x67 ! b 0 1 2 - - 5 6 L3842: 67 # .byte 0x53 ! C 0 1 - - 4 - 6 L3843: 53 # .byte 0x6e ! d - 1 2 3 - 5 6 L3844: 6E # .byte 0x73 ! E 0 1 - - 4 5 6 L3845: 73 # .byte 0x33 ! F 0 1 - - 4 5 - L3846: 33 # .byte 0x57 ! G 0 1 2 - 4 - 6 L3847: 57 # .byte 0x2f ! H 0 1 2 3 - 5 - L3848: 2F # .byte 0x0c ! I - - 2 3 - - - L3849: 0C # .byte 0x4e ! J - 1 2 3 - - 6 L384A: 4E # .byte 0x2f ! K - 1 2 3 - - 6 L384B: 2F # .byte 0x43 ! L 0 1 - - - - 6 L384C: 43 # .byte 0x1f ! M 0 1 2 3 4 - - L384D: 1F # .byte 0x26 ! N - 1 2 - - 5 - L384E: 26 # .byte 0x5f ! O 0 1 2 3 4 - 6 L384F: 5F # .byte 0x3b ! P 0 1 - 3 4 5 - L3850: 3B # .byte 0x3d ! Q 0 - 2 3 4 5 - L3851: 3D # .byte 0x1b ! R 0 1 - 3 4 - - L3852: 1B # .byte 0x75 ! S 0 - 2 - 4 5 6 L3853: 75 # .byte 0x13 ! T 0 1 - - 4 - - L3854: 13 # .byte 0x4f ! U 0 1 2 3 - - 6 L3855: 4F # .byte 0x4f ! V 0 1 2 3 - - 6 L3856: 4F # .byte 0x4f ! W 0 1 2 3 - - 6 L3857: 4F # .byte 0x70 ! X - - - - 4 5 6 L3858: 70 # .byte 0x6d ! Y 0 - 2 3 - 5 6 L3859: 6D # .byte 0x7a ! Z - 1 - 3 4 5 6 L385A: 7A # .byte 0x53 ! [ 0 1 - - 4 - 6 L385B: 53 # .byte 0x25 ! \ 0 - 2 - - 5 - L385C: 25 # .byte 0x5c ! ] - - 2 3 4 - 6 L385D: 5C # .byte 0x10 ! ^ - - - - 4 - - L385E: 10 # .byte 0x40 ! _ - - - - - - 6 L385F: 40 # .byte 0x01 ! ` 0 - - - - - - L3860: 01 # .byte 0x26 ! a - 1 2 - - 5 - L3861: 26 # .byte 0x67 ! b 0 1 2 - - 5 6 L3862: 67 # .byte 0x62 ! c - 1 - - - 5 6 L3863: 62 # .byte 0x6e ! d - 1 2 3 - 5 6 L3864: 6E # .byte 0x62 ! e - 1 - - - 5 6 L3865: 62 # .byte 0x33 ! f 0 1 - - 4 5 - L3866: 33 # .byte 0x7d ! g 0 - 2 3 4 5 6 L3867: 7D # .byte 0x27 ! h 0 1 2 - - 5 - L3868: 27 # .byte 0x04 ! i - - 2 - - - - L3869: 04 # .byte 0x44 ! j - - 2 - - - 6 L386A: 44 # .byte 0x27 ! k L386B: 27 # .byte 0x42 ! l - 1 - - - - 6 L386C: 42 # .byte 0x26 ! m - 1 2 - - 5 - L386D: 26 # .byte 0x26 ! n - 1 2 - - 5 - L386E: 26 # .byte 0x66 ! o - 1 2 - - 5 6 L386F: 66 # .byte 0x3b ! p 0 1 - 3 4 5 - L3870: 3B # .byte 0x3d ! q 0 - 2 3 4 5 - L3871: 3D # .byte 0x22 ! r - 1 - - - 5 - L3872: 22 # .byte 0x75 ! s 0 - 2 - 4 5 6 L3873: 75 # .byte 0x63 ! t 0 1 - - - 5 6 L3874: 63 # .byte 0x46 ! u - 1 2 - - - 6 L3875: 46 # .byte 0x46 ! v - 1 2 - - - 6 L3876: 46 # .byte 0x46 ! w - 1 2 - - - 6 L3877: 46 # .byte 0x06 ! x - 1 2 - - - - L3878: 06 # .byte 0x2d ! y 0 - 2 3 - 5 - L3879: 2D # .byte 0x60 ! z - - - - - 5 6 L387A: 60 # .byte 0x62 ! { - 1 - - - 5 6 L387B: 62 # .byte 0x02 ! | - 1 - - - - - L387C: 02 # .byte 0x64 ! } - - 2 - - 5 6 L387D: 64 # .byte 0x10 ! ~ - - - - 4 - - L387E: 10 # .byte 0x00 ! ^? - 1 - 3 4 5 6 L387F: 00 # # ASSERT((. - cu53an_font) == 128) # # ! must be inside page # # dtmf_8870_tab: L3880: 0D L3881: 01 L3882: 02 L3883: 03 L3884: 04 L3885: 05 L3886: 06 L3887: 07 L3888: 08 L3889: 09 L388A: 00 L388B: 2A L388C: 23 L388D: 0A L388E: 0B # .byte 0xD, 1,2,3,4,5,6,7,8,9, 0x0, '*', '#', 0xA, 0xB, 0xC L388F: 0C # # ASSERT(HI(.) == HI(dtmf_8870_tab)) # # !====================================================================== # ! # ! 0x80 emits CTCSS square wave. # ! # ! This needs a rewire of the timer CLK2 from the same place as # ! CLK0 and CLK1, 4.032 MHz. Otherwise the tones are just too wrong. # ! After the rewire the result is very accurate. # ! # ! Please cut the CLK2 wire into "keskeytyskytkenta" too. # # CTCSS_FIRST = 64 # # ctcss_tab: # .word 63000 ! 64Hz ( 64.0Hz) L3890: 18 F6 # .word 62031 ! 65Hz ( 65.0Hz) L3892: 4F F2 # .word 61091 ! 66Hz ( 66.0Hz) L3894: A3 EE # .word 60179 ! 67Hz ( 67.0Hz) L3896: 13 EB # .word 59294 ! 68Hz ( 68.0Hz) L3898: 9E E7 # .word 58435 ! 69Hz ( 69.0Hz) L389A: 43 E4 # .word 57600 ! 70Hz ( 70.0Hz) L389C: 00 E1 # .word 56789 ! 71Hz ( 71.0Hz) L389E: D5 DD # .word 56000 ! 72Hz ( 72.0Hz) L38A0: C0 DA # .word 55233 ! 73Hz ( 73.0Hz) L38A2: C1 D7 # .word 54486 ! 74Hz ( 74.0Hz) L38A4: D6 D4 # .word 53760 ! 75Hz ( 75.0Hz) L38A6: 00 D2 # .word 53053 ! 76Hz ( 76.0Hz) L38A8: 3D CF # .word 52364 ! 77Hz ( 77.0Hz) L38AA: 8C CC # .word 51692 ! 78Hz ( 78.0Hz) L38AC: EC C9 # .word 51038 ! 79Hz ( 79.0Hz) L38AE: 5E C7 # .word 50400 ! 80Hz ( 80.0Hz) L38B0: E0 C4 # .word 49778 ! 81Hz ( 81.0Hz) L38B2: 72 C2 # .word 49171 ! 82Hz ( 82.0Hz) L38B4: 13 C0 # .word 48578 ! 83Hz ( 83.0Hz) L38B6: C2 BD # .word 48000 ! 84Hz ( 84.0Hz) L38B8: 80 BB # .word 47435 ! 85Hz ( 85.0Hz) L38BA: 4B B9 # .word 46884 ! 86Hz ( 86.0Hz) L38BC: 24 B7 # .word 46345 ! 87Hz ( 87.0Hz) L38BE: 09 B5 # .word 45818 ! 88Hz ( 88.0Hz) L38C0: FA B2 # .word 45303 ! 89Hz ( 89.0Hz) L38C2: F7 B0 # .word 44800 ! 90Hz ( 90.0Hz) L38C4: 00 AF # .word 44308 ! 91Hz ( 91.0Hz) L38C6: 14 AD # .word 43826 ! 92Hz ( 92.0Hz) L38C8: 32 AB # .word 43355 ! 93Hz ( 93.0Hz) L38CA: 5B A9 # .word 42894 ! 94Hz ( 94.0Hz) L38CC: 8E A7 # .word 42442 ! 95Hz ( 95.0Hz) L38CE: CA A5 # .word 42000 ! 96Hz ( 96.0Hz) L38D0: 10 A4 # .word 41567 ! 97Hz ( 97.0Hz) L38D2: 5F A2 # .word 41143 ! 98Hz ( 98.0Hz) L38D4: B7 A0 # .word 40727 ! 99Hz ( 99.0Hz) L38D6: 17 9F # .word 40320 ! 100Hz (100.0Hz) L38D8: 80 9D # .word 39921 ! 101Hz (101.0Hz) L38DA: F1 9B # .word 39529 ! 102Hz (102.0Hz) L38DC: 69 9A # .word 39146 ! 103Hz (103.0Hz) L38DE: EA 98 # .word 38769 ! 104Hz (104.0Hz) L38E0: 71 97 # .word 38400 ! 105Hz (105.0Hz) L38E2: 00 96 # .word 38038 ! 106Hz (106.0Hz) L38E4: 96 94 # .word 37682 ! 107Hz (107.0Hz) L38E6: 32 93 # .word 37333 ! 108Hz (108.0Hz) L38E8: D5 91 # .word 36991 ! 109Hz (109.0Hz) L38EA: 7F 90 # .word 36655 ! 110Hz (110.0Hz) L38EC: 2F 8F # .word 36324 ! 111Hz (111.0Hz) L38EE: E4 8D # .word 36000 ! 112Hz (112.0Hz) L38F0: A0 8C # .word 35681 ! 113Hz (113.0Hz) L38F2: 61 8B # .word 35368 ! 114Hz (114.0Hz) L38F4: 28 8A # .word 35061 ! 115Hz (115.0Hz) L38F6: F5 88 # .word 34759 ! 116Hz (116.0Hz) L38F8: C7 87 # .word 34462 ! 117Hz (117.0Hz) L38FA: 9E 86 # .word 34169 ! 118Hz (118.0Hz) L38FC: 79 85 # .word 33882 ! 119Hz (119.0Hz) L38FE: 5A 84 # .word 33600 ! 120Hz (120.0Hz) L3900: 40 83 # .word 33322 ! 121Hz (121.0Hz) L3902: 2A 82 # .word 33049 ! 122Hz (122.0Hz) L3904: 19 81 # .word 32780 ! 123Hz (123.0Hz) L3906: 0C 80 # .word 32516 ! 124Hz (124.0Hz) L3908: 04 7F # .word 32256 ! 125Hz (125.0Hz) L390A: 00 7E # .word 32000 ! 126Hz (126.0Hz) L390C: 00 7D # .word 31748 ! 127Hz (127.0Hz) L390E: 04 7C # .word 31500 ! 128Hz (128.0Hz) L3910: 0C 7B # .word 31256 ! 129Hz (129.0Hz) L3912: 18 7A # .word 31015 ! 130Hz (130.0Hz) L3914: 27 79 # .word 30779 ! 131Hz (131.0Hz) L3916: 3B 78 # .word 30545 ! 132Hz (132.0Hz) L3918: 51 77 # .word 30316 ! 133Hz (133.0Hz) L391A: 6C 76 # .word 30090 ! 134Hz (134.0Hz) L391C: 8A 75 # .word 29867 ! 135Hz (135.0Hz) L391E: AB 74 # .word 29647 ! 136Hz (136.0Hz) L3920: CF 73 # .word 29431 ! 137Hz (137.0Hz) L3922: F7 72 # .word 29217 ! 138Hz (138.0Hz) L3924: 21 72 # .word 29007 ! 139Hz (139.0Hz) L3926: 4F 71 # .word 28800 ! 140Hz (140.0Hz) L3928: 80 70 # .word 28596 ! 141Hz (141.0Hz) L392A: B4 6F # .word 28394 ! 142Hz (142.0Hz) L392C: EA 6E # .word 28196 ! 143Hz (143.0Hz) L392E: 24 6E # .word 28000 ! 144Hz (144.0Hz) L3930: 60 6D # .word 27807 ! 145Hz (145.0Hz) L3932: 9F 6C # .word 27616 ! 146Hz (146.0Hz) L3934: E0 6B # .word 27429 ! 147Hz (147.0Hz) L3936: 25 6B # .word 27243 ! 148Hz (148.0Hz) L3938: 6B 6A # .word 27060 ! 149Hz (149.0Hz) L393A: B4 69 # .word 26880 ! 150Hz (150.0Hz) L393C: 00 69 # .word 26702 ! 151Hz (151.0Hz) L393E: 4E 68 # .word 26526 ! 152Hz (152.0Hz) L3940: 9E 67 # .word 26353 ! 153Hz (153.0Hz) L3942: F1 66 # .word 26182 ! 154Hz (154.0Hz) L3944: 46 66 # .word 26013 ! 155Hz (155.0Hz) L3946: 9D 65 # .word 25846 ! 156Hz (156.0Hz) L3948: F6 64 # .word 25682 ! 157Hz (157.0Hz) L394A: 52 64 # .word 25519 ! 158Hz (158.0Hz) L394C: AF 63 # .word 25358 ! 159Hz (159.0Hz) L394E: 0E 63 # .word 25200 ! 160Hz (160.0Hz) L3950: 70 62 # .word 25043 ! 161Hz (161.0Hz) L3952: D3 61 # .word 24889 ! 162Hz (162.0Hz) L3954: 39 61 # .word 24736 ! 163Hz (163.0Hz) L3956: A0 60 # .word 24585 ! 164Hz (164.0Hz) L3958: 09 60 # .word 24436 ! 165Hz (165.0Hz) L395A: 74 5F # .word 24289 ! 166Hz (166.0Hz) L395C: E1 5E # .word 24144 ! 167Hz (167.0Hz) L395E: 50 5E # .word 24000 ! 168Hz (168.0Hz) L3960: C0 5D # .word 23858 ! 169Hz (169.0Hz) L3962: 32 5D # .word 23718 ! 170Hz (170.0Hz) L3964: A6 5C # .word 23579 ! 171Hz (171.0Hz) L3966: 1B 5C # .word 23442 ! 172Hz (172.0Hz) L3968: 92 5B # .word 23306 ! 173Hz (173.0Hz) L396A: 0A 5B # .word 23172 ! 174Hz (174.0Hz) L396C: 84 5A # .word 23040 ! 175Hz (175.0Hz) L396E: 00 5A # .word 22909 ! 176Hz (176.0Hz) L3970: 7D 59 # .word 22780 ! 177Hz (177.0Hz) L3972: FC 58 # .word 22652 ! 178Hz (178.0Hz) L3974: 7C 58 # .word 22525 ! 179Hz (179.0Hz) L3976: FD 57 # .word 22400 ! 180Hz (180.0Hz) L3978: 80 57 # .word 22276 ! 181Hz (181.0Hz) L397A: 04 57 # .word 22154 ! 182Hz (182.0Hz) L397C: 8A 56 # .word 22033 ! 183Hz (183.0Hz) L397E: 11 56 # .word 21913 ! 184Hz (184.0Hz) L3980: 99 55 # .word 21795 ! 185Hz (185.0Hz) L3982: 23 55 # .word 21677 ! 186Hz (186.0Hz) L3984: AD 54 # .word 21561 ! 187Hz (187.0Hz) L3986: 39 54 # .word 21447 ! 188Hz (188.0Hz) L3988: C7 53 # .word 21333 ! 189Hz (189.0Hz) L398A: 55 53 # .word 21221 ! 190Hz (190.0Hz) L398C: E5 52 # .word 21110 ! 191Hz (191.0Hz) L398E: 76 52 # .word 21000 ! 192Hz (192.0Hz) L3990: 08 52 # .word 20891 ! 193Hz (193.0Hz) L3992: 9B 51 # .word 20784 ! 194Hz (194.0Hz) L3994: 30 51 # .word 20677 ! 195Hz (195.0Hz) L3996: C5 50 # .word 20571 ! 196Hz (196.0Hz) L3998: 5B 50 # .word 20467 ! 197Hz (197.0Hz) L399A: F3 4F # .word 20364 ! 198Hz (198.0Hz) L399C: 8C 4F # .word 20261 ! 199Hz (199.0Hz) L399E: 25 4F # .word 20160 ! 200Hz (200.0Hz) L39A0: C0 4E # .word 20060 ! 201Hz (201.0Hz) L39A2: 5C 4E # .word 19960 ! 202Hz (202.0Hz) L39A4: F8 4D # .word 19862 ! 203Hz (203.0Hz) L39A6: 96 4D # .word 19765 ! 204Hz (204.0Hz) L39A8: 35 4D # .word 19668 ! 205Hz (205.0Hz) L39AA: D4 4C # .word 19573 ! 206Hz (206.0Hz) L39AC: 75 4C # .word 19478 ! 207Hz (207.0Hz) L39AE: 16 4C # .word 19385 ! 208Hz (208.0Hz) L39B0: B9 4B # .word 19292 ! 209Hz (209.0Hz) L39B2: 5C 4B # .word 19200 ! 210Hz (210.0Hz) L39B4: 00 4B # .word 19109 ! 211Hz (211.0Hz) L39B6: A5 4A # .word 19019 ! 212Hz (212.0Hz) L39B8: 4B 4A # .word 18930 ! 213Hz (213.0Hz) L39BA: F2 49 # .word 18841 ! 214Hz (214.0Hz) L39BC: 99 49 # .word 18753 ! 215Hz (215.0Hz) L39BE: 41 49 # .word 18667 ! 216Hz (216.0Hz) L39C0: EB 48 # .word 18581 ! 217Hz (217.0Hz) L39C2: 95 48 # .word 18495 ! 218Hz (218.0Hz) L39C4: 3F 48 # .word 18411 ! 219Hz (219.0Hz) L39C6: EB 47 # .word 18327 ! 220Hz (220.0Hz) L39C8: 97 47 # .word 18244 ! 221Hz (221.0Hz) L39CA: 44 47 # .word 18162 ! 222Hz (222.0Hz) L39CC: F2 46 # .word 18081 ! 223Hz (223.0Hz) L39CE: A1 46 # .word 18000 ! 224Hz (224.0Hz) L39D0: 50 46 # .word 17920 ! 225Hz (225.0Hz) L39D2: 00 46 # .word 17841 ! 226Hz (226.0Hz) L39D4: B1 45 # .word 17762 ! 227Hz (227.0Hz) L39D6: 62 45 # .word 17684 ! 228Hz (228.0Hz) L39D8: 14 45 # .word 17607 ! 229Hz (229.0Hz) L39DA: C7 44 # .word 17530 ! 230Hz (230.0Hz) L39DC: 7A 44 # .word 17455 ! 231Hz (231.0Hz) L39DE: 2F 44 # .word 17379 ! 232Hz (232.0Hz) L39E0: E3 43 # .word 17305 ! 233Hz (233.0Hz) L39E2: 99 43 # .word 17231 ! 234Hz (234.0Hz) L39E4: 4F 43 # .word 17157 ! 235Hz (235.0Hz) L39E6: 05 43 # .word 17085 ! 236Hz (236.0Hz) L39E8: BD 42 # .word 17013 ! 237Hz (237.0Hz) L39EA: 75 42 # .word 16941 ! 238Hz (238.0Hz) L39EC: 2D 42 # .word 16870 ! 239Hz (239.0Hz) L39EE: E6 41 # .word 16800 ! 240Hz (240.0Hz) L39F0: A0 41 # .word 16730 ! 241Hz (241.0Hz) L39F2: 5A 41 # .word 16661 ! 242Hz (242.0Hz) L39F4: 15 41 # .word 16593 ! 243Hz (243.0Hz) L39F6: D1 40 # .word 16525 ! 244Hz (244.0Hz) L39F8: 8D 40 # .word 16457 ! 245Hz (245.0Hz) L39FA: 49 40 # .word 16390 ! 246Hz (246.0Hz) L39FC: 06 40 # .word 16324 ! 247Hz (247.0Hz) L39FE: C4 3F # .word 16258 ! 248Hz (248.0Hz) L3A00: 82 3F # .word 16193 ! 249Hz (249.0Hz) L3A02: 41 3F # .word 16128 ! 250Hz (250.0Hz) L3A04: 00 3F # .word 16064 ! 251Hz (251.0Hz) L3A06: C0 3E # .word 16000 ! 252Hz (252.0Hz) L3A08: 80 3E # .word 15937 ! 253Hz (253.0Hz) L3A0A: 41 3E # .word 15874 ! 254Hz (254.0Hz) L3A0C: 02 3E # .word 15812 ! 255Hz (255.0Hz) L3A0E: C4 3D # # ctcss_off: # ld a, 0x80 | 0x10 | 0x00 L3A10: 3E 90 L3A12: D3 23 # out [0x20 + 3], a # ld a, 1 L3A14: 3E 01 L3A16: D3 22 # out [0x20 + 2], a ! low for one clock, then rise and stay # ret L3A18: C9 # # ctcss_maybe: # L3A19: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L3A1C: E6 01 L3A1E: 3A 3C C7 # ld a, [cfg_ctcss_hz] # jr z, 1f L3A21: 28 03 L3A23: 3A 1C C0 # ld a, [mem_ctcss_hz] # 1: # # sub CTCSS_FIRST L3A26: D6 40 # jp c, ctcss_off ! too low ones are ignored L3A28: DA 10 3A # L3A2B: 5F # ld e, a # ld d, 0 L3A2C: 16 00 L3A2E: CB 23 # sla e L3A30: CB 12 # rl d ! two bytes per record in table # ld ix, ctcss_tab L3A32: DD 21 90 38 L3A36: DD 19 # add ix, de # # ld a, 0x80 | 0x30 | 0x06 L3A38: 3E B6 L3A3A: D3 23 # out [0x20 + 3], a L3A3C: DD 7E 00 # ld a, [ix+0] L3A3F: D3 22 # out [0x20 + 2], a L3A41: DD 7E 01 # ld a, [ix+1] ! bug was here. not any more. L3A44: D3 22 # out [0x20 + 2], a ! MSByte # # ret L3A46: C9 # # !====================================================================== # # negate_ahl: L3A47: 47 # ld b, a L3A48: 7D # ld a, l L3A49: 2F # cpl # add 1 L3A4A: C6 01 L3A4C: 6F # ld l, a L3A4D: 7C # ld a, h L3A4E: 2F # cpl # adc 0 L3A4F: CE 00 L3A51: 67 # ld h, a L3A52: 78 # ld a, b L3A53: 2F # cpl # adc 0 L3A54: CE 00 # ret L3A56: C9 # # ! # ! Calculate binary value from unpacked string # ! Return in CY AHL # ! # a2i: L3A57: DD E5 # push ix L3A59: C5 # push bc L3A5A: D5 # push de # # ld ix, digbuf L3A5B: DD 21 B6 D0 L3A5F: 3A B5 D0 # ld a, [digidx] L3A62: 4F # ld c, a # # ld a, 0 ! AHL starts from 0x000000 L3A63: 3E 00 L3A65: 67 # ld h, a L3A66: 6F # ld l, a L3A67: 32 B5 D0 # ld [digidx], a # L3A6A: 0D # dec c # jp z, a2i1 L3A6B: CA 03 3B L3A6E: 0D # dec c # jp z, a2i2 L3A6F: CA F0 3A L3A72: 0D # dec c # jp z, a2i3 L3A73: CA DD 3A L3A76: 0D # dec c # jp z, a2i4 L3A77: CA CA 3A L3A7A: 0D # dec c # jp z, a2i5 L3A7B: CA B7 3A L3A7E: 0D # dec c # jp z, a2i6 L3A7F: CA A4 3A L3A82: 0D # dec c # jp z, a2i7 L3A83: CA 91 3A # # jp a2i0 ! more than 7, give 0 L3A86: C3 16 3B # # a2iOV: L3A89: 21 FF FF # ld hl, (0xFFFFFF) % 65536 ; ld a, (0xFFFFFF) / 65536 L3A8C: 3E FF # jp a2i0 L3A8E: C3 16 3B # # a2i7: # ld de, 0x4240 L3A91: 11 40 42 L3A94: DD 46 00 # ld b, [ix] ! x 000 000 L3A97: DD 23 # inc ix L3A99: 04 # inc b # jr 1f L3A9A: 18 06 # 2: L3A9C: 19 # add hl, de # adc 0x0F ! 1 000 000 equals 0x 0F 4240 L3A9D: CE 0F # jp c, a2iOV L3A9F: DA 89 3A # 1: # djnz 2b L3AA2: 10 F8 # a2i6: # ld de, 0x86a0 ! 100 000 equals 0x186a0, thus the adc 1... L3AA4: 11 A0 86 L3AA7: DD 46 00 # ld b, [ix] ! 0 x00 000 L3AAA: DD 23 # inc ix L3AAC: 04 # inc b # jr 1f L3AAD: 18 06 # 2: L3AAF: 19 # add hl, de # adc 1 L3AB0: CE 01 # jp c, a2iOV L3AB2: DA 89 3A # 1: # djnz 2b L3AB5: 10 F8 # a2i5: # ld de, 10000 L3AB7: 11 10 27 L3ABA: DD 46 00 # ld b, [ix] ! 0x0 000 L3ABD: DD 23 # inc ix L3ABF: 04 # inc b # jr 1f L3AC0: 18 06 # 2: L3AC2: 19 # add hl, de # adc 0 L3AC3: CE 00 # jp c, a2iOV L3AC5: DA 89 3A # 1: # djnz 2b L3AC8: 10 F8 # a2i4: # ld de, 1000 L3ACA: 11 E8 03 L3ACD: DD 46 00 # ld b, [ix] ! 00x 000 L3AD0: DD 23 # inc ix L3AD2: 04 # inc b # jr 1f L3AD3: 18 06 # 2: L3AD5: 19 # add hl, de # adc 0 L3AD6: CE 00 # jp c, a2iOV L3AD8: DA 89 3A # 1: # djnz 2b L3ADB: 10 F8 # a2i3: # ld de, 100 L3ADD: 11 64 00 L3AE0: DD 46 00 # ld b, [ix] ! 000 x00 L3AE3: DD 23 # inc ix L3AE5: 04 # inc b # jr 1f L3AE6: 18 06 # 2: L3AE8: 19 # add hl, de # adc 0 L3AE9: CE 00 # jp c, a2iOV L3AEB: DA 89 3A # 1: # djnz 2b L3AEE: 10 F8 # a2i2: # ld de, 10 L3AF0: 11 0A 00 L3AF3: DD 46 00 # ld b, [ix] ! 000 0x0 L3AF6: DD 23 # inc ix L3AF8: 04 # inc b # jr 1f L3AF9: 18 06 # 2: L3AFB: 19 # add hl, de # adc 0 L3AFC: CE 00 # jp c, a2iOV L3AFE: DA 89 3A # 1: # djnz 2b L3B01: 10 F8 # a2i1: # ld de, 1 L3B03: 11 01 00 L3B06: DD 46 00 # ld b, [ix] ! 000 00x L3B09: DD 23 # inc ix L3B0B: 04 # inc b # jr 1f L3B0C: 18 06 # 2: L3B0E: 19 # add hl, de # adc 0 L3B0F: CE 00 # jp c, a2iOV L3B11: DA 89 3A # 1: # djnz 2b L3B14: 10 F8 # a2i0: L3B16: D1 # pop de L3B17: C1 # pop bc L3B18: DD E1 # pop ix # # ret ! AHL contains frequency in binary L3B1A: C9 # # # ! Multiply AHL by C, 1.. # ! Result to CY AHL # # mul248: # L3B1B: C5 # push bc L3B1C: D5 # push de # L3B1D: 5D # ld e, l L3B1E: 54 # ld d, h L3B1F: 47 # ld b, a L3B20: A7 # and a ! clear carry # 1: L3B21: 0D # dec c # jr z, 1f L3B22: 28 0A L3B24: ED 5A # adc hl, de L3B26: 88 # adc b # jr nc, 1b L3B27: 30 F8 L3B29: 21 FF FF # ld hl, (0xFFFFFF) % 65536 ; ld a, (0xFFFFFF) / 65536 L3B2C: 3E FF # 1: L3B2E: D1 # pop de L3B2F: C1 # pop bc # # ret L3B30: C9 # # !---------------------------------------------------------------------- # ! # ! Divide AHL by C, result left in HL, remainder in A. # ! # ! Origin: Trash-80 Assembly Language Subroutines, William Barden 1982. # ! # # div248: # L3B31: C5 # push bc # # ld b, 16 ! do this 16 times. L3B32: 06 10 # 2: L3B34: 29 # add hl, hl ! rotate AHL one bit L3B35: 8F # adc a ! position to the left. L3B36: 91 # sub c # jr c, 1f L3B37: 38 05 L3B39: 23 # inc hl ! set lsb of hl, a bit into quotient. # djnz 2b L3B3A: 10 F8 # jr 3f L3B3C: 18 03 # 1: L3B3E: 81 # add c ! oops, should not have subtracted. # djnz 2b L3B3F: 10 F3 # 3: L3B41: C1 # pop bc # # ret L3B42: C9 # # !====================================================================== # # lookup_rfc: # call get_rfc_hl L3B43: CD 5A 3B L3B46: 7E # ld a, [hl] L3B47: 32 CD D0 # ld [rfc], a L3B4A: D3 30 # out [0x30], a # ret L3B4C: C9 # # save_rfc: # call get_rfc_hl L3B4D: CD 5A 3B L3B50: 3A CD D0 # ld a, [rfc] L3B53: 77 # ld [hl], a L3B54: D3 30 # out [0x30], a # call save_nvdata L3B56: CD AE 3B # ret L3B59: C9 # # ! # ! Receiver frequency is first modulo 100MHz, then modulo 1MHz. # ! Each "band" overwrite others, but, for ham bands values dont overlap # ! 432..438 -> 32..38 # ! 144..146 -> 44..46 # ! 50.. 52 -> 50..52 # ! # get_rfc_hl: L3B5A: 2A 08 C0 L3B5D: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] # # ld de, 100000 % 65536 L3B60: 11 A0 86 # ld c, 100000 / 65536 L3B63: 0E 01 L3B65: A7 # and a ! clear CY # 1: L3B66: ED 52 # sbc hl, de L3B68: 99 # sbc c # jp nc, 1b ! modulo down to 0...99999 L3B69: D2 66 3B L3B6C: 19 # add hl, de L3B6D: 89 # adc c # # ld c, -1 ! index [0...99] L3B6E: 0E FF # ld de, 1000 L3B70: 11 E8 03 L3B73: A7 # and a # 1: L3B74: 0C # inc c L3B75: ED 52 # sbc hl, de # sbc 0 L3B77: DE 00 # jp nc, 1b L3B79: D2 74 3B # # ld hl, rfctab L3B7C: 21 9A C0 # ld b, 0 L3B7F: 06 00 L3B81: 09 # add hl, bc # ret L3B82: C9 # # !====================================================================== # # save_nvmisc_and_restart: # L3B83: ED 57 # ld a, iv L3B85: B7 # or a # jp z, 2f ! IV still 0 - don't mess nvram L3B86: CA A7 3B # # # ld hl, nvstart L3B89: 21 00 C0 # ld d, (0x08 | 0x20) & ~0x08 L3B8C: 16 20 # ld e, (0x08 | 0x20) | 0x08 L3B8E: 1E 28 # ld c, 0x80 L3B90: 0E 80 # 1: L3B92: D3 90 # out [0x90], a # L3B94: 7E # ld a, [hl] L3B95: ED 51 # out [c], d L3B97: 77 # ld [hl], a L3B98: ED 59 # out [c], e L3B9A: 23 # inc hl L3B9B: 7C # ld a, h # cp HI(nvend) L3B9C: FE D0 # jp nz, 1b L3B9E: C2 92 3B L3BA1: 7D # ld a, l # cp LO(nvend) L3BA2: FE 00 # jp nz, 1b L3BA4: C2 92 3B # # # 2: # ld sp, 1f L3BA7: 31 AC 3B L3BAA: ED 45 # retn ! restart to (IFF1 still clear) # 1: # .word start ! retn to start L3BAC: 54 01 # # save_nvdata: # L3BAE: ED 57 # ld a, iv L3BB0: B7 # or a # jp z, 2f ! IV still 0 - don't mess nvram L3BB1: CA D0 3B # # # ld hl, nvstart L3BB4: 21 00 C0 # ld d, (0x08 | 0x20) & ~0x08 L3BB7: 16 20 # ld e, (0x08 | 0x20) | 0x08 L3BB9: 1E 28 # ld c, 0x80 L3BBB: 0E 80 # 1: L3BBD: 7E # ld a, [hl] L3BBE: F3 # di L3BBF: ED 51 # out [c], d L3BC1: 77 # ld [hl], a L3BC2: ED 59 # out [c], e L3BC4: FB # ei L3BC5: 23 # inc hl L3BC6: 7C # ld a, h # cp HI(nvend) L3BC7: FE D0 # jr nz, 1b L3BC9: 20 F2 L3BCB: 7D # ld a, l # cp LO(nvend) L3BCC: FE 00 # jr nz, 1b L3BCE: 20 ED # # # 2: # ret L3BD0: C9 # # load_nvdata: # # # ld hl, nvstart L3BD1: 21 00 C0 # ld d, (0x08 | 0x20) & ~0x08 L3BD4: 16 20 # ld e, (0x08 | 0x20) | 0x08 L3BD6: 1E 28 # ld c, 0x80 L3BD8: 0E 80 # 1: L3BDA: D3 90 # out [0x90], a L3BDC: ED 51 # out [c], d L3BDE: 7E # ld a, [hl] L3BDF: ED 59 # out [c], e L3BE1: 77 # ld [hl], a L3BE2: 23 # inc hl L3BE3: 7C # ld a, h # cp HI(nvend) L3BE4: FE D0 # jr nz, 1b L3BE6: 20 F2 L3BE8: 7D # ld a, l # cp LO(nvend) L3BE9: FE 00 # jr nz, 1b L3BEB: 20 ED # # # ret L3BED: C9 # # !======================================================================== # ! # ! Bitbang DTMF out from 8254 timer 1 (the CCIR/MARKER pin). # ! # ! Z80 clock 4.032 MHz ~248 nsec cycle # ! 8254 clock 1 4.032 MHz ~248 nsec cycle # # ! A fixed time (interrupts disabled) program loop is used to create # ! a time cell of 130T times (32.2 usec). # ! There is no padding in the -loop, but creating the time-bound # ! loop later will use less T-times, so it's ok # ! (looping ix=10000 will be 322 msec). # ! # ! The 8254 timer is temporarily reprogrammed for mode0 # ! ("interrupt on terminal count") and LSB-only r/w operations. # ! The loop has a constant execution time, no inner branches at all. # ! # ! The loop calculates sin(low)+sin(high) from table, with DDS; # ! sinus table is scaled from 1...64 so sum range is 2...128 inclusive. # ! # ! Using timer mode 0; the output goes low when the count is written. # ! after the count decrements to 0 the output rises. # ! The loop takes 130T times, slightly longer than any written count. # ! # ! This creates about 31 kHz PWM output. # ! # ! Step 1. # ! Create the tightest loop to walk the phases, sum up values, # ! trickle watchdog and load counter. # ! Count the T times and determine loop execution time. # ! This will be the PWM cell time. # ! # ! Step 2: # ! Pad out a copy of the loop for . # ! # ! Step 3. # ! Build phase-inc-table for tones (see mkdtmfseq.c). # ! Values must be scaled so that the lowest sum (as the count) # ! keeps the timer output almost totally high, # ! and the highest sum keeps it mostly low. # ! T-time (from Z80 CLK) isn't the same as timer period # ! (from 8254 clock 1) (although they just happen to be in ). # ! # ! See companion program mkdtmftab.c # # ! # ! pwm 31015.38462 Hz # ! # dtmf_phase_1750 = 3698 # 17.7 steps # dtmf_phase_1633 = 3451 # 19.0 steps # dtmf_phase_1477 = 3121 # 21.0 steps # dtmf_phase_1336 = 2823 # 23.2 steps # dtmf_phase_1209 = 2555 # 25.7 steps # dtmf_phase_941 = 1988 # 33.0 steps # dtmf_phase_852 = 1800 # 36.4 steps # dtmf_phase_770 = 1627 # 40.3 steps # dtmf_phase_697 = 1473 # 44.5 steps # # dtmf_rowcol_table: # L3BEE: C4 07 # .word dtmf_phase_941, dtmf_phase_1336 ! 0 L3BF0: 07 0B L3BF2: C1 05 # .word dtmf_phase_697, dtmf_phase_1209 ! 1 L3BF4: FB 09 L3BF6: C1 05 # .word dtmf_phase_697, dtmf_phase_1336 ! 2 L3BF8: 07 0B L3BFA: C1 05 # .word dtmf_phase_697, dtmf_phase_1477 ! 3 L3BFC: 31 0C L3BFE: 5B 06 # .word dtmf_phase_770, dtmf_phase_1209 ! 4 L3C00: FB 09 L3C02: 5B 06 # .word dtmf_phase_770, dtmf_phase_1336 ! 5 L3C04: 07 0B L3C06: 5B 06 # .word dtmf_phase_770, dtmf_phase_1477 ! 6 L3C08: 31 0C L3C0A: 08 07 # .word dtmf_phase_852, dtmf_phase_1209 ! 7 L3C0C: FB 09 L3C0E: 08 07 # .word dtmf_phase_852, dtmf_phase_1336 ! 8 L3C10: 07 0B L3C12: 08 07 # .word dtmf_phase_852, dtmf_phase_1477 ! 9 L3C14: 31 0C L3C16: C1 05 # .word dtmf_phase_697, dtmf_phase_1633 ! A L3C18: 7B 0D L3C1A: 5B 06 # .word dtmf_phase_770, dtmf_phase_1633 ! B L3C1C: 7B 0D L3C1E: 08 07 # .word dtmf_phase_852, dtmf_phase_1633 ! C L3C20: 7B 0D L3C22: C4 07 # .word dtmf_phase_941, dtmf_phase_1633 ! D L3C24: 7B 0D L3C26: C4 07 # .word dtmf_phase_941, dtmf_phase_1209 ! * (E) L3C28: FB 09 L3C2A: C4 07 # .word dtmf_phase_941, dtmf_phase_1477 ! # (F) L3C2C: 31 0C # L3C2E: 72 0E # .word dtmf_phase_1750, dtmf_phase_1750 ! 0x10 for DEBUG L3C30: 72 0E # # dtmf_bang_tone: # # ! get index in rowcol table # # cp 'B' L3C32: FE 42 # jr nz, 1f L3C34: 20 02 # ld a, 0x10 ! small button, debug out 1750 Hz L3C36: 3E 10 # 1: # # cp 'C' L3C38: FE 43 # jr nz, 1f L3C3A: 20 02 # ld a, 0xA ! CL is A L3C3C: 3E 0A # 1: # cp 'S' L3C3E: FE 53 # jr nz, 1f L3C40: 20 02 # ld a, 0xB ! STO is B L3C42: 3E 0B # 1: # cp 'R' L3C44: FE 52 # jr nz, 1f L3C46: 20 02 # ld a, 0xC ! RCL is C L3C48: 3E 0C # 1: # cp 'E' L3C4A: FE 45 # jr nz, 1f L3C4C: 20 02 # ld a, 0xD ! ENT is D L3C4E: 3E 0D # 1: # cp '*' L3C50: FE 2A # jr nz, 1f L3C52: 20 02 # ld a, 0xE ! * L3C54: 3E 0E # 1: # cp '#' L3C56: FE 23 # jr nz, 1f L3C58: 20 02 # ld a, 0xF ! # L3C5A: 3E 0F # 1: # # ! shift index into offset, pointer to ix # L3C5C: CB 27 # sla a L3C5E: CB 27 # sla a ! index into byte offset (4 byte records) L3C60: 5F # ld e, a # ld d, 0 L3C61: 16 00 # ld ix, dtmf_rowcol_table ! table[0] L3C63: DD 21 EE 3B L3C67: DD 19 # add ix, de # # ! load phase increments # L3C69: DD 4E 00 # ld c, [ix+0] L3C6C: DD 46 01 # ld b, [ix+1] L3C6F: C5 # push bc ! phase_inc_1 L3C70: DD 4E 02 # ld c, [ix+2] L3C73: DD 46 03 # ld b, [ix+3] L3C76: C5 # push bc L3C77: FD E1 # pop iy ! phase_inc_2 here for a while # L3C79: C1 # pop bc ! phase_inc_1 # ld hl, 0 ! phase_acc_1 L3C7A: 21 00 00 # ld d, HI(dtmf_sintab) ! sintab indexes from both DE's L3C7D: 16 37 # L3C7F: F3 # di ! YES! # L3C80: D9 # exx L3C81: C5 # push bc L3C82: D5 # push de L3C83: E5 # push hl ! save and use another regset for another tone # L3C84: FD E5 # push iy L3C86: C1 # pop bc ! phase_inc_2 # ld hl, 0 ! phase_acc_2 L3C87: 21 00 00 # ld d, HI(dtmf_sintab) L3C8A: 16 37 L3C8C: D9 # exx # # ! reroute tx audio, save previous state to stack # L3C8D: 3A 00 D0 # ld a, [output_0] L3C90: F5 # push af # or 0x20 | 0x80 ! Pass tones, cut mic L3C91: F6 A0 L3C93: D3 60 # out [0x60], a # # ! temporary mode change in timer 1 # # ld a, 0x40 | 0x10 | 0x00 L3C95: 3E 50 L3C97: D3 23 # out [0x20 + 3], a # L3C99: 3A 15 D0 # ld a, [cpu_is_P8E] L3C9C: B7 # or a # jp nz, 2f L3C9D: C2 BB 3C # ! # ! loop, no waitstates # ! # 1: ! %%%%%%%%%%%%%%%%%%%%%% L3CA0: 09 # add hl, bc ! 11T L3CA1: 5C # ld e, h ! 4T L3CA2: 1A # ld a, [de] ! 7T L3CA3: 5F # ld e, a ! 4T L3CA4: D9 # exx ! 4T bc de hl swapped L3CA5: 09 # add hl, bc ! 11T L3CA6: 5C # ld e, h ! 4T L3CA7: 1A # ld a, [de] ! 7T L3CA8: D9 # exx ! 4T bc de hl swapped L3CA9: 83 # add e ! 4T # L3CAA: D3 21 # out [0x20 + 1], a ! 11T 70T here down # ld a, 0x10 ! 7T L3CAC: 3E 10 L3CAE: D3 12 # out [0x10+2], a ! 11T L3CB0: D3 90 # out [0x90], a ! 11T L3CB2: DB 12 # in a, [0x10+2] ! 11T # and 0x20 ! 7T inverted... go if DA low, idle state DA low L3CB4: E6 20 # jr z, 1b ! 12T (when jumping, last one wont matter) L3CB6: 28 E8 # !---------- # ! %%%%%%%%%%%%%%%%%%%%%% 130T total # jp 3f L3CB8: C3 E6 3C # 2: # ! # ! loop, each opcode causes one extra T # ! Want to have the same time anyway (same tables for same timer hw), # ! so 130 * (1/4032000) / (1/8064000) = 260 T-times. # ! # 1: ! %%%%%%%%%%%%%%%%%%%%%% L3CBB: 09 # add hl, bc ! 12T L3CBC: 5C # ld e, h ! 5T L3CBD: 1A # ld a, [de] ! 8T L3CBE: 5F # ld e, a ! 5T L3CBF: D9 # exx ! 5T bc de hl swapped L3CC0: 09 # add hl, bc ! 12T L3CC1: 5C # ld e, h ! 5T L3CC2: 1A # ld a, [de] ! 8T L3CC3: D9 # exx ! 5T bc de hl swapped back right way L3CC4: 83 # add e ! 5T 70T here up # # ! burn 113T padding dummies to use same tables (don't foul a) L3CC5: D3 90 # out [0x90], a ! 1 L3CC7: D3 90 # out [0x90], a ! 2 L3CC9: D3 90 # out [0x90], a ! 3 L3CCB: D3 90 # out [0x90], a ! 4 L3CCD: D3 90 # out [0x90], a ! 5 L3CCF: D3 90 # out [0x90], a ! 6 L3CD1: D3 90 # out [0x90], a ! 7 L3CD3: D3 90 # out [0x90], a ! 8 L3CD5: D3 90 # out [0x90], a ! 9 * 12T = 108T L3CD7: 5F # ld e, a ! + 5T = 113T # L3CD8: D3 21 # out [0x20 + 1], a ! 12T 77T here down # ld a, 0x10 ! 8T L3CDA: 3E 10 L3CDC: D3 12 # out [0x10+2], a ! 12T L3CDE: D3 90 # out [0x90], a ! 12T L3CE0: DB 12 # in a, [0x10+2] ! 12T # and 0x20 ! 8T inverted... go if DA low, idle state DA low L3CE2: E6 20 # jr z, 1b ! 13T (when jumping, last one wont matter) L3CE4: 28 D5 # !---------- # ! %%%%%%%%%%%%%%%%%%%%%% 260T total # # 3: # # ! restore timer back to normal # # call init_timer1 L3CE6: CD 68 22 # L3CE9: F1 # pop af L3CEA: D3 60 # out [0x60], a ! Restore output switches # # ld a, 0x10 L3CEC: 3E 10 L3CEE: D3 12 # out [0x10+2], a ! Fresh value for next escint # # ld a, 0 L3CF0: 3E 00 L3CF2: 32 1F D0 # ld [key_timer], a L3CF5: 32 B4 D0 # ld [keydown], a ! we waited off the key # ld a, -1 L3CF8: 3E FF L3CFA: 32 B0 D0 # ld [key], a L3CFD: 32 AE D0 # ld [lastdigit], a ! otherwise a ghost digit appears after ei # # ! restore another regset # L3D00: D9 # exx L3D01: E1 # pop hl L3D02: D1 # pop de L3D03: C1 # pop bc L3D04: D9 # exx # L3D05: FB # ei # ret L3D06: C9 # # !------------------------------------------------------------------------ # # bang_voice_id: # L3D07: F3 # di ! YES! # # ! reroute tx audio, save previous state to stack # L3D08: 3A 00 D0 # ld a, [output_0] L3D0B: F5 # push af # or 0x20 | 0x80 ! Pass tones, cut mic L3D0C: F6 A0 L3D0E: D3 60 # out [0x60], a # # ! temporary mode change in timer 1 # # ld a, 0x40 | 0x10 | 0x00 L3D10: 3E 50 L3D12: D3 23 # out [0x20 + 3], a # # ! # ! 5250 samples / second in input data # ! each sample used 3 times # ! 15750 Hz pwm # ! ~63.492 usec pwm cell, full range of i8254 LSB only mode, 256 # ! # ! 5250 loops per second # ! : 256 * 3 Ttimes # ! : 512 * 3 Ttimes # ! # ! # ld hl, voice_sample ! 5250 samples / second L3D14: 21 C5 5C # # 1: ! %%%%%%%%%%%%%%%%%%%%% # # call voice_bang_cell ! 17 18 + subroutine L3D17: CD 37 3D L3D1A: 13 L3D1B: CB 7C L3D1D: 18 00 # inc de; bit 7, h; jr 2f; 2: ! 26 29 dummies # # call voice_bang_cell ! 17 18 L3D1F: CD 37 3D L3D22: 13 L3D23: CB 7C L3D25: 18 00 # inc de; bit 7, h; jr 2f; 2: ! 26 29 dummies # # call voice_bang_cell ! 17 18 L3D27: CD 37 3D L3D2A: 23 # inc hl ! 6 7 L3D2B: CB 7C # bit 7, h ! 8 9 # jr z, 1b ! 12 13 (jumping, last one wont matter) L3D2D: 28 E8 # !---------- # ! %%%%%%%%%%%%%%%%%%%%% # # ! restore timer back to normal # # call init_timer1 L3D2F: CD 68 22 # L3D32: F1 # pop af L3D33: D3 60 # out [0x60], a ! Restore output switches # L3D35: FB # ei # ret L3D36: C9 # # ! 256 - 26 T for # ! 512 - 29 T for # # voice_bang_cell: ! 26 29 L3D37: 7E # ld a, [hl] ! 7 8 L3D38: D3 21 # out [0x20 + 1], a ! 11 12 L3D3A: 3A 15 D0 # ld a, [cpu_is_P8E] ! 13 14 L3D3D: B7 # or a ! 4 5 # jp z, 1f ! 10 11 L3D3E: CA 66 3D L3D41: D3 90 # out [0x90], a ! 13 : L3D43: D3 90 # out [0x90], a ! 13 L3D45: D3 90 # out [0x90], a ! 13 L3D47: D3 90 # out [0x90], a ! 13 L3D49: D3 90 # out [0x90], a ! 13 L3D4B: D3 90 # out [0x90], a ! 13 L3D4D: D3 90 # out [0x90], a ! 13 L3D4F: D3 90 # out [0x90], a ! 13 L3D51: D3 90 # out [0x90], a ! 13 L3D53: D3 90 # out [0x90], a ! 13 L3D55: D3 90 # out [0x90], a ! 13 L3D57: D3 90 # out [0x90], a ! 13 L3D59: D3 90 # out [0x90], a ! 13 L3D5B: D3 90 # out [0x90], a ! 13 L3D5D: D3 90 # out [0x90], a ! 13 L3D5F: D3 90 # out [0x90], a ! 13 L3D61: D3 90 # out [0x90], a ! 13 L3D63: C3 66 3D # jp 2f; 2: ! 11 L3D66: D3 90 # 1: out [0x90], a ! : 12 13 L3D68: D3 90 # out [0x90], a ! 12 13 L3D6A: D3 90 # out [0x90], a ! 12 13 L3D6C: D3 90 # out [0x90], a ! 12 13 L3D6E: D3 90 # out [0x90], a ! 12 13 L3D70: D3 90 # out [0x90], a ! 12 13 L3D72: D3 90 # out [0x90], a ! 12 13 L3D74: D3 90 # out [0x90], a ! 12 13 L3D76: D3 90 # out [0x90], a ! 12 13 L3D78: D3 90 # out [0x90], a ! 12 13 L3D7A: D3 90 # out [0x90], a ! 12 13 L3D7C: D3 90 # out [0x90], a ! 12 13 L3D7E: D3 90 # out [0x90], a ! 12 13 L3D80: D3 90 # out [0x90], a ! 168 : 12 13 : 403 L3D82: 86 # add [hl] ! 7 8 # ret ! 10 11 L3D83: C9 # # !256 512 total # # !======================================================================== # ! # ! For any wierd reasons, determine if this is or cpu-card. # ! # ! 8254 clock 1 4.032 MHz ~248 nsec cycle, same on both. # ! # ! : # ! Z80 clock 4.032 MHz ~248 nsec cycle # ! : # ! Z80 clock 8.064 MHz ~124 nsec cycle # ! BUT, each opcode fetch causes one extra T-time of wait. # ! # ! This MUST BE CALLED EARLY, before initializing # ! anything much. # # check_for_P8E_cpu: # # ! # ! Simplify things, program timer for LSB only, # ! mode set for free counting N, N-1, N-2, N-3 # ! # L3D84: D3 90 # out [0x90], a # # ld a, 0x40 | 0x10 | 0x00 L3D86: 3E 50 L3D88: D3 23 # out [0x20+3], a # # ld a, 65 ! see below L3D8A: 3E 41 L3D8C: D3 21 # out [0x20+1], a ! go! # L3D8E: 00 L3D8F: 00 L3D90: 00 L3D91: 00 L3D92: 00 # nop; nop; nop; nop; nop L3D93: 00 L3D94: 00 L3D95: 00 L3D96: 00 L3D97: 00 # nop; nop; nop; nop; nop L3D98: 00 L3D99: 00 L3D9A: 00 L3D9B: 00 L3D9C: 00 # nop; nop; nop; nop; nop L3D9D: 00 L3D9E: 00 L3D9F: 00 L3DA0: 00 L3DA1: 00 # nop; nop; nop; nop; nop ! 20 nops, 4T each without waitstates # L3DA2: DB 21 # in a, [0x20+1] ! not counted (11T), some error L3DA4: D3 90 # out [0x90], a # # ! # ! timer counts 65 steps in 16.1 usec. # ! : # ! 20 * 4T = 80T = 19.8 usec # ! timer has rolled over, bit 7 set. # ! : # ! 20 * 5T = 100T = 12.4 usec # ! no timer rollover yet, bit 7 clear. # ! L3DA6: 07 # rlca ! A.7 into A.0 # and 1 L3DA7: E6 01 # xor 1 L3DA9: EE 01 L3DAB: 32 15 D0 # ld [cpu_is_P8E], a # # ret L3DAE: C9 # # !======================================================================== # ! # ! REPEATER STUFF # # repeater_toggle_suspend: L3DAF: 3A 9F C9 # ld a, [cfg_repeater_suspended] # xor 1 L3DB2: EE 01 # and 1 L3DB4: E6 01 L3DB6: 32 9F C9 # ld [cfg_repeater_suspended], a # ret L3DB9: C9 # # repeater_init: # ld a, 0 L3DBA: 3E 00 L3DBC: 32 10 D8 # ld [repeater_req], a L3DBF: 32 30 D0 # ld [squelch_tightening], a L3DC2: 32 31 D0 # ld [txpwr_increment], a # ld hl, repeater_boot L3DC5: 21 CD 3F L3DC8: 22 08 D8 # ld [repeater_state], hl # ret L3DCB: C9 # # repeater_halt: # call repeater_aoff L3DCC: CD 6A 41 # call repeater_txoff L3DCF: CD 59 41 # jp repeater_init L3DD2: C3 BA 3D # # repeater_run: L3DD5: 3A 16 C7 # ld a, [cfg_function] # cp 1 L3DD8: FE 01 # jp nz, repeater_init ! not repeater, init in case later turned on L3DDA: C2 BA 3D # L3DDD: 3A 9F C9 # ld a, [cfg_repeater_suspended] L3DE0: B7 # or a # jp nz, repeater_halt L3DE1: C2 CC 3D # # ! /LOCAL rising resets repeater into opening state # L3DE4: 3A 30 D8 # ld a, [sio_bctrl_local] # and 0x10 L3DE7: E6 10 # jr nz, 1f ! skip if pin was 1, already handled. L3DE9: 20 0D L3DEB: 3A 2F D8 # ld a, [sio_bctrl_mirror] # and 0x10 L3DEE: E6 10 # jr z, 1f ! skip if pin is 0 (and was 0). L3DF0: 28 06 L3DF2: 32 30 D8 # ld [sio_bctrl_local], a ! remember bit # # jp repeater_open_by_reset L3DF5: C3 22 40 # 1: # # ! Check any #? DTMF commands # L3DF8: 3A 10 D8 # ld a, [repeater_req] # cp 9 ! #9_, close NOW L3DFB: FE 09 # jr nz, 1f L3DFD: 20 17 # ld a, 0 L3DFF: 3E 00 L3E01: 32 10 D8 # ld [repeater_req], a # L3E04: 3A B0 C9 # ld a, [cfg_repeater_cmd_9_hidden] L3E07: B7 # or a # jr nz, 2f ! not allowed, skip L3E08: 20 53 # # call repeater_aoff L3E0A: CD 6A 41 # call repeater_send_roger L3E0D: CD 37 42 # call repeater_txoff L3E10: CD 59 41 # jp repeater_idle L3E13: C3 E0 3F # 1: # cp 0xFF ! #0_, restore squelch & power L3E16: FE FF # jr nz, 1f L3E18: 20 16 # ld a, 0 L3E1A: 3E 00 L3E1C: 32 10 D8 # ld [repeater_req], a # ld a, 0 L3E1F: 3E 00 L3E21: 32 30 D0 # ld [squelch_tightening], a L3E24: 32 31 D0 # ld [txpwr_increment], a # call update_txpwr_if_tx L3E27: CD FF 31 # call repeater_send_roger L3E2A: CD 37 42 # jp 2f L3E2D: C3 5D 3E # 1: # cp 1 ! #1_, tighten squelch L3E30: FE 01 # jr nz, 1f L3E32: 20 11 # ld a, 0 L3E34: 3E 00 L3E36: 32 10 D8 # ld [repeater_req], a L3E39: 3A 1D C9 # ld a, [repeater_cfg_sqincr] L3E3C: 32 30 D0 # ld [squelch_tightening], a # call repeater_send_roger L3E3F: CD 37 42 # jp 2f L3E42: C3 5D 3E # 1: # cp 3 ! #3_ rise tx power L3E45: FE 03 # jr nz, 1f L3E47: 20 14 # ld a, 0 L3E49: 3E 00 L3E4B: 32 10 D8 # ld [repeater_req], a L3E4E: 3A 1E C9 # ld a, [repeater_cfg_txincr] L3E51: 32 31 D0 # ld [txpwr_increment], a # call update_txpwr_if_tx L3E54: CD FF 31 # call repeater_send_roger L3E57: CD 37 42 # jp 2f L3E5A: C3 5D 3E # 1: # 2: L3E5D: 2A 08 D8 # ld hl, [repeater_state] L3E60: E9 # jp [hl] # # ! # ! No id sent here, operator announce assumed # ! # repeater_operator_ptt: L3E61: 3A 16 C7 # ld a, [cfg_function] # cp 1 L3E64: FE 01 L3E66: C0 # ret nz # call repeater_txon L3E67: CD 53 41 # call repeater_aoff L3E6A: CD 6A 41 # call repeater_send_blip L3E6D: CD D2 41 # call repeater_start_timer_ID L3E70: CD 69 3F # call repeater_start_timer_OPEN L3E73: CD 70 3F # jp repeater_open L3E76: C3 52 40 # # ! # ! received dtmf string at hl (h fixed, l wraps over) # ! # dtmf_commands: # L3E79: E5 # push hl # ld de, cfg_exal_dtmf_cmd_pfx L3E7A: 11 97 C9 # call compare_tone_prefix ! de and hl have strings, a receives suffix L3E7D: CD A8 08 L3E80: E1 # pop hl # jp z, exal_command L3E81: CA 6C 0A # L3E84: E5 # push hl # ld de, cfg_repeater_suspend_dtmf_cmd L3E85: 11 A8 C9 # call compare_tone_serie L3E88: CD 57 08 L3E8B: E1 # pop hl # jp z, repeater_toggle_suspend L3E8C: CA AF 3D # L3E8F: 3A 16 C7 # ld a, [cfg_function] ! rest for repeater only # cp 1 L3E92: FE 01 L3E94: C0 # ret nz # L3E95: 7E # ld a, [hl] # cp '#' ! #xxxx L3E96: FE 23 # jp z, dtmf_commands_hash L3E98: CA 9C 3E # # ret L3E9B: C9 # # dtmf_commands_hash: L3E9C: 2C # inc l L3E9D: 2C # inc l L3E9E: 7E # ld a, [hl] # cp ' ' ! #x_ L3E9F: FE 20 L3EA1: C0 # ret nz L3EA2: 2D # dec l L3EA3: 7E # ld a, [hl] # cp ' ' L3EA4: FE 20 L3EA6: C8 # ret z # cp 0 L3EA7: FE 00 # jr nz, 1f L3EA9: 20 02 # ld a, 0xFF ! Yuck, 0xFF stands for '0' L3EAB: 3E FF # 1: L3EAD: 32 10 D8 # ld [repeater_req], a # ret L3EB0: C9 # # ccir_repeater_cmd: # cp 0 L3EB1: FE 00 # jr nz, 1f L3EB3: 20 02 # ld a, 0xFF ! FF == '0' L3EB5: 3E FF # 1: L3EB7: 32 10 D8 # ld [repeater_req], a # ret L3EBA: C9 # # !---------------------------------------------------------------------- # # repeater_setstate: L3EBB: E1 # pop hl L3EBC: 22 08 D8 # ld [repeater_state], hl L3EBF: E9 # jp [hl] # # !---------------------------------------------------------------------- # # repeater_check_ctcss_access: L3EC0: 3A C9 D0 # ld a, [squelch_open] L3EC3: B7 # or a L3EC4: C8 # ret z ! Z, no signal -> no ctcss accepted # # ! squelch is open, do we use access=3=ctcss # L3EC5: 3A CF C8 # ld a, [repeater_cfg_access_method] L3EC8: B7 # or a L3EC9: C8 # ret z ! Z, access=0=beeps # cp 1 L3ECA: FE 01 L3ECC: C8 # ret z ! Z, access=1=carrier # cp 2 L3ECD: FE 02 L3ECF: C8 # ret z ! Z, access=2=none # # jp repeater_check_ctcss_detect ! NZ iff squelch open AND ctcss detected L3ED0: C3 E4 3E # # repeater_check_carrier_access: L3ED3: 3A C9 D0 # ld a, [squelch_open] L3ED6: B7 # or a L3ED7: C8 # ret z ! Z, no signal -> no beep # # ! squelch is open, do we use access=1=carrier # L3ED8: 3A CF C8 # ld a, [repeater_cfg_access_method] L3EDB: B7 # or a L3EDC: C8 # ret z ! Z, access=0=beeps # cp 2 L3EDD: FE 02 L3EDF: C8 # ret z ! Z, access=2=none # cp 3 L3EE0: FE 03 L3EE2: C8 # ret z ! Z, access=3=ctcss # # ret ! NZ, signal -> open, bypass toneaccess L3EE3: C9 # # repeater_check_ctcss_detect: # L3EE4: DB 01 # in a, [0x00+1] # and 0x04 ! aka /IGN also used as CTCSS detect pin L3EE6: E6 04 # L3EE8: 3A 5C C9 # ld a, [cfg_ctcss_input_polarity] ! Z-flag kept # jr z, 1f L3EEB: 28 03 # # cp 1 ! pin up, return NZ iff polarity POS(0) L3EED: FE 01 # ret L3EEF: C9 # 1: # cp 0 ! pin down, return NZ iff polarity NEG(1) L3EF0: FE 00 # ret L3EF2: C9 # # # repeater_recheck_beep_quickly: # L3EF3: 3A E8 D0 # ld a, [pioa_data] # and 0xf0 L3EF6: E6 F0 # cp 0x80 L3EF8: FE 80 # jr nz, 1f L3EFA: 20 03 # or 1 ! NZ, 1750 Hz on L3EFC: F6 01 # ret L3EFE: C9 # 1: L3EFF: 3A F5 D0 # ld a, [dtmf_prevdata] # cp 0x80 | (0xB << 3) ! StD and DTMF * in raw format (shifted up) L3F02: FE D8 # jr nz, 1f L3F04: 20 03 # or 1 L3F06: F6 01 # ret ! NZ, DTMF * on L3F08: C9 # 1: L3F09: 97 # sub a ! Z, no beep # ret L3F0A: C9 # # repeater_check_beep: # L3F0B: 3A B3 D0 # ld a, [pttdn] L3F0E: B7 # or a L3F0F: C0 # ret nz ! PTT is pressed, act as if accesstone. # L3F10: 3A CF C8 # ld a, [repeater_cfg_access_method] # cp 2 L3F13: FE 02 L3F15: C8 # ret z ! Z, access none -> no beep (2 = none) # cp 3 L3F16: FE 03 L3F18: C8 # ret z ! Z, access ctcss(3) -> no beep # L3F19: 3A C9 D0 # ld a, [squelch_open] L3F1C: B7 # or a L3F1D: C8 # ret z ! Z, no signal -> no beep # L3F1E: 3A E8 D0 # ld a, [pioa_data] # and 0xf0 L3F21: E6 F0 # cp 0x80 L3F23: FE 80 # jr nz, 1f L3F25: 20 0A L3F27: 3A F3 D0 # ld a, [ccir_tonetime] # cp 25 L3F2A: FE 19 # jr c, 1f L3F2C: 38 03 # or 1 ! NZ, 1750 Hz on L3F2E: F6 01 # ret L3F30: C9 # 1: L3F31: 3A F5 D0 # ld a, [dtmf_prevdata] # cp 0x80 | (0xB << 3) ! StD and DTMF * in raw format (shifted up) L3F34: FE D8 # jr nz, 1f L3F36: 20 03 # or 1 L3F38: F6 01 # ret ! NZ, DTMF * on L3F3A: C9 # 1: L3F3B: 97 # sub a ! Z, no beep # ret L3F3C: C9 # # repeater_check_carrier: L3F3D: 3A CF C8 # ld a, [repeater_cfg_access_method] # cp 3 L3F40: FE 03 # jr z, 1f ! go if ctcss used L3F42: 28 05 # # ! non-ctcss uses, just reflect squelch # L3F44: 3A C9 D0 # ld a, [squelch_open] L3F47: B7 # or a # ret ! NZ, carrier L3F48: C9 # 1: # ! ctcss in use # L3F49: 3A C9 D0 # ld a, [squelch_open] L3F4C: B7 # or a L3F4D: C8 # ret z ! z, no "carrier" when squelch closed # # jp repeater_check_ctcss_detect ! NZ when tone detected L3F4E: C3 E4 3E # # # repeater_check_timer_ID: L3F51: 2A 0C D8 # ld hl, [repeater_timer_ID] L3F54: 7C # ld a, h L3F55: B5 # or l # ret L3F56: C9 # # repeater_check_timer: L3F57: 2A 0A D8 # ld hl, [repeater_timer_other] L3F5A: 7C # ld a, h L3F5B: B5 # or l # ret ! NZ if timer still running L3F5C: C9 # # repeater_check_timer_BLIP: L3F5D: 3A 0F D8 # ld a, [repeater_timer_BLIP_state] # cp 2 L3F60: FE 02 L3F62: C0 # ret nz ! NZ = stopped (0) or still counting (1) # ld a, 0 L3F63: 3E 00 L3F65: 32 0F D8 # ld [repeater_timer_BLIP_state], a ! make it idle. Z kept. # ret ! Z = counted down. L3F68: C9 # # repeater_start_timer_ID: L3F69: 2A A2 C8 # ld hl, [repeater_cfg_TID] L3F6C: 22 0C D8 # ld [repeater_timer_ID], hl # ret L3F6F: C9 # # repeater_start_timer_OPEN: L3F70: 2A A0 C8 # ld hl, [repeater_cfg_TOPEN] L3F73: 22 0A D8 # ld [repeater_timer_other], hl # ret L3F76: C9 # # repeater_start_timer_HOG: L3F77: 2A A4 C8 # ld hl, [repeater_cfg_THOG] L3F7A: 22 0A D8 # ld [repeater_timer_other], hl # ret L3F7D: C9 # # repeater_start_timer_CLS: L3F7E: 2A A6 C8 # ld hl, [repeater_cfg_TCLS] L3F81: 22 0A D8 # ld [repeater_timer_other], hl # ret L3F84: C9 # # repeater_start_timer_DEAD: L3F85: 2A A8 C8 # ld hl, [repeater_cfg_TDEAD] L3F88: 22 0A D8 # ld [repeater_timer_other], hl # ret L3F8B: C9 # # repeater_start_timer_BLIP: # ld a, 0 L3F8C: 3E 00 L3F8E: 32 0F D8 # ld [repeater_timer_BLIP_state], a ! stop L3F91: 3A B1 C9 # ld a, [repeater_cfg_TBLIP] L3F94: 32 0E D8 # ld [repeater_timer_BLIP], a ! reload # ld a, 1 L3F97: 3E 01 L3F99: 32 0F D8 # ld [repeater_timer_BLIP_state], a ! start (1), goes 2 when done. # ret L3F9C: C9 # # !---------------------------------------------------------------------- # # repeater_step_1sec: # L3F9D: 2A 0C D8 # ld hl, [repeater_timer_ID] L3FA0: 7C # ld a, h L3FA1: B5 # or l # jr z, 1f L3FA2: 28 04 L3FA4: 2B # dec hl L3FA5: 22 0C D8 # ld [repeater_timer_ID], hl # 1: L3FA8: 2A 0A D8 # ld hl, [repeater_timer_other] L3FAB: 7C # ld a, h L3FAC: B5 # or l # jr z, 1f L3FAD: 28 04 L3FAF: 2B # dec hl L3FB0: 22 0A D8 # ld [repeater_timer_other], hl # 1: # ret L3FB3: C9 # # repeater_step_10msec: # L3FB4: 3A 0F D8 # ld a, [repeater_timer_BLIP_state] # cp 1 L3FB7: FE 01 # jr nz, 1f ! skip if not running L3FB9: 20 11 L3FBB: 3A 0E D8 # ld a, [repeater_timer_BLIP] # sub 1 ! NC if timer was nonzero L3FBE: D6 01 # jr nc, 2f L3FC0: 30 07 # ld a, 2 L3FC2: 3E 02 L3FC4: 32 0F D8 # ld [repeater_timer_BLIP_state], a ! set it as 'triggered' # ld a, 0 ! keep value at 0 (just for fun) L3FC7: 3E 00 # 2: L3FC9: 32 0E D8 # ld [repeater_timer_BLIP], a # 1: # ret L3FCC: C9 # # !---------------------------------------------------------------------- # !---------------------------------------------------------------------- # ! # ! Repeater states # ! # # ! # ! boot: (no emission) # ! stick here for a minute (allow std function to be restored) # ! # repeater_boot: # ld hl, 60 L3FCD: 21 3C 00 L3FD0: 22 0A D8 # ld [repeater_timer_other], hl # # call repeater_setstate L3FD3: CD BB 3E # # call repeater_check_timer L3FD6: CD 57 3F # jp nz, 1f L3FD9: C2 DF 3F # jp repeater_idle L3FDC: C3 E0 3F # 1: # ret L3FDF: C9 # # ! # ! idle: (no emission) # ! beep or (carrier and using carrier access) ? # ! goto opening # ! ctcss and using ctcss ? # ! goto active # ! # repeater_idle: # ld a, 0 L3FE0: 3E 00 L3FE2: 32 30 D0 # ld [squelch_tightening], a L3FE5: 32 31 D0 # ld [txpwr_increment], a # # call repeater_setstate L3FE8: CD BB 3E # call repeater_check_beep L3FEB: CD 0B 3F # jp z, 1f L3FEE: CA F4 3F # jp repeater_opening L3FF1: C3 07 40 # 1: # call repeater_check_carrier_access L3FF4: CD D3 3E # jp z, 1f L3FF7: CA FD 3F # jp repeater_opening L3FFA: C3 07 40 # 1: # call repeater_check_ctcss_access L3FFD: CD C0 3E # jp z, 1f L4000: CA 06 40 # jp repeater_open_by_ctcss L4003: C3 32 40 # 1: # ret L4006: C9 # # ! # ! opening: (no emission) # ! tone/carrier exceeds N seconds ? # ! goto idle # ! no carrier? # ! TXON, "ID", TMR0=TOPEN, TMR1=TID, goto open # ! # repeater_opening: # # call repeater_bump_open_counter L4007: CD 43 41 # L400A: 2A 1B C9 # ld hl, [repeater_cfg_TBEEPMAX] L400D: 22 0A D8 # ld [repeater_timer_other], hl ! validate tone length # # call repeater_setstate L4010: CD BB 3E # # call repeater_check_timer L4013: CD 57 3F # jp nz, 1f L4016: C2 1C 40 # jp repeater_beep_too_long L4019: C3 44 40 # 1: # call repeater_check_carrier L401C: CD 3D 3F # jp nz, 1f L401F: C2 31 40 # # repeater_open_by_reset: ! from /LOCAL # # call repeater_txon L4022: CD 53 41 # call repeater_send_id_greet L4025: CD 87 41 # call repeater_start_timer_ID L4028: CD 69 3F # call repeater_start_timer_OPEN L402B: CD 70 3F # jp repeater_open L402E: C3 52 40 # 1: # ret L4031: C9 # # repeater_open_by_ctcss: # call repeater_txon L4032: CD 53 41 # call repeater_aon L4035: CD 5F 41 # call repeater_send_id_greet L4038: CD 87 41 # call repeater_start_timer_ID L403B: CD 69 3F # call repeater_start_timer_OPEN L403E: CD 70 3F # jp repeater_open L4041: C3 52 40 # # # repeater_beep_too_long: # call repeater_setstate L4044: CD BB 3E # # call repeater_check_carrier L4047: CD 3D 3F L404A: C0 # ret nz ! still carrier # call repeater_recheck_beep_quickly L404B: CD F3 3E L404E: C0 # ret nz ! still accesstone # # jp repeater_idle ! nothing. go idle. L404F: C3 E0 3F # # ! # ! open: (tx on, but audio muted) # ! carrier? # ! AND no beeps (quick check, cut off whistles) ? # ! AON, TMR0=THOG, goto active # ! TMR1? # ! "ID", TMR1=TID # ! TMR0? # ! TXOFF, TMR0=TCLS, goto closing # ! # repeater_open: # call repeater_setstate L4052: CD BB 3E # # call repeater_check_report_req L4055: CD 44 42 # # call repeater_check_timer_BLIP L4058: CD 5D 3F # jp nz, 1f L405B: C2 61 40 # call repeater_send_blip L405E: CD D2 41 # 1: # call repeater_check_carrier L4061: CD 3D 3F # jp z, 1f L4064: CA 76 40 # call repeater_recheck_beep_quickly L4067: CD F3 3E # jp nz, 1f L406A: C2 76 40 # call repeater_aon L406D: CD 5F 41 # call repeater_start_timer_HOG L4070: CD 77 3F # jp repeater_active L4073: C3 A2 40 # 1: L4076: 3A B3 D0 # ld a, [pttdn] L4079: B7 # or a # jp z, 1f L407A: CA 86 40 # call repeater_aon L407D: CD 5F 41 # call repeater_start_timer_HOG L4080: CD 77 3F # jp repeater_active L4083: C3 A2 40 # 1: # call repeater_check_timer_ID L4086: CD 51 3F # jp nz, 1f L4089: C2 92 40 # call repeater_send_id_during L408C: CD A0 41 # call repeater_start_timer_ID L408F: CD 69 3F # 1: # call repeater_check_timer L4092: CD 57 3F # jp nz, 1f L4095: C2 A1 40 # call repeater_txoff L4098: CD 59 41 # call repeater_start_timer_CLS L409B: CD 7E 3F # jp repeater_closing L409E: C3 E6 40 # 1: # ret L40A1: C9 # # ! # ! active: (tx AND audio on (or forced with PTT)) # ! no carrier? # ! AOFF, TMR0=TOPEN, "BLIP", goto open # ! TMR1? # ! "ID", TMR1=TID # ! TMR0? # ! AOFF, "TO", TXOFF, TMR0=TLOCKOUT, goto lockout # ! # repeater_active: # call repeater_setstate L40A2: CD BB 3E # call repeater_check_carrier L40A5: CD 3D 3F # jp nz, 1f L40A8: C2 C4 40 L40AB: 3A CE D0 # ld a, [srssi] L40AE: 32 11 D8 # ld [repeater_sig], a ! lost carrier, save RSSI peak # L40B1: 3A B3 D0 # ld a, [pttdn] L40B4: B7 # or a # jp nz, 1f ! if PTT is pressed, stay active. L40B5: C2 C4 40 # call repeater_aoff L40B8: CD 6A 41 # call repeater_start_timer_BLIP L40BB: CD 8C 3F # call repeater_start_timer_OPEN L40BE: CD 70 3F # jp repeater_open L40C1: C3 52 40 # 1: # call repeater_check_timer_ID L40C4: CD 51 3F # jp nz, 1f L40C7: C2 D0 40 # call repeater_send_id_during L40CA: CD A0 41 # call repeater_start_timer_ID L40CD: CD 69 3F # 1: # call repeater_check_timer L40D0: CD 57 3F # jp nz, 1f L40D3: C2 E5 40 # call repeater_aoff L40D6: CD 6A 41 # call repeater_send_to L40D9: CD 2A 42 # call repeater_txoff L40DC: CD 59 41 # call repeater_start_timer_DEAD L40DF: CD 85 3F # jp repeater_lockout L40E2: C3 2D 41 # 1: # ret L40E5: C9 # # ! # ! closing: (no emission) # ! carrier? # ! no beeps (quick check) ? # ! TXON, AON, TMR0=THOG, goto active # ! TMR0? # ! ( TXON, "ID VA", TXOFF ) (if "ID VA" exists). goto idle. # ! # repeater_closing: # call repeater_setstate L40E6: CD BB 3E # # call repeater_check_carrier L40E9: CD 3D 3F # jp z, 1f L40EC: CA 01 41 # call repeater_recheck_beep_quickly L40EF: CD F3 3E # jp nz, 1f L40F2: C2 01 41 # call repeater_txon L40F5: CD 53 41 # call repeater_aon L40F8: CD 5F 41 # call repeater_start_timer_HOG L40FB: CD 77 3F # jp repeater_active L40FE: C3 A2 40 # 1: L4101: 3A B3 D0 # ld a, [pttdn] L4104: B7 # or a # jp z, 1f L4105: CA 14 41 # call repeater_txon L4108: CD 53 41 # call repeater_aon L410B: CD 5F 41 # call repeater_start_timer_HOG L410E: CD 77 3F # jp repeater_active L4111: C3 A2 40 # 1: # call repeater_check_timer L4114: CD 57 3F # jp nz, 1f L4117: C2 2C 41 # call repeater_test_id_bye_length L411A: CD 75 41 # jp z, repeater_idle ! if id bye is empty, L411D: CA E0 3F # # call repeater_txon L4120: CD 53 41 # call repeater_send_id_bye L4123: CD B9 41 # call repeater_txoff L4126: CD 59 41 # jp repeater_idle L4129: C3 E0 3F # 1: # ret L412C: C9 # # ! # ! lockout: (no emission) # ! TMR0? # ! TXON, "ID VA", TXOFF # ! # repeater_lockout: # call repeater_setstate L412D: CD BB 3E # call repeater_check_timer L4130: CD 57 3F # jp nz, 1f L4133: C2 42 41 # call repeater_txon L4136: CD 53 41 # call repeater_send_id_bye L4139: CD B9 41 # call repeater_txoff L413C: CD 59 41 # jp repeater_idle L413F: C3 E0 3F # 1: # ret L4142: C9 # # !---------------------------------------------------------------------- # # repeater_bump_open_counter: # ld ix, repeater_cfg_open_counter L4143: DD 21 4D C9 L4147: DD 34 00 # inc [ix+0] L414A: C0 # ret nz L414B: DD 34 01 # inc [ix+1] L414E: C0 # ret nz L414F: DD 34 02 # inc [ix+2] # ret L4152: C9 # # !---------------------------------------------------------------------- # # repeater_txon: # call tx_on L4153: CD 0F 32 # jp force_redraw L4156: C3 CB 23 # # repeater_txoff: # call tx_off L4159: CD 49 32 # jp force_redraw L415C: C3 CB 23 # # repeater_aon: L415F: 3A CE C8 # ld a, [repeater_cfg_afsrc] ! Selects which way /MIC affects AF relaying # cp 0 L4162: FE 00 # jp z, mic_off L4164: CA 4E 07 # jp mic_on L4167: C3 42 07 # # repeater_aoff: L416A: 3A CE C8 # ld a, [repeater_cfg_afsrc] ! Selects which way /MIC affects AF relaying # cp 0 L416D: FE 00 # jp z, mic_on L416F: CA 42 07 # jp mic_off L4172: C3 4E 07 # # !---------------------------------------------------------------------- # # repeater_test_id_bye_length: ! return Z if message is "" L4175: 3A F3 C8 # ld a, [repeater_cfg_id_bye1] # cp 0xFF L4178: FE FF L417A: C0 # ret nz L417B: 3A FB C8 # ld a, [repeater_cfg_id_bye2] # cp 0xFF L417E: FE FF L4180: C0 # ret nz L4181: 3A 03 C9 # ld a, [repeater_cfg_id_bye3] # cp 0xFF L4184: FE FF # ret ! zero-flag valid L4186: C9 # # !---------------------------------------------------------------------- # # repeater_send_id_greet: # call send_cw_prolog L4187: CD EE 42 # ld hl, repeater_cfg_id_greet1 L418A: 21 AC C8 # call send_cw L418D: CD 19 43 # ld hl, repeater_cfg_id_greet2 L4190: 21 B4 C8 # call send_cw L4193: CD 19 43 # ld hl, repeater_cfg_id_greet3 L4196: 21 BC C8 # call send_cw L4199: CD 19 43 # call send_cw_epilog L419C: CD 02 43 # ret L419F: C9 # # repeater_send_id_during: # call send_cw_prolog L41A0: CD EE 42 # ld hl, repeater_cfg_id_during1 L41A3: 21 DB C8 # call send_cw L41A6: CD 19 43 # ld hl, repeater_cfg_id_during2 L41A9: 21 E3 C8 # call send_cw L41AC: CD 19 43 # ld hl, repeater_cfg_id_during3 L41AF: 21 EB C8 # call send_cw L41B2: CD 19 43 # call send_cw_epilog L41B5: CD 02 43 # ret L41B8: C9 # # repeater_send_id_bye: # call send_cw_prolog L41B9: CD EE 42 # ld hl, repeater_cfg_id_bye1 L41BC: 21 F3 C8 # call send_cw L41BF: CD 19 43 # ld hl, repeater_cfg_id_bye2 L41C2: 21 FB C8 # call send_cw L41C5: CD 19 43 # ld hl, repeater_cfg_id_bye3 L41C8: 21 03 C9 # call send_cw L41CB: CD 19 43 # call send_cw_epilog L41CE: CD 02 43 # ret L41D1: C9 # # repeater_send_blip: # # ! Before blip, note warning conditions # L41D2: 3A CC C8 # ld a, [cfg_overtemp_limit] L41D5: 47 # ld b, a L41D6: 3A 06 D8 # ld a, [ad_tp4] L41D9: B8 # cp b ! curr - limit NOTE TEMP slope neg. # call c, repeater_send_temp_alert L41DA: DC 10 42 # L41DD: 3A 05 D8 # ld a, [ad_rpm] L41E0: 47 # ld b, a L41E1: 3A CD C8 # ld a, [cfg_rpm_limit] L41E4: B8 # cp b ! limit - curr # call c, repeater_send_ant_alert L41E5: DC 1D 42 # # call send_cw_prolog L41E8: CD EE 42 # # ld a, 0 L41EB: 3E 00 L41ED: 32 2C D8 # ld [repeater_cw_sendit_all], a ! blip is pre-empted by carrier # L41F0: 3A 2B D8 # ld a, [repeater_ptt_seen] L41F3: B7 # or a # jr nz, 1f L41F4: 20 08 # call cw_calc_blip L41F6: CD CE 42 # ld hl, repeater_cfg_blip L41F9: 21 C4 C8 # jr 2f L41FC: 18 0B # 1: # ld a, 0 L41FE: 3E 00 L4200: 32 2B D8 # ld [repeater_ptt_seen], a # call cw_calc_blip_link L4203: CD DE 42 # ld hl, repeater_cfg_blip_link L4206: 21 33 C9 # 2: # call send_cw L4209: CD 19 43 # call send_cw_epilog L420C: CD 02 43 # ret L420F: C9 # # repeater_send_temp_alert: # call send_cw_prolog L4210: CD EE 42 # ld hl, repeater_cfg_msg_temp_alert L4213: 21 3D C9 # call send_cw L4216: CD 19 43 # call send_cw_epilog L4219: CD 02 43 # ret L421C: C9 # # repeater_send_ant_alert: # call send_cw_prolog L421D: CD EE 42 # ld hl, repeater_cfg_msg_ant_bad L4220: 21 45 C9 # call send_cw L4223: CD 19 43 # call send_cw_epilog L4226: CD 02 43 # ret L4229: C9 # # repeater_send_to: # call send_cw_prolog L422A: CD EE 42 # ld hl, repeater_cfg_msg_hog L422D: 21 84 C9 # call send_cw L4230: CD 19 43 # call send_cw_epilog L4233: CD 02 43 # ret L4236: C9 # # repeater_send_roger: # call send_cw_prolog L4237: CD EE 42 # ld hl, cw_msg_roger L423A: 21 98 42 # call send_cw L423D: CD 19 43 # call send_cw_epilog L4240: CD 02 43 # ret L4243: C9 # # repeater_check_report_req: L4244: 3A 10 D8 # ld a, [repeater_req] # cp '#' L4247: FE 23 L4249: C0 # ret nz # # ld a, 0 L424A: 3E 00 L424C: 32 10 D8 # ld [repeater_req], a # # call send_cw_prolog L424F: CD EE 42 # # ld hl, cw_msg_u_are L4252: 21 A0 42 # call send_cw ! UR_ L4255: CD 19 43 # L4258: 3A 12 D8 # ld a, [last_sqtail] ! 1 if tail, 0 if tailless L425B: 47 # ld b, a # ld a, 5 L425C: 3E 05 L425E: 90 # sub b ! 5-0 or 5-1 # call send_cw_chr ! UR_5 L425F: CD 2F 43 # # ! S calculation, first see if # ! 9 (greater than or equal to s9level) or # ! 1 (less than s1level). # L4262: 3A 11 D8 # ld a, [repeater_sig] # # ld b, 9 L4265: 06 09 # ld hl, cfg_rssi_S9 L4267: 21 5B C9 L426A: BE # cp [hl] # jr nc, 2f ! rssi >= level9 L426B: 30 23 # # ld b, 1 L426D: 06 01 # ld hl, cfg_rssi_S1 L426F: 21 5A C9 L4272: 96 # sub [hl] ! fraction -= floor_value # jr c, 2f ! rssi < level1 L4273: 38 1B # # ! damned, need some dancing for S-levels 2...8 # # ld b, 0 L4275: 06 00 L4277: 4F # ld c, a ! fraction in bc (8bit value) # L4278: 3A 5B C9 # ld a, [cfg_rssi_S9] L427B: 96 # sub [hl] ! fullscale -= floor_value, into A # # ! S = 7 * fraction / fullscale + 2 # L427C: 60 # ld h, b L427D: 69 # ld l, c L427E: 09 L427F: 09 L4280: 09 # add hl, bc; add hl, bc; add hl, bc; L4281: 09 L4282: 09 L4283: 09 # add hl, bc; add hl, bc; add hl, bc ! six adds, *= 7 # # ld b, 0 L4284: 06 00 L4286: 4F # ld c, a ! fullscale in bc (8bit value) # # ld a, 1 ! start from 2-1, always at least one inc L4287: 3E 01 L4289: A7 # and a ! clear CY for sbc hl # 1: L428A: 3C # inc a L428B: ED 42 # sbc hl, bc # jr nc, 1b L428D: 30 FB L428F: 47 # ld b, a # 2: L4290: 78 # ld a, b # call send_cw_chr ! UR_59 L4291: CD 2F 43 # # call send_cw_epilog L4294: CD 02 43 # ret L4297: C9 # # .align 3 L4298: 52 L4299: FF L429A: FF L429B: FF L429C: FF L429D: FF L429E: FF # cw_msg_roger: .ascii "R"; .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF L429F: FF L42A0: 55 52 20 L42A3: FF L42A4: FF L42A5: FF L42A6: FF # cw_msg_u_are: .ascii "UR "; .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF L42A7: FF # # !---------------------------------------------------------------------- # !---------------------------------------------------------------------- # ! # ! CW beeper # ! # ! Note, the cw routines sometimes longjmp out from the depths # ! and abort messages. cw_epilog must undo stuff. # ! # ! tabled bits 1=dit, 0=dash. right aligned into byte. # ! unused bits contain first one 1, then zeroes (0b10000000 terminate). # ! # ! ______________________________________________ 46 slots aka dit-times # ! X XXX XXX X __X XXX __X XXX X __X X X X X __ # ! P A R I S # ! 46 slots / 5 chrs; 9.2 slots/chr. # ! N chrs/min; N chrs / 60 sec # ! 60 / ( 9.2 * N ) sec/slot # ! 100 ticks/sec # ! 652/N ticks/slot # # cw_calc_delays: # # ! slot duration in ticks # ! 652 ticks / sec # ! 40 CPM : 16 ticks / slot # ! 200 CPM : 3 ticks / slot # L42A8: 3A AA C8 # ld a, [cfg_cw_speed] # cp 40 L42AB: FE 28 # jr nc, 1f L42AD: 30 02 # ld a, 40 ! be reasonable, we'd be here until next week L42AF: 3E 28 # 1: L42B1: 4F # ld c, a L42B2: 21 8C 02 # ld hl, (652) % 65536 ; ld a, (652) / 65536 ! see above for maths. CPM into slept ticks L42B5: 3E 00 # call div248 L42B7: CD 31 3B L42BA: 7D # ld a, l L42BB: 32 13 D8 # ld [cw_slot_ticks], a # # ! timer count for pitch # L42BE: 3A AB C8 # ld a, [cfg_cw_pitch] ! 10 Hz units 00...2550 (cSEC in fact) L42C1: 4F # ld c, a L42C2: 21 00 27 # ld hl, (403200) % 65536 ; ld a, (403200) / 65536 ! timer CLK / 10 L42C5: 3E 06 # call div248 L42C7: CD 31 3B L42CA: 22 14 D8 # ld [cw_pitch_cnt], hl # # ret L42CD: C9 # # cw_calc_blip: # L42CE: 3A 3B C9 # ld a, [cfg_cw_pitch_blip] ! 10 Hz units 00...2550 (cSEC in fact) L42D1: 4F # ld c, a L42D2: 21 00 27 # ld hl, (403200) % 65536 ; ld a, (403200) / 65536 ! timer CLK / 10 L42D5: 3E 06 # call div248 L42D7: CD 31 3B L42DA: 22 14 D8 # ld [cw_pitch_cnt], hl # # ret L42DD: C9 # # cw_calc_blip_link: # L42DE: 3A 3C C9 # ld a, [cfg_cw_pitch_blip_link] ! 10 Hz units 00...2550 (cSEC in fact) L42E1: 4F # ld c, a L42E2: 21 00 27 # ld hl, (403200) % 65536 ; ld a, (403200) / 65536 ! timer CLK / 10 L42E5: 3E 06 # call div248 L42E7: CD 31 3B L42EA: 22 14 D8 # ld [cw_pitch_cnt], hl # # ret L42ED: C9 # # send_cw_prolog: # call cw_calc_delays L42EE: CD A8 42 # # ld a, 1 L42F1: 3E 01 L42F3: 32 AD D0 # ld [nosir], a L42F6: 32 2C D8 # ld [repeater_cw_sendit_all], a # # call ccir_on L42F9: CD 57 07 # call silence_timer1 L42FC: CD 6C 22 # jp 1f L42FF: C3 0D 43 # # send_cw_epilog: # call ccir_off L4302: CD 60 07 # call silence_timer1 L4305: CD 6C 22 # # ld a, 0 L4308: 3E 00 L430A: 32 AD D0 # ld [nosir], a # 1: # ld a, 20 L430D: 3E 14 L430F: 32 28 D0 # ld [ccir_tx_timer], a # 1: L4312: 3A 28 D0 # ld a, [ccir_tx_timer] L4315: B7 # or a # jr nz, 1b L4316: 20 FA # # ret L4318: C9 # # send_cw: L4319: ED 73 2D D8 # ld [repeater_cw_jmpbuf], sp ! in case sequence is pre-empted # # ld b, 8 L431D: 06 08 # 1: L431F: 7E # ld a, [hl] L4320: 23 # inc hl # cp 0xFF L4321: FE FF # jp z, 1f L4323: CA 2B 43 # call cw_chr L4326: CD 36 43 # djnz 1b L4329: 10 F4 # 1: # call silence_timer1 L432B: CD 6C 22 # ret L432E: C9 # # send_cw_chr: # call cw_chr L432F: CD 36 43 # call silence_timer1 L4332: CD 6C 22 # ret L4335: C9 # # ! Separate character, 3 dit-times of silence after last tone # # cw_chr: L4336: E5 # push hl L4337: C5 # push bc # call cw_chr_1 ! *_===_ L4338: CD 41 43 # call cw_pause_2 ! __ L433B: CD 67 43 L433E: C1 # pop bc L433F: E1 # pop hl # ret L4340: C9 # # ! play one cw character. No extra slot is appended, just the one silence. # ! i.e. 2 slots per dit, 4 slots per dash. # # cw_chr_1: ! fill slots contained in chr # ld b, 0 L4341: 06 00 L4343: 4F # ld c, a # ld hl, cw_tab L4344: 21 9B 43 L4347: 09 # add hl, bc L4348: 7E # ld a, [hl] L4349: B7 # or a ! terminator 1-bit there ? # jr nz, 1f L434A: 20 02 # ld a, 0b11001110 ! ? and 0b10 to terminate L434C: 3E CE # 1: # cp 0x80 ! terminator at left edge ? L434E: FE 80 L4350: C8 # ret z ! return then # L4351: CB 27 # sla a ! CY has dit/dah, rest shifted, 0 appended L4353: F5 # push af # call cw_ditdash ! 1 or 3 slots tone L4354: CD 71 43 # call cw_pause_1 ! 1 slot silence L4357: CD 5E 43 L435A: F1 # pop af # jp 1b L435B: C3 4E 43 # # cw_pause_1: L435E: 3A 13 D8 # ld a, [cw_slot_ticks] # ld hl, 4 L4361: 21 04 00 # jp cw_slots L4364: C3 80 43 # # cw_pause_2: L4367: 3A 13 D8 # ld a, [cw_slot_ticks] L436A: 87 # add a # ld hl, 4 L436B: 21 04 00 # jp cw_slots L436E: C3 80 43 # # cw_ditdash: L4371: 3A 13 D8 # ld a, [cw_slot_ticks] # jp c, 1f ! CY=1=dit = 1 slot only L4374: DA 7A 43 L4377: 57 # ld d, a L4378: 82 # add d L4379: 82 # add d ! small values, *= 3 wont carry # 1: L437A: 2A 14 D8 # ld hl, [cw_pitch_cnt] # jp cw_slots L437D: C3 80 43 # # cw_slots: L4380: 57 # ld d, a # call start_marker_tone ! hl pitch, d dur L4381: CD 1F 23 # # ! nothing needs to be saved here # 1: L4384: 3A 2C D8 # ld a, [repeater_cw_sendit_all] ! 0=pre-empt if carrier L4387: B7 # or a # jr nz, 2f L4388: 20 0A # # call repeater_check_carrier ! NZ if carrier L438A: CD 3D 3F # jr z, 2f L438D: 28 05 # # ! pre-empt # L438F: ED 7B 2D D8 # ld sp, [repeater_cw_jmpbuf] # ret ! ZAP back. L4393: C9 # 2: L4394: 3A 1E D0 # ld a, [mt_timer] L4397: B7 # or a # jr nz, 1b L4398: 20 EA # ret L439A: C9 # # # !---------------------------------------------------------------------- # !---------------------------------------------------------------------- # ! # ! feel free to skip the gunk with /------- # ! # ! 1 is dit, 0 is dash, terminating pattern 10* # ! not quite complete. # # cw_tab: # .byte 0b00000100 ! 0 L439B: 04 # .byte 0b10000100 ! 1 L439C: 84 # .byte 0b11000100 ! 2 L439D: C4 # .byte 0b11100100 ! 3 L439E: E4 # .byte 0b11110100 ! 4 L439F: F4 # .byte 0b11111100 ! 5 L43A0: FC # .byte 0b01111100 ! 6 L43A1: 7C # .byte 0b00111100 ! 7 L43A2: 3C # .byte 0b00011100 ! 8 L43A3: 1C # .byte 0b00001100 ! 9 L43A4: 0C # .byte 0b10100000 ! A L43A5: A0 # .byte 0b01111000 ! B L43A6: 78 # .byte 0b01011000 ! C L43A7: 58 # .byte 0b01110000 ! D L43A8: 70 # .byte 0b11000000 ! E L43A9: C0 # .byte 0b11011000 ! F L43AA: D8 # .org cw_tab + ' ' # .byte 0b10000000 ! sp L43BB: 80 # .org cw_tab + '"' # .byte 0b10110110 ! " L43BD: B6 # .org cw_tab + '#' # .byte 0b11101010 ! VA aka SK overload # L43BE: EA # .org cw_tab + '$' # .byte 0b10111100 ! AS overload $ L43BF: BC # .org cw_tab + '\'' # .byte 0b10000110 ! ' L43C2: 86 # .org cw_tab + '(' # .byte 0b01001010 ! ( L43C3: 4A # .byte 0b01001010 ! ) ) balance is everything L43C4: 4A # .org cw_tab + ',' # .byte 0b00110010 ! , L43C7: 32 # .byte 0b01111010 ! - L43C8: 7A # .byte 0b10101010 ! . L43C9: AA # .byte 0b01101100 ! / L43CA: 6C # .org cw_tab + '0' # .byte 0b00000100 ! 0 L43CB: 04 # .byte 0b10000100 ! 1 L43CC: 84 # .byte 0b11000100 ! 2 L43CD: C4 # .byte 0b11100100 ! 3 L43CE: E4 # .byte 0b11110100 ! 4 L43CF: F4 # .byte 0b11111100 ! 5 L43D0: FC # .byte 0b01111100 ! 6 L43D1: 7C # .byte 0b00111100 ! 7 L43D2: 3C # .byte 0b00011100 ! 8 L43D3: 1C # .byte 0b00001100 ! 9 L43D4: 0C # .byte 0b00011110 ! : L43D5: 1E # .org cw_tab + '?' # .byte 0b11001110 ! ? L43DA: CE # .org cw_tab + 'A' # .byte 0b10100000 ! A L43DC: A0 # .byte 0b01111000 ! B L43DD: 78 # .byte 0b01011000 ! C L43DE: 58 # .byte 0b01110000 ! D L43DF: 70 # .byte 0b11000000 ! E L43E0: C0 # .byte 0b11011000 ! F L43E1: D8 # .byte 0b00110000 ! G L43E2: 30 # .byte 0b11111000 ! H L43E3: F8 # .byte 0b11100000 ! I L43E4: E0 # .byte 0b10001000 ! J L43E5: 88 # .byte 0b01010000 ! K L43E6: 50 # .byte 0b10111000 ! L L43E7: B8 # .byte 0b00100000 ! M L43E8: 20 # .byte 0b01100000 ! N L43E9: 60 # .byte 0b00010000 ! O L43EA: 10 # .byte 0b10011000 ! P L43EB: 98 # .byte 0b00101000 ! Q L43EC: 28 # .byte 0b10110000 ! R L43ED: B0 # .byte 0b11110000 ! S L43EE: F0 # .byte 0b01000000 ! T L43EF: 40 # .byte 0b11010000 ! U L43F0: D0 # .byte 0b11101000 ! V L43F1: E8 # .byte 0b10010000 ! W L43F2: 90 # .byte 0b01101000 ! X L43F3: 68 # .byte 0b01001000 ! Y L43F4: 48 # .byte 0b00111000 ! Z L43F5: 38 # .byte 0b10101000 ! aiti L43F6: A8 # .byte 0b10100110 ! ruats. o L43F7: A6 # .byte 0b00011000 ! oljy L43F8: 18 # # .org cw_tab + 128 # # !====================================================================== # # ! hl points to first blank after some characters to view # # draw_decoder_history: L441B: E5 # push hl # call clear_lower_colon L441C: CD 1D 25 L441F: E1 # pop hl # # ld de, CU53AN_segs_d_digit_9 L4420: 11 C9 00 # ld b, 10 ! 10 slots to fill L4423: 06 0A L4425: 3A ED D0 # ld a, [cu_is_alfa] L4428: B7 # or a # jr z, 1f L4429: 28 05 # ld de, (segments + 2 * 11) L442B: 11 16 D7 # ld b, 9 ! 9 slots to fill L442E: 06 09 # 1: L4430: 7D # ld a, l L4431: 90 # sub b ! wind back last+1-ptr to print 9/10 last L4432: 6F # ld l, a # 1: L4433: 7E # ld a, [hl] L4434: 2C # inc l L4435: E5 # push hl # call dpydig L4436: CD 2D 45 L4439: E1 # pop hl # djnz 1b L443A: 10 F7 # ret L443C: C9 # # !---------------------------------------------------------------------- # # sput: # 1: L443D: E1 # pop hl L443E: 7E # ld a, [hl] L443F: 23 # inc hl L4440: E5 # push hl L4441: B7 # or a L4442: C8 # ret z # call dpydig L4443: CD 2D 45 # jr 1b L4446: 18 F5 # # draw_string_rightjust: L4448: E5 # push hl # ld b, 7 ! number of blanks needed at the left L4449: 06 07 # 1: L444B: 7E # ld a, [hl] L444C: 23 # inc hl # cp 0xFF L444D: FE FF # jr z, 1f L444F: 28 04 # djnz 1b L4451: 10 F8 # jr 2f ! no blanks at all L4453: 18 07 # 1: # ld a, ' ' L4455: 3E 20 # call dpydig L4457: CD 2D 45 # djnz 1b ! blank padding L445A: 10 F9 # 2: L445C: E1 # pop hl ! refresh string # ld b, 7 L445D: 06 07 # 1: L445F: 7E # ld a, [hl] L4460: 23 # inc hl # cp 0xFF L4461: FE FF # jr z, 1f L4463: 28 07 L4465: E5 # push hl # call dpydig L4466: CD 2D 45 L4469: E1 # pop hl # djnz 1b L446A: 10 F3 # 1: # ret L446C: C9 # # draw_string_rightjust_scores: L446D: E5 # push hl # ld b, 7 ! number of blanks needed at the left L446E: 06 07 # 1: L4470: 7E # ld a, [hl] L4471: 23 # inc hl # cp 0xFF L4472: FE FF # jr z, 1f L4474: 28 04 # djnz 1b L4476: 10 F8 # jr 2f ! no blanks at all L4478: 18 07 # 1: # ld a, '_' L447A: 3E 5F # call dpydig L447C: CD 2D 45 # djnz 1b ! _ padding L447F: 10 F9 # 2: L4481: E1 # pop hl ! refresh string # ld b, 7 L4482: 06 07 # 1: L4484: 7E # ld a, [hl] L4485: 23 # inc hl # cp 0xFF L4486: FE FF # jr z, 1f L4488: 28 07 L448A: E5 # push hl # call dpydig L448B: CD 2D 45 L448E: E1 # pop hl # djnz 1b L448F: 10 F3 # 1: # ret L4491: C9 # # !---------------------------------------------------------------------- # # dpydigzb_xxx: L4492: F5 # push af L4493: 3A 13 D1 # ld a, [yucko_alfa_draw_long_6_only] L4496: B7 # or a # jp z, 1f L4497: CA A1 44 # ld a, 0 L449A: 3E 00 L449C: 32 13 D1 # ld [yucko_alfa_draw_long_6_only], a L449F: F1 # pop af # ret ! barf L44A0: C9 # 1: L44A1: F1 # pop af # # dpydigzb: # cp 0 L44A2: FE 00 # jp z, 1f L44A4: CA A9 44 # ld c, 0 ! seen nonzero L44A7: 0E 00 # 1: # cp 0 L44A9: FE 00 # jp nz, 1f L44AB: C2 AF 44 L44AE: 79 # ld a, c ! replace initial 0's with ' ' # 1: # jp dpydig L44AF: C3 2D 45 # # dpyhexzb: L44B2: F5 # push af L44B3: CB 3F L44B5: CB 3F L44B7: CB 3F L44B9: CB 3F # srl a ; srl a ; srl a ; srl a # call dpydigzb L44BB: CD A2 44 L44BE: F1 # pop af # and 0xF L44BF: E6 0F # jp dpydigzb L44C1: C3 A2 44 # # dpyhex: L44C4: F5 # push af L44C5: CB 3F L44C7: CB 3F L44C9: CB 3F L44CB: CB 3F # srl a ; srl a ; srl a ; srl a # call dpydig L44CD: CD 2D 45 L44D0: F1 # pop af # and 0xF L44D1: E6 0F # jp dpydig L44D3: C3 2D 45 # # dpyval255: # ld b, -1 L44D6: 06 FF # 1: L44D8: 04 # inc b ! hundreds # sub 100 L44D9: D6 64 # jr nc, 1b L44DB: 30 FB # add 100 L44DD: C6 64 # # ld c, -1 L44DF: 0E FF # 1: L44E1: 0C # inc c ! tens # sub 10 L44E2: D6 0A # jr nc, 1b L44E4: 30 FB # add 10 L44E6: C6 0A # L44E8: F5 # push af ! ones # L44E9: 78 # ld a, b L44EA: B7 # or a # jr nz, 1f L44EB: 20 07 # ld b, ' ' L44ED: 06 20 L44EF: B1 # or c # jr nz, 1f L44F0: 20 02 # ld c, ' ' L44F2: 0E 20 # 1: L44F4: 78 # ld a, b # call dpydig L44F5: CD 2D 45 L44F8: 79 # ld a, c # call dpydig L44F9: CD 2D 45 L44FC: F1 # pop af # jp dpydig L44FD: C3 2D 45 # # dpyval99: # # ld c, -1 L4500: 0E FF # 1: L4502: 0C # inc c # sub 10 L4503: D6 0A # jr nc, 1b L4505: 30 FB # add 10 L4507: C6 0A L4509: F5 # push af # L450A: 79 # ld a, c L450B: B7 # or a # jr nz, 1f L450C: 20 02 # ld a, ' ' L450E: 3E 20 # 1: # call dpydig L4510: CD 2D 45 L4513: F1 # pop af # jp dpydig L4514: C3 2D 45 # # !---------------------------------------------------------------------- # # dpydiv99: L4517: 26 34 # ld h, HI(div99tbl) ; ASSERT(LO(div99tbl) == 0) L4519: 6F # ld l, a L451A: 7E # ld a, [hl] # jp dpyhex L451B: C3 C4 44 # # dpydiv9: L451E: 26 34 # ld h, HI(div99tbl) ; ASSERT(LO(div99tbl) == 0) L4520: 6F # ld l, a L4521: 7E # ld a, [hl] L4522: CB 3F L4524: CB 3F L4526: CB 3F L4528: CB 3F # srl a ; srl a ; srl a ; srl a # jp dpydig L452A: C3 2D 45 # # ! digit or character in a # ! location table in de # ! de incremented to next position, # ! hl & a destroyed # # dpydig: L452D: F5 # push af L452E: 3A ED D0 # ld a, [cu_is_alfa] L4531: B7 # or a # jr z, 1f L4532: 28 14 L4534: F1 # pop af # L4535: C5 # push bc # ld hl, cu58af_font L4536: 21 CA 32 # ld b, 0 L4539: 06 00 L453B: 4F # ld c, a L453C: 09 # add hl, bc L453D: ED 4A # adc hl, bc L453F: 7E # ld a, [hl] L4540: 12 # ld [de], a L4541: 13 # inc de L4542: 23 # inc hl L4543: 7E # ld a, [hl] L4544: 12 # ld [de], a L4545: 13 # inc de L4546: C1 # pop bc # ret L4547: C9 # 1: L4548: F1 # pop af L4549: C5 # push bc L454A: 26 38 # ld h, HI(cu53an_font) ; ASSERT(LO(cu53an_font) == 0) L454C: 6F # ld l, a L454D: 4E # ld c, [hl] ! what segments (0..6) are lit, what are dim # L454E: 1A L454F: 13 L4550: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L4552: CD 98 28 L4555: 1A L4556: 13 L4557: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L4559: CD 98 28 L455C: 1A L455D: 13 L455E: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L4560: CD 98 28 L4563: 1A L4564: 13 L4565: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L4567: CD 98 28 # L456A: 1A L456B: 13 L456C: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L456E: CD 98 28 L4571: 1A L4572: 13 L4573: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L4575: CD 98 28 L4578: 1A L4579: 13 L457A: CB 19 # ld a, [de]; inc de; rr c; call segment_onoff L457C: CD 98 28 # L457F: C1 # pop bc # ret L4580: C9 # # !---------------------------------------------------------------------- # # ! 7 zeroblanked digits to [de] display bitbuf from AHL # # draw_long_signed: # L4581: CB 7F # bit 7, a # jp z, draw_long ! positive L4583: CA B3 45 # # ! save cursor # L4586: D5 # push de L4587: FD E1 # pop iy # # call negate_ahl L4589: CD 47 3A # call bin_bcd_AHL_DDEEHHLL L458C: CD F3 45 # # ! BCD result ok in DDEEHHLL # L458F: 7A # ld a, d ! 1st to go L4590: E5 # push hl ! last 4 ones L4591: D5 # push de ! middle two in e # L4592: FD E5 # push iy L4594: D1 # pop de ! cursor back # # cp 0 L4595: FE 00 # ld a, '-' ! negative value L4597: 3E 2D # jr z, 1f L4599: 28 02 # ld a, 'E' ! sorry, must be 0NNNNNN L459B: 3E 45 # 1: # call dpydig ! 1st cannot be set L459D: CD 2D 45 # # ld c, ' ' ! blank leading zeroes L45A0: 0E 20 # L45A2: E1 # pop hl ! middle two from e L45A3: 7D # ld a, l # call dpyhexzb ! 2nd, 3rd L45A4: CD B2 44 # L45A7: E1 # pop hl ! last 4 ones L45A8: E5 # push hl L45A9: 7C # ld a, h # call dpyhexzb ! 4th, 5th L45AA: CD B2 44 # L45AD: E1 # pop hl ! last 4 ones L45AE: 7D # ld a, l # call dpyhexzb ! 6th, 7th L45AF: CD B2 44 # # ret L45B2: C9 # # draw_long: # # ! save cursor # L45B3: D5 # push de L45B4: FD E1 # pop iy # # call bin_bcd_AHL_DDEEHHLL L45B6: CD F3 45 # # ! BCD result ok in DDEEHHLL # L45B9: 7A # ld a, d ! 1st to go L45BA: E5 # push hl ! last 4 ones L45BB: D5 # push de ! middle two in e # L45BC: FD E5 # push iy L45BE: D1 # pop de ! cursor back # # ld c, ' ' ! zeroblanker L45BF: 0E 20 # # call dpydigzb_xxx ! 1st L45C1: CD 92 44 # L45C4: E1 # pop hl ! middle two from e L45C5: 7D # ld a, l # call dpyhexzb ! 2nd, 3rd L45C6: CD B2 44 # L45C9: E1 # pop hl ! last 4 ones L45CA: E5 # push hl L45CB: 7C # ld a, h # call dpyhexzb ! 4th, 5th L45CC: CD B2 44 # L45CF: E1 # pop hl ! last 4 ones L45D0: 7D # ld a, l # call dpyhexzb ! 6th, 7th L45D1: CD B2 44 # # ret L45D4: C9 # # !---------------------------------------------------------------------- # # draw_word: # L45D5: D5 # push de L45D6: FD E1 # pop iy ! save cursor # # ld a, 0 ! HL has word, AHL now long L45D8: 3E 00 # call bin_bcd_AHL_DDEEHHLL L45DA: CD F3 45 # L45DD: 7B # ld a, e ! BCD result ok in EHHLL L45DE: E5 # push hl # L45DF: FD E5 # push iy L45E1: D1 # pop de ! cursor back # # ld c, ' ' L45E2: 0E 20 # call dpydigzb L45E4: CD A2 44 # L45E7: E1 # pop hl L45E8: E5 # push hl L45E9: 7C # ld a, h # call dpyhexzb L45EA: CD B2 44 # L45ED: E1 # pop hl L45EE: 7D # ld a, l # call dpyhexzb L45EF: CD B2 44 # # ret L45F2: C9 # # !---------------------------------------------------------------------- # # bin_bcd_AHL_DDEEHHLL: # # ! 3 bytes of binary input in AHL, to c ix # L45F3: E5 # push hl L45F4: DD E1 # pop ix L45F6: 4F # ld c, a # # ! 3 and half bytes of packed BCD, result, MSNibble d, in ddeehhll # L45F7: AF # xor a L45F8: 6F # ld l, a L45F9: 67 # ld h, a L45FA: 5F # ld e, a L45FB: 57 # ld d, a # # ld b, 24 ! 24 bits binary value L45FC: 06 18 # jp 2f ! 24 shifts L45FE: C3 41 46 # 1: # ! BCD adjustment after all but last shift # ! if nibble >= 5, 3 added to nibble # # # # L4601: 7D L4602: C6 33 L4604: FA 09 46 L4607: D6 30 L4609: CB 5F L460B: C2 10 46 L460E: D6 03 L4610: 6F # ld a, l; add 0x33; jp m, 3f; sub 0x30; 3: bit 3, a; jp nz, 3f; sub 0x03; 3:; ld l, a L4611: 7C L4612: C6 33 L4614: FA 19 46 L4617: D6 30 L4619: CB 5F L461B: C2 20 46 L461E: D6 03 L4620: 67 # ld a, h; add 0x33; jp m, 3f; sub 0x30; 3: bit 3, a; jp nz, 3f; sub 0x03; 3:; ld h, a L4621: 7B L4622: C6 33 L4624: FA 29 46 L4627: D6 30 L4629: CB 5F L462B: C2 30 46 L462E: D6 03 L4630: 5F # ld a, e; add 0x33; jp m, 3f; sub 0x30; 3: bit 3, a; jp nz, 3f; sub 0x03; 3:; ld e, a L4631: 7A L4632: C6 33 L4634: FA 39 46 L4637: D6 30 L4639: CB 5F L463B: C2 40 46 L463E: D6 03 L4640: 57 # ld a, d; add 0x33; jp m, 3f; sub 0x30; 3: bit 3, a; jp nz, 3f; sub 0x03; 3:; ld d, a # # # 2: L4641: DD 29 # add ix, ix ! ix <<= 1 L4643: CB 11 # rl c L4645: CB 15 # rl l ! shift the bits 1 bit up, binary MSbit into BCD LSbit L4647: CB 14 # rl h L4649: CB 13 # rl e L464B: CB 12 # rl d # djnz 1b L464D: 10 B2 # # ! BCD result ok in DEEHHLL # # ret L464F: C9 # # !====================================================================== # # a2i_byte: # call a2i ! long in AHL L4650: CD 57 3A L4653: B4 # or h ! AH zero ? L4654: 7D # ld a, l L4655: C8 # ret z # ld a, 0xFF L4656: 3E FF # ret ! byte in A L4658: C9 # # a2i_word: # call a2i ! long in AHL L4659: CD 57 3A L465C: B7 # or a ! A zero ? L465D: C8 # ret z # ld hl, 0xFF L465E: 21 FF 00 # ret ! word in HL L4661: C9 # # !====================================================================== # # init_menu: # ld ix, start_menu L4662: DD 21 80 4C L4666: DD 22 11 D1 # ld [menu_ptr], ix # ret L466A: C9 # # ! 6 digits, title string, two more blanks with alfa # # draw_menu_title: # call clear_upper_colons L466B: CD 02 25 # L466E: DD 2A 11 D1 # ld ix, [menu_ptr] # L4672: DD 7E 02 # ld a, [ix+offset_title+0] # call dpydig L4675: CD 2D 45 L4678: DD 7E 03 # ld a, [ix+offset_title+1] # call dpydig L467B: CD 2D 45 L467E: DD 7E 04 # ld a, [ix+offset_title+2] # call dpydig L4681: CD 2D 45 L4684: DD 7E 05 # ld a, [ix+offset_title+3] # call dpydig L4687: CD 2D 45 L468A: DD 7E 06 # ld a, [ix+offset_title+4] # call dpydig L468D: CD 2D 45 L4690: DD 7E 07 # ld a, [ix+offset_title+5] # call dpydig L4693: CD 2D 45 # L4696: 3A ED D0 # ld a, [cu_is_alfa] L4699: B7 # or a L469A: C8 # ret z # # ld a, ' ' L469B: 3E 20 # call dpydig L469D: CD 2D 45 # ld a, ' ' L46A0: 3E 20 # call dpydig L46A2: CD 2D 45 # ret L46A5: C9 # # ! TT:b1234567, where :b is nonexistent in CU58AF # # draw_menu_lower_row: # L46A6: DD 2A 11 D1 # ld ix, [menu_ptr] L46AA: DD 7E 00 # ld a, [ix+offset_tag+0] # call dpydig L46AD: CD 2D 45 L46B0: DD 7E 01 # ld a, [ix+offset_tag+1] # call dpydig L46B3: CD 2D 45 # L46B6: 3A ED D0 # ld a, [cu_is_alfa] L46B9: B7 # or a # jp nz, 1f L46BA: C2 C5 46 # call draw_lower_colon L46BD: CD 12 25 # ld a, ' ' L46C0: 3E 20 # call dpydig L46C2: CD 2D 45 # 1: L46C5: DD 2A 11 D1 # ld ix, [menu_ptr] L46C9: DD 7E 0E # ld a, [ix+offset_type] # cp 1 L46CC: FE 01 # jp z, draw_menu_byte L46CE: CA 42 47 # cp 2 L46D1: FE 02 # jp z, draw_menu_word L46D3: CA 71 47 # cp 3 L46D6: FE 03 # jp z, draw_menu_freq L46D8: CA 86 47 # cp 4 L46DB: FE 04 # jp z, draw_menu_tab L46DD: CA C4 47 # cp 5 L46E0: FE 05 # jp z, draw_menu_dyn L46E2: CA EC 47 # cp 6 L46E5: FE 06 # jp z, draw_menu_rst L46E7: CA F2 47 # cp 7 L46EA: FE 07 # jp z, draw_menu_str L46EC: CA FE 47 # cp 8 L46EF: FE 08 # jp z, draw_menu_dpx L46F1: CA 98 47 # cp 9 L46F4: FE 09 # jp z, draw_menu_csec L46F6: CA 51 47 # L46F9: CD 3D 44 L46FC: 3F 3F 3F 3F 3F 3F 3F 00 # call sput; .asciz "???????" # ret L4704: C9 # # ! return value-pointer of record ix in hl # # load_menu_ptr: L4705: 6F # ld l, a L4706: 3A 26 D8 # ld a, [display_buffer_time] L4709: B7 # or a L470A: 7D # ld a, l # jr z, 1f L470B: 28 04 # ld hl, remote_display_buffer ! if we got remote config reply, use that data L470D: 21 16 D8 # ret L4710: C9 # 1: L4711: DD 6E 08 # ld l, [ix+offset_ptr+0] L4714: DD 66 09 # ld h, [ix+offset_ptr+1] # # ! is this the special case for mem/vfo ctcss_hz ? (yuck) # L4717: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L471A: E6 01 L471C: C8 # ret z ! not on memories. # L471D: 7D # ld a, l # cp LO(cfg_ctcss_hz) L471E: FE 3C L4720: C0 # ret nz L4721: 7C # ld a, h # cp HI(cfg_ctcss_hz) L4722: FE C7 L4724: C0 # ret nz ! not that one. # L4725: DD 7E 0E # ld a, [ix+offset_type] # cp 1 L4728: FE 01 L472A: C0 # ret nz ! uh? address is &cfg_ctcss_hz, but wrong type ??? # # ld hl, mem_ctcss_hz ! this one instead. L472B: 21 1C C0 # ret L472E: C9 # # leaved_setup: L472F: 3A 06 C0 # ld a, [mem_flags] # and MEM_VALID L4732: E6 01 # call nz, save_memory_ctcss ! disgusting L4734: C4 7F 1D # # call save_nvdata L4737: CD AE 3B # ret L473A: C9 # # load_menu_arg: L473B: DD 6E 0A # ld l, [ix+offset_arg+0] L473E: DD 66 0B # ld h, [ix+offset_arg+1] # ret L4741: C9 # # draw_menu_byte: L4742: CD 3D 44 L4745: 20 20 20 20 00 # call sput; .asciz " " ! 4 blanks, 3 zeroblanked digits # call load_menu_ptr L474A: CD 05 47 L474D: 7E # ld a, [hl] # jp dpyval255 L474E: C3 D6 44 # # draw_menu_csec: L4751: CD 3D 44 L4754: 20 20 20 00 # call sput; .asciz " " ! 3 blanks, 3 zeroblanked digits, fixed 0 # call load_menu_ptr L4758: CD 05 47 L475B: 7E # ld a, [hl] L475C: B7 # or a # jp z, 1f L475D: CA 68 47 # call dpyval255 L4760: CD D6 44 # ld a, '0' L4763: 3E 30 # jp dpydig ! NNN0 L4765: C3 2D 45 # 1: L4768: CD 3D 44 L476B: 20 20 20 30 00 # call sput; .asciz " 0" ! 3 blanks, fixed 0 # ret L4770: C9 # # draw_menu_word: L4771: CD 3D 44 L4774: 20 20 00 # call sput; .asciz " " ! 2 blanks, 5 zeroblanked digits # call load_menu_ptr L4777: CD 05 47 L477A: E5 # push hl L477B: DD E1 # pop ix L477D: DD 6E 00 # ld l, [ix+0] L4780: DD 66 01 # ld h, [ix+1] # jp draw_word L4783: C3 D5 45 # # draw_menu_freq: ! 7 zeroblanked digits # call load_menu_ptr L4786: CD 05 47 L4789: E5 # push hl L478A: DD E1 # pop ix L478C: DD 6E 00 L478F: DD 66 01 L4792: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] # jp draw_long L4795: C3 B3 45 # # draw_menu_dpx: ! 7 zeroblanked digits # call load_menu_ptr L4798: CD 05 47 L479B: E5 # push hl L479C: DD E1 # pop ix L479E: DD 6E 00 L47A1: DD 66 01 L47A4: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] L47A7: B4 # or h L47A8: B5 # or l # jp z, 1f L47A9: CA B8 47 L47AC: DD 6E 00 L47AF: DD 66 01 L47B2: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] # jp draw_long_signed L47B5: C3 81 45 # 1: L47B8: CD 3D 44 L47BB: 20 20 20 20 6F 46 46 00 # call sput; .asciz " oFF" # ret L47C3: C9 # # draw_menu_tab: # call load_menu_ptr L47C4: CD 05 47 L47C7: 7E # ld a, [hl] ! tab index # call load_menu_arg L47C8: CD 3B 47 L47CB: BE # cp [hl] ! tab size # jr nc, 1f L47CC: 30 14 L47CE: 23 # inc hl ! point to string array L47CF: 4F # ld c, a # ld b, 0 L47D0: 06 00 L47D2: CB 21 L47D4: CB 10 # sla c; rl b ! 2 L47D6: CB 21 L47D8: CB 10 # sla c; rl b ! 4 L47DA: CB 21 L47DC: CB 10 # sla c; rl b ! 8 L47DE: 09 # add hl, bc # jp draw_string_rightjust L47DF: C3 48 44 # 1: # ld hl, 1f ! out of range value L47E2: 21 E8 47 # jp draw_string_rightjust L47E5: C3 48 44 # L47E8: 3F 3F 3F # 1: .ascii "???"; .byte 0xFF L47EB: FF # # draw_menu_dyn: # call load_menu_arg L47EC: CD 3B 47 L47EF: E5 # push hl # ret L47F0: C9 # ret L47F1: C9 # # draw_menu_rst: L47F2: CD 3D 44 L47F5: 20 20 36 36 36 20 3F 00 # call sput; .asciz " 666 ?" # ret L47FD: C9 # # draw_menu_str: # call load_menu_ptr L47FE: CD 05 47 # jp draw_string_rightjust_scores L4801: C3 6D 44 # # !====================================================================== # # draw_rfc_dpy: L4804: 3A 26 D8 # ld a, [display_buffer_time] L4807: B7 # or a # jp nz, draw_remote_dyn_dpy L4808: C2 90 48 L480B: 3A CD D0 # ld a, [rfc] # call dpyval255 L480E: CD D6 44 # ld a, ' ' L4811: 3E 20 # call dpydig L4813: CD 2D 45 L4816: 3A 00 D8 # ld a, [ad_rssi] # call dpyval255 L4819: CD D6 44 # ret L481C: C9 # # menu_rfc_change: # cp -1 L481D: FE FF # jp z, 1f L481F: CA 2F 48 # cp +1 L4822: FE 01 # jp z, 1f L4824: CA 2F 48 # call a2i_byte L4827: CD 50 46 L482A: 32 CD D0 # ld [rfc], a # ld a, 0 L482D: 3E 00 # 1: # ld hl, rfc L482F: 21 CD D0 L4832: 86 # add [hl] L4833: 77 # ld [hl], a L4834: D3 30 # out [0x30], a # call save_rfc L4836: CD 4D 3B # ret L4839: C9 # # draw_sql_dpy: L483A: 3A 26 D8 # ld a, [display_buffer_time] L483D: B7 # or a # jp nz, draw_remote_dyn_dpy L483E: C2 90 48 L4841: 3A 27 C7 # ld a, [cfg_squelch_level] # call dpyval255 L4844: CD D6 44 # ld a, ' ' L4847: 3E 20 # call dpydig L4849: CD 2D 45 # call read_squelcher_value L484C: CD 32 06 # call dpyval255 L484F: CD D6 44 # ret L4852: C9 # # draw_sqB_dpy: L4853: 3A 26 D8 # ld a, [display_buffer_time] L4856: B7 # or a # jp nz, draw_remote_dyn_dpy L4857: C2 90 48 L485A: 3A 28 C7 # ld a, [cfg_squelch_BIG] # call dpyval255 L485D: CD D6 44 # ld a, ' ' L4860: 3E 20 # call dpydig L4862: CD 2D 45 # call read_squelcher_value L4865: CD 32 06 # call dpyval255 L4868: CD D6 44 # ret L486B: C9 # # menu_sql_change: # cp 0 L486C: FE 00 # jp nz, 1f L486E: C2 78 48 # call a2i_byte L4871: CD 50 46 L4874: 32 27 C7 # ld [cfg_squelch_level], a # ret L4877: C9 # 1: # ld hl, cfg_squelch_level L4878: 21 27 C7 L487B: 86 # add [hl] L487C: 77 # ld [hl], a # ret L487D: C9 # # menu_sqB_change: # cp 0 L487E: FE 00 # jp nz, 1f L4880: C2 8A 48 # call a2i_byte L4883: CD 50 46 L4886: 32 28 C7 # ld [cfg_squelch_BIG], a # ret L4889: C9 # 1: # ld hl, cfg_squelch_BIG L488A: 21 28 C7 L488D: 86 # add [hl] L488E: 77 # ld [hl], a # ret L488F: C9 # # draw_remote_dyn_dpy: L4890: 3A 16 D8 # ld a, [remote_display_buffer+0] # call dpyval255 L4893: CD D6 44 # ld a, ' ' L4896: 3E 20 # call dpydig L4898: CD 2D 45 L489B: 3A 17 D8 # ld a, [remote_display_buffer+1] # call dpyval255 L489E: CD D6 44 # ret L48A1: C9 # # !---------------------------------------------------------------------- # # decoder_hist_rewind: L48A2: 3A F2 D0 # ld a, [ccir_hist_idx] ! points usually past last blank L48A5: 3D # dec a L48A6: 32 F1 D0 # ld [ccir_hist_finger], a # L48A9: 3A F7 D0 # ld a, [dtmf_hist_idx] L48AC: 3D # dec a L48AD: 32 F6 D0 # ld [dtmf_hist_finger], a # L48B0: 3A 0D D1 # ld a, [fsk_hist_idx] L48B3: 3D # dec a L48B4: 32 0C D1 # ld [fsk_hist_finger], a # ret L48B7: C9 # # ccir_hist_walk: # ld hl, ccir_hist_finger L48B8: 21 F1 D0 # jp decoder_history_walk L48BB: C3 CA 48 # # dtmf_hist_walk: # ld hl, dtmf_hist_finger L48BE: 21 F6 D0 # jp decoder_history_walk L48C1: C3 CA 48 # # fsk_hist_walk: # ld hl, fsk_hist_finger L48C4: 21 0C D1 # jp decoder_history_walk L48C7: C3 CA 48 # # decoder_history_walk: L48CA: 86 # add [hl] L48CB: 77 # ld [hl], a # ret L48CC: C9 # # !---------------------------------------------------------------------- # # draw_ccir_hist: L48CD: 2A F1 D0 # ld hl, [ccir_hist_finger] ! current peeking offset (ld l, [infact]) # ld h, HI(ccir_history) ! history page L48D0: 26 D2 # jp draw_decoder_history L48D2: C3 1B 44 # # draw_dtmf_hist: L48D5: 2A F6 D0 # ld hl, [dtmf_hist_finger] ! current peeking offset # ld h, HI(dtmf_history) ! history page L48D8: 26 D3 # jp draw_decoder_history L48DA: C3 1B 44 # # draw_fsk_hist: L48DD: 2A 0C D1 # ld hl, [fsk_hist_finger] ! current peeking offset # ld h, HI(fsk_history) ! history page L48E0: 26 D4 # jp draw_decoder_history L48E2: C3 1B 44 # # !---------------------------------------------------------------------- # # enter_safety_delay: ! return CY if long enough press # # call feedback_hold L48E5: CD 78 27 # call redraw L48E8: CD DA 23 # 1: L48EB: 3A B2 D0 # ld a, [key_time] L48EE: 47 # ld b, a L48EF: 3A 8D C9 # ld a, [cfg_enter_time] # cp 10 L48F2: FE 0A # jr c, 2f L48F4: 38 02 # ld a, 10 ! clamp the limit at 10 L48F6: 3E 0A # 2: L48F8: 90 # sub b ! length_limit - current_length # jr c, 1f ! if is long enough, change display L48F9: 38 13 # call is_key_down L48FB: CD 27 0B # jr nz, 1b ! loop as long as pressed L48FE: 20 EB # # call clear_buffer L4900: CD FC 0D # call clear_key L4903: CD 04 0E # call no_feedback L4906: CD F6 26 # call redraw L4909: CD DA 23 L490C: A7 # and a # ret ! return no CY L490D: C9 # 1: # call feedback_let_go_the_darn_button L490E: CD 5E 27 # call redraw L4911: CD DA 23 # call waitkey L4914: CD 31 0B # call clear_key L4917: CD 04 0E # call no_feedback L491A: CD F6 26 L491D: 37 # scf # ret L491E: C9 # # toggle_or_position_menu: # L491F: 3A 10 D1 # ld a, [menu_active] L4922: B7 # or a # jr nz, 1f ! already in menu, allow short press L4923: 20 0A L4925: 3A 8D C9 # ld a, [cfg_enter_time] L4928: B7 # or a # jr z, 1f ! no safety delay in ENT L4929: 28 04 # # call enter_safety_delay ! twiddle until released L492B: CD E5 48 L492E: D0 # ret nc ! if too short # 1: # # ! How many pending digits ? # L492F: 3A B5 D0 # ld a, [digidx] L4932: B7 # or a # jp nz, 1f ! jump if any digits L4933: C2 43 49 # # ! Just ENT - toggle setup # L4936: 3A 10 D1 # ld a, [menu_active] # xor 1 L4939: EE 01 L493B: 32 10 D1 # ld [menu_active], a L493E: B7 # or a # call z, leaved_setup ! if leaving menu L493F: CC 2F 47 # ret L4942: C9 # 1: # ! # ! ENT with digits, single or more digits ? # ! # ld ix, digbuf L4943: DD 21 B6 D0 # # cp 1 ! just a single digit ? L4947: FE 01 # jp z, 1f L4949: CA 5E 49 # cp 2 ! two digits ? L494C: FE 02 # jp z, 2f L494E: CA 66 49 # # ! one and two digits here # # call a2i ! number into AHL L4951: CD 57 3A # ld c, 100 L4954: 0E 64 # call div248 ! /= 100, result L has top, A has sub indexes L4956: CD 31 3B L4959: 47 # ld b, a L495A: 7D # ld a, l ! a top index, b sub index # jp 3f L495B: C3 6C 49 # 1: L495E: DD 7E 00 # ld a, [ix + 0] ! top index # ld b, 0 ! subindex 0 L4961: 06 00 # jp 3f L4963: C3 6C 49 # 2: L4966: DD 7E 00 # ld a, [ix + 0] ! top index L4969: DD 46 01 # ld b, [ix + 1] ! sub index # 3: # ! separated now, A and B - both just 8bits # # cp 10 L496C: FE 0A # jr c, 1f L496E: 38 02 # ld a, 9 ! someone _might_ alphainput these L4970: 3E 09 # 1: L4972: CB 27 # sla a ! wordify index L4974: 5F # ld e, a # ld d, 0 L4975: 16 00 # ld ix, menu_quickspots L4977: DD 21 8E 5A L497B: DD 19 # add ix, de L497D: DD 6E 00 # ld l, [ix+0] L4980: DD 66 01 # ld h, [ix+1] ! hl points into first in submenu L4983: E5 # push hl # # # ! XXX this might overflow the pointer if the setup table # ! were located in very high address. The problem is asserted. # # ld c, size_menurec L4984: 0E 10 # ld a, 0 L4986: 3E 00 # ld h, 0 L4988: 26 00 L498A: 68 # ld l, b ! AHL gets sub index # call mul248 ! turns into byte offset in submenu L498B: CD 1B 3B # L498E: C1 # pop bc ! submenu offset back L498F: 09 # add hl, bc ! finally record pointer # # ! Only check needed, overflow at end of menu. Never overflow of 16bit # ! address. # L4990: E5 # push hl # ld de, end_menu L4991: 11 10 59 L4994: A7 # and a L4995: ED 52 # sbc hl, de L4997: E1 # pop hl # jp c, 1f L4998: DA 9E 49 # ld hl, end_menu - size_menurec ! stick at last L499B: 21 00 59 # 1: L499E: 22 11 D1 # ld [menu_ptr], hl # # ld a, 1 L49A1: 3E 01 L49A3: 32 10 D1 # ld [menu_active], a ! menu mode forced to 1 # # ld a, 0 L49A6: 3E 00 L49A8: 32 B5 D0 # ld [digidx], a # ret L49AB: C9 # # # # menu_enter_or_walk: L49AC: 3A B5 D0 # ld a, [digidx] L49AF: B7 # or a # jp z, menu_next L49B0: CA 1C 4A # # call menu_new_value L49B3: CD B9 4A # ld a, 0 L49B6: 3E 00 L49B8: 32 B5 D0 # ld [digidx], a # ret L49BB: C9 # # menu_defval_or_exec: L49BC: DD 2A 11 D1 # ld ix, [menu_ptr] # call load_menu_ptr ! into hl L49C0: CD 05 47 L49C3: DD 7E 0E # ld a, [ix + offset_type] # cp 8 L49C6: FE 08 # jp z, menu_set_duplex_def ! 8, copy cfg_other_duplex L49C8: CA D6 49 # cp 3 L49CB: FE 03 # jp z, menu_set_from_vfo ! 3, copy rx_freq L49CD: CA E9 49 # cp 10 L49D0: FE 0A # jp nz, reset_menurec L49D2: C2 47 4C L49D5: E9 # jp [hl] ! 10, jump to ptr # # menu_set_duplex_def: L49D6: E5 # push hl L49D7: DD E1 # pop ix L49D9: 2A A2 C7 L49DC: 3A A4 C7 # ld hl, [cfg_other_duplex] ; ld a, [(cfg_other_duplex) + 2] L49DF: DD 75 00 L49E2: DD 74 01 L49E5: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L49E8: C9 # # menu_set_from_vfo: L49E9: E5 # push hl L49EA: DD E1 # pop ix L49EC: 2A 08 C0 L49EF: 3A 0A C0 # ld hl, [rx_freq] ; ld a, [(rx_freq) + 2] L49F2: DD 75 00 L49F5: DD 74 01 L49F8: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L49FB: C9 # # menu_next_group: L49FC: DD 2A 11 D1 # ld ix, [menu_ptr] L4A00: DD 46 00 # ld b, [ix+offset_tag+0] L4A03: DD 4E 01 # ld c, [ix+offset_tag+1] # 1: L4A06: C5 # push bc # call menu_next L4A07: CD 1C 4A L4A0A: C1 # pop bc L4A0B: DD 2A 11 D1 # ld ix, [menu_ptr] L4A0F: DD 7E 00 # ld a, [ix+offset_tag+0] L4A12: B8 # cp b L4A13: C0 # ret nz L4A14: DD 7E 01 # ld a, [ix+offset_tag+1] L4A17: B9 # cp c L4A18: C0 # ret nz # jp 1b L4A19: C3 06 4A # # menu_next: # ld bc, size_menurec L4A1C: 01 10 00 # jp menu_next_prev L4A1F: C3 28 4A # menu_prev: # ld bc, -size_menurec L4A22: 01 F0 FF # jp menu_next_prev L4A25: C3 28 4A # # menu_next_prev: L4A28: 2A 11 D1 # ld hl, [menu_ptr] L4A2B: 09 # add hl, bc # ld a, HI(end_menu) L4A2C: 3E 59 L4A2E: BC # cp h # jr nz, 1f L4A2F: 20 08 # ld a, LO(end_menu) L4A31: 3E 10 L4A33: BD # cp l # jr nz, 1f L4A34: 20 03 # ld hl, start_menu L4A36: 21 80 4C # 1: # ld a, HI(start_menu - size_menurec) L4A39: 3E 4C L4A3B: BC # cp h # jr nz, 1f L4A3C: 20 08 # ld a, LO(start_menu - size_menurec) L4A3E: 3E 70 L4A40: BD # cp l # jr nz, 1f L4A41: 20 03 # ld hl, end_menu - size_menurec L4A43: 21 00 59 # 1: L4A46: 22 11 D1 # ld [menu_ptr], hl # ret L4A49: C9 # # ! de = ptr, hl data (wrap) # # remote_config_execute: # # ! special ptr ? # L4A4A: 7A # ld a, d L4A4B: B7 # or a # jp nz, 1f ! normal varible, search menu L4A4C: C2 67 4A # L4A4F: 7B # ld a, e # # cp 0 ! "3_N" = 0 L4A50: FE 00 L4A52: C8 # ret z # cp 1 ! RFC = 1 L4A53: FE 01 L4A55: C8 # ret z # # ld ix, menu_rec_sql L4A56: DD 21 B0 4D # cp 2 ! SQL = 2 L4A5A: FE 02 # jr z, 3f L4A5C: 28 2C # # ld ix, menu_rec_sqB L4A5E: DD 21 C0 4D # cp 3 ! SQL BI = 3 L4A62: FE 03 # jr z, 3f L4A64: 28 24 # # ret ! no such special ptr L4A66: C9 # 1: # ! where in menu is this ptr # # ld ix, start_menu L4A67: DD 21 80 4C # 2: L4A6B: DD 7E 08 # ld a, [ix+offset_ptr+0] L4A6E: BB # cp e # jr nz, 1f L4A6F: 20 06 L4A71: DD 7E 09 # ld a, [ix+offset_ptr+1] L4A74: BA # cp d # jr z, 3f ! here L4A75: 28 13 # 1: L4A77: DD E5 # push ix L4A79: C1 # pop bc L4A7A: 79 # ld a, c # cp LO(end_menu) L4A7B: FE 10 # jr nz, 1f L4A7D: 20 04 L4A7F: 78 # ld a, b # cp HI(end_menu) L4A80: FE 59 L4A82: C8 # ret z ! no such record. XXX later for remote pokes # 1: # ld bc, size_menurec L4A83: 01 10 00 L4A86: DD 09 # add ix, bc # jr 2b L4A88: 18 E1 # 3: L4A8A: DD 22 11 D1 # ld [menu_ptr], ix ! XXX could just preload ix # # ! Act as like remote data in digbuf # # ld de, digbuf L4A8E: 11 B6 D0 # ld b, 8 L4A91: 06 08 # ld c, 0 L4A93: 0E 00 # 1: L4A95: 7E # ld a, [hl] L4A96: 2C # inc l ! in page wrap L4A97: CB 27 L4A99: CB 27 L4A9B: CB 27 L4A9D: CB 27 # sla a ; sla a ; sla a ; sla a L4A9F: B6 # or [hl] L4AA0: 2C # inc l ! in page wrap # cp 0xFF L4AA1: FE FF # jp z, 1f L4AA3: CA AC 4A L4AA6: 12 # ld [de], a L4AA7: 13 # inc de L4AA8: 0C # inc c L4AA9: 05 # dec b # jr nz, 1b L4AAA: 20 E9 # 1: L4AAC: 79 # ld a, c L4AAD: 32 B5 D0 # ld [digidx], a # # ! GO! # # call menu_new_value L4AB0: CD B9 4A # ld a, 0 L4AB3: 3E 00 L4AB5: 32 B5 D0 # ld [digidx], a # ret L4AB8: C9 # # # menu_new_value: L4AB9: DD 2A 11 D1 # ld ix, [menu_ptr] ! XXX remote could skip this # call load_menu_ptr ! hl -> var L4ABD: CD 05 47 L4AC0: DD 7E 0E # ld a, [ix+offset_type] # cp 1 L4AC3: FE 01 # jp z, menu_new_value_byte L4AC5: CA F1 4A # cp 2 L4AC8: FE 02 # jp z, menu_new_value_word L4ACA: CA 0C 4B # cp 3 L4ACD: FE 03 # jp z, menu_new_value_freq L4ACF: CA 5D 4B # cp 4 L4AD2: FE 04 # jp z, menu_new_value_tab L4AD4: CA 19 4B # cp 5 L4AD7: FE 05 # jp z, menu_new_value_dyn L4AD9: CA 3F 4C # cp 6 L4ADC: FE 06 # jp z, menu_new_value_rst L4ADE: CA 2C 4B # cp 7 L4AE1: FE 07 # jp z, menu_new_value_str L4AE3: CA 3B 4B # cp 8 L4AE6: FE 08 # jp z, menu_new_value_dpx L4AE8: CA 6D 4B # cp 9 L4AEB: FE 09 # jp z, menu_new_value_csec L4AED: CA FB 4A # # ret L4AF0: C9 # # # menu_new_value_byte: L4AF1: E5 # push hl # call a2i_byte L4AF2: CD 50 46 L4AF5: DD E1 # pop ix L4AF7: DD 77 00 # ld [ix+0], a # ret L4AFA: C9 # # menu_new_value_csec: L4AFB: E5 # push hl L4AFC: 3A B5 D0 # ld a, [digidx] L4AFF: 3D # dec a L4B00: 32 B5 D0 # ld [digidx], a ! 10# for millisecs, we need 1# for cSECs # call a2i_byte L4B03: CD 50 46 L4B06: DD E1 # pop ix L4B08: DD 77 00 # ld [ix+0], a # ret L4B0B: C9 # # menu_new_value_word: L4B0C: E5 # push hl # call a2i_word L4B0D: CD 59 46 L4B10: DD E1 # pop ix L4B12: DD 75 00 # ld [ix+0], l L4B15: DD 74 01 # ld [ix+1], h # ret L4B18: C9 # # menu_new_value_tab: L4B19: E5 # push hl ! variable # call load_menu_arg L4B1A: CD 3B 47 L4B1D: 4E # ld c, [hl] L4B1E: C5 # push bc ! count of selections # call a2i_byte L4B1F: CD 50 46 L4B22: C1 # pop bc L4B23: B9 # cp c # jp c, 1f L4B24: DA 29 4B L4B27: 79 # ld a, c L4B28: 3D # dec a # 1: L4B29: E1 # pop hl L4B2A: 77 # ld [hl], a # ret L4B2B: C9 # # menu_new_value_rst: L4B2C: E5 # push hl # ret L4B2D: C9 # ret L4B2E: C9 # L4B2F: FF L4B30: FF L4B31: FF L4B32: FF L4B33: FF L4B34: FF L4B35: FF L4B36: FF L4B37: FF L4B38: FF L4B39: FF # empty_string: .byte 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF L4B3A: FF # # menu_new_value_str: L4B3B: E5 # push hl L4B3C: E5 # push hl L4B3D: D1 # pop de # ld hl, empty_string L4B3E: 21 2F 4B # ld bc, 8 L4B41: 01 08 00 L4B44: ED B0 # ldir L4B46: D1 # pop de # ld hl, digbuf L4B47: 21 B6 D0 L4B4A: 3A B5 D0 # ld a, [digidx] L4B4D: B7 # or a L4B4E: C8 # ret z # cp 8 L4B4F: FE 08 # jr c, 1f L4B51: 38 02 # ld a, 8 L4B53: 3E 08 # 1: L4B55: 4F # ld c, a # ld b, 0 L4B56: 06 00 # ld a, 0 L4B58: 3E 00 L4B5A: ED B0 # ldir # ret L4B5C: C9 # # menu_new_value_freq: L4B5D: E5 # push hl # call a2i L4B5E: CD 57 3A L4B61: DD E1 # pop ix L4B63: DD 75 00 L4B66: DD 74 01 L4B69: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L4B6C: C9 # # menu_new_value_dpx: L4B6D: E5 # push hl # call a2i L4B6E: CD 57 3A L4B71: DD E1 # pop ix L4B73: DD 4E 02 # ld c, [ix+2] ! previous MSByte L4B76: CB 79 # bit 7, c # call nz, negate_ahl ! previous was negative, so... L4B78: C4 47 3A L4B7B: DD 75 00 L4B7E: DD 74 01 L4B81: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L4B84: C9 # # menu_up_value: # ld a, +1 L4B85: 3E 01 # jp 1f L4B87: C3 8C 4B # # menu_dn_value: # ld a, -1 L4B8A: 3E FF # 1: L4B8C: F5 # push af ! direction in stack # L4B8D: DD 2A 11 D1 # ld ix, [menu_ptr] # call load_menu_ptr ! hl -> var L4B91: CD 05 47 L4B94: DD 7E 0E # ld a, [ix+offset_type] # cp 5 L4B97: FE 05 # jp z, menu_step_value_dyn L4B99: CA 3B 4C # cp 1 L4B9C: FE 01 # jp z, menu_step_value_byte L4B9E: CA 1D 4C # cp 9 L4BA1: FE 09 # jp z, menu_step_value_byte L4BA3: CA 1D 4C # cp 4 L4BA6: FE 04 # jp z, menu_step_value_tab L4BA8: CA 21 4C # cp 2 L4BAB: FE 02 # jp z, menu_step_value_word L4BAD: CA 00 4C # cp 3 L4BB0: FE 03 # jp z, menu_step_value_freq L4BB2: CA D6 4B # cp 8 L4BB5: FE 08 # jp z, menu_step_value_dpx L4BB7: CA BC 4B # L4BBA: F1 # pop af # ret ! doh, +/- no effect L4BBB: C9 # # menu_step_value_dpx: L4BBC: F1 # pop af ! duplex value stepped, just flip between neg/pos L4BBD: E5 # push hl L4BBE: DD E1 # pop ix L4BC0: DD 6E 00 L4BC3: DD 66 01 L4BC6: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] # call negate_ahl L4BC9: CD 47 3A L4BCC: DD 75 00 L4BCF: DD 74 01 L4BD2: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L4BD5: C9 # # menu_step_value_freq: # call get_probable_chstep_de L4BD6: CD C2 5B L4BD9: F1 # pop af L4BDA: E5 # push hl L4BDB: DD E1 # pop ix # cp +1 L4BDD: FE 01 L4BDF: DD 6E 00 L4BE2: DD 66 01 L4BE5: DD 7E 02 # ld l, [ix+0]; ld h, [ix+1]; ld a, [ix+2] # jp z, 1f L4BE8: CA F3 4B L4BEB: A7 # and a L4BEC: ED 52 # sbc hl, de # sbc 0 L4BEE: DE 00 # jp 2f L4BF0: C3 F6 4B # 1: L4BF3: 19 # add hl, de # adc 0 L4BF4: CE 00 # 2: L4BF6: DD 75 00 L4BF9: DD 74 01 L4BFC: DD 77 02 # ld [ix+0], l; ld [ix+1], h; ld [ix+2], a # ret L4BFF: C9 # # menu_step_value_word: L4C00: F1 # pop af # ld bc, 1 L4C01: 01 01 00 # cp +1 L4C04: FE 01 # jp z, 1f L4C06: CA 0C 4C # ld bc, -1 L4C09: 01 FF FF # 1: L4C0C: E5 # push hl L4C0D: DD E1 # pop ix L4C0F: DD 6E 00 # ld l, [ix+0] L4C12: DD 66 01 # ld h, [ix+1] L4C15: 09 # add hl, bc L4C16: DD 75 00 # ld [ix+0], l L4C19: DD 74 01 # ld [ix+1], h # ret L4C1C: C9 # # menu_step_value_byte: L4C1D: F1 # pop af L4C1E: 86 # add [hl] L4C1F: 77 # ld [hl], a ! += +1 or -1 # ret L4C20: C9 # # menu_step_value_tab: L4C21: F1 # pop af L4C22: 86 # add [hl] L4C23: 47 # ld b, a ! += +1 or -1 L4C24: E5 # push hl ! save ptr # call load_menu_arg ! for max-1 L4C25: CD 3B 47 L4C28: 7E # ld a, [hl] L4C29: 4F # ld c, a L4C2A: E1 # pop hl L4C2B: 78 # ld a, b # cp -1 L4C2C: FE FF # jp nz, 1f L4C2E: C2 33 4C L4C31: 79 # ld a, c L4C32: 3D # dec a ! count - 1 if down from 0 # 1: L4C33: B9 # cp c # jp c, 1f L4C34: DA 39 4C # ld a, 0 ! 0 if up from max L4C37: 3E 00 # 1: L4C39: 77 # ld [hl], a # ret L4C3A: C9 # # menu_step_value_dyn: L4C3B: F1 # pop af # jp 1f L4C3C: C3 41 4C # menu_new_value_dyn: # ld a, 0 L4C3F: 3E 00 # 1: L4C41: F5 # push af L4C42: 7C # ld a, h L4C43: B5 # or l L4C44: C8 # ret z ! null ptr, non-editable field L4C45: F1 # pop af L4C46: E9 # jp [hl] # # !---------------------------------------------------------------------- # # reset_menurec: L4C47: DD 7E 0E # ld a, [ix + offset_type] # # cp 1 L4C4A: FE 01 # jp z, reset_menurec_byte L4C4C: CA 6B 4C # cp 4 L4C4F: FE 04 # jp z, reset_menurec_byte L4C51: CA 6B 4C # cp 9 L4C54: FE 09 # jp z, reset_menurec_byte L4C56: CA 6B 4C # # cp 2 L4C59: FE 02 # jp z, reset_menurec_word L4C5B: CA 73 4C # # cp 7 L4C5E: FE 07 # jp z, reset_menurec_str L4C60: CA 64 4C # # ret L4C63: C9 # # reset_menurec_str: # call load_menu_ptr L4C64: CD 05 47 # ld a, 0xFF L4C67: 3E FF L4C69: 77 # ld [hl], a # ret L4C6A: C9 # # reset_menurec_byte: # call load_menu_ptr L4C6B: CD 05 47 L4C6E: DD 7E 0C # ld a, [ix + offset_def] L4C71: 77 # ld [hl], a # ret L4C72: C9 # # reset_menurec_word: # call load_menu_ptr L4C73: CD 05 47 L4C76: DD 7E 0C # ld a, [ix + offset_def + 0] L4C79: 77 # ld [hl], a L4C7A: 23 # inc hl L4C7B: DD 7E 0D # ld a, [ix + offset_def + 1] L4C7E: 77 # ld [hl], a # ret L4C7F: C9 # # !---------------------------------------------------------------------- # ! # ! SETUP GUNK MACROS # # ! 1 byte number of selections in table # ! n * 8 bytes zero terminated strings, 8 bytes separated # # # # # # # # offset_tag = 0 # offset_title = 2 # offset_ptr = 8 # offset_arg = 10 # offset_def = 12 # offset_type = 14 # # size_menurec = 16 # # .align 4 # # !== SETUP TABLES ====================================================== # ! # ! note the ugliness of cSEC, e.g. defval here is 100 for 1000 msec etc # # start_menu: # # menu_0: L4C80: 47 45 L4C82: 74 50 63 20 20 20 L4C88: 1F C7 L4C8A: 00 00 L4C8C: 00 00 L4C8E: 01 L4C8F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "tPc "; ASSERT((.-1b)==6); .word cfg_txpwr; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L4C90: 47 45 L4C92: 43 74 43 53 53 20 L4C98: 3C C7 L4C9A: 00 00 L4C9C: 00 00 L4C9E: 01 L4C9F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "CtCSS "; ASSERT((.-1b)==6); .word cfg_ctcss_hz; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L4CA0: 47 45 L4CA2: 47 50 69 6F 20 31 L4CA8: 8E C9 L4CAA: 7C 59 L4CAC: 00 00 L4CAE: 04 L4CAF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "GPio 1"; ASSERT((.-1b)==6); .word cfg_exal_state; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 L4CB0: 47 45 L4CB2: 4C 6F 75 64 20 20 L4CB8: 21 C7 L4CBA: 2B 5A L4CBC: 01 00 L4CBE: 04 L4CBF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "Loud "; ASSERT((.-1b)==6); .word cfg_key_blip_pitch; .word tab_blip; .word 1; .byte 4; .byte 'Z'; .align 4 L4CC0: 47 45 L4CC2: 53 50 45 45 43 48 L4CC8: 21 C9 L4CCA: 7C 59 L4CCC: 00 00 L4CCE: 04 L4CCF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "SPEECH"; ASSERT((.-1b)==6); .word cfg_voice_id; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 L4CD0: 47 45 L4CD2: 49 64 4C 45 20 74 L4CD8: 22 C9 L4CDA: 00 00 L4CDC: 00 00 L4CDE: 01 L4CDF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "IdLE t"; ASSERT((.-1b)==6); .word cfg_idlefn_delay; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L4CE0: 47 45 L4CE2: 49 64 4C 45 46 6E L4CE8: 23 C9 L4CEA: 12 5A L4CEC: 00 00 L4CEE: 04 L4CEF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "IdLEFn"; ASSERT((.-1b)==6); .word cfg_idlefn; .word tab_idlefn; .word 0; .byte 4; .byte 'Z'; .align 4 # L4CF0: 47 45 L4CF2: 53 45 4C 43 20 74 L4CF8: 6E C9 L4CFA: 00 00 L4CFC: 00 00 L4CFE: 01 L4CFF: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "SELC t"; ASSERT((.-1b)==6); .word cfg_selcall_time; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # L4D00: 47 45 L4D02: 6F 6E 48 6F 6F 20 L4D08: 5E C9 L4D0A: 00 00 L4D0C: 00 00 L4D0E: 07 L4D0F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "onHoo "; ASSERT((.-1b)==6); .word cfg_onhook_script; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L4D10: 47 45 L4D12: 6F 46 46 48 6F 6F L4D18: 66 C9 L4D1A: 00 00 L4D1C: 00 00 L4D1E: 07 L4D1F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "oFFHoo"; ASSERT((.-1b)==6); .word cfg_offhook_script; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # L4D20: 47 45 L4D22: 41 50 72 53 20 20 L4D28: 77 C9 L4D2A: 7C 59 L4D2C: 00 00 L4D2E: 04 L4D2F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "APrS "; ASSERT((.-1b)==6); .word cfg_aprs_tx; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 L4D30: 47 45 L4D32: 41 50 72 41 72 47 L4D38: 7B C9 L4D3A: 00 00 L4D3C: 00 00 L4D3E: 07 L4D3F: 5A # 1: .ascii "GE"; ASSERT((.-1b)==2); 1: .ascii "APrArG"; ASSERT((.-1b)==6); .word cfg_aprs_tx_data; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # # menu_1: L4D40: 74 6F L4D42: 4C 69 47 48 74 53 L4D48: 22 C7 L4D4A: 00 00 L4D4C: FF 00 L4D4E: 01 L4D4F: 5A # 1: .ascii "to"; ASSERT((.-1b)==2); 1: .ascii "LiGHtS"; ASSERT((.-1b)==6); .word cfg_light_seconds; .word 0; .word 255; .byte 1; .byte 'Z'; .align 4 L4D50: 74 6F L4D52: 4C 69 74 20 53 71 L4D58: DA C8 L4D5A: 7C 59 L4D5C: 00 00 L4D5E: 04 L4D5F: 5A # 1: .ascii "to"; ASSERT((.-1b)==2); 1: .ascii "Lit Sq"; ASSERT((.-1b)==6); .word cfg_light_sql; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 L4D60: 74 6F L4D62: 49 47 6E 41 50 4F L4D68: 23 C7 L4D6A: 00 00 L4D6C: FF 00 L4D6E: 01 L4D6F: 5A # 1: .ascii "to"; ASSERT((.-1b)==2); 1: .ascii "IGnAPO"; ASSERT((.-1b)==6); .word cfg_ign_apo_hours; .word 0; .word 255; .byte 1; .byte 'Z'; .align 4 L4D70: 74 6F L4D72: 74 72 20 74 6F 74 L4D78: 24 C7 L4D7A: 00 00 L4D7C: FF 00 L4D7E: 01 L4D7F: 5A # 1: .ascii "to"; ASSERT((.-1b)==2); 1: .ascii "tr tot"; ASSERT((.-1b)==6); .word cfg_tx_tot_minutes; .word 0; .word 255; .byte 1; .byte 'Z'; .align 4 L4D80: 74 6F L4D82: 55 6E 72 45 4A 74 L4D88: 24 C9 L4D8A: 00 00 L4D8C: 05 00 L4D8E: 01 L4D8F: 5A # 1: .ascii "to"; ASSERT((.-1b)==2); 1: .ascii "UnrEJt"; ASSERT((.-1b)==6); .word cfg_unreject_mins; .word 0; .word 5; .byte 1; .byte 'Z'; .align 4 # L4D90: 53 43 L4D92: 72 41 74 45 20 20 L4D98: 25 C7 L4D9A: 00 00 L4D9C: 05 00 L4D9E: 09 L4D9F: 5A # 1: .ascii "SC"; ASSERT((.-1b)==2); 1: .ascii "rAtE "; ASSERT((.-1b)==6); .word cfg_scan_rate; .word 0; .word 5; .byte 9; .byte 'Z'; .align 4 L4DA0: 53 43 L4DA2: 6E 6F 64 41 74 41 L4DA8: 25 C9 L4DAA: 7C 59 L4DAC: 00 00 L4DAE: 04 L4DAF: 5A # 1: .ascii "SC"; ASSERT((.-1b)==2); 1: .ascii "nodAtA"; ASSERT((.-1b)==6); .word cfg_scan_skip_fsk_channels; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 # # menu_2: # menu_rec_sql: L4DB0: 53 71 L4DB2: 53 71 4C 20 20 20 L4DB8: 6C 48 L4DBA: 3A 48 L4DBC: 7F 00 L4DBE: 05 L4DBF: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "SqL "; ASSERT((.-1b)==6); .word menu_sql_change; .word draw_sql_dpy; .word 127; .byte 5; .byte 'Z'; .align 4 # menu_rec_sqB: L4DC0: 53 71 L4DC2: 53 71 4C 20 62 69 L4DC8: 7E 48 L4DCA: 53 48 L4DCC: FF 00 L4DCE: 05 L4DCF: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "SqL bi"; ASSERT((.-1b)==6); .word menu_sqB_change; .word draw_sqB_dpy; .word 255; .byte 5; .byte 'Z'; .align 4 L4DD0: 53 71 L4DD2: 48 79 53 74 20 20 L4DD8: 29 C7 L4DDA: 00 00 L4DDC: 04 00 L4DDE: 01 L4DDF: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "HySt "; ASSERT((.-1b)==6); .word cfg_squelch_hyst; .word 0; .word 4; .byte 1; .byte 'Z'; .align 4 L4DE0: 53 71 L4DE2: 6F 50 45 6E 20 20 L4DE8: 2A C7 L4DEA: 00 00 L4DEC: 0A 00 L4DEE: 09 L4DEF: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "oPEn "; ASSERT((.-1b)==6); .word cfg_squelch_head; .word 0; .word 10; .byte 9; .byte 'Z'; .align 4 L4DF0: 53 71 L4DF2: 74 41 49 4C 20 20 L4DF8: 2B C7 L4DFA: 00 00 L4DFC: 0A 00 L4DFE: 09 L4DFF: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "tAIL "; ASSERT((.-1b)==6); .word cfg_squelch_tail; .word 0; .word 10; .byte 9; .byte 'Z'; .align 4 L4E00: 53 71 L4E02: 53 6F 75 72 63 45 L4E08: 26 C7 L4E0A: B7 59 L4E0C: 00 00 L4E0E: 04 L4E0F: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "SourcE"; ASSERT((.-1b)==6); .word cfg_squelch_source; .word tab_sqsrc; .word 0; .byte 4; .byte 'Z'; .align 4 # L4E10: 53 71 L4E12: 42 6F 6E 47 6F 20 L4E18: 8C C9 L4E1A: 2B 5A L4E1C: 00 00 L4E1E: 04 L4E1F: 5A # 1: .ascii "Sq"; ASSERT((.-1b)==2); 1: .ascii "BonGo "; ASSERT((.-1b)==6); .word cfg_serv_blip_pitch; .word tab_blip; .word 0; .byte 4; .byte 'Z'; .align 4 # # menu_3: L4E20: 4C 50 L4E22: 37 20 53 71 4C 20 L4E28: 2C C7 L4E2A: 00 00 L4E2C: 00 00 L4E2E: 01 L4E2F: 5A # 1: .ascii "LP"; ASSERT((.-1b)==2); 1: .ascii "7 SqL "; ASSERT((.-1b)==6); .word cfg_def_squelch; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L4E30: 4C 50 L4E32: 38 20 43 48 41 6E L4E38: 2D C7 L4E3A: 00 00 L4E3C: 00 00 L4E3E: 01 L4E3F: 5A # 1: .ascii "LP"; ASSERT((.-1b)==2); 1: .ascii "8 CHAn"; ASSERT((.-1b)==6); .word cfg_def_memory; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L4E40: 4C 50 L4E42: 39 20 46 72 45 71 L4E48: 2E C7 L4E4A: 00 00 L4E4C: 00 00 L4E4E: 03 L4E4F: 5A # 1: .ascii "LP"; ASSERT((.-1b)==2); 1: .ascii "9 FrEq"; ASSERT((.-1b)==6); .word cfg_def_frequency; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4E50: 4C 50 L4E52: 30 20 4C 6F 75 64 L4E58: 31 C7 L4E5A: 00 00 L4E5C: 01 00 L4E5E: 01 L4E5F: 5A # 1: .ascii "LP"; ASSERT((.-1b)==2); 1: .ascii "0 Loud"; ASSERT((.-1b)==6); .word cfg_def_volume; .word 0; .word 1; .byte 1; .byte 'Z'; .align 4 # # # menu_4: # L4E60: 62 31 L4E62: 53 74 41 72 74 20 L4E68: 48 C7 L4E6A: 00 00 L4E6C: 00 00 L4E6E: 03 L4E6F: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band1_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4E70: 62 31 L4E72: 45 6E 64 20 20 20 L4E78: 4B C7 L4E7A: 00 00 L4E7C: 00 00 L4E7E: 03 L4E7F: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band1_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4E80: 62 31 L4E82: 64 75 50 4C 20 20 L4E88: 4E C7 L4E8A: 00 00 L4E8C: 00 00 L4E8E: 08 L4E8F: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band1_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L4E90: 62 31 L4E92: 53 74 45 50 20 20 L4E98: 51 C7 L4E9A: D0 59 L4E9C: 00 00 L4E9E: 04 L4E9F: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band1_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L4EA0: 62 31 L4EA2: 53 43 74 41 49 4C L4EA8: 52 C7 L4EAA: 00 00 L4EAC: 02 00 L4EAE: 01 L4EAF: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band1_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L4EB0: 62 31 L4EB2: 4C 49 53 74 45 6E L4EB8: 53 C7 L4EBA: 00 00 L4EBC: 0F 00 L4EBE: 01 L4EBF: 5A # 1: .ascii "b1"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band1_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L4EC0: 62 32 L4EC2: 53 74 41 72 74 20 L4EC8: 56 C7 L4ECA: 00 00 L4ECC: 00 00 L4ECE: 03 L4ECF: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band2_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4ED0: 62 32 L4ED2: 45 6E 64 20 20 20 L4ED8: 59 C7 L4EDA: 00 00 L4EDC: 00 00 L4EDE: 03 L4EDF: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band2_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4EE0: 62 32 L4EE2: 64 75 50 4C 20 20 L4EE8: 5C C7 L4EEA: 00 00 L4EEC: 00 00 L4EEE: 08 L4EEF: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band2_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L4EF0: 62 32 L4EF2: 53 74 45 50 20 20 L4EF8: 5F C7 L4EFA: D0 59 L4EFC: 00 00 L4EFE: 04 L4EFF: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band2_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L4F00: 62 32 L4F02: 53 43 74 41 49 4C L4F08: 60 C7 L4F0A: 00 00 L4F0C: 02 00 L4F0E: 01 L4F0F: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band2_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L4F10: 62 32 L4F12: 4C 49 53 74 45 6E L4F18: 61 C7 L4F1A: 00 00 L4F1C: 0F 00 L4F1E: 01 L4F1F: 5A # 1: .ascii "b2"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band2_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L4F20: 62 33 L4F22: 53 74 41 72 74 20 L4F28: 64 C7 L4F2A: 00 00 L4F2C: 00 00 L4F2E: 03 L4F2F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band3_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4F30: 62 33 L4F32: 45 6E 64 20 20 20 L4F38: 67 C7 L4F3A: 00 00 L4F3C: 00 00 L4F3E: 03 L4F3F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band3_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4F40: 62 33 L4F42: 64 75 50 4C 20 20 L4F48: 6A C7 L4F4A: 00 00 L4F4C: 00 00 L4F4E: 08 L4F4F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band3_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L4F50: 62 33 L4F52: 53 74 45 50 20 20 L4F58: 6D C7 L4F5A: D0 59 L4F5C: 00 00 L4F5E: 04 L4F5F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band3_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L4F60: 62 33 L4F62: 53 43 74 41 49 4C L4F68: 6E C7 L4F6A: 00 00 L4F6C: 02 00 L4F6E: 01 L4F6F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band3_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L4F70: 62 33 L4F72: 4C 49 53 74 45 6E L4F78: 6F C7 L4F7A: 00 00 L4F7C: 0F 00 L4F7E: 01 L4F7F: 5A # 1: .ascii "b3"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band3_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L4F80: 62 34 L4F82: 53 74 41 72 74 20 L4F88: 72 C7 L4F8A: 00 00 L4F8C: 00 00 L4F8E: 03 L4F8F: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band4_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4F90: 62 34 L4F92: 45 6E 64 20 20 20 L4F98: 75 C7 L4F9A: 00 00 L4F9C: 00 00 L4F9E: 03 L4F9F: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band4_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4FA0: 62 34 L4FA2: 64 75 50 4C 20 20 L4FA8: 78 C7 L4FAA: 00 00 L4FAC: 00 00 L4FAE: 08 L4FAF: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band4_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L4FB0: 62 34 L4FB2: 53 74 45 50 20 20 L4FB8: 7B C7 L4FBA: D0 59 L4FBC: 00 00 L4FBE: 04 L4FBF: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band4_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L4FC0: 62 34 L4FC2: 53 43 74 41 49 4C L4FC8: 7C C7 L4FCA: 00 00 L4FCC: 02 00 L4FCE: 01 L4FCF: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band4_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L4FD0: 62 34 L4FD2: 4C 49 53 74 45 6E L4FD8: 7D C7 L4FDA: 00 00 L4FDC: 0F 00 L4FDE: 01 L4FDF: 5A # 1: .ascii "b4"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band4_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L4FE0: 62 35 L4FE2: 53 74 41 72 74 20 L4FE8: 80 C7 L4FEA: 00 00 L4FEC: 00 00 L4FEE: 03 L4FEF: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band5_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L4FF0: 62 35 L4FF2: 45 6E 64 20 20 20 L4FF8: 83 C7 L4FFA: 00 00 L4FFC: 00 00 L4FFE: 03 L4FFF: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band5_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5000: 62 35 L5002: 64 75 50 4C 20 20 L5008: 86 C7 L500A: 00 00 L500C: 00 00 L500E: 08 L500F: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band5_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L5010: 62 35 L5012: 53 74 45 50 20 20 L5018: 89 C7 L501A: D0 59 L501C: 00 00 L501E: 04 L501F: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band5_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L5020: 62 35 L5022: 53 43 74 41 49 4C L5028: 8A C7 L502A: 00 00 L502C: 02 00 L502E: 01 L502F: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band5_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L5030: 62 35 L5032: 4C 49 53 74 45 6E L5038: 8B C7 L503A: 00 00 L503C: 0F 00 L503E: 01 L503F: 5A # 1: .ascii "b5"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band5_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L5040: 62 36 L5042: 53 74 41 72 74 20 L5048: 8E C7 L504A: 00 00 L504C: 00 00 L504E: 03 L504F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "StArt "; ASSERT((.-1b)==6); .word cfg_band6_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5050: 62 36 L5052: 45 6E 64 20 20 20 L5058: 91 C7 L505A: 00 00 L505C: 00 00 L505E: 03 L505F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "End "; ASSERT((.-1b)==6); .word cfg_band6_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5060: 62 36 L5062: 64 75 50 4C 20 20 L5068: 94 C7 L506A: 00 00 L506C: 00 00 L506E: 08 L506F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_band6_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L5070: 62 36 L5072: 53 74 45 50 20 20 L5078: 97 C7 L507A: D0 59 L507C: 00 00 L507E: 04 L507F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_band6_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L5080: 62 36 L5082: 53 43 74 41 49 4C L5088: 98 C7 L508A: 00 00 L508C: 02 00 L508E: 01 L508F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_band6_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L5090: 62 36 L5092: 4C 49 53 74 45 6E L5098: 99 C7 L509A: 00 00 L509C: 0F 00 L509E: 01 L509F: 5A # 1: .ascii "b6"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_band6_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # L50A0: 62 6F L50A2: 64 75 50 4C 20 20 L50A8: A2 C7 L50AA: 00 00 L50AC: 00 00 L50AE: 08 L50AF: 5A # 1: .ascii "bo"; ASSERT((.-1b)==2); 1: .ascii "duPL "; ASSERT((.-1b)==6); .word cfg_other_duplex; .word 0; .word 0; .byte 8; .byte 'Z'; .align 4 L50B0: 62 6F L50B2: 53 74 45 50 20 20 L50B8: A5 C7 L50BA: D0 59 L50BC: 00 00 L50BE: 04 L50BF: 5A # 1: .ascii "bo"; ASSERT((.-1b)==2); 1: .ascii "StEP "; ASSERT((.-1b)==6); .word cfg_other_step; .word tab_chstep; .word 0; .byte 4; .byte 'Z'; .align 4 L50C0: 62 6F L50C2: 53 43 74 41 49 4C L50C8: A6 C7 L50CA: 00 00 L50CC: 02 00 L50CE: 01 L50CF: 5A # 1: .ascii "bo"; ASSERT((.-1b)==2); 1: .ascii "SCtAIL"; ASSERT((.-1b)==6); .word cfg_other_sctail; .word 0; .word 2; .byte 1; .byte 'Z'; .align 4 L50D0: 62 6F L50D2: 4C 49 53 74 45 6E L50D8: A7 C7 L50DA: 00 00 L50DC: 0F 00 L50DE: 01 L50DF: 5A # 1: .ascii "bo"; ASSERT((.-1b)==2); 1: .ascii "LIStEn"; ASSERT((.-1b)==6); .word cfg_other_sclisten; .word 0; .word 15; .byte 1; .byte 'Z'; .align 4 # # menu_5: L50E0: 72 4A L50E2: 6E 20 74 45 6D 50 L50E8: 83 C9 L50EA: 00 00 L50EC: 00 00 L50EE: 01 L50EF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "n tEmP"; ASSERT((.-1b)==6); .word cfg_num_tmp_rejects; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # L50F0: 72 4A L50F2: 72 45 4A 20 20 30 L50F8: AA C7 L50FA: 00 00 L50FC: 00 00 L50FE: 03 L50FF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 0"; ASSERT((.-1b)==6); .word cfg_reject_0; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5100: 72 4A L5102: 72 45 4A 20 20 31 L5108: AD C7 L510A: 00 00 L510C: 00 00 L510E: 03 L510F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 1"; ASSERT((.-1b)==6); .word cfg_reject_1; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5110: 72 4A L5112: 72 45 4A 20 20 32 L5118: B0 C7 L511A: 00 00 L511C: 00 00 L511E: 03 L511F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 2"; ASSERT((.-1b)==6); .word cfg_reject_2; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5120: 72 4A L5122: 72 45 4A 20 20 33 L5128: B3 C7 L512A: 00 00 L512C: 00 00 L512E: 03 L512F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 3"; ASSERT((.-1b)==6); .word cfg_reject_3; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5130: 72 4A L5132: 72 45 4A 20 20 34 L5138: B6 C7 L513A: 00 00 L513C: 00 00 L513E: 03 L513F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 4"; ASSERT((.-1b)==6); .word cfg_reject_4; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5140: 72 4A L5142: 72 45 4A 20 20 35 L5148: B9 C7 L514A: 00 00 L514C: 00 00 L514E: 03 L514F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 5"; ASSERT((.-1b)==6); .word cfg_reject_5; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5150: 72 4A L5152: 72 45 4A 20 20 36 L5158: BC C7 L515A: 00 00 L515C: 00 00 L515E: 03 L515F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 6"; ASSERT((.-1b)==6); .word cfg_reject_6; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5160: 72 4A L5162: 72 45 4A 20 20 37 L5168: BF C7 L516A: 00 00 L516C: 00 00 L516E: 03 L516F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 7"; ASSERT((.-1b)==6); .word cfg_reject_7; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5170: 72 4A L5172: 72 45 4A 20 20 38 L5178: C2 C7 L517A: 00 00 L517C: 00 00 L517E: 03 L517F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 8"; ASSERT((.-1b)==6); .word cfg_reject_8; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5180: 72 4A L5182: 72 45 4A 20 20 39 L5188: C5 C7 L518A: 00 00 L518C: 00 00 L518E: 03 L518F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 9"; ASSERT((.-1b)==6); .word cfg_reject_9; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5190: 72 4A L5192: 72 45 4A 20 31 30 L5198: 82 C8 L519A: 00 00 L519C: 00 00 L519E: 03 L519F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 10"; ASSERT((.-1b)==6); .word cfg_reject_10; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51A0: 72 4A L51A2: 72 45 4A 20 31 31 L51A8: 85 C8 L51AA: 00 00 L51AC: 00 00 L51AE: 03 L51AF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 11"; ASSERT((.-1b)==6); .word cfg_reject_11; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51B0: 72 4A L51B2: 72 45 4A 20 31 32 L51B8: 88 C8 L51BA: 00 00 L51BC: 00 00 L51BE: 03 L51BF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 12"; ASSERT((.-1b)==6); .word cfg_reject_12; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51C0: 72 4A L51C2: 72 45 4A 20 31 33 L51C8: 8B C8 L51CA: 00 00 L51CC: 00 00 L51CE: 03 L51CF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 13"; ASSERT((.-1b)==6); .word cfg_reject_13; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51D0: 72 4A L51D2: 72 45 4A 20 31 34 L51D8: 8E C8 L51DA: 00 00 L51DC: 00 00 L51DE: 03 L51DF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 14"; ASSERT((.-1b)==6); .word cfg_reject_14; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51E0: 72 4A L51E2: 72 45 4A 20 31 35 L51E8: 91 C8 L51EA: 00 00 L51EC: 00 00 L51EE: 03 L51EF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 15"; ASSERT((.-1b)==6); .word cfg_reject_15; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L51F0: 72 4A L51F2: 72 45 4A 20 31 36 L51F8: 94 C8 L51FA: 00 00 L51FC: 00 00 L51FE: 03 L51FF: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 16"; ASSERT((.-1b)==6); .word cfg_reject_16; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5200: 72 4A L5202: 72 45 4A 20 31 37 L5208: 97 C8 L520A: 00 00 L520C: 00 00 L520E: 03 L520F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 17"; ASSERT((.-1b)==6); .word cfg_reject_17; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5210: 72 4A L5212: 72 45 4A 20 31 38 L5218: 9A C8 L521A: 00 00 L521C: 00 00 L521E: 03 L521F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 18"; ASSERT((.-1b)==6); .word cfg_reject_18; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5220: 72 4A L5222: 72 45 4A 20 31 39 L5228: 9D C8 L522A: 00 00 L522C: 00 00 L522E: 03 L522F: 5A # 1: .ascii "rJ"; ASSERT((.-1b)==2); 1: .ascii "rEJ 19"; ASSERT((.-1b)==6); .word cfg_reject_19; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 # L5230: 53 68 L5232: 53 68 43 75 74 30 L5238: D8 C7 L523A: 00 00 L523C: 00 00 L523E: 07 L523F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut0"; ASSERT((.-1b)==6); .word cfg_shortcut_0; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5240: 53 68 L5242: 53 68 43 75 74 31 L5248: E0 C7 L524A: 00 00 L524C: 00 00 L524E: 07 L524F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut1"; ASSERT((.-1b)==6); .word cfg_shortcut_1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5250: 53 68 L5252: 53 68 43 75 74 32 L5258: E8 C7 L525A: 00 00 L525C: 00 00 L525E: 07 L525F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut2"; ASSERT((.-1b)==6); .word cfg_shortcut_2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5260: 53 68 L5262: 53 68 43 75 74 33 L5268: F0 C7 L526A: 00 00 L526C: 00 00 L526E: 07 L526F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut3"; ASSERT((.-1b)==6); .word cfg_shortcut_3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5270: 53 68 L5272: 53 68 43 75 74 34 L5278: F8 C7 L527A: 00 00 L527C: 00 00 L527E: 07 L527F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut4"; ASSERT((.-1b)==6); .word cfg_shortcut_4; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5280: 53 68 L5282: 53 68 43 75 74 35 L5288: 00 C8 L528A: 00 00 L528C: 00 00 L528E: 07 L528F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut5"; ASSERT((.-1b)==6); .word cfg_shortcut_5; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5290: 53 68 L5292: 53 68 43 75 74 36 L5298: 08 C8 L529A: 00 00 L529C: 00 00 L529E: 07 L529F: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut6"; ASSERT((.-1b)==6); .word cfg_shortcut_6; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L52A0: 53 68 L52A2: 53 68 43 75 74 37 L52A8: 10 C8 L52AA: 00 00 L52AC: 00 00 L52AE: 07 L52AF: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut7"; ASSERT((.-1b)==6); .word cfg_shortcut_7; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L52B0: 53 68 L52B2: 53 68 43 75 74 38 L52B8: 18 C8 L52BA: 00 00 L52BC: 00 00 L52BE: 07 L52BF: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut8"; ASSERT((.-1b)==6); .word cfg_shortcut_8; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L52C0: 53 68 L52C2: 53 68 43 75 74 39 L52C8: 20 C8 L52CA: 00 00 L52CC: 00 00 L52CE: 07 L52CF: 5A # 1: .ascii "Sh"; ASSERT((.-1b)==2); 1: .ascii "ShCut9"; ASSERT((.-1b)==6); .word cfg_shortcut_9; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # # menu_6: L52D0: 64 48 L52D2: 63 63 69 72 20 48 L52D8: B8 48 L52DA: CD 48 L52DC: 00 00 L52DE: 05 L52DF: 5A # 1: .ascii "dH"; ASSERT((.-1b)==2); 1: .ascii "ccir H"; ASSERT((.-1b)==6); .word ccir_hist_walk; .word draw_ccir_hist; .word 0; .byte 5; .byte 'Z'; .align 4 L52E0: 64 48 L52E2: 64 74 6D 66 20 48 L52E8: BE 48 L52EA: D5 48 L52EC: 00 00 L52EE: 05 L52EF: 5A # 1: .ascii "dH"; ASSERT((.-1b)==2); 1: .ascii "dtmf H"; ASSERT((.-1b)==6); .word dtmf_hist_walk; .word draw_dtmf_hist; .word 0; .byte 5; .byte 'Z'; .align 4 L52F0: 64 48 L52F2: 46 53 4B 20 20 48 L52F8: C4 48 L52FA: DD 48 L52FC: 00 00 L52FE: 05 L52FF: 5A # 1: .ascii "dH"; ASSERT((.-1b)==2); 1: .ascii "FSK H"; ASSERT((.-1b)==6); .word fsk_hist_walk; .word draw_fsk_hist; .word 0; .byte 5; .byte 'Z'; .align 4 # L5300: 41 4C L5302: 69 64 20 20 20 31 L5308: 28 C8 L530A: 00 00 L530C: 00 00 L530E: 07 L530F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "id 1"; ASSERT((.-1b)==6); .word cfg_mycall_1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5310: 41 4C L5312: 69 64 20 20 20 32 L5318: 30 C8 L531A: 00 00 L531C: 00 00 L531E: 07 L531F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "id 2"; ASSERT((.-1b)==6); .word cfg_mycall_2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5320: 41 4C L5322: 69 64 20 20 20 33 L5328: 38 C8 L532A: 00 00 L532C: 00 00 L532E: 07 L532F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "id 3"; ASSERT((.-1b)==6); .word cfg_mycall_3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5330: 41 4C L5332: 63 63 69 72 20 31 L5338: 40 C8 L533A: 00 00 L533C: 00 00 L533E: 07 L533F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "ccir 1"; ASSERT((.-1b)==6); .word cfg_ccir_1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5340: 41 4C L5342: 63 63 69 72 20 32 L5348: 48 C8 L534A: 00 00 L534C: 00 00 L534E: 07 L534F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "ccir 2"; ASSERT((.-1b)==6); .word cfg_ccir_2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5350: 41 4C L5352: 63 63 69 72 20 33 L5358: 50 C8 L535A: 00 00 L535C: 00 00 L535E: 07 L535F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "ccir 3"; ASSERT((.-1b)==6); .word cfg_ccir_3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5360: 41 4C L5362: 64 74 6E 66 20 31 L5368: 58 C8 L536A: 00 00 L536C: 00 00 L536E: 07 L536F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "dtnf 1"; ASSERT((.-1b)==6); .word cfg_dtmf_1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5370: 41 4C L5372: 64 74 6E 66 20 32 L5378: 60 C8 L537A: 00 00 L537C: 00 00 L537E: 07 L537F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "dtnf 2"; ASSERT((.-1b)==6); .word cfg_dtmf_2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5380: 41 4C L5382: 64 74 6E 66 20 33 L5388: 68 C8 L538A: 00 00 L538C: 00 00 L538E: 07 L538F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "dtnf 3"; ASSERT((.-1b)==6); .word cfg_dtmf_3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5390: 41 4C L5392: 50 45 50 41 20 20 L5398: 70 C8 L539A: 00 00 L539C: 00 00 L539E: 07 L539F: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "PEPA "; ASSERT((.-1b)==6); .word cfg_pepa_on; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L53A0: 41 4C L53A2: 50 45 50 41 6F 46 L53A8: 78 C8 L53AA: 00 00 L53AC: 00 00 L53AE: 07 L53AF: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "PEPAoF"; ASSERT((.-1b)==6); .word cfg_pepa_off; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L53B0: 41 4C L53B2: 4C 6F 75 64 20 20 L53B8: 20 C7 L53BA: 00 00 L53BC: 07 00 L53BE: 01 L53BF: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "Loud "; ASSERT((.-1b)==6); .word cfg_alert_vol; .word 0; .word 7; .byte 1; .byte 'Z'; .align 4 L53C0: 41 4C L53C2: 63 69 72 64 75 72 L53C8: 80 C8 L53CA: 00 00 L53CC: 14 00 L53CE: 09 L53CF: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "cirdur"; ASSERT((.-1b)==6); .word cfg_ccir_minlen; .word 0; .word 20; .byte 9; .byte 'Z'; .align 4 L53D0: 41 4C L53D2: 64 74 66 64 75 72 L53D8: 81 C8 L53DA: 00 00 L53DC: 05 00 L53DE: 01 L53DF: 5A # 1: .ascii "AL"; ASSERT((.-1b)==2); 1: .ascii "dtfdur"; ASSERT((.-1b)==6); .word cfg_dtmf_holdtime; .word 0; .word 5; .byte 1; .byte 'Z'; .align 4 # L53E0: 69 6F L53E2: 63 74 6C 20 31 63 L53E8: 8F C9 L53EA: 00 00 L53EC: 00 00 L53EE: 07 L53EF: 5A # 1: .ascii "io"; ASSERT((.-1b)==2); 1: .ascii "ctl 1c"; ASSERT((.-1b)==6); .word cfg_exal_ccir_cmd_pfx; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L53F0: 69 6F L53F2: 63 74 6C 20 31 64 L53F8: 97 C9 L53FA: 00 00 L53FC: 00 00 L53FE: 07 L53FF: 5A # 1: .ascii "io"; ASSERT((.-1b)==2); 1: .ascii "ctl 1d"; ASSERT((.-1b)==6); .word cfg_exal_dtmf_cmd_pfx; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # # menu_7: L5400: 46 6E L5402: 46 75 6E 63 20 20 L5408: 16 C7 L540A: 63 59 L540C: 00 00 L540E: 04 L540F: 5A # 1: .ascii "Fn"; ASSERT((.-1b)==2); 1: .ascii "Func "; ASSERT((.-1b)==6); .word cfg_function; .word tab_func; .word 0; .byte 4; .byte 'Z'; .align 4 # L5410: 72 50 L5412: 69 64 20 20 20 74 L5418: A2 C8 L541A: 00 00 L541C: 58 02 L541E: 02 L541F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id t"; ASSERT((.-1b)==6); .word repeater_cfg_TID; .word 0; .word 600; .byte 2; .byte 'Z'; .align 4 L5420: 72 50 L5422: 4F 50 45 6E 20 74 L5428: A0 C8 L542A: 00 00 L542C: 0F 00 L542E: 02 L542F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "OPEn t"; ASSERT((.-1b)==6); .word repeater_cfg_TOPEN; .word 0; .word 15; .byte 2; .byte 'Z'; .align 4 L5430: 72 50 L5432: 48 4F 47 20 20 74 L5438: A4 C8 L543A: 00 00 L543C: 2C 01 L543E: 02 L543F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "HOG t"; ASSERT((.-1b)==6); .word repeater_cfg_THOG; .word 0; .word 300; .byte 2; .byte 'Z'; .align 4 L5440: 72 50 L5442: 43 4C 4F 53 20 74 L5448: A6 C8 L544A: 00 00 L544C: 1E 00 L544E: 02 L544F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "CLOS t"; ASSERT((.-1b)==6); .word repeater_cfg_TCLS; .word 0; .word 30; .byte 2; .byte 'Z'; .align 4 L5450: 72 50 L5452: 64 45 41 64 20 74 L5458: A8 C8 L545A: 00 00 L545C: 3C 00 L545E: 02 L545F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "dEAd t"; ASSERT((.-1b)==6); .word repeater_cfg_TDEAD; .word 0; .word 60; .byte 2; .byte 'Z'; .align 4 L5460: 72 50 L5462: 62 4C 69 50 20 74 L5468: B1 C9 L546A: 00 00 L546C: 32 00 L546E: 09 L546F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "bLiP t"; ASSERT((.-1b)==6); .word repeater_cfg_TBLIP; .word 0; .word 50; .byte 9; .byte 'Z'; .align 4 L5470: 72 50 L5472: 53 71 49 6E 63 72 L5478: 1D C9 L547A: 00 00 L547C: 08 00 L547E: 01 L547F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "SqIncr"; ASSERT((.-1b)==6); .word repeater_cfg_sqincr; .word 0; .word 8; .byte 1; .byte 'Z'; .align 4 L5480: 72 50 L5482: 74 72 49 6E 63 72 L5488: 1E C9 L548A: 00 00 L548C: 08 00 L548E: 01 L548F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "trIncr"; ASSERT((.-1b)==6); .word repeater_cfg_txincr; .word 0; .word 8; .byte 1; .byte 'Z'; .align 4 L5490: 72 50 L5492: 53 50 45 45 64 20 L5498: AA C8 L549A: 00 00 L549C: 78 00 L549E: 01 L549F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "SPEEd "; ASSERT((.-1b)==6); .word cfg_cw_speed; .word 0; .word 120; .byte 1; .byte 'Z'; .align 4 L54A0: 72 50 L54A2: 50 49 74 43 48 20 L54A8: AB C8 L54AA: 00 00 L54AC: 8C 00 L54AE: 09 L54AF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "PItCH "; ASSERT((.-1b)==6); .word cfg_cw_pitch; .word 0; .word 140; .byte 9; .byte 'Z'; .align 4 L54B0: 72 50 L54B2: 41 46 20 53 72 63 L54B8: CE C8 L54BA: 52 59 L54BC: 8C 00 L54BE: 04 L54BF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "AF Src"; ASSERT((.-1b)==6); .word repeater_cfg_afsrc; .word tab_rep_mic; .word 140; .byte 4; .byte 'Z'; .align 4 L54C0: 72 50 L54C2: 41 43 43 45 53 53 L54C8: CF C8 L54CA: 10 59 L54CC: 00 00 L54CE: 04 L54CF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "ACCESS"; ASSERT((.-1b)==6); .word repeater_cfg_access_method; .word tab_rep_access; .word 0; .byte 4; .byte 'Z'; .align 4 L54D0: 72 50 L54D2: 74 6F 6E 45 20 74 L54D8: 1B C9 L54DA: 00 00 L54DC: 05 00 L54DE: 02 L54DF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "tonE t"; ASSERT((.-1b)==6); .word repeater_cfg_TBEEPMAX; .word 0; .word 5; .byte 2; .byte 'Z'; .align 4 L54E0: 72 50 L54E2: 69 64 20 47 31 20 L54E8: AC C8 L54EA: 00 00 L54EC: 00 00 L54EE: 07 L54EF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id G1 "; ASSERT((.-1b)==6); .word repeater_cfg_id_greet1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L54F0: 72 50 L54F2: 69 64 20 47 32 20 L54F8: B4 C8 L54FA: 00 00 L54FC: 00 00 L54FE: 07 L54FF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id G2 "; ASSERT((.-1b)==6); .word repeater_cfg_id_greet2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5500: 72 50 L5502: 69 64 20 47 33 20 L5508: BC C8 L550A: 00 00 L550C: 00 00 L550E: 07 L550F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id G3 "; ASSERT((.-1b)==6); .word repeater_cfg_id_greet3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5510: 72 50 L5512: 69 64 20 74 31 20 L5518: DB C8 L551A: 00 00 L551C: 00 00 L551E: 07 L551F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id t1 "; ASSERT((.-1b)==6); .word repeater_cfg_id_during1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5520: 72 50 L5522: 69 64 20 74 32 20 L5528: E3 C8 L552A: 00 00 L552C: 00 00 L552E: 07 L552F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id t2 "; ASSERT((.-1b)==6); .word repeater_cfg_id_during2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5530: 72 50 L5532: 69 64 20 74 33 20 L5538: EB C8 L553A: 00 00 L553C: 00 00 L553E: 07 L553F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id t3 "; ASSERT((.-1b)==6); .word repeater_cfg_id_during3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5540: 72 50 L5542: 69 64 20 62 31 20 L5548: F3 C8 L554A: 00 00 L554C: 00 00 L554E: 07 L554F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id b1 "; ASSERT((.-1b)==6); .word repeater_cfg_id_bye1; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5550: 72 50 L5552: 69 64 20 62 32 20 L5558: FB C8 L555A: 00 00 L555C: 00 00 L555E: 07 L555F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id b2 "; ASSERT((.-1b)==6); .word repeater_cfg_id_bye2; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5560: 72 50 L5562: 69 64 20 62 33 20 L5568: 03 C9 L556A: 00 00 L556C: 00 00 L556E: 07 L556F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id b3 "; ASSERT((.-1b)==6); .word repeater_cfg_id_bye3; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # L5570: 72 50 L5572: 69 64 20 48 6F 74 L5578: 3D C9 L557A: 00 00 L557C: 00 00 L557E: 07 L557F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id Hot"; ASSERT((.-1b)==6); .word repeater_cfg_msg_temp_alert; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5580: 72 50 L5582: 69 64 20 41 6E 74 L5588: 45 C9 L558A: 00 00 L558C: 00 00 L558E: 07 L558F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id Ant"; ASSERT((.-1b)==6); .word repeater_cfg_msg_ant_bad; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5590: 72 50 L5592: 69 64 20 48 4F 47 L5598: 84 C9 L559A: 00 00 L559C: 00 00 L559E: 07 L559F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "id HOG"; ASSERT((.-1b)==6); .word repeater_cfg_msg_hog; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # L55A0: 72 50 L55A2: 62 4C 49 50 20 20 L55A8: C4 C8 L55AA: 00 00 L55AC: 00 00 L55AE: 07 L55AF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "bLIP "; ASSERT((.-1b)==6); .word repeater_cfg_blip; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L55B0: 72 50 L55B2: 62 4C 49 50 20 4C L55B8: 33 C9 L55BA: 00 00 L55BC: 00 00 L55BE: 07 L55BF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "bLIP L"; ASSERT((.-1b)==6); .word repeater_cfg_blip_link; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L55C0: 72 50 L55C2: 50 49 74 43 48 62 L55C8: 3B C9 L55CA: 00 00 L55CC: 8C 00 L55CE: 09 L55CF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "PItCHb"; ASSERT((.-1b)==6); .word cfg_cw_pitch_blip; .word 0; .word 140; .byte 9; .byte 'Z'; .align 4 L55D0: 72 50 L55D2: 50 49 74 43 48 4C L55D8: 3C C9 L55DA: 00 00 L55DC: 8C 00 L55DE: 09 L55DF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "PItCHL"; ASSERT((.-1b)==6); .word cfg_cw_pitch_blip_link; .word 0; .word 140; .byte 9; .byte 'Z'; .align 4 L55E0: 72 50 L55E2: 50 41 20 48 4F 74 L55E8: CC C8 L55EA: 00 00 L55EC: 00 00 L55EE: 01 L55EF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "PA HOt"; ASSERT((.-1b)==6); .word cfg_overtemp_limit; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L55F0: 72 50 L55F2: 41 6E 74 62 41 64 L55F8: CD C8 L55FA: 00 00 L55FC: 00 00 L55FE: 01 L55FF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "AntbAd"; ASSERT((.-1b)==6); .word cfg_rpm_limit; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L5600: 72 50 L5602: 72 45 4D 4F 74 45 L5608: D0 C8 L560A: 00 00 L560C: 00 00 L560E: 02 L560F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "rEMOtE"; ASSERT((.-1b)==6); .word cfg_remote_id; .word 0; .word 0; .byte 2; .byte 'Z'; .align 4 L5610: 72 50 L5612: 50 41 53 53 20 43 L5618: 13 C9 L561A: 00 00 L561C: 00 00 L561E: 07 L561F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "PASS C"; ASSERT((.-1b)==6); .word cfg_remote_passwd; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # L5620: 72 50 L5622: 63 63 69 72 50 46 L5628: 6F C9 L562A: 00 00 L562C: 00 00 L562E: 07 L562F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "ccirPF"; ASSERT((.-1b)==6); .word repeater_cfg_ccir_cmd_pfx; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 # L5630: 72 50 L5632: 53 31 72 53 53 69 L5638: 5A C9 L563A: 00 00 L563C: 00 00 L563E: 01 L563F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "S1rSSi"; ASSERT((.-1b)==6); .word cfg_rssi_S1; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L5640: 72 50 L5642: 53 39 72 53 53 69 L5648: 5B C9 L564A: 00 00 L564C: 00 00 L564E: 01 L564F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "S9rSSi"; ASSERT((.-1b)==6); .word cfg_rssi_S9; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # L5650: 72 50 L5652: 43 74 43 50 6F 6C L5658: 5C C9 L565A: 8D 59 L565C: 00 00 L565E: 04 L565F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "CtCPol"; ASSERT((.-1b)==6); .word cfg_ctcss_input_polarity; .word tab_posneg; .word 0; .byte 4; .byte 'Z'; .align 4 L5660: 72 50 L5662: 43 74 43 4F 75 74 L5668: 5D C9 L566A: 31 59 L566C: 00 00 L566E: 04 L566F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "CtCOut"; ASSERT((.-1b)==6); .word cfg_ctcss_output_when; .word tab_ctcss_out; .word 0; .byte 4; .byte 'Z'; .align 4 # L5670: 72 50 L5672: 53 55 53 50 20 63 L5678: A0 C9 L567A: 00 00 L567C: 00 00 L567E: 07 L567F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "SUSP c"; ASSERT((.-1b)==6); .word cfg_repeater_suspend_ccir_cmd; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5680: 72 50 L5682: 53 55 53 50 20 64 L5688: A8 C9 L568A: 00 00 L568C: 00 00 L568E: 07 L568F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "SUSP d"; ASSERT((.-1b)==6); .word cfg_repeater_suspend_dtmf_cmd; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5690: 72 50 L5692: 53 55 53 50 6E 64 L5698: 9F C9 L569A: 7C 59 L569C: 00 00 L569E: 04 L569F: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "SUSPnd"; ASSERT((.-1b)==6); .word cfg_repeater_suspended; .word tab_onoff; .word 0; .byte 4; .byte 'Z'; .align 4 # L56A0: 72 50 L56A2: 48 69 64 45 20 39 L56A8: B0 C9 L56AA: 7D 5A L56AC: 00 00 L56AE: 04 L56AF: 5A # 1: .ascii "rP"; ASSERT((.-1b)==2); 1: .ascii "HidE 9"; ASSERT((.-1b)==6); .word cfg_repeater_cmd_9_hidden; .word tab_pass_hide; .word 0; .byte 4; .byte 'Z'; .align 4 # L56B0: 74 72 L56B2: 74 72 20 4C 6F 20 L56B8: 42 C7 L56BA: 00 00 L56BC: 00 00 L56BE: 03 L56BF: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tr Lo "; ASSERT((.-1b)==6); .word cfg_tx_band_start; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L56C0: 74 72 L56C2: 74 72 20 48 69 20 L56C8: 45 C7 L56CA: 00 00 L56CC: 00 00 L56CE: 03 L56CF: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tr Hi "; ASSERT((.-1b)==6); .word cfg_tx_band_end; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L56D0: 74 72 L56D2: 74 53 50 6F 74 30 L56D8: 3F C7 L56DA: 00 00 L56DC: 00 00 L56DE: 03 L56DF: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tSPot0"; ASSERT((.-1b)==6); .word cfg_tx_oob_0; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L56E0: 74 72 L56E2: 74 53 50 6F 74 31 L56E8: 26 C9 L56EA: 00 00 L56EC: 00 00 L56EE: 03 L56EF: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tSPot1"; ASSERT((.-1b)==6); .word cfg_tx_oob_1; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L56F0: 74 72 L56F2: 74 53 50 6F 74 32 L56F8: 29 C9 L56FA: 00 00 L56FC: 00 00 L56FE: 03 L56FF: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tSPot2"; ASSERT((.-1b)==6); .word cfg_tx_oob_2; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5700: 74 72 L5702: 74 53 50 6F 74 33 L5708: 2C C9 L570A: 00 00 L570C: 00 00 L570E: 03 L570F: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tSPot3"; ASSERT((.-1b)==6); .word cfg_tx_oob_3; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5710: 74 72 L5712: 74 53 50 6F 74 34 L5718: 2F C9 L571A: 00 00 L571C: 00 00 L571E: 03 L571F: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "tSPot4"; ASSERT((.-1b)==6); .word cfg_tx_oob_4; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5720: 74 72 L5722: 74 72 41 50 72 53 L5728: 78 C9 L572A: 00 00 L572C: 00 00 L572E: 03 L572F: 5A # 1: .ascii "tr"; ASSERT((.-1b)==2); 1: .ascii "trAPrS"; ASSERT((.-1b)==6); .word cfg_aprs_tx_freq; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 # # menu_8: L5730: 50 48 L5732: 53 79 6E 43 72 64 L5738: 32 C7 L573A: F9 59 L573C: 00 00 L573E: 04 L573F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "SynCrd"; ASSERT((.-1b)==6); .word cfg_synth_card; .word tab_synth_card; .word 0; .byte 4; .byte 'Z'; .align 4 L5740: 50 48 L5742: 33 64 69 47 69 74 L5748: 17 C7 L574A: 00 00 L574C: 00 00 L574E: 07 L574F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "3diGit"; ASSERT((.-1b)==6); .word cfg_implied; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5750: 50 48 L5752: 49 46 46 72 45 71 L5758: 33 C7 L575A: 00 00 L575C: 00 00 L575E: 03 L575F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "IFFrEq"; ASSERT((.-1b)==6); .word cfg_if_freq; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5760: 50 48 L5762: 4C 4F 20 49 6E 4A L5768: 32 C9 L576A: 6C 5A L576C: 00 00 L576E: 04 L576F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "LO InJ"; ASSERT((.-1b)==6); .word cfg_inj_below; .word tab_above_below; .word 0; .byte 4; .byte 'Z'; .align 4 L5770: 50 48 L5772: 72 20 43 45 6E 74 L5778: 36 C7 L577A: 00 00 L577C: 00 00 L577E: 03 L577F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "r CEnt"; ASSERT((.-1b)==6); .word cfg_rx_vco_center; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5780: 50 48 L5782: 74 20 43 45 6E 74 L5788: 39 C7 L578A: 00 00 L578C: 00 00 L578E: 03 L578F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "t CEnt"; ASSERT((.-1b)==6); .word cfg_tx_vco_center; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L5790: 50 48 L5792: 4C 50 46 49 4C 74 L5798: 3D C7 L579A: 00 00 L579C: 10 0E L579E: 02 L579F: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "LPFILt"; ASSERT((.-1b)==6); .word cfg_lpf_hz; .word 0; .word 3600; .byte 2; .byte 'Z'; .align 4 # tune_tone_position: L57A0: 50 48 L57A2: 74 20 74 75 6E 45 L57A8: 1F C9 L57AA: 00 00 L57AC: 00 00 L57AE: 02 L57AF: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "t tunE"; ASSERT((.-1b)==6); .word cfg_txtune_hz; .word 0; .word 0; .byte 2; .byte 'Z'; .align 4 # L57B0: 50 48 L57B2: 74 72 20 6F 46 46 L57B8: 55 C9 L57BA: 00 00 L57BC: 00 00 L57BE: 03 L57BF: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "tr oFF"; ASSERT((.-1b)==6); .word cfg_tx_mix_freq; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L57C0: 50 48 L57C2: 74 20 6D 75 6C 74 L57C8: 59 C9 L57CA: 00 00 L57CC: 00 00 L57CE: 01 L57CF: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "t mult"; ASSERT((.-1b)==6); .word cfg_tx_vco_multiplier; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L57D0: 50 48 L57D2: 72 20 6D 75 6C 74 L57D8: 58 C9 L57DA: 00 00 L57DC: 00 00 L57DE: 01 L57DF: 5A # 1: .ascii "PH"; ASSERT((.-1b)==2); 1: .ascii "r mult"; ASSERT((.-1b)==6); .word cfg_rx_vco_multiplier; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # L57E0: 64 46 L57E2: 41 4C 4C 72 53 74 L57E8: 00 5C L57EA: 00 00 L57EC: 00 00 L57EE: 06 L57EF: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "ALLrSt"; ASSERT((.-1b)==6); .word disaster; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 L57F0: 64 46 L57F2: 43 48 20 72 53 74 L57F8: 20 5C L57FA: 00 00 L57FC: 00 00 L57FE: 06 L57FF: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "CH rSt"; ASSERT((.-1b)==6); .word wipe_memories; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 L5800: 64 46 L5802: 53 41 6E 45 20 20 L5808: F9 5B L580A: 00 00 L580C: 00 00 L580E: 06 L580F: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "SAnE "; ASSERT((.-1b)==6); .word sane_defaults; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 L5810: 64 46 L5812: 72 46 63 72 53 74 L5818: 36 5C L581A: 00 00 L581C: 00 00 L581E: 06 L581F: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "rFcrSt"; ASSERT((.-1b)==6); .word wipe_rfctab; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 L5820: 64 46 L5822: 72 46 63 46 49 4C L5828: 54 5C L582A: 00 00 L582C: 00 00 L582E: 06 L582F: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "rFcFIL"; ASSERT((.-1b)==6); .word rfc_fill_blanks; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 L5830: 64 46 L5832: 72 45 62 6F 6F 74 L5838: 4C 5C L583A: 00 00 L583C: 00 00 L583E: 06 L583F: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "rEboot"; ASSERT((.-1b)==6); .word do_reboot; .word 0; .word 0; .byte 6; .byte 'Z'; .align 4 # L5840: 64 46 L5842: 45 6E 74 4C 65 6E L5848: 8D C9 L584A: 00 00 L584C: 00 00 L584E: 01 L584F: 5A # 1: .ascii "dF"; ASSERT((.-1b)==2); 1: .ascii "EntLen"; ASSERT((.-1b)==6); .word cfg_enter_time; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # # menu_9: L5850: 53 74 L5852: 53 6F 46 74 20 20 L5858: 75 00 L585A: 00 00 L585C: 00 00 L585E: 07 L585F: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "SoFt "; ASSERT((.-1b)==6); .word version; .word 0; .word 0; .byte 7; .byte 'Z'; .align 4 L5860: 53 74 L5862: 41 64 72 53 53 49 L5868: 00 D8 L586A: 00 00 L586C: 00 00 L586E: 01 L586F: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "AdrSSI"; ASSERT((.-1b)==6); .word ad_rssi; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L5870: 53 74 L5872: 41 64 20 53 71 4C L5878: 01 D8 L587A: 00 00 L587C: 00 00 L587E: 01 L587F: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad SqL"; ASSERT((.-1b)==6); .word ad_sql; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L5880: 53 74 L5882: 41 64 62 41 74 74 L5888: 02 D8 L588A: 00 00 L588C: FF 00 L588E: 01 L588F: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "AdbAtt"; ASSERT((.-1b)==6); .word ad_batt; .word 0; .word 255; .byte 1; .byte 'Z'; .align 4 ! HA! L5890: 53 74 L5892: 41 64 20 74 50 63 L5898: 03 D8 L589A: 00 00 L589C: 00 00 L589E: 01 L589F: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad tPc"; ASSERT((.-1b)==6); .word ad_tpc; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L58A0: 53 74 L58A2: 41 64 20 46 6F 72 L58A8: 04 D8 L58AA: 00 00 L58AC: 00 00 L58AE: 01 L58AF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad For"; ASSERT((.-1b)==6); .word ad_fpm; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L58B0: 53 74 L58B2: 41 64 20 72 45 46 L58B8: 05 D8 L58BA: 00 00 L58BC: 00 00 L58BE: 01 L58BF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad rEF"; ASSERT((.-1b)==6); .word ad_rpm; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L58C0: 53 74 L58C2: 41 64 20 74 50 34 L58C8: 06 D8 L58CA: 00 00 L58CC: 00 00 L58CE: 01 L58CF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad tP4"; ASSERT((.-1b)==6); .word ad_tp4; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 L58D0: 53 74 L58D2: 41 64 20 69 6E 37 L58D8: 07 D8 L58DA: 00 00 L58DC: 00 00 L58DE: 01 L58DF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "Ad in7"; ASSERT((.-1b)==6); .word ad_in7; .word 0; .word 0; .byte 1; .byte 'Z'; .align 4 # L58E0: 53 74 L58E2: 55 53 45 63 6E 74 L58E8: 4D C9 L58EA: 00 00 L58EC: 00 00 L58EE: 03 L58EF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "USEcnt"; ASSERT((.-1b)==6); .word repeater_cfg_open_counter; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 L58F0: 53 74 L58F2: 55 53 45 68 72 53 L58F8: 50 C9 L58FA: 00 00 L58FC: 00 00 L58FE: 03 L58FF: 5A # 1: .ascii "St"; ASSERT((.-1b)==2); 1: .ascii "USEhrS"; ASSERT((.-1b)==6); .word transmitter_hours; .word 0; .word 0; .byte 3; .byte 'Z'; .align 4 # L5900: 72 46 L5902: 72 46 63 20 20 20 L5908: 1D 48 L590A: 04 48 L590C: 00 00 L590E: 05 L590F: 5A # 1: .ascii "rF"; ASSERT((.-1b)==2); 1: .ascii "rFc "; ASSERT((.-1b)==6); .word menu_rfc_change; .word draw_rfc_dpy; .word 0; .byte 5; .byte 'Z'; .align 4 # end_menu: # # ASSERT(end_menu + 255 * size_menurec > start_menu) ! safety for overflow calc # ASSERT(end_menu + 255 * size_menurec < 0x10000) # # num_menu = (end_menu - start_menu) / size_menurec # # 1: tab_rep_access: .byte (1f - . - 1) / 8 L5910: 04 L5911: 74 6F 6E 45 53 # 2: .ascii "tonES"; .fill 8 - (. - 2b), 0xFF L5916: FF [ 03 ] L5919: 43 41 72 72 # 2: .ascii "CArr"; .fill 8 - (. - 2b), 0xFF L591D: FF [ 04 ] L5921: 6E 6F 6E 45 # 2: .ascii "nonE"; .fill 8 - (. - 2b), 0xFF L5925: FF [ 04 ] L5929: 43 74 43 53 53 # 2: .ascii "CtCSS"; .fill 8 - (. - 2b), 0xFF L592E: FF [ 03 ] # 1: tab_ctcss_out: .byte (1f - . - 1) / 8 L5931: 04 L5932: 6F 46 46 # 2: .ascii "oFF"; .fill 8 - (. - 2b), 0xFF L5935: FF [ 05 ] L593A: 74 72 41 6E 53 # 2: .ascii "trAnS"; .fill 8 - (. - 2b), 0xFF L593F: FF [ 03 ] L5942: 53 49 47 6E 41 4C # 2: .ascii "SIGnAL"; .fill 8 - (. - 2b), 0xFF L5948: FF [ 02 ] L594A: 43 74 43 53 53 69 # 2: .ascii "CtCSSi"; .fill 8 - (. - 2b), 0xFF L5950: FF [ 02 ] # 1: tab_rep_mic: .byte (1f - . - 1) / 8 L5952: 02 L5953: 4D 49 43 6E 6F 74 # 2: .ascii "MICnot"; .fill 8 - (. - 2b), 0xFF L5959: FF [ 02 ] L595B: 4D 49 43 # 2: .ascii "MIC"; .fill 8 - (. - 2b), 0xFF L595E: FF [ 05 ] # 1: tab_func: .byte (1f - . - 1) / 8 L5963: 03 L5964: 53 74 64 # 2: .ascii "Std"; .fill 8 - (. - 2b), 0xFF L5967: FF [ 05 ] L596C: 72 50 74 72 # 2: .ascii "rPtr"; .fill 8 - (. - 2b), 0xFF L5970: FF [ 04 ] L5974: 53 4C 41 76 45 # 2: .ascii "SLAvE"; .fill 8 - (. - 2b), 0xFF L5979: FF [ 03 ] # 1: tab_onoff: .byte (1f - . - 1) / 8 L597C: 02 L597D: 6F 46 46 # 2: .ascii "oFF"; .fill 8 - (. - 2b), 0xFF L5980: FF [ 05 ] L5985: 6F 6E # 2: .ascii "on"; .fill 8 - (. - 2b), 0xFF L5987: FF [ 06 ] # 1: tab_posneg: .byte (1f - . - 1) / 8 L598D: 02 L598E: 50 4F 53 # 2: .ascii "POS"; .fill 8 - (. - 2b), 0xFF L5991: FF [ 05 ] L5996: 6E 45 47 # 2: .ascii "nEG"; .fill 8 - (. - 2b), 0xFF L5999: FF [ 05 ] # 1: tab_off_on_flip: .byte (1f - . - 1) / 8 L599E: 03 L599F: 6F 46 46 # 2: .ascii "oFF"; .fill 8 - (. - 2b), 0xFF L59A2: FF [ 05 ] L59A7: 6F 6E # 2: .ascii "on"; .fill 8 - (. - 2b), 0xFF L59A9: FF [ 06 ] L59AF: 46 4C 49 50 # 2: .ascii "FLIP"; .fill 8 - (. - 2b), 0xFF L59B3: FF [ 04 ] # 1: tab_sqsrc: .byte (1f - . - 1) / 8 L59B7: 03 L59B8: 53 71 4C # 2: .ascii "SqL"; .fill 8 - (. - 2b), 0xFF L59BB: FF [ 05 ] L59C0: 53 71 4C 6E 6F 74 # 2: .ascii "SqLnot"; .fill 8 - (. - 2b), 0xFF L59C6: FF [ 02 ] L59C8: 72 53 53 49 # 2: .ascii "rSSI"; .fill 8 - (. - 2b), 0xFF L59CC: FF [ 04 ] # 1: tab_chstep: .byte (1f - . - 1) / 8 L59D0: 05 L59D1: 32 35 # 2: .ascii "25"; .fill 8 - (. - 2b), 0xFF L59D3: FF [ 06 ] L59D9: 32 30 # 2: .ascii "20"; .fill 8 - (. - 2b), 0xFF L59DB: FF [ 06 ] L59E1: 31 35 # 2: .ascii "15"; .fill 8 - (. - 2b), 0xFF L59E3: FF [ 06 ] L59E9: 31 32 5F 35 # 2: .ascii "12_5"; .fill 8 - (. - 2b), 0xFF L59ED: FF [ 04 ] L59F1: 31 30 # 2: .ascii "10"; .fill 8 - (. - 2b), 0xFF L59F3: FF [ 06 ] # # # # 1: tab_synth_card: .byte (1f - . - 1) / 8 L59F9: 03 L59FA: 53 38 64 # 2: .ascii "S8d"; .fill 8 - (. - 2b), 0xFF L59FD: FF [ 05 ] L5A02: 53 38 63 # 2: .ascii "S8c"; .fill 8 - (. - 2b), 0xFF L5A05: FF [ 05 ] L5A0A: 53 38 62 # 2: .ascii "S8b"; .fill 8 - (. - 2b), 0xFF L5A0D: FF [ 05 ] # 1: tab_idlefn: .byte (1f - . - 1) / 8 L5A12: 03 L5A13: 6F 46 46 # 2: .ascii "oFF"; .fill 8 - (. - 2b), 0xFF L5A16: FF [ 05 ] L5A1B: 53 43 41 6E # 2: .ascii "SCAn"; .fill 8 - (. - 2b), 0xFF L5A1F: FF [ 04 ] L5A23: 43 48 41 6E # 2: .ascii "CHAn"; .fill 8 - (. - 2b), 0xFF L5A27: FF [ 04 ] # 1: tab_blip: .byte (1f - . - 1) / 8 L5A2B: 08 L5A2C: 30 # 2: .ascii "0"; .fill 8 - (. - 2b), 0xFF L5A2D: FF [ 07 ] L5A34: 35 30 30 # 2: .ascii "500"; .fill 8 - (. - 2b), 0xFF L5A37: FF [ 05 ] L5A3C: 31 30 30 30 # 2: .ascii "1000"; .fill 8 - (. - 2b), 0xFF L5A40: FF [ 04 ] L5A44: 31 35 30 30 # 2: .ascii "1500"; .fill 8 - (. - 2b), 0xFF L5A48: FF [ 04 ] L5A4C: 32 30 30 30 # 2: .ascii "2000"; .fill 8 - (. - 2b), 0xFF L5A50: FF [ 04 ] L5A54: 32 35 30 30 # 2: .ascii "2500"; .fill 8 - (. - 2b), 0xFF L5A58: FF [ 04 ] L5A5C: 33 30 30 30 # 2: .ascii "3000"; .fill 8 - (. - 2b), 0xFF L5A60: FF [ 04 ] L5A64: 33 35 30 30 # 2: .ascii "3500"; .fill 8 - (. - 2b), 0xFF L5A68: FF [ 04 ] # 1: tab_above_below: .byte (1f - . - 1) / 8 L5A6C: 02 L5A6D: 41 62 6F 55 45 # 2: .ascii "AboUE"; .fill 8 - (. - 2b), 0xFF L5A72: FF [ 03 ] L5A75: 62 45 4C 6F 75 # 2: .ascii "bELou"; .fill 8 - (. - 2b), 0xFF L5A7A: FF [ 03 ] # 1: tab_pass_hide: .byte (1f - . - 1) / 8 L5A7D: 02 L5A7E: 50 41 53 53 # 2: .ascii "PASS"; .fill 8 - (. - 2b), 0xFF L5A82: FF [ 04 ] L5A86: 48 69 64 45 # 2: .ascii "HidE"; .fill 8 - (. - 2b), 0xFF L5A8A: FF [ 04 ] # 1: # # menu_quickspots: # .word menu_0 L5A8E: 80 4C # .word menu_1 L5A90: 40 4D # .word menu_2 L5A92: B0 4D # .word menu_3 L5A94: 20 4E # .word menu_4 L5A96: 60 4E # .word menu_5 L5A98: E0 50 # .word menu_6 L5A9A: D0 52 # .word menu_7 L5A9C: 00 54 # .word menu_8 L5A9E: 30 57 # .word menu_9 L5AA0: 50 58 # # !== SETUP DEFAULTS wrt BAND =========================================== # # # # ! IMPLIED # ! 1st I/F # ! VCO A/B rx # ! VCO A/B tx # ! TX LIMITS # ! BAND1: start end duplex step # ! BAND2: start end duplex step # ! OTHER: duplex step # # defaults_70cm: L5AA2: 04 L5AA3: 03 L5AA4: 03 L5AA5: FF L5AA6: FF # .byte 4,3,3, 0xFF, 0xFF, 0xFF L5AA7: FF L5AA8: F0 L5AA9: 51 L5AAA: 01 # .byte LO( 86512), LO(( 86512) >> 8), LO(( 86512) >> 16); L5AAB: D0 L5AAC: DD L5AAD: 06 # .byte LO(450000), LO((450000) >> 8), LO((450000) >> 16); L5AAE: D0 L5AAF: DD L5AB0: 06 # .byte LO(450000), LO((450000) >> 8), LO((450000) >> 16); L5AB1: 80 L5AB2: 97 L5AB3: 06 L5AB4: F0 L5AB5: AE L5AB6: 06 # .byte LO(432000), LO((432000) >> 8), LO((432000) >> 16); .byte LO(438000), LO((438000) >> 8), LO((438000) >> 16); L5AB7: F8 L5AB8: 9C L5AB9: 06 L5ABA: C0 L5ABB: 9D L5ABC: 06 L5ABD: 00 L5ABE: 00 L5ABF: 00 # .byte LO(433400), LO((433400) >> 8), LO((433400) >> 16); .byte LO(433600), LO((433600) >> 8), LO((433600) >> 16); .byte LO( 0), LO(( 0) >> 8), LO(( 0) >> 16); .byte 0 L5AC0: 00 L5AC1: A8 L5AC2: A1 L5AC3: 06 L5AC4: 38 L5AC5: A3 L5AC6: 06 L5AC7: C0 L5AC8: F9 L5AC9: FF # .byte LO(434600), LO((434600) >> 8), LO((434600) >> 16); .byte LO(435000), LO((435000) >> 8), LO((435000) >> 16); .byte LO(-1600), LO((-1600) >> 8), LO((-1600) >> 16); .byte 0 L5ACA: 00 L5ACB: C0 L5ACC: F9 L5ACD: FF # .byte LO(-1600), LO((-1600) >> 8), LO((-1600) >> 16); .byte 0 L5ACE: 00 # # defaults_2m: L5ACF: 01 L5AD0: 04 L5AD1: 05 L5AD2: FF L5AD3: FF # .byte 1,4,5, 0xFF, 0xFF, 0xFF L5AD4: FF L5AD5: 98 L5AD6: 53 L5AD7: 00 # .byte LO( 21400), LO(( 21400) >> 8), LO(( 21400) >> 16); L5AD8: F0 L5AD9: 49 L5ADA: 02 # .byte LO(150000), LO((150000) >> 8), LO((150000) >> 16); L5ADB: F0 L5ADC: 49 L5ADD: 02 # .byte LO(150000), LO((150000) >> 8), LO((150000) >> 16); L5ADE: 80 L5ADF: 32 L5AE0: 02 L5AE1: 50 L5AE2: 3A L5AE3: 02 # .byte LO(144000), LO((144000) >> 8), LO((144000) >> 16); .byte LO(146000), LO((146000) >> 8), LO((146000) >> 16); L5AE4: 30 L5AE5: 37 L5AE6: 02 L5AE7: C0 L5AE8: 38 L5AE9: 02 L5AEA: 00 L5AEB: 00 L5AEC: 00 # .byte LO(145200), LO((145200) >> 8), LO((145200) >> 16); .byte LO(145600), LO((145600) >> 8), LO((145600) >> 16); .byte LO( 0), LO(( 0) >> 8), LO(( 0) >> 16); .byte 0 L5AED: 00 L5AEE: C0 L5AEF: 38 L5AF0: 02 L5AF1: 88 L5AF2: 39 L5AF3: 02 L5AF4: A8 L5AF5: FD L5AF6: FF # .byte LO(145600), LO((145600) >> 8), LO((145600) >> 16); .byte LO(145800), LO((145800) >> 8), LO((145800) >> 16); .byte LO(-600), LO((-600) >> 8), LO((-600) >> 16); .byte 0 L5AF7: 00 L5AF8: A8 L5AF9: FD L5AFA: FF # .byte LO(-600), LO((-600) >> 8), LO((-600) >> 16); .byte 0 L5AFB: 00 # # defaults_6m: L5AFC: 00 L5AFD: 05 L5AFE: 01 L5AFF: FF L5B00: FF # .byte 0,5,1, 0xFF, 0xFF, 0xFF L5B01: FF L5B02: C8 L5B03: AF L5B04: 00 # .byte LO( 45000), LO(( 45000) >> 8), LO(( 45000) >> 16); L5B05: 60 L5B06: EA L5B07: 00 # .byte LO( 60000), LO(( 60000) >> 8), LO(( 60000) >> 16); L5B08: 60 L5B09: EA L5B0A: 00 # .byte LO( 60000), LO(( 60000) >> 8), LO(( 60000) >> 16); L5B0B: 50 L5B0C: C3 L5B0D: 00 L5B0E: 20 L5B0F: CB L5B10: 00 # .byte LO( 50000), LO(( 50000) >> 8), LO(( 50000) >> 16); .byte LO( 52000), LO(( 52000) >> 8), LO(( 52000) >> 16); L5B11: 22 L5B12: C9 L5B13: 00 L5B14: 9A L5B15: C9 L5B16: 00 L5B17: 00 L5B18: 00 L5B19: 00 # .byte LO( 51490), LO(( 51490) >> 8), LO(( 51490) >> 16); .byte LO( 51610), LO(( 51610) >> 8), LO(( 51610) >> 16); .byte LO( 0), LO(( 0) >> 8), LO(( 0) >> 16); .byte 1 L5B1A: 01 L5B1B: 62 L5B1C: CA L5B1D: 00 L5B1E: 02 L5B1F: CB L5B20: 00 L5B21: A8 L5B22: FD L5B23: FF # .byte LO( 51810), LO(( 51810) >> 8), LO(( 51810) >> 16); .byte LO( 51970), LO(( 51970) >> 8), LO(( 51970) >> 16); .byte LO(-600), LO((-600) >> 8), LO((-600) >> 16); .byte 1 L5B24: 01 L5B25: A8 L5B26: FD L5B27: FF # .byte LO(-600), LO((-600) >> 8), LO((-600) >> 16); .byte 1 L5B28: 01 # # # # set_defaults_band: L5B29: 3A 32 C7 # ld a, [cfg_synth_card] L5B2C: F5 # push af # call reset_menurecords ! remember radio type during reset L5B2D: CD CF 5B L5B30: F1 # pop af L5B31: 32 32 C7 # ld [cfg_synth_card], a # cp 2 L5B34: FE 02 # ld hl, defaults_6m L5B36: 21 FC 5A # jp z, 1f L5B39: CA 47 5B # cp 1 L5B3C: FE 01 # ld hl, defaults_2m L5B3E: 21 CF 5A # jp z, 1f L5B41: CA 47 5B # ld hl, defaults_70cm L5B44: 21 A2 5A # 1: L5B47: 11 17 C7 L5B4A: ED A0 L5B4C: ED A0 L5B4E: ED A0 L5B50: ED A0 L5B52: ED A0 L5B54: ED A0 # ld de, cfg_implied; ldi; ldi; ldi; ldi; ldi; ldi L5B56: 11 33 C7 L5B59: ED A0 L5B5B: ED A0 L5B5D: ED A0 # ld de, cfg_if_freq; ldi; ldi; ldi L5B5F: 11 36 C7 L5B62: ED A0 L5B64: ED A0 L5B66: ED A0 # ld de, cfg_rx_vco_center; ldi; ldi; ldi L5B68: 11 39 C7 L5B6B: ED A0 L5B6D: ED A0 L5B6F: ED A0 # ld de, cfg_tx_vco_center; ldi; ldi; ldi # L5B71: 11 42 C7 L5B74: ED A0 L5B76: ED A0 L5B78: ED A0 L5B7A: ED A0 L5B7C: ED A0 L5B7E: ED A0 # ld de, cfg_tx_band_start; ldi; ldi; ldi; ldi; ldi; ldi ! and end # L5B80: 11 48 C7 L5B83: ED A0 L5B85: ED A0 L5B87: ED A0 L5B89: ED A0 L5B8B: ED A0 L5B8D: ED A0 L5B8F: ED A0 L5B91: ED A0 L5B93: ED A0 L5B95: ED A0 # ld de, cfg_band1_start; ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi; ! and end, duplex, step L5B97: 11 56 C7 L5B9A: ED A0 L5B9C: ED A0 L5B9E: ED A0 L5BA0: ED A0 L5BA2: ED A0 L5BA4: ED A0 L5BA6: ED A0 L5BA8: ED A0 L5BAA: ED A0 L5BAC: ED A0 # ld de, cfg_band2_start; ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi;ldi; ! and end, duplex, step # L5BAE: 11 A2 C7 L5BB1: ED A0 L5BB3: ED A0 L5BB5: ED A0 # ld de, cfg_other_duplex; ldi; ldi; ldi L5BB7: 11 A5 C7 L5BBA: ED A0 # ld de, cfg_other_step; ldi # # call save_nvdata L5BBC: CD AE 3B # jp powerdown_now L5BBF: C3 4F 20 # # # get_probable_chstep_de: L5BC2: 3A 32 C7 # ld a, [cfg_synth_card] # ld de, 20 L5BC5: 11 14 00 # cp 2 L5BC8: FE 02 L5BCA: C8 # ret z # ld de, 25 L5BCB: 11 19 00 # ret L5BCE: C9 # # # reset_menurecords: # ld ix, start_menu L5BCF: DD 21 80 4C # 1: # call reset_menurec L5BD3: CD 47 4C # ld de, size_menurec L5BD6: 11 10 00 L5BD9: DD 19 # add ix, de L5BDB: DD E5 # push ix L5BDD: D1 # pop de L5BDE: 7A # ld a, d # cp HI(end_menu) L5BDF: FE 59 # jp nz, 1b L5BE1: C2 D3 5B L5BE4: 7B # ld a, e # cp LO(end_menu) L5BE5: FE 10 # jp nz, 1b L5BE7: C2 D3 5B # # ret L5BEA: C9 # # check_for_666: # call a2i L5BEB: CD 57 3A L5BEE: 11 9A 02 L5BF1: A7 L5BF2: ED 52 # ld de, (666) % 65536; and a; sbc hl, de; sbc (666) / 65536 L5BF4: DE 00 L5BF6: B4 # or h L5BF7: B5 # or l # ret L5BF8: C9 # # !---------------------------------------------------------------------- # # sane_defaults: # call check_for_666 L5BF9: CD EB 5B L5BFC: C0 # ret nz # jp set_defaults_band L5BFD: C3 29 5B # # disaster: # call check_for_666 L5C00: CD EB 5B L5C03: C0 # ret nz # L5C04: 3A 32 C7 # ld a, [cfg_synth_card] L5C07: 47 # ld b, a # ld hl, nvstart L5C08: 21 00 C0 # 1: # ld a, 0 L5C0B: 3E 00 L5C0D: 77 # ld [hl], a L5C0E: 23 # inc hl L5C0F: 7C # ld a, h # cp HI(nvend) L5C10: FE D0 # jr nz, 1b L5C12: 20 F7 L5C14: 7D # ld a, l # cp LO(nvend) L5C15: FE 00 # jr nz, 1b L5C17: 20 F2 # L5C19: 78 # ld a, b L5C1A: 32 32 C7 # ld [cfg_synth_card], a # # jp set_defaults_band L5C1D: C3 29 5B # # wipe_memories: # call check_for_666 L5C20: CD EB 5B L5C23: C0 # ret nz # # ld hl, memories L5C24: 21 FE C0 # 1: # ld a, 0 L5C27: 3E 00 L5C29: 77 # ld [hl], a L5C2A: 23 # inc hl L5C2B: 7C # ld a, h # cp HI(end_memories) L5C2C: FE C7 # jr nz, 1b L5C2E: 20 F7 L5C30: 7D # ld a, l # cp LO(end_memories) L5C31: FE 16 # jr nz, 1b L5C33: 20 F2 # # ret L5C35: C9 # # wipe_rfctab: # call check_for_666 L5C36: CD EB 5B L5C39: C0 # ret nz # # ld hl, rfctab L5C3A: 21 9A C0 # 1: # ld a, 0 L5C3D: 3E 00 L5C3F: 77 # ld [hl], a L5C40: 23 # inc hl L5C41: 7C # ld a, h # cp HI(end_rfctab) L5C42: FE C0 # jr nz, 1b L5C44: 20 F7 L5C46: 7D # ld a, l # cp LO(end_rfctab) L5C47: FE FE # jr nz, 1b L5C49: 20 F2 # # ret L5C4B: C9 # # do_reboot: # call check_for_666 L5C4C: CD EB 5B L5C4F: C0 # ret nz # L5C50: F3 # di # jp . ! watchdog restart. L5C51: C3 51 5C # # !====================================================================== # ! # ! Fill holes (0 values) in rfctab. # ! It is assumed values never droop when going upwards table. # ! # ! "Bresenham simplified" # # rfc_fill_blanks: # # ld ix, rfctab L5C54: DD 21 9A C0 # # ! make sure index 99 has a barrier, 0 into 255 else # L5C58: DD 7E 63 # ld a, [ix+99] L5C5B: B7 # or a # jr nz, 1f L5C5C: 20 04 L5C5E: 3D # dec a L5C5F: DD 77 63 # ld [ix+99], a # 1: # ! find holes in 1...98 range, [0] not hole, [99] barrier # 1: L5C62: DD 7E 01 # ld a, [ix+1] L5C65: B7 # or a # call z, rfc_fill_one_hole L5C66: CC 77 5C L5C69: DD 23 # inc ix L5C6B: DD E5 # push ix L5C6D: E1 # pop hl # ld de, rfctab + 98 L5C6E: 11 FC C0 L5C71: A7 # and a L5C72: ED 52 # sbc hl, de ! below end ? # jr c, 1b L5C74: 38 EC # ret ! after no holes L5C76: C9 # # ! # ! entry: ix+1 first of hole # ! return: ix+1 one past hole # ! # rfc_fill_one_hole: L5C77: DD E5 # push ix ! x1 L5C79: FD E1 # pop iy # 1: L5C7B: FD 23 # inc iy L5C7D: FD 7E 00 # ld a, [iy+0] ! y2 ? L5C80: B7 # or a # jr z, 1b ! find the end of the hole, it is there always (barrier) L5C81: 28 F8 # L5C83: DD 5E 00 # ld e, [ix+0] ! y1 L5C86: 93 # sub e ! dy L5C87: 5F # ld e, a ! dy = e # L5C88: FD E5 # push iy ! x2 L5C8A: E1 # pop hl L5C8B: DD E5 # push ix L5C8D: C1 # pop bc ! x1 L5C8E: A7 # and a L5C8F: ED 42 # sbc hl, bc ! x2 - x1 L5C91: 4D # ld c, l ! dx = c # # ! # ! Fill blanks from ix+1 upto next nonblank # ! ix+0 has last y, ix+1 is blank, new y determined, # ! ix stepped and new y stored. # ! # ld hl, 0 ! sum = 0 L5C92: 21 00 00 # ld d, 0 L5C95: 16 00 # ld b, 0 ! dx and dy as words L5C97: 06 00 # jr 1f ! start loop L5C99: 18 06 # 3: L5C9B: 3C # inc a ! y++ # 2: L5C9C: DD 23 # inc ix ! x++ L5C9E: DD 77 00 # ld [ix+0], a # 1: L5CA1: DD 7E 01 # ld a, [ix+1] L5CA4: B7 # or a L5CA5: C0 # ret nz ! at endpoint # L5CA6: 79 # ld a, c L5CA7: BB # cp e ! dx - dy L5CA8: DD 7E 00 # ld a, [ix+0] ! y # jr c, 1f ! if (dx < dy) steep way L5CAB: 38 08 # # ! slow rise way # L5CAD: 19 # add hl, de ! sum += dy L5CAE: ED 42 # sbc hl, bc # jr nc, 3b ! if (sum >= dx) L5CB0: 30 E9 L5CB2: 09 # add hl, bc # jr 2b L5CB3: 18 E7 # # ! steep rise way # 1: L5CB5: 3C # inc a ! y++ L5CB6: 09 # add hl, bc ! sum += dx L5CB7: ED 52 # sbc hl, de # jr nc, 2b ! if (sum >= dy) L5CB9: 30 E1 L5CBB: 19 # add hl, de # jr 1b L5CBC: 18 F7 # # !====================================================================== # L5CBE: 54 68 65 45 6E 64 # .ascii "TheEnd" # .byte .cksum(0, .) L5CC4: 91 # # voice_sample: # # !====================================================================== # # 1: # .data # # .org 0xC000 ! start of RAM # # !====================================================================== # ! # ! Variables # ! # # !---------------------------------------------------------------------- # nvstart: !------------------------------------------ # # audio_dst : .rs 1 # volume : .rs 1 ! reversed order of these two 25.8.2000 # # squelch_forced : .rs 1 # scan_on : .rs 1 # scan_mask : .rs 2 # # mem_flags : .rs 1 # mem_idx : .rs 1 # # rx_freq : .rs 3 # tx_freq : .rs 3 # # duplex_state : .rs 1 # duplex_shift : .rs 3 # band : .rs 1 # band_step : .rs 1 # band_step_hz : .rs 2 # band_sctail : .rs 1 # band_sclisten : .rs 1 # # vip_freq : .rs 3 # # unused_mem_step : .rs 1 ! band_step brother # mem_ctcss_hz : .rs 1 ! cfg_ctcss_hz brother # # .rs 95 ! carve out future nv variables from here # # ASSERT(. == 0xC07C) ! keep below unchanged, just append stuff to cfg_xxx # # !----------- # VIP_COUNT = 10 # vip_list : .rs 3 * VIP_COUNT # # !----------- # ! RFC values fold over every 100 MHz, each 1 MHz has separate value # ! # rfctab: .rs 100 # end_rfctab: # # !----------- # ! 12 bytes per memory: # ! # ! @0 3 bytes rx-frequency # ! @3 3 bytes tx-frequency # ! @6 1 byte misc bits # ! @7 1 byte ctcss hz # ! @8 4 bytes reserved # ! # # mem_FLAGS = 6 ! offsets # mem_CTCSS = 7 # mem_BAND = 8 # mem_FOO1 = 9 # mem_FOO2 = 10 # mem_FOO3 = 11 # mem_SIZE = 12 # # MEM_VALID = 0x01 ! flag bits # MEM_HIDDEN = 0x02 # MEM_SCANNABLE = 0x04 # # # memories: .rs 130 * mem_SIZE # end_memories: # # !== SETUP BLOCK ======================================================= # # cfg_function : .rs 1 # # cfg_implied : .rs 8 ! : .rs 8 # # cfg_txpwr : .rs 1 ! Transmitter power level # cfg_alert_vol : .rs 1 ! Alert volume # cfg_key_blip_pitch : .rs 1 ! Keyclick pitch idx # cfg_light_seconds : .rs 1 ! seconds # cfg_ign_apo_hours : .rs 1 ! powerdown without manipulation nor IGN # cfg_tx_tot_minutes : .rs 1 ! powerdown if tx longer # # cfg_scan_rate : .rs 1 ! cSEC 0...2550 # # cfg_squelch_source : .rs 1 ! SQL, /SQL or RSSI # cfg_squelch_level : .rs 1 ! between +/- half hysteresis # cfg_squelch_BIG : .rs 1 ! REALLY STRONG SIGNAL # cfg_squelch_hyst : .rs 1 ! difference of open and close levels # cfg_squelch_head : .rs 1 ! opening "tail" # cfg_squelch_tail : .rs 1 ! closing tail # # cfg_def_squelch : .rs 1 # cfg_def_memory : .rs 1 # cfg_def_frequency : .rs 3 # cfg_def_volume : .rs 1 # # cfg_synth_card : .rs 1 ! TAB S8x enumeration # cfg_if_freq : .rs 3 ! 1st I/F # cfg_rx_vco_center : .rs 3 ! # cfg_tx_vco_center : .rs 3 ! # # cfg_ctcss_hz : .rs 1 ! 0..255 Hz # # cfg_lpf_hz : .rs 2 ! low-pass cutoff freq # # cfg_tx_oob_0 : .rs 3 ! Single spot allowed tx out-of-band # # cfg_tx_band_start : .rs 3 ! start/end pairs must be successive # cfg_tx_band_end : .rs 3 # # size_bandrec = (3 * 3 + 3 + 2) ! bands 1...6 # cfg_band1_start : .rs 3 # cfg_band1_end : .rs 3 # cfg_band1_duplex : .rs 3 ! 8 (includes sign) # cfg_band1_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band1_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band1_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # cfg_band2_start : .rs 3 # cfg_band2_end : .rs 3 # cfg_band2_duplex : .rs 3 # cfg_band2_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band2_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band2_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # cfg_band3_start : .rs 3 # cfg_band3_end : .rs 3 # cfg_band3_duplex : .rs 3 # cfg_band3_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band3_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band3_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # cfg_band4_start : .rs 3 # cfg_band4_end : .rs 3 # cfg_band4_duplex : .rs 3 # cfg_band4_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band4_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band4_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # cfg_band5_start : .rs 3 # cfg_band5_end : .rs 3 # cfg_band5_duplex : .rs 3 # cfg_band5_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band5_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band5_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # cfg_band6_start : .rs 3 # cfg_band6_end : .rs 3 # cfg_band6_duplex : .rs 3 # cfg_band6_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_band6_sctail : .rs 1 ! seconds of lingering after LOS # cfg_band6_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # num_bandrecs = 6 # cfg_other_start : .rs 3 ! unused, now "other" looks ... # cfg_other_end : .rs 3 ! ... like previous bandrecords # cfg_other_duplex : .rs 3 ! 8 (includes sign) # cfg_other_step : .rs 1 ! 1: STEP_xx: .byte (1f - . - 1) / 8 # cfg_other_sctail : .rs 1 ! seconds of lingering after LOS # cfg_other_sclisten : .rs 1 ! seconds of stay at one location # .rs 2 # # cfg_reject_0 : .rs 3 # cfg_reject_1 : .rs 3 # cfg_reject_2 : .rs 3 # cfg_reject_3 : .rs 3 # cfg_reject_4 : .rs 3 # cfg_reject_5 : .rs 3 # cfg_reject_6 : .rs 3 # cfg_reject_7 : .rs 3 # cfg_reject_8 : .rs 3 # cfg_reject_9 : .rs 3 # # unused_cfg_act_onhook : .rs 8 ! command strings # unused_cfg_act_offhook : .rs 8 # # cfg_shortcut_0 : .rs 8 # cfg_shortcut_1 : .rs 8 # cfg_shortcut_2 : .rs 8 # cfg_shortcut_3 : .rs 8 # cfg_shortcut_4 : .rs 8 # cfg_shortcut_5 : .rs 8 # cfg_shortcut_6 : .rs 8 # cfg_shortcut_7 : .rs 8 # cfg_shortcut_8 : .rs 8 # cfg_shortcut_9 : .rs 8 # # cfg_mycall_1 : .rs 8 # cfg_mycall_2 : .rs 8 # cfg_mycall_3 : .rs 8 # cfg_ccir_1 : .rs 8 # cfg_ccir_2 : .rs 8 # cfg_ccir_3 : .rs 8 # cfg_dtmf_1 : .rs 8 # cfg_dtmf_2 : .rs 8 # cfg_dtmf_3 : .rs 8 # # cfg_pepa_on : .rs 8 # cfg_pepa_off : .rs 8 # # cfg_ccir_minlen : .rs 1 ! cSEC, minimum accepted length of ccir series # cfg_dtmf_holdtime : .rs 1 ! SEC, idle before dtmf sequence complete # # cfg_reject_10 : .rs 3 # cfg_reject_11 : .rs 3 # cfg_reject_12 : .rs 3 # cfg_reject_13 : .rs 3 # cfg_reject_14 : .rs 3 # cfg_reject_15 : .rs 3 # cfg_reject_16 : .rs 3 # cfg_reject_17 : .rs 3 # cfg_reject_18 : .rs 3 # cfg_reject_19 : .rs 3 # # repeater_cfg_TOPEN : .rs 2 # repeater_cfg_TID : .rs 2 # repeater_cfg_THOG : .rs 2 # repeater_cfg_TCLS : .rs 2 # repeater_cfg_TDEAD : .rs 2 # # cfg_cw_speed : .rs 1 # cfg_cw_pitch : .rs 1 ! cSEC # # repeater_cfg_id_greet1 : .rs 8 # repeater_cfg_id_greet2 : .rs 8 # repeater_cfg_id_greet3 : .rs 8 # # repeater_cfg_blip : .rs 8 # # cfg_overtemp_limit : .rs 1 # cfg_rpm_limit : .rs 1 # # repeater_cfg_afsrc : .rs 1 ! 0: AF routed when /MIC=+5V 1: v.v. # repeater_cfg_access_method : .rs 1 ! tab # # cfg_remote_id : .rs 2 # cfg_remote_xxxxxxxxx : .rs 8 ! XXX available to use # # cfg_light_sql : .rs 1 ! 0=off, 1=on # # repeater_cfg_id_during1 : .rs 8 # repeater_cfg_id_during2 : .rs 8 # repeater_cfg_id_during3 : .rs 8 # # repeater_cfg_id_bye1 : .rs 8 # repeater_cfg_id_bye2 : .rs 8 # repeater_cfg_id_bye3 : .rs 8 # # cfg_remote_fooy : .rs 8 ! keep these ... # cfg_remote_passwd : .rs 8 ! ... together # # repeater_cfg_TBEEPMAX : .rs 2 # # repeater_cfg_sqincr : .rs 1 ! squelch tightening delta value # repeater_cfg_txincr : .rs 1 ! txpwr rised delta value # # cfg_txtune_hz : .rs 2 # # cfg_voice_id : .rs 1 ! onoff # cfg_idlefn_delay : .rs 1 ! minutes # cfg_idlefn : .rs 1 ! tab # # cfg_unreject_mins : .rs 1 ! # # cfg_scan_skip_fsk_channels : .rs 1 # # cfg_tx_oob_1 : .rs 3 ! Single spot allowed tx out-of-band # cfg_tx_oob_2 : .rs 3 ! Single spot allowed tx out-of-band # cfg_tx_oob_3 : .rs 3 ! Single spot allowed tx out-of-band # cfg_tx_oob_4 : .rs 3 ! Single spot allowed tx out-of-band # # cfg_inj_below : .rs 1 ! rx lo inj below if nz # # repeater_cfg_blip_link : .rs 8 ! blip if repeater sees PTT activity # cfg_cw_pitch_blip : .rs 1 ! cSEC # cfg_cw_pitch_blip_link : .rs 1 ! cSEC # # repeater_cfg_msg_temp_alert : .rs 8 # repeater_cfg_msg_ant_bad : .rs 8 # # repeater_cfg_open_counter : .rs 3 # transmitter_hours : .rs 3 # transmitter_hours_second_counter : .rs 2 # # cfg_tx_mix_freq : .rs 3 ! TX mixer LO # cfg_rx_vco_multiplier : .rs 1 ! RX and TX multipliers # cfg_tx_vco_multiplier : .rs 1 ! # # cfg_rssi_S1 : .rs 1 # cfg_rssi_S9 : .rs 1 # # cfg_ctcss_input_polarity : .rs 1 ! tab # cfg_ctcss_output_when : .rs 1 ! tab # # cfg_onhook_script : .rs 8 # cfg_offhook_script : .rs 8 # # cfg_selcall_time : .rs 1 # # repeater_cfg_ccir_cmd_pfx : .rs 8 # # cfg_aprs_tx : .rs 1 ! off/on # cfg_aprs_tx_freq : .rs 3 # cfg_aprs_tx_data : .rs 8 # # cfg_num_tmp_rejects : .rs 1 # # repeater_cfg_msg_hog : .rs 8 # # cfg_serv_blip_pitch : .rs 1 ! local välibongo # # cfg_enter_time : .rs 1 ! how many seconds must ENT be down # # cfg_exal_state : .rs 1 # cfg_exal_ccir_cmd_pfx : .rs 8 # cfg_exal_dtmf_cmd_pfx : .rs 8 # # cfg_repeater_suspended : .rs 1 # cfg_repeater_suspend_ccir_cmd : .rs 8 # cfg_repeater_suspend_dtmf_cmd : .rs 8 # # cfg_repeater_cmd_9_hidden : .rs 1 # # repeater_cfg_TBLIP : .rs 1 # # !== END SETUP BLOCK =================================================== # # chk_size_nvdata = . - nvstart # ASSERT(chk_size_nvdata < (4 * 1024)) # # .org nvstart + 4 * 1024 # nvend: !------------------------------------------ # # !---------------------------------------------------------------------- # # output_0 : .rs 1 # output_1 : .rs 1 # # mbusrx_rp : .rs 2 # mbusrx_wp : .rs 2 # # mbustx_rp : .rs 2 # mbustx_wp : .rs 2 # # synth_ctrl : .rs 1 ! synth control register # rx_refdiv : .rs 2 # tx_refdiv : .rs 2 # rx_divisor : .rs 3 # tx_divisor : .rs 3 ! 17 bits NA # # cpu_is_P8E : .rs 1 # # !====================================================================== # # _bss: ! zeroed variables # # rx_bstep_cfg : .rs 2 ! 2 and 25 for frequency/divisor math # tx_bstep_cfg : .rs 2 ! 2 and 25 for frequency/divisor math # # mbustx_cnt : .rs 1 # mbusrx_cnt : .rs 1 # # mbus_timer : .rs 1 ! timer for MBUS transmit # # rssi_timer : .rs 1 # mt_timer : .rs 1 # key_timer : .rs 1 # key_speed : .rs 1 # key_blips : .rs 1 # # idle_timer : .rs 1 ! Minutes idle squelch and CU # alert_timer : .rs 1 ! Seconds between alerts # lights_timer : .rs 1 ! Seconds since last CU manipulation # txtail_timer : .rs 1 ! to delay squelch pop after tx and # ! battery check wrt voltage drop on tx # tx_tot_timer : .rs 1 ! Catch stuck PTT, 0...255 minutes # ign_apo_timer : .rs 1 ! powerdown after IGN clear this long # ccir_tx_timer : .rs 1 ! for 100ms tone (10 ticks) # scan_timer : .rs 1 ! csec part... # scan_timer_secs : .rs 1 ! ... second part. # scan_patience : .rs 1 ! slower timer for "patience" # # squelch_muted : .rs 1 ! NZ if scanner unstable etc # scanner_state : .rs 2 # scan_paused : .rs 1 ! NZ if scanner paused on channel # # squelch_tightening : .rs 1 ! normally 0, subtracted from "squelcher value" # txpwr_increment : .rs 1 ! normally 0 # # scan_slicecnt : .rs 1 # scan_slices : .rs num_bandrecs * 2 * 3 # # NUM_TMP_REJECTS = 20 # reject_idx : .rs 1 # tmp_rejects : .rs (3 + 1) * NUM_TMP_REJECTS ! freq(3) + timer(1) # # adj_feedback : .rs 2 # call_dpyed : .rs 1 # dpx_ind_flags : .rs 1 # # sir : .rs 1 # KEYSIR = 0 # DPYSIR = 1 # DTMFSIR = 2 # INSIR = 7 # nosir : .rs 1 ! Mainline needs full attention # # lastdigit : .rs 1 # lastkey : .rs 1 # key : .rs 1 # dark : .rs 1 # key_time : .rs 1 # # pttdn : .rs 1 # keydown : .rs 1 # # digidx : .rs 1 # digbuf : .rs 16 # # squelch_prev_ones : .rs 2 ! previous sqls (10 and 20 msec before) # squelch_delay : .rs 1 ! dragging "timer" for squelch head/tail # squelch_open : .rs 1 ! 1/0 state # # mton : .rs 1 # # tx_is_legal : .rs 1 ! NZ if ok to tx # txon : .rs 1 # rfc : .rs 1 # srssi : .rs 1 # # ad_select : .rs 1 ! 0...7 # # sec100 : .rs 1 ! "uptime" # seconds : .rs 1 # minutes : .rs 1 # hours : .rs 1 # # redraw_req : .rs 1 # drawn : .rs 1 # # vip_idx : .rs 1 # # SHORT_PACLEN = 8 # LONG_PACLEN = 15 # # outpacket : .rs 16 # # piob_mode : .rs 1 ! 0x00 B mode, ones inputs # pioa_data : .rs 1 # last_columns : .rs 1 # dtmf_code : .rs 1 # spkrbtn : .rs 1 # # cu_is_known : .rs 1 # cu_is_alfa : .rs 1 ! NZ if CU58AF detected # portable : .rs 1 ! NZ if /POR in CU-connector (EXIN1) # local_mode : .rs 1 ! NZ if /LOCAL grounded # # ccir_prevdata : .rs 1 ! unshifted raw bits from 0x00 PA # ccir_hist_finger : .rs 1 ! peeking offset # ccir_hist_idx : .rs 1 ! insert point # ccir_tonetime : .rs 1 ! length in centiseconds # ccir_toneptr : .rs 1 ! start of current serie # # dtmf_prevdata : .rs 1 ! unshifted raw bits from [DTMF] # dtmf_hist_finger : .rs 1 ! peeking offset # dtmf_hist_idx : .rs 1 ! insert point # dtmf_idletime : .rs 1 ! note when no dtmf tones for some time # dtmf_toneptr : .rs 1 ! pending codes # # packet : .rs 16 ! buffer to collect input frame # pkt_ptr : .rs 2 ! in above buffer # fsk_hist_finger : .rs 1 ! peeking offset # fsk_hist_idx : .rs 1 ! insert point # packet_good : .rs 1 ! index in history, to check "ours" # packet_rdy : .rs 1 # # menu_active : .rs 1 ! # menu_ptr : .rs 2 # # yucko_alfa_draw_long_6_only : .rs 1 # # lpf_hz_now : .rs 2 ! catch change in setup # # .align 8 ! ------------------------ LD116: 00 [ EA ] # # ccir_history : .rs 256 ! page aligned # dtmf_history : .rs 256 ! page aligned # fsk_history : .rs 256 ! page aligned # # mbusrx_buf : .rs 256 ! page aligned # mbustx_buf : .rs 256 ! page aligned # # segments : .rs 64 ! page aligned, space for either AN or AF cu. # indicators : .rs 1 ! LEDs. # # .align 8 LD741: 00 [ BF ] # # ad_bytes: ! page aligned # ad_rssi : .rs 1 ! 0 # ad_sql : .rs 1 ! 1 # ad_batt : .rs 1 ! 2 # ad_tpc : .rs 1 ! 3 # ad_fpm : .rs 1 ! 4 # ad_rpm : .rs 1 ! 5 # ad_tp4 : .rs 1 ! 6 # ad_in7 : .rs 1 ! 7 # # # repeater_state : .rs 2 ! jump pointer # repeater_timer_other : .rs 2 ! second timers # repeater_timer_ID : .rs 2 # # repeater_timer_BLIP : .rs 1 ! 10msec timer # repeater_timer_BLIP_state : .rs 1 # # repeater_req : .rs 1 ! #x DTMF commands # repeater_sig : .rs 1 ! srssi when repeater saw sq close # last_sqtail : .rs 1 ! 1 if last sq close had tail # # cw_slot_ticks : .rs 1 # cw_pitch_cnt : .rs 2 # # remote_display_buffer : .rs 16 # display_buffer_time : .rs 1 # # idlefn_flag : .rs 1 # # if_tmp : .rs 3 # # repeater_ptt_seen : .rs 1 # repeater_cw_sendit_all : .rs 1 # repeater_cw_jmpbuf : .rs 2 # # sio_bctrl_mirror : .rs 1 # sio_bctrl_local : .rs 1 # # ding_req : .rs 1 # script_req : .rs 1 # # junk : .rs 1 # # call_timer_hour : .rs 1 # call_timer_min : .rs 1 # call_timer_sec : .rs 1 # # _end: # # chk_size_stack = 0x10000 - _end # ASSERT(chk_size_stack > (4 * 1024)) # # Symbols: # init_chips l 0x00AB 171 0 # PIOA_INIT a 0x0005 5 171 # powerdown_now l 0x204F 8271 0 # start l 0x0154 340 0 # v_nmi l 0x0066 102 0 # save_nvmisc_and_restart l 0x3B83 15235 0 # banner l 0x0070 112 0 # version l 0x0075 117 0 # pioa_base l 0x0150 336 0 # piob_base l 0x0152 338 0 # PIOB_INIT a 0x0005 5 176 # SIOA_INIT a 0x0009 9 181 # sio_base l 0x0140 320 0 # SIOB_INIT a 0x000B 11 190 # MT_300HZ a 0x3480 13440 -13239 # MT_500HZ a 0x1F80 8064 -7863 # MT_600HZ a 0x1A40 6720 -6519 # MT_1000HZ a 0x0FC0 4032 -3831 # MT_1200HZ a 0x0D20 3360 -3159 # MT_1400HZ a 0x0B40 2880 -2679 # MT_1500HZ a 0x0A80 2688 -2487 # MT_1750HZ a 0x0900 2304 -2103 # MT_2000HZ a 0x07E0 2016 -1815 # MT_2500HZ a 0x064C 1612 -1411 # MT_3000HZ a 0x0540 1344 -1143 # MT_3500HZ a 0x0480 1152 -951 # CU53AN_segs_bottom_row l 0x00C9 201 0 # CU53AN_segs_d_digit_9 l 0x00C9 201 7 # CU53AN_segs_d_digit_8 l 0x00D0 208 7 # CU53AN_segs_d_digit_7 l 0x00D7 215 7 # CU53AN_segs_d_digit_6 l 0x00DE 222 7 # CU53AN_segs_d_digit_5 l 0x00E5 229 7 # CU53AN_segs_d_digit_4 l 0x00EC 236 7 # CU53AN_segs_d_digit_3 l 0x00F3 243 7 # CU53AN_segs_d_digit_2 l 0x00FA 250 7 # CU53AN_segs_d_digit_1 l 0x0101 257 7 # CU53AN_segs_d_digit_0 l 0x0108 264 7 # CU53AN_segs_u_digit_5 l 0x010F 271 7 # CU53AN_segs_u_digit_4 l 0x0116 278 7 # CU53AN_segs_u_digit_3 l 0x011D 285 7 # CU53AN_segs_u_digit_2 l 0x0124 292 7 # CU53AN_segs_u_digit_1 l 0x012B 299 7 # CU53AN_segs_u_digit_0 l 0x0132 306 7 # intvec l 0x0140 320 0 # siob_tbe l 0x0257 599 0 # siob_esc l 0x02A3 675 0 # siob_rca l 0x0284 644 0 # siob_src l 0x02C0 704 0 # sioa_tbe l 0x02CD 717 0 # sioa_esc l 0x02DB 731 0 # sioa_rca l 0x02D5 725 0 # sioa_src l 0x0364 868 0 # pioa_int l 0x0372 882 0 # piob_int l 0x036E 878 0 # output_0 l 0xD000 53248 1 # output_1 l 0xD001 53249 1 # piob_mode l 0xD0E7 53479 1 # check_for_P8E_cpu l 0x3D84 15748 0 # init_timer1 l 0x2268 8808 0 # ctcss_off l 0x3A10 14864 0 # mbusrx_buf l 0xD500 54528 256 # mbusrx_rp l 0xD002 53250 2 # mbusrx_wp l 0xD004 53252 2 # mbustx_buf l 0xD600 54784 256 # mbustx_rp l 0xD006 53254 2 # mbustx_wp l 0xD008 53256 2 # dark l 0xD0B1 53425 1 # ad_batt l 0xD802 55298 1 # nosir l 0xD0AD 53421 1 # packet l 0xD0FA 53498 16 # pkt_ptr l 0xD10A 53514 2 # key l 0xD0B0 53424 1 # lastkey l 0xD0AF 53423 1 # lastdigit l 0xD0AE 53422 1 # load_nvdata l 0x3BD1 15313 0 # init_modem l 0x1547 5447 0 # portable l 0xD0EE 53486 1 # sio_bctrl_mirror l 0xD82F 55343 1 # sio_bctrl_local l 0xD830 55344 1 # local_mode l 0xD0EF 53487 1 # main l 0x099A 2458 0 # doreti l 0x0253 595 0 # mbustx_cnt l 0xD01A 53274 1 # siob_tbe_close l 0x0275 629 0 # mbus_timer l 0xD01C 53276 1 # siob_rca_drop l 0x027C 636 0 # bleep l 0x2299 8857 0 # siob_rca_ignore l 0x027F 639 0 # mbusrx_cnt l 0xD01B 53275 1 # pttdn l 0xD0B3 53427 1 # cu_is_known l 0xD0EC 53484 1 # cu_is_alfa l 0xD0ED 53485 1 # keydown l 0xD0B4 53428 1 # key_timer l 0xD01F 53279 1 # SHORT_PACLEN a 0x0008 8 53455 # LONG_PACLEN a 0x000F 15 53448 # check_long_packet l 0x1AE2 6882 0 # check_short_packet l 0x1A7A 6778 0 # systick l 0x0392 914 0 # ad_bytes l 0xD800 55296 0 # ad_select l 0xD0CF 53455 1 # pioa_data l 0xD0E8 53480 1 # script_req l 0xD832 55346 1 # cfg_light_seconds l 0xC722 50978 1 # cu_lights_on l 0x2423 9251 0 # sir l 0xD0AC 53420 1 # DPYSIR a 0x0001 1 53420 # scan_on l 0xC003 49155 1 # scan_timer l 0xD029 53289 1 # scan_timer_secs l 0xD02A 53290 1 # mt_timer l 0xD01E 53278 1 # stop_marker_tone l 0x2334 9012 0 # ccir_tx_timer l 0xD028 53288 1 # txtail_timer l 0xD025 53285 1 # txon l 0xD0CC 53452 1 # KEYSIR a 0x0000 0 53421 # typematic l 0x2202 8706 0 # mton l 0xD0CA 53450 1 # squelch l 0x065C 1628 0 # rssi_disp l 0x0785 1925 0 # ccir_decoder l 0x07A4 1956 0 # dtmf_decoder l 0x0920 2336 0 # cfg_function l 0xC716 50966 1 # repeater_step_10msec l 0x3FB4 16308 0 # sec100 l 0xD0D0 53456 1 # seconds l 0xD0D1 53457 1 # minutes l 0xD0D2 53458 1 # hours l 0xD0D3 53459 1 # once_per_hour l 0x061D 1565 0 # once_per_minute l 0x05C3 1475 0 # once_per_second l 0x0506 1286 0 # INSIR a 0x0007 7 53414 # dosir l 0x04D8 1240 0 # keypad l 0x20C0 8384 0 # display l 0x2918 10520 0 # drawn l 0xD0D5 53461 1 # DTMFSIR a 0x0002 2 53419 # i2c_dtmf l 0x2A15 10773 0 # transmitter_hours_second_counter l 0xC953 51539 2 # transmitter_hours l 0xC950 51536 3 # alert_timer l 0xD023 53283 1 # scan_patience l 0xD02B 53291 1 # lights_timer l 0xD024 53284 1 # dtmf_idletime l 0xD0F8 53496 1 # cfg_dtmf_holdtime l 0xC881 51329 1 # dtmf_decoder_timeout l 0x0959 2393 0 # repeater_step_1sec l 0x3F9D 16285 0 # display_buffer_time l 0xD826 55334 1 # redraw_req l 0xD0D4 53460 1 # cfg_exal_state l 0xC98E 51598 1 # call_dpyed l 0xD0AA 53418 1 # call_timer_sec l 0xD836 55350 1 # call_timer_min l 0xD835 55349 1 # call_timer_hour l 0xD834 55348 1 # cfg_tx_tot_minutes l 0xC724 50980 1 # tx_tot_timer l 0xD026 53286 1 # squelch_open l 0xD0C9 53449 1 # digidx l 0xD0B5 53429 1 # menu_active l 0xD110 53520 1 # idle_timer l 0xD022 53282 1 # cfg_idlefn_delay l 0xC922 51490 1 # idlefn_flag l 0xD827 55335 1 # unreject_timer l 0x1055 4181 0 # cfg_ign_apo_hours l 0xC723 50979 1 # ign_apo_timer l 0xD027 53287 1 # re_enable_modem l 0x155A 5466 0 # read_squelcher_value l 0x0632 1586 0 # squelch_tightening l 0xD030 53296 1 # cfg_squelch_source l 0xC726 50982 1 # ad_sql l 0xD801 55297 1 # ad_rssi l 0xD800 55296 1 # squelch_prev_ones l 0xD0C6 53446 2 # cfg_squelch_hyst l 0xC729 50985 1 # cfg_squelch_level l 0xC727 50983 1 # squelch_is_closed l 0x06EA 1770 0 # squelch_delay l 0xD0C8 53448 1 # cu_serv_on l 0x245E 9310 0 # cu_lights_on_from_squelch l 0x241E 9246 0 # pull_down_EXIN1 l 0x0975 2421 0 # squelch_is_open l 0x06F6 1782 0 # squelch_muted l 0xD02C 53292 1 # audioc_on l 0x0707 1799 0 # cfg_squelch_BIG l 0xC728 50984 1 # last_sqtail l 0xD812 55314 1 # cu_serv_off l 0x246D 9325 0 # release_EXIN1 l 0x097D 2429 0 # serv_blip l 0x2287 8839 0 # squelch_forced l 0xC002 49154 1 # audioc_off l 0x0712 1810 0 # cfg_squelch_head l 0xC72A 50986 1 # cfg_squelch_tail l 0xC72B 50987 1 # tx_cut_local_audio l 0x071D 1821 0 # close_squelch_really l 0x23BE 9150 0 # mic_off_ccir_off l 0x0737 1847 0 # mic_on l 0x0742 1858 0 # silence_timer1 l 0x226C 8812 0 # mic_off l 0x074E 1870 0 # ccir_on l 0x0757 1879 0 # ccir_off l 0x0760 1888 0 # mtc_on l 0x076C 1900 0 # mtc_off l 0x0775 1909 0 # srssi l 0xD0CE 53454 1 # rssi_timer l 0xD01D 53277 1 # ccir_tonetime l 0xD0F3 53491 1 # ccir_prevdata l 0xD0F0 53488 1 # ccir_history l 0xD200 53760 256 # ccir_hist_idx l 0xD0F2 53490 1 # cfg_ccir_minlen l 0xC880 51328 1 # ccir_toneptr l 0xD0F4 53492 1 # ccir_ok_serie l 0x0812 2066 0 # ccir_hist_finger l 0xD0F1 53489 1 # cfg_ccir_1 l 0xC840 51264 8 # compare_ccir_serie l 0x0849 2121 0 # ccir_match l 0x08EF 2287 0 # cfg_ccir_2 l 0xC848 51272 8 # cfg_ccir_3 l 0xC850 51280 8 # cfg_repeater_suspend_ccir_cmd l 0xC9A0 51616 8 # repeater_toggle_suspend l 0x3DAF 15791 0 # repeater_cfg_ccir_cmd_pfx l 0xC96F 51567 8 # compare_ccir_prefix l 0x089A 2202 0 # ccir_repeater_cmd l 0x3EB1 16049 0 # cfg_exal_ccir_cmd_pfx l 0xC98F 51599 8 # exal_command l 0x0A6C 2668 0 # compare_tone_serie l 0x0857 2135 0 # compare_dtmf_serie l 0x0850 2128 0 # dtmf_toneptr l 0xD0F9 53497 1 # compare_tone_prefix l 0x08A8 2216 0 # compare_dtmf_prefix l 0x08A1 2209 0 # ding_req l 0xD831 55345 1 # start_call_timer l 0x08F8 2296 0 # ccir_decoder_init l 0x0907 2311 0 # dtmf_decoder_init l 0x0911 2321 0 # dtmf_history l 0xD300 54016 256 # dtmf_prevdata l 0xD0F5 53493 1 # dtmf_8870_tab l 0x3880 14464 0 # dtmf_hist_idx l 0xD0F7 53495 1 # dtmf_hist_finger l 0xD0F6 53494 1 # dtmf_commands l 0x3E79 15993 0 # pull_down_DCU l 0x0985 2437 0 # release_DCU l 0x098D 2445 0 # probe_cu58af l 0x2993 10643 0 # enable_modem l 0x1564 5476 0 # set_vola l 0x0D76 3446 0 # init_menu l 0x4662 18018 0 # init_LPF l 0x2230 8752 0 # zero_txpwr l 0x320A 12810 0 # cu_now_known l 0x2988 10632 0 # is_key_down l 0x0B27 2855 0 # halt_txsynth l 0x30F5 12533 0 # set_channel_step l 0x2FF3 12275 0 # changed_frequency_duplex_okay l 0x2CA6 11430 0 # cu_manipulated l 0x0B42 2882 0 # light_on_led l 0x23F1 9201 0 # resync_squelch_if_forced l 0x2347 9031 0 # repeater_init l 0x3DBA 15802 0 # redraw l 0x23DA 9178 0 # scanner_start l 0x117F 4479 0 # mainloop l 0x09EC 2540 0 # redrawcheck l 0x0B03 2819 0 # battcheck l 0x0ACA 2762 0 # pttcheck l 0x1DF8 7672 0 # aprs_ptt_check l 0x1E9A 7834 0 # keycheck l 0x0B11 2833 0 # fskcheck l 0x1539 5433 0 # ccircheck l 0x0A5E 2654 0 # dim_lights_if_idle l 0x0A53 2643 0 # idlefn_check l 0x0A89 2697 0 # script_check l 0x0A13 2579 0 # scanner_run l 0x1170 4464 0 # repeater_run l 0x3DD5 15829 0 # open_selective l 0x236B 9067 0 # cfg_onhook_script l 0xC95E 51550 8 # cfg_offhook_script l 0xC966 51558 8 # key_time l 0xD0B2 53426 1 # dokey_not_menu l 0x0B60 2912 0 # cu_lights_off l 0x2440 9280 0 # ding l 0x22CB 8907 0 # cfg_idlefn l 0xC923 51491 1 # def_memo l 0x0F68 3944 0 # battcheck_lobatt l 0x0AA1 2721 0 # feedback_lobatt l 0x276B 10091 0 # force_redraw l 0x23CB 9163 0 # clear_clock_icon l 0x253A 9530 0 # no_feedback l 0x26F6 9974 0 # draw_clock_icon l 0x2528 9512 0 # start_marker_tone l 0x231F 8991 0 # clear_key l 0x0E04 3588 0 # dokey l 0x0B59 2905 0 # waitkey l 0x0B31 2865 0 # feedback_let_go_the_darn_button l 0x275E 10078 0 # cu_call_off l 0x248B 9355 0 # menu_input l 0x0BDF 3039 0 # insdig_or_scan_toggle l 0x0E0C 3596 0 # mute_squelch_selective l 0x23A5 9125 0 # execute l 0x0C72 3186 0 # backspace l 0x0E2D 3629 0 # toggle_or_position_menu l 0x491F 18719 0 # beep_or_fsk_send l 0x0F1D 3869 0 # up_vola l 0x0D6E 3438 0 # dn_vola l 0x0D72 3442 0 # monitor_audio l 0x0CB1 3249 0 # up_sqlv l 0x0D4C 3404 0 # dn_sqlv l 0x0D5D 3421 0 # def_sqlv l 0x0D20 3360 0 # up_memo l 0x1D1B 7451 0 # dn_memo l 0x1D48 7496 0 # up_freq l 0x0D08 3336 0 # dn_freq l 0x0D14 3348 0 # def_freq l 0x0F7A 3962 0 # def_vola l 0x0F59 3929 0 # scanner_key l 0x0F27 3879 0 # duplex_key l 0x0ECD 3789 0 # step_audio_dst l 0x29AB 10667 0 # insdig l 0x0E15 3605 0 # menu_enter_or_walk l 0x49AC 18860 0 # menu_defval_or_exec l 0x49BC 18876 0 # menu_up_value l 0x4B85 19333 0 # menu_dn_value l 0x4B8A 19338 0 # insdig_alpha l 0x0E8D 3725 0 # insdig_punct l 0x0E7C 3708 0 # menu_next_group l 0x49FC 18940 0 # menu_prev l 0x4A22 18978 0 # handle_key_during_tx l 0x0C59 3161 0 # step_txpwr_up l 0x202B 8235 0 # step_txpwr_down l 0x203D 8253 0 # dtmf_cu58af l 0x29BC 10684 0 # dtmf_bang_tone l 0x3C32 15410 0 # scanner_stop l 0x1354 4948 0 # save_nvdata l 0x3BAE 15278 0 # save_memory l 0x1C81 7297 0 # next_vip l 0x100A 4106 0 # go_mem l 0x1D75 7541 0 # fill_implied l 0x0DD5 3541 0 # a2i l 0x3A57 14935 0 # rx_freq l 0xC008 49160 3 # leave_memories l 0x1DF2 7666 0 # remember_vip l 0x0FB0 4016 0 # changed_frequency l 0x2C9F 11423 0 # compare_tx_rx_freq l 0x0F98 3992 0 # tx_freq l 0xC00B 49163 3 # temporary_change_rx_freq l 0x2CB0 11440 0 # force_squelch l 0x2351 9041 0 # unforce_squelch l 0x235C 9052 0 # clear_buffer l 0x0DFC 3580 0 # step_channel_up l 0x2FC5 12229 0 # step_channel_down l 0x2FDB 12251 0 # feedback_default l 0x271D 10013 0 # cfg_def_squelch l 0xC72C 50988 1 # feedback_stored l 0x272A 10026 0 # volume l 0xC001 49153 1 # set_vola_a l 0x0D7C 3452 0 # digbuf l 0xD0B6 53430 16 # cfg_implied l 0xC717 50967 8 # toggle_scan_mask l 0x11C5 4549 0 # decoder_hist_rewind l 0x48A2 18594 0 # vip_idx l 0xD0D6 53462 1 # alpha_punct l 0x0E50 3664 0 # alpha_tab l 0x0E58 3672 0 # step_duplex_state l 0x2F3F 12095 0 # feedback_shift_neg l 0x2737 10039 0 # set_duplex_shift_neg l 0x2F70 12144 0 # feedback_shift_pos l 0x2744 10052 0 # set_duplex_shift_pos l 0x2F84 12164 0 # feedback_split l 0x2751 10065 0 # set_tx_freq l 0x2F95 12181 0 # send_call_packet l 0x18A5 6309 0 # beep1750 l 0x1F2F 7983 0 # feedback_reject l 0x2703 9987 0 # add_reject l 0x10DD 4317 0 # feedback_cleared l 0x2710 10000 0 # clear_rejects l 0x10CB 4299 0 # cfg_def_volume l 0xC731 50993 1 # cfg_def_memory l 0xC72D 50989 1 # go_mem_a l 0x1DA3 7587 0 # cfg_def_frequency l 0xC72E 50990 3 # vip_list l 0xC07C 49276 30 # VIP_COUNT a 0x000A 10 49266 # vip_freq l 0xC018 49176 3 # mem_flags l 0xC006 49158 1 # MEM_VALID a 0x0001 1 49405 # mem_idx l 0xC007 49159 1 # back_to_last_vip l 0x1005 4101 0 # load_num_tmp_rejects l 0x1049 4169 0 # cfg_num_tmp_rejects l 0xC983 51587 1 # NUM_TMP_REJECTS a 0x0014 20 53315 # tmp_rejects l 0xD058 53336 80 # is_freq_rejected_temp l 0x106D 4205 0 # is_freq_rejected_perm l 0x109D 4253 0 # cfg_reject_0 l 0xC7AA 51114 3 # check_ten_rejects l 0x10AD 4269 0 # cfg_reject_10 l 0xC882 51330 3 # add_reject_out l 0x114C 4428 0 # reject_idx l 0xD057 53335 1 # cfg_unreject_mins l 0xC924 51492 1 # scan_do_step l 0x1374 4980 0 # scanner_state l 0xD02D 53293 2 # scanner_ret l 0x117A 4474 0 # draw_scanner_icon l 0x24CE 9422 0 # build_scan_mask l 0x11A4 4516 0 # scan_mask l 0xC004 49156 2 # build_scan_slicetab l 0x128E 4750 0 # digit_to_scan_mask l 0x1213 4627 0 # scan_this_memblock l 0x1249 4681 0 # cfg_band1_start l 0xC748 51016 3 # scan_slices l 0xD033 53299 36 # num_bandrecs a 0x0006 6 51094 # size_bandrec a 0x000E 14 51002 # scan_slicecnt l 0xD032 53298 1 # restore_squelch_scanner l 0x2383 9091 0 # clear_scanner_icon l 0x24E0 9440 0 # scan_bad l 0x136B 4971 0 # scan_do_step_again l 0x1371 4977 0 # scan_paused l 0xD02F 53295 1 # mute_squelch_scanner l 0x2397 9111 0 # scan_next_memory l 0x1452 5202 0 # scan_next_frequency l 0x13A8 5032 0 # scan_first_frequency l 0x1389 5001 0 # scan_first_memory l 0x1436 5174 0 # scan_did_step_freq l 0x1488 5256 0 # memories l 0xC0FE 49406 1560 # point_ix_memory_a l 0x1D8C 7564 0 # mem_FLAGS a 0x0006 6 49400 # MEM_SCANNABLE a 0x0004 4 49402 # scan_did_step l 0x1494 5268 0 # mem_SIZE a 0x000C 12 49394 # is_sql_over_level l 0x147F 5247 0 # cfg_scan_rate l 0xC725 50981 1 # get_scan_patience l 0x2E91 11921 0 # cfg_scan_skip_fsk_channels l 0xC925 51493 1 # get_scan_tail l 0x2E8D 11917 0 # packet_rdy l 0xD10F 53519 1 # packet_for_whom l 0x1569 5481 0 # packet_good l 0xD10E 53518 1 # fsk_history l 0xD400 54272 256 # handle_call_packet l 0x1706 5894 0 # handle_config_packets l 0x1585 5509 0 # handle_display_packets l 0x15EF 5615 0 # cfg_remote_id l 0xC8D0 51408 2 # cfg_remote_passwd l 0xC913 51475 8 # remote_config_execute l 0x4A4A 19018 0 # leaved_setup l 0x472F 18223 0 # send_display_config_packet l 0x178E 6030 0 # handle_display_data l 0x1687 5767 0 # handle_display_config l 0x15FC 5628 0 # remote_display_buffer l 0xD816 55318 16 # cfg_mycall_1 l 0xC828 51240 8 # cu_call_on l 0x247C 9340 0 # send_remote_config_packets l 0x173E 5950 0 # send_remote_config_query l 0x176E 5998 0 # menu_ptr l 0xD111 53521 2 # outpacket l 0xD0D7 53463 16 # fill_enter_config_packet l 0x1803 6147 0 # append_secret_packet_crc l 0x198D 6541 0 # send_packet_buffer l 0x1C1E 7198 0 # fill_query_config_packet l 0x182D 6189 0 # append_short_packet_crc l 0x1940 6464 0 # tx_on l 0x320F 12815 0 # tx_error l 0x1E88 7816 0 # fill_display_config_packet l 0x1843 6211 0 # append_long_packet_crc l 0x19E7 6631 0 # mdm_delay l 0x1C67 7271 0 # tx_off l 0x3249 12873 0 # map_special_ptrs l 0x17C2 6082 0 # menu_rfc_change l 0x481D 18461 0 # menu_sql_change l 0x486C 18540 0 # menu_sqB_change l 0x487E 18558 0 # onesies l 0x17FB 6139 8 # load_menu_ptr l 0x4705 18181 0 # rfc l 0xD0CD 53453 1 # build_call_packet_buffer l 0x18D3 6355 0 # crctbls l 0x3500 13568 0 # check_packet l 0x1BEB 7147 0 # fsk_hist_idx l 0xD10D 53517 1 # fsk_hist_finger l 0xD10C 53516 1 # packet_header l 0x1C50 7248 0 # packet_header_size a 0x0007 7 7248 # send_some_data l 0x1C57 7255 0 # a2i_byte l 0x4650 18000 0 # MEM_HIDDEN a 0x0002 2 49404 # point_ix_memory l 0x1D89 7561 0 # band_step l 0xC013 49171 1 # mem_BAND a 0x0008 8 49398 # mem_FOO1 a 0x0009 9 49397 # mem_FOO2 a 0x000A 10 49396 # mem_FOO3 a 0x000B 11 49395 # maybe_just_reenter_last l 0x1D04 7428 0 # get_mem_flags l 0x1DEB 7659 0 # save_memory_ctcss l 0x1D7F 7551 0 # mem_ctcss_hz l 0xC01C 49180 1 # mem_CTCSS a 0x0007 7 49399 # locate_band l 0x2D01 11521 0 # set_duplex_from_tx_rx l 0x2D89 11657 0 # repeater_ptt_seen l 0xD82B 55339 1 # ctcss_maybe l 0x3A19 14873 0 # ptt_ccir_xmit l 0x1F93 8083 0 # tx_tune_tone_maybe l 0x1F57 8023 0 # stop_dtmf_tone l 0x29F5 10741 0 # cfg_voice_id l 0xC921 51489 1 # bang_voice_id l 0x3D07 15623 0 # repeater_operator_ptt l 0x3E61 15969 0 # cfg_aprs_tx l 0xC977 51575 1 # cfg_aprs_tx_freq l 0xC978 51576 3 # tx_divisor l 0xD012 53266 3 # tx_refdiv l 0xD00D 53261 2 # tx_bstep_cfg l 0xD018 53272 2 # update_tx_vco_band l 0x30D4 12500 0 # locate_tx_band l 0x2CC7 11463 0 # channel_step_parms l 0x300C 12300 0 # determine_tx_div_split l 0x2DFB 11771 0 # close_squelch l 0x23B3 9139 0 # tx_on_legal_or_not l 0x3218 12824 0 # tune_tone_position l 0x57A0 22432 0 # cfg_txtune_hz l 0xC91F 51487 2 # ccir_from_digbuf_or_setup l 0x1FD7 8151 0 # ccir_from_digbuf l 0x1FF3 8179 0 # cfg_shortcut_0 l 0xC7D8 51160 8 # ccirtbl l 0x32AA 12970 0 # cfg_txpwr l 0xC71F 50975 1 # update_txpwr l 0x3204 12804 0 # putchar l 0x2062 8290 0 # putchar_start l 0x2079 8313 0 # iputc l 0x2083 8323 0 # getchar l 0x20A7 8359 0 # slight_delay l 0x20BA 8378 0 # keypad_cu58af l 0x2ADD 10973 0 # blip l 0x2275 8821 0 # keytbl_cu53an l 0x3262 12898 0 # key_blips l 0xD021 53281 1 # key_speed l 0xD020 53280 1 # cfg_lpf_hz l 0xC73D 51005 2 # lpf_hz_now l 0xD114 53524 2 # div248 l 0x3B31 15153 0 # update_LPF l 0x2251 8785 0 # cfg_key_blip_pitch l 0xC721 50977 1 # blip_hz l 0x22A4 8868 0 # cfg_serv_blip_pitch l 0xC98C 51596 1 # dpx_ind_flags l 0xD0AB 53419 1 # draw_upper_row l 0x25D1 9681 0 # draw_lower_row l 0x27CF 10191 0 # draw_dpx_ind l 0x2573 9587 0 # draw_ctcss_and_mute_ind l 0x249A 9370 0 # indicators l 0xD740 55104 1 # dim_transmit_led l 0x2400 9216 0 # light_transmit_led l 0x240F 9231 0 # cfg_light_sql l 0xC8DA 51418 1 # cfg_ctcss_hz l 0xC73C 51004 1 # segments l 0xD700 55040 64 # draw_upper_colons l 0x24F2 9458 0 # clear_upper_colons l 0x2502 9474 0 # draw_lower_colon l 0x2512 9490 0 # clear_lower_colon l 0x251D 9501 0 # draw_squelch_ind l 0x254C 9548 0 # dpydig l 0x452D 17709 0 # draw_menu_title l 0x466B 18027 0 # draw_call_timer l 0x263E 9790 0 # real_txpwr l 0x31F1 12785 0 # dpydiv9 l 0x451E 17694 0 # audio_dst l 0xC000 49152 1 # dpydiv99 l 0x4517 17687 0 # toggle_upper_colons l 0x2638 9784 0 # dpyval99 l 0x4500 17664 0 # draw_digit_buffer l 0x2669 9833 0 # draw_memory_info l 0x2699 9881 0 # set_dpx_ind_from_rx_tx_freq l 0x26E5 9957 0 # adj_feedback l 0xD0A8 53416 2 # feedback_hold l 0x2778 10104 0 # draw_adjust_feedback l 0x2785 10117 0 # draw_scan_mask l 0x279A 10138 0 # draw_call_notice l 0x2838 10296 0 # draw_menu_lower_row l 0x46A6 18086 0 # yucko_alfa_draw_long_6_only l 0xD113 53523 1 # draw_long l 0x45B3 17843 0 # sput l 0x443D 17469 0 # segment_onoff l 0x2898 10392 0 # segment_off l 0x28D9 10457 0 # segment_on l 0x289A 10394 0 # display_cu58af l 0x2BA9 11177 0 # display_cu53an l 0x291F 10527 0 # display_group l 0x2959 10585 0 # display_bit_zero l 0x297B 10619 0 # display_bit_one l 0x2979 10617 0 # display_byte l 0x296B 10603 0 # display_bit l 0x2977 10615 0 # cu58af_init l 0x2A7E 10878 0 # dtmf_code l 0xD0EA 53482 1 # i2c_dtmf_tone l 0x2A05 10757 0 # i2c_send_a l 0x2C7E 11390 0 # i2c_send l 0x2C7F 11391 0 # i2c_start l 0x2C64 11364 0 # i2c_wrbyte l 0x2C21 11297 0 # i2c_stop l 0x2C71 11377 0 # i2c_recv l 0x2C8F 11407 0 # spkrbtn l 0xD0EB 53483 1 # last_columns l 0xD0E9 53481 1 # keytbl_cu58af l 0x3282 12930 0 # i2c_getbit l 0x2BD4 11220 0 # i2c_delay l 0x2C02 11266 0 # i2c_putbit l 0x2BDD 11229 0 # i2c_sda_high l 0x2BEA 11242 0 # i2c_sda_low l 0x2BE0 11232 0 # i2c_scl_low l 0x2BF4 11252 0 # i2c_scl_high l 0x2BFB 11259 0 # i2c_sendbit l 0x2C09 11273 0 # i2c_recvbit l 0x2C15 11285 0 # i2c_rdbyte l 0x2C48 11336 0 # parameters_from_band l 0x2CC0 11456 0 # determine_tx_div l 0x2DA9 11689 0 # set_legal_tx_flag l 0x2E95 11925 0 # lookup_rfc l 0x3B43 15171 0 # update_vco_bands l 0x30A4 12452 0 # determine_rx_div l 0x2E1C 11804 0 # load_rxsynth l 0x314D 12621 0 # duplex_state l 0xC00E 49166 1 # band l 0xC012 49170 1 # set_band_duplex_shift l 0x2D6E 11630 0 # band_sctail l 0xC016 49174 1 # band_sclisten l 0xC017 49175 1 # duplex_shift l 0xC00F 49167 3 # cfg_other_duplex l 0xC7A2 51106 3 # freq2div l 0x3062 12386 0 # div2freq l 0x3052 12370 0 # rx_bstep_cfg l 0xD016 53270 2 # rx_divisor l 0xD00F 53263 3 # cfg_inj_below l 0xC932 51506 1 # cfg_if_freq l 0xC733 50995 3 # if_tmp l 0xD828 55336 3 # cfg_tx_band_start l 0xC742 51010 3 # cfg_tx_band_end l 0xC745 51013 3 # cfg_tx_oob_0 l 0xC73F 51007 3 # cfg_tx_oob_1 l 0xC926 51494 3 # cfg_tx_oob_2 l 0xC929 51497 3 # cfg_tx_oob_3 l 0xC92C 51500 3 # cfg_tx_oob_4 l 0xC92F 51503 3 # tx_is_legal l 0xD0CB 53451 1 # negate_ahl l 0x3A47 14919 0 # band_step_hz l 0xC014 49172 2 # rx_refdiv l 0xD00B 53259 2 # mul248 l 0x3B1B 15131 0 # check_and_clamp_divisor l 0x308A 12426 0 # cfg_synth_card l 0xC732 50994 1 # synth_ctrl l 0xD00A 53258 1 # update_rx_vco_band l 0x30B3 12467 0 # cfg_rx_vco_center l 0xC736 50998 3 # cfg_tx_vco_center l 0xC739 51001 3 # load_synth_ctrl l 0x310F 12559 0 # enable_txsynth l 0x3102 12546 0 # send_to_synth l 0x31C7 12743 0 # strobe_to_synth l 0x31C0 12736 0 # load_txsynth l 0x3122 12578 0 # one_to_synth l 0x31E4 12772 0 # send_NA_to_synth l 0x3178 12664 0 # send_NA_64_to_synth l 0x31A0 12704 0 # send_NA_128_to_synth l 0x3180 12672 0 # zero_to_synth l 0x31D7 12759 0 # txpwr_increment l 0xD031 53297 1 # update_txpwr_if_tx l 0x31FF 12799 0 # cu58af_font l 0x32CA 13002 0 # div99tbl l 0x3400 13312 0 # crctbl_hi l 0x3500 13568 0 # crctbl_lo l 0x3600 13824 0 # dtmf_sintab l 0x3700 14080 0 # cu53an_font l 0x3800 14336 0 # CTCSS_FIRST a 0x0040 64 14416 # ctcss_tab l 0x3890 14480 0 # a2i1 l 0x3B03 15107 0 # a2i2 l 0x3AF0 15088 0 # a2i3 l 0x3ADD 15069 0 # a2i4 l 0x3ACA 15050 0 # a2i5 l 0x3AB7 15031 0 # a2i6 l 0x3AA4 15012 0 # a2i7 l 0x3A91 14993 0 # a2i0 l 0x3B16 15126 0 # a2iOV l 0x3A89 14985 0 # get_rfc_hl l 0x3B5A 15194 0 # save_rfc l 0x3B4D 15181 0 # rfctab l 0xC09A 49306 100 # nvstart l 0xC000 49152 0 # nvend l 0xD000 53248 0 # dtmf_phase_1750 a 0x0E72 3698 11644 # dtmf_phase_1633 a 0x0D7B 3451 11891 # dtmf_phase_1477 a 0x0C31 3121 12221 # dtmf_phase_1336 a 0x0B07 2823 12519 # dtmf_phase_1209 a 0x09FB 2555 12787 # dtmf_phase_941 a 0x07C4 1988 13354 # dtmf_phase_852 a 0x0708 1800 13542 # dtmf_phase_770 a 0x065B 1627 13715 # dtmf_phase_697 a 0x05C1 1473 13869 # dtmf_rowcol_table l 0x3BEE 15342 0 # cpu_is_P8E l 0xD015 53269 1 # voice_sample l 0x5CC5 23749 0 # voice_bang_cell l 0x3D37 15671 0 # cfg_repeater_suspended l 0xC99F 51615 1 # repeater_req l 0xD810 55312 1 # repeater_boot l 0x3FCD 16333 0 # repeater_state l 0xD808 55304 2 # repeater_halt l 0x3DCC 15820 0 # repeater_aoff l 0x416A 16746 0 # repeater_txoff l 0x4159 16729 0 # repeater_open_by_reset l 0x4022 16418 0 # cfg_repeater_cmd_9_hidden l 0xC9B0 51632 1 # repeater_send_roger l 0x4237 16951 0 # repeater_idle l 0x3FE0 16352 0 # repeater_cfg_sqincr l 0xC91D 51485 1 # repeater_cfg_txincr l 0xC91E 51486 1 # repeater_txon l 0x4153 16723 0 # repeater_send_blip l 0x41D2 16850 0 # repeater_start_timer_ID l 0x3F69 16233 0 # repeater_start_timer_OPEN l 0x3F70 16240 0 # repeater_open l 0x4052 16466 0 # cfg_exal_dtmf_cmd_pfx l 0xC997 51607 8 # cfg_repeater_suspend_dtmf_cmd l 0xC9A8 51624 8 # dtmf_commands_hash l 0x3E9C 16028 0 # repeater_setstate l 0x3EBB 16059 0 # repeater_check_ctcss_access l 0x3EC0 16064 0 # repeater_cfg_access_method l 0xC8CF 51407 1 # repeater_check_ctcss_detect l 0x3EE4 16100 0 # repeater_check_carrier_access l 0x3ED3 16083 0 # cfg_ctcss_input_polarity l 0xC95C 51548 1 # repeater_recheck_beep_quickly l 0x3EF3 16115 0 # repeater_check_beep l 0x3F0B 16139 0 # repeater_check_carrier l 0x3F3D 16189 0 # repeater_check_timer_ID l 0x3F51 16209 0 # repeater_timer_ID l 0xD80C 55308 2 # repeater_check_timer l 0x3F57 16215 0 # repeater_timer_other l 0xD80A 55306 2 # repeater_check_timer_BLIP l 0x3F5D 16221 0 # repeater_timer_BLIP_state l 0xD80F 55311 1 # repeater_cfg_TID l 0xC8A2 51362 2 # repeater_cfg_TOPEN l 0xC8A0 51360 2 # repeater_start_timer_HOG l 0x3F77 16247 0 # repeater_cfg_THOG l 0xC8A4 51364 2 # repeater_start_timer_CLS l 0x3F7E 16254 0 # repeater_cfg_TCLS l 0xC8A6 51366 2 # repeater_start_timer_DEAD l 0x3F85 16261 0 # repeater_cfg_TDEAD l 0xC8A8 51368 2 # repeater_start_timer_BLIP l 0x3F8C 16268 0 # repeater_cfg_TBLIP l 0xC9B1 51633 1 # repeater_timer_BLIP l 0xD80E 55310 1 # repeater_opening l 0x4007 16391 0 # repeater_open_by_ctcss l 0x4032 16434 0 # repeater_bump_open_counter l 0x4143 16707 0 # repeater_cfg_TBEEPMAX l 0xC91B 51483 2 # repeater_beep_too_long l 0x4044 16452 0 # repeater_send_id_greet l 0x4187 16775 0 # repeater_aon l 0x415F 16735 0 # repeater_check_report_req l 0x4244 16964 0 # repeater_active l 0x40A2 16546 0 # repeater_send_id_during l 0x41A0 16800 0 # repeater_closing l 0x40E6 16614 0 # repeater_sig l 0xD811 55313 1 # repeater_send_to l 0x422A 16938 0 # repeater_lockout l 0x412D 16685 0 # repeater_test_id_bye_length l 0x4175 16757 0 # repeater_send_id_bye l 0x41B9 16825 0 # repeater_cfg_open_counter l 0xC94D 51533 3 # repeater_cfg_afsrc l 0xC8CE 51406 1 # repeater_cfg_id_bye1 l 0xC8F3 51443 8 # repeater_cfg_id_bye2 l 0xC8FB 51451 8 # repeater_cfg_id_bye3 l 0xC903 51459 8 # send_cw_prolog l 0x42EE 17134 0 # repeater_cfg_id_greet1 l 0xC8AC 51372 8 # send_cw l 0x4319 17177 0 # repeater_cfg_id_greet2 l 0xC8B4 51380 8 # repeater_cfg_id_greet3 l 0xC8BC 51388 8 # send_cw_epilog l 0x4302 17154 0 # repeater_cfg_id_during1 l 0xC8DB 51419 8 # repeater_cfg_id_during2 l 0xC8E3 51427 8 # repeater_cfg_id_during3 l 0xC8EB 51435 8 # cfg_overtemp_limit l 0xC8CC 51404 1 # ad_tp4 l 0xD806 55302 1 # repeater_send_temp_alert l 0x4210 16912 0 # ad_rpm l 0xD805 55301 1 # cfg_rpm_limit l 0xC8CD 51405 1 # repeater_send_ant_alert l 0x421D 16925 0 # repeater_cw_sendit_all l 0xD82C 55340 1 # cw_calc_blip l 0x42CE 17102 0 # repeater_cfg_blip l 0xC8C4 51396 8 # cw_calc_blip_link l 0x42DE 17118 0 # repeater_cfg_blip_link l 0xC933 51507 8 # repeater_cfg_msg_temp_alert l 0xC93D 51517 8 # repeater_cfg_msg_ant_bad l 0xC945 51525 8 # repeater_cfg_msg_hog l 0xC984 51588 8 # cw_msg_roger l 0x4298 17048 1 # cw_msg_u_are l 0x42A0 17056 3 # send_cw_chr l 0x432F 17199 0 # cfg_rssi_S9 l 0xC95B 51547 1 # cfg_rssi_S1 l 0xC95A 51546 1 # cw_calc_delays l 0x42A8 17064 0 # cfg_cw_speed l 0xC8AA 51370 1 # cw_slot_ticks l 0xD813 55315 1 # cfg_cw_pitch l 0xC8AB 51371 1 # cw_pitch_cnt l 0xD814 55316 2 # cfg_cw_pitch_blip l 0xC93B 51515 1 # cfg_cw_pitch_blip_link l 0xC93C 51516 1 # repeater_cw_jmpbuf l 0xD82D 55341 2 # cw_chr l 0x4336 17206 0 # cw_chr_1 l 0x4341 17217 0 # cw_pause_2 l 0x4367 17255 0 # cw_tab l 0x439B 17307 0 # cw_ditdash l 0x4371 17265 0 # cw_pause_1 l 0x435E 17246 0 # cw_slots l 0x4380 17280 0 # draw_decoder_history l 0x441B 17435 0 # draw_string_rightjust l 0x4448 17480 0 # draw_string_rightjust_scores l 0x446D 17517 0 # dpydigzb_xxx l 0x4492 17554 0 # dpydigzb l 0x44A2 17570 0 # dpyhexzb l 0x44B2 17586 0 # dpyhex l 0x44C4 17604 0 # dpyval255 l 0x44D6 17622 0 # draw_long_signed l 0x4581 17793 0 # bin_bcd_AHL_DDEEHHLL l 0x45F3 17907 0 # draw_word l 0x45D5 17877 0 # a2i_word l 0x4659 18009 0 # start_menu l 0x4C80 19584 0 # offset_title a 0x0002 2 19582 # offset_tag a 0x0000 0 19584 # offset_type a 0x000E 14 19570 # draw_menu_byte l 0x4742 18242 0 # draw_menu_word l 0x4771 18289 0 # draw_menu_freq l 0x4786 18310 0 # draw_menu_tab l 0x47C4 18372 0 # draw_menu_dyn l 0x47EC 18412 0 # draw_menu_rst l 0x47F2 18418 0 # draw_menu_str l 0x47FE 18430 0 # draw_menu_dpx l 0x4798 18328 0 # draw_menu_csec l 0x4751 18257 0 # offset_ptr a 0x0008 8 19576 # load_menu_arg l 0x473B 18235 0 # offset_arg a 0x000A 10 19574 # draw_rfc_dpy l 0x4804 18436 0 # draw_remote_dyn_dpy l 0x4890 18576 0 # draw_sql_dpy l 0x483A 18490 0 # draw_sqB_dpy l 0x4853 18515 0 # ccir_hist_walk l 0x48B8 18616 0 # decoder_history_walk l 0x48CA 18634 0 # dtmf_hist_walk l 0x48BE 18622 0 # fsk_hist_walk l 0x48C4 18628 0 # draw_ccir_hist l 0x48CD 18637 0 # draw_dtmf_hist l 0x48D5 18645 0 # draw_fsk_hist l 0x48DD 18653 0 # enter_safety_delay l 0x48E5 18661 0 # cfg_enter_time l 0xC98D 51597 1 # menu_quickspots l 0x5A8E 23182 0 # size_menurec a 0x0010 16 19568 # end_menu l 0x5910 22800 0 # menu_next l 0x4A1C 18972 0 # menu_new_value l 0x4AB9 19129 0 # menu_set_duplex_def l 0x49D6 18902 0 # menu_set_from_vfo l 0x49E9 18921 0 # reset_menurec l 0x4C47 19527 0 # menu_next_prev l 0x4A28 18984 0 # menu_rec_sql l 0x4DB0 19888 0 # menu_rec_sqB l 0x4DC0 19904 0 # menu_new_value_byte l 0x4AF1 19185 0 # menu_new_value_word l 0x4B0C 19212 0 # menu_new_value_freq l 0x4B5D 19293 0 # menu_new_value_tab l 0x4B19 19225 0 # menu_new_value_dyn l 0x4C3F 19519 0 # menu_new_value_rst l 0x4B2C 19244 0 # menu_new_value_str l 0x4B3B 19259 0 # menu_new_value_dpx l 0x4B6D 19309 0 # menu_new_value_csec l 0x4AFB 19195 0 # empty_string l 0x4B2F 19247 12 # menu_step_value_dyn l 0x4C3B 19515 0 # menu_step_value_byte l 0x4C1D 19485 0 # menu_step_value_tab l 0x4C21 19489 0 # menu_step_value_word l 0x4C00 19456 0 # menu_step_value_freq l 0x4BD6 19414 0 # menu_step_value_dpx l 0x4BBC 19388 0 # get_probable_chstep_de l 0x5BC2 23490 0 # reset_menurec_byte l 0x4C6B 19563 0 # reset_menurec_word l 0x4C73 19571 0 # reset_menurec_str l 0x4C64 19556 0 # offset_def a 0x000C 12 19572 # menu_0 l 0x4C80 19584 0 # tab_onoff l 0x597C 22908 1 # tab_blip l 0x5A2B 23083 1 # tab_idlefn l 0x5A12 23058 1 # cfg_selcall_time l 0xC96E 51566 1 # cfg_aprs_tx_data l 0xC97B 51579 8 # menu_1 l 0x4D40 19776 0 # menu_2 l 0x4DB0 19888 0 # tab_sqsrc l 0x59B7 22967 1 # menu_3 l 0x4E20 20000 0 # menu_4 l 0x4E60 20064 0 # cfg_band1_end l 0xC74B 51019 3 # cfg_band1_duplex l 0xC74E 51022 3 # cfg_band1_step l 0xC751 51025 1 # tab_chstep l 0x59D0 22992 1 # cfg_band1_sctail l 0xC752 51026 1 # cfg_band1_sclisten l 0xC753 51027 1 # cfg_band2_start l 0xC756 51030 3 # cfg_band2_end l 0xC759 51033 3 # cfg_band2_duplex l 0xC75C 51036 3 # cfg_band2_step l 0xC75F 51039 1 # cfg_band2_sctail l 0xC760 51040 1 # cfg_band2_sclisten l 0xC761 51041 1 # cfg_band3_start l 0xC764 51044 3 # cfg_band3_end l 0xC767 51047 3 # cfg_band3_duplex l 0xC76A 51050 3 # cfg_band3_step l 0xC76D 51053 1 # cfg_band3_sctail l 0xC76E 51054 1 # cfg_band3_sclisten l 0xC76F 51055 1 # cfg_band4_start l 0xC772 51058 3 # cfg_band4_end l 0xC775 51061 3 # cfg_band4_duplex l 0xC778 51064 3 # cfg_band4_step l 0xC77B 51067 1 # cfg_band4_sctail l 0xC77C 51068 1 # cfg_band4_sclisten l 0xC77D 51069 1 # cfg_band5_start l 0xC780 51072 3 # cfg_band5_end l 0xC783 51075 3 # cfg_band5_duplex l 0xC786 51078 3 # cfg_band5_step l 0xC789 51081 1 # cfg_band5_sctail l 0xC78A 51082 1 # cfg_band5_sclisten l 0xC78B 51083 1 # cfg_band6_start l 0xC78E 51086 3 # cfg_band6_end l 0xC791 51089 3 # cfg_band6_duplex l 0xC794 51092 3 # cfg_band6_step l 0xC797 51095 1 # cfg_band6_sctail l 0xC798 51096 1 # cfg_band6_sclisten l 0xC799 51097 1 # cfg_other_step l 0xC7A5 51109 1 # cfg_other_sctail l 0xC7A6 51110 1 # cfg_other_sclisten l 0xC7A7 51111 1 # menu_5 l 0x50E0 20704 0 # cfg_reject_1 l 0xC7AD 51117 3 # cfg_reject_2 l 0xC7B0 51120 3 # cfg_reject_3 l 0xC7B3 51123 3 # cfg_reject_4 l 0xC7B6 51126 3 # cfg_reject_5 l 0xC7B9 51129 3 # cfg_reject_6 l 0xC7BC 51132 3 # cfg_reject_7 l 0xC7BF 51135 3 # cfg_reject_8 l 0xC7C2 51138 3 # cfg_reject_9 l 0xC7C5 51141 3 # cfg_reject_11 l 0xC885 51333 3 # cfg_reject_12 l 0xC888 51336 3 # cfg_reject_13 l 0xC88B 51339 3 # cfg_reject_14 l 0xC88E 51342 3 # cfg_reject_15 l 0xC891 51345 3 # cfg_reject_16 l 0xC894 51348 3 # cfg_reject_17 l 0xC897 51351 3 # cfg_reject_18 l 0xC89A 51354 3 # cfg_reject_19 l 0xC89D 51357 3 # cfg_shortcut_1 l 0xC7E0 51168 8 # cfg_shortcut_2 l 0xC7E8 51176 8 # cfg_shortcut_3 l 0xC7F0 51184 8 # cfg_shortcut_4 l 0xC7F8 51192 8 # cfg_shortcut_5 l 0xC800 51200 8 # cfg_shortcut_6 l 0xC808 51208 8 # cfg_shortcut_7 l 0xC810 51216 8 # cfg_shortcut_8 l 0xC818 51224 8 # cfg_shortcut_9 l 0xC820 51232 8 # menu_6 l 0x52D0 21200 0 # cfg_mycall_2 l 0xC830 51248 8 # cfg_mycall_3 l 0xC838 51256 8 # cfg_dtmf_1 l 0xC858 51288 8 # cfg_dtmf_2 l 0xC860 51296 8 # cfg_dtmf_3 l 0xC868 51304 8 # cfg_pepa_on l 0xC870 51312 8 # cfg_pepa_off l 0xC878 51320 8 # cfg_alert_vol l 0xC720 50976 1 # menu_7 l 0x5400 21504 0 # tab_func l 0x5963 22883 1 # tab_rep_mic l 0x5952 22866 1 # tab_rep_access l 0x5910 22800 1 # tab_posneg l 0x598D 22925 1 # cfg_ctcss_output_when l 0xC95D 51549 1 # tab_ctcss_out l 0x5931 22833 1 # tab_pass_hide l 0x5A7D 23165 1 # menu_8 l 0x5730 22320 0 # tab_synth_card l 0x59F9 23033 1 # tab_above_below l 0x5A6C 23148 1 # cfg_tx_mix_freq l 0xC955 51541 3 # cfg_tx_vco_multiplier l 0xC959 51545 1 # cfg_rx_vco_multiplier l 0xC958 51544 1 # disaster l 0x5C00 23552 0 # wipe_memories l 0x5C20 23584 0 # sane_defaults l 0x5BF9 23545 0 # wipe_rfctab l 0x5C36 23606 0 # rfc_fill_blanks l 0x5C54 23636 0 # do_reboot l 0x5C4C 23628 0 # menu_9 l 0x5850 22608 0 # ad_tpc l 0xD803 55299 1 # ad_fpm l 0xD804 55300 1 # ad_in7 l 0xD807 55303 1 # num_menu a 0x00C9 201 22599 # tab_off_on_flip l 0x599E 22942 1 # defaults_70cm l 0x5AA2 23202 0 # defaults_2m l 0x5ACF 23247 0 # defaults_6m l 0x5AFC 23292 0 # set_defaults_band l 0x5B29 23337 0 # reset_menurecords l 0x5BCF 23503 0 # check_for_666 l 0x5BEB 23531 0 # end_memories l 0xC716 50966 0 # end_rfctab l 0xC0FE 49406 0 # rfc_fill_one_hole l 0x5C77 23671 0 # unused_mem_step l 0xC01B 49179 1 # cfg_other_start l 0xC79C 51100 3 # cfg_other_end l 0xC79F 51103 3 # unused_cfg_act_onhook l 0xC7C8 51144 8 # unused_cfg_act_offhook l 0xC7D0 51152 8 # cfg_remote_xxxxxxxxx l 0xC8D2 51410 8 # cfg_remote_fooy l 0xC90B 51467 8 # chk_size_nvdata a 0x09B2 2482 49152 # junk l 0xD833 55347 1 # chk_size_stack a 0x27C9 10185 45166 # _text a 0x0000 0 23749 # _etext a 0x5CC5 23749 # _data a 0xC000 49152 6199 # _edata a 0xD837 55351