atapi progress
This commit is contained in:
1 parent
920aca5bbf
commit
fd0de9f1d2
2 files changed
+256
-25
No files matched your search
+72
-20
@@ -4,6 +4,7 @@ interface
|
||||
|
||||
uses
|
||||
ata,
|
||||
atapi,
|
||||
util,
|
||||
drivertypes,
|
||||
console,
|
||||
@@ -243,10 +244,12 @@ var
|
||||
buffer : puint8;
|
||||
storageDevice : PStorage_device;
|
||||
success : boolean;
|
||||
size : uint32;
|
||||
begin
|
||||
|
||||
push_trace('ide.load_device()');
|
||||
success := check_device_type(device);
|
||||
select_device(device);
|
||||
|
||||
if (is_device_present(device) and success) then begin
|
||||
console.writestringln('[IDE] (load_device) Device is present');
|
||||
@@ -254,9 +257,28 @@ begin
|
||||
if (device.isATAPI) then begin
|
||||
console.writestringln('[IDE] (load_device) Device is ATAPI');
|
||||
//todo load device info
|
||||
success := atapi.identify_device(device);
|
||||
|
||||
device.exists := true;
|
||||
device.isATAPI := true;
|
||||
|
||||
end else begin
|
||||
console.writestringln('[IDE] (load_device) Device is ATA');
|
||||
success:= ata.identify_device(device);
|
||||
|
||||
//check if atapi device using info from identify_device
|
||||
console.writestringln('[IDE] (load_device) Device info: ');
|
||||
console.writecharln(char(puint8(device.info)[252]));
|
||||
console.writecharln(char(puint8(device.info)[253]));
|
||||
|
||||
if (puint8(device.info)[253] = $FF) then begin
|
||||
console.writestringln('[IDE] (load_device) Device is ATAPI');
|
||||
device.isATAPI := true;
|
||||
device.exists := true;
|
||||
|
||||
success := atapi.identify_device(device);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
if not success then begin
|
||||
@@ -273,6 +295,36 @@ begin
|
||||
if (device.isATAPI) then begin
|
||||
storageDevice^.controller := TControllerType.ControllerATAPI;
|
||||
storageDevice^.writable := false; //TODO atapi
|
||||
size := atapi.get_device_size(device);
|
||||
storageDevice^.maxSectorCount := size;
|
||||
storageDevice^.sectorSize := 2048; //todo
|
||||
|
||||
if (device.isMaster) then begin
|
||||
storageDevice^.controllerId0 := 0;
|
||||
end else begin
|
||||
storageDevice^.controllerId0 := 1;
|
||||
end;
|
||||
|
||||
//read and print first sector
|
||||
buffer := puint8(kalloc(2048));
|
||||
memset(uint32(buffer), 11, 2048);
|
||||
atapi.read_pio28(device, 11, 1, puint16(buffer));
|
||||
|
||||
console.writestringln('[IDE] (load_device) First sector of ATAPI device: ');
|
||||
for i:=0 to 16 do begin
|
||||
console.writehexln(buffer[i]);
|
||||
end;
|
||||
|
||||
memset(uint32(buffer), 0, 2048);
|
||||
|
||||
atapi.read_pio28(device, 5200, 1, puint16(buffer));
|
||||
|
||||
console.writestringln('[IDE] (load_device) First sector of ATAPI device: ');
|
||||
for i:=0 to 16 do begin
|
||||
console.writehexln(buffer[i]);
|
||||
end;
|
||||
|
||||
|
||||
end else begin
|
||||
storageDevice^.controller := TControllerType.ControllerATA;
|
||||
storageDevice^.writable := true;
|
||||
@@ -292,30 +344,30 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
//wrtie test, 1F2F1F2F repeated
|
||||
buffer := puint8(kalloc(1024));
|
||||
memset(uint32(buffer), $02, 1024);
|
||||
// //wrtie test, 1F2F1F2F repeated
|
||||
// buffer := puint8(kalloc(1024));
|
||||
// memset(uint32(buffer), $02, 1024);
|
||||
|
||||
uint8(buffer[0]) := $1F;
|
||||
uint8(buffer[1]) := $2F;
|
||||
uint8(buffer[2]) := $3F;
|
||||
uint8(buffer[3]) := $4F;
|
||||
uint8(buffer[4]) := $5F;
|
||||
uint8(buffer[5]) := $6F;
|
||||
uint8(buffer[6]) := $7F;
|
||||
uint8(buffer[7]) := $8F;
|
||||
// uint8(buffer[0]) := $1F;
|
||||
// uint8(buffer[1]) := $2F;
|
||||
// uint8(buffer[2]) := $3F;
|
||||
// uint8(buffer[3]) := $4F;
|
||||
// uint8(buffer[4]) := $5F;
|
||||
// uint8(buffer[5]) := $6F;
|
||||
// uint8(buffer[6]) := $7F;
|
||||
// uint8(buffer[7]) := $8F;
|
||||
|
||||
//write to the first sector
|
||||
ata.write_pio28(device, 10, 2, puint16(buffer));
|
||||
// //write to the first sector
|
||||
// ata.write_pio28(device, 10, 2, puint16(buffer));
|
||||
|
||||
//read the first sector
|
||||
memset(uint32(buffer), 0, 512);
|
||||
ata.read_pio28(device, 10, 1, puint16(buffer));
|
||||
// //read the first sector
|
||||
// memset(uint32(buffer), 0, 512);
|
||||
// ata.read_pio28(device, 10, 1, puint16(buffer));
|
||||
|
||||
//check if the data is the same
|
||||
for i:=0 to 10 do begin
|
||||
console.writehexln(buffer[i]);
|
||||
end;
|
||||
// //check if the data is the same
|
||||
// for i:=0 to 10 do begin
|
||||
// console.writehexln(buffer[i]);
|
||||
// end;
|
||||
end;
|
||||
|
||||
//register the device
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user