Subversion Repositories Kolibri OS

Rev

Rev 410 | Rev 542 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 410 Rev 485
Line 1... Line 1...
1
format binary
1
format binary
-
 
2
include '..\..\macros.inc'
2
use32
3
use32
3
	db	'MENUET01'
4
	db	'MENUET01'
4
	dd	1
5
	dd	1
5
	dd	start
6
	dd	start
6
	dd	i_end
7
	dd	i_end
Line 65... Line 66...
65
	call	put_message_nodraw
66
	call	put_message_nodraw
66
; set event mask - default events and debugging events
67
; set event mask - default events and debugging events
67
	push	40
68
	push	40
68
	pop	eax
69
	pop	eax
69
	mov	ebx, 0x107
70
	mov	ebx, 0x107
70
	int	40h
71
	mcall
71
; set debug messages buffer
72
; set debug messages buffer
72
	mov	ecx, dbgbufsize
73
	mov	ecx, dbgbufsize
73
	mov	dword [ecx], 256
74
	mov	dword [ecx], 256
74
	xor	ebx, ebx
75
	xor	ebx, ebx
75
	mov	[ecx+4], ebx
76
	mov	[ecx+4], ebx
76
	mov	al, 69
77
	mov	al, 69
77
	int	40h
78
	mcall
78
	mov	esi, i_param
79
	mov	esi, i_param
79
	call	skip_spaces
80
	call	skip_spaces
80
	test	al, al
81
	test	al, al
81
	jz	dodraw
82
	jz	dodraw
82
	push	esi
83
	push	esi
Line 87... Line 88...
87
dodraw:
88
dodraw:
88
	call	draw_window
89
	call	draw_window
89
waitevent:
90
waitevent:
90
	push	10
91
	push	10
91
	pop	eax
92
	pop	eax
92
	int	40h
93
	mcall
93
	cmp	al, 9
94
	cmp	al, 9
94
	jz	debugmsg
95
	jz	debugmsg
95
	dec	eax
96
	dec	eax
96
	jz	dodraw
97
	jz	dodraw
97
	dec	eax
98
	dec	eax
Line 99... Line 100...
99
	dec	eax
100
	dec	eax
100
	jnz	waitevent
101
	jnz	waitevent
101
; button pressed - we have only one button (close)
102
; button pressed - we have only one button (close)
102
	push	-1
103
	push	-1
103
	pop	eax
104
	pop	eax
104
	int	40h
105
	mcall
105
keypressed:
106
keypressed:
106
	mov	al, 2
107
	mov	al, 2
107
	int	40h
108
	mcall
108
	shr	eax, 8
109
	shr	eax, 8
109
	cmp	al, 8
110
	cmp	al, 8
110
	jz	.backspace
111
	jz	.backspace
111
	cmp	al, 0xB0
112
	cmp	al, 0xB0
112
	jz	.left
113
	jz	.left
Line 332... Line 333...
332
	add	ebx, cmdline_x_pos
333
	add	ebx, cmdline_x_pos
333
	shl	ebx, 16
334
	shl	ebx, 16
334
	or	ebx, ecx
335
	or	ebx, ecx
335
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
336
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
336
	mov	edx, 0xFFFFFF
337
	mov	edx, 0xFFFFFF
337
	int	40h
338
	mcall
338
	ret
339
	ret
Line 339... Line 340...
339
 
340
 
340
draw_cmdline:
341
draw_cmdline:
341
	xor	ebx, ebx
342
	xor	ebx, ebx
Line 351... Line 352...
351
	lea	edx, [cmdline+ebx]
352
	lea	edx, [cmdline+ebx]
352
	imul	ebx, 6
353
	imul	ebx, 6
353
	add	ebx, cmdline_x_pos
354
	add	ebx, cmdline_x_pos
354
	shl	ebx, 16
355
	shl	ebx, 16
355
	or	ebx, cmdline_y_pos+1
356
	or	ebx, cmdline_y_pos+1
356
	int	40h
357
	mcall
357
	ret
358
	ret
Line 358... Line 359...
358
 
359
 
359
put_message_nodraw:
360
put_message_nodraw:
360
; in: esi->ASCIZ message
361
; in: esi->ASCIZ message
Line 447... Line 448...
447
	push	13
448
	push	13
448
	pop	eax
449
	pop	eax
449
	mov	edx, 0xFFFFFF
450
	mov	edx, 0xFFFFFF
450
	mov	ebx, messages_x_pos*10000h+messages_x_size
451
	mov	ebx, messages_x_pos*10000h+messages_x_size
451
	mov	ecx, messages_y_pos*10000h+messages_y_size
452
	mov	ecx, messages_y_pos*10000h+messages_y_size
452
	int	40h
453
	mcall
453
	mov	edx, messages
454
	mov	edx, messages
454
	push	messages_width
455
	push	messages_width
455
	pop	esi
456
	pop	esi
456
	xor	ecx, ecx
457
	xor	ecx, ecx
457
	mov	al, 4
458
	mov	al, 4
458
	mov	ebx, messages_x_pos*10000h+messages_y_pos
459
	mov	ebx, messages_x_pos*10000h+messages_y_pos
459
@@:
460
@@:
460
	int	40h
461
	mcall
461
	add	edx, esi
462
	add	edx, esi
462
	add	ebx, 10
463
	add	ebx, 10
463
	cmp	edx, messages+messages_width*messages_height
464
	cmp	edx, messages+messages_width*messages_height
464
	jb	@b
465
	jb	@b
465
	ret
466
	ret
Line 473... Line 474...
473
	add	ebx, cmdline_x_pos
474
	add	ebx, cmdline_x_pos
474
	mov	edx, ebx
475
	mov	edx, ebx
475
	shl	ebx, 16
476
	shl	ebx, 16
476
	or	ebx, edx
477
	or	ebx, edx
477
	xor	edx, edx
478
	xor	edx, edx
478
	int	40h
479
	mcall
479
	ret
480
	ret
480
hide_cursor:
481
hide_cursor:
481
	mov	ebx, [cmdline_pos]
482
	mov	ebx, [cmdline_pos]
482
	push	13
483
	push	13
483
	pop	eax
484
	pop	eax
Line 485... Line 486...
485
	add	ebx, cmdline_x_pos
486
	add	ebx, cmdline_x_pos
486
	shl	ebx, 16
487
	shl	ebx, 16
487
	inc	ebx
488
	inc	ebx
488
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
489
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
489
	mov	edx, 0xFFFFFF
490
	mov	edx, 0xFFFFFF
490
	int	40h
491
	mcall
491
	mov	ebx, [cmdline_pos]
492
	mov	ebx, [cmdline_pos]
492
	cmp	ebx, [cmdline_len]
493
	cmp	ebx, [cmdline_len]
493
	jae	.ret
494
	jae	.ret
494
	mov	al, 4
495
	mov	al, 4
495
	xor	ecx, ecx
496
	xor	ecx, ecx
Line 498... Line 499...
498
	add	ebx, cmdline_x_pos
499
	add	ebx, cmdline_x_pos
499
	shl	ebx, 16
500
	shl	ebx, 16
500
	or	ebx, cmdline_y_pos+1
501
	or	ebx, cmdline_y_pos+1
501
	push	1
502
	push	1
502
	pop	esi
503
	pop	esi
503
	int	40h
504
	mcall
504
.ret:
505
.ret:
505
	ret
506
	ret
Line 506... Line 507...
506
 
507
 
507
redraw_title:
508
redraw_title:
508
	push	13
509
	push	13
509
	pop	eax
510
	pop	eax
510
	mov	edx, 0xFFFFFF
511
	mov	edx, 0xFFFFFF
511
	mov	ebx, title_x_pos*10000h + data_x_pos+data_x_size-title_x_pos
512
	mov	ebx, title_x_pos*10000h + data_x_pos+data_x_size-title_x_pos
512
	mov	ecx, title_y_pos*10000h + title_y_size
513
	mov	ecx, title_y_pos*10000h + title_y_size
513
	int	40h
514
	mcall
514
draw_title:
515
draw_title:
515
	mov	al, 38
516
	mov	al, 38
516
	mov	ebx, (data_x_pos-2)*10000h + title_x_pos-5
517
	mov	ebx, (data_x_pos-2)*10000h + title_x_pos-5
517
	mov	ecx, (title_y_pos+5)*10001h
518
	mov	ecx, (title_y_pos+5)*10001h
518
	xor	edx, edx
519
	xor	edx, edx
519
	int	40h
520
	mcall
520
	push	NoPrgLoaded_len
521
	push	NoPrgLoaded_len
521
	pop	esi
522
	pop	esi
522
	cmp	[debuggee_pid], 0
523
	cmp	[debuggee_pid], 0
523
	jz	@f
524
	jz	@f
Line 528... Line 529...
528
	mov	bx, data_x_pos+data_x_size-10-5-6*7
529
	mov	bx, data_x_pos+data_x_size-10-5-6*7
529
	cmp	[bSuspended], 0
530
	cmp	[bSuspended], 0
530
	jz	@f
531
	jz	@f
531
	add	ebx, 6
532
	add	ebx, 6
532
@@:
533
@@:
533
	int	40h
534
	mcall
534
	mov	ebx, (data_x_pos+data_x_size-10+4)*0x10000 + data_x_pos+data_x_size+2
535
	mov	ebx, (data_x_pos+data_x_size-10+4)*0x10000 + data_x_pos+data_x_size+2
535
	int	40h
536
	mcall
536
	mov	al, 4
537
	mov	al, 4
537
	mov	ebx, title_x_pos*10000h+title_y_pos
538
	mov	ebx, title_x_pos*10000h+title_y_pos
538
	xor	ecx, ecx
539
	xor	ecx, ecx
539
	mov	edx, NoPrgLoaded_str
540
	mov	edx, NoPrgLoaded_str
540
	cmp	[debuggee_pid], 0
541
	cmp	[debuggee_pid], 0
541
	jz	@f
542
	jz	@f
542
	mov	edx, [prgname_ptr]
543
	mov	edx, [prgname_ptr]
543
@@:
544
@@:
544
	int	40h
545
	mcall
545
	cmp	[debuggee_pid], 0
546
	cmp	[debuggee_pid], 0
546
	jz	.nodebuggee
547
	jz	.nodebuggee
547
	mov	ebx, (data_x_pos+data_x_size-10-6*7)*10000h + title_y_pos
548
	mov	ebx, (data_x_pos+data_x_size-10-6*7)*10000h + title_y_pos
548
	mov	edx, aRunning
549
	mov	edx, aRunning
549
	push	7
550
	push	7
Line 552... Line 553...
552
	jz	@f
553
	jz	@f
553
	add	ebx, 6*10000h
554
	add	ebx, 6*10000h
554
	mov	edx, aPaused
555
	mov	edx, aPaused
555
	dec	esi
556
	dec	esi
556
@@:
557
@@:
557
	int	40h
558
	mcall
558
	ret
559
	ret
559
.nodebuggee:
560
.nodebuggee:
560
	mov	al, 38
561
	mov	al, 38
561
	mov	ebx, (data_x_pos+data_x_size-10-6*7-5)*0x10000 + data_x_pos+data_x_size+2
562
	mov	ebx, (data_x_pos+data_x_size-10-6*7-5)*0x10000 + data_x_pos+data_x_size+2
562
	mov	ecx, (title_y_pos+5)*10001h
563
	mov	ecx, (title_y_pos+5)*10001h
Line 582... Line 583...
582
	jz	.cd
583
	jz	.cd
583
	mov	ecx, 0x00AA00
584
	mov	ecx, 0x00AA00
584
.cd:
585
.cd:
585
	push	4
586
	push	4
586
	pop	eax
587
	pop	eax
587
	int	40h
588
	mcall
588
	imul	esi, 60000h
589
	imul	esi, 60000h
589
	lea	edx, [ebx+esi]
590
	lea	edx, [ebx+esi]
590
	mov	al, 47
591
	mov	al, 47
591
	mov	ebx, 80101h
592
	mov	ebx, 80101h
592
	mov	esi, ecx
593
	mov	esi, ecx
593
	pop	ecx
594
	pop	ecx
594
	int	40h
595
	mcall
595
	lea	ebx, [edx+60000h*18]
596
	lea	ebx, [edx+60000h*18]
596
	mov	esi, ecx
597
	mov	esi, ecx
597
	pop	ecx
598
	pop	ecx
598
	pop	edx
599
	pop	edx
599
	add	edx, ecx
600
	add	edx, ecx
Line 620... Line 621...
620
	test	ah, 3
621
	test	ah, 3
621
	jp	.doit
622
	jp	.doit
622
	mov	ecx, 0x00AA00
623
	mov	ecx, 0x00AA00
623
.doit:
624
.doit:
624
	mov	ah, 0
625
	mov	ah, 0
625
	int	40h
626
	mcall
626
	ret
627
	ret
Line 627... Line 628...
627
 
628
 
628
redraw_registers:
629
redraw_registers:
629
	push	13
630
	push	13
630
	pop	eax
631
	pop	eax
631
	mov	edx, 0xFFFFFF
632
	mov	edx, 0xFFFFFF
632
	mov	ebx, data_x_pos*10000h + data_x_size
633
	mov	ebx, data_x_pos*10000h + data_x_size
633
	mov	ecx, registers_y_pos*10000h + registers_y_size
634
	mov	ecx, registers_y_pos*10000h + registers_y_size
634
	int	40h
635
	mcall
635
draw_registers:
636
draw_registers:
636
	mov	esi, _eax
637
	mov	esi, _eax
637
	push	4
638
	push	4
638
	pop	ecx
639
	pop	ecx
Line 670... Line 671...
670
@@:
671
@@:
671
	mov	edx, aColon
672
	mov	edx, aColon
672
	xor	esi, esi
673
	xor	esi, esi
673
	inc	esi
674
	inc	esi
674
	mov	ebx, (registers_x_pos+37*6)*10000h + registers_y_pos+20
675
	mov	ebx, (registers_x_pos+37*6)*10000h + registers_y_pos+20
675
	int	40h
676
	mcall
676
	mov	edx, flags
677
	mov	edx, flags
677
@@:
678
@@:
678
	add	ebx, 2*6*10000h
679
	add	ebx, 2*6*10000h
679
	call	draw_flag
680
	call	draw_flag
680
	inc	edx
681
	inc	edx
Line 686... Line 687...
686
	push	13
687
	push	13
687
	pop	eax
688
	pop	eax
688
	mov	edx, 0xFFFFFF
689
	mov	edx, 0xFFFFFF
689
	mov	ebx, data_x_pos*10000h + data_x_size
690
	mov	ebx, data_x_pos*10000h + data_x_size
690
	mov	ecx, dump_y_pos*10000h + dump_y_size
691
	mov	ecx, dump_y_pos*10000h + dump_y_size
691
	int	40h
692
	mcall
692
draw_dump:
693
draw_dump:
693
; addresses
694
; addresses
694
	mov	al, 47
695
	mov	al, 47
695
	mov	ebx, 80100h
696
	mov	ebx, 80100h
696
	mov	edx, data_x_pos*10000h + dump_y_pos
697
	mov	edx, data_x_pos*10000h + dump_y_pos
Line 700... Line 701...
700
	jz	@f
701
	jz	@f
701
	cmp	[bSuspended], 0
702
	cmp	[bSuspended], 0
702
	jz	@f
703
	jz	@f
703
	xor	esi, esi
704
	xor	esi, esi
704
@@:
705
@@:
705
	int	40h
706
	mcall
706
	add	ecx, 10h
707
	add	ecx, 10h
707
	add	edx, 10
708
	add	edx, 10
708
	cmp	dl, dump_y_pos + dump_y_size
709
	cmp	dl, dump_y_pos + dump_y_size
709
	jb	@b
710
	jb	@b
710
; hex dump of data
711
; hex dump of data
Line 714... Line 715...
714
	xor	edi, edi
715
	xor	edi, edi
715
	mov	edx, (data_x_pos+12*6)*10000h + dump_y_pos
716
	mov	edx, (data_x_pos+12*6)*10000h + dump_y_pos
716
	cmp	[dumpread], edi
717
	cmp	[dumpread], edi
717
	jz	.hexdumpdone1
718
	jz	.hexdumpdone1
718
.hexdumploop1:
719
.hexdumploop1:
719
	int	40h
720
	mcall
720
	add	edx, 3*6*10000h
721
	add	edx, 3*6*10000h
721
	inc	ecx
722
	inc	ecx
722
	inc	edi
723
	inc	edi
723
	test	edi, 15
724
	test	edi, 15
724
	jz	.16
725
	jz	.16
Line 738... Line 739...
738
	pop	esi
739
	pop	esi
739
	mov	edx, aQuests
740
	mov	edx, aQuests
740
.hexdumploop2:
741
.hexdumploop2:
741
	cmp	edi, dump_height*10h
742
	cmp	edi, dump_height*10h
742
	jae	.hexdumpdone2
743
	jae	.hexdumpdone2
743
	int	40h
744
	mcall
744
	add	ebx, 3*6*10000h
745
	add	ebx, 3*6*10000h
745
	inc	edi
746
	inc	edi
746
	test	edi, 15
747
	test	edi, 15
747
	jz	.16x
748
	jz	.16x
748
	test	edi, 7
749
	test	edi, 7
Line 755... Line 756...
755
	dec	esi
756
	dec	esi
756
; colon, minus signs
757
; colon, minus signs
757
	mov	ebx, (data_x_pos+8*6)*10000h + dump_y_pos
758
	mov	ebx, (data_x_pos+8*6)*10000h + dump_y_pos
758
	mov	edx, aColon
759
	mov	edx, aColon
759
@@:
760
@@:
760
	int	40h
761
	mcall
761
	add	ebx, 10
762
	add	ebx, 10
762
	cmp	bl, dump_y_pos+dump_height*10
763
	cmp	bl, dump_y_pos+dump_height*10
763
	jb	@b
764
	jb	@b
764
	mov	ebx, (data_x_pos+(12+3*8)*6)*10000h + dump_y_pos
765
	mov	ebx, (data_x_pos+(12+3*8)*6)*10000h + dump_y_pos
765
	mov	edx, aMinus
766
	mov	edx, aMinus
766
@@:
767
@@:
767
	int	40h
768
	mcall
768
	add	ebx, 10
769
	add	ebx, 10
769
	cmp	bl, dump_y_pos+dump_height*10
770
	cmp	bl, dump_y_pos+dump_height*10
770
	jb	@b
771
	jb	@b
771
; ASCII data
772
; ASCII data
772
	mov	ebx, (data_x_pos+(12+3*10h+2+2)*6)*10000h + dump_y_pos
773
	mov	ebx, (data_x_pos+(12+3*10h+2+2)*6)*10000h + dump_y_pos
Line 776... Line 777...
776
	push	edx
777
	push	edx
777
	cmp	byte [edx], 20h
778
	cmp	byte [edx], 20h
778
	jae	@f
779
	jae	@f
779
	mov	edx, aPoint
780
	mov	edx, aPoint
780
@@:
781
@@:
781
	int	40h
782
	mcall
782
	pop	edx
783
	pop	edx
783
	inc	edx
784
	inc	edx
784
	add	ebx, 6*10000h
785
	add	ebx, 6*10000h
785
	dec	edi
786
	dec	edi
786
	jz	.asciidone
787
	jz	.asciidone
Line 795... Line 796...
795
	push	13
796
	push	13
796
	pop	eax
797
	pop	eax
797
	mov	edx, 0xFFFFFF
798
	mov	edx, 0xFFFFFF
798
	mov	ebx, data_x_pos*10000h + data_x_size
799
	mov	ebx, data_x_pos*10000h + data_x_size
799
	mov	ecx, (disasm_y_pos-1)*10000h + (disasm_y_size+1)
800
	mov	ecx, (disasm_y_pos-1)*10000h + (disasm_y_size+1)
800
	int	40h
801
	mcall
801
draw_disasm:
802
draw_disasm:
802
	mov	eax, [disasm_start_pos]
803
	mov	eax, [disasm_start_pos]
803
	mov	[disasm_cur_pos], eax
804
	mov	[disasm_cur_pos], eax
804
	and	[disasm_cur_str], 0
805
	and	[disasm_cur_str], 0
805
.loop:
806
.loop:
Line 818... Line 819...
818
	popad
819
	popad
819
	jnz	.nored
820
	jnz	.nored
820
	push	13
821
	push	13
821
	pop	eax
822
	pop	eax
822
	mov	edx, 0xFF0000
823
	mov	edx, 0xFF0000
823
	int	40h
824
	mcall
824
.nored:
825
.nored:
825
	mov	eax, [_eip]
826
	mov	eax, [_eip]
826
	cmp	eax, ebp
827
	cmp	eax, ebp
827
	jnz	.noblue
828
	jnz	.noblue
828
	push	13
829
	push	13
829
	pop	eax
830
	pop	eax
830
	mov	edx, 0x0000FF
831
	mov	edx, 0x0000FF
831
	int	40h
832
	mcall
832
	mov	esi, 0xFFFFFF	; on blue bgr, use white color
833
	mov	esi, 0xFFFFFF	; on blue bgr, use white color
833
.noblue:
834
.noblue:
834
	push	47
835
	push	47
835
	pop	eax
836
	pop	eax
836
	mov	ebx, 80100h
837
	mov	ebx, 80100h
837
	mov	edx, [disasm_cur_str]
838
	mov	edx, [disasm_cur_str]
838
	imul	edx, 10
839
	imul	edx, 10
839
	add	edx, data_x_pos*10000h + disasm_y_pos
840
	add	edx, data_x_pos*10000h + disasm_y_pos
840
	mov	ecx, ebp
841
	mov	ecx, ebp
841
	int	40h
842
	mcall
842
	mov	al, 4
843
	mov	al, 4
843
	lea	ebx, [edx+8*6*10000h]
844
	lea	ebx, [edx+8*6*10000h]
844
	mov	ecx, esi
845
	mov	ecx, esi
845
	push	1
846
	push	1
846
	pop	esi
847
	pop	esi
847
	mov	edx, aColon
848
	mov	edx, aColon
848
	int	40h
849
	mcall
849
	push	9
850
	push	9
850
	pop	edi
851
	pop	edi
851
	lea	edx, [ebx+2*6*10000h]
852
	lea	edx, [ebx+2*6*10000h]
852
	mov	esi, ecx
853
	mov	esi, ecx
853
	mov	al, 47
854
	mov	al, 47
854
	mov	ebx, 20101h
855
	mov	ebx, 20101h
855
	mov	ecx, ebp
856
	mov	ecx, ebp
856
	sub	ecx, [disasm_start_pos]
857
	sub	ecx, [disasm_start_pos]
857
	add	ecx, disasm_buffer
858
	add	ecx, disasm_buffer
858
.drawhex:
859
.drawhex:
859
	int	40h
860
	mcall
860
	add	edx, 6*3*10000h
861
	add	edx, 6*3*10000h
861
	inc	ecx
862
	inc	ecx
862
	inc	ebp
863
	inc	ebp
863
	cmp	ebp, [disasm_cur_pos]
864
	cmp	ebp, [disasm_cur_pos]
864
	jae	.hexdone
865
	jae	.hexdone
Line 874... Line 875...
874
	lea	ebx, [edx-6*10000h]
875
	lea	ebx, [edx-6*10000h]
875
	mov	ecx, esi
876
	mov	ecx, esi
876
	push	3
877
	push	3
877
	pop	esi
878
	pop	esi
878
	mov	edx, aDots
879
	mov	edx, aDots
879
	int	40h
880
	mcall
880
	mov	esi, ecx
881
	mov	esi, ecx
881
.hexdone:
882
.hexdone:
882
	xor	eax, eax
883
	xor	eax, eax
883
	mov	edi, disasm_string
884
	mov	edi, disasm_string
884
	mov	edx, edi
885
	mov	edx, edi
Line 889... Line 890...
889
	xchg	ecx, esi
890
	xchg	ecx, esi
890
	mov	ebx, [disasm_cur_str]
891
	mov	ebx, [disasm_cur_str]
891
	imul	ebx, 10
892
	imul	ebx, 10
892
	add	ebx, (data_x_pos+6*40)*10000h+disasm_y_pos
893
	add	ebx, (data_x_pos+6*40)*10000h+disasm_y_pos
893
	mov	al, 4
894
	mov	al, 4
894
	int	40h
895
	mcall
895
	inc	[disasm_cur_str]
896
	inc	[disasm_cur_str]
896
	cmp	[disasm_cur_str], disasm_height
897
	cmp	[disasm_cur_str], disasm_height
897
	jb	.loop
898
	jb	.loop
898
.loopend:
899
.loopend:
899
	ret
900
	ret
Line 925... Line 926...
925
	pop	ebx
926
	pop	ebx
926
	mov	ecx, [debuggee_pid]
927
	mov	ecx, [debuggee_pid]
927
	mov	edi, disasm_buffer
928
	mov	edi, disasm_buffer
928
	mov	edx, 256
929
	mov	edx, 256
929
	mov	esi, [disasm_start_pos]
930
	mov	esi, [disasm_start_pos]
930
	int	40h
931
	mcall
931
	cmp	eax, -1
932
	cmp	eax, -1
932
	jnz	@f
933
	jnz	@f
933
	mov	esi, read_mem_err
934
	mov	esi, read_mem_err
934
	call	put_message
935
	call	put_message
935
.no:
936
.no:
Line 943... Line 944...
943
; start redraw
944
; start redraw
944
	push	12
945
	push	12
945
	pop	eax
946
	pop	eax
946
	push	1
947
	push	1
947
	pop	ebx
948
	pop	ebx
948
	int	40h
949
	mcall
949
; define window
950
; define window
950
	xor	eax, eax
951
	xor	eax, eax
951
	mov	ebx, wnd_x_size
952
	mov	ebx, wnd_x_size
952
	mov	ecx, wnd_y_size
953
	mov	ecx, wnd_y_size
953
	mov	edx, 3FFFFFFh
954
	mov	edx, 3FFFFFFh
954
	int	40h
955
	mcall
955
; caption
956
; caption
956
	mov	al, 4
957
	mov	al, 4
957
	mov	ecx, 0xFFFFFF
958
	mov	ecx, 0xFFFFFF
958
	mov	ebx, 80008h
959
	mov	ebx, 80008h
959
	mov	edx, caption_str
960
	mov	edx, caption_str
960
	push	caption_len
961
	push	caption_len
961
	pop	esi
962
	pop	esi
962
	int	40h
963
	mcall
963
; messages frame
964
; messages frame
964
	mov	al, 38
965
	mov	al, 38
965
	mov	ebx, (messages_x_pos-2)*10000h + (messages_x_pos+messages_x_size+2)
966
	mov	ebx, (messages_x_pos-2)*10000h + (messages_x_pos+messages_x_size+2)
966
	push	ebx
967
	push	ebx
967
	mov	ecx, (messages_y_pos-2)*10001h
968
	mov	ecx, (messages_y_pos-2)*10001h
968
	xor	edx, edx
969
	xor	edx, edx
969
	int	40h
970
	mcall
970
	mov	ecx, (messages_y_pos+messages_y_size+2)*10001h
971
	mov	ecx, (messages_y_pos+messages_y_size+2)*10001h
971
	int	40h
972
	mcall
972
	mov	ebx, (messages_x_pos-2)*10001h
973
	mov	ebx, (messages_x_pos-2)*10001h
973
	push	ebx
974
	push	ebx
974
	mov	ecx, (messages_y_pos-2)*10000h + (messages_y_pos+messages_y_size+2)
975
	mov	ecx, (messages_y_pos-2)*10000h + (messages_y_pos+messages_y_size+2)
975
	int	40h
976
	mcall
976
	mov	ebx, (messages_x_pos+messages_x_size+2)*10001h
977
	mov	ebx, (messages_x_pos+messages_x_size+2)*10001h
977
	push	ebx
978
	push	ebx
978
	int	40h
979
	mcall
979
; command line frame
980
; command line frame
980
	mov	ecx, (cmdline_y_pos-2)*10000h + (cmdline_y_pos+cmdline_y_size+2)
981
	mov	ecx, (cmdline_y_pos-2)*10000h + (cmdline_y_pos+cmdline_y_size+2)
981
	pop	ebx
982
	pop	ebx
982
	int	40h
983
	mcall
983
	pop	ebx
984
	pop	ebx
984
	int	40h
985
	mcall
985
	pop	ebx
986
	pop	ebx
986
	mov	ecx, (cmdline_y_pos+cmdline_y_size+2)*10001h
987
	mov	ecx, (cmdline_y_pos+cmdline_y_size+2)*10001h
987
	int	40h
988
	mcall
988
	mov	ecx, (cmdline_y_pos-2)*10001h
989
	mov	ecx, (cmdline_y_pos-2)*10001h
989
	int	40h
990
	mcall
990
; messages
991
; messages
991
	call	draw_messages
992
	call	draw_messages
992
; command line & cursor
993
; command line & cursor
993
	call	draw_cmdline
994
	call	draw_cmdline
994
	call	draw_cursor
995
	call	draw_cursor
995
; title & registers & dump & disasm
996
; title & registers & dump & disasm
996
	mov	al, 38
997
	mov	al, 38
997
	mov	ebx, (data_x_pos-2)*10001h
998
	mov	ebx, (data_x_pos-2)*10001h
998
	mov	ecx, (title_y_pos+5)*10000h + (messages_y_pos-2)
999
	mov	ecx, (title_y_pos+5)*10000h + (messages_y_pos-2)
999
	int	40h
1000
	mcall
1000
	mov	ebx, (data_x_pos+data_x_size+2)*10001h
1001
	mov	ebx, (data_x_pos+data_x_size+2)*10001h
1001
	int	40h
1002
	mcall
1002
	mov	ebx, (data_x_pos-2)*10000h + (data_x_pos+data_x_size+2)
1003
	mov	ebx, (data_x_pos-2)*10000h + (data_x_pos+data_x_size+2)
1003
	mov	ecx, (dump_y_pos-3)*10001h
1004
	mov	ecx, (dump_y_pos-3)*10001h
1004
	int	40h
1005
	mcall
1005
	mov	ecx, (disasm_y_pos-4)*10001h
1006
	mov	ecx, (disasm_y_pos-4)*10001h
1006
	int	40h
1007
	mcall
1007
	call	draw_title
1008
	call	draw_title
1008
	call	draw_registers
1009
	call	draw_registers
1009
	call	draw_dump
1010
	call	draw_dump
1010
	call	draw_disasm
1011
	call	draw_disasm
1011
; end redraw
1012
; end redraw
1012
	mov	al, 12
1013
	mov	al, 12
1013
	push	2
1014
	push	2
1014
	pop	ebx
1015
	pop	ebx
1015
	int	40h
1016
	mcall
1016
	ret
1017
	ret
Line 1017... Line 1018...
1017
 
1018
 
1018
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1019
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1019
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1020
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 1035... Line 1036...
1035
	jmp	.x
1036
	jmp	.x
Line 1036... Line 1037...
1036
 
1037
 
1037
OnQuit:
1038
OnQuit:
1038
	xor	eax, eax
1039
	xor	eax, eax
1039
	dec	eax
1040
	dec	eax
Line 1040... Line 1041...
1040
	int	40h
1041
	mcall
1041
 
1042
 
1042
get_new_context:
1043
get_new_context:
1043
	mov	esi, context
1044
	mov	esi, context
Line 1051... Line 1052...
1051
	pop	eax
1052
	pop	eax
1052
	mov	ecx, [debuggee_pid]
1053
	mov	ecx, [debuggee_pid]
1053
	mov	esi, context
1054
	mov	esi, context
1054
	push	28h
1055
	push	28h
1055
	pop	edx
1056
	pop	edx
1056
	int	40h
1057
	mcall
1057
	ret
1058
	ret
1058
set_context:
1059
set_context:
1059
	push	2
1060
	push	2
1060
	pop	ebx
1061
	pop	ebx
1061
	push	69
1062
	push	69
1062
	pop	eax
1063
	pop	eax
1063
	mov	ecx, [debuggee_pid]
1064
	mov	ecx, [debuggee_pid]
1064
	mov	esi, context
1065
	mov	esi, context
1065
	push	28h
1066
	push	28h
1066
	pop	edx
1067
	pop	edx
1067
	int	40h
1068
	mcall
1068
	ret
1069
	ret
Line 1069... Line 1070...
1069
 
1070
 
1070
get_dump:
1071
get_dump:
1071
	mov	edi, dumpdata
1072
	mov	edi, dumpdata
Line 1078... Line 1079...
1078
	pop	edi
1079
	pop	edi
1079
	mov	ecx, [debuggee_pid]
1080
	mov	ecx, [debuggee_pid]
1080
	mov	al, 69
1081
	mov	al, 69
1081
	push	6
1082
	push	6
1082
	pop	ebx
1083
	pop	ebx
1083
	int	40h
1084
	mcall
1084
	cmp	eax, -1
1085
	cmp	eax, -1
1085
	jnz	@f
1086
	jnz	@f
1086
	mov	esi, read_mem_err
1087
	mov	esi, read_mem_err
1087
	call	put_message
1088
	call	put_message
1088
	xor	eax, eax
1089
	xor	eax, eax
Line 1139... Line 1140...
1139
do_reload:
1140
do_reload:
1140
	push	18
1141
	push	18
1141
	pop	eax
1142
	pop	eax
1142
	push	7
1143
	push	7
1143
	pop	ebx
1144
	pop	ebx
1144
	int	40h
1145
	mcall
1145
	mov	[dbgwnd], eax
1146
	mov	[dbgwnd], eax
1146
	xchg	ecx, eax
1147
	xchg	ecx, eax
1147
	push	70
1148
	push	70
1148
	pop	eax
1149
	pop	eax
1149
	mov	ebx, fn70_load_block
1150
	mov	ebx, fn70_load_block
1150
	int	40h
1151
	mcall
1151
	test	eax, eax
1152
	test	eax, eax
1152
	jns	.load_ok
1153
	jns	.load_ok
1153
.load_err:
1154
.load_err:
1154
	push	eax
1155
	push	eax
1155
	mov	esi, load_err_msg
1156
	mov	esi, load_err_msg
Line 1178... Line 1179...
1178
; activate debugger window
1179
; activate debugger window
1179
	pop	ecx
1180
	pop	ecx
1180
	mov	bl, 3
1181
	mov	bl, 3
1181
	push	18
1182
	push	18
1182
	pop	eax
1183
	pop	eax
1183
	int	40h
1184
	mcall
1184
	call	redraw_title
1185
	call	redraw_title
1185
	call	redraw_registers
1186
	call	redraw_registers
1186
	call	get_dump
1187
	call	get_dump
1187
	call	redraw_dump
1188
	call	redraw_dump
1188
	call	update_disasm_eip_force
1189
	call	update_disasm_eip_force
Line 1271... Line 1272...
1271
	call	hide_cursor
1272
	call	hide_cursor
1272
	push	40
1273
	push	40
1273
	pop	eax
1274
	pop	eax
1274
	push	7
1275
	push	7
1275
	pop	ebx
1276
	pop	ebx
1276
	int	40h
1277
	mcall
1277
.wait:
1278
.wait:
1278
	push	10
1279
	push	10
1279
	pop	eax
1280
	pop	eax
1280
	int	40h
1281
	mcall
1281
	dec	eax
1282
	dec	eax
1282
	jz	.redraw
1283
	jz	.redraw
1283
	dec	eax
1284
	dec	eax
1284
	jz	.key
1285
	jz	.key
1285
	or	eax, -1
1286
	or	eax, -1
1286
	int	40h
1287
	mcall
1287
.redraw:
1288
.redraw:
1288
	call	draw_window
1289
	call	draw_window
1289
	call	hide_cursor
1290
	call	hide_cursor
1290
	jmp	.wait
1291
	jmp	.wait
1291
.key:
1292
.key:
1292
	mov	al, 2
1293
	mov	al, 2
1293
	int	40h
1294
	mcall
1294
	cmp	ah, 'y'
1295
	cmp	ah, 'y'
1295
	jz	.yes
1296
	jz	.yes
1296
	cmp	ah, 'Y'
1297
	cmp	ah, 'Y'
1297
	jz	.yes
1298
	jz	.yes
1298
	cmp	ah, 0xD
1299
	cmp	ah, 0xD
Line 1303... Line 1304...
1303
	jnz	.wait
1304
	jnz	.wait
1304
.no:
1305
.no:
1305
	push	40
1306
	push	40
1306
	pop	eax
1307
	pop	eax
1307
	mov	ebx, 0x107
1308
	mov	ebx, 0x107
1308
	int	40h
1309
	mcall
1309
	call	draw_cursor
1310
	call	draw_cursor
1310
	mov	esi, aN_str
1311
	mov	esi, aN_str
1311
	jmp	put_message
1312
	jmp	put_message
1312
.yes:
1313
.yes:
1313
	push	40
1314
	push	40
1314
	pop	eax
1315
	pop	eax
1315
	mov	ebx, 0x107
1316
	mov	ebx, 0x107
1316
	int	40h
1317
	mcall
1317
	call	draw_cursor
1318
	call	draw_cursor
1318
	mov	esi, aY_str
1319
	mov	esi, aY_str
1319
	call	put_message
1320
	call	put_message
1320
	call	OnUnpack
1321
	call	OnUnpack
1321
	ret
1322
	ret
Line 1400... Line 1401...
1400
	mov	ecx, [debuggee_pid]
1401
	mov	ecx, [debuggee_pid]
1401
	push	8
1402
	push	8
1402
	pop	ebx
1403
	pop	ebx
1403
	push	69
1404
	push	69
1404
	pop	eax
1405
	pop	eax
1405
	int	40h
1406
	mcall
1406
	ret
1407
	ret
Line 1407... Line 1408...
1407
 
1408
 
1408
AfterSuspend:
1409
AfterSuspend:
1409
	mov	[bSuspended], 1
1410
	mov	[bSuspended], 1
Line 1419... Line 1420...
1419
	mov	ecx, [debuggee_pid]
1420
	mov	ecx, [debuggee_pid]
1420
	push	4
1421
	push	4
1421
	pop	ebx
1422
	pop	ebx
1422
	push	69
1423
	push	69
1423
	pop	eax
1424
	pop	eax
1424
	int	40h
1425
	mcall
1425
	call	AfterSuspend
1426
	call	AfterSuspend
1426
	mov	esi, aSuspended
1427
	mov	esi, aSuspended
1427
	jmp	put_message
1428
	jmp	put_message
1428
DoResume:
1429
DoResume:
1429
	mov	ecx, [debuggee_pid]
1430
	mov	ecx, [debuggee_pid]
1430
	push	5
1431
	push	5
1431
	pop	ebx
1432
	pop	ebx
1432
	push	69
1433
	push	69
1433
	pop	eax
1434
	pop	eax
1434
	int	40h
1435
	mcall
1435
	mov	[bSuspended], 0
1436
	mov	[bSuspended], 0
1436
	ret
1437
	ret
1437
OnResume:
1438
OnResume:
1438
	mov	esi, [curarg]
1439
	mov	esi, [curarg]
1439
	cmp	byte [esi], 0
1440
	cmp	byte [esi], 0
Line 1479... Line 1480...
1479
	mov	ecx, [debuggee_pid]
1480
	mov	ecx, [debuggee_pid]
1480
	push	3
1481
	push	3
1481
	pop	ebx
1482
	pop	ebx
1482
	push	69
1483
	push	69
1483
	pop	eax
1484
	pop	eax
1484
	int	40h
1485
	mcall
1485
	and	[debuggee_pid], 0
1486
	and	[debuggee_pid], 0
1486
	call	redraw_title
1487
	call	redraw_title
1487
	call	redraw_registers
1488
	call	redraw_registers
1488
	call	redraw_dump
1489
	call	redraw_dump
1489
	mov	esi, aContinued
1490
	mov	esi, aContinued
Line 1618... Line 1619...
1618
	mov	ecx, [debuggee_pid]
1619
	mov	ecx, [debuggee_pid]
1619
	mov	edi, esp
1620
	mov	edi, esp
1620
	mov	esi, [_eip]
1621
	mov	esi, [_eip]
1621
	push	1
1622
	push	1
1622
	pop	edx
1623
	pop	edx
1623
	int	40h
1624
	mcall
1624
	pop	eax
1625
	pop	eax
1625
	cmp	al, 0xCC
1626
	cmp	al, 0xCC
1626
	jnz	.notdbg
1627
	jnz	.notdbg
1627
; this is either dbg breakpoint or int3 cmd in debuggee
1628
; this is either dbg breakpoint or int3 cmd in debuggee
1628
	mov	eax, [_eip]
1629
	mov	eax, [_eip]
Line 1655... Line 1656...
1655
	push	18
1656
	push	18
1656
	pop	eax
1657
	pop	eax
1657
	push	3
1658
	push	3
1658
	pop	ebx
1659
	pop	ebx
1659
	mov	ecx, [dbgwnd]
1660
	mov	ecx, [dbgwnd]
1660
	int	40h	; activate dbg window
1661
	mcall	; activate dbg window
1661
	call	redraw_title
1662
	call	redraw_title
1662
	call	redraw_registers
1663
	call	redraw_registers
1663
	call	redraw_dump
1664
	call	redraw_dump
1664
	call	update_disasm_eip
1665
	call	update_disasm_eip
1665
dbgmsgend:
1666
dbgmsgend:
Line 1711... Line 1712...
1711
	mov	ecx, [debuggee_pid]
1712
	mov	ecx, [debuggee_pid]
1712
	push	3
1713
	push	3
1713
	pop	edx
1714
	pop	edx
1714
	mov	edi, esp
1715
	mov	edi, esp
1715
	mov	esi, [_eip]
1716
	mov	esi, [_eip]
1716
	int	40h
1717
	mcall
1717
	cmp	eax, edx
1718
	cmp	eax, edx
1718
	pop	eax
1719
	pop	eax
1719
	jnz	.doit
1720
	jnz	.doit
1720
	cmp	al, 0xCD
1721
	cmp	al, 0xCD
1721
	jz	.int
1722
	jz	.int
Line 1848... Line 1849...
1848
	mov	ecx, [debuggee_pid]
1849
	mov	ecx, [debuggee_pid]
1849
	xor	edx, edx
1850
	xor	edx, edx
1850
	push	edx
1851
	push	edx
1851
	inc	edx
1852
	inc	edx
1852
	mov	edi, esp
1853
	mov	edi, esp
1853
	int	40h
1854
	mcall
1854
	dec	eax
1855
	dec	eax
1855
	clc
1856
	clc
1856
	jz	@f
1857
	jz	@f
1857
	stc
1858
	stc
1858
@@:	pop	eax
1859
@@:	pop	eax
Line 2336... Line 2337...
2336
	mov	dl, cl
2337
	mov	dl, cl
2337
	mov	ecx, [debuggee_pid]
2338
	mov	ecx, [debuggee_pid]
2338
	mov	esi, ebp
2339
	mov	esi, ebp
2339
	push	9
2340
	push	9
2340
	pop	ebx
2341
	pop	ebx
2341
	int	40h
2342
	mcall
2342
	test	eax, eax
2343
	test	eax, eax
2343
	jz	.ok
2344
	jz	.ok
2344
	pop	ecx
2345
	pop	ecx
2345
.l2:
2346
.l2:
2346
	inc	ecx
2347
	inc	ecx
Line 2568... Line 2569...
2568
	pop	eax
2569
	pop	eax
2569
	mov	ecx, [debuggee_pid]
2570
	mov	ecx, [debuggee_pid]
2570
	xor	edx, edx
2571
	xor	edx, edx
2571
	inc	edx
2572
	inc	edx
2572
	mov	esi, [edi-5]
2573
	mov	esi, [edi-5]
2573
	int	40h
2574
	mcall
2574
	pop	esi
2575
	pop	esi
2575
.ret:
2576
.ret:
2576
	ret
2577
	ret
2577
.dr:
2578
.dr:
2578
	mov	dl, [edi]
2579
	mov	dl, [edi]
Line 2581... Line 2582...
2581
	push	69
2582
	push	69
2582
	pop	eax
2583
	pop	eax
2583
	push	9
2584
	push	9
2584
	pop	ebx
2585
	pop	ebx
2585
	mov	ecx, [debuggee_pid]
2586
	mov	ecx, [debuggee_pid]
2586
	int	40h
2587
	mcall
2587
	ret
2588
	ret
Line 2588... Line 2589...
2588
 
2589
 
2589
enable_breakpoint:
2590
enable_breakpoint:
2590
	push	esi
2591
	push	esi
Line 2605... Line 2606...
2605
	pop	eax
2606
	pop	eax
2606
	mov	esi, [edi-5]
2607
	mov	esi, [edi-5]
2607
	mov	ecx, [debuggee_pid]
2608
	mov	ecx, [debuggee_pid]
2608
	xor	edx, edx
2609
	xor	edx, edx
2609
	inc	edx
2610
	inc	edx
2610
	int	40h
2611
	mcall
2611
	dec	eax
2612
	dec	eax
2612
	jnz	.err
2613
	jnz	.err
2613
	mov	al, 69
2614
	mov	al, 69
2614
	push	0xCC
2615
	push	0xCC
2615
	mov	edi, esp
2616
	mov	edi, esp
2616
	inc	ebx
2617
	inc	ebx
2617
	int	40h
2618
	mcall
2618
	pop	eax
2619
	pop	eax
2619
.ret:
2620
.ret:
2620
	pop	esi
2621
	pop	esi
2621
	ret
2622
	ret
2622
.err:
2623
.err:
Line 2634... Line 2635...
2634
	mov	ecx, [debuggee_pid]
2635
	mov	ecx, [debuggee_pid]
2635
	mov	dl, [edi]
2636
	mov	dl, [edi]
2636
	shr	dl, 6
2637
	shr	dl, 6
2637
	mov	dh, [edi]
2638
	mov	dh, [edi]
2638
	and	dh, 0xF
2639
	and	dh, 0xF
2639
	int	40h
2640
	mcall
2640
	test	eax, eax
2641
	test	eax, eax
2641
	jnz	.err
2642
	jnz	.err
2642
	pop	esi
2643
	pop	esi
2643
	ret
2644
	ret
Line 2710... Line 2711...
2710
	push	0xC
2711
	push	0xC
2711
	pop	esi
2712
	pop	esi
2712
@@:
2713
@@:
2713
	push	69
2714
	push	69
2714
	pop	eax
2715
	pop	eax
2715
	int	40h
2716
	mcall
2716
	test	eax, eax
2717
	test	eax, eax
2717
	jz	.breakok
2718
	jz	.breakok
2718
	inc	edx
2719
	inc	edx
2719
	cmp	dl, 4
2720
	cmp	dl, 4
2720
	jb	@b
2721
	jb	@b
Line 2722... Line 2723...
2722
	call	GoOn
2723
	call	GoOn
2723
; now wait for event
2724
; now wait for event
2724
.wait:
2725
.wait:
2725
	push	10
2726
	push	10
2726
	pop	eax
2727
	pop	eax
2727
	int	40h
2728
	mcall
2728
	dec	eax
2729
	dec	eax
2729
	jz	.redraw
2730
	jz	.redraw
2730
	dec	eax
2731
	dec	eax
2731
	jz	.key
2732
	jz	.key
2732
	dec	eax
2733
	dec	eax
2733
	jnz	.debug
2734
	jnz	.debug
2734
; button; we have only one button, close
2735
; button; we have only one button, close
2735
	or	eax, -1
2736
	or	eax, -1
2736
	int	40h
2737
	mcall
2737
.redraw:
2738
.redraw:
2738
	call	draw_window
2739
	call	draw_window
2739
	jmp	.wait
2740
	jmp	.wait
2740
.key:
2741
.key:
2741
	mov	al, 2
2742
	mov	al, 2
2742
	int	40h
2743
	mcall
2743
	cmp	ah, 3	; Ctrl+C
2744
	cmp	ah, 3	; Ctrl+C
2744
	jnz	.wait
2745
	jnz	.wait
2745
.userbreak:
2746
.userbreak:
2746
	mov	esi, aInterrupted
2747
	mov	esi, aInterrupted
2747
.x1:
2748
.x1:
Line 2752... Line 2753...
2752
	push	69
2753
	push	69
2753
	pop	eax
2754
	pop	eax
2754
	push	9
2755
	push	9
2755
	pop	ebx
2756
	pop	ebx
2756
	mov	ecx, [debuggee_pid]
2757
	mov	ecx, [debuggee_pid]
2757
	int	40h
2758
	mcall
2758
	cmp	esi, aUnpacked
2759
	cmp	esi, aUnpacked
2759
	jnz	OnSuspend
2760
	jnz	OnSuspend
2760
	jmp	AfterSuspend
2761
	jmp	AfterSuspend
2761
.debug:
2762
.debug:
2762
	cmp	[dbgbuflen], 4*3
2763
	cmp	[dbgbuflen], 4*3
Line 2774... Line 2775...
2774
	push	69
2775
	push	69
2775
	pop	eax
2776
	pop	eax
2776
	push	9
2777
	push	9
2777
	pop	ebx
2778
	pop	ebx
2778
	mov	ecx, [debuggee_pid]
2779
	mov	ecx, [debuggee_pid]
2779
	int	40h
2780
	mcall
2780
	jmp	debugmsg
2781
	jmp	debugmsg
2781
.our:
2782
.our:
2782
	and	[dbgbuflen], 0
2783
	and	[dbgbuflen], 0
2783
	push	edx
2784
	push	edx
2784
	call	get_context
2785
	call	get_context
Line 2789... Line 2790...
2789
	mov	edi, esp
2790
	mov	edi, esp
2790
	push	4
2791
	push	4
2791
	pop	edx
2792
	pop	edx
2792
	push	0xC
2793
	push	0xC
2793
	pop	esi
2794
	pop	esi
2794
	int	40h
2795
	mcall
2795
	pop	eax
2796
	pop	eax
2796
	pop	edx
2797
	pop	edx
2797
	cmp	eax, [_eip]
2798
	cmp	eax, [_eip]
2798
	jz	.done
2799
	jz	.done
2799
	call	DoResume
2800
	call	DoResume