1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453 |
- FHTSZ EQU 20
- IFDEF LCODE
- ARG_1 EQU 6
- ELSE
- ARG_1 EQU 4
- ENDIF
- arena struc
- sig db 0
- own dw 0
- siz dw 0
- arena ends
- vector struc
- number db 0
- flag db 0
- vseg dw 0
- voff dw 0
- vector ends
- _TEXT SEGMENT word public 'CODE'
- ASSUME cs:_TEXT
- ASSUME ds:nothing
- ASSUME es:nothing
- ASSUME ss:nothing
- slidetop:
- path db 79 dup (0)
- command db 128 dup (0)
- file db 79 dup (0)
- parmblk label byte
- environ dw 0
- cmd dw 0,0
- fcb1 dw 0,0
- fcb2 dw 0,0
- fcb5c db 10h dup (0)
- fcb6c db 10h dup (0)
- cntsvl dw 0
- cntsvh dw 0
- tmpcode dw 0
- env dw 0
- envlen dw 0
- parsz dw 0
- ttlsz dw 0
- oldsz dw 0
- newsz dw 0
- emsseg dw 0
- handle dw 0
- useems db 0
- save db 4 dup (0)
- f1add dd 0
- last db 0
- IF FHTSZ - 20
- fhtsv db FHTSZ dup (0)
- ENDIF
- errmsg db 'spawn error',0Dh,0Ah
- msglen EQU $-errmsg
- EVEN
- lclstk dw 64 dup (0)
- stktop label word
- slide1: mov ax,cs
- cli
- mov ss,ax
- mov sp,offset stktop - offset slidetop + 100h
- sti
- mov bx,offset slidebot - offset slidetop + 15 + 100h
- mov cl,4
- shr bx,cl
- add bx,ax
- index = offset environ - offset slidetop + 100h
- mov cs:[index],bx
- mov es,bx
- xor di,di
- index = offset env - offset slidetop + 100h
- mov ds,cs:[index]
- xor si,si
- index = offset envlen - offset slidetop + 100h
- mov cx,cs:[index]
- shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
- dec ax
- mov es,ax
- mov bx,es:[siz]
- index = offset oldsz - offset slidetop + 100h
- mov cs:[index],bx
- mov byte ptr es:[sig],'M'
- index = offset newsz - offset slidetop + 100h
- mov bx,cs:[index]
- mov es:[siz],bx
- inc ax
- add ax,bx
- mov es,ax
- mov byte ptr es:[sig],'Z'
- index = offset last - offset slidetop + 100h
- cmp byte ptr cs:[index],0
- je slide2
- mov byte ptr es:[sig],'M'
- slide2: mov word ptr es:[own],0
- index = offset ttlsz - offset slidetop + 100h
- mov ax,cs:[index]
- sub ax,bx
- dec ax
- mov es:[siz],ax
- mov ax,cs
- mov es,ax
- mov bx,es:[2Eh]
- index = offset save - offset slidetop + 100h
- mov cs:[index],bx
- mov bx,es:[30h]
- index = offset save - offset slidetop + 102h
- mov cs:[index],bx
- mov bx,offset parmblk - offset slidetop + 100h
- mov ds,ax
- mov dx,100h
- mov ax,4B00h
- int 21h
- jnc slide3
- index = offset tmpcode - offset slidetop + 100h
- mov cs:[index],ax
- slide3: mov ax,cs
- cli
- mov ss,ax
- mov sp,offset stktop - offset slidetop + 100h
- sti
- mov es,ax
- index = offset save - offset slidetop + 100h
- mov bx,cs:[index]
- mov es:[2Eh],bx
- index = offset save - offset slidetop + 102h
- mov bx,cs:[index]
- mov es:[30h],bx
- index = offset oldsz - offset slidetop + 100h
- mov bx,cs:[index]
- mov ah,4Ah
- int 21h
- jnc slide7
- index = offset useems - offset slidetop + 100h
- slide4: cmp byte ptr cs:[index],0
- jne slide6
- index = offset handle - offset slidetop + 100h
- mov dx,cs:[index]
- slide5: mov ah,45h
- int 67h
- cmp ah,82h
- je slide5
- slide6: jmp slide18
- index = offset parsz - offset slidetop + 100h
- slide7: mov bx,cs:[index]
- index = offset ttlsz - offset slidetop + 100h
- mov ax,cs:[index]
- sub ax,bx
- or ax,ax
- jz slide9
- mov dx,cs
- add dx,bx
- mov es,dx
- mov byte ptr es:[sig],'Z'
- index = offset last - offset slidetop + 100h
- cmp byte ptr cs:[index],0
- je slide8
- mov byte ptr es:[sig],'M'
- slide8: mov word ptr es:[own],0
- dec ax
- mov es:[siz],ax
- slide9: push cs
- index = offset useems - offset slidetop + 100h
- cmp byte ptr cs:[index],0
- jne slide14
- pop es
- mov di,offset slidebot - offset slidetop + 100h
- index = offset emsseg - offset slidetop + 100h
- mov ds,cs:[index]
- mov si,offset slidebot - offset slidetop
- index = offset handle - offset slidetop + 100h
- mov dx,cs:[index]
- xor bx,bx
- mov cx,16384 - ( offset slidebot - offset slidetop )
- jmp short slide13
- index = offset cntsvl - offset slidetop + 100h
- slide10: sub cs:[index],cx
- index = offset cntsvh - offset slidetop + 100h
- sbb word ptr cs:[index],0
- xor al,al
- slide11: mov ah,44h
- int 67h
- or ah,ah
- jz slide12
- cmp ah,82h
- je slide11
- jmp slide4
- slide12: shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
- xor si,si
- mov cx,16384
- inc bx
- cmp bx,1
- je slide13
- mov ax,es
- add ax,1024
- mov es,ax
- mov di,16640
- index = offset cntsvh - offset slidetop + 100h
- slide13: cmp word ptr cs:[index],0
- jne slide10
- index = offset cntsvl - offset slidetop + 100h
- cmp cs:[index],cx
- jae slide10
- mov cx,cs:[index]
- cmp cx,0
- jne slide10
- jmp short slide17
- slide14: pop ds
- IF FHTSZ - 20
- mov si,offset fhtsv - offset slidetop + 100h
- mov es,ds:[36h]
- mov di,ds:[34h]
- mov cx,FHTSZ
- rep movsb
- ENDIF
- mov dx,offset file - offset slidetop + 100h
- mov ax,3D00h
- int 21h
- jc slide18
- mov bx,ax
- xor cx,cx
- mov dx,offset slidebot - offset slidetop
- mov ax,4200h
- int 21h
- mov dx,offset slidebot - offset slidetop + 100h
- mov cx,65520
- jmp short slide16
- index = offset cntsvl - offset slidetop + 100h
- slide15: sub cs:[index],cx
- index = offset cntsvh - offset slidetop + 100h
- sbb word ptr cs:[index],0
- mov ah,3Fh
- int 21h
- jc slide18
- cmp ax,cx
- jne slide18
- mov ax,ds
- add ax,4095
- mov ds,ax
- index = offset cntsvh - offset slidetop + 100h
- slide16: cmp word ptr cs:[index],0
- jne slide15
- index = offset cntsvl - offset slidetop + 100h
- cmp word ptr cs:[index],65520
- jae slide15
- mov cx,cs:[index]
- cmp cx,0
- jne slide15
- index = offset tmpcode - offset slidetop + 100h
- slide17: mov ax,cs:[index]
- index = offset f1add - offset slidetop + 100h
- jmp dword ptr cs:[index]
- slide18: push cs
- pop ds
- mov dx,offset errmsg - offset slidetop + 100h
- mov cx,msglen
- mov bx,2
- mov ah,40h
- int 21h
- mov ax,4C01h
- int 21h
- handler: iret
- slidebot:
- cntl dw 0
- cnth dw 0
- stks dw 0
- stkp dw 0
- psp dw 0
- s1add dd 0
- rcode dw 0
- useems2 db 0
- vtabseg dw 0
- vtaboff dw 0
- errmsg2 db 'spawn error',0Dh,0Ah
- msglen2 EQU $-errmsg2
- PUBLIC __xspawn
- IFDEF LCODE
- __xspawn PROC far
- ELSE
- __xspawn PROC near
- ENDIF
- push bp
- mov bp,sp
- push di
- push si
- push ds
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1]
- ELSE
- mov si,word ptr [bp+ARG_1]
- ENDIF
- mov di,offset path
- start1: mov al,ds:[si]
- mov cs:[di],al
- inc si
- inc di
- or al,al
- jnz start1
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+4]
- ELSE
- mov si,word ptr [bp+ARG_1+2]
- ENDIF
- mov bx,si
- mov di,offset command
- mov cx,2
- add cl,byte ptr ds:[bx]
- start2: mov al,ds:[bx]
- mov cs:[di],al
- inc bx
- inc di
- loop start2
- inc si
- push cs
- pop es
- mov di,offset fcb5c
- mov ax,2901h
- int 21h
- mov di,offset fcb6c
- mov al,1
- int 21h
- IFDEF LDATA
- mov ax,word ptr [bp+ARG_1+8]
- ELSE
- mov ax,word ptr [bp+ARG_1+4]
- ENDIF
- mov cl,4
- shr ax,cl
- IFDEF LDATA
- mov bx,word ptr [bp+ARG_1+10]
- ELSE
- mov bx,ds
- ENDIF
- add ax,bx
- mov cs:[env],ax
- IFDEF LDATA
- lds bx,dword ptr [bp+ARG_1+12]
- ELSE
- mov bx,word ptr [bp+ARG_1+6]
- ENDIF
- mov cs:[vtabseg],ds
- mov cs:[vtaboff],bx
- mov cs:[stks],ss
- mov cs:[stkp],sp
- mov cs:[rcode],0
- IFDEF LDATA
- mov ax,word ptr [bp+ARG_1+16]
- ELSE
- mov ax,word ptr [bp+ARG_1+8]
- ENDIF
- or ax,ax
- jz start3
- jmp noswap1
- IFDEF LDATA
- start3: mov ax,word ptr [bp+ARG_1+18]
- ELSE
- start3: mov ax,word ptr [bp+ARG_1+10]
- ENDIF
- mov cs:[envlen],ax
- add ax,offset slidebot - offset slidetop + 30 + 100h
- mov cl,4
- shr ax,cl
- mov cs:[newsz],ax
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+20]
- ELSE
- mov si,word ptr [bp+ARG_1+12]
- ENDIF
- mov di,offset file
- mov cs:[useems2],1
- cmp byte ptr ds:[si],0
- jne start4
- mov cs:[useems2],0
- start4: mov al,ds:[si]
- mov cs:[di],al
- inc si
- inc di
- or al,al
- jnz start4
- mov word ptr cs:[f1add+2],cs
- mov word ptr cs:[f1add],offset fnish1
- mov ax,cs:[psp]
- mov cs:[cmd],offset command - offset slidetop + 100h
- mov cs:[cmd+2],ax
- mov cs:[fcb1],offset fcb5c - offset slidetop + 100h
- mov cs:[fcb1+2],ax
- mov cs:[fcb2],offset fcb6c - offset slidetop + 100h
- mov cs:[fcb2+2],ax
- cld
- mov ds,ax
- IFDEF LDATA
- mov dx,word ptr [bp+ARG_1+24]
- ELSE
- mov dx,word ptr [bp+ARG_1+14]
- ENDIF
- IF FHTSZ - 20
- cmp word ptr ds:[32h],FHTSZ
- je start5
- mov cs:[rcode],5
- jmp short start6
- ENDIF
- start5: mov ax,cs:[newsz]
- cmp ax,cs:[ttlsz]
- jb start8
- mov cs:[rcode],7
- start6: cmp cs:[useems2],0
- jne start7
- jmp fnish2
- start7: mov bx,dx
- jmp fnish6
- start8: cmp cs:[useems2],0
- jne start12
- mov cs:[useems],0
- mov cs:[handle],dx
- mov es,cs:[emsseg]
- xor bx,bx
- jmp short start11
- start9: sub cs:[cntl],cx
- sbb cs:[cnth],0
- call mapems
- or ah,ah
- jz start10
- jmp fnish2
- start10: mov si,100h
- xor di,di
- shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
- inc bx
- mov ax,ds
- add ax,1024
- mov ds,ax
- start11: mov cx,16384
- cmp cs:[cnth],0
- jne start9
- cmp cs:[cntl],16384
- jae start9
- mov cx,cs:[cntl]
- cmp cx,0
- jne start9
- jmp short start17
- start12: mov cs:[useems],1
- mov bx,dx
- mov dx,100h
- mov cx,65520
- jmp short start16
- start13: sub cs:[cntl],cx
- sbb cs:[cnth],0
- mov ah,40h
- int 21h
- jc start14
- cmp ax,cx
- je start15
- start14: mov ah,3Eh
- int 21h
- mov cs:[rcode],5
- jmp fnish7
- start15: mov ax,ds
- add ax,4095
- mov ds,ax
- start16: cmp cs:[cnth],0
- jne start13
- cmp cs:[cntl],65520
- jae start13
- mov cx,cs:[cntl]
- cmp cx,0
- jne start13
- mov ah,3Eh
- int 21h
- IF FHTSZ - 20
- mov es,cs:[psp]
- mov ds,es:[36h]
- mov si,es:[34h]
- push cs
- pop es
- mov di,offset fhtsv
- mov cx,FHTSZ
- rep movsb
- ENDIF
- start17: mov cx,cs
- mov dx,offset handler
- call safevect
- mov es,cs:[psp]
- mov di,100h
- mov ds,cx
- mov si,offset slidetop
- mov cx,offset slidebot - offset slidetop
- shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
- mov word ptr cs:[s1add+2],es
- index = offset slide1 - offset slidetop + 100h
- mov word ptr cs:[s1add],index
- mov cx,es
- index = offset handler - offset slidetop + 100h
- mov dx,index
- call safevect
- jmp dword ptr cs:[s1add]
- fnish1: mov cs:[rcode],ax
- cli
- mov ss,cs:[stks]
- mov sp,cs:[stkp]
- sti
- push ds
- push dx
- push bx
- mov cx,cs
- mov dx,offset handler
- call safevect
- pop bx
- pop dx
- pop ds
- cmp cs:[useems2],0
- jne fnish4
- mov cx,offset slidebot - offset slidetop
- mov es,cs:[psp]
- mov di,100h
- xor si,si
- xor bx,bx
- call mapems
- or ah,ah
- jnz fnish3
- shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
- fnish2: mov ah,45h
- int 67h
- cmp ah,82h
- je fnish2
- jmp short fnish7
- fnish3: mov ah,45h
- int 67h
- cmp ah,82h
- je fnish3
- jmp short fnish5
- fnish4: xor cx,cx
- xor dx,dx
- mov ax,4200h
- int 21h
- mov cx,offset slidebot - offset slidetop
- mov ds,cs:[psp]
- mov dx,100h
- mov ah,3Fh
- int 21h
- jc fnish5
- cmp ax,cx
- je fnish6
- fnish5: push cs
- pop ds
- mov dx,offset errmsg2
- mov cx,msglen2
- mov bx,2
- mov ah,40h
- int 21h
- mov ax,4C01h
- int 21h
- fnish6: mov ah,3Eh
- int 21h
- push cs
- pop ds
- mov dx,offset file
- mov ah,41h
- int 21h
- fnish7: pop ds
- pop si
- pop di
- pop bp
- mov ax,cs:[rcode]
- or ax,ax
- jz fnish11
- push ax
- mov ax,3000h
- int 21h
- cmp al,3
- pop ax
- jb fnish8
- cmp al,34
- jae fnish9
- cmp al,32
- jb fnish8
- mov al,5
- jmp short fnish10
- fnish8: cmp al,19
- jbe fnish10
- fnish9: mov al,19
- fnish10: xor ah,ah
- fnish11: ret
- noswap1: mov ax,cs
- mov bx,cs:[env]
- mov cs:[environ],bx
- mov cs:[cmd],offset command
- mov cs:[cmd+2],ax
- mov cs:[fcb1],offset fcb5c
- mov cs:[fcb1+2],ax
- mov cs:[fcb2],offset fcb6c
- mov cs:[fcb2+2],ax
- mov si,cs:[2Eh]
- mov word ptr cs:[save],si
- mov si,cs:[30h]
- mov word ptr cs:[save+2],si
- mov cx,cs
- mov dx,offset handler
- call safevect
- mov es,cx
- mov bx,offset parmblk
- mov ds,cx
- mov dx,offset path
- mov ax,4B00h
- int 21h
- jnc noswap2
- mov cs:[rcode],ax
- noswap2: cli
- mov ss,cs:[stks]
- mov sp,cs:[stkp]
- sti
- mov si,word ptr cs:[save]
- mov cs:[2Eh],si
- mov si,word ptr cs:[save+2]
- mov cs:[30h],si
- jmp fnish7
- __xspawn ENDP
- mapems PROC near
- xor al,al
- map1: mov ah,44h
- int 67h
- cmp ah,82h
- je map1
- ret
- mapems ENDP
- setvectsub PROC near
- mov ah,25h
- setvectsub1: mov al,es:[bx+flag]
- cmp al,3
- je setvectsub3
- cmp al,2
- je setvectsub2
- mov al,es:[bx+number]
- mov ds,es:[bx+vseg]
- mov dx,es:[bx+voff]
- int 21h
- setvectsub2: add bx,6
- jmp setvectsub1
- setvectsub3: ret
- setvectsub ENDP
- safevect PROC near
- mov es,cs:[vtabseg]
- mov bx,cs:[vtaboff]
- safevect1: mov al,es:[bx+flag]
- cmp al,3
- je safevect3
- cmp al,1
- jne safevect2
- mov es:[bx+vseg],cx
- mov es:[bx+voff],dx
- safevect2: add bx,6
- jmp safevect1
- safevect3: mov bx,cs:[vtaboff]
- call setvectsub
- ret
- safevect ENDP
- PUBLIC __xsize
- IFDEF LCODE
- __xsize PROC far
- ELSE
- __xsize PROC near
- ENDIF
- push bp
- mov bp,sp
- push di
- push si
- push ds
- mov cs:[last],0
- mov bx,word ptr [bp+ARG_1]
- mov cs:[psp],bx
- mov dx,bx
- dec bx
- size1: mov es,bx
- mov ax,es:[own]
- or ax,ax
- jz size2
- cmp ax,dx
- jne size4
- mov cx,bx
- size2: inc bx
- add bx,es:[siz]
- jc size3
- mov al,es:[sig]
- cmp al,'M'
- je size1
- cmp al,'Z'
- je size5
- size3: mov bx,-1
- mov ah,48h
- int 21h
- mov cs:[rcode],7
- jmp fnish7
- size4: mov cs:[last],1
- size5: sub bx,dx
- mov ax,cx
- mov es,cx
- inc ax
- add ax,es:[siz]
- sub ax,dx
- mov cs:[parsz],ax
- sub ax,10h
- xor dx,dx
- mov cx,4
- size6: shl ax,1
- rcl dx,1
- loop size6
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+2]
- ELSE
- mov si,word ptr [bp+ARG_1+2]
- ENDIF
- mov ds:[si],ax
- mov ds:[si+2],dx
- mov cs:[cntl],ax
- mov cs:[cnth],dx
- mov cx,offset slidebot - offset slidetop
- sub ax,cx
- sbb dx,0
- mov cs:[cntsvl],ax
- mov cs:[cntsvh],dx
- mov cs:[ttlsz],bx
- xor dx,dx
- mov cx,4
- size7: shl bx,1
- rcl dx,1
- loop size7
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+6]
- ELSE
- mov si,word ptr [bp+ARG_1+4]
- ENDIF
- mov ds:[si],bx
- mov ds:[si+2],dx
- pop ds
- pop si
- pop di
- pop bp
- xor ax,ax
- ret
- __xsize ENDP
- PUBLIC __chkems
- IFDEF LCODE
- __chkems PROC far
- ELSE
- __chkems PROC near
- ENDIF
- push bp
- mov bp,sp
- IFDEF LDATA
- push ds
- lds dx,dword ptr [bp+ARG_1]
- ELSE
- mov dx,word ptr [bp+ARG_1]
- ENDIF
- mov ax,3D00h
- int 21h
- IFDEF LDATA
- pop ds
- ENDIF
- jc check2
- mov bx,ax
- mov ax,4400h
- int 21h
- jc check1
- test dx,80h
- jz check1
- mov ax,4407h
- int 21h
- jc check1
- or al,al
- jz check1
- mov ah,3Eh
- int 21h
- mov ah,40h
- int 67h
- or ah,ah
- jnz check2
- mov ah,46h
- int 67h
- or ah,ah
- jnz check2
- cmp al,32h
- jb check2
- mov ah,41h
- int 67h
- or ah,ah
- jnz check2
- mov cs:[emsseg],bx
- mov ax,4E03h
- int 67h
- or ah,ah
- jnz check2
- IFDEF LDATA
- les bx,dword ptr [bp+ARG_1+4]
- mov es:[bx],ax
- ELSE
- mov bx,word ptr [bp+ARG_1+2]
- mov ds:[bx],ax
- ENDIF
- xor ax,ax
- pop bp
- ret
- check1: mov ah,3Eh
- int 21h
- check2: mov ax,1
- pop bp
- ret
- __chkems ENDP
- PUBLIC __savemap
- IFDEF LCODE
- __savemap PROC far
- ELSE
- __savemap PROC near
- ENDIF
- push bp
- mov bp,sp
- push di
- IFDEF LDATA
- les di,dword ptr [bp+ARG_1]
- ELSE
- mov di,word ptr [bp+ARG_1]
- push ds
- pop es
- ENDIF
- mov ax,4E00h
- int 67h
- pop di
- pop bp
- ret
- __savemap ENDP
- PUBLIC __restmap
- IFDEF LCODE
- __restmap PROC far
- ELSE
- __restmap PROC near
- ENDIF
- push bp
- mov bp,sp
- push ds
- push si
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1]
- ELSE
- mov si,word ptr [bp+ARG_1]
- ENDIF
- mov ax,4E01h
- int 67h
- xor al,al
- pop si
- pop ds
- pop bp
- ret
- __restmap ENDP
- PUBLIC __getems
- IFDEF LCODE
- __getems PROC far
- ELSE
- __getems PROC near
- ENDIF
- push bp
- mov bp,sp
- mov bx,word ptr [bp+ARG_1]
- mov ah,43h
-
- int 67h
- IFDEF LDATA
- les bx,dword ptr [bp+ARG_1+2]
- mov es:[bx],dx
- ELSE
- mov bx,word ptr [bp+ARG_1+2]
- mov ds:[bx],dx
- ENDIF
- xor al,al
- pop bp
- ret
- __getems ENDP
- PUBLIC __dskspace
- IFDEF LCODE
- __dskspace PROC far
- ELSE
- __dskspace PROC near
- ENDIF
- push bp
- mov bp,sp
- push di
- mov ah,36h
- mov dl,byte ptr [bp+ARG_1]
- int 21h
- cmp ax,0FFFFh
- je space1
- mul cx
-
- IFDEF LDATA
- les di,dword ptr [bp+ARG_1+2]
- mov es:[di],ax
- ELSE
- mov di,word ptr [bp+ARG_1+2]
- mov ds:[di],ax
- ENDIF
- IFDEF LDATA
- les di,dword ptr [bp+ARG_1+6]
- mov es:[di],bx
- ELSE
- mov di,word ptr [bp+ARG_1+4]
- mov ds:[di],bx
- ENDIF
- xor ax,ax
- space1: pop di
- pop bp
- ret
- __dskspace ENDP
- PUBLIC __getrc
- IFDEF LCODE
- __getrc PROC far
- ELSE
- __getrc PROC near
- ENDIF
- mov ah,4Dh
- int 21h
- ret
- __getrc ENDP
- PUBLIC __create
- IFDEF LCODE
- __create PROC far
- ELSE
- __create PROC near
- ENDIF
- push bp
- mov bp,sp
- IFDEF LDATA
- push ds
- ENDIF
- mov ax,3000h
- int 21h
- IFDEF LDATA
- lds dx,dword ptr [bp+ARG_1]
- ELSE
- mov dx,word ptr [bp+ARG_1]
- ENDIF
- xor cx,cx
- mov ah,5Bh
- cmp al,3
- jae create1
- mov ah,3Ch
- create1: int 21h
- jc create2
- IFDEF LDATA
- lds bx,dword ptr [bp+ARG_1+4]
- ELSE
- mov bx,word ptr [bp+ARG_1+2]
- ENDIF
- mov ds:[bx],ax
- xor ax,ax
- create2:
- IFDEF LDATA
- pop ds
- ENDIF
- pop bp
- ret
- __create ENDP
- PUBLIC __getcd
- IFDEF LCODE
- __getcd PROC far
- ELSE
- __getcd PROC near
- ENDIF
- push bp
- mov bp,sp
- push si
- IFDEF LDATA
- push ds
- ENDIF
- mov dl,byte ptr [bp+ARG_1]
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+2]
- ELSE
- mov si,word ptr [bp+ARG_1+2]
- ENDIF
- mov ah,47h
- int 21h
- jc getcd1
- xor ax,ax
- getcd1:
- IFDEF LDATA
- pop ds
- ENDIF
- pop si
- pop bp
- ret
- __getcd ENDP
- PUBLIC __getdrv
- IFDEF LCODE
- __getdrv PROC far
- ELSE
- __getdrv PROC near
- ENDIF
- mov ah,19h
- int 21h
- xor ah,ah
- ret
- __getdrv ENDP
- PUBLIC __getvect
- IFDEF LCODE
- __getvect PROC far
- ELSE
- __getvect PROC near
- ENDIF
- push bp
- mov bp,sp
- push ds
- push si
- mov ah,35h
- mov al,byte ptr [bp+ARG_1]
- int 21h
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+2]
- ELSE
- mov si,word ptr [bp+ARG_1+2]
- ENDIF
- mov ds:[si],es
- IFDEF LDATA
- lds si,dword ptr [bp+ARG_1+6]
- ELSE
- mov si,word ptr [bp+ARG_1+4]
- ENDIF
- mov ds:[si],bx
- pop si
- pop ds
- pop bp
- ret
- __getvect ENDP
- PUBLIC __setvect
- IFDEF LCODE
- __setvect PROC far
- ELSE
- __setvect PROC near
- ENDIF
- push bp
- mov bp,sp
- push ds
- IFDEF LDATA
- les bx,dword ptr [bp+ARG_1]
- ELSE
- mov bx,word ptr [bp+ARG_1]
- push ds
- pop es
- ENDIF
- call setvectsub
- pop ds
- pop bp
- ret
- __setvect ENDP
- PUBLIC __setdrvcd
- IFDEF LCODE
- __setdrvcd PROC far
- ELSE
- __setdrvcd PROC near
- ENDIF
- push bp
- mov bp,sp
- IFDEF LDATA
- push ds
- ENDIF
- mov dl,byte ptr [bp+ARG_1]
- mov ah,0eh
- int 21h
- IFDEF LDATA
- lds dx,dword ptr [bp+ARG_1+2]
- ELSE
- mov dx,word ptr [bp+ARG_1+2]
- ENDIF
- mov ah,3bh
- int 21h
- IFDEF LDATA
- pop ds
- ENDIF
- pop bp
- ret
- __setdrvcd ENDP
- _TEXT ENDS
- END
|