|
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: 8448 (0x2100) Types: TextFile Names: »hclocalt2«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦this⟧ »hclocalt2«
;; ++++++++++++++++++++++++++++++ ;; load program for hc8000 local. ;; ++++++++++++++++++++++++++++++ ;; written by: carsten gyrn, sept 1982. ;; format of load through acia channal: ;; 1. the hclocal who request to be loaded send ;; an octet with the contents 255 through ;; the aciachannel with device no 64. ;; All load communication is expected to be ;; performed trough the acia channel 64 from ;; the hclocal. ;; 2. the loading computer can then send a block ;; as octets in the following format. ;; a: every data word ( 3 octet) in the block is send in the ;; following format most significant octet first ;; least significant octet last. ;; b: the first word transferred indicate the ;; address relative to the first word transferred ;; where the loaded computer will start program ;; execution after the block transfer. ;; c: after every word received ( 3 octets), a control ;; octet is received with the value: ;; 1. control octet: 170 = 2.10101010 ;; indicating word retransmitted ok, ;; start transmission of next word. ;; 2. control octet; 85 = 2.01010101 ;; last word retransmitted ok, ;; transmission ended, start transmitted ;; program. ;; 3. control octet; 60 = 2.00111100 ;; transmission of last word not ok. ;; retransmission of word. ;; 4. control octet; 240 = 2.11110000 ;; transmission error, restart complete ;; tranmission. ;; 5. control octet; anything else. ;; stop because of error. s. a0,g40,b10,f10,d6 w. ;; a names is assembler conditions. ;; b names is labels. ;; c names is local names. ;; d names is constants. ;; f names is global names. ;; g names is global labels. d0 = 85 ;X 88 ; control octet for end transmission. d1 = 170 ;C 65 ; control octet for transmission of word ok. d2 = 60 ;E 69 ; control octet for repeat transmission of ; last 3 octets. d3 = 240 ;A 65 ; control octet for repeat complete transmission. d4 = 255 ;S 83 ; control octet for transmission start. d5 = 70 ; logical device address of loading acia. d6 = 72 ; logical device address of write test device. 0,r.256 ; dymmy load segment. k= 8 10 ; start program address. ;; test block inserted. b. i10 w. gg w0 66 ; wait for start and read test register. rs. w0 i0. ; save octet. al w2 d6 ; load device address of test write device. jl. w3 g20.; reset and start device. i1:rl. w0 i0. ; det data read. sn w0 d0 ; skip if data is not continue. jl. i2. ; goto next test. gp w0 64 jl. w3 g27. ; write data with. gg w0 64 ; get data with no check. la. w0 f7. ; mask byte out. rs. w0 i0. jl. i1. ; repeat write. i2: ;; second test. gg w0 66 ; wait for start. al w2 d5 ; load address of restart device. jl. w3 g20. ; reset and init receive device. rs. w2 i9. ; save compålete device address. al w2 d6 ; load address of transmit device. jl. w3 g20. ; reset and init transmit device. rs. w2 i10. ; save complete device address. i3: rl. w2 i9. ; load complete device address of receive device. jl. w3 g23. ; read acia status. se w1 6 ; if not ready then jl. i3. ; repeat. jl. w3 g28. ; read caia data. rs. w0 i0. ; save octet read. i4: rl. w2 i10. ; load complete device address of transmit device. jl. w3 g23. ; read acia status. se w1 4 ; if not ready then jl. i5. ; goto repeat. rl. w0 i0. ; get octet to transmit. jl. w3 g30. ; write octet. jl. i3. ; goto again. i5: ;; read data. sn w1 0 ; if not = 0 ( neither transmit or recieve) then jl. i4. ; goto repeat polle of tranmit device. jl. w3 g28.; read data from transmit device. sn w0 83 ; if data <> 'S' then jl. b10.; goto load program rl. w2 i9. ; load complete address of receive device. jl. w3 g30. ; write octet to receive device. jl. i3. ; goto repeat loop in wait recieve device. i0: 0 ; data octet store. i9: 0 ; recieve complete address. i10: 0 ; transmit complete address. e. ;; end test block. b10: ;; restart address. gg w0 66 ; wait for manuel start. al w2 d5 ; load device address. jl. w3 g20. ; call reset acia. rs. w2 f4. ; save complete device address. al w0 d4 ; load message send init program. jl. w3 g27. ; send init message. al. w2 f1. ; load address of first memory address. b1: jl. w3 b0. ; wait recieve message. ls w0 16 ; shift first octet. rl w1 0 ; save first octet of load length. jl. w3 b0. ; call wait ls w0 8 ; shift. lo w1 0 ; or into the rest. jl. w3 b0. ; wait next byte. lo w1 0 ; load first byte. rs w1 x2 ; save complete data word. gp w1 64 ; show data word jl. w3 b0. ; call wait and read first control octet. se w0 d1 ; if control octet <> d1 or sn w0 d0 ; control octet <> d0 then jl. b2. ; ( if not thengoto control and store octet) sn w0 d2 ; if control octet = d2 then jl. b1. ; goto retransmission of last 3 octetts. sn w0 d3 ; if control octet = d3 then jl. b10. ; goto restart load. ;; else error stop gp w0 64 ; show received octet and jl. -2 ; stop. b2: ;; update store address and control end transmission. al w2 x2+2 ; address of next memory location. gp w2 64 ; show storage address. se w0 d0 ; if control octet is not end transmission then jl. b1. ; then goto get next data word. jl. f2. ; start load program in 4. loaded word. b0: ;; wait until recieve is ready and read data octet. ;; call: w0 = not used. ;; w1 = not used. ;; w2 = not used. ;; w3 = return address. ;; return: w0 = data octet. ;; w1 = saved. ;; w2 = saved. ;; w3 = return address. b. c10,b2 w. ds. w2 c2. ; save w1 and w2. rs. w3 c3. ; save return address. rl. w2 f4. ; load complete device address. b0: jl. w3 g23. ; read device status. se w1 6 ; if not ready ( recieve buffer full, ; transmit empty) jl. b0. ; then repeat read status. b1: jl. w3 g25. ; call read device with check. se w1 0 ; if data not read then jl. b1. ; then repeat. rs. w0 c4. ; save octet read. jl. w3 g30. ; write octet back for control. rl. w0 c4. ; restore octet. dl. w2 c2. ; else reestablish w1 and w2. jl. ( c3. ; return from subroutine. c1: 0 ; saved w1. c2: 0 ; saved w2. c3: 0 ; saved return address. c4: 0 ; saved octet read. e. ;; end wait and read. a0 = -1 ; only primitive acia procedures. p.<:hcacia:> ; load acia procedures. f4: 0 ;complete device address. f5: 2.111111110000000000000000 ; mask for most significant octet. f6: 2.000000001111111100000000 ; mask for intermidiate octet. f7: 2.000000000000000011111111 ; mask for least significant octet. f1: 0 ; first in loaded program. 0 ; 0 ; f2: 0 ; program start . e. ▶EOF◀