home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / maps / C1541ram.doc < prev    next >
Text File  |  1995-03-08  |  12KB  |  414 lines

  1.  
  2. ;cOMMODORE 1541 / oc-118 dISK dRIVE mEMORY mAP
  3. ;v1.318 jAN 1995
  4.  
  5. ;cOVERED IN THIS FILE:
  6. ;   1541 / oc-118 dISK dRIVE ram mAP
  7. ;   1541 / oc-118 dISK dRIVE i/o aREA
  8. ;
  9.  
  10.  
  11.  tHE FOLLOWING TEXT WAS GRABBED FROM "tHE ANATOMY OF THE 1541" BY
  12.  lOTHAR eNGLISCH AND nORBERT sZCZEPANOWSKI.
  13.  aDDITIONS FROM "1541 LEVYASEMA".
  14.  
  15.  
  16. lAYOUT OF THE 2kB ram AREA
  17. ==========================
  18.  
  19. ;cOMMODORE 1541 dISK dRIVE ram mAP
  20. ;
  21. ; tHE NUMBER IN BRACKETS AFTER DESCRIPTION IS THE DEFAULT VALUE AFTER
  22. ; POWER-UP.
  23.  
  24.  
  25. ; wORK QUEUE
  26.  
  27. 0000cOMMAND CODE FOR BUFFER 0
  28. 0001cOMMAND CODE FOR BUFFER 1
  29. 0002cOMMAND CODE FOR BUFFER 2
  30. 0003cOMMAND CODE FOR BUFFER 3
  31. 0004cOMMAND CODE FOR BUFFER 4
  32. 0005cOMMAND CODE FOR BUFFER 5 (UNUSED)
  33.  
  34. ; ***
  35.  
  36. 0006 - 07tRACK AND SECTOR FOR BUFFER 0
  37. 0008 - 09tRACK AND SECTOR FOR BUFFER 1
  38. 000A - 0BtRACK AND SECTOR FOR BUFFER 2
  39. 000C - 0DtRACK AND SECTOR FOR BUFFER 3
  40. 000E - 0FtRACK AND SECTOR FOR BUFFER 4
  41. 0010 - 11tRACK AND SECTOR FOR BUFFER 5 (UNUSED)
  42.  
  43. 0012 - 13dISK id, DRIVE 0
  44. 0014 - 15dISK id, DRIVE 1
  45. 0016hEADER BLOCK: id
  46. 0018hEADER BLOCK: tRACK
  47. 0019hEADER BLOCK: sECTOR
  48. 001AhEADER BLOCK: pARITY
  49.  
  50. 001BnOT USED (dISK cONTROLLER WORK)
  51. 001CfLAG FOR DISK CHANGE, DRIVE 0 [01]
  52. 001DfLAG FOR DISK CHANGE, DRIVE 1 [01]
  53. 001EfLAG FOR WRITE PROTECT SENSE, DRIVE 0 [01]
  54. 001FfLAG FOR WRITE PROTECT SENSE, DRIVE 1
  55.  
  56. 0020dRIVE 0 STATUS (DISK AND STEP MOTOR)
  57. ;   BIT 7: dISK DRIVE READY (1 = nO, 0 = yES)
  58. ;   BIT 6: rEAD/wRITE HEAD MOVING (1 = yES, 0= nO)
  59. ;   BIT 5: mOTOR ON (1 = yES, 0 = nO)
  60. ;   BIT 4: sWITCH OFF MOTOR (1 = yES, 0 = nO)
  61.  
  62. 0021dRIVE 1 STATUS (DISK AND STEP MOTOR)
  63.  
  64. 0022cURRENT TRACK FOR DRIVE 0
  65. 0023fLAG FOR 1541 (0), 1540 (NOT 0)
  66. ;nOT USED (TRACK FOR DRIVE 1)
  67.  
  68. 0024sCRATCH PAD OF gcr CONVERSION
  69. ;sTORAGE FOR bin -> gcr CONVERSIONS
  70.  
  71. 002EpOINTER FOR TEMPORARY STORAGEword
  72. 0030bUFFER POINTER FOR DISK CONTROLLERword
  73. ;pOINTER: aCTIVE BUFFER
  74.  
  75. 0032pOINTER: *** ACTIVE TRACK
  76. 0033pOINTER: *** ACTIVE SECTOR
  77. 0034pOINTER TO LAST CONVERTED BYTE
  78. 0035nOT USED (DECODE ERROR, gcr)
  79. 0036bYTE COUNTER FOR gcr/bin CONVERSION
  80. 0037nOT USED (BIT COUNTER)
  81. 0038cONSTANT 7, id MARK FOR START OF DATA BLOCK
  82. 0039cONSTANT 8, id MARK FOR START OF BLOCK HEADER
  83. 003ApARITY FOR DATA BUFFER
  84. 003BnOT DIRECTLY USED
  85. 003CnOT DIRECTLY USED
  86. 003DmOTOR FLAG
  87. ;dISK DRIVE NUMBER, ON 1541 ALWAYS 00
  88.  
  89. 003EaCTIVE DRIVE (ff, IF NOT ACTIVE)
  90. 003FbUFFER NUMBER FOR DISK CONTROLLER
  91. ;pREVIOUS WORK PLACE IN QUEUE (0 - 5)
  92.  
  93. 0040bYTE COUNTER FOR gcr CONVERSION
  94. 0041nUMBER OF NEXT WORK IN QUEUE (0 - 5)
  95. 0042dESTINATION TRACK (TO MOVE r/w HEAD TO)data
  96. 0043nUMBER OF SECTORS PER TRACK FOR FORMATTINGdata
  97. 0044tEMP. WORK AREA; sCRATCH PADdata
  98. 0045wORK CODE TEMP. STORAGE
  99. 0046nOT USED
  100. 0047dATA BLOCK id CHAR, DEFAULT 07.
  101. ;bY CHANGING THIS VALUE, A DATA BLOCK CAN BE WRITTEN
  102. ;WITH DIFFERENT id. tHE VALUE MUST BE LESS THAN 10.
  103.  
  104. 0048cOUNTER FOR HEAD MOVEMENT
  105. ;tIMER: r/w HEAD ACCELERATION
  106.  
  107. 0049sTACK POINTER TEMP. STORAGE [39]
  108. 004AsTEP COUNTER FOR HEAD TRANSPORT
  109. ;vALUES 0 - 127 MOVE THE HEAD OUTSIDE AND VALUES OVER
  110. ; 128 MOVE TOWARDS THE CENTRE.
  111.  
  112. 004B? (tEMP. STORAGE)data
  113. 004ClAST READ SECTORdata
  114. 004DnEXT SECTORdata
  115. 004E - 4FpOINTER TO BUFFER FOR gcr->bin CONVERSIONword
  116. 0050fLAG FOR gcr FORMAT (0=bin, 1=gcr)data
  117. 0051cURRENT TRACK NUMBER FOR FORMATTING [ff]data
  118. 0052 - 55sTORAGE FOR 4 bin BYTES FOR gcr CODINGdata
  119. 0056 - 5DsTORAGE FOR 5 gcr BYTESdata
  120. 005EnUMBER OF STEPS FOR HEAD MOTOR ACCELERATING/DECL. [04]
  121. 005FACCELERATING/DECL. FACTOR [04]
  122. 0062 - 63pOINTER TO ROUTINE FOR HEAD MOVEMENT [fa05]word
  123. 0064mINIMUM NUMBER OF STEPS [c8]
  124. 0065 - 66ui VECTOR [$eb22]word
  125. 0067fLAG: nmi
  126. 0068fLAG FOR DISK INITIALISATIONdata
  127. ;aUTOMATIC DISK INITIALISATION IF id mismatch OCCURRED (1 = NO, 0 = YES)
  128.  
  129. 0069sTEP SIZE FOR SECTOR DIVISION [0a]
  130. ;sECTOR NUMBER INTERLEAVE FOR seq FILES, DEFAULT 10 (0a)
  131.  
  132. 006AnUMBER OF READ ATTEMPTS [5]data
  133. 006B - 6CpOINTER: sTART OF jUMP TABLE FOR u COMMANDS [ffea]word
  134. 006D - 6EpOINTER: sTART OF BITMAP [0400]
  135.  
  136. 006F - 70pOINTER TO ADDRESS FOR m & b COMMANDSword
  137. 0071tEMP. WORK AREA
  138. 0072tEMP. WORK AREA [ff]
  139. 0073tEMP. WORK AREA
  140. 0074tEMP. WORK AREA
  141.  
  142. 0075 - 76iNDIRECT POINTER [0100]
  143.  
  144. 0077lISTENER ADDRESS (dEVICE NUMBER + $20) [28]
  145. 0078tALKER ADDRESS (dEVICE NUMBER + $40) [48]
  146. 0079fLAG: aCTIVE LISTENER
  147. 007AfLAG: aCTIVE TALKER
  148. 007B?
  149. 007CfLAG FOR atn FROM SERIAL BUS RECEIVING
  150. ;atn INTERRUPT
  151. 007DfLAG FOR atn ON SERIAL BUS ACTIVE
  152. 007ElAST HANDLED PROGRAM
  153. 007FdRIVE NUMBER (ON 1541 ALWAYS 00)
  154. 0080cURRENT tRACK NUMBER
  155. 0081cURRENT sECTOR NUMBER
  156. 0082cHANNEL NUMBER (lOGICAL INDEX)
  157. 0083sECONDARY ADDRESS
  158. 0084oRIGINAL sECONDARY ADDRESS [6f]
  159. 0085cURRENT dATA BYTE [3f]
  160.  
  161.  
  162. 0086 - 8AtEMP rESULTS
  163. 008B - 8EwORK STORAGE FOR DIVISION
  164. ;rESULT, mULTIPLY AND DIVIDE
  165. 008F - 93?
  166.  
  167. 0094 - 95cURRENT BUFFER POINTERword
  168. ;pOINTER: dIRECTORY BUFFER (0204)
  169.  
  170. 0096?
  171. 0099 - 9ApOINTER: nEXT BYTE IN BUFFER 0 [0300]
  172. 009B - 9CpOINTER: nEXT BYTE IN BUFFER 1 [0400]
  173. 009D - 9EpOINTER: nEXT BYTE IN BUFFER 2 [0500]
  174. 009F - A0pOINTER: nEXT BYTE IN BUFFER 3 [0600]
  175. 00A1 - A2pOINTER: nEXT BYTE IN BUFFER 4 [0700]
  176. 00A3 - A4pOINTER: nEXT BYTE IN COMMAND BUFFER [0200]
  177. 00A5 - A6pOINTER: nEXT BYTE IN ERROR MESSAGE BUFFER [02d6]
  178.  
  179. 00A7 - ADtABLE: nON-ACTIVE CHANNEL NUMBERS FOR EACH BUFFER
  180. 00AE - B4tABLE:
  181. 00B5 - BAtABLE: rECORD # LOW , BLOCK # LOW
  182. 00BB - C0tABLE: rECORD # HIGH, BLOCK # HIGH
  183. 00C1 - C6wRITE POINTER FOR rel FILE
  184. ;tABLE: NEXT RECORD NUMBERS
  185.  
  186. 00C7 - CCtABLE: rECORD LENGTH FOR rel FILE
  187. 00CD - D2tABLE: sIDE SECTORS
  188.  
  189. 00D3?
  190.  
  191. 00D4pOINTER IN RECORD FOR rel FILE
  192. 00D5sIDE SECTOR NUMBER
  193. 00D6pOINTER TO DATA BLOCK IN SIDE SECTOR
  194. 00D7pOINTER TO RECORD IN rel FILE
  195.  
  196. 00D8 - DCdIRECTORY SECTORS
  197. 00DD - E1iNDEX: dIRECTORY
  198. 00E2 - E6dEFAULT DISK DRIVE [00]
  199. 00E7 - EBfILE TYPE (WILD CARDS, @, CLOSED)
  200. 00EC - F1fILE TYPE (CHANNEL)
  201. 00F2 - F7cHANNEL STATUS
  202. 00F8fLAG FOR eoi
  203. 00F9cURRENT WORK (bUFFER NUMBER)
  204.  
  205. 00FA - FElAST USED TABLE
  206. 00FFfLAG: ff = DRIVE 0 NOT READY (nO DISK), 00 = READY
  207. 0100fLAG: ff = DRIVE 1 NOT READY (nO DISK), 00 = READY
  208. 0101fORMAT MARKER, DRIVE 0
  209. ;dos VERSION (FROM TRACK 18 SECTOR 0)
  210.  
  211. 0102fORMAT MARKER, DRIVE 1
  212. 0103nOT USED
  213. 0104 - FFsTACK AREA
  214.  
  215. 0146?
  216. 01BAbUFFER FOR gcr CODE
  217.  
  218. 0200 - 29 bUFFER FOR COMMAND STRING
  219. 022AcOMMAND CODE
  220.  
  221. ;022B - 2DaRRAY: lOGICAL INDEX (lindx)
  222. ;aRRAY OF STATUS BYTES FOR EACH CHANNEL (SECONDARY ADDRESS)
  223. ;pOSSIBLE VALUES:
  224. ;ff = INACTIVE
  225. ;81 = OPENED FOR WRITING
  226. ;41 = READ/WRITE
  227. ;01 = OPENED FOR READING
  228.  
  229. 022BlOGICAL INDEX, CHANNEL 0
  230. 022ClOGICAL INDEX, CHANNEL 1
  231. 022DlOGICAL INDEX, CHANNEL 2
  232.  
  233. 022E - 43lAST READ/WRITTEN BYTE FOR EACH CHANNEL
  234. 0244 - 49pOINTER: lAST CHAR ON CHANNEL.
  235. ;pOINTS TO THE LAST CHARACTER READ/WRITTEN IN BUFFER.
  236.  
  237. 024AtYPE OF ACTIVE FILE
  238. 024BsTRING LENGTH
  239. 024CtEMP. CHANNEL NUMBER (SECONDARY ADDRESS)
  240. 024DcURRENT WORK WITH DRIVE NUMBER
  241. 024EwORK AREA TO FIND THE BEST SECTOR
  242.  
  243. 024F - 50bUFFER ALLOCATED
  244. 0251fLAG: bam CHANGED, DRIVE 0
  245. 0252fLAG: bam CHANGED, DRIVE 1
  246. 0253fLAG FOR DIRECTORY ENTRY FOUND (ff = nOT FOUND, 00 = fOUND)data
  247. 0254fLAG FOR DIRECTORY OUTPUT
  248. 0255fLAG: wAITING FOR COMMAND
  249. 0256?
  250. 0257lAST USED BUFFER
  251. 0258rECORD LENGTH
  252. 0259tRACK OF SIDE SECTOR
  253. 025AsECTOR OF SIDE SECTOR
  254.  
  255. 025B - 5FlAST WORK (BUFFERS)
  256. 0260 - 65dIRECTORY SECTOR (BUFFERS)
  257. 0266 - 6BfILE'S INDEX IN DIRECTORY (BUFFERS)
  258.  
  259. 026CcOUNTER FOR led FLASH
  260. ;eRROR mESSAGE
  261.  
  262. 026DeRROR led
  263. 026EdRIVE FOR LAST PROGRAM
  264. 026FSECTOR FOR LAST PROGRAM
  265. 0270wRITE lindx
  266. 0271rEAD lindx
  267.  
  268. 0272 - 73nUMBER OF BLOCKS (TEMP)
  269. 0274lENGTH OF INPUT LINE
  270. 0275cHAR TO INTERPRET
  271. 0276iNDEX: eND OF FILENAME IN COMMAND BUFFER
  272. 0277?
  273. 0278nUMBER OF FILE NAMES
  274. 0279?
  275. 027A - 7FpOINTER TABLE: fILENAMES
  276. 0280 - 84tRACK OF A FILE
  277. 0285 - 89sECTOR OF A FILE
  278. 028AfLAG: WILD CARDS
  279. 028CnUMBER OF DRIVE(S ?) TO LOOK FOR
  280. 028DfLAG: lOOKING FOR DRIVE
  281. 028EDRIVE WITH LAST WRITE/OPEN ERROR, USED AS DEFAULT DRIVE
  282. 028FfLAG: fOUND IN DIRECTORY
  283. 0290dIRECTORY SECTOR
  284. 0291sECTOR FOR FIRST AVAILABLE FILE
  285. 0292iNDEX (IN DIRECTORY) FOR FIRST AVAILABLE FILE
  286. 0293fOR THE LAST DIRECTORY ENTRY 0
  287. 0294cURRENT BUFFER-INDEX
  288. 0295cOUNTER: fILES
  289. 0296fLAG: nAME MATCHING WILD CARDS
  290. 0297aCTIVE OPERATING MODE (r OR w)
  291. 0298fLAG: wORK RETURN
  292. 0299pOINTER: rE-READ ERROR
  293. 029AtOTAL TRACKS
  294.  
  295. 029B - 9CpOINTER: bam LAST UPDATE
  296. 029D - A0bam: IMAGE SECTOR (DRIVES 0 AND 1)
  297. 02A1 - B0bam IMAGE
  298. 02B1 - D4bUFFER FOR DIRECTORY OUTPUT
  299. 02D5 - F8bUFFER FOR ERROR MESSAGE
  300.  
  301. 02F9fLAG: dON'T WRITE bam
  302. ;tHIS FLAG IS RESET TO ZERO BEFORE AND AFTER EACH COMMAND
  303.  
  304. 02FA - FBnUMBER OF FREE BLOCKS, LOW BYTE FOR DRIVES 0 JA 1
  305. 02FC - FDnUMBER OF FREE BLOCKS, HI BYTE FOR DRIVES 0 JA 1
  306. 02FE - FFsTEPPER MOTOR SEQUENCE
  307.  
  308. 0300bUFFER 0
  309. 0400bUFFER 1
  310. 0500bUFFER 2
  311. 0600bUFFER 3
  312. 0621 - 22fORMATTING COUNTER
  313. 0700bUFFER 4
  314. 07FFeND OF ram
  315.  
  316.  
  317.  
  318.  
  319. lAYOUT OF THE i/o pORTS (via 6522)
  320. ==================================
  321.  
  322. via 1: 6522, PORT FOR SERIAL BUS
  323. -------------------------------
  324.  
  325. $1800pb, PORT b
  326. $1801pa, PORT a
  327. $1802cb, DATA DIRECTION PORT b
  328. $1803ca, DATA DIRECTION PORT a
  329.  
  330. $1805tIMER
  331.  
  332.     pb 7, cb2:atn in
  333.     pb 6,5:dEVICE ADDRESS PRESET SWITCHES
  334.     pb 4:atn ACKNOWLEDGE out
  335.     pb 3:clock out
  336.     pb 2:clock in
  337.     pb 1:data out
  338.     pb 0:data in
  339.  
  340.  
  341. via 2: 6522, PORT FOR MOTOR AND READ/WRITE HEAD CONTROL
  342. ------------------------------------------------------
  343.  
  344. $1c00pb, CONTROL PORT b
  345. $1c01pa, PORT a (DATA TO AND FROM READ/WRITE HEAD)
  346. $1c02cb, DATA DIRECTION PORT b
  347. $1c03ca, DATA DIRECTION PORT a
  348.  
  349.  
  350.     pb 7:sync in
  351.     pb 6,5:bIT RATE d1 AND d0
  352.     pb 4:wps - wRITE pROTECT sENSE (1 = oN)
  353.     pb 3:act - led ON DRIVE
  354.     pb 2:mtr - DRIVE MOTOR
  355.     pb 0,1:STEP MOTOR FOR HEAD MOVEMENT
  356.  
  357.     ca 1:bYTE READY
  358.     ca 2:soe - sET oVERFLOW eNABLE FOR 6502
  359.     ca 3:READ/WRITE
  360.  
  361.  
  362.  
  363.  
  364. dISK cONTROLLER rOUTINES
  365. ========================
  366.  
  367. tHIS TABLE CONTAINS THE ADDRESSES AND THE ASSIGNED BUFFERS:
  368.  
  369. jobtrack  sector buffer
  370. 00  06  07  0300-03ff
  371. 01  08  09  0400-04ff
  372. 02  0a  0b  0500-05ff
  373. 03  0c  0d  0600-06ff
  374. 04  0e  0f  0700-07ff
  375. 05  10  11  -NO RAM-
  376.  
  377. iF A DISK CONTROLLER ROUTINE IS TO BE PERFORMED IN THE INTERRUPT, ONE
  378. WRITES THE JOB CODE AND THE TRACK AND SECTOR NUMBERS OF THE BLOCK TO BE
  379. PROCESSED (IF NECESSARY) IN THE APPROPRIATE MEMORY LOCATIONS. nOW THE
  380. JOB CODE CAN BE PASSED. tHIS JOB CODE HAS A VALUE GREATER THAN 127 (THE
  381. 7TH BIT IS SET). iN ORDER TO WAIT UNTIL THE JOB IS FINISHED, ONLY THE
  382. SEVENTH BIT NEED BE TESTED. iF THIS BIT IS CLEARED, THE JOB IS COMPLETED.
  383. tHE DISK CONTROLLER CAN PERFORM THE FOLLOWING JOBS:
  384.  
  385. job   namedescription
  386. 80    readrEAD SECTOR
  387. 90    writewRITE SECTOR
  388. a0    verifyvERIFY SECTOR
  389. b0    seekfIND SECTOR
  390. c0    bumpbUMP, fIND TRACK 1
  391. d0    jumpeXECUTE PROGRAM IN BUFFER
  392. e0    executeeXECUTE PROGRAM, FIRST SWITCH DRIVE ON AND FIND TRACK
  393.  
  394. tHE VERIFY JOB (a0) IS PERFORMED AUTOMATICALLY AFTER WRITING A BLCOK.
  395.  
  396. iF THE JOB ENDS IN AN ERROR THEN THE MEMORY LOCATION WITH JOB COMMAND
  397. CODE IS REPLACED WITH AND ERROR CODE. hERE IS A LIST OF THE ERROR NUMBERS:
  398.  
  399. codemeaningdos error message
  400. 01eVERYTHING ok00, ok
  401. 02hEADER BLOCK NOT FOUND20, read error
  402. 03sync NOT FOUND21, read error
  403. 04dATA BLOCK NOT FOUND22, read error
  404. 05cHECKSUM ERROR IN DATA BLOCK23, read error
  405. 07vERIFY ERROR25, write error
  406. 08dISK WRITE PROTECTED26, write protect on
  407. 09cHECKSUM ERROR IN HEADER BLOCK27, read error
  408. 0biD MISMATCH29, disk id mismatch
  409. 0fdISK NOT INSERTED74, drive not ready
  410.  
  411.   eRROR CODES 06 AND 0a DO NOT OCCUR ON THE 1541.
  412.  
  413.  
  414.