CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1 1 .LIST TTM 2 .TITLE CELL 3 .IDENT /V01.00/ 4 .ENABLE LC,LSB 5 ; 6 ; Program that allows for composing (designing) characters 7 ; for the VT200 family of terminals 8 ; 9 .MCALL TTSYM$,QIOW$C 10 ; 11 000000 TTSYM$ ; Define the Terminal Symbols 12 ; 13 ; 14 000000 000 CMD:: .BYTE 0 ; Command storage location 15 000001 010 BCKSPC: .BYTE <10> ; Backspace character 16 000002 GRDPTR::.BLKW ; Grid address pointer 17 000004 STATUS::.BLKW 2 ; I/O Status Block 18 000010 033 GRAPH:: .ASCII <33>/(0/ ; Escape Sequence to enter DEC 000011 050 000012 060 19 ; special graphics mode 20 000013 033 NOGRHS::.ASCII <33>/(B/ ; Escape Sequence to leave DEC 000014 050 000015 102 21 ; special graphics mode 22 000016 033 CURDWN::.ASCII <33>/[1B/ ; Cursor DOWN escape sequence 000017 133 000020 061 000021 102 23 ; 24 000022 033 CURSOR::.ASCII <33>/[/ ; Direct cursor addressing 000023 133 25 000024 040 LINE:: .ASCII / ;/ ; escape sequence 000025 040 000026 073 26 000027 040 COLUMN::.ASCII / H/ 000030 040 000031 110 27 ; 28 000032 035 ESCTRM::.BYTE TC.ESQ,1 ; Control block to set the terminal 000033 001 29 000034 024 .BYTE TC.ACR,0 ; to recognize escape sequences 000035 000 30 000036 035 NOESC:: .BYTE TC.ESQ,0 ; Control block to set the terminal 000037 000 31 000040 024 .BYTE TC.ACR,1 ; NOT to recognize escape sequences 000041 001 32 ; 33 000042 154 TOPLIN: .ASCII /lqqqqqqqqk/ ; Top line of the Grid 000043 161 000044 161 000045 161 000046 161 000047 161 000050 161 000051 161 000052 161 CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-1 000053 153 34 000054 170 MIDLIN: .ASCII /x........x/ ; Middle lines of the Grid 000055 056 000056 056 000057 056 000060 056 000061 056 000062 056 000063 056 000064 056 000065 170 35 000066 155 BOTLIN: .ASCII /mqqqqqqqqj/ ; Bottom line of the Grid 000067 161 000070 161 000071 161 000072 161 000073 161 000074 161 000075 161 000076 161 000077 152 36 .EVEN 37 ; 38 ; 39 ; Address table of valid commands 40 ; 41 000100 000560' CMDTBL::.WORD UP ; UP cursor key 42 000102 000576' .WORD DOWN ; DOWN cursor key 43 000104 000614' .WORD RIGHT ; RIGHT cursor key 44 000106 000640' .WORD LEFT ; LEFT cursor key 45 000110 000672' .WORD DONE ; "E" key for subroutine exit 46 ; 47 ; 48 ; 49 000112 016567 CELL:: MOV 2(R5),GRDPTR ; Initialize the GRDPTR 000002 177662 50 ; 51 000120 QIOW$C SF.SMC,5,1,,STATUS,, ; Enable the terminal to 52 ; recognize escape sequences 53 000126 QIOW$C IO.WVB,5,1,,STATUS,, ; Set terminal into DEC graphics 54 ; mode 55 000134 012767 MOV #"09,LINE ; Set line no. to 9 034460 177662 56 000142 112767 MOVB #'2,COLUMN ; Set column no. to 29 000062 177657 57 000150 112767 MOVB #'9,COLUMN+1 ; 000071 177652 58 000156 QIOW$C IO.WVB,5,1,,STATUS,,; Move cursor to location 9,35 59 ; 60 000164 QIOW$C IO.WVB,5,1,,STATUS,, ; Print out top line of the 61 ; Grid 62 000172 012700 MOV #10.,R0 ; Use R0 as a loop counter 000012 CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-2 63 000176 012767 MOV #"10,LINE ; Set line no. to 10; keep column 030061 177620 64 ; number the same 65 ; 66 000204 10$: QIOW$C IO.WVB,5,1,,STATUS,,; Move cursor to the next line 67 000212 QIOW$C IO.WVB,5,1,,STATUS,,; Print out the middle lines 68 000220 105267 INCB LINE+1 ; Advance to the next line 177601 69 000224 077011 SOB R0,10$ ; Loop until done 70 ; 71 000226 012767 MOV #"20,LINE ; Set line no. to 20 030062 177570 72 000234 QIOW$C IO.WVB,5,1,,STATUS,, ; Move cursor to location 20,35 73 000242 QIOW$C IO.WVB,5,1,,STATUS,,; Print out the bottom line 74 ; 75 000250 012767 MOV #"10,LINE ; Set line no. to 10 030061 177546 76 000256 112767 MOVB #'3,COLUMN ; Set column no. to 30 000063 177543 77 000264 112767 MOVB #'0,COLUMN+1 000060 177536 78 000272 QIOW$C IO.WVB,5,1,,STATUS,, ; Move cursor to location 10,36 79 ; 80 000300 112767 MOVB #'a,CMD ; Init. CMD with Set Pixel Character 000141 177472 81 000306 012701 MOV #8.,R1 ; Use R1 as a loop counter 000010 82 000312 016502 MOV 2(R5),R2 ; Use R2 as GRID address pointer 000002 83 ; 84 000316 012700 12$: MOV #10.,R0 ; Use R0 as loop counter 000012 85 000322 012203 MOV (R2)+,R3 ; Obtain GRID binary char. rep. 86 000324 001411 BEQ 19$ ; Move to next column if there 87 ; aren't any pixels to set 88 000326 006003 15$: ROR R3 ; Need to set the Pixel ? 89 000330 103003 BCC 18$ ; No, cont. at 18$ 90 000332 QIOW$C IO.WVB,5,1,,STATUS,, ; Yes, set the Pixel 91 000340 18$: QIOW$C IO.WVB,5,1,,STATUS,, ; Move the cursor down one line 92 000346 077011 SOB R0,15$ ; Loop until done 93 ; 94 000350 105267 19$: INCB COLUMN+1 ; Adv. the column number 177454 95 000354 QIOW$C IO.WVB,5,1,,STATUS,, ; Move cursor to the next 96 ; column 97 000362 077123 SOB R1,12$ ; Loop until done 98 ; 99 000364 112767 MOVB #'0,COLUMN+1 ; Restore column number to init. value 000060 177436 100 000372 QIOW$C IO.WVB,5,1,,STATUS,, ; Move cursor to init. CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-3 101 ; location 102 ; 103 000400 COMAND::QIOW$C IO.RNE,5,1,,STATUS,, ; Read in the command character 104 ; 105 000406 126727 CMPB CMD,#'A ; Valid command ? 177366 000101 106 000414 002417 BLT PXLCHK ; No, check for clear or set pixel 107 000416 142767 BICB #40,CMD ; Convert character to upper case 000040 177354 108 000424 126727 CMPB CMD,#'E ; Valid command ? 177350 000105 109 000432 003362 BGT COMAND ; No, get next character 110 ; 111 ; Decode the command 112 ; 113 000434 016700 EXECMD: MOV CMD,R0 ; Obtain the valid command character 177340 114 000440 005300 DEC R0 ; Dec. R0 for no. between 0 and 7 115 000442 042700 BIC #177770,R0 ; Clear the high order bits 177770 116 000446 006300 ASL R0 ; Multiply result by 2 for word offset 117 000450 000170 JMP @CMDTBL(R0) ; Execute the command 000100' 118 ; 119 000454 126727 PXLCHK: CMPB CMD,#'0 ; Clear pixel command ? 177320 000060 120 000462 001404 BEQ 20$ ; Yes, cont. at 20$ 121 ; 122 000464 126727 CMPB CMD,#'1 ; Set pixel command ? 177310 000061 123 000472 001342 BNE COMAND ; No, get next command 124 ; 125 000474 116701 20$: MOVB LINE+1,R1 ; Obtain the current line number 177325 126 000500 042701 BIC #177760,R1 ; Clear the high order bits 177760 127 000504 012700 MOV #1,R0 ; Create mask for bit toggling 000001 128 000510 072001 ASH R1,R0 ; Shift R0 to the left the proper 129 ; number of places 130 000512 126727 CMPB CMD,#'1 ; Set pixel command ? 177262 000061 131 000520 001406 BEQ SETPXL ; Yes, cont. at SETPXL 132 ; 133 000522 040077 CLRPXL::BIC R0,@GRDPTR ; Clear the proper bit 177254 134 000526 112767 MOVB #'.,CMD ; Clear the Pixel by outputting a "." 000056 177244 135 000534 000405 BR 30$ 136 ; CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-4 137 000536 050077 SETPXL::BIS R0,@GRDPTR ; Set the proper bit 177240 138 000542 112767 MOVB #'a,CMD ; Set the Pixel by outputting a "a" - in 000141 177230 139 ; 140 000550 30$: QIOW$C IO.WVB,5,1,,STATUS,, ; DEC graphics mode it appears 141 ; as a solid block 142 000556 000710 BR COMAND ; Get next command 143 ; 144 ; 145 000560 126727 UP:: CMPB LINE+1,#'0 ; Check to see if the cursor could be 177241 000060 146 ; moved up one line 147 000566 001704 BEQ COMAND ; No, wait for next command 148 000570 105367 DECB LINE+1 ; Yes, dec. line number 177231 149 000574 000432 BR MOVCUR ; Move the cursor up one line 150 ; 151 000576 126727 DOWN:: CMPB LINE+1,#'9 ; Check to see if the cursor could be 177223 000071 152 ; moved down one line 153 000604 001675 BEQ COMAND ; No, wait for next command 154 000606 105267 INCB LINE+1 ; Yes, inc. line number 177213 155 000612 000423 BR MOVCUR ; Move the cursor down one line 156 ; 157 000614 126727 RIGHT:: CMPB COLUMN+1,#'7 ; Check to see if the cursor could be 177210 000067 158 ; moved to the right one column 159 000622 001666 BEQ COMAND ; No, wait for next command 160 000624 062767 ADD #2,GRDPTR ; Increase the GRID address pointer 000002 177150 161 000632 105267 INCB COLUMN+1 ; Yes, inc. column number 177172 162 000636 000411 BR MOVCUR ; Move the cursor to the right one 163 ; column 164 000640 126727 LEFT:: CMPB COLUMN+1,#'0 ; Check to see if the cursor could be 177164 000060 165 ; moved to the left one column 166 000646 001654 BEQ COMAND ; No, wait for next command 167 000650 162767 SUB #2,GRDPTR ; Decrease the GRID address pointer 000002 177124 168 000656 105367 DECB COLUMN+1 ; Yes, dec. column counter 177146 169 ; 170 000662 MOVCUR::QIOW$C IO.WVB,5,1,,STATUS,, ; Move cursor to new location 171 ; 172 000670 000643 BR COMAND ; Get the next command 173 ; 174 ; CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-5 175 000672 DONE:: QIOW$C IO.WVB,5,1,,STATUS,, ; Disable the DEC special 176 ; graphics mode of operation 177 ; 178 000700 QIOW$C SF.SMC,5,1,,STATUS,, ; Disable the terminal from 179 ; recognizing escape sequences 180 ; 181 000706 000207 RETURN ; Done 182 ; 183 184 000001 .END CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-6 Symbol table BCKSPC 000001R SETPXL 000536RG TC.BSP= 000023 BOTLIN 000066R SE.BIN= 000003 TC.CCF= 000030 CELL 000112RG SE.FIX= 000002 TC.CEQ= 000046 CLRPXL 000522RG SE.ICN= 000001 TC.CSQ= 000074 CMD 000000RG SE.LPR= 000011 TC.CTC= 000075 CMDTBL 000100RG SE.NIH= 000014 TC.CTS= 000072 COLUMN 000027RG SE.NSC= 000012 TC.DEC= 000124 COMAND 000400RG SE.PAR= 000010 TC.DLU= 000041 CURDWN 000016RG SE.SPD= 000006 TC.EDT= 000125 CURSOR 000022RG SE.SPL= 000007 TC.EPA= 000040 DONE 000672RG SE.TER= 000005 TC.ESQ= 000035 DOWN 000576RG SE.UPN= 000013 TC.FDX= 000064 ESCTRM 000032RG SE.VAL= 000004 TC.FRM= 000043 EXECMD 000434R SF.DEF= 000010 TC.FSZ= 000107 F1.ACR= 000001 SF.GAC= 002600 TC.HFF= 000017 F1.BTW= 000002 SF.GMC= 002560 TC.HFL= 000013 F1.BUF= 000004 SF.GSC= 002540 TC.HHT= 000021 F1.CCO= 000020 SF.RDF= 002460 TC.HLD= 000044 F1.ESQ= 000040 SF.SAC= 002620 TC.IMG= 000032 F1.HLD= 000100 SF.SMC= 002440 TC.INT= 000127 F1.LWC= 000200 SF.SSC= 002420 TC.ISL= 000006 F1.RNE= 000400 SF.STS= 002520 TC.LCP= 000036 F1.RPR= 001000 SF.STT= 002500 TC.LPP= 000002 F1.RST= 002000 STATUS 000004RG TC.LVF= 000020 F1.RUB= 004000 S.EXTA= 000023 TC.MAX= 000132 F1.SYN= 010000 S.EXTB= 000024 TC.NBR= 000102 F1.TRW= 020000 S.0 = 000001 TC.NEC= 000047 F1.UIA= 000010 S.100 = 000004 TC.NKB= 000033 F1.UTB= 040000 S.110 = 000005 TC.NL = 000015 F1.VBF= 100000 S.1200= 000013 TC.NPR= 000034 F2.ALT= 000020 S.134 = 000006 TC.NST= 000022 F2.CUP= 000100 S.150 = 000007 TC.PAR= 000037 F2.DCH= 000004 S.1800= 000014 TC.PRI= 000051 F2.DKL= 000010 S.19.2= 000025 TC.P8B= 000070 F2.FDX= 000200 S.200 = 000010 TC.RAT= 000007 F2.GCH= 000002 S.2000= 000015 TC.REM= 000066 F2.SCH= 000001 S.2400= 000016 TC.RGS= 000126 F2.SFF= 000040 S.300 = 000011 TC.RSP= 000003 GRAPH 000010RG S.3600= 000017 TC.SCP= 000012 GRDPTR 000002RG S.38.4= 000026 TC.SCR= 000011 IO.RNE= ****** GX S.4800= 000020 TC.SFC= 000131 IO.WVB= ****** GX S.50 = 000002 TC.SFF= 000016 LEFT 000640RG S.600 = 000012 TC.SLV= 000050 LINE 000024RG S.7200= 000021 TC.SMO= 000027 MIDLIN 000054R S.75 = 000003 TC.SMP= 000026 MOVCUR 000662RG S.9600= 000022 TC.SMR= 000025 NOESC 000036RG TC.ABD= 000077 TC.STB= 000005 NOGRHS 000013RG TC.ACD= 000103 TC.TAP= 000045 PXLCHK 000454R TC.ACR= 000024 TC.TBF= 000071 Q.IOAE= 000012 TC.ALT= 000031 TC.TBM= 000101 Q.IOEF= 000006 TC.ANI= 000122 TC.TBS= 000100 Q.IOFN= 000002 TC.ANS= 000073 TC.TLC= 000130 Q.IOLU= 000004 TC.ARC= 000104 TC.TRN= 000105 Q.IOPL= 000014 TC.ASP= 000076 TC.TTP= 000010 Q.IOPR= 000007 TC.AVO= 000123 TC.UC0= 000052 Q.IOSB= 000010 TC.BIN= 000065 TC.UC1= 000053 RIGHT 000614RG TC.BLK= 000042 TC.UC2= 000054 CELL MACRO Y05.02 Monday 15-Oct-84 16:04 Page 1-7 Symbol table TC.UC3= 000055 T.LA12= 000020 XTM.M2= 000007 TC.UC4= 000056 T.LA34= 000022 XTM.NO= 177777 TC.UC5= 000057 T.LA36= 000006 XTM.PS= 000001 TC.UC6= 000060 T.LA38= 000023 XTM.21= 000005 TC.UC7= 000061 T.LA50= 000032 XTU.CD= 000002 TC.UC8= 000062 T.LQP1= 000033 XTU.CL= 000004 TC.UC9= 000063 T.LQP2= 000034 XTU.DR= 000006 TC.VFL= 000014 T.L100= 000021 XTU.OF= 000010 TC.WID= 000001 T.L120= 000016 XTU.ON= 000012 TC.XMM= 000106 T.L180= 000014 XTU.RI= 000014 TC.XSP= 000004 T.L30P= 000005 XTU.TD= 000020 TC.8BC= 000067 T.L30S= 000004 XTU.TU= 000016 TF.AST= 000010 T.SCR0= 000017 XTU.UI= 000000 TF.BIN= 000002 T.UNK0= 000000 XT.DIA= 000000 TF.CCO= 000040 T.USR0= 000200 XT.DIT= 000113 TF.ESQ= 000020 T.USR1= 000201 XT.DLM= 000110 TF.NOT= 000002 T.USR2= 000202 XT.DMD= 000111 TF.RAL= 000010 T.USR3= 000203 XT.DTD= 000003 TF.RCU= 000001 T.USR4= 000204 XT.DTM= 000001 TF.RNC= 000040 T.VT05= 000007 XT.DTT= 000112 TF.RNE= 000020 T.VT50= 000010 XT.D20= 000002 TF.RST= 000001 T.VT52= 000011 XT.ENC= 000002 TF.SYN= 000200 T.VT55= 000012 XT.GOV= 000117 TF.TMO= 000200 T.VT61= 000013 XT.MTP= 000114 TF.UCH= 000040 T.V100= 000015 XT.OHS= 000003 TF.WAL= 000010 T.V101= 000024 XT.SDE= 000115 TF.WBT= 000100 T.V102= 000025 XT.SER= 000001 TF.WMS= 000020 T.V105= 000026 XT.TAK= 000116 TF.XCC= 000001 T.V125= 000027 XT.TSP= 000120 TF.XOF= 000100 T.V131= 000030 XT.TTO= 000121 TOPLIN 000042R T.V132= 000031 XT.VOI= 000000 T.AS33= 000001 T.V2XX= 000036 $$$ = 000630R 002 T.AS35= 000003 UP 000560RG $$$ARG= 000002 T.BMP1= 000035 XTM.FS= 000000 $$$OST= 000014 T.KS33= 000002 XTM.M1= 000006 ...GBL= 000000 . ABS. 000000 000 (RW,I,GBL,ABS,OVR) 000710 001 (RW,I,LCL,REL,CON) $DPB$. 000660 002 (RW,D,LCL,REL,CON) Errors detected: 0 *** Assembler statistics Work file reads: 0 Work file writes: 0 Size of work file: 10867 Words ( 43 Pages) Size of core pool: 11630 Words ( 44 Pages) Operating system: RSX-11M/PLUS Elapsed time: 00:00:19.23 ,CELL/-SP=CELL