@@ -489,14 +489,30 @@ uint16_t AsyncSocketSend::Init(uint16_t* cmdRec) {
489489 } else {
490490 SocketState& sock = NetSockets[m_socketHandle];
491491
492- uint32_t dosBuff = static_cast <uint32_t >(G_commandBuffer[2 ] << 4 ) +
493- G_commandBuffer[3 ];
494492 int size = cmdRec[4 ];
495493 LOG_MSG (" NetSendData data size: %d" , size);
496494
497495 char * buffer = new char [size + 1 ];
498- for (int i = 0 ; i < size; i++) {
499- buffer[i] = mem_readb (dosBuff + i);
496+
497+ if (G_protectedOpMode) {
498+ Descriptor desc;
499+ cpu.gdt .GetDescriptor (G_commandBuffer[2 ], desc);
500+
501+ uint32_t dosBuff = static_cast <uint32_t >(
502+ desc.GetBase ()) +
503+ G_commandBuffer[3 ];
504+ for (int i = 0 ; i < size; i++) {
505+ buffer[i] = mem_readb (dosBuff + i);
506+ }
507+
508+ } else {
509+
510+ uint32_t dosBuff = static_cast <uint32_t >(
511+ G_commandBuffer[2 ] << 4 ) +
512+ G_commandBuffer[3 ];
513+ for (int i = 0 ; i < size; i++) {
514+ buffer[i] = mem_readb (dosBuff + i);
515+ }
500516 }
501517 buffer[size] = 0 ;
502518
@@ -537,10 +553,24 @@ uint16_t AsyncSocketResolveAddr::Init(uint16_t* cmdRec)
537553 // si:bx = host name address
538554 // cx = address name len
539555 LOG_MSG (" \n AsyncSocketResolveAddr::Init: %x %x\n " , cmdRec[1 ], cmdRec[2 ]);
540- MEM_StrCopy (static_cast <uint32_t >(cmdRec[1 ] << 4 ) + cmdRec[2 ],
541- m_hostname,
542- cmdRec[3 ]); // 1024 toasts the
543- // stack
556+
557+ if (G_protectedOpMode) {
558+ Descriptor desc;
559+ cpu.gdt .GetDescriptor (cmdRec[1 ], desc);
560+ MEM_StrCopy (static_cast <uint32_t >(desc.GetBase ()) +
561+ cmdRec[2 ],
562+ m_hostname,
563+ cmdRec[3 ]); // 1024 toasts the
564+ // stack
565+ } else {
566+ MEM_StrCopy (static_cast <uint32_t >(
567+ cmdRec[1 ] << 4 ) +
568+ cmdRec[2 ],
569+ m_hostname,
570+ cmdRec[3 ]); // 1024 toasts the
571+ // stack
572+ }
573+
544574 m_hostname[cmdRec[3 ]] = 0 ;
545575
546576#ifdef USE_SDL3
@@ -1332,6 +1362,7 @@ static void write_baseboxcmd(io_port_t, io_val_t command, io_width_t)
13321362 G_responseOffset = 6 ;
13331363
13341364 } else if (G_commandBuffer[0 ] == HIF_SET_EVENT_INTERRUPT) {
1365+ G_protectedOpMode = cpu.pmode ;
13351366 G_eventInterrupt =
13361367 0xA0 /* G_commandBuffer[1] & 0xFF*/ ;
13371368 } else if (G_commandBuffer[0 ] == HIF_GET_VIDEO_PARAMS) {
@@ -1628,17 +1659,38 @@ static void write_baseboxcmd(io_port_t, io_val_t command, io_width_t)
16281659 LOG_MSG (" RECEIVENEXT: %x %x" ,
16291660 G_commandBuffer[2 ],
16301661 G_commandBuffer[3 ]);
1631- for (int i2 = 0 ;
1632- i2 < size;
1633- i2++) {
1634- mem_writeb (
1635- static_cast <uint32_t >(
1636- G_commandBuffer[2 ]
1637- << 4 ) +
1638- G_commandBuffer[3 ] +
1639- i2,
1640- NetSockets[i]
1641- .recvBuf [i2]);
1662+ if (G_protectedOpMode) {
1663+
1664+ Descriptor desc;
1665+ cpu.gdt .GetDescriptor (
1666+ G_commandBuffer[2 ],
1667+ desc);
1668+
1669+ for (int i2 = 0 ;
1670+ i2 < size;
1671+ i2++) {
1672+ mem_writeb (
1673+ static_cast <uint32_t >(desc.GetBase ()) +
1674+ G_commandBuffer[3 ] +
1675+ i2,
1676+ NetSockets[i]
1677+ .recvBuf [i2]);
1678+ }
1679+
1680+ } else {
1681+
1682+ for (int i2 = 0 ;
1683+ i2 < size;
1684+ i2++) {
1685+ mem_writeb (
1686+ static_cast <uint32_t >(
1687+ G_commandBuffer[2 ]
1688+ << 4 ) +
1689+ G_commandBuffer[3 ] +
1690+ i2,
1691+ NetSockets[i]
1692+ .recvBuf [i2]);
1693+ }
16421694 }
16431695
16441696 // mark unused,
0 commit comments