home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / manuals / drives / oc-118.txt < prev    next >
Text File  |  1994-09-27  |  57KB  |  1,756 lines

  1.  
  2.  nOTES:
  3.   tHIS DOCUMENT CONTAINS ADDITIONS FROM SEVERAL SOURCES.
  4.  
  5.   iN THE SECTION OF memory COMMANDS, THE SYNTAX SHOWN IS INCORRCT; THE
  6.   COMMANDS MUST BE WRITTEN WITHOUT THE ':'.
  7.  
  8.  
  9.  ----------------------------------------------------------------------------
  10.  
  11. oc-118  5.25" fLOPPY dISK dRIVE fOR cOMMODORE c64
  12.  
  13.  
  14. table of contents
  15.  
  16.        pAGE
  17.  
  18. 1.iNTRODUCTION 2
  19.  
  20. 2.sPECIFICATIONS 3
  21.  
  22. 3.iNSTALLATION 5
  23.  
  24. cABLE cONNECTIONS 5
  25. tURNING oN pOWER 5
  26. dISK iNSERTION 5
  27.  
  28.  
  29. 4.uSING pROGRAMS 6
  30.  
  31. uSING pREPACKAGED sOFTWARE 6
  32. tHE dISK dIRECTORY 7
  33. pATTERN mATCHING AND wILD cARDS 8
  34.  
  35.  
  36. 5.dISK cOMMANDS10
  37. rEADING THE eRROR cHANNEL13
  38.  
  39. 6.sEQUENTIAL fILES16
  40.  
  41.  
  42. 7.rANDOM fILES16
  43. uSING rANDOM fILES20
  44.  
  45.  
  46. 8.rELATIVE fILES25
  47. uSING rELATIVE fILES26
  48.  
  49.  
  50. 9.pROGRAMMING THE dISK cONTROLLER30
  51.  
  52.  
  53. 10.cHANGING THE DEVICE NUMBER33
  54.  
  55. sOFTWARE mETHOD33
  56. hARDWARE mETHOD34
  57.  
  58.  
  59. aPPENDICES
  60.  
  61. a.lIST OF cOMMANDS35
  62. b.dESCRIPTION OF eRROR mESSAGES36
  63. c.bam AND dIRECTORY fORMAT dESCRIPTION-
  64.  
  65.  
  66.  
  67.  
  68. 1. iNTRODUCTION
  69.  
  70. tHE oc-118 dISK dRIVE IS A VERSATILE AND EFFICIENT DISK DRIVE 
  71. BUILT FOR THE cOMMODORE SERIES OF PERSONAL COMPUTERS. tHIS DRIVE 
  72. IS FULLY COMPATIBLE WITH THE cOMMODORE 64 COMPUTER AND DIRECTLY 
  73. REPLACES THE cOMMODORE 1541 dISK dRIVE, GIVING MUCH BETTER 
  74. PERFORMANCE IN TERMS OF DATA LOADING AND WRITING SPEED AND MEMORY 
  75. BUFFER SIZE.
  76.  
  77. iF YOU ARE A BEGINNER, THE FIRST FEW CHAPTERS WILL HELP YOU 
  78. INSTALL AND OPERATE THE DISK DRIVE. aS YOUR SKILL AND EXPERIENCE 
  79. IMPROVES, YOU WILL FIND MORE USES FOR YOUR DISK DRIVE AND THE MORE 
  80. ADVANCED CHAPTERS WILL BE VERY HELPFUL.
  81.  
  82. iF YOU'RE AN EXPERIENCED PROFESSIONAL, THIS MANUAL CAN GIVE YOU THE INFORMATION
  83. YOU NEED TO TAKE ADVANTAGE OF ALL THE oc-118 POWER AND FEATURES.
  84.  
  85. rEGARDLESS OF THE LEVEL OF YOUR PROGRAMMING EXPERTISE, THE oc-118 WILL
  86. GREATLY INCREASE THE EFFICIENCY AND CAPABILITY OF YOUR COMPUTER SYSTEM.
  87.  
  88. pLEASE BE AWARE THAT THIS MANUAL IS A REFERENCE GUIDE TO THE OPERATION OF THE
  89. oc-118. wHILE IT CONTAINS STEP BY STEP INSTRUCTIONS AND A SECTION TO LET YOU
  90. EASILY USE PREPACKAGED SOFTWARE, YOU SHOULD BECOME FAMILIAR WITH basic AND THE
  91. COMPUTER COMMANDS THAT HELP YOU OPERATE YOUR COMPUTER AND ITS PERIPHERALS.
  92.  
  93. rEMEMBER, YOU DON'T NEED TO LEARN EVERYTHING IN THIS MANUAL AT ONCE. tHE FIRST
  94. THREE OR FOUR CHAPTERS WILL LET YOU USE THE DISK DRIVE FOR MOST APPLICATIONS,
  95. AND THE FOLLOWING CHAPTERS TELL YOU HOW TO SET UP FILES, ACCESS ANY DATA, AND
  96. PROGRAM THE DISK DRIVE ITSELF AT THE MACHINE LANGUAGE LEVEL.
  97.  
  98. notes:iN format EXAMPLES, LOWER CASE WORDS NEED TO BE REPLACED BY 
  99. AN APPROPRIATE WORD OR NUMBER THAT YOU CHOOSE.
  100.  
  101.  
  102.  
  103. 2. sPECIFICATIONS
  104.  
  105. oc-118 fLOPPY dISK dRIVE
  106.  
  107. sLIM LINE CONSTRUCTION (LOW PROFILE) AND FULLY cOMMODORE COMPATIBLE.
  108.  
  109. dISK SIZE: 5-1/4 INCH DIAMETER.
  110.  
  111. cAPACITY
  112. pER dISK .....................174.8 KBYTES
  113. dIRECTORY eNTRIES ............144/DISK
  114. sECTOR/tRACK .................17-21
  115. bYTES/sECTOR .................256
  116. tRACKS .......................35
  117. sECTORS/dISK .................683
  118. bam  1
  119. dIRECTORY 18
  120. dATA664
  121.  
  122. aVERAGE mtbf RATE OF 8000 HOURS.
  123.  
  124. pOWER rEQUIREMENTS
  125. vOLTAGE ......................117 vac, 220/240 vac OPTIONAL
  126. fREQUENCY ....................50/60 hERTZ
  127. pOWER dISSIPATION ............24 wATTS
  128.  
  129.  
  130. mECHANICAL dIMENSIONS
  131. hEIGHT, WIDTH, DEPTH .........268 X 150 X 47.5 MM
  132. wEIGHT .......................2.8 KGS.
  133.  
  134.  
  135.  
  136.  
  137. oc-118 floppy disk driver
  138.  
  139.  
  140.  
  141.      .------------------------------------------------------.
  142.      {$7c}__                                                  {$7c}
  143.      {$7c}  l_{$7c}             _______________/-.                  {$7c}
  144.      {$7c}=============================={$7c}  {$7c}================  {$7c}
  145.      {$7c}                  {$7c}_____________{$7c}_/{$7c}                  {$7c}
  146.      {$7c}                            {$7c}
  147.      {$7c}______________________________________________________{$7c}
  148.          ---                                          ---
  149.  
  150. RED - ACTIVE
  151. ledGREEN - READY
  152. FLASH - ERROR
  153.  
  154.  
  155.      .------------------------------------------------------.
  156.      {$7c} serial buspoweron                          {$7c}
  157.      {$7c}                          __                          {$7c}
  158.      {$7c} (_)    (_)(_)    {$7c}__{$7c}                         {$7c}
  159.      {$7c}                         {$7c}__{$7c}                         {$7c}
  160.      {$7c}off                         {$7c}
  161.      {$7c}______________________________________________________{$7c}
  162.          ---                                          ---
  163.  
  164.  
  165.  
  166. pEASE, DON'T CONNECT ANYTHING UNTIL YOU'VE COMPLETED THE FOLLOWING
  167. SECTION, OTHERWISE YOU WILL GET DANGER OR TAKE TROUBLE IN YOUR SYSTEM.
  168.  
  169.  
  170. 3. iNSTALLATION
  171.  
  172.  
  173. cable connections
  174.  
  175. fIRST, PLUG THE POWER CABLE INTO THE BACK OF THE DISK DRIVE.
  176. iT WON'T GO IN IF YOU TRY TO PUT IT IN UPSIDE DOWN. nEXT, PLUG
  177. THE OTHER END INTO THE ELECTRICAL OUTLET. iF THE DRIVE MAKES SOUND ANY
  178. SOUND AT THIS TIME, TURN IT OFF USING THE SWITCH ON THE BACK!
  179. dO NOT PLUG ANY OTHER CABLES INTO THE DRIVE WITH THE POWER ON.
  180.  
  181. sECOND, PLUG THE SERIAL BUS CABLE INTO EITHER ONE OF THE SERIAL 
  182. BUS SOCKETS ON THE BACK OF THE DRIVE. tURN OFF THE COMPUTER AND 
  183. PLUG THE OTHER END OF THE CABLE INTO THE BACK OF THE COMPUTER. 
  184. yOU'RE READY TO GO!
  185.  
  186. iF YOU HAVE A PRINTER OR ANOTHER DISK DRIVE, ATTACH ITS CABLE TO 
  187. THE REMAINING SERIAL BUS SOCKET TO "DAISY CHAIN" THE DEVICES.
  188. iF IT'S A DISK DRIVE, YOU WILL NEED TO CHANGE ONE OF THE DRIVES
  189. DEVICE NUMBERS.
  190.  
  191.  
  192. turning on the power
  193.  
  194. wHEN ALL THE DEVICES ARE HOOKED TOGETHER, THE POWER MAY BE TURNED ON.
  195. iT IS IMPORTANT TO TURN THEM ON IN THE CORRECT ORDER: THE COMPUTER IS
  196. ALWAYS LAST. aLSO: MAKE SURE THERE ARE NO DISK IN THE DISK DRIVE WHEN
  197. YOU TURN ON THE POWER.
  198.  
  199.  
  200. disk insertion
  201.  
  202. tO INSERT A DISK, SIMPLY TURN THE LEVER TO A HORIZONTAL POSITION, SLIDE
  203. THE DISK IN GENTLY TILL IT STOPS, AND TURN THE LEVER DOWN. tHE DISK GOES
  204. IN FACE UP, WITH THE LARGE OPENING GOING IN FIRST AND THE WRITE-PROTECT
  205. NOTCH (A SMALL SQUARE CUTOUT IN THE DISK) ON THE LEFT.
  206.  
  207. nEVER REMOVE A DISK WHEN THE DRIVE LIGHT IS ON!
  208. aND REMEMBER, ALWAYS REMOVE THE DISK BEFORE THE DRIVE IS TURNED ON OR
  209. OFF!  dATA CAN BE DESTROYED BY THE DRIVE AT THIS TIME!
  210.  
  211.  
  212.  
  213. 4. uSING pROGRAMS
  214.  
  215. using prepacked programs
  216.  
  217. iF YOU WANT TO USE A PROGRAM ALREADY WRITTEN ON A DISK, SUCH AS A VIDEO
  218. GAME, HERE'S ALL YOU HAVE TO DO.
  219.  
  220. tURN THE LEVER UP AND INSERT THE THE PREPROGRAMMED DISK SO THE LABEL ON
  221. THE DISK IS FACING UP AND CLOSEST TO YOU. tHERE SHOULD BE A LITTLE NOTCH
  222. ON THE DISK (MAYBE COVERED WITH TAPE) THAT SHOULD BE ON THE LEFT. tURN
  223. THE LEVER DOWN. NOW, TYPE IN load "PROGRAM NAME" AND HIT THE return KEY.
  224. tHE DISK WILL MAKE NOISE AND YOUR SCREEN WILL SAY:
  225.  
  226. searching for program name
  227. loading
  228. ready
  229.  
  230. wHEN THE SCREEN SAYS ready, JUST TYPE IN run AND HIT THE return KEY -
  231. YOUR PROGRAM IS READY TO USE!
  232.  
  233.  
  234. load command
  235.  
  236. purpose: tO TRANSFER A PROGRAM FROM THE DISK TO THE COMPUTER'S
  237.  CURRENT MEMORY.
  238.  
  239. format: load"PROGRAM NAME", DEVICE #, COMMAND #
  240.  
  241. tHE PROGRAM NAME IS A CHARACTER STRING, THAT IS, EITHER A NAME IN QUOTES
  242. OR THE CONTENTS OF A GIVEN STRING VARIABLE. tHE DEVICE NUMBER IS PRESET
  243. ON THE DISK DRIVE'S CIRCUIT BOARD TO BE 8. iF YOU HAVE MORE THAN ONE DRIVE,
  244. READ THE CHAPTER ON CHANGING THE DEVICE NUMBER. tHIS MANUAL ASSUMES YOU'RE
  245. USING 8 AS THE DEVICE NUMBER FOR THE DISK DRIVE.
  246.  
  247. tHE COMMAND NUMBER IS OPTIONAL. iF NOT GIVEN, OR ZERO, THE PROGRAM IS LOADED
  248. NORMALLY, INTO THE START OF YOUR COMPUTER'S AVAILABLE MEMORY FOR basic
  249. PROGRAMS. iF THE NUMBER IS 1, THE PROGRAM WILL BE LOADED INTO EXACTLY THE
  250. SAME MEMORY LOCATIONS FROM WHICH IT CAME. tHE COMMAND NUMBER 1 IS USED MAINLY
  251. FOR MACHINE LANGUAGE, CHARACTER SETS, AND OTHER MEMORY DEPENDENT FUNCTIONS.
  252.  
  253. examples:
  254. load "test",8
  255. load "pROGRAM #1",8
  256. load "mACH lANG",8,1
  257. load a$,j,k
  258.  
  259.  
  260. caution: bESIDES PUTTING YOUR PROGRAM INTO THE COMPUTER'S CURRENT MEMORY,
  261. load WIPES OUT ANY PREVIOUS PROGRAM THERE!
  262.  
  263. note:aS IN THE LAST EXAMPLE, YOU CAN USE VARIABLES TO REPRESENT THE
  264. STRINGS, DEVICE NUMBERS, AND COMMAND NUMBERS; JUST BE SURE THEY ARE
  265. ALL PREVIOUSLY DEFINED IN YOUR PROGRAM. aLSO, SEE THE NOTE ON FILE
  266. NAMES ON PAGE 9.
  267.  
  268.  
  269. the disk directory
  270.  
  271. yOUR DISK DRIVE IS A RANDOM ACCESS DEVICE. tHIS MEANS THE READ/WRITE HEAD
  272. OF THE DRIVE CAN GO TO ANY SPOT ON THE DISK AND ACCESS A SINGLE BLOCK OF
  273. DATA, WHICH HOLD UP TO 256 BYTES OF INFORMATION. tHERE ARE 683 BLOCKS ON
  274. A DISK.
  275.  
  276. fORTUNATELY, YOU DON'T HAVE TO WORRY ABOUT INDIVIDUAL BLOCK OF DATA (CHECK
  277. CHAPTER 5 IF YOU DO). tHERE IS A PROGRAM IN THE DISK DRIVE CALLED THE dISK
  278. oPERATING sYSTEM, OR dos, THAT KEEPS TRACK OF THE BLOCKS FOR YOU. iT ORGANIZES
  279. THEM INTO A bLOCK aVAILABILITY mAP, OR bam, AND A DIRECTORY. tHE bam IS
  280. SIMPLY A CHECKLIST OF THE BLOCKS, AND IS UPDATED EVERY TIME A PROGRAM IS
  281. saveD OR A DATA FILE IS openED.
  282.  
  283. tHE DIRECTORY IS A LIST OF ALL PROGRAMS AND OTHER FILES STORED ON THE DISK.
  284. tHERE ARE 144 ENTRIES AVAILABLE, CONSISTING OF INFORMATION LIKE FILE NAME AND
  285. TYPE, A LIST OF BLOCKS USED, AND THE STARTING BLOCK. lIKE THE bam, THE
  286. DIRECTORY IS UPDATED EACH TIME A PROGRAM IS saveD OR A FILE IS closeD. iF NOT
  287. closeD PROPERLY, ALL DATA IN THAT FILE WILL BE LOST. mORE ON THIS LATER.
  288.  
  289. tHE DIRECTORY CAN BE loadED INTO YOUR COMPUTER'S MEMORY JUST LIKE A basic
  290. PROGRAM. pUT THE DISK IN THE DRIVE AND TYPE:
  291.  
  292. load"$",8
  293.  
  294. tHE COMPUTER WILL SAY:
  295.  
  296. searching for $
  297. found $
  298. loading
  299. ready
  300.  
  301. nOW THE DIRECTORY IS IN CURRENT MEMORY, AND IF YOU TYPE list IT WILL BE
  302. DISPLAYED ON THE SCREEN. tO EXAMINE THE DIRECTORY FROM INSIDE A basic PROGRAM,
  303. SEE CHAPTER 6 CONCERNING THE get# STATEMENT.
  304.  
  305.  
  306. pattern matching and wild cards
  307.  
  308. tO MAKE loadING EASIER, PATTERN MATCHING LETS YOU SPECIFY 
  309. CERTAIN LETTERS IN THE PROGRAM NAME SO THE FIRST PROGRAM IN THE
  310. DISK THAT MATCHES YOUR PATTERN IS THE ONE LOADED.
  311.  
  312. examples:load "*",8(loadS FIRST FILE ON DISK)
  313.  
  314. load "te*",8(loadS FIRST FILE THAT STARTS WITH te)
  315.  
  316. load "te??",8(loadS FIRST FILE THAT HAS TOUR LETTERS AND
  317.  BEGINS WITH te)
  318.  
  319. load "t?nt",8(loadS FIRST FILE THAT HAS FOUR LETTERS BUT
  320.  COULD BE tint, tent, ET CETERA)
  321.  
  322. tHE ASTERISK (*) TELLS THE COMPUTER NOT TO WORRY ABOUT THE REST 
  323. OF THE NAME WHILE THE QUESTION MARK (?) ACTS AS A WILD CARD.
  324.  
  325. tHE ABOVE CAN ALSO BE USED WHEN loadING THE DIRECTORY INTO 
  326. CURRENT MEMORY. tHIS ALLOWS CHECKING FOR A LIST OF SPECIFIC 
  327. PROGRAMS. tHE PROCEDURE IS THE SAME AS ABOVE EXCEPT FOR THE 
  328. ADDITION OF A "$:" :
  329.  
  330. example:load "$:t?st*",8  (loadS ALL FILE NAMES IN THE DIRECTORY
  331.   THAT HAVE THE CORRECT FIRST, THIRD, AND
  332.   FOURTH LETTERS)
  333.  
  334.  
  335. save
  336.  
  337. purpose: tRANSFER A PROGRAM IN CURRENT MEMORY ONTO THE DISK FOR
  338.  LATER USE.
  339.  
  340. format: save"PROGRAM NAME", DEVICE #, COMMAND #
  341.  
  342. aS BEFORE, THE COMMAND NUMBER IS OPTIONAL. iF THERE IS ALREADY 
  343. A PROGRAM OR FILE BY THE SAME NAME ON THE DISK OR THERE ISN'T 
  344. ENOUGH ROOM ON THE DISK, AN ERROR SIGNAL WILL BE GENERATED. iF 
  345. THERE ISN'T ENOUGH ROOM, OTHER PROGRAMS WILL HAVE TO BE ERASED OR 
  346. USE A DIFFERENT DISK.
  347.  
  348. example: save"homework",8
  349.  
  350.  
  351. save and replace
  352.  
  353. purpose: rEPLACE AN ALREADY EXISTING FILE WITH A REVISED VERSION.
  354.  
  355. format: save"@0:PROGRAM NAME",8
  356.  
  357. iF YOU EDIT AN EXISTING PROGRAM AND WANT TO SAVE IT UNDER THE 
  358. SAME NAME, save and replace DOES SO AUTOMATICALLY. iF YOU WANT TO 
  359. KEEP THE OLD VERSION, SAVE THE NEW VERSION UNDER A DIFFERENT NAME.
  360.  
  361. example: save"@0:homework",8
  362.  
  363.  
  364. verify
  365.  
  366. purpose: cHECKS CURRENT PROGRAM WITH ONE ON THE DISK.
  367.  
  368. format: verify"PROGRAM NAME", DEVICE #, COMMAND #
  369.  
  370. verify DOES A BYTE BY BYTE COMPARISON OF THE PROGRAM IN CURRENT 
  371. MEMORY WITH ONE ON THE DISK, AS SPECIFIED IN THE verify COMMAND.
  372.  
  373. example: verify"old version",8
  374.  
  375. note about file names: fILE NAMES MUST BEGIN WITH A LETTER NOT A NUMBER.
  376. sPACES ARE PERMITTED. wHILE THERE IS NO RESTRICTION ON THE LENGTH OF A FILE
  377. NAME, ALL COMMANDS MUST BE 58 OR FEWER CHARACTERS IN LENGTH.
  378. fOR EXAMPLE, IN THE ABOVE verify COMMAND, THERE ARE 10 CHARACTERS BESIDES THE
  379. ACTUAL PROGRAM NAME, SO THE MAXIMUM NAME LENGTH, IN THIS CASE,IS 48 CHARACTERS.
  380.  
  381.  
  382.  
  383. 5. disk commands
  384.  
  385. sO FAR, YOU HAVE LEARNED THE SIMPLE WAYS OF USING THE DISK DRIVE. iN ORDER TO
  386. COMMUNICATE YORE FULLY WITH THE DISK, DISK COMMANDS NEED TO BE USED. tWO OF
  387. THESE, open AND print#, ALLOW THE CREATION AND FILLING OF A DATA FILE ON THE
  388. DISK. jUST AS IMPORTANT IS THEIR ABILITY TO OPEN A COMMAND CHANNEL, ALLOWING
  389. THE EXCHANGE OF INFORMATION BETWEEN COMPUTER AND DISK DRIVE.
  390.  
  391.  
  392. open
  393.  
  394. purpose: cREATES A FILE BY openING A COMMUNICATION CHANNEL BETWEEN 
  395.  COMPUTER AND DISK DRIVE.
  396.  
  397. format: open FILE #, DEVICE #, (COMMAND) CHANNEL #, TEXT STRING
  398.  
  399. tHE FILE NUMBER SHOULD BE ANY NUMBER FROM 1 TO 127. nUMBERS FROM 128 TO 255
  400. CAN BE USED BUT SHOULD BE AVOIDED AS THEY CAUSE THE print STATEMENT TO GENERATE
  401. A LINEFEED AFTER CARRIAGE RETURNS. tHE DEVICE NUMBER IS USUALLY 8.
  402.  
  403. tHE CHANNEL NUMBER CAN BE ANY NUMBER FROM 2 TO 15. tHESE REFER TO CHANNELS USED
  404. TO COMMUNICATE WITH THE DISK, AND CHANNELS 0 AND 1 ARE USED BY THE OPERATING
  405. SYSTEM FOR loadING AND saveING. cHANNELS 2 THROUGH 14 CAN BE USED TO SEND DATA
  406. TO FILES WHILE 15 IS RESERVED AS THE COMMAND CHANNEL.
  407. tHE TEXT STRING IS A CHARACTER STRING THAT IS USED AS THE NAME FOR THE FILE
  408. CREATED. a FILE CANNOT BE CREATED UNLESS THE FILE NAME IS SPECIFIED IN THE TEXT
  409. STRING. iF YOU ATTEMPT TO OPEN A FILE ALREADY OPENED, THE ERROR SIGNAL
  410.  "file open error" WILL BE GENERATED.
  411.  
  412. examples:open 5,8,5, "test" (CREATES A FILE CALLED test)
  413.  
  414. open 15,8,15,"i" (SENDS COMMAND TO DISK ON COMM A CHANNEL)
  415.  
  416. open a,b,c,z$ (THESE VARIABLES MUST BE DEFINED)
  417.  
  418.  
  419. print#
  420.  
  421. purpose: fILLS A PREVIOUSLY openED FILE WITH DATA.
  422.  
  423. format: print# FILE #, TEXT STRING
  424.  
  425. tHE print# COMMAND WORKS EXACTLY LIKE THE print COMMAND EXCEPT THE DATA GOES
  426. TO A DEVICE OTHER THAN THE SCREEN, IN THIS CASE THE DISK DRIVE. wHEN USED WITH
  427. A DATA CHANNEL, print# SENDS INFORMATION TO A BUFFER IN THE DISK DRIVE WHICH
  428. THEN loadS ONTO THE DISK. wHEN USED WITH A COMMAND CHANNEL, print# SENDS
  429. COMMANDS TO THE DISK DRIVE. THE COMMAND IS PLACED INSIDE QUOTES AS A TEXT
  430. STRING.
  431.  
  432. examples: print# 7,c$ (FILLS FILE 7 WITH TEXT STRING c$)
  433.  
  434. print# 15,"i" (SENDS DISK COMMAND ON COMMAND CHANNEL)
  435.  
  436.  
  437. initialize
  438.  
  439. purpose: iNITIALIZES DISK DRIVER TO POWER UP CONDITION.
  440.  
  441. format; open 15,8,15, "i" OR
  442. open 15,8,15 : print#15, "i"
  443.  
  444. sOMETIMES, AN ERROR CONDITION ON THE DISK WILL PREVENT YOU FROM PERFORMING
  445. AN OPERATION. initialize RETURNS THE DISK DRIVE TO ITS ORIGINAL STATE WHEN
  446. POWER IS TURNED ON.
  447.  
  448.  
  449. purpose: fORMATS NEW DISK OR RE-FORMATS USED ONE.
  450.  
  451. format: print#15, "new 0: DISK NAME, ID#"
  452.  
  453. tHIS COMMAND FORMATS A NEW DISK. iT IS ALSO USEFUL TO ERASE AN ALREADY-
  454. FORMATTED DISK, AS IT ERASES THE ENTIRE DISK, PUTS TIMING AND BLOCK MARKERS ON,
  455. AND CREATES THE DIRECTORY AND THE bam. tHE DISK NAME IS FOR USER CONVENIENCE
  456. WHILE THE ID# IS A 2 DIGIT ALPHANUMERIC IDENTIFIER THAT IS PLACED IN THE
  457. DIRECTORY A EVERY BLOCK ON THE DISK. iF YOU SWITCH DISKS WHILE WRITING DATA,
  458. THE DRIVE WILL KNOW BY CHECKING THE ID#.
  459.  
  460. examples: open 15,8,15, "new 0: test disk, a1"
  461.  
  462.   open 15,8,15 : print#15# "n 0: my disk, my"
  463.  
  464. iF THE DISK NEEDS ERASING BUT NOT REFORMATTING, THE SAME 
  465. COMMAND IS USED, BUT LEAVE OUT THE ID#.
  466.  
  467. example:open 15,8,15, "n 0: new info"
  468.  
  469.  
  470. scratch
  471.  
  472. purpose: eRASE A FILE OR FILES FROM THE DISK.
  473.  
  474. format:print#15, "scratch 0: FILENAME"
  475.  
  476. tHIS COMMAND ERASES ONE OR MORE FILES FROM THE DISK, MAKING ROOM FOR NEW OR
  477. LONGER FILES. gROUPS OF FILES CAN BE ERASED AT ONE TIME BY NAMING ALL OF THEM
  478. IN ONE SCRATCH COMMAND.
  479.  
  480. examples:print#15,"s 0: text" (ERASES FILE CALLED text)
  481.  
  482. print#15,"scratch0: text, 0:test, 0: music"
  483. (ERASES FILES text, test AND music)
  484.  
  485.  
  486. copy
  487.  
  488. purpose: dUPLICATE AN EXISTING FILE.
  489.  
  490. format:print#15,"copy 0:NEWFILENAME=0: OLDFILENAME"
  491.  
  492. copy ALLOWS YOU TO MAKE A COPY OF ANY PROGRAM OR FILE ON THE DISK. tHE NEW
  493. FILE'S NAME MUST BE DIFFERENT FROM THE OLD ONE. copy CAN ALSO COMBINE UP TO
  494. FOUR FILES INTO ONE NEW ONE.
  495.  
  496. examples:print#15,"c 0:backup=0: original"
  497.  
  498. print#15,"copy 0: newfile=0: old1,0: old2,0"
  499.  (COMBINES old1 AND old2 INTO newfile)
  500.  
  501.  
  502. rename
  503.  
  504. purpose: cHANGE cHE NAME OF EXISTING FILE.
  505.  
  506. format:print#15"rename0: NEWNAME=0: OLDNAME"
  507.  
  508. tHIS COMMAND LETS YOU CHANGE THE NAME OF A FILE ONCE IT'S IN THE DISK
  509. DIRECTORY. rename WILL NOT WORK ON ANY FILES THAT ARE CURRENTLY OPEN.
  510.  
  511. example:print#15,"r 0:goodname=0: dumbname"
  512.  
  513.  
  514. validate
  515.  
  516. purpose: rEMOVES WASTED SPACES ON DISK.
  517.  
  518. format: open 15,8,15,"v0:"
  519.  
  520. aFTER A DISK HAS HAD MANY FILES SAVED AND ERASED, SMALL GAPS IN THE DATA BEGIN
  521. TO ACCUMULATE AND WASTE MEMORY SPACE ON THE DISK. validate REORGANIZES YOUR
  522. DISK SO YOU CAN GET THE MOST MEMORY FROM THE AVAILABLE SPACE. aLSO, THIS
  523. COMMAND REMOVES FILES THAT WERE openED BUT NEVER PROPERLY CLOSED.
  524.  
  525. caution! validate ERASES RANDOM FILES (SEE CHAPTER 7). iF YOUR DISK CONTAINS
  526. RANDOM FILES, do not USE THIS COMMAND!
  527.  
  528.  
  529. reading the error channel
  530.  
  531. wITHOUT THE dos sUPPORT pROGRAM, THERE IS NO WAY TO READ THE DISK ERROR CHANNEL
  532. SINCE YOU NEED TO USE THE input# COMMAND, UNUSABLE OUTSIDE A PROGRAM. hERE IS A
  533. SIMPLE basic PROGRAM TO READ THE ERROR CHANNEL:
  534.  
  535. 10 open 15,8,15
  536. 20 input#15, a$, b$, c$, d$
  537. 30 print a$, b$ c$, o$
  538.  
  539. wHEN YOU USE AN input# FROM THE COMMAND CHANNEL, YOU READ UP TO FOUR VARIABLES
  540. THAT DESCRIBE THE ERROR CONDITION. THE FIRST, THIRD, AND FOURTH ARE NUMBERS SO
  541. NUMERIC VARIABLES CAN BE USED. tHE inputS ARE ORGANIZED AS FOLLOWS:
  542.  
  543. fIRST:ERROR NUMBER (0 MEANS NO ERROR).
  544. sECOND:ERROR DESCRIPTION.
  545. tHIRD:tRACK NUMBER WHERE ERROR OCCURRED.
  546. fOURTH:BLOCK (SECTOR) IN TRACK WHERE ERROR OCCURRED.
  547.  
  548. eRRORS ON TRACK 18 CONCERN THE bam AND DIRECTORY.
  549.  
  550.  
  551. close
  552.  
  553. purpose: pROPER ALLOCATION OF DATA BLOCKS, CLOSES ENTRY.
  554.  
  555. format: close FILE#
  556.  
  557. tHIS COMMAND IS VERY IMPORTANT. oNCE A FILE THAT WAS OPENED IS NO LONGER NEEDED
  558. FOR DATA ENTRY, it must be closed or else all data in that file will be lost.
  559.  
  560. iT IS VERY IMPORTANT THAT THE DATA FILES BE CLOSED BEFORE THE ERROR CHANNEL
  561. (CHANNEL #15) IS CLOSED. oTHERWISE, THE DISK DRIVE WILL CLOSE THEM FOR YOU BUT
  562. basic WILL STILL THINK THEY ARE OPEN AND LET YOU TRY TO WRITE TO THEM. tHE
  563. ERROR CHANNEL SHOULD BE openED FIRST AND CLOSED LAST OF ALL YOUR FILES.
  564.  
  565. note: iF YOUR basic PROGRAM LEADS TO AN ERROR CONDITION, ALL FILES ARE closeD
  566. IN basic, BUT NOT ON THE DISK DRIVE. THIS IS very dangerous!
  567. iMMEDIATELY TYPE:
  568.  
  569. close 15: open 15,8,15: close 15
  570.  
  571. tHIS WILL RE-INITIALIZE YOUR DRIVE AND MAKE ALL YOUR FILES SAFE.
  572.  
  573.  
  574. 6. sequentialfiles
  575.  
  576. sEQUENTIAL FILES ARE STORED AND READ SEQUENTIALLY FROM BEGINNING TO END. tHERE
  577. ARE BASICALLY THREE DIFFERENT TYPES OF SEQUENTIAL FILES THAT CAN BE USED. tHE
  578. FIRST IS THE PROGRAM FILE, WHICH IS ABBREVIATED IN THE DIRECTORY AS prg. tHE
  579. prg IS THE ONLY SEQUENTIAL FILE THAT CAN STORE AND READ PROGRAMS. tHE SECOND
  580. FILE, SEQUENTIAL (seq), AND THE THIRD FILE, USER (usr), ARE FOR DATA HANDLING.
  581. tHESE TWO FILES MUST BE OPENED JUST LIKE THE COMMAND CHANNEL IN THE LAST
  582. CHAPTER.
  583.  
  584. open
  585. purpose: oPEN A SEQUENTIAL FILE.
  586.  
  587. format: open FILE#, DEVICE#, CHANNEL#, "0: NAME, TYPE, DIRECTION"
  588.  
  589. tHE FILE NUMBER IS THE SAME AS IN PREVIOUS USES OF THE open COMMAND, THE
  590. DEVICE NUMBER IS USUALLY 8, THE CHANNEL NUMBER IS A DATA CHANNEL, 2 THROUGH 14.
  591. iT'S A GOOD IDEA TO USE THE SAME NUMBER FOR BOTH FILE AND CHANNEL NUMBERS, FOR
  592. EASY REMEMBERING (YOU MAY HAVE NOTICED THIS IN PREVIOUS EXAMPLES).
  593.  
  594. tHE NAME IS THE FILE NAME, FOR WHICH NO WILD CARDS OR PATTERN MATCHING MAY BE
  595. USED IF YOU'RE CREATING A WRITE FILE. THE TYPE CAN BE ANY ONE FROM THE LIST
  596. BELOW, OR AT LEAST THE FIRST LETTER OF ONE. tHE DIRECTION MUST BE read OR
  597. write, OR AT LEAST THEIR FIRST LETTERS.
  598.  
  599. fILE tYPE      cODEmEANING
  600.  
  601. 00sCRATCHED
  602.  *seq01uNCLOSED sEQUENTIAL FILE
  603.  *prg02uNCLOSED pROGRAM FILE
  604.  *usr03uNCLOSED uSER FILE
  605.  *rel04uNCLOSED rELATIVE FILE (NOT IMPLEMENTED)
  606.   del80dELETED (RARELY USED TYPE)
  607.   seq81sEQUENTIAL FILE
  608.   prg82pROGRAM FILE
  609.   usr83uSER FILE
  610.   rel84rELATIVE (NOT IMPLEMENTED IN basic 2.0)
  611.   del<c0lOCKED dELETED
  612.   seq<c1lOCKED sEQUENTIAL FILE
  613.   prg<c2lOCKED pROGRAM FILE
  614.   usr<c3lOCKED uSER FILE
  615.   rel<c4lOCKED rELATIVE FILE (NOT IMPLEMENTED)
  616.  
  617.   nOTE: iT IS POSSIBLE TO USE VALUES NOT LISTED ABOVE, BUT THE RESULTS MAY BE
  618.   UNPREDICTABLE. 
  619.  
  620.  
  621. examples:
  622. open 5,8,5, "0: data, s, r"
  623.  
  624. open a,b,c,"0:text, p,w"
  625.  
  626. open a,b,c,"o:" +a$+ "u,w"
  627.  (openS A WRITE FILE WITH A NAME SPECIFIED BY THE STRING
  628.   VARIABLE a{$7e})
  629.  
  630. open 2,8,2 "@0: phones, s, w"
  631.  (REPLACES OLD VERSION OF THE FILE WITH A NEW ONE)
  632.  
  633. oNCE A FILE HAS BEEN OPENED FOR READING OR WRITING, THREE COMMANDS CAN BE USED
  634. TO ACTUALLY TRANSFER THE DATA. tHESE COMMANDS ARE print#, input#, AND get#.
  635.  
  636.  
  637. print#
  638.  
  639. purpose: dIRECTS OUTPUT TO PREVIOUSLY OPENED FILE.
  640.  
  641. format: print# FILE#, DATA LIST (NO SPACE ALLOWED BETWEEN print AND #)
  642.  
  643. tHE print# STATEMENT WORKS EXACTLY LIKE print: FORMATTING CAPABILITIES FOR
  644. PUNCTUATION AND DATA TYPES WORK JUST THE SAME. bUT THAT MEANS YOU NEED TO BE
  645. CAREFUL WHEN PUTTING DATA INTO FILES. tHE FILE NUMBER IS THE ONE JUST openED
  646. AND THE DATA LIST CONSISTS OF VARIABLES AND/OR TEXT INSIDE QUOTATION MARKS.
  647.  
  648. cARE MUST BE TAKEN WHEN WRITING IN DATA SO THAT IT IS AS EASY AS POSSIBLE TO
  649. READ OUT LATER. cOMMAS USED TO SEPARATE ITEMS WILL CAUSE SPACES TO BE STORED
  650. ON THE DISK. sEMICOLONS WILL KEEP SPACES FROM BEING STORED. iF BOTH COMMAS AND
  651. SEMICOLONS ARE ABSENT, A CARRIAGE RETURN (cr) WILL BE STORED AT THE END OF THE
  652. DATA THAT IS WRITTEN IN. 
  653. cONSIDER THE FOLLOWING EXAMPLE PROGRAM:
  654.  
  655. 10 a$="this is a"
  656. 20 b$="test"
  657. 30 open 8,8,8, "o:test ,s,w"
  658. 40 print#8,a$,b$"of the disk"
  659. 50 close 8
  660. 60 end
  661.  
  662. iF YOU COULD SEE THE DATA AND ITS POSITION ON THE 
  663. DISK, IT WOULD LOOK LIKE THIS:
  664.  
  665.  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
  666.  t  h  i  s     i  s     a                                t  e  s  t  o  f
  667.  
  668. 26 27 28 29 30 31 32 33 34 35
  669.  t  h  e     d  i  s  k cr EOF (END OF FILE)
  670.  
  671. tHE COMMA, SEMI-COLON, AND CARRIAGE RETURN HAVE SPECIAL MEANING THEN STORED TO
  672. THE DISK. wHEN USED INSIDE A STRING OR QUOTES, THEY WILL BE STORED AS REGULAR
  673. CHARACTERS. wHEN USED AS A SEPARATOR BETWEEN FIELDS, THE COMMA INSERTS SPACES
  674. (USUALLY A WASTE OF MEMORY), THE SEMICOLON DOESN'T, AND THE cr STORES A
  675. CARRIAGE RETURN ON THE DISK. THESE ARE IMPORTANT WHEN YOU USE get# OR input#
  676. TO RETRIEVE THE DATA YOU STORED.
  677.  
  678. get#
  679. purpose: tO GET DATA FROM THE DISK BYTE BY BYTE.
  680.  
  681. format: get FILE #, VARIABLE LIST
  682.  
  683. dATA COMES IN BYTE BY BYTE, INCLUDING cr'S, COMMAS, AND OTHER SEPARATORS.
  684. gENERALLY, IT'S SAFER TO USE CHARACTER STRING VARIABLES TO AVOID ERROR
  685. MESSAGES.
  686.  
  687. examples:
  688. get#8, a$
  689.  
  690. get#5, a (ONLY WORKS FOR NUMERICAL DATA)
  691.  
  692. get#a, b$, c$, d$ (getS MORE THAN ONE VARIABLE AT A TIME)
  693.  
  694. tHE get# STATEMENT IS VERY USEFUL WHEN THE ACTUAL DATA CONTENT OR STRUCTURE IS
  695. NOT KNOWN, SUCH AS A FILE ON A DISK THAT HAS BEEN DAMAGED. iF YOU ARE FAMILIAR
  696. WITH THE FILE AND THERE ARE NO PROBLEMS, input# IS MORE EFFICIENT. bUT TO LOOK
  697. AT DATA IN AN UNFAMILIAR OR DAMAGED FILE, THE FOLLOWING EXAMPLE PROGRAM WILL
  698. READ THE CONTENTS OUT (IN THIS CASE, FROM THE FILE CREATED IN THE print EXAMPLE
  699. PROGRAM).
  700.  
  701. 10 open 8,8,8, "test"
  702. 20 get#8,a$:print a$;
  703. 30 if st=0 then 20(st IS A STATUS SIGNAL)
  704. 40 close 8
  705. 50 end
  706.  
  707.  
  708. input#
  709.  
  710. purpose: rETRIEVE DISK DATA IN GROUPS.
  711.  
  712. format: input# FILE #, VARIABLE
  713.  
  714. tHE FILE NUMBER IS THE SAME AS THE ONE openED AND THE VARIABLE CAN REPRESENT
  715. CHARACTER STRINGS OR NUMBERS. tO READ A GROUP OF DATA, SEPARATORS ARE NEEDED
  716. TO INDICATE THE START AND FINISH OF THE GROUP. tHESE ARE THE COMMA, SEMICOLON,
  717. AND cr, AND WORK AS EXPLAINED IN THE SECTION ON THE print# COMMAND. nUMBERS ARE
  718. STORED WITH A SPACE IN FRONT OF THEM, WHICH IS EMPTY FOR POSITIVE NUMBERS AND
  719. CONTAINS A NEGATIVE SIGN FOR NEGATIVE NUMBERS. hERE'S A SAMPLE PROGRAM:
  720.  
  721. 10 open 8,8,8,"@0: datafile,s,w"
  722. 20 for a=1 to 10
  723. 30 print#8,a
  724. 40 next a
  725. SO close 8
  726. 60 open 2,8,2,"datafile,s,w"
  727. 70 input#2,b : printb
  728. 80 if st=0 then 70
  729. 90 close 2
  730. 100 end
  731.  
  732. tHIS EXAMPLE PROGRAM WILL WRITE THE NUMBERS 1 THROUGH 10 TO A SEQUENTIAL FILE
  733. CALLED datafile. lINES 70 AND 80 WILL READ THE DATA FROM THE DISK AND PRINT IT
  734. OUT. sEE PAGE 20 FOR TWO USEFUL SAMPLE PROGRAMS.
  735.  
  736. sEQUENTIAL FILES ARE FINE WHEN YOU'RE JUST WORKING WITH A CONTINUOUS STREAM OF
  737. DATA, BUT SOME JOBS NEED MORE FLEXIBILITY. fOR EXAMPLE, IF YOU HAVE A LARGE
  738. MAILING LIST, IT WOULD BE INCONVENIENT TO SCAN THE ENTIRE LIST TO FIND ONE
  739. PERSON'S ADDRESS. a RANDOM ACCESS METHOD WOULD LET YOU PICK OUT THE DESIRED
  740. DATA WITHOUT HAVING TO READ THE WHOLE FILE.
  741.  
  742. tHERE ARE TWO FILE TYPES THAT CAN DO THIS: RANDOM FILES AND RELATIVE FILES.
  743. rANDOM FILES ARE THE BEST CHOICE WHEN SPEED IS A DESIRED FACTOR, AS IN MACHINE
  744. LANGUAGE PROGRAMS. tHIS IS BECAUSE LOCATIONS OF THE DATA ARE MAINTAINED BY THE
  745. PROGRAM WHEN RANDOM FILES ARE USED, WHILE RELATIVE FILE LOCATIONS ARE MAINTAI-
  746. NED BY THE dos. tHE PROBLEM IS RANDOM FILES ARE EASY TO ACCIDENTALLY REMOVE
  747. FROM THE DISK SINCE THE dos DOESN'T MAINTAIN THEM.
  748.  
  749. rANDOM FILES ARE FILES THAT HAVE BEEN WRITTEN TO A CERTAIN PHYSICAL LOCATION
  750. ON THE DISK. tHE DISK IS DIVIDED INTO 35 CONCENTRIC RINGS, OR TRACKS, WITH EACH
  751. TRACK CONTAINING FROM 17 TO 21 SECTORS.
  752.  
  753.      tRACK nUMBER     sECTOR rANGE   tOTAL sECTORS
  754.  
  755.  1 to 170 to 2021
  756. 18 to 240 to 1819
  757. 25 to 300 to 1718
  758. 31 to 350 to 1617
  759.  
  760.  
  761. iT IS POSSIBLE TO READ AND WRITE TO ANY BLOCK ON THE DISK, AS WELL AS
  762. DETERMINE WHICH BLOCKS ARE AVAILABLE FOR USE. tHE FOLLOWING COMMANDS EXPLAIN
  763. HOW TO USE THE RANDOM FILE FUNCTIONS.
  764.  
  765. open
  766. purpose: openS A DATA CHANNEL FOR RANDOM ACCESS.
  767.  
  768. format: open FILE #, DEVICE #, CHANNEL #
  769.  
  770. wHEN WORKING WITH RANDOM FILES, YOU NEED TO HAVE TWO CHANNELS OPEN TO THE
  771. DISK: THE COMMAND CHANNEL (15) TO SEND COMMANDS AND A DATA CHANNEL (2 TO 14)
  772. FOR THE DATA TRANSFER. tHE DATA CHANNEL FOR RANDOM ACCESS FILES IS openED BY
  773. SELECTING THE POUND SIGN, "#", AS THE FILE NAME.
  774.  
  775. tHE ADDITIONAL "#" ON THE END OF THE COMMAND CAUSES THE DISK TO ALLOCATE A 256
  776. BYTE BUFFER FOR THE PURPOSE OF HANDLING THE DESIRED BLOCK OF DATA. iF A BUFFER
  777. NUMBER IS SPECIFIED, THE ALLOCATED BUFFER WILL BE THE ONE YOU SPECIFIED.
  778.  
  779. examples:
  780. open 5,8,5,"#"(YOU DON'T CARE WHICH BUFFER)
  781.  
  782. open a,8,c,"#2"(YOU SPECIFY BUFFER 2)
  783.  
  784. block-read
  785.  
  786. purpose: tO READ A SPECIFIC BLOCK OF DATA FROM THE DISK.
  787.  
  788. format: print# FILE #,"block-read:" CHANNEL #, DRIVE #, TRACK #, 
  789. BLOCK # (block-read CAN BE REPLACED WITH b-r)
  790.  
  791. tHE FILE AND CHANNEL NUMBERS ARE ONES THAT HAVE BEEN openED. tRACK NUMBER AND
  792. BLOCK NUMBER INDICATE WHICH 256 BYTE BLOCK TO BE READ. eXECUTING THIS COMMAND
  793. CAUSES THE DISK DRIVE TO THE SPECIFIED BLOCK OF DATA INTO THE BUFFER AREA.
  794. tHE DATA THEN BE READ FROM THE BUFFER AREA USING EITHER input OR get#.
  795. oNLY DATA IN THAT PARTICULAR BLOCK WILL BE READ, AND ANY UNUSED BYTES IN THE
  796. BLOCK WILL NOT BE READ, tHE SAMPLE PROGRAM BELOW USES block-read TO READ THE
  797. CONTENTS OF BLOCK 9 ON TRACK 5 DISPLAY THE BLOCK'S CONTENTS ON THE SCREEN.
  798.  
  799. 10 open 15,8,15
  800. 20 open 8,8,8,"#"
  801. 30 print#15, "b-r:"8,0,5,9(READS BLOCK INTO BUFFER)
  802. 40 get#8, a$
  803. 50 print a$;
  804. 60 if st=0 then 40
  805. 70 print "read complete"
  806. 80 close 8 : close 15
  807.  
  808.  
  809. block-write
  810.  
  811. format: print# FILE #, "block-write:" DRIVE #, CHANNEL #, TRACK #, 
  812. BLOCK #
  813.  
  814. block-write CAN BE SHORTENED TO b-w. tHIS COM{$7e}AND CAUSES DATA PREVIOUSLY STORED
  815. IN THE BUFFER TO BE WRITTEN TO THE SPECIFIED LOCATION ON THE DISK. tHE DATA
  816. SHOULD BE TRANSFERRED TO THE BUFFER ON A DATA CHANNEL USING print# BEFORE
  817. block-writeING IT INTO THE DISK. tHE dos KEEPS TRACK OF HOW MANY BYTES ARE
  818. STORED INTO THE BUFFER AND STORES THE BYTE COUNT INTO FIRST BYTE OF THE BLOCK
  819. WHEN block-write IS EXECUTED. tHIS MEANS THAT ONLY 255 BYTES CAN ACTUALLY BE
  820. WRITTEN TO OR READ FROM BLOCK, SINCE THE BYTE COUNT USES THE FIRST BYTE OF THE
  821. BLOCK. hERE'S AN EXAMPLE OF A ROUTINE THAT WILL WRITE DATA TO THE SAME BLOCK
  822. THAT IS READ IN THE block-read EXAMPLE ABOVE (TRACK 5, BLOCK 9):
  823.  
  824. 10 open 15,8,15
  825. 20 open 8,8,8,"#"
  826. 30 for aa=1 to 32
  827. 40 print#8, "testing"
  828. 50 next
  829. 60 print#15,"b-w:" 8,0,5,9
  830. 70 close8 : close15
  831.  
  832.  
  833. block-allocate
  834.  
  835. purpose: dETERMINE IF A PARTICULAR BLOCK IS FREE AND ALLOCATE IT IF SO.
  836.  
  837. format: print#15,"b-a:" CHANNEL #,DRIVE #, TRACK #, BLOCK #
  838.  
  839. aS MENTIONED EARLIER, THE dos DOES NOT MAINTAIN THE DISK WHEN block-reads AND
  840. block-writes ARE USED. bUT THE USER CAN MAKE SURE A PARTICULAR BLOCK IS
  841. AVAILABLE BY USING THE block-allocate COMMAND. tHIS ALLOWS USE OF block
  842. COMMANDS ON A DISK WITH FILES ALREADY ON IT. bY CHECKING THE bam, THE COMMAND
  843. DETERMINES IF THE SPECIFIED BLOCK HAS BEEN USED. sINCE THE bam UPDATES EACH
  844. TIME A FILE IS STORED ON THE DISK, FILES CAN BE MAINTAINED. block COMMANDS DO
  845. NOT UPDATE THE bam AND SO WILL NOT BE RECOGNIZED UNLESS A block-allocate HAS
  846. BEEN EXECUTED.
  847. caution: THE validate COMMAND DOES NOT RECOGNIZE RANDOM FILES AND SHOULD
  848. NEVER BE USED ON A DISK THAT HAS RANDOM FILES.
  849.  
  850. iF block-allocate DETERMINES THAT THE SPECIFIED BLOCK HAS ALREADY BEEN USED,
  851. AN ERROR SIGNAL (65) WILL BE GENERATED. tHE ERROR MESSAGE TELLS YOU THE NUMBERS
  852. OF THE NEXT AVAILABLE TRACK AND BLOCK ON THE DISK. tHIS BLOCK DOES NOT GET
  853. ALLOCATED, SO THE block-allocate COMMAND MUST BE USED AGAIN, BUT THIS TIME YOU
  854. CAN BE SURE THAT THE BLOCK SPECIFIED IS FREE TO USE. tHE FOLLOWING PROGRAM WILL
  855. ALLOCATE A BLOCK AND WRITE TO THAT BLOCK. iF THE BLOCK IS ALREADY USED, IT WILL
  856. WRITE TO THE NEXT AVAILABLE ONE, AS INDICATED BY THE ERROR MESSAGE.
  857.  
  858. 10 open 15,8,15:open 8,8,8,"#"
  859. 20 print#8,"this goes into the buffer"
  860. 30 t=5 : s=9
  861. 40 print#15,"b-a:"0,t,s
  862. 50 input#15,a,a$,b,c
  863. 60 if a=65 then t=b:s=c: goto 40
  864. 70 print#15,"b-w:" 8,0,t,s
  865. 80 print"data was stored in track:"t," sector:"s
  866. 90 close 8:close 15
  867. 100 end
  868.  
  869. lINE 20 LOADS THE BUFFER WITH TEXT, LINES 30 AND 40 CHECK BLOCK 9 ON TRACK 5
  870. TO SEE IF IT'S FREE, AND LINE 50 INPUTS THE ERROR SIGNAL. iF THE BLOCK IS FREE,
  871. THE DATA IS STORED THERE. iF BLOCK 9 ON TRACK 5 IS ALREADY USED, LINE 60 TAKES
  872. THE NEW BLOCK AND TRACK NUMBERS AND ALLOCATES THE BLOCK THEY SPECIFY, AND THEN
  873. THE DATA IS STORED IN THE NEW BLOCK. lINES 70 AND 80 READ THE TRACK AND B]OCK
  874. NUMBERS INTO THE COMPUTER AND PRINT THEM ON THE SCREEN.
  875.  
  876.  
  877. block-free
  878.  
  879. purpose: fREE UP A USED BLOCK FOR NEW USE.
  880.  
  881. format: open 15,8,15,"b-f:" DRIVE #, TRACK #, BLOCK #
  882.  
  883. tHIS COMMAND IS THE OPPOSITE OF block-allocate, IN THAT IT FREES A BLOCK YOU
  884. DON'T WANT TO USE ANY MORE FOR USE BY THE SYSTEM. iT IS SOMETHING LIKE THE
  885. scratch COMMAND IN THAT IT DOESN'T ACTUALLY ERASE ANYTHING, JUST FREES THE
  886. ENTRY, IN THIS CASE JUST IN THE bam.
  887.  
  888. examples:
  889. 10 open 8,8,"#"
  890. 20 open 15,8,15,"b-f:"0,5,9
  891. 30 close 8 : close 15 (FREES TRACK 5, BLOCK 9 FOR USE)
  892.  
  893.  
  894. buffer-pointer
  895.  
  896. purpose: tO ALLOW RANDOM ACCESS INSIDE A BLOCK.
  897.  
  898. format: print#15,"b-p:" CHANNEL #, LOCATION (BYTE #)
  899.  
  900. tHE BUFFER POINTER KEEPS TRACK OF WHERE THE LAST PIECE OF DATA WAS WRITTEN,
  901. AND POINTS TO WHERE THE NEXT PIECE OF DATA WILL BE READ. bY CHANGING THE BUFFER
  902. POINTER'S LOCATION IN THE BUFFER, YOU CAN RANDOMLY ACCESS INDIVIDUAL BYTES
  903. INSIDE A BLOCK. tHIS MEANS YOU CAN DIVIDE A SINGLE BLOCK INTO RECORDS.
  904.  
  905. example:
  906. print15,"b-p:" 5,64 (SETS POINTER TO 64TH CHARACTER IN BUFFER)
  907.  
  908.  
  909.  
  910. using random files
  911.  
  912. tHE PROBLEM WITH RANDOM FILES IS THAT YOU HAVE NO WAY OF KEEPING TRACK OF WHICH
  913. BLOCKS YOU HAVE USED. tO KEEP TRACK, THE MOST COMMON METHOD IS TO CREATE A
  914. SEQUENTIAL FILE TO GO WITH EACH RANDOM FILE. tHIS FILE IS USED TO KEEP JUST A
  915. LIST OF RECORD, TRACK, AND BLOCK LOCATIONS. tHIS MEANS YOU HAVE THREE CHANNELS
  916. OPEN TO THE DISK FOR EACH RANDOM FILE: tHE COMMAND CHANNEL, THE CHANNEL FOR THE
  917. RANDOM DATA, AND THE CHANNEL FOR THE SEQUENTIAL FILE. yOU'RE ALSO USING TWO
  918. BUFFERS AT THE SAME TIME.
  919.  
  920. fOLLOWING YOU WILL FIND FOUR PROGRAMS THAT USE RANDOM ACCESS WITHIN BLOCKS:
  921.  
  922. program a WRITES 10 RANDOM ACCESS BLOCKS WITH A SEQUENTIAL FILE.
  923. program b READS BACK THE SAME FILE.
  924. program c WRITES 10 RANDOM ACCESS BLOCKS WITH 4 RECORDS EACH.
  925. program d READS BACK THE SAME FILE.
  926.  
  927.  
  928. program a:wRITES SEQUENTIAL FILE
  929.  
  930. 10 open 15,8,15
  931. 20 open 5,8,5,"#"
  932. 30 open 4,8,4,"@0:keys,s,w"
  933. 40 a$="rECORD cONTENTS #"
  934. 50 for r = 1 to 10
  935. 60 print#5,a$","r
  936. 70 t=1:s=1
  937. 80 print#15,"b-a:"0,t,s
  938. 90 input#15,a,b$,c,d
  939. 100 if a=65 then t=c:s=d: goto 80
  940. 110 print#15,"b-w:"5,0,t,s
  941. 120 print#4,t","s
  942. 130 next r
  943. 140 close 4:close 5:close 15
  944.  
  945.  
  946.  program b:reads SEQUENTIAL FILE
  947. 10 open 15,8,15
  948. 20 open 5,8,5,"#"
  949. 30 open 4,8,4,"keys,s,r"
  950. 40 for r = 1 to 10
  951. 50 input#4,t,s
  952. 60 print#15,"b-r:"5,0,t,s
  953. 70 input#5,a$,x
  954. 80 if a$ <>"rECORD cONTENTS #" or x<>r then stop
  955. 90 print#15,"b-f:"0,t,s
  956. 100 next r
  957. 110 close 4:close 5
  958. 120 print#15,"s0:keys"
  959. 130 close 15
  960.  
  961.  
  962. program c:wRITES rANDOM aCCESS fILE
  963. 10 open 15,8,15
  964. 20 open 5,8,5,"#"
  965. 30 open 4,8,4,"keys,s,w"
  966. 40 a$="rECORD cONTENTS #"
  967. 50 for r=1 to 10
  968. 60 for l=1 to 4
  969. 70 print#15,"8-p:"5: (l-1)*64
  970. 80 print#5,a$","l
  971. 90 next l
  972. 100 t=1 : s=1
  973. 110 print#15,"b-a:",0,t,s
  974. L20 input#15,a,b$,c,d
  975. 130 if a=65 then t=c:s=d: goto 110
  976. 140 print#15,"b-w:"5,0,t,s
  977. 150 print#4,t","s
  978. 160 next r
  979. 170 close 4: close 5: close 15
  980.  
  981.  
  982. program d:reads rANDOM fILE
  983.  
  984. 10 open15,8,15
  985. 20 open 5,8,5,"#"
  986. 30 open 4,8,4,"keys,s,r"
  987. 40 for r = 1 to 10
  988. 50 input#4,t,s
  989. 60 print#15,"b-r:"5,0,t,s
  990. 70 for l = 1 to 4
  991. 80 print#15,"b-p:"5,(l-1)*64
  992. 90 input#5,a$,x
  993. 100 if a$<>"rECORD cONTENTS #" or x=l then stop
  994. 110 next l
  995. 120 print#15,"b-f:"0,t,s
  996. 130 next r
  997. 140 close 4: close 5
  998. 150 print#15,"s0:keys"
  999. 160 close 15
  1000.  
  1001.  
  1002. user1
  1003.  
  1004. purpose: tO READ A FULL 256-BYTE BLOCK FROM DISK TO BUFFER.
  1005.  
  1006. format: print# FILE #,"u1:" CHANNEL $, DRIVE #, TRACK #, BLOCK #
  1007.  
  1008. tHE user1 COMMAND IS ALMOST IDENTICAL TO THE block-read COMMAND EXCEPT THAT
  1009. user1 FORCES THE BUFFER-POINTER TO THE END OF THE BLOCK TO BE READ, SO THE
  1010. ENTIRE BLOCK IS READ. user1 CAN BE ABBREVIATED AS EITHER u1 OR ua. fOLLOWING
  1011. IS A SAMPLE PROGRAM THAT WILL GET THE ENTIRE 256 BYTES FROM TRACK 5 BLOCK 9
  1012. AND DISPLAY IT ON THE SCREEN.
  1013.  
  1014. 10 open 15,8,15:open 8,8,8
  1015. 20 print15,"u1:"8,0,5,G
  1016. 30 get#,a$:print a$;
  1017. 40 if st=0 then 30
  1018. 50 close 8:close 15
  1019. 60 end
  1020.  
  1021.  
  1022. user2
  1023.  
  1024. purpose: tO WRITE A BLOCK OF DATA TO THE DISK WITHOUT ALTERING 
  1025. THE BUFFER-POINTER.
  1026.  
  1027. format:print#15,"u2:" CHANNEL #, DRIVE #, TRACK #, BLOCK #
  1028.  
  1029. user2 (ABBREVIATED AS u2 OR ub) IS VARY SIMILIAR TO THE block-write COMMAND.
  1030. bUT u2 DOES NOT CHANGE THE POSITION OF THE BUFFER-POINTER WHEN THE BUFFER IS
  1031. WRITTEN TO THE DISK. tHIS IS USEFUL IF YOU WANT TO READ A BLOCK OF DATA INTO
  1032. THE BUFFER AND MODIFY IT. 
  1033. aFTER FINDING THE PARTICULAR DATA WITH THE BUFFER-POINTER AND MODIFYING IT,
  1034. THE user2 COMMAND CAN BE USED TO REWRITE THE DATA TO THE DISK- AND THE BUFFER-
  1035. POINTER WILL BE IN THE CORRECT POSITION.
  1036. iF block-write WAS USED, THE BUFFER-POINTER WOULD HAVE TO BE RESET FIRST. tHE
  1037. FOLLOWING PROGRAM USES THE user1 AND user2 COMMANDS.
  1038.  
  1039. 10 open 15,8,15:open 8,8,8
  1040. 20 print#15,"u1:"8,0,5,9
  1041. 30 print#15,"b-p:"8,32
  1042. 40 print#8, "a"
  1043. 50 print#15,"u2:"8,0,5,9
  1044. 60 close 8: close 15
  1045. 70 end
  1046.  
  1047. lINE 20 READS TRACK 5 BLOCK 9 INTO THE BUFFER. lINE 30 MOVES THE BUFFER-POINTER
  1048. TO BYTE 32. lINE 40 CHANGES BYTE 32 TO THE CHARACTER "a".
  1049. lINE 50 PRINTS THE BUFFER BACK TO THE DISK.
  1050. eVEN THOUGH THE BUFFER-POINTER HAS BEEN ALTERED, user2 MAKES SURE THE OLD
  1051. BUFFER-POINTER IS NOT CHANGED ON THE DISK.
  1052.  
  1053.  
  1054.  
  1055. 8. relative files
  1056.  
  1057. rELATIVE FILES CAN ACCESS ANY PIECE OF DATA ON THE DISK, JUST LIKE RANDOM
  1058. FILES, BUT YOU DON'T HAVE TO MAINTAIN THE FILES IN YOUR OWN PROGRAM. tHE dos
  1059. MAINTAINS THE DATA FOR YOU, KEEPING TRACK OF THE STATUS OF YOUR FILES. bECAUSE
  1060. OF THIS, RELATIVE FILES ARE SLOWER THAN RANDOM FILES, BUT OFTEN THE EXTRA
  1061. CONVENIENCE MAKES UP FOR THIS.
  1062.  
  1063. tHE dos KEEPS TRACK OF THE TRACKS AND SECTORS (BLOCKS) USED, AND EVEN ALLOWS
  1064. RECORDS TO OVERLAP FROM ONE BLOCK TO THE NEXT. iT DOES THIS BE ESTABLISHING
  1065. SIDE SECTORS, A SERIES OF POINTERS FOR THE BEGINNING OF EACH RECORD. tHERE CAN
  1066. BE 6 SIDE SECTORS IN A FILE, AND EACH SIDE SECTOR CAN POINT TO UP TO 120 
  1067. RECORDS. tHIS MEANS A FILE CAN HAVE AS MANY AS 720 RECORDS, AND SINCE EACH
  1068. RECORD CAN BE 254 CHARACTERS LONG, ONE FILE CAN FILL THE ENTIRE DISK.
  1069.  
  1070. tHE BLOCK FORMAT CONSISTS OF THE FIRST TWO BYTES SPECIFYING THE TRACK AND
  1071. SECTOR OF THE NEXT DATA BLOCK. tHE NEXT 254 BYTES CONTAIN THE ACTUAL DATA. aNY
  1072. EMPTY RECORD WILL HAVE ff (HEXADECIMAL FOR ALL 1'S) IN THE FIRST BYTE AND 00
  1073. IN THE REST OF THE RECORD. tHE SIDE SECTORS ARE USED TO REFERENCE ALL SIDE
  1074. SECTOR LOCATIONS, NOT JUST THE 120 DATA BLOCK LOCATIONS RELATED TO THAT SIDE
  1075. SECTOR. oN tHE NEXT PAGE YOU WILL FIND A CHART SHOWING THE FORMAT OF THE
  1076. RELATIVE FILES.
  1077.  
  1078.  
  1079. relative file format
  1080.  
  1081. data block:
  1082.  
  1083. bYTEdESCRIPTION
  1084.  
  1085. 0,1 ........tRACK AND SECTOR OF NEXT DATA BLOCK.
  1086.  
  1087. 2-256 ......254 BYTES OF DATA. eMPTY RECORDS CONTAIN ff (ALL BINARY ONES)
  1088. IN THE FIRST BYTE FOLLOWED BY 00 TO THE END OF THE RECORD.
  1089. pARTIALLY FILLED RECORDS ARE PADDED WITH NULLS (00).
  1090.  
  1091.  
  1092. side sector block:
  1093. bYTEdESCRIPTION
  1094.  
  1095.  0-1tRACK AND SECTOR OF NEXT SIDE SECTOR BLOCK.
  1096.  2sIDE SECTOR NUMBER (0-5).
  1097.  3rECORD LENGTH.
  1098.  4-5tRACK AND SECTOR OF FIRST  SIDE SECTOR (0).
  1099.  6-7tRACK AND SECTOR OF SECOND SIDE SECTOR (1).
  1100.  8-9tRACK AND SECTOR OF THIRD  SIDE SECTOR (2).
  1101. 10-11tRACK AND SECTOR OF FOURTH SIDE SECTOR (3).
  1102. 12-13tRACK AND SECTOR OF FIFTH  SIDE SECTOR (4).
  1103. 14-15tRACK AND SECTOR OF SIXTH  SIDE SECTOR (5).
  1104. 16-256tRACK AND SECTOR POINTERS TO 120 DATA BLOCKS.
  1105.  
  1106.  
  1107.  
  1108. using relative files
  1109.  
  1110. rELATIVE FILES ARE CREATED THE FIRST TIME THEY ARE openED. tHE SAME FILE WILL
  1111. BE USED UNTIL IT IS CLOSED. a RELATIVE FILE CAN ONLY BE ERASED FROM A DISK BY
  1112. USING THE scratch COMMAND OR BY REFORMATTING THE ENTIRE DISK. tHE "@" SIGN,
  1113. USED WITH save AS A save AND replace, WILL NOT WORK WITH RELATIVE FILES.
  1114.  
  1115.  
  1116. format tO CREATE RELATIVE FILE:
  1117.  
  1118. open FILE #, DEVICE #, CHANNEL #, "0:NAME,l," + chr$(RL#)
  1119.  (RECORD LENGTH)
  1120.  
  1121. examples:
  1122. open 2,8,2,"0:file,l"+chr$(100) (RECORD LENGTH IS 100)
  1123.  
  1124. open f,8,f,"0:" +a$+ ",l,"+chr$(q)
  1125.  
  1126.  
  1127. format to open eXISTING relative FILE:
  1128.  
  1129. open FILE #, DEVICE #, CHANNEL #, "0:NAME"
  1130.  
  1131. example:
  1132.  
  1133. open 2,8,6, "0: test"
  1134.  
  1135. iN THIS CASE, THE dos CAN TELL BY THE SYNTAX THAT IT IS A RELATIVE FILE. bOTH
  1136. OF THE ABOVE FORMATS ALLOW EITHER READING OR WRITING TO THE FILE.
  1137.  
  1138. hOWEVER: iN ORDER TO READ OR WRITE, before any operation, YOU MUST POSITION
  1139. THE FILE POINTER TO THE CORRECT RECORD POSITION.
  1140.  
  1141.  
  1142. position
  1143.  
  1144. purpose: tO position THE FILE POINTER AT A RECORD.
  1145.  
  1146. format:print# FILE#,"p" chr$(CHANNEL#)chr$(REC# LO)
  1147. chr$(REC# HI)chr$(RECORD POSITION)
  1148.  
  1149. note: chr$(RECORD POSITION) SPECIFIES THE LOCATION WITHIN THE RECORD ITSELF
  1150. AND IS OPTIONAL.
  1151.  
  1152. sINCE THERE ARE 720 RECORDS AVAILABLE AND THE LARGEST NUMBER ONE BYTE CAN HOLD
  1153. IS 256, TWO BYTES MUST BE USED TO SPECIFY THE POSITION. tHE REC#LO CONTAINS
  1154. THE LEAST SIGNIFICANT PART OF THE ADDRESS AND REC#HI HOLD THE MOST SIGNIFICANT.
  1155. tHE RELATIONSHIP IS REPRESENTED BY: REC# = REC#HI * 256 + REC#LO. tHE REC# IS
  1156. THE ACTUAL POSITION IN A RECORD WHERE DATA TRANSFER STARTS.
  1157.  
  1158. examples:
  1159. print#15,"p"chr$(2)chr$(1)chr$(0)
  1160. print#15,"p"chr$(ch)chr$(r1)chr$(r2)chr$(p)
  1161.  
  1162. hERE'S A SAMPLE PROGRAM THAT CREATES A RELATIVE FILE:
  1163.  
  1164. 10 open 15,8,15
  1165. 20 open 8,8,8,"0:test,l," + chr$(50)
  1166. 30 print#15,"p"chr$(8)chr$(0)chr$(4)chr$(1)
  1167. 40 print#{$7e},chr$(255)
  1168. 50 close8:close15
  1169.  
  1170. tHIS PROGRAM CREATES A RELATIVE FILE CALLED test THAT WILL CONTAIN RECORDS
  1171. THAT ARE 50 BYTES LONG. lINE 30 MOVES THE POINTER TO THE FIRST POSITION IN
  1172. RECORD #1024 (REC# = 256 * 4 + 0 = 1024). nOTICE THAT THE pointer COMMAND IS
  1173. SENT ON THE COMMAND CHANNEL WHILE DATA IS SENT ON A DATA CHANNEL, 8 IN THIS
  1174. CASE. sINCE THE RECORD DIDN'T ALREADY EXIST, AN ERROR MESSAGE WILL BE GENE-
  1175. RATED, WARNING YOU NOT TO USE get OR input.
  1176.  
  1177. oNCE A RELATIVE FILE EXISTS, YOU CAN open IT AND EXPAND IT OR ACCESS IT FOR
  1178. DATA TRANSFER. tHE FILE CAN BE EXPANDED BUT THE RECORD LENGTH CANNOT BE
  1179. CHANGED. tO EXPAND A FILE JUST SPECIFY A LARGER NUMBER OF RECORDS, AS IN LINE
  1180. 30 IN THE PREVIOUS EXAMPLE PROGRAM.
  1181. tO WRITE DATA TO AN EXISTING RELATIVE FILE USE THE FOLLOWING:
  1182.  
  1183. 10 open 15,8,15
  1184. 20 open 2,8,6,"0:test"
  1185. 30 gosub 1000
  1186. 40 if a=100 then stop
  1187. 50 print#15,"p"chr$(6)chr$(100)chr$(0)chr$(1)
  1188. 60 gosub 1000
  1189. 70 if a=50 then print#2,1: goto 50
  1190. 80 if a=100 then stop
  1191. 90 print#2,"123456789"
  1192. 100 print#15,"p"chr$(6)chr$(100)chr$(0)chr$(20)
  1193. 110 print#2, "john owerty"
  1194. 120 close 2: close15
  1195. 130 end
  1196. 1000 input#15,a,a5,b$,c$
  1197. 1010 if (a=50) or (a<20) then return
  1198. 1020 print "fatal error:";
  1199. 1030 print a,a$,b$,c$
  1200. 1040 a=100:return
  1201.  
  1202. lINES 10 AND 20 OPEN THE COMMAND AND A DATA CHANNEL. lINES 30 AND 40 CHECK FOR
  1203. ERRORS. lINE 50 MOVES THE FILE POINTER TO THE 100TH RECORD POSITION. sINCE NO
  1204. RECORDS EXIST YET, AN ERROR SIGNAL IS GENERATED.
  1205. lINES 60, 70, AND 80 CHECK FOR THE ERROR AND CREATE 100 RECORDS.
  1206. lINE 90 WRITES 9 BYTES OF DATA TO THE FIRST 9 LOCATIONS IN RECORD 100.
  1207. lINE 110 THEN PRINTS A NAME FROM THAT POSITION.
  1208.  
  1209. iT IS IMPORTANT THAT DATA IS WRITTEN INTO THE RECORD SEQUENTIALLY SO DATA
  1210. ALREADY IN THE RECORD IS NOT DESTROYED.
  1211.  
  1212. tHE FOLLOWING PROGRAM READS BACK THE DATA PUT IN THE FILE BY THE PREVIOUS
  1213. PROGRAM.
  1214.  
  1215.  10 open 15, 8,15
  1216.  20 open 2,8,6,"0:test"
  1217.  30 gosub 1000
  1218.  40 if a=100 then stop
  1219.  50 print#15,"p"chr$(6)chr$(100)chr$(0)chr$(1)
  1220.  60 gosub 1000
  1221.  70 if a=50 then print a$
  1222.  80 if a=100 then stop
  1223.  90 input#2,d$: print d$
  1224. 100 print#15, "p"chr$(6)chr$(100)chr$(0)chr$(20)
  1225. 110 input#2,d$: print e$
  1226. 120 close 2: close15
  1227. 130 end
  1228. 1000 input#15,a,a$,b$,c$
  1229. 1010 if (a=50) or (a<20) then return
  1230. 1020 print "fatal error:";
  1231. 1030 print a,a$,b$,c$
  1232. 1040 a=100:return
  1233.  
  1234. lINES 90, 100, AND 110 READ THE RECORD AND DISPLAY THE CONTENTS ON THE SCREEN.
  1235. notice THAT THE CARRIAGE RETURN SENT TO THE DISK AFTER EACH print# STATEMENT
  1236. ON THE WRITE ROUTINE IS THE SEPARATOR FOR EACH FIELD ON THE RECORD.
  1237.  
  1238. iF THE FILE IS TO BE WRITTEN OR READ SEQUENTIALLY, IT ISN'T NECESSARY TO
  1239. ADJUST THE POINTER TO EACH RECORD. tHE RECORD POINTER AUTOMATICALLY STARTS AT
  1240. POSITION 1 IF NO OTHER POSITION HAS BEEN DEFINED. tHE POINTER MOVES THROUGH
  1241. THE RECORD AS EACH FIELD IS READ OR WRITTEN.
  1242.  
  1243.  
  1244.  
  1245. 9. programming the disk controller
  1246.  
  1247. tHE oc-118 IS A SMART PERIPHERAL, WHICH MEANS THAT IT CONTAINS ITS OWN MICRO-
  1248. PROCESSOR AND MEMORY. aN ADVANCED PROGRAMMER CAN ACCESS THE MICROPROCESSOR AND
  1249. ITS MEMORY, PROVIDING A WIDE RANGE OF APPLICATIONS. rOUTINES CAN BE DESIGNED
  1250. THAT RESIDE IN THE DISK MEMORY AND OPERATE ON THE MICROPROCESSOR TO CONTROL
  1251. DISK DRIVE OPERATION. dos PROGRAMS CAN BE ADDED THAT COME FROM THE ACTUAL DISK.
  1252.  
  1253. tHERE IS 16k OF rom IN THE DISK DRIVE AS WELL AS 2k ram. tHE MOST USEFUL AREA
  1254. TO THE ADVANCED PROGRAMMER IS THE BUFFER ram AREA LOCATED BETWEEN 4000h AND
  1255. 5fffh (THE h MEANS IT'S A HEXADECIMAL NUMBER). tHIS AREA CAN ACTUALLY BE
  1256. WRITTEN INTO WITH mACHINE lANGUAGE LEVEL INSTRUCTIONS AND EXECUTED BY THE DISK
  1257. CONTROLLER (MICROPROCESSOR).
  1258.  
  1259. tHE METHOD OF HANDLING DATA TRANSFERS TO AND FROM MEMORY ARE REFERRED TO AS
  1260. memory COMMANDS. tHERE ARE THREE BASIC memory COMMANDS, AND SOME ADDITIONAL
  1261. COMMANDS CALLED user COMMANDS.
  1262.  
  1263.  
  1264. memory-write
  1265.  
  1266. purpose: tRANSFERS UP TO 34 BYTES OF DATA TO DRIVE MEMORY.
  1267.  
  1268. format: print#15,"m-w:"chr$(ADDRESS LOW BYTE) chr$(ADDRESS HIGH BYTE)
  1269. chr$(# OF CHARACTERS) chr$(DATA)
  1270.  
  1271. memory-write ALLOWS YOU TO WRITE UP TO 34 BYTES OF DATA AT A TIME INTO THE DISK
  1272. CONTROLLER'S MEMORY. memory-execute and user COMMANDS CAN BE USED TO RUN THIS
  1273. CODE. tHE LOW AND HIGH BYTES ARE THE DECIMAL EQUIVALENT OF THE HEXADECIMAL
  1274. ADDRESS IN THE ACTUAL MEMORY SPACE. tHE NUMBER OF BYTES IS THE DECIMAL AMOUNT
  1275. OF BYTES TO BE TRANSFERRED, UP TO 34. tHE DATA MUST BE THE DECIMAL REPRESENTA-
  1276. TION OF THE HEXADECIMAL-CODED INSTRUCTION YOU WISH SENT. sEE THE EXAMPLE BELOW.
  1277.  
  1278. 10 open 15,8,15
  1279. 20 print#15,"m-w:"chr$(0)chr$(112)chr$(3)chr$(169)chr$(8)chr$(96)
  1280. 30 close 15
  1281.  
  1282. tHIS ROUTINE WRITES THREE BYTES TO LOCATIONS 7000h, 7001h, AND 7002h
  1283. (256 *112 + 0 = 28672 = 7000h). tHE THREE BYTES ARE:
  1284. 169(a9h, A pAGE zERO INSTRUCTION),
  1285. 8(08h, A LOCATION),
  1286. 96(60h A return INSTRUCTION).
  1287.  
  1288. wHEN {$7e}XECUTED, THIS PROGRAM WOULD CAUSE THE DRIVE CONTROLLER TO LOAD ITS
  1289. ACCUMULATOR WITH THE CONTENTS OF LOCATION 0008h AND THEN RETURN CONTROL BACK
  1290. TO THE DISK DRIVE.
  1291.  
  1292.  
  1293. memory-read
  1294.  
  1295. purpose: rEAD DATA FROM DRIVE MEMORY.
  1296.  
  1297. format: print$15 FILE #, "m-r:" chr$(ADDRESS LOW BYTE) 
  1298. chr$(ADDRESS HIGH BYTE)
  1299.  
  1300. tHE memory-read COMMAND SELECTS A BYTE TO BE READ FROM A LOCATION IN THE DISK
  1301. DRIVE MEMORY, SPECIFIED BY THE LOW AND HIGH BYTES OF THE LOCATION ADDRESS. tHE
  1302. NEXT BYTE READ (USING get#) FROM CHANNEL #15 WILL BE FROM THE SPECIFIED MEMORY
  1303. LOCATION. tHE FOLLOWING EXAMPLE ILLUSTRATES THIS BY READING DATA FROM 10
  1304. CONSECUTIVE BYTES, LOCATED FROM ff00h TO ff0ah (IN DECIMAL, 65280 TO 65290).
  1305.  
  1306. 10 open 15,8,15
  1307. 20 for a = 1 to 10
  1308. 30 print#15,"m-r:"chr$(a)chr$(255)
  1309. 40 get#15,a$:print asc(a$ + chr$(0));
  1310. 50 next
  1311. 60 close 15
  1312.  
  1313. wHEN USING memory-read, ANY USE OF input# ON THE ERROR CHANNEL WILL GIVE
  1314. PECULIAR RESULTS. tHIS CAN BE CLEARED UP BY USING ANY OTHER COMMAND, EXCEPT
  1315. THE memory COMMANDS. hERE'S A USEFUL PROGRAM THAT READS THE DISK CONTROLLER'S
  1316. MEMORY:
  1317.  
  1318. 10 open 15,8,15
  1319. 20 input"location please";a
  1320. 30 a1 = int(a/256): a2 = a - a1*256
  1321. 40 print#15,"m-r:"chr$(a2)chr$(a1)
  1322. 50 for l = 1 to 5
  1323. 60 get#15,a$
  1324. 70 print asc(a$ + chr$(0))
  1325. 80 next
  1326. 90 input"continue";a$ 
  1327. 100 if left$(a$,1)="y" then 50
  1328. 110 goto 20
  1329.  
  1330.  
  1331. memory-execute
  1332.  
  1333. purpose: eXECUTES PROGRAM IN DISK MEMORY.
  1334.  
  1335. format: print#15 FILE #,"m-e:"chr$(ADDRESS LOW BYTE) chr$(ADDRESS 
  1336. HIGH BYTE)
  1337.  
  1338. oNCE A PROGRAM HAS BEEN LOADED INTO DISK MEMORY (EITHER THE 16k IN THE rom OR
  1339. THE 2k IN THE ram), THE ADDRESS OF THE memory-execute COMMAND SPECIFIES WHERE
  1340. PROGRAM EXECUTION WILL BEGIN. tHE USE OF THIS COMMAND REQUIRES THAT THE PROGRAM
  1341. TO BE EXECUTED END WITH AN rts INSTRUCTION, SO CONTROL WILL BE RETURNED TO THE
  1342. dos. fOLLOWING IS A ROUTINE THAT WRITES AN rts (rEtURN FROM sUBROUTINE).
  1343.  
  1344. 10 open 15,8,15,"m-w:"chr$(0)chr$(5);1;chr$(96)
  1345. 20 print#15,"m-e:"chr$(0)chr$(19): rem jumps to byte, returns
  1346. 30 close 15
  1347.  
  1348.  
  1349. user commands
  1350.  
  1351. aLONG WITH THE user1 AND user2 COMMANDS DISCUSSED IN CHAPTER 7, THERE ARE
  1352. OTHERS THAT, WHEN EXECUTED, CAUSE JUMPS TO SPECIFIC LOCATIONS IN THE DISK
  1353. DRIVE'S BUFFER. tHIS LETS YOU MAKE LONGER ROUTINE THAT OPERATE IN THE DISK'S
  1354. MEMORY ALONG WITH A JUMP TABLE, EVEN IN basic.
  1355.  
  1356.  
  1357. user commandfunction
  1358.  
  1359.  u1 OR uablock-read WITHOUT CHANGING BUFFER-POINTER
  1360.  u2 OR ubblock-write WITHOUT CHANGING BUFFER-POINTER
  1361.  u3 OR ucJUMP TO 0500h
  1362.  u4 OR udJUMP TO 0503h
  1363.  u5 OR ueJUMP TO 0506h
  1364.  u6 OR ufJUMP TO 0509h
  1365.  u7 OR ugJUMP TO 050ch
  1366.  u8 OR uhJUMP TO 050fh
  1367.  u9 OR uiJUMP TO fffah
  1368.  u; OR ujPOWER-UP VECTOR (eaa0h OR fe67h)
  1369.  ui+SET cOMMODORE 64 SPEED
  1370.  ui-SET vic 20 SPEED
  1371.  
  1372.  
  1373. examples OF user commands
  1374.  
  1375. print#15,"u3"
  1376.  
  1377. print#15,"u"+chr$(50+q)
  1378.  
  1379. print#15,"ui"
  1380.  
  1381.  
  1382.  
  1383. 1ocHANGING tHE dEVICE nUMBER
  1384.  
  1385. aLL PERIPHERALS NEED DEVICE NUMBERS SO THE COMPUTER CAN IDENTIFY WHICH ONE YOU
  1386. WANT TO TRANSFER DATA TO OR FROM. tHE oc-118 IS PRESET INSIDE THE HARDWARE WITH
  1387. A DEVICE NUMBER OF 8, DRIVE NUMBER 0. tHE DISK KNOWS ITS OWN DEVICE NUMBER BY
  1388. LOOKING AT A HARDWARE JUMPER ON THE CIRCUIT BOARD AND WRITING THE NUMBER BASED
  1389. ON THE JUMPER INTO A SECTION OF ITS ram.
  1390.  
  1391. tHE DEVICE NUMBER CAN BE CHANGED BY TWO METHODS, HARDWARE AND SOFTWARE. iF YOU
  1392. ARE TEMPORARILY USING TWO DISK DRIVES, USING THE SOFTWARE METHOD LETS YOU
  1393. CHANGE ONE DRIVE'S DEVICE NUMBER TEMPORARILY. iF YOU EXPECT TO USE TWO (OR
  1394. MORE) DRIVES ON A PERMANENT BASIS, THE HARDWARE METHOD IS A SIMPLE AND
  1395. PERMANENT WAY TO CHANGE A DRIVE'S DEVICE NUMBER.
  1396.  
  1397.  
  1398. 10-1.software method
  1399.  
  1400. tHE DEVICE NUMBER IS CHANGED BY PERFORMING A memory-write TO LOCATIONS 0077h
  1401. AND 0078h. tHE COMMAND IS EXECUTED ONCE THE COMMAND CHANNEL HAS BEEN OPENED.
  1402.  
  1403. format:print# FILE #,"m-w:"chr$(119)chr$(0)chr$(2)
  1404. chr$(ADDRESS + 32)chr$(ADDRESS + 64)
  1405.  
  1406. tHE ADDRESS IS THE NEW DEVICE NUMBER DESIRED. bELOW IS AN EXAMPLE OF
  1407. CHANGING THE DEVICE NUMBER TO 9.
  1408.  
  1409. 10 open 15,8,15
  1410. 20 print15,"m-w:"chr$(119)chr$(0)chr$(2)chr$(9+32)chr$(9+64)
  1411. 30 close 15
  1412.  
  1413. fIRST, TURN ON ONE DRIVE AND CHANGE ITS DEVICE NUMBER, THEN THE NEXT DRIVE,
  1414. UNTIL ALL THE DRIVES ARE ON.
  1415.  
  1416.  
  1417. 1o-2. cHANGING tHE dEVICE nUMBER bY hARDWARE
  1418.  
  1419. aLL PERIPHERALS NEED DEVICE NUMBERS SO THE COMPUTER CAN IDENTIFY WHICH ONE YOU
  1420. WANT TO TRANSFER DATA TO OR FROM. THE oc-118'S DEVICE NUMBER IS EXTREMELY EASY
  1421. TO CHANGE. nO HARDWARE OR SOFTWARE MODIFICATIONS ARE NEEDED. jUST SET THE dip
  1422. SWITCHES ON THE BOTTOM OF THE DRIVE TO CHANGE THE DRIVE'S DEVICE NUMBER. 
  1423. dETAILED INSTRUCTIONS ARE BELOW.
  1424.  
  1425. to change the device number:
  1426.  
  1427. 1. tURN off DISK DRIVE.
  1428.  
  1429. 2. tURN OVER AND LOCATE TWO SMALL dip SWITCHES ABOUT HALFWAY
  1430.    TOWARDS THE BACK.
  1431.  
  1432. 3. sET SWITCHES IN COMBINATION WHICH GIVES DESIRED DEVICE NUMBER.
  1433.    "on" IS TOWARDS THE back OF THE DRIVE.
  1434.  
  1435. dEVICE NUMBER SELECTED BY:
  1436. dEVICE NUMBER:891011
  1437. sWITCH 1:onoffonoff
  1438. sWITCH 2:ononoffoff
  1439.  
  1440.  
  1441. 4. dISK DRIVE IS NOW READY TO USE WITH NEW DEVICE NUMBER.
  1442.  
  1443.  
  1444.  
  1445.  
  1446. appendix a.list of commands
  1447.  
  1448.  
  1449. pAGE
  1450. cHAPTER 4. uSING pROGRAMS
  1451.  
  1452. load 6
  1453. save 8
  1454. save and replace 8
  1455. verify 9
  1456.  
  1457. cHAPTER 5. dISK cOMMANDS
  1458.  
  1459. open10
  1460. print#11
  1461. initialize11
  1462. new11
  1463. scratch12
  1464. copy12
  1465. rename12
  1466. validate12
  1467. close13
  1468.  
  1469. cHAPTER 6. sEQUENTIAL fILES
  1470.  
  1471. open14
  1472. print#15
  1473. get#15
  1474. input#16
  1475.  
  1476. cHAPTER 7. rANDOM fILES
  1477.  
  1478. open17
  1479. block-read18
  1480. block-write18
  1481. block-allocate19
  1482. block-free20
  1483. buffer-pointer20
  1484. buffer-execute-
  1485. user123
  1486. user224
  1487.  
  1488. cHAPTER 8. rELATIVE fILES
  1489.  
  1490. position27
  1491.  
  1492. cHAPTER 9. pROGRAMMING THE dISK cONTROLLER
  1493.  
  1494. memory-write30
  1495. memory-read 31
  1496. memory-execute31
  1497. user commands32
  1498.  
  1499.  
  1500.  
  1501.  
  1502. appendix b. description of error messages
  1503.  
  1504. wHENEVER AN ERROR SIGNAL IS GENERATED, THE led LIGHT ON THE 
  1505. FRONT PANEL OF THE oc-118 WILL START FLASHING. THE DISK DRIVE WILL 
  1506. NOT SEND THE ERROR MESSAGE TO THE COMPUTER UNLESS REQUESTED. tHE 
  1507. FOLLOWING ROUTINE INPUTS THE ERROR MESSAGE AND PRINTS IT ON THE 
  1508. COMPUTER'S SCREEN.
  1509.  
  1510. 10 open 15,8,5
  1511. 20 input#15,a,as,b$,c$
  1512. 30 print a,a$,b$,c$
  1513. 40 close 15
  1514. 50 end
  1515.  
  1516. bELOW IS A LIST AND EXPLANATION OF THE ERROR MESSAGES USED ON 
  1517. THE oc-118 dISK dRIVE:
  1518.  
  1519. 0no error
  1520. tHIS IS NOT AN INDICATION OF AN ERROR AND WILL OCCUR WHEN
  1521. THE ERROR CHANNEL IS READ WHILE THE led ISN'T FLASHING.
  1522.  
  1523.  
  1524. 1files scratched
  1525. tHIS ALSO IS NOT AN ERROR CONDITION.
  1526. rEADING THE ERROR CHANNEL AFTER ONE OR MORE FILES HAVE 
  1527. BEEN SCRATCHED WILL SHOW THIS, AS WELL AS THE NUMBER OF
  1528. FILES THAT HAVE BEEN SCRATCHED.
  1529.  
  1530. 2-9unused error message numbers
  1531.  
  1532. 20read error (BLOCK HEADER NOT FOUND)
  1533. tHE DISK CONTROLLER IS UNABLE TO LOCATE THE HEADER OF THE
  1534. REQUESTED BLOCK. tHIS CAN BE CAUSED BY A BAD HEADER ON THE
  1535. DISK OR SPECIFYING AN ILLEGAL SECTOR NUMBER.
  1536.  
  1537. 21read error (NO SYNC CHARACTER)
  1538. tHE DISK CONTROLLER IS UNABLE TO DETECT A SYNC MARK ON THE
  1539. DESIRED TRACK. cAUSED BY MISALIGNMENT OF THE READ/WRITE HEAD
  1540. OR DISK NOT PRESENT, UNFORMATTED, OR NOT SEALED PROPERLY.
  1541. cAN ALSO INDICATE A HARDWARE FAILURE.
  1542.  
  1543. 22read error (DATA BLOCK NOT PRESENT)
  1544. tHE DISK CONTROLLER HAS BEEN REQUESTED TO READ OR VERIFY 
  1545. A DATA BLOCK THAT WAS NOT PROPERLY WRITTEN. tHIS ERROR
  1546. MESSAGE OCCURS IN CONJUNCTION WITH THE block COMMANDS AND
  1547. INDICATES AN ILLEGAL TRACK AND/OR SECTOR REQUEST.
  1548.  
  1549. 23read error (CHECKSUM ERROR IN DATA BLOCK)
  1550. tHIS ERROR MESSAGE INDICATES THAT THERE IS AN ERROR IN ONE
  1551. OR MORE OF THE DATA BYTES. tHE DATA HAS BEEN READ INTO THE
  1552. dos MEMORY, BUT THE CHECKSUM OVER THE DATA IS IN ERROR.
  1553. mAY ALSO INDICATE GROUNDING PROBLEMS.
  1554.  
  1555. 24read error (BYTE DECODING ERROR)
  1556. tHE DATA OR HEADER HAS BEEN READ INTO THE dos MEMORY, BUT A
  1557. HARDWARE ERROR HAS BEEN CREATED DUE TO AN INVALID BIT PATTERN
  1558. IN THE DATA BYTE. mAY ALSO INDICATE GROUNDING PROBLEMS.
  1559.  
  1560. 25write error (WRITE-VERIFY ERROR)
  1561. tHIS MESSAGE IS GENERATED IF THE CONTROLLER DETECTS A MISMATCH
  1562. BETWEEN THE WRITTEN DATA AND DATA IN THE dos MEMORY.
  1563.  
  1564. 26write protect on
  1565. tHE CONTROLLER HAS BEEN REQUESTED TO WRITE A DATA BLOCK WHILE
  1566. THE WRITE PROTECT SWITCH IS DEPRESSED. tYPICALLY, THIS IS
  1567. CAUSED BY USING A DISK WITH A {$7e}RITE PROTECT TAB OVER THE NOTCH.
  1568.  
  1569. 27read error (CHECKSUM ERROR IN HEADER)
  1570. tHERE IS AN ERROR IN THE HEADER OF THE REQUESTED DATA BLOCK.
  1571. tHE BLOCK HAS NOT BEEN READ INTO THE dos MEMORY. mAY ALSO
  1572. INDICATE GROUNDING PROBLEMS.
  1573.  
  1574. 28write error (LONG DATA BLOCK)
  1575. tHE CONTROLLER ATTEMPTS TO DETECT THE SYNC MARK OF THE NEXT
  1576. HEADER AFTER WRITING A DATA BLOCK. iF THE SYNC MARK DOES NOT
  1577. APPEAR WITHIN A PRE-DETERMINED TIME, THE ERROR MESSAGE IS
  1578. GENERATED. tHE ERROR IS CAUSED BY A BAD DISK FORMAT (DATA
  1579. EXTENDS INTO THE NEXT BLOCK) OR BY A HARDWARE FAILURE.
  1580.  
  1581. 29disk id mismatch
  1582. tHE CONTROLLER HAS BEEN REQUESTED TO ACCESS A DISK WHICH HAS
  1583.  NOT BEEN INITIALIZED OR HAS A BAD HEADER. aLSO OCCURS IF
  1584. DISKS ARE SWITCHED DURING DATA TRANSFER.
  1585.  
  1586. 30sytax error (GENERAL SYNTAX)
  1587. tHE dos CANNOT INTERPRET THE COMMAND SENT TO THE COMMAND
  1588. CHANNEL. tYPICALLY, THIS IS CAUSED BY AN ILLEGAL NUMBER OF
  1589. FILE NAMES OR PATTERNS ARE ILLEGALLY USED.
  1590.  
  1591. 31sytax error (INVALID COMMAND)
  1592. tHE dos DOESN'T RECOGNIZE THE COMMAND. THE COMMAND MUST START
  1593. IN THE FIRST CHARACTER POSITION.
  1594.  
  1595. 32sytax error (LONG LINE)
  1596. tHE COMMAND SENT IS LONGER THAN 58 CHARACTERS.
  1597.  
  1598. 33syntax error (INVALID FILE NAME)
  1599. pATTERN MATCHING IS USED INVALIDLY IN THE open OR savE COMMAND.
  1600.  
  1601. 34syntax error (NO FILE GIVEN)
  1602. tHE FILE NAME WAS LEFT OUT OF A COMMAND OR THE dos DOES NOT
  1603. RECOGNIZE IT AS SUCH. tYPICALLY, A COLON (:) HAS BEEN OMITTED.
  1604.  
  1605. 35-38not used
  1606.  
  1607. 39syntax error (INVALID COMMAND)
  1608. mAY RESULT IF THE COMMAND SENT TO THE COMMAND CHANNEL IS 
  1609. UNRECOGNIZABLE BY THE dos.
  1610.  
  1611. 40-49not used
  1612.  
  1613. 50record not present
  1614. rESULT OF DISK READING PAST THE LAST RECORD THROUGH THE
  1615. input OR get COMMANDS. tHIS MESSAGE WILL ALSO OCCUR AFTER
  1616. POSITIONING TO A RECORD BEYOND THE END OF A FILE IN A RELATIVE
  1617. FILE. iF THE INTENT IS TO EXPAND THE FILE BY ADDING THE NEW
  1618. RECORD (WITH A print# COMMAND), THE ERROR MESSAGE MAY BE
  1619. IGNORED. input OR get SHOULD NOT BE USED AFTER THIS ERROR
  1620. OCCURS WITHOUT FIRST REPOSITIONING.
  1621.  
  1622. 51overflow in record
  1623. print# STATEMENT EXCEEDS THE RECORD BOUNDARY, TRUNCATING
  1624. INFORMATION. sINCE THE CARRIAGE RETURN, SENT AS A RECORD
  1625. TERMINATOR, IS COUNTED IN THE RECORD SIZE, THIS MESSAGE WILL
  1626. OCCUR IF THE TOTAL CHARACTERS IN THE RECORD (INCLUDING THE
  1627. FINAL CARRIAGE RETURN) EXCEEDS THE DEFINED SIZE.
  1628.  
  1629. 52file too large
  1630. rECORD POSITION WITHIN A RELATIVE FILE INDICATES THAT DISK
  1631. OVERFLOW WILL RESULT.
  1632.  
  1633. 53-59not used
  1634.  
  1635. 60write file not open
  1636. a WRITE FILE THAT HAS NOT BEEN CLOSED IS BEING OPENED FOR
  1637. READING.
  1638.  
  1639. 61file not open
  1640. a FILE BEING ACCESSED HAS NOT BEEN OPENED IN THE dos.
  1641. sOMETIMES IN THIS SITUATION, AN ERROR IS NOT GENERATED,
  1642. THE REQUEST IS SIMPLY IGNORED.
  1643.  
  1644. 62file not found
  1645. tHE REQUESTED FILE DOESN'T EXIST ON THE INDICATED DRIVE.
  1646.  
  1647. 63file exists
  1648. tHE FILE NAME OF THE FILE BEING CREATED ALREADY EXISTS ON
  1649. THE DISK.
  1650.  
  1651. 64file type mismatch
  1652. tHE FILE TYPE DOES NOT MATCH THE FILE TYPE IN THE DIRECTORY
  1653. ENTRY FOR THE REQUESTED FILE.
  1654.  
  1655. 65no block
  1656. oCCURS WHEN A BLOCK TO BE ALLOCATED HAS ALREADY BEEN ALLOCATED.
  1657. tHE PARAMETERS INDICATE THE TRACK AND SECTOR AVAILABLE WITH THE
  1658. NEXT HIGHEST NUMBER. iF THE PARAMETERS ARE ZERO, THEN ALL
  1659. BLOCKS HIGHER IN NUMBER ARE IN USE.
  1660.  
  1661. 66illegal track and sector
  1662. tHE dos HAS ATTEMPTED TO ACCESS A TRACK OR SECTOR WHICH DOES
  1663. NOT EXIST IN THE FORMAT BEING USED. mAY INDICATE A PROBLEM
  1664. READING THE POINTER TO THE NEXT BLOCK.
  1665.  
  1666. 67illegal sytem t or s
  1667. tHIS SPECIAL ERROR INDICATES AN ILLEGAL SYTEM TRACK OR SECTOR.
  1668.  
  1669. 68,69not used
  1670.  
  1671. 70no channel (AVAILABLE)
  1672. tHE REQUESTED CHANNEL IS NOT AVAILABLE, OR ALL CHANNELS ARE IN
  1673. USE. a MAXIMUM OF FIVE SEQUENTIAL FILES MAY BE OPENED AT ONE
  1674. TIME TO THE dos. dIRECT ACCESS CHANNELS MAY HAVE SIX OPENED
  1675. FILES.
  1676.  
  1677. 71directory error
  1678. tHE bam (bLOCK aVAILABILITY mAP) DOES NOT MATCH THE INTERNAL
  1679. COUNT. THERE IS A PROBLEM IN THE bam ALLOCATION OR THE bam HAS
  1680. BEEN OVERWRITTEN IN dos MEMORY. tO CORRECT THIS PROBLEM,
  1681. REINITIALIZE THE DISK TO RESTORE THE bam IN MEMORY. sOME
  1682. ACTIVE FILES MAY BE TERMINATED BY THE CORRECTIVE ACTION.
  1683.  
  1684. 72disk full
  1685. eITHER THE BLOCKS ON THE DISK ARE USED UP OR THE DIRECTORY IS
  1686. AT ITS LIMIT OF 144 ENTRIES.
  1687.  
  1688. 73dos mismatch("cbm dos v2.6 1541")
  1689. dos 1 AND 2 ARE READ COMPATIBLE BUT NOT WRITE COMPATIBLE.
  1690. dISKS MAY BE INTERCHANGEABLY READ WITH EITHER dos, BUT A DISK
  1691. FORMATTED ON ONE VERSION CANNOT BE WRITTEN UPON WITH THE OTHER
  1692. VERSION BECAUSE THE FORMAT IS DIFFERENT. tHIS ERROR IS
  1693. DISPLAYED WHENEVER AN ATTEMPT IS MADE TO WRITE UPON A DISK
  1694. WHICH HAS BEEN FORMATTED IN A NON-COMPATIBLE FORMAT.
  1695. tHIS MESSAGE MAY ALSO APPEAR AFTER POWER UP.
  1696.  
  1697. 74drive not ready
  1698. aN ATTEMPT HAS BEEN MADE TO ACCESS THE DISK DRIVE WHEN THERE
  1699. ISN'T A DISK IN THE DRIVE.
  1700.  
  1701.  
  1702.  
  1703.  
  1704. appendix c.bam AND dIRECTORY fORMAT dESCRIPTION
  1705.  
  1706. bam fORMAT
  1707.  
  1708. bYTEvALUEdESCRIPTION
  1709.  
  1710.  0 18tHE FIRST tRACK OF dIRECTORY
  1711.  1  1tHE FIRST sECTOR OF dIRECTORY
  1712.  2 65fREE.
  1713. 4-143bam
  1714.  
  1715.  +0nUMBER OF FREE SECTORS ON THE TRACK 0.
  1716.  +1bITMAP OF SECTORS  0 -  7.
  1717.  +2bITMAP OF SECTORS  8 - 15.
  1718.  +3bITMAP OF SECTORS 16 - 23.
  1719.  ETC.
  1720.  
  1721. 144-161dISK NAME
  1722. 162-163dISK id
  1723. 164160sHIFTED sPACE
  1724. 165-166 50,65ascii CHARACTERS '2a'. dISK FORMAT.
  1725. 167-170160sHIFTED sPACES
  1726. 171-255  0nOT USED
  1727.  
  1728.  
  1729. dIRECTORY fORMAT
  1730.  
  1731. bYTEdESCRIPTION
  1732.  
  1733.  0tRACK OF NEXT dIRECTORY BLOCK
  1734.  1sECTOR OF NEXT dIRECTORY BLOCK
  1735.  
  1736. 2-31fILE ENTRY #1
  1737.  2fILE tYPE
  1738.  3tHE FIRST TRACK OF THE FILE
  1739.  4tHE FIRST SECTOR OF THE FILE
  1740. 5-20fILENAME
  1741. 21-23uSED ONLY WITH RELATIVE FILES
  1742. 24-27nOT USED. cAN BE USED TO STORE CODES ETC.
  1743. 28-29oNLY USED WITH replace COMMAND
  1744. 30-31fILE LENGTH IN BLOCKS
  1745.  
  1746. 32-33uNUSED (SHOULD BE 0)
  1747.   uSED ONLY IN THE FIRST ENTRY TO
  1748.   STORE THE NEXT DIRECTORY BLOCK.
  1749. 34-63fILE ENTRY #2
  1750. 34fILE tYPE
  1751.  
  1752. ETC.
  1753.  
  1754.  
  1755.  
  1756.