Skip to content
LuigiBlood edited this page Aug 6, 2019 · 36 revisions

* Commands (ASIC_CMD) *

If the command ends with 0001, a disk is needed. It's actually ignored by the 64DD, but it's there in libleo.

Notice also that when each command are finished, MECHA_INT is issued.

<< : Send data to register.
>> : Returned data.

Basic Drive Operations

  • No operation
    This command does nothing.
    ASIC_CMD << 0x00000000

  • Seek (Read)
    This command makes the drive seek for a specific track for the specified head for future reads.
    ASIC_DATA << 0xHTTT0000 (Replace TTT with Track number; H with Head number [0-1])
    ASIC_CMD << 0x00010001

  • Seek (Write)
    This command makes the drive seek for a specific track for the specified head for future writes.
    ASIC_DATA << 0xHTTT0000 (Replace TTT with Track number; H with Head number [0-1])
    ASIC_CMD << 0x00020001

  • Recalibration / Rezero (?)
    This command seems to put every thing to zero?
    ASIC_CMD << 0x00030001

  • Sleep
    This command puts the drive to sleep mode (stopped motor and retracted head).
    ASIC_DATA << 0x00000000
    ASIC_CMD << 0x00040000

  • Brake
    This command puts the drive motor on brake (if supported, see Feature Inquiry)
    ASIC_DATA << 0x00010000
    ASIC_CMD << 0x00040000

  • Start
    This command puts the drive to active mode (spinning motor and active head).
    ASIC_CMD << 0x00050001

  • Set Standby Delay
    This command sets the delay from active mode (active head) to standby mode (retracted head).
    ASIC_DATA << 0x00SS0000 (Replace SS with seconds)
    ASIC_CMD << 0x00060000

  • Set Sleep Delay
    This command sets the delay from standby mode (active motor) to sleep mode (motor stops spinning).
    ASIC_DATA << 0x00SS0000 (Replace SS with seconds)
    ASIC_CMD << 0x00070000

  • Clear Disk Change flag
    This command clears the Disk Change flag in ASIC_STATUS.
    ASIC_CMD << 0x00080000

  • Clear Reset & Disk Change flag
    This command clears the Reset & Disk Change flags in ASIC_STATUS.
    ASIC_CMD << 0x00090000

  • Read ASIC version
    This command returns the ASIC version.
    ASIC_CMD << 0x000A0000
    ASIC_DATA >> 0x01140000 (Value returned on my retail 64DD)

  • Set Disk Type
    This command tells the drive firmware what disk type it is used currently. This effectively makes the firmware handle which disk zones should be write protected (and therefore is possible to trick the firmware).
    ASIC_DATA << 0x00TT0000 (TT = Disk Type)
    ASIC_CMD << 0x000B0001

  • Request Status
    This command returns an extended error status.
    ASIC_CMD << 0x000C0000
    ASIC_DATA >> 0xSSSS0000 (SSSS = Status)
    Bitmask & Sense Code (libleo):

    • 00010000 Self-Diagnostic Error (DIAGNOSTIC_FAILURE - Error 02)
    • 00020000 Not Good Servo Information Read (NO_REFERENCE_POSITION_FOUND - Error 24)
    • 00040000 Not Good Index Gap (DRIVE_NOT_READY - Error 01)
    • 00080000 Timeout (NO_SEEK_COMPLETE - Error 21)
    • 00100000 Undefined Command (DEVICE_COMMUNICATION_FAILURE - Error 41)
    • 00200000 Data out of range (INCOMPATIBLE_MEDIUM - Error 11)
    • Every other bit does DEVICE_COMMUNICATION_FAILURE sense code.
  • Standby
    This command puts the drive to standby mode (spinning motor and retracted head).
    ASIC_CMD << 0x000D0000

  • Index Lock Retry
    This command is used when the drive couldn't physically lock the track to try again.
    ASIC_CMD << 0x000E0001

Real Time Clock

  • Set RTC Year/Month Time
    This command sets the Year and Month in the real time clock.
    ASIC_DATA << 0xYYMM0000 (YY = Year, MM = Month, BCD)
    ASIC_CMD << 0x000F0000

  • Set RTC Day/Hour Time
    This command sets the Day and Hour in the real time clock.
    ASIC_DATA << 0xDDHH0000 (DD = Day, HH = Hour, BCD)
    ASIC_CMD << 0x00100000

  • Set RTC Minute/Second Time
    This command sets the Minutes and Seconds in the real time clock.
    ASIC_DATA << 0xMMSS0000 (MM = Minute, SS = Second, BCD)
    ASIC_CMD << 0x00110000

  • Get RTC Year/Month Time
    This command returns the Year and Month from the real time clock.
    ASIC_CMD << 0x00120000
    ASIC_DATA >> 0xYYMM0000 (YY = Year, MM = Month, BCD)

  • Get RTC Day/Hour Time
    This command returns the Day and Hour from the real time clock.
    ASIC_CMD << 0x00130000
    ASIC_DATA >> 0xDDHH0000 (DD = Day, HH = Hour, BCD)

  • Get RTC Minute/Second Time
    This command returns the Minutes and Seconds from the real time clock.
    ASIC_CMD << 0x00140000
    ASIC_DATA >> 0xMMSS0000 (MM = Minute, SS = Second, BCD)

Other

  • Set LED Timer
    This command sets the way the ACCESS LED blinks.
    ASIC_DATA << 0xIIOO0000 (II = LED-ON Time, OO = LED-OFF Time)
    ASIC_CMD << 0x00150000

  • Feature Inquiry
    This command returns the features available for the drive.
    ASIC_CMD << 0x001B0000
    ASIC_DATA >> 0xXXXX0000
    Bitmask of 0xXXXX0000:

    0x00010000 (LEO_MOTOR_BREAK support feature)  
    0x00020000 (unknown feature)
    
  • Read Calibration Data
    This command reads from the 1K EEPROM which seems to contain calibration data.
    ASIC_DATA << 0xOO00000 (OO = Offset)
    ASIC_CMD << 0x001C0000
    ASIC_DATA >> 0xOODD0000 (OO = Offset, DD = Data)

  • Write Calibration Data
    This command writes to the 1K EEPROM which seems to contain calibration data.
    ASIC_DATA << 0xOODD0000 (OO = Offset, DD = Data)
    ASIC_CMD << 0x001D0000
    ASIC_DATA >> 0x00000000