Annotation of sbbs/lciol/lclio.asm, revision 1.1

1.1     ! root        1:        page    60,132
        !             2:        .model  large
        !             3: 
        !             4: ; Put character to console (local)
        !             5: 
        !             6:        .data
        !             7: wid    db      79              ;columns per screen (zero based)
        !             8: lps    db      24              ;lines per screen (zero based)
        !             9: col    db      0               ;current column
        !            10: lin    db      0               ;current line
        !            11: atr    db      7               ;current attribute
        !            12: pag    db      0               ;current display page
        !            13: 
        !            14:        .code
        !            15:        .8086
        !            16: 
        !            17:        public  _lputc,_lputs,_lclini,_lclxy,_lclwx,_lclwy,_lclatr
        !            18: 
        !            19: _lclini        proc
        !            20:        push    bp
        !            21:        mov     bp,sp
        !            22:        mov     ax,[bp+6]       ;fetch parameter 1 (16-bit int)
        !            23:        dec     al
        !            24:        mov     lps,al          ;set lines per screen
        !            25:        mov     ah,0fh
        !            26:        int     10h             ;get video mode
        !            27:        dec     ah
        !            28:        mov     wid,ah          ;set screen width
        !            29:        mov     pag,bh          ;set current display page
        !            30:        mov     ah,3
        !            31:        int     10h             ;get cursor position
        !            32:        cmp     dh,lps
        !            33:        jc      cuupd           ;current line within range
        !            34:        mov     dh,lps          ;else set to maximum
        !            35: cuupd: mov     ah,2            ;set cursor and update current pointers
        !            36:        int     10h             ;move cursor to last line
        !            37:        mov     col,dx          ;set current column and line
        !            38:        xor     ax,ax
        !            39:        pop     bp
        !            40:        ret
        !            41: _lclini        endp
        !            42: 
        !            43: _lclxy proc
        !            44:        push    bp
        !            45:        mov     bp,sp
        !            46:        mov     dx,[bp+6]       ;get parameter 1, x (column)
        !            47:        dec     dl
        !            48:        mov     col,dl
        !            49:        mov     ax,[bp+8]       ;get parameter 2, y (line)
        !            50:        dec     al
        !            51:        mov     lin,al
        !            52:        mov     dh,al
        !            53:        mov     bh,pag
        !            54:        mov     ah,2
        !            55:        int     10h             ;set cursor
        !            56:        xor     ax,ax
        !            57:        pop     bp
        !            58:        ret
        !            59: _lclxy endp
        !            60: 
        !            61: _lclwx proc
        !            62:        xor     ah,ah
        !            63:        mov     al,col          ;return x (column)
        !            64:        inc     al
        !            65:        ret
        !            66: _lclwx endp
        !            67: 
        !            68: _lclwy proc
        !            69:        xor     ah,ah
        !            70:        mov     al,lin          ;return y (line)
        !            71:        inc     al
        !            72:        ret
        !            73: _lclwy endp
        !            74: 
        !            75: _lclatr        proc
        !            76:        push    bp
        !            77:        mov     bp,sp
        !            78:        xor     ah,ah
        !            79:        mov     al,atr          ;get old attribute in ax
        !            80:        mov     dx,[bp+6]       ;fetch parameter 1 (16-bit int)
        !            81:        mov     atr,dl          ;set current attribute
        !            82:        pop     bp
        !            83:        ret
        !            84: _lclatr endp
        !            85: 
        !            86: _lputc proc
        !            87:        push    bp
        !            88:        mov     bp,sp
        !            89:        mov     ax,[bp+6]       ;fetch parameter 1 (16-bit int)
        !            90: 
        !            91:        cmp     ax,100h
        !            92:        jz      clreol          ;clear to end of line
        !            93:        cmp     al,7
        !            94:        jz      outbl           ;bell
        !            95:        cmp     al,8
        !            96:        jz      outbs           ;backspace
        !            97:        cmp     al,10
        !            98:        jz      outlf           ;line feed
        !            99:        cmp     al,12
        !           100:        jz      outcs           ;screen clear
        !           101:        cmp     al,13
        !           102:        jnz     nonctl          ;carriage return
        !           103:        mov     col,0           ;set column zero
        !           104:        jmp     updc
        !           105: 
        !           106: clreol:        mov     ax,920h
        !           107:        mov     bx,atr          ;get page (bh) and attribute (bl)
        !           108:        mov     cl,wid          ;line length
        !           109:        sub     cl,col          ;get remainder
        !           110:        inc     cl              ;include current position
        !           111:        xor     ch,ch           ;replication factor in cx
        !           112:        int     10h             ;clear to end of line
        !           113:        jmp     pexit
        !           114: 
        !           115: outbs: mov     al,col
        !           116:        or      al,al
        !           117:        jz      pexit           ;at column zero, no action
        !           118:        dec     col
        !           119:        jmp     updc            ;move cursor back one column
        !           120: 
        !           121: outbl: mov     ax,0e07h        ;write in tty mode (ah) bell (al)
        !           122:        mov     bx,atr          ;get page (bh) and attribute (bl)
        !           123:        int     10h             ;beep
        !           124:        jmp     updc            ;make sure cursor is not changed
        !           125: 
        !           126: outcs: mov     ax,600h         ;scroll (clear screen)
        !           127:        mov     bh,atr          ;current attribute
        !           128:        xor     cx,cx           ;upper left corner of window (0,0)
        !           129:        mov     dx,wid          ;lower right corner of window (wid,lps)
        !           130:        int     10h             ;scroll window up one line      
        !           131:        mov     col,cx          ;new cursor
        !           132:        jmp     updc
        !           133: 
        !           134: nonctl:        mov     ah,9
        !           135:        mov     bx,atr          ;get page (bh) and attribute (bl)
        !           136:        mov     cx,1
        !           137:        int     10h             ;write char and attr at cursor position
        !           138:        mov     ah,col
        !           139:        inc     col             ;advance cursor on line
        !           140:        cmp     ah,wid
        !           141:        jc      updc            ;not at end of line, update cursor and exit
        !           142: 
        !           143:        mov     col,0           ;set column zero (cr)
        !           144: outlf: mov     ah,lin
        !           145:        cmp     ah,lps
        !           146:        jc      upda            ;not at end of screen, update cursor and exit
        !           147:        jnz     updn            ;past end of screen, cr only
        !           148: 
        !           149:        mov     ax,601h         ;scroll (ah) number of lines (al)
        !           150:        mov     bh,atr          ;current attribute
        !           151:        xor     cx,cx           ;upper left corner of window (0,0)
        !           152:        mov     dx,wid          ;lower right corner of window (wid,lps)
        !           153:        int     10h             ;scroll window up one line      
        !           154: 
        !           155: updn:  dec     lin             ;leave current line number unchanged
        !           156: upda:  inc     lin             ;advance to next line
        !           157: updc:  mov     ah,2
        !           158:        mov     bh,pag
        !           159:        mov     dx,col
        !           160:        int     10h             ;update cursor position
        !           161: 
        !           162: pexit: xor     ax,ax           ;return zero
        !           163:        pop     bp
        !           164:        ret
        !           165: _lputc endp
        !           166: 
        !           167: _lputs proc
        !           168:        push    bp
        !           169:        mov     bp,sp
        !           170:        push    es
        !           171:        mov     ax,[bp+8]       ;string segment
        !           172:        mov     bx,[bp+6]       ;string offset
        !           173:        mov     es,ax
        !           174:        xor     dh,dh
        !           175: nxtch: mov     dl,es:[bx]      ;character to output
        !           176:        or      dl,dl
        !           177:        jz      sexit
        !           178: 
        !           179:        inc     bx              ;address next character
        !           180:        jnz     nowrap
        !           181:        mov     ax,es
        !           182:        add     ax,100h         ;add 64k to segment pointer
        !           183:        mov     es,ax
        !           184: nowrap:        push    bx              ;save offset
        !           185:        push    dx              ;arg 1
        !           186:        call    _lputc          ;put character
        !           187:        pop     dx
        !           188:        pop     bx
        !           189:        jmp     nxtch
        !           190: 
        !           191: sexit: mov     ax,[bp+6]
        !           192:        mov     dx,[bp+8]
        !           193:        pop     es
        !           194:        pop     bp
        !           195:        ret
        !           196: _lputs endp
        !           197: 
        !           198:        end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.