	TITLE	VCII-SORCERER
;
;************************************************
;						*
;	MULTI-SORCERER				*
;						*
;************************************************
;
;
	DORG	>0
;
		BSS	1	A		TEMP ONLY
		BSS	1	B		TEMP ONLY
STAT_FL		BSS	1	R2
;	BIT7=AUTH_FL
;	BIT6=AUTH_PREMPT
;	BIT5=TRAP3_PREEMPT
;	BIT4=0 MEANS AUD_FL=8, 1 MEANS AUD_FL=4
;	BIT3=1 MEANS NULL_SUP IS RESERVED
;	BIT2=1 MEANS BACKGROUND IS ACTIVE
;	BIT1=1 MEANS IN HEX MODE
;
;
P28_SAVE	BSS	1	R3
QUE_CNTR	BSS	1	R4
QUE_NDX		BSS	1	R5
		BSS	1	R6
CUR_CMD		BSS	1	R7	USED ONLY IN EXEC
;
REG29		BSS	1	R8
XFER_ADR	BSS	1	R9	DOUBLE REG-USED ONLY IN EXEC
;
SS_CNTR		BSS	1	R10
CTR128		BSS	1	R11
GP_CNT		BSS	1	R12
FRAME_CNTR	BSS	1	R13
EXP_FIRST	BSS	1	R14
AS_CNTR		BSS	1	R15
;
AUDIO_STATE	BSS	1	R16
MEBLA_FLAG	BSS	1	R17
CURR_LC		BSS	1	R18
NDX23		BSS	1	R19
NDX45		BSS	1	R20
SCANCODE	BSS	1	R21
LC_CHANGES	BSS	1	R22
LAST_AUTH	BSS	1	R23
LOCK_FLAG	BSS	1	R24
VIDADR_TMP	BSS	1	R25
GP_TIMER	BSS	1	R26
RATING_TMP	BSS	1	R27	TEMPORARY RATING
;
;
		BSS	1	R28
PTR_28		BSS	1	R29	DOUBLE POINTER
;
		BSS	1	R30
QUE_PTR		BSS	1	R31
;
		BSS	1	R32
QUE_WPTR	BSS	1	R33
;
;
;
;
;
;
;
;
		BSS	1	R34
AUTH_ADR	BSS	1	R35
;
		BSS	1	R36
BACKGROUND_ADR	BSS	1	R37

		BSS	1	R38
GD_RETADR	BSS	1	R39
VALID		BSS	1	R40	SPARE
PROTECTSAV	BSS	1	R41	SPARE
		BSS	1	R42
		BSS	1	R43
		BSS	1	R44
IDCKS		BSS	1	R45
		BSS	1	R46

GD_SADR		BSS	1	R47	REG 2F
GD_TMP		BSS	1	R48	TREATED AS DOUBLE
;
		BSS	1	R49	REG 31
V_TIMER		BSS	1	R50

		BSS	1	R51	REG 33
GP_SRC		BSS	1	R52	DOUBLE FOR INDIRECT ADDRESSING

		BSS	1	R53	REG 35
GP_DST		BSS	1	R54	REG 36

TMP1		BSS	1	R55
TMP2		BSS	1	R56
TMP3		BSS	1	R57
TMP4		BSS	1	R58
TMP5		BSS	1	R59
TMP6		BSS	1	R60
TMP7		BSS	1	R61
;
D_CNTR		BSS	1	R62
D_MASK		BSS	1	R63
;
D_DATA		BSS	8	R64-R71		REG 40
D_IP		BSS	8	R72-R79
D_SP		BSS	8	R80-R87
D_KEY		BSS	8	R88-R95

		BSS	1	R96		REG 60
CUR_ID		BSS	1	R97		ADDRESS HOLDER OF RAM  ID
		BSS	1	R98		REG 62
CUR_HITS	BSS	1	R99		ADD OF WHERE TO RETURN HITS
		BSS	1	R100		REG 64
CUR_AUTH	BSS	1	R101		ADD OF WHERE TO RETURN AUTH'S
;
;
STACK		BSS	1	R102-R127
;
;
;
	DORG	>2000
OUTLATCH	BSS	1
	DORG	>4000
INPUT_PORT	BSS	1
;
;
;
;
;
;
	DORG	>6000
QUE	BSS	204
EXP_QUE	BSS	51		60CC
AUDIO_MP_FLAG
	BSS	1		60FF
;
;
;
;
;

;
;
;
;
;
;
;
;
;			AUTHORIZATION EVEN STUFF
;
C0_1	BSS	1		6100
C0_2	BSS	1
C0_3	BSS	1
C0_4	BSS	4
;
C2_1	BSS	2
C2_3	BSS	1
C2_4	BSS	2
;			AUTHORIZATION EVEN
C2_6	BSS	7
C2_13	BSS	8
C2_21	BSS	3
C2_24	BSS	1
C2_25	BSS	2
C2_27	BSS	1		6121
;
C4_1	BSS	1
C4_2	BSS	1
C4_3	BSS	1
C4_4	BSS	7
C4_11	BSS	8
C4_19	BSS	2		6144
C4_21	BSS	1
C4_22	BSS	2
C4_24	BSS	1
C4_25	BSS	1		614A		
C4_26	BSS	1
C4_27	BSS	3
;
C6_1	BSS	1
C6_2	BSS	5		6150
C6_7	BSS	30		6155
C6_37	BSS	1		6173
;
C2X_1	BSS	27		C2 HITS
C2_HIT	BSS	1		618F
;
;
;
;
;
;
;
;
;
;
;
;
;			AUTHORIZATION ODD STUFF
;
;
C1_1	BSS	7		6190
;
C3_1	BSS	5		6197
;			AUTHORIZATION ODD
C3_6	BSS	7		619C
C3_13	BSS	8		61A3
C3_21	BSS	3		61AB
C3_24	BSS	1		61AE
C3_25	BSS	2		61AF
C3_27	BSS	1		61B1
;
;
C5_1	BSS	6		61B2
C5_7	BSS	15		61B8
C5_22	BSS	8		61C7
;
C7_1	BSS	1		61CF
C7_2	BSS	5		61D0
C7_7	BSS	30		61D5
C7_37	BSS	1		61F3
;
C3X_1	BSS	27		C2 HITS	61F1
;
C3_HIT	BSS	1		620F
;
;
;
;
WORK_AREA
CMD_CNTS
	BSS	8		620D
;
;
	BSS	55		NOT USED 6215
;
C2_1SAV	BSS	5		624C
C2_6SAV	BSS	7		6251
C2_13SAV
	BSS	8		6258
C2_21SAV
	BSS	3		6260

C2_24SAV
	BSS	1		6263
C2_25SAV
	BSS	2		6264
C2_27SAV
	BSS	1		6265
	BSS	14		SPARES	6266
C4_WORK
	BSS	18		6274
	BSS	4		6286
	BSS	2		SPARES	628A
;
;
;
;
;
;
;
;;;;	DORG	>6280
	BSS	32		628C
HEXACC	BSS	15		62AC
;
	BSS	1		62BB
MODADR	BSS	1		62B9
;
	BSS	14		SPARES 62BA
;
;	8 BYTES IN EXP_QUE
;
EXP_SAVE
	BSS	1		62C8
EXP_LCHG
	BSS	1		62C9
EXP_AUTH
	BSS	1		62CA
EXP_RATING
	BSS	1
NUM_FRAME
	BSS	3
EXP_LCHGO
	BSS	1
;
	BSS	5	SPARES
SERVICE_ID
	BSS	1		62D5
MONTH_ID
	BSS	1
LOGIC_CHG
	BSS	1
REAL_ID_4	BSS	1	62D8
REAL_ID_3	BSS	1
REAL_ID_2	BSS	1
REAL_ID_1	BSS	1
REAL_ID_0	BSS	1	62DC
;
	BSS	1		62DE
AVG_SS	BSS	1		62DF

SIG_STRENGTH
	BSS	1
KEYQUE	BSS	8
RVADR	BSS	2
RESET_CNT
	BSS	1
HITS_HI	BSS	1		62EC
HITS_LO	BSS	1
DROPS_HI
	BSS	1
DROPS_LO
	BSS	1
FC_HI	BSS	1		REGULAR HIT COUNTER??
FC_LO	BSS	1
WORSTIDLE_HI
	BSS	1
WORSTIDLE_LO
	BSS	1
GL_0	BSS	1
GL_1	BSS	1
GL_2	BSS	1
GL_3	BSS	1
GL_4	BSS	1
TZONE	BSS	1		630A
CUR_STACK
	BSS	1
RATING_CEIL
	BSS	1
CUR_RATING
	BSS	1
RATING_PW
	BSS	8		630E
	BSS	1	SPARE
KEY_SELECTOR
	BSS	1
I_FLAG	BSS	1
MENU_FLAG
	BSS	1
CUR_SUKY
	BSS	1
CNTR_6	BSS	1	COUNTER USED IN SETUP6
;			SHIFT_AREA
SAVE_AREA
	BSS	128		631C
;
;;;;	DORG	>6600
;;;;;;;;;;;;U7SAV	BSS	256
TEMP_AREA
	BSS	56		639C	CHECK ADDRESSES OUT TO HERE
;
;;;;	DORG	>673F
RAM_TOP
;;;;	DORG	>67E5
	BSS	19
ENAB_CMDS_FL
	BSS	1
VER_30_24
	BSS	1
NORMAL_FLAG
	BSS	1
INSTALLED_FL
	BSS	1
PROTECT	BSS	1
XTRA	BSS	1		SPARE
RAMKEY1	BSS	8		CURRENT RUNNNG KEYS
RAMKEY2	BSS	8
RAMKEY3	BSS	8
RAMKEY4	BSS	8
RAM_ID	BSS	4		CURRENT RUNNING ID
NEXTID	BSS	2		CALCULATED ADDR OF NEXT ID FOR AUTOHITS TO USE
;
	DORG	>6400		STORAGE OF AUTHORIZATIONS
;
;
RAM1ID	BSS	4		FOR RAM VIEW PURPOSES ONLY
HITE1	BSS	1
HITO1	BSS	1
AUTH_1	BSS	50
RAM2ID	BSS	4		6438
HITE2	BSS	1
HITO2	BSS	1
AUTH_2	BSS	50
RAM3ID	BSS	4		6470
HITE3	BSS	1
HITO3	BSS	1
AUTH_3	BSS	50
RAM4ID	BSS	4		64A8
HITE4	BSS	1
HITO4	BSS	1
AUTH_4	BSS	50
RAM5ID	BSS	4		64E0
HITE5	BSS	1
HITO5	BSS	1
AUTH_5	BSS	50
RAM6ID	BSS	4		6518
HITE6	BSS	1
HITO6	BSS	1
AUTH_6	BSS	50
RAM7ID	BSS	4		6550
HITE7	BSS	1
HITO7	BSS	1
AUTH_7	BSS	50
RAM8ID	BSS	4		6588
HITE8	BSS	1
HITO8	BSS	1
AUTH_8	BSS	50
RAM9ID	BSS	4		65C0
HITE9	BSS	1
HITO9	BSS	1
AUTH_9	BSS	50
RAMAID	BSS	4		65F8
HITEA	BSS	1
HITOA	BSS	1
AUTH_A	BSS	50
RAMBID	BSS	4		6630		
HITEB	BSS	1
HITOB	BSS	1
AUTH_B	BSS	50
RAMCID	BSS	4		6668
HITEC	BSS	1
HITOC	BSS	1
AUTH_C	BSS	50
RAMDID	BSS	4		66A0
HITED	BSS	1
HITOD	BSS	1
AUTH_D	BSS	50
RAMEID	BSS	4		66D8
HITEE	BSS	1
HITOE	BSS	1
AUTH_E	BSS	50
RAMFID	BSS	4		6710
HITEF	BSS	1
HITOF	BSS	1
AUTH_F	BSS	50
RAMGID	BSS	4		6748
HITEG	BSS	1
HITOG	BSS	1
AUTH_G	BSS	50
ID_SEL	BSS	1		6780	ID NUMBER ENTERED FROM PAD
KMN	BSS	1
AUTOHIT	BSS	1			NZ = ENABLED TO AUTO HIT EACH ID
HIT_FLG	BSS	1
NEXT_KF	BSS	1			NEXT KEY FLAG
INITED	BSS	1			PREVIOUSLY INITIALIZED?
;
;
	ORG	>C000
;
;
	SKIP	4
;
CREATE	MOV	%>FF,A			ASSUME 3.0
	STA	@VER_30_24
	LDA	@>6601
	CMP	%>88,A
	JZ	CSU5			POP-POP INSTALLED, SKIP
	MOV	%1,A			ASSUME 2.4
	STA	@VER_30_24
	LDA	@>67E6			CUR_STACK FOR 2.4
	JZ	CSU2			NOTHING THERE, TRY 3.0
	CMP	%>4D,A			IS IT CORRECT VALUE?
	JZ	CSU4			YES, HAVE 2.4
CSU2	LDA	@>67F2			CUR_STACK FOR 3.0
	JZ	CSU4			NOTHING THERE, ASSUME 2.4
	MOV	%>FF,A			MUST BE 3.0 THEN
	STA	@VER_30_24
CSU4	MOVD	%>611C,GP_SRC
	MOVD	%C2_27,GP_DST
	CALL	REVMOV22
	MOVD	%>617F,GP_SRC
	LDA	VER_30_24
	JPZ	RMF1
	DECD	GP_SRC			CORRECT FOR VER 3.0
RMF1	MOVD	%C3_27,GP_DST
	CALL	REVMOV22
CSU5	CALL	CLR_RAM_PART
	MOV	%1,A
	STA	@ENAB_CMDS_FL
	STA	@NORMAL_FLAG
	MOV	%4,A
	STA	@RATING_CEIL
	MOV	%>FF,A
	STA	@RATING_PW
	MOV	%>AA,A
	STA	@INSTALLED_FL
	BR	RESTART
;
	SKIP	6
XFER_AUTH
	MOV	%>43,A
	STA	@INITED
	CLR	A
	STA	@C2_HIT			CLEAR TWO HIT COUNTERS!!
	STA	@C3_HIT
	MOVD	%AUTH1EVE,GP_SRC
	MOVD	%C2_6,GP_DST
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH1ODD,GP_SRC
	MOVD	%C3_6,GP_DST
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
	MOV	IDCKS,A
	STA	@PROTECT
	MOVD	%UNIT1ID,GP_SRC			FIRST INITIALIZATION
	MOVD	%RAM_ID,GP_DST
	MOV	%4,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C2_HIT,GP_DST
	MOV	%1,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C3_HIT,GP_DST
	MOV	%1,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%KEY01,GP_SRC
	MOVD	%RAMKEY1,GP_DST
	MOV	%32,B				32 KEY NUMBERS
	TRAP	12	(BLOCK_MOVE)
	CLR	A
	STA	@ID_SEL				INDICATE USING ID 0
	STA	@KMN					DITTO
;
;
;	BLOCK 1
	MOVD	%UNIT1ID,GP_SRC
	MOVD	%RAM1ID,GP_DST
	MOV	%6,B				4 ID'S AND 2 HIT COUNTERS
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH1EVE,GP_SRC
	MOVD	%AUTH_1,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 2
	MOVD	%UNIT2ID,GP_SRC
	MOVD	%RAM2ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH2EVE,GP_SRC
	MOVD	%AUTH_2,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 3
	MOVD	%UNIT3ID,GP_SRC
	MOVD	%RAM3ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH3EVE,GP_SRC
	MOVD	%AUTH_3,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 4
	MOVD	%UNIT4ID,GP_SRC
	MOVD	%RAM4ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH4EVE,GP_SRC
	MOVD	%AUTH_4,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 5
	MOVD	%UNIT5ID,GP_SRC
	MOVD	%RAM5ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH5EVE,GP_SRC
	MOVD	%AUTH_5,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 6
	MOVD	%UNIT6ID,GP_SRC
	MOVD	%RAM6ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH6EVE,GP_SRC
	MOVD	%AUTH_6,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 7
	MOVD	%UNIT7ID,GP_SRC
	MOVD	%RAM7ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH7EVE,GP_SRC
	MOVD	%AUTH_7,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 8
	MOVD	%UNIT8ID,GP_SRC
	MOVD	%RAM8ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH8EVE,GP_SRC
	MOVD	%AUTH_8,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK 9
	MOVD	%UNIT9ID,GP_SRC
	MOVD	%RAM9ID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTH9EVE,GP_SRC
	MOVD	%AUTH_9,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK A
	MOVD	%UNITAID,GP_SRC
	MOVD	%RAMAID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHAEVE,GP_SRC
	MOVD	%AUTH_A,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK B
	MOVD	%UNITBID,GP_SRC
	MOVD	%RAMBID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHBEVE,GP_SRC
	MOVD	%AUTH_B,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK C
	MOVD	%UNITCID,GP_SRC
	MOVD	%RAMCID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHCEVE,GP_SRC
	MOVD	%AUTH_C,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK D
	MOVD	%UNITDID,GP_SRC
	MOVD	%RAMDID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHDEVE,GP_SRC
	MOVD	%AUTH_D,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK E
	MOVD	%UNITEID,GP_SRC
	MOVD	%RAMEID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHEEVE,GP_SRC
	MOVD	%AUTH_E,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK F
	MOVD	%UNITFID,GP_SRC
	MOVD	%RAMFID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHFEVE,GP_SRC
	MOVD	%AUTH_F,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
;	BLOCK G
	MOVD	%UNITGID,GP_SRC
	MOVD	%RAMGID,GP_DST
	MOV	%6,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%AUTHGEVE,GP_SRC
	MOVD	%AUTH_G,GP_DST
	MOV	%50,B
	TRAP	12	(BLOCK_MOVE)
;
	BR	RESTART



	SKIP	8
;
REVMOV22
	MOV	%22,B
RM1	LDA	*GP_SRC
	STA	*GP_DST
	DECD	GP_SRC
	DECD	GP_DST
	DJNZ	B,RM1
	RETS
;
	SKIP	3
;
RESTART	DINT
	MOVP	%>40,SCTL0
;
;************************************************
;  						*
;  TRAP 0   RESET ENTRY (HARDWARE RESET)	*
;						*
;************************************************
;
RESET	DINT
	MOV	%2,B
RST1	CLR	A			CLEAR ALL REGS
	STA	@0(B)
	INC	B
	JP	RST1
	MOVP	%>80,IOCNT0
	MOVP	%0,SCTL0
	MOVP	%>40,SCTL0
	MOVP	%>4E,SCTL0
	MOVP	%>14,SCTL0
	MOVP	%>40,SCTL1
	MOVP	%>17,T3DATA
	MOVP	%>8F,ADDR
	MOVP	%>10,P28		VIDEO OFF
	MOVP	%4,APORT		O/O=ON, MUTE AUDIO
	MOVP	%>0C,BPORT
	MOV	%STACK-1,B
	LDSP
;
	LDA	@INITED
	CMP	%>43,A			JUST INITED?
	JZ	FOURTY_3
	CMP	%>44,A
	JNZ	GO_TO_XF_AU		IF NOT 44 THEN INIT WHOLE THING
	LDA	@ID_SEL
	MPY	%>38,A
	ADD	%>64,A
	MOVD	B,CUR_ID
	ADD	%4,B
	JNC	NO_ADJUST1
	INC	A
NO_ADJUST1
	MOVD	B,CUR_HITS
	ADD	%2,B
	JNC	NO_ADJUST2
	INC	A
NO_ADJUST2
	MOVD	B,CUR_AUTH
	JMP	LETS_GO
GO_TO_XF_AU
	BR	XFER_AUTH
;
;IF IT IS 43, THEN I TURNED ON UNINITIALIZED UNIT AND JUST XFERED_AUTH
FOURTY_3
	MOVD	%RAM1ID,CUR_ID		REG HAS ADDRESS OF CUR ID
	MOVD	%AUTH_1,CUR_AUTH	REG HAS ADDRESS OF CUR AUTH
	MOVD	%HITE1,CUR_HITS		REG HAS ADDRESS OF CUR HITS
	MOV	%>44,A
	STA	@INITED			SAY WE IS INITIALZIED COMPLETE
	CLR	A			START WITH 0 KEY SET
	STA	@KMN
	STA	@ID_SEL
LETS_GO
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	LDA	@PROTECT
	MOV	A,PROTECTSAV
	CALL	RST_U7
	MOV	%>0D,A
	TRAP	5	(SND_SLAVE)
	TRAP	7	(RCV_SLAVE)
	OR	%>20,A
	STA	@REAL_ID_4
	TRAP	7	(RCV_SLAVE)
	STA	@REAL_ID_3
	LDA	@RAM_ID+3		WHAT TO TAKE HITS ON
	MOVP	A,P26			STICK IT AWAY
	TRAP	7	(RCV_SLAVE)
	STA	@REAL_ID_2
	TRAP	7	(RCV_SLAVE)
	STA	@REAL_ID_1
	TRAP	7	(RCV_SLAVE)
	STA	@REAL_ID_0
;
	MOVD	%REAL_ID_0,GP_SRC
	MOV	%5,GP_CNT
	MOV	%>FF,IDCKS
SU1A	LDA	*GP_SRC
	MOV	%8,B
SU1B	XOR	A,IDCKS
	AND	%>7F,A
	XOR	A,IDCKS
	RL	A
	RL	IDCKS
	JNC	SU1C
	XOR	%>9A,IDCKS
SU1C	DJNZ	B,SU1B
	DECD	GP_SRC
	DJNZ	GP_CNT,SU1A
	MOV	PROTECTSAV,VALID
	XOR	IDCKS,VALID
RST7GOOD
	MOV	%>AA,A
	CMPA	@INSTALLED_FL
	JZ	RST8
	BR	CREATE			NOT INSTALLED
RST8	MOVD	%QUE,QUE_PTR
	MOVD	%IDLE_SUP,BACKGROUND_ADR	SET IDLE BACKGROUND
	MOV	%>FF,LAST_AUTH
	MOV	%4,AUDIO_STATE		ASSUME STATE FOUR ON STARTUP
	MOV	%>60,A
	STA	@RVADR
	CLR	A
	STA	@RVADR+1
	MOV	%>11,P28_SAVE		VIDEO OFF
	CALL	CLRCMDSTACK
	MOVP	%>BB,IOCNT0
	MOVP	%2,IOCNT1			CLEAR KBD INT, LEAVE DISABLED
;
;
;
SUPERVISOR
	EINT
	MOV	QUE_NDX,B
	LDA	@QUE(B)
	JZ	SUPERVISOR
	CALL	EXECMD
	CLR	A
	MOV	QUE_NDX,B
	STA	@QUE(B)
	ADD	%>33,QUE_NDX
	CMP	%>CC,QUE_NDX
	JNZ	SUPERVISOR
	CLR	QUE_NDX
	JMP	SUPERVISOR
;
	

;************************************************
;						*
;  TRAP1 INT1 COMMAND RECEIVER FROM VCII	*
;						*
;************************************************
;
	SKIP	3
;
TRAP1	PUSH	A
	PUSH	B
	BTJO	%>FF,QUE_CNTR,T1F	ALREADY IN PROGRESS
	BTJOP	%1,P26,T1J
	MOVP	P24,B
	CMP	%>90,B
	JNZ	T1A
	MOVD	%EXP_QUE,QUE_WPTR
	LDA	*QUE_WPTR
	JZ	T1D
	BR	T1M
T1A	MOVD	QUE_PTR,QUE_WPTR
	LDA	*QUE_PTR
	JZ	T1D
	LDA	@DROPS_LO
	DAC	%1,A
	STA	@DROPS_LO
	JNZ	T1B
	LDA	@DROPS_HI
	DAC	%1,A
	STA	@DROPS_HI
T1B	BTJZ	%>40,B,T1M
	SUB	%>33,QUE_PTR
	JC	T1C
	MOV	%>99,QUE_PTR
T1C	MOVD	QUE_PTR,QUE_WPTR
	CLR	A
	STA	*QUE_WPTR
T1D	MOV	B,A
T1E	INC	QUE_WPTR
	STA	*QUE_WPTR
	INC	QUE_CNTR
	BTJZP	%4,P26,T1L
T1F	BTJOP	%1,P26,T1G
	CMP	%50,QUE_CNTR
	JHS	T1M
	MOVP	P24,A
	JMP	T1E
T1G	BTJOP	%2,P26,T1J
	MOV	%>FF,A
	CMP	%>CC,QUE_WPTR
	JL	T1H
	STA	@EXP_QUE
	JMP	T1J
T1H	STA	*QUE_PTR
	ADD	%>33,QUE_PTR
	CMP	%>CC,QUE_PTR
	JNZ	T1J
	CLR	QUE_PTR
T1J	MOVP	P24,A
	JMP	T1K
T1M	MOV	P28_SAVE,B
	AND	%>7F,B
	MOVP	B,P28
	MOV	P28_SAVE,B
	MOVP	B,P28
T1K	CLR	QUE_CNTR
T1L	MOVP	IOCNT0,B
	AND	%>D7,B
	MOVP	B,IOCNT0
	POP	B
	POP	A
	RETI
;
	SKIP	6

;
;************************************************
;						*
;  TRAP3 INT3 VERTICAL SYNC INTERRUPT		*
;						*
;************************************************
;
TRAP3	MOVP	%0,IOCNT1		DISABLE KEYBOARD
	EINT
	PUSH	A
	PUSH	B
	LDA	@EXP_QUE
	MOV	A,EXP_FIRST
	MOVP	P28,A
	BTJZ	%1,A,T3B
	CMP	%120,SS_CNTR
	JZ	T3B
	INC	SS_CNTR			BUMP SIGNAL STRENGTH
T3B	BTJZ	%>20,STAT_FL,T3A	JMP IF TRAP NOT BLOCKED
	BTJO	%>40,STAT_FL,T3X	AUTH_PREEMPT?, EXIT IF TRUE
	DINT				YES, BUMP RESET COUNTER
	LDA	@RESET_CNT
	DAC	%1,A
	STA	@RESET_CNT
T3X	POP	B
	POP	A
	MOVP	%1,IOCNT1		ENABLE KEYBOARD
	RETI
;
	SKIP	3
;	
T3A	OR	%>20,STAT_FL		SET TRAP3_PREEMPT
	MOV	AUDIO_STATE,B
	JZ	ASTATE_0
	DEC	B
	JZ	ASTATE_1
	DEC	B
	JZ	ASTATE_2
	DEC	B
	JNZ	NEW_AS1		FIRST TIME, SET UP NEW
	BR	ASTATE_4
;
	SKIP	2
;
NEW_AS1	CALL	SETUP_NEW
SET_AS1	AND	%>0C,P28_SAVE
	OR	%>51,P28_SAVE		VIDEO OFF
	ORP	%4,APORT		MUTE AUDIO
	CLR	AS_CNTR
	CLR	MEBLA_FLAG
	MOV	%1,AUDIO_STATE		SET STATE 1
	BR	AS_END
;
;
	SKIP	2
;
;
ASTATE_0
	CLR	MEBLA_FLAG		SET "M"
	OR	%>10,P28_SAVE		VIDEO OFF
	RR	A
	JC	AS1A
	BR	AS_END
;
;
;
ASTATE_1
	RR	A
	JC	AS1A
	OR	%>11,P28_SAVE		VIDEO OFF
	CLR	MEBLA_FLAG
	INC	AS_CNTR
	CMP	%30,AS_CNTR
	JL	AS_END
	CALL	SETUP_NEW
	ORP	%6,APORT		TURN VC O/O TO OFF, MUTE AUDIO
	CLR	AUDIO_STATE		SET STATE 0
	BR	AS_END
;
AS1A	CLR	QUE_CNTR
AS1B	CLR	AS_CNTR
	AND	%>2F,P28_SAVE
	OR	%>90,P28_SAVE		VIDEO OFF
	ORP	%4,APORT		MUTE AUDIO
	MOV	%2,AUDIO_STATE		SET STATE 2
	BR	AS_END
;
;
ASTATE_2
	ANDP	%>FD,APORT		TURN O/O TO ON
	CMP	%71,A
	JHS	AS2A
	BTJZ	%>80,STAT_FL,AS2A	AUTH_FL
	CMP	%4,MEBLA_FLAG
	JZ	AS2C1
AS2A	RR	A
	JNC	AS2B
	CLR	AS_CNTR
	JMP	AS2B1
AS2B	INC	AS_CNTR
	CMP	%11,AS_CNTR
	JHS	SET_AS1
	LDA	@EXP_RATING
	CALL	CHK_RATING
	JPZ	AS2B2			CEILING LOWER, NO DISPLAY
	LDA	@NORMAL_FLAG
	JNZ	AS2C
AS2B1	CMP	%4,MEBLA_FLAG
	JZ	AS2C
AS2B2	OR	%>10,P28_SAVE		VIDEO OFF
	JMP	AS_END
AS2C	AND	%>EF,P28_SAVE		VIDEO ON
	JMP	AS_END
;
;	IF HERE, AUTHORIZED
;
AS2C1	AND	%>EF,P28_SAVE		VIDEO ON
	ANDP	%>F9,APORT		AUDIO ON AND O/O TO ON
	MOV	%3,AUDIO_STATE
	CLR	LOCK_FLAG
	JMP	AS_END
;
;
;
;
ASTATE_4
	ANDP	%>FB,BPORT
	ORP	%4,BPORT
	CMP	%81,A
	JHS	AS1B
	BTJZ	%>80,STAT_FL,AS1B	AUTH_FL
;
;
AS_END	DEC	CTR128
	JNZ	ASE_3
	MOV	%128,CTR128
	MOV	SS_CNTR,A
	JZ	ASE_3
	SUB	%70,A			MAKE IN RANGE 0-50 FOR STRENGTH
	JPZ	ASE_2
	MOV	%1,A
ASE_2	STA	@SIG_STRENGTH
	MOV	A,SS_CNTR
	LDA	@AVG_SS
	MOV	A,GP_SRC
	AND	%>F0,A
	MOV	A,B
	LDA	@AVG_SS-1
	MOV	A,GP_SRC-1
	OR	B,A
	SWAP	A
	SUB	A,GP_SRC
	SBB	%0,GP_SRC-1
	ADD	SS_CNTR,GP_SRC
	ADC	%0,GP_SRC-1
	CLR	SS_CNTR
	MOV	GP_SRC,A
	STA	@AVG_SS
	MOV	GP_SRC-1,A
	STA	@AVG_SS-1
ASE_3	LDA	@EXP_RATING
	CALL	CHK_RATING
	JPZ	ASE_4			CEILING LOWER, NO DISPLAY
	LDA	@NORMAL_FLAG
	JZ	ASE_5
	CMP	%2,AUDIO_STATE
	JHS	ASE_6
ASE_4	OR	%>10,P28_SAVE		VIDEO OFF
	JMP	ASE_7
ASE_5	CMP	%4,MEBLA_FLAG
	JNZ	ASE_4
ASE_6	AND	%>EF,P28_SAVE		VIDEO ON
ASE_7	MOV	P28_SAVE,B
	MOVP	B,P28
	MOV	EXP_FIRST,A
	JZ	NXT_FRAME
	LDA	@FC_LO			BUMP GOOD FRAMES
	DAC	%1,A
	STA	@FC_LO
	JNZ	ASE_10
	LDA	@FC_HI
	DAC	%1,A
	STA	@FC_HI
ASE_10	MOV	%8,B
ASE_11	LDA	@EXP_QUE(B)
	STA	@EXP_SAVE-1(B)
	DJNZ	B,ASE_11
	CLR	A
	STA	@EXP_QUE
	LDA	@EXP_RATING
	AND	%7,A
	STA	@CUR_RATING
	LDA	@EXP_AUTH
	AND	%>23,A
	XOR	%>20,A
	CMP	%3,AUDIO_STATE
	JZ	ASE_12
	AND	%>DF,A
ASE_12	MOV	P28_SAVE,B
	AND	%>DC,B
	OR	A,B
	MOV	B,P28_SAVE
	LDA	@EXP_LCHG
	AND	%>80,A
	MOV	A,B
	LDA	@C2_24(B)
	STA	@P24
	STA	@SERVICE_ID
	LDA	@C2_25(B)
	STA	@MONTH_ID
	CMP	%1,FRAME_CNTR
	JZ	ASE_18
	BR	*BACKGROUND_ADR
;
ASE_18	MOV	%>0E,A
	TRAP	5	(SND_SLAVE)
	CLR	B
	LDA	@EXP_AUTH
	BTJZ	%>40,A,ASE_13
	OR	%>80,B
ASE_13	BTJO	%4,A,ASE_14
	OR	%4,B
ASE_14	LDA	@C2_27SAV
	JN	ASE_16
	OR	%1,B
ASE_16	RL	A
	JPZ	ASE_17
	OR	%2,B
ASE_17	MOV	B,A	


	TRAP	5	(SND_SLAVE)
	BR	NF1
;
;
;
NXT_FRAME
	DEC	FRAME_CNTR
	JZ	NF0	
	BR	*BACKGROUND_ADR		EXIT TO BACKGROUND
NF0	LDA	@NUM_FRAME
	INC	A
	STA	@NUM_FRAME
	JNZ	NF1
	LDA	@NUM_FRAME+1
	INC	A
	STA	@NUM_FRAME+1
	JNZ	NF1
	LDA	@NUM_FRAME+2
	INC	A
	STA	@NUM_FRAME+2
NF1	MOV	%4,FRAME_CNTR
	MOV	%>0F,A
	TRAP	5	(SND_SLAVE)
	AND	%>EF,STAT_FL		SET AUD_FL=8
	TRAP	7	(RCV_SLAVE)
	BTJZ	%>10,A,NF2
	OR	%>10,STAT_FL		SET AUD_FL=4
NF2	MOV	CURR_LC,B
	MOV	B,LC_CHANGES
	LDA	@EXP_LCHG
	MOV	A,CURR_LC
	XOR	A,LC_CHANGES
	TSTB
	JZ	NF4
	BTJO	%>1F,LC_CHANGES,NF3
	JMP	NF4
NF3	CALL	CF80C
NF4	MOV	LAST_AUTH,B		GET LAST AUTH TYPE (SUFB)
	LDA	@EXP_AUTH
	AND	%>18,A
	MOV	A,LAST_AUTH		SET AS LAST AUTH
	JNZ	NF8			UFB TYPES
;
;	S TYPE
;
	MOV	LC_CHANGES,A		CURR_LC CHANGED
	JNZ	NF7			YES, START OVER
	TSTB
	JNZ	NF7			LAST AUTH WAS NOT S, START OVER
	BR	*AUTH_ADR		RETURN TO LAST AUTH PC
NF7	CLR	LOCK_FLAG
	BR	AUTH1
;
;	UFB TYPES
;
NF8	OR	%>80,STAT_FL		SET AUTH_FL
	AND	%>BF,STAT_FL		RESET AUTH_PREEMPT
	MOV	P28_SAVE,B
	AND	%>F3,B
	LDA	@EXP_RATING
	BTJZ	%>40,A,NF9
	OR	%8,B			IN CASE AUD_FL=8
	BTJZ	%>10,STAT_FL,NF9	AUD_FL=8
	XOR	%>0C,B			WRONG, OR 4 INSTEAD
NF9	MOV	B,P28_SAVE
	AND	%7,A
	STA	@CUR_RATING
	LDA	@EXP_AUTH
	AND	%>18,A
	CMP	%>18,A
	JNZ	NF10			U OR F
	MOV	%>10,A			B
	TRAP	5	(SND_SLAVE)
	JMP	NF13
NF10	BTJO	%>10,A,NF11
	MOV	%8,A			U
	TRAP	5	(SND_SLAVE)
	JMP	NF13
NF11	MOV	%6,A			F
	TRAP	5	(SND_SLAVE)
	MOVD	%NUM_FRAME,GP_SRC
	MOV	%3,GP_CNT
	TRAP	6	(SND_SLAVE_STR)
NF13	MOV	%4,MEBLA_FLAG
NF14	BR	*BACKGROUND_ADR
;
;
	SKIP	9
;
;
;
;
;
;
;
SETUP_NEW
	CLR	A
	STA	@EXP_LCHG
	STA	@SIG_STRENGTH
	CLR	SS_CNTR			SS COUNTER
	CLR	CURR_LC
	CLR	EXP_FIRST		FIRST BYTE IN EXP FRAME
	MOV	%7,A
	STA	@EXP_RATING
CF80C	AND	%>7F,STAT_FL		RESET AUTH_FL
	BTJO	%4,STAT_FL,SUN2		BACKGROUND BUSY
	MOVD	%NULL_SUP,BACKGROUND_ADR
	JMP	SUN3
SUN2	OR	%8,STAT_FL		REQUEST NULL_SUP
SUN3	MOV	%>20,A
	STA	@C4_22
	STA	@C5_22
	RETS
;
	SKIP	7
;
;
AUTH0	TRAP	15	(EXEC_BACKGROUND)
AUTH1	AND	%>3F,STAT_FL		CLEAR AUTH_FL AND AUTH_PREEMPT
	CLR	MEBLA_FLAG
	MOV	CURR_LC,A
	AND	%>80,A
	MOV	A,NDX23
	MOV	CURR_LC,A
	RL	A
	RL	A
	AND	%>80,A
	MOV	A,NDX45
	MOV	NDX23,B			SAVE C2
	MOV	%27,A
	ADD	A,B
	MOV	B,AUTH_ADR
	MOV	A,B			MOVE C2 TO C2SAV
AUTH2	XCHB	AUTH_ADR
	LDA	@C2_1-1(B)		C2_1-1
	DEC	B
	XCHB	AUTH_ADR
	STA	@C2_1SAV-1(B)		C2_1SAV-1
	DJNZ	B,AUTH2
;
	MOV	NDX45,B			4,5
	LDA	@C4_2(B)		C4_2
	MOV	A,AUTH_ADR
	LDA	@C4_3(B)		C4_3
	MOV	A,AUTH_ADR-1
	MOV	NDX23,B			0,1
	LDA	@C0_2(B)
	CMP	AUTH_ADR,A
	JNZ	AUTHX1
	LDA	@C0_3(B)
	CMP	AUTH_ADR-1,A
	JZ	AUTH3A
AUTHX1	MOV	%>21,LOCK_FLAG		C0 AND C4 DO NOT MATCH
	BR	AUTH0
AUTH3A	LDA	@C2_24SAV
	CMP	AUTH_ADR,A
	JNZ	AUTHX2
	LDA	@C2_25SAV
	CMP	AUTH_ADR-1,A
	JZ	AUTH3
AUTHX2	MOV	%>22,LOCK_FLAG
	BR	AUTH0			C2 AND C4 DO NOT MATCH
AUTH3	LDA	@EXP_LCHGO
	STA	@LOGIC_CHG
	MOV	NDX45,B			4,5
	CMPA	@C4_27(B)		C4_27
	JZ	AUTH6
	MOV	%>23,LOCK_FLAG
	TRAP	15	(EXEC_BACKGROUND)
	BR	AUTH3
AUTH6	LDA	@CUR_RATING
	CALL	CHK_RATING
	JN	AUTH8A			RATING OK
	MOV	%3,MEBLA_FLAG		LOCKOUT DUE TO RATING
	MOV	%>14,LOCK_FLAG		LOCKED OUT
	BR	AUTH0
AUTH8A	LDA	@NORMAL_FLAG
	JNZ	AUTH7			IN TEST MODE, SKIP
	MOV	NDX45,TMP1
	MOV	%7,B
AUTH6A	XCHB	TMP1
	LDA	@C4_11-1(B)		C4_11-1
	MOV	A,TMP2
	DEC	B
	XCHB	TMP1
	LDA	@C2_6SAV-1(B)
	BTJO	TMP2,A,AUTH7		FOUND A BIT ON
	DJNZ	B,AUTH6A
	MOV	%2,MEBLA_FLAG
	MOV	%1,LOCK_FLAG		BLOCKED
	BR	AUTH0			BLOCKED OUT
;
;	AUTHORIZED IF HERE
;

AUTH7	OR	%>C0,STAT_FL		SET AUTH_FL AND AUTH_PREEMPT
	MOV	%4,MEBLA_FLAG
;
	MOV	%2,A
	TRAP	5	(SND_SLAVE)
	MOV	%7,B
	MOV	%>FF,A
PA3	TRAP	5	(SND_SLAVE)
	DJNZ	B,PA3
	EINT
	TRAP	15	(EXEC_BACKGROUND)
;
	LDA	@RAM_ID+3
	MOV	A,D_DATA
	LDA	@RAM_ID+2
	MOV	A,D_DATA+1
	LDA	@RAM_ID+1
	MOV	A,D_DATA+2
	LDA	@RAM_ID
	MOV	A,D_DATA+3
	MOVD	%D_DATA+4,GP_DST
	MOV	NDX23,B			0,1
	MOVD	%C0_4(B),GP_SRC		C0_4
	MOV	%4,B
	LDA	*GP_SRC
	AND	%>0F,A
	STA	@KEY_SELECTOR
	TRAP	12	(BLOCK_MOVE)
	LDA	@KEY_SELECTOR
	MOV	A,B
	AND	%3,B
	MPY	%8,B
	MOVD	%RAMKEY1(B),GP_SRC
	DINT
	TRAP	18	(DECRYPT)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	LDA	@KEY_SELECTOR
	MOV	A,B
	AND	%>0C,B
	RR	B
	RR	B
	MPY	%8,B
	MOVD	%RAMKEY1(B),GP_SRC
	DINT
	TRAP	18	(DECRYPT)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	LDA	@KEY_SELECTOR
	MOV	A,B
	AND	%3,B
	MPY	%8,B
	MOVD	%RAMKEY1(B),GP_SRC
	DINT
	TRAP	18	(DECRYPT)
	MOVD	%D_DATA,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	MOVD	%C2_6SAV,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%7,B
	TRAP	13	(XORKEY)
	MOVD	%C2_13SAV,GP_SRC
	MOVD	%D_DATA,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C4_WORK,GP_SRC
	DINT
	TRAP	18	(DECRYPT)
	MOVD	%D_DATA,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C2_21SAV,GP_SRC
	MOVD	%C4_WORK+4,GP_DST
	MOV	%3,B
	TRAP	13	(XORKEY)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	MOV	NDX45,B
	MOVD	%C4_4(B),GP_SRC
	MOVD	%C4_WORK+8,GP_DST
	MOV	%7,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%D_DATA,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C4_WORK,GP_DST
	MOV	%3,B
	TRAP	13	(XORKEY)
	MOVD	%C4_WORK,GP_SRC
	DINT
	TRAP	18	(DECRYPT)
	MOVD	%D_DATA,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	MOVD	%C4_WORK+8,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%7,B
	TRAP	13	(XORKEY)
;
	MOVD	%C4_WORK+8,GP_DST
	MOVD	%STR80,GP_SRC
	MOV	%7,B
	TRAP	12	(BLOCK_MOVE)

	MOVD	%C4_WORK+8,GP_SRC
	MOVD	%C4_WORK,GP_DST
	MOV	%7,B
	TRAP	13	(XORKEY)
	EINT
	TRAP	15	(EXEC_BACKGROUND)
	MOVD	%C4_WORK,GP_SRC
	MOVD	%D_DATA,GP_DST
	MOV	%8,B
	TRAP	12	(BLOCK_MOVE)
	MOV	%8,B
	MOV	VALID,A
LF0C1	STA	@D_KEY-1(B)
	DJNZ	B,LF0C1
	DINT
	CALL	ENCRYPT
	CLR	A
	MOV	A,D_IP
	MOV	A,D_IP+1
	MOV	A,D_IP+2
	MOVD	%D_DATA,GP_SRC
	MOVD	%C4_WORK+15,GP_DST
	MOV	%11,B
	TRAP	12	(BLOCK_MOVE)
	EINT
	TRAP	15	(EXEC_BACKGROUND)

	MOV	%4,A
	TRAP	5	(SNDSLAVE)
	MOVD	%C4_WORK+8,GP_SRC
	MOV	%18,GP_CNT
	TRAP	6	(SND_SLAVE_STR)
	TRAP	15	(EXEC_BACKGROUND)
;
	MOV	%7,A
	TRAP	5	(SND_SLAVE)
	CLR	B
PA6	TRAP	7	(RCV_SLAVE)
	INC	B
	CMP	%12,B
	JNZ	PA6




;
	LDA	@C2_27SAV
	JNZ	PA8
	MOV	%>D0,A
	STA	@C2_27SAV
PA8	AND	%>BF,STAT_FL		RESET AUTH_PREMPT
	TRAP	15	(EXEC_BACKGROUND)
	TRAP	15	(EXEC_BACKGROUND)
	TRAP	15	(EXEC_BACKGROUND)
AUTH18	MOV	%5,REG29

AUTH20	BTJO	%>80,STAT_FL,AUTH24	SKIP IF AUTH_FL
	MOV	%>24,LOCK_FLAG		AUTH_FL RESET
	BR	AUTH0
AUTH24	MOV	NDX45,B			4,5
	MOV	P28_SAVE,AUTH_ADR
	AND	%>F3,AUTH_ADR
	LDA	@C4_21(B)		C4_21
	BTJZ	%>40,A,AUTH25
	OR	%4,AUTH_ADR
	LDA	@AUDIO_MP_FLAG
	BTJZ	%1,A,AUTH25
	XOR	>0C,AUTH_ADR
AUTH25	MOV	AUTH_ADR,P28_SAVE
	LDA	@NUM_FRAME+2
	CMPA	@C4_26(B)		C4_26 TIME
	JN	AUTH27
	JNZ	AUTH26
	LDA	@NUM_FRAME+1
	CMPA	@C4_25(B)		C4_25 TIME
	JNC	AUTH27
	JNZ	AUTH26
	LDA	@NUM_FRAME
	CMPA	@C4_24(B)		C4_24 TIME
	JC	AUTH26
AUTH27	MOV	%5,A
	TRAP	5	(SND_SLAVE)
	MOVD	%NUM_FRAME,GP_SRC
	MOV	%3,GP_CNT
	TRAP	6	(SND_SLAVE_STR)
	TRAP	15	(EXEC_BACKGROUND)
	CMP	%3,AUDIO_STATE
	JZ	AUTH18
	DEC	REG29
	JNZ	AUTH20
	MOV	%>25,LOCK_FLAG		RETRY EXPIRED
	BR	AUTH0
;
AUTH26	LDA	@C4_22(B)		C4_22
	MOV	A,B
	ADD	%>20,A			SKIP TO NEXT PROGRAM
	AND	%>7F,A
	AND	%>80,B
	OR	B,A
	STA	@EXP_LCHG
	MOV	A,CURR_LC
	BR	AUTH1
;


	SKIP	5
;
;************************************************
;						*
;  TRAP4   KEYBOARD INTERRUPT FROM VCII		*
;						*
;************************************************
;
;
;
;
TRAP4	EINT
	PUSH	A
	PUSH	B
	MOVP	RXBUF,B			GET SCANCODE
	MOV	B,SCANCODE		SAVE LATEST SCAN CODE
	BTJO	%2,STAT_FL,T4X		EXIT IF IN HEX MODE
	LDA	@MENU_FLAG
	SUB	%>11,B
	JL	T4B			TOO LOW
	CMP	%6,B
	JHS	T4B			TOO HIGH
	CMP	%>1,B			SETUP KEY?
	JNZ	T4J			NO, CMD KEY
	CMP	%1,A
	JZ	T4A
	CMP	%9,A
	JZ	T4A
	OR	%1,A
	AND	%>FD,A
	JMP	T4L
T4A	XOR	%8,A			1->9  9->1
	STA	@MENU_FLAG
	MOV	%1,A
	STA	@CUR_SUKY
	JMP	T4M
T4B	OR	%2,A			SET NON-CMD
	STA	@MENU_FLAG
	JMP	T4X
T4J	MOV	%1,A
	STA	@CUR_SUKY
	CLR	A
T4L	STA	@MENU_FLAG
T4M	RL	B
	LDA	@KBDTBL(B)
	MOV	A,BACKGROUND_ADR-1
	LDA	@KBDTBL+1(B)
	MOV	A,BACKGROUND_ADR
	OR	%4,STAT_FL		SET BACKGROUND ACTIVE
T4X	POP	B
	POP	A
	RETI
;
	SKIP	3
;
;
KBDTBL	DATA	HELP_KEY
	DATA	SETUP_KEY
	DATA	VIEW_KEY
	DATA	TEXT_KEY
	DATA	MSG_KEY
	DATA	NEXT_PGM_KEY
;
	SKIP	4
;
;************************************************
;						*
;  TRAP5   SEND BYTE TO U7			*
;						*
;************************************************
;
;
SND_SLAVE
SS1	BTJZP	%>10,APORT,SS2
	JMP	SS1
SS2	STA	@OUTLATCH
	ORP	%1,BPORT
SS3	BTJOP	%>10,APORT,SS4
	JMP	SS3
SS4	ANDP	%>FE,BPORT
	RETS
;
	SKIP	7
;
;************************************************
;						*
;  TRAP6   SEND STRING TO U7			*
;						*
;************************************************
;
SND_SLAVE_STR
	LDA	*GP_SRC
	TRAP	5	(SND_SLAVE)
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	DJNZ	GP_CNT,SND_SLAVE_STR
	RETS
;
	SKIP	3
;
***********************************************
;						*
;  TRAP7   RECEIVE BYTE FROM U7			*
;						*
;************************************************
;
RCV_SLAVE
RS1	BTJZP	%>10,APORT,RS2
	JMP	RS1
RS2	ORP	%1,BPORT
RS3	BTJOP	%>10,APORT,RS4
	JMP	RS3
RS4	LDA	@INPUT_PORT
	ANDP	%>FE,BPORT
	RETS
;
	SKIP	4
;
;************************************************
;						*
;  TRAP8   DISPLAY CHAR IN A TO ADR IN B	*
;						*
;************************************************
;
OUTCHR&ADR
	ANDP	%>7F,APORT
	XCHB	A
	STA	@OUTLATCH
	ORP	%2,BPORT
	MOV	B,A
	STA	@OUTLATCH
	ANDP	%>FD,BPORT
	ORP	%>80,APORT
	RETS
;
	SKIP	2
;
;************************************************
;						*
;  TRAP9   DISPLAY CHAR IN A TO CURRENT ADDRESS	*
;						*
;************************************************
;
OUTCHR	ORP	%2,BPORT
	STA	@OUTLATCH
	ANDP	%>FD,BPORT
	RETS
;
	SKIP	4
;
;************************************************
;						*
;  TRAP10  DISPLAY HEX IN A TO ADR B		*
;						*
;************************************************
;
HEXOUT&ADR
	PUSH	A
	SWAP	A
	CALL	CVTH
	TRAP	8	(OUTCHR&ADR)
	JMP	HXOU1
;
	SKIP	3
;
;
;************************************************
;						*
;  TRAP11  DISPLAY HEX IN A TO CURRNET ADR	*
;						*
;************************************************
;
HEXOUT	PUSH	A
	SWAP	A
	CALL	CVTH
	TRAP	9	(OUTCHR)
HXOU1	POP	A
WRNIB	CALL	CVTH
	TRAP	9	(OUTCHR)
	RETS
;
	SKIP	5
;
;
CVTH	AND	%>0F,A
	ADD	%>20,A
	CMP	%>2A,A
	JNC	CVH1
	SUB	%>2A,A
CVH1	RETS
;
	SKIP	2
;
;
;
OUT_BCD	PUSH	A
	SWAP	A
	AND	%>0F,A
	ADD	%>20,A
	CMP	%>20,A
	JNZ	OBCD2
	MOV	%>2E,A			NULL IF LEADING 0
OBCD2	TRAP	8	(OUTCHR&ADR)
	POP	A
	AND	%>0F,A
	ADD	%>20,A
	TRAP	9	(OUTCHR)
	RETS
;
	SKIP	3
;
;************************************************
;						*
;  TRAP12  MOVE DATA FROM (GP_SRC) TO (GP_DST)	*
;	   USING COUNT IN B			*
;************************************************
;
BLOCK_MOVE
	LDA	*GP_SRC
	STA	*GP_DST
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	INC	GP_DST
	ADC	%0,GP_DST-1
	DJNZ	B,BLOCK_MOVE
	RETS
;
	SKIP	4
;
;************************************************
;						*
;  TRAP13  XOR STRING AT (GP_SRC) WITH (GP_DST)	*
;	   COUNT IN B, STORE AT (GP_DST)	*
;************************************************
;
XORKEY	LDA	*GP_SRC
	MOV	A,TMP1
	LDA	*GP_DST
	XOR	TMP1,A
	STA	*GP_DST
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	INC	GP_DST
	ADC	%0,GP_DST-1
	DJNZ	B,XORKEY
	RETS
;
	SKIP	6
;
;************************************************
;						*
;  TRAP14  SAVE BACKGROUND ADR AND EXIT INTRPT  *
;						*
;************************************************
;
WAIT	POP	BACKGROUND_ADR
	POP	BACKGROUND_ADR-1
	BR	WAIT_RET
;
	SKIP	3
;
;************************************************
;						*
;  TRAP15  SAVE AUTH ADR AND ENTER BACKGROUND	*
;						*
;************************************************
;
EXEC_BACKGROUND
	POP	AUTH_ADR
	POP	AUTH_ADR-1
	BR	*BACKGROUND_ADR
;
	SKIP	7
;
;************************************************
;						*
;  TRAP16  UNPACK STRING AT (GP_SRC) AND DISPLAY*
;	   AT ADR IN B USING COUNT IN GP_CNT	*
;************************************************
;
DSP_STR	POP	GP_SRC
	POP	GP_SRC-1
	LDA	*GP_SRC
	MOV	A,GP_CNT
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	LDA	*GP_SRC
	CMP	%>FF,A
	JZ	DSA1			USE ADRESS ALREADY IN B
	MOV	A,B
DSA1	INC	GP_SRC
	ADC	%0,GP_SRC-1
	CALL	DC_STR_ADR
	BR	*GP_SRC
;
	SKIP	5
;
;
DC_STR_ADR
	XCHB	VIDADR_TMP
	LDA	*GP_SRC
	MOV	A,B
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	LDA	*GP_SRC
	AND	%>F0,A
	RRC	B
	RRC	A
	RRC	B
	RRC	A
	XCHB	A
	XCHB	VIDADR_TMP
	TRAP	8	(OUTCHR&ADR)
	MOV	VIDADR_TMP,A
	JMP	DCS1
DCS0	LDA	*GP_SRC
	MOV	A,B
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	LDA	*GP_SRC
	AND	%>F0,A
	RRC	B
	RRC	A
	RRC	B
	RRC	A
	XCHB	A
	TRAP	9	(OUTCHR)
	MOV	B,A
DCS1	DJNZ	GP_CNT,DCS1B
DCS1A	ADD	%2,GP_SRC		ADJUST RET ADR BY 2
	ADC	%0,GP_SRC-1
	RETS
DCS1B	RR	A
	RR	A
	TRAP	9	(OUTCHR)
	DJNZ	GP_CNT,DCS1C
	JMP	DCS1A			ADJUST BY 2
DCS1C	LDA	*GP_SRC
	MOV	A,B
	AND	%>0F,B
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	LDA	*GP_SRC
	RL	A
	RLC	B
	RL	A
	RLC	B
	MOV	B,A
	TRAP	9	(OUTCHR)
	DJNZ	GP_CNT,DCS1D
	INC	GP_SRC
	ADC	%0,GP_SRC
	RETS
DCS1D	LDA	*GP_SRC
	AND	%>3F,A
	TRAP	9	(OUTCHR)
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	DJNZ	GP_CNT,DCS0
	RETS
;
	SKIP	3
;
;************************************************
;						*
;  TRAP17  CLEAR DISPLAY        		*
;						*
;************************************************
;
CLEAR_DISP
	CLR	B
	MOV	%179,GP_CNT
FILL_DISP
	TRAP	8	(OUTCHR&ADR)
CDIS1	TRAP	9	(OUTCHR)
	DJNZ	GP_CNT,CDIS1
	MOV	%180,B
	MOV	%>0A,A
	TRAP	8	(OUTCHR&ADR)
	MOV	%>10,A
	TRAP	9	(OUTCHR)
	MOV	%>70,A
	TRAP	9	(OUTCHR)
	RETS
;
	SKIP	4
;
;************************************************
;						*
;  TRAP18  DECRYPT DATA IN D_DATA WITH KEY AT	*
;	   (GP_SRC)				*
;************************************************
;
DECRYPT	MOVP	IOCNT0,A
	STA	@I_FLAG
	MOVP	%>80,IOCNT0
	MOVD	%D_KEY,GP_DST
	MOV	%7,B
	TRAP	12	(BLOCK_MOVE)
;
	MOV	%16,D_CNTR
	RL	D_KEY+6
	RRC	D_SP+6
	RL	D_KEY+6
	RRC	D_SP+5
	RL	D_KEY+6
	RRC	D_SP+4
	RL	D_KEY+6
	RRC	D_SP+3
	RL	D_KEY+6
	RRC	D_SP
	RL	D_KEY+6
	RRC	D_SP+1
	RL	D_KEY+6
	RRC	D_SP+2
	RL	D_KEY+6
	RRC	D_SP+6
	RL	D_KEY+5
	RRC	D_SP+5
	RL	D_KEY+5
	RRC	D_SP+4
	RL	D_KEY+5
	RRC	D_SP+3
	RL	D_KEY+5
	RRC	D_SP
	RL	D_KEY+5
	RRC	D_SP+1
	RL	D_KEY+5
	RRC	D_SP+2
	RL	D_KEY+5
	RRC	D_SP+6
	RL	D_KEY+5
	RRC	D_SP+5
	RL	D_KEY+4
	RRC	D_SP+4
	RL	D_KEY+4
	RRC	D_SP+3
	RL	D_KEY+4
	RRC	D_SP
	RL	D_KEY+4
	RRC	D_SP+1
	RL	D_KEY+4
	RRC	D_SP+2
	RL	D_KEY+4
	RRC	D_SP+6
	RL	D_KEY+4
	RRC	D_SP+5
	RL	D_KEY+4
	RRC	D_SP+4
	RL	D_KEY+3
	RRC	D_SP+3
	RL	D_KEY+3
	RRC	D_SP
	RL	D_KEY+3
	RRC	D_SP+1
	RL	D_KEY+3
	RRC	D_SP+2
	RL	D_KEY+3
	RRC	D_SP+6
	RL	D_KEY+3
	RRC	D_SP+5
	RL	D_KEY+3
	RRC	D_SP+4
	RL	D_KEY+3
	RRC	D_SP+3
	RL	D_KEY+2
	RRC	D_SP
	RL	D_KEY+2
	RRC	D_SP+1
	RL	D_KEY+2
	RRC	D_SP+2
	RL	D_KEY+2
	RRC	D_SP+6
	RL	D_KEY+2
	RRC	D_SP+5
	RL	D_KEY+2
	RRC	D_SP+4
	RL	D_KEY+2
	RRC	D_SP+3
	RL	D_KEY+2
	RRC	D_SP
	RL	D_KEY+1
	RRC	D_SP+1
	RL	D_KEY+1
	RRC	D_SP+2
	RL	D_KEY+1
	RRC	D_SP+6
	RL	D_KEY+1
	RRC	D_SP+5
	RL	D_KEY+1
	RRC	D_SP+4
	RL	D_KEY+1
	RRC	D_SP+3
	RL	D_KEY+1
	RRC	D_SP
	RL	D_KEY+1
	RRC	D_SP+1
	RL	D_KEY
	RRC	D_SP+2
	RL	D_KEY
	RRC	D_SP+6
	RL	D_KEY
	RRC	D_SP+5
	RL	D_KEY
	RRC	D_SP+4
	RL	D_KEY
	RRC	D_SP+3
	RL	D_KEY
	RRC	D_SP
	RL	D_KEY
	RRC	D_SP+1
	RL	D_KEY
	RRC	D_SP+2
	MOV	D_SP+3,D_SP+7
	SWAP	D_SP+7
	MOV	%8,B
	MOV	%>40,D_MASK
DECR1	CLR	A
	BTJZ	D_MASK,D_DATA,$+6
	OR	%>80,A
	BTJZ	D_MASK,D_DATA+1,$+6
	OR	%>40,A
	BTJZ	D_MASK,D_DATA+2,$+6
	OR	%>20,A
	BTJZ	D_MASK,D_DATA+3,$+6
	OR	%>10,A
	BTJZ	D_MASK,D_DATA+4,$+6
	OR	%8,A
	BTJZ	D_MASK,D_DATA+5,$+6
	OR	%4,A
	BTJZ	D_MASK,D_DATA+6,$+6
	OR	%2,A
	BTJZ	D_MASK,D_DATA+7,$+6
	OR	%1,A
	STA	@D_IP-1(B)
	RRC	D_MASK
	RRC	D_MASK
	DJNZ	B,DECR1
DECR2	CLR	A
	BTJZ	%4,D_SP+5,$+6
	OR	%>20,A
	BTJZ	%>80,D_SP+4,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+5,$+6
	OR	%8,A
	BTJZ	%1,D_SP+4,$+6
	OR	%4,A
	BTJZ	%>80,D_SP+6,$+6
	OR	%2,A
	BTJZ	%8,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+7
	CLR	A
	BTJZ	%>20,D_SP+6,$+6
	OR	%>20,A
	BTJZ	%1,D_SP+7,$+6
	OR	%>10,A
	BTJZ	%2,D_SP+5,$+6
	OR	%8,A
	BTJZ	%4,D_SP+6,$+6
	OR	%4,A
	BTJZ	%8,D_SP+4,$+6
	OR	%2,A
	BTJZ	%>40,D_SP+5,$+6
	OR	%1,A
	MOV	A,D_KEY+6
	CLR	A
	BTJZ	%2,D_SP+4,$+6
	OR	%>20,A
	BTJZ	%>20,D_SP+4,$+6
	OR	%>10,A
	BTJZ	%>10,D_SP+5,$+6
	OR	%8,A
	BTJZ	%>10,D_SP+6,$+6
	OR	%4,A
	BTJZ	%4,D_SP+7,$+6
	OR	%2,A
	BTJZ	%1,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+5
	CLR	A
	BTJZ	%1,D_SP+5,$+6
	OR	%>20,A
	BTJZ	%2,D_SP+6,$+6
	OR	%>10,A
	BTJZ	%2,D_SP+7,$+6
	OR	%8,A
	BTJZ	%>10,D_SP+4,$+6
	OR	%4,A
	BTJZ	%8,D_SP+5,$+6
	OR	%2,A
	BTJZ	%>40,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+4
	CLR	A
	BTJZ	%8,D_SP+1,$+6
	OR	%>20,A
	BTJZ	%1,D_SP,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+2,$+6
	OR	%8,A
	BTJZ	%>80,D_SP+1,$+6
	OR	%4,A
	BTJZ	%>20,D_SP,$+6
	OR	%2,A
	BTJZ	%2,D_SP+3,$+6
	OR	%1,A
	MOV	A,D_KEY+3
	CLR	A
	BTJZ	%>40,D_SP+2,$+6
	OR	%>20,A
	BTJZ	%>10,D_SP+1,$+6
	OR	%>10,A
	BTJZ	%2,D_SP,$+6
	OR	%8,A
	BTJZ	%>80,D_SP,$+6
	OR	%4,A
	BTJZ	%8,D_SP+2,$+6
	OR	%2,A
	BTJZ	%>10,D_SP,$+6
	OR	%1,A
	MOV	A,D_KEY+2
	CLR	A
	BTJZ	%1,D_SP+1,$+6
	OR	%>20,A
	BTJZ	%8,D_SP,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+1,$+6
	OR	%8,A
	BTJZ	%1,D_SP+3,$+6
	OR	%4,A
	BTJZ	%4,D_SP+2,$+6
	OR	%2,A
	BTJZ	%8,D_SP+3,$+6
	OR	%1,A
	MOV	A,D_KEY+1
	CLR	A
	BTJZ	%>40,D_SP,$+6
	OR	%>20,A
	BTJZ	%4,D_SP+1,$+6
	OR	%>10,A
	BTJZ	%4,D_SP,$+6
	OR	%8,A
	BTJZ	%1,D_SP+2,$+6
	OR	%4,A
	BTJZ	%>80,D_SP+2,$+6
	OR	%2,A
	BTJZ	%>10,D_SP+2,$+6
	OR	%1,A
	MOV	A,D_KEY
	MOV	D_CNTR,B
	LDA	@SHFTTBL(B)
DECR3	AND	%>0F,D_SP+7
	RRC	D_SP+7
	RRC	D_SP+6
	RRC	D_SP+5
	RRC	D_SP+4
	JNC	DECR4
	OR	%8,D_SP+7
DECR4	AND	%>0F,D_SP+3
	RRC	D_SP+3
	RRC	D_SP+2
	RRC	D_SP+1
	RRC	D_SP
	JNC	DECR5
	OR	%8,D_SP+3
DECR5	DJNZ	A,DECR3
	MOVD	D_IP+1,D_DATA+5
	MOVD	D_IP+3,D_DATA+7
	MOV	D_DATA+7,B
	MOV	D_DATA+4,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+7,B
	AND	%>3F,B
	LDA	@S1(B)
	BTJZ	%8,A,$+6
	XOR	%>80,D_IP+6
	BTJZ	%4,A,$+6
	XOR	%>80,D_IP+5
	BTJZ	%2,A,$+6
	XOR	%2,D_IP+5
	BTJZ	%1,A,$+6
	XOR	%2,D_IP+4
	MOV	D_DATA+7,B
	MOV	D_DATA+6,A
	RLC	A
	RLC	B
	XOR	D_KEY+6,B
	AND	%>3F,B
	LDA	@S2(B)
	BTJZ	%8,A,$+6
	XOR	%8,D_IP+6
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%>40,D_IP+7
	BTJZ	%1,A,$+6
	XOR	%>40,D_IP+5
	MOV	D_DATA+6,B
	MOV	D_DATA+7,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+5,B
	AND	%>3F,B
	LDA	@S3(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+5
	BTJZ	%4,A,$+6
	XOR	%1,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%4,D_IP+4
	BTJZ	%1,A,$+6
	XOR	%4,D_IP+7
	MOV	D_DATA+6,B
	MOV	D_DATA+5,A
	RLC	A
	RLC	B
	XOR	D_KEY+4,B
	AND	%>3F,B
	LDA	@S4(B)
	BTJZ	%8,A,$+6
	XOR	%>40,D_IP+4
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+5
	BTJZ	%2,A,$+6
	XOR	%>40,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%>80,D_IP+7
	MOV	D_DATA+5,B
	MOV	D_DATA+6,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+3,B
	AND	%>3F,B
	LDA	@S5(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%4,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%>80,D_IP+4
	BTJZ	%1,A,$+6
	XOR	%>20,D_IP+7
	MOV	D_DATA+5,B
	MOV	D_DATA+4,A
	RLC	A
	RLC	B
	XOR	D_KEY+2,B
	AND	%>3F,B
	LDA	@S6(B)
	BTJZ	%8,A,$+6
	XOR	%>10,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%8,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%>20,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%>20,D_IP+5
	MOV	D_DATA+4,B
	MOV	D_DATA+5,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+1,B
	AND	%>3F,B
	LDA	@S7(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+4
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%4,D_IP+5
	BTJZ	%1,A,$+6
	XOR	%2,D_IP+7
	MOV	D_DATA+4,B
	MOV	D_DATA+7,A
	RLC	A
	RLC	B
	XOR	D_KEY,B
	AND	%>3F,B
	LDA	@S8(B)
	BTJZ	%8,A,$+6
	XOR	%8,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%>20,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%2,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%8,D_IP+5
	CMP	%1,D_CNTR
	JZ	DECR6
	MOVD	D_IP+1,D_KEY+1
	MOVD	D_IP+3,D_KEY+3
	MOVD	D_IP+5,D_IP+1
	MOVD	D_IP+7,D_IP+3
	MOVD	D_KEY+1,D_IP+5
	MOVD	D_KEY+3,D_IP+7
	DEC	D_CNTR
	BR	DECR2
DECR6	MOV	%8,B
	MOV	%1,D_MASK
DECR7	CLR	A
	BTJZ	D_MASK,D_IP+3,$+6
	OR	%>80,A
	BTJZ	D_MASK,D_IP+7,$+6
	OR	%>40,A
	BTJZ	D_MASK,D_IP+2,$+6
	OR	%>20,A
	BTJZ	D_MASK,D_IP+6,$+6
	OR	%>10,A
	BTJZ	D_MASK,D_IP+1,$+6
	OR	%8,A
	BTJZ	D_MASK,D_IP+5,$+6
	OR	%4,A
	BTJZ	D_MASK,D_IP,$+6
	OR	%2,A
	BTJZ	D_MASK,D_IP+4,$+6
	OR	%1,A
	STA	@D_DATA-1(B)
	RL	D_MASK
	DJNZ	B,DECR7
;
	LDA	@I_FLAG
	MOVP	A,IOCNT0
	RETS
;
;
	SKIP	6
;
S1	BYTE	14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1
	BYTE	03,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8
	BYTE	04,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7
	BYTE	15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13
S2	BYTE	15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14
	BYTE	09,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5
	BYTE	00,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2
	BYTE	05,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9
S3	BYTE	10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10
	BYTE	01,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1
	BYTE	13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7
	BYTE	11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12
S4	BYTE	07,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3
	BYTE	01,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9
	BYTE	10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8
	BYTE	15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14
S5	BYTE	2,14,12,11,4,2,1,12,7,4,10,7,11,13,6
	BYTE	1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9
	BYTE	6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8
	BYTE	13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3
S6	BYTE	12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5
	BYTE	0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8
	BYTE	9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10
	BYTE	7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13
S7	BYTE	4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10
	BYTE	3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1
	BYTE	6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10
	BYTE	9,15,5,6,0,8,15,0,14,5,2,9,3,2,12
S8	BYTE	13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4
	BYTE	10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2
	BYTE	7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13
	BYTE	0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11
;
;
;
;
;
;
;
;************************************************
;  END OF TRAPS					*
;************************************************
;




;
;
;
	SKIP	8
;
;
;************************************************
;						*
;  COMMAND EXECUTION ROUTINES			*
;						*
;************************************************
;
;
;
CLRCMDSTACK
	CLR	QUE_NDX
CCS1	MOV	QUE_NDX,B
	LDA	@QUE(B)
	INV	A
	JZ	CCS2
	CALL	EXECMD
CCS2	MOV	QUE_NDX,B
	CLR	A
	STA	@QUE(B)
	ADD	%>33,QUE_NDX
	CMP	%>CC,QUE_NDX
	JNZ	CCS1
	CLR	QUE_NDX
	RETS
;
	SKIP	4
;
EXECMD	LDA	@ENAB_CMDS_FL
	JZ	EXC1			COMMANDS DISABLED
	LDA	@QUE+1(B)
	CMP	%>C0,A
	JHS	EXC1
	AND	%>3F,A
	CMP	%8,A
	JHS	EXC1
	MOV	A,CUR_CMD
	MOV	A,B
	LDA	@CMD_CNTS(B)
	INC	A
	STA	@CMD_CNTS(B)
	MPY	%3,B
	BR	@CMD_TBL(B)
EXC1	RETS
;
	SKIP	3
;
CMD_TBL	BR	CMD_0
	BR	CMD_0
	BR	CMD_2
	BR	CMD_2
	BR	CMD_4
	BR	CMD_4
	BR	CMD_6
	BR	CMD_6
;
	SKIP	4
;
CMD_0	BTJO	%>40,STAT_FL,RETS0	AUTH_PREEMPT
	MOV	CUR_CMD,B
	CLR	A
	BTJZ	%1,B,C0_A
	MOV	%>80,A
C0_A	MOV	A,B
	LDA	@C2_24(B)		SERVICE_ID
	MOV	A,XFER_ADR		TEMP
	LDA	@C2_25(B)		MONTH_ID
	MOV	QUE_NDX,B
	CMPA	@QUE+3(B)
	JNZ	RETS0
	MOV	XFER_ADR,A
	CMPA	@QUE+2(B)
	JNZ	RETS0
	MOV	%7,A			LENGTH
	MOVD	%C0_1,XFER_ADR
	BR	XFER_DATA
RETS0	RETS
;
	SKIP	3
;
CMD_2	MOV	QUE_NDX,B
	LDA	@RAM_ID+2
	CMPA	@QUE+3(B)
	JNZ	RETS2
	LDA	@RAM_ID+1
	CMPA	@QUE+4(B)
	JNZ	RETS2
	LDA	@RAM_ID+3
	CMPA	@QUE+2(B)
	JNZ	RETS2
	LDA	@RAM_ID
	CMPA	@QUE+5(B)
	JNZ	RETS2
	MOV	VALID,A
	JNZ	RETS2
	LDA	@HITS_LO
	DAC	%1,A
	STA	@HITS_LO
	JNZ	C2B
	LDA	@HITS_HI
	DAC	%1,A
	STA	@HITS_HI
C2B	MOV	CUR_CMD,B
	CLR	A
	BTJZ	%1,B,C2A
	ADD	%>80,A
C2A	MOV	A,B
	LDA	@C2_HIT(B)		CHECK FOR HIT MAX
	INC	A
	JZ	C2E
	STA	@C2_HIT(B)
C2E	MOV	%27,A
	MOVD	%C2_1,XFER_ADR
	CALL	XFER_DATA
	LDA	@AUTOHIT		(FF=DISABLED)
	JNZ	RETC2			IF NO AUTO HITS, RETURN
	MOV	%>FF,A			SET HIT_FLAG TO HIT TAKEN
	STA	@HIT_FLG
RETC2	RETS
;
;
;
RETS2	MOV	%27,A
	MOVD	%C2X_1,XFER_ADR
	BR	XFER_DATA
;
	SKIP	5
;
CMD_4	BTJO	%>40,STAT_FL,RETS4	AUTH_PREEMPT?
	MOV	QUE_NDX,B
	LDA	@QUE+2(B)
	CMPA	@SERVICE_ID
	JNZ	RETS4
	LDA	@QUE+3(B)
	CMPA	@MONTH_ID
	JNZ	RETS4
	MOV	VALID,A
	JNZ	RETS4
	MOV	%29,A			LENGTH
	MOVD	%C4_1,XFER_ADR
	BR	XFER_DATA
RETS4	RETS
;
	SKIP	4
;
CMD_6	BTJO	%>40,STAT_FL,RETS4	AUTH_PREEMPT?
	MOV	QUE_NDX,B
	LDA	@QUE+37(B)
	CMPA	@LOGIC_CHG
	JNZ	RETS4
	MOV	%37,A
	MOVD	%C6_1,XFER_ADR
;
;
XFER_DATA
	BTJZ	%1,CUR_CMD,XD1
	ADD	%>80,XFER_ADR
XD1	MOV	A,CUR_CMD		COUNT
	MOV	QUE_NDX,B
	INC	B
	MOVP	%>89,IOCNT0
XD2	LDA	@QUE(B)
	STA	*XFER_ADR
	INC	XFER_ADR
	INC	B
	DJNZ	CUR_CMD,XD2
	MOVP	%>99,IOCNT0
	RETS
;
	SKIP	3
;
;
SET_IDLE_BG
	TRAP	14	(WAIT)
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	BTJZ	%8,STAT_FL,SIB1		NULL_SUP IS NOT REQUESTED
	MOVD	%NULL_SUP,BACKGROUND_ADR
	AND	%>F3,STAT_FL		RESET NS REQ AND BACKGROUND
	JMP	WAIT_RET
SIB1	MOVD	%IDLE_SUP,BACKGROUND_ADR
	AND	%>F9,STAT_FL		RESET BACKGROUND ACTIVE AND IN HEX
	JMP	WAIT_RET
;
;
WAIT_RET
	POP	B
	POP	A
	MOVP	%1,IOCNT1		ENABLE KBD
	AND	%>DF,STAT_FL		RESET TRAP3_PREEMPT
	RETI
;
IDLE_SUP
	LDA	@NEXT_KF		GET NEXT KEY FLAG
	JZ	ANY_HITS
	CLR	A
	STA	@NEXT_KF
	CALL	INCREMENT
	TRAP	16	(DSP_STR)
	BYTE	10,0
	DBE	{NOW USING }
	MOVD	%RAM_ID,GP_SRC
	MOV	%4,GP_CNT
	MOV	%11,B			SCREEN LOCATION
	CALL	HEXOUT_STR_NS
	MOV	%68,V_TIMER
VT22	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	VT22
ANY_HITS
	LDA	@HIT_FLG
	JZ	NO_HIT
	CLR	A
	STA	@HIT_FLG
	CALL	INCREMENT
	TRAP	16	(DSP_STR)
	BYTE	10,0
	DBE	{HIT TAKEN!}
	MOV	%68,V_TIMER
VT11	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	VT11
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
NO_HIT	CALL	DSP_LOCK
	JMP	WAIT_RET
;
INCREMENT
	LDA	@KMN			GET ACTIVE NUMBER
	ADD	%>10,A			INC TO NEXT ID NUMBER
	CALL	AUTOENT			GO GET AND INSTALL NEW SET OF KEYS
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	RETS
;
DSP_LOCK
	MOV	LOCK_FLAG,A
	JNZ	DL1
	MOV	%>0F,A
DL1	MOV	%19,B
	TRAP	8	(OUTCHR&ADR)
	RETS
;
HELP_KEY
	BR	SET_IDLE_BG
TEXT_KEY
	BR	SET_IDLE_BG
MSG_KEY
	BR	SET_IDLE_BG
;
	SKIP	6
;************************************************
;						*
; PROCESS SETUP KEY				*
;						*
;************************************************
;
SETUP_KEY
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	TRAP	14	(WAIT)
	LDA	@MENU_FLAG
	BTJZ	%8,A,SUK0
	BR	SUK0A
SUK0	TRAP	16	(DSP_STR)
	BYTE	140,0
	DBE	{    SETUP MENU 1    }
	DBE	{ 0: DIAGNOSTIC DATA }
	DBE	{ 1: INSTALLATION    }
	DBE	{ 2: UNIT SETTINGS   }
	DBE	{ 3: SET NEW PASSWORD}
	DBE	{ 4: RATING CEILING  }
	DBE	{ 5: NORMAL/TEST MODE}
	JMP	SUK1
;
SUK0A	TRAP	16	(DSP_STR)
	BYTE	160,0
	DBE	{    SETUP MENU 2    }
	DBE	{ 0: SELECT NEW KEYS }
	DBE	{ 1: RAM VIEW        }
	DBE	{ 2: SUBSCRIPTIONS   }
	DBE	{ 3: AUTHORIZATION   }
	DBE	{ 4. MODIFY RAM      }
	DBE	{ 5: AUTO HIT ON/OFF }
	DBE	{ 6: USE NEXT KEYS   }
SUK1	TRAP	14	(WAIT)
;
	MOV	%0,GP_SRC		COUNTER
SUK1A	MOV	GP_SRC,B
	MPY	%20,B
	ADD	%20,B
	LDA	@CUR_SUKY
	CMP	A,GP_SRC
	JZ	SUK1B
	MOV	%>2E,A
	JMP	SUK1C
SUK1B	MOV	%>73,A			BLINKING RIGHT ARROW
SUK1C	TRAP	8	(OUTCHR&ADR)
	INC	GP_SRC
	CMP	%8,GP_SRC
	JNZ	SUK1A
;
	MOV	SCANCODE,B		GET LATEST SCAN CODE
	JN	SUK1			INVALID, SKIP
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	CMP	%>17,B			ENTER KEY
	JNZ	SUK2
	LDA	@CUR_SUKY
	MOV	A,B
	JMP	SUK7			GO EXECUTE
SUK2	CMP	%>1C,B			HIGHER?
	JNZ	SUK4
	LDA	@CUR_SUKY
	MOV	A,B
	INC	B
	CALL	CKMAXSU			GET MAX SETUP # IN A
	CMP	A,B
	JL	SUK2A
	CLR	B
SUK2A	MOV	B,A
	JMP	SUK5
SUK4	CMP	%>1D,B			LOWER?
	JNZ	SUK6
	LDA	@CUR_SUKY
	DEC	A
	JPZ	SUK5
	CALL	CKMAXSU
	DEC	A
SUK5	STA	@CUR_SUKY
	JMP	SUK1
SUK6	CALL	CKMAXSU
	CMP	A,B
	JHS	SUK1
	MOV	B,A
	STA	@CUR_SUKY
SUK7	LDA	@MENU_FLAG
	AND	%8,A
	ADD	A,B
	LDA	@SUTBLHI(B)
	MOV	A,BACKGROUND_ADR-1
	LDA	@SUTBLLO(B)
	MOV	A,BACKGROUND_ADR
SUK9	BR	WAIT_RET
;
	SKIP	3
;
CKMAXSU
	LDA	@MENU_FLAG
	BTJO	%8,A,CKMSU1
	MOV	%6,A
	RETS
CKMSU1	MOV	%7,A
	RETS
;
	SKIP	6
;
;
SUTBLHI	BYTE	SETUP_0/256
	BYTE	SETUP_1/256
	BYTE	SETUP_2/256
	BYTE	SETUP_3/256
	BYTE	SETUP_4/256
	BYTE	SETUP_5/256
	BYTE	0
	BYTE	0
;
	BYTE	SETUP_10/256
	BYTE	SETUP_11/256
	BYTE	SETUP_12/256
	BYTE	SETUP_13/256
	BYTE	SETUP_14/256
	BYTE	SETUP_15/256
	BYTE	SETUP_16/256
	BYTE	0
;
SUTBLLO	BYTE	SETUP_0
	BYTE	SETUP_1
	BYTE	SETUP_2
	BYTE	SETUP_3
	BYTE	SETUP_4
	BYTE	SETUP_5
	BYTE	0
	BYTE	0
;
	BYTE	SETUP_10
	BYTE	SETUP_11
	BYTE	SETUP_12
	BYTE	SETUP_13
	BYTE	SETUP_14
	BYTE	SETUP_15
	BYTE	SETUP_16
	BYTE	0
;

;
;
	SKIP	4
;
;************************************************
;						*
; SETUP 0 DISPLAY DIAGNOSTIC DATA		*
;						*
;************************************************
;
SETUP_0	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	MOV	%>FF,SCANCODE
SU0A	TRAP	14	(WAIT)
	TRAP	16	(DSP_STR)
	BYTE	16,23
	DBE	{DIAGNOSTIC DATA }
	MOV	%>2E,A			BACKGROUND CHAR
	MOV	%80,B
	MOV	%99,GP_CNT
	CALL	FILL_DISP
SU0B	MOVD	%1687,V_TIMER
	MOV	%>FF,SCANCODE		RESET SCAN CODE
SU0C	TRAP	14	(WAIT)
	LDA	@NORMAL_FLAG
	JNZ	SU0C90
	LDA	@VER_30_24
	JPZ	SU0C24
	TRAP	16	(DSP_STR)
	BYTE	4,61
	DBE	{V3.0}
	JMP	SU0C9
SU0C24	TRAP	16	(DSP_STR)
	BYTE	4,61
	DBE	{V2.6}
	JMP	SU0C9
SU0C90	TRAP	16	(DSP_STR)
	BYTE	21,60
	DBE	{V2.0  MULTI-SORCERER }
SU0C9	MOVD	%GL_0,GP_SRC
	MOV	%6,GP_CNT
	MOV	%101,B
	CALL	DSP_HEX_STR_2
	LDA	@CUR_STACK
	MOV	%118,B
	TRAP	10	(HEXOUT&ADR)
	TRAP	14	(WAIT)
	MOVD	%HITS_HI,GP_SRC
	MOV	%8,GP_CNT
	MOV	%121,B
	CALL	DSP_HEX_STR_2
	TRAP	14	(WAIT)
	MOV	CURR_LC,A		LOGIC CHANGE
	MOV	%141,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@LOGIC_CHG
	TRAP	11	(HEXOUT)
	LDA	@RESET_CNT
	MOV	%146,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@MONTH_ID
	MOV	%151,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@SERVICE_ID
	TRAP	11	(HEXOUT)
	MOV	P28_SAVE,A			SYNC CONTROL BYTE
	MOV	%158,B
	TRAP	10	(HEXOUT&ADR)
	TRAP	14	(WAIT)
	MOVP	P28,A
	PUSH	A
	AND	%1,A
	MOV	%161,B
	TRAP	10	(HEXOUT&ADR)
	POP	A
	RRC	A
	MOV	%166,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@EXP_AUTH
	RL	A
	SWAP	A
	AND	%3,A
	MOV	A,B
	LDA	@SUFB(B)
	MOV	%171,B
	TRAP	8	(OUTCHR&ADR)
	MOV	MEBLA_FLAG,B
	LDA	@MEBLA(B)
	TRAP	9	(OUTCHR)
	MOV	%174,B
	LDA	@NUM_FRAME+2
	TRAP	10	(HEXOUT&ADR)
	LDA	@NUM_FRAME+1
	TRAP	11	(HEXOUT)
	LDA	@NUM_FRAME
	TRAP	11	(HEXOUT)
	DECD	V_TIMER
	JNC	SU0G			FINISHED
	MOV	SCANCODE,A
	JP	SU0D			KEY PRESSED
	BR	SU0C
SU0D	MOV	%>FF,SCANCODE		RESET SCAN CODE
	CMP	%>17,A			ENTER KEY?
	JZ	SU0E
	BR	SU0B
SU0E	MOVD	%FC_LO,GP_SRC
	MOV	%6,B
	CLR	A
SU0F	STA	*GP_SRC
	DECD	GP_SRC
	DJNZ	B,SU0F
	MOV	%>FF,A
	STA	@WORSTIDLE_HI
	STA	@WORSTIDLE_LO
	BR	SU0A
SU0G	BR	V0
;
	SKIP	4
;
;
SUFB	BYTE	'SUFB'
MEBLA	BYTE	'MEBLA'
;
	SKIP	2
;
;************************************************
;						*
; SETUP 1 DISPLAY INSTALLATION INFORMATION	*
;						*
;************************************************
;
;
SETUP_1	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	14	(WAIT)
	TRAP	16	(DSP_STR)
	BYTE	8,20
	DBE	{UNIT:   }
	TRAP	16	(DSP_STR)
	BYTE	16,40
	DBE	{SIGNAL LEVEL:   }
	TRAP	16	(DSP_STR)
	BYTE	12,80
	DBE	{SERVICE ID: }
	TRAP	16	(DSP_STR)
	BYTE	8,120
	DBE	{HITS:   }
	TRAP	14	(WAIT)
;

	LDA	@REAL_ID_0
	MOV	%26,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@REAL_ID_1
	TRAP	11	(HEXOUT)
	LDA	@REAL_ID_2
	MOV	%31,B
	TRAP	10	(HEXOUT&ADR)
	LDA	@REAL_ID_3
	TRAP	11	(HEXOUT)
	LDA	@REAL_ID_4
	MOV	%36,B
	TRAP	10	(HEXOUT&ADR)
	MOV	IDCKS,A
	TRAP	11	(HEXOUT)
;
;
SU1D	TRAP	14	(WAIT)
	LDA	@SIG_STRENGTH
	CALL	BIN2BCD
	MOV	%54,B
	TRAP	10	(HEXOUT&ADR)
	MOV	%>37,A			'/'
	TRAP	9	(OUTCHR)
;
	LDA	@AVG_SS
	AND	%>F0,A			LEAVE HIGH 4 BITS
	MOV	A,B
	LDA	@AVG_SS-1
	OR	B,A
	SWAP	A
	CALL	BIN2BCD
	TRAP	11	(HEXOUT)
;
	LDA	@SERVICE_ID
	JNZ	SU1D3
	TRAP	16	(DSP_STR)
	BYTE	4,92
	DBE	{NONE}
	JMP	SU1F
SU1D3	MOV	%92,B
	TRAP	10	(HEXOUT&ADR)
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
	TRAP	9	(OUTCHR)
SU1F	MOV	MEBLA_FLAG,A
	JNZ	SU1G
	TRAP	16	(DSP_STR)
	BYTE	20,100
	DBE	{ NEEDS AUTHORIZATION}
	JMP	SU1G1
SU1G	TRAP	16	(DSP_STR)
	BYTE	20,100
	DBE	{                    }
SU1G1	LDA	HITS_LO
	CALL	BIN2BCD
	MOV	%126,B
	TRAP	10	(HEXOUT&ADR)
	BR	SU1D
;
	SKIP	5
;
;************************************************
;						*
; SETUP 2 DISPLAY UNIT SETTINGS			*
;						*
;************************************************
;
;
SETUP_2	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	MOV	%>FF,SCANCODE
	TRAP	14	(WAIT)
SU2A	TRAP	16	(DSP_STR)
	BYTE	20,0
	DBE	{   AUDIO MODE IS    }
	TRAP	16	(DSP_STR)
	BYTE	40,40
	DBE	{   PRESS 'ENTER'    }
	DBE	{    TO CHANGE       }
	LDA	@AUDIO_MP_FLAG
	BTJO	%1,A,SU2B
	TRAP	16	(DSP_STR)
	BYTE	20,20
	DBE	{      PRIMARY       }
	JMP	SU2D
SU2B	TRAP	16	(DSP_STR)
	BYTE	20,20
	DBE	{     ALTERNATE      }
SU2D	TRAP	14	(WAIT)
	MOV	SCANCODE,B		GET SCAN CODE
	JN	SU2D			NOT THERE
	MOV	%>FF,SCANCODE
	CMP	%>17,B
	JNZ	SU2E
	LDA	@AUDIO_MP_FLAG
	XOR	%1,A
	STA	@AUDIO_MP_FLAG
SU2E	JMP	SU2A


;
;
;
	SKIP	4
;
;************************************************
;						*
; SETUP 3 SET NEW RATING PASSWORD		*
;						*
;************************************************
;
SETUP_3	MOV	%3,V_TIMER
SU3A	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	LDA	@RATING_PW
	JN	SU3F			NO PASSWORD NOW
	TRAP	16	(DSP_STR)
	BYTE	32,0
	DBE	{  ENTER OLD RATING  }
	DBE	{  PASSWORD: }
	TRAP	14	(WAIT)
	CALL	GET_DIGITS
	CALL	CHK_RATING_PW
	JZ	SU3F			SAME AS BEFORE
	TRAP	16	(DSP_STR)
	BYTE	20,120
	DBE	{** WRONG PASSWORD **}
	MOV	%35,GP_TIMER
SU3E	TRAP	14	(WAIT)
	DJNZ	GP_TIMER,SU3E
	DJNZ	V_TIMER,SU3A		RETRY PASSWORD
	BR	SETUP_KEY
SU3F	TRAP	16	(DSP_STR)
	BYTE	32,60
	DBE	{  ENTER NEW RATING  }
	DBE	{  PASSWORD: }
	TRAP	14	(WAIT)
SU3H	CALL	GET_DIGITS
	MOV	%8,B
SU3L	LDA	@KEYQUE-1(B)
	XOR	%5,A
	STA	@RATING_PW-1(B)
	DJNZ	B,SU3L
	BR	SETUP_KEY
;
	SKIP	6
;
;************************************************
;						*
; SETUP 4 SET NEW RATING CEILING		*
;						*
;************************************************
;
SETUP_4	MOV	%3,V_TIMER
SU4A	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	LDA	@RATING_PW
	JN	SU4F			NO PASSWORD NOW
	TRAP	16	(DSP_STR)
	BYTE	12,4
	DBE	{ENTER RATING}
	TRAP	16	(DSP_STR)
	BYTE	12,26
	DBE	{PASSWORD:   }
	TRAP	14	(WAIT)
	CALL	GET_DIGITS
	CALL	CHK_RATING_PW
	JZ	SU4F			SAME AS BEFORE
	MOV	%>21,GP_TIMER
	TRAP	16	(DSP_STR)
	BYTE	20,120
	DBE	{** WRONG PASSWORD **}
SU4E	TRAP	14	(WAIT)
	DJNZ	GP_TIMER,SU4E
	DJNZ	V_TIMER,SU4A		RETRY PASSWORD
SU4F	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	16,162
	DBE	{l, r, OR 'ENTER'}
	TRAP	16	(DSP_STR)
	BYTE	16,40
	DBE	{RATING CEILING: }
	LDA	@RATING_CEIL
SU4G	STA	@RATING_CEIL
SU4H	MOV	%>FF,SCANCODE		RESET SCAN CODE
;
;
;		WAITING FOR SCAN CODE
;
SU4J	LDA	@RATING_CEIL
	MOV	%56,B
	CALL	DSP_RATING
	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	SU4J			NO KEY YET
;
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	CMP	%>17,A			ENTER?
	JZ	SU4L			YES, EXIT
	CMP	%>1C,A			RIGHT ARROW
	JNZ	SU4K
	MOV	%4,AUDIO_STATE
	LDA	@RATING_CEIL
	CMP	%7,A			AT MAX?
	JHS	SU4H			YES
	INC	A			RAISE CEILING
	JMP	SU4G
SU4K	CMP	%>1D,A			LEFT ARROW?
	JNZ	SU4H
	MOV	%4,AUDIO_STATE
	LDA	@RATING_CEIL
	CMP	%1,A
	JZ	SU4H
	DEC	A
	JMP	SU4G
SU4L	BR	SETUP_KEY
;
	SKIP	3
;
;************************************************
;						*
; SETUP 5 TOGGLE TEST/NORMAL MODES		*
;						*
;************************************************
;
SETUP_5	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	MOV	%>FF,SCANCODE
	TRAP	14	(WAIT)
SU5A	LDA	@NORMAL_FLAG
	JZ	SU5B			NORMAL
	CLR	B
	CALL	DSP_TEST
	TRAP	16	(DSP_STR)
	BYTE	16,102
	DBE	{PRESS 'ENTER' TO}
	TRAP	16	(DSP_STR)
	BYTE	20,120
	DBE	{ RESUME NORMAL MODE }
	JMP	SU5C
SU5B	TRAP	16	(DSP_STR)
	BYTE	80,0
	DBE	{  VCII IS SET FOR   }
	DBE	{  NORMAL OPERATION  }
	DBE	{  PRESS 'ENTER' TO  }
	DBE	{CHANGE TO TEST MODE }
SU5C	TRAP	14	(WAIT)
	MOV	SCANCODE,B		GET SCAN CODE
	JN	SU5C			NOT THERE
	CMP	%>17,B			ENTER?
	JNZ	SU5D			NO, EXIT
	LDA	@NORMAL_FLAG
	XOR	%1,A
	AND	%1,A
	STA	@NORMAL_FLAG
	BR	RESTART
SU5D	BR	SETUP_KEY
;
	SKIP	4
;
DSP_TEST
	TRAP	16	(DSP_STR)
	BYTE	100,>FF			USE ADR IN B
	DBE	{  VCII IS NOW IN    }
	DBE	{    TEST MODE       }
	DBE	{THIS MODE SHOULD NOT}
	DBE	{BE USED FOR UNLAWFUL}
	DBE	{VIEWING OF PROGRAMS.}
	RETS
;
	SKIP	2
;
;************************************************
;						*
; SETUP 10 SELECT NEW KEYS			*
;						*
;************************************************
;
SETUP_10
	CLR	B
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16
	BYTE	20,0
	DBE	{PICK AN ID, 0-F     }
TRYA1	TRAP	16
	BYTE	2,20
	DBE	{0 }
	MOVD	%UNIT1ID+1,GP_SRC		1ST ID
	MOV	%3,GP_CNT
	MOV	%22,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,30
	DBE	{  1 }
	MOVD	%UNIT2ID+1,GP_SRC		2ST ID
	MOV	%3,GP_CNT
	MOV	%34,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,40
	DBE	{2 }
	MOVD	%UNIT3ID+1,GP_SRC		3RD ID
	MOV	%3,GP_CNT
	MOV	%42,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,50
	DBE	{  3 }
	MOVD	%UNIT4ID+1,GP_SRC		4TH ID
	MOV	%3,GP_CNT
	MOV	%54,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,60
	DBE	{4 }
	MOVD	%UNIT5ID+1,GP_SRC		5TH ID
	MOV	%3,GP_CNT
	MOV	%62,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,70
	DBE	{  5 }
	MOVD	%UNIT6ID+1,GP_SRC		6TH ID
	MOV	%3,GP_CNT
	MOV	%74,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,80
	DBE	{6 }
	MOVD	%UNIT7ID+1,GP_SRC		7TH ID
	MOV	%3,GP_CNT
	MOV	%82,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,90
	DBE	{  7 }
	MOVD	%UNIT8ID+1,GP_SRC		8TH ID
	MOV	%3,GP_CNT
	MOV	%94,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,100
	DBE	{8 }
	MOVD	%UNIT9ID+1,GP_SRC		9TH ID
	MOV	%3,GP_CNT
	MOV	%102,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,110
	DBE	{  9 }
	MOVD	%UNITAID+1,GP_SRC		10TH ID
	MOV	%3,GP_CNT
	MOV	%114,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,120
	DBE	{A }
	MOVD	%UNITBID+1,GP_SRC		11TH ID
	MOV	%3,GP_CNT
	MOV	%122,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,130
	DBE	{  B }
	MOVD	%UNITCID+1,GP_SRC		12TH ID
	MOV	%3,GP_CNT
	MOV	%134,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,140
	DBE	{C }
	MOVD	%UNITDID+1,GP_SRC		13TH ID
	MOV	%3,GP_CNT
	MOV	%142,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,150
	DBE	{  D }
	MOVD	%UNITEID+1,GP_SRC		14TH ID
	MOV	%3,GP_CNT
	MOV	%154,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	2,160
	DBE	{E }
	MOVD	%UNITFID+1,GP_SRC		15TH ID
	MOV	%3,GP_CNT
	MOV	%162,B
	CALL	HEXOUT_STR_NS
	TRAP	16
	BYTE	4,170
	DBE	{  F }
	MOVD	%UNITGID+1,GP_SRC		16TH ID
	MOV	%3,GP_CNT
	MOV	%174,B
	CALL	HEXOUT_STR_NS
;
;
;
	MOVD	%KMN,GP_SRC			GET LAST "NEW KEY" MENU ENTRY
	MOV	%1,B				ONE BYTE 
	MOV	%18,A				18TH LOCATION ON SCREEN
	CALL	GET_HEX
	LDA	@HEXACC
	CALL	AUTOENT
	BR	SETUP_KEY
;
AUTOENT
	STA	@KMN				STORE FOR DISPLAY PURPOSES
	AND	%>F0,A				MASK
	SWAP	A
	STA	@ID_SEL				STORE KEYBOARD ENTRY
	MPY	%>38,A				X 38 HEX
	ADD	%>64,A
	MOVD	B,CUR_ID
;
;
;;	PUT CURRENT HITS AND AUTHORIZATION BACK
;
SU10X	MOVD	%C2_HIT,GP_SRC
	MOVD	CUR_HITS,GP_DST			GET ADDRESS OF CUR_HITS
	MOV	%1,B				MOVE 1 BYTE OF HITS
	TRAP	12	(BLOCK_MOVE)
;
	MOVD	%C3_HIT,GP_SRC
	MOV	%1,B
	TRAP	12	(BLOCK_MOVE)
;
	MOVD	%C2_6,GP_SRC
	MOVD	CUR_AUTH,GP_DST
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C3_6,GP_SRC
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
;
;	ROUTINE TO PUT NEWLY SELECTED KEYS INTO OPERATION
;
;
	MOVD	%RAM_ID,GP_DST			PUT NEW ID IN ACTIVE HOLDER
	MOVD	CUR_ID,GP_SRC
	MOV	%4,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	GP_SRC,CUR_HITS			SAVE ADD FOR REPLACEMENT
	MOVD	%C2_HIT,GP_DST
	MOV	%1,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C3_HIT,GP_DST
	MOV	%1,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	GP_SRC,CUR_AUTH			SAVE ADD FOR REPLACEMENT
	MOVD	%C2_6,GP_DST
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
	MOVD	%C3_6,GP_DST
	MOV	%22,B
	TRAP	12	(BLOCK_MOVE)
;
;
;	NOW CALCULATE ADDRESS TO GET KEYS FROM
;
	LDA	@ID_SEL				GET KEYBOARD ENTRY
	MPY	%>58,A
	ADD	%>F0,A
	ADD	%>08,B
	JNC	NOINCA
	INC	A
NOINCA	MOVD	B,GP_SRC			PUT AB PAIR IN GP_SRC
	MOVD	%RAMKEY1,GP_DST
	MOV	%32,B				DECIMAL 32 BYTES
	TRAP	12	(BLOCK_MOVE)
	LDA	@RAM_ID+3
	MOVP	A,P26				SET WHAT TO TAKE HITS ON
	RETS
;
	SKIP	4
;
;************************************************
;						*
; SETUP 11 RAM VIEW				*
;						*
;************************************************
;
SETUP_11
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
SU11A	TRAP	14	(WAIT)
	LDA	@RVADR
	MOV	A,GP_SRC-1
	LDA	@RVADR+1
	AND	%>C0,A			MAKE SURE ON BOUNDARY
	MOV	A,GP_SRC
	MOV	%0,B
	MOV	GP_SRC-1,A
	TRAP	10	(HEXOUT&ADR)
	MOV	GP_SRC,A
	TRAP	11	(HEXOUT)
	MOV	%19,B
	MOV	%>2E,A
	TRAP	8	(OUTCHR&ADR)
	MOV	%32,GP_CNT
SU11B	LDA	*GP_SRC
	TRAP	11	(HEXOUT)
	INC	GP_SRC			NO BOUNDARY
	LDA	*GP_SRC
	TRAP	11	(HEXOUT)
	INC	GP_SRC			NO BOUNDARY
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
	DJNZ	GP_CNT,SU11B
	MOV	SCANCODE,A
	JN	SU11A			NO KEY
	LDA	@RVADR
	MOV	A,GP_SRC-1
	LDA	@RVADR+1
	MOV	A,GP_SRC
	MOV	SCANCODE,A
	CMP	%>1C,A			RIGHT ARROW
	JNZ	SU11C
	ADD	%>40,GP_SRC
	ADC	%0,GP_SRC-1
	CMP	%>68,GP_SRC-1
	JNZ	SU11B1			NO WRAP FROM 67C0-6800
	MOVD	%0,GP_SRC
	JMP	SU11F
SU11B1	CMP	%0,GP_SRC-1
	JNZ	SU11F			NO WRAP FROM 0040-0080
	CMP	%>80,GP_SRC
	JNZ	SU11F			NO WRAP
	MOVD	%>6000,GP_SRC
	JMP	SU11F
SU11C	CMP	%>1D,A			LEFT ARROW
	JNZ	SU11G
	SUB	%>40,GP_SRC
	SBB	%0,GP_SRC-1
	CMP	%>5F,GP_SRC-1
	JNZ	SU11C1			NO WRAP FROM 6000-5FC0
	MOVD	%>0040,GP_SRC
	JMP	SU11F
SU11C1	CMP	%>FF,GP_SRC-1
	JNZ	SU11F
	MOVD	%>67C0,GP_SRC
SU11F	MOV	GP_SRC-1,A
	STA	@RVADR
	MOV	GP_SRC,A
	STA	@RVADR+1
	MOV	%>FF,SCANCODE
	BR	SU11A			GO DISPLAY SCREEN
;
SU11G	JMP	SU11F
;
	SKIP	3
;
;************************************************
;						*
; SETUP 12 DISPLAY SUBSCRIPTION INFORMATION	*
;						*
;************************************************
SETUP_12
	MOV	NDX23,TMP6
SU12A	MOV	TMP6,B			2,3
	MOVD	%C2_6+6(B),PTR_28
	CALL	LOOKUP_SVC		LOOKUP CURRENT AUTHORIZATIONS
	MOVD	%TEMP_AREA,PTR_28
SU12C	PUSH	B
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	20,0
	DBE	{ SUBSCRIPTIONS FOR  }
	MOV	%24,GP_DST
	CALL	DSP_MONTH
	POP	B			GET COUNT BACK
	CMP	%0,B			ANY AUTHORIZED?
	JNZ	SU12B
	TRAP	16	(DSP_STR)
	BYTE	12,80
	DBE	{NONE AUTHORIZED }
	JMP	SU12F			WAIT FOR TOGGLE
SU12B	MOV	%40,A
SU12D	STA	@CNTR_6
	MOV	A,B
	LDA	*PTR_28
	JZ	SU12F			ALL DONE, THIS MONTH
	CALL	DSP_SVC
	INC	PTR_28
	ADC	%0,PTR_28-1
	LDA	@CNTR_6
	ADD	%10,A
	CMP	%180,A
	JNZ	SU12D
	LDA	*PTR_28
	JZ	SU12E			EXACTLY RIGHT
	DEC	PTR_28
	SBB	%0,PTR_28-1		CORRECT ADDRESS
	MOV	%170,B			SET ADR
	TRAP	16	(DSP_STR)
	BYTE	8,>FF			USE ADR IN B
	DBE	{--MORE--}
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
;
SU12E	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	SU12E			NO KEY
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	MOV	%1,B			AT LEAST 1 AUTHORIZED
	JMP	SU12C			DO NEXT BLOCK
;
;
SU12F	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	SU12F			NO KEY
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	XOR	%>80,TMP6		OTHER MONTH
	BR	SU12A
;
	SKIP	5
;
DSP_MONTH
	MOV	NDX23,A
	XOR	TMP6,A
	JNZ	DSPM1
	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{THIS}
	JMP	DSPM3
DSPM1	MOV	NDX23,B
	LDA	@C2_25(B)		GET MONTH CODE
	XOR	%>80,B
	PUSH	A
	LDA	@C2_25(B)
	POP	B
	CMP	A,B
	JN	DSPM2
	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{LAST}
	JMP	DSPM3
DSPM2	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{NEXT}
DSPM3	MOV	GP_DST,B
	ADD	%4,B
	TRAP	16	(DSP_STR)
	BYTE	8,>FF
	DBE	{ MONTH: }
	RETS
;
;
	SKIP	5
;
;************************************************
;						*
; SETUP 13 DISPLAY CURRENT AUTHORIZATION	*
;						*
;************************************************
;
SETUP_13
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
SU13A	MOV	%0,GP_DST
	MOV	NDX23,GP_DST-1
SU13C	MOV	NDX23,A
	XOR	GP_DST-1,A
	JNZ	SU13D
	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{THIS}
	JMP	SU13F
SU13D	MOV	NDX23,B
	LDA	@C2_25(B)			GET MONTH CODE
	XOR	%>80,B
	PUSH	A
	LDA	@C2_25(B)
	POP	B
	CMP	A,B
	JN	SU13E
	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{LAST}
	JMP	SU13F
SU13E	MOV	GP_DST,B
	TRAP	16	(DSP_STR)
	BYTE	4,>FF			USE ADR IN B
	DBE	{NEXT}
SU13F	MOV	GP_DST,B
	ADD	%4,B
	TRAP	16	(DSP_STR)
	BYTE	8,>FF
	DBE	{ MONTH: }
;
	MOV	GP_DST-1,B
	MOVD	%C2_24(B),GP_SRC
	MOV	%2,GP_CNT
	MOV	GP_DST,B
	ADD	%12,B
	CALL	HEXOUT_STR_NS
;
	MOV	GP_DST-1,B
	MOVD	%C2_HIT(B),GP_SRC
	MOV	%1,GP_CNT
	MOV	GP_DST,B
	ADD	%18,B
	CALL	HEXOUT_STR_NS
;
	MOV	GP_DST-1,B
	MOVD	%C2_6(B),GP_SRC
	MOV	%7,GP_CNT
	MOV	GP_DST,B
	ADD	%21,B
	CALL	HEXOUT_STR_NS
;
	MOV	GP_DST-1,B
	MOVD	%C2_13(B),GP_SRC
	MOV	GP_DST,B
	ADD	%41,B
	MOV	%8,GP_CNT
	CALL	HEXOUT_STR_NS
;
	MOV	GP_DST-1,B
	MOVD	%C2_21(B),GP_SRC
	MOV	GP_DST,B
	ADD	%61,B
	MOV	%3,GP_CNT
	CALL	HEXOUT_STR_NS
;
	ADD	%100,GP_DST
	XOR	%>80,GP_DST-1		TOGGLE TO NEXT OR LAST
	CMP	%100,GP_DST
	JNZ	SU13H
	BR	SU13C
SU13H	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	SU13J			NO KEY PRESSED
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	CMP	%>17,A			ENTER?
	JZ	SU13K			YES, EXIT
	CMP	%>0A,A			CANCEL KEY?
	JNZ	SU13J
	CLR	A
	STA	@C2_HIT			CLEAR TWO HIT COUNTERS!!
	STA	@C3_HIT
SU13J	BR	SU13A
SU13K	BR	SETUP_KEY
;
	SKIP	4
;
HEXOUT_STR_NS
	LDA	*GP_SRC
	TRAP	10	(HEXOUT&ADR)
HSNS1	DJNZ	GP_CNT,HSNS2
	RETS
HSNS2	INC	GP_SRC
	ADC	%0,GP_SRC-1
	LDA	*GP_SRC
	TRAP	11	(HEXOUT)
	JMP	HSNS1
;
	SKIP	5
;
;************************************************
;						*
; SETUP 14 MODIFY RAM				*
;						*
;************************************************
;
SETUP_14
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	100,0
	DBE	{    DIG THIS!!!     }
	DBE	{YOU GONNA SCREW THIS}
	DBE	{THING UP ROYALLY IF }
	DBE	{YOU GO ANY FURTHER, }
	DBE	{DIPSTICK.           }
	CALL	GET_DIGITS
	LDA	@KEYQUE
	CMP	%1,A
	JNZ	SU14A			NOT VALID
	LDA	@KEYQUE+1
	CMP	%1,A
	JNZ	SU14A
	LDA	@KEYQUE+2
	CMP	%1,A
	JNZ	SU14A
	LDA	@KEYQUE+3
	CMP	%1,A
	JNZ	SU14B
	LDA	@KEYQUE+4
	CMP	%1,A
	JNZ	SU14B
	BR	XFER_AUTH
SU14A	BR	SETUP_KEY
SU14B	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	100,0
	DBE	{CURRENT ADDRESS XXXX}
	DBE	{KEY IN NEW ADDRESS  }
	DBE	{THEN PRESS ENTER    }
	DBE	{HIT CANCEL TO RETURN}
	DBE	{TO MAIN SETUP MENU. }
	MOVD	%MODADR-1,GP_SRC	CURRENT MODIFY ADDRESS
	MOV	%2,B			TWO BYTES
	MOV	%16,A			SCREEN ADDRESS
	CALL	GET_HEX
	LDA	@HEXACC
	STA	@MODADR-1
	LDA	@HEXACC+1
	STA	@MODADR
	MOV	%>2E,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	12,20
	DBE	{ADR  DATA   }
SU14C	MOVD	%MODADR-1,GP_SRC
	MOV	%2,GP_CNT
	MOV	%40,B
	CALL	HEXOUT_STR_NS
	LDA	@MODADR-1
	MOV	A,GP_SRC-1
	LDA	@MODADR
	MOV	A,GP_SRC
	MOV	%1,B			ONE BYTE
	MOV	%46,A			ADDRESS 46
	CALL	GET_HEX
	LDA	@MODADR
	MOV	A,GP_DST
	LDA	@MODADR-1
	MOV	A,GP_DST-1
	LDA	@HEXACC
	STA	*GP_DST
	ADD	GP_SRC,GP_DST
	ADC	GP_SRC-1,GP_DST-1
	MOV	GP_DST-1,A
	STA	@MODADR-1
	MOV	GP_DST,A
	STA	@MODADR
	JMP	SU14C
;
	SKIP	5
;
;************************************************
;						*
; SETUP 15 AUTO HIT ENABLE/DISABLE		*
;						*
;************************************************
;
SETUP_15
	LDA	@AUTOHIT			GET BYTE, 0 OR NOT
	JZ	DISABLE
	CLR	A
	STA	@AUTOHIT
	MOV	%>0F,A				NO VISABLLE BLACK BLOCKS
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	20,0
	DBE	{  AUTOHITS ENABLED  }
	BR	TIME
DISABLE
	MOV	%>FF,A				SETUP FOR DISABLE
	STA	@AUTOHIT
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	TRAP	16	(DSP_STR)
	BYTE	20,0
	DBE	{  AUTOHITS DISABLED }
TIME
	MOV	%68,V_TIMER
VT1	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	VT1
	BR	SET_IDLE_BG		EXIT BACKGROUND
;
;**********************************
;
;	INCREMENT TO NEXT KEY SET
;
;**********************************
;
SETUP_16
	MOV	%>FF,A			SET NEXT KEY FLAG TO INCREMENT
	STA	@NEXT_KF
	TRAP	16	(DSP_STR)
	BYTE	16,163
	DBE	{KEYS INCREMENTED}
	MOV	%68,V_TIMER
VVXX	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	VVXX
	BR	SET_IDLE_BG		EXIT BACKGROUND
;
;
;
	SKIP	4
;
CLR_RAM_PART
	MOVD	%RAM_TOP-WORK_AREA,GP_DST
	MOVD	%RAM_TOP,GP_SRC
	CLR	A
CRP1	STA	*GP_SRC
	DECD	GP_SRC
	DECD	GP_DST
	JC	CRP1
	RETS
;
	SKIP	3
;
CLR_MSGS_24
	MOV	%4,B
	MOVD	%>6391,GP_SRC
CM24A	MOV	B,A
	STA	@>6597(B)
	SUB	%2,A
	STA	@>6593(B)
	DECD	GP_SRC
	CLR	A
	STA	*GP_SRC
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	INV	A
	STA	*GP_SRC
	ADD	%129,GP_SRC
	ADC	%0,GP_SRC-1
	DJNZ	B,CM24A
	CLR	A
	STA	@>659C
	MOV	%3,A
	STA	@>659D
	RETS
;
	SKIP	5
;
CLR_MSGS_30
	MOV	%4,B
	MOVD	%>63BB,GP_SRC		 MSG_AREA
CM30A	MOV	B,A
	STA	@>65C1(B)		 R6597
	SUB	%2,A
	STA	@>65BD(B)		 R6593
	DECD	GP_SRC
	CLR	A
	STA	*GP_SRC
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	INV	A
	STA	*GP_SRC
	ADD	%129,GP_SRC
	ADC	%0,GP_SRC-1
	DJNZ	B,CM30A
	CLR	A
	STA	@>65C6			 R659C
	MOV	%3,A
	STA	@>65C7			 R659D
	RETS
;
	SKIP	7
;
MOVE_BACK
	MOVD	%C2_6,GP_SRC
	MOVD	%>6107,GP_DST
	CALL	MOV22
	MOVD	%C3_6,GP_SRC
	MOVD	%>616A,GP_DST
	LDA	@VER_30_24
	JPZ	MOV22
	DECD	GP_DST			CORRECT FOR 3.0
MOV22	MOV	%22,B
M22A	LDA	*GP_SRC
	STA	*GP_DST
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	INC	GP_DST
	ADC	%0,GP_DST-1
	DJNZ	B,M22A
	RETS
;
	SKIP	3
;
;
BIN2BCD	MOV	%8,GP_CNT
	MOV	%0,GP_SRC
B2B1	RLC	A
	DAC	GP_SRC,GP_SRC
	DJNZ	GP_CNT,B2B1
	MOV	GP_SRC,A
	RETS
;
	SKIP	6
;
DSP_HEX_STR_2
	MOV	%2,TMP2
DSP_HEX_STR
	MOV	TMP2,TMP3
	LDA	*GP_SRC
	TRAP	10	(HEXOUT&ADR)
DHS2C	DEC	TMP3
	JNZ	DHS2D
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
	MOV	TMP2,TMP3
DHS2D	INC	GP_SRC
	ADC	%0,GP_SRC-1
	DEC	GP_CNT
	JZ	DHS2E
	LDA	*GP_SRC
	TRAP	11	(HEXOUT)
	JMP	DHS2C
DHS2E	RETS
;
	SKIP	3
;
NULL_SUP
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
NS1	TRAP	14	(WAIT)
	CALL	DSP_LOCK
	MOV	AUDIO_STATE,A
	CMP	%3,A
	JZ	V3
	CMP	%2,A
	JNZ	NS1
	CMP	%2,MEBLA_FLAG
	JNZ	NS1
NOSUBS	TRAP	16	(DSP_STR)
	BYTE	16,142
	DBE	{NO SUBSCRIPTION }
	TRAP	16	(DSP_STR)
	BYTE	16,162
	DBE	{FOR THIS PROGRAM}
	MOV	%>78,V_TIMER
NSU1	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	NSU1
	BR	SET_IDLE_BG
;
	SKIP	4
;
;
VIEW_KEY
V0	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	TRAP	14	(WAIT)
	JMP	V3			TMP+++

	MOV	AUDIO_STATE,A
	CMP	%3,A
	JZ	V3
	CMP	%2,A
	JNZ	V1
	CMP	%2,MEBLA_FLAG
	JZ	NOSUBS
V1	TRAP	16	(DSP_STR)
	BYTE	16,143
	DBE	{INFORMATION IS  }
	TRAP	16	(DSP_STR)
	BYTE	16,163
	DBE	{NOT  AVAILABLE  }
	MOV	%68,V_TIMER
V2	TRAP	14	(WAIT)
	DEC	V_TIMER
	JC	V2
	BR	SET_IDLE_BG		EXIT BACKGROUND
V3	TRAP	14	(WAIT)
	LDA	@EXP_LCHG
	RL	A
	RL	A
	AND	%>80,A
	MOV	A,B			4,5
	LDA	@EXP_LCHGO
	CMPA	@C4_27(B)		C4_27
	JNZ	V3
	CMPA	@C6_37(B)		C6_37
	JNZ	V3
	LDA	@C4_21(B)		C4_21
	BTJZ	%>10,A,V4
	PUSH	B
	TRAP	16	(DSP_STR)
	BYTE	12,105
	DBE	{PREVIEW OF: }
	POP	B
V4	CALL	DSP_PRG_INFO
;;;;;	MOV	RATING_TMP,A
;;;;;	CALL	CHK_RATING
;;;;;	JN	V4A
;;;;;	BR	SET_IDLE_BG		EXIT BACKGROUND
;;;;;V4A
;;;;;	CLR	BLANK_FLAG
	MOV	%90,V_TIMER
V5	TRAP	14	(WAIT)
	LDA	@EXP_LCHG
	RL	A
	RL	A
	AND	%>80,A
	MOV	A,B
	LDA	@C6_2(B)
;;;;;;;	BTJZ	%1,A,V6
	TRAP	16	(DSP_STR)
	BYTE	12,160
	DBE	{ TIME LEFT: }
	CALL	DSP_TIME
V6	DJNZ	V_TIMER,V5
	BR	SET_IDLE_BG		EXIT BACKGROUND
;
	SKIP	4	
;
NEXT_PGM_KEY
	MOV	%>0F,A
	TRAP	17	(CLEAR_DISP)
	TRAP	14	(WAIT)
	JMP	NP0			TMP+++

	MOV	AUDIO_STATE,A
	CMP	%3,A
	JZ	NP0
	BR	V1			NOT AVAILABLE
NP0	MOV	%>90,V_TIMER
NP1	TRAP	14	(WAIT)
	MOV	NDX45,B
	LDA	@C4_22(B)		C4_22
	ADD	%>20,A
	RL	A
	RL	A
	AND	%>80,A
	MOV	A,B
	LDA	@EXP_LCHGO
	CMPA	@C4_27(B)		C4_27
	JNZ	NP1
	CMPA	@C6_37(B)		C6_37
	JNZ	NP1
	LDA	@C4_21(B)		C4_21
	BTJZ	%>10,A,NP2
	PUSH	B
	TRAP	16	(DSP_STR)
	BYTE	12,105
	DBE	{PREVIEW OF: }
	POP	B
NP2	CALL	DSP_PRG_INFO
;;;;;	MOV	RATING_TMP,A
;;;;;	CALL	CHK_RATING
;;;;;	JN	NP2A
;;;;;	BR	SET_IDLE_BG		EXIT BACKGROUND
;;;;;NP2A
;;;;;	CLR	BLANK_FLAG
NP3	TRAP	14	(WAIT)
	LDA	@EXP_LCHG
	RL	A
	RL	A
	AND	%>80,A
	MOV	A,B
	LDA	@C6_2(B)		C6_2
;;;;;;	BTJZ	%1,A,NP4
	TRAP	16	(DSP_STR)
	BYTE	12,160
	DBE	{ STARTS IN: }
	CALL	DSP_TIME
NP4	DJNZ	V_TIMER,NP3
	BR	SET_IDLE_BG
;
	SKIP	5
;
DSP_PRG_INFO
	MOVD	%C6_7(B),GP_SRC		C6_7
	MOVD	%C4_4+6(B),PTR_28
	LDA	@C4_21(B)		C4_21
	AND	%7,A
	MOV	A,RATING_TMP
	CLR	B
	MOV	%40,GP_CNT
	CALL	DC_STR_ADR
	MOV	RATING_TMP,A
	MOV	%48,B
	CALL	DSP_RATING
	TRAP	16	(DSP_STR)
	BYTE	8,40
	DBE	{ RATING:}
	MOV	RATING_TMP,A
	CALL	CHK_RATING
	JN	DPI6
	TRAP	16	(DSP_STR)
	BYTE	20,80
	DBE	{*PROGRAM LOCKED OUT*}
DPI6	TRAP	16	(DSP_STR)
	BYTE	8,60
	DBE	{SERVICE:}
	CALL	LOOKUP_SVC
	CMP	%0,B
	JNZ	DPI7
	TRAP	16	(DSP_STR)
	BYTE	8,68
	DBE	{**PPV**b}
	JMP	DPI8
DPI7	MOV	%68,B
	LDA	@TEMP_AREA
	CALL	DSP_SVC
DPI8	RETS
;
	SKIP	3
;
DSP_TIME
	MOV	%6,B
	MOV	%>20,A
GT1	STA	@KEYQUE-1(B)
	DJNZ	B,GT1
	MOV	NDX45,B			4,5
	LDA	@C4_24(B)		C4_24
	MOV	A,TMP3
	LDA	@C4_25(B)		C4_25
	MOV	A,TMP2
	LDA	@C4_26(B)		C4_26
	MOV	A,TMP1
	LDA	@NUM_FRAME+2
	MOV	A,TMP4
	LDA	@NUM_FRAME+1
	MOV	A,B
	LDA	@NUM_FRAME
	SUB	A,TMP3
	SBB	B,TMP2
	SBB	TMP4,TMP1
	JNC	GT9
;
	MOV	%4,TMP5
	MOVD	%>1EB0,TMP7		27000
	CALL	RSUB
	CMP	%>23,A			>='3'
	JHS	GT10			TOO BIG
	STA	@KEYQUE
;
	MOV	%0,TMP5
	MOVD	%27000,TMP7
	CALL	RSUB
	STA	@KEYQUE+1
;
	MOVD	%4500,TMP7
	CALL	RSUB
	STA	@KEYQUE+2
;
	MOVD	%450,TMP7
	CALL	RSUB
	STA	@KEYQUE+3
;
	MOVD	%75,TMP7
	CALL	RSUB
	STA	@KEYQUE+4
;
	ADD	TMP3,TMP3
	MOV	%15,TMP7			15/2 = 7.5
	CALL	RSUB
	STA	@KEYQUE+5
GT9	JMP	DT0
GT10	MOV	%>22,A
	STA	@KEYQUE
	MOV	%>29,A
	STA	@KEYQUE+1
	STA	@KEYQUE+3
	STA	@KEYQUE+5
	MOV	%>25,A
	STA	@KEYQUE+2
	STA	@KEYQUE+4
DT0	MOV	%172,B
	LDA	@KEYQUE
	CMP	%>20,A
	JZ	DT2
	TRAP	8	(OUTCHR&ADR)
	LDA	@KEYQUE+1
	TRAP	9	(OUTCHR)
	JMP	DT4
DT2	LDA	@KEYQUE+1
	CMP	%>20,A
	JNZ	DT3
	MOV	%>2E,A
	TRAP	8	(OUTCHR&ADR)
	JMP	DT5
DT3	TRAP	8	(OUTCHR&ADR)
DT4	MOV	%>1D,A
DT5	TRAP	9	(OUTCHR)
	LDA	@KEYQUE+2
	TRAP	9	(OUTCHR)
	LDA	@KEYQUE+3
	TRAP	9	(OUTCHR)
	MOV	%>1D,A
	TRAP	9	(OUTCHR)
	LDA	@KEYQUE+4
	TRAP	9	(OUTCHR)
	LDA	@KEYQUE+5
	TRAP	9	(OUTCHR)
	LDA	@KEYQUE
	CMP	%>20,A
	JNZ	DT6
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
DT6	RETS
;
	SKIP	2
;
RSUB	MOV	%>1F,A
RSUB1	INC	A
	SUB	TMP7,TMP3		270000
	SBB	TMP6,TMP2
	SBB	TMP5,TMP1
	JC	RSUB1
	ADD	TMP7,TMP3
	ADC	TMP6,TMP2
	ADC	TMP5,TMP1
	RETS
;
;
;
;
;
;
	SKIP	4
;
CHK_RATING_PW
	MOV	%8,B
CRPW1	LDA	@KEYQUE-1(B)
	XOR	%5,A
	CMPA	@RATING_PW-1(B)
	JNZ	CRPW2
	DJNZ	B,CRPW1
CRPW2	RETS
;
	SKIP	3
;
GET_DIGITS
	POP	GD_RETADR
	POP	GD_RETADR-1
	MOV	%8,B
GD1	MOV	%>FA,A
	STA	@KEYQUE-1(B)
	DJNZ	B,GD1
	CLR	GD_TMP
GD2	CLR	B
CD3	LDA	@KEYQUE(B)
	JN	GD3A
	MOV	%>36,A
	JMP	GD3B
GD3A	MOV	%>2E,A
GD3B	PUSH	B
	ADD	%124,B
	TRAP	8	(OUTCHR&ADR)
	POP	B
	INC	B
	CMP	%8,B
	JNZ	CD3			DO NEXT
GD4	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	GD4			NO KEY
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	CMP	%10,A
	JHS	GD5			HIGHER THAN NUMBER
	MOV	GD_TMP,B
	STA	@KEYQUE(B)		STORE KEY
	CMP	%7,GD_TMP			AT LIMIT?
	JZ	GD2			YES, GO DISPLAY
	INC	GD_TMP
	JMP	GD2
GD5	JNZ	GD6			NOT CANCEL
	CMP	%0,GD_TMP
	JZ	GD2			BACK TO TOP
	DEC	GD_TMP
	MOV	GD_TMP,B
	MOV	%>FA,A
	STA	@KEYQUE(B)
	JMP	GD2
GD6	CMP	%>17,A			ENTER?
	JNZ	GD2
	BR	*GD_RETADR		RETURN
;
	SKIP	6
;
;	GET HEX STRING
;	ON ENTRY B=# OF BYTES
;		 A=DISPLAY ADR
;		GP_SRC=ADR OF INITIAL VALUE
;	ON EXIT  RESULT IN HEXACC
;
GET_HEX	POP	GD_RETADR
	POP	GD_RETADR-1
	MOV	A,GD_SADR
	MOV	B,GD_TMP
	CLR	B
GH1	LDA	*GP_SRC
	SWAP	A
	AND	%>0F,A
	STA	@HEXACC(B)
	INC	B
	LDA	*GP_SRC
	AND	%>0F,A
	STA	@HEXACC(B)
	INC	B
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	DJNZ	GD_TMP,GH1
	MOV	%>FF,A
	STA	@HEXACC(B)
	CLR	GD_TMP			CURRENT POSITION
;
GH2	CLR	B
GH3	LDA	@HEXACC(B)
	JN	GH4			AT END
	CALL	CVTH
	CMP	B,GD_TMP
	JNZ	GH3A
	OR	%>40,A			SET BLINK
GH3A	PUSH	B
	ADD	GD_SADR,B
	TRAP	8	(OUTCHR&ADR)
	POP	B
	INC	B
	JMP	GH3			DO NEXT
GH4	OR	%2,STAT_FL		SET IN HEX MODE
	TRAP	14	(WAIT)
	MOV	SCANCODE,A
	JN	GH4			NO KEY
	MOV	%>FF,SCANCODE		RESET SCAN CODE
	MOV	A,B
	CMP	%10,A
	JL	GH5			GO STORE
	MOV	%>0A,B
	CMP	%>13,A			VIEW?
	JZ	GH5			YES, STORE
	INC	B
	CMP	%>11,A			HELP?
	JZ	GH5			YES, STORE
	INC	B
	CMP	%>12,A			SETUP?
	JZ	GH5			YES, STORE
	INC	B
	CMP	%>16,A			NXTPRG?
	JZ	GH5			YES, STORE
	INC	B
	CMP	%>14,A			TEXT?
	JZ	GH5			YES, STORE
	INC	B
	CMP	%>15,A			MSG?
	JNZ	GH6			NO, TRY NON-NUMBERS
GH5	MOV	B,A			GET CHAR TO STORE
	MOV	GD_TMP,B
	STA	@HEXACC(B)		STORE KEY
GH5A	INC	GD_TMP
	MOV	GD_TMP,B
	LDA	@HEXACC(B)		CHECK AT END
	JN	GH8A			YES, TREAT AS ENTER
	BR	GH2			BACK TO TOP OF LOOP
GH6	CMP	%>0A,A			CANCEL
	JNZ	GH7			NO, SKIP
	AND	%>FD,STAT_FL		RESET IN HEX MODE
	BR	SETUP_KEY
GH7	CMP	%>1C,A			RIGHT KEY?
	JZ	GH5A			BUMP TO NEXT
	CMP	%>1D,A			LEFT KEY
	JNZ	GH8
	DEC	GD_TMP
	CMP	%>FF,GD_TMP
	JZ	GH7A			WRAPPED, EXIT
	BR	GH2
GH7A	MOVD	%-1,GD_TMP		SETUP FOR DECREMENT
	JMP	GH8B
GH8	CMP	%>17,A			ENTER?
	JZ	GH8A			YES, PASS RESULT
	BR	GH4
GH8A	MOVD	%1,GD_TMP
GH8B	CLR	B
	MOVD	%HEXACC,GP_SRC		FOR STORING RESULTS
GH8C	LDA	@HEXACC(B)
	JN	GH8D
	SWAP	A
	MOV	A,GP_CNT
	INC	B
	LDA	@HEXACC(B)
	OR	GP_CNT,A
	STA	*GP_SRC
	INC	B
	INC	GP_SRC
	ADC	%0,GP_SRC
	JMP	GH8C
GH8D	MOVD	GD_TMP,GP_SRC		RETURN INC (OR DEC) VALUE
	AND	%>FD,STAT_FL		RESET IN HEX MODE
	BR	*GD_RETADR		RETURN
;
	SKIP	4
;
DSP_RATING
	PUSH	B
	AND	%7,A
	MPY	%3,A
	MOVD	%RATING_BUFF(B),GP_SRC
	POP	B
	MOV	%4,GP_CNT
	BR	DC_STR_ADR
;
	SKIP	3
;
CHK_RATING
	AND	%7,A
	DEC	A
	CMPA	@RATING_CEIL
	PUSH	ST
	INC	A
	POP	ST
	RETS
;
	SKIP	4
;
RATING_BUFF
	DBE	{NR  }
	DBE	{G   }
	DBE	{PG  }
	DBE	{PG13}
	DBE	{R   }
	DBE	{X   }
	DBE	{XX  }
	DBE	{XXX }
;
	SKIP	3
;
LOOKUP_SVC
	CLR	A			COUNT (56)
	CLR	B
	MOVD	%TEMP_AREA,GP_SRC		WORK SPACE
	PUSH	A			DUMMY BIT PATTERN
LUS1	STA	@CNTR_6			STORE COUNT
	BTJO	%7,A,LUS2		SKIP IF NOT 8 BOUNDARY
	POP	A			CLEAR STACK
	LDA	*PTR_28			GET NEXT BYTE
	DECD	PTR_28
	JMP	LUS2A
LUS2	POP	A
LUS2A	RRC	A
	JNC	LUS3
	PUSH	A
	INC	B			BUMP COUNT
	LDA	@CNTR_6
	INC	A
	STA	*GP_SRC			STORE COUNT
	INC	GP_SRC
	ADC	%0,GP_SRC-1
	POP	A
LUS3	PUSH	A
	LDA	@CNTR_6
	INC	A
	CMP	%56,A
	JNZ	LUS1			TRY NEXT
	POP	A			CLEAR STACK
	CLR	A
	STA	*GP_SRC			SET END OF STRING
	RETS
;
	SKIP	4
;
;	DISPLAY CURRENT SERVICE
;
DSP_SVC	PUSH	B
	PUSH	A
	CALL	BIN2BCD
	CALL	OUT_BCD
	MOV	%>2E,A
	TRAP	9	(OUTCHR)
	POP	A
	DEC	A
	MPY	%6,A
	MOVD	%MSG_SVCS,GP_SRC
	ADD	B,GP_SRC
	ADC	A,GP_SRC-1
	POP	B
	ADD	%3,B
	LDA	*GP_SRC
	TRAP	8	(OUTCHR&ADR)
	MOV	%5,B
DSPS1	INC	GP_SRC
	ADC	%0,GP_SRC
	LDA	*GP_SRC
	TRAP	9	(OUTCHR)
	DJNZ	B,DSPS1
	RETS
;
	SKIP	10
;
;
;
MSG_SVCS
	BYTE	'HBO/W '	1
	BYTE	'MAX/W '	2
	BYTE	'FEST  '	3
	BYTE	'      '	4
	BYTE	'HBO/E '	5
	BYTE	'MAX/E '	6
	BYTE	'      '	7
	BYTE	'CVS   '	8
	BYTE	'HBO/WK'	9
	BYTE	'MAX/WK'	10
	BYTE	'      '	11
	BYTE	'      '	12
	BYTE	'      '	13
	BYTE	'      '	14
	BYTE	'      '	15
	BYTE	'HBO/EK'	16
	BYTE	'      '	17
	BYTE	'DISNEY'	18
	BYTE	'      '	19
	BYTE	'FIRSTR'	20
	BYTE	'CNN   '	21
	BYTE	'      '	22
	BYTE	'HSE   '	23
	BYTE	'SELECT'	24
	BYTE	'WTBS  '	25
	BYTE	'FC*SC '	26
	BYTE	'NETLK '	27
	BYTE	'CBN   '	28
	BYTE	'AMEXXX'	29
	BYTE	'STAR-D'	30
	BYTE	'USA   '	31
	BYTE	'ESPN  '	32
	BYTE	'      '	33
	BYTE	'      '	34
	BYTE	'SUPER*'	35
	BYTE	'PT-24 '	36
	BYTE	'      '	37
	BYTE	'NET-LK'	38
	BYTE	'WWOR  '	39
	BYTE	'      '	40
	BYTE	'      '	41
	BYTE	'      '	42
	BYTE	'NICK  '	43
	BYTE	'VH1MTV'	44
	BYTE	'      '	45
	BYTE	'      '	46
	BYTE	'NET-LK'	47
	BYTE	'      '	48
	BYTE	'TEST  '	49
	BYTE	'      '	50
	BYTE	'VC/1-2'	51
	BYTE	'      '	52
	BYTE	'      '	53
	BYTE	'TMC   '	54
	BYTE	'      '	55
	BYTE	'SHOW  '	56
;
;
	SKIP	3
;


ENCRYPT	MOVP	IOCNT0,A
	STA	@I_FLAG
	MOVP	%>80,IOCNT0
	MOVD	%SCRTBL,D_IP+1
	MOVD	%0,D_SP+1
	MOVD	%0,D_SP+3
	MOVD	%0,D_SP+5
	MOVD	%0,D_SP+7
;
	MOV	%0,D_IP+4
E1	MOV	%>80,D_IP+3
E2	LDA	*D_IP+1
	JZ	E4
	MOV	A,B
	SWAP	B
	AND	%>0F,A
	AND	%>0F,B
	MOV	A,D_IP+2
	CLR	A
	SETC
E3	RLC	A
	DJNZ	D_IP+2,E3
	MOV	A,D_IP+2
	LDA	@D_KEY(B)
	BTJZ	D_IP+2,A,E4
	MOV	D_IP+4,B
	LDA	@D_SP(B)
	OR	D_IP+3,A
	STA	@D_SP(B)
E4	INC	D_IP+1
	ADC	%0,D_IP
	RR	D_IP+3
	CMP	%>80,D_IP+3
	JNZ	E2
	INC	D_IP+4
	CMP	%8,D_IP+4
	JNZ	E1
	MOV	%16,D_CNTR
	MOV	%8,B
	MOV	%>40,D_MASK
E6	CLR	A
	BTJZ	D_MASK,D_DATA,$+6
	OR	%>80,A
	BTJZ	D_MASK,D_DATA+1,$+6
	OR	%>40,A
	BTJZ	D_MASK,D_DATA+2,$+6
	OR	%>20,A
	BTJZ	D_MASK,D_DATA+3,$+6
	OR	%>10,A
	BTJZ	D_MASK,D_DATA+4,$+6
	OR	%8,A
	BTJZ	D_MASK,D_DATA+5,$+6
	OR	%4,A
	BTJZ	D_MASK,D_DATA+6,$+6
	OR	%2,A
	BTJZ	D_MASK,D_DATA+7,$+6
	OR	%1,A
	STA	@D_IP-1(B)
	RRC	D_MASK
	RRC	D_MASK
	DJNZ	B,E6
E7	CLR	A
	BTJZ	%>40,D_SP,$+6
	OR	%>20,A
	BTJZ	%4,D_SP+1,$+6
	OR	%>10,A
	BTJZ	%4,D_SP,$+6
	OR	%8,A
	BTJZ	%1,D_SP+2,$+6
	OR	%4,A
	BTJZ	%>80,D_SP+2,$+6
	OR	%2,A
	BTJZ	%>10,D_SP+2,$+6
	OR	%1,A
	MOV	A,D_KEY
;
	CLR	A
	BTJZ	%1,D_SP+1,$+6
	OR	%>20,A
	BTJZ	%8,D_SP,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+1,$+6
	OR	%8,A
	BTJZ	%1,D_SP+3,$+6
	OR	%4,A
	BTJZ	%4,D_SP+2,$+6
	OR	%2,A
	BTJZ	%8,D_SP+3,$+6
	OR	%1,A
	MOV	A,D_KEY+1
;
	CLR	A
	BTJZ	%>40,D_SP+2,$+6
	OR	%>20,A
	BTJZ	%>10,D_SP+1,$+6
	OR	%>10,A
	BTJZ	%2,D_SP,$+6
	OR	%8,A
	BTJZ	%>80,D_SP,$+6
	OR	%4,A
	BTJZ	%8,D_SP+2,$+6
	OR	%2,A
	BTJZ	%>10,D_SP,$+6
	OR	%1,A
	MOV	A,D_KEY+2
;
	CLR	A
	BTJZ	%8,D_SP+1,$+6
	OR	%>20,A
	BTJZ	%1,D_SP,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+2,$+6
	OR	%8,A
	BTJZ	%>80,D_SP+1,$+6
	OR	%4,A
	BTJZ	%>20,D_SP,$+6
	OR	%2,A
	BTJZ	%2,D_SP+3,$+6
	OR	%1,A
	MOV	A,D_KEY+3
;
	CLR	A
	BTJZ	%1,D_SP+5,$+6
	OR	%>20,A
	BTJZ	%2,D_SP+6,$+6
	OR	%>10,A
	BTJZ	%2,D_SP+7,$+6
	OR	%8,A
	BTJZ	%>10,D_SP+4,$+6
	OR	%4,A
	BTJZ	%8,D_SP+5,$+6
	OR	%2,A
	BTJZ	%>40,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+4
;
	CLR	A
	BTJZ	%2,D_SP+4,$+6
	OR	%>20,A
	BTJZ	%>20,D_SP+4,$+6
	OR	%>10,A
	BTJZ	%>10,D_SP+5,$+6
	OR	%8,A
	BTJZ	%>10,D_SP+6,$+6
	OR	%4,A
	BTJZ	%4,D_SP+7,$+6
	OR	%2,A
	BTJZ	%1,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+5
;
	CLR	A
	BTJZ	%>20,D_SP+6,$+6
	OR	%>20,A
	BTJZ	%1,D_SP+7,$+6
	OR	%>10,A
	BTJZ	%2,D_SP+5,$+6
	OR	%8,A
	BTJZ	%4,D_SP+6,$+6
	OR	%4,A
	BTJZ	%8,D_SP+4,$+6
	OR	%2,A
	BTJZ	%>40,D_SP+5,$+6
	OR	%1,A
	MOV	A,D_KEY+6
;
	CLR	A
	BTJZ	%4,D_SP+5,$+6
	OR	%>20,A
	BTJZ	%>80,D_SP+4,$+6
	OR	%>10,A
	BTJZ	%>20,D_SP+5,$+6
	OR	%8,A
	BTJZ	%1,D_SP+4,$+6
	OR	%4,A
	BTJZ	%>80,D_SP+6,$+6
	OR	%2,A
	BTJZ	%8,D_SP+6,$+6
	OR	%1,A
	MOV	A,D_KEY+7
;
	MOV	D_CNTR,B
	LDA	@SHFTTBL(B)
E8	AND	%>0F,D_SP+7
	RLC	D_SP+4
	RLC	D_SP+5
	RLC	D_SP+6
	RLC	D_SP+7
	BTJZ	%>10,D_SP+7,E8A
	AND	%>0F,D_SP+7
	OR	%1,D_SP+4
E8A	AND	%>0F,D_SP+3
	RLC	D_SP
	RLC	D_SP+1
	RLC	D_SP+2
	RLC	D_SP+3
	BTJZ	%>10,D_SP+3,E8B
	AND	%>0F,D_SP+3
	OR	%1,D_SP
E8B	DJNZ	A,E8
	MOVD	D_IP+1,D_DATA+5
	MOVD	D_IP+3,D_DATA+7
	MOV	D_DATA+7,B
	MOV	D_DATA+4,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+7,B
	AND	%>3F,B
	LDA	@S1(B)
	BTJZ	%8,A,$+6
	XOR	%>80,D_IP+6
	BTJZ	%4,A,$+6
	XOR	%>80,D_IP+5
	BTJZ	%2,A,$+6
	XOR	%2,D_IP+5
	BTJZ	%1,A,$+6
	XOR	%2,D_IP+4
	MOV	D_DATA+7,B
	MOV	D_DATA+6,A
	RLC	A
	RLC	B
	XOR	D_KEY+6,B
	AND	%>3F,B
	LDA	@S2(B)
	BTJZ	%8,A,$+6
	XOR	%8,D_IP+6
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%>40,D_IP+7
	BTJZ	%1,A,$+6
	XOR	%>40,D_IP+5
	MOV	D_DATA+6,B
	MOV	D_DATA+7,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+5,B
	AND	%>3F,B
	LDA	@S3(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+5
	BTJZ	%4,A,$+6
	XOR	%1,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%4,D_IP+4
	BTJZ	%1,A,$+6
	XOR	%4,D_IP+7
	MOV	D_DATA+6,B
	MOV	D_DATA+5,A
	RLC	A
	RLC	B
	XOR	D_KEY+4,B
	AND	%>3F,B
	LDA	@S4(B)
	BTJZ	%8,A,$+6
	XOR	%>40,D_IP+4
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+5
	BTJZ	%2,A,$+6
	XOR	%>40,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%>80,D_IP+7
	MOV	D_DATA+5,B
	MOV	D_DATA+6,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+3,B
	AND	%>3F,B
	LDA	@S5(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%4,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%>80,D_IP+4
	BTJZ	%1,A,$+6
	XOR	%>20,D_IP+7
	MOV	D_DATA+5,B
	MOV	D_DATA+4,A
	RLC	A
	RLC	B
	XOR	D_KEY+2,B
	AND	%>3F,B
	LDA	@S6(B)
	BTJZ	%8,A,$+6
	XOR	%>10,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%8,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%>20,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%>20,D_IP+5
	MOV	D_DATA+4,B
	MOV	D_DATA+5,A
	RRC	A
	RRC	B
	RR	B
	RR	B
	XOR	D_KEY+1,B
	AND	%>3F,B
	LDA	@S7(B)
	BTJZ	%8,A,$+6
	XOR	%1,D_IP+4
	BTJZ	%4,A,$+6
	XOR	%>10,D_IP+6
	BTJZ	%2,A,$+6
	XOR	%4,D_IP+5
	BTJZ	%1,A,$+6
	XOR	%2,D_IP+7
	MOV	D_DATA+4,B
	MOV	D_DATA+7,A
	RLC	A
	RLC	B
	XOR	D_KEY,B
	AND	%>3F,B
	LDA	@S8(B)
	BTJZ	%8,A,$+6
	XOR	%8,D_IP+7
	BTJZ	%4,A,$+6
	XOR	%>20,D_IP+4
	BTJZ	%2,A,$+6
	XOR	%2,D_IP+6
	BTJZ	%1,A,$+6
	XOR	%8,D_IP+5
	CMP	%1,D_CNTR
	JZ	E9
	MOVD	D_IP+1,D_KEY+1
	MOVD	D_IP+3,D_KEY+3
	MOVD	D_IP+5,D_IP+1
	MOVD	D_IP+7,D_IP+3
	MOVD	D_KEY+1,D_IP+5
	MOVD	D_KEY+3,D_IP+7
	DEC	D_CNTR
	BR	E7
E9	MOV	%8,B
	MOV	%1,D_MASK
E10	CLR	A
	BTJZ	D_MASK,D_IP+3,$+6
	OR	%>80,A
	BTJZ	D_MASK,D_IP+7,$+6
	OR	%>40,A
	BTJZ	D_MASK,D_IP+2,$+6
	OR	%>20,A
	BTJZ	D_MASK,D_IP+6,$+6
	OR	%>10,A
	BTJZ	D_MASK,D_IP+1,$+6
	OR	%8,A
	BTJZ	D_MASK,D_IP+5,$+6
	OR	%4,A
	BTJZ	D_MASK,D_IP,$+6
	OR	%2,A
	BTJZ	D_MASK,D_IP+4,$+6
	OR	%1,A
	STA	@D_DATA-1(B)
	RL	D_MASK
	DJNZ	B,E10
	LDA	@I_FLAG
	MOVP	A,IOCNT0
	RETS

*
*
STR80	BYTE	>80,>80,>80,>80,>80,>80,>80
;
SHFTTBL	BYTE	0,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
;
SCRTBL	BYTE	>12,>21,>28,>37,>46,>55,>64,>38
	BYTE	>11,>18,>27,>36,>45,>54,>63,>03
	BYTE	>08,>17,>26,>35,>44,>53,>62,>02
	BYTE	>00,>00,>00,>00,>47,>56,>65,>01
	BYTE	>14,>23,>32,>41,>48,>57,>66,>04
	BYTE	>15,>24,>33,>42,>51,>58,>67,>05
	BYTE	>16,>25,>34,>43,>52,>61,>68,>06
	BYTE	>00,>00,>00,>00,>13,>22,>31,>07
;
	BYTE	>00,>00,>00
;
;
RST_U7	MOVD	%900,B
RU7A	ORP	%1,APORT
	ANDP	%>FE,APORT
	DECD	B
	JC	RU7A
	MOVD	%40000,B
RU7B	DECD	B
	NOP
	JC	RU7B
	RETS
;
	ORG	>F000
;
; Note: These keys start with set 1 and go through set G  I should
;       have started with 0 and gone through F, but was too damn
;	lazy to go back and change it. See below where it says KEY01
;	that's what I am talking about it should be KEY00.  Oh well.
;
UNIT1ID	BYTE	>01,>81,>11,>22
	BYTE	0,0,0,0
KEY01	BYTE	>11,>22,>33,>44,>55,>66,>77,>88
KEY11	BYTE	>22,>22,>22,>22,>22,>22,>22,>00
KEY21	BYTE	>33,>33,>33,>33,>33,>33,>33,>00
KEY31	BYTE	>44,>44,>44,>44,>44,>44,>44,>00

AUTH1EVE
	BYTE	>01,>00,>80,>00,>10,>00,>00		AUTH MASK
	BYTE	>AA,>AA,>AA,>AA,>AA,>AA,>AA,>AA		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH1ODD
	BYTE	>01,>00,>80,>00,>10,>00,>00		AUTH MASK
	BYTE	>FF,>FF,>FF,>FF,>FF,>FF,>FF,>FF		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT2ID	BYTE	>01,>85,>55,>55
	BYTE	0,0,0,0
KEY02	BYTE	>55,>55,>55,>55,>55,>55,>55,>00
KEY12	BYTE	>55,>55,>55,>55,>55,>55,>55,>00
KEY22	BYTE	>55,>55,>55,>55,>55,>55,>55,>00
KEY32	BYTE	>55,>55,>55,>55,>55,>55,>55,>00

AUTH2EVE
	BYTE	>81,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>66,>46,>0E,>40,>C6,>61,>56,>62		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH2ODD
	BYTE	>81,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>99,>99,>99,>99,>99,>99,>99,>99		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT3ID	BYTE	>01,>85,>66,>66
	BYTE	0,0,0,0
KEY03	BYTE	>66,>66,>66,>66,>66,>66,>66,>00
KEY13	BYTE	>34,>34,>34,>34,>34,>34,>34,>00
KEY23	BYTE	>43,>43,>43,>43,>43,>43,>43,>00
KEY33	BYTE	>43,>43,>43,>43,>43,>43,>43,>00

AUTH3EVE
	BYTE	>A1,>0C,>80,>D9,>10,>00,>00		AUTH MASK
	BYTE	>65,>65,>65,>65,>65,>65,>65,>65		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH3ODD
	BYTE	>A1,>0C,>80,>D9,>10,>65,>00		AUTH MASK
	BYTE	>DC,>CD,>CD,>CD,>DC,>CD,>CD,>DC		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT4ID	BYTE	>01,>86,>22,>33
	BYTE	0,0,0,0
KEY04	BYTE	>54,>54,>54,>54,>54,>54,>45,>00
KEY14	BYTE	>32,>32,>32,>23,>32,>32,>32,>00
KEY24	BYTE	>43,>43,>43,>34,>43,>43,>43,>00
KEY34	BYTE	>43,>43,>43,>43,>43,>43,>43,>00

AUTH4EVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>87,>87,>87,>87,>87,>87,>87,>87		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH4ODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>87,>87,>87,>78,>4E,>27,>B4,>5E		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT5ID	BYTE	>01,>88,>33,>33
	BYTE	0,0,0,0
KEY05	BYTE	>65,>65,>65,>65,>65,>EB,>FF,>00
KEY15	BYTE	>65,>65,>65,>65,>65,>65,>65,>00
KEY25	BYTE	>65,>65,>65,>65,>65,>65,>56,>00
KEY35	BYTE	>65,>56,>65,>65,>65,>65,>65,>00

AUTH5EVE
	BYTE	>81,>0C,>00,>C8,>10,>00,>00		AUTH MASK
	BYTE	>65,>65,>65,>6B,>C0,>2D,>B8,>61		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH5ODD
	BYTE	>81,>0C,>00,>C8,>10,>00,>00		AUTH MASK
	BYTE	>65,>30,>54,>54,>F8,>EA,>E7,>1F		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT6ID	BYTE	>01,>89,>99,>99
	BYTE	0,0,0,0
KEY06	BYTE	>54,>54,>54,>54,>43,>43,>43,>00
KEY16	BYTE	>3A,>DC,>CD,>CD,>DC,>CD,>CD,>00
KEY26	BYTE	>CB,>CC,>CD,>EC,>CD,>5C,>3F,>00
KEY36	BYTE	>2F,>DC,>05,>DC,>DC,>DC,>DC,>00

AUTH6EVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>95,>FB,>54,>54,>45,>45,>DC,>01		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH6ODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>35,>28,>54,>45,>54,>45,>45,>45		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT7ID	BYTE	>01,>8A,>88,>88
	BYTE	0,0,0,0
KEY07	BYTE	>45,>45,>45,>45,>54,>54,>54,>00
KEY17	BYTE	>34,>43,>43,>43,>43,>34,>43,>00
KEY27	BYTE	>43,>43,>43,>43,>43,>34,>43,>00
KEY37	BYTE	>34,>43,>34,>34,>43,>43,>34,>00

AUTH7EVE
	BYTE	>01,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>34,>43,>43,>34,>43,>43,>34,>34		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH7ODD
	BYTE	>01,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>CD,>CD,>CD,>CD,>CD,>CD,>DC,>CD		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT8ID	BYTE	>01,>8A,>8A,>AA
	BYTE	0,0,0,0
KEY08	BYTE	>21,>21,>21,>21,>21,>21,>21,>00
KEY18	BYTE	>21,>21,>21,>12,>21,>21,>21,>00
KEY28	BYTE	>21,>12,>21,>21,>12,>21,>12,>00
KEY38	BYTE	>21,>21,>21,>12,>21,>12,>12,>00

AUTH8EVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>43,>43,>43,>43,>43,>43,>43,>43		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH8ODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>43,>43,>43,>43,>43,>43,>94,>A3		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNIT9ID	BYTE	>01,>8A,>93,>33
	BYTE	0,0,0,0
KEY09	BYTE	>FD,>FD,>FD,>FD,>FD,>FD,>DF,>00
KEY19	BYTE	>FD,>FD,>FD,>FD,>DF,>FD,>DF,>00
KEY29	BYTE	>FD,>FD,>FD,>DF,>FD,>DF,>DF,>00
KEY39	BYTE	>FD,>FD,>DF,>DF,>DF,>DF,>DF,>00

AUTH9EVE
	BYTE	>01,>00,>40,>01,>00,>00,>00		AUTH MASK
	BYTE	>FD,>DF,>FD,>DF,>DF,>FD,>DF,>DF		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTH9ODD
	BYTE	>01,>00,>40,>01,>00,>00,>00		AUTH MASK
	BYTE	>FD,>FD,>FD,>DF,>DF,>FD,>DF,>DF		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNITAID	BYTE	>01,>8A,>99,>99
	BYTE	0,0,0,0
KEY0A	BYTE	>09,>90,>09,>09,>90,>09,>90,>00
KEY1A	BYTE	>09,>90,>09,>90,>09,>90,>90,>00
KEY2A	BYTE	>90,>90,>90,>90,>90,>90,>90,>00
KEY3A	BYTE	>90,>90,>90,>90,>90,>90,>90,>00

AUTHAEVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>68,>90,>90,>09,>90,>90,>90,>09		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHAODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>67,>90,>90,>09,>90,>90,>90,>A8		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>27,>00,>05,>00,>00,>00,>00
;
;
;
UNITBID	BYTE	>01,>8B,>BB,>BB
	BYTE	0,0,0,0
KEY0B	BYTE	>30,>54,>45,>54,>54,>54,>54,>00
KEY1B	BYTE	>EC,>54,>54,>45,>45,>C0,>A8,>00
KEY2B	BYTE	>50,>F8,>54,>45,>54,>45,>54,>00
KEY3B	BYTE	>15,>54,>45,>45,>45,>45,>45,>00

AUTHBEVE
	BYTE	>01,>00,>00,>81,>00,>00,>00		AUTH MASK
	BYTE	>54,>45,>54,>54,>45,>54,>45,>45		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHBODD
	BYTE	>01,>00,>00,>81,>00,>00,>00		AUTH MASK
	BYTE	>45,>54,>45,>45,>45,>45,>AC,>5B		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
;
;
UNITCID	BYTE	>01,>8C,>22,>22
	BYTE	0,0,0,0
KEY0C	BYTE	>3E,>E3,>E3,>E3,>E3,>E3,>3E,>00
KEY1C	BYTE	>E3,>E3,>3E,>3E,>E3,>E3,>E3,>00
KEY2C	BYTE	>E3,>E3,>E3,>3E,>E3,>3E,>DA,>00
KEY3C	BYTE	>27,>8B,>E3,>E3,>3E,>3E,>3E,>00

AUTHCEVE
	BYTE	>01,>00,>80,>08,>10,>00,>00		AUTH MASK
	BYTE	>3E,>3E,>3E,>3E,>3E,>3E,>6C,>75		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHCODD
	BYTE	>01,>00,>80,>08,>10,>00,>00		AUTH MASK
	BYTE	>9D,>85,>A6,>E3,>3E,>3E,>3E,>90		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
;
;
UNITDID	BYTE	>01,>8C,>6E,>EE
	BYTE	0,0,0,0
KEY0D	BYTE	>ED,>DE,>DE,>ED,>DE,>ED,>ED,>00
KEY1D	BYTE	>A1,>A1,>1A,>A1,>1A,>A1,>1A,>00
KEY2D	BYTE	>1A,>1A,>1A,>A1,>1A,>A1,>1A,>00
KEY3D	BYTE	>31,>A1,>1A,>1A,>1A,>1A,>A1,>00

AUTHDEVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>32,>32,>32,>FD,>ED,>EC,>2E,>A8		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHDODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>1A,>2E,>23,>32,>32,>23,>12,>ED		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
;
;
UNITEID	BYTE	>01,>8D,>11,>11
	BYTE	0,0,0,0
KEY0E	BYTE	>DE,>ED,>ED,>ED,>ED,>ED,>ED,>00
KEY1E	BYTE	>DE,>DE,>DE,>DE,>ED,>ED,>ED,>00
KEY2E	BYTE	>DE,>ED,>ED,>DE,>ED,>ED,>ED,>00
KEY3E	BYTE	>DE,>DE,>DE,>DE,>ED,>DE,>DE,>00

AUTHEEVE
	BYTE	>01,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>DE,>ED,>DE,>ED,>9E,>C7,>15,>F7		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHEODD
	BYTE	>01,>00,>80,>00,>00,>00,>00		AUTH MASK
	BYTE	>DA,>A0,>B1,>DE,>DE,>DE,>DE,>07		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
;
;
UNITFID	BYTE	>01,>8D,>28,>88
	BYTE	0,0,0,0
KEY0F	BYTE	>98,>98,>89,>89,>98,>89,>89,>00
KEY1F	BYTE	>38,>98,>89,>89,>98,>89,>98,>00
KEY2F	BYTE	>23,>73,>89,>89,>89,>89,>89,>00
KEY3F	BYTE	>45,>EA,>98,>98,>89,>89,>98,>00

AUTHFEVE
	BYTE	>01,>00,>00,>00,>80,>00,>00		AUTH MASK
	BYTE	>A7,>98,>89,>89,>89,>89,>89,>9A		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>26,>00,>04
AUTHFODD
	BYTE	>01,>00,>00,>00,>80,>00,>00		AUTH MASK
	BYTE	>FE,>96,>8A,>96,>91,>87,>87,>78		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
;
;
UNITGID	BYTE	>01,>8D,>DD,>DD
	BYTE	0,0,0,0
KEY0G	BYTE	>FD,>DF,>DF,>DF,>DF,>DF,>DF,>00
KEY1G	BYTE	>FD,>DF,>DF,>FD,>DF,>DF,>FD,>00
KEY2G	BYTE	>DF,>DF,>DF,>DF,>FD,>DF,>DF,>00
KEY3G	BYTE	>DF,>DF,>FD,>FD,>FD,>FD,>DF,>00

AUTHGEVE
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>DF,>DF,>DF,>FD,>DF,>DF,>FD,>FD		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>24,>00,>04
AUTHGODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>FD,>DF,>FD,>DF,>FD,>FD,>DF,>FD		AUTH KEY
	BYTE	>00,>00,>00				PPV
	BYTE	>A5,>25,>00,>05,>00,>00,>00,>00
;
	ORG	>FFD0
;
;
	DATA	RESET			23
	DATA	RESET			22
	DATA	RESET			21
	DATA	RESET			20
	DATA	RESET			19
	DATA	DECRYPT			18
	DATA	CLEAR_DISP		17
	DATA	DSP_STR			16
	DATA	EXEC_BACKGROUND		15
	DATA	WAIT			14
	DATA	XORKEY			13
	DATA	BLOCK_MOVE		12
	DATA	HEXOUT			11
	DATA	HEXOUT&ADR		10
	DATA	OUTCHR			9
	DATA	OUTCHR&ADR		8
	DATA	RCV_SLAVE		7
	DATA	SND_SLAVE_STR		6
	DATA	SND_SLAVE		5
	DATA	TRAP4			4
	DATA	TRAP3			3
	DATA	RESET			2
	DATA	TRAP1			1
	DATA	RESET			0
;
;
	END
4
AUTH8ODD
	BYTE	>01,>00,>40,>49,>00,>00,>00		AUTH MASK
	BYTE	>43,