home *** CD-ROM | disk | FTP | other *** search
- ; Static Name Aliases
- ;
- TITLE d:\peter\myv.c
- .MODEL LARGE
- .386p
- .387
- INCLUDELIB LLIBCE
- INCLUDELIB OLDNAMES.LIB
- MYV_TEXT SEGMENT WORD USE16 PUBLIC 'CODE'
- MYV_TEXT ENDS
- _DATA SEGMENT WORD USE16 PUBLIC 'DATA'
- _DATA ENDS
- CONST SEGMENT WORD USE16 PUBLIC 'CONST'
- CONST ENDS
- _BSS SEGMENT WORD USE16 PUBLIC 'BSS'
- _BSS ENDS
- DGROUP GROUP CONST, _BSS, _DATA
- ASSUME DS: DGROUP, SS: DGROUP
- PUBLIC _VDestPtr
- PUBLIC _VSrcPtr
- PUBLIC _VSrcBPL
- PUBLIC _VSegAdd
- PUBLIC _VOffAdd
- _DATA SEGMENT
- _VDestPtr DD 00H
- _VSrcPtr DD 00H
- _VSrcBPL DW 00H
- _VSegAdd DW 00H
- _VOffAdd DW 00H
- PUBLIC _myVirtualVirtual
- _myVirtualVirtual PROC FAR ; COMDAT
- ;|*** //#include <stdio.h>
- ;|*** //#include <stdlib.h>
- ;|*** #include <dos.h>
- ;|*** //#include <bios.h>
- ;|*** #include <ctype.h>
- ;|***
- ;|*** char far *VDestPtr = 0;
- ;|*** char far *VSrcPtr = 0;
- ;|***
- ;|*** unsigned int VSrcBPL = 0, VSegAdd = 0, VOffAdd = 0;
- ;|***
- ;|*** ///////////////////////////////////////////////////////////////////
- ;|*** //////////////////////////////////////////////////////////////////
- ;|*** int myVirtualVirtual(int nrLines, int fromBPL, int toBPL)
- ;|*** {
- ; Line 15
- *** 000000 c8 0a 00 00 enter 10,0
- *** 000004 57 push di
- *** 000005 56 push si
- ; nrLines = 6
- ; fromBPL = 8
- ; toBPL = 10
- ; retcode = -2
- ; yy = -6
- ; fseg = -4
- ; foff = -8
- ; fbpl = -10
- ; fbplmod = -4
- ; to_bpl = -6
- ;|*** int retcode = 0;
- ;|***
- ;|*** register yy = nrLines;
- ; Line 18
- *** 000006 8b 46 06 mov ax,WORD PTR [bp+6] ;nrLines
- *** 000009 89 46 fa mov WORD PTR [bp-6],ax ;yy
- ;|*** register unsigned fseg, foff;
- ;|*** register int fbpl = fromBPL / 16;
- ; Line 20
- *** 00000c 8b 46 08 mov ax,WORD PTR [bp+8] ;fromBPL
- *** 00000f 99 cwd
- *** 000010 83 e2 0f and dx,15 ;000fH
- *** 000013 03 c2 add ax,dx
- *** 000015 c1 f8 04 sar ax,4
- *** 000018 89 46 f6 mov WORD PTR [bp-10],ax ;fbpl
- ;|***
- ;|*** int fbplmod;
- ;|*** int to_bpl = toBPL;
- ;|***
- ;|***
- ;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
- ;|*** memcpy(VDestPtr, VSrcPtr, 320);
- ; Line 27
- *** 00001b a1 00 00 mov ax,WORD PTR _VDestPtr
- *** 00001e 8b 16 02 00 mov dx,WORD PTR _VDestPtr+2
- *** 000022 8b 1e 00 00 mov bx,WORD PTR _VSrcPtr
- *** 000026 8b 36 02 00 mov si,WORD PTR _VSrcPtr+2
- *** 00002a 1e push ds
- *** 00002b 56 push si
- *** 00002c 8b f8 mov di,ax
- *** 00002e 8b f3 mov si,bx
- *** 000030 8e c2 mov es,dx
- *** 000032 1f pop ds
- ASSUME DS: DGROUP
- *** 000033 66 b9 50 00 00 00 mov ecx,80 ;00000050H
- *** 000039 f3 rep
- *** 00003a 66 a5 movsd
- *** 00003c 1f pop ds
- ASSUME DS: DGROUP
- ;|*** fbplmod = fromBPL % 16;
- ;|*** fseg = _FP_SEG(VSrcPtr);
- ; Line 29
- *** 00003d a1 02 00 mov ax,WORD PTR _VSrcPtr+2
- *** 000040 89 46 fc mov WORD PTR [bp-4],ax ;fseg
- ;|*** foff = _FP_OFF(VSrcPtr) + fbplmod;
- ; Line 30
- *** 000043 8b 46 08 mov ax,WORD PTR [bp+8] ;fromBPL
- *** 000046 b9 10 00 mov cx,16 ;0010H
- *** 000049 99 cwd
- *** 00004a f7 f9 idiv cx
- *** 00004c 8b c2 mov ax,dx
- *** 00004e 03 16 00 00 add dx,WORD PTR _VSrcPtr
- *** 000052 89 56 f8 mov WORD PTR [bp-8],dx ;foff
- ;|*** if (fbplmod)
- ; Line 31
- *** 000055 0b c0 or ax,ax
- *** 000057 74 3b je SHORT $L289
- ;|*** {
- ;|*** while(--yy)
- ; Line 33
- $FC273:
- *** 000059 ff 4e fa dec WORD PTR [bp-6] ;yy
- *** 00005c 74 72 je SHORT $I275
- ;|*** {
- ;|*** // VDestPtr += to_bpl;
- ;|*** // VSrcPtr = _MK_FP(_FP_SEG(VSrcPtr) + (from_bpl / 16), _FP_OFF(VSrcPtr) + (from_bpl % 16));
- ;|*** VDestPtr += 320;
- ; Line 37
- *** 00005e 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
- ;|*** fseg += fbpl;
- ;|*** VSrcPtr = _MK_FP(fseg, foff);
- ; Line 39
- *** 000064 8b 46 f6 mov ax,WORD PTR [bp-10] ;fbpl
- *** 000067 01 46 fc add WORD PTR [bp-4],ax ;fseg
- *** 00006a 8b 46 f8 mov ax,WORD PTR [bp-8] ;foff
- *** 00006d 8b 56 fc mov dx,WORD PTR [bp-4] ;fseg
- *** 000070 a3 00 00 mov WORD PTR _VSrcPtr,ax
- *** 000073 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
- ;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
- ;|*** memcpy(VDestPtr, VSrcPtr, 320);
- ; Line 41
- *** 000077 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
- *** 00007b 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
- *** 00007f 1e push ds
- *** 000080 56 push si
- *** 000081 8b fb mov di,bx
- *** 000083 8b f0 mov si,ax
- *** 000085 07 pop es
- *** 000086 8e da mov ds,dx
- ASSUME DS: NOTHING
- *** 000088 66 b9 50 00 00 00 mov ecx,80 ;00000050H
- *** 00008e f3 rep
- *** 00008f 66 a5 movsd
- *** 000091 1f pop ds
- ASSUME DS: DGROUP
- ;|*** }
- ; Line 42
- *** 000092 eb c5 jmp SHORT $FC273
- $L289:
- ;|*** }
- ;|*** else
- ;|*** {
- ;|*** while(--yy)
- ; Line 46
- *** 000094 ff 4e fa dec WORD PTR [bp-6] ;yy
- *** 000097 74 37 je SHORT $I275
- ;|*** {
- ;|*** VDestPtr += 320;
- ; Line 48
- *** 000099 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
- ;|*** fseg += fbpl;
- ;|*** VSrcPtr = _MK_FP(fseg, foff);
- ; Line 50
- *** 00009f 8b 46 f6 mov ax,WORD PTR [bp-10] ;fbpl
- *** 0000a2 01 46 fc add WORD PTR [bp-4],ax ;fseg
- *** 0000a5 8b 46 f8 mov ax,WORD PTR [bp-8] ;foff
- *** 0000a8 8b 56 fc mov dx,WORD PTR [bp-4] ;fseg
- *** 0000ab a3 00 00 mov WORD PTR _VSrcPtr,ax
- *** 0000ae 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
- ;|*** // memcpy(VDestPtr, VSrcPtr, to_bpl);
- ;|*** memcpy(VDestPtr, VSrcPtr, 320);
- ; Line 52
- *** 0000b2 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
- *** 0000b6 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
- *** 0000ba 1e push ds
- *** 0000bb 56 push si
- *** 0000bc 8b fb mov di,bx
- *** 0000be 8b f0 mov si,ax
- *** 0000c0 07 pop es
- *** 0000c1 8e da mov ds,dx
- ASSUME DS: NOTHING
- *** 0000c3 66 b9 50 00 00 00 mov ecx,80 ;00000050H
- *** 0000c9 f3 rep
- *** 0000ca 66 a5 movsd
- *** 0000cc 1f pop ds
- ASSUME DS: DGROUP
- ;|*** }
- ; Line 53
- *** 0000cd eb c5 jmp SHORT $L289
- *** 0000cf 90 nop
- ;|*** }
- ; Line 54
- $I275:
- ;|*** return(retcode);
- ; Line 55
- *** 0000d0 33 c0 xor ax,ax
- ;|*** }
- ; Line 56
- *** 0000d2 5e pop si
- *** 0000d3 5f pop di
- *** 0000d4 c9 leave
- *** 0000d5 cb ret
-
- _myVirtualVirtual ENDP
- PUBLIC _myVirtualTo320x200Virtual
- _myVirtualTo320x200Virtual PROC FAR ; COMDAT
- ;|***
- ;|*** //////////////////////////////////////////////////////////////////////////
- ;|*** //////////////////////////////////////////////////////////////////////////
- ;|*** void myVirtualTo320x200Virtual()
- ;|*** {
- ; Line 61
- *** 000000 c8 06 00 00 enter 6,0
- *** 000004 57 push di
- *** 000005 56 push si
- ; yy = -4
- ; fseg = -2
- ; foff = -6
- ; segAdd = -8
- ;|*** register yy = 200;
- ; Line 62
- *** 000006 c7 46 fc c8 00 mov WORD PTR [bp-4],200 ;00c8H ;yy
- ;|*** register unsigned fseg, foff;
- ;|*** register unsigned segAdd = VSegAdd;
- ;|***
- ;|*** memcpy(VDestPtr, VSrcPtr, 320);
- ; Line 66
- *** 00000b a1 00 00 mov ax,WORD PTR _VDestPtr
- *** 00000e 8b 16 02 00 mov dx,WORD PTR _VDestPtr+2
- *** 000012 8b 1e 00 00 mov bx,WORD PTR _VSrcPtr
- *** 000016 8b 36 02 00 mov si,WORD PTR _VSrcPtr+2
- *** 00001a 1e push ds
- *** 00001b 56 push si
- *** 00001c 8b f8 mov di,ax
- *** 00001e 8b f3 mov si,bx
- *** 000020 8e c2 mov es,dx
- *** 000022 1f pop ds
- ASSUME DS: DGROUP
- *** 000023 66 b9 50 00 00 00 mov ecx,80 ;00000050H
- *** 000029 f3 rep
- *** 00002a 66 a5 movsd
- *** 00002c 1f pop ds
- ASSUME DS: DGROUP
- ;|*** fseg = _FP_SEG(VSrcPtr);
- ; Line 67
- *** 00002d a1 02 00 mov ax,WORD PTR _VSrcPtr+2
- *** 000030 89 46 fe mov WORD PTR [bp-2],ax ;fseg
- ;|*** foff = _FP_OFF(VSrcPtr) + VOffAdd;
- ; Line 68
- *** 000033 a1 00 00 mov ax,WORD PTR _VSrcPtr
- *** 000036 03 06 00 00 add ax,WORD PTR _VOffAdd
- *** 00003a 89 46 fa mov WORD PTR [bp-6],ax ;foff
- ;|*** // if (!foff)
- ;|*** // {
- ;|*** // while(--yy)
- ;|*** // {
- ;|*** // VDestPtr += 320;
- ;|*** // fseg += VSegAdd;
- ;|*** // VSrcPtr = _MK_FP(fseg, 0);
- ;|*** // memcpy(VDestPtr, VSrcPtr, 320);
- ;|*** // }
- ;|*** // }
- ;|*** // else
- ;|*** // {
- ;|*** while(--yy)
- ; Line 81
- *** 00003d eb 35 jmp SHORT $L291
- *** 00003f 90 nop
- $FC286:
- ;|*** {
- ;|*** VDestPtr += 320;
- ; Line 83
- *** 000040 81 06 00 00 40 01 add WORD PTR _VDestPtr,320 ;0140H
- ;|*** fseg += VSegAdd;
- ;|*** VSrcPtr = _MK_FP(fseg, foff);
- ; Line 85
- *** 000046 a1 00 00 mov ax,WORD PTR _VSegAdd
- *** 000049 01 46 fe add WORD PTR [bp-2],ax ;fseg
- *** 00004c 8b 46 fa mov ax,WORD PTR [bp-6] ;foff
- *** 00004f 8b 56 fe mov dx,WORD PTR [bp-2] ;fseg
- *** 000052 a3 00 00 mov WORD PTR _VSrcPtr,ax
- *** 000055 89 16 02 00 mov WORD PTR _VSrcPtr+2,dx
- ;|*** memcpy(VDestPtr, VSrcPtr, 320);
- ; Line 86
- *** 000059 8b 1e 00 00 mov bx,WORD PTR _VDestPtr
- *** 00005d 8b 36 02 00 mov si,WORD PTR _VDestPtr+2
- *** 000061 1e push ds
- *** 000062 56 push si
- *** 000063 8b fb mov di,bx
- *** 000065 8b f0 mov si,ax
- *** 000067 07 pop es
- *** 000068 8e da mov ds,dx
- ASSUME DS: NOTHING
- *** 00006a 66 b9 50 00 00 00 mov ecx,80 ;00000050H
- *** 000070 f3 rep
- *** 000071 66 a5 movsd
- *** 000073 1f pop ds
- ASSUME DS: DGROUP
- ;|*** }
- ; Line 87
- $L291:
- *** 000074 ff 4e fc dec WORD PTR [bp-4] ;yy
- *** 000077 75 c7 jne SHORT $FC286
- ;|*** // }
- ;|*** }
- ; Line 89
- *** 000079 5e pop si
- *** 00007a 5f pop di
- *** 00007b c9 leave
- *** 00007c cb ret
-
- _myVirtualTo320x200Virtual ENDP
- *** 00007d 90 nop
- _DATA ENDS
- END
-