home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 100-199 / ff158.lzh / MemBoardTest / main.mod < prev    next >
Text File  |  1988-10-02  |  23KB  |  455 lines

  1. MODULE main;
  2.  
  3.  
  4. (*  MemoryBoardTest (alias Main) Copyright By: George Vokalek
  5.                                                South Australia
  6.                                                
  7.     This code was written for production testing of memory boards for A1000's.
  8.     The boards were not autoconfiguring so the code does not allocate memory 
  9.     before it starts stomping on it, so it will make systems with autoconfig
  10.     boards crash.
  11.     
  12.     Feel free to use/modify this program, just leave this babble at the 
  13.     front intact.  Good luck and Good Memory!
  14.     
  15. *)
  16.  
  17.  
  18. FROM InOut IMPORT WriteLn,WriteString,WriteInt;
  19. FROM Strings IMPORT String, Concat, SetTerminator, Length;
  20. FROM SYSTEM IMPORT ADR, WORD,BYTE,NULL,ADDRESS;
  21. FROM Pens IMPORT SetAPen,SetDrMd,Move,Draw,RectFill;
  22. FROM Rasters IMPORT RastPort,RastPortPtr;
  23. FROM Ports IMPORT GetMsg, ReplyMsg, MessagePtr, WaitPort;
  24. FROM Colors IMPORT ColorMap, ColorMapPtr;
  25. FROM Windows IMPORT OpenWindow, CloseWindow;
  26. FROM Text IMPORT Text;
  27. FROM Conversions IMPORT ConvertToString;
  28. FROM myscreen IMPORT RP,InitScreen,EndMake,ourwindow,stadrgadg,enadrgadg,
  29.                      stadrresult,enadrresult,errresult,stgadgstring,
  30.                      engadgstring,errgadgstring,Refresh, looperresult;
  31. FROM Intuition IMPORT IDCMPFlags, IDCMPFlagSet,IntuiMessage, IntuiMessagePtr,
  32.                       GadgetPtr, Requester,SelectDown, SelectUp;
  33. FROM GraphicsLibrary IMPORT DrawingModes,DrawingModeSet;
  34. FROM Gadgets IMPORT RefreshGadgets;
  35. FROM mtest IMPORT Convert, HexChar, DoRandom, DoLinear, DoBits;
  36. FROM supertest IMPORT DoSuperBits;
  37. FROM mdraw IMPORT drawpixel,initmatrix;
  38. FROM mygadg IMPORT messtext,modetext,filestatustext;
  39. FROM DOSLibrary IMPORT DOSBase, DOSName;
  40. FROM DOSCodeLoader IMPORT Execute;
  41. FROM Libraries IMPORT OpenLibrary, CloseLibrary;
  42. FROM LongInOut IMPORT WriteLongCard;
  43.  
  44. TYPE modetype = (nomode,linear,random,bits,super) ;
  45.      lastgadgettype = (none,startaddress,endaddress,errornumber,start,reread,
  46.                        inc,dec,saveg,dont,randwise,linwise,bitwise,superwise,
  47.                        mess,nomess,loopcounter, palettecall);
  48.       
  49. VAR 
  50.    lastgadget, laststringgadget : lastgadgettype;
  51.    k : LONGCARD;
  52.    i,l : CARDINAL;
  53.    class : IDCMPFlagSet;
  54.    code  : CARDINAL; 
  55.    mesg : IntuiMessagePtr;
  56.    OK, quit, done, save, domess : BOOLEAN;
  57.    mode : modetype;
  58.    testadr : LONGCARD;
  59.    tempadr,startad,endad : ADDRESS;
  60.    mx,my, errorlimit,loops : INTEGER;
  61.    igadg,gtemp : GadgetPtr;
  62.    gadgid,px,py : CARDINAL;
  63.    dummy : Requester;
  64.    nomodemessage, startmessage, stopmessage, blankmessage, tempstring : String;
  65.    
  66.  
  67.  
  68.  
  69. BEGIN
  70.   startmessage  := 'Starting test now   ';
  71.   stopmessage   := 'Test Aborted        ';
  72.   nomodemessage := 'No Mode Selected    ';
  73.   blankmessage  := '                    ';
  74.        
  75.     mode := bits;
  76.     lastgadget := none;
  77.     laststringgadget := none;
  78.     save := FALSE;
  79.     domess := FALSE;
  80.  
  81.     IF InitScreen(640,400,3) THEN
  82.       initmatrix;
  83.  
  84.       k:=1000000;
  85.       quit := FALSE;
  86.       domess := TRUE;
  87.       save := FALSE; 
  88.       
  89.       WHILE NOT quit DO
  90.          mesg:=IntuiMessagePtr(WaitPort(ourwindow^.UserPort)); 
  91.          (* note that waitport() does not pull the message off the queue!! *)
  92.          mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  93.          WHILE (mesg=NULL) DO
  94.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  95.             END; (*for *)
  96.          IF k=0 THEN
  97.             quit:=TRUE;
  98.          ELSIF mesg<>NULL THEN 
  99.             class := mesg^.Class;
  100.             code  := mesg^.Code;
  101.             ReplyMsg(MessagePtr(mesg));
  102.  
  103.             IF IDCMPFlags(CloseWindowFlag) IN class THEN
  104.                quit:=TRUE;
  105.                END; (* if *)
  106.             IF IDCMPFlags(ActiveWindow) IN class THEN
  107.                END; (* if *)
  108.             IF IDCMPFlags(InactiveWindow) IN class THEN
  109.                END; (* if *)
  110.             IF IDCMPFlags(GadgetDown) IN class THEN
  111.                igadg := GadgetPtr(mesg^.IAddress);
  112.                gadgid := igadg^.GadgetID;
  113.  
  114.                CASE gadgid OF
  115.                   1: CASE mode OF
  116.                         random : modetext:='LINEAR TEST   ';
  117.                                  lastgadget:=randwise;
  118.                                  mode:=linear;                
  119.                       | linear : modetext:='BIT TEST      ';
  120.                                  lastgadget:=linwise;
  121.                                  mode:=bits;                  
  122.                       | bits   : modetext:='SUPER BIT TEST';
  123.                                  lastgadget:=bitwise;
  124.                                  mode:=super;                 
  125.                       | super  : modetext:='RANDOM TEST   ';
  126.                                  lastgadget:=superwise;
  127.                                  mode:=random;             
  128.                       | ELSE;
  129.                         END; (* case *)                               |
  130.                   3: lastgadget := start;                             |
  131.                   4: lastgadget := reread;                            |
  132.                   5: lastgadget := dec;
  133.                      CASE laststringgadget OF
  134.                         startaddress: startad:=Convert(stadrresult);
  135.                                       DEC(startad,2);
  136.                                       ConvertToString(LONGCARD(startad),
  137.                                                       16,
  138.                                                       FALSE,
  139.                                                       stadrresult,
  140.                                                       done);          |
  141.                         endaddress:   endad  :=Convert(enadrresult);
  142.                                       DEC(endad,2);
  143.                                       ConvertToString(LONGCARD(endad),
  144.                                                       16,
  145.                                                       FALSE,
  146.                                                       enadrresult,
  147.                                                       done);          |
  148.                         errornumber : errorlimit  := INTEGER(Convert(errresult));
  149.                                       IF errorlimit > 0 THEN
  150.                                          DEC(errorlimit,1);
  151.                                          END; (* if *)
  152.                                       ConvertToString(LONGCARD(errorlimit),
  153.                                                       16,
  154.                                                       FALSE,
  155.                                                       errresult,
  156.                                                       done);          | 
  157.                         loopcounter : loops       := INTEGER(Convert(looperresult));
  158.                                       IF loops > 0 THEN 
  159.                                          DEC(loops,1);
  160.                                          END; (* if *)
  161.                                       ConvertToString(LONGCARD(loops),
  162.                                                       16,
  163.                                                       FALSE,
  164.                                                       looperresult,
  165.                                                       done);          | 
  166.                         ELSE ;
  167.                         END; (* case *)                               |
  168.                         
  169.                   6: lastgadget := inc;
  170.                      CASE laststringgadget OF
  171.                         startaddress: startad:=Convert(stadrresult);
  172.                                       INC(startad,2);
  173.                                       ConvertToString(LONGCARD(startad),
  174.                                                       16,
  175.                                                       FALSE,
  176.                                                       stadrresult,
  177.                                                       done);          |
  178.                         endaddress:   endad  :=Convert(enadrresult);
  179.                                       INC(endad,2);
  180.                                       ConvertToString(LONGCARD(endad),
  181.                                                       16,
  182.                                                       FALSE,
  183.                                                       enadrresult,
  184.                                                       done);          |
  185.                         errornumber : errorlimit  := INTEGER(Convert(errresult));
  186.                                       INC(errorlimit,1);
  187.                                       ConvertToString(LONGCARD(errorlimit),
  188.                                                       16,
  189.                                                       FALSE,
  190.                                                       errresult,
  191.                                                       done);          | 
  192.                         loopcounter : loops       := INTEGER(Convert(looperresult));
  193.                                       INC(loops,1);
  194.                                       ConvertToString(LONGCARD(loops),
  195.                                                       16,
  196.                                                       FALSE,
  197.                                                       looperresult,
  198.                                                       done);          | 
  199.                         ELSE ;
  200.                         END; (* case *)                               |
  201.                         
  202.                   7: CASE save OF
  203.                         TRUE  : filestatustext:='NOT SAVING    ';
  204.                                 lastgadget:=dont;
  205.                                 save:=FALSE;                    |
  206.                         FALSE : filestatustext:='SAVING TO FILE';
  207.                                 lastgadget:=saveg;
  208.                                 save:=TRUE;                     |
  209.                         ELSE;
  210.                         END; (* case *)                               |
  211.                         
  212.                   8: lastgadget := palettecall;
  213.                      DOSBase := OpenLibrary(DOSName,0);
  214.                      OK := Execute('palette',0,0);
  215.                      CloseLibrary(DOSBase);                           |
  216.                  10: laststringgadget := startaddress;
  217.                      lastgadget       := startaddress;                |
  218.                  11: laststringgadget := endaddress;
  219.                      lastgadget       := endaddress;                  |
  220.                  12: laststringgadget := errornumber;
  221.                      lastgadget       := errornumber;                 | 
  222.                  13: laststringgadget := loopcounter;
  223.                      lastgadget       := loopcounter;                 | 
  224.                  20: CASE domess OF
  225.                         TRUE  : messtext   := 'QUIET         ';
  226.                                 lastgadget := mess;
  227.                                 domess     := FALSE;                |
  228.                         FALSE : messtext   := 'DISPLAY ERRORS';
  229.                                 lastgadget := nomess;
  230.                                 domess     := TRUE;                 |
  231.                         ELSE;
  232.                         END; (* case *)
  233.                   ELSE ;
  234.                   END; (* case *)
  235.                 END; (* if *)
  236.  
  237.             IF (IDCMPFlags(MouseButtons) IN class) AND (code = SelectUp) THEN
  238.                Refresh;
  239.                END; (* if *)
  240.                
  241.             IF (IDCMPFlags(MouseButtons) IN class) AND (code = SelectDown) THEN
  242.                mx := mesg^.MouseX;
  243.                my := mesg^.MouseY;
  244.                IF (mx > 325) AND (mx < 640) AND (my > 43) AND (my < 310) THEN
  245.                   px := CARDINAL((mx - 325) DIV 20);
  246.                   py := CARDINAL((my - 43) DIV 15);
  247.  
  248.                   CASE laststringgadget OF
  249.                      startaddress: ConvertToString(LONGCARD(LONGINT(px*16+py)
  250.                                                              *LONGINT(65536)),
  251.                                                    16,
  252.                                                    FALSE,
  253.                                                    stadrresult,
  254.                                                    done);  
  255.                                    IF px = 0 THEN
  256.                                       stadrresult[6] := CHR(0);
  257.                                       stadrresult[5] := stadrresult[4];
  258.                                       stadrresult[4] := stadrresult[3];
  259.                                       stadrresult[3] := stadrresult[2];
  260.                                       stadrresult[2] := stadrresult[1];
  261.                                       stadrresult[1] := stadrresult[0];
  262.                                       stadrresult[0] := ' ';
  263.                                       IF py = 0 THEN
  264.                                          stadrresult := '000000';
  265.                                          END; (* if *)
  266.                                       END; (* if *)
  267.                                    stgadgstring.NumChars := 6;    |
  268.  
  269.                      endaddress  : ConvertToString(LONGCARD(LONGINT(px*16+py)
  270.                                                            *LONGINT(65536)),
  271.                                                    16,
  272.                                                    FALSE,
  273.                                                    enadrresult,
  274.                                                    done);   
  275.                                    IF px = 0 THEN
  276.                                       enadrresult[6] := CHR(0);
  277.                                       enadrresult[5] := enadrresult[4];
  278.                                       enadrresult[4] := enadrresult[3];
  279.                                       enadrresult[3] := enadrresult[2];
  280.                                       enadrresult[2] := enadrresult[1];
  281.                                       enadrresult[1] := enadrresult[0];
  282.                                       enadrresult[0] := ' ';
  283.                                       IF py = 0 THEN
  284.                                          enadrresult := '000000';
  285.                                          END; (* if *)
  286.                                       END; (* if *)
  287.                                    engadgstring.NumChars := 6;  |
  288.  
  289.                      errornumber : ConvertToString(LONGCARD(LONGINT(px*16+py)
  290.                                                            *LONGINT(16)),
  291.                                                    16,
  292.                                                    FALSE,
  293.                                                    errresult,
  294.                                                    done);   
  295.                                    IF px = 0 THEN
  296.                                       errresult[4] := CHR(0);
  297.                                       errresult[3] := errresult[2];
  298.                                       errresult[2] := errresult[1];
  299.                                       errresult[1] := errresult[0];
  300.                                       errresult[0] := ' ';
  301.                                       IF py = 0 THEN
  302.                                          errresult := '0000';
  303.                                          END; (* if *)
  304.                                       END; (* if *)
  305.                                    errgadgstring.NumChars := 4;  |
  306.  
  307.                      loopcounter : ConvertToString(LONGCARD(LONGINT(px*16+py)
  308.                                                            *LONGINT(16)),
  309.                                                    16,
  310.                                                    FALSE,
  311.                                                    looperresult,
  312.                                                    done);   
  313.                                    IF px = 0 THEN
  314.                                       looperresult[4] := CHR(0);
  315.                                       looperresult[3] := looperresult[2];
  316.                                       looperresult[2] := looperresult[1];
  317.                                       looperresult[1] := looperresult[0];
  318.                                       looperresult[0] := ' ';
  319.                                       IF py = 0 THEN
  320.                                          looperresult := '0001';
  321.                                          END; (* if *)
  322.                                       END; (* if *)
  323.                                    errgadgstring.NumChars := 4;  |
  324.  
  325.                      ELSE ;
  326.                      END; (* case *)                                
  327.  
  328.                ELSIF (mx > 325) AND (mx < 640) AND (my > 25) AND (my < 40) THEN
  329.                   px := CARDINAL((mx - 325) DIV 20);
  330.                                        
  331.                   CASE laststringgadget OF
  332.                      startaddress: stadrresult[0] := stadrresult[1];
  333.                                    stadrresult[1] := stadrresult[2];
  334.                                    stadrresult[2] := stadrresult[3];
  335.                                    stadrresult[3] := stadrresult[4];
  336.                                    stadrresult[4] := stadrresult[5];
  337.                                    stadrresult[5] := HexChar(INTEGER(px));
  338.                                    stgadgstring.NumChars := 6;         |
  339.  
  340.                      endaddress:   enadrresult[0] := enadrresult[1];
  341.                                    enadrresult[1] := enadrresult[2];
  342.                                    enadrresult[2] := enadrresult[3];
  343.                                    enadrresult[3] := enadrresult[4];
  344.                                    enadrresult[4] := enadrresult[5];
  345.                                    enadrresult[5] := HexChar(INTEGER(px));
  346.                                    engadgstring.NumChars := 6;         |
  347.  
  348.                      errornumber : errresult[0] := errresult[1];
  349.                                    errresult[1] := errresult[2];
  350.                                    errresult[2] := errresult[3];
  351.                                    errresult[3] := HexChar(INTEGER(px));
  352.                                    errgadgstring.NumChars := 4;         | 
  353.  
  354.                      loopcounter : looperresult[0] := looperresult[1];
  355.                                    looperresult[1] := looperresult[2];
  356.                                    looperresult[2] := looperresult[3];
  357.                                    looperresult[3] := HexChar(INTEGER(px));
  358.                                    errgadgstring.NumChars := 4;         | 
  359.  
  360.                      ELSE ;
  361.                      END; (* case *)
  362.                   END; (* elsif top row hit *)
  363.                END; (* if mousebutton event *)
  364.             IF IDCMPFlags(GadgetUp) IN class THEN
  365.                CASE lastgadget OF
  366.                   start: startad    := Convert(stadrresult);
  367.                          (* WriteLongCard(LONGCARD(startad),10);
  368.                          WriteLn; *)
  369.                          endad      := Convert(enadrresult);
  370.                          (* WriteLongCard(LONGCARD(endad),10);
  371.                          WriteLn; *)
  372.                          errorlimit := INTEGER(Convert(errresult));
  373.                          loops      := INTEGER(Convert(looperresult));
  374.                          tempstring := looperresult ;
  375.                          
  376.                          WHILE loops > 0 DO
  377.                             initmatrix;
  378.                             CASE mode OF
  379.                                random : DoRandom(startad,endad,errorlimit,save,
  380.                                                            TRUE, domess) 
  381.                              | linear : DoLinear(startad,endad,errorlimit,save,
  382.                                                            TRUE, domess) 
  383.                              | bits   : DoBits(startad,endad,errorlimit,save,
  384.                                                            TRUE, domess) 
  385.                              | super  : DoSuperBits(startad,endad,errorlimit,save,
  386.                                                            TRUE, domess)
  387.                              | ELSE
  388.                                   SetAPen(RP,4);
  389.                                   Move(RP,30,250);
  390.                                   Text(RP,nomodemessage,20);
  391.                                END ; (* case *)               
  392.                             DEC(loops,1);
  393.                             ConvertToString(LONGCARD(loops),
  394.                                             16,
  395.                                                FALSE,
  396.                                             looperresult,
  397.                                             done);          
  398.                             l:=Length(looperresult);
  399.                             FOR i:=0 TO 3-l DO
  400.                                looperresult[l+i]:=' ';
  401.                                END; (* for *)
  402.                             looperresult[4]:=CHR(0);
  403.                             Refresh;
  404.                             END; (* while *)
  405.                          looperresult := tempstring;
  406.                          Refresh;                                            |
  407.                             
  408.                  reread: startad    := Convert(stadrresult);
  409.                          endad      := Convert(enadrresult);
  410.                          errorlimit := INTEGER(Convert(errresult));
  411.                          loops      := INTEGER(Convert(looperresult));
  412.                          tempstring := looperresult;
  413.                          
  414.                          WHILE loops > 0 DO
  415.                             initmatrix;
  416.                             CASE mode OF
  417.                                random : DoRandom(startad,endad,errorlimit,save,
  418.                                                            FALSE, domess) 
  419.                              | linear : DoLinear(startad,endad,errorlimit,save,
  420.                                                            FALSE, domess) 
  421.                              | bits   : DoBits(startad,endad,errorlimit,save,
  422.                                                            FALSE, domess) 
  423.                              | super  : DoSuperBits(startad,endad,errorlimit,save,
  424.                                                            FALSE, domess);
  425.                              | ELSE
  426.                                   SetAPen(RP,4);
  427.                                   Move(RP,30,250);
  428.                                   Text(RP,nomodemessage,20);
  429.                                   END; (* case *)               
  430.                             DEC(loops,1);
  431.                             ConvertToString(LONGCARD(loops),
  432.                                             16,
  433.                                             FALSE,
  434.                                             looperresult,
  435.                                             done);          
  436.                             l:=Length(looperresult);
  437.                             FOR i:=0 TO 3-l DO
  438.                                looperresult[l+i]:=' ';
  439.                                END; (* for *)
  440.                             looperresult[4]:=CHR(0);
  441.                             Refresh;
  442.                             END; (* while *)
  443.                          looperresult := tempstring;
  444.                          Refresh;                                            |
  445.  
  446.                    ELSE  Refresh;
  447.                    END; (* case *)
  448.                END; (* if gadget upped *)  
  449.             END; (* elsif mesg <> null *)
  450.          END; (*while *)
  451.      EndMake;      
  452.    END; (* if *)
  453. END main.
  454.  
  455.