! DMACK board RS232 port A access routines

! Signetics Duart registers:

@16_0007F441 %byte-
  mr12a,*,csra,*,cra,*,hra,*,
  ipacr,*,ismr,*,ctur,*,ctlr,*,
  mr12b,*,csrb,*,crb,*,hrb,*,
  *,*,opcr,*,sopb,*,ropb

%externalpredicate dmack r ready
  %trueif csra&1#0; %false
%end

%externalpredicate dmack t ready
  %trueif csra&4#0; %false
%end

%externalintegerfn dmack readsymbol
  %cycle
    %result = hra %if csra&1#0
  %repeat
%end

%externalroutine dmack printsymbol(%integer k)
  %cycle
    hra = k %andreturnif csra&4#0
  %repeat
%end

%externalroutine dmack printstring(%string(255)s)
%integer i
  dmack printsymbol(charno(s,i)) %for i = 1,1,length(s)
%end

%externalroutine dmack setup(%integer baudcode)
%constinteger default baudcode = 11
%integer zero=0
%integer test
  %onevent 0 %start
    %if event_sub=2 %thensignal 3,3,,"dmack select error"-
    %elsesignal 0,event_sub,event_extra,event_message
  %finish
  baudcode = default baudcode %if baudcode<0
  cra   = 16_10
  mr12a = 16_13
  cra   = 16_10; test = mr12a
  mr12a = 16_07; test = test<<8+mr12a
  %signal 3,3,test,"dmack setup error" %unless test=16_1307
  ismr  = zero
  ipacr = 16_60+(baudcode&16)<<3
  opcr  = 16_01
  csra  = (baudcode&15)*17
  cra   = 16_05
%end

