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

  1.                             ═ACHINE ╠ANGUAGE
  2.                                 ╨ART ╔╔╔_                                   BY
  3.                                ╠YLE ╟IESE
  4.  
  5.                            ─┼╠╨╚╔ ═AIL: ╠┘╠┼╟
  6.  
  7.  
  8. ╠AST MONTH, ╔ SHOWED YOU HOW TO PRINT TO THE SCREEN. ╘HIS MONTH WE
  9. WILL PRINT THE ALPHABET TO THE SCREEN. ┴ND NEXT MONTH WE WILL LOOK
  10. INTO DISK ╔/╧. ╬OW DON'T LET THIS SCARE YOU AWAY. ╔T IS REALLY NOT
  11. THAT HARD. ╔T DOES TAKE A FEW STEPS MORE THAN YOU WOULD NEED IN ┬┴╙╔├,
  12. BUT THE INCREASE IN SPEED IS WELL WORTH IT.
  13.  
  14. ╘O START OFF HERE IS THIS MONTH'S PROGRAM. ┴GAIN ╔ AM USING THE SIMPLE
  15. ASSEMBLER PUT THE PROGRAM IN MEMORY.
  16.  
  17. .┴ ├000 ╠─┴ #$01
  18. .┴ ├002 ╠─╪ #$04
  19. .┴ ├004 ╠─┘ #$07
  20. .┴ ├006 ╩╙╥ $╞╞┬┴
  21. .┴ ├009 ╠─┴ #$00
  22. .┴ ├00┬ ╩╙╥ $╞╞┬─
  23. .┴ ├00┼ ╩╙╥ $╞╞├0
  24. .┴ ├011 ╠─╪ #$01
  25. .┴ ├013 ╩╙╥ $╞╞├9
  26. .┴ ├016 ╠─┘ #$41
  27. .┴ ├018 ╘┘┴
  28. .┴ ├019 ╩╙╥ $╞╞─2
  29. .┴ ├01├ ╔╬┘
  30. .┴ ├01─ ├╨┘ #$5┬
  31. .┴ ├01╞ ┬╬┼ $├018
  32. .┴ ├021 ╠─┴ #$0─
  33. .┴ ├023 ╩╙╥ $╞╞─2
  34. .┴ ├026 ╩╙╥ $╞╞├├
  35. .┴ ├029 ╠─┴ #$01
  36.  
  37. .┴ ├02┬ ╩╙╥ $╞╞├3
  38. .┴ ├02┼ ╥╘╙
  39. .┴ ├02╞ <├╥>
  40.  
  41. ─EFINATELY, A LITTLE MORE TYPING BUT IT IS NOT THAT HARD TO FIGURE
  42. OUT. ╘HE KEY TO IT IS LEARNING TO READ THE ╦ERNAL INFORMATION IN THE
  43. ╨ROGRAMERS ╥EFERENCE ╟UIDE. ┴S ╔ HAVE BEEN DOING IN THE PREVIOUS
  44. ARTICLES, WILL BE USING THE 64'S ╨╥╟.
  45.  
  46. ╙O WE WANT TO SEND SOME CHARACTERS (IN THIS CASE THE ALPHABET) TO THE
  47. PRINTER. ╚OW DO WE DO IT IN ┬┴╙╔├? ╫E MUST FIRST ISSUE AN ╧╨┼╬ COMMAND.
  48. ┴ND WE WILL DO THE SAME IN ═╠.
  49.  
  50. ╔F YOU LOOK AT PAGE 289 IN THE ╨╥╟, YOU WILL FIND THAT THE ╦ERNAL HAS
  51. A ROUTINE CALLED ╧╨┼╬. ╚OW DO WE USE IT? ╠ETS TAKE A LOOK AT THE
  52. INFORMATION THERE.
  53.  
  54. ╞IRST IT TELLS US WHAT THE ROUTINE DOES, OPEN A LOGICAL FILE. ╘HEN IT
  55. GIVES US THE ADDRESS WE NEED TO CALL THE ROUTINE. ╚OW WE COMMUNICATE
  56. WITH IT IS NEXT; BUT IT SAYS NONE. ╚OW DO WE TELL IT THE SECONDARY
  57. ADDRESS, LOGICAL FILE NUMBER, OR EVEN THE DEVICE NUMBER?
  58.  
  59. ╘HAT IS WHAT THE NEXT ENTRY CARES FOR. ╫HAT ROUTINES NEED TO BE CALLED
  60. BEFORE THIS ONE CAN BE CALLED, ╨REPARATORY ROUTINES. ┴ND THAT IS WHAT
  61. ╔ DID IN MY LITTLE PROGRAM ABOVE.
  62.  
  63. ╙O IT SAYS WE NEED TO CALL ╙┼╘╠╞╙ FIRST. ╙O LET'S GO THERE AND TAKE A
  64. LOOK AT IT. ╔T TELLS US TO SET UP A LOGICAL FILE. ╔TS ADDRESS IS
  65. $╞╞┬┴ AND WE USE ALL THREE REGISTERS TO COMMUNICATE WITH IT. ╬O
  66. PREPARATORY ROUTINES ARE NEEDED. ╔T RETURNS NO ERROR CODES, NEEDS ROOM
  67. FOR 2 ENTRYS IN THE STACK, AND RETURNS WITH THE ┴, ╪, AND ┘ REGISTERS
  68. INTACT.
  69.  
  70. ╔N THE DESCRIPTION, WE FIND OUT THAT THE ┴CCUMLATOR IS LOADED WITH THE
  71. LOGICAL FILE NUMBER($01). ╘HE ╪ REGISTER IS LOADED WITH THE DEVICE
  72. NUMBER($04) AND THE ┘ REGISTER IS LOADED WITH THE SECONDARY
  73. ADDRESS($07). ┬E SURE TO NOTE THE ┘ REGISTER IS LOADED WITH $╞╞(255)
  74. IF YOU DON'T WANT TO SEND A SECONDARY ADDRESS. ┴ND THEN WE CALL THE
  75. ROUTINE WITH THE ╩╙╥ $╞╞┬┴ AT $├006.
  76.  
  77. ╬OW WE NEED TO CALL THE SECONDARY PREPARATORY ROUTINE-╙┼╘╬┴═. ╙┼╘╬┴═
  78. IS USED TO SET UP THE FILE NAME FOR THE LOGICAL FILE. ╫HEN DOING ╔/╧
  79. TO A CASSETTE OR DISK DRIVE, THIS IS IMPORTANT. ┬UT TO A PRINTER??
  80. ╫ELL WE JUST SET THE LENGTH OF THE FILENAME TO ZERO. ┴S YOU READ THE
  81. DESCRIPTION OF THIS ROUTINE, YOU WILL FIND THAT WE DO THAT BY PUTTING
  82. A ZERO IN THE ACCUMLATOR. ╔F WE DID HAVE A FILENAME, THE ADDRESS OF IT
  83. WOULD GO INTO THE ╪(LOW ORDER BYTE) AND THE ┘(HIGH ORDER BYTE)
  84. REGISTERS. ┴ND AT $├00┬ WE ╩╙╥ $╞╞┬─ AND COMPLETE THAT PREPARATORY
  85. ROUTINE.
  86.  
  87. ╬OW WE CAN OPEN OUT FILE BY A ╩╙╥ $╞╞├0. ╬OTE THAT ALL REGISTERS ARE
  88. AFFECTED. ╔F YOU HAD SOME INFORMATION YOU WANTED TO SAVE YOU WOULD
  89. HAVE TO COPY IT INTO A MEMORY LOCATION PRIOR TO CALLING THIS ROUTINE
  90. AND RESTORE IT AFTERWARDS.
  91.  
  92. ╔N MY EXAMPLE, ╔ DID NOT CHECK THE ERROR STATUS AFTER THE OPEN. ┬UT IN
  93. A BIGGER PROGRAM OR IF THE LOGICAL FILE IS A DISK OR CASSETTE FILE,
  94. YOU WOULD AT THIS POINT CHECK FOR ERRORS IN OPENING THE FILE. ┘OU
  95. DO THIS BY THE ╥┼┴─╙╘ ROUTINE. ╔F WE DIDN'T AND WE FORGOT TO HOOK UP
  96. THE PRINTER TO THE COMPUTER, THE ALPHABET WOULD BE SENT TO THE SCREEN.
  97.  
  98. ╬OW AGAIN LET'S GO BACK TO ┬┴╙╔├ FOR A MOMENT. ╫E HAVE OPENED OUR
  99. LOGICAL FILE TO THE PRINTER. ╔N ┬┴╙╔├ HOW DO WE DIRECT OUR OUTPUT TO
  100. THE PRINTER? ╫ITH THE ├═─#1 COMMAND. ╔N ═╠ YOU HAVE TO OPEN AN OUTPUT
  101. CHANNEL TO THE DEVICE. ╘HE ROUTINE FOR THIS IS ├╚╦╧╒╘.
  102.  
  103. ╘HE DESCRIPTION FOR ├╚╦╧╒╘ SAYS THAT WE HAVE TO USE THE ╧╨┼╬ ROUTINE
  104. FIRST, WHICH WE HAVE. ╘HE ╪ REGISTER IS THE COMMUNICATION REGISTER. ╫E
  105. PUT THE NUMBER OF THE LOGICAL FILE IN IT($01). ═AKE SURE YOU USE THE
  106. LOGICAL FILE AND NOT THE DEVICE NUMBER. ┴ND OF COURSE NOTE THAT THE
  107. ┴CCUMLATOR AND ╪ REGISTER ARE CHANGED DURING THE ROUTINE.
  108.  
  109. ╬OW WE HAVE THE LOGICAL FILE OPEN AND THE OUTPUT BEING DIRECTED TO THE
  110. PRINTER. ╚OW DO WE SEND IT? ╘IME FOR THE GOOD OLD ├╚╥╧╒╘ ROUTINE. ┴ND
  111. IF WE READ THE DESCRIPTION OF IT, IT TELLS US THAT WE MUST USE THE
  112. ├╚╦╧╒╘ AND ╧╨┼╬ ROUTINES FIRST IF WE ARE SENDING TO SOMETHING OTHER
  113. THAN TO THE SCREEN, WHICH WE HAVE ALREADY DONE.
  114.  
  115. ╫E LOAD THE ╨┼╘╙├╔╔ CODE FOR THE LETTER "┴" INTO THE ┴CCUMLATOR AND
  116. THEN CALL THE ├╚╥╧╒╘ ROUTINE AND THEN INCREASE THE ACCUMLATOR AND
  117. CHECK IF WE HAVE PRINTED ALL OF THE ALPHABET. ┴ND BRANCH BACK TO PRINT
  118. IF NOT, RIGHT? ╬╧! ┴BSOLUTELY NOT!
  119.  
  120. ╘HIS WAS THE FIRST BIG MISTAKE ╔ MADE WHEN ╔ STARTED TO PROGRAM IN ═╠.
  121. ╔ DID NOT READ OR COMPREHEND THE ENTRY '╥EGISTERS AFFECTED: .┴' IN THE
  122. DESCRIPTION OF ├╚╥╧╒╘. ╘HAT MEANS THE ┴CCUMLATOR IS ├╚┴╬╟┼─ WHILE
  123. EXECUTING THIS ROUTINE. ╫E HAVE TO HAVE SOME OTHER MEANS OF KEEPING
  124. TRACK OF THE DESIRED VALUE. ╔ DECIDED TO USE THE ┘ REGISTER IN THIS
  125. PROGRAM. ╙O WE START OUT BY PUTTING THE VALUE OF $41(THE LETTER A) IN
  126. THE ┘ REGISTER AND COPYING THAT INTO THE ┴CCUMLATOR.
  127.  
  128. ╬OW WE CALL THE ├╚╥╧╒╘($╞╞─2) ROUTINE. ╒PON EXITING WE ╔╬┘(REMEMBER IT
  129. IS NOT AFFECTED BY ├╚╥╧╒╘) AND CHECK IF IT IS ┌+1 OR $5┬. ╔F IT IS NOT
  130. WE BRANCH BACK TO THE ╘┘┴ INSTRUCTION AND RELOAD THE ┴CCUMLATOR AND
  131. PRINT IT AGAIN.
  132.  
  133. ╬OW AFTER 26 TIMES THROUGH THE LOOP, WE HAVE SENT THE ENTIRE ALPHABET
  134. TO THE PRINTER. ╫E FALL THROUGH THE ┬╬┼ INSTRUCTION AT $├021. ╫E LOAD
  135. THE VALUE OF $0─ (A PLAIN OLD CARRIAGE RETURN) AND SEND IT OUT TO THE
  136. PRINTER. ╫HY?
  137.  
  138. ═OST (BUT NOT ALL) PRINTERS BUFFER INCOMING CHARACTERS UNTIL A
  139. CARRIAGE RETURN OR 80 CHARACTERS ARE RECEIVED BEFORE PRINTING. ╙O IT
  140. IS A GOOD HABIT TO GET INTO, THAT OF SENDING A CARRIAGE RETURN JUST
  141. BEFORE CLOSING THE PRINTER'S OUTPUT FILE.
  142.  
  143. ╬OW WE MUST TIDY THINGS UP A BIT BY RESTORING THE SCREEN AS THE OUTPUT
  144. DEVICE. ╘HAT ROUTINE IS CALLED ├╠╥├╚╬ AND WE CALL IT WITH A ╩╙╥ $╞╞├├.
  145. ╬OW WE MUST CLOSE THE LOGICAL FILE #1. ╫E DO THAT BY LOADING THE
  146. ┴CCUMLATOR WITH THE LOGICAL FILE NUMBER($01) AND THEN ╩╙╥
  147. $╞╞├3(├╠╧╙┼).
  148.  
  149. ┴ND WE RETURN TO WHERE WE WERE WHEN WE CALLED THIS SHORT ROUTINE WITH
  150. THE ╥╘╙ INSTRUCTION.
  151.  
  152. ╧NE THING ╔ CAN TELL YOU FOR SURE---THIS EXPLANATION TAKES A LOT
  153. LONGER TO READ THAN IT TAKES TO EXECUTE!
  154. ╠YLE ╟IESE (─ELPHI ═AIL:  ╠┘╠┼╟)
  155.