mirror of
https://github.com/SEPPDROID/DR-DOS-OpenDOS.git
synced 2025-10-22 16:04:20 +00:00
Upload
This commit is contained in:
258
IBMDOS/SUPPORT.A86
Normal file
258
IBMDOS/SUPPORT.A86
Normal file
@@ -0,0 +1,258 @@
|
||||
; File : $SUPPORT.A86$
|
||||
;
|
||||
; Description :
|
||||
;
|
||||
; Original Author : DIGITAL RESEARCH
|
||||
;
|
||||
; Last Edited By : $CALDERA$
|
||||
;
|
||||
;-----------------------------------------------------------------------;
|
||||
; Copyright Work of Caldera, Inc. All Rights Reserved.
|
||||
;
|
||||
; THIS WORK IS A COPYRIGHT WORK AND CONTAINS CONFIDENTIAL,
|
||||
; PROPRIETARY AND TRADE SECRET INFORMATION OF CALDERA, INC.
|
||||
; ACCESS TO THIS WORK IS RESTRICTED TO (I) CALDERA, INC. EMPLOYEES
|
||||
; WHO HAVE A NEED TO KNOW TO PERFORM TASKS WITHIN THE SCOPE OF
|
||||
; THEIR ASSIGNMENTS AND (II) ENTITIES OTHER THAN CALDERA, INC. WHO
|
||||
; HAVE ACCEPTED THE CALDERA OPENDOS SOURCE LICENSE OR OTHER CALDERA LICENSE
|
||||
; AGREEMENTS. EXCEPT UNDER THE EXPRESS TERMS OF THE CALDERA LICENSE
|
||||
; AGREEMENT NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED,
|
||||
; COPIED, DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED,
|
||||
; CONDENSED, EXPANDED, COLLECTED, COMPILED, LINKED, RECAST,
|
||||
; TRANSFORMED OR ADAPTED WITHOUT THE PRIOR WRITTEN CONSENT OF
|
||||
; CALDERA, INC. ANY USE OR EXPLOITATION OF THIS WORK WITHOUT
|
||||
; AUTHORIZATION COULD SUBJECT THE PERPETRATOR TO CRIMINAL AND
|
||||
; CIVIL LIABILITY.
|
||||
;-----------------------------------------------------------------------;
|
||||
;
|
||||
; *** Current Edit History ***
|
||||
; *** End of Current Edit History ***
|
||||
;
|
||||
; $Log$
|
||||
; SUPPORT.A86 1.11 93/11/29 13:39:28
|
||||
; Don't rely on DS when return_ called
|
||||
; ENDLOG
|
||||
;
|
||||
; The following Support routines are provided for both the
|
||||
; handle and FCB functions which require critical error handler
|
||||
; support.
|
||||
;
|
||||
; 15 Jun 88 Modify the SYSDAT and SUPERVISOR variables to enable
|
||||
; the relocation of the BDOS into high memory
|
||||
; 5 Jan 89 Only set PCKBD mode if we own the default console
|
||||
; 9 Mar 89 Support a split PCMODE and SYSDAT Segments
|
||||
; 22 Sep 89 LDT support routine added
|
||||
; 29 Jan 90 Int 2A critical section support added to dpbdos_entry
|
||||
; 7 Mar 90 Convert to register preserved function calls
|
||||
; 4 May 90 DRDOS int3x handlers removed (they are pointed to IRET
|
||||
; in PCMODE_DATA by INIT.PCM)
|
||||
; 12 Dec 90 keep error server number inverted so local = 0, more compatible
|
||||
|
||||
;
|
||||
include pcmode.equ
|
||||
include fdos.def
|
||||
include i:mserror.equ
|
||||
include i:doshndl.def
|
||||
|
||||
eject
|
||||
PCM_CODE CSEG BYTE
|
||||
extrn error_exit:near ; Standard Error Exit Routine
|
||||
extrn fcberror_exit:near ; Special FCB function Error Exit
|
||||
extrn fdos_entry:near
|
||||
extrn get_dseg:near
|
||||
|
||||
eject
|
||||
;
|
||||
; STRLEN determines the length of the string passed in DS:SI
|
||||
; and returns the byte length in CX.
|
||||
;
|
||||
Public strlen
|
||||
strlen:
|
||||
push es ! push di
|
||||
push ds ! pop es
|
||||
mov di,si
|
||||
mov cx,0FFFFh
|
||||
sub al,al
|
||||
repnz scasb
|
||||
pop di ! pop es
|
||||
not cx
|
||||
dec cx
|
||||
ret
|
||||
|
||||
eject
|
||||
;
|
||||
; This routine sets the address to be returned to by the
|
||||
; FDOS when an error has occured and the RETRY request has been
|
||||
; made. The set_retry routine should be used as follows:-
|
||||
;
|
||||
; mov al,Valid Error Responses
|
||||
; call set_retry
|
||||
; Init All FDOS Parameters
|
||||
; call fdos_crit
|
||||
;
|
||||
; NB. For register model return with AX = dos_AL extended to 16 bit
|
||||
|
||||
Public set_retry_RF
|
||||
set_retry_RF:
|
||||
mov al,OK_RF ; Valid to RETRY or FAIL
|
||||
; jmp set_retry ; (the most common case)
|
||||
|
||||
Public set_retry
|
||||
set_retry:
|
||||
mov valid_flg,al ; Save Valid Error Reponses
|
||||
pop retry_off ; Save the Routine Address
|
||||
mov retry_sp,sp ; and the Stack Pointer
|
||||
mov al,ah ; get function number
|
||||
xor ah,ah ; make it a word
|
||||
mov FD_FUNC,ax ; save it for the FDOS
|
||||
push ds
|
||||
push bx
|
||||
lds bx,int21regs_ptr ; point to users registers
|
||||
and reg_FLAGS[bx],not CARRY_FLAG
|
||||
mov al,reg_AL[bx] ; clear CY assuming we will succeed
|
||||
pop bx ; and reload AL with entry value
|
||||
pop ds
|
||||
jmp retry_off
|
||||
|
||||
;
|
||||
; The FDOS routine executes the CCP/M FDOS function using the
|
||||
; static FDOS parameter block defined in the Data Segment.
|
||||
;
|
||||
Public fdos_crit
|
||||
fdos_crit:
|
||||
call fdos_nocrit
|
||||
cmp ax,ED_LASTERROR ; Compare against last error code
|
||||
jnb fdos_error ; if NOT below then is ERROR CODE
|
||||
or ax,ax ; Reset the Carry Flag and Return
|
||||
ret
|
||||
|
||||
Public fdos_ax_crit
|
||||
fdos_ax_crit:
|
||||
call fdos_nocrit
|
||||
cmp ax,ED_LASTERROR ; Compare against last error code
|
||||
jnb fdos_error ; if NOT below then is ERROR CODE
|
||||
or ax,ax ; Reset the Carry Flag and Return
|
||||
; jmp return_AX_CLC ; Save the Return Code
|
||||
|
||||
Public return_AX_CLC
|
||||
return_AX_CLC:
|
||||
;-------------
|
||||
; On Entry:
|
||||
; AX to be returned to caller in AX
|
||||
; On Exit:
|
||||
; ES:DI trashed
|
||||
;
|
||||
push ds ! push di
|
||||
lds di,ss:int21regs_ptr
|
||||
mov reg_AX[di],ax ; return AX to caller
|
||||
and reg_FLAGS[di],not CARRY_FLAG
|
||||
pop di ! pop ds
|
||||
ret
|
||||
|
||||
|
||||
fdos_error: ; Process the Error
|
||||
cmp sp,retry_sp ; Is the user expecting use to
|
||||
jnz fdos_e10 ; return or use the default handler
|
||||
jmp error_exit ; If CALLed then return with the error
|
||||
fdos_e10: ; to the calling routine.
|
||||
stc
|
||||
ret
|
||||
|
||||
Public fcbfdos_crit
|
||||
fcbfdos_crit:
|
||||
call fdos_nocrit
|
||||
cmp ax,ED_LASTERROR ; Compare against last error code
|
||||
jnb fcbfdos_error ; if NOT below then is ERROR CODE
|
||||
or ax,ax ; Reset the Carry Flag and Return
|
||||
ret
|
||||
|
||||
fcbfdos_error: ; Process the Error
|
||||
cmp sp,retry_sp ; Is the user expecting use to
|
||||
jnz fcbfdos_e10 ; return or use the default handler
|
||||
jmp fcberror_exit ; If CALLed then return with the error
|
||||
fcbfdos_e10: ; to the calling routine.
|
||||
stc
|
||||
ret
|
||||
|
||||
Public fdos_nocrit
|
||||
fdos_nocrit:
|
||||
mov dx,offset fdos_data ; point to fdos parameter block
|
||||
push ds ! push es
|
||||
push si ! push di ! push bp
|
||||
call fdos_entry ; BDOS module entry point
|
||||
or ax,ax ; Set the Flags
|
||||
pop bp ! pop di ! pop si
|
||||
pop es ! pop ds
|
||||
ret
|
||||
|
||||
|
||||
Public reload_ES
|
||||
reload_ES:
|
||||
; On Entry:
|
||||
; None
|
||||
; On Exit:
|
||||
; ES = callers ES
|
||||
; All regs preserved
|
||||
;
|
||||
push bx
|
||||
les bx,ss:int21regs_ptr
|
||||
mov es,es:reg_ES[bx] ; reload with callers ES
|
||||
pop bx
|
||||
ret
|
||||
|
||||
|
||||
Public return_BX
|
||||
return_BX:
|
||||
;---------
|
||||
; On Entry:
|
||||
; BX to be returned to caller in BX
|
||||
; On Exit:
|
||||
; All regs preserved
|
||||
;
|
||||
push ds ! push bx
|
||||
lds si,ss:int21regs_ptr
|
||||
mov reg_BX[si],bx ; return BX to caller
|
||||
pop bx ! pop ds
|
||||
ret
|
||||
|
||||
Public return_CX
|
||||
return_CX:
|
||||
;---------
|
||||
; On Entry:
|
||||
; CX to be returned to caller in CX
|
||||
; On Exit:
|
||||
; All regs preserved
|
||||
;
|
||||
push ds ! push bx
|
||||
lds bx,ss:int21regs_ptr
|
||||
mov reg_CX[bx],cx ; return CX to caller
|
||||
pop bx ! pop ds
|
||||
ret
|
||||
|
||||
Public return_DX
|
||||
return_DX:
|
||||
;---------
|
||||
; On Entry:
|
||||
; DX to be returned to caller in DX
|
||||
; On Exit:
|
||||
; All regs preserved
|
||||
;
|
||||
push ds ! push bx
|
||||
lds bx,ss:int21regs_ptr
|
||||
mov reg_DX[bx],dx ; return DX to caller
|
||||
pop bx ! pop ds
|
||||
ret
|
||||
|
||||
PCMODE_DATA DSEG WORD
|
||||
|
||||
|
||||
extrn current_psp:word
|
||||
extrn DBCS_tbl:word ; double byte character set table
|
||||
extrn int21regs_ptr:dword
|
||||
extrn retry_off:word
|
||||
extrn retry_sp:word
|
||||
extrn valid_flg:byte
|
||||
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user