;/* SIMPOSIF.A86 4/18/84 - 10/24/84 Lee Jay Lorenzen */ ;/* FOR COMPICON ONLY 11/13/87 mdf */ ; ; ; cseg PUBLIC cxc33, cxm33, cxd33 PUBLIC __DOS, __EXEC, chrout, chrin ; ; dseg EXTRN DOS_AX:WORD, DOS_BX:WORD, DOS_CX:WORD, DOS_DX:WORD EXTRN DOS_DS:WORD, DOS_ES:WORD, DOS_SI:WORD, DOS_DI:WORD EXTRN DOS_ERR:WORD ; ; cseg ; ; savax dw 0 savds dw 0 savss dw 0 savsp dw 0 ; ; __EXEC: ret ; ; for all dos calls except exec ; ; __DOS: push bp mov bp,sp push es push si push di mov ax,DOS_DI mov di,ax mov ax,DOS_SI mov si,ax mov ax,DOS_ES mov es,ax mov ax,DOS_AX mov bx,DOS_BX mov cx,DOS_CX mov dx,DOS_DX mov savax,ax push ds mov ax,DOS_DS mov ds,ax mov ax,savax int 21h mov savax,ax mov ax,ds mov savds,ax pop ds mov ax,savax jc d_error mov DOS_ERR,0 jmps d_exit d_error: mov DOS_ERR,1 d_exit: mov DOS_AX,ax mov DOS_BX,bx mov DOS_CX,cx mov DOS_DX,dx mov ax,savds mov DOS_DS,ax mov ax,es mov DOS_ES,ax mov ax,si mov DOS_SI,ax mov ax,di mov DOS_DI,ax pop di pop si pop es pop bp ret ; ; ; chrout: push bp mov bp,sp mov dx,4[bp] mov ax,0200h int 21h pop bp ret ; ; chrin: push bp mov bp,sp chr2: mov ax,0600h mov dl,0FFH int 21h jz chr2 xor ah,ah pop bp ret ; ; ; cxc33: push bx push dx cmp ax,cx jnz cxc1 shr bx,1 shr dx,1 cmp bx,dx jnz cxc1 pop dx pop bx cmp bx,dx jmps cxc2 cxc1: pop dx pop bx cxc2: ret ; ; cxd33: xchg ax,bx mov cx,dx jcxz div0 cmp cx,1 jne not_div1 xchg ax,bx xor cx,cx mov dx,cx ret not_div1: xor dx,dx xchg ax,bx push ax div cx mov di,ax mul cx pop dx sub dx,ax mov ax,bx div cx sub cx,cx mov bx,ax mov ax,di ret div0: mov ax,-1 mov bx,ax ret ; ; cxm33: push dx mul dx pop dx push ax mov ax,bx push dx mul cx mov cx,ax mov ax,bx pop dx mul dx add dx,cx pop cx add dx,cx mov bx,ax mov ax,dx ret ; ; ; ; ; end