Category : Display Utilities
Archive   : BRNOT231.ZIP
Filename : BURNOUT.ASM

 
Output of file : BURNOUT.ASM contained in archive : BRNOT231.ZIP

Comment *

BURNOUT by Chris Dunford - demo program to
access/change/display BRNDEV parameters.

To use, just type:

BURNOUT parameters

where the parameters are anything that's legal as a BRNDEV
option (as described in the documentation). For example:

BURNOUT 5000
BURNOUT 5000 H- F7

Preparation:
MASM burnout;
LINK burnout; [ignore NO STACK message]
EXE2BIN burnout burnout.com

Revised 23-Dec-1987 because I lost the source for the original.

*

; ---------------------------------------------------------
; DEFINITIONS section
;

; DOS functions we'll use
PRINT equ 9 ; Print a string$
FOPEN equ 3DH ; Open a file/device
FREAD equ 3FH ; Read from a file/device
FWRITE equ 40H ; Write to a file/device
EXIT equ 4CH ; Exit to DOS

; A couple of ASCII characters
LF equ 10
CR equ 13

; Macro to access DOS functions
DOS macro func
mov ah,func
int 21H
endm


code segment
assume cs:code, ds:code, es:code

; Where the commandline parameters will go (in the PSP)

org 80H
parm_len label byte ; Parameter length attribute

org 81H
parms label byte ; Parameter text

; Program entry point
org 100H
burnout:
jmp start ; Jump to code


; ------------------------------------------------------------------
; DATA section
;

; BURNOUT system device name (ASCIIZ format)
devname db 'BRNDEV',0

; BRNDEV's reset and execute characters
reset db '@'
execute db '#'

; Message displayed if BRNDEV isn't installed
not_installed$ db 'Burnout device is not installed',CR,LF,'$'

; Status report message, followed IMMEDIATELY by the buffer
; into which the BRNDEV status report is read. These are
; displayed in one operation, so don't separate the two.
status$ db 'Current status: '
buffer db 15 dup (0)

; -------------------------------------------------------------
; CODE section
;

start:

; See if BRNDEV is installed
mov dx,offset devname ; File name is 'BRNDEV'
mov al,2 ; Open for read/write
DOS fopen
jnc rewind ; If no carry, BRNDEV is installed

; BURNOUT isn't installed
mov dx,offset not_installed$ ; Display error message
DOS print
mov al,1 ; Exit with errorlevel 1
jmp bye

; It's installed. Send a '@' to the device. This prepares
; the device for accepting new operating parameters and it
; places the current BRNDEV status into BRNDEV's I/O buffer.
; If there are no command line options, we'll go directly
; to the READ portion, and the status report will be current.
rewind:
mov bx,ax
mov dx,offset reset
mov cx,1
DOS fwrite

; If there are command line parameters, send them to the device.

; No options if parm length is zero
mov al,parm_len
or al,al
jz get_status

; Write options to the device
cbw
mov cx,ax ; CX = parameter length
mov dx,offset parms
DOS fwrite

; Send a '#' to force parsing of the options we just sent.
; This also updates the status report in the BRNDEV i/o buffer.
mov dx,offset execute
mov cx,1
DOS fwrite

; Read and display current BRNDEV status
get_status:

; Read from device into our buffer
mov dx,offset buffer
mov cx,255
DOS fread

; Add an LF and a '$' to what BRNDEV sent
mov di,dx ; DI -> start to status report
add di,ax ; DI -> end of report (past CR)
mov word ptr [di],'$' shl 8 + LF ; Put LF + '$' there for DOS fn 9

; Display the results
mov dx,offset status$
DOS print

; Errorlevel 0
xor al,al

; Common exit. AL should have errorlevel at this point.
bye:
DOS exit

code ends
end burnout