mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 09:54:20 +00:00
213 lines
3.4 KiB
Plaintext
213 lines
3.4 KiB
Plaintext
;
|
||
; PC_MODE SUPPORT
|
||
;
|
||
|
||
include system.lib
|
||
include flags.equ
|
||
include serdata.equ
|
||
|
||
;DOS_HEAD equ byte ptr 13[BP]
|
||
;DOS_TRACK equ byte ptr 12[BP]
|
||
;DOS_SECTOR equ byte ptr 10[BP]
|
||
|
||
;TRACK equ word ptr 12[BP]
|
||
;SECTOR equ word ptr 10[BP]
|
||
|
||
|
||
CSEG
|
||
|
||
public io_screen
|
||
public io_video
|
||
public io_keybd
|
||
public io_shft
|
||
public io_eqck
|
||
public io_int13_read
|
||
public io_int13_write
|
||
|
||
extrn io_read:near, io_write:near
|
||
extrn supif:near
|
||
|
||
DSEG
|
||
|
||
public f30_tbl
|
||
|
||
extrn ocdesctbl:word
|
||
extrn vrtl_phy:byte
|
||
|
||
CSEG
|
||
|
||
;=========
|
||
io_screen: ;FUNCTION 30 -- get/set screen mode
|
||
;=========
|
||
;
|
||
; ENTRY: CH -- 0 = set, 1 = get
|
||
; CL -- Mode if CH = 0
|
||
; DL -- Virtual console number
|
||
;
|
||
; EXIT: AX -- Mode if CH = 1. If CH = 0, then 0000H for success.
|
||
;
|
||
|
||
xor bx,bx
|
||
mov bl,dl ; Vcon index
|
||
|
||
cmp ch,0 ; check mode
|
||
jz set
|
||
|
||
;
|
||
; Get the screen mode
|
||
;
|
||
shl bx,1
|
||
mov ax,f30_tbl[bx]
|
||
;
|
||
ret
|
||
|
||
set:
|
||
;
|
||
; Set the screen mode
|
||
;
|
||
mov dx,cx ; save mode
|
||
and cx,000fH ; get alphanumeric mode
|
||
cmp cx,0
|
||
jz set_grphc
|
||
|
||
mov dx,cx
|
||
call set_mode
|
||
ret
|
||
|
||
set_grphc:
|
||
and dx,00f0H
|
||
call set_mode
|
||
cmp dx,10H
|
||
jne set_exit
|
||
|
||
; Handle GSX with care
|
||
|
||
shr bx,1
|
||
mov dx,bx ; Vcon number
|
||
mov bl,vrtl_phy[bx] ; Pcon number
|
||
shl bx,1
|
||
mov bx,ocdesctbl[bx] ; bx -> Xmit Queue control
|
||
|
||
pushf
|
||
cli
|
||
|
||
cmp dl,CUR_VCON[bx] ; are we in foreground
|
||
je int_exit ; no need to do flagwait
|
||
|
||
; F L A G W A I T until we get put into foreground
|
||
|
||
add dl,v_flag
|
||
mov cl,f_flagwait
|
||
call supif
|
||
|
||
int_exit:
|
||
popf
|
||
|
||
set_exit:
|
||
mov ax,0
|
||
ret
|
||
|
||
set_mode:
|
||
; entry: BX has Vcon number, DL new mode
|
||
;
|
||
;
|
||
|
||
shl bx,1
|
||
mov cx,word ptr f30_tbl[bx]
|
||
mov cl,dl
|
||
mov word ptr f30_tbl[bx],cx ; update f30_tbl
|
||
|
||
;
|
||
ret
|
||
|
||
;========
|
||
io_video: ;FUNCTION 31 -- video i/o
|
||
;========
|
||
;========
|
||
io_keybd: ;FUNCTION 32 -- keyboard information
|
||
;========
|
||
;=======
|
||
io_shft: ;FUNCTION 33 -- shift status
|
||
;=======
|
||
;=======
|
||
io_eqck: ;FUNCTION 34 -- equipment check
|
||
;=======
|
||
mov ax,0ffffh
|
||
ret
|
||
|
||
|
||
;=============
|
||
io_int13_read: ;FUNCTION 35 -- read DOS disk
|
||
;=============
|
||
;
|
||
; ENTRY: DOS IOPB on stack
|
||
;
|
||
; EXIT: CCP/M IOPB on stack
|
||
;
|
||
|
||
; Since 5 and 1/4" dependent programs would only use this routine,
|
||
; and we have 8" drives, we will return an error.
|
||
|
||
mov ax,0ffffH
|
||
ret
|
||
|
||
; mov bp,sp
|
||
;
|
||
; xor ah,ah
|
||
; mov al,DOS_SECTOR
|
||
; dec ax ; DOS field 1 relative CCP/M 0 relative
|
||
; mov SECTOR,ax
|
||
;
|
||
; mov al,DOS_TRACK
|
||
; shl ax,1 ; CCP/M TRACK = DOS_TRACK*2 + DOS_HEAD
|
||
; xor bh,bh
|
||
; mov bl,DOS_HEAD
|
||
; add ax,bx
|
||
; mov TRACK,ax
|
||
;
|
||
; jmp io_read
|
||
|
||
|
||
;==============
|
||
io_int13_write: ;FUNCTION 36 -- write DOS disk
|
||
;==============
|
||
;
|
||
; ENTRY: DOS IOPB on stack
|
||
;
|
||
; EXIT: CCP/M IOPB on stack
|
||
;
|
||
|
||
; Since 5 and 1/4" dependent programs would only use this routine,
|
||
; and we have 8" drives, we will return an error.
|
||
|
||
mov ax,0ffffH
|
||
ret
|
||
|
||
; mov bp,sp
|
||
;
|
||
; xor ah,ah
|
||
; mov al,DOS_SECTOR
|
||
; dec ax ; DOS field 1 relative CCP/M 0 relative
|
||
; mov SECTOR,ax
|
||
;
|
||
; mov al,DOS_TRACK
|
||
; shl ax,1 ; CCP/M TRACK = DOS_TRACK*2 + DOS_HEAD
|
||
; xor bh,bh
|
||
; mov bl,DOS_HEAD
|
||
; add ax,bx
|
||
; mov TRACK,ax
|
||
;
|
||
; jmp io_write
|
||
|
||
DSEG
|
||
|
||
f30_tbl dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
dw 1801h
|
||
|
||
end |