|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 17664 (0x4500) Types: TextFile Names: »changek3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »changek3tx «
b. g1, f4, w. s. c20, d5, e25 w. d. p.<:fpnames:> l. w. k=h55 ; entry changekit 0, 0 jl. c14. ; goto start c0 : 0 ; saved fp start c1 : 0 ; devno (device number) c2 : 0 ; name add of "oldkitname" c3 : 2.100 ; mask off result 2 and 3 c4 : 0,r.5 ; space for workname c5 : 3<12 ; message: operation input 0 ; first address of transfer 0 ; last address of transfer 0 ; segment number c6 : 0,r.8 ; answer: status,bytes transferred,char trans c7 : 0 ; counter on status from input chaintable c9 : -1 ; segment counter c12: 0 ; name conflict false c13: <:<10>the following names appeared :> <:in main catalog<10>as well as in :> <:aux-catalog. they are not inserted<10><0>:> c11: 1<18 ; end of document bit c15: 0 ; name address of program name c14 : rs. w1 c0. ; start: begin c0:=fp start ; check fp command al w0 x3+2 ; save name address rs. w0 c15. ; of changekit se w2 x3 ; if leftside then jl. e0. ; outerror (leftside) bl w0 x3+1 ; if program_item <> se w0 10 ; name then jl. e7. ; outerror (prog_name) ba w3 x3+1 ; if separator1 <> bl w0 x3 ; space then se w0 4 ; outerror (no_space) jl. e7. ; bl w0 x3+1 ; if param1 <> se w0 4 ; integer then jl. e7. ; outerror (no_integer) rl w2 x3+2 ; c1:=w2:=param1 rs. w2 c1. ; comment device number ba w3 x3+1 ; if separator2 <> bl w0 x3 ; space then se w0 4 ; outerror (no_space) jl. e7. ; bl w0 x3+1 ; if param2 <> se w0 10 ; name then jl. e7. ; outerror (param2) al w3 x3+2 ; c2:=w3:=address of rs. w3 c2. ; oldkitname al w3 x3+8 ; if separator3 = <sp>,<=>,<.> bl w0 x3 ; then sl w0 4 ; jl. e7. ; outerror (param) al w3 x3-8 ; w3=address of oldkitname ; end check of fp command. w3 contains the address ; of oldkitname. w2 contains the device number ; remove entries belonging to old kit from main catalog b. a0 w. al w1 -1 ; w1:=-1 a0 : ba. w1 1 ; rep:w1:=w1+1 jd 1<11+88 ; monitor remove bs (w1,w3) sn w0 0 ; if all_name_key entries jl. a0. ; removed then goto rep sn w0 7 ; if w0=7 then jl. e1. ; outerror (w0) la. w0 c3. ; if w0=4 or w0=5 se w0 0 ; then jl. e2. ; outerror (w0) e. ; end remove entries from main catalog. w3 contains name ; address of oldkitname. w0=0, w1:= highest segno ; of oldcat + 1. w2:=device number ; input chaintable from newly mounted kit on device devno ; include the device in the backing store system and ; create an area process corresponding to the new aux-catalog b. a2 w. al w1 x2 ; w1:=w2 al. w3 c4. ; w3:=workname_address jd 1<11+54 ; monitor create ph pr (w1,w3) sn w0 2 ; if result = 2 then jl. e4. ; outerror (proc not user) sn w0 4 ; if result=4 then jl. e5. ; outerror (device no unknown) sn w0 5 ; if result = 5 then jl. e6. ; outerror (doc not bs) se w0 0 ; if w0<>0 then jl. e9. ; outerror (w0) jd 1<11+4 ; if kind of periph proc <> 6 rl w1 (0) ; or kind of peripheral proc <> 62 sn w1 84 ; m8000: bs subproc kind jl. +10 ; se w1 6 ; then sn w1 62 ; sh w1 0 ; jl. e6. ; outerror (doc not bs) jd 1<11+6 ; monitor initialize p (w3) se w0 0 ; if process_not_initialized then jl. e10. ; outerror (w0) al. w0 d0. ; first_add_of_transfer:= d0 am 2000 ; al. w1 d1. ; last_add_of_transfer:= d1 ds. w1 c5.+4 ; a1 : al. w1 c5. ; repeat: w1:=message_address jd 1<11+16 ; monitor send mess (w1,w3) al. w1 c6. ; w1:=answer address jd 1<11+18 ; monitor wait answer (w1,w2) am (x1) ; if status <> 0 then se w3 x3 ; jl. a2. ; goto error step se w0 1 ; if dummy answer then jl. a0. ; goto check am (x1+2) ; if bytes transferred = 0 sn w3 x3 ; then jl. a1. ; goto repeat rl. w1 c1. ; w1:= device no al. w3 d0. ; w3:= chaintableaddress jd 1<11+84 ; monitor create bs (w1,w3) se w0 0 ; if bs not created then jl. e11. ; outerror (w0) al w3 x3 +6 ; w3:=name address of catalog jd 1<11+52 ; monitor create area pc (w3) se w0 0 ; if area process not created jl. e12. ; then outerror (w0) jl. c8. ; goto insert entries a0 : se w0 5 ; check: if dummy answer <> result 5 jl. e14. ; then outerror (w0) rl. w0 c7. ; c7:=c7+1 ba. w0 1 ; rs. w0 c7. ; sh w0 2 ; if c7<=2 then jl. a1. ; goto repeat ; else begin al w0 5 ; add 1<5 to status word sh w0 0 ; and skip next instruction a2:al w0 0 ; error step: w0=0 jl. e14. ; outerror(w0) e. ; end ; insert entries from aux catalog.the catalog is input ; segment by segment. for each segment the monitor ; procedure insert entries are called once per used entry ; when status end_of_document is recieved the program ; returns to fp. w3 contains the name address. b. a7, b1 w. c8 : am 2000 ; insert entries: al. w0 d2. ; c5+2:=first address of transfer:=d2 am 2000 ; al. w1 d3. ; c5+4:=last address of transfer:=d3 ds. w1 c5.+4 ; a0 : al. w3 d0. ; next segment: w3=name address of al w3 x3+6 ; new catalog rl. w0 c9. ; ba. w0 1 ; segment count:=segment count +1 rs. w0 c9. ; rs. w0 c5.+6 ; c5+6:=segment count a1 : al. w1 c5. ; repeat: w1:= message address jd 1<11+16 ; monitor send mess (w1,w3) al. w1 c6. ; w1:=answer address jd 1<11+18 ; monitor wait answer (w1,w2) se w0 1 ; if dummy answer then jl. e15. ; outerror (w0) am (x1) ; if status<>0 se w3 x3 ; then jl. a2. ; goto checkend am (x1+2) ; if bytes transferred=0 sn w3 x3 ; then jl. a1. ; goto repeat rl w0 x1+2 ; if bytes transferred<>512 se w0 512 ; then jl. e15. ; outerror (w0) am 2000 ; al. w1 d2. ; w1:=add of first entry al. w3 d0. ; w3:=chaintableaddress a3 : rl w0 x1 ; next entry: if entry_available sn w0 -1 ; then jl. a4. ; goto update pointer jd 1<11+86 ; monitor insert entry (w1,w3) sn w0 3 ; if name_conflict then jl. a5. ; goto namecon se w0 0 ; if w0<>0 then jl. e8. ; outerror (w0) ; no_of_entries - 1 a4 : al w1 x1+34 ; update pointer: w1:=w1+34 am 2000 ; se. w1 d3. ; if -,(whole_segm_done) jl. a3. ; then goto next entry jl. a0. ; goto next segment a5 : ds. w1 b0. ; namecon: save w0, w1 ds. w3 b1. ; save: w2, w3 rl. w0 c12. ; if first name conflict se w0 0 ; then jl. a6. ; begin al. w0 c13. ; write(out,<:<heading text>:>) jl. w3 h31.-2 ; al w0 1 ; name_conflict:=true rs. w0 c12. ; ; end a6 : al w2 10 ; jl. w3 h26.-2 ; write(out,<:<10>:>) al w0 6 ; wa. w0 b0. ; jl. w3 h31.-2 ; write(out,<:<entry name>:>) dl. w1 b0. ; restore w0, w1 dl. w3 b1. ; restore w2, w3 jl. a4. ; goto entry inserted 0 b0 : 0 0 b1 : 0 a2 : rl w0 x1 ; checkend: so. w0 (c11.) ; if status<> end of document then jl. e15. ; outerror (w0) al. w3 d0. ; w3:=name address of al w3 x3+6 ; bicat area process jd 1<11+64 ; monitor remov3 process (w3) se w0 0 ; if process not removed then jl. e13. ; outerror (w0) al w2 0 ; ok.yes, warning.no jl. h7. ; goto fp_end_program e. ; end insert entries ; outerror routine b. b20,a14 w. b20:<:<10>***<0>:> b0 :<:<32>call<10><0>:> b1 :<:<32>main catalog inconsistent<10><0>:> b2 :<:<32>kit in use<10><0>:> b3 :<:<32>oldkitname unknown<10><0>:> b4 :<:<32>process is not included as user<10><0>:> b5 :<:<32>device number unknown<10><0>:> b6 :<:<32>document is not a bs document<10><0>:> b7 :<:<32>param<32><0>:> b8 :<:<32>insert entry:<32><0>:> b9 :<:<32>create periph proc, result:<0>:> b10:<:<32>initialize proc, result:<0>:> b11:<:<32>create backing storage, result:<0>:> b12:<:<32>create area process, result:<0>:> b13:<:<32>remove area process, result:<0>:> b14:<:<0>:> ; periph proc b15:<:<0>:> ; area process b16: 0 a0 : 0 ; save w0 a1 : 0 ; save w1 a2 : 0 ; save w2 a3 : 0 ; save w3 e0 : am b0-b1 e1 : am b1-b2 e2 : am b2-b3 e3 : am b3-b4 e4 : am b4-b5 e5 : am b5-b6 e6 : am b6-b7 e7 : am b7-b8 e8 : am b8-b9 e9 : am b9-b10 e10: am b10-b11 e11: am b11-b12 e12: am b12-b13 e13: am b13-b14 e14: am b14-b15 e15: am b15-b16 al. w2 b16. ; w2:=error_text_address ds. w1 a1. ; save w0, w1 ds. w3 a3. ; save w2, w3 al. w0 b20. ; jl. w3 h31.-2 ; write(0ut,<:<10>***:>) rl. w0 c15. ; jl. w3 h31.-2 ; write(out,<:changekit:>) rl. w0 a2. ; jl. w3 h31.-2 ; write(out,<:<errortext>:>) rl. w0 a2. ; w0:=error_text_address sh. w0 b6. ; if w0<=b6 then jl. a4. ; goto error_group1 sh. w0 b7. ; if w0=b7 then jl. a5. ; goto error_group2 sh. w0 b8. ; if w0=b8 then jl. a6. ; goto error_group3 sh. w0 b13. ; if b9<=w0<=b13 then jl. a7. ; goto error_group4 dl. w1 a1. ; error_group5: get result,status sl w0 6 ; if result>=6 then al w0 4 ; result=4 comment if result from ; send mess wait answer was 1 then ; number of bytes transferred are ; stored in w0 and if this is not 512 ; we jump to this error_group al w2 1 ; ls w2 (0) ; logical status := 1 shift result sn w2 1<1 ; lo w2 x1 ; +maybe status rl. w3 a2. ; w3:=error_text_address al. w1 d0. ; al w1 x1+6 ; w1:=name address of area process sh. w3 b14. ; if proc = periph proc then al. w1 c4. ; w1*= name add of periph proc am. (c0.) ; jl +h7 ; goto fp_end_program a4 : al w2 1 ; error_group1: fp_end: am. (c0.) ; ok.no warning.yes jl +h7 ; goto fp_end_program a5 : rl. w3 a3. ; error_group2: write_out_separator bl w1 x3 ; w1*=separator kind sh w1 -4 ; if separator kind=end comm stack then jl. a9. ; goto end comm stack rl. w2 x1+a8. ; write(out,case w1 of ( ) ( nl sp = .)) rl w0 4 ; w0=w2 am. (c0.) ; jl w3 +h26-2 ; sn w0 -2 ; if separator = nl then jl. a4. ; goto fp end rl. w3 a3. ; write out parameter bl w1 x3+1 ; w1=param length sh w1 0 ; if no parameter then jl. a4. ; goto fp_end sh w1 2 ; if next separator follows then jl. a12. ; goto write next separator sh w1 4 ; if param=integer then jl. a13. ; goto write integer al w0 x3+2 ; w0:=name address am. (c0.) ; jl w3 h31-2 ; write(out,<name>) a9 : al w2 10 ; end_comm_stack: am. (c0.) ; write(out,<:end command stack:>) jl w3 h26-2 ; jl. a4. ; goto fp_end a12: bl w1 x3+2 ; write next separator: w1:=separator kind sh w1 -4 ; if sep kind= end comm stack then jl. a9. ; goto end comm stack rl. w2 x1+a8. ; write (out,case w2 of ( ) nl sp = . am. (c0.) ; jl w3 h26-2 ; jl. a4. ; goto fp_end a13: rl w0 x3+2 ; write_integer: w0:=integer am. (c0.) ; jl w3 h32-2 ; 32<12+3 ; jl. a9. ; goto fp_end 10 ; newline a8 : 40 ; begin paranthese 10 ; newline 32 ; space 61 ; equality sign 46 ; point a6 : al w0 6 ; error_group3: wa. w0 a1. ; w0:=entry_name_address am. (c0.) ; jl w3 h31-2 ; write(out,entry name) al. w0 a14. ; write(out, result) am. (c0.) ; jl w3 h31-2 ; a7 : rl. w0 a0. ; error_group4: am. (c0.) ; write(out,<<ddd>,w0) jl w3 h32-2 ; 32<12+3 ; jl. a9. ; goto fp_end a14:<: result: <0>:> e. ; end outerror routine ; bufferarea d0 : 0 ; first address of bufferarea ; for chaintable d1 = d0+2560-2-2000 ; last address of bufferarea ; for chaintable d2 = d1+2 ; first address of bufferarea ; for catalog segment d3 = d2+510 ; last address of bufferarea ; for catalog segment i. m. rc 12.08.76 fp utility changekit f1 = d3+2000-1536 ; length f2 = 4 ; entry g0:g1:(:f1+511:)>9 ; segment 0,r.4 ; name s2 ; date 0,0 ; file, block 2<12+f2 ; contents key, entry f1 ; length d. p.<:insertproc:> l. e. e. e. ▶EOF◀