DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

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

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦7524d7e6f⟧ TextFile

    Length: 4736 (0x1280)
    Types: TextFile
    Names: »XYFYSIK.PAS«

Derivation

└─⟦ba3b4f658⟧ Bits:30003088 Xray: elevopgave i Pascal, feb 92
    └─ ⟦this⟧ »XYFYSIK.PAS« 

TextFile


(************  XYFYSIK  ******************************************)
CONST   OMSKIFT = FALSE;
        
procedure tristate;
var i :integer;
begin
  port(.piodata.):=53;
  port(.piodata.):=21;
  for i:=1 to 5000 do;            (* vent mindst 0.1 sek  *)
  port(.piodata.):=31;
  for i:=1 to 22000 do;           (* vent mindst 0.6 sek  *)
  port(.piodata.):=53;
  for i:=1 to 10000 do;           (* vent mindst 0.2 sek  *)
end;

FUNCTION COMPX :INTEGER;
  BEGIN
    COMPX:=PORT(.PIODATA.) AND 128  (* ER BIT 7 =1 ?? *);
  END;
  
FUNCTION COMPY : INTEGER;
  BEGIN
     COMPY:= PORT(.PIODATA.) AND 64 ; (* ER BIT 6 = 1 ?? *)
  END;
  
FUNCTION VOLTINDX :REAL;
  BEGIN
    TRISTATE;
    IF COMPX=0 THEN
       WHILE (COMPX=0) AND (XYCURX<1023) DO XUYN
    ELSE
       WHILE (COMPX<>0) AND (XYCURX>0) DO XDYN;
    TRISTATE;
    IF NOT(PENOPPE) THEN POSSHIFT; (* FOR AT GENSKABE PEN-POSITION *)
    VOLTINDX:=XYCURX/1023*10;
  END;
  
FUNCTION VOLTINDY :REAL;
  BEGIN
    TRISTATE;
    IF COMPY=0 THEN
       WHILE (COMPY=0) AND (XYCURY<1023) DO XNYU
    ELSE
       WHILE (COMPY<>0) AND (XYCURY>0) DO XNYD;
    TRISTATE;
    IF NOT(PENOPPE) THEN POSSHIFT; (* FOR AT GENSKABE PEN-POSITION *)
    VOLTINDY:=XYCURY/1023*10;
  END;

PROCEDURE VOLTUDX(V:REAL);
  VAR I,STEP :INTEGER;
  BEGIN
    IF V>10 THEN 
      BEGIN
        V:=10;WRITELN;WRITELN('* Overflow i x-spændingen *');
      end;
    IF V<0 THEN
      BEGIN
        V:=0;WRITELN;WRITELN('* Underflow i y-spændingen *');
      END;
    STEP:=ROUND(V/10*1023)-XYCURX;
    FOR I:=1 TO STEP DO XUYN;
    FOR I:=-1 DOWNTO STEP DO XDYN;
  END;
  
PROCEDURE VOLTUDY(V:REAL);
  VAR I,STEP :INTEGER;
  BEGIN
    IF V>10 THEN 
      BEGIN
        V:=10;WRITELN;WRITELN('* Overflow i x-spændingen *');
      end;
    IF V<0 THEN
      BEGIN
        V:=0;WRITELN;WRITELN('* Underflow i y-spændingen *');
      END;
    STEP:=ROUND(V/10*1023)-XYCURY;
    FOR I:=1 TO STEP DO XNYU;
    FOR I:=-1 DOWNTO STEP DO XNYD;
  END;
    
 PROCEDURE VOLTUDCLK(VAR DATA:REALARRAY;ANTAL :INTEGER);
   VAR I: INTEGER; VOLT :INTARRAY; OVERFLOW,UNDERFLOW :BOOLEAN;
   PROCEDURE VCLKUD(VAR DATA:INTARRAY;ANTAL:INTEGER);
    BEGIN
     (* EN CODE PROCEDURE *)
    END;
    
   BEGIN
      OVERFLOW:=FALSE; UNDERFLOW:=FALSE;
      FOR I:=0 TO ANTAL-1 DO
        BEGIN
          IF DATA(.I.)>10 THEN BEGIN VOLT(.I.):=1023;OVERFLOW:=TRUE;END;
          IF DATA(.I.)<0 THEN BEGIN VOLT(.I.):=0; UNDERFLOW:=TRUE;END;
          IF (DATA(.I.)>=0) AND (DATA(.I.)<=10) THEN
             VOLT(.I.):= ROUND(DATA(.I.)/10*1023);
        END;
      IF OVERFLOW THEN BEGIN WRITELN;WRITELN('*OVERFLOW I SPÆNDINGEN') END;
      IF UNDERFLOW THEN BEGIN WRITELN;WRITELN('*UNDERFLOW I SPÆNDINGEN') END;
      INITZERO;
      TRISTATE;
      FOR I:=1 TO 143 DO XUYN; (* SÆT X-TRIGGERNIVEAU TIL 1.4 V *)
      IF OMSKIFT THEN POSSHIFT; (* PENUDGANG SKAL VÆRE 0 V *)
      WRITELN;WRITELN('* CLOCKED SPÆNDINGSUDSENDELSE  - KLAR!! *');
      PAUSE;
      VCLKUD(VOLT,ANTAL);
      TRISTATE;
      IF NOT(PENOPPE) THEN POSSHIFT; (* GENSKABER PEN-POSITION *)
      XYCURY:=VOLT(.ANTAL-1.);
    END;

 PROCEDURE VOLTINDCLK(VAR DATA:REALARRAY;ANTAL:INTEGER);
  VAR I :INTEGER;VOLT:INTARRAY;
  PROCEDURE VCLKIND(VAR DATA:INTARRAY;ANTAL:INTEGER);
  BEGIN
  CODE
  $ED,$4B,ANTAL,$ED,$6B,DATA,$11,$00,$00,$F3,$DB,$11,$E6,$80,$28,$FA,
  $DB,$11,$E6,$80,$20,$FA,$DB,$11,$E6,$40,$28,$15,$7B,
  $B2,$28,$27,$3E,$31,$D3,$11,$3E,$35,$D3,$11,$1B,$DB,
  $11,$E6,$40,$20,$ED,$18,$16,$13,$7A,$FE,$04,$28,$0F,
  $3E,$39,$D3,$11,$3E,$3D,$D3,$11,$13,$DB,$11,$E6,$40,
  $28,$EC,$1B,$73,$23,$72,$23,$0B,$78,$B1,$20,$BA,$FB
  END;
  
  BEGIN
   INITZERO;
   TRISTATE;
   FOR I:=1 TO 143 DO XUYN; (* SÆT TRIGGERNIVEAU TIL 1.4 V *)
   WRITELN;WRITELN('* CLOCKED SPÆNDINGSMÅLING  KLAR!! *');
   PAUSE;
   VCLKIND(VOLT,ANTAL);
   TRISTATE;
   IF NOT(PENOPPE) THEN POSSHIFT; (* PENPOSITION GENSKABES *)
   FOR I:=0 TO ANTAL-1 DO DATA(.I.):=VOLT(.I.)/1023*10;
   XYCURX:=143;XYCURY:=VOLT(.ANTAL-1.);
 END;
 
procedure impulsclk(var puls:intarray;antal:integer);
var i: integer;
begin
  initzero;
  for i:=1 to 143 do xuyu; (* sæt x-y-triggerniveau til 1.4V *)
  code
    $01,PIODATA,$2A,ANTAL  ,$DD,$2A,PULS   ,$F3,$ED,$78,$E6,$80,$28,
    $FA,$ED,$78,$E6,$80,$20,$FA,$11,$00,$00,$ED,$78,$CB,$7F,$20,$11,
    $E6,$40,$20,$F6,$13,$ED,$78,$CB,$7F,$20,$06,$E6,$40,$28,$F6,$18,
    $E9,$ED,$78,$CB,$7F,$28,$11,$E6,$40,$20,$F6,$13,$ED,$78,$CB,$7F,
    $28,$06,$E6,$40,$28,$F6,$18,$E9,$DD,$73,$00,$DD,$23,$DD,$72,$00,
    $DD,$23,$2B,$7C,$B5,$20,$C0,$FB
 END;

 «eof»