;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!; ; COPYRIGHT (C) 1994 KEN STATON ; ; ALL RIGHTS RESERVED ; ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!; ; ; MEMORY DEFINITIONS ; SP_INIT .EQU 50H ; 50H thru 7FH, 48 byte stack. ; ; REGISTER BANKS ; ; BANK 0 R0 .EQU 00H R1 .EQU 01H R2 .EQU 02H R3 .EQU 03H R4 .EQU 04H R5 .EQU 05H R6 .EQU 06H R7 .EQU 07H ; R0 & R1 FOR INDIRECTION (POINTERS) ;R0 INDEX (GET & MORSE) ;R1 ISR INDEX (PUT) ; R2 - R7 FOR REGISTER OPS ;R2 UNUSED ;R3 IS QFN ;R4 IS MODE ;R5 IS MORSE DELAY # UNITS ;R6 IS DELAY COUNTER STORAGE ;R7 IS MORSE UNIT DELAY COUNTER ; use register bank 1 as temp memory DBG .EQU 08H DUR .EQU 09H RL .EQU 0AH RH .EQU 0BH PL .EQU 0CH PH .EQU 0DH TMP2 .EQU 0EH TMP1 .EQU 0FH ; use register bank 2 as temp memory SP_INDX .EQU 10H SPSTRT_L .EQU 11H ADDR_L .EQU 11H SPSTRT_H .EQU 12H ADDR_H .EQU 12H SPSTOP_L .EQU 13H SPSTOP_H .EQU 14H BLK_IDX .EQU 15H QFN .EQU 16H PREV .EQU 17H ; use register bank 3 as temp memory CLL .EQU 18H CLH .EQU 19H CSL .EQU 1AH CSH .EQU 1BH ERRNUM .EQU 1CH CSPD .EQU 1DH FSPD .EQU 1EH COUNT .EQU 1FH ; ; NAMED MEMORY LOCATIONS ; P0 .EQU 080H P1 .EQU 090H P2 .EQU 0A0H P3 .EQU 0B0H IEC .EQU 0A8H IPC .EQU 0B8H TMOD .EQU 089H TCON .EQU 088H TH0 .EQU 08CH TL0 .EQU 08AH TH1 .EQU 08DH TL1 .EQU 08BH SCON .EQU 098H SBUF .EQU 099H PCON .EQU 087H DPL .EQU 082H DPH .EQU 083H SP .EQU 081H PSW .EQU 0D0H B .EQU 0F0H ACC .EQU 0E0H ; ; ERROR NUMBERS ; ; ; BIT FLAG DEFINITIONS. ; BIT ADDRESSABLE from 20H thru 2FH, 16 bytes/128 bits ; **AVAILABLE** AS BIT ADDRESSABLE: ; 20H - 23H, 4 bytes = 32 bits ; RXD_FLAG .EQU 00H RX_OVFL .EQU 01H REPLY .EQU 02H ERR_FLAG .EQU 03H SPEAK .EQU 04H CODE .EQU 05H GL .EQU 06H GN .EQU 07H GP .EQU 08H GS .EQU 09H ; ; ; .EQU 031H ; Last bit addressable this allocation DLY_B4 .EQU 024H DLY_AR .EQU 025H ; **AVAILABLE** AS BYTES: ; 26H - 4FH UNUSED ; ; DIRECT ADDRESS DEFINITIONS FOR SFR ; A_ADDR .EQU 0E0H B_ADDR .EQU 0F0H ; ; CONTROL CHARACTER DEFINITIONS ; LF .EQU 0AH CR .EQU 0DH TAB .EQU 09H BS .EQU 08H CTLD .EQU 04H SPC .EQU ' ' DN .EQU '/' ; ; TIMEOUT DEFINITIONS ; ; ; PORT DEFINITIONS ; ; bit defs ACC7 .EQU ACC+7 ACC6 .EQU ACC+6 ACC5 .EQU ACC+5 ACC4 .EQU ACC+4 ACC3 .EQU ACC+3 ACC2 .EQU ACC+2 ACC1 .EQU ACC+1 ACC0 .EQU ACC+0 LED .EQU P3+7 SPK .EQU P1+7 KEY .EQU P3+2 IEC0 .EQU IEC+0 IEC4 .EQU IEC+4 INT_EN .EQU IEC+7 TI .EQU SCON+1 RI .EQU SCON+0 P3B0 .EQU P3+0 P3B1 .EQU P3+1 P3B2 .EQU P3+2 P3B3 .EQU P3+3 P3B4 .EQU P3+4 P3B5 .EQU P3+5 P3B6 .EQU P3+6 P3B7 .EQU P3+7 P1B0 .EQU P1+0 P1B1 .EQU P1+1 P1B2 .EQU P1+2 P1B3 .EQU P1+3 P1B4 .EQU P1+4 P1B5 .EQU P1+5 P1B6 .EQU P1+6 P1B7 .EQU P1+7 ; ; CONSTANTS ; TRUE .EQU 1 FALSE .EQU 0 YES .EQU 1 NO .EQU 0 ; ; The following indexes are used in the spoken menu ; and for subset membership checks... ; IDX_A .EQU 0 IDX_B .EQU 1 IDX_C .EQU 2 IDX_D .EQU 3 IDX_E .EQU 4 IDX_F .EQU 5 IDX_G .EQU 6 IDX_H .EQU 7 IDX_I .EQU 8 IDX_J .EQU 9 IDX_K .EQU 10 IDX_L .EQU 11 IDX_M .EQU 12 IDX_N .EQU 13 IDX_O .EQU 14 IDX_P .EQU 15 IDX_Q .EQU 16 IDX_R .EQU 17 IDX_S .EQU 18 IDX_T .EQU 19 IDX_U .EQU 20 IDX_V .EQU 21 IDX_W .EQU 22 IDX_X .EQU 23 IDX_Y .EQU 24 IDX_Z .EQU 25 IDX_1 .EQU 26 IDX_2 .EQU 27 IDX_3 .EQU 28 IDX_4 .EQU 29 IDX_5 .EQU 30 IDX_6 .EQU 31 IDX_7 .EQU 32 IDX_8 .EQU 33 IDX_9 .EQU 34 IDX_0 .EQU 35 IDX_PER .EQU 36 IDX_COM .EQU 37 IDX_QM .EQU 38 IDX_DN .EQU 39 IDX_SK .EQU 40 IDX_BT .EQU 41 IDX_AR .EQU 42 IDX_KN .EQU 43 ; NOT part of test SETSIZE .EQU 43 ; excludes KN, since counts from 0 PA1 .EQU 0FEH ; 0FEH is 1mS pause PA10 .EQU 0FDH ; 0FDH is 10mS pause PA100 .EQU 0FCH ; 0FCH is 100mS pause PA300 .EQU 0FBH ; 0FBH is 300mS pause PA500 .EQU 0FAH ; 0FAH is 500mS pause QSECDLY .EQU 250 ; 250 * 1mS ; ; 6.0 MHz parameters... ; ONE_MS .EQU 250 ; 24 cycle instruction loop at 6Mhz = 4 uS ; 4 uS * 250 = 1.0 mS EIGTH_MS .EQU 31 ; 4 uS * 31 = 124 uS = 1/8 mS ; less 1 for moves SP_DLY .EQU 6 ; empirically set ; ; 5 wpm = 240mS/dit, 13 wpm = 92mS/dit, 20 wpm = 60mS/dit ; 16 wpm = 75mS/dit, 18 wpm = 67mS/dit, 23 wpm = 52mS/dit ; ; The following durations are for dits (elements) in mS. ; Note that at 500Hz, one cycle is 2mS, so these numbers are ; divided by 2 before they are used to generate tone. ; WPM5 .EQU 240 WPM13 .EQU 92 WPM16 .EQU 75 WPM18 .EQU 68 WPM20 .EQU 60 WPM23 .EQU 52 ; ; The following durations are for cspd delays in word ; and character delays. They are in mS, but must be ; divided by 2 for the delay counter, since the input ; is limited to 255 mS. ; WPM2 .EQU 509 ; mS / 2 = 254 WPM9 .EQU 132 ; mS / 2 = 66 WMP16 .EQU 75 ; mS / 2 = 37 ; ; The following durations are for speech delays ; DB -> delay before ; DA -> delay after ; in 4 mS units ; WPM5DB .EQU 125 ; 0.5 sec WPM5DA .EQU 62 ; 0.25 sec WPM13DB .EQU 100 ; 0.4 sec WPM13DA .EQU 50 ; 0.2 sec WPM20DB .EQU 75 ; 0.3 sec WPM20DA .EQU 37 ; 0.15 sec ; ; HALFBLK .EQU 32 ; MUST MATCH BLK_SIZE DEFINED IN ADPCM DC .EQU 80H ; DAC MID-POINT = DC ABS_DC .EQU 128 REL_DC .EQU 0 DEBOUNCE .EQU 250 ; 6uS * 50 = 1.5mS NUL .EQU 0 EXIT .EQU 0 RAN .EQU 1 SEQ .EQU 2 GRP .EQU 3 TALK_DLY .EQU 20 ;SINE_TBL ; Values & offset divided by 2 to reduce tone volume ; S0 .EQU (128/2)+(128/2) S1 .EQU (177/2)+(128/2) S2 .EQU (218/2)+(128/2) S3 .EQU (245/2)+(128/2) S4 .EQU (255/2)+(128/2) S5 .EQU (245/2)+(128/2) S6 .EQU (218/2)+(128/2) S7 .EQU (177/2)+(128/2) S8 .EQU (128/2)+(128/2) S9 .EQU (79/2)+(128/2) S10 .EQU (38/2)+(128/2) S11 .EQU (11/2)+(128/2) S12 .EQU (1/2)+(128/2) S13 .EQU (11/2)+(128/2) S14 .EQU (38/2)+(128/2) S15 .EQU (79/2)+(128/2) S16 .EQU (128/2)+(128/2) S_END .EQU 0 ;TERMINATOR