Commodore 1541 Disk Drive ROM Guide
Commodore 1541 Drive ROM addresses
; Commodore 1541 / OC-118 Disk Drive ROM Map
; V1.0 1 Sep 1994
; Note: This Memory map is collected from the 1541 disassembly
; which was made by Peter Weighill. I cannot guarantee accuracy
; of all details.
;
; Data types in headers (for reassembler):
;
; DATA Misc data
; TEXT String terminated with 00
; WORD Vectors in LO/HI byte pairs
; CHIP I/O Area
; EMPTY ROM containing AA's or FF's
;
c000 Unused EMPTY
;c100 File Manager Routines
c100 Turn LED on
c118 Turn LED on
c123 Clear error flags
c12c Prepare for LED flash after error
c146 Interpret command from computer
c194 Prepare error msg after executing command
c1bd Erase input buffer
c1c8 Output error msg (track and sector 0)
c1d1 Check input line
c1e5 Check input line
c1ee Check input line
c268 Search character in input buffer
c2b3 Check line length ptr in command
c2dc Clear flags for command input
c312 Preserve drive number
c33c Search for drive number
c368 Get drive number
c38f Reverse drive number
c398 ?
c3bd Check drive number
c3ca Verify drive number
c440 Flags for drive check DATA
c44f Search for file in directory
c63d Test and initalise drive
c66e Name of file in directory buffer
c688 ?
c6a6 Search for end of name in command
c6ce ?
c6de ?
c7ac Clear Directory Output Buffer
c7b7 Create header with disk nmae
c806 Print 'blocks free.'
c817 'Blocks free.' DATA
c823 Perform [S] - Scratch command
c87d Erase file
c8b6 Erase dir entry
c8c1 Perform [D] - Backup command (Unused)
c8c6 Format disk
c8f0 Perform [C] - Copy command
ca88 Perform [R] - Rename command
cacc Check if file present
caf8 Perform [M] - Memory command
cb20 M-R memory read
cb50 M-W momory write
cb5c Perform [U] - User command
cb84 Open direct access channel, number
cc1b Perform [B] - Block/Buffer command
cc5d Block commands "AFRWEP" DATA
cc63 Block command vectors WORD
cc6f Get parameters form block commands
ccf2 Decimal values 1, 10, 100 DATA
ccf5 B-F block free
ccfe ?
cd03 B-A block allocate
cd36 ?
cd3c Get byte from buffer
cd42 Read block from disk
cd56 B-R block read
cd5f U1, Block read without changing buffer pointer
cd73 B-W block write
cd97 U2, Block read without changing buffer pointer
cda3 B-E block execute
cdbd B-P block pointer
cdd2 Open channel
cdf2 Check buffer number and open channel
ce0e Set pointer for REL file
cd2c ?
cd6e Divide by 254
ce71 Divide by 120
cdd9 Erase work storage
dee2 Left shift 3-byte register twice
cee5 Left shift 3-byte register once
ceed ?
cefa ?
cf09 ?
cf1e ?
cf8c Change buffer
cf9b Write data in buffer
cff1 Write data byte in buffer
d005 Perform [I] - Initalise command
d00e ?
d042 Load BAM
d075 Calculate blocks free
d09b ?
d0c3 Read block
d0c7 Write block
d0eb Open channel for reading
d107 Open channel for writing
d125 Check for file type REL
d12f Get buffer and channel numbers
d137 Get a byte from buffer
d156 Get byte and read next block
d19d Write byte in buffer and block
d1c6 Increment buffer pointer
d1d3 Get drive number
d1df Find write channel and buffer
d1e2 Find read channel and buffer
d227 Close channel
d25a Free buffer
d28e Find buffer
d307 Close all channels
d313 Close all channels of other drives
d339 ?
d37f Find channel and allocate
d39b Get byte for output
d44d Read next block
d460 Read block
d464 Write block
d475 Allocate buffer and read block
d486 Allocate new block
d48d Write dir block
d4c8 Set buffer pointer
d4da Close internal channel
d4e8 Set buffer pointer
d4f6 Get byte from buffer
d506 Check track and sector numbers
d552 Get track and sector numbers for current job
d55f Check for vaild track and sector numbers
d572 DOS mismatch error
d586 Read block
d58a Write block
d599 Verify execution
d5c6 Additional attempts for read errors
d676 Move head by half a track
d693 Move head one track in or out
d6a6 Attempt command execution multiple times
d6d0 Transmit param to disk controller
d6e4 Enter file in dir
d7b4 OPEN command, secondary addr not 15
d8f5 Open a file with overwriting
d9a0 Open file for reading
d9e3 Open file for writing
da09 Check file type and control mode
da2a Preparation for append
da55 Open directory
dac0 Close routine
db02 Close file
db62 Write last block
dba5 Directory entry
dc46 Read block, allocate buffer
dcb6 Reset pointer
dcda Construct a new block
dd8d Write byte in side-sector block
dd95 Manipulate flags
ddab Verify command code for writing
ddb7 ?
ddf1 Write a block of a REL file
ddfd Write bytes for following track
de0c Get following track and sector numbers
de19 Following track for last block
de2b buffer pointer to zero
de3b Get track and sector
de50 Write (?)
de57 R
de5e W
de65 R
de6c W
de73 R
de95 Get following track and sector from buffer
dea5 Copy buffer contents
dec1 Erase buffer Y
ded2 Get side-sector number
dedc Set buffer pointer to side-sector
dee9 Buffer pointer for side-sector
def8 Get side sector and buffer pointer
df1b Read side-sector
df21 Write side-sector
df45 Set buffer pointer in side-sector
df4c Calculate number of blocks in a REL file
df66 Verify side-sector in buffer
df93 Get buffer number
dfd0 Get next record iin REL file
e03c Write block and read next block
e07c Write a byte in a record
e0ab Write byte in REL file
e0f3 Fill record with 0s
e105 Write buffer number in table
e120 Get byte from REL file
e1cb Get last side-sector
e207 Perform [P] - Position command
e2e2 Divide data blocks into records
e304 Set pointer to next record
e31c Expand side-sector
e44e Write side-sector and allocate new
e4fc Table of error messages DATA
; Format: error numbers
; description
; (with start and end letters +$80) If value AND $7F less
; than $10 then look up text in pointer table.
;
;e4fc Ok
;e500 Read error
;e50b File too large
;e517 Record not present
;e522 Overflow in record
;e52f Write error
;e533 Write protect on
;d540 Disk id mismatch
;e546 Syntax error
;e552 Write file open
;e556 File exists
;e55f File type mismatch
;e567 No block
;e570 Illegal track or sector
;e589 File not open
;e58d File not found
;e592 Files scratched
;e59f No channel
;e5aa Dir error
;e5af Disk full
;e5b6 Cbm dos v2.6 1541
;e5c8 Drive not ready
e5d5 Indexed words DATA
; Format: index number
; description
e60a Prepare error number and message
e645 Print error message into error buffer
e680 TALK
e688 LISTEN
e69b Convert BIN to 2-








