home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
maps
/
C1541rom.doc
< prev
next >
Wrap
Text File
|
1995-03-08
|
12KB
|
460 lines
;cOMMODORE 1541 / oc-118 dISK dRIVE rom mAP
;v1.118 jAN 1995
; nOTE: tHIS mEMORY MAP IS COLLECTED FROM THE 1541 DIASSEMBLY
; WHICH WAS MADE BY pETER wEIGHILL.
;
; dATA TYPES IN HEADERS (FOR REASSEMBLER):
;
;datamISC DATA
;textsTRING TERMINATED WITH 00
;wordvECTORS IN lo/hi BYTE PAIRS
;chipi/o aREA
;emptyrom CONTAINING aa'S OR ff'S
;
C000uNUSEDempty
;C100fILE mANAGER rOUTINES
C100tURN led ON FOR CURRENT DRIVE
C118tURN led ON
C123cLEAR ERROR FLAGS
C12CpREPARE FOR led FLASH AFTER ERROR
C146iNTERPRET COMMAND FROM COMPUTER
C194pREPARE ERROR MSG AFTER EXECUTING COMMAND
C1BDeRASE INPUT BUFFER
C1C8oUTPUT ERROR MSG (TRACK AND SECTOR 0)
C1D1cHECK INPUT LINE
C1E5cHECK ':' ON INPUT LINE
C1EEcHECK INPUT LINE
C268sEARCH CHARACTER IN INPUT BUFFER
C2B3cHECK LINE LENGTH
C2DCcLEAR FLAGS FOR COMMAND INPUT
C312pRESERVE DRIVE NUMBER
C33CsEARCH FOR DRIVE NUMBER
C368gET DRIVE NUMBER
C38FrEVERSE DRIVE NUMBER
C398cHECK GIVEN FILE TYPE
C3BDcHECK GIVEN DRIVE NUMBER
C3CAvERIFY DRIVE NUMBER
C440fLAGS FOR DRIVE CHECKdata
C44FsEARCH FOR FILE IN DIRECTORY
C48B?
C4D8?
C5AC?
C63DtEST AND INITALISE DRIVE
C66EnAME OF FILE IN DIRECTORY BUFFER
C688cOPY FILENAME TO WORK BUFFER
C6A6sEARCH FOR END OF NAME IN COMMAND
C6CE?
C6DE?
C7ACcLEAR dIRECTORY oUTPUT bUFFER
C7B7cREATE HEADER WITH DISK NAME
C806pRINT 'BLOCKS FREE.'
C817'bLOCKS FREE.'data
C823pERFORM [s] - sCRATCH COMMAND
C87DeRASE FILE
C8B6eRASE DIR ENTRY
C8C1pERFORM [d] - bACKUP COMMAND (uNUSED)
C8C6fORMAT DISK
C8F0pERFORM [c] - cOPY COMMAND
C9A1?
C9A7?
C9D5?
C9FA?
CA35?
CA88pERFORM [r] - rENAME COMMAND
CACCcHECK IF FILE PRESENT
CAF8pERFORM [m] - mEMORY COMMAND
CB20m-r MEMORY READ
CB50m-w MEMORY WRITE
CB5CpERFORM [u] - uSER COMMAND
CB84oPEN DIRECT ACCESS CHANNEL, NUMBER
CC1BpERFORM [b] - bLOCK/bUFFER COMMAND
CC5DbLOCK COMMANDS "afrwep"data
CC63bLOCK COMMAND VECTORSword
CC6FgET PARAMETERS FORM BLOCK COMMANDS
CCF2dECIMAL VALUES 1, 10, 100data
CCF5b-f BLOCK FREE
CCFE?
CD03b-a BLOCK ALLOCATE
CD36rEAD BLOCK TO BUFFER
CD3CgET BYTE FROM BUFFER
CD42rEAD BLOCK FROM DISK
CD56b-r BLOCK READ
CD5Fu1, bLOCK READ WITHOUT CHANGING BUFFER POINTER
CD73b-w BLOCK WRITE
CD97u2, bLOCK WRITE WITHOUT CHANGING BUFFER POINTER
CDA3b-e BLOCK EXECUTE
CDBDb-p BLOCK POINTER
CDD2oPEN CHANNEL
CDF2cHECK BUFFER NUMBER AND OPEN CHANNEL
CE0EsET POINTER FOR rel FILE
CE2C?
CE6EdIVIDE BY 254
CE71dIVIDE BY 120
CED9eRASE WORK STORAGE
CEE2lEFT SHIFT 3-BYTE REGISTER TWICE
CEE5lEFT SHIFT 3-BYTE REGISTER ONCE
CEEDaDD 3-BYTE REGISTERS
CEFA?
CF09?
CF1E?
CF8CcHANGE BUFFER
CF9BwRITE DATA IN BUFFER
CFF1wRITE DATA BYTE IN BUFFER
D005pERFORM [i] - iNITALISE COMMAND
D00ErEAD bam FROM DISK
D042lOAD bam
D075cALCULATE BLOCKS FREE
D09B?
D0AF?
D0C3rEAD BLOCK
D0C7wRITE BLOCK
D0EBoPEN CHANNEL FOR READING
D107oPEN CHANNEL FOR WRITING
D125cHECK FOR FILE TYPE rel
D12FgET BUFFER AND CHANNEL NUMBERS
D137gET A BYTE FROM BUFFER
D156gET BYTE AND READ NEXT BLOCK
D19DwRITE BYTE IN BUFFER AND BLOCK
D1C6iNCREMENT BUFFER POINTER
D1D3gET DRIVE NUMBER
D1DFfIND WRITE CHANNEL AND BUFFER
D1E2fIND READ CHANNEL AND BUFFER
D227cLOSE CHANNEL
D25AfREE BUFFER
D28EfIND BUFFER
D2BA?
D2DA?
D307cLOSE ALL CHANNELS
D313cLOSE ALL CHANNELS OF OTHER DRIVES
D339?
D37FfIND CHANNEL AND ALLOCATE
D39BgET BYTE FOR OUTPUT
D44DrEAD NEXT BLOCK
D460rEAD BLOCK
D464wRITE BLOCK
D475aLLOCATE BUFFER AND READ BLOCK
D486aLLOCATE NEW BLOCK
D48DwRITE DIR BLOCK
D4C8sET BUFFER POINTER
D4DAcLOSE INTERNAL CHANNEL
D4E8sET BUFFER POINTER
D4F6gET BYTE FROM BUFFER
D506cHECK TRACK AND SECTOR NUMBERS
D552gET TRACK AND SECTOR NUMBERS FOR CURRENT JOB
D55FcHECK FOR VAILD TRACK AND SECTOR NUMBERS
D572dos MISMATCH ERROR
D586rEAD BLOCK
D58AwRITE BLOCK
D599vERIFY EXECUTION
D5C6aDDITIONAL ATTEMPTS FOR READ ERRORS
D676mOVE HEAD BY HALF A TRACK
D693mOVE HEAD ONE TRACK IN OR OUT
D6A6aTTEMPT COMMAND EXECUTION MULTIPLE TIMES
D6D0tRANSMIT PARAM TO DISK CONTROLLER
D6E4eNTER FILE IN DIR
D7B4open COMMAND, SECONDARY ADDR 15
D7C7-cHECK '*' lAST FILE
D7F3-cHECK '$' dIRECTORY
D815-cHECK '#' cHANNEL
D8F5oPEN A FILE WITH OVERWRITING (@)
D940?
D9A0oPEN FILE FOR READING
D9E3oPEN FILE FOR WRITING
DA09cHECK FILE TYPE AND CONTROL MODE
DA2ApREPARATION FOR APPEND
DA55oPEN DIRECTORY
DAC0cLOSE ROUTINE
DB02cLOSE FILE
DB62wRITE LAST BLOCK
DBA5dIRECTORY ENTRY
DC46rEAD BLOCK, ALLOCATE BUFFER
DCB6rESET POINTER
DCDAcONSTRUCT A NEW BLOCK
DD8DwRITE BYTE IN SIDE-SECTOR BLOCK
DD95mANIPULATE FLAGS
DDA6?
DDABvERIFY COMMAND CODE FOR WRITING
DDB7?
DDF1wRITE A BLOCK OF A rel FILE
DDFDwRITE BYTES FOR FOLLOWING TRACK
DE0CgET FOLLOWING TRACK AND SECTOR NUMBERS
DE19fOLLOWING TRACK FOR LAST BLOCK
DE2BBUFFER POINTER TO ZERO
DE3BgET TRACK AND SECTOR
DE50wRITE (?)
DE57r
DE5Ew
DE65r
DE6Cw
DE73r
DE95gET FOLLOWING TRACK AND SECTOR FROM BUFFER
DEA5cOPY BUFFER CONTENTS
DEC1eRASE BUFFER y
DED2gET SIDE-SECTOR NUMBER
DEDCsET BUFFER POINTER TO SIDE-SECTOR
DEE9bUFFER POINTER FOR SIDE-SECTOR
DEF8gET SIDE SECTOR AND BUFFER POINTER
DF1BrEAD SIDE-SECTOR
DF21wRITE SIDE-SECTOR
DF45sET BUFFER POINTER IN SIDE-SECTOR
DF4CcALCULATE NUMBER OF BLOCKS IN A rel FILE
DF66vERIFY SIDE-SECTOR IN BUFFER
DF93gET BUFFER NUMBER
DF9E?
DFB7?
DFC2?
DFD0gET NEXT RECORD IIN rel FILE
E03CwRITE BLOCK AND READ NEXT BLOCK
E07CwRITE A BYTE IN A RECORD
E0ABwRITE BYTE IN rel FILE
E0F3fILL RECORD WITH 0S
E105wRITE BUFFER NUMBER IN TABLE
E120gET BYTE FROM rel FILE
E1CBgET LAST SIDE-SECTOR
E207pERFORM [p] - pOSITION COMMAND
E2E2dIVIDE DATA BLOCKS INTO RECORDS
E304sET POINTER TO NEXT RECORD
E31CeXPAND SIDE-SECTOR
E44EwRITE SIDE-SECTOR AND ALLOCATE NEW
E4FCtABLE OF ERROR MESSAGESdata
;(WITH START AND END LETTERS +$80) iF VALUE and $7f LESS
; THAN $10 THEN LOOK UP TEXT IN POINTER TABLE.
;
;fORMAT: eRROR NUMBERS, dESCRIPTION
;
;E4FC00,oK
;E50020,21,22,23,24,27, rEAD ERROR
;E50B52,fILE TOO LARGE
;E51750,rECORD NOT PRESENT
;E52251,oVERFLOW IN RECORD
;E52F25,28,wRITE ERROR
;E53326,wRITE PROTECT ON
;E54029,dISK ID MISMATCH
;E54630,31,32,33,34, sYNTAX ERROR
;E55260,wRITE FILE OPEN
;E55663,fILE EXISTS
;E55F64,fILE TYPE MISMATCH
;E56765,nO BLOCK
;E57066,67,iLLEGAL TRACK OR SECTOR
;E58961,fILE NOT OPEN
;E58D39,62,fILE NOT FOUND
;E59201,fILES SCRATCHED
;E59F70,nO CHANNEL
;E5AA71,dIR ERROR
;E5AF72,dISK FULL
;E5B673,cBM DOS V2.6 1541
;E5C874,dRIVE NOT READY
;
E5D5iNDEXED WORDSdata
;fORMAT: iNDEX NUMBER dESCRIPTION
;
;E5D509 eRROR
;E5DB0a wRITE
;E5E1 03 fILE
;E5E6 04 oPEN
;E5EB 05 mISMATCH
;E5F4 06 nOT
;E5F8 07 fOUND
;E5FE 08 dISK
;E603 0b rECORD
;
E60ApREPARE ERROR NUMBER AND MESSAGE
E645pRINT ERROR MESSAGE INTO ERROR BUFFER
E680talk
E688listen
E69BcONVERT bin TO 2-aSCII (ERROR MESSAGE BUFFER)
E6ABcONVERT bcd TO 2-aSCII (ERROR MESSAGE BUFFER)
E6BCwRITE ok IN BUFFER
E6C1pRINT ERROR ON TRACK 00,00 TO ERROR BUFFER
E6C7pRINT ERROR ON CURRENT TRACK TO ERROR BUFFER
E706wRITE ERROR MESSAGE STRING TO BUFFER
E754gET CHARACTER AND IN BUFFER
E767gET A CHAR OF THE ERROR MESSAGE
E775iNCREMENT POINTER
E77FdUMMY SUBROUTINE
E780cHECK FOR AUTO START - REMOVED
E7A3pERFORM [&] - usr FILE EXECUTE COMMAND
E84BgENERATE CHECKSUM
E853irq ROUTINE FOR SERIAL BUS
E85BsERVICE THE SERIAL BUS
E909sEND DATA
E99Cdata out LO
E9A5data out HI
E9AEclock out HI
E9B7clock out LO
E9C0rEAD ieee PORT
E9C9gET DATA BYTE FROM BUS
E9F2aCCEPT BYTE WITH eoi
EA2EaCCEPT DATA FROM SERIAL BUS
EA59tEST FOR atn
EA6EfLASH led FOR HARDWARE DEFECTS, SELF-TEST
EAA0pOWER-UP reset ROUTINE
EBFFwAIT LOOP
EC9ElOAD DIR
ED23?
ED59tRANSMIT DIR LINE
ED67gET BYTE FROM BUFFER
ED84pERFORM [v] - vALIDATE COMMAND
EDB3?
EDE5aLLOCATE FILE BLOCKS IN bam
EE0DpERFORM [n] - nEW (fORMAT) COMMAND
EEB7cREATE bam
EEF4wRITE bam IF NEEDED
EF3AsET BUFFER POINTER FOR bam
EF4DgET NUMBER OF FREE BLOCKS FOR DIR
EF5CmARK BLOCK AS FREE
EF88sET FLAG FOR bam CHANGED
EF90mARK BLOCK AS ALLOCATED
EFCFeRASE BIT FOR SECTOR IN bam ENTRY
EFE9pOWERS OF 2data
EFF1wRITE bam AFTER CHANGE
F005eRASE bam BUFFER
F011?
F05B?
F0D1cREAR bam?
F0DF?
F10FgET BUFFER NUMBER FOR bam
F119bUFFER NUMBER FOR bam
F11EfIND AND ALLOCATE FREE BLOCK
F1A9fIND FREE SECTOR AND ALLOCATE
F1FAfIND FREE SECTORS IN CURRENT TRACK
F220vERIFY NUMBER OF FREE BLOCKS IN bam
F24BeSTABLISH NUMBER OF SECTORS PER TRACK
F258dUMMY SUBROUTINE
;
;F259dISK cONTROLLER rOUTINES
;
F259iNITIALISE DISK CONTROLLER
F2B0irq ROUTINE FOR DISK CONTROLLER
F2F9hEAD TRANSPORT
F36EeXECUTE PROGRAM IN BUFFER
F37CbUMP, FIND TRACK 1 (HEAD AT STOP)
F393iNITIALISE POINTER IN BUFFER
F3B1rEAD BLOCK HEADER, VERIFY id
F410pRESERVE BLOCK HEADER
F418wORK rETURN VALUE 01 (ok) INTO QUEUE
F41BwORK rETURN VALUE 0b (read error) INTO QUEUE
F41EwORK rETURN VALUE 09 (read error) INTO QUEUE
F423jOB OPTIMISATION
F4CAtEST COMMAND CODE FURTHER
F4D1rEAD SECTOR
F50AfIND START OF DATA BLOCK
F510rEAD BLOCK HEADER
F556wAIT FOR sync
F56EtEST COMMAND CODE FURTHER
F575wRITE DATA BLOCK TO DISK
F5E9cALCULATE PARITY FOR DATA BUFFER
F5F2cONVERT BUFFER OF gcr DATA INTO BINARY
F691tEST COMMAND CODE FURTHER
F698cOMPARE WRITTEN DATA WITH DATA ON DISK
F6CAcOMMAND CODE FOR FIND SECTOR
F6D0cONVERT 4 BINARY BYTES TO 5 gcr BYTES
F77Fgcr (5-BIT) NYBBLE TABLEdata
F78FcONVERT 260 BYTES TO 325 BYTES GROUP CODE
F7E6cONVERT 5 gcr BYTES TO 4 BINARY BYTES
F8A0cONVERSION TABLE gcr TO BINARY - HIGH NYBBLE
;$ff MEANS INVALID
F8C0cONVERSION TABLE gcr TO BINARY - LOW NYBBLE
;$ff MEANS INVALID
F8E0dECODE 69 gcr BYTES
F934cONVERT BLOCK HEADER TO gcr CODE
F969eRROR ENTRY DISK CONTROLLER
F97EtURN DRIVE MOTOR ON
F98FtURN DRIVE MOTOR OFF
F99CjOB LOOP DISK CONTROLLER
F9CB?
F9D9?
FA05mOVE HEAD TO NEXT TRACK
FA1CcALCULATE NUMBER OF HEAD STEPS
FA3BmOVE STEPPER MOTOR SHORT DISTANCE
FA4ElOAD HEAD
FA63?
FA7BpREPARE FAST HEAD MOVEMENT
FA97fAST HEAD MOVEMENT
FAA5pREPARE SLOW HEAD MOVEMENT
FAC7fORMATTING
FDA3wRITE sync 10240 TIMES, ERASE TRACK
FDC3rEAD/WRITE ($621/$622) TIMES
FDD3aTTEMPT COUNTER FOR FORMATTING
FDE5?
FDF5cOPY DATA FROM OVERFLOW BUFFER
FE00sWITCH TO READING
FE0EwRITE $55 10240 TIMES
FE30cONVERT HEADER IN BUFFER 0 TO gcr CODE
FE67iNTERRUPT ROUTINE
;FE85cONSTANDS FOR DISK FORMAT
FE85dIRECTORY TRACKdata
FE86sTART OF BAMdata
FE87lENGTH OF BAM PER TRACKdata
FE88eND OF BAMdata
FE89tABLE OF COMMAND WORDSdata
;"vidmbup&crsn"
;vALIDATE, iNITIALISE, d(bACKUP UNUSED),
;mEMORY, bLOCK, uSER,
;pOSITION, &AND;usr EXECUTE, cOPY,
;rENAME, sCRATCH, nEW (fORMAT).
FE95lOW BYTE OF COMMAND ADDRESSESdata
FEA1hIGH BYTE OF COMMAND ADDRESSESdata
FEADbYTES FOR SYNTAX CHECKdata
FEB2fILE CONTROL METHODS "rwam"data
FEB6fILE TYPES "dspul"data
FEBBnAMES OF FILE TYPESdata
FEBB1ST LETTER "dspur"data
FEC02ND LETTER "eerse"data
FEC53RD LETTER "lqgrl"data
FECAeRROR led BIT VALUEdata
FECDmASKS FOR BIT COMMANDdata
FED1nUMBER OF SECTORS PER TRACKdata
FED5cONSTANDS FOR DISK FORMATdata
FED5'a' MARKER FOR 1541 FORMATdata
FED64 TRACK RANGESdata
FED7nUMBER OF TRACKSdata
FED8tRACKS ON WHICH SECTOR NUMBERS CHANGEdata
FEDBcONTROL BYTES FOR HEAD POSTIONdata
FEE0bUFFER ADDRESS HIGH BYTESdata
FEE6rom CHECKSUMdata
FEE7fROM ui COMMAND $eb22, TO RESET
;wITHOUT ram/rom TEST
FEEApATCH FOR DIAGNOSTIC ROUTINE FROM $ea7a
FEF3dELAY LOOP FOR SERIAL BUS IN 1541 MODE, FROM $e97d
FEFBpATCH FOR DATA OUTPUT TO SERIAL BUS, FROM $e980
FF01u9 VECTOR, SWITCH 1540/1541
FF10pATCH FOR RESET ROUTINE, FROM $eaa4
FF20pATCH FOR LISTEN TO SERIAL BUS, FROM $e9dc
FF2FuNUSEDempty
FFE6fORMAT[c8c6]word
FFE8tURN MOTOR OFF [f98f]word
FFEAuser VECTORS
FFEAua, u1[cd5f]word
FFECub, u2[cd97]word
FFEEuc, u3[0500]word
FFF0ud, u4[0503]word
FFF2ue, u5[0506]word
FFF4uf, u6[0509]word
FFF6ug, u7[050c]word
FFF8uh, u8[050f]word
FFFAui, u9[ff01]word
FFFChARDWARE VECTORS
FFFCreset [eaa0]word
FFFEirq [fe67]word