home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / misc / ham436 / readsstv.bas < prev    next >
BASIC Source File  |  1985-03-18  |  10KB  |  305 lines

  1. 10 REM ********************************************************************
  2. 20 REM read and display sstv information by Niel Wiegand
  3. 30 REM *******************************************************************
  4. 40 REM *******************************************************************
  5. 50 REM Prologue
  6. 60 REM system requirements: 128k, colorgraphics board, cassette interface,
  7. 70 REM                      drive a
  8. 80 REM Change History
  9. 90 REM 3-1: Initial release level
  10. 100 REM 3-3: Changed routines to process audio from basic to machine language
  11. 110 REM      Changed F7 to both input/store audio and process frame
  12. 120 REM 4-1: Added prologue section
  13. 130 REM 4-2: added routine to display period trace
  14. 140 REM      added vertical sync
  15. 150 REM 4-3: CHANGED MENU TO WORK FROM ALPHA KEYS
  16. 160 REM      ADDED HELP FUNCTION
  17. 170 REM      ADDED PARAMETER SETTING FOR SSTVMLS
  18. 171 REM 5-0: changed saved frame dataset names to pictureX.pic
  19. 180 REM ******************************************************************
  20. 190 REM ****************************************************************
  21. 200 REM set up function controls, load mls, and wait for command
  22. 210 REM *********************************************************************
  23. 220 BLACK=749
  24. 230 GRAY1=703
  25. 240 GRAY2=657
  26. 250 GRAY3=611
  27. 260 GRAY4=565
  28. 270 DEF SEG=&H1F10
  29. 280 BLOAD "SSTVMLS.OBJ",0
  30. 290 DEF SEG
  31. 300 GOSUB 460
  32. 310 KEY OFF
  33. 320 COMMAND$=INPUT$(1)
  34. 330 IF COMMAND$=" " THEN GOTO 320
  35. 340 IF COMMAND$="P" OR COMMAND$="p" THEN GOSUB 2140
  36. 350 IF COMMAND$="M" OR COMMAND$="m" THEN GOSUB 460
  37. 360 IF COMMAND$="I" OR COMMAND$="i" THEN GOSUB 1350
  38. 370 IF COMMAND$="D" OR COMMAND$="d" THEN GOSUB 760
  39. 380 IF COMMAND$="S" OR COMMAND$="s" THEN GOSUB 810
  40. 390 IF COMMAND$="L" OR COMMAND$="l" THEN GOSUB 1050
  41. 400 IF COMMAND$="H" OR COMMAND$="h" THEN GOSUB 2300
  42. 410 IF COMMAND$="C" OR COMMAND$="c" THEN GOSUB 2810
  43. 420 GOTO 320
  44. 430 REM *********************************************************************
  45. 440 REM display function menu
  46. 450 REM *********************************************************************
  47. 460 GOSUB 1720
  48. 470 CLS
  49. 480 LIN = 99
  50. 490 PRINT
  51. 500 PRINT
  52. 510 PRINT
  53. 520 PRINT "    SLOWSCAN TV MONITOR"
  54. 530 PRINT "        VERSION 5.0"
  55. 540 PRINT
  56. 550 REM   "      BY NIEL WIEGAND"
  57. 560 PRINT "        W B 5 Y T G"
  58. 570 REM   "     911 NORTH BEND DR."
  59. 580 REM   "     AUSTIN, TX. 78758"
  60. 590 REM   "     (AC)512-837-2492"
  61. 591 PRINT"    FREQ. USED FOR SSTV"
  62. 592 PRINT"   3.845   7.171   14.230"
  63. 593 PRINT"     21.340  28.680 MHz"
  64. 600 PRINT
  65. 610 PRINT
  66. 620 PRINT "  KEY P: PERIOD TRACE DISPLAY"
  67. 630 PRINT "  KEY M: MENU DISPLAY"
  68. 640 PRINT "  KEY I: INPUT AND DISPLAY SSTV FRAME"
  69. 650 PRINT "  KEY D: DISPLAY SSTV FRAME
  70. 660 PRINT "  KEY S: SAVE SSTV FRAME (1-5)
  71. 670 PRINT "  KEY L: LOAD SAVED SSTV FRAME (1-5)
  72. 680 PRINT "  KEY C: CHANGE SSTV SCREEN PARAMETERS"
  73. 690 PRINT "  KEY H: HELP AND INFORMATION FRAME"
  74. 700 PRINT
  75. 710 PRINT
  76. 720 RETURN
  77. 730 REM ****************************************************************
  78. 740 REM process and display sstv frame
  79. 750 REM ****************************************************************
  80. 760 RESTORE
  81. 770 GOTO 1780
  82. 780 REM ****************************************************************
  83. 790 REM save sstv frame
  84. 800 REM ****************************************************************
  85. 810 PRINT "frame number";
  86. 820 INPUT FRAMENUM
  87. 830 IF FRAMENUM <1 THEN GOTO 890
  88. 840 IF FRAMENUM >5 THEN GOTO 890
  89. 850 DEF SEG=&HB800
  90. 860 ON FRAMENUM-1 GOTO 900,930,960,990
  91. 870 BSAVE "picture1.pic",0,&H4000
  92. 880 DEF SEG
  93. 890 RETURN
  94. 900 BSAVE"picture2.pic",0,&H4000
  95. 910 DEF SEG
  96. 920 RETURN
  97. 930 BSAVE"picture3.pic",0,&H4000
  98. 940 DEF SEG
  99. 950 RETURN
  100. 960 BSAVE"picture4.pic",0,&H4000
  101. 970 DEF SEG
  102. 980 RETURN
  103. 990 BSAVE"picture5.pic",0,&H4000
  104. 1000 DEF SEG
  105. 1010 RETURN
  106. 1020 REM ****************************************************************
  107. 1030 REM load sstv frame
  108. 1040 REM ****************************************************************
  109. 1050 PRINT "frame number";
  110. 1060 INPUT FRAMENUM
  111. 1070 IF FRAMENUM <1 THEN GOTO 1050
  112. 1080 IF FRAMENUM >5 THEN GOTO 1050
  113. 1090 GOSUB 1570
  114. 1100 DEF SEG=&HB800
  115. 1110 ON FRAMENUM-1 GOTO 1150,1180,1210,1240
  116. 1120 BLOAD "picture1.pic",0
  117. 1130 DEF SEG
  118. 1140 RETURN
  119. 1150 BLOAD"picture2.pic",0
  120. 1160 DEF SEG
  121. 1170 RETURN
  122. 1180 BLOAD"picture3.pic",0
  123. 1190 DEF SEG
  124. 1200 RETURN
  125. 1210 BLOAD"picture4.pic",0
  126. 1220 DEF SEG
  127. 1230 RETURN
  128. 1240 BLOAD"picture5.pic",0
  129. 1250 DEF SEG
  130. 1260 RETURN
  131. 1270 REM *******************************************************************
  132. 1280 REM exit monitor program with proper display mode
  133. 1290 REM *******************************************************************
  134. 1300 GOSUB 1720
  135. 1310 END
  136. 1320 REM ******************************************************************
  137. 1330 REM read and store audio data
  138. 1340 REM ******************************************************************
  139. 1350 PRINT "WAITING FOR VERTICAL SYNC PULSE"
  140. 1360 DEF SEG=&H400
  141. 1370 X=PEEK(&H1A)
  142. 1380 POKE X,&H1C
  143. 1390 X=PEEK(&H1B)
  144. 1400 POKE X,&H1D
  145. 1410 DEF SEG=&H1F10
  146. 1420 MOTOR 1
  147. 1430 DEF USR3=6
  148. 1440 X=USR3(0)
  149. 1450 DEF USR0=0
  150. 1460 FOR I = 1 TO 300
  151. 1470 NEXT I
  152. 1480 PRINT "STORING SSTV AUDIO"
  153. 1490 X=USR0(0)
  154. 1500 MOTOR 0
  155. 1510 DEF SEG
  156. 1520 PRINT "SSTV frame stored"
  157. 1530 GOTO 1780
  158. 1540 REM ******************************************************************
  159. 1550 REM set up screen for low resolution gray mode
  160. 1560 REM ******************************************************************
  161. 1570 RESTORE
  162. 1580 CLS
  163. 1590 SCREEN 0,5
  164. 1600 OUT &H3D8,33
  165. 1610 DATA 113,80,85,10,127,6,100,112,02,01
  166. 1620 FOR I=0 TO 9
  167. 1630 READ REGINFO
  168. 1640 OUT &H3D4,I
  169. 1650 OUT &H3D5,REGINFO
  170. 1660 NEXT I
  171. 1670 OUT &H3D8,9
  172. 1680 RETURN
  173. 1690 REM ******************************************************************
  174. 1700 REM restore normal alpha/num mode
  175. 1710 REM ******************************************************************
  176. 1720 WIDTH 40
  177. 1730 SCREEN 0,0,0
  178. 1740 RETURN
  179. 1750 REM *********************************************************************
  180. 1760 REM initialize variables and display
  181. 1770 REM *********************************************************************
  182. 1780 GOSUB 1570
  183. 1790 DEF SEG=&H1F10
  184. 1800 POKE &H1A,125 'MAX RIGHT BORDER
  185. 1810 POKE &H1B,115 'MIN RIGHT BORDER
  186. 1820 POKE &H1D,25  'SYNC LIMIT
  187. 1830 POKE &H1E,6   'SYNC INCREMENT
  188. 1840 POKE &H1F,1   'NON-SYNC DECREMENT
  189. 1850 POKE &HC,182  'SYNC PERIOD MINUS 768
  190. 1860 POKE &H18,100 'NOISE PERIOD MINUS 256
  191. 1870 POKE &HE,(BLACK MOD 256)
  192. 1880 POKE &HF,(BLACK \ 256)
  193. 1890 POKE &H10,(GRAY1 MOD 256)
  194. 1900 POKE &H11,(GRAY1 \ 256)
  195. 1910 POKE &H12,(GRAY2 MOD 256)
  196. 1920 POKE &H13,(GRAY2 \ 256)
  197. 1930 POKE &H14,(GRAY3 MOD 256)
  198. 1940 POKE &H15,(GRAY3 \ 256)
  199. 1950 POKE &H16,(GRAY4 MOD 256)
  200. 1960 POKE &H17,(GRAY4 \ 256)
  201. 1970 DEF USR1=3
  202. 1980 X=USR1(0)
  203. 1990 DEF SEG
  204. 2000 RETURN
  205. 2010 REM ******************************************************************
  206. 2020 REM load saved audio buffer
  207. 2030 REM ******************************************************************
  208. 2040 REM this allows testing standard sstv data rather than using F7 to
  209. 2050 REM load the data from cassette tape.
  210. 2060 REM ******************************************************************
  211. 2070 DEF SEG = &H1700
  212. 2080 BLOAD "audio.dat",0
  213. 2090 DEF SEG
  214. 2100 END
  215. 2110 REM ******************************************************************
  216. 2120 REM display period trace
  217. 2130 REM ******************************************************************
  218. 2140 CLS
  219. 2150 WIDTH 80
  220. 2160 SCREEN 2
  221. 2170 LOCATE 4,1
  222. 2180 PRINT"WHT"
  223. 2190 LOCATE 12,1
  224. 2200 PRINT "BLK"
  225. 2210 LOCATE 19,1
  226. 2220 PRINT "SYNC"
  227. 2230 DEF SEG=&H1F10
  228. 2240 DEF USR3=9
  229. 2250 MOTOR 1
  230. 2260 X=USR3(0)
  231. 2270 MOTOR 0
  232. 2280 DEF SEG
  233. 2290 RETURN
  234. 2300 GOSUB 1720
  235. 2310 CLS
  236. 2320 PRINT"PLOT PERIOD TRACE: AUDIO INPUT THROUGH"
  237. 2330 PRINT"THE CASSETTE INPUT PORT IS PLOTTED"
  238. 2340 PRINT"ON THE SCREEN. VERTICAL SCALE IS MARKED"
  239. 2350 PRINT"FOR APPROXIMATE PERIODS OF WHITE, BLACK"
  240. 2360 PRINT"AND SYNC. PLOTS 600 CYCLES THEN EXITS."
  241. 2370 PRINT
  242. 2380 PRINT"MENU DISPLAY: DISPLAY FUNCTION MENU."
  243. 2390 PRINT
  244. 2400 PRINT"INPUT AND DISPLAY SSTV: AUDIO INPUT"
  245. 2410 PRINT"THROUGH THE CASSETTE INPUT PORT IS"
  246. 2420 PRINT"USED TO GENERATE A SSTV FRAME IN THREE"
  247. 2430 PRINT"STEPS. FIRST WAIT FOR THE VERTICAL SYNC"
  248. 2440 PRINT"PULSE, THEN STORE AUDIO CYCLE PERIODS"
  249. 2450 PRINT"IN AUDIO BUFFER, THEN PROCESS AUDIO"
  250. 2460 PRINT"BUFFER TO FORM SSTV FRAME."
  251. 2470 PRINT
  252. 2480 PRINT"DISPLAY SSTV FRAME: AUDIO PREVIOUSLY"
  253. 2490 PRINT"INPUT AND STORED IN THE AUDIO BUFFER"
  254. 2500 PRINT"IS PROCESSED TO GENERATE A SSTV FRAME"
  255. 2510 PRINT
  256. 2520 PRINT"ENTER TO READ MORE
  257. 2530 COMMAND$=INPUT$(1)
  258. 2540 IF COMMAND$=" " THEN GOTO 2530
  259. 2550 PRINT
  260. 2560 PRINT"SAVE SSTV FRAME: SAVE THE DISPLAY"
  261. 2570 PRINT"BUFFER AS RAW BINARY DATA IN ONE OF"
  262. 2580 PRINT"FIVE DATASETS ON THE DISKETTE"
  263. 2590 PRINT"CURRENTLY LOADED ON DRIVE A."
  264. 2600 PRINT
  265. 2610 PRINT"LOAD SAVED SSTV FRAME: LOAD RAW BINARY"
  266. 2620 PRINT"DATA FROM ONE OF FIVE DATASETS ON THE"
  267. 2630 PRINT"DISKETTE CURRENTLY LOADED ON DRIVE A"
  268. 2640 PRINT"INTO THE DISPLAY BUFFER."
  269. 2650 PRINT
  270. 2660 PRINT"CHANGE SSTV SRCEEN PARAMETERS: CONTRAST"
  271. 2670 PRINT"AND BRIGHTNESS OF THE PICTURE MAY BE"
  272. 2680 PRINT"ADJUSTED. NORMAL SETTINGS SET BOTH"
  273. 2690 PRINT"EVENLY. CONTRAST OF ZERO IS MOST"
  274. 2700 PRINT"CONTRASTY PICTURE. BRIGHTNESS OF 500"
  275. 2710 PRINT"IS DARKEST PICTURE."
  276. 2720 PRINT
  277. 2730 PRINT"ENTER TO RETURN TO MAIN MENU"
  278. 2740 COMMAND$=INPUT$(1)
  279. 2750 IF COMMAND$=" " THEN GOTO 2740
  280. 2760 GOSUB 460
  281. 2770 RETURN
  282. 2780 REM ********************************************************************
  283. 2790 REM CHANGE PARAMETERS PASSED TO MACHINE LANGUAGE SUBROUTINE
  284. 2800 REM *******************************************************************
  285. 2810 GOSUB 1720
  286. 2820 CLS
  287. 2830 PRINT "CURRENT BRIGHTNESS SETTING: "GRAY2
  288. 2840 PRINT "CURRENT CONTRAST SETTING: "CONTRAST
  289. 2850 PRINT
  290. 2860 PRINT "INPUT BRIGHTNESS SETTING FROM 500 TO"
  291. 2870 PRINT "800 (NORMALLY 657)";
  292. 2880 INPUT" ", GRAY2
  293. 2890 GRAY2=INT(GRAY2)
  294. 2900 PRINT
  295. 2910 PRINT "INPUT CONTRAST SETTING FROM 0 TO 100"
  296. 2920 PRINT "(NORMALLY 46)";
  297. 2930 INPUT" ", CONTRAST
  298. 2940 CONTRAST=INT(CONTRAST)
  299. 2950 GRAY1=GRAY2+CONTRAST
  300. 2960 BLACK=GRAY1+CONTRAST
  301. 2970 GRAY3=GRAY2-CONTRAST
  302. 2980 GRAY4=GRAY3-CONTRAST
  303. 2990 GOSUB 460
  304. 3000 RETURN
  305. EOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErOErO