SUBFILE: MUXDEM.LOS @15:57 23-MAY-1979 <055> (1483) ''HEAD,FRAME MULTIPLEX & DEMULTIPLEX ''TITLE,MUXDEMUX ''LIST //*************************************************** // // DESCRIPTION: SAMPLE INTRANODAL MULTIPLEXING AND DE- // MULTIPLEXING PROGRAMS. // // LOCATION: MUXDEMUX.LOS // // DATE: NOVEMBER 9, 1978 // ''EJECT //******************************** //* * //* POINTER BLOCK FORMAT * //* * //******************************** 'TP' [0]: 'LBR' OBP PAGE MAP, //OUTPUT BUFFER POINTER PAGE MAP 'DP' OBP ADDRESS, //OUTPUT BUFFER ADDRESS OPTR, //OUTPUT CHARACTER POINTER IBP PAGE MAP, //INPUT BUFFER POINTER PAGE MAP 'DP' IBP ADDRESS, //INPUT BUFFER ADDRESS IPTR, //INPUT CHARACTER POINTER CP PAGE MAP, //PARE MAP FOR CONNECTION POINTER 'DP' CP ADDRESS, //ADDRESS FOR CONNECTION POINTER C TIMER, //CONNECTION TIMER FOR AUDIT 'RBR' ''EJECT //********************************************* //* * //* INTRANODAL CHARACTER BUFFER FORMAT * //* * //********************************************* // ASSUME THE FOLLOWING: // 1. EMPTY CHARACTER DATA BUFFERS ARE INITIALIZED TO CONTAIN // ZEROS. DATA OF ZERO INDICATES NO CHARACTER PRESENT. // // 2. CHARACTERS STORED IN DESCENDING ADDRESS ORDER WITH INITIAL // INPUT AND OUTPUT POINTERS AT OFFSET 12. // // 3. THE INPUT POINTER SHOWS THE POSITION FOR THE NEXT CHARACTER // WITHIN THE CURRENT BUFFER. WHEN THE LAST CHARACTER POS- // ITION IN THE BUFFER IS ABOUT TO BE FILLED, THE DEMULTIPLEX // PROGRAM LINKS A NEW EMPTY BUFFER AND THEN FILLS IN THE // FINAL CHARACTER FOR THE PREVIOUS BUFFER. // // 4. BLOCKS ARE FILLED LINEARLY BY THE DEMULTIPLEX PROGRAM, // EMPTIED BY THE MULTIPLEX PROGRAM, AND THEN RELEASED. // WHEN THEY ARE RELEASED, THEY ARE ASSIGNED TO THE FREE // POOL FOR THE MULTIPLEXING LPU UNTIL THEY ARE REUSED // BY THAT LPU OR RELEASED TO THE COMMON SYSTEM FREE POOL. 'TP' [13]: 'LBR' BP MAP, //BUFFER POINTER PAGE MAP 'DP' AD NXT BUFF, //ADDRESS OF NEXT CHARACTER BUFFER 'RBR' ''EJECT //********************************** //* * //* OPERATIONAL PARAMETERS * //* * //********************************** MAX CPF: 200, //MAXIMUM NUMBER (APPROX) OF CHAR/FRAME MAX SKIP: 15, //MAX. NR. CHANNELS TO SKIP PER CNTRL BYTE MAX CPCB: 15, //MAX. NR CHAR/CHANNEL/CONTROL BYTE MAX CHAN: 240, //MAX NUMBER OF CHANNELS PER FRAME MAX BUFF: 12, //MAXIMUM DATA BUFFER OFFSET //******************************* //* * //* ZERO PAGE ADDRESSES * //* * //******************************* 'ZREL' 'LBR' 'DP' CF ADR, //CURRENT FRAME ADDRESS 'DP' CC ADR, //CURRENT CHANNEL DEFINITION BLOCK 'DP' CB ADR, //CURRENT CHARACTER BUFFER ADDRESS 'RBR' ''EJECT //************************* //************************* //** ** //** DEMULTIPLEX ** //** ** //************************* //************************* // // DESCRIPTION: MAIN PROGRAM TO DEMULTIPLEX CHARACTERS FROM AN // INPUT FRAME. // // INPUT: ASSUME THAT THE FRAME POINTER, CF ADR, IS POINTING // TO THE INITIAL CHANNEL NUMBER. CHARACTER COUNT, //CHARACTERS LEFT FOR THIS CHANNEL ;OFFSET = 0, 12, 24, 36, //BLOCK INCREMENT BY CHAN SKIP INDEX 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 168, 180, ;DEMULTIPLEX:: 'LBR' 'DP' INITIAL CHAN AD () -> CC ADR, //CAL. FIRST CHAN BLK ADR ^CF ADR, 'DO' ^CF ADR, 'WHILE' [CF ADR] # 0: CC ADR + OFFSET [[CF ADR] 'RS' 4] -> CC ADR, //ADD OFFSET FOR NEXT CHAN BUF ADR [CF ADR] & 0F -> CHARACTER COUNT # 0: //GO TO NXT CHAN IF NO CHARACTERS DEMUX CHANNEL;; //DEMULTIPLEX FOR ONE CHANNEL 'END' 'RBR' .... //*********************************** //* * //* DEMULTIPLEX ONE CHANNEL * //* * //*********************************** // // NOTE: IF A CHARACTER IS ABOUT TO FILL AN EXISTING BUFFER, THE // DEMULTIPLEXING PROGRAM LINKS THE NEXT BUFFER BEFORE // ENTERING THE LAST CHARACTER IN THE EXISTING BUFFER. THIS // PREVENTS PROBLEMS WHICH MIGHT OCCUR IF THE MULTIPLEXING // PROGRAM FOR ANOTHER LPU GETS AHEAD OF THIS DEMULTIPLEXING // PROGRAM. ;;DEMUX CHANNEL: 'LBR' IBP PAGE MAP [CC ADR] -> CB PM REG, //SET MAP FOR CURRENT BUF. IBP ADDRESS [CC ADR] -> CB ADR, //SET CUR. BUF. ADDRESS 1 -> CTIMER [CC ADR], //SET CHAN TIMER FOR AUDIT 'DO' 'WHILE' CHARACTER COUNT # 0: //CHANNEL LOOP ^ CF ADR, //FRAME PTR FOR NEXT CHAR 'DEC' CHARACTER COUNT, IPTR [CC ADR] = 0: //LAST POSITION IN BUFFER? LINK BUFFER, //ATTACH NEXT BUFFER [CF ADR] -> [CB ADR + IPTR[CC ADR]], //LOAD NEXT CHARACTER AD NXT BUFF [CB ADR] -> IBP ADDRESS [CC ADR], //SET NXT INPUT CHAN PTR BP MAP [CB ADR] -> IBP PAGE MAP [CC ADR] -> CB PM REG, MAX BUFF -> IPTR [CC ADR]; //RESET INPUT PTR FOR NXT BLK [CF ADR] -> [CB ADR + IPTR[CC ADR]], //LOAD NEXT CHARACTER 'DEC' IPTR [CCADR]; //SET NEXT INPUT POINTER 'END' 'RBR' .... //***************************** //***************************** //** ** //** MULTIPLEX FRAME ** //** ** //***************************** //***************************** // INPUT: CF ADR IS SET FOR ADDRESS OF FIRST CONTROL CHARACTER FCHAR COUNT, //FRAME CHARACTER COUNT FCHAN COUNT, //FRAME CHANNEL COUNT SKIP COUNT, //CHANNELS SKIPPED - THIS CONTROL BYTE BCHAR COUNT, //BYTE CHARACTER COUNT 'DP' CTLB ADR; //CONTROL BYTE ADDRESS IN FRAME CB LENGTH = 12, //CHANNEL BLOCK LENGTH ;MULTIPLEX:: 'LBR' 0 -> FCHAR COUNT -> FCHAN COUNT, 'DP' INITIAL CHAN AD () -> CC ADR, //INIT CHAN BLK ADR 'DO' 'WHILE' FCHAR COUNT <= MAX CPF: //RUN TO LAST CHAN. CF ADR -> CTLB ADR, //SAVE CTL BYTE ADR. ^ CF ADR, //NEXT FRAME POSITION 0 -> BCHAR COUNT, 1 -> SKIP COUNT, 'DO' 'WHILE' SKIP COUNT # MAX SKIP & BCHAR COUNT # 0: //LOAD DATA FOR ONE CTL OBP PAGE MAP [CC ADR] -> CB PM REG, //MAP FOR CURRENT BUFFER OBP ADDRESS [CC ADR] -> CB ADR, [CB ADR + IPTR[CC ADR]] # 0: //CHAR ON THIS CHAN? LOAD FRAME; //CHARACTER FOUND ^SKIP COUNT; //NONE FOUND CC ADR + CB LENGTH -> CC ADR, //NEXT CHANNEL BUFFER ^FCHAN COUNT = MAX CHAN: END MPLX.; //MAX CHAN COUNT 'END' (SKIP COUNT 'LS' 4) + BCHAR COUNT -> [CTL BADR], //CONTROL BYTE 'END' 0 -> CF ADR, //MARK END OF FRAME 'RETURN'. END MPLX: (SKIP COUNT 'LS' 4) + BCHAR COUNT -> [CTL BADR],//SET CONTROL BYTE 0 -> CF ADR, //MARK END OF FRAME 'RBR' .... //************************************** //* * //* LOAD FRAME FOR ONE CHANNEL * //* * //************************************** ;;LOAD FRAME: 'LBR' 'DO' 'WHILE' BCHAR COUNT # MAX CPCB: [OPTR [CB ADR] + CB ADR] -> [CF ADR], //LOAD ONE CHARACTER ^ CF ADR, //NEXT FRAME ADDRESS 'DEC' OPTR [CC ADR] & 080 # 0: SET NEXT BUFFER, MAX BUFF -> OPTR [CC ADR];; //INIT. OUTPUT PTR //CUR BUF. EMPTY? ^ BCHAR COUNT, //CHAR PER GROUP [CB ADR + IPTR[CC ADR]] = 0: 'RETURN'.; //ANY MORE CHAR? 'END' 'RBR' .... ''END \\\\\ SUBFILE: MUXDEM.LST @15:57 23-MAY-1979 <055> (7437) PAGE 1 FRAME MULTIPLEX & DEMULTIPLEX MOS LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 LOGO 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 \\\\\ SUBFILE: MUXDEM.LRB @15:57 23-MAY-1979 <055> (781) MU XD EM UX SY 0: MU XD EM UX .L OS 16 -F EB -7 9 13 :3 4: 02 MO S LO GO S (2 .0 G) .A BS OL UT E. .N OU NS . .D AT A. .Z RE L. & .C OD E. DE MU LT IP LE X a MU LT IP LE X IN IT IA LC HA NA D LI NK BU FF ER SE TN EX TB UF FE R CT 0 CT 1 CB PM RE G $ 0 < H T ` l x ( 4 f P f f P f 1 P L Q J J J J ( 9 e * ) e 1 ) p R L ` 1 1 H 1 ) - P L _ f P f N 1 p L A % q * % i 1 1 1 1 ) L \ e * ) e 1 1 8 i L j ` ) - 8 i H p L % % f P f ) ) - I P L y - P L y 1 1 H 1 % q * % i 1 p H L Z n % m ` * % i n - I p P L " L - m . - % L p ) ) ` - m . - % ) ) ` - I P L % 1 e * ) e 1 f P f 1 8 i 0 L ) n % q * % i 1 p L " ` L H ` & \\\\\ SUBFILE: DEFOPK.LO @15:57 23-MAY-1979 <055> (110) ''HEAD, DEFAULT OUTPUT PACKET // EDIT DATE 21AUG78 17:24 // SOURCE FILE DEFOPKT.LO // AUTHOR A. J. HOWARD DEF O PKT: [E.BUF], BUFFER SIZE: 72, DEF O PKT: DEF O PKT = 'LOC' BUFFER, 1, BUFFER SIZE, 1, 'LOC' TTY OUTPUT, 0, BUFFER [BUFFER SIZE] = 'FOR' BUFFER SIZE 'LBR' " " 'RBR' ; ;DEFAULT OUTPUT PACKET: ..... ''END \\\\\ SUBFILE: ENTERA.LO @15:57 23-MAY-1979 <055> (698) ''HEAD, 6502 OUTPUT CONVERSION // EDIT DATE 10OCT78 12:51 // SOURCE FILE ENTERAJH.LO // AUTHOR A. J. HOWARD ''USE, PACKET AJH.US; 1 'TP' [0]:'LBR' BUFFER, 'RBR' 'DP' BUFFERX, 'DP' DP VALUE, COUNT, MINUS FLAG, SP VALUE, ;; ..... ; HEX TAB [16] = "0123456789ABCDEF", ;ENTER SP:: 'LBR' // (PKT, VAL, WIDTH) [FL1] -> DP VALUE, ENTER DP VALUE, 'RBR' ENTER DP:: 'LBR' // (PKT, VAL, WIDTH) 'DP' [FL1] -> DP VALUE, ENTER DP VALUE, 'RBR' ENTER DP VALUE:'LBR' [FL2] -> COUNT, SETUP CONVERT, 0 -> MINUS FLAG, DP VALUE < 0: -DP VALUE -> DP VALUE, ^MINUS FLAG;; 'DO' DP VALUE/10 -> DP VALUE, REMAINDER + "0" -> BUFFER [BUFFERX], 'WHILE' 'DEC' COUNT # 0: 'DEC' BUFFERX, 'END' COUNT # 0 & MINUS FLAG # 0: "-" -> BUFFER [BUFFERX];; 'RBR' ENTER HX:: 'LBR' // (PKT, VAL, WIDTH) [FL2] -> COUNT, SETUP CONVERT, [FL1] -> SP VALUE, 'DO' HEX TAB [SP VALUE & 0F] -> BUFFER [BUFFERX], 'WHILE' 'DEC' COUNT # 0: SP VALUE 'RS' 4 -> SPVALUE, 'DEC' BUFFERX, 'END' 'RBR' SETUP CONVERT:'LBR' COUNT + CHARX [FL0] -> CHARX [FL0] > MAX CHARX [FL0]: CHARX [FL0] -> MAX CHARX [FL0];; BUFAD [FL0] + CHARX [FL0] - 1 -> BUFFERX, 'RBR' ..... 'DP' STRINGX, ; ;ENTER ST:: 'LBR' // (PKT, STRING, WIDTH) [FL2] -> COUNT, SETUP CONVERT, FL1 + COUNT - 1 -> STRINGX, 'DO' [STRINGX] -> BUFFER [BUFFERX], 'WHILE' 'DEC' COUNT # 0: 'DEC' STRINGX, 'DEC' BUFFERX, 'END' 'RBR' ENTER BL:: 'LBR' // (PKT, WIDTH) [FL1] -> COUNT, SETUP CONVERT, CLEAR BUFFER, 'RBR' CLEAR BUFFER:'LBR' 'DO' " " -> BUFFER [BUFFERX], 'WHILE' 'DEC' COUNT # 0: 'DEC' BUFFERX, 'END' 'RBR' ..... ; ;ENTER TA:: 'LBR' // (PKT, COL) 0 -> CHARX [FL0], [FL1] -> COUNT, SETUP CONVERT, 'RBR' ENTER PC:: 'LBR' // (PKT, RIGHT MOVE) [FL1] -> COUNT, SETUP CONVERT, 'RBR' ENTER MC:: 'LBR' // (PKT, LEFT MOVE) - [FL1] -> COUNT, SETUP CONVERT, 'RBR' ..... ; ;ENTER EJ:: 'LBR' // (PKT) 255 -> DRIVER FLAG [FL0], CALL DRIVER, 'RBR' ENTER LN:: 'LBR' // (PKT, LINES) [FL1] -> DRIVER FLAG [FL0], CALL DRIVER, 'RBR' CALL DRIVER:'LBR' [DRIVER [FL0]], MAX CHARX [FL0] -> COUNT - 1 + BUFAD [FL0] -> BUFFERX, CLEAR BUFFER, 1 -> CHARX [FL0] -> MAX CHARX [FL0], 'RBR' ..... ''END \\\\\ SUBFILE: DEFIPK.LO @15:57 23-MAY-1979 <055> (109) ''HEAD, DEFAULT INPUT PACKET // EDIT DATE 21AUG78 17:28 // SOURCE FILE DEFIPKT.LO // AUTHOR A. J. HOWARD DEF I PKT: [I.BUF], BUFFER SIZE: 72, DEF I PKT: DEF I PKT = 'LOC' BUFFER, 1, BUFFER SIZE, 1, 'LOC' TTY INPUT, 0, BUFFER [BUFFER SIZE] = 'FOR' BUFFER SIZE 'LBR' " " 'RBR' ; ;DEFAULT INPUT PACKET: ..... ''END \\\\\ SUBFILE: INTRPA.LO @15:57 23-MAY-1979 <055> (802) ''HEAD, 6502 INPUT CONVERSION // EDIT DATE 10OCT78 12:45 // SOURCE FILE INTRPAJH.LO // AUTHOR A. J. HOWARD ''USE, PACKET AJH.US; 1 'TP' [0]:'LBR' BUFFER, 'RBR' 'DP' BUFFERX, 'DP' DP VALUE, CHAR, COUNT, MINUS FLAG, ;; ..... BASE, ; ;INTRP SP:: 'LBR' // (PKT, VAL, WIDTH) 10 -> BASE, INTRP DP VALUE, DP VALUE -> [FL1], 'RBR' INTRP DP:: 'LBR' // (PKT, VAL, WIDTH) 10 -> BASE, INTRP DP VALUE, DP VALUE -> 'DP' [FL1], 'RBR' INTRP HX:: 'LBR' // (PKT, VAL, WIDTH) 16 -> BASE, INTRP DP VALUE, DP VALUE -> [FL1], 'RBR' INTRP DP VALUE:'LBR' [FL2] -> COUNT, SETUP CONVERT, 0 -> MINUS FLAG -> DP VALUE, 'DO' // FIND A VALID START CHARACTER 'WHILE' COUNT # 0: GET CHARACTER, CHAR = "-": ^MINUS FLAG; // LEADING - CHAR # "+": // LEADING + TEST NUMERIC () # 0: ^COUNT, // NUMERIC 'DEC' BUFFERX; 'END' ; ;; ; 'DO' // CONVERT THE NUMBER 'WHILE' GET CHARACTER () # 0: TEST NUMERIC () # 0: BASE*DP VALUE + CHAR -> DP VALUE, 'END' ;; MINUS FLAG # 0: -DP VALUE -> DP VALUE;; COUNT -> AMT LEFT [FL0], CHARX [FL0] - COUNT -> CHARX [FL0], 'RBR' TEST NUMERIC:'LBR' CHAR >= "0" & CHAR <= "9": CHAR - "0" -> CHAR, 'RETURN' 1.; // NUMERIC BASE = 16 & CHAR >= "A" & CHAR <= "F": CHAR - ("A" - 10) -> CHAR, 'RETURN' 1.; // NUMERIC (HEX) 'RETURN' 0, // NON NUMERIC 'RBR' ..... 'DP' STRINGX, ; ;INTRP ST:: 'LBR' // (PKT, STRING, WIDTH) [FL2] -> COUNT, SETUP CONVERT, FL1 -> STRINGX, 'DO' 'WHILE' GET CHARACTER () # 0: CHAR -> [STRINGX], ^STRINGX, 'END' 'RBR' INTRP BL:: 'LBR' // (PKT, WIDTH) // // NO MEANING ON INPUT // 'RBR' SETUP CONVERT:'LBR' BUFAD [FL0] + CHARX [FL0] - 1 -> BUFFERX, CHARX [FL0] + COUNT -> CHARX [FL0], 0 -> AMT LEFT [FL0], 'RBR' GET CHARACTER:'LBR' COUNT = 0: 'RETURN' COUNT.; // DONE BUFFER [BUFFERX] -> CHAR, ^BUFFERX, 'DEC' COUNT, 'RETURN' 1, 'RBR' ..... ; ;INTRP TA:: 'LBR' // (PKT, COL) 0 -> CHARX [FL0], [FL1] -> COUNT, SETUP CONVERT, 'RBR' INTRP PC:: 'LBR' // (PKT, RIGHT MOVE) [FL1] -> COUNT, SETUP CONVERT, 'RBR' INTRP MC:: 'LBR' // (PKT, LEFT MOVE) - [FL1] -> COUNT, SETUP CONVERT, 'RBR' ..... ; ;INTRP EJ:: // (PKT) // // SAME AS INPUT LINE // INTRP LN:: 'LBR' // (PKT, LINES) SIZE [FL0] -> COUNT - 1 + BUFAD [FL0] -> BUFFERX, 'DO' " " -> BUFFER [BUFFERX], 'WHILE' 'DEC' COUNT # 0: 'DEC' BUFFERX, 'END' [DRIVER [FL0]], 1 -> CHARX [FL0], 'RBR' ..... ''END \\\\\ SUBFILE: DIVIDE.LO @15:57 23-MAY-1979 <055> (496) ''HEAD, MUL DIVIDE FOR 6502 // EDIT DATE 09OCT78 11:04 // SOURCE FILE DIVIDEFTM.LO // AUTHOR F. T. MICKEY 'DP' 'LBR' MULTIPLICAND: REMAINDER: REMAINDER, DIVISOR: MULTIPLIER, QUOTIENT: QUOTIENT: PRODUCT: PRODUCT, MASK, 'RBR' RESULT SIGN, REMAINDER SIGN, ''EJECT ;;SS DIVIDE:: 'LBR' 0 -> 'SP' REMAINDER [1], DS DIVIDE:: 0 -> 'SP' DIVISOR [1], DD DIVIDE. SD DIVIDE:: 0 -> 'SP' REMAINDER [1], DD DIVIDE:: 0 -> RESULT SIGN -> REMAINDER SIGN -> QUOTIENT, DIVISOR # 0: REMAINDER < 0: -REMAINDER -> REMAINDER, ^RESULT SIGN, ^REMAINDER SIGN;; DIVISOR < 0: -DIVISOR -> DIVISOR, ^RESULT SIGN;; // SCALE 1 -> MASK, 'DO' 'WHILE' REMAINDER > DIVISOR: DIVISOR 'LS' 1 -> DIVISOR, MASK 'LS' 1 -> MASK, 'END' // DIVIDE LOOP 'DO' REMAINDER >= DIVISOR: REMAINDER - DIVISOR -> REMAINDER, QUOTIENT 'OR' MASK -> QUOTIENT;; 'WHILE' MASK 'RS' 1 -> MASK # 0: DIVISOR 'RS' 1 -> DIVISOR, 'END' // DONE, SET PROPER SIGNS RESULT SIGN = 1: -QUOTIENT -> QUOTIENT;; REMAINDER SIGN # 0: -REMAINDER -> REMAINDER;; ;; 'RBR' ..... ;;SS MULTIPLY:: 'LBR' 0 -> 'SP' MULTIPLICAND [1], DS MULTIPLY:: 0 -> 'SP' MULTIPLIER [1], DD MULTIPLY. SD MULTIPLY:: 0 -> 'SP' MULTIPLICAND [1], DD MULTIPLY:: 0 -> RESULT SIGN -> PRODUCT, MULTIPLICAND < 0: -MULTIPLICAND -> MULTIPLICAND, 1 -> RESULT SIGN;; MULTIPLIER < 0: -MULTIPLIER -> MULTIPLIER, ^RESULT SIGN;; // MULTIPLY LOOP 'DO' MULTIPLICAND & 1 # 0: MULTIPLIER + PRODUCT -> PRODUCT;; 'WHILE' MULTIPLICAND 'RS' 1 -> MULTIPLICAND # 0: MULTIPLIER 'LS' 1 -> MULTIPLIER, 'END' RESULT SIGN = 1: -PRODUCT -> PRODUCT;; 'RBR' ..... ''END \\\\\ SUBFILE: CTXDEF.LO @15:57 23-MAY-1979 <055> (105) ''HEAD, CTX DEFAULT DEFINITIONS // EDIT DATE 06OCT78 15:00 // SOURCE FILE CTXDEFS.LO // AUTHOR A. J. HOWARD // DEFAULT CTX DEFINITIONS ALLOCATED TO 'ZREL' 'ZREL' 'LBR' CT0: CT0 [2], CT1: CT1 [2], CT2: CT2 [2], CT3: CT3 [2], CT4: CT4 [2], CT5: CT5 [2], CT6: CT6 [2], 'RBR' ; ;DEFAULT CTX: ..... ''END \\\\\ SUBFILE: FLDEFS.LO @15:57 23-MAY-1979 <055> (98) ''HEAD, FLX DEFAULT DEFINITIONS // EDIT DATE 06OFL78 15:00 // SOURCE FILE FLXDEFS.LO // AUTHOR A. J. HOWARD // DEFAULT FLX DEFINITIONS ALLOCATED TO 'ZREL' 'ZREL' 'LBR' FL0: FL0 [2], FL1: FL1 [2], FL2: FL2 [2], FL3: FL3 [2], FL4: FL4 [2], FL5: FL5 [2], 'RBR' ; ;DEFAULT FLX: ..... ''END \\\\\ SUBFILE: TST12A.LOS @15:57 23-MAY-1979 <055> (625) ''TITLE, TEST12A ''HEAD, LINKER COMMON ALLOCATION TEST ''LIST ///////////////////////////////////////////////////////// // // // DATE : SEP 18,1978 // // // // AUTHOR : T. CHENG // // // // TEST # : TEST12A // // // // PURPOSE : TEST MEMORY ALLOCATION FOR BLANK // // AND NAMED COMMONS. // // // // NOTE : LINK WITH TEST12B,TEST12C AND // // TEST12D FOR TESTING. // // // ///////////////////////////////////////////////////////// ''EJECT 'LBR' A, B[3], C 'RBR', // BLANK COMMON COM1 : 'LBR' FLAG1, BUFFER1[100], 'DP' BUFPTR1 'RBR', // #1 NAMED COMMON COM2 : 'LBR' FLAG2, BUFFER2[100], 'DP' BUFPTR2 'RBR', // #2 NAMED COMMON COM3 : 'LBR' FLAG3, BUFFER3[100], 'DP' BUFPTR3 'RBR', // #3 NAMED COMMON COM4 : 'LBR' FLAG4, BUFFER4[100], 'DP' BUFPTR4 'RBR', // #4 NAMED COMMON COM5 : 'LBR' FLAG5, BUFFER5[100], 'DP' BUFPTR5 'RBR', // #5 NAMED COMMON COM6 : 'LBR' FLAG6, BUFFER6[100], 'DP' BUFPTR6 'RBR', // #6 NAMED COMMON COM7 : 'LBR' FLAG7, BUFFER7[100], 'DP' BUFPTR7 'RBR', // #7 NAMED COMMON COM8 : 'LBR' FLAG8, BUFFER8[100], 'DP' BUFPTR8 'RBR', // #8 NAMED COMMON COM9 : 'LBR' FLAG9, BUFFER9[100], 'DP' BUFPTR9 'RBR', // #9 NAMED COMMON ;;TEST12A:: // FLOWCHART NAME 'LOC' BUFFER1 -> BUFPTR1, // BUF PTR1 'LOC' BUFFER2 -> BUFPTR2, // BUF PTR2 'LOC' BUFFER3 -> BUFPTR3, // BUF PTR3 'LOC' BUFFER4 -> BUFPTR4, // BUF PTR4 'LOC' BUFFER5 -> BUFPTR5, // BUF PTR5 'LOC' BUFFER6 -> BUFPTR6, // BUF PTR6 'LOC' BUFFER7 -> BUFPTR7, // BUF PTR7 'LOC' BUFFER8 -> BUFPTR8, // BUF PTR8 'LOC' BUFFER9 -> BUFPTR9, // BUF PTR9 0 -> FLAG1 -> FLAG2 -> FLAG3 -> B[0], // INIT FLAGS SUB123, // CALL SUB IN TEST12B 0 -> FLAG4 -> FLAG5 -> FLAG6 -> B[1], // INIT FLAGS SUB456, // CALL SUB IN TEST12C 0 -> FLAG7 -> FLAG8 -> FLAG9 -> B[2], // INIT FLAGS SUB789, // CALL SUB IN TEST12D 5 -> A, 8 -> C, ..... ''END \\\\\ SUBFILE: TST12B.LOS @15:57 23-MAY-1979 <055> (396) ''TITLE, TEST12B ''HEAD, LINKER COMMON ALLOCATION TEST ''LIST ///////////////////////////////////////////////////////// // // // DATE : SEP 18,1978 // // // // AUTHOR : T. CHENG // // // // TEST # : TEST12B // // // // PURPOSE : TEST MEMORY ALLOCATION FOR BLANK // // AND NAMED COMMONS. // // // // NOTE : LINK WITH TEST12A,TEST12C AND // // TEST12D FOR TESTING. // // // ///////////////////////////////////////////////////////// ''EJECT 'LBR' BA, BB[3], BC 'RBR', // BLANK COMMON COM1 : 'LBR' BFLAG1, BUF1[100], 'DP' BPTR1 'RBR', // #1 NAMED COMMON COM2 : 'LBR' BFLAG2, BUF2[100], 'DP' BPTR2 'RBR', // #2 NAMED COMMON COM3 : 'LBR' BFLAG3, BUF3[100], 'DP' BPTR3 'RBR', // #3 NAMED COMMON ;;TEST12B:: // FLOWCHART NAME SUB123:: 'LBR' // ENTRY POINT 0 -> BA, // 4 -> BFLAG1, // 5 -> BFLAG2, // 6 -> BFLAG3, // BPTR1 -> 'DP' BB, // BUF1[1] -> BUF2[2], // BUF2[2] -> BUF3[2], // 'RBR' ..... ''END \\\\\ SUBFILE: TST12C.LOS @15:57 23-MAY-1979 <055> (396) ''TITLE, TEST12C ''HEAD, LINKER COMMON ALLOCATION TEST ''LIST ///////////////////////////////////////////////////////// // // // DATE : SEP 19,1978 // // // // AUTHOR : T. CHENG // // // // TEST # : TEST12C // // // // PURPOSE : TEST MEMORY ALLOCATION FOR BLANK // // AND NAMED COMMONS. // // // // NOTE : LINK WITH TEST12A,TEST12B AND // // TEST12D FOR TESTING. // // // ///////////////////////////////////////////////////////// ''EJECT 'LBR' CA, CB[3], CC 'RBR', // BLANK COMMON COM4 : 'LBR' CFLAG4, BUF4[100], 'DP' BPTR4 'RBR', // #4 NAMED COMMON COM5 : 'LBR' CFLAG5, BUF5[100], 'DP' BPTR5 'RBR', // #5 NAMED COMMON COM6 : 'LBR' CFLAG6, BUF6[100], 'DP' BPTR6 'RBR', // #6 NAMED COMMON ;;TEST12C:: // FLOWCHART NAME SUB456:: 'LBR' // ENTRY POINT 0 -> CA, // 4 -> CFLAG4, // 5 -> CFLAG5, // 6 -> CFLAG6, // BPTR4 -> 'DP' CB, // BUF4[1] -> BUF5[2], // BUF5[2] -> BUF6[2], // 'RBR' ..... ''END \\\\\ SUBFILE: TST12D.LOS @15:57 23-MAY-1979 <055> (438) ''TITLE, TEST12D ''HEAD, LINKER COMMON ALLOCATION TEST ''LIST ///////////////////////////////////////////////////////// // // // DATE : SEP 19,1978 // // // // AUTHOR : T. CHENG // // // // TEST # : TEST12D // // // // PURPOSE : TEST MEMORY ALLOCATION FOR BLANK // // AND NAMED COMMONS. // // // // NOTE : LINK WITH TEST12A,TEST12B AND // // TEST12C FOR TESTING. // // // ///////////////////////////////////////////////////////// ''EJECT 'LBR' DA, DB[3], DD 'RBR', // BLANK COMMON COM4 : 'LBR' DFLAG4, BUF4[100], 'DP' BPTR4 'RBR', // #4 NAMED COMMON COM7 : 'LBR' DFLAG7, BUF7[100], 'DP' BPTR7 'RBR', // #7 NAMED COMMON COM8 : 'LBR' DFLAG8, BUF8[100], 'DP' BPTR8 'RBR', // #8 NAMED COMMON COM9 : 'LBR' DFLAG9, BUF9[100], 'DP' BPTR9 'RBR', // #9 NAMED COMMON ;;TEST12D:: // FLOWCHART NAME SUB789:: 'LBR' // ENTRY POINT 0 -> DA, // 4 -> DFLAG4, // 7 -> DFLAG7, // 8 -> DFLAG8, // 9 -> DFLAG9, // BPTR4 -> 'DP' DB, // BPTR7 -> 'DP' DB, // BUF4[1] -> BUF7[2], // BUF8[2] -> BUF9[2], // 'RBR' ..... ''END \\\\\ SUBFILE: TST12A.LRB @15:57 23-MAY-1979 <055> (359) TE ST 12 A SY 0: TE ST 12 A. LO S 16 -F EB -7 9 14 :1 3: 24 MO S LO GO S (2 .0 G) .A BS OL UT E. .N OU NS . .D AT A. .Z RE L. .C OD E. .B LA NK .C OM MO N. g CO M1 g CO M2 g CO M3 g CO M4 g CO M5 g CO M6 g CO M7 g CO M8 g CO M9 TE ST 12 A SU B1 23 SU B4 56 SU B7 89 ) e ) f ) e ) f ) e ) f ) e ) f ) e ) f ) e ) f ) e ) f ) e ) f ) e ) f ) ) ) ) ) g g g g g g g g g \\\\\ SUBFILE: TST12B.LRB @15:57 23-MAY-1979 <055> (182) TE ST 12 B SY 0: TE ST 12 B. LO S 16 -F EB -7 9 14 :1 3: 53 MO S LO GO S (2 .0 G) .A BS OL UT E. .N OU NS . .D AT A. .Z RE L. * .C OD E. .B LA NK .C OM MO N. g CO M1 g CO M2 g CO M3 TE ST 12 B SU B1 23 ) ) ) ) - e - f - ` * g g g \\\\\ SUBFILE: TST12C.LRB @15:57 23-MAY-1979 <055> (182) TE ST 12 C SY 0: TE ST 12 C. LO S 16 -F EB -7 9 14 :2 6: 58 MO S LO GO S (2 .0 G) .A BS OL UT E. .N OU NS . .D AT A. .Z RE L. * .C OD E. .B LA NK .C OM MO N. g CO M4 g CO M5 g CO M6 TE ST 12 C SU B4 56 ) ) ) ) - e - f - ` * g g g \\\\\ SUBFILE: TST12D.LRB @15:57 23-MAY-1979 <055> (208) TE ST 12 D SY 0: TE ST 12 D. LR B 29 -D EC -7 8 13 :2 6: 09 MO S LO GO S (2 .0 E) .A BS OL UT E. .N OU NS . .D AT A. .Z RE L. > .C OD E. .B LA NK .C OM MO N. g CO M4 g CO M7 g CO M8 g CO M9 TE ST 12 D SU B7 89 ) ) ) ) ) - e - f - e - f - - ` > g g g g \\\\\ SUBFILE: OVERLA.MAC @15:59 23-MAY-1979 <055> (293) .TITLE OVERLAY ROUTINES .GLOBL OVLOD .GLOBL OLLDS,OLLST,OLCRM,OLCD2,OLCRU .GLOBL OLSLL,OLCTL,OLINI,OLIO .GLOBL OLQOT,OLAGN,OLMGN,OLUGN,OLSGN .GLOBL OLCGN,OLNLI,OLPNA,OLNOU,OLPVR,OLPV2 .GLOBL OLOBJ,OLLCO,OLPS2,OLDUM .GLOBL OLLAB,OLRBR,OLPLO,OLSPL,OLSAV,OLARA,OLARB .GLOBL OLFLT,OLREG,OLSCN,OLPSB,OLPLC .PAGE OLLDS: .RAD50 /LDS / OLLST: .RAD50 /LST / OLCRM: .RAD50 /CRM / OLCD2: .RAD50 /CD2 / OLCRU: .RAD50 /CRU / OLSLL: .RAD50 /SLL / OLCTL: .RAD50 /CTL / OLINI: .RAD50 /NLI / OLIO: .RAD50 /IO1 / OLQOT: .RAD50 /QOT / OLMGN: .RAD50 /MGN / OLUGN: .RAD50 /UGN / OLAGN: OLSGN: .RAD50 /SGN / OLCGN: .RAD50 /CGN / OLNLI: .RAD50 /NLI / OLPNA: .RAD50 /PNA / OLNOU: .RAD50 /NOU / OLPVR: .RAD50 /PVR / OLPV2: .RAD50 /PV2 / OLOBJ: .RAD50 /OBJ / OLLCO: .RAD50 /LCO / OLPS2: .RAD50 /PS2 / OLSCN: OLDUM: .RAD50 /DUM / OLLAB: .RAD50 /LAB / OLRBR: .RAD50 /RBR / OLPLO: .RAD50 /PLO / OLSAV: .RAD50 /QOT / OLSPL: .RAD50 /PLO / OLARA: .RAD50 /ARA / OLARB: .RAD50 /ARB / OLREG: .RAD50 /REG / OLFLT: .RAD50 /FLT / OLPSB: .RAD50 /PSB / OLPLC: .RAD50 /PLC / .PAGE PBLK: .BYTE 3,0 .RAD50 / / OVLOD: MOVB (R5),R0 ;GET NUMBER OF ARGUMENTS MOV 2(R5),R1 ;GET ADDRESS OF FIRST PARAM MOV (R1)+,PBLK+2 ;MOVE OVERLAY NAME TO PBLK MOV (R1)+,PBLK+4 MOV #PBLK,R0 ;CALL OVERLAY LOADER CALL $LOAD RTS PC ;GO HOME .END \\\\\