Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,540 @@
include equates.a86
include system.a86
dseg
cseg
extrn rtm_sysflag:near
extrn cio_keyboard:near
extrn rtm_timeslice:near
public bdos_start
public bdos_rsx
public bdos_callback
public far_ret_1
public bdos_dseg
jmp bdos_start
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
jmp bdos_int_E0
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_dseg dw seg sysvar_144
; ...
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_start: ; CODE XREF: bdos:0000j
cli
xor ax, ax
mov ds, ax
mov word ptr INT_E0, offset bdos_int_E0
mov word ptr INT_E0+2, cs
mov bx, cs:bdos_dseg
mov ds, bx
mov ax, rlr
mov cl, 4
shr ax, cl
add ax, bx
mov rlr, ax
mov process_table, ax
mov bdos_conowner, ax
mov ss, ax
mov sp, 160h
init_proctab: ; CODE XREF: bdos:0054j
mov es, ax
mov es:word ptr proc_onblock, offset far_ret_1
g003f: ; DATA XREF: P_TERMCPM+16r
mov es:word ptr proc_onblock+2, cs
mov ax, es:proc_nextseg
test ax, ax
jz procs_inited
shr ax, cl
add ax, bx
mov es:proc_nextseg, ax
jmps init_proctab
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
procs_inited: ; CODE XREF: bdos:004Aj
mov es, rlr
mov es:proc_bdos_seg, cs
cld
push dx
mov cx, 7
mov bx, offset function_tables + 2 ;Call all init funcs
call_inits: push bx
push cx
call word ptr [bx]
pop cx
pop bx
add bx, 4
loop call_inits
pop dx
callf dword ptr lp_xios_init
sti
mov al, boot_drive
mov es:proc_drive, al
mov sysvar_144, al
push es
xor si, si
push ds
mov ds, si
mov word ptr INT_E0, offset bdos_int_E0
mov word ptr INT_E0+2, cs
mov di, offset proc_int0
mov cx, 4
rep movsw
mov cl, 4
add si, cx
rep movsw
mov si, offset INT_E0
mov cl, 4
rep movsw
pop es
pop ds
mov di, offset cpu_vectors
mov si, offset proc_int0
mov cl, 0Ch
rep movsw
xor cx, cx
mov dx, cx
int 0E0h ; used by BASIC while in interpreter
;
entry_init: ret
;
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_functions db 20h ; DATA XREF: bdos:01F2o
; P_TERMCPM
db 60h ; C_READ
db 61h ; C_WRITE
db 62h ; A_READ
db 63h ; A_WRITE
db 64h ; L_WRITE
db 65h ; C_RAWIO
db 66h ; A_STATIN
db 67h ; A_STATOUT
db 68h ; C_WRITESTR
db 69h ; C_READSTR
db 6Ah ; C_STAT
db 0A1h ; S_BDOSVER
db 0C0h ; DRV_ALLRESET
db 0C1h ; DRV_SET
db 0C2h ; F_OPEN
db 0C3h ; F_CLOSE
db 0C4h ; F_SFIRST
db 0C5h ; F_SNEXT
db 0C6h ; F_DELETE
db 0C7h ; F_READ
db 0C8h ; F_WRITE
db 0C9h ; F_MAKE
db 0CAh ; F_RENAME
db 0A2h ; DRV_LOGINVEC
db 0A3h ; DRV_GET
db 0A4h ; F_DMAOFF
db 0CBh ; DRV_ALLOCVEC
db 0CCh ; DRV_SETRO
db 0A5h ; DRV_ROVEC
db 0CDh ; F_ATTRIB
db 0CEh ; DRV_DPB
db 0A6h ; F_USERNUM
db 0CFh ; F_READRAND
db 0D0h ; F_WRITERAND
db 0D1h ; F_SIZE
db 0D2h ; F_RANDREC
db 0D3h ; DRV_RESET
db 0A0h ; (access drives)
db 0D5h ; DRV_FREE
db 0D6h ; F_WRITEZF
db 0A0h, 0A0h, 0A0h ; MP/M file lock functions
db 0A7h ; F_MULTISEC
db 0A8h ; F_ERRMODE
db 0D9h ; DRV_SPACE
db 0 ; P_CHAIN
db 0DAh ; DRV_FLUSH
db 0A9h ; S_SYSVAR
db 6Bh ; S_BIOS
db 0AAh ; F_DMASEG
db 0ABh ; F_DMAGET
db 40h ; MC_MAX
db 41h ; MC_ABSMAX
db 42h ; MC_ALLOC
db 43h ; MC_ABSALLOC
db 44h ; MC_FREE
db 45h ; MC_ALLFREE
db 1 ; P_LOAD
db 0A0h ; P_RSX
db 0DBh ; Clean up disc
db 0DCh ; F_TRUNCATE
db 0DDh ; DRV_SETLABEL
db 0DEh ; DRV_GETLABEL
db 0DFh ; F_TIMEDATE
db 0E0h ; F_WRITEXFCB
db 0ACh ; T_SET
db 0ADh ; T_GET
db 0E1h ; F_PASSWD
db 0AEh ; S_SERIAL
db 0AFh ; P_CODE
db 6Ch ; C_MODE
db 6Dh ; C_DELIMIT
db 6Eh ; C_WRITEBLK
db 6Fh ; L_WRITEBLK
db 0A0h ; PCP/M direct screen access
db 0A0h ; Unused in all versions
db 0A0h ; GSX
db 0E2h ; Set file timestamp
db 0E4h ; INT13h helper
db 4 ; 76h
db 21h ; Wait on system flag
db 0A0h ; Set system flag
db 0A0h ; Create message queue
db 0A0h ; Open message queue
db 0A0h ; Delete message queue
db 0A0h ; Read message queue
db 0A0h ; Conditional read queue
db 0A0h ; Write to message queue
db 0A0h ; Conditional write message queue
db 22h ; P_DELAY
db 23h ; P_DISPATCH
db 20h ; P_TERM
db 0A0h, 0A0h, 0A0h
db 70h ; C_DETACH
db 0A0h, 0A0h, 0A0h, 0A0h
db 2 ; F_PARSE
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_int_E0: ; CODE XREF: bdos:0003j
; DATA XREF: bdos:000Eo ...
push ds
mov ds, cs:bdos_dseg
mov ax, es
mov es, rlr
pop ds
cmp es:proc_incpm, 0
jnz already_in_cpm
mov es:word ptr userStack+2, ss
mov es:word ptr userStack, sp
push es
pop ss
mov sp, offset proc_cpm_stack
already_in_cpm: ; CODE XREF: bdos:0155j
inc es:proc_incpm
sti
cld
mov es:userES, ax
mov es:proc_fx, cl
push si
push di
push bp
callf es:dword ptr proc_bdos_offs
pop bp
pop di
pop si
mov ax, bx
dec es:proc_incpm
jnz still_in_cpm
cli
mov ss, es:word ptr userStack+2
mov sp, es:word ptr userStack
still_in_cpm: ; CODE XREF: bdos:0188j
mov es, es:userES
cmp ax, 0FFFFh
jz check_result
xor cx, cx
check_result: ; CODE XREF: bdos:019Dj
iret
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_rsx: ; DATA XREF: proc1:0052o
jmp bdos_rsx_main
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rs 5
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_rsx_main: ; CODE XREF: bdos:01A2j
push es:userDS
mov es:userDS, ds
mov ds, cs:bdos_dseg
callf dword ptr lp_bdos_entry
mov ds, es:userDS
pop es:userDS
far_ret_1: ; DATA XREF: bdos:0038o P_CHAIN+71o
; ...
retf
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_entry: ; CODE XREF: x_dev_waitflag+2u
; x_p_delay+2u
; DATA XREF: ...
jmp bdos_func
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rs 5
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_func: ; CODE XREF: bdos:01C8j
cld
mov al, cl
cmp al, 3Ch
jbe bdos_gotfunc
sub al, 25h
cmp al, 3Dh
jb bdos_badfunc
cmp al, 51h
jbe bdos_gotfunc
sub al, 0Dh
cmp al, 52h
jb bdos_badfunc
cmp al, 66h
jbe bdos_gotfunc
bdos_badfunc: ; CODE XREF: bdos:01DBj bdos:01E5j
mov bx, 0FFFFh
mov cx, 2
retf
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bdos_gotfunc: ; CODE XREF: bdos:01D5j bdos:01DFj
; ...
mov bx, offset bdos_functions
xlat cs:byte ptr [bx]
mov cl, al
rol al, 1
rol al, 1
rol al, 1
and al, 7
mov ah, 1Fh
cmp al, 6
jb mask_fxn
mov ah, 3Fh
and al, 6
mask_fxn: ; CODE XREF: bdos:0205j
and cl, ah
entry_bdos: ; DATA XREF: dseg:0010o
call inner_callback
retf
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; S u b r o u t i n e
inner_callback: ; CODE XREF: bdos:020Dp bdos_callback+8p
mov es:proc_intfunc, cl
mov es:proc_intmod, al
xor ah, ah
mov ch, ah
mov di, ax ; AL = function class
shl di, 1 ; CL = function number within class
shl di, 1
mov si, cx
shl si, 1
jmp function_tables[di]
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; S u b r o u t i n e
bdos_callback: ; CODE XREF: get_proc_dskdat+Bp
; release+3p ...
test ch, ch
jz callback_00
dec ch
mov al, ch
call inner_callback
jmps bdos_cbk_end
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
callback_00: ; CODE XREF: bdos_callback+2j
callf es:dword ptr proc_bdos_offs
bdos_cbk_end: ; CODE XREF: bdos_callback+Bj
mov ax, bx
retn
extrn sup_main:near
extrn sup_init:near
extrn rtm_main:near
extrn rtm_init:near
extrn mem_main:near
extrn mem_init:near
extrn cio_main:near
extrn cio_init:near
extrn misc_main:near
extrn misc_init:near
extrn bdos_main:near
extrn bdos_init:near
dseg
extrn freemem:byte
extrn proc1:word
extrn dirname_1:word
extrn dirdata_0:word
public function_tables
public bdos_8087_inuse
public rlr
public drl
public pq_disk
public pq_loader
public pq_memmgr
public pq_error
public pq_filesystem
public search_path
public temp_drive
public cpu_vectors
public lp_xios_entry
public lp_dos_module
public lp_sysflag_chg
public lp_kbd_callback
public time_slice
public proc_count
public bdos_conowner
public bdos_sysflags
public ccp_dseg
public cur_x
public max_x
public max_y
public sysvar_131
public sysvar_132
public sysvar_142
public sysvar_143
public sysvar_144
public echo_backspaced
public echo_deleted
public boot_drive
public ccp_user
public bdos_ver
public date_days
public date_secs
public page_mode
function_tables dw offset sup_main ; DATA XREF: inner_callback+Eo
dw offset sup_init
dw offset rtm_main
dw offset rtm_init
dw offset mem_main
dw offset mem_init
dw offset cio_main
dw offset cio_init
dw offset entry_init
dw offset entry_init
off_A15_14 dw offset misc_main
dw offset misc_init
off_A15_18 dw offset bdos_main
off_A15_1A dw offset bdos_init
a080586 db '[06-Feb-85] '
lp_xios_entry dw 3 ; Offset of XIOS entry
seg_A15_2A dw seg lp_xios_entry ; -> XIOS segment
lp_xios_init dw 0 ; Offset of XIOS init function
dw seg lp_xios_entry ; -> XIOS segment
lp_bdos_entry dw offset bdos_entry ; DATA XREF: bdos:01B9r x_dev_waitflag+2r
; ...
dw seg bdos_start
lp_timeslice dw offset rtm_timeslice
dw seg rtm_timeslice
lp_sysflag_chg dw offset rtm_sysflag
dw seg rtm_sysflag
lp_kbd_callback dw offset cio_keyboard
dw seg cio_keyboard
lp_dos_module dw 0,0 ; DATA XREF: bdos:007Dr P_CHAIN+A9r
; ...
ccp_dseg dw 0 ; DATA XREF: mc_temp_untempr
; get_mcb_pars+38r ...
; 0 if no temporary memory blocks allocated
dw seg bdos_start
dw seg freemem
bdos_conowner dw offset proc1 ; DATA XREF: bdos:002Ew bdos_sysflag+Ar
; ...
bdos_sysflags dw SYSFLAGS ; This should get set by GENCPM
rlr dw offset proc1 ; DATA XREF: bdos:001Fr bdos:0028w
; ...
; Current process
process_table dw 0 ; DATA XREF: bdos:002Bw
drl dw 0 ; DATA XREF: P_0207+5r P_0209+7o
; ...
; Processes that have just become
; ready to run
dw 0
proc_count db 1 ; DATA XREF: get_new_process+1Dw
; P_TERMCPM+5Ew ...
bdos_ver dw 1033h ; DATA XREF: S_BDOSVERr
bdos_8087_inuse db 0 ; DATA XREF: call_p_load+10w
; retake_8087+Br ...
search_path db 0, 10h, 0FFh, 0FFh
; ...
temp_drive db 0 ; DATA XREF: rsx_find+53o bdos:23AEo
date_days dw 0A22h ; DATA XREF: bdos:23B2o bdos:2540o
; ...
date_hours db 12h ; DATA XREF: xios_hook_timer+85w
; xios_int08+5Dr ...
date_mins db 0 ; DATA XREF: xios_hook_timer+7Dw
; xios_int08+4Br ...
date_secs db 0 ; DATA XREF: bdos:2551w bdos:2566r
; ...
cur_x db 0 ; DATA XREF: bdos_char_out+44r
; bdos_char_out+70w ...
max_x db SCR_MAXX ; DATA XREF: input_putchar+12r
; expand_tabs+14r ...
max_y db SCR_MAXY ; DATA XREF: bdos:23A2o
page_mode db 0 ; DATA XREF: bdos:23A6o
echo_backspaced db 0 ; DATA XREF: input_ctlH+9r
echo_deleted db SCR_ECHODEL ; DATA XREF: input_delete+9r
;
; Process queues for single-threaded parts of the system.
;
; Format of process queue:
; DW offset of next queue, 0 for none
; DW segment of process currently in that section, 0 for none
; DW linked list of processes waiting for that section, 0 for none
; DW 0
;
pq_disk dw offset pq_loader ; DATA XREF: get_proc_dskdat+5o
; release_DMAo ...
rw 3
pq_loader dw offset pq_filesystem
rw 3
pq_filesystem dw offset pq_error ; DATA XREF: funcs_F_main+8o
; funcs_F_main+124o ...
rw 3
pq_error dw 8Ah ; DATA XREF: funcs_F_main+136o
; funcs_F_main+1C7o ...
rw 3
pq_memmgr rw 4 ; DATA XREF: funcs_MC+2o funcs_MC+24o
; ...
boot_drive db 0 ; DATA XREF: bdos:006Cr bdos:23CEo
; ...
ccp_user db 0
rb 7
db 1,2
rb 0F5h
sysvar_142 rb 20h
db 0
sysvar_143 db 0, 20h, 0
sysvar_144 db 0 ; DATA XREF: bdos:0073w bdos:23F6o
; ...
sysvar_131 db 0 ; DATA XREF: copy_to_history+14w
; bdos:1CFFr ...
sysvar_132 rb 100h ; DATA XREF: copy_to_history+Do
; bdos:1CFAo ...
time_slice db 10h ; DATA XREF: delay_dispatch+A2r
; bdos:23DEo
cpu_vectors rw 12
end