Cosmos/source2/Compiler/Cosmos.Compiler.DebugStub/Init.xs
2012-07-12 05:41:27 +00:00

56 lines
1.4 KiB
Text

Group DebugStub
// Todo: Change these to a group level var
var .DebugBPs dword[256]
var .DebugWaitMsg = 'Waiting for debugger connection...'
// 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
Read:
ComReadAL()
BL = AL
EBX ~> 8
if EBX != #Signature goto Read
}
// 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()
}