home *** CD-ROM | disk | FTP | other *** search
- '
- ' Demonstration of creating external QBasic code routine
- '
-
- DIM ASM%(54)
- OFFSET% = VARPTR(ASM%(0))
- DEF SEG = VARSEG(ASM%(0))
- FOR i% = 0 TO 108
- READ j%
- POKE (OFFSET% + i%), j%
- NEXT
- '*************************************
- DATA &h1E : 'PUSH DS
- DATA &h06 : 'PUSH ES
- DATA &h55 : 'PUSH BP
- DATA &h0E : 'PUSH CS ;ES <- CS
- DATA &h07 : 'POP ES
- DATA &h89,&hE5 : 'MOV BP,SP ;point to parameters
- DATA &h8B,&h76,&h0A : 'MOV SI,[BP+0A]
- DATA &hAD : 'LODSW ;pick up interrupt
- DATA &h88,&hC4 : 'MOV AH,AL
- DATA &hB0,&hCD : 'MOV AL,0CD
- DATA &h26 : 'ES: ;move interrupt to routine
- DATA &hA3,&h46,&h00 : 'MOV [0046],AX
- DATA &h8B,&h76,&h0C : 'MOV SI,[BP+0C] ;point to REGS
- DATA &hAD : 'LODSW
- DATA &h50 : 'PUSH AX
- DATA &hAD : 'LODSW
- DATA &h89,&hC3 : 'MOV BX,AX ;BX <- REGS.BX
- DATA &hAD : 'LODSW
- DATA &h89,&hC1 : 'MOV CX,AX ;CX <- REGS.CX
- DATA &hAD : 'LODSW
- DATA &h89,&hC2 : 'MOV DX,AX ;DX <- REGS.DX
- DATA &h8B,&h76,&h0C : 'MOV SI,[BP+0C] ;point to REGS
- DATA &h83,&hC6,&h0C : 'ADD SI,0C
- DATA &hAD : 'LODSW
- DATA &h21,&hC0 : 'AND AX,AX ;REGS.ES = 0 ?
- DATA &h74,&h05 : 'JZ $+07 ;yes - jump
- DATA &h8E,&hC0 : ' MOV ES,AX ;ES <- REGS.ES
- DATA &hAD : ' LODSW
- DATA &h89,&hC7 : ' MOV DI,AX ;DI <- REGS.DI
- DATA &h8B,&h76,&h0C : 'MOV SI,[BP+0C]
- DATA &h1E : 'PUSH DS
- DATA &h83,&hc6,&h08 : 'ADD SI,08
- DATA &hAD : 'LODSW
- DATA &h21,&hC0 : 'AND AX,AX ;REGS.DS = 0 ?
- DATA &h74,&h05 : 'JZ $+07 ;yes - jump
- DATA &h1F : ' POP DS
- DATA &h50 : ' PUSH AX
- DATA &hAD : ' LODSW
- DATA &h89,&hC6 : ' MOV SI,AX ;SI <- REGS.SI
- DATA &h58 : 'POP AX
- DATA &h8E,&hD8 : 'MOV DS,AX ;DS <- REGS.DS or DS
- DATA &h58 : 'POP AX ;AX <- REGS.AXd
- DATA &h90,&h90 : '<interrupt goes here>
- DATA &h8B,&h6E,&h0C : 'MOV BP,[BP+0C]
- DATA &h89,&h46,&h00 : 'MOV [BP],AX
- DATA &h89,&h5E,&h02 : 'MOV [BP+02],BX
- DATA &h89,&h4E,&h04 : 'MOV [BP+04],CX
- DATA &h89,&h56,&h06 : 'MOV [BP+06],DX
- DATA &h8C,&h5E,&h08 : 'MOV [BP+08],DS
- DATA &h89,&h76,&h0A : 'MOV [BP+0A],SI
- DATA &h8C,&h46,&h0C : 'MOV [BP+0C],ES
- DATA &h89,&h7E,&h0E : 'MOV [BP+0E],DI
- DATA &h9F : 'LAHF
- DATA &h89,&h46,&h10 : 'MOV [BP+10],AX
- DATA &h5D : 'POP BP
- DATA &h07 : 'POP ES
- DATA &h1F : 'POP DS
- DATA &hCA,&h02,&h00 : 'RETF 2
-
- '*************************************
-
- BSAVE "BASICINT.OVL", VARPTR(ASM%(0)), 109
-
-