;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;
;   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

