CALL InterruptX

 BBS: Inland Empire Archive
Date: 09-09-92 (10:47)             Number: 52
From: STEVE GARTRELL               Refer#: NONE
  To: LUIS ESPINOZA                 Recvd: NO  
Subj: CALL InterruptX                Conf: (2) Quik_Bas
;This is about 12% faster than the QB/PDS "CALL InterruptX"
; per Microsoft's (indubitably registered and copyrighted)
; "Source Profiler"...Note that this doesn't take any
; special precautions for 24h/25h/26h...It's just trying
; to be quick about it...|-}
;Created 9/4/92 by Steve Gartrell
;Declaration: DECLARE SUB FastInt (BYVAL IntNum%, SEG DemRegs AS ANY)
;
;  QB/PDS TYPE Declaration

;  TYPE SKGregs
;    ax AS INTEGER
;    bx AS INTEGER
;    cx AS INTEGER
;    dx AS INTEGER
;    si AS INTEGER
;    di AS INTEGER
;    es AS INTEGER
;    ds AS INTEGER
;    flags AS INTEGER
;    bp AS INTEGER
;  END TYPE

                            .model medium, basic
                            .code

FastInt PROC
start:
    push    bp                  ;save entry registers
    mov     bp, sp
    pushf
    push    ds
    push    es
    push    di
    push    si
    push    dx
    push    cx
    push    bx
    push    ax
IntRegs:
    sub     sp, 14H           ;make room on stack for 10 regs
    mov     ax, [bp + 0Ah]
    push    cs                ;gonna modify code seg bytes
    pop     ds
    ASSUME  ds:SEG FastInt
    mov     bx, OFFSET IntNum
    mov     BYTE PTR [bx + 1], al   ;low byte intnum to code
    mov     si, [bp + 8]            ;seg of Reg TYPE
    mov     ds, si
    mov     si, [bp + 6]            ;offset of reg TYPE
    mov     di, sp                  ;Low stack mark in SP to di
    push    ss                      ;playing in stack
    pop     es
    cld                             ;paranoia
    mov     cx, 0Ah                 ;copy reg TYPE to stack
    rep     movsw
    pop     ax                      ;pop reg TYPE to registers
    pop     bx
    pop     cx
    pop     dx
    pop     si
    pop     di
    pop     es
    pop     ds
    popf
    pop     bp
IntNum:
    int     0FFh                    ;Duh...Interrupt
    push    bp                      ;Save regs after Int
    mov     bp, sp
    pushf
    push    ds
    push    es
    push    di
    push    si
    push    dx
    push    cx
    push    bx
    push    ax
    mov     di, [bp + 1Ch]          ;get reg TYPE seg
    mov     es, di
    mov     di, [bp + 1Ah]          ; and offset
    mov     si, sp                  ;Low stack mark in SP to si
    push    ss
    pop     ds
    cld                             ;paranoia
    mov     cx, 0Ah                 ;PUSHed regs to reg TYPE
    rep     movsw
    add     sp, 14h                 ;Zap stack back to entry
    pop     ax                      ; saved registers
    pop     bx
    pop     cx
    pop     dx
    pop     si
    pop     di
    pop     es
    pop     ds
    popf
    pop     bp
    retf    6                       ;return to QB/PDS
FastInt ENDP
        END     ;Just the end of the code, FIDO!!!

--- D'Bridge 1.30/071082
 * Origin: RadioLink! Columbus, OH (614)766-2162 HST/DS (1:226/140)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET