;15test20.asm ; Program lze spustit na procesoru min. 80286. .286 DATA SEGMENT PUBLIC 'DATA' ; A20OnMessage db 13,10,'Gate A20 je prave ZAPNUTO.',13,10,'$' A20OffMessage db 13,10,'Gate A20 je prave VYPNUTO.',13,10,'$' ; LowMemory LABEL DWORD ; Adresa 0000:0080h dw 00080h dw 00000h HighMemory LABEL DWORD ; Adresa FFFF:0090h dw 00090h dw 0FFFFh DATA ENDS ; STKSEG SEGMENT STACK 'STACK' db 1024 DUP(?) ; Hloubka zasobniku je 1KB. STKSEG ENDS ; CODE SEGMENT PUBLIC 'CODE' ASSUME CS:CODE,SS:STKSEG,DS:DATA ;************************************************************************ ;* ;* Zjisteni nastaveni Gate A20 ;* ;* Vystup: AX = 1 --> A20 je zapnuto. ;* AX = 0 --> A20 je vypnuto. ;* ;************************************************************************ IsA20On PROC NEAR push DS push ES lds SI, ES:LowMemory ; DS:SI := 0000:0080h les DI, ES:HighMemory ; ES:DI := FFFF:0090h mov CX, 4 cld repe cmpsw ; Provadi se test shody obsahu 4 slov ; od adresy 0000:0080h se 4 slovy od ; adresy FFFF:0090h, ktera pri vypnutem ; Gate A20 ukazuje na 0000:0080h protoze: ; Max. adresa je FFFFFh (= FFFF:000Fh). ; Pri vypnutem Gate A20: ; FFFF:0010h odpovida 0000:0000h ; FFFF:0090h 0000:0080h pop ES pop DS xor AX, AX jcxz IAONoWrap inc AX IAONoWrap: xor BL, BL ret IsA20On ENDP ;********************************************************************** PROCES PROC ; Toto je vstupni bod programu, sem se preda rizeni. mov AX, DATA mov DS, AX mov ES, AX call IsA20On ; Testuj gate A20 or AX, AX jz A20Off ; Oznam vysledek A20On: mov DX, OFFSET A20OnMessage jmp QueryDone A20Off: mov DX, OFFSET A20OffMessage QueryDone: mov AH, 09h int 21h ; Vypis text mov AH, 4Ch int 21h ; Ukonci program PROCES ENDP ;************************************************ CODE ENDS ; Konec programu. END PROCES