; Reprinted from Micro/Systems Journal, Vol. 1, No. 1, March- ; April 1985, article titled "Assembly Language Extensions for ; MS-Basic" by Ron Kreymborg. ; ;***************************************************************; ; Sample module. Preamble begins.. ; ;***************************************************************; bdos: jmp 0 ; bdos vector db (j-$)/2 ; routine count dw split ; split an integer dw get1st ; BDOS call 17 dw getnxt ; BDOS call 18 dw setdma ; BDOS call 26 j equ $ ;*************************************************************** Š; Split an integer into its seperate bytes. ; Basic call syntax is: ; CALL SPLIT% (SORCE%, LBYT%, RBYT%) split: mov a,m ; get right byte push psw ; and save it inx h ; get left byte mov a,m xchg ; and put in LBYT mov m,a inx h xra a mov m,a mov h,b ; right byte pointer into HL mov l,c pop psw ; restore right byte mov m,a ; and put in RBYT inx h xra a mov m,a ret ;*************************************************************** ; BDOS call 17 - search for first matching entry in the disc Š; directory. Must be preceded by a set dma call. Call with ; the syntax: ; CALL GET1ST% (FCB%(0), PTR%) ; Returns: ; PTR = 0 thru 3 ; PTR*32 -> directory entry in DMA. ; = FF ; no match found. get1st: push d ; save flag address xchg ; pointer into DE mvi c,17 call bdos pop h mov m,a ; return flag inx h xra a mov m,a ret ;*************************************************************** ; BDOS call 18 - search for next matching entry. Call and ; return as for . getnxt: push d ; save flag address xchg ; pointer into DE mvi c,18 call bdos Š pop h mov m,a ; return flag inx h xra a mov m,a ret ;*************************************************************** ; BDOS call 26 - set DMA address. Call with the syntax: ; CALL SETDMA% (DMABUFF%(0)) ; where DMABUFF is the first entry in a 128 byte array, ie set ; with a DIM DMABUFF%(64) statement. setdma: xchg ; pointer into DE mvi c,26 call bdos ret end