> REMOTE/S + Source for SJ Research REMOTE command L This version assumes it was run from NFS and NFS is the current filing (@ system as it directly access vaious bits of NFS workspace. 2: <7OS_CLI=&FFF7:OSBYTE=&FFF4:OSWORD=&FFF1:OSWRCH=&FFEE F7OSWRCR=&FFEC:OSNEWL=&FFE7:OSASCI=&FFE3:OSRDCH=&FFE0 P: Z/load%=&FFFF0E10: Load in low NFS workspace d: n mcode% &200 x P=0 1 P%=load%:O%=mcode% [OPT P*3+4 .exec% ULDX #&07:LDY #&FF:JSR L0FCA :\ Scan command line, X=offset for FSOp lookup later @BCC L0E51 :\ Jump if station number given .L0E19 CLDA (&BE),Y:INY:BCS L0E22 :\ Get character from command line ;: :\ Skip past NFS workspace EQUD &00000F2A : .L0E22 ESTA L0FA2,X:INX :\ Store user name in FSOp workspace 5 #&0D:BNE L0E19 :\ Loop until CR found LDA #&18:STA L0FA2+3 :\ NetFS_Op=&18 - User Lookup DSTX L0FA2+1 :\ Length=offset to end of username "8LDX #L0FA2 255 :\ Point to control block ,LDY #L0FA2 256 61LDA #&14:JSR OSWORD :\ Call Net_FSOp @9LDA L0FA2+3:BEQ L0E4B :\ Ok, use returned data JILDA #&00:STA L0FA2+17 :\ Put terminating zero on error message T:JMP L0FA2+2 :\ Jump to generate error ^: h=\ TxRx block in NFS private workspace pointed to by &BE/F r(\ 0C=ctrl, b7=remote request arrived |\ 0D=port &93 \ 0E=dest stn \ 0F=dest net \ 10=start FFFFwsD9 \ 14=end FFFFwsE9 \ 18=param :  .L0E4B 0LDA L0FA2+5:LDX L0FA2+6 :\ X=net, A=stn : +\ Manually construct a Rx control block  .L0E51 >LDY #&0E:STA (&9E),Y :\ Store stn in NFS workspace >INY:TXA:STA (&9E),Y :\ Store net in NFS workspace >JSR L0F5B :\ Copy RxCB to NFS workspace 3JSR L0F3B :\ Initialise TxCB CLDX #&01:STX L0FC1 :\ Set OSPROC=1 for 'Start REMOTE' & .L0E64 0JLDA &0220,X:STA &C4,X :\ Save EVENTV in filing system workspace :0LDA L0F0D,X:STA &0220,X :\ Claim EVENTV D:DEX:BPL L0E64 :\ Loop to set both bytes N: X .L0E72 b6LDY #L0FB5 256 :\ Point to OSPROC TxCB l1LDX #L0FB5 255:JSR L0F78 :\ Transmit OSPROC v4STA &0E0D :\ Clear event type BASL L0FFC:BCC L0E8D :\ Skip if events already enabled 8LDX #&02:LDA #&0E:JSR OSBYTE :\ Enable BufIns events 8LDX #&06:JSR OSBYTE :\ Enable Escape events : \ Main loop  .L0E8D LDA #&0C:STA &A0 FLDA &9F:STA &A1:LDX #&00 :\ Point to byte &0C in NFS workspace BLDA (&A0,X):BMI L0EAD :\ Jump if remote request arrived 8LDA &0E0D:BEQ L0E8D :\ No events, loop back BCMP #&02:BEQ L0EA8 :\ BufIns, jump to send character CLDA #&1B:STA &C0 :\ Escape, CHR$27 in output buffer  .L0EA8 FJSR L0F3B:BNE L0E72 :\ Initialise TxCB, loop back to send  : E\ &D9=request type 00=WRCH 01=WORD 02=BYTE 03=BYTE 0A=FINISH  <\ no reply with reply *6\ &DA=parameters char A A A 46\ &DB control X X >6\ &DC block Y Y H: R .L0EAD \CLDY #&D9:LDA (&9E),Y :\ Get byte &D9 from NFS workspace f5BEQ L0EFA :\ 00=OSWRCH request p4CMP #&0A:BEQ L0F0F :\ 0A=REMOTE finish z5CMP #&01:BEQ L0EEE :\ 01=OSWORD request : \ OSBYTE request EPHA:INY :\ Point to received register values  .L0EBD BLDA (&9E),Y:PHA :\ Stack received register values INY:CPY #&DD:BNE L0EBD =PLA:TAY:PLA:TAX:PLA :\ Pop values into registers @JSR OSBYTE :\ Perform the requested OSBYTE FPHP:PHA:TXA:PHA:TYA:PHA :\ Stack register values to send back CLDY #&DA :\ Point to register value to send  .L0ED5 HPLA:STA (&9E),Y :\ Unstack registers into transmit area INY:CPY #&DE:BNE L0ED5 STX &C1:STY &C2 :\ Save control block address 7.L0F7C :\ TRANSMIT from &C1/2 :LDX &C1:LDY &C2 :\ Point to control block 1LDA #&10:JSR OSWORD :\ Call TRANSMIT >LDA #&7E :\ Prepare to Ack any Escapes 6BIT &FF:BPL L0F97 :\ No Escape, poll Tx /JSR OSBYTE :\ Ack. Escape !BRK:EQUB 17:EQUS "Escape":BRK  .L0F97 &+LDA #&32:JSR OSBYTE :\ Poll Tx 09TXA:BMI L0F97 :\ Loop until Tx started :CMP #&40:BCS L0FC6 :\ Return with CC with letter ;CMP #&2E:BEQ L0FC7 :\ Return with CS with '.' STA &B3 :\ Store digit in &B3 as temp  .L0FB7  +ASL &B2:LDA &B2:ASL A:ASL A :\ A=num*8 *2ADC &B2:ADC &B3 :\ A=num*10+digit 4 .L0FC1 >BSTA &B2:INY:BNE L0FA7 :\ Store update num, step to next H .L0FC6 RCCLC :\ Return num with CC=no '.' found \ .L0FC7 f.LDA &B2 :\ Return num p .L0FC9 zRTS : 9\ Scan command line, using NFS's private line pointer 6\ Will return CC for X=net, A=stn, CS for username  .L0FCA CINY:LDA (&BE),Y :\ Get character from command line PCMP #" ":BNE L0FCA :\ Skip until space found, stepping past filename  .L0FD1 CINY:LDA (&BE),Y :\ Get character from command line JCMP #" ":BEQ L0FD1 :\ Skip past spaces, stepping to parameters GCMP #"A":BCS L0FC9 :\ If letter, return with CS with letter >LDA #&00:JSR L0FA2 :\ Scan number, A=0 for net=0 :BCC L0FC9 :\ Return if no '.' found OINY:BCS L0FA2 :\ Step past '.', loop back to get another num :  .L0FE6 3EQUB &85 :\ 0FB5 -> Control byte=OSPROC $.EQUB &00 :\ 0FB6 -> Port=Immediate .'EQUW &0000 :\ 0FB7 -> Station 8 Argument block start address B:EQUD &FFFF00C1 :\ 0FBD -> Argument block end address L+EQUW &0004 :\ 0FC1 -> Procedure=4 V .L0FF4 `-CMP &FF00,Y :\ 0FF4: D9 00 FF Y.. j-BBS7,&E9,&0FF9 :\ 0FF7: FF E9 00 .i. t-BBS7,&FF,&0F7C :\ 0FFA: FF FF 80 ... ~-JSR &2806 :\ 0FFD: 20 06 28 .( ] ; "*SAVE REMOTE ";~mcode%;" ";~O%;" ";~exec%;" ";~load%