DataMuseum.dk

Presents historical artifacts from the history of:

RegneCentralen RC3600/RC7000

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

See our Wiki for more about RegneCentralen RC3600/RC7000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦8104a90dc⟧ COMAL_SAVE

    Length: 6228 (0x1854)
    Types: COMAL_SAVE

Derivation

└─⟦d85593a46⟧ Bits:30000470 DOMUS disk image - User files
    └─ ⟦cdd8edd9d⟧ »/INTEG« 
        └─⟦this⟧ 

UPAS Segment

SAVE filename: "INTEG"

 0010 REM  (+ HOVEDPROGRAM UDVIKLET AF IB OLSEN  -  1982 +)«nul»
 0020 PRINT "<27>AF"
 0030 PRINT "<27><12>"
 0040 DELAY = 1
 0050 PRINT TAB ( 10 ) ; "*** NUMERISK LOESNING AF ***"
 0060 PRINT TAB ( 10 ) ; "** DIFFERINTIALLIGNINGER **"
 0070 PRINT
 0080 PRINT
 0090 PRINT "PROGRAMMET KAN LØSE OP TIL TI FORSKELLIGE FØRSTEORDENS DIFFE-"
 0100 PRINT "RINTIALLIGNINGER AF NUMERISK VEJ. RESULTATET KOMMER UD SOM EN GRA-"
 0110 PRINT "FISK MODEL, HVOR SAMTLIGE LIGNINGER VIL BLIVE AFBILDET SOM FUNKTION"
 0120 PRINT "AF PARAMETEREN          AF PRAKTISKE GRUNDE HEDDER PARAMETEREN  "
 0130 PRINT " -T- OG  FUNKTIONSVAERDIEN  V(1....10)"
 0140 PRINT "EKSEMPEL: "
 0150 PRINT "         DX/DT = (A + BY)X"
 0160 PRINT "         DY/DT = (CX + D)Y"
 0170 PRINT "BLIVER:"
 0180 PRINT "         D(1)=(A+B*V(2))*V(1) *DT"
 0190 PRINT "         D(2)=(C*V(1)+D)*V(2) *DT"
 0200 PRINT
 0210 DIM DIF$ ( 30 )
 0220 INPUT "TAST -RETURN- NAR DU ER KLAR PAA OVERSTAAENDE !!" , DIF$
 0230 PRINT "<27><12>"
 0240 DELAY = 1
 0250 INPUT "INDTAST ANTAL DIFFERINTIALLIGNINGER : " , NUMDIF
 0255 EXEC START
 0260 CREATE "GEM" , 0
 0270 EXEC FILWORK
 0280 FOR I = 1 TO NUMDIF
 0290   ON ERR THEN GOTO 0330
 0300   OPEN FILE ( 0 , 3 ) "GEM"
 0310   OPEN FILE ( 0 , 3 ) "GEM"
 0330   ON ERR THEN GOTO 0370
 0340   PRINT "INDTAST D(" ; I ; ") = " ;
 0350   INPUT "" , DIF$
 0355   READ FIR$ , NEX$
 0360   WRITE FILE ( 0 ) " " , FIR$ , "LET D(" , NEX$ , ")=" , DIF$ , "<13><10>"
 0370   CLOSE
 0380   ENTER "GEM"
 0390   IF SYS ( 7 ) <> 42 THEN PRINT "DER  ER FEJL I LIGNINGEN,. PROEV IGEN!"
 0400   IF SYS ( 7 ) <> 42 THEN GOTO 0290
 0410   PRINT "INDTAST STARTVAERDIEN FOR V(" ; I ; "): " ;
 0420   INPUT "" , V ( I )
 0430 NEXT 
 0432 CLOSE
 0434 DELETE "GEM"
 0435 ON ERR THEN STOP «nul»  
 0440 DIM STEPV ( NUMDIF ) , MINV ( NUMDIF ) , A1 ( NUMDIF ) , A2 ( NUMDIF ) , A3 ( NUMDIF )
 0450 INPUT "INDTAST PARAMETEREMNS START- OG SLUT-  VAERDI : " , TBEGIN , TEND
 0460 LET DT = ( TEND - TBEGIN ) / 100
 0470 FOR I = 1 TO NUMDIF
 0480   LET VBEGIN ( I ) = V ( I )
 0490 NEXT 
 0500 FOR T = TBEGIN TO TEND STEP DT
 0510   EXEC MODEL
 0520   FOR I = 1 TO NUMDIF
 0530     LET V ( I ) = V ( I ) + D ( I )
 0540     IF V ( I ) > A1 ( I ) THEN LET A1 ( I ) = V ( I )
 0550     IF V ( I ) < A2 ( I ) THEN LET A2 ( I ) = V ( I )
 0560   NEXT 
 0570 NEXT 
 0580 FOR I = 1 TO NUMDIF
 0590   WHILE A1 ( I ) > 10 AND A2 ( I ) < - 10 DO
 0600     LET A1 ( I ) = A1 ( I ) / 10 ; A2 ( I ) = A2 ( I ) / 10 ; A3 ( I ) = A3 ( I ) + 1
 0610   ENDWHILE
 0620 NEXT 
 0630 LET ST = A1 ( 1 ) ; MI = A2 ( 1 )
 0640 FOR I = 2 TO NUMDIF
 0650   IF A1 ( I ) > ST THEN LET ST = A1 ( I )
 0660   IF A2 ( I ) < MI THEN LET MI = A2 ( I )
 0670 NEXT 
 0680 FOR I = 1 TO NUMDIF
 0690   LET A1 ( I ) = INT ( ST + 1 ) * 10 ^ A3 ( I )
 0700   LET MINV ( I ) = INT ( MI ) * 10 ^ A3 ( I )
 0710 NEXT 
 0720 EXEC RESTART
 0730 LET S = 700 / ( ST - MI )
 0740 FOR I = 1 TO NUMDIF
 0750   LET X = 25 + ( I - 1 ) * 50
 0760   CALL "GRAPH" , X , 60
 0770   CALL "OUTVECT" , X , 760
 0780   CALL "OUTVECT" , X + 4 , 756
 0790   CALL "OUTVECT" , X - 4 , 756
 0800   CALL "OUTVECT" , X , 760
 0810   CALL "GRAPH" , X - 25 , 760
 0820   CALL "ALPHA"
 0830   PRINT A1 ( I )
 0840   FOR J = 760 - S TO 60 STEP - S
 0850     CALL "GRAPH" , X - 4 , J
 0860     CALL "OUTVECT" , X + 4 , J
 0870   NEXT 
 0880   CALL "GRAPH" , X - 25 , 45
 0890   CALL "ALPHA"
 0900   PRINT MINV ( I )
 0910   CALL "GRAPH" , X - 25 , 20
 0920   CALL "ALPHA"
 0930   PRINT "V(" ; I ; ")"
 0940 NEXT 
 0950 LET Y = 60
 0960 IF MI < 0 THEN LET Y = - MI * S + 60
 0970 CALL "GRAPH" , X + 25 , Y
 0980 CALL "OUTVECT" , 1150 , Y
 0990 CALL "OUTVECT" , 1146 , Y - 4
 1000 CALL "OUTVECT" , 1146 , Y + 4
 1010 CALL "OUTVECT" , 1150 , Y
 1020 CALL "GRAPH" , 1155 , Y
 1030 CALL "ALPHA"
 1040 PRINT "T"
 1050 CALL "GRAPH" , 1135 , Y - 15
 1060 CALL "ALPHA"
 1070 PRINT TEND
 1080 LET S = ( 1125 - X ) / ( TEND - TBEGIN ) ; J = X + 25
 1090 IF TBEGIN < 0 THEN
 1100   LET MI = J - TBEGIN * S
 1110   CALL "GRAPH" , M1 , Y - 4
 1120   CALL "OUTVECT" , MI , Y + 4
 1130   CALL "GRAPH" , MI - 2 , Y - 19
 1140   CALL "ALPHA"
 1150   PRINT "0"
 1160 ENDIF 
 1180 FOR I = 1 TO NUMDIF
 1190   LET STEPV ( I ) = 700 / ( A1 ( I ) - MINV ( I ) )
 1200 NEXT 
 1210 EXEC RUNMODEL
 1220 FOR I = 1 TO NUMDIF
 1230   CALL "GRAPH" , 1150 , ( V ( I ) - MINV ( I ) ) * STEPV ( I ) + 53
 1240   CALL "ALPHA"
 1250   PRINT "V(" ; I ; ")"
 1260 NEXT 
 1270 PRINT "<27>AF"
 1280 END «nul»
 1300 PROC MODEL
 1310   LET D ( 1 ) = SIN ( V ( 1 ) ) * DT
 1320   REM  (*D2*)«nul»
 1330   REM  (*D3*)«nul»
 1340   REM  (*D4*)«nul»
 1350   REM  (*D5*)«nul»
 1360   REM  (*D6*)«nul»
 1370   REM  (*D7*)«nul»
 1380   REM  (*D8*)«nul»
 1390   REM  (*D9*)«nul»
 1400   REM  (*D10*)«nul»)
 1410 ENDPROC
 1500 PROC FILWORK
 1510   DATA "1310" , "1" , "1320" , "2" , "1330" , "3"
 1520   DATA "1340" , "4" , "1350" , "5" , "1360" , "6"
 1530   DATA "1370" , "7" , "1380" , "8" , "1390" , "1400" , "9" , "1410" , "10"
 1540   DIM FIR$ ( 4 ) , NEX$ ( 2 )
 1550 ENDPROC
 2000 PROC REPORT
 2010   FOR I = 1 TO NUMDIF
 2020     LET X = ( TLAST - TBEGIN ) * S + J ; Y = ( VLAST ( I ) - MINV ( I ) ) * STEPV ( I ) + 60
 2030     CALL "GRAPH" , X , Y
 2040     LET X = ( T - TBEGIN ) * S + J ; Y = ( V ( I ) - MINV ( I ) ) * STEPV ( I ) + 60
 2050     CALL "OUTVECT" , X , Y
 2060   NEXT 
 2070 ENDPROC +++REPORT+++«nul»
 9000 PROC RUNMODEL
 9001   IF TBEGIN >= TEND THEN
 9002     PRINT "ERROR:  START-VAERDIEN ER  STOERRE END SLUT-VAERDIEN"
 9003     STOP «nul»4 
 9004   ENDIF 
 9005   LET ABSERROR = ABS ( ABSERROR ) ; RELERROR = ABS ( RELERROR )
 9006   LET DTMIN = ABS ( DTMIN ) ; DTMAX = ABS ( DTMAX ) ; DT = ABS ( DT )
 9007   IF DTMAX = 0 THEN LET DTMAX = TEND - TBEGIN
 9008   IF DT = 0 THEN LET DT = DTMAX / 100
 9009   IF DT > DTMAX THEN LET DT = DTMAX
 9010   IF DTMIN = 0 THEN LET DTMIN = DT / 1000
 9011   IF DT < DTMIN THEN LET DTMIN = DT
 9012   IF RUNNO = 1 THEN
 9013     LET T = TBEGIN ; NEXTREP = TBEGIN
 9014     FOR I = 1 TO NUMDIF
 9015       LET VBEGIN ( I ) = V ( I )
 9016     NEXT 
 9017   ELSE 
 9018     IF T >= TEND THEN EXEC RESTART
 9019   ENDIF 
 9020   LET DTFULL = DT ; STOPCOND = 0
 9021   EXEC MODEL
 9022   IF ( REPINT > 0 AND NEXTREP = T ) OR REPINT = 0 THEN
 9023     EXEC REPORT
 9024     LET NEXTREP = T + REPINT
 9025   ENDIF 
 9026   IF T >= TEND OR STOPCOND THEN GOTO 9055
 9027   LET TLAST = T ; DT = DTFULL ; TNEXT = TLAST + DT
 9028   IF TNEXT > TEND THEN
 9029     LET TNEXT = TEND ; DT = TNEXT - TLAST
 9030   ELSE 
 9031     IF TNEXT > NEXTREP AND REPINT > 0 THEN
 9032       LET TNEXT = NEXTREP ; DT = TNEXT - TLAST
 9033     ENDIF 
 9034   ENDIF 
 9035   FOR I = 1 TO NUMDIF
 9036     LET VLAST ( I ) = V ( I ) ; DLAST ( I ) = D ( I )
 9037   NEXT 
 9038   EXEC TAKESTEP
 9039   WHILE NOT ERRORACC OR ( STOPCOND AND DT > DTMIN ) DO
 9040     IF DT <= DTMIN THEN
 9041       PRINT "ERROR: THE REQUESTED INTEGRATION ACCURACY"
 9042       PRINT "       CAN NOT BE ACHIEVED"
 9043       STOP «nul» 
 9044     ENDIF 
 9045     LET DT = DT / 2
 9046     IF DT < DTMIN THEN LET DT = DTMIN
 9047     LET DTFULL = DT ; TNEXT = TLAST + DT
 9048     EXEC TAKESTEP
 9049   ENDWHILE
 9050   IF ERRORLOW AND DT < DTMAX AND DT = DTFULL THEN
 9051     LET DTFULL = 2 * DTFULL
 9052     IF DTFULL > DTMAX THEN LET DTFULL = DTMAX
 9053   ENDIF 
 9054   GOTO 9022
 9055   LET RUNNO = RUNNO + 1 ; DT = DTFULL
 9056   IF REPINT < 0 THEN LET NEXTREP = TEND
 9057 ENDPROC ** KRUNMODEL ***«nul» 
 9058 PROC START
 9059   DIM V ( NUMDIF ) , D ( NUMDIF ) , VLAST ( NUMDIF ) , DLAST ( NUMDIF ) , VBEGIN ( NUMDIF )
 9060   LET RUNNO = 1 ; DT = 0 ; DTMIN = 0 ; DTMAX = 0 ; TBEGIN = 0 ; TEND = 0 ; REPINT = - 1
 9061   LET ABSERROR = 0 ; RELERROR = 0.0001 ; ERRORACC = 1 ; ERRORLOW = 0
 9062 ENDPROC ** START ***«nul»
 9063 PROC RESTART
 9064   LET T = TBEGIN ; NEXTREP = TBEGIN
 9065   FOR I = 1 TO NUMDIF
 9066     LET V ( I ) = VBEGIN ( I )
 9067   NEXT 
 9068 ENDPROC ** RESTART ***«nul»
 9500 PROC TAKESTEP
 9501   DIM A1 ( NUMDIF ) , A2 ( NUMDIF ) , A3 ( NUMDIF ) , A4 ( NUMDIF ) , A5 ( NUMDIF )
 9502   FOR I = 1 TO NUMDIF
 9503     LET TEMP = DT * DLAST ( I ) ; A1 ( I ) = TEMP
 9504     LET V ( I ) = VLAST ( I ) + 0.25 * TEMP
 9505   NEXT 
 9506   LET T = TLAST + 0.25 * DT
 9507   EXEC MODEL
 9508   FOR I = 1 TO NUMDIF
 9509     LET TEMP = DT * D ( I ) ; A2 ( I ) = TEMP
 9510     LET V ( I ) = VLAST ( I ) + ( 0.09375 * A1 ( I ) + 0.28125 * TEMP )
 9511   NEXT 
 9512   LET T = TLAST + 0.375 * DT
 9513   EXEC MODEL
 9514   FOR I = 1 TO NUMDIF
 9515     LET TEMP = DT * D ( I ) ; A3 ( I ) = TEMP
 9516     LET V ( I ) = VLAST ( I ) + ( 0.879381 * A1 ( I ) - 3.2772 * A2 ( I ) + 3.32089 * TEMP )
 9517   NEXT 
 9518   LET T = TLAST + 0.923077 * DT
 9519   EXEC MODEL
 9520   FOR I = 1 TO NUMDIF
 9521     LET TEMP = DT * D ( I ) ; A4 ( I ) = TEMP
 9522     LET DV = 2.03241 * A1 ( I ) - 8 * A2 ( I ) + 7.17349 * A3 ( I ) - 0.205897 * TEMP
 9523     LET V ( I ) = VLAST ( I ) + DV
 9524   NEXT 
 9525   LET T = TLAST + DT
 9526   EXEC MODEL
 9527   FOR I = 1 TO NUMDIF
 9528     LET TEMP = DT * D ( I ) ; A5 ( I ) = TEMP
 9529     LET DV = - 0.296296 * A1 ( I ) + 2 * A2 ( I ) - 1.38168 * A3 ( 1 )
 9530     LET V ( I ) = VLAST ( I ) + ( DV + 0.452973 * A4 ( I ) - 0.275 * TEMP )
 9531   NEXT 
 9532   LET T = TLAST + 0.5 * DT
 9533   EXEC MODEL
 9534   LET I = 1 ; ERRORACC = 1 ; ERRORLOW = 1
 9535   WHILE I <= NUMDIF AND ERRORACC DO
 9536     LET DV = 0.00277778 * A1 ( I ) - 0.0299415 * A3 ( I ) - 0.0291999 * A4 ( I )
 9537     LET IERROR = DV + 0.02 * A5 ( I ) + 0.0363636 * DT * D ( I )
 9538     LET DV = 0.115741 * A1 ( I ) + 0.548928 * A3 ( I ) + 0.535331 * A4 ( I ) - 0.2 * A5 ( I )
 9539     LET V ( I ) = VLAST ( I ) + DV + IERROR
 9540     LET TEMP = ABSERROR + RELERROR * ABS ( V ( I ) ) ; IERROR = ABS ( IERROR )
 9541     LET ERRORACC = IERROR <= TEMP ; ERRORLOW = ERRORLOW AND IERROR < 0.02 * TEMP
 9542     LET I = I + 1
 9543   ENDWHILE
 9544   LET T = TNEXT
 9545   EXEC MODEL
 9546 ENDPROC ** TAKESTEP ***«nul»

UDAS Segment

    FNA definition = 0xffff
    FNB definition = 0xffff
    FNC definition = 0xffff
    FND definition = 0xffff
    FNE definition = 0xffff
    FNF definition = 0xffff
    FNG definition = 0xffff
    FNH definition = 0xffff
    FNI definition = 0xffff
    FNJ definition = 0xffff
    FNK definition = 0xffff
    FNL definition = 0xffff
    FNM definition = 0xffff
    FNN definition = 0xffff
    FNO definition = 0xffff
    FNP definition = 0xffff
    FNQ definition = 0xffff
    FNR definition = 0xffff
    FNS definition = 0xffff
    FNT definition = 0xffff
    FNU definition = 0xffff
    FNV definition = 0xffff
    FNW definition = 0xffff
    FNX definition = 0xffff
    FNY definition = 0xffff
    FNZ definition = 0xffff
    FN[ definition = 0xffff
    FN\ definition = 0xffff
    FN] definition = 0xffff
    GOSUB-RETURN stack pointer = 0x0001
      stack[0] = 0x01ee
      stack[1] = 0x0302
      stack[2] = 0x02f9
      stack[3] = 0x02f9
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    FOR-NEXT stack pointer = 0x0000
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
      Var# = 0x0084
      Loop Top = 0x0398
      To Val = 1   (0x41100000)
      Step Val = 1   (0x41100000)
      Var# = 0x0084
      Loop Top = 0x0302
      To Val = 1   (0x41100000)
      Step Val = 1   (0x41100000)
      Var# = 0x0000
      Loop Top = 0x0000
      To Val = 0   (0x00000000)
      Step Val = 0   (0x00000000)
    REPEAT-UNTIL stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    WHILE-ENDWHILE stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
    IF-ELSE stack pointer = 0x0000
      stack[0] = 0x0000
      stack[1] = 0x0000
      stack[2] = 0x0000
      stack[3] = 0x0000
      stack[4] = 0x0000
      stack[5] = 0x0000
      stack[6] = 0x0000
Variables:
    0x80 0xffff 0x00 
    0x81 0x0000 0x02 DIF$
    0x82 0x0012 0x00 NUMDIF
    0x83 0xffff 0x00 FILWORK
    0x84 0xffff 0x00 I
    0x85 0xffff 0x00 V
    0x86 0xffff 0x00 STEPV
    0x87 0xffff 0x00 MINV
    0x88 0xffff 0x00 A1
    0x89 0xffff 0x00 A2
    0x8a 0xffff 0x00 A3
    0x8b 0xffff 0x00 TBEGIN
    0x8c 0xffff 0x00 TEND
    0x8d 0xffff 0x00 REPINT
    0x8e 0xffff 0x00 VBEGIN
    0x8f 0xffff 0x00 T
    0x90 0xffff 0x00 MODEL
    0x91 0xffff 0x00 D
    0x92 0xffff 0x00 ENDWHILW
    0x93 0xffff 0x00 ST
    0x94 0xffff 0x00 MI
    0x95 0xffff 0x00 RESTART
    0x96 0xffff 0x00 S
    0x97 0xffff 0x00 X
    0x98 0xffff 0x00 J
    0x99 0xffff 0x00 Y
    0x9a 0xffff 0x00 M1
    0x9b 0xffff 0x00 RUNMODEL
    0x9c 0xffff 0x00 REPORT
    0x9d 0xffff 0x00 TLAST
    0x9e 0xffff 0x00 VLAST
    0x9f 0xffff 0x02 FIRST$
    0xa0 0xffff 0x02 FIR$
    0xa1 0xffff 0x02 NEX$
    0xa2 0xffff 0x00 ENDF
    0xa3 0xffff 0x00 DT
    0xa4 0xffff 0x00 LIDST
    0xa5 0xffff 0x00 TT
    0xa6 0xffff 0x00 START
    0xa7 0xffff 0x00 ABSERROR
    0xa8 0xffff 0x00 RELERROR
    0xa9 0xffff 0x00 DTMIN
    0xaa 0xffff 0x00 DTMAX
    0xab 0xffff 0x00 RUNNO
    0xac 0xffff 0x00 NEXTREP
    0xad 0xffff 0x00 DTFULL
    0xae 0xffff 0x00 STOPCOND
    0xaf 0xffff 0x00 TNEXT
    0xb0 0xffff 0x00 DLAST
    0xb1 0xffff 0x00 TAKESTEP
    0xb2 0xffff 0x00 ERRORACC
    0xb3 0xffff 0x00 ERRORLOW
    0xb4 0xffff 0x00 A4
    0xb5 0xffff 0x00 A5
    0xb6 0xffff 0x00 TEMP
    0xb7 0xffff 0x00 DV
    0xb8 0xffff 0x00 IERROR

Wrapper

.magic = 0x4e32
.u_pas = 0x0a82  // Length of UPAS in words
.u_das = 0x0199  // Length of UDAS in words
.u_dvs = 0x0185  // Start på savede variabel indhold (word adr)
.u_nds = 0x0860  // Address på næste prog.sætning (word adr)
.u_cps = 0x0851  // Address på curr prog.sætning (word adr)
.u_tll = 0x0048  // Page størrelse
.u_tts = 0x000e  // TAP størrelse
.u_ran = 0x0001  // Random tal
.u_cdl = 0x0006  // Current DATA sætning ptr
.u_cdb = 0x0000  // Current DATA byte ptr
.u_esa = 0x0042  // ON ESE (word adr)
.u_era = 0x0000  // ON ERR (word adr)
.u_cas = 0xffff  // CASE dybde
.u_las = 0xffff  // last (-1)