home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / C1541ROM.DOC-V1 < prev    next >
Encoding:
Text File  |  2019-04-13  |  11.6 KB  |  431 lines

  1.  
  2. ;    Commodore 1541 / OC-118 Disk Drive ROM Map
  3. ;    V1.0    1 Sep 1994
  4.  
  5.  
  6. ; Note: This Memory map is collected from the 1541 diassembly
  7. ;   which was made by Peter Weighill. I cannot guarantee accuracy
  8. ;   of all details.
  9. ;
  10.  
  11. ; Data types in headers (for reassembler):
  12. ;
  13. ;    DATA        Misc data
  14. ;    TEXT        String terminated with 00
  15. ;    WORD        Vectors in LO/HI byte pairs
  16. ;    CHIP        I/O Area
  17. ;    EMPTY        ROM containing AA's or FF's
  18. ;
  19.  
  20.  
  21. c000    Unused                    EMPTY
  22.  
  23. ;c100    File Manager Routines
  24.  
  25. c100    Turn LED on
  26. c118    Turn LED on
  27. c123    Clear error flags
  28. c12c    Prepare for LED flash after error
  29. c146    Interpret command from computer
  30. c194    Prepare error msg after executing command
  31. c1bd    Erase input buffer
  32. c1c8    Output error msg (track and sector 0)
  33. c1d1    Check input line
  34. c1e5    Check input line
  35. c1ee    Check input line
  36. c268    Search character in input buffer
  37. c2b3    Check line length ptr in command
  38. c2dc    Clear flags for command input
  39. c312    Preserve drive number
  40. c33c    Search for drive number
  41. c368    Get drive number
  42. c38f    Reverse drive number
  43. c398    ?
  44. c3bd    Check drive number
  45. c3ca    Verify drive number
  46. c440    Flags for drive check            DATA
  47. c44f    Search for file in directory
  48. c63d    Test and initalise drive
  49. c66e    Name of file in directory buffer
  50. c688    ?
  51. c6a6    Search for end of name in command
  52. c6ce    ?
  53. c6de    ?
  54. c7ac    Clear Directory Output Buffer
  55. c7b7    Create header with disk nmae
  56. c806    Print 'blocks free.'
  57. c817    'Blocks free.'                DATA
  58. c823    Perform [S] - Scratch command
  59. c87d    Erase file
  60. c8b6    Erase dir entry
  61. c8c1    Perform [D] - Backup command (Unused)
  62. c8c6    Format disk
  63. c8f0    Perform [C] - Copy command
  64. ca88    Perform [R] - Rename command
  65. cacc    Check if file present
  66. caf8    Perform [M] - Memory command
  67. cb20    M-R memory read
  68. cb50    M-W momory write
  69. cb5c    Perform [U] - User command
  70. cb84    Open direct access channel, number
  71. cc1b    Perform [B] - Block/Buffer command
  72. cc5d    Block commands "AFRWEP"            DATA
  73. cc63    Block command vectors            WORD
  74. cc6f    Get parameters form block commands
  75. ccf2    Decimal values  1, 10, 100        DATA
  76. ccf5    B-F block free
  77. ccfe    ?
  78. cd03    B-A block allocate
  79. cd36    ?
  80. cd3c    Get byte from buffer
  81. cd42    Read block from disk
  82. cd56    B-R block read
  83. cd5f    U1, Block read without changing buffer pointer
  84. cd73    B-W block write
  85. cd97    U2, Block read without changing buffer pointer
  86. cda3    B-E block execute
  87. cdbd    B-P block pointer
  88. cdd2    Open channel
  89. cdf2    Check buffer number and open channel
  90. ce0e    Set pointer for REL file
  91. cd2c    ?
  92. cd6e    Divide by 254
  93. ce71    Divide by 120
  94. cdd9    Erase work storage
  95. dee2    Left shift 3-byte register twice
  96. cee5    Left shift 3-byte register once
  97. ceed    ?
  98. cefa    ?
  99. cf09    ?
  100. cf1e    ?
  101. cf8c    Change buffer
  102. cf9b    Write data in buffer
  103. cff1    Write data byte in buffer
  104. d005    Perform [I] - Initalise command
  105. d00e    ?
  106. d042    Load BAM
  107. d075    Calculate blocks free
  108. d09b    ?
  109. d0c3    Read block
  110. d0c7    Write block
  111. d0eb    Open channel for reading
  112. d107    Open channel for writing
  113. d125    Check for file type REL
  114. d12f    Get buffer and channel numbers
  115. d137    Get a byte from buffer
  116. d156    Get byte and read next block
  117. d19d    Write byte in buffer and block
  118. d1c6    Increment buffer pointer
  119. d1d3    Get drive number
  120. d1df    Find write channel and buffer
  121. d1e2    Find read channel and buffer
  122. d227    Close channel
  123. d25a    Free buffer
  124. d28e    Find buffer
  125. d307    Close all channels
  126. d313    Close all channels of other drives
  127. d339    ?
  128. d37f    Find channel and allocate
  129. d39b    Get byte for output
  130. d44d    Read next block
  131. d460    Read block
  132. d464    Write block
  133. d475    Allocate buffer and read block
  134. d486    Allocate new block
  135. d48d    Write dir block
  136. d4c8    Set buffer pointer
  137. d4da    Close internal channel
  138. d4e8    Set buffer pointer
  139. d4f6    Get byte from buffer
  140. d506    Check track and sector numbers
  141. d552    Get track and sector numbers for current job
  142. d55f    Check for vaild track and sector numbers
  143. d572    DOS mismatch error
  144. d586    Read block
  145. d58a    Write block
  146. d599    Verify execution
  147. d5c6    Additional attempts for read errors
  148. d676    Move head by half a track
  149. d693    Move head one track in or out
  150. d6a6    Attempt command execution multiple times
  151. d6d0    Transmit param to disk controller
  152. d6e4    Enter file in dir
  153. d7b4    OPEN command, secondary addr not 15
  154. d8f5    Open a file with overwriting
  155. d9a0    Open file for reading
  156. d9e3    Open file for writing
  157. da09    Check file type and control mode
  158. da2a    Preparation for append
  159. da55    Open directory
  160. dac0    Close routine
  161. db02    Close file
  162. db62    Write last block
  163. dba5    Directory entry
  164. dc46    Read block, allocate buffer
  165. dcb6    Reset pointer
  166. dcda    Construct a new block
  167. dd8d    Write byte in side-sector block
  168. dd95    Manipulate flags
  169. ddab    Verify command code for writing
  170. ddb7    ?
  171. ddf1    Write a block of a REL file
  172. ddfd    Write bytes for following track
  173. de0c    Get following track and sector numbers
  174. de19    Following track for last block
  175. de2b    buffer pointer to zero
  176. de3b    Get track and sector
  177. de50    Write (?)
  178. de57    R
  179. de5e    W
  180. de65    R
  181. de6c    W
  182. de73    R
  183. de95    Get following track and sector from buffer
  184. dea5    Copy buffer contents
  185. dec1    Erase buffer Y
  186. ded2    Get side-sector number
  187. dedc    Set buffer pointer to side-sector
  188. dee9    Buffer pointer for side-sector
  189. def8    Get side sector and buffer pointer
  190. df1b    Read side-sector
  191. df21    Write side-sector
  192. df45    Set buffer pointer in side-sector
  193. df4c    Calculate number of blocks in a REL file
  194. df66    Verify side-sector in buffer
  195. df93    Get buffer number
  196. dfd0    Get next record iin REL file
  197. e03c    Write block and read next block
  198. e07c    Write a byte in a record
  199. e0ab    Write byte in REL file
  200. e0f3    Fill record with 0s
  201. e105    Write buffer number in table
  202. e120    Get byte from REL file
  203. e1cb    Get last side-sector
  204. e207    Perform [P] - Position command
  205. e2e2    Divide data blocks into records
  206. e304    Set pointer to next record
  207. e31c    Expand side-sector
  208. e44e    Write side-sector and allocate new
  209. e4fc    Table of error messages            DATA
  210. ;    Format: error numbers
  211. ;            description
  212. ;    (with start and end letters +$80)  If value AND $7F less
  213. ;     than $10 then look up text in pointer table.
  214. ;
  215.  
  216. ;e4fc    Ok
  217. ;e500    Read error
  218. ;e50b    File too large
  219. ;e517    Record not present
  220. ;e522    Overflow in record
  221. ;e52f    Write error
  222. ;e533    Write protect on
  223. ;d540    Disk id mismatch
  224. ;e546    Syntax error
  225. ;e552    Write file open
  226. ;e556    File exists
  227. ;e55f    File type mismatch
  228. ;e567    No block
  229. ;e570    Illegal track or sector
  230. ;e589    File not open
  231. ;e58d    File not found
  232. ;e592    Files scratched
  233. ;e59f    No channel
  234. ;e5aa    Dir error
  235. ;e5af    Disk full
  236. ;e5b6    Cbm dos v2.6 1541
  237. ;e5c8    Drive not ready
  238.  
  239. e5d5    Indexed words                DATA
  240. ;    Format: index number
  241. ;            description
  242.  
  243. e60a    Prepare error number and message
  244. e645    Print error message into error buffer
  245. e680    TALK
  246. e688    LISTEN
  247. e69b    Convert BIN to 2-Ascii (error message buffer)
  248. e6ab    Convert BCD to 2-Ascii (error message buffer)
  249. e6bc    Write OK in buffer
  250. e6c1    Print error on track 00,00 to error buffer
  251. e6c7    Print error on current track to error buffer
  252. e706    Write error message string to buffer
  253. e754    Get character and in buffer
  254. e767    Get a char of the error message
  255. e775    Increment pointer
  256. e77f    ?
  257. e780    Check for auto start removed
  258. e7a3    Perform [&] - USR file execute command
  259. e84b    Generate checksum
  260. e853    IRQ routine for serial bus
  261. e85b    Service the serial bus
  262. e909    Send data
  263. e99c    DATA OUT lo
  264. e9a5    DATA OUT hi
  265. e9ae    CLOCK OUT hi
  266. e9b7    CLOCK OUT lo
  267. e9c0    Read IEEE port
  268. e9c9    Get data byte from bus
  269. e9f2    Accept byte with EOI
  270. ea2e    Accept data from serial bus
  271. ea59    Test for ATN
  272. ea6e    Flash LED for hardware defects, self-test
  273. eaa0    Power-up RESET routine
  274. ebff    Wait loop
  275. ec9e    Load dir
  276. ed23    ?
  277. ed59    Transmit dir line
  278. ed67    Get byte from buffer
  279. ed84    Perform [V] - Validate command
  280. edb3    ?
  281. ede5    Allocate file blocks in BAM
  282. ee0d    Perform [N] - New (Format) command
  283. eeb7    Create BAM
  284. eef4    Write BAM if needed
  285. ef3a    Set buffer pointer for BAM
  286. ef4d    Get number of free blocks for dir
  287. ef5c    Mark block as free
  288. ef88    Set flag for BAM changed
  289. ef90    Mark block as allocated
  290. efcf    Erase bit for sector in BAM entry
  291. efe9    Powers of 2                DATA
  292. eff1    Write BAM after change
  293. f005    Erase BAM buffer
  294. f011    ?
  295. f05b    ?
  296. f0df    ?
  297. f10f    Get buffer number for BAM
  298. f119    Buffer number for BAM
  299. f11e    Find and allocate free block
  300. f1a9    Find free sector and allocate
  301. f1fa    Find free sectors in current track
  302. f220    Verify number of free blocks in BAM
  303. f24b    Establish number of sectors per track
  304. f258    Dummy subroutine
  305.  
  306. ;
  307. ;f259    Disk Controller Routines
  308. ;
  309.  
  310. f259    Initialise disk controller
  311. f2b0    IRQ routine for disk controller
  312. f2f9    Head transport
  313. f36e    Execute program in buffer
  314. f37c    Bump, find track 1 (head at stop)
  315. f393    Initialise pointer in buffer
  316. f3b1    Read block header, verify ID
  317. f410    Preserve block header
  318. f418    Work Return value 01 (OK) into queue
  319. f41b    Work Return value 0B (READ ERROR) into queue
  320. f41e    Work Return value 09 (READ ERROR) into queue
  321. f423    Job optimisation
  322. f4ca    Test command code further
  323. f4d1    Read sector
  324. f50a    Find start of data block
  325. f510    Read block header
  326. f556    Wait for SYNC
  327. f56e    Test command code further
  328. f575    Write data block to disk
  329. f5e9    Calculate parity for data buffer
  330. f5f2    Convert buffer of GCR data into binary
  331. f691    Test command code further
  332. f698    Compare written data with data on disk
  333. f6ca    Command code for find sector
  334. f6d0    Convert 4 binary bytes to 5 GCR bytes
  335. f77f    GCR (5-bit) nybble table        DATA
  336. f78f    Convert 260 bytes to 325 bytes group code
  337. f7e6    Convert 5 GCR bytes to 4 binary bytes
  338. f8a0    Conversion table GCR to binary - high nybble
  339. ;    $FF means invalid
  340. f8c0    Conversion table GCR to binary - low nybble
  341. ;    $FF means invalid
  342. f8e0    Decode 69 GCR bytes
  343. f934    Convert block header to GCR code
  344. f969    Error entry disk controller
  345. f97e    Turn drive motor on
  346. f98f    Turn drive motor off
  347. f99c    Job loop disk controller
  348. f9cb    ?
  349. f9d9    ?
  350. fa05    Move head to next track
  351. fa1c    Calculate number of head steps
  352. fa3b    Move stepper motor short distance
  353. fa4e    Load head
  354. fa63    ?
  355. fa7b    Prepare fast head movement
  356. fa97    Fast head movement
  357. faa5    Prepare slow head movement
  358. fac7    Formatting
  359. fda3    Write SYNC 10240 times, erase track
  360. fdc3    Read/write ($621/$622) times
  361. fdd3    Attempt counter for formatting
  362. fde5    ?
  363. fdf5    Copy data from overflow buffer
  364. fe00    Switch to reading
  365. fe0e    Write $55 10240 times
  366. fe30    Convert header in buffer 0 to GCR code
  367. fe67    Interrupt routine
  368.  
  369. fe85    Constands for disk format
  370. fe85    Directory track                DATA
  371. fe86    Start of bam                DATA
  372. fe87    Length of bam per track            DATA
  373. fe88    End of bam                DATA
  374. fe89    Table of command words            DATA
  375. ;    "VIDMBUP&CRSN"
  376. ;    Validate, Initialise, D(Backup unused),
  377. ;    Memory, Block, User,
  378. ;    Position, ∧USR execute, Copy,
  379. ;    Rename, Scratch, New (Format).
  380.  
  381. fe95    Low  byte of command addresses        DATA
  382. fea1    High byte of command addresses        DATA
  383. fead    Bytes for syntax check            DATA
  384. feb2    File control methods "RWAM"        DATA
  385. feb6    File types "DSPUL"            DATA
  386. febb    Names of file types            DATA
  387. febb    1st letter "DSPUR"            DATA
  388. fec0    2nd letter "EERSE"            DATA
  389. fec5    3rd letter "LQGRL"            DATA
  390. feca    Error LED bit value            DATA
  391. fecd    Masks for bit command            DATA
  392. fed1    Number of sectors per track        DATA
  393. fed5    Constands for disk format        DATA
  394. fed5    'A' marker for 1541 format        DATA
  395. fed6    4 track ranges                DATA
  396. fed7    Number of tracks            DATA
  397. fed8    Tracks on which sector numbers change    DATA
  398. fedb    Control bytes for head postion        DATA
  399. fee0    Buffer address high bytes        DATA
  400. fee6    ROM checksum                DATA
  401.  
  402. fee7    From UI command $EB22, to reset
  403. ;    Without RAM/ROM test
  404. feea    Patch for diagnostic routine from $EA7A
  405. fef3    Delay loop for serial bus in 1541 mode, from $E97D
  406. fefb    Patch for data output to serial bus, from $E980
  407. ff01    U9 vector, switch 1540/1541
  408. ff10    Patch for reset routine, from $EAA4
  409. ff20    Patch for listen to serial bus, from $E9DC
  410. ff2f    Unused                    EMPTY
  411.  
  412. ffe6    Format    [C8C6]
  413. ffe8    Turn motor off [F98F]
  414.  
  415. ffea    USER vectors
  416. ffea    UA, U1    [CD5F]
  417. ffec    UB, U2    [CD97]
  418. ffee    UC, U3    [0500]
  419. fff0    UD, U4    [0503]
  420. fff2    UE, U5    [0506]
  421. fff4    UF, U6    [0509]
  422. fff6    UG, U7    [050C]
  423. fff8    UH, U8    [050F]
  424. fffa    UI, U9    [FF01]
  425.  
  426. fffc    Hardware vectors
  427. fffc    RESET [EAA0]
  428. fffe    IRQ   [FE67]
  429.  
  430.  
  431.