MVCPNOS COMSNIOS0 ASMCPNETSTSCOMMAIL COM@NDOS SPR CPNETLDRCOM DSKRESETCOM LOGIN ASM LOGOFF COMXSUBNET COMSNIOS12 SUBCCP SPRLOGOFF ASMCCPDRI SPRENDLIST COMLOGIN COMPIPNET COM:NETWORK COMLOCAL COMSNIOS3 ASM !SNIOS SPR"!~# x ; SNIOS Prefix (jump table) for CP/NET 1.2 on CP/M 2.2 maclib z80 extrn NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT cseg ; Jump vector for SNIOS entry points jmp NTWKIN ; network initialization jmp NTWKST ; network status jmp CNFTBL ; return config table addr jmp SNDMSG ; send message on network jmp RCVMSG ; receive message from network jmp NTWKER ; network error jmp NTWKBT ; network warm boot end 7 CP/NET 1.2 Status ================= $Requester ID = $ Network Status Byte = $ Disk device status: $ Drive $ = Drive $ on Network Server ID = $ = LOCAL$Console Device = $Console #$ on Network Server ID = $LOCAL$List Device = $List #$ on Network Server ID = $LOCAL$ CP/NET 1.2 has not been loaded.$1?!9"g!g.>5ʐͰ"p,Ͱ*p#N <ͰO UͰ!n6>!nmͰ:nAO͠:͠*n&) *pn}2ovͰ:oAO͠:͠Ͱ*n&) *p#~O Ͱ!n4†Ͱ"*p n}2o@Ͱ:oOͰ"*p #~O FͰͰ$*p n}2oʇͰ:oOͰ$*p #~O Í ͰÖͰ͛v*g!iq*i&!kp+q*j  DE ͠ ͠!lq> !l:lA O͠ :l0O͠!mq:mO:mOH͠_{ozg_{ozg1bMAIL Version 1.2COPYRIGHT 1982, DIGITAL RESEARCH080282654321 Waiting for File$ Enter message: $ Must Run Under MP/M or CP/NET. $No More Messages$1b1b- 2  |2b*bM! ^#V ʹÊ "*^#V"*"*~2 .*DM -]! "dÊE"Ê'v!6#6O! ^#V2c:c½^  :b“!d6:dҐ 2c:c!d6Í:cʍ:c2j!"h!c6>!cs* h> ^*#*c& *^*c& *NP X.^j*h*h"h:c<2c*##NP ʇ.Íj!"h*~2j!c6>!c* h> *c& *NP .j*h*h"h:c<2c¥ï2d2c:c^ ! :b!g6 2c!gҿ:cʼ*##:d[ü!"h!f6:f!gҼ* h> ʧ*f& *:d§!g6:f<2f*h*h"hf.:g 2c:c:c2j*dMP j.!g6 R ʹÿ4*~2j*dMP 1j.ï!d6!g6:dF:bZ 2cf*~2c!d6:cv!d6C:cC!e6!"":eC:b§*#~2fð*##~2f:c2j*fMP :ͷ/O!  ^#V!e6+6!g6,*fMN,,*fMN,*",,7!e6@jÌA:g/aI  Þ:bž!c6> !cڞ*c& *>*c& *w:c<2cnïʹï7Òv*& ! qI I ! 5* & ) ^#V  !6 :* & ~=:02 * & ~! HI* & ~=: =! p+q* ~=A_:! 6>! ږ* & * ^! 4p.! 6>! * & * ^! 4£I ! p+qv * DMNʹ! p+q * DMNʹ! p+q * DMNʹ! 6! 6#6#6 ! 6> ! O: 2 5* & *>! 2 ˜! 6* & *~2 * &G"*~2 : ր: ֠H* & *: * & *>@w* & *>! : <2 A: < ! 6! 6> ! 9 $ : 2 9 * & *>w > /L >: ! q.#k -\ : 2 : ҃ : 02kÍ : A 2k: 2 : Ҩ : 02lò : A 2l! 6j ! 6* Mj2 : !0" j2 > 7H4 * +" > > 1   : ! q: a/>z! /HY : : *&  !6 .$ -† ! 6#6::° *M8 A<2! 6* &  ~.: H!: H * &  N8 * &  w: <2 : <2 ð : <2 ! 6: !: H_ * &  N8 * &  w: <2 : <2  T ! 6!62 W ! >~o*&  * &  -¶ *&  6:<2 : <~O! *&   - : <<2 T :=o&  6:=o&   6~ ~ : K ! 6: ~:==o&  * & ~HҠ : <2 d : ~ :==o&  6:==o&   : w7 ! 6:=o&  * & ~ : <2 :=o&  6:=o&   : w Q Z ! q: <2 O>}Ҿ ! 6*&  6:<2O> Ҿ :=o&  6:=o&   6~>:  !6N!6! 6  ! 6!: }* &  ~7*&  6*&   : wc* &  *&  * & w: <2 * M[ 2 z *&  * & 6 * M[ 2 ª*&  * & 6 * M[ 2  !6P  !6:<#w* -:b*#~2(*##~2!6j#Aj!6! 6: ҥ*&  ~l! 6*&  j"ʔj*#":<2Kj¸j! q>9! /~0/H: 0: A/>F! /H: A >!6! 6  *M!k ^#Vs*M8 O͹2 s*M8 O͹2 e: *M8 O͹H2 ss%(9h: :  ! q: ҧ: 0_ö: A_!6! 6j#j*jj>*": ҉*&  j!€*#"*&  ~i! 6*"*"jfj}:<2O> }jÆj:ʗjI * :O͋:O͋= ! 6:=! * &  ^: <2 I !6:<2*&  ~b! 6>}! _*&  * & ^: <2 )*&   ~! 6*&   ~=! *&  * & ^: <2 €>:b*#~2 *##~2 * MP j!6*"*:j"0j*#"jMj! q! 6>x! ڐ! >yO!  ! >}O!  w: <2 W:2O>~Ҥ!6~.N -¬ :2 : 2* MP .j.$j -.s -!6!6!6!6!v6!x65jHj2 v:sjsjH: j‘j¤.z -¬jj!g6:c2j*dMP j.i`N#Fog_ogDM!>)) =_{ozgi`N#Fogo&ogxxMAIL TEX Input Filename: $ Enter Subject: >$ Destination ID: $ ILLEGAL DESTINATION $ Mail From Node #$ Subject: $ $RE: SERVER MAIL DRIVE NOT NETWORKED $ ERROR OPENING FILE $ ERROR READING FILE $ ERROR WRITING FILE $$$$ >$ Mail Program Main Menu Select one of the following: 1 - Broadcast 2 - Send Mail 3 - Receive Mail 4 - Exit From Program$ Select source of message: 1 - File 2 - Console Input$ Select response: 1 - Stop Receiving Mail 2 - Answer Message 3 - Delete Message From Mail File 4 - Answer Message, Then Delete 5 - Re-Examine Last Message 6 - Get Next Message$f qqCOPYRIGHT (C) 1980-82, DIGITAL RESEARCH  NDOS Err $, Func $R  , CCP SPR$ ]*"+OG ~+~q#p###  #"Q*"S!_"2 2 2+~J "UR hInit Err$!yd|2Hڄ+|9"1!O >˜<2"y22]!^6#"GW!v ^==go!!. W_z!^#V!R:PUZi)50q.7W  @B  Ĕ<>>   $' *+/33/66:;<>@ABCDE*Q!Z6##w###*O>G }++sZ < '22]!"͹2!= ʢ ÕCCP.SPR ?$:O:_  ͽþ*:w#q#*##D22* #~#~=2:2###>$# !4*Q~G+x+ 607*w#D"\\**Dþ:_9}2[* q#"y u2[**:8ʫsðD;Ê*y u:%O22[!_s#r#";:&=ʽ:_22W*~?Ÿi?é*#"ͽ:[2Wþ:W2[:*#w#"þ!`"V+~2+~=:<=$I$:g:R++ :<5#7 P*#*#w#C":b*##6$#6$* 6$#6$:<** =ʈ ÀAC:!*C*+:¹!8 ÿ!G C}2*Q !O)}2Gy2[!_";*^#Vx#zW{_{_*":2_9* q#";!"2>22]!_"7*Q#~ڊ 2*S}œ.%^#V#6%:!_~2s :U*U>g}2:2 2 }2*~2[#*Dþ:2[þ*DM*DM:2* Ô !) *Ô Œ :ʌ *Q+: k 2 ~w$~ 2 !FF"h z Ctl-P OFF>2 ~w!N"h !a ~ʌ O#͎ } **Q! ~~G#~!Z6#w*Q~#w#s#r#p#qZZ:_>2 *Q#~ *~2A##N4> x w2  s*Q$~##YDM#w###s#:wZ*Q#~< *"1 "/ !"+ */  *+ #^#V##N#F"- *1 믕o>g."3 !"+  *- }|*3 25 "6  *6 :5 =œ *+ *- DM*3 bx */ *3 { } */ *+ $ ~#o}o  */ >$U" "I@H@@$"$"@UUUUUUUUT@HDDBA ! $IHI$$@@B$BI "B!$$ !ID@$" $DHI$I $ H@"! A B DA$H H! "I  $DD!$D DHA@@H$@!D!  $@$  A@ COPYRIGHT (C) 1982, DIGITAL RESEARCH Disk read error$Synchronization$ CP/Net is already loaded.$ CP/NET 1.2 Loader ================= $BIOS $BDOS $SNIOS SPR$NDOS SPR$TPA $CP/NET 1.2 loading complete.$ CP/NET Loader error: $1!` >5Q͔*`"d:]2m͔͔!"`*`N#F *`DM͔*dDM*`N#F PY*dDM!"DM͔*dDM"fa*fDMfdDM*f"d!"DM͔*dDMq"f a*fDMfdDM*f###"͔*fDM*###E͔ͽ1͔*DM͔>҂!vrv!q*&!p+q* !p+q*!p+q*!p+q* ̈́ ̈́!q> !:A Ö́:0Ö́!q:O:O!p+q ̈́ ̈́*|O*}OḦ́!!r+s+p+q>Һ!"6#6:"<2"O* :#<2#O*  ƒ]>!"ҍ> >#HҰ!A"a* #" O!+~B:*?wͻ`i""!"*goͭ*#^#V##N#F" *믕o>g."!"ͭ*}|*2"ͭ*:=;**DM*bxx* { }œ**¸~#o}oҩn*!_{ozg_og_{ozgi`N#Fogo&og_{_z#W/NDOS SPRSNIOS SPR@ *** Reset Failed *** $ @ @1!6:Y!"å:<2O:ڥ*& ~A/>P/HҢ*& ~AO!  +s#rY*DMͺµv!p+q*% i`N#Fog title 'LOGIN Transient Program' ;*************************************************************** ;*************************************************************** ;** ** ;** L O G I N T r a n s i e n t P r o g r a m ** ;** ** ;*************************************************************** ;*************************************************************** ; ; Equates ; BDOS equ 0005h buff equ 0080h print equ 9 version equ 12 login equ 64 cfgtbl equ 69 active equ 0001$0000b start: lxi h,0 dad sp lxi sp,CCPStack+2 push h ; save CCP stack pointer mvi c,version call BDOS ; get version number mov a,h ani 0000$0010b jz versionerr ; jump if CP/Net not loaded lxi d,passwordmsg lxi h,buff mov a,m ; get # chars in the command tail ora a jz dologin ; default login if empty command tail push d ; save login msg address mov c,a ; A = # chars in command tail xra a mov b,a ; B will accumulate master ID scanblnks: inx h mov a,m cpi ' ' jnz pastblnks ; skip past leading blanks dcr c jnz scanblnks jmp prelogin ; jump if command tail exhausted pastblnks: cpi '[' jz scanMstrID pop d ; discard old login msg adr lxi d,blankmsg push d ; push new login msg adr scanLftBrkt: mov a,m cpi '[' jz scanMstrID inx d stax d ;update the password inx h dcr c jnz scanLftBrkt jmp prelogin scanMstrID: inx h dcr c jz loginerr mov a,m cpi ']' jz prelogin sui '0' cpi 10 jc updateID adi ('0'-'A'+10) and 0ffh cpi 16 jnc loginerr updateID: push psw mov a,b add a add a add a add a mov b,a ; accum * 16 pop psw add b mov b,a jmp scanMstrID prelogin: mov a,b pop d stax d dologin: mvi c,login call BDOS inr a jnz loginOK lxi d,loginfailedmsg jmp printmsg versionerr: lxi d,versionerrmsg jmp printmsg loginerr: lxi d,loginerrmsg printmsg: mvi c,print call BDOS jmp Exit loginOK: mvi c,cfgtbl call BDOS ; get configuration table address mov a,m ori active ; set active bit true mov m,a Exit: pop h sphl ; restore CCP stack pointer ret ; ; Local Data Segment ; passwordmsg: db 00h ; Master ID # db 'PASSWORD' ; password versionerrmsg: db 'CP/Net is not loaded.' db '$' loginerrmsg: db 'Illegal LOGIN command.' db '$' loginfailedmsg: db 'LOGIN failed.' db '$' lclstack: dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h CCPStack: dw $-$ blankmsg: db 00h ; Master ID # db ' ' ; password end start !91 |g!~XO#~ - X[m# m~]X0 Km{__2A2V*T"Q"**"$$$ SUB $@ D"  @ AC–EQyQxQRQ** {zҷ*~#" <AOGƐ'@'OxƐ'@'ON# RMAC SNIOS0.ASM RMAC SNIOS3.ASM LINK SNIOS=SNIOS0,SNIOS3[OS]  > _> ͣ> ʹ~#ͣ _2< !2$~a{_:(M(E :<:=2 *!!6#5(n!(n3n 3!F#(~9wp!" !~ȯw:2ʹ*~ ( (ͣ#>?ͣ? _.:>п o$>!)2* "( @G:(:1ͣ0ͣ>>ͣ>2ͽNo file.:! ~ ($#0 WxxG ~ # x~#!)~ɯ2::=!>.!~ (@ #~+  6?#QÖW̡(_=`O> բ D{8ʹ> >x~ +ľ>.ͣ> ;͡ ~ͣ#. 'ͽALL (Y/N)?2B!5?#~Y?#">QÖ>2.ʡʹ>>2!6!~8  Qw4!)~ʖ:(+ ( (H (N ( ͮͮ> ͮx ͣ(Ö=ʖͽRead error!5mͮ>>2> ͭ.(/2o&)|(+!   < ͽNo spaceÖ.:(ͽFile exists}!* =(_ -#". #G!~(p p2< ͡Öͭ_: Ù22: :ʙ=23Ù: ! ! :w !  }|8ͽBad Loadw= .!~2>0~22\!!!~( (#~(#x2ʹ$3?:_COM ͽE.: !?$$$ SUB<$H$ B$!$$  @I"$@$$"@@ @UUR$HHI$DA! B"@@A"D@I A@@$!$I! @  AB$DDA I$H@  @@ $BI$$$B $  $!$D title 'LOGOFF Transient Program' ;*************************************************************** ;*************************************************************** ;** ** ;** L O G O F F T r a n s i e n t P r o g r a m ** ;** ** ;*************************************************************** ;*************************************************************** ; ; Equates ; BDOS equ 0005h buff equ 0080h print equ 9 version equ 12 logoff equ 65 cfgtbl equ 69 active equ 0001$0000b start: lxi h,0 dad sp lxi sp,CCPStack+2 push h ; save CCP stack pointer mvi c,version call BDOS ; get version number mov a,h ani 0000$0010b jz versionerr ; CP/Net must be loaded mvi e,0 ; default Mstr ID = 00h lxi h,buff mov a,m ; get # chars in the command tail ora a jz dologoff ; default logoff if empty command tail mov c,a ; A = # chars in command tail xra a scanblnks: inx h mov a,m cpi ' ' jnz pastblnks ; skip leading blanks dcr c jnz scanblnks jmp dologoff pastblnks: cpi '[' jnz logofferr scanMstrID: inx h dcr c jz logofferr mov a,m cpi ']' jz dologoff sui '0' cpi 10 jc updateID adi ('0'-'A'+10) and 0ffh cpi 16 jnc logofferr updateID: push psw mov a,e add a add a add a add a mov e,a ; accum * 16 pop psw add e mov e,a jmp scanMstrID dologoff: mvi c,logoff call BDOS inr a jnz logoffOK lxi d,logoffailedmsg jmp printmsg versionerr: lxi d,versionerrmsg jmp printmsg logofferr: lxi d,logofferrmsg printmsg: mvi c,print call BDOS jmp Exit logoffOK: mvi c,cfgtbl call BDOS ; get config table address mov a,m ani not active ; turn off active bit mov m,a Exit: pop h sphl ; restore CCP stack pointer ret ; ; Local Data Segment ; versionerrmsg: db 'CP/Net is not loaded.' db '$' logofferrmsg: db 'Illegal LOGOFF command.' db '$' logoffailedmsg: db 'LOGOFF failed.' db '$' lclstack: dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h dw 0c7c7h,0c7c7h,0c7c7h,0c7c7h,0c7c7h CCPStack: dw $-$ end start   COPYRIGHT (C) 1980-82, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2G <2F !, ~w& &  }  &  ! " #  82J !H 2a{_::H >Ľ }:H Ľ>2 )*! }+"! "$  :·*"!  !*! |n+">2*$ "!  $:H Ľ͘aA͌>>͌!ͬS/n*n͘aA͌>>͌? !Fx<5#xK~Qw<w!" !~6ͽ :H ý͘*~ ʟʟ͌#Ì>?͌͘n* چ=_.:;<> o$>!& 2I *"@G: :H wx2I pͭ6#*&6?(wͭ=,#6 6.fͭf#*V6?XwEͭm\#6 f#6o" #~?† ~xDIR ERA TYPESAVEREN USERfnc1fnc2fnc3fnc4!y ' # y# 21y_:͸2E##~ <>2y2H ͽ:c1'!  ~]#~]E$~]wZF-ia2H Ć:I |ͻ!_~#foN4e|çREAD ERRORçNO FILE:I †!'  ~ #0 ҆Wx†xچچچG ~ †# x~#!~ɯ2& :I =!H ý:I =!H :H ý+!' ~ f 6?#_:G `O> "{£͘aA͒>:͒ë͢>:͒͢x" > " > ͒x  °͢ðSoÖ )ͧ$!5*#~Y*#"+& <ÖALL (Y/N)?†+~͘!K 6!K ~^ww4!~ʖ͌S–K=ʖͰ=Ɔ+& .2F o&)|+!i& ë& <ͧfÖNO SPACE†:I +P!& 6 *=_J#"JG!I ~0pJp2& D& 3ÖÖ=ÆYͧÖFILE EXISTS҆_:' ʆ:Ù:' š:I ʙ=ͽ2H ?Ù/  †+!u!' ~yO#ºy_{p_F!i& }|{={& =!I ~2& >~26 2F \!& !!~> >#0~O#Cx2͘f?1:J _:?:H ͽ*=Æ& ͧÖBAD LOADCOM=:' !I †*$$$ SUB$@B !$B HI$HI!I@HII"HBI$BAD"@I$DBH   D D@@@$I$HA I$IUU$HA $H!$$ B BHDDDI$$$$ I $I$II $! $I$!H"$$!$A DHI$@ !91&!91 |ʂ!~sOG#~ 0 "p[J~[J# :p# ʈ~]p0 c҈xGGJx@<“ËË ÜE~wPASSWORDCP/Net is not loaded.$Illegal LOGIN command.$LOGIN failed.$ ́× ':0/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE)(INP:/OUT:SPACE) COPYRIGHT (C) 1979, DIGITAL RESEARCH, PIP VERS 1.5$$$ SUB =.:,<> _[]INPIRDPTRUR1UR2RDROUTLPTUL1PRNLSTPTPUP1UP2PUNTTYCRTUC1CONNULEOFDISK READ ERROR$DISK WRITE ERROR$VERIFY ERROR$NOT A CHARACTER SINK$READER STOPPING $NOT A CHARACTER SOURCE$ABORTED$BAD PARAMETER$INVALID USER NUMBER$RECORD TOO LONG$INVALID DIGIT$END OF FILE, CTL-Z?$CHECKSUM ERROR$CORRECT ERROR, TYPE RETURN OR CTL-Z$INVALID FORMAT$HEX$$$$NO DIRECTORY SPACE$NO FILE$COM$START NOT FOUND$QUIT NOT FOUND$CANNOT CLOSE DESTINATION FILE$DESTINATION IS R/O, DELETE (Y/N)?$**NOT DELETED**$$$$$$$NOT FOUND$COPYING -$REQUIRES CP/M 2.0 OR NEWER FOR OPERATION.$UNRECOGNIZED DESTINATION$CANNOT WRITE$INVALID PIP FORMAT$CANNOT READ$INVALID SEPARATOR$1 :2L> ̈́M9 221@:2!o6+6+6!6#6!6#6:G*o .!N6:^*M^!K6!6!6+6' :$::=2K  :ʤ\:ҷ\x'Ͳ:!\͢  :͈'! Ͳ:$: $͈Ͳ!N6' :!Cwͯ !6:^͢c!6{:/>!/H{ͯ :<2Š ::=HҮͯ !6:Ҿ:2 !6::/H͈;!6:> !/>HHͯ :^!w:<2:0}:@E}:!S!W6: z!]6:cm!c6:_z!_6l ::,: HHҰͯ : 2ó:E:1:2v!q!*8!*6: >ͦ>ͦ!q:_  !p+q.*   !q*&!p+q*2!p+q*2!p+q*22!p+q*!p+q*!p+q*!p+q*2!p+q*!p+q* !q*& *M *M !p+q*!!p+q*"!p+q*$!6  !kp+q*j> >ڪ Þ !qp+q/ *pDM9: :M2r:N!r !:r *r& N!r4 !6:͔: :ͳ.!ws+p+q+p+q:w=2wN *s*u w*s#"s*u#"u' !"*M^7 !x6:!xھ **DM͆ 2yʭ :yͯ *"*6:2x÷ *"!x4d !"/ !j}=2| !"*KM^'_ !z6:|!z1 * "}*}DM͆ ' ͯ *"!z4 :e !"͆ !z6:|!z '? 2*H#"H!{6:{ր!Ң *{& :{4 2!{4m *":ڹ ͯ !z4I '2!"!q: !4>!S :S! :2*M! ^#V͎ * :w*#" = = = = = ͯ  *M !6q  !6q  !6q  *& !6à  !6 à  !60à  *& !6  !6  !6  *& . 1 4 7 : = F P [ f q  :2!q: " *M n :c4 *M n :2!c:Q !c:2: !:cw>!n !5 Y : { !6!q:!lwҙ  â :0O !q:O| :O| !6:]2l:o'2o:n'2n:m'2m*mMͣ *nMͣ *oMͣ :]:   *}2D" * * *&"!q:UY: Y:ҩ: ʩ:_2ʘ:€!6<:<2!ژ!6 >!]Ҥ; !6:Q::H: !6*M : !6!q:a/>z!/H:_2:!q:A/>Z!/H8: 2::=O>m:W!Q} Hmd>9>!6:2*M!E ^#V͎ڗO **~2*#"m2m͖ 2m!6m!6m!6 m2mͯ m!62m!62m!62m!62m'2:2:TҒ:2!6*ME:2::Ҳ:<22ý: 2:} >ͯ :i:2:d*M:[ *M:>!(:=2%> >>!F!5+N! ~2!4<2T>>!b}*bMͭz:b2!b6:<2é>!`ҥ*`MͭҞ!`6!6> :é:(!q:!wO! ~2*& :w>!:!4!6>:N<2N!> *N& N2 !p+q!6!6+6 !6: S: M!6g8:N2M*M8p!6!6!6>!ڕ*&P 6!4z!6!6#6#6!6*M8:ھ:*͇g2ê::¿::,͡A<2O>*M8):[ͱ!N5!6ñ:5!6#6>!ڰ!6:<2O>/:!O!T *M͡H~K:¡!6[–ͱ!N5:2:2!4=:[¼ͱ4:!6:.2O8: :* ͇g:[ ͱ!N5!6:%:<2*6 * 6å!q!6> !d*&I :]>!4A>:<2O* :w:?†!6!q!6?!:ҠgÐ!q*&*~!6:22: :]Hں:A2O>: 2ͯ ÷:S:QHI:N<22: H@"2Í202O> c!6Í202O> ڍ*&O*& !sc*&P :w:·>!ұͯ :22:_!6=!6>'!E!4!p+q*0 !r+s+p+q*~$7*>*>H&>*#"*#"> 2:R͎:!6!6=2:ʙ!6:“H9Ž>!6-e!6ͻ2=2ʺ-é:>>"ͻ2:!!5ͻ2ͬ!\-:>>!p+q:,!6*DM9:<!6:z 2W!6D*&L :w:<2Ov*:>=20O> ڒ:0:AO>Ҥ::A }}Hͬ!wͻO`idͻV[2O>2:!X!6:!:=O!L NE!4 E E:/.*&L 6$L9k9.Xͯ *KM^020 :020:121'ͳ':²ͯ !G6!"!"7 *M^n/ :a/:H!6:ͯ !&62*">!b!ͯ >!`0ͯ !q:EJ24J!46*}a!44EJ *KM^'́:‚ͯ !36'n::0:f9OY#9.3'ͳ.20' 'ͳ'7 6'!j>A+!s!"@͓1!"<**"͓n "Dn"":!Q2҂:X!Wғä:ڤ*MEÓ:ұ@@:O2Mc;!6#6>!)*&P ~"::H:H:H:H"!6!4:_jYO jM*"S*" 3@bl*M1͓!""7 *M^͆ \͔!":͎H*#"ͧÝ/ :>͛9ͯ .*#":_!' !'6!36' :1/!aE*#">z?C9IͲÁ.!6> !ڇ*&' ~2 ʀ: y.*M!4Q>!қ:=2á:2:Ҭ\>!ҿ:=2K:2K!:!:K\: \!p+q͈*DM!  ::=H-\:N2O_og_{ozg^#V))) _{ozg^#V) d^#V|g}o n_{ozgO{ozgi`N#Fogo&og H ©=¨ILST:CON: CP/Net is not loaded.$ Illegal parameter specification.$1!9"!cͺ>'l"!6u!O! ^#V͏2: =ʡ0u͏2 *&) *" K* #w: ƀ* w$ͨ$* " 2!K* #w:!ƀ* w$ͨ"* " 2!K* #w:!ƀ* w$- S>1#S>v*!q*&!p+q*  E*& ~ ‹!4u!6:*& ~2O>Ҷ*M û >!/~:H~[H~]H~=H*& 6!4Ð!4!q*&  :w!4!s+p+q!6!66:!ڌ!q!6>!z*&**&  q!6!4+4I:҅:!43>: :ʚ0: A2O>Ҭ0u:!q:A/>F!/H:A :02 ::0A2: 0:  : [H>:  : [HG* Mͳ2: 2 :0: [a:  ^0>u: ]o>: ]* Mͳ:]¤* Mͳo&))))* Mͳ_}0u: =¶u_{ozg^#V|g}o _{ozgILST:CON: CP/Net is not loaded.$ Illegal parameter specification.$1!9"!|>͓"!6 !͇O! ^#VXO! *>w#6$* >w#6"* >w#6 1#v*!q*&!p+q*  E*& ~ 6!4 !6:*& ~2O>a*Mf >!/~,H~:H~*H~.H~>H~<H~=H*& 6!4;!4!q*& :w!4!s+p+q!6!66:!U!q!6>!C*&**& :!6!4+4:N:!4>::c:A2O>u:_{ozg^#V|g}o ‡_{ozg; SNIOS for fictitious CPNetDevice ; maclib z80 public NTWKIN, NTWKST, CNFTBL, SNDMSG, RCVMSG, NTWKER, NTWKBT, CFGTBL cseg ; Slave Configuration Table CFGTBL: ds 1 ; network status byte ds 1 ; slave processor ID number ds 2 ; A: Disk device +2 ds 2 ; B: " ds 2 ; C: " ds 2 ; D: " ds 2 ; E: " ds 2 ; F: " ds 2 ; G: " ds 2 ; H: " ds 2 ; I: " ds 2 ; J: " ds 2 ; K: " ds 2 ; L: " ds 2 ; M: " ds 2 ; N: " ds 2 ; O: " ds 2 ; P: " ds 2 ; console device +34 ds 2 ; list device: +36... ds 1 ; buffer index +2 db 0 ; FMT +3 db 0 ; DID +4 db 0ffh ; SID (CP/NOS must still initialize) db 5 ; FNC +6 db 0 ; SIZ +7 ds 1 ; MSG(0) List number +8 ds 128 ; MSG(1) ... MSG(128) +9... ioport: db 038h ; possibly configured here... ; Network Status Byte Equates ; active equ 0001$0000b ; slave logged in on network rcverr equ 0000$0010b ; error in received message senderr equ 0000$0001b ; unable to send message ; Utility Procedures ; ; Network Initialization NTWKIN: lxix CFGTBL mvi a,active stx a,+0 ; network status byte lda ioport mov c,a inr c ; status port xra a outp a dcr c inp a stx a,+1 ; our slave (client) ID xra a sta CFGTBL+36+7 ret ; Network Status NTWKST: lda CFGTBL+0 mov b,a ani not (rcverr+senderr) sta CFGTBL+0 mov a,b ret ; Return Configuration Table Address ; Still need this for BDOS func 69 CNFTBL: lxi h,CFGTBL ret ; Send Message on Network SNDMSG: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda CFGTBL+1 stx a,+2 ; Set Slave ID in header lda ioport mov c,a mvi b,5 ; length of header outir ldx b,+4 ; msg siz field (-1) inr b ; might be 0, but that means 256 outir inr c ; status port inp a ; ani 02h ; cmd overrun rz mvi a,0ffh ret ; Receive Message from Network RCVMSG: ; BC = message addr mov h,b mov l,c ; HL = message address push h popix lda ioport mov c,a inr c ; status port rcvwait: inp a ani 01h ; data ready jz rcvwait dcr c ; data port mvi b,5 ; header length inir ; Could compare SLVID with "LDX r,1" and ignore messages. ; But this "hardware" is point-to-point (connection oriented) ; so the only messages we see are intended for us. ldx b,+4 ; msg siz inr b inir inr c ; status port inp a ani 04h ; rsp overrun rz mvi a,0ffh NTWKER: ret NTWKBT: ; NETWORK WARM START lda ioport mov c,a xra a ; Future hardware might expect data outp a inp a ; this is our Slave ID, but we already have it ret end ?458!>w:O y xw2@:G2x!`i:w:OF x>`i:O x F x>:Oyx$HA-$KI--ր>7Nխ'5xn*+dP$C@&KP:0ڳnGj<9L`4[խ'0A@A`+d#Ր1xs$uk@ ixdk2rZJtw('*+Gu@2r2dwd)"&~2j