67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import { DriveNumber, SupportedSectors } from 'js/formats/types';
|
|
import { byte, nibble } from 'js/types';
|
|
|
|
export type LssClockCycle = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
|
|
export type LssState = nibble;
|
|
|
|
export type Phase = 0 | 1 | 2 | 3;
|
|
|
|
/**
|
|
* State of the controller.
|
|
*/
|
|
export interface ControllerState {
|
|
/** Sectors supported by the controller. */
|
|
sectors: SupportedSectors;
|
|
|
|
/** Is the active drive powered on? */
|
|
on: boolean;
|
|
|
|
/** The active drive. */
|
|
driveNo: DriveNumber;
|
|
|
|
/** The 8-cycle LSS clock. */
|
|
clock: LssClockCycle;
|
|
|
|
/** Current state of the Logic State Sequencer. */
|
|
state: LssState;
|
|
|
|
/** Q6 (Shift/Load) */
|
|
q6: boolean;
|
|
/** Q7 (Read/Write) */
|
|
q7: boolean;
|
|
|
|
/** Last data from the disk drive. */
|
|
latch: byte;
|
|
/** Last data written by the CPU to card softswitch 0x8D. */
|
|
bus: byte;
|
|
}
|
|
|
|
/** Common information for Nibble and WOZ disks. */
|
|
export interface Drive {
|
|
/** Whether the drive write protect is on. */
|
|
readOnly: boolean;
|
|
/** Quarter track position of read/write head. */
|
|
track: byte;
|
|
/** Position of the head on the track. */
|
|
head: byte;
|
|
/** Current active coil in the head stepper motor. */
|
|
phase: Phase;
|
|
/** Whether the drive has been written to since it was loaded. */
|
|
dirty: boolean;
|
|
}
|
|
|
|
/** Base interface for disk driver states. */
|
|
export interface DriverState {}
|
|
|
|
/** Interface for drivers for various disk types. */
|
|
export interface DiskDriver {
|
|
tick(): void;
|
|
onQ6Low(): void;
|
|
onQ6High(readMode: boolean): void;
|
|
onDriveOn(): void;
|
|
onDriveOff(): void;
|
|
clampTrack(): void;
|
|
getState(): DriverState;
|
|
setState(state: DriverState): void;
|
|
}
|