您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:7 来源:未知

COMMENT *

 

  Demo (and semi-useful) program to read/set burnout device parameters.

 

  Usage: burnout [ticks] [C -] [V -] [H -]

 

  Parameters can be separated by almost anything.

  With no parameters, program simply returns current status.

 

  Examples:

    burnout 5000                (sets time to 5000 ticks)

    burnout 5000H               (time=5000, use hardware blanking)

    burnout 5000,h              (ditto, separators don't matter)

    burnout c h-v               (continuous clear, software, monitor video)

    burnout /C  /H- /V          (ditto)

    burnout                     (return status only)

 

  Assembly/link:

    masm burnout;

    link burnout;  (ignore NO STACK warning message)

    exe2bin burnout burnout.com

 

  By CJDunford  20-Mar-1985

     Compuserve 76703,2002

 

======================================================================

*

 

stdout equ 1                            ; DOS output files

stderr equ 2

 

; ----- General equates

DOS         equ 21H                     ; DOS interrupt

TERMINATE   equ 20H                     ; Exit to DOS

 

PRINT       equ 09H                     ; DOS "print" string to stdout

FOPEN       equ 3D02H                   ; DOS file open, read/write

FREAD       equ 3FH                     ; DOS file read

FWRITE      equ 40H                     ; DOS file write

 

CR          equ 13                      ; ASCII carriage return

LF          equ 10                      ; ASCII line fine

 

code segment

assume cs:code,ds:code

 

org 80H                                 ; Parm storage area in PSP

ParmLength label byte                   ; Length of parms

org 81H

Parameters label byte                   ; Start of parms

 

org 100H                                ; Org for .COM

main proc far

        jmp start                       ; Hate to execute data

 

DevName         db 'BRNDEV',0           ; Burnout device name

handle          dw ?                    ; Storage for handle

Flush           db '@'                  ; Char to flush device I/O

Execute         db '#'                  ; Char to execute device commands

 

NotInstalled    db 'Burnout device is not installed',13,10

NotInstalledL   equ $ - NotInstalled

 

Status          db 'Current status: '   ; Status message

StatInsert      db 40 dup (?)           ; brndev will store status here

 

; ----- Open the device

start:

        mov dx,offset DevName           ; DS:DX => device name

        mov ax,FOPEN

        int DOS

        jnc A1                          ; Continue if no error

        mov bx,stderr                   ; Message to stderr

        mov cx,NotInstalledL

        mov dx,offset NotInstalled

        mov ah,FWRITE

        int DOS

        jmp exit

 

; ----- Flush any pending I/O to/from the device

A1:

        mov handle,ax                   ; Save device handle

        mov dx,offset Flush             ; Point to the "@"

        mov cx,1                        ; Writing one byte

        mov bx,handle                   ; Device handle

        mov ah,FWRITE                   ; Write "@" to device

        int DOS

 

; ----- Send and execute parameters if present

        mov cl,ParmLength               ; Parm length to CL

        or cl,cl                        ; Any parms present?

        jz A2                           ; Skip if not

        xor ch,ch                       ; CX = parm length

        mov dx,offset Parameters        ; DS:DX => parms

        mov bx,handle                   ; BX = device handle

        mov ah,FWRITE                   ; Write parms to device

        int DOS

 

        mov dx,offset Execute           ; Execute the parms

        mov cx,1                        ; Writing one byte

        mov bx,handle                   ; Device handle

        mov ah,FWRITE                   ; Write "#" to device

        int DOS

 

; ----- Get and display device status

A2:

        mov dx,offset StatInsert        ; DS:DX => where to put status

        mov cx,0FFH                     ; Ask for lots of data; DOS will ...

                                        ; ... fetch only until CR found.

        mov bx,handle                   ; Device handle

        mov ah,FREAD                    ; Read device info

        int DOS

 

        mov cx,ax                       ; CX = actual # bytes read

        mov di,offset StatInsert        ; Where the stat data is stored

        add di,cx                       ; Add length of input read

        mov al,CR                       ; Store a CR/LF/'$' at end

        cld

        stosb

        mov al,LF

        stosb

        mov al,'$'

        stosb

        mov dx,offset Status            ; Write status to stdout

        mov ah,PRINT

        int DOS

 

exit:

        int TERMINATE                   ; Exit to DOS

main endp

code ends

end main

 

 

 

相关文章

汇编源码--dskwatch
简单的取系统时间小程序
汇编源码--CLEAR
汇编源码--DRIVER
鼠标控制CD-Audio播放程序
汇编源码--CLEANF
简单密码输入
汇编源码--basmain
汇编源码--DOSMAC
专截320*200的截画程序
汇编源码--col
自己用汇编语言写的一个病毒(源码)
汇编源码--COMINT
Mixer Volume Ctrler V1.0
CIH文件型病毒检测消除程序
汇编源码--frespace
汇编源码--getspace
汇编源码--DEV
汇编源码--getsect
汇编源码--alarm

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31