home *** CD-ROM | disk | FTP | other *** search
-
- ─=─╔╥ ═=═╙─┼╓ ╞=├┬═─┼╓ ├=├╧╨┘ ╤=╤╒╔╘
- ╘=╘╧╟╟╠┼ ╥=╥┼═╧╓┼ ╪=├┬═├╨┘ /=═┼╬╒ +-=╨╟
-
- EXCEPT THAT IMMEDIATELY AFTER STARTING UP, "<DIRECTORY NOT LOADED>" WILL BE
- DISPLAYED RATHER THAN FILENAMES. ╘HE MENU LOOKS AND OPERATES PRETTY MUCH AS
- IT DID IN THE LAST ISSUE OF ├= ╚ACKING. ╘HE ONLY DIFFERENCES ARE THAT THE
- NUMBER OF BYTES FREE ON THE DRIVE ARE DISPLAYED (WHICH IS USEFUL TO KNOW WHEN
- WRITING FILES) AND THERE ARE SOME MORE COMMANDS.
-
- ╘HE DIRECTORY ("─"), CHANGE MS-DOS DEVICE ("═"), CHANGE COMMODORE FILE DEVICE
- ("╞"), TOGGLE COLUMN CONTENTS ("╘"), COPY MS-DOS FILES TO CBM-DOS DISK ("├"),
- QUIT ("╤"), PAGING ("+" AND "-"), COLUMN CHANGE (╙╨┴├┼ OR ╥┼╘╒╥╬), AND THE
- CURSOR MOVEMENT COMMANDS ALL WORK THE SAME AS BEFORE. ╘HEY ARE ALL STICKS TO
- USE TO FLOG THE BEAST INTO SUBMISSION. ╘HE NEW COMMANDS ARE: "╥" (REMOVE ==
- DELETE), "/" (CHANGE MENU), AND "╪" (COPY ├┬═ FILES == "╪EROX").
-
- ╘HE REMOVE COMMAND IS USED TO DELETE SELECTED FILES FROM THE ═╙-─╧╙ DISK.
- ┴FTER SELECTING THIS OPTION, YOU WILL GET AN ANNOYING "ARE YOU SURE" QUESTION
- AND THE THE SELECTED FILES WILL QUICKLY DISAPPEAR AND THE CHANGES WILL FINALLY
- BE WRITTEN TO DISK. ─ELETING A BATCH OF ═╙-─╧╙ FILES IS MUCH QUICKER THAN
- DELETING ├OMMODORE-─╧╙ FILES SINCE ═╙-─╧╙ DISKS USE A ╞ILE ┴LLOCATION ╘ABLE
- RATHER THAN THE LINKED LIST OF BLOCKS ORGANIZATION THAT ├┬═ USES. ╔N ORDER TO
- MAKE THE ┬┴╙╔├ PROGRAM EXECUTE QUICKER, AFTER DELETING, THE ORIGINAL ORDER OF
- THE FILENAMES IN THE DIRECTORY LISTING WILL BE CHANGED. ┬E FOREWARNED THAT
- THE DELETE OPERATION IS NON-RECOVERABLE.
-
- ╘HE CHANGE MENU COMMAND IS USED TO MOVE BACK AND FORTH BETWEEN THE ├OMMODORE-
- ─╧╙ AND ═╙-─╧╙ MENUS.
-
- 2.2. ├╧══╧─╧╥┼-─╧╙ ═┼╬╒
-
- ╘HE ├OMMODORE-─╧╙ MENU, WHICH DISPLAYS THE NAMES OF THE ├OMMODORE FILES
- SELECTED FOR VARIOUS OPERATIONS, LOOKS AND WORKS PRETTY MUCH THE SAME AS
- THE ═╙-─╧╙ MENU:
-
- ├┬═─╧╙ ═╙=10:1581 ├┬═=8 ╞╥┼┼=3211476
-
- ╬╒═ ╙ ╘╥╬ ╞╔╠┼╬┴═┼ ╘ ╠┼╬╟╘╚
- --- - --- ---------------- - ------
- 1 * ┬╔╬ ╠╥╥-128 ╨ 9876
- 2 ┴╙├ ├╧═-╚┴├╦╔╬╟-005 ╙ 175412
-
- ─=─╔╥ ═=═╙─┼╓ ╞=├┬═─┼╓ ├=├╧╨┘ ╤=╤╒╔╘
- ╘=╘╧╟╟╠┼ ╥=╥┼═╧╓┼ ╪=├┬═├╨┘ /=═┼╬╒ +-=╨╟
-
- ┘OU'LL NOTICE, HOWEVER, THAT THE FILETYPE FIELD ("╘" HERE) IS MOVED AND IS
- UNCHANGABLE. ┴LSO, THE FILE LENGTHS ARE NOT EXACT; THEY ARE REPORTED AS THE
- BLOCK COUNT OF THE FILE MULTIPLIED BY 254. ╘HIS MENU IS NOT MAINTAINED FOR
- FILES BEING COPIED TO THE ├┬═-─╧╙ DISK FROM AN ═╙-─╧╙ DISK. ┘OU'LL
- HAVE TO RE-EXECUTE THE ─IRECTORY INSTRUCTION TO GET AN UPDATED LISTING.
-
- ╘HE "─" (DIRECTORY) COMMAND HAS LOCAL EFFECT WHEN IN THIS MENU. ╘HE
- ├OMMODORE-─╧╙ DIRECTORY WILL BE LOADED FROM THE CURRENT ├┬═ DEVICE NUMBER.
- ╬OTE THAT IN ORDER FOR THIS TO WORK, THE ├┬═ DEVICE MUST BE NUMBER EIGHT
- OR GREATER (A DISK DRIVE). ╧RIGINALLY, THE SUBROUTINE FOR THIS COMMAND WAS
- WRITTEN USING ONLY ╟┼╘#'S FROM THE DISK AND WAS VERY SLOW. ╔T WAS MODIFIED,
- HOWEVER, TO CALL A MACHINE LANGUAGE SUBROUTINE TO READ THE INFORMATION FOR
- A DIRECTORY ENTRY FROM THE DIRECTORY LISTING, AND HENCE THE SUBROUTINE NOW
- OPERATES AT A TOLERABLE SPEED.
-
- ╘HE "├" (COPY) COMMAND ALSO HAS A DIFFERENT MEANING WHEN IN THIS MENU. ╔T
- MEANS TO COPY THE SELECTED ├┬═ FILES TO THE ═╙-─╧╙ DISK. ╙EE DETAILS BELOW.
-
- ╘HE COPY ├┬═ FILES ("╪") COMMAND IS USED TO COPY THE FILES IN THE ├┬═-─╧╙ MENU
- TO ANOTHER ├┬═-─╧╙ DISK UNIT. ╙ELECT THE FILES YOU WANT TO COPY AND THEN
- PRESS ╪. ┘OU WILL THEN BE ASKED WHAT DEVICE NUMBER YOU WANT TO COPY THE FILES
- TO. ╘HE DEVICE CAN BE ANOTHER DISK DRIVE OR ANY OTHER DEVICE (EXCEPT THE
- KEYBOARD). ╒SING DEVICE NUMBER 0 DOES NOT MEAN THE "NULL" DEVICE AS IT DOES
- WITH COPYING ═╙-─╧╙ TO ├┬═. ╔F YOU ARE COPYING TO A DISK DEVICE AND THE FILE
- ALREADY EXISTS, THEN YOU WILL BE ASKED IF YOU WISH TO OVERWRITE THE FILE. ┘OU
- CANNOT COPY TO THE SAME DISK UNIT. ┴LSO, ALL FILES ARE COPIED IN BINARY MODE
- (REGARDLESS OF WHAT TRANSLATION YOU HAVE SELECTED FOR A FILE).
-
- ╘HE COPY ├┬═ FILES COMMAND WAS INCLUDED SINCE ALL OF THE LOW-LEVEL GEAR
- NEEDED TO IMPLEMENT IT (SPECIFICALLY "COMMIE╔N" AND "COMMIE╧UT" BELOW) WAS
- ALSO REQUIRED BY OTHER FUNCTIONS. ╘HIS COMMAND CAN BE VERY CONVENIENT WHEN
- WORKING WITH ╥┴═─╧╙. ╞OR EXAMPLE, IF YOU ONLY HAD A 1571 AS DEVICE 8 BUT YOU
- HAVE A ╥┴═ EXPANDER AND HAVE INSTALLED ╥┴═─╧╙ AS DEVICE 9, THEN YOU WOULD
- COPY ═╙-─╧╙ FILES TO ╥┴═─╧╙ USING THE ═╙-─╧╙ MENU, AND THEN YOU WOULD GO TO
- THE ├OMMODORE-─╧╙ MENU ("/"), READ THE DIRECTORY, SELECT ALL FILES, INSERT AN
- ├OMMODORE-─╧╙ DISKETTE INTO YOUR 1571, AND THEN USE "╪" TO COPY FROM THE
- ╥┴═─╧╙ DEVICE TO THE 1571.
-
- ╘HE REMOVE COMMAND ("╥") DOES NOT WORK FOR THIS DIRECTORY. ┘OU CAN ╙├╥┴╘├╚
- YOUR ├┬═-─╧╙ FILES YOUR DAMN SELF.
-
- 2.3. ├╧╨┘ ├┬═-─╧╙ ╘╧ ═╙-─╧╙
-
- ┬EFORE YOU CAN COPY SELECTED ├┬═-─╧╙ FILES TO AN ═╙-─╧╙ DISK, THE ═╙-─╧╙ DISK
- DIRECTORY MUST BE ALREADY LOADED (FROM THE ═╙-─╧╙ MENU). ╘HIS IS REQUIRED
- SINCE THE DIRECTORY AND ╞┴╘ INFORMATION ARE KEPT IN MEMORY AT ALL TIMES DURING
- THE EXECUTION OF THIS PROGRAM.
-
- ╫HEN YOU ENTER COPY MODE, THE SCREEN WILL CLEAR AND THE NAME OF EACH SELECTED
- FILE IS DISPLAYED AS IT IS BEING COPIED. ╔F AN ERROR IS ENCOUNTERED ON EITHER
- THE ═╙-─╧╙ OR ├┬═-─╧╙ DRIVE DURING COPYING, AN ERROR MESSAGE WILL BE DISPLAYED
- AND COPYING WILL CONTINUE (AFTER YOU PRESS A KEY FOR ═╙-─╧╙ ERRORS). ╨LEASE
- NOTE THAT NOT A WHOLE LOT OF EFFORT WAS PUT INTO ERROR RECOVERY.
-
- ╘O GENERATE AN ═╙-─╧╙ FILENAME FROM AN ├┬═-─╧╙ FILENAME, THE FOLLOWING
- ALGORITHM IS USED. ╘HE FILENAME IS SEARCHED FROM RIGHT TO LEFT FOR THE LAST
- "." CHARACTER. ╔F THERE IS NO "." CHARACTER, THEN THE ENTIRE FILENAME, UP TO
- 11 CHARACTERS, IS USED AS THE ═╙-─╧╙ FILENAME. ├HARACTERS 9 TO 11 WILL BE
- USED AS THE EXTENSION. ╔F THERE IS A "." CHARACTER, THE ALL CHARACTERS BEFORE
- IT, UP TO EIGHT, WILL BE USED AS THE ═╙-─╧╙ FILENAME AND ALL CHARACTERS AFTER
- THE FINAL ".", UP TO THREE, WILL BE USED AS THE ═╙-─╧╙ EXTENSION.
-
- ╘HEN, THE NEWLY GENERATED ═╙-─╧╙ FILENAME IS SCANNED FOR ANY EXTRA "."
- CHARACTERS OR EMBEDDED SPACES. ╔F ANY ARE FOUND, THEY ARE REPLACED BY THE
- UNDERSCORE CHARACTER ("_", WHICH IS THE BACKARROW CHARACTER ON A ├OMMODORE
- DISPLAY). ╞INALLY, ALL TRAILING UNDERSCORES ARE REMOVED FROM THE END OF BOTH
- THE FILENAME AND EXTENSION PORTIONS OF THE ═╙-─╧╙ FILENAME. ┴LSO, ALL
- CHARACTERS ARE CONVERTED TO LOWERCASE ╨┼╘╙├╔╔ (WHICH IS UPPERCASE ┴╙├╔╔) WHEN
- THEY ARE COPIED INTO THE ═╙-─╧╙ FILENAME. ╬OTE THAT IF THE ├OMMODORE FILENAME
- IS NOT IN THE 8/3 FORMAT OF ═╙-─╧╙, THEN SOMETHING IN THE NAME MAY BE LOST.
- ╙OME EXAMPLES OF FILENAME CONVERSION FOLLOW:
-
- ├┬═-─╧╙ ╞╔╠┼╬┴═┼ ═╙-─╧╙ ╞╔╠┼╬┴═┼
- ---------------- ---------------
- "LRR.BIN" "LRR.BIN"
- "LRR.128.BIN" "LRR_128.BIN"
- "HELLO THERE.TEXT" "HELLO_TH.TEX"
- "LONG_FILENAME" "LONG_FIL.ENA"
- "FILE 1..3.S__5" "FILE_1.S"
-
- ╔T WOULD HAVE BEEN TIME-CONSUMING TO HAVE THE PROGRAM SCAN THE ═╙-─╧╙
- DIRECTORY FOR A FILENAME ALREADY EXISTING ON THE DISK, SO ╠╥╥ WILL PUT
- MULTIPLE FILES ON A DISK WITH THE SAME FILENAME WITHOUT COMPLAINING. ╘HIS
- ALSO GETS RID OF THE PROBLEM OF ASKING YOU IF YOU WANT TO OVERWRITE THE OLD
- FILE OR GENERATE A NEW NAME. ╚OWEVER, IN ORDER TO RETRIEVE THE FILE FROM
- DISK ON AN ═╙-─╧╙ MACHINE, YOU WILL PROBABLY HAVE TO USE THE ╥┼╬┴═┼ COMMAND TO
- RENAME THE FIRST VERSIONS OF THE FILE ON THE DISK TO SOMETHING ELSE SO ═╙-─╧╙
- WILL SCAN FURTHER IN THE DIRECTORY FOR THE LAST VERSION OF THE FILE WITH THE
- SAME FILENAME. ╘HERE IS NO RENAME COMMAND IN ╠╥╥ BECAUSE ╔ NEVER THOUGHT OF
- IT IN TIME. ╔T WOULD HAVE BEEN FAIRLY EASY TO PUT IN.
-
- ╘HE DATE GENERATED FOR A NEW ═╙-─╧╙ FILE WILL BE ALL ZEROS. ╙OME SYSTEMS
- INTERPRET THIS AS 12:00 AM, 01-╩AN-80 AND OTHERS DON'T DISPLAY A DATE AT ALL
- FOR THIS VALUE.
-
- ╘HE PHYSICAL COPYING OF THE FILE IS DONE COMPLETELY IN MACHINE LANGUAGE AND
- NOTHING IS DISPLAYED ON THE SCREEN WHILE THIS IS HAPPENING, BUT YOU CAN FOLLOW
- THINGS BY LOOKING AT THE BLINKING LIGHTS AND LISTENING FOR CLICKS AND GRINDS.
-
- ╙INCE THE ╞┴╘ AND DIRECTORY ARE MAINTAINED IN ╥┴═ DURING THE ENTIRE COPYING
- PROCESS AND ARE ONLY FLUSHED TO DISK AFTER THE ENTIRE BATCH OF FILES ARE
- COPIED, COPYING IS MADE MORE EFFICIENT, SINCE THERE WILL BE NO COSTLY SEEK
- BACK TO TRACK 0 AFTER WRITING EACH FILE (LIKE ═╙-─╧╙ DOES). ╔F YOU HAVE A
- NUMBER OF SMALL FILES TO COPY, THEN THEY WILL BE KNOCKED OFF IN QUICK
- SUCCESSION, FASTER THAN MANY ═╙-─╧╙ MACHINES WILL COPY THEM.
-
- ╘O SIMPLIFY THE IMPLEMENTATION, THE CURRENT TRACK OF DISK BLOCKS FOR WRITING
- IS NOT MAINTAINED LIKE IT IS FOR READING. ┴LSO, A WRITING INTERLEAVE OF 1:1
- IS USED FOR A 1571, WHICH IS NOT OPTIMAL. ╚OWEVER, SINCE WRITING IS SUCH A
- SLOW OPERATION ANYWAY, AND SINCE THE 1571 IS PARTICULARLY BAD BY INSISTING ON
- VERIFYING BLOCKS, NOT MUCH MORE OVERHEAD IS INTRODUCED THAN IS ALREADY
- PRESENT.
-
- ┴N INTERESTING NOTE ABOUT WRITING ═╙-─╧╙ DISKS IS THAT YOU CAN TERMINATE ╠╥╥
- IN THE MIDDLE OF A COPY (WITH ╙╘╧╨+╥┼╙╘╧╥┼) OR IN THE MIDDLE OF COPYING A
- BATCH OF FILES, AND THE ═╙-─╧╙ DISK WILL REMAIN IN A PERFECTLY CONSISTENT
- STATE AFTERWARDS. ╘HE STATE WILL BE AS IF NONE OF THE FILES WERE COPIED. ╘HE
- REASON IS THAT THE CONTROL INFORMATION (THE ╞┴╘ AND DIRECTORY) IS MAINTAINED
- INTERNALLY AND IS FLUSHED ONLY AFTER COPYING IS ALL COMPLETED. ┬UT DON'T
- TERMINATE ╠╥╥ WHILE IT IS FLUSHING THE CONTROL INFORMATION.
-
- ╚ERE IS A TABLE OF COPYING SPEEDS FOR COPYING TO 1571, 1581, AND ├═─ ╞─-4000
- DISK UNITS WITH ┴╙├ AND ┬╔╬ TRANSLATION MODES. ┴LL FIGURES ARE IN BYTES/
- SECOND, WHICH INCLUDES BOTH READING THE BYTE FROM A ├= DISK AND WRITING IT TO
- THE ═╙-─╧╙ DISK. ╘HE AVERAGE SPEED FOR EITHER THE READ OR WRITE OPERATION
- INDIVIDUALLY WILL BE TWICE THE SPEED GIVEN BELOW. ╘HESE RESULTS WERE OBTAINED
- FROM COPYING A 156,273 BYTE TEXT FILE (THE TEXT OF ├= ╚ACKING ╔SSUE #4).
-
- ╞╥╧═ \ ╘╧: ╞─-BIN ╞─-ASC 81-BIN 81-ASC 71-BIN 71-ASC
- --------+ ------ ------ ------ ------ ------ ------
- ╥┴═╠INK | 2,332 2,200 2,332 2,200 1,594 1,559
- ╥┴═─╧╙ | 1,070 1,053 1,604 1,600 1,561 1,510
- ╞─4000 | - - 1,645 1,597 1,499 1,464
- ╩─1581 | 1,662 1,619 - - 1,474 1,440
- ╩─1571 | 1,050 1,024 953 933 - -
-
- ╘HESE FIGURES ARE FOR TRANSFER SPEED ONLY, NOT COUNTING THE COUPLE OF SECONDS
- OF OPENING FILES AND FLUSHING THE DIRECTORY. ╬OTE THAT ALL MY PHYSICAL DRIVES
- ARE ╩IFFY─╧╙-IFIED, SO YOUR PERFORMANCE MAY BE SLOWER. ╔ AM AT A LOSS TO
- EXPLAIN WHY AN ╞─-4000 IS SO MUCH SLOWER THAN A 1581 FOR COPYING FROM A
- ╥┴═─╧╙ FILE, BUT THE SAME SPEED OR BETTER FOR COPYING FROM ANYTHING ELSE.
-
- ╙INCE ╔ DON'T HAVE ACCESS TO AN ACTUAL ═╙-─╧╙ MACHINE, ╔ HAVE NOT TESTED THE
- FILES WRITTEN ONTO AN ═╙-─╧╙ DISK BY ╠╥╥, EXCEPT BY READING THEM BACK WITH ╠╥╥
- AND ┬┬╥. ╔ DO KNOW, HOWEVER, THAT EARLIER ENCARNATIONS OF THIS PROGRAM DID
- WORK FINE WITH ═╙-─╧╙ MACHINES.
-
- 3. ═╙-─╧╙ ╥╧╧╘ ─╔╥┼├╘╧╥┘
-
- ╔T WAS BROUGHT TO MY ATTENTION THAT ╔ MADE A MISTAKE IN THE PERVIOUS ARTICLE.
- ╔ WAS WRONG ABOUT THE OFFSET OF THE ATTRIBUTES FIELD IN A DIRECTORY ENTRY.
- ╘HE LAYOUT SHOULD HAVE BEEN AS FOLLOWS:
-
- ╧╞╞╙┼╘ ╠┼╬ ─┼╙├╥╔╨╘╔╧╬
- ------ --- -----------
- 0..7 8 ╞ILENAME
- 8..10 3 ┼XTENSION
- 11 1 ┴TTRIBUTES: $10=─IRECTORY, $08=╓OLUME╔D
- 12..21 10 <UNUSED>
- 22..25 4 ─ATE
- 26..27 2 ╙TARTING ╞┴╘ ENTRY NUMBER
- 28..31 4 ╞ILE LENGTH IN BYTES
-
- 4. ╞╔╠┼ ├╧╨┘╔╬╟ ╨┴├╦┴╟┼
-
- ┴S WAS MENTIONED ABOVE, ╠ITTLE ╥ED ╥EADER IS SPLIT INTO TWO PIECES: A ┬┴╙╔├
- FRONT-END USER INTERFACE PROGRAM AND A PACKAGE OF MACHINE LANGUAGE SUBROUTINES
- FOR DISK ACCESSING. ╘HE ┬┴╙╔├ PROGRAM HANDLES THE MENU, USER INTERACTION, AND
- MOST OF THE ═╙-─╧╙ DIRECTORY SEARCHING/MODIFYING. ╘HE MACHINE LANGUAGE
- PACKAGE HANDLES THE HARDWARE INPUT/OUTPUT, ╞ILE ┴LLOCATION ╘ABLE AND FILE
- STRUCTURE MANIPULATIONS.
-
- ╘HE FILE COPYING PACKAGE IS WRITTEN IN ASSEMBLY LANGUAGE AND IS LOADED INTO
- MEMORY AT ADDRESS $8000 ON BANK 0 AND REQUIRES ABOUT 13╦ OF MEMORY. ╘HE
- PACKAGE IS LOADED AT THIS HIGH ADDRESS TO BE OUT OF THE WAY OF THE MAIN ┬┴╙╔├
- PROGRAM, EVEN IF ╥┴═─╧╙ IS INSTALLED.
-
- ╘HIS SECTION OF THE ARTICLE IS PRESENTED IN ITS ENTIRETY, INCLUDING ALL OF THE
- INFORMATION GIVEN LAST TIME.
-
- 4.1. ╔╬╘┼╥╞┴├┼
-
- ╘HE SUBROUTINE CALL INTERFACE TO THE FILE COPYING PACKAGE IS SUMMARIZED AS
- FOLLOWS:
-
- ┴──╥┼╙╙ ─┼╙├╥╔╨╘╔╧╬
- ------- -----------
- ╨╦ INIT╨ACKAGE SUBROUTINE
- ╨╦+3 MS─IR (LOAD ═╙-─╧╙ DIRECTORY/╞┴╘) SUBROUTINE
- ╨╦+6 MS╥EAD (COPY ═╙-─╧╙ TO ├┬═-─╧╙) SUBROUTINE
- ╨╦+9 MS╫RITE (COPY ├┬═-─╧╙ TO ═╙-─╧╙) SUBROUTINE
- ╨╦+12 MS╞LUSH SUBROUTINE
- ╨╦+15 MS─ELETE SUBROUTINE
- ╨╦+18 MS╞ORMAT SUBROUTINE [NOT IMPLEMENTED]
- ╨╦+21 MS┬YTES╞REE SUBROUTINE
- ╨╦+24 CBM├OPY (COPY ├┬═-─╧╙ TO ├┬═-─╧╙) SUBROUTINE
- ╨╦+27 CBM─IRENT (READ ├┬═-─╧╙ DIRECTORY ENTRY) SUBROUTINE
-
- WHERE "╨╦" IS THE LOAD ADDRESS OF THE PACKAGE ($8000).
-
- ╘HE PARAMETER PASSING INTERFACE IS SUMMARIZED AS FOLLOWS:
-
- ┴──╥┼╙╙ ─┼╙├╥╔╨╘╔╧╬
- ------- -----------
- ╨╓ TWO-BYTE PACKAGE IDENTIFICATION NUMBER ($├┬, 132)
- ╨╓+2 ERRNO : ERROR CODE RETURNED
- ╨╓+3 ═╙-─╧╙ DEVICE NUMBER (8 TO 30)
- ╨╓+4 ═╙-─╧╙ DEVICE TYPE ($00=1571, $╞╞=1581)
- ╨╓+5 TWO-BYTE STARTING CLUSTER NUMBER FOR FILE COPYING
- ╨╓+7 LOW AND MID BYTES OF FILE LENGTH FOR COPYING
- ╨╓+9 POINTER TO ═╙-─╧╙ DIRECTORY ENTRY FOR WRITING
- ╨╓+11 ├┬═-─╧╙ FILE BLOCK COUNT
- ╨╓+13 ├┬═-─╧╙ FILE TYPE ("╙"=SEQ, "╨"=PRG, ETC.)
- ╨╓+14 ├┬═-─╧╙ FILENAME LENGTH
- ╨╓+15 ├┬═-─╧╙ FILENAME CHARACTERS (MAX 16 CHARS)
-
- ╫HERE "╨╓" IS EQUAL TO ╨╦+30. ┴DDITIONAL SUBROUTINE PARAMETERS ARE PASSED IN
- THE PROCESSOR REGISTERS.
-
- ╘HE ═╙-─╧╙ DEVICE NUMBER AND DEVICE TYPE INTERFACE VARIABLES ALLOW YOU TO SET
- THE ═╙-─╧╙ DRIVE AND THE PACKAGE IDENTIFICATION NUMBER ALLOWS THE APPLICATION
- PROGRAM TO CHECK IF THE PACKAGE IS ALREADY LOADED INTO MEMORY SO THAT IT ONLY
- HAS TO LOAD THE PACKAGE THE FIRST TIME THE APPLICATION IS RUN AND NOT ON
- RE-RUNS. ╘HE IDENTIFICATION SEQUENCE IS A VALUE OF $├┬ FOLLOWED BY A VALUE OF
- 132.
-
- 4.1.1. ╔╬╔╘_╨┴├╦┴╟┼ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "INIT╨ACKAGE" SUBROUTINE SHOULD BE CALLED WHEN THE PACKAGE IS FIRST
- INSTALLED, WHENEVER THE ═╙-─╧╙ DEVICE NUMBER IS CHANGED, AND WHENEVER A NEW
- DISK IS MOUNTED TO INVALIDATE THE INTERNAL TRACK CACHE. ╔T REQUIRES NO
- PARAMETERS.
-
- 4.1.2. ═╙_─╔╥ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS─IR" SUBROUTINE WILL LOAD THE DIRECTORY, ╞┴╘, AND THE ┬OOT ╙ECTOR
- PARAMETERS INTO THE INTERNAL MEMORY OF THE PACKAGE FROM THE CURRENT ═╙-─╧╙
- DEVICE NUMBER. ╬O (OTHER) INPUT PARAMETERS ARE NEEDED AND THE SUBROUTINE
- RETURNS A POINTER TO THE DIRECTORY SPACE IN THE .┴┘ REGISTERS AND THE NUMBER
- OF DIRECTORY ENTRIES IN THE .╪ REGISTER. ╔F AN ERROR OCCURS, THEN THE
- SUBROUTINE RETURNS WITH THE ├ARRY FLAG SET AND THE ERROR CODE IS AVAILABLE IN
- THE "ERRNO" INTERFACE VARIABLE. ╘HE DIRECTORY ENTRY DATA IS IN THE DIRECTORY
- SPACE AS IT WAS READ IN RAW FROM THE DIRECTORY SECTORS ON THE ═╙-─╧╙ DISK.
-
- 4.1.3. ═╙_╥┼┴─ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS╥EAD" SUBROUTINE WILL COPY A SINGLE FILE FROM THE ═╙-─╧╙ DISK TO A
- SPECIFIED ├┬═-╦ERNAL LOGICAL FILE NUMBER (THE ├┬═ FILE MUST ALREADY BE
- OPENED). ╔F THE ├┬═ LOGICAL FILE NUMBER IS ZERO, THEN THE FILE DATA IS SIMPLY
- DISCARDED AFTER IT IS READ FROM THE ═╙-─╧╙ FILE. ╘HE STARTING CLUSTER NUMBER
- OF THE FILE TO COPY AND THE LOW AND MID BYTES OF THE FILE LENGTH ARE PASSED IN
- THE ╨╓+5 AND ╨╓+7 INTERFACE WORDS. ╘HE TRANSLATION MODE TO USE IS PASSED IN
- THE .┴ REGISTER ($00=BINARY, $╞╞=ASCII) AND THE ├┬═ LOGICAL FILE NUMBER TO
- OUTPUT TO IS PASSED IN THE .╪ REGISTER. ╔F AN ERROR OCCURS, THE ROUTINE
- RETURNS WITH THE ├ARRY FLAG SET AND THE ERROR CODE IN THE "ERRNO" INTERFACE
- VARIABLE. ╘HERE ARE NO OTHER OUTPUT PARAMETERS.
-
- ╬OTE THAT SINCE THE STARTING CLUSTER NUMBER AND LOW-FILE LENGTH OF THE FILE TO
- BE COPIED ARE REQUIRED RATHER THAN THE FILENAME, IT IS THE RESPONSIBILITY OF
- THE FRONT-END APPLICATION PROGRAM TO DIG THROUGH THE RAW DIRECTORY SECTOR DATA
- TO GET THIS INFORMATION. ╘HE APPLICATION MUST ALSO OPEN THE ├OMMODORE-─╧╙
- FILE OF WHATEVER FILETYPE ON WHATEVER DEVICE IS REQUIRED; THE PACKAGE DOES NOT
- NEED TO KNOW THE ├OMMODORE-─╧╙ DEVICE NUMBER.
-
- 4.1.4. ═╙_╫╥╔╘┼ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS╫RITE" SUBROUTINE COPIES A SINGLE FILE FROM A SPECIFIED ├┬═-╦ERNAL
- LOGICAL FILE NUMBER TO A ═╙-─╧╙ FILE. ╘HE ═╙-─╧╙ DEVICE NUMBER AND TYPE ARE
- SET ABOVE. ┴ POINTER TO THE ═╙-─╧╙ DIRECTORY ENTRY IN THE BUFFER RETURNED BY
- THE "MS─IR" CALL MUST BE GIVEN IN INTERFACE WORD ╨╓+9 AND THE TRANSLATION MODE
- AND ├┬═ LFN ARE PASSED IN THE .┴ AND .╪ REGISTERS AS IN THE "MS╥EAD" ROUTINE.
- ┴N ERROR RETURN IS GIVEN IN THE USUAL WAY (.├╙, ERRNO). ╧THERWISE, THERE ARE
- NO RETURN VALUES.
-
- ╔T IS THE RESPONSIBILITY OF THE CALLING PROGRAM TO INITIALIZE THE ═╙-─╧╙
- DIRECTORY ENTRY TO ALL ZEROS AND THEN SET THE FILENAME AND SET THE STARTING
- CLUSTER POINTER TO $0╞╞╞. ╘HIS ROUTINE WILL UPDATE THE STARTING CLUSTER AND
- FILE LENGTH FIELDS OF THE DIRECTORY ENTRY WHEN IT FINISHES. ╘HE INTERNAL
- "DIRTY FLAGS" ARE MODIFIED SO THAT THE DIRECTORY AND ╞┴╘ WILL BE FLUSHED ON
- THE NEXT CALL TO "MS╞LUSH".
-
- 4.1.5. ═╙_╞╠╒╙╚ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS╞LUSH" SUBROUTINE TAKES NO INPUT PARAMETERS OTHER THAN THE IMPLICIT
- MS─EVICE AND MS╘YPE. ╔F "DIRTY" (MODIFIED), THE ╞┴╘ WILL BE WRITTEN TO THE
- ═╙-─╧╙ DISK, TO BOTH PHYSICAL REPLICAS OF THE DISK ╞┴╘. ╘HEN, EACH DIRECTORY
- SECTOR THAT IS DIRTY WILL BE WRITTEN TO DISK. ┴FTER FLUSHING, THE INTERNAL
- DIRTY FLAGS WILL BE CLEARED. ┴N ERROR RETURN IS GIVEN IN THE USUAL WAY.
- ╘HERE ARE NO OTHER OUTPUT PARAMETERS. ╔F YOU CALL THIS ROUTINE AND THERE ARE
- NO DIRTY FLAGS SET, THEN IT WILL RETURN IMMEDIATELY, WITHOUT ANY WRITING TO
- DISK.
-
- 4.1.6. ═╙_─┼╠┼╘┼ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS─ELETE" SUBROUTINE WILL DEALLOCATE ALL ╞ILE ┴LLOCATION ╘ABLE ENTRIES
- (AND HENCE, DATA CLUSTERS) ALLOCATED TO A FILE AND MARK THE DIRECTORY ENTRY AS
- BEING DELETED (BY PUTTING AN $┼5 INTO THE FIRST CHARACTER OF THE FILENAME).
- ╘HE FILE IS SPECIFIED BY GIVING THE POINTER TO THE DIRECTORY ENTRY IN
- INTERFACE WORD AT ╨╓+9. ┴FTER DEALLOCATING THE FILE DATA, THE INTERNAL
- "DIRTY" FLAG WILL BE SET FOR THE ╞┴╘ AND THE SECTOR THAT THE DIRECTORY ENTRY
- IS ON, BUT NOTHING WILL BE WRITTEN TO DISK. ╘HERE IS NO ERROR RETURN FROM
- THIS ROUTINE. ╔T IS THE RESPONSIBILITY OF THE CALLING ROUTINE TO EVENTUALLY
- CALL THE "MS╞LUSH" ROUTINE.
-
- 4.1.7. ═╙_╞╧╥═┴╘ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS╞ORMAT" SUBROUTINE IS NOT IMPLEMENTED. ╔T'S INTENDED FUNCTION WAS TO
- FORMAT THE ═╙-─╧╙ DISK AND GENERATE AND WRITE THE BOOT SECTOR, INITIAL ╞┴╘,
- AND INITIAL DIRECTORY ENTRY DATA.
-
- 4.1.8. ═╙_┬┘╘┼╙_╞╥┼┼ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "MS┬YTES╞REE" SUBROUTINE WILL SCAN THE CURRENTLY LOADED ═╙-─╧╙ ╞ILE
- ┴LLOCATION ╘ABLE, COUNT THE NUMBER OF CLUSTERS FREE, AND RETURN THE NUMBER OF
- BYTES FREE FOR FILE STORAGE ON THE DISK. ╘HERE ARE NO INPUT PARAMETERS AND
- THE BYTES FREE ARE RETURNED IN THE .┴┘╪ REGISTERS (.┴=LOW, .┘=MID, .╪=HIGH
- BYTE). ╘HE SUBROUTINE HAS NO ERROR RETURNS AND DOES NOT CHECK IF AN ═╙-─╧╙
- DIRECTORY IS ACTUALLY LOADED.
-
- 4.1.9. ├┬═_├╧╨┘ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "CBM├OPY" SUBROUTINE WILL COPY FROM AN INPUT ├┬═-╦ERNAL LOGICAL FILE
- NUMBER GIVEN IN THE .┴ REGISTER TO AN OUTPUT ├┬═-╦ERNAL LFN GIVEN IN THE .╪
- REGISTER, IN UP TO 1024 BYTE CHUNKS. ╞ILE CONTENTS ARE COPIED EXACTLY (NO
- TRANSLATION). ╘HIS ROUTINE DOES NOT CARE IF THE LFN'S ARE ON THE SAME DEVICE
- OR NOT, BUT THE INPUT DEVICE MUST BE A DISK UNIT (EITHER LOGICAL OR PHYSICAL).
- ┴N ERROR RETURN IS GIVEN IN THE USUAL WAY.
-
- 4.1.10. ├┬═_─╔╥┼╬╘ ╙╒┬╥╧╒╘╔╬┼
-
- ╘HE "CBM─IRENT" SUBROUTINE READS THE NEXT DIRECTORY ENTRY FROM THE ├┬═-╦ERNAL
- LFN GIVEN IN .┴ AND PUTS THE DATA INTO INTERFACE VARIABLES. ╧F COURSE, THE
- LFN IS ASSUMED TO BE OPEN FOR READING A DIRECTORY ("$"). ╘HE BLOCK COUNT IS
- RETURNED IN THE WORD AT ╨╓+11, THE FIRST CHARACTER OF THE FILETYPE IS RETURNED
- AT ╨╓+13, THE NUMBER OF CHARACTERS IN THE FILENAME IS RETURNED IN ╨╓+14, AND
- THE FILENAME CHARACTERS ARE RETURNED IN BYTES ╨╓+15 TO ╨╓+30. ┴N ERROR RETURN
- IS GIVEN IN THE USUAL WAY.
-
- ╘HIS ROUTINE ASSUMES THAT THE FIRST TWO BYTES OF THE DIRECTORY FILE HAVE
- ALREADY BEEN READ. ╘HE FIRST CALL TO THIS ROUTINE WILL RETURN THE NAME OF THE
- DISK. ╘HE END OF A DIRECTORY IS SIGNALLED BY A FILENAME LENGTH OF ZERO. ╔N
- THIS CASE, THE BLOCK COUNT RETURNED WILL BE THE NUMBER OF BLOCKS FREE ON THE
- DISK.
-
- 4.2. ╔═╨╠┼═┼╬╘┴╘╔╧╬
-
- ╘HIS SECTION PRESENTS THE CODE THAT IMPLEMENTS THE ═╙-─╧╙ FILE READING AND
- WRITING PACKAGE. ╔T IS HERE IN A SPECIAL FORM; EACH CODE LINE IS PRECEDED BY
- THE % SYMBOL. ╘HE % SIGN IS THERE TO ALLOW YOU TO EASILY EXTRACT THE
- ASSEMBLER CODE FROM THE REST OF THIS MAGAZINE (AND ALL OF MY UGLY COMMENTS).
- ╧N A ╒NIX SYSTEM, ALL YOU HAVE TO DO IS EXECUTE THE FOLLOWING COMMAND LINE
- (SUBSTITUTE FILENAMES AS APPROPRIATE):
-
- GREP '^%' ╚ACK5 | SED 'S/^% //' | SED 'S/^%//' >LRR.S
-
- % ; ╠ITTLE ╥ED ╥EADER/╫RITER UTILITY PACKAGE BY ├RAIG ┬RUCE, 31-╩AN-92
- % ; ╫RITTEN FOR ├= ╚ACKING ╬ET-═AGAZINE; FOR ├-128, 1571, 1581
- %
-
- ╘HE CODE IS WRITTEN FOR THE ┬UDDY ASSEMBLER AND HERE ARE A COUPLE SETUP
- DIRECTIVES. ╬OTE THAT MY COMMENTS COME BEFORE THE SECTION OF CODE.
-
- % .ORG $8000
- % .OBJ "LRR.BIN"
- %
- % ;====JUMP TABLE AND PARAMETERS INTERFACE ====
- %
- % JMP INIT╨ACKAGE ;()
- % JMP MS─IR ;( MS─EVICE, MS╘YPE ) : .┴┘=DIR┴DDR, .╪=DIRENT├OUNT
- % JMP MS╥EAD ;( MS─EVICE, MS╘YPE, START├LUSTER, LEN═╠,.┴=TRANS,.╪=CBM╠FN )
- % JMP MS╫RITE ;( MS─EVICE, MS╘YPE, WRITE─IRENT, .┴=TRANS, .╪=CBM╠FN )
- % JMP MS╞LUSH ;( MS─EVICE, MS╘YPE )
- % JMP MS─ELETE ;( WRITE─IRENT )
- % JMP MS╞ORMAT ;( MS─EVICE, MS╘YPE )
- % JMP MS┬YTES╞REE ;( ) : .┴┘╪=BYTES╞REE
- % JMP CBM├OPY ;( .┴=IN╠FN, .╪=OUT╠FN )
- % JMP CBM─IRENT ;( .┴=LFN )
- %
- % .BYTE $CB,132 ;IDENTIFICATION (LOCATION PK+30)
-
- ╘HESE INTERFACE VARIABLES ARE INCLUDED IN THE PACKAGE PROGRAM SPACE TO
- MINIMIZE UNWANTED INTERACTION WITH OTHER PROGRAMS LOADED AT THE SAME TIME,
- SUCH AS THE ╥┴═─╧╙ DEVICE DRIVER.
-
- % ERRNO .BUF 1
- % MS─EVICE .BUF 1
- % MS╘YPE .BUF 1 ;$00=1571, $FF=1581
- % START├LUSTER .BUF 2
- % LEN═╠ .BUF 2 ;LENGTH MEDIUM AND LOW BYTES
- % WRITE─IRENT .BUF 2 ;POINTER TO DIRENT
- % CDIR┬LOCKS .BUF 2 ;CBM DIRENT BLOCKS
- % CDIR╘YPE .BUF 1 ;CBM DIRENT FILETYPE
- % CDIR╞LEN .BUF 1 ;CBM DIRENT FILENAME LENGTH
- % CDIR╬AME .BUF 16 ;CBM DIRENT FILENAME
- %
-
- ╘HIS COMMAND IS NOT CURRENTLY IMPLEMENTED. ╔TS STUB APPEARS HERE.
-
- % MS╞ORMAT = *
- % BRK
- %
- % ;====GLOBAL DECLARAIONS====
- %
- % KERNEL╠ISTEN = $FFB1
- % KERNEL╙ECOND = $FF93
- % KERNEL╒NLSN = $FFAE
- % KERNEL┴CPTR = $FFA2
- % KERNEL├IOUT = $FFA8
- % KERNEL╙PINP = $FF47
- % KERNEL├HKIN = $FFC6
- % KERNEL├HKOUT = $FFC9
- % KERNEL├LRCHN = $FFCC
- % KERNEL├HRIN = $FFCF
- % KERNEL├HROUT = $FFD2
- %
- % ST = $90
- % CIA├LOCK = $DD00
- % CIA╞LAGS = $DC0D
- % CIA─ATA = $DC0C
- %
-
- ╘HESE ARE THE PARAMETERS AND DERIVED PARAMETERS FROM THE BOOT SECTOR. ╘HEY
- ARE KEPT IN THE PROGRAM SPACE TO AVOID INTERACTIONS.
-
- % CLUSTER┬LOCK├OUNT .BUF 1 ;1 OR 2
- % FAT┬LOCKS .BUF 1 ;UP TO 3
- % ROOT─IR┬LOCKS .BUF 1 ;UP TO 8
- % ROOT─IR┼NTRIES .BUF 1 ;UP TO 128
- % TOTAL╙ECTORS .BUF 2 ;UP TO 1440
- % FIRST╞ILE┬LOCK .BUF 1
- % FIRST╥OOT─IR┬LOCK .BUF 1
- % FILE├LUSTER├OUNT .BUF 2
- % LAST╞AT┼NTRY .BUF 2
- %
-
- ╘HE CYLINDER (TRACK) AND SIDE THAT IS CURRENTLY STORED IN THE TRACK CACHE
- FOR READING.
-
- % BUF├YLINDER .BUF 1
- % BUF╙IDE .BUF 1
-
- ╘HESE "DIRTY" FLAGS RECORD WHAT HAS TO BE WRITTEN OUT FOR A FLUSH OPERATION.
-
- % FAT─IRTY .BUF 1
- % DIR─IRTY .BUF 8 ;FLAG FOR EACH DIRECTORY BLOCK
- % FORMAT╨ARMS .BUF 6
- %
-
- ╘HIS PACKAGE IS SPLIT INTO A NUMBER OF LEVELS. ╘HIS LEVEL INTERFACES WITH THE
- ╦ERNAL SERIAL BUS ROUTINES AND THE BURST COMMAND PROTOCOL OF THE DISK DRIVES.
-
- % ;====HARDWARE LEVEL====
- %
-
- ├ONNECT TO THE ═╙-─╧╙ DEVICE AND SEND THE "╒0" BURST COMMAND PREFIX AND THE
- BURST COMMAND BYTE.
-
- % SEND╒0 = * ;( .┴=BURST├OMMAND├ODE ) : .├╙=ERR
- % PHA
- % LDA #0
- % STA ST
- % LDA MS─EVICE
- % JSR KERNEL╠ISTEN
- % LDA #$6F
- % JSR KERNEL╙ECOND
- % LDA #"U"
- % JSR KERNEL├IOUT
- % BIT ST
- % BMI SEND╒0┼RROR
- % LDA #"0"
- % JSR KERNEL├IOUT
- % PLA
- % JSR KERNEL├IOUT
- % BIT ST
- % BMI SEND╒0┼RROR
- % CLC
- % RTS
- %
- % SEND╒0┼RROR = *
- % LDA #5
- % STA ERRNO
- % SEC
- % RTS
- %
-
- ╘OGGLE THE "─ATA ┴CCEPTED / ╥EADY ╞OR ═ORE" CLOCK SIGNAL FOR THE BURST
- TRANSFER PROTOCOL.
-
- % TOGGLE├LOCK = *
- % LDA CIA├LOCK
- % EOR #$10
- % STA CIA├LOCK
- % RTS
- %
-
- ╫AIT FOR A BURST BYTE TO ARRIVE IN THE SERIAL DATA REGISTER OF ├╔┴#1 FROM THE
- FAST SERIAL BUS.
-
- % SERIAL╫AIT = *
- % LDA #$08
- % - BIT CIA╞LAGS
- % BEQ -
- % RTS
- %
-
- ╫AIT FOR AND GET A BURST BYTE FROM THE FAST SERIAL BUS, AND SEND THE "─ATA
- ┴CCEPTED" SIGNAL.
-
- % GET┬URST┬YTE = *
- % JSR SERIAL╫AIT
- % LDX CIA─ATA
- % JSR TOGGLE├LOCK
- % TXA
- % RTS
- %
-
- ╙END THE BURST COMMANDS TO "LOG IN" THE ═╙-─╧╙ DISK AND SET THE ╥EAD SECTOR
- INTERLEAVE FACTOR.
-
- % MOUNT─ISK = * ;() : .├╙=ERR
- % LDA #%00011010
- % JSR SEND╒0
- % BCC +
- % RTS
- % + JSR KERNEL╒NLSN
- % BIT ST
- % BMI SEND╒0┼RROR
- % CLC
- % JSR KERNEL╙PINP
- % BIT CIA╞LAGS
- % JSR TOGGLE├LOCK
- % JSR GET┬URST┬YTE
- % STA ERRNO
- % AND #$0F
- % CMP #2
- % BCS MOUNT┼XIT
-
- ╟RAB THE THROW-AWAY PARAMETERS FROM THE MOUNT OPERATION.
-
- % LDY #0
- % - JSR GET┬URST┬YTE
- % STA FORMAT╨ARMS,Y
- % INY
- % CPY #6
- % BCC -
- % CLC
-
- ╙ET THE ╥EAD SECTOR INTERLEAVE TO 1 FOR A 1581 OR 4 FOR A 1571.
-
- % ;** SET INTERLEAVE
- % LDA #%00001000
- % JSR SEND╒0
- % BCC +
- % RTS
- % + LDA #1 ;INTERLEAVE OF 1 FOR 1581
- % BIT MS╘YPE
- % BMI +
- % LDA #4 ;INTERLEAVE OF 4 FOR 1571
- % + JSR KERNEL├IOUT
- % JSR KERNEL╒NLSN
- % MOUNT┼XIT = *
- % RTS
- %
-
- ╥EAD ALL OF THE SECTORS OF A GIVEN TRACK INTO THE TRACK CACHE.
-
- % BUFPTR = 2
- % SECNUM = 4
- %
- % READ╘RACK = * ;( .┴=CYLINDER, .╪=SIDE ) : TRACKBUF, .├╙=ERR
- % PHA
- % TXA
-
- ╟ET THE SIDE AND PUT IT INTO THE COMMAND BYTE. ╥EMEMBER THAT WE HAVE TO FLIP
- THE SIDE BIT FOR A 1581.
-
- % AND #$01
- % ASL
- % ASL
- % ASL
- % ASL
- % BIT MS╘YPE
- % BPL +
- % EOR #$10
- % + JSR SEND╒0
- % PLA
- % BCC +
- % RTS
- % + JSR KERNEL├IOUT ;CYLINDER NUMBER
- % LDA #1 ;START SECTOR NUMBER
- % JSR KERNEL├IOUT
- % LDA #9 ;SECTOR COUNT
- % JSR KERNEL├IOUT
- % JSR KERNEL╒NLSN
-
- ╨REPARE TO RECEIVE THE TRACK DATA.
-
- % SEI
- % CLC
- % JSR KERNEL╙PINP
- % BIT CIA╞LAGS
- % JSR TOGGLE├LOCK
- % LDA #<TRACKBUF
- % LDY #>TRACKBUF
- % STA BUFPTR
- % STY BUFPTR+1
-
- ╟ET THE SECTOR DATA FOR EACH OF THE 9 SECTORS OF THE TRACK.
-
- % LDA #0
- % STA SECNUM
- % - BIT MS╘YPE
- % BMI +
-
- ╔F WE ARE DEALING WITH A 1571, WE HAVE TO SET THE BUFFER POINTER FOR THE NEXT
- SECTOR, TAKING INTO ACCOUNT THE SOFT INTERLEAVE OF 4.
-
- % JSR GET1571┬UF╨TR
- % + JSR READ╙ECTOR
- % BCS TRACK┼XIT
- % INC SECNUM
- % LDA SECNUM
- % CMP #9
- % BCC -
- % CLC
- % TRACK┼XIT = *
- % CLI
- % RTS
- %
-
- ╟ET THE BUFFER POINTER FOR THE NEXT 1571 SECTOR.
-
- % GET1571┬UF╨TR = *
- % LDA #<TRACKBUF
- % STA BUFPTR
- % LDX SECNUM
- % CLC
- % LDA #>TRACKBUF
- % ADC BUFPTR1571,X
- % STA BUFPTR+1
- % RTS
- %
- % BUFPTR1571 = *
- % .BYTE 0,8,16,6,14,4,12,2,10
- %
-
- ╥EAD AN INDIVIDUAL SECTOR INTO MEMORY AT THE SPECIFIED ADDRESS.
-
- % READ╙ECTOR = * ;( BUFPTR ) : .├╙=ERR
-
- ╟ET AND CHECK THE BURST STATUS BYTE FOR ERRORS.
-
- % JSR GET┬URST┬YTE
- % STA ERRNO
- % AND #$0F
- % CMP #2
- % BCC +
- % RTS
- % + LDX #2
- % LDY #0
- %
-
- ╥ECEIVE THE 512 SECTOR DATA BYTES INTO MEMORY.
-
- % READ┬YTE = *
- % LDA #$08
- % - BIT CIA╞LAGS
- % BEQ -
- % LDA CIA├LOCK
- % EOR #$10
- % STA CIA├LOCK
- % LDA CIA─ATA
- % STA (BUFPTR),Y
- % INY
- % BNE READ┬YTE
- % INC BUFPTR+1
- % DEX
- % BNE READ┬YTE
- % RTS
- %
- % OLD├LOCK = 5
- %
-
- ╫RITE AN INDIVIDUAL SECTOR TO DISK, FROM A SPECIFIED MEMORY ADDRESS.
-
- % WRITE╙ECTOR = * ;( BUFPTR, .┴=TRACK, .╪=SIDE, .┘=SECTOR ) : .├╙=ERR
- % PHA
- % STY SECNUM
-
- ╟ET THE SIDE INTO THE BURST COMMAND BYTE
-
- % TXA
- % AND #$01
- % ASL
- % ASL
- % ASL
- % ASL
- % ORA #$02
- % BIT MS╘YPE
- % BPL +
- % EOR #$10
- % + JSR SEND╒0
- % PLA
- % BCC +
- % RTS
-
- ╙END REST OF PARAMETERS FOR BURST COMMAND.
-
- % + JSR KERNEL├IOUT ;TRACK NUMBER
- % LDA SECNUM ;SECTOR NUMBER
- % JSR KERNEL├IOUT
- % LDA #1 ;SECTOR COUNT
- % JSR KERNEL├IOUT
- % JSR KERNEL╒NLSN
- % SEI
- % LDA #$40
- % STA OLD├LOCK
- % SEC
- % JSR KERNEL╙PINP ;SET FOR BURST OUTPUT
- % SEI
- % BIT CIA╞LAGS
- % LDX #2
- % LDY #0
- %
-
- ╫RITE THE 512 BYTES FOR THE SECTOR.
-
- % WRITE┬YTE = *
- % LDA CIA├LOCK
- % CMP CIA├LOCK
- % BNE WRITE┬YTE
- % EOR OLD├LOCK
- % AND #$40
- % BEQ WRITE┬YTE
- % LDA (BUFPTR),Y
- % STA CIA─ATA
- % LDA OLD├LOCK
- % EOR #$40
- % STA OLD├LOCK
- % LDA #8
- % - BIT CIA╞LAGS
- % BEQ -
- % INY
- % BNE WRITE┬YTE
- % INC BUFPTR+1
- % DEX
- % BNE WRITE┬YTE
- %
-
- ╥EAD BACK THE BURST STATUS BYTE TO SEE IF ANYTHING WENT WRONG WITH THE WRITE.
-
- % CLC
- % JSR KERNEL╙PINP
- % BIT CIA╞LAGS
-