; Public Domain cpu 8086 org 256 start: int3 before: call test mov dx, msg.offbefore je .off .on: mov dx, msg.onbefore .off: mov ah, 09h int 21h after: call test mov dx, msg.offafter je .off .on: mov dx, msg.onafter .off: mov ah, 09h int 21h switchoff: mov ax, 4300h int 2Fh cmp al, 80h jne noxms mov dx, msg.tryingxms mov ah, 09h int 21h mov ax, 4310h int 2Fh push es push bx mov bp, sp mov ah, 04h call far [bp] mov ah, 06h call far [bp] jmp end noxms: mov dx, msg.tryingrombios mov ah, 09h int 21h mov ax, 2400h int 15h end: testfirst: call test mov dx, msg.off je .off .on: mov dx, msg.on .off: mov ah, 09h int 21h testagain: call test mov dx, msg.offagain je .off .on: mov dx, msg.onagain .off: mov ah, 09h int 21h mov ax, 4C00h int 21h test: les di, [cs:high] lds si, [cs:low] mov cx, 16 repe cmpsw push cs pop ds retn align 2 high: dd 0FFFF_0010h low: dd 0 msg: .offbefore: .off: db "A20 was off. ",36 .onbefore: .on: db "A20 was on. ",36 .offafter: .offagain: db "After int 21h A20 is off.",13,10,36 .onafter: .onagain: db "After int 21h A20 is on.",13,10,36 .tryingxms: db "XMS detected, trying to disable A20 on XMS.",13,10,36 .tryingrombios: db "XMS not detected, trying to disable A20 using ROM-BIOS.",13,10,36