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,