|
|
@ -7,7 +7,8 @@ |
|
|
|
%define GDT_CodeSegmentSelector GDT_Selector(GDT_CodeSegIndex, 0, 0) |
|
|
|
%define GDT_DataSegmentSelector GDT_Selector(GDT_DataSegIndex, 0, 0) |
|
|
|
|
|
|
|
%define VIDEO 0xB8000 |
|
|
|
; %define VIDEO 0xB0000 |
|
|
|
%define VIDEO 0xA0000 |
|
|
|
|
|
|
|
; GDT Stuff |
|
|
|
%define Data 0000b |
|
|
@ -171,7 +172,7 @@ Go32Bit: |
|
|
|
call Enable_A20 |
|
|
|
|
|
|
|
; Set screen mode |
|
|
|
mov ax, 0x0003 ; AH=0 (Change video mode), AL=13h (Mode) = 320x200 - 256 colors |
|
|
|
mov ax, 0x0013 ; AH=0 (Change video mode), AL=13h (Mode) = 320x200 - 256 colors |
|
|
|
mov bx, 0x0000 |
|
|
|
int 0x10 ; Video BIOS interrupt |
|
|
|
|
|
|
@ -244,55 +245,75 @@ ProtectedModeBaby: |
|
|
|
; Setup stack |
|
|
|
mov esp, 0xffffffff |
|
|
|
|
|
|
|
mov ecx, 0 |
|
|
|
mov edx, 0 |
|
|
|
lea edi, [VIDEO] |
|
|
|
mov ax, 0x4000 |
|
|
|
LoopRows: |
|
|
|
LoopCols: |
|
|
|
mov bl, cl |
|
|
|
and bl, dl |
|
|
|
shl bl, 4 |
|
|
|
mov ah, bl |
|
|
|
ror bl, 1 |
|
|
|
xor ah, bl |
|
|
|
and ah, 0x70 |
|
|
|
mov al, dl |
|
|
|
add al, cl |
|
|
|
and al, 4 |
|
|
|
ror al, 1 |
|
|
|
or ah, al |
|
|
|
mov al, 0 |
|
|
|
mov WORD [edi], ax |
|
|
|
inc edi |
|
|
|
inc edi |
|
|
|
inc ecx |
|
|
|
cmp ecx, 80 |
|
|
|
je BreakLoopCols |
|
|
|
jmp LoopCols |
|
|
|
BreakLoopCols: |
|
|
|
mov ecx, 0 |
|
|
|
inc edx |
|
|
|
cmp edx, 25 |
|
|
|
je BreakLoopRows |
|
|
|
jmp LoopRows |
|
|
|
BreakLoopRows: |
|
|
|
|
|
|
|
WriteProtectedModeString: |
|
|
|
cld |
|
|
|
lea esi, [ProtectedWelcomeStr] |
|
|
|
lea edi, [VIDEO+(80*2)*12+19*2] |
|
|
|
.print_loop: |
|
|
|
mov al, BYTE [esi] |
|
|
|
test al, al |
|
|
|
jz .break_print_loop |
|
|
|
mov BYTE [edi], al |
|
|
|
mov BYTE [edi+1], 0x0f |
|
|
|
inc esi |
|
|
|
inc edi |
|
|
|
inc edi |
|
|
|
jmp .print_loop |
|
|
|
.break_print_loop: |
|
|
|
DrawStuff: |
|
|
|
|
|
|
|
push ebp |
|
|
|
mov ebp, esp |
|
|
|
sub esp, 4 |
|
|
|
|
|
|
|
mov ecx, 0 |
|
|
|
mov edx, 0 |
|
|
|
lea edi, [VIDEO] |
|
|
|
mov ax, 0x4000 |
|
|
|
LoopRows: |
|
|
|
LoopCols: |
|
|
|
mov ebx, ecx |
|
|
|
sub ebx, 160 |
|
|
|
imul ebx, ebx |
|
|
|
; shr ebx, 0 |
|
|
|
mov eax, ebx |
|
|
|
mov ebx, edx |
|
|
|
sub ebx, 100 |
|
|
|
imul ebx, ebx |
|
|
|
add eax, ebx |
|
|
|
|
|
|
|
shr eax, 8 |
|
|
|
xor eax, ecx |
|
|
|
sub eax, edx |
|
|
|
ror al, 7 |
|
|
|
mov byte [edi], al |
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
; cmp eax, 40*40 |
|
|
|
; jge .OutOfCircle |
|
|
|
; mov WORD [edi], 0x0f |
|
|
|
; jmp .AfterOutOfCircle |
|
|
|
; .OutOfCircle: |
|
|
|
; mov WORD [edi], 0xff |
|
|
|
; .AfterOutOfCircle: |
|
|
|
|
|
|
|
; inc edi |
|
|
|
inc edi |
|
|
|
inc ecx |
|
|
|
cmp ecx, 320 |
|
|
|
je BreakLoopCols |
|
|
|
jmp LoopCols |
|
|
|
BreakLoopCols: |
|
|
|
mov ecx, 0 |
|
|
|
inc edx |
|
|
|
cmp edx, 200 |
|
|
|
je BreakLoopRows |
|
|
|
jmp LoopRows |
|
|
|
BreakLoopRows: |
|
|
|
%if 0 |
|
|
|
WriteProtectedModeString: |
|
|
|
lea esi, [ProtectedWelcomeStr] |
|
|
|
lea edi, [VIDEO+(80*2)*12+19*2] |
|
|
|
.print_loop: |
|
|
|
mov al, BYTE [esi] |
|
|
|
test al, al |
|
|
|
jz .break_print_loop |
|
|
|
mov BYTE [edi], al |
|
|
|
mov BYTE [edi+1], 0x0f |
|
|
|
inc esi |
|
|
|
inc edi |
|
|
|
inc edi |
|
|
|
jmp .print_loop |
|
|
|
.break_print_loop: |
|
|
|
%endif |
|
|
|
|
|
|
|
pop ebp |
|
|
|
|
|
|
|
HALT: |
|
|
|
cli |
|
|
|