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,