home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / MEMORIA / QUADRAM.ZIP / MEMT512.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1983-09-19  |  9.0 KB  |  230 lines

  1. 100  '************* MEMT512.BAS ****************
  2. 200  '*           REVISION 8/22/83             *
  3. 300  '*         QUADRAM CORPORATION            *
  4. 400  '*           4357 PARK DRIVE              *
  5. 500  '*         NORCROSS, GA  30093            *
  6. 600  '*   Machine code memory check routine,   *
  7. 700  '*   subprogram of QUADTEST program.      *
  8. 800  '*         For Quad 512+ board.           *
  9. 900  '******************************************
  10. 1000  '
  11. 1100  '********* INITIALIZE **************
  12. 1106  SCREEN 0:WIDTH 80:KEY OFF
  13. 1200  IF CH$="" THEN CLEAR ,18000
  14. 1205  KEY (10) ON:ON KEY (10) GOSUB 47000        'escape to main program
  15. 1210  FALSE=0:TRUE=NOT FALSE
  16. 1215  PC.XT=TRUE
  17. 1220  DATA &H55,&HAA,&H10,&HEB,&H1E
  18. 1230  DEF SEG=&HC800:FOR I=0 TO 4:READ A:IF PEEK(I)<>A THEN PC.XT=FALSE
  19. 1240  NEXT I
  20. 1250  DEF SEG
  21. 1300  IF FRE(0)>4500 THEN DOS.2.0=FALSE ELSE DOS.2.0=TRUE
  22. 1500  DIM MEMCODE%(164),MEM.ERR%(15)
  23. 1510  DEF FNF$(X)=STRING$(4-LEN(HEX$(X))," ")+HEX$(X)+" "
  24. 1520  POKE 106,0         'Clear BASICA input buffer
  25. 1600  GOSUB 40000        'Variable Passer
  26. 1610  CLS
  27. 1620  LOCATE 25,5:COLOR 23:PRINT "F10 <ENTER>":LOCATE 25,16:COLOR 7:PRINT " to return to QUADTEST diagnostics main menu."
  28. 1700  IF MEM.SIZE=64 OR NOT DOS.2.0 OR PC.XT THEN 1800
  29. 1710  PRINT TAB(5)"System switches should be set to 64K for 2.0 DOS"
  30. 1720  PRINT TAB(5)"or memory allocation error may occur when exiting BASIC."
  31. 1800  PM%=0:EM%=0      'Pass number and total errors variables
  32. 6200  GOTO 9600
  33. 6400  GOSUB 11700        'mem check
  34. 6500  PRINT
  35. 6700  GOTO 6400
  36. 7600  '******* ALL FUNCTIONS CHECK *********
  37. 7700  GOSUB 11700        'mem check
  38. 7800  GOTO 48000
  39. 9600  '*********** MEMORY CHECK ****************
  40. 9620  GOSUB 41000        'Print menu
  41. 10300  BEEP:PRINT:PRINT TAB(5)"How much expansion memory is installed? ";:CHO$=INPUT$(1):PRINT CHO$:IF CHO$="H" OR CHO$="h" THEN GOSUB 41600
  42. 10500  XM%=VAL("&H"+CHO$)     'XM%=Segment # of last segment to check (1 to E)
  43. 10505  XM%=XM%+S.B.-1:IF XM%>10 THEN XM%=XM%+1
  44. 10510  IF XM%<S.B. OR XM%>14 THEN 9620
  45. 10530  LOCATE 25,9:PRINT "       ";:LOCATE 14,1
  46. 10600  R.B.N.=1:PRINT "         ";:FOR I=S.B. TO XM%:IF I<>11 THEN PRINT STR$(R.B.N.*64);"K";:R.B.N.=R.B.N.+1
  47. 10620  NEXT I:PRINT
  48. 10700  'First set up USR memory check subroutine
  49. 10710  DEF SEG
  50. 10800  READ MCSZ:FOR I=0 TO (MCSZ/2-1):READ C,D:ICODE!=C+256*D:IF ICODE!>=32768 THEN MEMCODE%(I)=ICODE!-65536 ELSE MEMCODE%(I)=ICODE!
  51. 10810  NEXT I
  52. 10900  OUT &H61,(INP(&H61) OR &H20)
  53. 11600  IF CH$="1" OR CH$="" THEN 6400
  54. 11650  IF CH$="A" OR CH$="S" THEN 7600
  55. 11660  END
  56. 11700  '********** MEMORY CHECK SUBROUTINE **************
  57. 11800  'Calls USR subroutine to do memory check for one complete pass
  58. 11900  PM%=PM%+1
  59. 12000  PRINT STRING$(70," ");:LOCATE CSRLIN,1:PRINT"PASS";PM%;TAB(10);
  60. 12210  ME=0        'Initialize memory error code variable
  61. 12220              'so MEMCODE%() won't get moved.
  62. 12300  FOR IME%=S.B. TO XM%
  63. 12305  IF IME%=11 THEN 12700
  64. 12306  OUT &HA0,0         'DISABLE NMI
  65. 12307  OUT &H61,(INP(&H61) AND &HDF)       'enable i/o channel check
  66. 12310  DEF USR0=VARPTR(MEMCODE%(0))
  67. 12500  ME = USR0(IME%):GOSUB 47200:IF ME=0 THEN PRINT".... ";:GOTO 12700   'gosub to normalize NMI
  68. 12510  SOUND 60,5
  69. 12520  MEM.ERR%(IME%-S.B.+1)=ME:IF CH$<>"A" AND CH$<>"S" THEN Y=CSRLIN:X=POS(0):LOCATE 25,5:PRINT STRING$(60," ");:LOCATE 25,5:COLOR 31:PRINT "Memory Error detected. F10 for visual location.";:COLOR 7:LOCATE Y,X
  70. 12600  PRINT FNF$(ME);:EM%=EM%+1
  71. 12700  NEXT
  72. 12800  PRINT" TOT ERRS=";EM%;
  73. 12900  RETURN
  74. 40000  '****** VARIABLE RECEIVER *********
  75. 40010  'Chaining won't work.
  76. 40020  DEF SEG=0
  77. 40030  POKE 1050,PEEK(1052)      'Clear keyboard buffer
  78. 40040  MEM.SIZE=PEEK(1043)+256*PEEK(1044)
  79. 40050  IO.MEM.SIZE=PEEK(1045)+256*PEEK(1046)
  80. 40060  IF PEEK(65521)=206 AND PEEK(65522)=216 THEN XM%=PEEK(65524):PM%=PEEK(65525)+256*PEEK(65526):EM%=PEEK(65527)+256*PEEK(65528):S.B.=PEEK(65529):RETURN 10700
  81. 40070  DEF SEG
  82. 40080  RETURN
  83. 41000  '******* PRINT MEMORY TEST MENU ********
  84. 41005  LOCATE 1,10:PRINT "Expansion Memory Test"
  85. 41020  '* Determine Start Block and Column Length of menu
  86. 41022  IF S.B.<>0 THEN 41040
  87. 41025  C.L.=7
  88. 41031  PRINT
  89. 41032  PRINT "How much memory is installed on the PC system board (1-4)?"
  90. 41033  PRINT
  91. 41034  PRINT "1.  64K":PRINT "2. 128K":PRINT "3. 192K":PRINT "4. 256K"
  92. 41035  PRINT
  93. 41036  Q1$=INPUT$(1):S.B.=VAL(Q1$)
  94. 41038  IF S.B.<1 OR S.B.>4 THEN 41032
  95. 41039  LOCATE 24,1:FOR I=1 TO 24:PRINT:NEXT I
  96. 41040  COL=5
  97. 41050  LN=3
  98. 41055  R.B.N.=1   'relative block number
  99. 41060  FOR I=S.B. TO 14
  100. 41070  IF I=11 THEN GOTO 41120
  101. 41080  LOCATE LN,COL
  102. 41090  PRINT HEX$(R.B.N.);" - ";STR$(R.B.N.*64);"K RAM"
  103. 41100  R.B.N.=R.B.N.+1
  104. 41110  IF LN=C.L.+2 THEN LN=3:COL=20 ELSE LN=LN+1
  105. 41120  NEXT I
  106. 41130  LOCATE 3+C.L.,20:PRINT "H -  HELP"
  107. 41140  RETURN
  108. 41600  '*********** MEMORY TEST HELP SUBROUTINE *********
  109. 41700  CTR=1
  110. 41800  CLS:OPEN "I",#1,"HELPFILE.TXT"
  111. 41900  WHILE NOT EOF(1)
  112. 42000  LINE INPUT #1,L$:PRINT L$:CTR=CTR+1
  113. 42100  IF (CTR MOD 23)=0 THEN LOCATE 25,1:LINE INPUT "PRESS ENTER FOR NEXT PAGE ";G$:CLS
  114. 42200  WEND
  115. 42300  CLOSE #1
  116. 42400  LOCATE 25,1:LINE INPUT "PRESS ENTER TO RETURN TO MEMORY TEST MENU ";G$
  117. 42500  GOTO 1610
  118. 42600  '*************** DATA FOR MEMORY CHECK USR ROUTINE **********
  119. 42700  DATA &h148
  120. 42800  DATA 235, 73, 144, 13, 10, 77, 69, 77, 66, 65
  121. 42900  DATA 83, 13, 10, 66, 121, 32, 87, 105, 108, 108
  122. 43000  DATA 105, 97, 109, 32, 66, 46, 32, 77, 99, 67
  123. 43100  DATA 111, 114, 109, 105, 99, 107, 13, 10, 40, 67
  124. 43200  DATA 41, 49, 57, 56, 50, 44, 32, 81, 117, 97
  125. 43300  DATA 100, 114, 97, 109, 32, 67, 111, 114, 112, 46
  126. 43400  DATA 13, 10, 26, 0, 0, 31, 7, 51, 219, 154
  127. 43500  DATA 7, 0, 0, 246, 203, 154, 3, 0, 0, 246
  128. 43600  DATA 6, 30, 138, 195, 10, 192, 116, 233, 60, 14
  129. 43700  DATA 119, 229, 50, 228, 187, 0, 16, 247, 227, 142
  130. 43800  DATA 216, 142, 192, 51, 210, 190, 0, 0, 191, 0
  131. 43900  DATA 0, 252, 185, 0, 128, 139, 194, 171, 173, 51
  132. 44000  DATA 194, 117, 62, 226, 246, 185, 0, 128, 173, 51
  133. 44100  DATA 194, 117, 52, 226, 249, 11, 210, 116, 24, 66
  134. 44200  DATA 116, 14, 74, 129, 250, 85, 170, 116, 21, 186
  135. 44300  DATA 85, 170, 139, 194, 235, 205, 186, 170, 85, 139
  136. 44400  DATA 194, 235, 198, 184, 255, 255, 139, 208, 235, 191
  137. 44500  DATA 185, 0, 128, 184, 254, 90, 242, 171, 185, 0
  138. 44600  DATA 128, 243, 175, 116, 27, 31, 7, 34, 228, 116
  139. 44700  DATA 2, 138, 196, 50, 228, 139, 216, 228, 98, 36
  140. 44800  DATA 192, 116, 3, 128, 207, 1, 154, 7, 0, 0
  141. 44900  DATA 246, 203, 180, 44, 205, 33, 3, 202, 129, 241
  142. 45000  DATA 90, 165, 139, 209, 185, 0, 128,139, 234, 144
  143. 45100  DATA 144,144,139, 194, 171, 173, 51, 194, 117, 201
  144. 45200  DATA 232, 38, 0, 226, 243, 139, 213, 144, 144, 144
  145. 45300  DATA 185, 0, 128, 173, 51, 194, 117, 183, 232, 20
  146. 45400  DATA 0, 226, 246, 31, 7, 51, 219, 228, 98, 36
  147. 45500  DATA 192, 116, 2, 254, 199, 154, 7, 0, 0, 246
  148. 45600  DATA 203, 81, 50, 194, 138, 248, 177, 4, 210, 200
  149. 45700  DATA 36, 15, 50, 199, 138, 216, 254, 201, 210, 200
  150. 45800  DATA 138, 248, 36, 31, 50, 198, 138, 208, 138, 199
  151. 45900  DATA 36, 224, 50, 195, 138, 240, 138, 199, 208, 200
  152. 46000  DATA 36, 240, 50, 194, 138, 208, 89, 195
  153. 47000  '
  154. 47005  GOSUB 47200       'normalize NMI
  155. 47010  IF CH$="A" OR CH$="S" THEN DEF SEG=0:POKE 65521,0:POKE 65522,0:DEF SEG:GOTO 47050   'Re-initialize control variables for restart
  156. 47015  IF NO.QUAD.ERR THEN 47050
  157. 47020  IF EM%<>0 THEN 60000
  158. 47050  CLEAR ,32000
  159. 47100  RUN "QUADTEST"
  160. 47200  '******** NMI NORMALIZE ********
  161. 47210  OUT &H61,(INP(&H61) OR &H20):OUT &H61,(INP(&H61) AND &HDF):OUT &HA0,80
  162. 47220  RETURN
  163. 48000  '******** ALL FUNCTIONS CHECK VARIABLE PASSER *******
  164. 48010  DEF SEG=0:POKE 65521,206:POKE 65522,216:POKE 65523,ASC(CH$):POKE 65524,XM%:POKE 65525,PM% MOD 256:POKE 65526,INT(PM%/256):POKE 65527,EM% MOD 256:POKE 65528,INT(EM%/256):POKE 65529,S.B.:DEF SEG
  165. 48050  CLEAR ,32000
  166. 48100  RUN "Q512TEST"
  167. 60000  '***** MEMORY ERROR VISUAL LOCATER *******
  168. 60010  FOR I=1 TO 8:IF MEM.ERR%(I)<>0 THEN QUAD.ERR%=TRUE
  169. 60020  NEXT I:IF QUAD.ERR%<>TRUE THEN GOSUB 65200:RETURN
  170. 60030  SCREEN 2:CLS
  171. 60050  DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN 60300
  172. 60100  LOCATE 8,1: PRINT"     This ROUTINE of the Quadtest program will only function if the IBM color/graphics adapter or equivalent is installed in the system.": LOCATE 12,1: LINE INPUT "Press <ENTER> ";A$: RUN"Quadtest"
  173. 60200  DIM MEM(11)
  174. 60300  CLS:PRINT TAB(5);"Quad 512+ should be started at address";S.B.*64;"K for this routine.":PRINT TAB(5);:LINE INPUT "Press <enter> to continue ";Q1$:CLS
  175. 60310  SCREEN 2:EM%=0:ER$(0)="PAR":FOR I=1 TO 8:ER$(I)=" D"+RIGHT$(STR$(I-1),1):NEXT I
  176. 60400  NA$="n/a":MEM$(1)=" 64":MEM$(2)="128":MEM$(3)="320":MEM$(4)="384":MEM$(5)="192":MEM$(6)="256":MEM$(7)="448":MEM$(8)="512"
  177. 60600  GOSUB 60800
  178. 60610  GOSUB 62600
  179. 60700  GOTO 64000
  180. 60800  '********** GET PARAMETERS *********
  181. 60820  MEMORY=XM%
  182. 61110  BOARD=3
  183. 61600  RETURN
  184. 62600  REM *** display Quad 512+ screen ***
  185. 62700  CLS:A=30:B=68:SZ=24:FOR X=A TO A+574 STEP 32: FOR Y=B TO B+4*SZ-1 STEP SZ:LINE (X,Y)-(X+30,Y+SZ),,B:NEXT:NEXT
  186. 62800  LOCATE 1,27:PRINT "QUAD 512+ MEMORY CHIPS DIAGRAM"
  187. 62900  LOCATE 8,5: PRINT" D0  D1  D2  D3  D4  D5  D6  D7 PAR  D0  D1  D2  D3  D4  D5  D6  D7 PAR": LINE (317,54)-(317,166)
  188. 63000  LN=10:X=1:LOCATE LN,X: IF MEMORY>7 THEN PRINT MEM$(8): GOSUB 63900 ELSE PRINT NA$
  189. 63100  LN=10:X=77:LOCATE LN,X: IF MEMORY>5 THEN PRINT MEM$(4): GOSUB 63900 ELSE PRINT NA$
  190. 63200  LN=13:X=1:LOCATE LN,X: IF MEMORY>6 THEN PRINT MEM$(7): GOSUB 63900 ELSE PRINT NA$
  191. 63300  LN=13:X=77:LOCATE LN,X: IF MEMORY>4 THEN PRINT MEM$(3): GOSUB 63900 ELSE PRINT NA$
  192. 63400  LN=16:X=1:LOCATE LN,X: IF MEMORY>3 THEN PRINT MEM$(6): GOSUB 63900 ELSE PRINT NA$
  193. 63500  LN=16:X=77:LOCATE LN,X: IF MEMORY>1 THEN PRINT MEM$(2): GOSUB 63900 ELSE PRINT NA$
  194. 63600  LN=19:X=1:LOCATE LN,X: IF MEMORY>2 THEN PRINT MEM$(5): GOSUB 63900 ELSE PRINT NA$
  195. 63700  LN=19:X=77: LOCATE LN,X:PRINT MEM$(1): GOSUB 63900
  196. 63800  RETURN
  197. 63900  LOCATE LN+1,X+1:PRINT"K":RETURN
  198. 64000  '********* PAINT BAD CHIPS **********
  199. 64050  LAST.ROW=MEMORY
  200. 64100  FOR J=1 TO LAST.ROW
  201. 64200  '
  202. 64250  IF MEM.ERR%(J)=0 THEN 64820
  203. 64300  EC%=MEM.ERR%(J) MOD 256
  204. 64310  BCF=FALSE
  205. 64400  FOR K=0 TO 7
  206. 64600  BIT=EC% AND 2^K
  207. 64700  IF BIT<>0 THEN GOSUB 65000        'Paint a chip
  208. 64800  NEXT K
  209. 64810  IF NOT BCF THEN GOSUB 65000        'Paint parity chip
  210. 64820  NEXT J
  211. 64830  BEEP:LOCATE 24,20:PRINT "Bad chip(s) painted in foreground color.";
  212. 64840  KEY (10) ON:ON KEY(10) GOSUB 47000:LOCATE 25,5:PRINT "F10         to return to QUADTEST diagnostics main menu.";
  213. 64850  GOTO 64850
  214. 64900  NEXT K
  215. 65000  '********* PAINT A CHIP *********
  216. 65010  GOSUB 65100       'GET.XY
  217. 65020  PAINT (X,Y),1,1
  218. 65030  BCF=NOT FALSE
  219. 65040  RETURN
  220. 65100  '******* GET.XY *******
  221. 65120  IF (J<3 OR J=5 OR J=6) THEN X.S.P.=332 ELSE X.S.P.=46      'x start point
  222. 65130  X=X.S.P.+(K)*32
  223. 65140  IF J MOD 2=0 THEN IF J<5 THEN Y=130 ELSE Y=82 ELSE IF J<4 THEN Y=154 ELSE Y=106
  224. 65160  RETURN
  225. 65200  '******** MEM ERROR NOT ON QUAD 512+ **********
  226. 65210  LN=CSRLIN:COL=POS(0)
  227. 65250  SOUND 40,8:PRINT:PRINT:PRINT "Quad 512+ should be started at address";S.B.*64;"K for this routine.":PRINT "No memory error has been detected in that range.":LINE INPUT "Press <ENTER> to continue ";Q1$
  228. 65260  LOCATE LN+1,1:FOR K1=1 TO 4:PRINT STRING$(80," ");:NEXT K1:LOCATE LN,COL
  229. 65270  RETURN
  230.