> SERVERS/S : Broadcast for and display list of servers on network : (6 08/04/1989 v1.00 SJ/Stu: Initial version from SJ 2H 12/06/1998 v2.00 JGH: Rewritten to use code space more efficiently <: FOSASCI=&FFE3:OSWRCH=&FFEE P mcode% &300:Start%=&0900 Z P=01 dP%=Start%:O%=mcode% n[OPT P*3+4 x/EQUS "Station Type Vers Name":EQUB 13:BRK : .Go% LDY #0:LDX #0:JSR PrTextY 6LDA #1:STA PrTextY+2 :\ Alter PrTextY pointer : JSR RxOpen .MainTxLoop JSR Transmit 3LDA #5:STA RxCount+1 :\ Poll Rx &500 times .PollRxLoop !JSR RxPoll:TXA:BMI RxReceived DEC RxCount:BNE PollRxLoop DEC RxCount+1:BNE PollRxLoop 2DEC TxCount:BNE MainTxLoop:\ Broadcast 5 times .ServersExit JMP RxDelete ": ,.RxReceived 6JSR RxRead @2LDA Entries:BEQ RxUnique :\ None received yet J LDY #&00 T.ScanTableLoop ^-TYA:PHA :\ Save pointer hJSR Times10Y r&LDA &0F01,Y:CMP NetNum:BNE NoMatch |&LDA &0F00,Y:CMP StnNum:BNE NoMatch  LDX #&00 .ScanServerName 'LDA &0103,X:CMP &0F02,Y:BNE NoMatch 'INY:INX:CPX #&08:BCC ScanServerName PLA:JMP PrServerDone  .NoMatch PLA:TAY:INY !CPY Entries:BCC ScanTableLoop :  .RxUnique =LDY Entries:INC Entries:TYA:JSR Times10Y:\ Point to entry CLDA NetNum:INY:JSR PrNetStnNum :\ Print network number LDA #".":JSR OSWRCH CLDA StnNum:DEY:JSR PrNetStnNum :\ Print station number JSR PrSpace:LDX #&03 .PrServerNameLp &&LDA &0100,X:STA &0F02,Y:JSR OSWRCH 0'INX:INY:CPX #&0B:BCC PrServerNameLp :CJSR PrSpace:LDA &0102:JSR PrHex :\ Print version number DJSR PrSpace N%LDY #&0C:LDX &010B:BEQ PrSkipName X9JSR PrTextY :\ Print name b.PrSkipName lBJSR OSNEWL:LDA &0100:BEQ PrServerNext :\ If no error, finish vLDX #&14:LDA #&20 .PrSpacesLoop BJSR OSWRCH:DEX:BNE PrSpacesLoop :\ Indent by 20 spaces CJSR PrTextY:JSR OSNEWL :\ Print error message .PrServerNext JLDY Entries:CPY #&18:BCS PrServersFinished:\ Can only store 25 entries .PrServerDone JSR RxOpen JMP PollRxLoop :  .Times10Y 5STA &AC:ASL &AC:ASL A:ASL A:ASL A:CLC:ADC &AC:TAY .PrServersFinished RTS :  $.PrTextY:\ Gets altered to &0100 *LDA Start%,Y:BEQ PrTextYEnd:JSR OSASCI  INY:DEX:BNE PrTextY *.PrTextYEnd 4RTS >: H .PrHex R0PHA:LSR A:LSR A:LSR A:LSR A:JSR PrNybble:PLA \ .PrNybble f( #&0F:SED:CLC:ADC #&90:ADC #&40:CLD p .PrChar zJMP OSWRCH :  .PrSpace LDA #" ":BNE PrChar : .PrNetStnNum "STA &0F00,Y :\ Drop into PrDec :  .PrDec  LDX #&FF .PrDec100Lp #INX:SEC:SBC #&64:BCS PrDec100Lp ADC #&64:JSR PrDigit  LDX #&FF .PrDec10Lp "INX:SEC:SBC #&0A:BCS PrDec10Lp ADC #&0A:JSR PrDigit $TAX . .PrDigit 8PHA:TXA:A #&30:JSR OSWRCH B PLA:RTS L: V2.RxDelete :\ Delete open control block `9LDA #&34:EQUB &2C :\ BIT &xxxx to skip next two bytes j: t0.RxPoll :\ Poll open control block ~ LDA #&33 .RxPollByte LDX RxCtrl:JMP OSBYTE :  .RxOpen LDA #&00:STA RxCtrl STA StnNum:STA NetNum LDA #&7F:STA RxFlag LDA #&50:STA EndAddr LDA #&01:STA EndAddr+1 (JSR RxRead:LDA RxCtrl:BNE TxPollDone !BRK:EQUB &C0:EQUS "Rxcb?":BRK :  .RxRead  ;LDA #&11:LDX #RxCtrl 255:LDY #RxCtrl 256:JMP OSWORD :  .Transmit (LDA #&80:STA TxCtrl 2;LDA #&10:LDX #TxCtrl 255:LDY #TxCtrl 256:JSR OSWORD <7LDA TxCtrl:BEQ Transmit :\ Loop until opened F: P.TxPollLoop ZLDA #&32:JSR OSBYTE d:TXA:BMI TxPollLoop:BNE Transmit:\ Loop until completed n.TxPollDone xRTS : .RxCount:EQUW &0500 .TxCount:EQUB &05 .Entries:EQUB &00 .TxCtrl :EQUB &80  EQUB &B0  EQUW &FFFF  EQUS " " : .RxCtrl :EQUB &00 .RxFlag :EQUB &7F:EQUB &B1 .StnNum :EQUB &00 .NetNum :EQUB &00 .StrAddr:EQUD &FFFF0100 .EndAddr:EQUD &FFFF0150 EQUS "JGH 15/06/1998" ": ,]: 6N"*SAVE Servers ";~mcode%;" ";~O%;" ";~Go%&FFFF0000;" ";~Start%&FFFF0000