'=========================================================================== ' Subject: PATCHED MEMCOPY ROUTINE Date: 02-27-98 (00:57) ' Author: Jonathan L. Leger Code: QB, QBasic, PDS ' Origin: leger@earthlink.net Packet: MEMORY.ABC '=========================================================================== DEFINT A-Z DECLARE SUB InitMemCopy () DECLARE SUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%) DECLARE SUB FillChar (segment%, offset%, value%, bytes%) DIM SHARED MemCopy.ASM AS STRING DIM Array1(1 TO 1000) AS INTEGER DIM Array2(1 TO 1000) AS INTEGER InitMemCopy '*** Fill the first array. FOR value = 1 TO 1000: Array1(value) = value: NEXT value '*** Copy the contents of Array1() into Array2() a1seg = VARSEG(Array1(1)) '*** Segment location of Array1() a1off = VARPTR(Array1(1)) '*** Offset of Array1() a2seg = VARSEG(Array2(1)) '*** Segment location of Array2() a2off = VARPTR(Array2(1)) '*** Offset of Array2() bytes = 2000 '*** Number of bytes (integer = 2 bytes) MemCopy a1seg, a1off, a2seg, a2off, bytes '*** Show second array's contents. FOR value = 1 TO 1000: PRINT Array2(value); : NEXT value END DEFSNG A-Z SUB InitMemCopy MemCopy.ASM = "" MemCopy.ASM = MemCopy.ASM + CHR$(85) 'PUSH BP MemCopy.ASM = MemCopy.ASM + CHR$(137) + CHR$(229) 'MOV BP,SP MemCopy.ASM = MemCopy.ASM + CHR$(30) 'PUSH DS MemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(10) 'MOV AX,[BP+0A] MemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(192) 'MOV ES,AX MemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(14) 'MOV AX,[BP+0E] MemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(216) 'MOV DS,AX MemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(118) + CHR$(12) 'MOV SI,[BP+0C] MemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(126) + CHR$(8) 'MOV DI,[BP+08] MemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(78) + CHR$(6) 'MOV CX,[BP+06] MemCopy.ASM = MemCopy.ASM + CHR$(243) 'REPZ MemCopy.ASM = MemCopy.ASM + CHR$(164) 'MOVSB MemCopy.ASM = MemCopy.ASM + CHR$(31) 'POP DS MemCopy.ASM = MemCopy.ASM + CHR$(93) 'POP BP MemCopy.ASM = MemCopy.ASM + CHR$(203) 'RETF END SUB DEFINT A-Z SUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%) DEF SEG = VARSEG(MemCopy.ASM) CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(MemCopy.ASM)) DEF SEG END SUB