view 3rdparty/utils/boisy/timer.asm @ 3210:6353bb024571

Created makefile and defsfile for NoCan RAMMER module driver and descriptor Updated rammer.asm in the NoCan driver folder to build the NoCan version of the Driver Updated r0.asm file to create the 6MB version of the descriptor. The makefile creates a disk image with two sets of the required drivers for the 6309 and 6809's in their respective module folders. /NITROS9/6309_L2/MODULES/RBF for the 6309 files and /NITROS9/6809_L2/MODULES/RBF for the 6809 files. This will make it easier for doing a dsave from this disk image into a normal distro disk image so people have these drivers ready for when new memory upgrades allow compatible usage of the NoCan registers.
author David Ladd <drencor-xeen@users.sourceforge.net>
date Wed, 20 Dec 2017 15:15:49 -0600
parents 0e08f0830fd8
children
line wrap: on
line source

************************************************************
* Timer - Benchmarks a program with accuracy to one second
*
* By: Boisy G. Pitre
*     Southern Station, Box 8455
*     Hattiesburg, MS  39406-8455
*     Internet:  bgpitre@seabass.st.usm.edu
*
* Usage:  Timer <program> [params]
*
* Timer is a benchmark utility that is used to rate the speed of an
* OS-9 program.
*

         nam   Timer
         ttl   Benchmark utility

         ifp1
         use   defsfile
         endc

         mod   Size,Name,Prgrm+Objct,ReEnt+1,Start,Fin

Name     fcs   /Timer/
Ed       fcb   $02

Delim    rmb   1
TempX    rmb   2
Count    rmb   1
ProgName rmb   70
ParmBuff rmb   200
OldTime  rmb   6
NewTime  rmb   6
Digit    rmb   2
Stack    rmb   200
Parms    rmb   200
Fin      equ   .

HelpMsg  fcc   /Usage:  Timer <progname> [params]/
SpCR     fcb   C$SPAC,C$LF,C$CR
HelpLen  equ   *-HelpMsg


Header   fdb   C$LF,C$CR
         fcc   /Timer Statistics:/
         fdb   C$LF,C$CR,C$LF,C$CR
         fcc   /Command line:  /
Header1  fcc   /Date:  /
Header2  fcc   /Start Time:  /
Header3  fcc   /Stop  Time:  /
Colon    fcc   /:/
Slash    fcc   "/"

Start    decb                          Check for params
         lbeq  Help                    if none, show help
         lda   #C$CR
         leay  ParmBuff,u              Else put a CR in param buffer
         sta   ,y

         leay  ProgName,u              and put progname in progname buffer
GetName  lda   ,x+
         sta   ,y+
         cmpa  #C$SPAC                 any space after name?
         beq   PlaceCR                 Yep, assume params are on line
         cmpa  #C$CR                   Is next char a CR?
         bne   GetName                 nope, not finished getting name
         bra   GetTime                 else assume no params...

PlaceCR  lda   #C$CR                   Put CR behind progname,
         sta   -1,y

SkipSpac lda   ,x+                     skip leading spaces
         cmpa  #C$SPAC
         beq   SkipSpac
         leax  -1,x

SaveParm leay  ParmBuff,u              and store params in param buffer
Loop     lda   ,x+
         sta   ,y+
         cmpa  #C$CR                   Is char a CR?
         beq   GetTime                 Yep, we're finished parsing
         bra   Loop                    else get next char

GetTime  lda   #Prgrm+Objct            We'll take care of some F$FORK
         ldb   #8                      params to minimize the time between
         ldy   #200                    grabbing the time and forking.
         leax  OldTime,u               
         os9   F$Time                  Now we get the time
         lbcs  Error

         leax  ProgName,u              and point to the program name
         pshs  u                       save the u pointer value
         leau  ParmBuff,u              and point u to the param buffer
         os9   F$Fork                  Fork the program
         bcs   Error
         os9   F$Wait                  and wait for it to complete

         puls  u                       get the u pointer value
         leax  NewTime,u               and get the new time
         os9   F$Time
         bcs   Error


* Print the Header and command line

         leax  Header,pcr
         ldy   #38
         lda   #2
         os9   I$Write
         bcs   Error

         leax  ProgName,u
         ldb   #$0d
         bsr   PrnNam

         leax  SpCR,pcr
         ldy   #1
         lda   #2
         os9   I$Write
         bcs   Error

         leax  ParmBuff,u
         ldy   #200
         lda   #2
         os9   I$WritLn
         bcs   Error
         bra   DateShow

**********************************************************************
* PrnNam - Prints a string character-by-character until it encounters
* a specific character in B
*
* Entry: X - Address of string
*        B - Byte character to halt at
*
* Exit:  None
*

PrnNam   lda   #2
         ldy   #1
Prn2     cmpb  ,x                      compare B to char
         bne   Prn3                    if not equal, print...
         rts                           else return
Prn3     os9   I$Write                 Write out character
         bcs   Error
         leax  1,x
         bra   Prn2


* Print the date

DateShow leax  Header1,pcr
         ldy   #7
         os9   I$Write
         bcs   Error
         leax  Slash,pcr
         lda   ,x
         sta   Delim,u
         leax  OldTime,u               Set X to old time packet+3
         ldb   #2
         bsr   ShowTime                and sub to showtime
         bra   OldShow

* We're done!

Done     clrb
Error    os9   F$Exit

* Show the Old Time

OldShow  lda   #2
         leax  Header2,pcr             Write the old time message
         ldy   #13
         os9   I$Write
         bcs   Error
         leax  Colon,pcr
         lda   ,x
         sta   Delim,u
         leax  OldTime+3,u             Set X to old time packet+3
         ldb   #2
         bsr   ShowTime                and sub to showtime

NewShow  leax  Header3,pcr             Write the new time message
         ldy   #13
         os9   I$Write
         bcs   Error
         leax  NewTime+3,u             Set X to new time packet+3
         ldb   #2
         bsr   ShowTime                and sub to showtime
         bra   Done

* Help routine

Help     leax  HelpMsg,pcr             Point to the help message
         ldy   #HelpLen                and load the length
         lda   #2                      we'll write to StdErr
         os9   I$Write
         bcs   Error
         bra   Done                    and leave!

*******************************************************
* ShowTime routine - Prints date/time format
*
* Entry: X - Address of packet
*        B - (Number of bytes to convert)-1
*
* Exit:  None
*

ShowTime stb   Count,u                 store count in counter address
ShowLoop ldb   ,x+                     load X with byte
         stx   TempX,u                 save the X value
         pshs  u                       save the U value
         leau  Digit,u                 and point to the digit buffer
         bsr   Str2Num                 sub to the actual conversion routine
         puls  u                       get the U value
         lda   #2
         ldy   #2
         leax  Digit,u                 and write the two digits
         os9   I$Write
         bcs   Error
         tst   Count,u                 is count at 0?
         beq   PutCR                   yep, put a CR
         dec   Count,u                 else decrement count
         ldy   #1                      and print the delimiter
         leax  Delim,u
         os9   I$Write
         bcs   Error
         ldx   TempX,u                 get the X value
         bra   ShowLoop                and get the next time byte
PutCR    lda   #2
         ldy   #2
         leax  SpCR+1,pcr                print a CR for next line
         os9   I$Write
         lbcs  Error
Return   rts                           Return to caller!

************************************************************
* Str2Num:  Converts a one byte representation to its string
*           counterpart in the range of 0-255.
*
*  Entry:  U - Address to store text digits
*          B - Byte to convert
*
*  Exit:   None
*

Str2Num  pshs  a,b,u
         lda   #$2f
         inca
p1       subb  #$64
         bcc   p1
         sta   ,u+
         cmpa  #$30
         bne   p2
         leau  -1,u
p2       lda   #$3a
p3       deca
         addb  #$0a
         bcc   p3
         sta   ,u+
         addb  #$30
         stb   ,u+
         puls  a,b,u
         rts

         emod
Size     equ   *
         end