Big commit thing.
git-svn-id: https://spexeah.com:8443/svn/Asuro@867 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
Binary file not shown.
+5
-4
@@ -8,7 +8,7 @@ fedbc69eb42fb2bd685aa3c98732dd24 src//gdt.pas
|
||||
1e96141f52b3249777c4c561f74486b2 src//idt.pas
|
||||
ff963c65c48984566b201003eec8ce47 src//irq.pas
|
||||
ab3f144c41b5e718b4575eb4ef51aa1b src//isr.pas
|
||||
042229fed0d637a745fd10d2b658e678 src//kernel.pas
|
||||
2e5d095b961c2ea7ee24726d6649209d src//kernel.pas
|
||||
375a0beff3986ead4e9275b2dfa0ec7d src//lmemorymanager.pas
|
||||
dce0fec2a2bb8dde7dced3598a613318 src//pmemorymanager.pas
|
||||
2517817ea68f5797b5c10926dfaf497e src//processloader.pas
|
||||
@@ -44,6 +44,7 @@ b26eb54cfc1be4b9afa103e0ec041eba src/prog/memview.pas
|
||||
84fe7bc577629e64074adf0a0b363cf8 src/prog/splash.pas
|
||||
4ea0a47afaace151f3bd66f3786947ed src/prog/terminal.pas
|
||||
c18ca66db1e0e7c3aa8c2974e220a5ec src/prog/themer.pas
|
||||
348812145d1abd16ed75c4836ad01c14 src/prog/udpcat.pas
|
||||
a69305637377f209b509b097e7271052 src/prog/vmlog.pas
|
||||
af1e55dbd64c939cb63a1703de1002c7 src/prog/vmstate.pas
|
||||
c0b825d6daacd672ce343e062edc7238 src/include/bios_data_area.pas
|
||||
@@ -61,8 +62,8 @@ ff442b1dc417a277c68b2890740ea5a2 src/driver/storage/asfs.pas
|
||||
3324eebbdbb3080374a7d65397d1d663 src/driver/storage/ATA_ISR.pas
|
||||
15e714c6bf0f6805f95cac019a8ef3ff src/driver/storage/ATA_OLD.pas
|
||||
631b160eab56da3ce6df8a76b1577452 src/driver/storage/fat32_OLD.pas
|
||||
0dbc9a5453191d47edbe85a90177e4ca src/driver/storage/fat32.pas
|
||||
563f5a6a3aa1d127d9cfd026e681789c src/driver/storage/IDE.pas
|
||||
4aeebdde832dff104bed19d4c050054f src/driver/storage/fat32.pas
|
||||
4c0ba6867e91b7ad031334aaa17d1c1c src/driver/storage/IDE.pas
|
||||
0843fb9b9ca537d4c595cafc88eac993 src/driver/storage/partitiontable.pas
|
||||
3437aa5ff213f37f5088ceb690e78d3d src/driver/storage/storagemanagement.pas
|
||||
2b3d1b9259cd2e80a8849515250998be src/driver/interface/serial.pas
|
||||
@@ -80,7 +81,7 @@ d6b9b21258bcb471d91c85c85c92cdca src/driver/bus/UHCI.pas
|
||||
0d38ece46e1dd89d6b9298d2dd21e809 src/driver/bus/XHCI.pas
|
||||
e6bac1105d578010d8c80ad98e73da75 src/driver/net/l4/icmp.pas
|
||||
d15e40376b2ea95d309c19959bbe670c src/driver/net/l4/tcp.pas
|
||||
9863f5fcb07e10a6776e15dea8c0180c src/driver/net/l4/udp.pas
|
||||
c2e2856db3aec3febaefed782cc87175 src/driver/net/l4/udp.pas
|
||||
37a2153a326041fccdc8d3006ec81001 src/driver/net/l2/eth2.pas
|
||||
31163add86f65e5dfa3eb519f4cc6334 src/driver/net/l1/net.pas
|
||||
d877ae603669cb210bba08cafddff767 src/driver/net/include/nettypes.pas
|
||||
|
||||
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
+23
-26
@@ -17,12 +17,19 @@ var
|
||||
Ports : Array[0..65535] of PUDPBindContext;
|
||||
|
||||
procedure register();
|
||||
function bind(bindContext : PUDPBindContext) : TUDPError;
|
||||
function unbind(bindContext : PUDPBindContext) : TUDPError;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
console, terminal;
|
||||
|
||||
function send(p_data : void; p_len : uint16; p_context : PPacketContext; bindContext : PUDPBindContext);
|
||||
begin
|
||||
|
||||
end;
|
||||
|
||||
function bind(bindContext : PUDPBindContext) : TUDPError;
|
||||
var
|
||||
result : TUDPError;
|
||||
@@ -66,9 +73,10 @@ begin
|
||||
result:= tuePortNotFound;
|
||||
end;
|
||||
end;
|
||||
unbind:= result;
|
||||
end;
|
||||
|
||||
procedure UDPReceive(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||
procedure ProcessPacket(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||
var
|
||||
header : PUDPHeader;
|
||||
context : PUDPPacketContext;
|
||||
@@ -81,18 +89,6 @@ var
|
||||
begin
|
||||
writeToLogLn(' L4: udp.recv');
|
||||
header:= PUDPHeader(p_data);
|
||||
//writestringln('UDP Packet: ');
|
||||
//hex:= puint8(p_data);
|
||||
//for i:=0 to 7 do begin
|
||||
// writehexpair(hex^);
|
||||
// hex:= hex+1;
|
||||
//end;
|
||||
//writestringln(' ');
|
||||
//Writeintln(switchendian16(header^.SrcPort));
|
||||
//Writeintln(header^.SrcPort);
|
||||
//Writeintln(switchendian16(header^.DstPort));
|
||||
//Writeintln(header^.DstPort);
|
||||
//writestringln('');
|
||||
if Ports[switchendian16(header^.DstPort)] <> nil then begin
|
||||
context:= PUDPPacketContext(kalloc(sizeof(TUDPPacketContext)));
|
||||
context^.PacketContext:= p_context;
|
||||
@@ -105,6 +101,7 @@ begin
|
||||
size:= context^.Length - sizeof(TUDPHeader);
|
||||
bind:= Ports[context^.DstPort];
|
||||
bind^.Callback(void(buf), size, context);
|
||||
kfree(void(context));
|
||||
end;
|
||||
end;
|
||||
|
||||
@@ -131,19 +128,19 @@ begin
|
||||
for i:=0 to 65535 do begin
|
||||
Ports[i]:= nil;
|
||||
end;
|
||||
context:= PUDPBindContext(kalloc(sizeof(TUDPBindContext)));
|
||||
context^.Port:= 22294;
|
||||
context^.Callback:= @TestRecv;
|
||||
context^.UID:= 4398724;
|
||||
r:= bind(context);
|
||||
writestring('[TestBind] ');
|
||||
case r of
|
||||
tueOK:writestringln('22294 bind OK');
|
||||
tuePortInUse:writestringln('22294 port in use');
|
||||
tueGenericError:writestringln('22294 generic error');
|
||||
tuePortRestricted:writestringln('22294 restricted');
|
||||
end;
|
||||
ipv4.registerProtocol($11, @UDPReceive);
|
||||
//context:= PUDPBindContext(kalloc(sizeof(TUDPBindContext)));
|
||||
//context^.Port:= 22294;
|
||||
//context^.Callback:= @TestRecv;
|
||||
//context^.UID:= 4398724;
|
||||
//r:= bind(context);
|
||||
//writestring('[TestBind] ');
|
||||
//case r of
|
||||
// tueOK:writestringln('22294 bind OK');
|
||||
// tuePortInUse:writestringln('22294 port in use');
|
||||
// tueGenericError:writestringln('22294 generic error');
|
||||
// tuePortRestricted:writestringln('22294 restricted');
|
||||
//end;
|
||||
ipv4.registerProtocol($11, @ProcessPacket);
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -41,6 +41,18 @@ type
|
||||
info : TIdentResponse;
|
||||
end;
|
||||
|
||||
TIDE_Status = bitpacked record
|
||||
Busy : Boolean;
|
||||
Ready : Boolean;
|
||||
Fault : Boolean;
|
||||
Seek : Boolean;
|
||||
DRQ : Boolean;
|
||||
CORR : Boolean;
|
||||
IDDEX : Boolean;
|
||||
ERROR : Boolean;
|
||||
end;
|
||||
PIDE_Status = ^TIDE_Status;
|
||||
|
||||
|
||||
const
|
||||
ATA_SR_BUSY = $80; //BUSY
|
||||
@@ -325,39 +337,62 @@ var
|
||||
begin
|
||||
push_trace('ide.writePIO28');
|
||||
console.writestringln('[IDE] (WRITEPIO28) BEGIN');
|
||||
console.redrawWindows;
|
||||
while true do if (inb($1f7) and (1 shl 7)) = 0 then break; //Wait until drive not busy
|
||||
|
||||
console.writestringln('[IDE] (WRITEPIO28) 1');
|
||||
console.redrawWindows;
|
||||
|
||||
noInt(drive);
|
||||
|
||||
if IDEDevices[drive].isMaster then begin
|
||||
//outb($1F6, $A0); //drive select
|
||||
outb($1F6, $A0); //drive select
|
||||
outb($1F7, $E0 or ((LBA shr 24) and $0F)); //LBA command primary master
|
||||
end
|
||||
else begin
|
||||
//outb($1F6, $B0); //drive select
|
||||
outb($1F6, $B0); //drive select
|
||||
outb($1F7, $F0 or ((LBA shr 24) and $0F)); //LBA command primary slave
|
||||
end;
|
||||
|
||||
console.writestringln('[IDE] (WRITEPIO28) 2');
|
||||
console.redrawWindows;
|
||||
|
||||
outb($1F2, sectorCount);
|
||||
outb($1F3, LBA);
|
||||
outb($1F4, LBA shr 8);
|
||||
outb($1F5, LBA shr 16);
|
||||
outb($1F7, $30); //write command
|
||||
|
||||
for i:=0 to sectorCount do begin
|
||||
console.writestringln('[IDE] (WRITEPIO28) 3');
|
||||
console.redrawWindows;
|
||||
|
||||
for i:=0 to sectorCount-1 do begin
|
||||
|
||||
//poll status
|
||||
while true do if (inb($1f7) and (1 shl 7)) = 0 then break; //Wait until drive not busy
|
||||
while true do if (inb($1f7) and ATA_SR_BUSY) = 0 then break; //Wait until drive not busy
|
||||
|
||||
console.writestringln('[IDE] (WRITEPIO28) 4');
|
||||
console.redrawWindows;
|
||||
|
||||
while true do begin
|
||||
console.writestring('[IDE] (WRITEPIO28) inb($1f7): ');
|
||||
writehexpair(inb($1f7));
|
||||
if inb($1f7) = $40 then begin
|
||||
while true do begin console.redrawWindows; end;
|
||||
end;
|
||||
writestringln(' ');
|
||||
console.redrawWindows;
|
||||
if (inb($1f7) and (1 shl 3)) <> 0 then break;
|
||||
if (inb($1F7) and 1) <> 0 then begin
|
||||
console.writestringln('write error');
|
||||
console.redrawWindows;
|
||||
exit;
|
||||
end; //drive error
|
||||
end;
|
||||
|
||||
console.writestringln('[IDE] (WRITEPIO28) 5');
|
||||
console.redrawWindows;
|
||||
|
||||
for ii:=0 to 127 do begin //write data
|
||||
outb($1F0, Puint32(buffer + ((i * 512) + (ii * 32) DIV 32) )^);
|
||||
while true do if (inb($1f7) and (1 shl 7)) = 0 then break; //Wait until drive not busy
|
||||
@@ -367,10 +402,14 @@ begin
|
||||
while true do if (inb($1f7) and (1 shl 7)) = 0 then break; //Wait until drive not busy
|
||||
outb($1F7, $E7);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
console.writestringln('[IDE] (WRITEPIO28) 6');
|
||||
console.redrawWindows;
|
||||
|
||||
end;
|
||||
console.writestringln('[IDE] (WRITEPIO28) END');
|
||||
console.redrawWindows;
|
||||
pop_trace();
|
||||
end;
|
||||
|
||||
@@ -402,7 +441,7 @@ begin
|
||||
outb($1F7, $20); //read command
|
||||
|
||||
|
||||
for i:=0 to sectorCount do begin
|
||||
for i:=0 to sectorCount-1 do begin
|
||||
|
||||
//poll status
|
||||
while true do if (inb($1f7) and (1 shl 7)) = 0 then break; //Wait until drive not busy
|
||||
@@ -483,4 +522,5 @@ procedure write(device : PStorage_device; LBA : uint32; sectorCount : uint32; bu
|
||||
begin
|
||||
writePIO28(device^.controllerId0, LBA, sectorCount, buffer);
|
||||
end;
|
||||
|
||||
end.
|
||||
@@ -800,8 +800,8 @@ begin //maybe increase buffer size by one?
|
||||
// memset(uint32(buffer), 0, sizeof(TBootRecord));
|
||||
// bootRecord:= PBootRecord(buffer);
|
||||
|
||||
buffer:= puint32(kalloc(2048));
|
||||
memset(uint32(buffer), 0, 2048);
|
||||
buffer:= puint32(kalloc(disk^.sectorSize));
|
||||
memset(uint32(buffer), 0, disk^.sectorSize);
|
||||
|
||||
bootRecord:= PBootRecord(buffer);
|
||||
|
||||
@@ -831,30 +831,48 @@ begin //maybe increase buffer size by one?
|
||||
fatStart:= start + 1 + bootRecord^.rsvSectors;
|
||||
dataStart:= fatStart + bootRecord^.FATSize;
|
||||
|
||||
zeroBuffer:= puint32(kalloc( disk^.sectorSize * 4 ));
|
||||
memset(uint32(zeroBuffer), 0, disk^.sectorSize * 4);
|
||||
zeroBuffer:= puint32(kalloc( disk^.sectorSize ));
|
||||
memset(uint32(zeroBuffer), 0, disk^.sectorSize );
|
||||
|
||||
while true do begin
|
||||
if i > FATSize DIV 4 then break;
|
||||
disk^.writecallback(disk, fatStart + i, 4, zeroBuffer);
|
||||
{while true do begin
|
||||
if i > FATSize then break;
|
||||
writestring('LOOP BEGIN: ');
|
||||
writeintln(i);
|
||||
writeintln(bootRecord^.rsvSectors);
|
||||
writeintln(start);
|
||||
writeintln(fatStart);
|
||||
writeintln(FATSize);
|
||||
console.redrawWindows;
|
||||
disk^.writecallback(disk, fatStart + i, 1, zeroBuffer);
|
||||
writestring('LOOP END: ');
|
||||
writeintln(i);
|
||||
console.redrawWindows;
|
||||
i+=1;
|
||||
end;
|
||||
end;}
|
||||
|
||||
kfree(buffer);
|
||||
kfree(zeroBuffer);
|
||||
writestring('Frees');
|
||||
console.redrawWindows;
|
||||
|
||||
buffer:= puint32(kalloc(disk^.sectorSize));
|
||||
memset(uint32(buffer), 0, disk^.sectorSize);
|
||||
|
||||
puint32(buffer)[0]:= $FFFFFFF8; //fsinfo
|
||||
puint32(buffer)[1]:= $FFFFFFF8; //root cluster
|
||||
writestring('Buffer Alloc');
|
||||
console.redrawWindows;
|
||||
|
||||
disk^.writecallback(disk, fatStart, 1, buffer);
|
||||
writestring('WriteCB1');
|
||||
console.redrawWindows;
|
||||
|
||||
kfree(buffer);
|
||||
|
||||
buffer:= puint32(kalloc(disk^.sectorsize));
|
||||
memset(uint32(buffer), 0, disk^.sectorsize);
|
||||
writestring('Buffer Alloc 2');
|
||||
console.redrawWindows;
|
||||
|
||||
PDirectory(buffer)[0].fileName := thisArray;
|
||||
PDirectory(buffer)[0].attributes := $08;
|
||||
@@ -865,8 +883,12 @@ begin //maybe increase buffer size by one?
|
||||
PDirectory(buffer)[1].clusterLow := 1;
|
||||
|
||||
disk^.writecallback(disk, dataStart + (config^ * rootCluster), 1, buffer);
|
||||
writestring('WriteCB2');
|
||||
console.redrawWindows;
|
||||
|
||||
kfree(buffer);
|
||||
writestring('Free');
|
||||
console.redrawWindows;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
+3
-1
@@ -44,7 +44,8 @@ uses
|
||||
vmlog,
|
||||
vm,
|
||||
vmstate,
|
||||
edit;
|
||||
edit,
|
||||
udpcat;
|
||||
|
||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||
|
||||
@@ -221,6 +222,7 @@ begin
|
||||
vmstate.init();
|
||||
tracer.push_trace('kmain.EDIT');
|
||||
edit.init();
|
||||
udpcat.init();
|
||||
terminal.run();
|
||||
|
||||
{ Init Splash }
|
||||
|
||||
Reference in New Issue
Block a user