PAGE 1 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:19 2 0000 ''TITLE,MUXDEMUX 3 0000 ''LIST 4 0000 //*************************************************** 5 0000 // 6 0000 //DESCRIPTION:SAMPLE INTRANODAL MULTIPLEXING AND DE- 7 0000 //MULTIPLEXING PROGRAMS. 8 0000 // 9 0000 //LOCATION:MUXDEMUX.LOS 10 0000 // 11 0000 //DATE:NOVEMBER 9, 1978 12 0000 // 13 0000 PAGE 2 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:20 15 0000 //******************************** 16 0000 //* * 17 0000 //* POINTER BLOCK FORMAT * 18 0000 //* * 19 0000 //******************************** 20 0000 21 0000 'TP' [0]:'LBR' 22 0000 OBP PAGE MAP,//OUTPUT BUFFER POINTER PAGE MAP 0000,F OBPPAGEMAP .BLK 1 23 0001 'DP' OBP ADDRESS,//OUTPUT BUFFER ADDRESS 0001,F OBPADDRESS .BLK 2 24 0003 OPTR,//OUTPUT CHARACTER POINTER 0003,F OPTR .BLK 1 25 0004 26 0004 IBP PAGE MAP,//INPUT BUFFER POINTER PAGE MAP 0004,F IBPPAGEMAP .BLK 1 27 0005 'DP' IBP ADDRESS,//INPUT BUFFER ADDRESS 0005,F IBPADDRESS .BLK 2 28 0007 IPTR,//INPUT CHARACTER POINTER 0007,F IPTR .BLK 1 29 0008 30 0008 CP PAGE MAP,//PARE MAP FOR CONNECTION POINTER 0008,F CPPAGEMAP .BLK 1 31 0009 'DP' CP ADDRESS,//ADDRESS FOR CONNECTION POINTER 0009,F CPADDRESS .BLK 2 32 000B C TIMER,//CONNECTION TIMER FOR AUDIT 000B,F CTIMER .BLK 1 33 000C 'RBR' PAGE 3 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:23 35 0000 //********************************************* 36 0000 //* * 37 0000 //* INTRANODAL CHARACTER BUFFER FORMAT * 38 0000 //* * 39 0000 //********************************************* 40 0000 41 0000 //ASSUME THE FOLLOWING: 42 0000 // 1. EMPTY CHARACTER DATA BUFFERS ARE INITIALIZED TO CON TAIN 43 0000 // ZEROS. DATA OF ZERO INDICATES NO CHARACTER PRESENT . 44 0000 // 45 0000 // 2. CHARACTERS STORED IN DESCENDING ADDRESS ORDER WITH INITIAL 46 0000 // INPUT AND OUTPUT POINTERS AT OFFSET 12. 47 0000 // 48 0000 // 3. THE INPUT POINTER SHOWS THE POSITION FOR THE NEXT C HARACTER 49 0000 // WITHIN THE CURRENT BUFFER. WHEN THE LAST CHARACTER POS- 50 0000 // ITION IN THE BUFFER IS ABOUT TO BE FILLED, THE DEMU LTIPLEX 51 0000 // PROGRAM LINKS A NEW EMPTY BUFFER AND THEN FILLS IN THE 52 0000 // FINAL CHARACTER FOR THE PREVIOUS BUFFER. 53 0000 // 54 0000 // 4. BLOCKS ARE FILLED LINEARLY BY THE DEMULTIPLEX PROGR AM, 55 0000 // EMPTIED BY THE MULTIPLEX PROGRAM, AND THEN RELEASED . 56 0000 // WHEN THEY ARE RELEASED, THEY ARE ASSIGNED TO THE FR EE 57 0000 // POOL FOR THE MULTIPLEXING LPU UNTIL THEY ARE REUSED 58 0000 // BY THAT LPU OR RELEASED TO THE COMMON SYSTEM FREE P OOL. 59 0000 60 0000 'TP' [13]:'LBR' 61 000D BP MAP,//BUFFER POINTER PAGE MAP 000D,F BPMAP .BLK 1 62 000E 'DP' AD NXT BUFF, 000E,F ADNXTBUFF .BLK 2 63 0010 //ADDRESS OF NEXT CHARACTER BUFFER 64 0010 'RBR' PAGE 4 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:26 66 0000 //********************************** 67 0000 //* * 68 0000 //* OPERATIONAL PARAMETERS * 69 0000 //* * 70 0000 //********************************** 71 0000 72 0000 MAX CPF:200,//MAXIMUM NUMBER (APPROX) OF CHAR/FRAME 0000,2 MAXCPF = 200 000C8 73 0000 MAX SKIP: 15,//MAX. NR. CHANNELS TO SKIP PER CNTRL BYTE 0000,2 MAXSKIP = 15 0000F 74 0000 MAX CPCB: 15,//MAX. NR CHAR/CHANNEL/CONTROL BYTE 0000,2 MAXCPCB = 15 0000F 75 0000 MAX CHAN:240,//MAX NUMBER OF CHANNELS PER FRAME 0000,2 MAXCHAN = 240 000F0 76 0000 MAX BUFF: 12,//MAXIMUM DATA BUFFER OFFSET 0000,2 MAXBUFF = 12 0000C 77 0000 78 0000 //******************************* 79 0000 //* * 80 0000 //* ZERO PAGE ADDRESSES * 81 0000 //* * 82 0000 //******************************* 83 0000 84 0000 'ZREL' 'LBR' 85 0000 'DP' CF ADR,//CURRENT FRAME ADDRESS 0000,E CFADR .BLK 2 86 0002 'DP' CC ADR,//CURRENT CHANNEL DEFINITION BLOCK 0002,E CCADR .BLK 2 87 0004 'DP' CB ADR,//CURRENT CHARACTER BUFFER ADDRESS 0004,E CBADR .BLK 2 88 0006 'RBR' PAGE 5 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:31 90 0000 //************************* 91 0000 //************************* 92 0000 //** ** 93 0000 //** DEMULTIPLEX ** 94 0000 //** ** 95 0000 //************************* 96 0000 //************************* 97 0000 // 98 0000 //DESCRIPTION:MAIN PROGRAM TO DEMULTIPLEX CHARACTERS FROM AN 99 0000 //INPUT FRAME. 100 0000 // 101 0000 //INPUT:ASSUME THAT THE FRAME POINTER, CF ADR, IS POINTIN G 102 0000 //TO THE INITIAL CHANNEL NUMBER. 103 0000 104 0000 CHARACTER COUNT,//CHARACTERS LEFT FOR THIS CHANNEL 0000,2 CHARACTERCOUNT .BLK 1 105 0001 ;OFFSET = 0, 12, 24, 36,//BLOCK INCREMENT BY CHAN SKIP INDE X 0000,1 OFFSET 000 0001,1 00C 0002,1 018 0003,1 024 106 0004 48, 60, 72, 84, 0004,1 030 0005,1 03C 0006,1 048 0007,1 054 107 0008 96, 108, 120, 132, 0008,1 060 0009,1 06C 000A,1 078 000B,1 084 108 000C 144, 156, 168, 180, 000C,1 090 000D,1 09C 000E,1 0A8 000F,1 0B4 109 0010 110 0010 ;DEMULTIPLEX:: 'LBR' 111 0010 'DP' INITIAL CHAN AD () -> CC ADR,//CAL. FIRST CHAN BLK AD R 0010,1 DEMULTIPLEX 020 JSR INITIALCHANAD 6 AB 0013,1 085 STA CCADR+ 1 3 ZP 0015,1 086 STX CCADR 3 ZP 112 0017 ^CF ADR, 0017,1 0E6 INC CFADR 5 ZP 0019,1 0D0 BNE 001TL 2* 001B,1 0E6 INC CFADR+ 1 5 ZP 113 001D 'DO' ^CF ADR, 'WHILE' [CF ADR] # 0: 001D,1 001TL .BLK 0 001D,1 002TL 0E6 INC CFADR 5 ZP 001F,1 0D0 BNE 003TL 2* 0021,1 0E6 INC CFADR+ 1 5 ZP 114 T CC ADR + OFFSET [[CF ADR] 'RS' 4] -> CC ADR, 0023,1 003TL 0A0 LDY =.NULLX. 2 IM 0025,1 0B1 LDA @CFADR, YREG 5* IN 0027,1 0D0 BNE 004TL 2* 0029,1 04C JMP 005TL 3 AB 002C,1 004TL 04A LSR AREG 2 PAGE 6 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:38 002D,1 04A LSR AREG 2 002E,1 04A LSR AREG 2 002F,1 04A LSR AREG 2 0030,1 0A8 TAY 2 0031,1 0B9 LDA OFFSET, YREG 4* AB 0034,1 018 CLC 2 0035,1 065 ADC CCADR 3 ZP 0037,1 0AA TAX 2 0038,1 0A9 LDA =.NULLX. 2 IM 003A,1 065 ADC CCADR+ 1 3 ZP 003C,1 085 STA CCADR+ 1 3 ZP 003E,1 086 STX CCADR 3 ZP 115 0040 //ADD OFFSET FOR NEXT CHAN BUF ADR 116 0040 [CF ADR] & 0F -> CHARACTER COUNT # 0: 0040,1 0A0 LDY =.NULLX. 2 IM 0042,1 0B1 LDA @CFADR, YREG 5* IN 0044,1 029 AND =.NULLX.+ 15 2 IM 0046,1 08D STA CHARACTERCOUNT 4 AB 117 T //GO TO NXT CHAN IF NO CHARACTERS 118 T DEMUX CHANNEL;;//DEMULTIPLEX FOR ONE CHANNEL 0049,1 0F0 BEQ 006TL 2* 004B,1 020 JSR DEMUXCHANNEL 6 AB 119 004E 'END' 004E,1 006TL 04C JMP 002TL 3 AB 120 0051 'RBR' 0051,1 005TL 060 RTS 6 121 0052 .... 0052,1 .... PAGE 7 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:46 122 0001 //*********************************** 123 0001 //* * 124 0001 //* DEMULTIPLEX ONE CHANNEL * 125 0001 //* * 126 0001 //*********************************** 127 0001 // 128 0001 //NOTE:IF A CHARACTER IS ABOUT TO FILL AN EXISTING BUFFER, THE 129 0001 //DEMULTIPLEXING PROGRAM LINKS THE NEXT BUFFER BEFORE 130 0001 //ENTERING THE LAST CHARACTER IN THE EXISTING BUFFER. THIS 131 0001 //PREVENTS PROBLEMS WHICH MIGHT OCCUR IF THE MULTIPLEXING 132 0001 //PROGRAM FOR ANOTHER LPU GETS AHEAD OF THIS DEMULTIPLEXIN G 133 0001 //PROGRAM. 134 0001 135 0001 ;;DEMUX CHANNEL: 'LBR' 136 0052 IBP PAGE MAP [CC ADR] -> CB PM REG,//SET MAP FOR CURRENT BU F. 0052,1 DEMUXCHANNEL 0A0 LDY =IBPPAGEMAP 2 IM 0054,1 0B1 LDA @CCADR, YREG 5* IN 0056,1 08D STA CBPMREG 4 AB 137 0059 IBP ADDRESS [CC ADR] -> CB ADR,//SET CUR. BUF. ADDRESS 0059,1 0A0 LDY =IBPADDRESS 2 IM 005B,1 0B1 LDA @CCADR, YREG 5* IN 005D,1 085 STA CBADR 3 ZP 005F,1 0C8 INY 2 0060,1 0B1 LDA @CCADR, YREG 5* IN 0062,1 085 STA CBADR+ 1 3 ZP 138 0064 1 -> CTIMER [CC ADR],//SET CHAN TIMER FOR AUDIT 0064,1 0A9 LDA =.NULLX.+ 1 2 IM 0066,1 0A0 LDY =CTIMER 2 IM 0068,1 091 STA @CCADR, YREG 6 IN 139 006A 'DO' 'WHILE' CHARACTER COUNT # 0://CHANNEL LOOP 140 T ^ CF ADR,//FRAME PTR FOR NEXT CHAR 006A,1 001TL 0AD LDA CHARACTERCOUNT 4 AB 006D,1 0D0 BNE 002TL 2* 006F,1 04C JMP 003TL 3 AB 0072,1 002TL 0E6 INC CFADR 5 ZP 0074,1 0D0 BNE 004TL 2* 0076,1 0E6 INC CFADR+ 1 5 ZP 141 0078 'DEC' CHARACTER COUNT, 0078,1 004TL 0CE DEC CHARACTERCOUNT 6 AB 142 007B IPTR [CC ADR] = 0://LAST POSITION IN BUFFER? 143 T LINK BUFFER,//ATTACH NEXT BUFFER 007B,1 0A0 LDY =IPTR 2 IM 007D,1 0B1 LDA @CCADR, YREG 5* IN 007F,1 0F0 BEQ 005TL 2* 0081,1 04C JMP 006TL 3 AB 0084,1 005TL 020 JSR LINKBUFFER 6 AB 144 T 0087 [CF ADR] -> [CB ADR + IPTR[CC ADR]], 0087,1 0A5 LDA CBADR 3 ZP 0089,1 018 CLC 2 008A,1 0A0 LDY =IPTR 2 IM 008C,1 071 ADC @CCADR, YREG 5* IN 008E,1 0AA TAX 2 008F,1 0A5 LDA CBADR+ 1 3 ZP 0091,1 069 ADC =.NULLX. 2 IM 0093,1 086 STX CT0 3 ZP 0095,1 085 STA CT0+ 1 3 ZP 0097,1 0A0 LDY =.NULLX. 2 IM PAGE 8 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:32:58 0099,1 0B1 LDA @CFADR, YREG 5* IN 009B,1 091 STA @CT0, YREG 6 IN 145 T 009D //LOAD NEXT CHARACTER 146 T 009D AD NXT BUFF [CB ADR] -> IBP ADDRESS [CC ADR], 009D,1 0A0 LDY =ADNXTBUFF 2 IM 009F,1 0B1 LDA @CBADR, YREG 5* IN 00A1,1 0A0 LDY =IBPADDRESS 2 IM 00A3,1 091 STA @CCADR, YREG 6 IN 00A5,1 0A0 LDY =ADNXTBUFF+ 1 2 IM 00A7,1 0B1 LDA @CBADR, YREG 5* IN 00A9,1 0A0 LDY =IBPADDRESS+ 1 2 IM 00AB,1 091 STA @CCADR, YREG 6 IN 147 T 00AD //SET NXT INPUT CHAN PTR 148 T 00AD BP MAP [CB ADR] -> IBP PAGE MAP [CC ADR] -> CB PM REG, 00AD,1 0A0 LDY =BPMAP 2 IM 00AF,1 0B1 LDA @CBADR, YREG 5* IN 00B1,1 0A0 LDY =IBPPAGEMAP 2 IM 00B3,1 091 STA @CCADR, YREG 6 IN 00B5,1 08D STA CBPMREG 4 AB 149 T 00B8 MAX BUFF -> IPTR [CC ADR];//RESET INPUT PTR FOR NXT B LK 00B8,1 0A9 LDA =.NULLX.+ 12 2 IM 00BA,1 0A0 LDY =IPTR 2 IM 00BC,1 091 STA @CCADR, YREG 6 IN 150 F [CF ADR] -> [CB ADR + IPTR[CC ADR]], 00BE,1 04C JMP 007TL 3 AB 00C1,1 006TL 018 CLC 2 00C2,1 065 ADC CBADR 3 ZP 00C4,1 0AA TAX 2 00C5,1 0A9 LDA =.NULLX. 2 IM 00C7,1 065 ADC CBADR+ 1 3 ZP 00C9,1 086 STX CT0 3 ZP 00CB,1 085 STA CT0+ 1 3 ZP 00CD,1 0A0 LDY =.NULLX. 2 IM 00CF,1 0B1 LDA @CFADR, YREG 5* IN 00D1,1 091 STA @CT0, YREG 6 IN 151 F 00D3 //LOAD NEXT CHARACTER 152 F 00D3 'DEC' IPTR [CCADR];//SET NEXT INPUT POINTER 00D3,1 0A0 LDY =IPTR 2 IM 00D5,1 0B1 LDA @CCADR, YREG 5* IN 00D7,1 038 SEC 2 00D8,1 0E9 SBC =.NULLX.+ 1 2 IM 00DA,1 091 STA @CCADR, YREG 6 IN 153 00DC 'END' 00DC,1 007TL 04C JMP 001TL 3 AB 154 00DF 'RBR' 00DF,1 003TL 060 RTS 6 155 00E0 .... 00E0,1 .... PAGE 9 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:06 156 0001 //***************************** 157 0001 //***************************** 158 0001 //** ** 159 0001 //** MULTIPLEX FRAME ** 160 0001 //** ** 161 0001 //***************************** 162 0001 //***************************** 163 0001 164 0001 //INPUT:CF ADR IS SET FOR ADDRESS OF FIRST CONTROL CHARACT ER 165 0001 166 0001 FCHAR COUNT,//FRAME CHARACTER COUNT 0001,2 FCHARCOUNT .BLK 1 167 0002 FCHAN COUNT,//FRAME CHANNEL COUNT 0002,2 FCHANCOUNT .BLK 1 168 0003 SKIP COUNT,//CHANNELS SKIPPED - THIS CONTROL BYTE 0003,2 SKIPCOUNT .BLK 1 169 0004 BCHAR COUNT,//BYTE CHARACTER COUNT 0004,2 BCHARCOUNT .BLK 1 170 0005 'DP' CTLB ADR;//CONTROL BYTE ADDRESS IN FRAME 0005,2 CTLBADR .BLK 2 171 00E0 CB LENGTH = 12,//CHANNEL BLOCK LENGTH 00E0,1 CBLENGTH 00C 172 00E1 173 00E1 ;MULTIPLEX:: 'LBR' 174 00E1 0 -> FCHAR COUNT -> FCHAN COUNT, 00E1,1 MULTIPLEX 0A9 LDA =.NULLX. 2 IM 00E3,1 08D STA FCHARCOUNT 4 AB 00E6,1 08D STA FCHANCOUNT 4 AB 175 00E9 'DP' INITIAL CHAN AD () -> CC ADR,//INIT CHAN BLK ADR 00E9,1 020 JSR INITIALCHANAD 6 AB 00EC,1 085 STA CCADR+ 1 3 ZP 00EE,1 086 STX CCADR 3 ZP 176 00F0 'DO' 'WHILE' FCHAR COUNT <= MAX CPF://RUN TO LAST CHAN. 177 T CF ADR -> CTLB ADR,//SAVE CTL BYTE ADR. 00F0,1 001TL 0AD LDA FCHARCOUNT 4 AB 00F3,1 038 SEC 2 00F4,1 0E9 SBC =.NULLX.+ 200 2 IM 00F6,1 090 BCC 002TL 2* 00F8,1 0F0 BEQ 003TL 2* 00FA,1 04C JMP 004TL 3 AB 00FD,1 002TL .BLK 0 00FD,1 003TL 0A5 LDA CFADR 3 ZP 00FF,1 08D STA CTLBADR 4 AB 0102,1 0A5 LDA CFADR+ 1 3 ZP 0104,1 08D STA CTLBADR+ 1 4 AB 178 0107 ^ CF ADR,//NEXT FRAME POSITION 0107,1 0E6 INC CFADR 5 ZP 0109,1 0D0 BNE 005TL 2* 010B,1 0E6 INC CFADR+ 1 5 ZP 179 010D 0 -> BCHAR COUNT, 010D,1 005TL 0A9 LDA =.NULLX. 2 IM 010F,1 08D STA BCHARCOUNT 4 AB 180 0112 1 -> SKIP COUNT, 0112,1 0A9 LDA =.NULLX.+ 1 2 IM 0114,1 08D STA SKIPCOUNT 4 AB 181 0117 'DO' 'WHILE' SKIP COUNT # MAX SKIP & 0117,1 006TL 0AD LDA SKIPCOUNT 4 AB PAGE 10 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:14 011A,1 0C9 CMP =.NULLX.+ 15 2 IM 011C,1 0D0 BNE 007TL 2* 011E,1 04C JMP 008TL 3 AB 182 0121 BCHAR COUNT # 0://LOAD DATA FOR ONE CTL 183 T OBP PAGE MAP [CC ADR] -> CB PM REG,//MAP FOR CURRENT BUFFER 0121,1 007TL 0AD LDA BCHARCOUNT 4 AB 0124,1 0D0 BNE 009TL 2* 0126,1 04C JMP 00ATL 3 AB 0129,1 009TL 0A0 LDY =OBPPAGEMAP 2 IM 012B,1 0B1 LDA @CCADR, YREG 5* IN 012D,1 08D STA CBPMREG 4 AB 184 0130 OBP ADDRESS [CC ADR] -> CB ADR, 0130,1 0A0 LDY =OBPADDRESS 2 IM 0132,1 0B1 LDA @CCADR, YREG 5* IN 0134,1 085 STA CBADR 3 ZP 0136,1 0C8 INY 2 0137,1 0B1 LDA @CCADR, YREG 5* IN 0139,1 085 STA CBADR+ 1 3 ZP 185 013B [CB ADR + IPTR[CC ADR]] # 0://CHAR ON THIS CHAN? 013B,1 0A5 LDA CBADR 3 ZP 013D,1 018 CLC 2 013E,1 0A0 LDY =IPTR 2 IM 0140,1 071 ADC @CCADR, YREG 5* IN 0142,1 0AA TAX 2 0143,1 0A5 LDA CBADR+ 1 3 ZP 0145,1 069 ADC =.NULLX. 2 IM 186 T LOAD FRAME;//CHARACTER FOUND 0147,1 086 STX CT0 3 ZP 0149,1 085 STA CT0+ 1 3 ZP 014B,1 0A0 LDY =.NULLX. 2 IM 014D,1 0B1 LDA @CT0, YREG 5* IN 014F,1 0F0 BEQ 00BTL 2* 0151,1 020 JSR LOADFRAME 6 AB 187 F ^SKIP COUNT;//NONE FOUND 0154,1 04C JMP 00CTL 3 AB 0157,1 00BTL 0EE INC SKIPCOUNT 6 AB 188 015A CC ADR + CB LENGTH -> CC ADR,//NEXT CHANNEL BUFFER 015A,1 00CTL 0A5 LDA CCADR 3 ZP 015C,1 018 CLC 2 015D,1 06D ADC CBLENGTH 4 AB 0160,1 0AA TAX 2 0161,1 0A5 LDA CCADR+ 1 3 ZP 0163,1 069 ADC =.NULLX. 2 IM 0165,1 085 STA CCADR+ 1 3 ZP 0167,1 086 STX CCADR 3 ZP 189 0169 ^FCHAN COUNT = MAX CHAN: END MPLX.;//MAX CHAN COUNT 0169,1 0EE INC FCHANCOUNT 6 AB 016C,1 0AD LDA FCHANCOUNT 4 AB 016F,1 0C9 CMP =.NULLX.+ 240 2 IM 0171,1 0D0 BNE 00DTL 2* 0173,1 04C JMP ENDMPLX 3 AB 190 0176 'END' 0176,1 00DTL 04C JMP 006TL 3 AB 0179,1 008TL .BLK 0 191 0179 (SKIP COUNT 'LS' 4) + BCHAR COUNT -> [CTL BADR], //CONTR OL BYTE 0179,1 00ATL 0AD LDA SKIPCOUNT 4 AB 017C,1 00A ASL AREG 2 PAGE 11 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:28 017D,1 00A ASL AREG 2 017E,1 00A ASL AREG 2 017F,1 00A ASL AREG 2 0180,1 018 CLC 2 0181,1 06D ADC BCHARCOUNT 4 AB 0184,1 0AE LDX CTLBADR 4 AB 0187,1 085 STA CT0 3 ZP 0189,1 0AD LDA CTLBADR+ 1 4 AB 018C,1 086 STX CT1 3 ZP 018E,1 085 STA CT1+ 1 3 ZP 0190,1 0A5 LDA CT0 3 ZP 0192,1 0A0 LDY =.NULLX. 2 IM 0194,1 091 STA @CT1, YREG 6 IN 192 0196 'END' 0196,1 04C JMP 001TL 3 AB 193 0199 0 -> CF ADR,//MARK END OF FRAME 0199,1 004TL 0A9 LDA =.NULLX. 2 IM 019B,1 085 STA CFADR 3 ZP 019D,1 0A9 LDA =.NULLX. 2 IM 019F,1 085 STA CFADR+ 1 3 ZP 194 01A1 'RETURN'. 01A1,1 060 RTS 6 195 01A2 END MPLX: 196 (SKIP COUNT 'LS' 4) + BCHAR COUNT -> [CTL BADR],//SET CONTRO L BYTE 01A2,1 ENDMPLX 0AD LDA SKIPCOUNT 4 AB 01A5,1 00A ASL AREG 2 01A6,1 00A ASL AREG 2 01A7,1 00A ASL AREG 2 01A8,1 00A ASL AREG 2 01A9,1 018 CLC 2 01AA,1 06D ADC BCHARCOUNT 4 AB 01AD,1 0AE LDX CTLBADR 4 AB 01B0,1 085 STA CT0 3 ZP 01B2,1 0AD LDA CTLBADR+ 1 4 AB 01B5,1 086 STX CT1 3 ZP 01B7,1 085 STA CT1+ 1 3 ZP 01B9,1 0A5 LDA CT0 3 ZP 01BB,1 0A0 LDY =.NULLX. 2 IM 01BD,1 091 STA @CT1, YREG 6 IN 197 01BF 0 -> CF ADR,//MARK END OF FRAME 01BF,1 0A9 LDA =.NULLX. 2 IM 01C1,1 085 STA CFADR 3 ZP 01C3,1 0A9 LDA =.NULLX. 2 IM 01C5,1 085 STA CFADR+ 1 3 ZP 198 01C7 'RBR' 01C7,1 060 RTS 6 199 01C8 .... 01C8,1 .... PAGE 12 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:42 200 0007 //************************************** 201 0007 //** 202 0007 //* LOAD FRAME FOR ONE CHANNEL * 203 0007 //** 204 0007 //************************************** 205 0007 206 0007 ;;LOAD FRAME: 'LBR' 207 01C8 'DO' 'WHILE' BCHAR COUNT # MAX CPCB: 01C8,1 LOADFRAME .BLK 0 208 T [OPTR [CB ADR] + CB ADR] -> [CF ADR],//LOAD ONE CHARACTE R 01C8,1 001TL 0AD LDA BCHARCOUNT 4 AB 01CB,1 0C9 CMP =.NULLX.+ 15 2 IM 01CD,1 0D0 BNE 002TL 2* 01CF,1 04C JMP 003TL 3 AB 01D2,1 002TL 0A0 LDY =OPTR 2 IM 01D4,1 0B1 LDA @CBADR, YREG 5* IN 01D6,1 018 CLC 2 01D7,1 065 ADC CBADR 3 ZP 01D9,1 0AA TAX 2 01DA,1 0A9 LDA =.NULLX. 2 IM 01DC,1 065 ADC CBADR+ 1 3 ZP 01DE,1 086 STX CT0 3 ZP 01E0,1 085 STA CT0+ 1 3 ZP 01E2,1 0A0 LDY =.NULLX. 2 IM 01E4,1 0B1 LDA @CT0, YREG 5* IN 01E6,1 091 STA @CFADR, YREG 6 IN 209 01E8 ^ CF ADR,//NEXT FRAME ADDRESS 01E8,1 0E6 INC CFADR 5 ZP 01EA,1 0D0 BNE 004TL 2* 01EC,1 0E6 INC CFADR+ 1 5 ZP 210 01EE 'DEC' OPTR [CC ADR] & 080 # 0: 01EE,1 004TL 0A0 LDY =OPTR 2 IM 01F0,1 0B1 LDA @CCADR, YREG 5* IN 01F2,1 038 SEC 2 01F3,1 0E9 SBC =.NULLX.+ 1 2 IM 01F5,1 091 STA @CCADR, YREG 6 IN 211 T SET NEXT BUFFER, 01F7,1 030 BMI 005TL 2* 01F9,1 04C JMP 006TL 3 AB 01FC,1 005TL 020 JSR SETNEXTBUFFER 6 AB 212 T 01FF MAX BUFF -> OPTR [CC ADR];;//INIT. OUTPUT PTR 01FF,1 0A9 LDA =.NULLX.+ 12 2 IM 0201,1 0A0 LDY =OPTR 2 IM 0203,1 091 STA @CCADR, YREG 6 IN 213 0205 //CUR BUF. EMPTY? 214 0205 ^ BCHAR COUNT,//CHAR PER GROUP 0205,1 006TL 0EE INC BCHARCOUNT 6 AB 215 0208 [CB ADR + IPTR[CC ADR]] = 0: 'RETURN'.;//ANY MORE CHAR? 0208,1 0A5 LDA CBADR 3 ZP 020A,1 018 CLC 2 020B,1 0A0 LDY =IPTR 2 IM 020D,1 071 ADC @CCADR, YREG 5* IN 020F,1 0AA TAX 2 0210,1 0A5 LDA CBADR+ 1 3 ZP 0212,1 069 ADC =.NULLX. 2 IM 0214,1 086 STX CT0 3 ZP 0216,1 085 STA CT0+ 1 3 ZP PAGE 13 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:56 0218,1 0A0 LDY =.NULLX. 2 IM 021A,1 0B1 LDA @CT0, YREG 5* IN 021C,1 0F0 BEQ 007TL 2* 021E,1 04C JMP 008TL 3 AB 0221,1 007TL 060 RTS 6 216 0222 'END' 0222,1 008TL 04C JMP 001TL 3 AB 217 0225 'RBR' 0225,1 003TL 060 RTS 6 218 0226 .... 0226,1 .... PAGE 14 FRAME MULTIPLEX & DEMULTIPLEX MOS LOG S (2.0G) 16-FEB-79 13:33:59 219 0007 ''END 0226,1 .... .....NAME....... ..LOC.... .TYPE. .....NAME....... ..LOC.... .TYPE. .....NAME....... ..LOC.... .TYPE. ADNXTBUFF 000E,0F D,T BCHARCOUNT 0004,02 BPMAP 000D,0F T CBADR 0004,0E D CBLENGTH 00E0,01 CBPMREG NORM EXT CCADR 0002,0E D CFADR 0000,0E D CHARACTERCOUNT 0000,02 CT0 DISP EXT D CT1 DISP EXT D CTIMER 000B,0F T CTLBADR 0005,02 D DEMULTIPLEX 0010,01 *,N DEMUXCHANNEL 0052,01 ENDMPLX 01A2,01 FCHANCOUNT 0002,02 FCHARCOUNT 0001,02 IBPADDRESS 0005,0F D,T IBPPAGEMAP 0004,0F T INITIALCHANAD NORM EXT IPTR 0007,0F T LINKBUFFER NORM EXT LOADFRAME 01C8,01 MAXBUFF 000C C MAXCHAN 00F0 C MAXCPCB 000F C MAXCPF 00C8 C MAXSKIP 000F C MULTIPLEX 00E1,01 *,N OBPADDRESS 0001,0F D,T OBPPAGEMAP 0000,0F T OFFSET 0000,01 OPTR 0003,0F T SETNEXTBUFFER NORM EXT SKIPCOUNT 0003,02 ENTRY POINTS DEMULTIPLEX 0010,01 *,N MULTIPLEX 00E1,01 *,N EXTERNALS CBPMREG NORM EXT CT0 DISP EXT D CT1 DISP EXT D INITIALCHANAD NORM EXT LINKBUFFER NORM EXT SETNEXTBUFFER NORM EXT NAMES 104/ 499 TEXT 327 USE COUNTS: REGISTER 0, CRUTCH 0 BRANCHES 6, IN RANGE 6 01 : 0226 02 : 0007 0E : 0006 NO ERROR(S), COMPILATION COMPLETE