Annotation of sbbs/lciol/lciol.lst, revision 1.1

1.1     ! root        1: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !             2: lciol                                                       Page     1-1
        !             3: 
        !             4: 
        !             5:                                ;************************************************************************
        !             6:                                ;*                                                                      *
        !             7:                                ;*         lclol: direct BIOS interface console output for C            *
        !             8:                                ;*                                                                      *
        !             9:                                ;*    prototypes: int  lclini(int);         initialize                  *
        !            10:                                ;*                int  lclatr(int);         set attributes              *
        !            11:                                ;*                void lclxy(int,int);      set cursor position         *
        !            12:                                ;*                int  lclwx(void);         get current column          *
        !            13:                                ;*                int  lclwy(void);         get current line            *
        !            14:                                ;*                void lputc(int);          put character               *
        !            15:                                ;*                long lputs(char far *);   put string                  *
        !            16:                                ;*                                                                      *
        !            17:                                ;************************************************************************
        !            18:                                
        !            19:                                        setmod  %mm
        !            20:                                        .data
        !            21:  0000  4F                      wid     db      79              ;columns per screen (zero based)
        !            22:  0001  18                      lps     db      24              ;lines per screen (zero based)
        !            23:  0002  00                      col     db      0               ;current column
        !            24:  0003  00                      lin     db      0               ;current line
        !            25:  0004  07                      atr     db      7               ;current attribute
        !            26:  0005  00                      pag     db      0               ;current display page
        !            27:  0006  00                      xla     db      0               ;tab expansion (bit 1), lf->cr/lf (bit 0)
        !            28:                                
        !            29:                                        .code
        !            30:                                        public  _lputc,_lputs,_lclini,_lclxy,_lclwx,_lclwy,_lclatr
        !            31:                                
        !            32:                                ; Initialize
        !            33:                                ; Gets current cursor position, attribute, and display page
        !            34:                                ; from BIOS.  Integer argument defines the size of the screen.
        !            35:                                
        !            36:  0000                          _lclini proc
        !            37:  0000  55                              push    bp
        !            38:  0001  8B EC                           mov     bp,sp
        !            39:  0003  8B 46 06                                mov     ax,pb[bp]       ;fetch parameter 1 (16-bit int)
        !            40:  0006  0A E4                           or      ah,ah
        !            41:  0008  74 06                           jz      noxla           ;no translation change
        !            42:                                
        !            43:  000A  D0 EC                           shr     ah,1
        !            44:  000C  88 26 0006 R                    mov     xla,ah          ;set new translation flags
        !            45:  0010  FE C8                   noxla:  dec     al
        !            46:  0012  79 0F                           jns     clps            ;lines specified
        !            47:                                
        !            48:  0014  1E                              push    ds
        !            49:  0015  33 C0                           xor     ax,ax
        !            50:  0017  8E D8                           mov     ds,ax
        !            51:  0019  A0 0484                         mov     al,ds:[484h]    ;get parameter from BIOS
        !            52:  001C  0A C0                           or      al,al
        !            53:  001E  75 02                           jnz     blps            ;use BIOS value if non-zero
        !            54:  0020  B0 18                           mov     al,24           ;else 25 assume lines
        !            55:  0022  1F                      blps:   pop     ds
        !            56:  0023  A2 0001 R               clps:   mov     lps,al          ;set lines per screen
        !            57:  0026  B4 0F                           mov     ah,0fh
        !            58:  0028  CD 10                           int     10h             ;get video mode
        !            59:  002A  FE CC                           dec     ah
        !            60:  002C  88 26 0000 R                    mov     wid,ah          ;set screen width
        !            61: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !            62: lciol                                                       Page     1-2
        !            63: 
        !            64: 
        !            65:  0030  88 3E 0005 R                    mov     pag,bh          ;set current display page
        !            66:  0034  B4 03                           mov     ah,3
        !            67:  0036  CD 10                           int     10h             ;get cursor position
        !            68:  0038  3A 36 0001 R                    cmp     dh,lps
        !            69:  003C  72 04                           jc      cuupd           ;current line within range
        !            70:  003E  8A 36 0001 R                    mov     dh,lps          ;else set to maximum
        !            71:  0042  B4 02                   cuupd:  mov     ah,2            ;set cursor and update current pointers
        !            72:  0044  CD 10                           int     10h             ;move cursor to last line
        !            73:  0046  89 16 0002 R                    mov     col,dx          ;set current column and line
        !            74:  004A  32 E4                           xor     ah,ah
        !            75:  004C  A0 0001 R                       mov     al,lps
        !            76:  004F  FE C0                           inc     al              ;return number of lines set
        !            77:  0051  5D                              pop     bp
        !            78:  0052  CB                              ret
        !            79:  0053                          _lclini endp
        !            80:                                
        !            81:                                ; Set current cursor position
        !            82:                                
        !            83:  0053                          _lclxy  proc
        !            84:  0053  55                              push    bp
        !            85:  0054  8B EC                           mov     bp,sp
        !            86:  0056  8B 56 06                                mov     dx,pb[bp]       ;get parameter 1, x (column)
        !            87:  0059  FE CA                           dec     dl
        !            88:  005B  88 16 0002 R                    mov     col,dl
        !            89:  005F  8B 46 08                                mov     ax,pb[bp+2]     ;get parameter 2, y (line)
        !            90:  0062  FE C8                           dec     al
        !            91:  0064  A2 0003 R                       mov     lin,al
        !            92:  0067  8A F0                           mov     dh,al
        !            93:  0069  8A 3E 0005 R                    mov     bh,pag
        !            94:  006D  B4 02                           mov     ah,2
        !            95:  006F  CD 10                           int     10h             ;set cursor
        !            96:  0071  33 C0                           xor     ax,ax
        !            97:  0073  5D                              pop     bp
        !            98:  0074  CB                              ret
        !            99:  0075                          _lclxy  endp
        !           100:                                
        !           101:                                ; Get current cursor position (x,y)
        !           102:                                
        !           103:  0075                          _lclwx  proc
        !           104:  0075  32 E4                           xor     ah,ah
        !           105:  0077  A0 0002 R                       mov     al,col          ;return x (column)
        !           106:  007A  FE C0                           inc     al
        !           107:  007C  CB                              ret
        !           108:  007D                          _lclwx  endp
        !           109:                                
        !           110:  007D                          _lclwy  proc
        !           111:  007D  32 E4                           xor     ah,ah
        !           112:  007F  A0 0003 R                       mov     al,lin          ;return y (line)
        !           113:  0082  FE C0                           inc     al
        !           114:  0084  CB                              ret
        !           115:  0085                          _lclwy  endp
        !           116:                                
        !           117:                                ; Set local attributes
        !           118:                                
        !           119:  0085                          _lclatr proc
        !           120:  0085  55                              push    bp
        !           121: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !           122: lciol                                                       Page     1-3
        !           123: 
        !           124: 
        !           125:  0086  8B EC                           mov     bp,sp
        !           126:  0088  32 E4                           xor     ah,ah
        !           127:  008A  A0 0004 R                       mov     al,atr          ;get old attribute in ax
        !           128:  008D  8B 56 06                                mov     dx,pb[bp]       ;fetch parameter 1 (16-bit int)
        !           129:  0090  88 16 0004 R                    mov     atr,dl          ;set current attribute
        !           130:  0094  5D                              pop     bp
        !           131:  0095  CB                              ret
        !           132:  0096                          _lclatr endp
        !           133:                                
        !           134:                                ; Put character to console (local)
        !           135:                                
        !           136:  0096                          _lputc  proc
        !           137:  0096  55                              push    bp
        !           138:  0097  8B EC                           mov     bp,sp
        !           139:  0099  8B 46 06                                mov     ax,pb[bp]       ;fetch parameter 1 (16-bit int)
        !           140:                                
        !           141:  009C  3D 0100                         cmp     ax,100h
        !           142:  009F  74 3A                           jz      clreol          ;clear to end of line
        !           143:  00A1  3C 07                           cmp     al,7
        !           144:  00A3  75 0C                           jnz     notbl           ;bell
        !           145:                                
        !           146:  00A5  B8 0E07                         mov     ax,0e07h        ;write in tty mode (ah) bell (al)
        !           147:  00A8  8B 1E 0004 R                    mov     bx,atr          ;get page (bh) and attribute (bl)
        !           148:  00AC  CD 10                           int     10h             ;beep
        !           149:  00AE  E9 017D R                       jmp     updc            ;make sure cursor is not changed
        !           150:                                
        !           151:  00B1  3C 08                   notbl:  cmp     al,8
        !           152:  00B3  75 0E                           jnz     notbs           ;backspace
        !           153:                                
        !           154:  00B5  A0 0002 R                       mov     al,col
        !           155:  00B8  0A C0                           or      al,al
        !           156:  00BA  74 34                           jz      pexitj          ;at column zero, no action
        !           157:  00BC  FE 0E 0002 R                    dec     col
        !           158:  00C0  E9 017D R                       jmp     updc            ;move cursor back one column
        !           159:                                
        !           160:  00C3  3C 09                   notbs:  cmp     al,9
        !           161:  00C5  74 2C                           jz      outtb           ;horizontal tab
        !           162:  00C7  3C 0C                           cmp     al,12
        !           163:  00C9  74 4F                           jz      outcs           ;screen clear
        !           164:  00CB  3C 0A                           cmp     al,10
        !           165:  00CD  74 7F                           jz      outlf           ;line feed
        !           166:  00CF  3C 0D                           cmp     al,13
        !           167:  00D1  75 5D                           jnz     nonctl          ;carriage return
        !           168:  00D3  C6 06 0002 R 00                 mov     col,0           ;set column zero
        !           169:  00D8  E9 017D R                       jmp     updc
        !           170:                                
        !           171:  00DB  B8 0920                 clreol: mov     ax,920h
        !           172:  00DE  8B 1E 0004 R                    mov     bx,atr          ;get page (bh) and attribute (bl)
        !           173:  00E2  8A 0E 0000 R                    mov     cl,wid          ;line length
        !           174:  00E6  2A 0E 0002 R                    sub     cl,col          ;get remainder
        !           175:  00EA  FE C1                           inc     cl              ;include current position
        !           176:  00EC  32 ED                           xor     ch,ch           ;replication factor in cx
        !           177:  00EE  CD 10                           int     10h             ;clear to end of line
        !           178:  00F0  E9 0189 R               pexitj: jmp     pexit
        !           179:                                
        !           180:  00F3  F6 06 0006 R 02         outtb:  test    xla,2
        !           181: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !           182: lciol                                                       Page     1-4
        !           183: 
        !           184: 
        !           185:  00F8  74 36                           jz      nonctl          ;no tab expansion
        !           186:  00FA  A0 0002 R                       mov     al,col
        !           187:  00FD  24 07                           and     al,7
        !           188:  00FF  B1 08                           mov     cl,8
        !           189:  0101  2A C8                           sub     cl,al
        !           190:  0103  32 ED                           xor     ch,ch           ;number of spaces in cx
        !           191:  0105  B0 20                           mov     al,20h
        !           192:  0107  51                      tbexp:  push    cx
        !           193:  0108  50                              push    ax              ;parameter 1
        !           194:  0109  9A 0096 ---- R                  call    _lputc
        !           195:  010E  58                              pop     ax
        !           196:  010F  59                              pop     cx
        !           197:  0110  80 3E 0002 R 00                 cmp     col,0
        !           198:  0115  E0 F0                           loopnz  tbexp           ;stop if cursor wraps
        !           199:  0117  EB 70 90                                jmp     pexit
        !           200:                                
        !           201:  011A  B8 0600                 outcs:  mov     ax,600h         ;scroll (clear screen)
        !           202:  011D  8A 3E 0004 R                    mov     bh,atr          ;current attribute
        !           203:  0121  33 C9                           xor     cx,cx           ;upper left corner of window (0,0)
        !           204:  0123  8B 16 0000 R                    mov     dx,wid          ;lower right corner of window (wid,lps)
        !           205:  0127  CD 10                           int     10h             ;scroll window up one line      
        !           206:  0129  89 0E 0002 R                    mov     col,cx          ;new cursor
        !           207:  012D  EB 4E 90                                jmp     updc
        !           208:                                
        !           209:  0130  B4 09                   nonctl: mov     ah,9
        !           210:  0132  8B 1E 0004 R                    mov     bx,atr          ;get page (bh) and attribute (bl)
        !           211:  0136  B9 0001                         mov     cx,1
        !           212:  0139  CD 10                           int     10h             ;write char and attr at cursor position
        !           213:  013B  8A 26 0002 R                    mov     ah,col
        !           214:  013F  FE 06 0002 R                    inc     col             ;advance cursor on line
        !           215:  0143  3A 26 0000 R                    cmp     ah,wid
        !           216:  0147  72 34                           jc      updc            ;not at end of line, update cursor and exit
        !           217:                                
        !           218:  0149  C6 06 0002 R 00                 mov     col,0           ;set column zero (cr)
        !           219:  014E  F6 06 0006 R 01         outlf:  test    xla,1
        !           220:  0153  74 05                           jz      nocrlf          ;send lf alone
        !           221:  0155  C6 06 0002 R 00                 mov     col,0
        !           222:  015A  8A 26 0003 R            nocrlf: mov     ah,lin
        !           223:  015E  3A 26 0001 R                    cmp     ah,lps
        !           224:  0162  72 15                           jc      upda            ;not at end of screen, update cursor and exit
        !           225:  0164  75 0F                           jnz     updn            ;past end of screen, cr only
        !           226:                                
        !           227:  0166  B8 0601                         mov     ax,601h         ;scroll (ah) number of lines (al)
        !           228:  0169  8A 3E 0004 R                    mov     bh,atr          ;current attribute
        !           229:  016D  33 C9                           xor     cx,cx           ;upper left corner of window (0,0)
        !           230:  016F  8B 16 0000 R                    mov     dx,wid          ;lower right corner of window (wid,lps)
        !           231:  0173  CD 10                           int     10h             ;scroll window up one line      
        !           232:                                
        !           233:  0175  FE 0E 0003 R            updn:   dec     lin             ;leave current line number unchanged
        !           234:  0179  FE 06 0003 R            upda:   inc     lin             ;advance to next line
        !           235:  017D  B4 02                   updc:   mov     ah,2
        !           236:  017F  8A 3E 0005 R                    mov     bh,pag
        !           237:  0183  8B 16 0002 R                    mov     dx,col
        !           238:  0187  CD 10                           int     10h             ;update cursor position
        !           239:                                
        !           240:  0189  33 C0                   pexit:  xor     ax,ax           ;return zero
        !           241: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !           242: lciol                                                       Page     1-5
        !           243: 
        !           244: 
        !           245:  018B  5D                              pop     bp
        !           246:  018C  CB                              ret
        !           247:  018D                          _lputc  endp
        !           248:                                
        !           249:                                ; Put string to console (uses _lputc for each character)
        !           250:                                
        !           251:  018D                          _lputs  proc
        !           252:  018D  55                              push    bp
        !           253:  018E  8B EC                           mov     bp,sp
        !           254:  0190  06                              push    es
        !           255:  0191  8B 46 08                                mov     ax,pb[bp+2]     ;string segment
        !           256:  0194  8B 5E 06                                mov     bx,pb[bp]       ;string offset
        !           257:  0197  8E C0                           mov     es,ax
        !           258:  0199  32 F6                           xor     dh,dh
        !           259:  019B  26: 8A 17               nxtch:  mov     dl,es:[bx]      ;character to output
        !           260:  019E  0A D2                           or      dl,dl
        !           261:  01A0  74 15                           jz      sexit
        !           262:                                
        !           263:  01A2  43                              inc     bx              ;address next character
        !           264:  01A3  75 07                           jnz     nowrap
        !           265:  01A5  8C C0                           mov     ax,es
        !           266:  01A7  05 0100                         add     ax,100h         ;add 64k to segment pointer
        !           267:  01AA  8E C0                           mov     es,ax
        !           268:  01AC  53                      nowrap: push    bx              ;save offset
        !           269:  01AD  52                              push    dx              ;arg 1
        !           270:  01AE  9A 0096 ---- R                  call    _lputc          ;put character
        !           271:  01B3  5A                              pop     dx
        !           272:  01B4  5B                              pop     bx
        !           273:  01B5  EB E4                           jmp     nxtch
        !           274:                                
        !           275:  01B7  8B 46 06                        sexit:  mov     ax,pb[bp]
        !           276:  01BA  8B 56 08                                mov     dx,pb[bp+2]
        !           277:  01BD  07                              pop     es
        !           278:  01BE  5D                              pop     bp
        !           279:  01BF  CB                              ret
        !           280:  01C0                          _lputs  endp
        !           281:                                
        !           282:                                        end
        !           283: 
        !           284: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !           285: lciol                                                       Symbols-1
        !           286: 
        !           287: 
        !           288: Macros:
        !           289: 
        !           290:                N a m e                 Lines
        !           291: 
        !           292: ASYN . . . . . . . . . . . . . .          3
        !           293: DSS  . . . . . . . . . . . . . .          4
        !           294: EOPG . . . . . . . . . . . . . .          2
        !           295: LISTON . . . . . . . . . . . . .          1
        !           296: SETMOD . . . . . . . . . . . . .          9
        !           297: 
        !           298: Segments and Groups:
        !           299: 
        !           300:                 N a m e                Size    Length   Align  Combine Class
        !           301: 
        !           302: DGROUP . . . . . . . . . . . . .       GROUP
        !           303:   _DATA  . . . . . . . . . . . .       16 Bit  0007    WORD    PUBLIC  'DATA'
        !           304: LCIOL_TEXT . . . . . . . . . . .       16 Bit  01C0    WORD    PUBLIC  'CODE'
        !           305: 
        !           306: Symbols:            
        !           307: 
        !           308:                 N a m e                Type     Value   Attr
        !           309: 
        !           310: AA . . . . . . . . . . . . . . .       TEXT  .model large              
        !           311: ATR  . . . . . . . . . . . . . .       L BYTE  0004    _DATA
        !           312: 
        !           313: BLPS . . . . . . . . . . . . . .       L NEAR  0022    LCIOL_TEXT
        !           314: 
        !           315: CLPS . . . . . . . . . . . . . .       L NEAR  0023    LCIOL_TEXT
        !           316: CLREOL . . . . . . . . . . . . .       L NEAR  00DB    LCIOL_TEXT
        !           317: COL  . . . . . . . . . . . . . .       L BYTE  0002    _DATA
        !           318: CUUPD  . . . . . . . . . . . . .       L NEAR  0042    LCIOL_TEXT
        !           319: 
        !           320: DS1  . . . . . . . . . . . . . .       TEXT  label byte                
        !           321: DS2  . . . . . . . . . . . . . .       TEXT  label word                
        !           322: DS4  . . . . . . . . . . . . . .       TEXT  label dword               
        !           323: DS6  . . . . . . . . . . . . . .       TEXT  label fword               
        !           324: DS8  . . . . . . . . . . . . . .       TEXT  label qword               
        !           325: 
        !           326: LIN  . . . . . . . . . . . . . .       L BYTE  0003    _DATA
        !           327: LPS  . . . . . . . . . . . . . .       L BYTE  0001    _DATA
        !           328: 
        !           329: MB . . . . . . . . . . . . . . .       TEXT  byte ptr          
        !           330: MDLC . . . . . . . . . . . . . .       TEXT  compact           
        !           331: MDLH . . . . . . . . . . . . . .       TEXT  huge              
        !           332: MDLL . . . . . . . . . . . . . .       TEXT  large             
        !           333: MDLM . . . . . . . . . . . . . .       TEXT  medium            
        !           334: MDLS . . . . . . . . . . . . . .       TEXT  small             
        !           335: ML . . . . . . . . . . . . . . .       TEXT  dword ptr         
        !           336: MM . . . . . . . . . . . . . . .       TEXT  l         
        !           337: MW . . . . . . . . . . . . . . .       TEXT  word ptr          
        !           338: 
        !           339: NOCRLF . . . . . . . . . . . . .       L NEAR  015A    LCIOL_TEXT
        !           340: NONCTL . . . . . . . . . . . . .       L NEAR  0130    LCIOL_TEXT
        !           341: NOTBL  . . . . . . . . . . . . .       L NEAR  00B1    LCIOL_TEXT
        !           342: NOTBS  . . . . . . . . . . . . .       L NEAR  00C3    LCIOL_TEXT
        !           343: Microsoft (R) Macro Assembler Version 5.10                  3/15/92 16:18:13
        !           344: lciol                                                       Symbols-2
        !           345: 
        !           346: 
        !           347: NOWRAP . . . . . . . . . . . . .       L NEAR  01AC    LCIOL_TEXT
        !           348: NOXLA  . . . . . . . . . . . . .       L NEAR  0010    LCIOL_TEXT
        !           349: NXTCH  . . . . . . . . . . . . .       L NEAR  019B    LCIOL_TEXT
        !           350: 
        !           351: OS . . . . . . . . . . . . . . .       TEXT  offset            
        !           352: OUTCS  . . . . . . . . . . . . .       L NEAR  011A    LCIOL_TEXT
        !           353: OUTLF  . . . . . . . . . . . . .       L NEAR  014E    LCIOL_TEXT
        !           354: OUTTB  . . . . . . . . . . . . .       L NEAR  00F3    LCIOL_TEXT
        !           355: 
        !           356: PAG  . . . . . . . . . . . . . .       L BYTE  0005    _DATA
        !           357: PB . . . . . . . . . . . . . . .       NUMBER  0006    
        !           358: PEXIT  . . . . . . . . . . . . .       L NEAR  0189    LCIOL_TEXT
        !           359: PEXITJ . . . . . . . . . . . . .       L NEAR  00F0    LCIOL_TEXT
        !           360: 
        !           361: S  . . . . . . . . . . . . . . .       TEXT  short             
        !           362: SEXIT  . . . . . . . . . . . . .       L NEAR  01B7    LCIOL_TEXT
        !           363: 
        !           364: TBEXP  . . . . . . . . . . . . .       L NEAR  0107    LCIOL_TEXT
        !           365: 
        !           366: UPDA . . . . . . . . . . . . . .       L NEAR  0179    LCIOL_TEXT
        !           367: UPDC . . . . . . . . . . . . . .       L NEAR  017D    LCIOL_TEXT
        !           368: UPDN . . . . . . . . . . . . . .       L NEAR  0175    LCIOL_TEXT
        !           369: 
        !           370: WID  . . . . . . . . . . . . . .       L BYTE  0000    _DATA
        !           371: 
        !           372: XLA  . . . . . . . . . . . . . .       L BYTE  0006    _DATA
        !           373: 
        !           374: @CODE  . . . . . . . . . . . . .       TEXT  lciol_TEXT                
        !           375: @CODESIZE  . . . . . . . . . . .       TEXT  1         
        !           376: @CPU . . . . . . . . . . . . . .       TEXT  257               
        !           377: @DATASIZE  . . . . . . . . . . .       TEXT  1         
        !           378: @FILENAME  . . . . . . . . . . .       TEXT  lciol             
        !           379: @VERSION . . . . . . . . . . . .       TEXT  510               
        !           380: _lclatr  . . . . . . . . . . . .       F PROC  0085    LCIOL_TEXT      Global  Length = 0011
        !           381: _lclini  . . . . . . . . . . . .       F PROC  0000    LCIOL_TEXT      Global  Length = 0053
        !           382: _lclwx . . . . . . . . . . . . .       F PROC  0075    LCIOL_TEXT      Global  Length = 0008
        !           383: _lclwy . . . . . . . . . . . . .       F PROC  007D    LCIOL_TEXT      Global  Length = 0008
        !           384: _lclxy . . . . . . . . . . . . .       F PROC  0053    LCIOL_TEXT      Global  Length = 0022
        !           385: _lputc . . . . . . . . . . . . .       F PROC  0096    LCIOL_TEXT      Global  Length = 00F7
        !           386: _lputs . . . . . . . . . . . . .       F PROC  018D    LCIOL_TEXT      Global  Length = 0033
        !           387: 
        !           388: 
        !           389:     338 Source  Lines
        !           390:     351 Total   Lines
        !           391:      74 Symbols
        !           392: 
        !           393:   47354 + 412354 Bytes symbol space free
        !           394: 
        !           395:       0 Warning Errors
        !           396:       0 Severe  Errors

unix.superglobalmegacorp.com

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