Cosmos/source/Cosmos.Debug.DebugStub/Init.xs
2014-11-26 01:13:58 +00:00

55 lines
1.3 KiB
Text

namespace DebugStub
var DebugBPs dword[256]
var MaxBPId
// Called before Kernel runs. Inits debug stub, etc
function Init {
Cls()
// Display message before even trying to init serial
DisplayWaitMsg()
InitSerial()
WaitForDbgHandshake()
Cls()
}
function WaitForSignature {
EBX = 0
while EBX != #Signature {
ComReadAL()
BL = AL
EBX ~> 8
}
}
// QEMU (and possibly others) send some garbage across the serial line first.
// Actually they send the garbage inbound, but garbage could be inbound as well so we
// keep this.
// To work around this we send a signature. DC then discards everything before the signature.
// QEMU has other serial issues too, and we dont support it anymore, but this signature is a good
// feature so we kept it.
function WaitForDbgHandshake {
// "Clear" the UART out
AL = 0
ComWriteAL()
// Cosmos.Debug.Consts.Consts.SerialSignature
+#Signature
ESI = ESP
ComWrite32()
// Restore ESP, we actually dont care about EAX or the value on the stack anymore.
-EAX
// We could use the signature as the start signal, but I prefer
// to keep the logic separate, especially in DC.
//
// Send the actual started signal
AL = #Ds2Vs_Started
ComWriteAL()
WaitForSignature()
ProcessCommandBatch()
}