rdos/kernel/psp.asm

63 lines
1009 B
NASM

; Program segment prefix headers and constants
section .bss
curpsp: resw 1
absolute 0
resb 2 ; ret 0 exit
resb 2 ; next unusable segment
PSPDD: resb 1 ; BYTE default drive
; CP/M entry point
resb 1 ; instruction byte
resw 1 ; usable length of segment (needs to be here for compata)
resb 4 ; opcodes to call us
; saved userdata
PSPAX: resw 1
PSPCX: resw 1
; SS:SP
PSPSP: resw 1
PSPSS: resw 1
; DS:DX
PSPDX: resw 1
PSPDS: resw 1
; ES:BX
PSPBX: resw 1
PSPES: resw 1
PSPDTA: resd 1 ; DWORD ptr to disk transfer area
section .text
; set default drive for current process
; IN dl drive number
setdd: push es
mov es, [curpsp]
mov [es:PSPDD], dl
pop es
ret
; get default drive for current process
; OUT al drive number
getdd: push es
mov es, [curpsp]
mov al, [es:PSPDD]
pop es
ret
; set DTA ptr
; IN es:bx far ptr
setdta: push ds
mov ds, [curpsp]
mov [PSPDTA], bx
mov [PSPDTA+2], es
pop ds
; get DTA ptr
; OUT es:bx far ptr
getdta: mov es, [curpsp]
les bx, [es:PSPDTA]
ret