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,