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

  1.  
  2. ;cOMMODORE 1541 / oc-118 dISK dRIVE rom mAP
  3. ;v1.118 jAN 1995
  4.  
  5.  
  6. ; nOTE: tHIS mEMORY MAP IS COLLECTED FROM THE 1541 DIASSEMBLY
  7. ;   WHICH WAS MADE BY pETER wEIGHILL.
  8. ;
  9.  
  10. ; dATA TYPES IN HEADERS (FOR REASSEMBLER):
  11. ;
  12. ;datamISC DATA
  13. ;textsTRING TERMINATED WITH 00
  14. ;wordvECTORS IN lo/hi BYTE PAIRS
  15. ;chipi/o aREA
  16. ;emptyrom CONTAINING aa'S OR ff'S
  17. ;
  18.  
  19.  
  20. C000uNUSEDempty
  21.  
  22. ;C100fILE mANAGER rOUTINES
  23.  
  24. C100tURN led ON FOR CURRENT DRIVE
  25. C118tURN led ON
  26. C123cLEAR ERROR FLAGS
  27. C12CpREPARE FOR led FLASH AFTER ERROR
  28. C146iNTERPRET COMMAND FROM COMPUTER
  29. C194pREPARE ERROR MSG AFTER EXECUTING COMMAND
  30. C1BDeRASE INPUT BUFFER
  31. C1C8oUTPUT ERROR MSG (TRACK AND SECTOR 0)
  32. C1D1cHECK INPUT LINE
  33. C1E5cHECK ':' ON INPUT LINE
  34. C1EEcHECK INPUT LINE
  35. C268sEARCH CHARACTER IN INPUT BUFFER
  36. C2B3cHECK LINE LENGTH
  37. C2DCcLEAR FLAGS FOR COMMAND INPUT
  38. C312pRESERVE DRIVE NUMBER
  39. C33CsEARCH FOR DRIVE NUMBER
  40. C368gET DRIVE NUMBER
  41. C38FrEVERSE DRIVE NUMBER
  42. C398cHECK GIVEN FILE TYPE
  43. C3BDcHECK GIVEN DRIVE NUMBER
  44. C3CAvERIFY DRIVE NUMBER
  45. C440fLAGS FOR DRIVE CHECKdata
  46. C44FsEARCH FOR FILE IN DIRECTORY
  47. C48B?
  48. C4D8?
  49. C5AC?
  50. C63DtEST AND INITALISE DRIVE
  51. C66EnAME OF FILE IN DIRECTORY BUFFER
  52. C688cOPY FILENAME TO WORK BUFFER
  53. C6A6sEARCH FOR END OF NAME IN COMMAND
  54. C6CE?
  55. C6DE?
  56. C7ACcLEAR dIRECTORY oUTPUT bUFFER
  57. C7B7cREATE HEADER WITH DISK NAME
  58. C806pRINT 'BLOCKS FREE.'
  59. C817'bLOCKS FREE.'data
  60. C823pERFORM [s] - sCRATCH COMMAND
  61. C87DeRASE FILE
  62. C8B6eRASE DIR ENTRY
  63. C8C1pERFORM [d] - bACKUP COMMAND (uNUSED)
  64. C8C6fORMAT DISK
  65. C8F0pERFORM [c] - cOPY COMMAND
  66. C9A1?
  67. C9A7?
  68. C9D5?
  69. C9FA?
  70. CA35?
  71. CA88pERFORM [r] - rENAME COMMAND
  72. CACCcHECK IF FILE PRESENT
  73. CAF8pERFORM [m] - mEMORY COMMAND
  74. CB20m-r MEMORY READ
  75. CB50m-w MEMORY WRITE
  76. CB5CpERFORM [u] - uSER COMMAND
  77. CB84oPEN DIRECT ACCESS CHANNEL, NUMBER
  78. CC1BpERFORM [b] - bLOCK/bUFFER COMMAND
  79. CC5DbLOCK COMMANDS "afrwep"data
  80. CC63bLOCK COMMAND VECTORSword
  81. CC6FgET PARAMETERS FORM BLOCK COMMANDS
  82. CCF2dECIMAL VALUES  1, 10, 100data
  83. CCF5b-f BLOCK FREE
  84. CCFE?
  85. CD03b-a BLOCK ALLOCATE
  86. CD36rEAD BLOCK TO BUFFER
  87. CD3CgET BYTE FROM BUFFER
  88. CD42rEAD BLOCK FROM DISK
  89. CD56b-r BLOCK READ
  90. CD5Fu1, bLOCK READ WITHOUT CHANGING BUFFER POINTER
  91. CD73b-w BLOCK WRITE
  92. CD97u2, bLOCK WRITE WITHOUT CHANGING BUFFER POINTER
  93. CDA3b-e BLOCK EXECUTE
  94. CDBDb-p BLOCK POINTER
  95. CDD2oPEN CHANNEL
  96. CDF2cHECK BUFFER NUMBER AND OPEN CHANNEL
  97. CE0EsET POINTER FOR rel FILE
  98. CE2C?
  99. CE6EdIVIDE BY 254
  100. CE71dIVIDE BY 120
  101. CED9eRASE WORK STORAGE
  102. CEE2lEFT SHIFT 3-BYTE REGISTER TWICE
  103. CEE5lEFT SHIFT 3-BYTE REGISTER ONCE
  104. CEEDaDD 3-BYTE REGISTERS
  105. CEFA?
  106. CF09?
  107. CF1E?
  108. CF8CcHANGE BUFFER
  109. CF9BwRITE DATA IN BUFFER
  110. CFF1wRITE DATA BYTE IN BUFFER
  111. D005pERFORM [i] - iNITALISE COMMAND
  112. D00ErEAD bam FROM DISK
  113. D042lOAD bam
  114. D075cALCULATE BLOCKS FREE
  115. D09B?
  116. D0AF?
  117. D0C3rEAD BLOCK
  118. D0C7wRITE BLOCK
  119. D0EBoPEN CHANNEL FOR READING
  120. D107oPEN CHANNEL FOR WRITING
  121. D125cHECK FOR FILE TYPE rel
  122. D12FgET BUFFER AND CHANNEL NUMBERS
  123. D137gET A BYTE FROM BUFFER
  124. D156gET BYTE AND READ NEXT BLOCK
  125. D19DwRITE BYTE IN BUFFER AND BLOCK
  126. D1C6iNCREMENT BUFFER POINTER
  127. D1D3gET DRIVE NUMBER
  128. D1DFfIND WRITE CHANNEL AND BUFFER
  129. D1E2fIND READ CHANNEL AND BUFFER
  130. D227cLOSE CHANNEL
  131. D25AfREE BUFFER
  132. D28EfIND BUFFER
  133. D2BA?
  134. D2DA?
  135. D307cLOSE ALL CHANNELS
  136. D313cLOSE ALL CHANNELS OF OTHER DRIVES
  137. D339?
  138. D37FfIND CHANNEL AND ALLOCATE
  139. D39BgET BYTE FOR OUTPUT
  140. D44DrEAD NEXT BLOCK
  141. D460rEAD BLOCK
  142. D464wRITE BLOCK
  143. D475aLLOCATE BUFFER AND READ BLOCK
  144. D486aLLOCATE NEW BLOCK
  145. D48DwRITE DIR BLOCK
  146. D4C8sET BUFFER POINTER
  147. D4DAcLOSE INTERNAL CHANNEL
  148. D4E8sET BUFFER POINTER
  149. D4F6gET BYTE FROM BUFFER
  150. D506cHECK TRACK AND SECTOR NUMBERS
  151. D552gET TRACK AND SECTOR NUMBERS FOR CURRENT JOB
  152. D55FcHECK FOR VAILD TRACK AND SECTOR NUMBERS
  153. D572dos MISMATCH ERROR
  154. D586rEAD BLOCK
  155. D58AwRITE BLOCK
  156. D599vERIFY EXECUTION
  157. D5C6aDDITIONAL ATTEMPTS FOR READ ERRORS
  158. D676mOVE HEAD BY HALF A TRACK
  159. D693mOVE HEAD ONE TRACK IN OR OUT
  160. D6A6aTTEMPT COMMAND EXECUTION MULTIPLE TIMES
  161. D6D0tRANSMIT PARAM TO DISK CONTROLLER
  162. D6E4eNTER FILE IN DIR
  163. D7B4open COMMAND, SECONDARY ADDR 15
  164. D7C7-cHECK '*' lAST FILE
  165. D7F3-cHECK '$' dIRECTORY
  166. D815-cHECK '#' cHANNEL
  167. D8F5oPEN A FILE WITH OVERWRITING (@)
  168. D940?
  169. D9A0oPEN FILE FOR READING
  170. D9E3oPEN FILE FOR WRITING
  171. DA09cHECK FILE TYPE AND CONTROL MODE
  172. DA2ApREPARATION FOR APPEND
  173. DA55oPEN DIRECTORY
  174. DAC0cLOSE ROUTINE
  175. DB02cLOSE FILE
  176. DB62wRITE LAST BLOCK
  177. DBA5dIRECTORY ENTRY
  178. DC46rEAD BLOCK, ALLOCATE BUFFER
  179. DCB6rESET POINTER
  180. DCDAcONSTRUCT A NEW BLOCK
  181. DD8DwRITE BYTE IN SIDE-SECTOR BLOCK
  182. DD95mANIPULATE FLAGS
  183. DDA6?
  184. DDABvERIFY COMMAND CODE FOR WRITING
  185. DDB7?
  186. DDF1wRITE A BLOCK OF A rel FILE
  187. DDFDwRITE BYTES FOR FOLLOWING TRACK
  188. DE0CgET FOLLOWING TRACK AND SECTOR NUMBERS
  189. DE19fOLLOWING TRACK FOR LAST BLOCK
  190. DE2BBUFFER POINTER TO ZERO
  191. DE3BgET TRACK AND SECTOR
  192. DE50wRITE (?)
  193. DE57r
  194. DE5Ew
  195. DE65r
  196. DE6Cw
  197. DE73r
  198. DE95gET FOLLOWING TRACK AND SECTOR FROM BUFFER
  199. DEA5cOPY BUFFER CONTENTS
  200. DEC1eRASE BUFFER y
  201. DED2gET SIDE-SECTOR NUMBER
  202. DEDCsET BUFFER POINTER TO SIDE-SECTOR
  203. DEE9bUFFER POINTER FOR SIDE-SECTOR
  204. DEF8gET SIDE SECTOR AND BUFFER POINTER
  205. DF1BrEAD SIDE-SECTOR
  206. DF21wRITE SIDE-SECTOR
  207. DF45sET BUFFER POINTER IN SIDE-SECTOR
  208. DF4CcALCULATE NUMBER OF BLOCKS IN A rel FILE
  209. DF66vERIFY SIDE-SECTOR IN BUFFER
  210. DF93gET BUFFER NUMBER
  211. DF9E?
  212. DFB7?
  213. DFC2?
  214. DFD0gET NEXT RECORD IIN rel FILE
  215. E03CwRITE BLOCK AND READ NEXT BLOCK
  216. E07CwRITE A BYTE IN A RECORD
  217. E0ABwRITE BYTE IN rel FILE
  218. E0F3fILL RECORD WITH 0S
  219. E105wRITE BUFFER NUMBER IN TABLE
  220. E120gET BYTE FROM rel FILE
  221. E1CBgET LAST SIDE-SECTOR
  222. E207pERFORM [p] - pOSITION COMMAND
  223. E2E2dIVIDE DATA BLOCKS INTO RECORDS
  224. E304sET POINTER TO NEXT RECORD
  225. E31CeXPAND SIDE-SECTOR
  226. E44EwRITE SIDE-SECTOR AND ALLOCATE NEW
  227.  
  228. E4FCtABLE OF ERROR MESSAGESdata
  229. ;(WITH START AND END LETTERS +$80)  iF VALUE and $7f LESS
  230. ; THAN $10 THEN LOOK UP TEXT IN POINTER TABLE.
  231. ;
  232. ;fORMAT: eRROR NUMBERS, dESCRIPTION
  233. ;
  234. ;E4FC00,oK
  235. ;E50020,21,22,23,24,27, rEAD ERROR
  236. ;E50B52,fILE TOO LARGE
  237. ;E51750,rECORD NOT PRESENT
  238. ;E52251,oVERFLOW IN RECORD
  239. ;E52F25,28,wRITE ERROR
  240. ;E53326,wRITE PROTECT ON
  241. ;E54029,dISK ID MISMATCH
  242. ;E54630,31,32,33,34, sYNTAX ERROR
  243. ;E55260,wRITE FILE OPEN
  244. ;E55663,fILE EXISTS
  245. ;E55F64,fILE TYPE MISMATCH
  246. ;E56765,nO BLOCK
  247. ;E57066,67,iLLEGAL TRACK OR SECTOR
  248. ;E58961,fILE NOT OPEN
  249. ;E58D39,62,fILE NOT FOUND
  250. ;E59201,fILES SCRATCHED
  251. ;E59F70,nO CHANNEL
  252. ;E5AA71,dIR ERROR
  253. ;E5AF72,dISK FULL
  254. ;E5B673,cBM DOS V2.6 1541
  255. ;E5C874,dRIVE NOT READY
  256. ;
  257.  
  258. E5D5iNDEXED WORDSdata
  259. ;fORMAT: iNDEX NUMBER  dESCRIPTION
  260. ;
  261. ;E5D509 eRROR
  262. ;E5DB0a wRITE
  263. ;E5E1   03 fILE
  264. ;E5E6   04 oPEN
  265. ;E5EB   05 mISMATCH
  266. ;E5F4   06 nOT
  267. ;E5F8   07 fOUND
  268. ;E5FE   08 dISK
  269. ;E603   0b rECORD
  270. ;
  271.  
  272. E60ApREPARE ERROR NUMBER AND MESSAGE
  273. E645pRINT ERROR MESSAGE INTO ERROR BUFFER
  274. E680talk
  275. E688listen
  276. E69BcONVERT bin TO 2-aSCII (ERROR MESSAGE BUFFER)
  277. E6ABcONVERT bcd TO 2-aSCII (ERROR MESSAGE BUFFER)
  278. E6BCwRITE ok IN BUFFER
  279. E6C1pRINT ERROR ON TRACK 00,00 TO ERROR BUFFER
  280. E6C7pRINT ERROR ON CURRENT TRACK TO ERROR BUFFER
  281. E706wRITE ERROR MESSAGE STRING TO BUFFER
  282. E754gET CHARACTER AND IN BUFFER
  283. E767gET A CHAR OF THE ERROR MESSAGE
  284. E775iNCREMENT POINTER
  285. E77FdUMMY SUBROUTINE
  286. E780cHECK FOR AUTO START - REMOVED
  287. E7A3pERFORM [&] - usr FILE EXECUTE COMMAND
  288. E84BgENERATE CHECKSUM
  289. E853irq ROUTINE FOR SERIAL BUS
  290. E85BsERVICE THE SERIAL BUS
  291. E909sEND DATA
  292. E99Cdata out LO
  293. E9A5data out HI
  294. E9AEclock out HI
  295. E9B7clock out LO
  296. E9C0rEAD ieee PORT
  297. E9C9gET DATA BYTE FROM BUS
  298. E9F2aCCEPT BYTE WITH eoi
  299. EA2EaCCEPT DATA FROM SERIAL BUS
  300. EA59tEST FOR atn
  301. EA6EfLASH led FOR HARDWARE DEFECTS, SELF-TEST
  302. EAA0pOWER-UP reset ROUTINE
  303. EBFFwAIT LOOP
  304. EC9ElOAD DIR
  305. ED23?
  306. ED59tRANSMIT DIR LINE
  307. ED67gET BYTE FROM BUFFER
  308. ED84pERFORM [v] - vALIDATE COMMAND
  309. EDB3?
  310. EDE5aLLOCATE FILE BLOCKS IN bam
  311. EE0DpERFORM [n] - nEW (fORMAT) COMMAND
  312. EEB7cREATE bam
  313. EEF4wRITE bam IF NEEDED
  314. EF3AsET BUFFER POINTER FOR bam
  315. EF4DgET NUMBER OF FREE BLOCKS FOR DIR
  316. EF5CmARK BLOCK AS FREE
  317. EF88sET FLAG FOR bam CHANGED
  318. EF90mARK BLOCK AS ALLOCATED
  319. EFCFeRASE BIT FOR SECTOR IN bam ENTRY
  320. EFE9pOWERS OF 2data
  321. EFF1wRITE bam AFTER CHANGE
  322. F005eRASE bam BUFFER
  323. F011?
  324. F05B?
  325. F0D1cREAR bam?
  326. F0DF?
  327. F10FgET BUFFER NUMBER FOR bam
  328. F119bUFFER NUMBER FOR bam
  329. F11EfIND AND ALLOCATE FREE BLOCK
  330. F1A9fIND FREE SECTOR AND ALLOCATE
  331. F1FAfIND FREE SECTORS IN CURRENT TRACK
  332. F220vERIFY NUMBER OF FREE BLOCKS IN bam
  333. F24BeSTABLISH NUMBER OF SECTORS PER TRACK
  334. F258dUMMY SUBROUTINE
  335.  
  336. ;
  337. ;F259dISK cONTROLLER rOUTINES
  338. ;
  339.  
  340. F259iNITIALISE DISK CONTROLLER
  341. F2B0irq ROUTINE FOR DISK CONTROLLER
  342. F2F9hEAD TRANSPORT
  343. F36EeXECUTE PROGRAM IN BUFFER
  344. F37CbUMP, FIND TRACK 1 (HEAD AT STOP)
  345. F393iNITIALISE POINTER IN BUFFER
  346. F3B1rEAD BLOCK HEADER, VERIFY id
  347. F410pRESERVE BLOCK HEADER
  348. F418wORK rETURN VALUE 01 (ok) INTO QUEUE
  349. F41BwORK rETURN VALUE 0b (read error) INTO QUEUE
  350. F41EwORK rETURN VALUE 09 (read error) INTO QUEUE
  351. F423jOB OPTIMISATION
  352. F4CAtEST COMMAND CODE FURTHER
  353. F4D1rEAD SECTOR
  354. F50AfIND START OF DATA BLOCK
  355. F510rEAD BLOCK HEADER
  356. F556wAIT FOR sync
  357. F56EtEST COMMAND CODE FURTHER
  358. F575wRITE DATA BLOCK TO DISK
  359. F5E9cALCULATE PARITY FOR DATA BUFFER
  360. F5F2cONVERT BUFFER OF gcr DATA INTO BINARY
  361. F691tEST COMMAND CODE FURTHER
  362. F698cOMPARE WRITTEN DATA WITH DATA ON DISK
  363. F6CAcOMMAND CODE FOR FIND SECTOR
  364. F6D0cONVERT 4 BINARY BYTES TO 5 gcr BYTES
  365. F77Fgcr (5-BIT) NYBBLE TABLEdata
  366. F78FcONVERT 260 BYTES TO 325 BYTES GROUP CODE
  367. F7E6cONVERT 5 gcr BYTES TO 4 BINARY BYTES
  368. F8A0cONVERSION TABLE gcr TO BINARY - HIGH NYBBLE
  369. ;$ff MEANS INVALID
  370. F8C0cONVERSION TABLE gcr TO BINARY - LOW NYBBLE
  371. ;$ff MEANS INVALID
  372. F8E0dECODE 69 gcr BYTES
  373. F934cONVERT BLOCK HEADER TO gcr CODE
  374. F969eRROR ENTRY DISK CONTROLLER
  375. F97EtURN DRIVE MOTOR ON
  376. F98FtURN DRIVE MOTOR OFF
  377. F99CjOB LOOP DISK CONTROLLER
  378. F9CB?
  379. F9D9?
  380. FA05mOVE HEAD TO NEXT TRACK
  381. FA1CcALCULATE NUMBER OF HEAD STEPS
  382. FA3BmOVE STEPPER MOTOR SHORT DISTANCE
  383. FA4ElOAD HEAD
  384. FA63?
  385. FA7BpREPARE FAST HEAD MOVEMENT
  386. FA97fAST HEAD MOVEMENT
  387. FAA5pREPARE SLOW HEAD MOVEMENT
  388. FAC7fORMATTING
  389. FDA3wRITE sync 10240 TIMES, ERASE TRACK
  390. FDC3rEAD/WRITE ($621/$622) TIMES
  391. FDD3aTTEMPT COUNTER FOR FORMATTING
  392. FDE5?
  393. FDF5cOPY DATA FROM OVERFLOW BUFFER
  394. FE00sWITCH TO READING
  395. FE0EwRITE $55 10240 TIMES
  396. FE30cONVERT HEADER IN BUFFER 0 TO gcr CODE
  397. FE67iNTERRUPT ROUTINE
  398.  
  399. ;FE85cONSTANDS FOR DISK FORMAT
  400.  
  401. FE85dIRECTORY TRACKdata
  402. FE86sTART OF BAMdata
  403. FE87lENGTH OF BAM PER TRACKdata
  404. FE88eND OF BAMdata
  405. FE89tABLE OF COMMAND WORDSdata
  406. ;"vidmbup&crsn"
  407. ;vALIDATE, iNITIALISE, d(bACKUP UNUSED),
  408. ;mEMORY, bLOCK, uSER,
  409. ;pOSITION, &AND;usr EXECUTE, cOPY,
  410. ;rENAME, sCRATCH, nEW (fORMAT).
  411.  
  412. FE95lOW  BYTE OF COMMAND ADDRESSESdata
  413. FEA1hIGH BYTE OF COMMAND ADDRESSESdata
  414. FEADbYTES FOR SYNTAX CHECKdata
  415. FEB2fILE CONTROL METHODS "rwam"data
  416. FEB6fILE TYPES "dspul"data
  417. FEBBnAMES OF FILE TYPESdata
  418. FEBB1ST LETTER "dspur"data
  419. FEC02ND LETTER "eerse"data
  420. FEC53RD LETTER "lqgrl"data
  421. FECAeRROR led BIT VALUEdata
  422. FECDmASKS FOR BIT COMMANDdata
  423. FED1nUMBER OF SECTORS PER TRACKdata
  424. FED5cONSTANDS FOR DISK FORMATdata
  425. FED5'a' MARKER FOR 1541 FORMATdata
  426. FED64 TRACK RANGESdata
  427. FED7nUMBER OF TRACKSdata
  428. FED8tRACKS ON WHICH SECTOR NUMBERS CHANGEdata
  429. FEDBcONTROL BYTES FOR HEAD POSTIONdata
  430. FEE0bUFFER ADDRESS HIGH BYTESdata
  431. FEE6rom CHECKSUMdata
  432.  
  433. FEE7fROM ui COMMAND $eb22, TO RESET
  434. ;wITHOUT ram/rom TEST
  435. FEEApATCH FOR DIAGNOSTIC ROUTINE FROM $ea7a
  436. FEF3dELAY LOOP FOR SERIAL BUS IN 1541 MODE, FROM $e97d
  437. FEFBpATCH FOR DATA OUTPUT TO SERIAL BUS, FROM $e980
  438. FF01u9 VECTOR, SWITCH 1540/1541
  439. FF10pATCH FOR RESET ROUTINE, FROM $eaa4
  440. FF20pATCH FOR LISTEN TO SERIAL BUS, FROM $e9dc
  441. FF2FuNUSEDempty
  442.  
  443. FFE6fORMAT[c8c6]word
  444. FFE8tURN MOTOR OFF [f98f]word
  445.  
  446. FFEAuser VECTORS
  447. FFEAua, u1[cd5f]word
  448. FFECub, u2[cd97]word
  449. FFEEuc, u3[0500]word
  450. FFF0ud, u4[0503]word
  451. FFF2ue, u5[0506]word
  452. FFF4uf, u6[0509]word
  453. FFF6ug, u7[050c]word
  454. FFF8uh, u8[050f]word
  455. FFFAui, u9[ff01]word
  456.  
  457. FFFChARDWARE VECTORS
  458. FFFCreset [eaa0]word
  459. FFFEirq   [fe67]word
  460.