home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / HACKING3A.SFX / issue3.1-4 next >
Encoding:
Text File  |  1990-02-12  |  33.4 KB  |  791 lines

  1.                    ########
  2.              ##################
  3.          ######            ######
  4.       #####
  5.     #####  ####  ####      ##       #####   ####  ####  ####  ####  ####   #####
  6.   #####    ##    ##      ####     ##   ##   ##  ###     ##    ####  ##   ##   ##
  7.  #####    ########     ##  ##    ##        #####       ##    ## ## ##   ##
  8. #####    ##    ##    ########   ##   ##   ##  ###     ##    ##  ####   ##   ##
  9. #####  ####  ####  ####  ####   #####   ####  ####  ####  ####  ####   ######
  10. #####                                                                     ##
  11.  ######            ######        ╓OLUME 1 - ╔SSUE 3
  12.    ##################              ╩ULY 15, 1992
  13.        ########
  14.  
  15. =============================================================================
  16. ┼DITOR'S ╬OTES:
  17. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  18.  
  19.   ╚ERE'S OVER 3000 LINES OF HACKING ARTICLES & SUCH... ╙ORRY ABOUT THE LENGTH
  20. AS SOME OF THE ARTICLES RAN A BIT OVERBOARD.  ╔NCLUDED WITHIN IS A DISCUSSION OF
  21. THE ╦┼╥╬┴╠ ROUTINES, AN EXAMINATION OF ╥ASTERS, AND A PACKAGE OF BURST ROUTINES
  22. FOR USE IN YOUR OWN PROGRAMS. ╔F YOU'VE GOT ANY IDEAS FOR ARTICLES ETC THAT  
  23. YOU'D LIKE TO SEE OR WANT TO HEAR MORE ON A CERTAIN TOPIC FEEL FREE TO EMAIL 
  24. ME. 
  25.  
  26.   ╔'M PLEASED TO INTRODUCE THE ─EMO ├ORNER WHERE EACH MONTH WE'LL REPORT 
  27. HOW TO ACHIEVE SOME OF THE GRAPHIC AND SOUND EFFECTS THAT ARE PRESENT IN 
  28. MANY DEMOS THAT ARE WONDERED ABOUT.
  29.  
  30.   ╬OTE: ╘HE ARTICLE CONCERNING PROGRAMMING AND USAGE OF THE 1351 MOUSE HAS
  31. BEEN DELAYED UNTIL THE NEXT ISSUE DUE TO TIME AND LENGTH CONSTRAINTS.
  32.  
  33.   ╘HIS FILE IS AVAILABLE VIA ANONYMOUS FTP AT TYBALT.CALTECH.EDU UNDER 
  34. PUB/RKNOP/HACKING.MAG.  ┬ACK ISSUES OF ├= ╚ACKING ARE ALSO LOCATED THERE.
  35.  
  36. **************** ╫┴╥╬╔╬╟╙, ╒╨─┴╘┼╙, ┬╒╟ ╥┼╨╧╥╘╙, ┼╘├... **********************
  37.  
  38.   ╧╧╨╙ - ╔N THE LAST ISSUE OF ├= ╚ACKING IN ═ARK ╠AWRENCE'S ╞ILE ╙PLITTER A LINE
  39. INADVERTANTLY GOT CHOPPED OFF.  ╘HE FOLLOWING CODE SHOULD BE FIXED BETWEEN THE 
  40. COMMENTS THAT ARE LISTED:
  41.  
  42. [.
  43.   .
  44.    .] 
  45.    █ ═AKE ┼╪╘┼╬╙╔╧╬ A STRING REPRESENTATION OF ├╧╒╬╘, TO BE ADDED TO THE
  46.       ╧UT╞ILE╬AME TO MAKE THINGS A TAD EASIER▌
  47.  
  48.     ╧UT╞ILE╬AME := ├ONCAT(╬EW╞ILE,'.',├OPY('00',1,3-╠ENGTH(┼XTENSION)),
  49.                    ┼XTENSION);   █**╘╚╔╙ ╔╙ ╘╚┼ ╙╘┴╘┼═┼╬╘...**▌
  50.  
  51.     █ ├REATE FILENAME BASED ON WHICH PART WE'RE UP TO ▌
  52. [.
  53.   .
  54.    .]
  55.  
  56. =============================================================================
  57. ╬OTE: ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN WHOLE,
  58.   FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL AUTHORS FOR
  59.   PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPERATELY.
  60.  
  61.       *** ┴╒╘╚╧╥╙ ╠╔╙╘┼─ ┬┼╠╧╫ ╥┼╘┴╔╬ ┴╠╠ ╥╔╟╚╘╙ ╘╧ ╘╚┼╔╥ ┴╥╘╔├╠┼╙ ***
  62. =============================================================================
  63. ╔N ╘HIS ╔SSUE:
  64.  
  65. ╠EARNING ═╠ - ╨ART 3
  66.  
  67.   ╔N THIS EDITION WE TAKE A LOOK AT READING AND WRITING COMMANDS TO THE DISK
  68. DRIVE, INCLUDING READING THE DISK DIRECTORY AND ERROR CHANNEL. ╘HIS ARTICLE
  69. PARALLELS THE DISCUSSION OF THE ├=128 AND ├=64 ╦┼╥╬┴╠ JUMP TABLES OF AVAILABLE
  70. ROUTINES. ╫RITTEN BY ├RAIG ╘AYLOR.
  71.  
  72. ╘HE ─EMO ├ORNER: ═ISSING ├YCLES
  73.  
  74.   ┼VERYBODY KNOWS THAT THERE ARE 63 CYCLES AVAILABLE TO THE ├64 PROCESSOR
  75. ON EACH SCAN LINE, EXCEPT FOR ONE WHICH ONLY PROVIDES 23 CYCLES. ┬UT WHAT
  76. HAPPENS WHEN WE ADD SPRITES AND WHY ? ╫RITTEN BY ╨ASI '┴LBERT' ╧JALA.
  77.  
  78. ╦┼╥╬┴╠ 64/128
  79.  
  80.   ╘HE ├=128 AND ├=64 JUMP TABLE POINTS TO MANY VALUABLE SYSTEM ROUTINES IS
  81. DISCUSSED AND EXAMINED IN DETAIL. ╫RITTEN BY ├RAIG ╘AYLOR.
  82.  
  83. 64╦ ╓─├ ╥┴═ AND AN ALTERNATE ╟┼╧╙128 ┬ACKGROUND ╙CREEN
  84.  
  85.   ╙TANDARD ╟┼╧╙ ONLY USES THE FIRST 16╦ OF YOUR ╓─├ SCREEN.  ╔F YOU HAVE 64╦
  86. OF ╓─├ ╥┴═, AND WANT TO WRITE AN 80-COLUMN ONLY APPLICATION, YOU CAN PUT SOME
  87. OF THE ADDITIONAL ╓─├ ╥┴═ TO USE AS A REPLACEMENT FOR THE STANDARD ╟┼╧╙
  88. BACKGROUND SCREEN.  ┴ND, IN THE BARGAIN, YOU GET AN ADDITIONAL 16╦ OF
  89. APPLICATION ╞RONT╥┴═ TO USE! ╫RITTEN BY ╥OBERT ╦NOP.
  90.  
  91. ╟EO╨AINT ╞ILE ╞ORMAT
  92.  
  93.   ╫RITTEN BY ┬RUCE ╓RIELING, THIS ARTICLE PROVIDES AN IN DEPTH DESCRIPTION OF
  94. EXACTLY HOW GEO╨AINT STORES ITS GRAPHIC IMAGES ON DISK. ╔T EXAMINES THE
  95. CONCEPT OF ╓╠╔╥ FILES, HOW GRAPHICS DATA IS LAID OUT ON SCREEN (FROM BOTH
  96. GEO╨AINT AND THE ╓╔├'S PERSPECTIVE), AND GEO╨AINT'S GRAPHICS COMPRESSION
  97. TECHNIQUES.
  98.  
  99. ╥ASTERS - ╫HAT ╘HEY ┴RE AND ╚OW TO ╒SE ╘HEM
  100.   
  101.   ╫RITTEN BY ┬RUCE ╓RIELING, THIS ARTICLE PROVIDES AN INTRODUCTION TO CREATING
  102. SPECIAL ON-SCREEN EFFECTS USING THE TECHNIQUE OF RASTER INTERRUPTS. ╘HE
  103. BASICS ARE EXAMINED, INCLUDING WHAT THEY ARE, AND HOW TO PROGRAM THEM. ╘HIS
  104. ARTICLE SHOULD PROVIDE A GOOD STARTING POINT FOR SOMEONE WANTING TO GET
  105. THEIR FEET WET IN RASTER PROGRAMMING.
  106.  
  107. ┬URSTING ┘OUR 128: ╘HE ╞ASTLOAD ┬URST ├OMMAND
  108.  
  109.   ╫RITTEN BY ├RAIG ┬RUCE THIS ARTICLE COVERS THE ╞ASTLOAD BURST COMMAND OF THE
  110. 1571 AND 1581 DISK DRIVES.  ╘HE ╞ASTLOAD COMMAND OPERATION AND PROTOCOL ARE
  111. DISCUSSED AND A PACKAGE FOR USING THE ╞ASTLOAD COMMAND TO READ REGULAR
  112. SEQUENTIAL FILES AT BINARY PROGRAM LOADING SPEEDS IS PRESENTED.  ╘O DEMONSTRATE
  113. THE PACKAGE, A FILE WORD COUNTING UTILITY IS IMPLEMENTED AND THE "COMMENTED"
  114. CODE IS INCLUDED.
  115.  
  116. ============================================================================
  117. ╠EARNING ═╠ - ╨ART 3
  118. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  119.  
  120.   ╠AST TIME WE USED A ROUTINE AT $╞╞─2 WHICH WOULD PRINT OUT THE CHARACTER CODE
  121. CONTAINED WITHIN THE ACCUMALATOR.  ╘HAT LOCATION WILL ALWAYS PRINT THE CHARACTER
  122. OUT REGARDLESS OF ╓╔├-20, ├=64, ├=128 AND EVEN ╨┼╘ BECAUSE ├OMMODORE DECIDED 
  123. TO SET UP SOME LOCATIONS IN HIGH MEMORY THAT WOULD PERFORM ROUTINES THAT ARE
  124. COMMONLY NEEDED.  
  125.  
  126.   ╘AKE A LOOK NOW AT THE ╦┼╥╬┴╠ 64/128 ARTICLE AND GLANCE OVER SOME OF THE 
  127. ROUTINES AND THEIR FUNCTION / PURPOSE. ╘HIS ARTICLE IS MEANT TO BE A COMPANION
  128. TO THAT ARTICLE SO YOU MAY WANT TO FLIP BACK AND FORTH AS THE DISCUSSION 
  129. OF THE PROGRAM LISTED BELOW IS DISCUSSED.
  130.  
  131.   ╬OTE THAT ╔'VE BORROWED ├RAIG ┬RUCE'S NOTATION OF HAVING LISTINGS INSIDE. ╘O
  132. EXTRACT THE SOURCE THAT FOLLOWS ENTER THE FOLLOWING COMMAND ON A ╒NIX SYSTEM:
  133.  
  134. GREP '^\.@...\!' ╚ACK3 ▄ SED 'S/^.@...\!.//' ▄ SED 'S/.@...\!//' >DIR.ASM
  135.  
  136. .@001! ;
  137. .@002! ; ╙ET UP COMPUTER TYPE FOR COMPUTER-DEPENDANT CODE / 
  138. .@003! ;    ╧NLY USED IN DISPLAYING # ROUTINE / START OF ASSEMBLY SETTING.
  139. .@004! ; ┬╒──┘ FORMAT.
  140. .@005! ;
  141. .@006! COMPUTER = 128             ; ─EFINE AS EITHER 64 OR 128.
  142.  
  143.   ╞OR BOTH C64 AND C128 USERS THE FOLLOWING CODE WORKS.  ╫ITHIN THE CODE IS 
  144. CONDITIONAL ASSEMBLY WHICH MEANS IT WILL WORK ON EITHER COMPUTER ASSUMING THAT
  145. THE COMPUTER IS EQUAL TO EITHER 128 OR 64.
  146.  
  147. .@007! 
  148. .@008! .IF COMPUTER-64            ;** IF COMPUTER NOT C64 THEN
  149. .@009!       .ORG $1300          ;   AND ALSO MAKE SURE IN ┬┴╬╦ 15 WHEN CALLING
  150. .@010!                           ;   THESE ROUTINES.
  151. .@011! .ELSE                      ;** ELSE IF _IS_ C64, THEN
  152. .@012!       .ORG $C000
  153. .@013! .IFE                       ;** END OF COMPUTER-DEPENDANT CODE.
  154.  
  155.   ┬ECAUSE OF THIS (THE SOURCE IS IN ┬╒──┘ FORMAT) THE ├64 AND ├128 ARE SET TO 
  156. ASSEMBLE AT DIFFERENT MEMORY LOCATIONS. ╧N THE ├64, $C000 IS 49152. ╧N THE ├128 
  157. IT IS AT 4864. ╬OTE FOR THE ├128 IT IS NECESSARY TO DO A ┬┴╬╦15 BEFORE EXECUTING
  158. THE CODE.
  159.           
  160. .@014!       .MEM                ; - ASSEMBLE TO MEMORY.
  161.  
  162.   ╘HIS TELLS THE ASSEMBLER TO ACTUALLY PUT THE CODE INTO MEMORY.
  163.  
  164. .@015!
  165. .@016! ;;-----------------------------------------------------------------------
  166. .@017! ;; ╦┼╥╬┴╠ ┼╤╒┴╘┼╙
  167. .@018! ;;---------------------------------------------------------------------
  168. .@019! 
  169. .@020! SETNAM = $FFBD
  170. .@021! SETLFS = $FFBA
  171. .@022! OPEN   = $FFC0
  172. .@023! CLOSE  = $FFC3
  173. .@024! CHKIN  = $FFC6
  174. .@025! CHRIN  = $FFCF
  175. .@026! BSOUT  = $FFD2
  176. .@027! CLRCH  = $FFCC
  177. .@028!
  178.  
  179.   ╘HESE ARE THE ╦┼╥╬┴╠ ROUTINES WE WILL ACTUALLY BE USING. ╘HEIR ACTUAL 
  180. USE WILL BE DOCUMENTED WHEN WE COME ACROSS THEM WITHIN THE CODE.  
  181.  
  182. .@029! ;;-----------------------------------------------------------------------
  183. .@030!
  184. .@031! TEMP   = 253
  185. .@032! CHARRET = $0D
  186. .@033! SPACE = $20
  187. .@034!
  188.  
  189.   ╘EMP IS SET UP TO JUST BE A TEMPORARY LOCATION IN ZERO-PAGE. ╠OCATION 253 ON
  190. BOTH THE ├64 AND ├128 IS UNUSED.  ├HARRET STANDS FOR THE CARRIAGE RETURN
  191. CHARACTER AND IS THE EQUIVLENT OF A CHR$(13). ╙PACE STANDS FOR THE CODE FOR A 
  192. SPACE (A CHR$(32))
  193.  
  194. .@035! ;;---------------------------------------------------------------------
  195. .@036!
  196. .@037! START = *
  197. .@038!
  198. .@039!    JSR READ'DIR       ; ╔NITIAL JUMP TABLE -- ╬OTE: ╫ILL READ ERROR AFTER
  199. .@040!    JMP READ'ERR       ;     SHOWING DIRECTORY.
  200. .@041!
  201.  
  202.   ┘OU'LL SEE CODE LIKE THIS A LOT -- ┬ASICALLY WE'RE BUILDING WHAT IS KNOWN AS A
  203. JUMP TABLE. ╘HAT WAY IF WE ADD MORE CODE TO THE DIRECTORY OR ERROR ROUTINE WE
  204. DON'T HAVE TO WORRY ABOUT OUR ╙┘╙ CALL'S CHANGING. ╘O READ THE DIRECTORY JUST
  205. ╙┘╙ BASE, TO READ THE ERROR CHANNEL JUST ╙┘╙ BASE+3 (WHERE ┬┴╙┼ IS 49152 ON THE
  206. ├64, 4864 ON THE 128)... 
  207.  
  208.   ┴LSO THE ╩╙╥ ╩═╨ COMBINATION MAY SEEM A LITTLE STRANGE BUT WHAT WE ARE DOING
  209. IS TREATING THE DIRECTORY ROUTINE AS A SUBROUTINE AND THEN ╩╒═╨╔╬╟ TO THE 
  210. ERROR ROUTINE. ╧NCE WE DO THAT THE ╥╘╙ IN READ'ERR WILL RETURN US BACK TO BASIC.
  211.  
  212. .@042! ;;----------------------------------------------------------------------
  213. .@043!
  214. .@044! READ'DIR = *
  215. .@045! 
  216. .@046! ; ╧PENS AND READS DIRECTORY AS A BASIC PROGRAM.
  217. .@047! ;==
  218. .@048! ; ┬ASIC PROGRAMS ARE READ IN AS FOLLOWS:
  219. .@049! ;                  [╨TR TO ╬EXT ╠INE]:2 [╠INE #]:2 [╘EXT]:.... [$00 BYTE]
  220. .@050! ;                  ^^^^^^^^^^^╥┼╨┼┴╘╙^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  221. .@051! ; ╘HE END OF A PROGRAM IS SIGNIFED BY THE $00 BYTE SIGNIFYING END OF TEXT
  222. .@052! ;    AND THE PTR'S ALSO BEING = $00.
  223. .@053! ;==
  224.  
  225.   ╘HERE ARE SEVERAL WAYS TO READ THE DIRECTORY IN MACHINE LANGUAGE.  ╫HAT WE ARE
  226. DOING HERE IS TAKING ADVANTAGE OF THE DRIVE'S ABILITY TO ALLOW US TO LOAD THE
  227. DIRECTORY AS A BASIC PROGRAM -*EXCEPT*- WE AREN'T LOADING IT PER SE. ╫E'RE 
  228. GONNA GRAB EACH BYTE AS IT COMES FROM THE DRIVE AND INTERPRET IT OURSELVES
  229. INSTEAD OF PUTTING IT IN MEMORY AS WOULD NORMALLY BE DONE.
  230.  
  231.   ┬ASIC PROGRAMS ARE STORED AS THE FOLLOWING: ┴ 2 BYTE POINTER, A 2 BYTE
  232. LINE #, THE BASIC TEXT, AND A NULL TERMINATOR AND THEN STARTING OVER
  233. FROM THE 2 BYTE POINTER.  ╘HE POINTER WE DO NOT NEED, THE LINE # IS THE NUMBER
  234. OF BLOCKS THE FILE TAKES UP AND THE ╘┼╪╘ IS THE PROGRAM NAME AND FILE TYPE. ╫E
  235. KNOW WHEN WE'RE FINISHED ON THE LINE BY CHECKING FOR A $00 BYTE.
  236.  
  237. .@054!                                ; ┬EGIN BY OPENING UP THE 
  238. .@055!                                ; DIRECTORY FILE ("$").
  239. .@056!        LDA #$01                ;   LENGTH IS 1        
  240. .@057!        LDX #<DIR               ;   LO BYTE POINTER TO FILE NAME.
  241. .@058!        LDY #>DIR               ;   HI BYTE POINTER TO FILE NAME.
  242. .@059!        JSR SETNAM              ; - CALL SETNAM
  243.  
  244.   ╧KAY, FIRST WE NEED TO SIMULATE OPENING THE DIRECTORY AS A PROGRAM FILE.
  245. ╙┼╘╬┴═ SETS UP THE FILENAME FOR THE OPEN COMMAND.  ╔N EFFECT WE ARE GIVING THE 
  246. BASIC SYNTAX OF OPEN FILE#,DEVICE#,CHANNEL#,"FILENAME" IN REVERSE.
  247.  
  248. .@060!        LDA #$01                ;   FILE # 1
  249. .@061!        LDX #$08                ;   DEVICE # 8
  250. .@062!        LDY #$00                ;   CHANNEL # 0
  251. .@063!        JSR SETLFS              ; - CALL SETLFS
  252.  
  253.   ╚ERE WE SPECIFY THE DEVICE #, FILE #, CHANNEL # IN PREPERATION FOR THE OPEN.
  254.  
  255. .@064!        JSR OPEN                ; - CALL OPEN
  256.  
  257.   ╧PEN UP THE FILE. ╘HIS IS THE ROUTINE THAT DOES THE REAL WORK. ╙┼╘╬┴═ AND
  258. ╙┼╘╠╞╙ WERE PREPARATORY ROUTINES FOR THIS.
  259.  
  260. .@065!  ;
  261. .@066!  ; READ IN THE BYTES AND DISPLAY (SKIPPING LINE LINKS ETC)
  262. .@067!  ;
  263. .@068!        LDX #$01               ;   FILE #1
  264. .@069!        JSR CHKIN              ; - CALL CHKIN TO SET INPUT FILE #.
  265.  
  266.   ╬OW WE NEED TO SPECIFY THE INPUT FILE # AND TELL THE COMPUTER THAT ALL FURTHER
  267. CHRIN'S ARE TO BE FROM FILE #1. (┬Y DEFAULT, IT WOULD HAVE READ FROM THE 
  268. KEYBOARD UNLESS WE HAD THIS HERE).
  269.  
  270. .@070!        JSR CHRIN              ; - IGNORE STARTING ADDRESS (2 BYTES)
  271. .@071!        JSR CHRIN 
  272.  
  273.   ╙KIP THE STARTING ADDRESS -- ╫HEN READING THE DIRECTORY IT IS NOT RELEVANT
  274. SO READ THE BYTES AND DISCARD THEM.
  275.  
  276. .@072!  SKIP  JSR CHRIN              ; - IGNORE POINTER TO NEXT LINE (2 BYTES)
  277.  
  278.   ╬OW WE SKIP THE POINTER FOR THE NEXT LINE. ╘HIS IS ONLY USED WHEN LOADING
  279. BASIC PROGRAMS TO RE-LINK THE LINES. ╫HEN LISTING THE DIRECTORY THEY ARE NOT
  280. NEEDED.
  281.  
  282. .@073!  BCK1  JSR CHRIN
  283.  
  284.   ╘HIS IS STILL PART OF THE ROUTINE THAT SKIPS THE POINTER TO THE NEXT LINE, YET
  285. IT HAS A LABEL USED BELOW THAT ALLOWS US TO CHECK FOR END OF FILE MORE EASILY.
  286.  
  287. .@074!  LINE  JSR CHRIN              ; - GET LINE # LO.
  288. .@075!        STA TEMP               ; - STORE LO OF LINE # @ TEMP
  289. .@076!        JSR CHRIN              ; - GET HI OF LINE #
  290.  
  291.   ╚ERE WE GET THE LINE # AS THE NEXT 2 BYTES IN THE FILE.
  292.  
  293. .@077! 
  294. .@078! .IF COMPUTER-64               ; * IF ├128 THEN
  295.  
  296.   ╒NFORTUNATELY ├= DID NOT PROVIDE A NICE ROUTINE IN THE ╦┼╥╬┴╠ TO DISPLAY 
  297. NUMERIC VALUES - HOWEVER - BY EXPLORING INSIDE THE OPERATING SYSTEM A WAY TO 
  298. DISPLAY NUMBERS IS THERE.  ╬OTE THAT THE FOLLOWING MAY LOOK CONFUSING -- IF IT
  299. DOES JUST REST ASSURED IT WILL PRINT OUT THE LINE # CORRECTLY.
  300.   
  301. .@079!        STA $61
  302. .@080!        LDY TEMP
  303. .@081!        STY $60
  304. .@082!        LDA #$00
  305. .@083!        STA $63
  306. .@084!        LDY TEMP                ;   STORE VALUES FOR CONVERSION.
  307. .@085!        JSR $BA07               ; - ═╧╬╔╘╧╥ ROUTINE: CONVERT TO ┬├─ VALUES
  308. .@086!        LDA #$00
  309. .@087!        LDX #$08
  310. .@088!        LDY #$03
  311. .@089!        JSR $BA5D               ; - ═╧╬╔╘╧╥ ROUTINE: PRINT ┬├─ 
  312. .@090!                                ;VALUES IN DECIMAL
  313.  
  314.   ╘HIS IS THE ├128 VERSION WHICH USES SOME OF THE ═╧╬╔╘╧╥ ROUTINES TO DISPLAY
  315. THE NUMERIC BLOCK SIZE.
  316.  
  317. .@091! .ELSE                          ; * ELSE IF C64
  318. .@092!        LDX TEMP 
  319. .@093!        JSR $BDCD               ; - PRINT LINE # (W/IN ╥╧═ ROUTINE).
  320. .@094! .IFE                           ; * END OF COMPUTER DEPENDANT CODE.
  321.  
  322.   ╘HIS IS THE ├64 CODE TO DISPLAY A NUMERIC VALUE (NOTICE HOW MUCH SIMPLIFIED IT
  323. IS OVER THE ├128)...
  324.  
  325. .@095!
  326. .@096!        LDA #SPACE
  327. .@097!        JSR BSOUT               ; - PRINT SPACE
  328.  
  329.   ╠ET'S PRINT A SPACE BETWEEN THE FILENAME AND THE BLOCK SIZE.
  330.  
  331. .@098!  GTASC JSR CHRIN               ; - START PRINTING FILENAME UNTIL 
  332. .@099!                                ;END OF LINE.
  333. .@100!        BEQ CHCK                ;   (┌ERO SIGNIFIES EOL).
  334. .@101!        JSR BSOUT               ; - ╨RINT CHARACTER
  335. .@102!        SEC
  336. .@103!        BCS GTASC               ;   AND JUMP BACK.
  337.  
  338.   ╬OW WE START GETTING A CHARACTER (LINE #98), IF ZERO WE BRANCH OUT OF THE LOOP
  339. (LINE #100), ELSE WE DISPLAY THE CHARACTER (#101), AND JUMP BACK (#102-03).
  340.  
  341. .@104!  CHCK  LDA #CHARRET            ; - ┼LSE WE NEED TO START THE NEXT LINE
  342. .@105!        JSR BSOUT               ;   ╨RINT A CARRIAGE RETURN.
  343.  
  344.   ┴H, WE GOT TO A NULL BYTE SO THAT'S THE END OF THIS LINE - DISPLAY A CAR/RET.
  345.  
  346. .@106!        JSR CHRIN               ; - ┴ND GET THE NEXT POINTER
  347. .@107!        BNE BCK1                ;   ╔F NON-ZERO GO, STRIP OTHER PTR,
  348. .@108!                                ; AND CONTINUE.
  349.  
  350.   ╘HIS IS WHERE WE BRANCH BACK -- WE ARE CHECKING HERE FOR 2 NULL BYTES ON 
  351. INPUT.  ╫E GET THE FIRST BYTE OF THE POINTER AND IF IT'S NON-ZERO THEN WE KNOW
  352. IT'S NOT THE END OF THE DIRECTORY SO WE JUMP BACK TO DISCARD THE SECOND BYTE AT
  353. LINE #73.
  354.  
  355. .@109!        JSR CHRIN               ; - ┼LSE CHECK 2ND BYTE OF POINTER
  356. .@110!        BNE LINE                ;   AS IF BOTH 0 THEN = END OF DIRECTORY.
  357.  
  358.   ╘HIS IS A CONTINUATION OF THE CHECKING ABOVE. ╘HIS TIME WE'RE GETTING THE 
  359. 2ND BYTE AND CHECKING FOR 0.  ╔F IT'S NOT WE JUMP BACK TO GET AND DISPLAY THE
  360. LINE # ETC. ╔F IT IS 0 THEN THAT MEANS WE HAD $0000 FOR THE NEXT POINTER WHICH
  361. MEANS THAT IT'S THE END OF THE DIRECTORY.
  362.  
  363. .@111!  ;
  364. .@112!  ;HAD 3 0'S IN A ROW SO END OF PROG
  365. .@113!  ;NOW CLOSE THE FILE.
  366. .@114!  ;
  367. .@115!        LDA #$01                ;   FILE # TO CLOSE
  368. .@116!        JSR CLOSE               ; - SO CLOSE IT
  369. .@117!        JSR CLRCH               ; - CLEAR ALL CHANNELS
  370. .@118!        RTS                     ; - AND RETURN TO BASIC
  371. .@119!
  372.  
  373.   ╫E THEN CLOSE THE FILE BY SPECIFYING THE FILE # AND CALLING CLOSE. ╫E THEN 
  374. TELL THE COMPUTER TO RESET ALL THE DEFAULT INPUT / OUTPUT DEVICES BY CALLING
  375. CLRCH (REMEMBER WE CHANGED THE DEFAULT INPUT CHANNEL??). ┴ND THEN WE CAN RETURN
  376. TO WHERE THIS ROUTINE WAS CALLED FROM.
  377.  
  378. .@120! ; ╞╔╠┼╬┴═┼ STRING
  379. .@121! DIR    .ASC "$"
  380.  
  381.   ╘HIS IS THE STRING THAT IS POINTED TO BY THE ╙┼╘╬┴═ CALL. ╬OTE THAT A SEARCH
  382. PATTERN COULD BE SET BY
  383.       LINE#121:       .ASC "$HACK*" 
  384. AND BY CHANGING THE LENGTH SET IN .┴ IN THE CALL IN LINE #56.
  385.  
  386. .@122!
  387. .@123! ;;-----------------------------------------------------------------------
  388. .@124!
  389. .@125! READ'ERR = *
  390. .@126! 
  391. .@127! ; ╘HIS ROUTINE SIMPLY GRABS BYTES FROM A CHANNEL 15 IT OPENS UP UNTIL
  392. .@128! ;   A CAR/RET BYTE IS FOUND. ╘HEN IT CLOSES AND RETURNS.
  393. .@129! 
  394.  
  395.   ╥EADING THE ERROR CHANNEL IS MUCH MUCH MORE SIMPLER THAN READING THE 
  396. DIRECTORY.  ┬ASICALLY WE JUST OPEN UP THE CHANNEL (SPECIFYING A NULL NAME) AND
  397. REPEATADLY GET BYTES UNTIL A CAR/RET IS FOUND.
  398.  
  399. .@130! RDERR  LDA #$00                ;   LENGTH IS 0
  400. .@131!        JSR SETNAM              ; - CALL SETNAME
  401.  
  402.   ╙ETUP SO WE DON'T SPECIFY A NAME (LENGTH = 0).
  403.  
  404. .@132!        LDA #$0F                ;   FILE # (15)
  405. .@133!        LDX #$08                ;   DEVICE # (08)
  406. .@134!        LDY #$0F                ;   CHANNEL # (15)
  407. .@135!        JSR SETLFS              ; - SET LOGICAL FILE #
  408.  
  409.   ─O THE EQUIVLENT OF OPEN 15,8,15.
  410.  
  411. .@136!        JSR OPEN                ; - AND OPEN IT.
  412.  
  413.   ╧PEN IT.
  414.  
  415. .@137!  ;SPECIFY FILE AS INPUT
  416. .@138!        LDX #$0F                ;   FILE 15 IS INPUT
  417. .@139!        JSR CHKIN               ; - SO SPECIFY IT.
  418.  
  419.   ╬OW SET UP FILE # 15 AS INPUT SO WE CAN START GETTING, DISPLAYING ETC UNTIL
  420. A CAR/RET IS FOUND.
  421.  
  422. .@140!  ;NOW READ IN FILE
  423. .@141!  LOOP  JSR CHRIN               ; - READ CHAR
  424. .@142!        JSR BSOUT               ; - PRINT CHAR
  425. .@143!        CMP #CHARRET            ;   IS IT RETURN?
  426. .@144!        BNE LOOP                ; - IF NOT JMP BACK
  427.  
  428.   ╥EAD IN AND DISPLAY THE CHARACTERS FROM THE ERROR CHANNEL UNTIL A CHAR/RET IS
  429. FOUND.
  430.  
  431. .@145!  ;NOW CLOSE THE FILE
  432. .@146!        LDA #$0F                ;   FILE #
  433. .@147!        JSR CLOSE               ; - CLOSE THE FILE
  434. .@148!        JSR CLRCH               ;   RESTORE I/O
  435.  
  436.   ┴ND ONCE IT IS, WE CLOSE THE FILE AND RESTORE THE DEFAULT I/O SETTINGS.
  437.  
  438. .@149!  ;NOW RETURN TO BASIC
  439. .@150!        RTS
  440.  
  441.   ┴ND RETURN TO OUR CALLER, IN THIS CASE - BASIC.
  442.  
  443. ============================================================================
  444. [ ╘HE ─EMO ├ORNER IS GOING TO BE A COLUMN WHERE EACH MONTH WE'LL BE 
  445.   INTRODUCED TO A NEW FEATURE (SOME PEOPLE CALL THEM BUGS, WE'LL CALL THEM
  446.   FEATURES) OF THE ├OMMODORE 64 OR 128 IN THE ╓IDEO AND ╙OUND AREAS THAT 
  447.   HAVE COMMONLY BEEN SHOWN ON DEMOS BUT WITH NO MENTION OF HOW TO ACCOMPLISH
  448.   THEM. ╬OTE THAT READERS MAY ALSO WANT TO TAKE A LOOK AT THE INTRODUCTION
  449.   TO ╥ASTERS ELSEWHERE IN THIS MAGAZINE.]
  450.  
  451. ╘HE ─EMO ├ORNER: ═ISSING ├YCLES
  452. BY ╨ASI '┴LBERT' ╧JALA   (PO87553@CS.TUT.FI ALBERT@CC.TUT.FI)
  453.                           ╫RITTEN ON  15-═AY-91  ╘RANSLATION 30-═AY-92
  454.  
  455.  
  456.                           ═ISSING ├YCLES
  457.                           --------------
  458.        [ALL TIMINGS ARE IN ╨┴╠, THE PRINCIPLE APPLIES TO ╬╘╙├ TOO]
  459.  
  460. ┼VERYBODY KNOWS THAT THERE ARE 63 CYCLES AVAILABLE TO THE ├64 PROCESSOR ON
  461. EACH SCAN LINE, EXCEPT FOR ONE WHICH ONLY PROVIDES 23 CYCLES (LATER REFERRED
  462. TO AS A └BAD CYCLE'. ┴RE TBEY USEFUL? ┴ GOOD USE IS FOR SYNCHRONIZATION. 
  463. ╬ORMALLY BEFORE THE ├╨╒ STARTS TO EXECUTE THE RASTER INTERRUPT CODE, IT'S 
  464. EXECUTING AN INSTRUCTION OF UNDEFINED CYCLE-LENGTH. ╘HIS EXECUTION TIME VARIES 
  465. FROM TWO TO SEVEN CYCLES.
  466.  
  467. ╫ITH A SPRITE, YOU CAN DO THE SYNCHRONIZATION WITH A MINIMAL EFFORT USING
  468. A ─┼├ OR ╔╬├ INSTRUCTION IN THE RIGHT PLACE. ╔F THE PROCESSOR IS EARLY,
  469. IT HAS TO WAIT FOR THE BUS, OTHERWISE IT WILL CONTINUE TO EXECUTE CYCLES
  470. FROM THE INSTRUCTION.
  471.  
  472. ╔ HAVE NEVER EXPERIMENTED WITH ANY OTHER INSTRUCTION THAN ─┼├/╔╬├, BUT
  473. SOME OTHERS SHOULD WORK ALSO. ┘OU NEED AN INSTRUCTION WHICH HAS A CYCLE THAT
  474. DO NOT NEED THE BUS TO BE AVAILABLE. E.G. ╔╬├ $3FFF WILL INCREASE THE
  475. VALUE DURING THE FIFTH CYCLE AND DO NOT NEED THE BUS FOR THAT.
  476.  
  477.  
  478. _┴ DEMO PROGRAM_
  479.  
  480. ╘HE ENCLOSED PROGRAM INCLUDES A SHORT RASTER COLOR ROUTINE TO DEMONSTRATE
  481. THIS STRICT TIMING AND SYNCHRONIZATION. ╘HE BACKGROUND COLOR IS CHANGED
  482. 12 TIMES ON EACH LINE. ╘HE ELECTRON BEAM RUNS OVER EIGHT PIXELS DURING
  483. ONE CYCLE, SO THE TIMING MUST BE PRECISE.
  484.  
  485. --------------------------------------------------------------------------
  486. _╘ABLE FOR ╨┴╠ ╓╔├ TIMING FOR THE ═ISSING CYCLES_
  487.  
  488.  
  489. 012345678901234567890123456789012345678901234567890123456789012 CYCLES
  490.  
  491. ╬ORMAL SCAN LINE, 0 SPRITES
  492. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR  P P P P P P P P  PHI-1 ╓╔├
  493.                                                                 PHI-2 ╓╔├
  494. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PHI-2 6510
  495. 63 CYCLES AVAILABLE
  496.  
  497. ╬ORMAL SCAN LINE, 8 SPRITES
  498. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR  PSPSPSPSPSPSPSPS PHI-1 ╓╔├
  499.                                                SSSSSSSSSSSSSSSS PHI-2 ╓╔├
  500. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX╪╪╪                 PHI-2 6510
  501. 46-49 CYCLES AVAILABLE
  502.  
  503. ╬ORMAL SCAN LINE, 4 SPRITES
  504. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR  PSP PSP PSP PSP  PHI-1 ╓╔├
  505.                                                SS  SS  SS  SS   PHI-2 ╓╔├
  506. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX╪╪╪              XX PHI-2 6510
  507. 48-51 CYCLES AVAILABLE
  508.  
  509. ┬AD SCAN LINE, 0 SPRITES
  510. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR  P P P P P P P P  PHI-1 ╓╔├
  511. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC                        PHI-2 ╓╔├
  512.                                         XXXXXXXXXXXXXXXXXXXXXXX PHI-2 6510
  513. 23 CYCLES AVAILABLE
  514.  
  515. ┬AD SCAN LINE, 8 SPRITES
  516. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGRRRRR  PSPSPSPSPSPSPSPS PHI-1 ╓╔├
  517. CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC       SSSSSSSSSSSSSSSS PHI-2 ╓╔├
  518.                                         XXXX╪╪╪                 PHI-2 6510
  519. 4-7 CYCLES AVAILABLE
  520.  
  521.  
  522. G= GRAFIX DATA FETCH (CHARACTER IMAGES OR GRAPHICS DATA)
  523. R= REFRESH
  524. P= SPRITE IMAGE POINTER FETCH
  525. C= CHARACTER AND COLOR ├╧─┼ FETCH DURING A BAD SCAN LINE
  526. S= SPRITE DATA FETCH
  527. X= PROCESSOR EXECUTING INSTRUCTIONS
  528. ╪= PROCESSOR EXECUTING AN INSTRUCTION, BUS REQUEST PENDING
  529.  
  530. ╧BSERVE! ╘HE LEFT EDGE OF THE CHART IS NOT THE LEFT EDGE OF THE SCREEN NOR
  531.          THE LEFT EDGE OF THE BEAM, BUT THE SPRITE X-COORDINATE 0. ╔F YOU
  532.          HAVE OPENED THE BORDERS, YOU KNOW WHAT ╔ MEAN. ┴ SPRITE CAN BE
  533.          MOVED LEFT FROM THE COORDINATE 0 BY USING X-VALUES GREATER THAN 500.
  534.  ___________
  535. ▄  _______  ▄<-- ═AXIMUM SIZED VIDEO SCREEN
  536. ▄▄▄       ▄ ▄
  537. ▄▄▄       ▄<-- ╬ORMAL ├64 SCREEN
  538. ▄▄▄       ▄ ▄
  539. ▄▄▄_______▄ ▄
  540. ▄▄          ▄
  541. ▄▄__________▄
  542.  ^ ╙PRITE COORDINATE 0
  543.  
  544. --------------------------------------------------------------------------
  545.  
  546. ─EMONSTRATION PROGRAM FOR MISSING CYCLES
  547.  
  548.  
  549. ├╧╠╧╥0= $├┼00  ; ╨LACE FOR COLOR BAR 0
  550. ├╧╠╧╥1= $├╞00  ; ╨LACE FOR COLOR BAR 1
  551. ╥┴╙╘┼╥= $╞┴    ; ╠INE FOR THE RASTER INTERRUPT
  552. ─╒══┘= $├╞╞╞   ; ╘IMING VARIABLE
  553.  
  554. *= $├000
  555.         ╙┼╔             ; ─ISABLE INTERRUPTS
  556.         ╠─┴ #$7╞        ; ─ISABLE TIMER INTERRUPTS
  557.         ╙╘┴ $─├0─
  558.         ╠─┴ #$01        ; ┼NABLE RASTER INTERRUPTS
  559.         ╙╘┴ $─01┴
  560.         ╙╘┴ $─015       ; ┼NABLE ╙PRITE 0
  561.         ╠─┴ #<╔╥╤       ; ╔NIT INTERRUPT VECTOR
  562.         ╙╘┴ $0314
  563.         ╠─┴ #>╔╥╤
  564.         ╙╘┴ $0315
  565.         ╠─┴ #$1┬
  566.         ╙╘┴ $─011
  567.         ╠─┴ #╥┴╙╘┼╥     ; ╙ET INTERRUPT POSITION (INC. 9TH BIT)
  568.         ╙╘┴ $─012
  569.         ╠─┴ #╥┴╙╘┼╥-20  ; ╙PRITE WILL JUST REACH THE INTERRUPT POSITION
  570.         ╙╘┴ $─001       ;  WHEN IT IS POSITIONED 20 LINES EARLIER
  571.  
  572.         ╠─╪ #51
  573.         ╠─┘ #0
  574.         ╙╘┴ $─017       ; ╬O ┘-ENLARGEMENT
  575. ╠╧╧╨0   ╠─┴ ├╧╠,╪       ; ├REATE COLOR BARS
  576.         ╨╚┴
  577.         ┴╬─ #15
  578.         ╙╘┴ ├╧╠╧╥0,╪
  579.         ╙╘┴ ├╧╠╧╥0+52,┘
  580.         ╙╘┴ ├╧╠╧╥0+104,╪
  581.         ╙╘┴ ├╧╠╧╥0+156,┘
  582.         ╨╠┴
  583.         ╠╙╥
  584.         ╠╙╥
  585.         ╠╙╥
  586.         ╠╙╥
  587.         ╙╘┴ ├╧╠╧╥1,╪
  588.         ╙╘┴ ├╧╠╧╥1+52,┘
  589.         ╙╘┴ ├╧╠╧╥1+104,╪
  590.         ╙╘┴ ├╧╠╧╥1+156,┘
  591.         ╔╬┘
  592.         ─┼╪
  593.         ┬╨╠ ╠╧╧╨0
  594.         ├╠╔             ; ┼NABLE INTERRUPTS
  595.         ╥╘╙             ; ╥ETURN
  596.  
  597.  
  598. ╔╥╤     ╬╧╨             ; ╫AIT A BIT
  599.         ╬╧╨
  600.         ╬╧╨
  601.         ╬╧╨
  602.         ╠─┘ #103        ; 104 LINES OF COLORS (SOME OF THEM NOT VISIBLE)
  603.                         ; ╥EDUCE FOR ╬╘╙├, 55 ?
  604.         ╔╬├ ─╒══┘       ; ╚ANDLES THE SYNCHRONIZATION WITH THE HELP OF THE
  605.         ─┼├ ─╒══┘       ;  SPRITE AND THE 6-CLOCK INSTRUCTIONS
  606.                         ; ┴DD A ╬╧╨ FOR ╬╘╙├
  607.  
  608. ╞╔╥╙╘   ╠─╪ ├╧╠╧╥0,┘    ; ─O THE COLOR EFFECTS
  609. ╙┼├╧╬─  ╠─┴ ├╧╠╧╥1,┘
  610.         ╙╘┴ $─020
  611.         ╙╘╪ $─020
  612.         ╙╘┴ $─020
  613.         ╙╘╪ $─020
  614.         ╙╘┴ $─020
  615.         ╙╘╪ $─020
  616.         ╙╘┴ $─020
  617.         ╙╘╪ $─020
  618.         ╙╘┴ $─020
  619.         ╙╘╪ $─020
  620.         ╙╘┴ $─020
  621.         ╙╘╪ $─020
  622.                         ; ┴DD A ╬╧╨ FOR ╬╘╙├ (ONE LINE = 65 CYCLES)
  623.         ╠─┴ #0          ; ╘HROW AWAY 2 CYCLES (TOTAL LOOP = 63 CYCLES)
  624.         ─┼┘
  625.         ┬╨╠ ╞╔╥╙╘       ; ╠OOP FOR 104 LINES
  626.  
  627.         ╙╘┴ $─020
  628.         ╠─┴ #103        ; ╞OR SUBTRACTION
  629.         ─┼├ ╞╔╥╙╘+1     ; ═OVE THE BARS
  630.         ┬╨╠ ╧╓┼╥
  631.         ╙╘┴ ╞╔╥╙╘+1
  632. ╧╓┼╥    ╙┼├
  633.         ╙┬├ ╞╔╥╙╘+1
  634.         ╙╘┴ ╙┼├╧╬─+1
  635.  
  636.         ╠─┴ #1          ; ┴CK THE RASTER INTERRUPT
  637.         ╙╘┴ $─019
  638.         ╩═╨ $┼┴31       ; ╩UMP TO THE STANDARD IRQ HANDLER
  639.  
  640. ├╧╠     ┬┘╘ $09,$90,$09,$9┬,$00,$99,$2┬,$08,$90,$29,$8┬,$08,$9├,$20,$89,$┴┬
  641.         ┬┘╘ $08,$9├,$2╞,$80,$┴9,$╞┬,$08,$9├,$2╞,$87,$┴0,$╞9,$7┬,$18,$0├,$6╞
  642.         ┬┘╘ $07,$61,$40,$09,$6┬,$48,$┼├,$0╞,$67,$41,$┼1,$30,$09,$6┬,$48,$┼├
  643.         ┬┘╘ $3╞,$77,$11,$11
  644.                         ; ╘WO COLOR BARS
  645.  
  646. --------------------------------------------------------------------------
  647. ┬ASIC LOADER FOR ═ISSING CYCLES EXAMPLE PROGRAM (╨┴╠)
  648.  
  649. 1 ╙=49152
  650. 2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
  651. 3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<CLR>":╙┘╙49152:┼╬─
  652. 4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
  653. 5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
  654. 6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
  655. 100 ─┴╘┴ 78┴97╞8─0──├┴9018─1┴─08─15─0┴9578─1403┴9├08─1503┴91┬8─11─0┴9╞┴8─, 3773
  656. 101 ─┴╘┴ 12─0┴9┼68─01─0┴233┴0008─17─0┬─┴├├048290╞9─00├┼9934├┼9─68├┼999├├┼, 4157
  657. 102 ─┴╘┴ 684┴4┴4┴4┴9─00├╞9934├╞9─68├╞999├├╞├8├┴10─95860┼┴┼┴┼┴┼┴┴067┼┼╞╞├╞, 4878
  658. 103 ─┴╘┴ ├┼╞╞├╞┬┼18├┼┬94╞├╞8─20─08┼20─08─20─08┼20─08─20─08┼20─08─20─08┼20, 4403
  659. 104 ─┴╘┴ ─08─20─08┼20─08─20─08┼20─0┴9008810─18─20─0┴967├┼64├010038─64├038, 3923
  660. 105 ─┴╘┴ ┼─64├08─67├0┼┼19─04├31┼┴0990099┬00992┬0890298┬089├2089┴┬089├2╞80, 3483
  661. 106 ─┴╘┴ ┴9╞┬089├2╞87┴0╞97┬180├6╞076140096┬48┼├0╞6741┼130096┬48┼├3╞771111, 3133
  662. 200 ─┴╘┴ ┼╬─,0
  663.  
  664. --------------------------------------------------------------------------
  665. ╒UENCODED ├64 EXECUTABLE VERSION (╨┴╠)
  666.  
  667. BEGIN 644 MISSING.64
  668. ═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
  669. ═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
  670. ═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
  671. ═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
  672. ═2╒-532!%4┼)/4┬(┌@└└."60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤040╨.$0╤╦
  673. ═-40╨03─╒-╙┴$,30╨,╘$┘0╙└╪1#$╒,#-!.3%".$0╤,40╨03┼&03┴$+"└╙-╙<╙┴
  674. ═└%╠)90"#(#$╥1#!!.44╓.$0╨,40╨03(╙,╘$╨,#└╪1#$╫1#!"1$%#0╙└╘.#(┘?
  675. ═,$8┘1#└╨0╘4┘.3,╘0╘4┘1#8╪0╘4┘.3┼#0╘4╠(#0╤-3<└╩└┼╞└(,@-├@╘031!4
  676. ═-$$╘03┼$,#!#1├─┘,╙1#1├┼$-├┴#1├─┘.4-#1─,╪0╘$╤,$0┘-3@╓,$5!14%%>
  677. ═045!03└╓-╘5%1─9#1┬╨@-#@╫.└#╒"6<└@╥!#149&0╘9"13$╪0╘5".31&0╘8╪^
  678. ═1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨╚
  679. ═+"└╘-#└╙└$(*:└"#($0╨.$0╥,$0╨.$4╥,$0╨.$0╥,$0╨.$4╥,$0╨03─╨,#@╪╓
  680. ═,3!$,3┴$,├!$,$$┘-├=#138╘0╙└╤,#└╙.$0╓-$,╨,╙@╠(#,┘,├,└├╨╔╔└(,@^
  681. ═140╓-$,╨.$0╓-╘,╨144╤.40╨-$,╙,45!,#─┘,#└┘.4(╨,#─┘,─(╨.#─╨,├─╪[
  682. ═0├└╪.4,╥,#@┘04(╨.#┼#,─8╪,"╨@,╙0╪,╨#<"╞╚└@╥!!.49",#@┘0╙)&.#=!?
  683. ═,$8┘-╘(╤.#!#-─8╨-╙8╤-#└╨.39"-#┴%0╙!&-├<╘,44╤,╙└╨.39"-#┴%0╙-&╓
  684. ;-╙<╤,3$╤+"└╙,3,╙└.@*╥└"#($5.1"╨╨└└└└8
  685. └└
  686. END
  687. SIZE 747
  688.  
  689. --------------------------------------------------------------------------
  690. ╒UENCODED ├64 EXECUTABLE VERSION (╬╘╙├)
  691.  
  692. BEGIN 644 MISSING.64
  693. ═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└40@#└$-(?
  694. ═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(╔,┬.╔╪╘.3$╒,├╩└└(@(!└"!1╦(╨/
  695. ═╔#,╤.┼&╥╔4@╚╤┬├**$$─+$:╠,╩╚╤*2─╔╦#$╓╩╩5(*,8╚╥┬┴!)"╤&╦#*╩,┬─╔:
  696. ═*0"╔"└4└0╘┬╥0╘┬╩43╩74╥╤1.┼.╥4┌╚╤.╚(┌┬╘-(╠─&╟,╨#!"└8└╞2)#2$5#╞
  697. ═2╒-532!%4┼)/4┬(┌@└└."60└@╥└╫.$$┘-╘8╪1#!$1$-!.3└╤.$0╤040╨.$0╤╦
  698. ═-40╨03─╒-╙┴$,30╨,╘$┘0╙└╪1#$╒,#-!.3%".$0╤,40╨03┼&03┴$+"└╙-╙<╙┴
  699. ═└%╠)90"#(#$╥1#!!.44╓.$0╨,40╨03(╙,╘$╨,#└╪1#$╫1#!"1$%%0╙└╘.#(┘┴
  700. ═,$8┘1#└╨0╘4┘.3,╘0╘4┘1#8╪0╘4┘.3┼#0╘4╠(#0╤-3─└╩└┼╞└(,@-├@╘031!6
  701. ═-$$╘03┼$,#!#1├─┘,╙1#1├┼$-├┴#1├─┘.4-#1─,╪0╘$╤,$0┘-3@╓,$5!14%%>
  702. ═045!03└╙-╘5%1─9#1┬╨@-#@╙,└#╒"6<└@╥!#149&0╘9%04)%,#!#14(┘,#!#4
  703. ═1├┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%,├!$,#┴$,├!$,#┴%$
  704. ═+"└╘-3└╥└$(*:└"#(#(╨1#└╪1#(╨1#└╪13(╨1#└╪1#(╨1#└╪13(╨1#!%04$┘.
  705. ═,#└╪.#$╨1#└╪1#(╨1#!!.38╫0╘4╓-4,╨,3└╨,╙┴$-├4╠(#,┘-#(└├╨╔╔└(,@╥
  706. ═0╙└╙.$5$-├5#,#┴$-├┴#,$5%,3┼$,#1#,╙%%03└┘.3└╨.3┼",#└┘.3)",#@┘(
  707. ═,#(┘.$(╨.#┼#,├└╪.4%",#@┘0╥╨@,╙4╒.└#<"╞╚└@╥└╥1├@╨03┼&0├└╪.4,╥_
  708. ═1├@╫03!&.3=",3@╨0╙9&,#<╓,30╨,#─╓0├0╪14,╨1├8╫-#%%,3,╨,#─╓0├0╪╦
  709. ═14,╙1├<╫+"└╙,├<╘└"<+:╨"#(#$╤,3$╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨╧
  710. ═,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╨,#└╠(#,╘└#,+1
  711. ,;└"#($5.1"╨╨└└└└"
  712. └└
  713. END
  714. SIZE 822
  715. ============================================================================
  716. ╦ERNAL 64 / 128 
  717. BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
  718.  
  719.                              +--------------+
  720.                              ▄ ╔NTRODUCTION ▄
  721.                              +--------------+
  722.  
  723.   ╫HEN ├OMMODORE INTRODUCED THE ╨┼╘ AGES AGO BEFORE THE ╓IC-20 AND ├OMMODORE 64,
  724. 128 THEY SET IN THE HIGHEST MEMORY LOCATIONS A SERIES OF JUMPS TO OTHER ROUTINES
  725. SO THAT USERS DIDN'T NEED BOTHER CHECKING IF ANY REVISIONS HAD BEEN MADE. ╘HEY
  726. WERE ASSURED THAT THE ADDRESS THEY WERE JUMPING TO, WOULD INDEED, BE THE ADDRESS
  727. THAT WOULD PRINT OUT A CHARACTER OR WHATNOT.
  728.  
  729.   ╘HE ╦┼╥╬┴╠ HAS GROWN SINCE ├OMMODORE FIRST INTRODUCED IT, THE ├=128 ╦┼╥╬┴╠ HAS
  730. FIFTY-SEVEN SEPERATE ROUTINES WHICH ARE AVAILABLE TO PROGRAMMERS. ╘HESE ROUTINES
  731. HANDLE FUNCTIONS RELATING TO THE SERIAL DEVICES (THE BULK OF THEM), THE SCREEN
  732. AND MISCELLANOUS SYSTEM ROUTINES SUCH AS SCANNING THE KEYBOARD, UPDATING AND
  733. READING THE SYSTEM CLOCK (╘╔$).
  734.  
  735.                           +-------------------+
  736.                           ▄ ╘ABLE OF ╥OUTINES ▄
  737.                           +-------------------+
  738.  
  739.   ╘HE FOLLOWING TABLE LISTS THE AVAILABLE ROUTINES, THEIR FUNCTION, ADDRESS,
  740. THEIR NAME, AND REGISTERS AFFECTED UPON EXIT. ╔N ADDATION, ON THE LEFT OF EACH
  741. LINE ARE THE GROUP THAT ╔ HAVE CATAGORIZED THEM UNDER: ╓IDEO(╓ID), ╙YSTEM(╙YS),
  742. AND ╙ERIAL(╙ER).
  743.  
  744. --------+---------+---------+---------------------------------------+-----------
  745.         ▄         ▄╥EGISTERS▄                                       ▄╟ROUP
  746. ┴DDRESS ▄ ╬┴═┼    ▄ ┴ ╪ ┘ ╞ ▄ ─ESCRITPTION                          ▄╓ID ╙YS ╙ER
  747. --------+---------+---------+---------------------------------------+-----------
  748. ╞╞47/128▄╙╨╔╬╙╨╧╒╘▄ *       ▄ ╔NITIALIZES ╔/╧ FOR FAST SERIAL       ▄        ***
  749. ╞╞4┴/128▄ ├╠╧╙┼┴╠╠▄ * * *   ▄ ├LOSE ALL FILES ON A DEVICE           ▄        ***
  750. ╞╞4─/128▄ ├64═╧─┼ ▄         ▄ ╙WITCHES TO ├=64 MODE                 ▄    *** 
  751. ╞╞50/128▄ ─═┴├┴╠╠ ▄ * *     ▄ ╙END ─═┴ COMMAND TO ╥┼╒               ▄    ***
  752. ╞╞53/128▄ ┬╧╧╘├┴╠╠▄ * *   * ▄ ┴TTEMPTS TO RUN BOOT SECTOR           ▄    *** ***
  753. ╞╞56/128▄ ╨╚╧┼╬╔╪ ▄ * * *   ▄ ╔NITALIZES EXTERNAL/INTERNAL CARTRI.  ▄    ***
  754. ╞╞59/128▄ ╠╦╒╨╠┴  ▄ * * * * ▄ ╠OOKS UP LOGICAL DEVICE #             ▄    *** ***
  755. ╞╞5├/128▄ ╠╦╒╨╙┴  ▄ * * * * ▄ ╠OOKS UP FOR SECONDARY ADDRESS        ▄    *** ***
  756. ╞╞5╞/128▄ ╙╫┴╨╨┼╥ ▄ * * *   ▄ ╙WITCHES BETTEN 40 / 80 COLUMN SCREEN ▄*** 
  757. ╞╞62/128▄ ─╠├╚┴╥  ▄ * * *   ▄ ╔NITIALIZES 80 COLUMN CHARACTER SET   ▄***
  758. ╞╞65/128▄ ╨╞╦┼┘   ▄ * * * * ▄ ╔NSTALLS A FUNCTION KEY DEFINITION    ▄    ***
  759. ╞╞68/128▄ ╙┼╘┬╬╦  ▄         ▄ ╙ETS BANK FOR ANY ╔/╧ OPERATIONS      ▄    *** ***
  760. ╞╞6┬/128▄ ╟┼╘├╞╟  ▄ *       ▄ ╟ET ══╒ CONFIGURATION FOR A GIVEN BANK▄    ***
  761. ╞╞6┼/128▄ ╩╙╥╞┴╥  ▄         ▄ ╩UMPS TO A SUBROUTINE IN ANOTHER BANK ▄    ***
  762. ╞╞71/128▄ ╩═╨╞┴╥  ▄         ▄ ╙TARTS EXECUTING CODE IN ANOTHER BANK ▄    ***
  763. ╞╞74/128▄ ╔╬─╞┼╘  ▄ * *   * ▄ ┼XECUTE A ╠─┴(FETVEC),┘ FROM A BANK   ▄    ***
  764. ╞╞77/128▄ ╔╬─╙╘┴  ▄   *   * ▄ ╙TORES A VALUE INDIRECTLY IN A BANK   ▄    ***
  765. ╞╞7┴/128▄ ╔╬─├═╨  ▄   *   * ▄ ├OMPARES A VALUE INDIRECTLY IN A BANK ▄    ***
  766. ╞╞7─/128▄ ╨╥╔══   ▄         ▄ ╧UTPUTS NULL-TERMINATED STRING        ▄***     ***
  767. ////////▄/////////▄/////////▄///////////////////////////////////////▄///////////
  768. ╞╞81    ▄ ├╔╬╘    ▄ * * *   ▄ ╙ETUP ╓╔├,SCREEN VALUES, 8563...      ▄*** 
  769. ╞╞84    ▄ ╔╧╔╬╔╘  ▄ * * *   ▄ ╔NITIALIZE ╓╔├,╙╔─,8563,├╔┴ FOR SYSTEM▄*** ***
  770. ╞╞87    ▄ ╥┴═╘┴╙  ▄ * * *   ▄ ╔NITIALIZE RAM.                       ▄    ***
  771. ╞╞8─    ▄ ╓┼├╘╧╥  ▄ *   *   ▄ ╥EADS OR ╫RITES TO ╦ERNAL ╥┴═ ╓ECTORS ▄    ***
  772. ╞╞90    ▄ ╙┼╘═╙╟  ▄         ▄ ╙ETS ╦ERNAL ═ESSAGES ╧N/╧FF.          ▄    ***
  773. ╞╞93    ▄ ╙┼├╬─   ▄ *       ▄ ╙ENDS SECONDARY ADDRESS AFTER ╠╔╙╘╬   ▄    *** ***
  774. ╞╞96    ▄ ╘╦╙┴    ▄ *       ▄ ╙ENDS SECONDARY ADDRESS AFTER ╘┴╠╦    ▄    *** ***
  775. ╞╞99    ▄ ═┼═╘╧╨  ▄   * *   ▄ ╥EAD OR SET THE TOP OF SYSTEM ╥┴═.    ▄    ***
  776. ╞╞9├    ▄ ═┼═┬╧╘  ▄   * *   ▄ ╥EAD OR SET THE BOTTOM OF SYSTEM ╥┴═. ▄    ***
  777. ╞╞9╞    ▄ ╦┼┘     ▄         ▄ ╙CANS ╦EYBOARD                        ▄    ***
  778. ╞╞┴2    ▄ ╙┼╘═╧   ▄         ▄ -- ╒NIMPLEMENTED ╙UBROUTINE IN ┴LL -- ▄   [╬/┴]
  779. ╞╞┴5    ▄ ┴├╨╘╥   ▄ *       ▄ ╟RABS BYTE FROM CURRENT TALKER        ▄    *** ***
  780. ╞╞┴8    ▄ ├╔╧╒╘   ▄ *       ▄ ╧UTPUT BYTE TO CURRENT LISTENER       ▄    *** ***
  781. ╞╞┴┬    ▄ ╒╬╘╠╦   ▄ *       ▄ ├OMMANDS DEVICE TO STOP TALKING       ▄    *** ***
  782. ╞╞┴┼    ▄ ╒╬╠╙╬   ▄ *       ▄ ├OMMANDS DEVICE TO STOP LISTENING     ▄    *** ***
  783. ╞╞┬1    ▄ ╠╔╙╘╬   ▄ *       ▄ ├OMMANDS DEVICE TO BEGIN LISTENING    ▄    *** ***
  784. ╞╞┬4    ▄ ╘┴╠╦    ▄ *       ▄ ├OMMANDS DEVICE TO BEGIN TALKING      ▄    *** ***
  785. ╞╞┬7    ▄ ╥┼┴─╙╙  ▄ *       ▄ ╥ETURNS ╔/╧ STATUS BYTE               ▄        ***
  786. ╞╞┬┴    ▄ ╙┼╘╠╞╙  ▄         ▄ ╙ETS LOGICAL #, DEVICE #, SECONDARY # ▄        ***
  787. ╞╞┬─    ▄ ╙┼╘╬┴═  ▄         ▄ ╙ETS POINTER TO FILENAME.             ▄        ***
  788. ╞╞├0    ▄ ╧╨┼╬    ▄ * * * * ▄ ╧PENS UP A LOGICAL FILE.              ▄        ***
  789. ╞╞├3    ▄ ├╠╧╙┼   ▄ * * * * ▄ ├LOSES A LOGICAL FILE.                ▄        ***
  790. ╞╞├6    ▄ ├╚╦╔╬   ▄ * * * * ▄ ╙ET INPUT CHANNEL                     ▄        ***
  791.