From: sparky4 Date: Thu, 14 May 2015 18:59:59 +0000 (-0500) Subject: ems workings~ X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=84af3c041adc18905147603fdbd5e4f1b0b7d8cc;p=16.git ems workings~ new file: src/lib/exmm/EM0.EXE new file: src/lib/exmm/MEMORY.ASM new file: src/lib/exmm/MEMORY.MAP new file: src/lib/exmm/MEMORY.OB modified: src/lib/exmm/memory.h modified: src/lib/exmm/x.bat --- diff --git a/src/lib/exmm/EM0.EXE b/src/lib/exmm/EM0.EXE new file mode 100644 index 00000000..bb0ff518 Binary files /dev/null and b/src/lib/exmm/EM0.EXE differ diff --git a/src/lib/exmm/MEMORY.ASM b/src/lib/exmm/MEMORY.ASM new file mode 100644 index 00000000..802d01cd --- /dev/null +++ b/src/lib/exmm/MEMORY.ASM @@ -0,0 +1,718 @@ +.387 + PUBLIC _OpenEMM + PUBLIC _CloseEMM + PUBLIC _EMMInstalled + PUBLIC _EMMCoreLeft + PUBLIC _EMMalloc + PUBLIC _EMMRealloc + PUBLIC _EMMFree + PUBLIC _MapEMM + PUBLIC _UnmapEMM + PUBLIC _UseEMM + PUBLIC _SaveEMM + EXTRN `F_LXLSH@`:BYTE + EXTRN `F_SCOPY@`:BYTE +MEMORY_TEXT SEGMENT BYTE PUBLIC USE16 'CODE' + ASSUME CS:MEMORY_TEXT, DS:DGROUP, SS:DGROUP +_OpenEMM: + push bp + mov bp,sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + call far ptr L$59 + or ax,ax + je L$1 + call far ptr L$65 + or ax,ax + jne L$2 +L$1: + xor ax,ax + jmp L$4 +L$2: + call far ptr L$68 + mov word ptr L$89,ax + or ax,ax + jne L$3 + xor ax,ax + jmp L$4 +L$3: + mov ax,1 + jmp L$4 +L$4: + pop ds + pop bp + retf +_CloseEMM: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + cmp word ptr L$89,0 + jne L$5 + jmp L$9 +L$5: + xor si,si + jmp L$8 +L$6: + mov bx,si + shl bx,1 + cmp word ptr L$88[bx],0 + je L$7 + mov bx,si + shl bx,1 + push word ptr L$88[bx] + call far ptr L$77 + inc sp + inc sp + mov bx,si + shl bx,1 + mov word ptr L$88[bx],0 +L$7: + inc si +L$8: + cmp si,40H + jl L$6 + mov word ptr L$89,0 +L$9: + pop ds + pop si + pop bp + retf +_EMMInstalled: + push bp + mov bp,sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + cmp word ptr L$89,0 + je L$10 + mov ax,1 + jmp L$11 +L$10: + xor ax,ax +L$11: + jmp L$12 +L$12: + pop ds + pop bp + retf +_EMMCoreLeft: + push bp + mov bp,sp + sub sp,6 + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov word ptr -4[bp],0 + mov word ptr -6[bp],0 + mov ah,42H + int 67H + or ah,ah + js L$13 + mov word ptr -2[bp],bx + mov ax,word ptr -2[bp] + xor dx,dx + mov cl,0eH + call far ptr `F_LXLSH@` + mov word ptr -4[bp],dx + mov word ptr -6[bp],ax +L$13: + mov dx,word ptr -4[bp] + mov ax,word ptr -6[bp] + jmp L$14 +L$14: + pop ds + mov sp,bp + pop bp + retf +_EMMalloc: + push bp + mov bp,sp + sub sp,4 + push si + push di + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov di,word ptr 0aH[bp] + mov word ptr -2[bp],0 + mov word ptr -4[bp],0 + cmp word ptr L$89,0 + jne L$15 + les bx,dword ptr 6[bp] + mov word ptr es:[bx],0 + xor dx,dx + xor ax,ax + jmp L$23 +L$15: + cmp di,1 + jl L$16 + cmp di,3fcH + jle L$17 +L$16: + les bx,dword ptr 6[bp] + mov word ptr es:[bx],0f440H + xor dx,dx + xor ax,ax + jmp L$23 +L$17: + xor si,si + jmp L$19 +L$18: + inc si +L$19: + cmp si,40H + jge L$20 + mov bx,si + shl bx,1 + cmp word ptr L$88[bx],0 + jne L$18 +L$20: + cmp si,40H + jne L$21 + les bx,dword ptr 6[bp] + mov word ptr es:[bx],0f443H + xor dx,dx + xor ax,ax + jmp L$23 +L$21: + push di + call far ptr L$71 + inc sp + inc sp + mov bx,si + shl bx,1 + mov word ptr L$88[bx],ax + or ax,ax + jle L$22 + mov ax,word ptr L$89 + mov word ptr -2[bp],ax + mov word ptr -4[bp],0 +L$22: + mov bx,si + shl bx,1 + mov ax,word ptr L$88[bx] + les bx,dword ptr 6[bp] + mov word ptr es:[bx],ax + mov dx,word ptr -2[bp] + mov ax,word ptr -4[bp] + jmp L$23 +L$23: + pop ds + pop di + pop si + mov sp,bp + pop bp + retf +_EMMRealloc: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + xor si,si + cmp word ptr L$89,0 + je L$24 + cmp word ptr 8[bp],0 + jl L$24 + cmp word ptr 8[bp],3fcH + jle L$25 +L$24: + xor ax,ax + jmp L$27 +L$25: + mov ah,51H + mov bx,word ptr 8[bp] + mov dx,word ptr 6[bp] + int 67H + or ah,ah + js L$26 + mov si,1 +L$26: + mov ax,si + jmp L$27 +L$27: + pop ds + pop si + pop bp + retf +_EMMFree: + push bp + mov bp,sp + dec sp + dec sp + push si + push di + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov di,word ptr 6[bp] + cmp word ptr L$89,0 + jne L$28 + jmp L$36 +L$28: + xor si,si + jmp L$30 +L$29: + inc si +L$30: + cmp si,40H + jge L$31 + mov bx,si + shl bx,1 + cmp word ptr L$88[bx],di + jne L$29 +L$31: + cmp si,40H + jl L$32 + jmp L$36 +L$32: + mov word ptr -2[bp],10H + jmp L$34 +L$33: + mov bx,si + shl bx,1 + push word ptr L$88[bx] + call far ptr L$77 + inc sp + inc sp + or ax,ax + je L$34 + jmp L$35 +L$34: + mov ax,word ptr -2[bp] + dec word ptr -2[bp] + or ax,ax + jne L$33 +L$35: + mov bx,si + shl bx,1 + mov word ptr L$88[bx],0 +L$36: + pop ds + pop di + pop si + mov sp,bp + pop bp + retf +_MapEMM: + push bp + mov bp,sp + push si + push di + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov di,word ptr 6[bp] + cmp word ptr L$89,0 + jne L$37 + xor ax,ax + jmp L$47 +L$37: + xor si,si + jmp L$39 +L$38: + inc si +L$39: + cmp si,40H + jge L$40 + mov bx,si + shl bx,1 + cmp word ptr L$88[bx],di + jne L$38 +L$40: + cmp si,40H + jne L$41 + xor ax,ax + jmp L$47 +L$41: + push di + call far ptr L$80 + inc sp + inc sp + cmp ax,word ptr 0aH[bp] + jl L$42 + cmp word ptr 0aH[bp],1 + jl L$42 + cmp word ptr 0aH[bp],4 + jle L$43 +L$42: + mov ax,0f440H + jmp L$47 +L$43: + mov si,word ptr 8[bp] + jmp L$46 +L$44: + mov ax,si + sub ax,word ptr 8[bp] + push ax + push si + push di + call far ptr L$74 + add sp,6 + or ax,ax + jne L$45 + xor ax,ax + jmp L$47 +L$45: + inc si +L$46: + mov ax,word ptr 8[bp] + add ax,word ptr 0aH[bp] + cmp ax,si + jg L$44 + mov ax,1 + jmp L$47 +L$47: + pop ds + pop di + pop si + pop bp + retf +_UnmapEMM: + push bp + mov bp,sp + dec sp + dec sp + push si + push di + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov di,word ptr 6[bp] + cmp word ptr L$89,0 + jne L$48 + jmp L$57 +L$48: + xor si,si + jmp L$50 +L$49: + inc si +L$50: + cmp si,40H + jge L$51 + mov bx,si + shl bx,1 + cmp word ptr L$88[bx],di + jne L$49 +L$51: + cmp si,40H + jne L$52 + jmp L$57 +L$52: + mov ax,word ptr 8[bp] + add ax,word ptr 0aH[bp] + mov word ptr -2[bp],ax + cmp word ptr 0aH[bp],1 + jl L$53 + cmp word ptr -2[bp],4 + jle L$54 +L$53: + jmp L$57 +L$54: + mov si,word ptr 8[bp] + jmp L$56 +L$55: + push si + mov ax,0ffffH + push ax + push di + call far ptr L$74 + add sp,6 + inc si +L$56: + cmp si,word ptr -2[bp] + jl L$55 +L$57: + pop ds + pop di + pop si + mov sp,bp + pop bp + retf +_UseEMM: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov si,word ptr 6[bp] + push si + call far ptr L$83 + inc sp + inc sp + push word ptr 0aH[bp] + push word ptr 8[bp] + push si + push cs + call near ptr _MapEMM + add sp,6 + jmp L$58 +L$58: + pop ds + pop si + pop bp + retf +_SaveEMM: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov si,word ptr 6[bp] + push word ptr 0aH[bp] + push word ptr 8[bp] + push si + push cs + call near ptr _UnmapEMM + add sp,6 + push si + call far ptr L$86 + inc sp + inc sp + pop ds + pop si + pop bp + retf +L$59: + push bp + mov bp,sp + sub sp,14H + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + push ss + lea ax,-0cH[bp] + push ax + push ds + mov ax,offset L$87 + push ax + mov cx,9 + call far ptr `F_SCOPY@` + push es + mov ax,3567H + int 21H + mov ax,es + mov word ptr -2[bp],ax + pop es + mov ax,word ptr -2[bp] + mov word ptr -12H[bp],ax + mov word ptr -14H[bp],0aH + lea ax,-0cH[bp] + mov word ptr -0eH[bp],ss + mov word ptr -10H[bp],ax + xor si,si + jmp L$61 +L$60: + inc si +L$61: + cmp si,8 + jge L$62 + les bx,dword ptr -10H[bp] + inc word ptr -10H[bp] + mov al,byte ptr es:[bx] + les bx,dword ptr -14H[bp] + inc word ptr -14H[bp] + cmp al,byte ptr es:[bx] + je L$60 +L$62: + cmp si,8 + jne L$63 + mov ax,1 + jmp L$64 +L$63: + xor ax,ax + jmp L$64 +L$64: + pop ds + pop si + mov sp,bp + pop bp + retf +L$65: + push bp + mov bp,sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov ah,40H + int 67H + or ah,ah + jns L$66 + xor ax,ax + jmp L$67 +L$66: + mov ax,1 + jmp L$67 +L$67: + pop ds + pop bp + retf +L$68: + push bp + mov bp,sp + dec sp + dec sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov ah,41H + int 67H + or ah,ah + js L$69 + mov word ptr -2[bp],bx + mov ax,word ptr -2[bp] + jmp L$70 +L$69: + xor ax,ax + jmp L$70 +L$70: + pop ds + mov sp,bp + pop bp + retf +L$71: + push bp + mov bp,sp + dec sp + dec sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov ah,43H + mov bx,word ptr 6[bp] + int 67H + or ah,ah + js L$72 + mov word ptr -2[bp],dx + mov ax,word ptr -2[bp] + jmp L$73 +L$72: + xor ax,ax + jmp L$73 +L$73: + pop ds + mov sp,bp + pop bp + retf +L$74: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + xor si,si + mov ax,word ptr 0aH[bp] + mov ah,44H + mov bx,word ptr 8[bp] + mov dx,word ptr 6[bp] + int 67H + or ah,ah + js L$75 + mov si,1 +L$75: + mov ax,si + jmp L$76 +L$76: + pop ds + pop si + pop bp + retf +L$77: + push bp + mov bp,sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov ah,45H + mov dx,word ptr 6[bp] + int 67H + or ah,ah + js L$78 + mov ax,1 + jmp L$79 +L$78: + xor ax,ax + jmp L$79 +L$79: + pop ds + pop bp + retf +L$80: + push bp + mov bp,sp + dec sp + dec sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov word ptr -2[bp],0 + mov ah,4cH + mov dx,word ptr 6[bp] + int 67H + or ah,ah + js L$81 + mov word ptr -2[bp],bx +L$81: + mov ax,word ptr -2[bp] + jmp L$82 +L$82: + pop ds + mov sp,bp + pop bp + retf +L$83: + push bp + mov bp,sp + push si + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov si,0f442H + mov ah,47H + mov dx,word ptr 6[bp] + int 67H + or ah,ah + js L$84 + mov si,1 +L$84: + mov ax,si + jmp L$85 +L$85: + pop ds + pop si + pop bp + retf +L$86: + push bp + mov bp,sp + push ds + mov ax,MEMORY_DATA + mov ds,ax + mov ah,48H + mov dx,word ptr 6[bp] + int 67H + pop ds + pop bp + retf +MEMORY_TEXT ENDS +MEMORY_DATA SEGMENT WORD PUBLIC USE16 'FAR_DATA' +L$87: + DB 45H, 4dH, 4dH, 58H, 58H, 58H, 58H, 30H + DB 0, 0 +L$88: + DB 0FH DUP(0,0,0,0,0,0,0,0) + DB 0, 0, 0, 0, 0, 0, 0, 0 +L$89: + DB 0, 0 + +MEMORY_DATA ENDS + END diff --git a/src/lib/exmm/MEMORY.MAP b/src/lib/exmm/MEMORY.MAP new file mode 100644 index 00000000..7c39ab42 --- /dev/null +++ b/src/lib/exmm/MEMORY.MAP @@ -0,0 +1,35 @@ +Error: Segment _TEXT exceeds 64K + + Start Stop Length Name Class + + 00000H 004F2H 004F3H MEMORY_TEXT CODE + 004F3H 40507H 40015H _TEXT CODE + 504F2H 5057DH 0008CH MEMORY_DATA FAR_DATA + 50580H 50581H 00002H FSBDTR5_FAR FAR_DATA + 50590H 50590H 00000H IOSTSTD5_FAR FAR_DATA + 50590H 505C3H 00034H IOSTSTD6_FAR FAR_DATA + 505D0H 505D0H 00000H IOSTSTD7_FAR FAR_DATA + 505D0H 50601H 00032H IOSTSTD8_FAR FAR_DATA + 50610H 50610H 00000H IOSTSTD9_FAR FAR_DATA + 50610H 50641H 00032H IOSTSTD10_FAR FAR_DATA + 50650H 50650H 00000H IOSTSTD11_FAR FAR_DATA + 50650H 50681H 00032H IOSTSTD12_FAR FAR_DATA + 50690H 50693H 00004H IOSTSTD13_FAR FAR_DATA + 506A0H 506A3H 00004H IOSTSTD14_FAR FAR_DATA + 506B0H 506B3H 00004H IOSTSTD15_FAR FAR_DATA + 506C0H 506C3H 00004H STDTR5_FAR FAR_DATA + 506D0H 506D3H 00004H STDTR6_FAR FAR_DATA + 506E0H 506E3H 00004H STDTR7_FAR FAR_DATA + 506F0H 506F3H 00004H STDTR8_FAR FAR_DATA + 50700H 50701H 00002H STDTR9_FAR FAR_DATA + 50710H 50713H 00004H STSYNC5_FAR FAR_DATA + 50720H 50723H 00004H STSYNC6_FAR FAR_DATA + 50730H 50733H 00004H STSYNC7_FAR FAR_DATA + 50734H 5161BH 00EE8H _DATA DATA + 5161CH 5161DH 00002H _CVTSEG DATA + 5161EH 51623H 00006H _SCNSEG DATA + 51624H 5164DH 0002AH _INIT_ INITDATA + 5164EH 51651H 00004H _BSS BSS + 51652H 5165DH 0000CH _EXIT_ EXITDATA + + diff --git a/src/lib/exmm/MEMORY.OB b/src/lib/exmm/MEMORY.OB new file mode 100644 index 00000000..51c3b504 Binary files /dev/null and b/src/lib/exmm/MEMORY.OB differ diff --git a/src/lib/exmm/memory.h b/src/lib/exmm/memory.h index 7571ff3f..8abc7d6b 100644 --- a/src/lib/exmm/memory.h +++ b/src/lib/exmm/memory.h @@ -29,6 +29,6 @@ extern int MapEMM(int Handle, int Start, int Pages); extern void UnmapEMM(int Handle, int Start, int Pages); extern int UseEMM(int Handle, int Start, int Pages); extern void SaveEMM(int Handle, int Start, int Pages); -extern unsigned long EMMCoreLeft(void); +extern unsigned long EMMCoreLeft(void); #endif diff --git a/src/lib/exmm/x.bat b/src/lib/exmm/x.bat index e1751702..851d518d 100644 --- a/src/lib/exmm/x.bat +++ b/src/lib/exmm/x.bat @@ -1 +1,7 @@ -wcp -mh emm.c +bcc -mh -c -lh memory.c +bcc -mh emm.c memory.obj +move emm.exe em0.exe +move memory.obj memory.ob +wdis -a memory.ob > memory.asm +wasm -c -mh -0 memory.asm +wcp -ecc -mh emm.c memory.obj \ No newline at end of file