Group DebugStub // Todo: Change these to a group level var var .DebugBPs dword[256] // 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() }