home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
22rsx
/
rxmd.ark.2
/
RXMD01.MAC
< prev
next >
Wrap
Text File
|
1985-12-07
|
3KB
|
172 lines
;
; -------------------------------------------------------------------
; I/O drivers using BYERSX's extended BDOS calls
;
; local console input status
; a,f
constat:
mvi a,66; Console status call
jmp dos
;
; input (a) from local keyboard
; a,f
conin: mvi a,67; Console input call
jmp dos
;
; char (e) to local console
; a,f
conout: mvi a,68; Console output call (char is in 'E')
jmp dos
;
; check carrier presence (or checks disabled)
; a,f
mdcarck:
call getstatus
xri carcks; Carrier checks enabled
ani carcks
rnz; Disabled, signal carrier on
mvi a,65; Carrier check
jmp dos
;
; input from modem, no ready checks
; a,f
mdinp: mvi a,64; Modem input
jmp dos
;
; output char (a) to modem, no ready checks
; f
mdoutp: push d
mov e,a; Put character in 'E'
mvi a,63; Modem output
call dos
mov a,e; ensure (a) unchanged
pop d
ret
;
; modem output status
; a,f
mdoutst:
mvi a,62; Modem output status
jmp dos
;
; Get modem input status
; a,f
mdinst: mvi a,61; Modem input status
; " "
; BDOS call (a), preserving registers. Can't return word value
; a,f
dos: push h
push d
push b
mov c,a
call bdos
pop b
pop d
pop h
ret
;
; Get current modem speed
; a,f
mspeed: push d
mvi e,0; query subcommand
mvi a,sgbaud
call dos; returns 1..10
pop d
ani 0fh; ignore stops/parity
rz; default 110 baud if unknown
dcr a; Put in range 0..9
ret
;
; This end is the cpu, not a terminal. Using CCP stack.
; Delay for remote end to close files and return to terminal mode
; a,f,d,e,h,l
waitxit:
lhld waitm; l is delay in 0.1 secs
waitx1: call delay
dcr l
jnz waitx1
ret
;
; delay (de) millisecs
; a,f
dodelay:
mvi a,delayms
jmp dos; delay and exit
;
; 100 millisec delay
; a,f
delay: push d
lxi d,100
call dodelay; delay 0.1 sec
pop d
ret
;
; Get CPU clock rate in 100 khz units
; a,f
clkspd: mvi a,2; subcommand
jmp dorsx
;
; check RSX presence. Allows for changes under CPM 3
; a,f
chkrsx: mvi a,0; presence query
; " "
; rsx sub-command (a)
; a,f
dorsx: push d
mov e,a
mvi d,0; so enquiry works, cant kill
mvi a,rsxmast
call dos
pop d
ora a; set flags on returned value
ret
;
; get system status byte
; a,f
getstatus:
mvi a,systate
; " "
; query a system variable for dos call (a)
; *** USE ONLY for calls that use 0ffh as enquiry ***
; a,f
sysquery:
push d
mvi e,0ffh
call dos
pop d
ret
;
; set/get wheel/system status. a=0ffh to get, else set
; a,f
setstatus:
push d
mov e,a
mvi a,systate
call dos
pop d
ret
;
; turn disk motors off
; a,f
dskstp: mvi a,047h
jmp dorsx
;
; advance local timers by 1 min
; a,f
advmin: mvi a,04ah
jmp dorsx
;
; delay "pause" milliseconds for line turn-around to allow some
; main-frames to become live on receive. Disturb no registers
turn: push psw
push d
lda pause
mov e,a
mvi d,0
ora a; Speed up if configured to zero
cnz dodelay; delay pause millisecs
pop d
pop psw
ret
;
9