hi leute,
kann mir einer von euch helfen warum der pmode jump nicht geht?
ich habe einfach nur leerzeilen und einen platzhalter per times aus dem src gelöscht, und plötzlich will er nicht mehr.
das label pmode erreicht er garnicht mehr. nach dem jump ist feierabend...
weiß einer weiter?
hier der code:
osloader.asm%include "../PRJ/SRC/includes/macros.asm"
[ORG 0x1000]
[BITS 16]
[CPU 386]
CODE_SECTION:
mov ax, 0x1000 ; update registers
mov es, ax
mov ds, ax
A20Gate: in al, 0x64
test al, 00000010b
jnz A20Gate ; loop till buffer is empty
mov al, 0xD0
out 0x64, al ; send read order
wait_1: in al, 0x64
test al, 00000001b
jz wait_1 ; wait till inst. is done
in al, 0x60
or al, 00000010b
mov bl, al ; set A20 and store in bx
wait_2: in al, 0x64
test al, 00000010b
jnz wait_2 ; loop till buffer is empty
mov al, 0xD1
out 0x64, al ; send write order
wait_3: in al, 0x64
test al, 00000010b
jnz wait_3 ; loop till buffer is empty
mov al, bl
out 0x60, al ; send A20 to controller
table: mov [GDT_START ], word 0x00 ; DESC_0
mov [GDT_START+ 2], word 0x00
mov [GDT_START+ 4], word 0x00
mov [GDT_START+ 6], word 0x00
mov [GDT_START+ 8], word 0xFFFF ; DESC_1 (CODE)
mov [GDT_START+10], word 0x0000
mov [GDT_START+12], byte 0x00
mov [GDT_START+13], byte 0x9A
mov [GDT_START+14], byte 0xCF
mov [GDT_START+15], byte 0x00
mov [GDT_START+16], word 0xFFFF ; DESC_2 (DATA)
mov [GDT_START+18], word 0x0000
mov [GDT_START+20], byte 0x00
mov [GDT_START+21], byte 0x92
mov [GDT_START+22], byte 0xCF
mov [GDT_START+23], byte 0x00
mov eax, cs ; set ds = cs
mov ds, ax
sub esp, 0x06 ; setting up gdt by stack-
mov [esp ], word GDT_SIZE ; usage
mov [esp+2], dword GDT_START
lgdt [esp] ; load descriptor in GDT
add esp, 0x06 ; reset stack
enterpm: mov eax, cr0 ; set pmode bit to 1
or eax, 0000001b
mov cr0, eax
jump: db 0xEA ; far-jump in pmode
dw pmode ; jmp dword 0x08:ende
dw 0x08
pmode: mov eax, 0x10
; mov eax, 0x02
; shl eax, 3
mov ds, ax
mov es, ax
mov ss, ax
xor eax, eax
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF
und hier noch die bochsout.txt:
00003894733-e-@000010ba-[CPU0 ] check_cs: conforming code seg descriptor dpl > cpl
00003894733-e-@000010b5-[CPU0 ] interrupt(): gate descriptor is not valid sys seg
00003894733-e-@000010b5-[CPU0 ] interrupt(): gate descriptor is not valid sys seg
00003894733-i-@000010b5-[CPU0 ] protected mode
00003894733-i-@000010b5-[CPU0 ] CS.d_b = 16 bit
00003894733-i-@000010b5-[CPU0 ] SS.d_b = 16 bit
00003894733-i-@000010b5-[CPU0 ] >> jmp far 0008:10ba : EABA100800
00003894733-e-@000010b5-[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00003894733-i-@000010b5-[SYS ] bx_pc_system_c::Reset(SOFTWARE) called