DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦a26ec409f⟧ TextFile

    Length: 8448 (0x2100)
    Types: TextFile
    Names: »hclocalt2«

Derivation

└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ.  Detaljer om "HC8000" projekt.
    └─⟦0364f57e3⟧ 
        └─⟦this⟧ »hclocalt2« 

TextFile

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