|
|
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◀