license
.S .( enter rlogon.html)
| 1F CONSTANT #remote_develop
( offsets relative to status) HEX
| 0A CONSTANT #port_^C
( REMOTE I/O) HEX
CODE SLOT>BASE ( n -- addr)
S )+ D0 MOV
D0 SWP
_#RTI1000_bus_base # D0 ADD
D0 S -) MOV
NEXT
| CODE (remote_table) ( slot port --addr)
S )+ D2 MOV
S )+ D0 MOV
D0 SWP
_#RTI1000_bus_base # D0 ADD
D0 A0 MOV
%port_pbase _#RTI1000_dual_port_base - 0) D1 MOV
%port_offset _#RTI1000_dual_port_base - 0) D1 SUB
D0 D1 ADD ( D1 contains base address of table)
2 # D2 ASL
D2 D1 ADD
D1 A1 MOV
A1 ) D1 MOV ( base of #p) EQ IF ( not set)
TRUE # S -) MOV
NEXT assembler
THEN
%port_offset _#RTI1000_dual_port_base - 0) D1 SUB
D0 D1 ADD
D1 S -) MOV
4 # R ADD
NEXT
| : remote_ptable ( slot port --addr)
(remote_table) ABORT" Port not available" ;
( channel 1) HEX
( flag is true if all ok)
| : remote_logon ( slot port --)
TUCK ( port slot port --)
remote_ptable 'MLINK !
\ this is not strickly correct as slave does not use
\ address. But the location cannot be link so this will do.
064 'MLINK @ #p_owner + port_xgrab
ABORT" remote pipe busy."
( wake remote task)
'MLINK @ FFFF0000 AND [ %port_wake _#RTI1000_dual_port_base - ]T LITERAL + W@
'MLINK @ #p_status + @
'MLINK @ FFFF0000 AND DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - + W! ;
| : remote_logoff ( --)
zero 'MLINK @ #p_request + W!
'MLINK @ #p_owner + port_release
0 'MLINK !
['] QUIT 'abort ! ABORT ;
( action codes)
| 1 CONSTANT #expect_data
| 2 CONSTANT #sending_data
( Source can be on an odd boundry)
( Destination has to be even)
| CODE BUSMOVE ( source dest num --)
S )+ D0 MOV
1 # D0 ASR
S )+ A1 MOV
S )+ A0 MOV
BEGIN
A0 )+ D1 B. MOV
8 # D1 ASL
A0 )+ D1 B. MOV
D1 A1 )+ W. MOV
1 # D0 SUB
CS UNTIL
NEXT
( expect)
| : expect_function ( --)
#$buffer get_buffer
buffer OVER 'MLINK @ #p_count + W@ ACCEPT
\ n<--
\ add 1 for terminator
1+
user_base activation_^c_set W@ IF ( ^C )
'MLINK @ #p_^C_task + @ IF
TRUE 'MLINK @ #p_^C_task + @ 'MLINK @ FFFF0000 AND
DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - + #port_^C + W!
THEN
FALSE user_base activation_^c_set W!
THEN
buffer 'MLINK @ #p_address + @ 'MLINK @ FFFF0000 AND
DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - +
jump #$maximum_data MIN BUSMOVE
kill_buffer
'MLINK @ #p_actual + W!
;
( type)
| : type_function ( --)
'MLINK @ #p_address + @
'MLINK @ FFFF0000 AND DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - +
'MLINK @ #p_count + W@
_cvs_terminal_codes_decode
;
( rlog_functions)
| CREATE rlog_functions
0 t,
' expect_function t,
' type_function t,
: rlogon ( slot --)
#remote_develop remote_logon
['] remote_logoff 'abort ! BEGIN
KEY? 'MLINK @ #p_?data + W!
user_base activation_^c_set W@ IF ( ^C )
'MLINK @ #p_^C_task + @ IF
TRUE 'MLINK @ #p_^C_task + @ 'MLINK @ FFFF0000 AND
DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - + #port_^C + W!
THEN
FALSE user_base activation_^c_set W!
THEN
'MLINK @ #p_request + W@ IF
'MLINK @ #p_function + W@ 4* rlog_functions + @execute
zero 'MLINK @ #p_request + W!
'MLINK @ FFFF0000 AND [ %port_wake _#RTI1000_dual_port_base - ]T LITERAL + W@
'MLINK @ #p_status + @
'MLINK @ FFFF0000 AND DUP [ %port_offset _#RTI1000_dual_port_base - ]T LITERAL + @ - + W!
THEN xpause AGAIN
;
.S .( exit rlogon.html)