@@ -71,6 +71,7 @@ export type WorkerEventResponseMsg =
71
71
data : void ;
72
72
} ;
73
73
74
+ const decoder = new TextDecoder ( ) ;
74
75
const parameters = new URLSearchParams ( location . search ) ;
75
76
const emulator = new V86 ( {
76
77
//Emulator binaries
@@ -148,24 +149,31 @@ const emulator = new V86({
148
149
//Loads bzimage and initrd from 9p filesystem
149
150
bzimage_initrd_from_filesystem : false ,
150
151
autostart : true ,
152
+ virtio_console : true ,
151
153
} ) ;
152
154
155
+ //@ts -ignore
156
+ self . emulator = emulator ;
157
+
153
158
let resetting = false ;
154
159
155
160
function sendTerminal ( message : string ) {
156
- for ( let i = 0 ; i < message . length ; i ++ ) {
157
- emulator . bus . send ( 'serial0-input' , message . charCodeAt ( i ) ) ;
158
- }
161
+ emulator . bus . send (
162
+ 'virtio-console0-input-bytes' ,
163
+ [ ...message ] . map ( ( x ) => x . charCodeAt ( 0 ) ) ,
164
+ ) ;
159
165
}
160
166
function sendScreen ( message : string ) {
161
- for ( let i = 0 ; i < message . length ; i ++ ) {
162
- emulator . bus . send ( 'serial1-input' , message . charCodeAt ( i ) ) ;
163
- }
167
+ emulator . bus . send (
168
+ 'virtio-console1-input-bytes' ,
169
+ [ ...message ] . map ( ( x ) => x . charCodeAt ( 0 ) ) ,
170
+ ) ;
164
171
}
165
172
function sendController ( message : string ) {
166
- for ( let i = 0 ; i < message . length ; i ++ ) {
167
- emulator . bus . send ( 'serial2-input' , message . charCodeAt ( i ) ) ;
168
- }
173
+ emulator . bus . send (
174
+ 'virtio-console2-input-bytes' ,
175
+ [ ...message ] . map ( ( x ) => x . charCodeAt ( 0 ) ) ,
176
+ ) ;
169
177
}
170
178
onmessage = ( { data : e } : MessageEvent < WorkerMsg > ) => {
171
179
switch ( e . command ) {
@@ -230,24 +238,21 @@ onmessage = ({ data: e }: MessageEvent<WorkerMsg>) => {
230
238
}
231
239
} ;
232
240
233
- emulator . add_listener ( 'serial0-output-byte' , ( byte : number ) => {
234
- if ( byte == 255 ) return ;
241
+ emulator . add_listener ( 'virtio-console0-output-bytes' , ( bytes : Uint8Array ) => {
235
242
postMessage ( {
236
243
event : 'receivedOutputConsole' ,
237
- data : [ String . fromCharCode ( byte ) ] ,
244
+ data : [ decoder . decode ( bytes ) ] ,
238
245
} ) ;
239
246
} ) ;
240
- emulator . add_listener ( 'serial1-output-byte' , ( byte : number ) => {
241
- if ( byte == 255 ) return ;
247
+ emulator . add_listener ( 'virtio-console1-output-bytes' , ( bytes : Uint8Array ) => {
242
248
postMessage ( {
243
249
event : 'receivedOutputScreen' ,
244
- data : [ String . fromCharCode ( byte ) ] ,
250
+ data : [ decoder . decode ( bytes ) ] ,
245
251
} ) ;
246
252
} ) ;
247
- emulator . add_listener ( 'serial2-output-byte' , ( byte : number ) => {
248
- if ( byte == 255 ) return ;
253
+ emulator . add_listener ( 'virtio-console2-output-bytes' , ( bytes : Uint8Array ) => {
249
254
postMessage ( {
250
255
event : 'receivedOutputController' ,
251
- data : [ String . fromCharCode ( byte ) ] ,
256
+ data : [ decoder . decode ( bytes ) ] ,
252
257
} ) ;
253
258
} ) ;
0 commit comments