|
|
1.1 ! root 1: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 2: Page 1-1 ! 3: ! 4: ! 5: page 60,132 ! 6: .model large ! 7: ! 8: ; Put character to console (local) ! 9: ! 10: .data ! 11: 0000 4F wid db 79 ;columns per screen (zero based) ! 12: 0001 18 lps db 24 ;lines per screen (zero based) ! 13: 0002 00 col db 0 ;current column ! 14: 0003 00 lin db 0 ;current line ! 15: 0004 07 atr db 7 ;current attribute ! 16: 0005 00 pag db 0 ;current display page ! 17: ! 18: .code ! 19: .8086 ! 20: ! 21: public _lputc,_lputs,_lclini,_lclxy,_lclwx,_lclwy,_lclatr ! 22: ! 23: 0000 _lclini proc ! 24: 0000 55 push bp ! 25: 0001 8B EC mov bp,sp ! 26: 0003 8B 46 06 mov ax,[bp+6] ;fetch parameter 1 (16-bit int) ! 27: 0006 FE C8 dec al ! 28: 0008 A2 0001 R mov lps,al ;set lines per screen ! 29: 000B B4 0F mov ah,0fh ! 30: 000D CD 10 int 10h ;get video mode ! 31: 000F FE CC dec ah ! 32: 0011 88 26 0000 R mov wid,ah ;set screen width ! 33: 0015 88 3E 0005 R mov pag,bh ;set current display page ! 34: 0019 B4 03 mov ah,3 ! 35: 001B CD 10 int 10h ;get cursor position ! 36: 001D 3A 36 0001 R cmp dh,lps ! 37: 0021 72 04 jc cuupd ;current line within range ! 38: 0023 8A 36 0001 R mov dh,lps ;else set to maximum ! 39: 0027 B4 02 cuupd: mov ah,2 ;set cursor and update current pointers ! 40: 0029 CD 10 int 10h ;move cursor to last line ! 41: 002B 89 16 0002 R mov col,dx ;set current column and line ! 42: 002F 33 C0 xor ax,ax ! 43: 0031 5D pop bp ! 44: 0032 CB ret ! 45: 0033 _lclini endp ! 46: ! 47: 0033 _lclxy proc ! 48: 0033 55 push bp ! 49: 0034 8B EC mov bp,sp ! 50: 0036 8B 56 06 mov dx,[bp+6] ;get parameter 1, x (column) ! 51: 0039 FE CA dec dl ! 52: 003B 88 16 0002 R mov col,dl ! 53: 003F 8B 46 08 mov ax,[bp+8] ;get parameter 2, y (line) ! 54: 0042 FE C8 dec al ! 55: 0044 A2 0003 R mov lin,al ! 56: 0047 8A F0 mov dh,al ! 57: 0049 8A 3E 0005 R mov bh,pag ! 58: 004D B4 02 mov ah,2 ! 59: 004F CD 10 int 10h ;set cursor ! 60: 0051 33 C0 xor ax,ax ! 61: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 62: Page 1-2 ! 63: ! 64: ! 65: 0053 5D pop bp ! 66: 0054 CB ret ! 67: 0055 _lclxy endp ! 68: ! 69: 0055 _lclwx proc ! 70: 0055 32 E4 xor ah,ah ! 71: 0057 A0 0002 R mov al,col ;return x (column) ! 72: 005A FE C0 inc al ! 73: 005C CB ret ! 74: 005D _lclwx endp ! 75: ! 76: 005D _lclwy proc ! 77: 005D 32 E4 xor ah,ah ! 78: 005F A0 0003 R mov al,lin ;return y (line) ! 79: 0062 FE C0 inc al ! 80: 0064 CB ret ! 81: 0065 _lclwy endp ! 82: ! 83: 0065 _lclatr proc ! 84: 0065 55 push bp ! 85: 0066 8B EC mov bp,sp ! 86: 0068 32 E4 xor ah,ah ! 87: 006A A0 0004 R mov al,atr ;get old attribute in ax ! 88: 006D 8B 56 06 mov dx,[bp+6] ;fetch parameter 1 (16-bit int) ! 89: 0070 88 16 0004 R mov atr,dl ;set current attribute ! 90: 0074 5D pop bp ! 91: 0075 CB ret ! 92: 0076 _lclatr endp ! 93: ! 94: 0076 _lputc proc ! 95: 0076 55 push bp ! 96: 0077 8B EC mov bp,sp ! 97: 0079 8B 46 06 mov ax,[bp+6] ;fetch parameter 1 (16-bit int) ! 98: ! 99: 007C 3D 0100 cmp ax,100h ! 100: 007F 74 1C jz clreol ;clear to end of line ! 101: 0081 3C 07 cmp al,7 ! 102: 0083 74 3E jz outbl ;bell ! 103: 0085 3C 08 cmp al,8 ! 104: 0087 74 2C jz outbs ;backspace ! 105: 0089 3C 0A cmp al,10 ! 106: 008B 74 76 jz outlf ;line feed ! 107: 008D 3C 0C cmp al,12 ! 108: 008F 74 3E jz outcs ;screen clear ! 109: 0091 3C 0D cmp al,13 ! 110: 0093 75 50 jnz nonctl ;carriage return ! 111: 0095 C6 06 0002 R 00 mov col,0 ;set column zero ! 112: 009A E9 0126 R jmp updc ! 113: ! 114: 009D B8 0920 clreol: mov ax,920h ! 115: 00A0 8B 1E 0004 R mov bx,atr ;get page (bh) and attribute (bl) ! 116: 00A4 8A 0E 0000 R mov cl,wid ;line length ! 117: 00A8 2A 0E 0002 R sub cl,col ;get remainder ! 118: 00AC FE C1 inc cl ;include current position ! 119: 00AE 32 ED xor ch,ch ;replication factor in cx ! 120: 00B0 CD 10 int 10h ;clear to end of line ! 121: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 122: Page 1-3 ! 123: ! 124: ! 125: 00B2 EB 7E 90 jmp pexit ! 126: ! 127: 00B5 A0 0002 R outbs: mov al,col ! 128: 00B8 0A C0 or al,al ! 129: 00BA 74 76 jz pexit ;at column zero, no action ! 130: 00BC FE 0E 0002 R dec col ! 131: 00C0 EB 64 90 jmp updc ;move cursor back one column ! 132: ! 133: 00C3 B8 0E07 outbl: mov ax,0e07h ;write in tty mode (ah) bell (al) ! 134: 00C6 8B 1E 0004 R mov bx,atr ;get page (bh) and attribute (bl) ! 135: 00CA CD 10 int 10h ;beep ! 136: 00CC EB 58 90 jmp updc ;make sure cursor is not changed ! 137: ! 138: 00CF B8 0600 outcs: mov ax,600h ;scroll (clear screen) ! 139: 00D2 8A 3E 0004 R mov bh,atr ;current attribute ! 140: 00D6 33 C9 xor cx,cx ;upper left corner of window (0,0) ! 141: 00D8 8B 16 0000 R mov dx,wid ;lower right corner of window (wid,lps) ! 142: 00DC CD 10 int 10h ;scroll window up one line ! 143: 00DE 89 0E 0002 R mov col,cx ;new cursor ! 144: 00E2 EB 42 90 jmp updc ! 145: ! 146: 00E5 B4 09 nonctl: mov ah,9 ! 147: 00E7 8B 1E 0004 R mov bx,atr ;get page (bh) and attribute (bl) ! 148: 00EB B9 0001 mov cx,1 ! 149: 00EE CD 10 int 10h ;write char and attr at cursor position ! 150: 00F0 8A 26 0002 R mov ah,col ! 151: 00F4 FE 06 0002 R inc col ;advance cursor on line ! 152: 00F8 3A 26 0000 R cmp ah,wid ! 153: 00FC 72 28 jc updc ;not at end of line, update cursor and exit ! 154: ! 155: 00FE C6 06 0002 R 00 mov col,0 ;set column zero (cr) ! 156: 0103 8A 26 0003 R outlf: mov ah,lin ! 157: 0107 3A 26 0001 R cmp ah,lps ! 158: 010B 72 15 jc upda ;not at end of screen, update cursor and exit ! 159: 010D 75 0F jnz updn ;past end of screen, cr only ! 160: ! 161: 010F B8 0601 mov ax,601h ;scroll (ah) number of lines (al) ! 162: 0112 8A 3E 0004 R mov bh,atr ;current attribute ! 163: 0116 33 C9 xor cx,cx ;upper left corner of window (0,0) ! 164: 0118 8B 16 0000 R mov dx,wid ;lower right corner of window (wid,lps) ! 165: 011C CD 10 int 10h ;scroll window up one line ! 166: ! 167: 011E FE 0E 0003 R updn: dec lin ;leave current line number unchanged ! 168: 0122 FE 06 0003 R upda: inc lin ;advance to next line ! 169: 0126 B4 02 updc: mov ah,2 ! 170: 0128 8A 3E 0005 R mov bh,pag ! 171: 012C 8B 16 0002 R mov dx,col ! 172: 0130 CD 10 int 10h ;update cursor position ! 173: ! 174: 0132 33 C0 pexit: xor ax,ax ;return zero ! 175: 0134 5D pop bp ! 176: 0135 CB ret ! 177: 0136 _lputc endp ! 178: ! 179: 0136 _lputs proc ! 180: 0136 55 push bp ! 181: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 182: Page 1-4 ! 183: ! 184: ! 185: 0137 8B EC mov bp,sp ! 186: 0139 06 push es ! 187: 013A 8B 46 08 mov ax,[bp+8] ;string segment ! 188: 013D 8B 5E 06 mov bx,[bp+6] ;string offset ! 189: 0140 8E C0 mov es,ax ! 190: 0142 32 F6 xor dh,dh ! 191: 0144 26: 8A 17 nxtch: mov dl,es:[bx] ;character to output ! 192: 0147 0A D2 or dl,dl ! 193: 0149 74 15 jz sexit ! 194: ! 195: 014B 43 inc bx ;address next character ! 196: 014C 75 07 jnz nowrap ! 197: 014E 8C C0 mov ax,es ! 198: 0150 05 0100 add ax,100h ;add 64k to segment pointer ! 199: 0153 8E C0 mov es,ax ! 200: 0155 53 nowrap: push bx ;save offset ! 201: 0156 52 push dx ;arg 1 ! 202: 0157 9A 0076 ---- R call _lputc ;put character ! 203: 015C 5A pop dx ! 204: 015D 5B pop bx ! 205: 015E EB E4 jmp nxtch ! 206: ! 207: 0160 8B 46 06 sexit: mov ax,[bp+6] ! 208: 0163 8B 56 08 mov dx,[bp+8] ! 209: 0166 07 pop es ! 210: 0167 5D pop bp ! 211: 0168 CB ret ! 212: 0169 _lputs endp ! 213: ! 214: end ! 215: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 216: Symbols-1 ! 217: ! 218: ! 219: Segments and Groups: ! 220: ! 221: N a m e Length Align Combine Class ! 222: ! 223: DGROUP . . . . . . . . . . . . . GROUP ! 224: _DATA . . . . . . . . . . . . 0006 WORD PUBLIC 'DATA' ! 225: LCLIO_TEXT . . . . . . . . . . . 0169 WORD PUBLIC 'CODE' ! 226: ! 227: Symbols: ! 228: ! 229: N a m e Type Value Attr ! 230: ! 231: ATR . . . . . . . . . . . . . . L BYTE 0004 _DATA ! 232: ! 233: CLREOL . . . . . . . . . . . . . L NEAR 009D LCLIO_TEXT ! 234: COL . . . . . . . . . . . . . . L BYTE 0002 _DATA ! 235: CUUPD . . . . . . . . . . . . . L NEAR 0027 LCLIO_TEXT ! 236: ! 237: LIN . . . . . . . . . . . . . . L BYTE 0003 _DATA ! 238: LPS . . . . . . . . . . . . . . L BYTE 0001 _DATA ! 239: ! 240: MM . . . . . . . . . . . . . . . TEXT l ! 241: ! 242: NONCTL . . . . . . . . . . . . . L NEAR 00E5 LCLIO_TEXT ! 243: NOWRAP . . . . . . . . . . . . . L NEAR 0155 LCLIO_TEXT ! 244: NXTCH . . . . . . . . . . . . . L NEAR 0144 LCLIO_TEXT ! 245: ! 246: OUTBL . . . . . . . . . . . . . L NEAR 00C3 LCLIO_TEXT ! 247: OUTBS . . . . . . . . . . . . . L NEAR 00B5 LCLIO_TEXT ! 248: OUTCS . . . . . . . . . . . . . L NEAR 00CF LCLIO_TEXT ! 249: OUTLF . . . . . . . . . . . . . L NEAR 0103 LCLIO_TEXT ! 250: ! 251: PAG . . . . . . . . . . . . . . L BYTE 0005 _DATA ! 252: PEXIT . . . . . . . . . . . . . L NEAR 0132 LCLIO_TEXT ! 253: ! 254: SEXIT . . . . . . . . . . . . . L NEAR 0160 LCLIO_TEXT ! 255: ! 256: UPDA . . . . . . . . . . . . . . L NEAR 0122 LCLIO_TEXT ! 257: UPDC . . . . . . . . . . . . . . L NEAR 0126 LCLIO_TEXT ! 258: UPDN . . . . . . . . . . . . . . L NEAR 011E LCLIO_TEXT ! 259: ! 260: WID . . . . . . . . . . . . . . L BYTE 0000 _DATA ! 261: ! 262: @CODE . . . . . . . . . . . . . TEXT lclio_TEXT ! 263: @CODESIZE . . . . . . . . . . . TEXT 1 ! 264: @CPU . . . . . . . . . . . . . . TEXT 257 ! 265: @DATASIZE . . . . . . . . . . . TEXT 1 ! 266: @FILENAME . . . . . . . . . . . TEXT lclio ! 267: @VERSION . . . . . . . . . . . . TEXT 510 ! 268: _lclatr . . . . . . . . . . . . F PROC 0065 LCLIO_TEXT Global Length = 0011 ! 269: _lclini . . . . . . . . . . . . F PROC 0000 LCLIO_TEXT Global Length = 0033 ! 270: _lclwx . . . . . . . . . . . . . F PROC 0055 LCLIO_TEXT Global Length = 0008 ! 271: _lclwy . . . . . . . . . . . . . F PROC 005D LCLIO_TEXT Global Length = 0008 ! 272: _lclxy . . . . . . . . . . . . . F PROC 0033 LCLIO_TEXT Global Length = 0022 ! 273: _lputc . . . . . . . . . . . . . F PROC 0076 LCLIO_TEXT Global Length = 00C0 ! 274: Microsoft (R) Macro Assembler Version 5.10 3/15/92 16:02:55 ! 275: Symbols-2 ! 276: ! 277: ! 278: _lputs . . . . . . . . . . . . . F PROC 0136 LCLIO_TEXT Global Length = 0033 ! 279: ! 280: ! 281: 198 Source Lines ! 282: 198 Total Lines ! 283: 44 Symbols ! 284: ! 285: 47678 + 422269 Bytes symbol space free ! 286: ! 287: 0 Warning Errors ! 288: 0 Severe Errors
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.