home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / MLCOLUMN.ARC / MLCOL.6 < prev    next >
Encoding:
Text File  |  2019-04-13  |  6.7 KB  |  139 lines

  1.                   ═ACHINE ╠ANGUAGE ╨ART ╓╔
  2.  
  3.                             BY ╠YLE ╟IESE
  4.  
  5.                           (╠┘╠┼╟ ON ─┼╠╨╚╔)
  6.  
  7.  
  8. ╠AST MONTH ╔ STARTED EXPLAINING MY ╙┼╤ FILE READER FOR YOU. ╔ GOT UP TO
  9. PUTTING THE OPENING MESSAGE ON THE SCREEN.
  10.  
  11. ╬EXT WE MUST GET FROM YOU (THE USER) THE FILENAME OF THE FILE YOU WANT
  12. PRINTED OUT. ╫E HAVE TO START BY DECIDING WHERE WE ARE GOING TO STORE
  13. THE FILENAME. ╔N ┬┴╙╔├, ┬┴╙╔├ TAKES CARE OF THAT AUTOMATICALLY. ┬UT OF
  14. COURSE THAT CONVENIENCE IS OFFSET BY THE SLOW SPEED OF ┬┴╙╔├.
  15.  
  16. ╔N THIS PROGRAM ╔ DECIDED TO USE THE CASSETTE BUFFER AT $033├. ┴GAIN ╔
  17. WILL USE THE INDEX AND INDEX+1 MEMORY LOCATIONS TO POINT TO THE
  18. FILENAME. ╔ WILL ALSO NEED ANOTHER VARIABLE FOR THE LENGTH OF THE
  19. FILENAME. ╞OR THAT ╔ USED $╞─ AND INITIALIZED IT BY PUTTING A ┌ERO BYTE
  20. IN IT.
  21.  
  22. ╔ ISSUED A CALL TO THE ╦┼╥╬┴╠ ├╠╥├╚╬ ROUTINE NEXT, JUST TO MAKE SURE ╔
  23. WAS GETTING MY INPUT FROM THE KEYBOARD. ╬EXT CALL THE ╟┼╘╔╬ ROUTINE TO
  24. GET THE KEYPRESSES. ╔F NO KEYS ARE PRESSED IT WILL RETURN WITH A ZERO
  25. IN THE ┴CCUMLATOR, WHICH THE INSTRUCTION IN LINE 700 CHECKS FOR.
  26.  
  27. ╬EXT WE NEED TO CHECK FOR THE DELETE KEY (WE DON'T MAKE TYPING MISTAKES
  28. DO WE?). ╔F WE HAVEN'T PUT ANY CHARACTERS IN THE FILENAME, IT WOULD BE
  29. HARD TO DELETE ONE. ╙O IN LINE 730 & 740 WE CHECK TO MAKE SURE WE HAVE
  30. CHARACTERS THERE. ╘HEN DELETE THE LAST CHARACTER PRINTED ON THE SCREEN
  31. AND ─┼├REMENT THE ╞╠┼╬ VARIABLE IN LINE 770.
  32.  
  33. ╬EXT WE HAVE TO CHECK FOR A CARRIAGE RETURN. ╘HE CARRIAGE RETURN IS
  34. USED FOR TWO THINGS. ╔T WILL MARK THE END OF THE FILENAME AFTER WE HAVE
  35. TYPED IT IN. ┴LSO, WE USE IT TO EXIT THE ROUTINE. ┬Y CHECKING ╞╠┼╬
  36. AFTER GETTING A CARRIAGE RETURN (IN LINES 810 & 820), IF THERE ARE NO
  37. CHARACTERS YET, WE EXIT BY THE ╥╘╙ INSTRUCTION IN 830. ╧R ┬RANCH IF ╬OT
  38. ┼QUAL TO THE ─╧╨┼╬ ROUTINE.
  39.  
  40. ╘HEN IF WE GET TO LINE 840, WE HAVE A CHARACTER WE WANT TO ADD TO THE
  41. FILENAME. ╫E NEED TO FIRST CHECK THE LENGTH OF THE FILENAME BEFORE WE
  42. ADD IT TO THE FILENAME. ╔F THE FILENAME IS TOO LONG WE REALLY DON'T
  43. WANT THE EXTRA CHARACTERS. ┴T THIS POINT, WE BRANCH BACK (LINE 860) TO
  44. MAKE YOU PRESS THE RETURN BUTTON BEFORE TRYING TO FIND THE FILE.
  45.  
  46. ┬UT 18 CHARACTERS? ╞ILENAMES CAN BE ONLY 16 CHARACTERS LONG! ╘HAT'S
  47. RIGHT, BUT ADD THE PREFIX '0:' OR '1:' FOR THOSE OF US THAT HAVE DUAL
  48. DRIVES AND THE MAX LENGTH NOW BECOMES 18.
  49.  
  50. ╔ DID NOT CHECK FOR VALID CHARACTERS BY LIMITING INPUT TO NUMBERS
  51. AND/OR LETTERS ONLY. ╔ ONLY CHECKED FOR THE DELETE KEY AND THE RETURN
  52. KEY. ╙O THAT IS SOMETHING TO WATCH OUT FOR OR A FEATURE FOR YOU TO ADD.
  53.  
  54. ╬OW ECHO THE CHARACTER TO THE SCREEN FOR THE YOU TO SEE AND JUMP BACK
  55. FOR MORE CHARACTERS TO ╬╧╦┼┘, WHICH IS AT LINE 690.
  56.  
  57. ┴FTER WE HAVE FINISHED TYPING THE FILENAME, WE NEED TO GO TO THE DISK
  58. DRIVE AND OPEN A READ CHANNEL FROM WHICH TO GET THE CHARACTERS. ┬UT
  59. SINCE WE ARE MAKING A ╙┼╤ FILE READER, ╔ ADDED ',╙,╥' TO THE END OF THE
  60. FILENAME AND ADJUSTED ╞╠┼╬ ACCORDINGLY.
  61.  
  62. ╬OW, OPEN THE COMMAND CHANNEL TO THE DISK DRIVE SO WE CAN SEE ANY DISK
  63. ERRORS THAT MIGHT OCCUR. ╘HAT TAKES US DOWN TO LINE 1090. ╘HAT CHECKS
  64. FOR ERRORS OPENING THE ERROR CHANNEL.
  65.  
  66. ╬OW WE CAN OPEN OUR READ CHANNEL. ╫E START BY SETTING THE FILENAME FOR
  67. THE SYSTEM WITH THE ╙┼╘╬┴═ ROUTINE. ╬EXT THE ╙┼╘╠╞╙ AND THE ╧╨┼╬
  68. ROUTINE. ╬OW WE JUST PERFORMED THE EQUIVELENT OF ╧╨┼╬8,8,8,"╞╬┴═,╙,╥".
  69. ┴GAIN GO BACK TO YOUR ╨ROGRAMMERS ╥EFERENCE ╟UIDE IF YOU HAVE PROBLEMS
  70. USING THE ╦┼╥╬┴╠ ROUTINES. ╦NOWING HOW TO READ THAT PORTION OF THE ╨╥╟
  71. IS ESSTENIAL TO PROGRAMMING IN ═╠ ON A ├OMMODORE COMPUTER.
  72.  
  73. ╬OTE IN OPENING THE DISK CHANNEL, ╔ DIDN'T HAVE TO REMEMBER MANY
  74. NUMBERS? ┬Y USING THE NAMES (WHICH ARE DEFINED AT THE BEGINNING OF THE
  75. PROGRAM), ╔ DIDN'T HAVE TO REMEMBER WHERE ╔ PUT THE FILENAME OR WHERE ╔
  76. PUT THE FILE LENGTH NUMBER EITHER. ╙URE MAKES IT EASY TO WRITE A
  77. PROGRAM THAT WAY.
  78.  
  79. ┴LSO, WHAT IF ╔ MADE A MISTAKE IN PLACING MY FILENAME BUFFER? ╔F YOU
  80. DIDN'T USE A NAME FOR IT, YOU WOULD HAVE TO GO THROUGH THE PROGRAM VERY
  81. CLOSELY CHANGING EVERY REFERENCE TO IT. ┬UT HERE ╔ ONLY HAVE TO CHANGE
  82. IT IN ONE LOCATION, IN THE BEGINNING. ╔T WOULD BE VERY EASY TO MISS ONE
  83. SPOT IN THE PROGRAM MAKING DEBUGGING EVEN HARDER!
  84.  
  85. ╬OW THAT WE HAVE DONE THAT WE MUST CHECK TO MAKE SURE THAT THE FILE WAS
  86. THERE AND THE DISK DRIVE PROPERLY OPENNED A CHANNEL FOR US. ╫E DO THAT
  87. TWO WAYS. ╘HE FIRST ONE ACTUALLY CHECKS TO MAKE SURE THE COMPUTER WAS
  88. ABLE TO PROPERLY OPEN THE FILE TO THE DRIVE. ╫E DO THAT IN LINE 1190.
  89.  
  90. ╬EXT WE WILL READ THE DISK'S ERROR CHANNEL VIA A CALL TO THE SUBROUTINE
  91. ├╦┼╥╥╧╥ (LINE 1210). ╘HAT TAKES US TO LINE 4000. ╫E OPEN AN INPUT
  92. CHANNEL TO FILE #$0╞ AND READ THE ERROR CHANNEL.
  93.  
  94. ╔F THE FIRST TWO CHARACTERS OUT ARE $30 AND $30, THAT MEANS AN ERROR OF
  95. 00 OCCURED, WHICH OF COURSE MEANS NO ERROR. ╘HEN WE WOULD JUST TAKE ALL
  96. OF THE CHARACTERS OUT OF THE ERROR CHANNEL TO TIDY THINGS UP AND ╥E╘URN
  97. FROM ╙UBROUTINE.
  98.  
  99. ╔F ANYTHING ELSE IS RETURNED IN THE FIRST TWO CHARACTERS, SOMETHING
  100. WENT WRONG. ╘HEN WE WANT TO READ AND PRINT OUT THE ERROR MESSAGE ON THE
  101. SCREEN. ╘HAT'S WHY WE STORE THE FIRST TWO CHARACTERS. ╫HILE PRINTING
  102. THE ERROR MESSAGE, WE CHECK FOR THE END OF THE MESSAGE BY CHECKING FOR
  103. A CARRIAGE RETURN.
  104.  
  105. ╬OW THAT WE FOUND AN ERROR, WE CAN'T RETURN TO WHERE WE WERE IN THE
  106. PROGRAM, BECAUSE THAT WOULD LEAD US DOWN INTO THE FILE READ AND PRINT
  107. ROUTINES. ╫E WANT TO GO BACK TO THE BEGINNING OF THE PROGRAM.
  108.  
  109. ╙O IN LINE 4140, WE START BY PRINTING THE DISK ERROR MESSAGE ON THE
  110. SCREEN TO THE USER. ╬OW WE HAVE THINK ABOUT HOW ═╠ HANDLES A
  111. SUBROUTINE. ╫HEN THE ╩╙╥ INSTRUCTION IS CALLED, THE RETURN ADDRESS HAS
  112. TO GO SOMEWHERE SO THAT WE CAN FIND OUR PLACE WHEN THE ╥╘╙ INSTRUCTION
  113. IS ISSUED. ╘HAT PLACE IS THE STACK. ╘HE 6510 PUSHES THE RETURN ADDRESS
  114. AS TWO BYTES ONTO THE STACK.
  115.  
  116. ╙INCE ╔ HAVEN'T USED THE STACK FOR ANY OTHER STORAGE, IT SHOULD BE THE
  117. LAST TWO ENTRIES ON THE STACK. ╙O WE PULL TWO BYTES OFF OF THE STACK
  118. AND THROW THEM AWAY. ╬OW THIS IS AN ADVANCED TECHNIQUE, BUT IT IS
  119. IMPORTANT TO UNDERSTAND IT. ╔N THIS CASE IT CAN BE QUITE HANDY. ┬UT IF
  120. ╔ HAD USED THE STACK FOR OTHER STORAGE ╔ COULD NOT HAVE DONE THIS THAT
  121. EASILY.
  122.  
  123. ┴T LINE 4220, WE START CLOSING THINGS UP BY FIRST RESTORING DEFAULT ╔/╧
  124. BY CALLING ├╠╥├╚╬. ┴ND THEN WE CLOSE THE READ CHANNEL AND THEN THE
  125. ERROR CHANNEL.
  126.  
  127. ╬OW ╔ DECIDED TO PRINT A SHORT MESSAGE TO INDICATE ╔ WANTED THE USER TO
  128. PRESS THE RETURN KEY AND WAIT FOR HIM TO PRESS THE RETURN KEY. ╫HY? ╔T
  129. IS TO GIVE YOU A CHANCE TO READ THE ERROR MESSAGE BEFORE CLEARING THE
  130. SCREEN WHEN WE GO BACK TO THE BEGINNING OF THE PROGRAM.
  131.  
  132. ╙O AT THIS POINT WE WOULD RESTART THE PROGRAM. ┬UT ╔ HAVE RAMBLED ON
  133. ENOUGH FOR ONE MONTH. ╬EXT MONTH WE WILL LOOK AT HOW ╔ HANDLED THE
  134. SCREEN OR PRINTER OPTION AND SOME OF THE PROBLEMS ENCOUNTERED DOING
  135. THAT.
  136.  
  137. [┼─. ╬╧╘┼: ╘HE PARTIAL SOURCE CODE TO ACCOMPANY THIS ARTICLE IS THE
  138. NEXT FILE IN THIS MONTH'S EDITION OF THE *╙TAR┬OARD* ╩OURNAL.]
  139.