Attached is a small patch for IO.cs. It adds IO ports for the secondary floppy
disk controller.
- Phil
Index: Kernel/Core/ADC/X86/IO.cs
===================================================================
--- Kernel/Core/ADC/X86/IO.cs (revision 946)
+++ Kernel/Core/ADC/X86/IO.cs (working copy)
@@ -391,7 +391,112 @@
//0330-0331 - MIDI interface
//0330-0333 - Adaptec 154xB/154xC SCSI adapter
//0334-0337 - Adaptec 154xB/154xC SCSI adapter
- //0370-0377 - Secondary Floppy Disk Controller
+ #region 03F0-03F7 - Secondary Floppy Disk Controller
(SFC)
+ SFC_status_A = 0x03F0, // r diskette controller
status A (PS/2 model 30)
+ //
bit 7
interrupt pending
+ //
bit 6 -DRV2
second drive installed
+ //
bit 5 step
+ //
bit 4 -track 0
+ //
bit 3 head 1
select
+ //
bit 2 -index
+ //
bit 1 -write
protect
+ //
bit 0
+direction
+ SFC_status_B = 0x03F1, // r diskette controller
status B (PS/2)
+ //
bit 7-6 =1
reserved
+ //
bit 5 drive
select (0=A:, 1=B:)
+ //
bit 4 write data
+ //
bit 3 read data
+ //
bit 2 write
enable
+ //
bit 1 motor
enable 1
+ //
bit 0 motor
enable 0
+ SFC_control_port = 0x03F2, // w diskette
controller DOR (Digital Output Register)
+ //
bit 7-6
reserved on PS/2
+ //
bit 7 = 1 drive
3 motor enable
+ //
bit 6 = 1 drive
2 motor enable
+ //
bit 5 = 1 drive
1 motor enable
+ //
bit 4 = 1 drive
0 motor enable
+ //
bit 3 = 1
diskette DMA enable (reserved PS/2)
+ //
bit 2 = 1 FDC
enable (controller reset)
+ //
= 0
hold FDC at reset
+ //
bit 1-0 drive
select (0=A 1=B ..)
+ SFC_tape_drive = 0x03F3,
+ //
bit 7-2
reserved, tri-state
+ //
bit 1-0 tape
select
+ //
= 00
none, drive 0 cannot be a tape drive.
+ //
= 01
drive1
+ //
= 10
drive2
+ //
= 11
drive3
+ SFC_status_register = 0x03F4, // r diskette
controller main status register
+ //
bit 7 = 1 RQM
data register is ready
+ //
0 no access is permitted
+ //
bit 6 = 1
transfer is from controller to system
+ //
0 transfer is from system to controller
+ //
bit 5 = 1
non-DMA mode
+ //
bit 4 = 1
diskette controller is busy
+ //
bit 3 = 1 drive
3 busy (reserved on PS/2)
+ //
bit 2 = 1 drive
2 busy (reserved on PS/2)
+ //
bit 1 = 1 drive
1 busy (= drive is in seek mode)
+ //
bit 0 = 1 drive
0 busy (= drive is in seek mode)
+ //
Note: in
non-DMA mode, all data transfers occur through
+ //
port 03F5h and the status registers (bit 5 here
+ //
indicates data read/write rather than than
+ //
command/status read/write)
+ SFC_data_rate_Select_register = 0x03F4, // w
diskette controller data rate select register
+ //
bit 7 = 1 S/W
reset
+ //
bit 6 = 1 power
down
+ //
bit 5 = 0
reserved
+ //
bit 4-2 write
precompensation, 000 default
+ //
bit 1-0 data
rate select
+ //
= 00
500 Kb/s (MFM)
+ //
= 01
300 Kb/s (MFM)
+ //
= 10
250 Kb/s (MFM)
+ //
= 11 1
Mb/s (MFM)
+ SFC_data_FIFO = 0x03F5, // r diskette command/data
register 0 (ST0)
+ //
bit 7-6 last
command status
+ //
= 00
command terminated successfully
+ //
= 01
command terminated abnormally
+ //
= 10
invalid command
+ //
= 11
terminated abnormally by change in ready signal
+ //
bit 5 = 1 seek
completed
+ //
bit 4 = 1
equipment check occurred after error
+ //
bit 3 = 1 not
ready
+ //
bit 2 = 1 head
number at interrupt
+ //
bit 1-0 = 1
unit select (0=A 1=B .. )
+ //
(on
PS/2 01=A 10=B)
+ //
+ //
status register 1 (ST1)
+ //
bit 7 end of
cylinder; sector# greater then sectors/track
+ //
bit 6 = 0
+ //
bit 5 = 1 CRC
error in ID or data field
+ //
bit 4 = 1
overrun
+ //
bit 3 = 0
+ //
bit 2 = 1
sector ID not found
+ //
bit 1 = 1 write
protect detected during write
+ //
bit 0 = 1 ID
address mark not found
+ //
+ //
status register 2 (ST2)
+ //
bit 7 = 0
+ //
bit 6 = 1
deleted Data Address Mark detected
+ //
bit 5 = 1 CRC
error in data
+ //
bit 4 = 1 wrong
cylinder detected
+ //
bit 3 = 1 scan
command equal condition satisfied
+ //
bit 2 = 1 scan
command failed, sector not found
+ //
bit 1 = 1 bad
cylinder, ID not found
+ //
bit 0 = 1
missing Data Address Mark
+ //
+ //
status register 3 (ST3)
+ //
bit 7 fault
status signal
+ //
bit 6 write
protect status
+ //
bit 5 ready
status
+ //
bit 4 track
zero status
+ //
bit 3 two sided
status signal
+ //
bit 2 side
select (head select)
+ //
bit 1-0 unit
select (0=A 1=B .. )
+ SFC_controller_data = 0x03F6, // w diskette
command register..
+ SFC_digital_input = 0x03F7, // read-only
+ SFC_configuration_control_register = 0x03F7, //
write-only
+ #endregion
+
//0378-037A - parallel printer port, same as 0278 and
03BC
//0388-0389 - Sound Blaster / Adlib port
//0388-0389 - Soundblaster PRO FM-Chip
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
SharpOS-Developers mailing list
SharpOS-Developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sharpos-developers