(3045) Sat 12 Mar 94 10:58a By: James Vahn To: Terry Carmen Re: A20 St: Rcvd --------------------------------------------------------------------------- @MSGID: 1:346/10.0 2d8210be Comments appreciated. If appropriate, please include this in the snippets file. ;-------------------- ; a20.asm toggles the A20 line in a timed loop. ; Purpose: To test for the optimum setting of the A20 handler. ; Example: Himem.Sys allows /M:<1-14> and this might help determine which. ; This BENCHMARK is exactly that- only a benchmark. ; My 386SX/16, UMBDRVR.SYS, HIMEM.SYS and DOS=HIGH,UMB shows 13.6 seconds. ; 3 megs o' RAM. ; ; By James Vahn - Email to: ; Fidonet 1:346/10.20 ; WWIVnet #213 @5930 ; Internet james_vahn@moonflower.spk.wa.us ; cseg segment assume cs:cseg, ds:cseg org 100h ; .COM, of course. Begin: mov ax,4300h int 2Fh ; A20 handler installed? cmp al,80h jne Exit mov ax,cs mov ds,ax mov dx,offset Msg ; Prints the message. mov ah,09h int 21h mov ah,0h int 1Ah ; get low order word of clock counter push dx ; and save it. mov ax,4310h int 2Fh ; Get the address in ES:BX mov word ptr [xms],bx mov word ptr [xms+2],es mov tmp, 02h ; increase this for faster machines. mov cx, 0FFFFh ; make a loop FFFF x 2 times lo1: mov ah,05h call cs:[xms] ; Enable A20 mov ah,06h call cs:[xms] ; Disable A20 loop lo1 dec tmp jnz lo1 mov ah,0h int 1Ah ; Get current time pop bx ; Get starting time sub dx,bx ; Find the difference mov ax,dx mov bx,10000d ; tenths of a second. mul bx ; ticks / 18.207 mov bx,18207d div bx ; Answer in AX, seconds elapsed. ;------------------------ ; Convert AX to unsigned decimal ASCII output ; Uses AX, BX, CX, DX ; Thanks Mitch! mov cx,5 ; maximum of 5 decimal digits mov bx,10d ; divisor bin2a1: xor dx,dx ; zero DX for 16 bit divide div bx ; leaves quotient in AX add dl,'0' ; convert remainder to ASCII push dx ; put on stack loop bin2a1 ; repeat mov cx,5 mov bl,'0' ; suppress leading zeros bin2a2: pop ax ; pop most significant digit first or bl,al ; sets bits 0-4 after first non-zero digit test bl,0Fh ; skip leading zeros jz bin2a4 mov dl,al ; Print results to screen. mov ah,2h int 21h bin2a4: loop bin2a2 mov ax,4C00h int 21h Exit: mov ax,cs mov ds,ax mov dx,offset Msg2 ; Prints the message. mov ah,09h int 21h mov ax,4C00h int 21h xms dd ? tmp db ? msg db 'Tests the speed of the A20 handler.', 13,10 db ' For reference, my 386SX/16 shows 136. Smaller is faster.',13,10 db ' Testing- please wait. Tenths of a second: ',36 msg2 db ' No A20 handler (like himem.sys) detected!',13,10,36 cseg ends end Begin * SLMR 2.1a * --- Maximus 2.01wb * Origin: Inland Empire Archive (1:346/10) @PATH: 346/10 105/200 30 209/209 270/101 260/1 362