home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-01-01 | 42.5 KB | 1,131 lines |
- ======================================================================
- iNSTRUCTIONS FOR THE 1541-DOS PACKAGE
- (jANUARY 4, 1994 VERSION)
- ======================================================================
-
- tHESE ARE THE INSTRUCTIONS ON HOW TO READ AND WRITE TO ms-dos FLOPPY
- DISKS WITH A SLIGHTLY MODIFIED cOMMODORE 1541 OR oCEANIC oc-118/oc-118n
- DISK DRIVE.
-
- iNCLUDED IS INFORMATION ABOUT THE NECESSARY MODIFICATION OF THE 1541
- DRIVE AND THE USAGE OF THE PROGRAMS IN THIS PACKAGE.
-
-
- contents
- --------
-
- 1) hARDWARE REQUIREMENTS
- 2) mfm MODIFICATION
- 2a) 1541 DISK DRIVE MODIFICATION
- 2b) 1541 DISK DRIVE MODIFICATION -- FIRST ALTERNATE
- 2c) 1541 DISK DRIVE MODIFICATION -- SECOND ALTERNATE
- 2d) oCEANIC oc-118/oc-118n DISK DRIVE MODIFICATION
- 3) pREPARING DISKS FOR DATA TRANSFER
- 4) tRANSFERRING FILES FROM ms-dos DISKS TO cbm DISKS
- WITH "1541-READS-DOS"
- 5) tRANSFERRING FILES FROM cbm DISKS TO ms-dos DISKS
- WITH "1541-WRITES-90K" AND "READ90K"
- 6) eRROR MESSAGES
- 7) cOMPATIBILITY
- 8) pOSSIBLE IMPROVEMENTS
- 9) dISCLAIMER
- 10) cONTACTING THE AUTHORS
-
- appendix a: lISTING OF basic PROGRAM 1541-DOS.BOOT
- appendix b: c-VERSION OF rEAD90K FOR uNIX
-
- -----------------------------------------------------------------------
-
- 1) hardware requirements
-
- yOU REQUIRE A c64 OR c128 (IN c64 MODE) WITH AT LEAST ONE 1541 OR
- oc-118/oc-118n FLOPPY DISK DRIVE. tHE DRIVE MUST BE MODIFIED SLIGHTLY TO
- ALLOW IT TO UTILIZE THE mfm METHOD OF STORING DATA USED ON ms-dos
- COMPATIBLE DISKS. tHIS MODIFICATION DOES NOT AFFECT THE NORMAL OPERATION
- OF THE DRIVE. iF YOU DON'T HAVE EXPERIENCE IN SOLDERING CIRCUIT BOARDS
- THEN FIND SOMEONE WHO DOES; THE MODIFICATION IS SMALL, BUT TRICKY, AND
- WILL VOID THE WARRANTY ON YOUR DISK DRIVE.
-
- tHE 1541 CAN THEN READ SINGLE SIDED, DOUBLE DENSITY DISKS WRITTEN BY
- ms-dos COMPUTERS WITH 5 1/4" INCH DISK DRIVES.
-
- yOU NEED AN ms-dos COMPUTER WITH AT LEAST ONE 5 1/4" FLOPPY DRIVE AND
- ONE OTHER WRITABLE DISK DEVICE (A FLOPPY, HARD OR ram DISK DRIVE) TO READ
- FILES WRITTEN BY THE 1541.
-
- -----------------------------------------------------------------------
-
- 2) mfm modification
-
- warning: THE DISK DRIVE MOTHERBOARD CAN BE EASILY DAMAGED BY STATIC
- ELECTRICITY. dON'T WORK ON THIS PROJECT WEARING SYNTHETIC CLOTHES AND
- RUBBER SHOES ON A NYLON CARPET AND EXPECT YOUR DRIVE TO COME THROUGH
- UNSCATHED! uSE OF A GROUNDED SOLDERING IRON IS RECOMMENDED, AS IS
- MINIMIZING CONTACT WITH THE BOARD.
-
- aS LONG AS YOU TAKE REASONABLE PRECAUTIONS, NO DAMAGE SHOULD OCCUR TO
- YOUR DISK DRIVE BY FOLLOWING THESE INSTRUCTIONS. hOWEVER, DIFFERENCES
- BETWEEN BOARD REVISIONS MAKE IT IMPOSSIBLE TO GUARANTEE THAT THE
- MODIFICATIONS DESCRIBED HERE WILL WORK ON YOUR DISK DRIVE. cAVEAT
- EMPTOR!
-
- tHE CLOCK DIVISOR IS A 74ls193 HEXADECIMAL COUNTER IN THE 1541, AND
- THE SIMILAR 74ls161 IN THE oCEANIC DRIVES. tHE cpu LOADS THE NUMBER TO
- START COUNTING AT ON ITS INPUTS AND THE OVERFLOW FROM THE COUNTER IS
- CHAINED TO THE NEXT PORTION OF THE CIRCUIT. oF THE 4 COUNTER INPUTS, THE
- LOWER TWO ARE CONTROLLED BY THE cpu AND THE HIGHER 2 ARE TIED TO GROUND.
- tHIS MEANS VALUES OF 0 THROUGH 3 ON THE COUNTER INPUTS REQUIRE 16 TO 13
- COUNTS (RESPECTIVELY) BEFORE OVERFLOW, THUS DIVIDING THE INPUT BY THAT
- AMOUNT. tHE RANGE OF CLOCK RATES THAT CAN BE GENERATED WITH THOSE
- DIVISORS IS FROM 250 KhZ TO 307 KhZ.
-
- mODIFYING THE 1541 TO READ mfm DISKS INVOLVES PLACING THE HIGHER TWO
- BITS OF THE COUNTER UNDER cpu CONTROL. tHAT ALLOWS A FULL RANGE OF
- DIVISORS FROM 1 THROUGH 16, AN EVEN GREATER RANGE THAN THE DIVIDE BY 8
- REQUIRED FOR A 500 KhZ CLOCK. iN FACT, ONLY ONE ADDITIONAL COUNTER INPUT
- NEEDS TO BE UNDER cpu CONTROL, BUT WHILE WE'RE IN THE DRIVE WITH A
- SOLDERING IRON, WHY NOT CONNECT THE OTHER ONE TOO? iT MIGHT BE REQUIRED
- TO READ OTHER DISK FORMATS IN THE FUTURE.
-
- oNCE YOU'VE CHOSEN ONE OF THE MODIFICATION INSTRUCTIONS BELOW AND
- COMPLETED IT, TAKE ONE LAST LOOK AT YOUR WORK. lOOK ESPECIALLY FOR
- SOLDER BRIDGES AND WIRES TOUCHING ADJACENT PADS. nEXT, RE-ATTACH ANY
- CONNECTORS, SCREW THE DRIVE TOGETHER AND PLUG IT IN. bEFORE ATTACHING IT
- TO YOUR c64, TRY TURNING IT ON. iF YOU DON'T HEAR ANYTHING UNUSUAL AND
- DON'T SMELL SMOKE, YOUR DRIVE HAS PASSED THE FIRST TEST! tURN THE DRIVE
- OFF AND PLUG IT INTO YOUR COMPUTER. tURN THEM BOTH ON AND TRY LOADING A
- PROGRAM FROM A NONCRITICAL 1541 DISK. iF IT READS FINE AND DOESN'T ERASE
- THE DISK, THEN MOVE TO THE NEXT SECTION AND TRY READING AN ms-dos DISK.
- iF IT DOESN'T WORK PROPERLY, OPEN THE DRIVE AGAIN AND COMPARE YOUR WORK
- TO THE INSTRUCTIONS CAREFULLY.
-
- 2a) 1541 disk drive modification
-
- tHIS SECTION DESCRIBES THE EASIEST MODIFICATION TO MAKE TO YOUR 1541,
- AND HAS THE POTENTIAL OF WORKING WITH MORE DISK FORMATS THAN JUST ms-dos
- mfm (USING FUTURE SOFTWARE). tHE DISADVANTAGE IS THAT PART OF THE
- UNUSED i/o PORT a IS REQUIRED, WHICH MEANS THAT THE PORT CANNOT BE USED
- WITH A FAST LOADING DEVICE THAT REQUIRES A PARALLEL CABLE CONNECTION TO
- THE 1541 (STANDARD FAST LOADER CARTRIDGES WORK FINE). uSE ONE OF THE
- ALTERNATE MODIFICATIONS IF YOU WANT TO USE SUCH A FAST LOADER.
-
- tHE UNUSED i/o PORT AVAILABLE ON THE FIRST 6522 VERSATILE INTERFACE
- ADAPTERS (via) CAN BE CONNECTED TO THE COUNTER'S EXTRA INPUTS (WHICH ARE
- NORMALLY CONNECTED TO GROUND) AND USED TO EXTEND THE CLOCK FREQUENCY
- RANGE. sINCE THE PORT IS ALSO AT GROUND POTENTIAL UPON RESET, THE CLOCK
- CIRCUITRY IS NOT AFFECTED BY THE MODIFICATION.
-
- rEFER TO THE FIGURE IN FILE 1541clk.gif WHILE MAKING THESE
- MODIFICATIONS. uNPLUG YOUR 1541 AND REMOVE ITS COVER BY UNSCREWING THE
- FOUR SCREWS ON THE BOTTOM OF THE CASE. lOCATE THE CONTROLLER pcb AND
- UNPLUG THE TRANSFORMER CONNECTOR NEAR THE REGULATOR icS AND HEAT SINK.
- rEMOVE THE SCREWS ATTACHING THE pcb TO THE CHASSIS, INCLUDING THE TWO
- SCREWS ATTACHED TO THE REGULATOR HEAT SINK, AND TILT THE BOARD UP.
-
- lOCATE ue6 (THE 74ls193 COUNTER ic) AND CUT THE TRACES GOING TO PINS 9
- AND 10; MAKE SURE THE TWO PINS ARE NOT STILL CONNECTED TO EACH OTHER,
- TOO. cAREFULLY SOLDER A SHORT WIRE TO PIN 9 AND ANOTHER ONE TO PIN 10.
- lOCATE uc3 (6522 via) AND SOLDER THE OTHER END OF THE FIRST WIRE (FROM
- ue6 PIN 9) TO uc3 PIN 3 (WHICH IS OTHERWISE UNCONNECTED). sOLDER THE
- OTHER END OF THE SECOND WIRE (FROM ue6 PIN 10) TO uc3 PIN 2 (ALSO
- OTHERWISE UNCONNECTED).
-
- cURRENTLY, ONLY THE JUMPER TO ue6 PIN 9 IS REQUIRED TO READ ibm
- DISKETTES. iF YOU WANT TO SAVE YOURSELF SOLDERING ONE JUMPER, YOU MAY
- LEAVE ue6 PIN 10 CONNECTED TO GROUND. tHE JUMPER TO ue6 PIN 10 MAY BE
- REQUIRED IN THE FUTURE TO READ OTHER NEW AND EXCITING DISK FORMATS.
-
- 2b) 1541 disk drive modification -- first alternate
-
- uSE THE FOLLOWING MODIFICATION INSTRUCTIONS IF YOU WANT TO LEAVE THE
- FIRST via'S UNUSED PORT a ALONE. yOU'LL NEED A 4.7 KILOHM RESISTOR TO
- PERFORM THIS MODIFICATION (ALTHOUGH ANYTHING 3.3K TO 10K SHOULD ALSO
- WORK).
-
- bESIDES ALL OF PORT a, PIN ca1 OF THE FIRST via IS ALSO UNUSED IN A
- STOCK 1541. uNFORTUNATELY, IT GOES HIGH (NOT TO GROUND) WHEN RESET AND
- CAN'T BE DIRECTLY CONNECTED TO THE COUNTER'S INPUT FOR THE DRIVE TO BE
- ABLE TO READ REGULAR 1541 DISKS AT POWER UP. iNSTEAD, AN UNUSED INVERTER
- IS USED TO INVERT THE HIGH SIGNAL TO LOW, WHICH IS THEN CONNECTED TO THE
- COUNTER.
-
- uNPLUG YOUR 1541 AND REMOVE ITS COVER BY UNSCREWING THE FOUR SCREWS ON
- THE BOTTOM OF THE CASE. lOCATE THE CONTROLLER pcb AND UNPLUG THE
- TRANSFORMER CONNECTOR NEAR THE REGULATOR icS AND HEAT SINK. rEMOVE THE
- SCREWS ATTACHING THE pcb TO THE CHASSIS, INCLUDING THE TWO SCREWS
- ATTACHED TO THE REGULATOR HEAT SINK, AND TILT THE BOARD UP.
-
- lOCATE ue6 (THE 74ls193 COUNTER ic) AND CUT THE TRACE GOING TO PIN 9;
- MAKE SURE THE PIN 9 ISN'T STILL CONNECTED TO PIN 10. cAREFULLY SOLDER A
- SHORT WIRE TO PIN 9. lOCATE ub1 (7406 OPEN-COLLECTOR HEX INVERTER) AND
- VERIFY THAT PINS 5 AND 6 ARE UNCONNECTED. sOLDER THE OTHER END OF THE
- WIRE AND ONE END OF THE RESISTOR TO PIN 6. tHE OTHER END OF THE
- RESISTOR MUST BE SOLDERED TO PIN 14 (vCC). lOCATE uc3 (6522 via) AND
- SOLDER A SHORT LENGTH OF WIRE BETWEEN PIN 39 (ca2) AND PIN 5 OF ub1.
-
- 2c) 1541 disk drive modification -- second alternate
-
- iF YOU DON'T HAVE A RESISTOR HANDY, OR ARE MODIFYING A 1541 COMPATIBLE
- DISK DRIVE THAT DOESN'T HAVE AN UNUSED PORT OR INVERTER (OR EVEN ONE
- THAT DOES, LIKE THE oc-118), THEN YOU MAY BE FORCED TO USE THIS
- ALTERNATE MODIFICATION. a SWITCH IS INSTALLED WHICH ALLOWS YOU TO CHOOSE
- TO READ NORMAL 1541 DISKS WHEN DOWN OR mfm DISKS WHEN UP.
-
- lOCATE ue6 (THE 74ls193 COUNTER ic) AND CUT THE TRACE GOING TO PIN 9;
- MAKE SURE THE PIN 9 ISN'T STILL CONNECTED TO PIN 10. cAREFULLY SOLDER A
- SHORT WIRE BETWEEN PIN 9 AND THE MIDDLE POSITION OF A spdt SWITCH.
- cONNECT ONE REMAINING SWITCH CONTACT TO GROUND AND THE OTHER TO vCC (+5
- v). tO USE REGULAR 1541 DISKS, SWITCH TO THE GROUND POSITION. tO USE
- mfm DISKS, SWITCH TO THE +5 v POSITION.
-
- 2d) oceanic oc-118/oc-118n disk drive modification
-
- tHE oc-118 AND oc-118n ARE THIRD PARTY 1541-COMPATIBLE DISK DRIVES.
- tHEY APPEAR SIMILAR TO THE aMIGA EXTERNAL DISK DRIVES IN THAT THEY ARE
- COMPACT AND HAVE AN EXTERNAL POWER SUPPLY. tHEIR CIRCUITRY IS SLIGHTLY
- DIFFERENT FROM THAT OF THE 1541, AND THEY REQUIRE A DIFFERENT
- MODIFICATION. tHIS DESCRIPTION IS EQUIVALENT TO THE FIRST ALTERNATE
- 1541 MODIFICATION ABOVE, SO YOU'LL NEED A 3.3K TO 10K KILOHM RESISTOR.
-
- lOCATE u4 (74ls161 COUNTER ic) ON THE BOARD IN THE TOP RIGHT OF THE
- DIAGRAM. tHERE MAY BE ANOTHER u4 ON A DIFFERENT BOARD, SO MAKE SURE THE
- u4 YOU USE HAS 74ls161 WRITTEN ON IT. cUT THE TRACE BETWEEN PIN 6 OF u4
- AND gnd AND SOLDER A SHORT WIRE TO PIN 6. lOCATE u15 (7406 OPEN-
- COLLECTOR HEX INVERTER) AND SOLDER THE OTHER END OF THE WIRE AND ONE
- END OF THE RESISTOR TO PIN 8 (WHICH SHOULD OTHERWISE BE UNCONNECTED).
- cONNECT THE OTHER END OF THE RESISTOR TO PIN 14 (vCC). lOCATE u8 (6522
- via) AND SOLDER A SHORT LENGTH OF WIRE BETWEEN PIN 39 (ca2) AND PIN 9 OF
- u15.
-
- u1,3,5 u2,4,6
- ____________ _____ u7,9 u8,10
- !! \ =mmmmm=========__ / ! h#h h#h h
- !! --------------------- ! ==============
- !! SERVO CARD MOTHERBOARD ! mmh -- CONNECTORS
- !! - - - - - - - - - - - - - - - -!================
- !!_______________________w_w_w_w_w_w_w___! h#h h#h "
-
- u1...9 u10...u18
-
- oc-118, oc-118n - SIDE VIEW
-
- -----------------------------------------------------------------------
-
- 3) preparing disks for data transfer
-
- tHE 1541 DRIVE ONLY HAS A SINGLE HEAD TO READ SINGLE-SIDED DISKS. tHIS
- MEANS YOU NEED DISKS FORMATTED WITH THE 180 kb ms-dos FORMAT (40 TRACKS
- ON A SINGLE SIDE, 9 SECTORS PER TRACK WITH A SECTOR SIZE OF 512 BYTES).
- sUCH DISKS CAN BE FORMATTED USING THE ms-dos format COMMAND ON DOUBLE
- DENSITY DISKS WITH THE /1 COMMAND LINE OPTION. e.G.:
-
- format /1 a:
-
- iF YOU USE A HIGH DENSITY DISK DRIVE (1.2 mb) YOU WILL ALSO HAVE TO
- USE THE /4 COMMAND LINE OPTION TO CREATE DOUBLE DENSITY FORMAT. e.G.:
-
- format /1 /4 a:
-
- nEWER VERSIONS OF ms-dos ALLOW THE /f SWITCH WHICH WILL WORK ON BOTH
- KINDS OF DRIVES. e.G.:
-
- format /f:180 a:
-
- iF YOU USE OTHER PROGRAMS TO FORMAT DISKS INSTEAD OF THE ms-dos
- format COMMAND, YOU MAY HAVE TO USE DIFFERENT PARAMETERS TO GENERATE DISKS
- WITH EXACTLY THE DISK ORGANIZATION 1541-READS-DOS EXPECTS.
- e.G. WITH THE PUBLIC-DOMAIN PROGRAM fdformat YOU HAVE TO USE
-
- fdformat a: /f:180 /c:1 /d:64
-
-
- tHESE ARE THE BOOT SECTOR PARAMETERS FOR A 1541-READS-DOS READABLE DISK:
-
- bYTES PER SECTOR: 512
- sECTORS PER cLUSTER: 1
- rESERVED sECTORS AT BEGINNING: 1
- fat cOPIES: 2
- rOOT DIRECTORY ENTRIES: 64
- tOTAL SECTORS ON DISK: 360
- sECTORS PER fat: 2
- sECTORS PER TRACK: 9
- sIDES: 1
-
-
-
- hIGH DENSITY DRIVES USE A NARROWER READ/WRITE HEAD THAN DOUBLE
- DENSITY DRIVES AND THE 1541. tHEREFORE, YOU SHOULD NOT WRITE TO A DOUBLE
- DENSITY DISK WITH A HIGH DENSITY DRIVE IF THE DISK HAS PREVIOUSLY BEEN
- WRITTEN TO BY ONE OF THOSE DRIVES WITH ITS WIDER READ/WRITE HEAD.
-
- -----------------------------------------------------------------------
-
- 4) transferring files from ms-dos disks to cbm disks with
- "1541-READS-DOS"
-
- yOU NEED THE PROGRAM 1541-READS-DOS TO READ FILES FROM ms-dos DISKS.
- iF YOU HAVE NO OTHER WAY OF TRANSFERRING IT TO THE c64, YOU CAN TYPE IN
- THE basic LISTING OF 1541-DOS.BOOT IN aPPENDIX a TO READ 1541-DOS.SFX
- FOR THE FIRST TIME.
-
- tHE PROGRAM 1541-READS-DOS COPIES FILES IN THE ROOT DIRECTORY OF A
- 180 kb ms-dos DISK TO A cbm DISK.
-
- iT CAN BE LOADED AND STARTED LIKE A basic PROGRAM. tHE USER
- INTERFACE IS DIALOGUE ORIENTED, SO YOU HAVE TO INPUT DATA WHEN ASKED
- FOR IT. yOU CAN ACCEPT DEFAULT VALUES BY SIMPLY PRESSING THE
- return-KEY.
-
- aT THE BEGINNING IT WILL ASK FOR THE DEVICE NUMBER OF THE 1541 DRIVE
- MODIFIED FOR mfm READING. tHIS IS THE DRIVE THE ms-dos SOURCE DISK
- WILL BE READ FROM. nEXT YOU HAVE TO ENTER THE DEVICE NUMBER OF THE
- DRIVE THE FILE SHALL BE COPIED TO. tHIS CAN BE ANY cOMMODORE COMPATIBLE
- DISK DRIVE. yOU CAN ENTER EQUAL NUMBERS FOR BOTH DRIVES; THE PROGRAM
- WILL THEN WORK WITH A SINGLE 1541 DISK DRIVE. hOWEVER, THE PROGRAM
- WILL BE A BIT SLOWER AND YOU WILL HAVE TO SWAP DISKS QUITE
- FREQUENTLY.
-
- yOU MAY THEN LET THE PROGRAM START READING FORMAT AND DIRECTORY
- INFORMATION FROM AN ms-dos DISK. oNLY THE ROOT DIRECTORY IS
- SUPPORTED -- YOU CAN NOT COPY FROM SUBDIRECTORIES.
-
- wITH EACH FILE YOU ARE GIVEN THE OPTION OF COPYING IT TO A cbm DISK. iF
- YOU DECIDE TO COPY A FILE, YOU MUST ENTER A TEXT CONVERSION NUMBER.
- iF YOU ENTER 0, THE FILE WILL BE COPIED WITHOUT CONVERSION. wITH NUMBER
- 1, YOU SELECT CONVERSION FROM ascii TO cbm CHARACTER SET (petscii);
- NUMBER 2 STANDS FOR CONVERSION FROM ascii TO dATA bECKER c-EDITOR
- FORMAT. tHE LATTER USES THE cbm CHARACTER SET EXTENDED BY CHARACTERS
- NEEDED FOR THE PROGRAMMING LANGUAGE c.
-
- cHARACTERS THAT DO NOT EXIST IN THE DESTINATION CHARACTER SET ARE
- IGNORED. tAB CHARACTERS ARE CONVERTED TO SINGLE SPACES.
- nOTE THAT UUENCODED FILES CAN CONTAIN CHARACTERS (BACKSLASH AND
- UNDERSCORE) THAT DO NOT EXIST IN cbm CHARACTER SET.
-
- iN DETAIL, CONVERSION IS DONE ACCORDING TO THE FOLLOWING TABLES:
-
- ascii -> cbm
- -------------------
- 0..7 -
- 8 32
- 9 -
- 10 13
- 11..31 -
- 32..64 32..64
- 65..90 193..218
- 91 91
- 92 -
- 93..94 93..94
- 95..96 -
- 97..122 65..90
- 123..255 -
-
- ascii -> c-EDITOR
- ------------------------
- 0..7 -
- 8 32
- 9 -
- 10 13
- 11..31 -
- 32..64 32..64
- 65..90 193..218
- 91..95 91..95
- 96 -
- 97..122 65..90
- 123..126 219..222
- 127..255 -
-
- tEXT CONVERSION CAN TAKE QUITE A WHILE, LEADING TO PAUSES DURING THE
- COPY PROCESS.
-
- aFTER SELECTING THE CONVERSION NUMBER YOU CAN SPECIFY THE DESTINATION
- FILE TYPE. prg-, seq- AND usr-FILES CAN BE CREATED.
-
- nEXT, THE NAME OF THE DESTINATION FILE HAS TO BE ENTERED. tHE DEFAULT
- FILENAME IS THE ms-dos NAME WITH LOWER CASE LETTERS.
-
- aFTER FILES HAVE BEEN SELECTED THE COPY PROCESS CAN BE STARTED. wITH
- DIFFERENT SOURCE AND DESTINATION DISK DRIVES ALL FILES ARE COPIED
- WITHOUT ANY FURTHER USER INTERACTION NECESSARY.
-
- wHEN A SINGLE DRIVE IS USED, YOU HAVE TO SWAP DISKS FOR EVERY FILE.
- lONG FILES REQUIRE ADDITIONAL SWAPPING.
-
- aT THE END YOU CAN DECIDE TO START COPYING FROM ANOTHER ms-dos DISK.
- oTHERWISE THE PROGRAM WILL BE TERMINATED BY ISSUING A RESET OF BOTH THE
- c64 AND THE mfm- DISK DRIVE.
-
- -----------------------------------------------------------------------
-
- 5) transferring files from cbm disks to ms-dos disks with
- "1541-WRITES-90K" and "READ90K.COM"
-
- a SPECIAL 90K-FORMAT IS USED FOR TRANSFERRING FILES TO ms-dos
- COMPUTERS. tHIS IS NOT A REGULAR ms-dos FORMAT, ALTHOUGH IT USES
- FORMATTED 180 kb ms-dos DISKS.
-
- tHE PROGRAM 1541-WRITES-90K WRITES A FILE WITH A MAXIMUM LENGTH OF
- 91904 BYTES TO A DISK USING THE 90K-FORMAT. aLL PREVIOUS DATA ON THIS
- DISK IS OVERWRITTEN. aS ONLY ONE FILE PER DISK CAN BE WRITTEN, YOU NEED
- TO HAVE AS MANY FORMATTED DISKS AVAILABLE AS FILES YOU WANT TO COPY.
-
- tHE PROGRAM READ90K.COM IS USED ON AN ms-dos COMPUTER TO READ FILES
- FROM SUCH DISKS AND SAVE THEM AS REGULAR FILES ON ANOTHER DRIVE.
-
- lIKE 1541-READS-DOS, THE PROGRAM 1541-WRITES-90K CAN BE LOADED AND
- STARTED LIKE A basic PROGRAM. hOWEVER, YOU SHOULD KNOW THE FILENAME OF
- THE PROGRAMS YOU WANT TO WRITE BEFOREHAND AS THERE IS NO OPTION TO
- DISPLAY A DIRECTORY WHILE THE PROGRAM IS RUNNING.
-
- tHE PROGRAM ALSO ASKS FOR THE DEVICE NUMBERS OF THE mfm- AND cbm-DISK
- DRIVES. hERE, THE cbm-DRIVE CONTAINS THE SOURCE DISK AND THE mfm-DRIVE
- CONTAINS THE DESTINATION DISK. yOU CAN WORK WITH A SINGLE DRIVE, BUT
- COPYING LARGE FILES WILL BE MUCH SLOWER.
-
- iF YOU DECIDE TO START COPYING YOU HAVE TO ENTER THE NAME OF THE cbm
- FILE. tHE PROGRAM WILL THEN SEARCH FOR THE FILE ON THE SOURCE DISK. iF
- THE FILE EXISTS, YOU CAN SELECT A CONVERSION NUMBER (ANALOGOUS TO
- 1541-READS-DOS) TO SPECIFY CONVERSION FROM cbm OR c-EDITOR CHARACTER SET
- TO ms-dos ascii. cbm GRAPHIC CHARACTERS, THE LEFT ARROW AND THE POUND
- SYMBOL WILL BE IGNORED.
-
- iN DETAIL, CONVERSION IS DONE ACCORDING TO THE FOLLOWING TABLES:
-
- cbm -> ms-dos
- -----------------------------
- 0..12 -
- 13 13, 10
- 14..31 -
- 32..64 32..64
- 65..90 (+32) 97..122
- 91 91
- 92 -
- 93..94 93..94
- 95..96 -
- 97..122 (-32) 65..90
- 123..192 -
- 193..218 (-128) 65..90
- 219..255 -
-
- c-editor -> ms-dos
- -----------------------------
- 0..12 -
- 13 13, 10
- 14..31 -
- 32..64 32..64
- 65..90 (+32) 97..122
- 91..95 91..95
- 96 -
- 97..122 (-32) 65..90
- 123..192 -
- 193..218 (-128) 65..90
- 219..222 (-96) 123..126
- 223..255 -
-
- iN CONTRAST TO 1541-READS-DOS, TEXT CONVERSION DOES NOT LEAD TO PAUSES,
- AS IT IS PERFORMED BY THE PROGRAM "READ90K.COM" ON THE ms-dos MACHINE.
-
- aFTER SELECTING THE CONVERSION NUMBER YOU HAVE TO ENTER THE ms-dos
- FILENAME. tHE PROGRAM TRIES TO CREATE A REASONABLE FILENAME BY SEARCHING
- FOR AN EXTENSION FROM THE RIGHT TO THE LEFT. sUPERFLUOUS DOTS ARE
- CONVERTED TO UNDERSCORES, BLANKS ARE OMITTED. tHE FILENAME AND ITS
- EXTENSION ARE TRUNCATED TO 8 AND 3 CHARACTERS. hOWEVER, YOU HAVE TO
- REMOVE SPECIAL CHARACTERS LIKE ASTERISKS YOURSELF. yOU CAN CHANGE THE
- SUGGESTED FILENAME, HOWEVER, LETTERS ARE ALWAYS STORED IN UPPER CASE AND
- THE COMPLETE NAME IS TRUNCATED TO A MAXIMUM OF 12 CHARACTERS. iF YOU
- ENTER AN INVALID ms-dos FILENAME YOU WILL HAVE TROUBLES COPYING THE FILE
- WITH READ90K.COM.
-
- aFTER YOU HAVE ENTERED A NON-BLANK ms-dos FILE NAME THE COPY PROCESS
- BEGINS. cOPYING A LONG FILE WITH A SINGLE DRIVE MEANS YOU WILL HAVE
- TO SWAP DISKS DURING THE OPERATION.
-
- aT THE END YOU CAN DECIDE TO START COPYING TO ANOTHER ms-dos DISK IN
- 90K-FORMAT. oTHERWISE THE PROGRAM WILL BE TERMINATED BY ISSUING A RESET
- OF BOTH THE c64 AND THE mfm DISK DRIVE.
-
-
- nOW YOU MUST USE READ90K.COM TO GENERATE REGULAR ms-dos FILES FROM THE
- 90K-DISKS. yOU HAVE TO SPECIFY THE DRIVE THAT CONTAINS THE DISK AS A
- PARAMETER. e.G.:
-
- read90k a:
-
- READS ALL FILES FROM THE DISK IN DRIVE a AND COPIES THEM TO THE CURRENT
- DEVICE. iF YOU JUST WANT TO VIEW THE NAMES OF THE FILES ON THE DISK YOU
- HAVE TO ADD THE LETTER d AS A SECOND PARAMETER. e.G.:
-
- read90k a: d
-
- eXECUTING READ90K.COM WITHOUT PARAMETERS WILL DISPLAY A SHORT HELP
- MESSAGE.
-
- sOURCE CODE FOR READ90K IS AVAILABLE (aPPENDIX b) FOR COMPILING ON
- uNIX AND uNIX-LIKE MACHINES WITH A 5 1/4" DRIVE. tHE PROGRAM WILL
- COMPILE USING GCC, AND LIKELY YOUR NATIVE CC AS WELL (USE THE COMMAND
- "CC -O READ90K READ90K.C").
-
- bEFORE USING THE PROGRAM, YOU MUST FIND THE DEVICE DRIVER WHICH
- HANDLES SINGLE-SIDED OR DOUBLE-SIDED 40-TRACK DOUBLE-DENSITY FLOPPY
- DISKS. pUT ANY FORMATTED FLOPPY DISK INTO THE DRIVE AND EXECUTE THE
- COMMAND "WC -C /DEV/FLOPPYNAME" (WHERE FLOPPYNAME IS THE NAME OF THE
- SPECIAL FILE FOR THE FLOPPY DEVICE DRIVER). iF IT COMPLETES WITHOUT
- ERRORS AND THE SIZE GIVEN IS 184 320 (180K), YOU CAN USE READ90K WITH
- THE COMMAND LINE "READ90K /DEV/FLOPPYNAME". iF THE SIZE IS 368 640, YOU
- HAVE A 360 Kb SIZED DISK DRIVER AND MUST USE "READ90K 1 /DEV/FILENAME".
- iF YOU DON'T GET EITHER SIZED IMAGE, YOU CANNOT ACCESS THE 90 Kb DISK.
-
- aS AN EXAMPLE, THE lINUX os VER. 0.99 PATCHLEVEL 10 USES THE NAMES
- /DEV/FD0 AND /DEV/FD0D360 FOR THE FLOPPY DEVICE DRIVER FOR THE FIRST
- FLOPPY DRIVE. tHESE ARE BOTH 360 Kb DRIVERS WHICH REQUIRE USING THE "1"
- OPTION ON THE READ90K COMMAND LINE (I.E. TO COPY A 1541-WRITTEN DISK,
- USE THE COMMAND LINE "READ90K 1 /DEV/FD0").
-
- -----------------------------------------------------------------------
-
- 6) error messages
-
- dURING THE EXECUTION OF 1541-READS-DOS AND 1541-WRITES-90K SEVERAL
- DISK ERRORS MAY OCCUR. aN ERROR ALWAYS LEADS TO A TERMINATION OF THE
- COPY PROCESS.
-
- iF AN ERROR OCCURS DURING A cbm DISK ACCESS, THE DRIVE'S ERROR CHANNEL
- MESSAGE IS DISPLAYED.
-
- dURING AN ms-dos DISK ACCESS ONE OF THE FOLLOWING ERROR MESSAGES CAN
- APPEAR. (tHE PROBABLE REASON(S) FOR AN ERROR IS DESCRIBED HERE, BELOW
- EACH MESSAGE.)
-
-
- * cAN'T ACCESS mfm-DISK (DRIVE NOT READY)
-
- tHERE IS EITHER NO DISK IN THE DRIVE, OR THE DRIVE DOOR IS OPEN, OR
- THE DISK IS NOT A FORMATTED mfm-DISK.
- tHE MESSAGE MIGHT ALSO APPEAR IF THE 1541 HAS NOT BEEN MODIFIED OR IF
- THE MODIFICATION WAS NOT CORRECT.
-
- * crc-ERROR IN SECTOR HEADER
-
- tHE DISK IS OF BAD QUALITY OR IS NOT AN mfm-DISK.
-
- * SECTOR HEADER NOT FOUND
-
- tHE DISK IS OF BAD QUALITY OR IS NOT AN mfm-DISK. iT COULD ALSO
- INDICATE CORRUPT DISK CONTROL INFORMATION.
-
- * DATA SECTION NOT FOUND
-
- tHE DISK IS OF BAD QUALITY.
-
- * crc-ERROR IN DATA SECTION
-
- tHE DISK IS OF BAD QUALITY. tHERE COULD ALSO BE A PROBLEM WITH THE
- DRIVE.
-
- iF THIS ERROR HAPPENS DURING WRITING DATA IT INDICATES A WRITE VERIFY
- ERROR.
-
- * WRITE PROTECT ON
-
- aN ATTEMPT WAS MADE TO WRITE TO A WRITE PROTECTED DISK.
-
- * DISK FULL
-
- aN ATTEMPT WAS MADE TO WRITE MORE THAN 91904 BYTES TO A 90K-DISK.
-
- * iLLEGAL mfm-DISK SIDENR. ( <> 0 )
-
- tHE DISK CONTROL INFORMATION IS CORRUPT (OR THE DRIVE IS SPINNING
- BACKWARDS...).
-
- * uNSUPPORTED mfm-SECTOR SIZE ( <> 512 )
-
- tHE INSERTED DISK IS NOT AN ms-dos DISK (E.G. IT COULD BE A cp/m
- DISK).
-
- * nOT (YET) SUPPORTED ms-dos FORMAT
-
- tHE DISK HAS BEEN FORMATTED WITH WRONG COMMAND LINE OPTIONS, OR IT IS
- NOT AN ms-dos DISK, OR THE DISK CONTROL INFORMATION IS CORRUPT.
-
- tHE POSITIONS WHERE DISK ERRORS HAVE OCCURRED MAY BE INDICATED BY AN
- mfm TRACK AND SECTOR NUMBER IN PARENTHESES.
-
- tHE PROGRAMS RETRY READING AND WRITING TO BAD QUALITY DISKS SEVERAL
- TIMES BEFORE DISPLAYING AN ERROR MESSAGE.
-
- sOME DRIVES BEHAVE DIFFERENTLY AFTER THEY HAVE BEEN IN USE FOR A LONG
- TIME. sO, AFTER AN ERROR, IT MIGHT BE WORTH TRYING AGAIN AFTER THE DRIVE
- HAS BEEN SWITCHED OFF FOR QUITE A WHILE.
-
- sOMETIMES IT TAKES A VERY LONG TIME TO DETECT AN ERROR. iN THAT CASE,
- YOU COULD OPEN THE DRIVE DOOR TO INTERRUPT THE READING PROCESS.
- nORMALLY THE READ/WRITE HEAD WILL NOT BUMP AGAINST ITS BOUNDARIES IF
- THIS IS DONE DURING AN ms-dos DISK ACCESS.
-
- -----------------------------------------------------------------------
-
- 7) compatibility
-
- tHE c64 PROGRAMS HAVE BEEN TESTED IN THE FOLLOWING CONFIGURATIONS:
-
- - A SINGLE MODIFIED 1541 DRIVE
- - A SINGLE MODIFIED oc-118n DRIVE
- - A MODIFIED 1541 AND A STOCK oc-118n
- - A MODIFIED oc-118n AND A STOCK 1541
- - A MODIFIED 1541 AND ramdos EMULATING A SECOND DISK DRIVE
-
- tHEY SHOULD ALSO WORK WITH ANY OTHER cOMMODORE COMPATIBLE DISK DRIVE
- USED AS THE SECOND DRIVE (THE ONE HOLDING THE cbm FORMAT DISK).
-
- tHE MEMORY BETWEEN $c000 AND $cfff HAS INTENTIONALLY BEEN LEFT
- BLANK. tHIS IS THE PLACE TO PUT UTILITY PROGRAMS LIKE THE ramdos
- INTERFACE PAGE.
-
- dISK SPEEDUP UTILITIES SHOULD WORK WELL WITH READING AND WRITING TO
- cbm FORMAT DISKS. iF THEY SPEED UP SEQUENTIAL FILE ACCESS, COPYING
- WILL BE MUCH FASTER.
-
- wHILE READING AND WRITING TO ms-dos DISKS ALMOST ANY AVAILABLE ram
- IN THE 1541 IS USED. tHEREFORE YOU MIGHT HAVE TROUBLES WITH UTILITIES
- THAT RELY UPON THAT ram.
-
- tHE PROGRAMS WILL RESET THE DISK DRIVE AFTER EACH COPY PASS IF A
- SINGLE DISK DRIVE IS USED. tHIS WILL RESET DEVICE NUMBERS CHANGED BY
- SOFTWARE TO THEIR ORIGINAL VALUES.
-
- -----------------------------------------------------------------------
-
- 8) possible improvements
-
- tHE PROGRAMS 1541-READS-DOS AND 1541-WRITES-90K ARE BOTH DIVIDED INTO
- MACHINE LANGUAGE CODE EXECUTED IN THE MODIFIED 1541 DISK DRIVE AND A
- COMPILED c-PROGRAM EXECUTED IN THE c64.
-
- tHERE ARE SOME RESTRICTIONS DUE TO THE USE OF c AS THE PROGRAMMING
- LANGUAGE. iF THE c64 PROGRAMS WOULD BE REWRITTEN IN ASSEMBLER MANY
- IMPROVEMENTS COULD BE ACHIEVED.
-
- * sMALLER PROGRAM SIZE
-
- tHE READ AND WRITE PROGRAMS COULD BE COMBINED INTO ONE AND A BIGGER
- COPY BUFFER COULD BE USED (CURRENT SIZE IS 12kb).
-
- * hIGHER SPEED
-
- tHE ROUTINES FOR TEXT CONVERSION ESPECIALLY COULD BE MUCH FASTER.
-
- wITH FAST TRANSFER ROUTINES, ms-dos READING AND WRITING SPEED COULD
- BE DOUBLED.
- aS AN OPTION, cbm DISK READING AND WRITING COULD ALSO BE MADE 5 TIMES
- FASTER QUITE EASILY.
-
- * bETTER USER INTERFACE
-
- a LESS MODAL USER INTERFACE, EITHER COMMAND LINE OR MENU ORIENTED,
- COULD BE IMPLEMENTED.
-
- * mORE FLEXIBILITY
-
- 1541-READS-DOS COULD HANDLE QUITE EASILY ALSO 160kb DISKS.
- sUBDIRECTORIES COULD BE SUPPORTED.
-
- * iMPROVEMENT OF LOW LEVEL ROUTINES
-
- cURRENTLY, IT IS NOT POSSIBLE TO WRITE COMPLETE SECTORS DUE TO TOO
- LITTLE MEMORY IN THE 1541. tHAT IS WHY THE 90K-FORMAT IS USED. bY
- LETTING THE c64 DO SOME OF THE WORK CURRENTLY DONE BY THE 1541 IT COULD
- BE POSSIBLE TO WRITE COMPLETE SECTORS.
-
- tHE REGULAR ms-dos FORMAT COULD THEN BE USED FOR WRITING, TOO. cOMMANDS
- TO DELETE AND RENAME FILES COULD BE ALSO IMPLEMENTED THEN.
-
- iT WOULD BE POSSIBLE TO SUPPORT DOUBLE SIDED DISKS BY FLIPPING DISKS
- OVER. a HARDWARE OR SOFTWARE SWITCH INSTALLED IN THE 1541 TO CHANGE THE
- SPINNING DIRECTION WOULD PROBABLY BE NECESSARY.
-
- -----------------------------------------------------------------------
-
- 9) disclaimer
-
- aLTHOUGH THE DRIVE MODIFICATION AND PROGRAMS HAVE BEEN TESTED ON SEVERAL
- DISK DRIVES AND COMPUTERS, THE AUTHORS CANNOT GUARANTEE THAT ANYONE ELSE
- CAN PERFORM THIS UPGRADE WITHOUT DAMAGING HIS COMPUTER. wE THEREFORE
- DISCLAIM ANY RESPONSIBILITY FOR ANY DAMAGE THAT MAY OCCUR AS RESULT OF
- ATTEMPTING THIS UPGRADE OR USING THE ACCOMPANYING PROGRAMS. kEEP IN MIND
- THAT THE MODIFICATION WILL ALSO VOID ANY WARRANTY ON YOUR DISK DRIVE.
-
-
- -----------------------------------------------------------------------
-
- 10) contacting the authors
-
- iF YOU HAVE COMMENTS OR BUG REPORTS OR IF YOU ARE INTERESTED IN
- IMPROVING THE PROGRAMS FEEL FREE TO SEND EMAIL TO THE PROGRAMMER OF THE
- c64 PROGRAMS,
-
- rICHARD hABLE
- rICHARD.hABLE@JK.UNI-LINZ.AC.AT
-
- TO THE ORIGINAL DEVELOPER OF THE DRIVE MODIFICATION AND mfm READING
- ROUTINE,
-
- dANIEL fANDRICH
- DAN@FCH.WIMSEY.BC.CA
- OR cOMPUsERVE 72365,306
-
- OR TO THE AUTHOR OF THE rEAD90K PROGRAMS,
-
- mARKO mAKELA
- mARKO.mAKELA@hELSINKI.FI
-
-
- -------------------------------------------------------------------------
-
- appendix a: listing of basic program 1541-dos.boot
-
- tHIS basic PROGRAM ALLOWS YOU TO READ 1541-DOS.SFX FOR THE FIRST
- TIME. iT HAS BEEN KEPT AS SMALL AS POSSIBLE, THEREFORE, THERE IS LITTLE
- ERROR CHECKING. pLEASE READ THE FOLLOWING INSTRUCTIONS TO AVOID
- INCORRECT RESULTS.
-
- fORMAT AN ms-dos DISK FOR DATA TRANSFER, AS DESCRIBED IN 3).
- cOPY THE FILE 1541-DOS.SFX TO THE FRESHLY FORMATTED ms-dos DISK.
-
- tYPE IN THE basic PROGRAM 1541-DOS.BOOT, SAVE IT AND RUN IT ON A c64.
- fIRST, YOU HAVE TO ENTER THE DEVICE NUMBER OF THE MODIFIED 1541. tHIS
- DRIVE WILL BE USED FOR BOTH READING AND WRITING.
- tHEN, YOU HAVE TO INSERT A CORRECTLY FORMATTED cbm DISK. nO DATA ON
- THIS DISK WILL BE CHANGED. iT IS ONLY NECESSARY TO LET THE DRIVE FIND
- CORRECT TRACK POSITIONS.
- tHEN, YOU HAVE TO INSERT THE ms-dos DISK. tHE PROGRAM 1541-DOS.SFX
- WILL BE READ INTO MEMORY. tHIS WILL TAKE QUITE A WHILE.
- iF NO ERRORS OCCUR, YOU CAN INSERT A cbm DISK, TO WHICH THE
- PROGRAM 1541-DOS.SFX WILL BE WRITTEN TO.
-
-
- 0 REM 1541-DOS.BOOT VER. 16.11.1993
- 1 REM READ 1541-DOS.INSTR !
- 2 :
- 10 POKE55,0:POKE56,48:CLR
- 100 INPUT"DEVICE NUMBER";V
- 150 INPUT"INSERT CORRECT CBM DISK <RETURN>";X$
- 160 OPEN1,V,15,"I":INPUT#1,A,B$,C,D:CLOSE1:IFA>=20THENSTOP
- 200 INPUT"INSERT MS-DOS SOURCE DISK <RETURN>";X$
- 210 OPEN1,V,15:GOSUB2000:CLOSE1
- 300 OPEN1,V,15:PRINT"READING"
- 310 T=1:S=1:M=12288:B=56
- 320 FORD=1TOB:GOSUB1000:M=M+512:S=S+1:IFS>9THENS=1:T=T+1
- 330 PRINT"#";:NEXTD:PRINT:PRINT#1,"UI";
- 400 INPUT"INSERT CBM DESTINATION DISK <RETURN>";X$
- 410 OPEN2,V,1,"1541-DOS.SFX":INPUT#1,A,B$,C,D:IFA>=20THENSTOP
- 420 FORI=0TOB*512-1:PRINT#2,CHR$(PEEK(12288+I));:NEXT:CLOSE2
- 430 CLOSE1:POKE56,160:CLR:END
- 999 :
- 1000 REM READ SECTOR T/S INTO M
- 1010 FORC=1TO15:FORP=0TO1
- 1020 PRINT#1,"M-W"CHR$(6)CHR$(4)CHR$(4)CHR$(P)CHR$(T)CHR$(0)CHR$(S);
- 1030 PRINT#1,"M-E"CHR$(3)CHR$(4);:PRINT#1,"M-R"CHR$(13)CHR$(4)CHR$(1);:GET#1,E$
- 1040 IFE$<>""THENIFP=0OR(E$<>CHR$(2))AND(E$<>CHR$(4))THENPRINT"READ ERROR":STOP
- 1050 IFE$<>""THENNEXTC:PRINT"READ ERROR":STOP
- 1060 FORI=0TO255STEP32:PRINT#1,"M-R"CHR$(I)CHR$(3)CHR$(32);
- 1070 FORJ=0TO31:GET#1,C$:POKEM+256*P+I+J,ASC(C$+CHR$(0)):NEXT:NEXT
- 1080 NEXTP:RETURN
- 2000 REM TRANSFER M.CODE
- 2010 FORI=0TO1023:READA:PRINT#1,"M-W"CHR$(IAND255)CHR$(4+I/256)CHR$(1)CHR$(A);
- 2020 H=H+A*(I+1):NEXT:IFH<>52477511THENSTOP
- 2030 RETURN
- 9999 :
- 10000 DATA76,75,4,76,14,4,0,18,0
- 10010 DATA1,2,0,0,0,32,0,193,173
- 10020 DATA1,24,72,41,252,9,2,141
- 10030 DATA1,24,173,12,24,72,41,241
- 10040 DATA9,12,141,12,24,169,76,141
- 10050 DATA0,4,169,75,141,1,4,174
- 10060 DATA7,4,232,134,8,169,224,133
- 10070 DATA1,165,1,48,252,141,13,4
- 10080 DATA104,141,12,24,104,141,1
- 10090 DATA24,96,160,33,185,42,2,153
- 10100 DATA213,2,136,16,247,173,0
- 10110 DATA28,41,159,141,0,28,162
- 10120 DATA6,189,248,7,157,209,1,202
- 10130 DATA208,247,160,146,165,16
- 10140 DATA72,165,17,72,169,117,133
- 10150 DATA16,169,55,133,17,134,23
- 10160 DATA189,7,4,32,187,7,32,218
- 10170 DATA7,153,70,1,200,165,84,153
- 10180 DATA70,1,200,232,224,4,144
- 10190 DATA232,169,0,32,187,7,32,187
- 10200 DATA7,165,17,32,218,7,153,70
- 10210 DATA1,200,165,84,153,70,1,165
- 10220 DATA16,200,192,158,144,237
- 10230 DATA104,133,17,104,133,16,169
- 10240 DATA78,32,218,7,153,70,1,165
- 10250 DATA84,153,71,1,160,0,152,141
- 10260 DATA127,7,162,141,189,69,1
- 10270 DATA192,80,144,3,169,137,202
- 10280 DATA133,22,189,70,1,72,32,125
- 10290 DATA7,153,70,1,104,232,200
- 10300 DATA224,159,144,237,208,4,192
- 10310 DATA80,144,231,173,127,7,24
- 10320 DATA105,3,141,127,7,169,255
- 10330 DATA153,70,1,200,192,140,144
- 10340 DATA200,141,229,1,169,13,141
- 10350 DATA34,6,169,0,141,47,6,32
- 10360 DATA76,5,169,67,141,34,6,169
- 10370 DATA54,141,47,6,169,208,160
- 10380 DATA200,174,6,4,208,12,169
- 10390 DATA112,133,16,169,55,133,17
- 10400 DATA169,153,160,0,141,130,6
- 10410 DATA140,131,6,162,144,169,255
- 10420 DATA157,70,1,138,56,233,20
- 10430 DATA170,176,244,162,202,154
- 10440 DATA169,203,141,5,24,169,180
- 10450 DATA133,82,160,0,169,48,133
- 10460 DATA24,184,80,254,44,1,28,184
- 10470 DATA80,254,173,1,28,184,162
- 10480 DATA80,201,85,240,36,80,254
- 10490 DATA173,1,28,184,162,100,201
- 10500 DATA170,240,89,136,208,222
- 10510 DATA198,24,208,218,162,1,76
- 10520 DATA68,7,80,254,44,1,28,184
- 10530 DATA56,76,25,6,169,85,80,254
- 10540 DATA237,1,28,240,247,201,13
- 10550 DATA240,233,144,13,80,254,44
- 10560 DATA1,28,162,120,233,51,240
- 10570 DATA116,208,175,80,254,44,1
- 10580 DATA28,184,162,40,201,3,240
- 10590 DATA14,80,254,44,1,28,184,162
- 10600 DATA0,201,1,240,90,208,149
- 10610 DATA80,254,173,1,28,233,74
- 10620 DATA240,79,208,138,169,170
- 10630 DATA80,254,237,1,28,240,247
- 10640 DATA201,25,240,168,144,13,80
- 10650 DATA254,44,1,28,162,140,233
- 10660 DATA102,240,51,208,215,80,254
- 10670 DATA44,1,28,184,162,60,201
- 10680 DATA6,240,15,80,254,44,1,28
- 10690 DATA184,162,20,201,1,240,25
- 10700 DATA76,86,5,80,254,173,1,28
- 10710 DATA233,148,240,13,208,242
- 10720 DATA152,56,233,3,168,176,235
- 10730 DATA76,120,5,232,80,254,173
- 10740 DATA1,28,253,70,1,208,13,232
- 10750 DATA80,254,173,1,28,253,70
- 10760 DATA1,240,234,208,0,56,138
- 10770 DATA170,233,20,176,251,224
- 10780 DATA6,144,211,224,19,240,12
- 10790 DATA198,82,240,3,76,80,5,162
- 10800 DATA3,76,68,7,96,140,131,6
- 10810 DATA80,254,44,1,28,184,169
- 10820 DATA153,136,240,34,80,254,44
- 10830 DATA1,28,184,141,130,6,76,79
- 10840 DATA6,80,254,173,1,28,184,133
- 10850 DATA83,188,70,1,80,254,173
- 10860 DATA1,28,184,133,84,200,208
- 10870 DATA153,80,254,173,1,28,184
- 10880 DATA153,0,3,80,254,173,1,28
- 10890 DATA184,153,129,3,200,80,254
- 10900 DATA173,1,28,184,153,202,1
- 10910 DATA192,129,80,254,173,1,28
- 10920 DATA184,72,144,217,44,5,24
- 10930 DATA48,5,162,4,76,68,7,138
- 10940 DATA162,255,56,233,20,232,176
- 10950 DATA251,138,73,7,133,26,10
- 10960 DATA101,26,141,127,7,169,0
- 10970 DATA133,23,141,107,7,160,129
- 10980 DATA224,4,104,176,3,173,75
- 10990 DATA2,133,22,176,6,144,10,104
- 11000 DATA32,83,7,185,202,1,32,83
- 11010 DATA7,136,185,129,3,32,83,7
- 11020 DATA185,0,3,32,83,7,152,208
- 11030 DATA230,165,84,32,83,7,165
- 11040 DATA83,32,83,7,174,6,4,240
- 11050 DATA7,169,0,141,203,1,162,0
- 11060 DATA160,0,185,203,1,157,0,3
- 11070 DATA32,187,7,185,129,3,157
- 11080 DATA1,3,32,187,7,200,232,232
- 11090 DATA208,233,174,6,4,208,9,173
- 11100 DATA75,2,141,2,7,76,68,7,173
- 11110 DATA75,2,32,187,7,173,1,4,32
- 11120 DATA187,7,165,16,5,17,170,240
- 11130 DATA2,162,5,160,33,185,213
- 11140 DATA2,153,42,2,136,16,247,138
- 11150 DATA76,105,249,166,22,72,133
- 11160 DATA22,138,32,125,7,166,23
- 11170 DATA133,23,240,23,138,32,150
- 11180 DATA7,162,0,134,23,240,0,153
- 11190 DATA129,3,162,7,208,3,153,203
- 11200 DATA1,142,107,7,104,133,22
- 11210 DATA96,24,144,254,70,22,106
- 11220 DATA70,22,106,70,22,106,70
- 11230 DATA22,106,70,22,106,70,22
- 11240 DATA106,70,22,106,96,41,170
- 11250 DATA105,42,41,212,105,20,41
- 11260 DATA232,105,8,74,74,74,74,133
- 11270 DATA26,165,23,41,170,105,42
- 11280 DATA41,212,105,20,41,232,105
- 11290 DATA8,41,240,5,26,96,72,133
- 11300 DATA26,56,38,26,240,21,38,16
- 11310 DATA38,17,144,246,165,16,73
- 11320 DATA33,133,16,165,17,73,16
- 11330 DATA133,17,24,144,231,104,96
- 11340 DATA56,42,8,176,6,36,23,48
- 11350 DATA2,56,36,24,38,84,38,83
- 11360 DATA40,8,102,23,40,38,84,38
- 11370 DATA83,10,208,230,165,83,96
- 11380 DATA68,137,68,137,85,84,144
-
- -------------------------------------------------------------------------
-
- appendix b: c-version of read90k for unix
-
- iF YOU DON'T HAVE ms-dos INSTALLED ON YOUR pc, IT MIGHT BE POSSIBLE TO
- USE THE FOLLOWING c-PROGRAM TO READ FILES FROM DISKS IN 90K-FORMAT.
-
-
- #INCLUDE <STDIO.H>
- #INCLUDE <STRING.H>
-
- /************************************************************
- * rEAD90K V0.1
- *
- * mARKO mDKELD
- * mAIL: sILLITIE 10 a
- * 01480 vANTAA
- * fINLAND
- * e-mAIL: mARKO.mAKELA@hELSINKI.fi
- *
- * vERSION HISTORY:
- *
- * vERSION dATE dESCRIPTION
- * V0.1 jUNE 23RD, 1993 tHE FIRST VERSION FOR uNIX.
- ************************************************************/
-
- /*******************
- * tRANSLATION TABLE
- *******************/
-
- UNSIGNED CHAR tRANSLAtABLE[] =
- {$7b}
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 00 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X0a, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 10 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, /* 20 */
- 0X28, 0X29, 0X2a, 0X2b, 0X2c, 0X2d, 0X2e, 0X2f,
- 0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, /* 30 */
- 0X38, 0X39, 0X3a, 0X3b, 0X3c, 0X3d, 0X3e, 0X3f,
- 0X40, 0X61, 0X62, 0X63, 0X64, 0X65, 0X66, 0X67, /* 40 */
- 0X68, 0X69, 0X6a, 0X6b, 0X6c, 0X6d, 0X6e, 0X6f,
- 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, /* 50 */
- 0X78, 0X79, 0X7a, 0X5b, 0X00, 0X5d, 0X5e, 0X00,
- 0X00, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, /* 60 */
- 0X48, 0X49, 0X4a, 0X4b, 0X4c, 0X4d, 0X4e, 0X4f,
- 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, /* 70 */
- 0X58, 0X59, 0X5a, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 80 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 90 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* a0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* b0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, /* c0 */
- 0X48, 0X49, 0X4a, 0X4b, 0X4c, 0X4d, 0X4e, 0X4f,
- 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, /* d0 */
- 0X58, 0X59, 0X5a, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* e0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* f0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
-
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 00 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X0a, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 10 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X20, 0X21, 0X22, 0X23, 0X24, 0X25, 0X26, 0X27, /* 20 */
- 0X28, 0X29, 0X2a, 0X2b, 0X2c, 0X2d, 0X2e, 0X2f,
- 0X30, 0X31, 0X32, 0X33, 0X34, 0X35, 0X36, 0X37, /* 30 */
- 0X38, 0X39, 0X3a, 0X3b, 0X3c, 0X3d, 0X3e, 0X3f,
- 0X40, 0X61, 0X62, 0X63, 0X64, 0X65, 0X66, 0X67, /* 40 */
- 0X68, 0X69, 0X6a, 0X6b, 0X6c, 0X6d, 0X6e, 0X6f,
- 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, /* 50 */
- 0X78, 0X79, 0X7a, 0X5b, 0X5c, 0X5d, 0X5e, 0X5f,
- 0X00, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, /* 60 */
- 0X48, 0X49, 0X4a, 0X4b, 0X4c, 0X4d, 0X4e, 0X4f,
- 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, /* 70 */
- 0X58, 0X59, 0X5a, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 80 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* 90 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* a0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* b0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X41, 0X42, 0X43, 0X44, 0X45, 0X46, 0X47, /* c0 */
- 0X48, 0X49, 0X4a, 0X4b, 0X4c, 0X4d, 0X4e, 0X4f,
- 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, /* d0 */
- 0X58, 0X59, 0X5a, 0X7b, 0X7c, 0X7d, 0X7e, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* e0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, /* f0 */
- 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00
- {$7d};
-
- /*********************
- * fUNCTION PROTOTYPES
- *********************/
-
- #IFNDEF __stdc__
- INT MAIN(); /* MAIN FUNCTION */
- #ELSE
- INT MAIN(INT ARGC, CHAR **ARGV);
- #ENDIF
-
- /***********
- * fUNCTIONS
- ***********/
-
- #IFDEF __stdc__
- INT MAIN(INT ARGC, CHAR **ARGV)
- #ELSE
- INT
- MAIN(ARGC,ARGV)
- INT ARGC;
- CHAR **ARGV;
- #ENDIF
- {$7b}
- file *DISK, *OUTFILE;
- UNSIGNED CHAR DIRBUF[256], DISKBUF[512], BYTE;
- UNSIGNED UfILEcOUNTER, UcOUNTER, UsECTORcOUNTER, MODE = 1,
- UtRANS1, UtRANS2;
- UNSIGNED LONG LUfILElENGTH, LUfINALlENGTH;
-
- FPRINTF(STDERR, "90 Kb DISK READER FOR uNIX V0.1\N");
-
- IF (ARGC < 2 {$7c}{$7c} ARGC > 3)
- {$7b}
- uSAGE: FPRINTF (STDERR, "uSAGE: %S [D{$7c}1] DISK\N", *ARGV);
- FPRINTF (STDERR, "oPTIONS: D TO DISPLAY THE DIRECTORY ONLY.\N");
- FPRINTF (STDERR, " 1 TO EXTRACT SKIPPING THE SECOND SIDE.\N");
- FPRINTF (STDERR, "DISK IS /DEV/FD0, FOR INSTANCE.\N");
- RETURN (1);
- {$7d}
-
- IF (ARGC == 3 && ARGV[1][1])
- GOTO uSAGE;
-
- IF (ARGC == 3)
- {$7b}
- ARGV++;
-
- IF (**ARGV == 'D')
- MODE = 0;
- ELSE IF (**ARGV == '1')
- MODE = 2;
- ELSE
- GOTO uSAGE;
- {$7d}
-
- IF ((DISK = FOPEN(*++ARGV, "RB")) == null)
- {$7b}
- FPRINTF(STDERR, "oPENING THE DISK %S FAILED.\N", *ARGV);
- RETURN(2);
- {$7d}
-
- /* READ DIRECTORY */
-
- IF (512 > FREAD (DISKBUF, SIZEOF *DISKBUF, 512, DISK))
- {$7b}
- FPRINTF (STDERR, "eRROR READING DISK DIRECTORY.\N");
- FCLOSE (DISK);
- RETURN (3);
- {$7d}
-
- UsECTORcOUNTER = 1;
-
- MEMCPY (DIRBUF, DISKBUF, 256);
-
- /* START PROCESSING THE DIRECTORY */
-
- FOR (UfILEcOUNTER = 0; UfILEcOUNTER < 256 && DIRBUF[UfILEcOUNTER];
- UfILEcOUNTER += 16)
- {$7b}
- LUfILElENGTH = 1 + (UNSIGNED LONG)DIRBUF[UfILEcOUNTER + 13] +
- ((UNSIGNED LONG)DIRBUF[UfILEcOUNTER + 14] << 8) +
- (((UNSIGNED LONG)DIRBUF[UfILEcOUNTER + 15] & 1) << 16);
-
- IF (MODE)
- FPRINTF (STDOUT, "cREATING {$60}%S', %LU BYTES -- ",
- &DIRBUF[UfILEcOUNTER], LUfILElENGTH);
- ELSE
- FPRINTF (STDOUT, "{$60}%S', %LU BYTES\N", &DIRBUF[UfILEcOUNTER],
- LUfILElENGTH);
-
- IF (MODE)
- {$7b}
- IF (!(OUTFILE = FOPEN (&DIRBUF[UfILEcOUNTER], "WB")))
- {$7b}
- OUTfAIL: FPRINTF (STDERR, "fAILED IN CREATING THE FILE.\N");
- FCLOSE (DISK);
- RETURN (4);
- {$7d}
-
- LUfINALlENGTH = 0;
-
- WHILE (LUfILElENGTH)
- {$7b}
- IF (512 > FREAD (DISKBUF, SIZEOF *DISKBUF, 512, DISK))
- {$7b}
- FPRINTF (STDERR, "eRROR READING THE DISK.\N");
- FCLOSE (DISK);
- FCLOSE (OUTFILE);
- RETURN (3);
- {$7d}
-
- LUfILElENGTH -= (UcOUNTER = LUfILElENGTH > 256 ?
- 256 : LUfILElENGTH);
-
- IF (DIRBUF[UfILEcOUNTER + 15] & 192) /* TRANSLATION */
- {$7b}
- MEMCPY (DISKBUF + 256, DISKBUF, 256);
-
- FOR (UtRANS1 = UtRANS2 = 0; UtRANS1 < UcOUNTER; UtRANS1++)
- IF (BYTE = tRANSLAtABLE[((DIRBUF[UfILEcOUNTER + 15] &
- 128) << 1) + DISKBUF[256 + UtRANS1]])
- DISKBUF[UtRANS2++] = BYTE;
-
- UcOUNTER = UtRANS2;
- {$7d}
-
- IF (UcOUNTER > FWRITE (DISKBUF, SIZEOF *DISKBUF,
- UcOUNTER, OUTFILE))
- {$7b}
- FCLOSE (OUTFILE);
- GOTO OUTfAIL;
- {$7d}
-
- LUfINALlENGTH += UcOUNTER;
-
- IF (++UsECTORcOUNTER == 9)
- {$7b}
- IF (MODE == 2) /* OPTIONALLY SKIP THE SECOND SIDE */
- FOR (UsECTORcOUNTER++; --UsECTORcOUNTER;
- FREAD (DISKBUF, SIZEOF *DISKBUF, 512, DISK));
-
- UsECTORcOUNTER = 0;
- {$7d}
- {$7d}
-
- FCLOSE (OUTFILE);
- FPRINTF (STDOUT, "%LU BYTES CONVERTED.\N", LUfINALlENGTH);
- {$7d}
- {$7d}
-
- FCLOSE (DISK);
- RETURN (0);
- {$7d}
-