home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 September / Image.iso / pcplus / handson / wilfw107 / create01.bas < prev    next >
Encoding:
BASIC Source File  |  1995-06-22  |  3.0 KB  |  76 lines

  1. '
  2. ' Demonstration of creating external QBasic code routine
  3. '
  4.  
  5. DIM ASM%(54)
  6. OFFSET% = VARPTR(ASM%(0))
  7. DEF SEG = VARSEG(ASM%(0))
  8. FOR i% = 0 TO 108
  9.  READ j%
  10.  POKE (OFFSET% + i%), j%
  11. NEXT
  12. '*************************************
  13. DATA &h1E               : 'PUSH DS
  14. DATA &h06               : 'PUSH ES
  15. DATA &h55               : 'PUSH BP
  16. DATA &h0E               : 'PUSH CS              ;ES <- CS
  17. DATA &h07               : 'POP  ES
  18. DATA &h89,&hE5          : 'MOV  BP,SP           ;point to parameters
  19. DATA &h8B,&h76,&h0A     : 'MOV  SI,[BP+0A]
  20. DATA &hAD               : 'LODSW                ;pick up interrupt
  21. DATA &h88,&hC4          : 'MOV  AH,AL
  22. DATA &hB0,&hCD          : 'MOV  AL,0CD
  23. DATA &h26               : 'ES:                  ;move interrupt to routine
  24. DATA &hA3,&h46,&h00     : 'MOV  [0046],AX
  25. DATA &h8B,&h76,&h0C     : 'MOV  SI,[BP+0C]      ;point to REGS
  26. DATA &hAD               : 'LODSW
  27. DATA &h50               : 'PUSH AX
  28. DATA &hAD               : 'LODSW
  29. DATA &h89,&hC3          : 'MOV  BX,AX           ;BX <- REGS.BX
  30. DATA &hAD               : 'LODSW
  31. DATA &h89,&hC1          : 'MOV  CX,AX           ;CX <- REGS.CX
  32. DATA &hAD               : 'LODSW
  33. DATA &h89,&hC2          : 'MOV  DX,AX           ;DX <- REGS.DX
  34. DATA &h8B,&h76,&h0C     : 'MOV  SI,[BP+0C]      ;point to REGS
  35. DATA &h83,&hC6,&h0C     : 'ADD  SI,0C
  36. DATA &hAD               : 'LODSW
  37. DATA &h21,&hC0          : 'AND  AX,AX           ;REGS.ES = 0 ?
  38. DATA &h74,&h05          : 'JZ $+07              ;yes - jump
  39. DATA &h8E,&hC0          : ' MOV  ES,AX          ;ES <- REGS.ES
  40. DATA &hAD               : ' LODSW
  41. DATA &h89,&hC7          : ' MOV  DI,AX          ;DI <- REGS.DI
  42. DATA &h8B,&h76,&h0C     : 'MOV  SI,[BP+0C]
  43. DATA &h1E               : 'PUSH DS
  44. DATA &h83,&hc6,&h08     : 'ADD  SI,08
  45. DATA &hAD               : 'LODSW
  46. DATA &h21,&hC0          : 'AND  AX,AX           ;REGS.DS = 0 ?
  47. DATA &h74,&h05          : 'JZ   $+07            ;yes - jump
  48. DATA &h1F               : ' POP  DS
  49. DATA &h50               : ' PUSH AX
  50. DATA &hAD               : ' LODSW
  51. DATA &h89,&hC6          : ' MOV  SI,AX          ;SI <- REGS.SI
  52. DATA &h58               : 'POP  AX
  53. DATA &h8E,&hD8          : 'MOV  DS,AX           ;DS <- REGS.DS or DS
  54. DATA &h58               : 'POP  AX              ;AX <- REGS.AXd
  55. DATA &h90,&h90          : '<interrupt goes here>
  56. DATA &h8B,&h6E,&h0C     : 'MOV  BP,[BP+0C]
  57. DATA &h89,&h46,&h00     : 'MOV  [BP],AX
  58. DATA &h89,&h5E,&h02     : 'MOV  [BP+02],BX
  59. DATA &h89,&h4E,&h04     : 'MOV  [BP+04],CX
  60. DATA &h89,&h56,&h06     : 'MOV  [BP+06],DX
  61. DATA &h8C,&h5E,&h08     : 'MOV  [BP+08],DS
  62. DATA &h89,&h76,&h0A     : 'MOV  [BP+0A],SI
  63. DATA &h8C,&h46,&h0C     : 'MOV  [BP+0C],ES
  64. DATA &h89,&h7E,&h0E     : 'MOV  [BP+0E],DI
  65. DATA &h9F               : 'LAHF
  66. DATA &h89,&h46,&h10     : 'MOV  [BP+10],AX
  67. DATA &h5D               : 'POP  BP
  68. DATA &h07               : 'POP  ES
  69. DATA &h1F               : 'POP  DS
  70. DATA &hCA,&h02,&h00     : 'RETF 2
  71.  
  72. '*************************************
  73.  
  74. BSAVE "BASICINT.OVL", VARPTR(ASM%(0)), 109
  75.  
  76.