|
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: 6912 (0x1b00) Types: TextFile Names: »kkauto«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦this⟧ »kkauto«
s. a50,i25,h20,p5 w. ; autoload program for hc8000 ; ; communication between ; rh8000 and hc8000 ; 1 send autoload command --> ; 2 initialisize and ; 3 <-- send hresponse(addr1) ; 4 send hmess(addr2) --> ; 5 --> input(addr2,addr2+32) ; 6 input monitorcode ; to buf1 and buf2 ; 7 (addr2):=1 ; 8 --> if (addr)<>0 then ; input(buf(addr2)) ; 9 (addr1):=(addr2) ;10 if (addr1)<>0 then <-- ;11 if (addr1)=1 then ;12 input monitorcode to buf1 ;13 and (addr2):=2 else ;14 input monitorcode to buf2 ;15 (addr2):=1 ;16 --> while (addr2)=0 goto 16 ;17 if (addr)<3 then goto 8 ;18 start monitor ; ; addr2-->info block ; *------------------* ; a20: ! comm reg(rh) ! ; a21: ! comm reg(rc) ! ; a22: ! monitor length ! ; ! not used ! ; *------------------* ; a25: ! 0 ! ; ! length(buf1) ! ; ! addr(buf1) ! ; ! 0 ! ; *------------------* ; a26: ! 0 ! ; ! length(buf2) ! ; ! addr(buf2) ! ; ! 0 ! ; *------------------* ; a0= 20 ; interrupt level for rh8000 a1= 0 ; dev no for rh8000 a2=100 ; hmess stack start addr ; ; dma record format a10= 0 ; device no a12= 2 ; halfwords to transfer a14= 4 ; first addres (other computer) a16= 6 ; first address (this computer) a20=10 ; comm reg(rh) addr2 a21=12 ; comm reg(rc) addr1 a22=14 ; addr of monitor length ; dma records abs addresses used to a25=20 ; 20-26 buf1 a26=28 ; 28-34 buf2 a27=34 ; last off inf block a30= 51 ; inf reg a31= 80 ; reg dump addr a40=256 ; first input addr ; entry from rh8000 al. w0 i20. ; w0:=interrupt table addr rs w0 8 ; set interrupt table addr al w1 a2 ; first addr of hmess stack al w2 x1+4 ; last addr of hmess stack ds w2 x1+2 ; init hmess record al w2 2 ; stack length (words) al w3 0 ; ds w3 x1+6 ; ls w1 3 ; lo. w1 h0. ; w1:=dev addr di x1 ; reset hmess stack ; ; init. inf reg and system table ; al w3 a30 ; rl. w2 h3. ; mode al w1 a31 ; w1:=reg dump addr ds w2 x3+1 ; al. w1 i0. ; mon call addr al w2 0 ; ds w2 x3-3 ; al w1 0 ; ds w2 x3+5 ; exc. and esc. address gp w3 26 ; inf-reg:=a30 rs w1 a21 ; clear comm-reg jd 1<11 ; start i0: rl. w1 h5. ; do. w1 (h4.) ; send hresponse(addr1) jl. 0 ; wait ; ; interrupt: hmess arrived ; i21: rl. w1 h1. ; di w2 x1 ; w2:=addr(next hmess record) sx 2.111 ; if buserror then jl. p0. ; send hresponse(error) bz w0 x2+1 ; w0:=sender se w0 a1 ; if not rh8000 then jl. p0. ; send hresponse(error) al w1 a27-a20; halfwords to be transferred ds w1 a26+a12; rl w0 x2+2 ; address word from hmess ls w0 1 ; ls w0 -4 ; w0:=addr2 al w1 a20 ; first addr (this computer) ds w1 a26+a16; al w1 a26 ; do. w1 (h2.) ; input info-block sx 2.111 ; if buserror then jl. p0. ; send hresponse(error) al w1 a40 ; first input addr ws w1 a25+a12; - buffer length rs w1 a26+a16; simulate first addr of last input jl. 0 ; wait i20: 0,r.(:a0-1:) ; i21 ; interrupt addres for hmess interrupt i22 ; interrupt address for dma-trans completed i22: ; interrupt: dma trans completed rs w0 a21 ; comm-reg:=w0 (=1 for buf1 and 2 for buf2 2) i4: rl w0 a20 ; comm addr di. w0 (h7.) ; w0:=comm inf sx 2.111 ; if busserror then jl. p0. ; send hresponse(error) sn w0 0 ; if wait then jl. i4. ; goto i4 al w1 0 ; rs w1 a21 ; clear own comm reg se w0 1 ; if not input to buf1 then jl. i7. ; goto i7 rl w2 a26+a16; w2:=first address(buff2) wa w2 a25+a12; +buffer length rs w2 a25+a16; first address(buff1):=w2 al w2 a25 ; do. w2 (h2.) ; input from buff1(rh8000) sx 2.111 ; if buserror then jl. p0. ; send hresponse(error) jl. 0 ; goto wait ; i7: se w0 2 ; if not input from buff2 then jl. i9. ; goto i9 rl w2 a25+a16; w2:=first address(buf1) wa w2 a26+a12; +length(buf2) rs w2 a26+a16; first address(buf2):=w2 al w2 a26 ; do. w2 (h2.) ; input from buf2 sx 2.111 ; if buserror then jl. p0. ; send hresponse(error) jl. 0 ; wait i9: al w3 10 ; al w2 a40 ; first of monitorcode i10: dl w1 x2 ; move monitor code ds w1 x3 ; al w2 x2+4 ; count al w3 x3+4 ; sh w2 (a22) ; if more to move then jl. i10. ; goto i10 jl 8 ; else start monitor p0: rl. w1 h6. ; hresponse(error) do. w1 (h4.) ; send hresponse jl. 0 ; wait h0: 1<23 +0<3 + 2.011 ;reset hmess stack h1: 1<23 +0<3 + 2.001 ;next from hmess stack h2: 1<23+a1<3 + 2.001 ;start dma trans h3 : 1<23 ;monitor mode h4: 1<23+a1<3 + 2.101 ;hmess to rh8000 h5: 1<23+a21<3+ 2.010 ;hresponse h6: 1<23 +0<3 + 2.000 ;hresponse errror h7: 1<23+a1<3 + 2.101 ;read in rh8000 e. ▶EOF◀