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

⟦d2214a17e⟧ TextFile

    Length: 6912 (0x1b00)
    Types: TextFile
    Names: »hclocalt1«

Derivation

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

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 =   92         ; kind of acia communication line.
     0,r.256           ; dymmy load segment.
     k= 8
     10                ; start program address.
b10: ;; restart address.
     gg  w0     66     ; wait for manuel start.
     al  w1     d6     ; load kind of acia communication line.
     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◀