Skip to content

Commit a2fb656

Browse files
committedJul 28, 2024
Available printing inputted text
1 parent 6bb5c74 commit a2fb656

File tree

12 files changed

+360
-17
lines changed

12 files changed

+360
-17
lines changed
 

‎README.md

+2
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ $bundler->distribute();
370370
- [Render a text](doc/example/05-render-a-text/README.md)
371371
- [GUI with menubar and fill background](doc/example/06-gui-with-menubar-and-fill-background/README.md)
372372
- [Capture and Print mouse position](doc/example/07-capture-and-print-mouse-position/README.md)
373+
- [Enable Text Mode](doc/example/08-enable-text-mode/README.md)
374+
- [Capture inputting keys](doc/example/09-capture-inputting-keys/README.md)
373375

374376
## Test
375377

‎doc/example/07-capture-and-print-mouse-position/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
The example is printing the positions X, Y via the PS/2 mouse cursor.
33

44
```php
5-
5+
<?php
66
$bootloader = new \PHPOS\OS\Code(
77
new \PHPOS\Architecture\Architecture(
88
// Use x86_64 architecture
+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# Enable Text Mode
2+
The PHP-OS is designed to be as simple as possible, but VESA is somewhat complex for outputting regular text. Therefore, a text mode can be executed for easily outputting text and for displaying initial processing logs while BIOS interrupts are enabled.
3+
4+
```php
5+
<?php
6+
$bootloader = new \PHPOS\OS\Code(
7+
new \PHPOS\Architecture\Architecture(
8+
// Use x86_64 architecture
9+
\PHPOS\Architecture\ArchitectureType::x86_64,
10+
),
11+
);
12+
13+
// Initialize bootloader
14+
$bootloader
15+
// Set code name
16+
->setName('bootloader')
17+
18+
// Set 16 bit real mode
19+
->setBits(\PHPOS\OS\BitType::BIT_16)
20+
21+
// Set bootloader origin
22+
->setOrigin(\PHPOS\OS\OSInfo::MBR)
23+
24+
// Setup segments (initialize registers for assembly)
25+
->registerService(\PHPOS\Service\BIOS\Standard\Segment\SetupSegments::class)
26+
27+
// Enable Text Mode
28+
->registerService(\PHPOS\Service\BIOS\VESABIOSExtension\TextMode::class)
29+
30+
// Print Hello World!
31+
->registerService(\PHPOS\Service\BIOS\IO\PrintConstantString::class, 'Hello World!')
32+
33+
// Add bootloader signature
34+
->registerPostService(\PHPOS\Service\BIOS\Bootloader\BootloaderSignature::class);
35+
36+
// Bundle each codes into an OS image
37+
$bundler = new \PHPOS\OS\Bundler\Bundler(
38+
new \PHPOS\OS\ConfigureOption(
39+
__DIR__ . '/dist',
40+
'php-os.img',
41+
$bootloader,
42+
[
43+
$kernel,
44+
],
45+
),
46+
);
47+
48+
// Distribute Makefile and assembly into `dist` directory by the ConfigureOption
49+
$bundler->distribute();
50+
51+
```
52+
53+
### Screenshot
54+
55+
<p align="center">
56+
<img src="./image.png">
57+
</p>
9.42 KB
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Capture inputting keys
2+
This is an example that displays the entered text using BIOS interrupts.
3+
This is only possible in 16-bit real mode. Other methods are required in 32-bit protected mode, such as receiving input via PS/2 or USB.
4+
5+
```php
6+
7+
<?php
8+
$bootloader = new \PHPOS\OS\Code(
9+
new \PHPOS\Architecture\Architecture(
10+
// Use x86_64 architecture
11+
\PHPOS\Architecture\ArchitectureType::x86_64,
12+
),
13+
);
14+
15+
// Initialize bootloader
16+
$bootloader
17+
// Set code name
18+
->setName('bootloader')
19+
20+
// Set 16 bit real mode
21+
->setBits(\PHPOS\OS\BitType::BIT_16)
22+
23+
// Set bootloader origin
24+
->setOrigin(\PHPOS\OS\OSInfo::MBR)
25+
26+
// Setup segments (initialize registers for assembly)
27+
->registerService(\PHPOS\Service\BIOS\Standard\Segment\SetupSegments::class)
28+
29+
// Enable Text Mode
30+
->registerService(\PHPOS\Service\BIOS\VESABIOSExtension\TextMode::class)
31+
32+
// Print inputted text
33+
->registerService(\PHPOS\Service\Kit\Startup\PrintInputtedText::class)
34+
35+
// Add bootloader signature
36+
->registerPostService(\PHPOS\Service\BIOS\Bootloader\BootloaderSignature::class);
37+
38+
// Bundle each codes into an OS image
39+
$bundler = new \PHPOS\OS\Bundler\Bundler(
40+
new \PHPOS\OS\ConfigureOption(
41+
__DIR__ . '/dist',
42+
'php-os.img',
43+
$bootloader,
44+
[
45+
$kernel,
46+
],
47+
),
48+
);
49+
50+
// Distribute Makefile and assembly into `dist` directory by the ConfigureOption
51+
$bundler->distribute();
52+
```
53+
54+
55+
### Screenshot
56+
57+
<p align="center">
58+
<img src="./image.png">
59+
</p>
11.8 KB
Loading

‎src/Service/BIOS/IO/PrintConstantString.php

+11-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPOS\Operation\Or_;
1616
use PHPOS\OS\Instruction;
1717
use PHPOS\OS\InstructionInterface;
18+
use PHPOS\Runtime\KeyValueInterface;
1819
use PHPOS\Service\BaseService;
1920
use PHPOS\Service\BIOS\IO\PrintConstantString\PrintCharacter;
2021
use PHPOS\Service\BIOS\IO\PrintConstantString\PrintDone;
@@ -32,12 +33,12 @@ public function process(ServiceManagerInterface $serviceManager): InstructionInt
3233
$registers = $this->code->architecture()->runtime()->registers();
3334

3435
/**
35-
* @var string $string
36+
* @var string|KeyValueInterface $stringOrVariable
3637
* @var Color256Set $textColor
3738
*/
38-
[$string, $textColor] = $this->parameters + ['', Color256Set::WHITE];
39+
[$stringOrVariable, $textColor] = $this->parameters + ['', Color256Set::WHITE];
3940

40-
assert(is_string($string));
41+
assert(is_string($stringOrVariable) || $stringOrVariable instanceof KeyValueInterface);
4142

4243
$si = $registers->get(RegisterType::SOURCE_INDEX_BITS_32);
4344
assert($si instanceof IndexRegisterInterface);
@@ -48,12 +49,17 @@ public function process(ServiceManagerInterface $serviceManager): InstructionInt
4849
$printDone = $serviceManager->createServiceWithParent(PrintDone::class, $this);
4950
$printCharacter = $serviceManager->createServiceWithParent(PrintCharacter::class, $this, $textColor);
5051

52+
if (is_string($stringOrVariable)) {
53+
$variable = Variable::createBy($this->code, $stringOrVariable);
54+
} else {
55+
$variable = $stringOrVariable;
56+
}
57+
5158
return (new Instruction($this->code, $serviceManager))
5259
->append(
5360
Mov::class,
5461
$si->index(),
55-
Variable::createBy($this->code, $string)
56-
->name(),
62+
$variable->name(),
5763
)
5864
->append(Call::class, $this->label())
5965
->append(Jmp::class, $this->label() . '_finish')

‎src/Service/BIOS/IO/ReadString/ReadString.php renamed to ‎src/Service/BIOS/IO/ReadConstantString/ReadConstantString.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
namespace PHPOS\Service\BIOS\IO\ReadString;
5+
namespace PHPOS\Service\BIOS\IO\ReadConstantString;
66

77
use PHPOS\Architecture\Register\DataRegisterWithHighAndLowInterface;
88
use PHPOS\Architecture\Register\IndexRegisterInterface;
@@ -26,7 +26,7 @@
2626
use PHPOS\Service\ServiceInterface;
2727
use PHPOS\Service\ServiceManagerInterface;
2828

29-
class ReadString implements ServiceInterface
29+
class ReadConstantString implements ServiceInterface
3030
{
3131
use BaseService {
3232
__construct as __baseConstruct;
@@ -80,7 +80,7 @@ public function process(ServiceManagerInterface $serviceManager): InstructionInt
8080

8181
->append(Cmp::class, $ax->low(), 0x0D)
8282
->append(Je::class, $this->label() . '_done_read')
83-
->append(Inc::class, $ax->value())
83+
->append(Inc::class, $di->index())
8484
->append(Jmp::class, $this->label() . '_char_read')
8585

8686
->label(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PHPOS\Service\Kit\Startup;
6+
7+
use PHPOS\Operation\Hlt;
8+
use PHPOS\Operation\Jmp;
9+
use PHPOS\OS\Instruction;
10+
use PHPOS\OS\InstructionInterface;
11+
use PHPOS\OS\OSInfo;
12+
use PHPOS\Service\BaseService;
13+
use PHPOS\Service\BIOS\IO\PrintConstantString;
14+
use PHPOS\Service\BIOS\IO\PrintConstantString\PrintNewLine;
15+
use PHPOS\Service\BIOS\IO\ReadConstantString\ReadConstantString;
16+
use PHPOS\Service\BIOS\Standard\Segment\SetupSegments;
17+
use PHPOS\Service\ServiceInterface;
18+
use PHPOS\Service\ServiceManagerInterface;
19+
20+
class PrintInputtedText implements ServiceInterface
21+
{
22+
use BaseService;
23+
24+
public function process(ServiceManagerInterface $serviceManager): InstructionInterface
25+
{
26+
$enter = $serviceManager->createServiceWithParent(
27+
PrintConstantString::class,
28+
$this,
29+
'Enter text: '
30+
);
31+
32+
$readText = $serviceManager->createServiceWithParent(
33+
ReadConstantString::class,
34+
$this,
35+
);
36+
37+
$entered = $serviceManager->createServiceWithParent(
38+
PrintConstantString::class,
39+
$this,
40+
'Your entered: '
41+
);
42+
43+
return (new Instruction($this->code, $serviceManager))
44+
->label(
45+
$this->label(),
46+
fn (InstructionInterface $instruction) => $instruction
47+
->include($enter)
48+
->include($readText)
49+
->include($serviceManager->createServiceWithParent(PrintNewLine::class, $this))
50+
->include($entered)
51+
->include($serviceManager->createServiceWithParent(
52+
PrintConstantString::class,
53+
$this,
54+
$readText->extern()->get($readText->label() . '_buffer'),
55+
))
56+
->include($serviceManager->createServiceWithParent(PrintNewLine::class, $this))
57+
->append(Jmp::class, $this->label())
58+
)
59+
->append(Hlt::class);
60+
}
61+
}

‎tests/BIOS/VESABIOSExtension/__snapshots__/RenderImageFromDiskTest__testRenderImageFromDisk with data set 0__1.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
; Do not edit this file. We cannot be held responsible if this is edited and overwritten again.
1111
;
1212

13-
%define __php_define_image_code_00000000000015c10000000000000000_sector 1
14-
%define __php_define_image_code_00000000000015c10000000000000000_sectors 62
15-
%define __php_define_image_code_00000000000015c10000000000000000_head 0
16-
%define __php_define_image_code_00000000000015c10000000000000000_drive 128
13+
%define __php_define_image_code_000000000000161a0000000000000000_sector 1
14+
%define __php_define_image_code_000000000000161a0000000000000000_sectors 62
15+
%define __php_define_image_code_000000000000161a0000000000000000_head 0
16+
%define __php_define_image_code_000000000000161a0000000000000000_drive 128
1717

1818
resb_PHPOS_Service_BIOS_VESABIOSExtension_SetVESABIOSExtensionInformation: resb 256
1919
[bits 16]
@@ -72,11 +72,11 @@ __php_PHPOS_Service_BIOS_VESABIOSExtension_Renderer_RenderImageFromDisk:
7272
__php_PHPOS_Service_BIOS_VESABIOSExtension_Renderer_RenderImageFromDisk_PHPOS_Service_BIOS_Disk_LoadSector:
7373
mov ebx, 12288
7474
mov ah, 0x0002
75-
mov al, __php_define_image_code_00000000000015c10000000000000000_sectors
75+
mov al, __php_define_image_code_000000000000161a0000000000000000_sectors
7676
mov ch, 0x0000
77-
mov cl, __php_define_image_code_00000000000015c10000000000000000_sector
78-
mov dh, __php_define_image_code_00000000000015c10000000000000000_head
79-
mov dl, __php_define_image_code_00000000000015c10000000000000000_drive
77+
mov cl, __php_define_image_code_000000000000161a0000000000000000_sector
78+
mov dh, __php_define_image_code_000000000000161a0000000000000000_head
79+
mov dl, __php_define_image_code_000000000000161a0000000000000000_drive
8080
int 19
8181
jc __php_PHPOS_Service_BIOS_VESABIOSExtension_Renderer_RenderImageFromDisk_PHPOS_Service_BIOS_Disk_LoadSector_PHPOS_Service_BIOS_Disk_DiskError
8282
jmp __php_PHPOS_Service_BIOS_VESABIOSExtension_Renderer_RenderImageFromDisk_PHPOS_Service_BIOS_Disk_LoadSector_finish
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PHPOS\Test\Kit\Startup;
6+
7+
use PHPOS\OS\CodeInterface;
8+
use PHPOS\Test\CreateCode;
9+
use PHPUnit\Framework\Attributes\DataProvider;
10+
use PHPUnit\Framework\TestCase;
11+
use Spatie\Snapshots\MatchesSnapshots;
12+
13+
class PrintInputtedTextTest extends TestCase
14+
{
15+
use CreateCode;
16+
use MatchesSnapshots;
17+
18+
#[DataProvider('architectures')]
19+
public function testHelloWorld(CodeInterface $code): void
20+
{
21+
$result = $code
22+
->registerService(\PHPOS\Service\BIOS\Standard\DefineBitSize::class, \PHPOS\OS\BitType::BIT_16)
23+
->registerService(\PHPOS\Service\BIOS\Standard\DefineOrigin::class, \PHPOS\OS\OSInfo::MBR->value)
24+
->registerService(\PHPOS\Service\BIOS\VESABIOSExtension\TextMode::class)
25+
->registerService(\PHPOS\Service\Kit\Startup\PrintInputtedText::class)
26+
->registerPostService(\PHPOS\Service\BIOS\Bootloader\BootloaderSignature::class)
27+
->assemble()
28+
->asText();
29+
30+
$this->assertMatchesTextSnapshot(
31+
$result,
32+
);
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
;
2+
; _______ ____ ____ _______ ___ ______
3+
; |_ __ \|_ || _||_ __ \ .' `. .' ____ \
4+
; | |__) | | |__| | | |__) |______ / .-. \| (___ \_|
5+
; | ___/ | __ | | ___/|______|| | | | _.____`.
6+
; _| |_ _| | | |_ _| |_ \ `-' /| \____) |
7+
; |_____| |____||____||_____| `.___.' \______.'
8+
;
9+
; Notice: This file is automatically generated by PHP-OS.
10+
; Do not edit this file. We cannot be held responsible if this is edited and overwritten again.
11+
;
12+
13+
14+
[bits 16]
15+
16+
[org 0x0000]
17+
18+
[bits 16]
19+
20+
[org 0x7c00]
21+
22+
__php_PHPOS_Service_BIOS_VESABIOSExtension_TextMode:
23+
mov ax, 3
24+
int 16
25+
26+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText:
27+
mov esi, __php_var_RW50ZXIgdGV4dDog
28+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString
29+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_finish
30+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter:
31+
mov ah, 14
32+
mov ebx, 15
33+
int 16
34+
ret
35+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString:
36+
lodsb
37+
or al, al
38+
jz __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone
39+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter
40+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString
41+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone:
42+
ret
43+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_finish:
44+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString:
45+
mov di, __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_buffer
46+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_char_read
47+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_done
48+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_char_read:
49+
xor ah, ah
50+
int 22
51+
mov [di], al
52+
mov ah, 14
53+
int 16
54+
cmp al, 13
55+
je __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_done_read
56+
inc di
57+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_char_read
58+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_done_read:
59+
mov byte [di], 0
60+
ret
61+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_done:
62+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PrintNewLine:
63+
mov ah, 14
64+
mov al, 13
65+
int 16
66+
mov ah, 14
67+
mov al, 10
68+
int 16
69+
mov esi, __php_var_WW91ciBlbnRlcmVkOiA_
70+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1
71+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_finish
72+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter:
73+
mov ah, 14
74+
mov ebx, 15
75+
int 16
76+
ret
77+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1:
78+
lodsb
79+
or al, al
80+
jz __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone
81+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter
82+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1
83+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone:
84+
ret
85+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString1_finish:
86+
mov esi, __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_buffer
87+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2
88+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_finish
89+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter:
90+
mov ah, 14
91+
mov ebx, 15
92+
int 16
93+
ret
94+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2:
95+
lodsb
96+
or al, al
97+
jz __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone
98+
call __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_PHPOS_Service_BIOS_IO_PrintConstantString_PrintCharacter
99+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2
100+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_PHPOS_Service_BIOS_IO_PrintConstantString_PrintDone:
101+
ret
102+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString2_finish:
103+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_PrintConstantString_PrintNewLine1:
104+
mov ah, 14
105+
mov al, 13
106+
int 16
107+
mov ah, 14
108+
mov al, 10
109+
int 16
110+
jmp __php_PHPOS_Service_Kit_Startup_PrintInputtedText
111+
hlt
112+
113+
__php_var_RW50ZXIgdGV4dDog:
114+
db "Enter text: ", 0
115+
116+
__php_var_WW91ciBlbnRlcmVkOiA_:
117+
db "Your entered: ", 0
118+
119+
__php_PHPOS_Service_Kit_Startup_PrintInputtedText_PHPOS_Service_BIOS_IO_ReadConstantString_ReadConstantString_buffer:
120+
times 256 db 0
121+
122+
times 510-($-$$) db 0
123+
dw 0xAA55
124+

0 commit comments

Comments
 (0)
Please sign in to comment.