; * CLOCK.ASM - Contains CPU speed detecting functions. ; * Copyright (C) 1998, 1999 Prashant TR ; * ; * This program is free software; you can redistribute it and/or modify ; * it under the terms of the GNU General Public License as published by ; * the Free Software Foundation; either version 2 of the License, or ; * (at your option) any later version. ; * ; * See the file COPYING.TR for more details. IDELAY MACRO LOCAL DELAY1, DELAY2, DELAY3, DELAY4 JMP DELAY1 DELAY1: JMP DELAY2 DELAY2: JMP DELAY3 DELAY3: JMP DELAY4 DELAY4: ENDM _DIVIDE_WORD SEGMENT PARA ASSUME CS:_DIVIDE_WORD _divword_loop PROC FAR ; 100 for 1 gap. ; 500 for two. DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX DIV BX RET _divword_loop ENDP _DIVIDE_WORD ENDS _DIVIDE_BYTE SEGMENT PARA ASSUME CS:_DIVIDE_BYTE _divbyte_loop PROC FAR ; 100 for 1 gap. ; 500 for two. DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL DIV BL RET _divbyte_loop ENDP _DIVIDE_BYTE ENDS _DIVIDE_DWORD SEGMENT PARA ASSUME CS:_DIVIDE_DWORD .386P _divdword_loop PROC FAR ; 100 for 1 gap. ; 500 for two. DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX DIV EBX RET _divdword_loop ENDP _DIVIDE_DWORD ENDS .8086 _TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_TEXT .386P _get_rdtsc_time PROC FAR PUBLIC _get_rdtsc_time SMSW AX TEST AL, 1 JZ _rdtsc_time_continue XOR AX, AX MOV DX, AX RET _rdtsc_time_continue: PUSH EBX PUSH ECX PUSH EDI PUSH DS XOR AX, AX MOV DS, AX MOV BX, 46CH XOR EAX, EAX MOV EDX, EAX MOV ECX, 10H MOV EDI, [BX] _get_rdtsc_startup: CMP [BX], EDI JZ _get_rdtsc_startup INC EDI DB 0FH, 30H ; WRMSR _get_rdtsc_stoptime: CMP [BX], EDI JZ _get_rdtsc_stoptime DB 0FH, 031H ; RDTSC MOV EDX, EAX SHR EDX, 16 POP DS POP EDI POP ECX POP EBX RET _get_rdtsc_time ENDP _get_cpu_family PROC FAR PUBLIC _get_cpu_family SMSW AX TEST AL, 1 JNZ _get_cpu_no_id PUSHFD POP EAX OR EAX, 200000H PUSH EAX POPFD PUSHFD POP EAX TEST EAX, 200000H JZ _get_cpu_no_id XOR EAX, EAX INC AX DB 0FH, 0A2H BT EDX, 4 JNC _get_cpu_no_id BT EDX, 5 JNC _get_cpu_no_id MOV AX, 1 RET _get_cpu_no_id: XOR EAX, EAX RET _get_cpu_family ENDP _get_cpu_divdword PROC FAR PUBLIC _get_cpu_divdword PUSH BX XOR EDX, EDX MOV BX, 1 ; Setup the timer. CLI MOV AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 0B6H OUT 43H, AL XOR AX, AX OUT 42H, AL MOV AL, AH OUT 42H, AL MOV AL, 61H OR AL, 1 OUT 61H, AL IDELAY MOV AH, 0 ; Added for similarity. CALL _divdword_loop ; Get the timer count. IN AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 86H OUT 43H, AL IN AL, 42H MOV AH, AL IN AL, 42H XCHG AH, AL STI NEG AX POP BX RET _get_cpu_divdword ENDP _get_cpu_divword PROC FAR PUBLIC _get_cpu_divword PUSH BX XOR DX, DX MOV BX, 1 ; Setup the timer. CLI MOV AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 0B6H OUT 43H, AL XOR AX, AX OUT 42H, AL MOV AL, AH OUT 42H, AL MOV AL, 61H OR AL, 1 OUT 61H, AL IDELAY MOV AH, 0 ; Added for similarity. CALL _divword_loop ; Get the timer count. IN AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 86H OUT 43H, AL IN AL, 42H MOV AH, AL IN AL, 42H XCHG AH, AL STI NEG AX POP BX RET _get_cpu_divword ENDP _get_cpu_divbyte PROC FAR PUBLIC _get_cpu_divbyte PUSH BX PUSH DX MOV BX, 1 XOR DX, DX ; Setup the timer. CLI MOV AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 0B6H OUT 43H, AL XOR AX, AX OUT 42H, AL MOV AL, AH OUT 42H, AL MOV AL, 61H OR AL, 1 OUT 61H, AL IDELAY MOV AH, 0 CALL _divword_loop ; Get the timer count. IN AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 86H OUT 43H, AL IN AL, 42H MOV AH, AL IN AL, 42H XCHG AH, AL STI NEG AX PUSH AX MOV BX, 1 XOR DX, DX ; Setup the timer. CLI MOV AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 0B6H OUT 43H, AL XOR AX, AX OUT 42H, AL MOV AL, AH OUT 42H, AL MOV AL, 61H OR AL, 1 OUT 61H, AL IDELAY MOV AH, 0 CALL _divbyte_loop ; Get the timer count. IN AL, 61H AND AL, 0FCH OUT 61H, AL IDELAY MOV AL, 86H OUT 43H, AL IN AL, 42H MOV AH, AL IN AL, 42H XCHG AH, AL STI NEG AX POP BX SUB BX, AX MOV AX, BX POP BX POP DX RET _get_cpu_divbyte ENDP _TEXT ENDS END