view level1/cmds/devs.asm @ 2758:e4a0f58a5f9b

Found that people who do not have the envirornment variable NITROS9DIR set before building the project get a error missing file "/rules.mak". Found this is caused do to the fact that the code to set this envirornment variable is in the rules.mak which can't get loaded. To fix this the code needed to set the envirornment variable that is in the rules.mak is now in the makefile(s) right before the include for the rules.mak file. This should fix the problem for those who do not have the NITROS9DIR envirornment variable preset.
author drencor-xeen
date Mon, 14 Jan 2013 14:37:46 -0600
parents 84ea83668304
children
line wrap: on
line source

********************************************************************
* devs - Show device table entries
*
* $Id$
*
* Edt/Rev  YYYY/MM/DD  Modified by
* Comment
* ------------------------------------------------------------------
*   2      ????/??/??
* Original version.
*
*   3      ????/??/??  Alan DeKok
* Reworked.
*
*   3      2003/01/07  Boisy G. Pitre
* Renamed to devs ala OS-9/68K, reworked.

         nam   devs
         ttl   Show device table entries

         ifp1
         use   defsfile
         endc

tylg     set   Prgrm+Objct   
atrv     set   ReEnt+rev
rev      set   $00
edition  set   3

         mod   eom,name,tylg,atrv,start,size

MaxEnts  set   64		maximmum entries we display

         org   0
memstrt  rmb   2
outptr   rmb   2
counter  rmb   1
narrow   rmb   1
curdte   rmb   2
ddevtbl  rmb   2		device table pointer
devcount rmb   1
descptr  rmb   2
numbytes rmb   1
lnbuff   rmb   80
         IFGT  Level-1
datimg   rmb   4
devtbcpy rmb   MaxEnts*DEVSIZ
descrip  rmb   256
syspdesc rmb   P$Size
         ENDC
stack    rmb   200
size     equ   .

name     fcs   /devs/
         fcb   edition

Header1  fcc   /Device Table at: /
x12Len   equ   *-Header1
NHeader  fcc   /Dv Desc  Drvr   Stat  File  Usr/
         fcb   C$CR
NHeaderL equ   *-NHeader
NHeader2 fcc   /Nm Port  Name    Mem  Mgr   Cnt/
         fcb   C$CR
NHeader2L equ   *-NHeader2
NUndln    fcc  /-------  -----------  ----  ---/
         fcb   C$CR
NUndlnL  equ   *-NUndln
Header   fcc   /Device Desc  Driver Static  File    Usr/
         fcb   C$CR
HeaderL  equ   *-Header
Header2  fcc   /Name   Port  Name      Mem  Manager Cnt/
         fcb   C$CR
Header2L equ   *-Header2
Undln    fcc   /-----------  -------------  ------- ---/
MyCR     fcb   C$CR
UndlnL   equ   *-Undln
Init     fcs   /Init/

start    ldd   ,x         get parameter bytes
         cmpd  #$2D3F     -?
         lbeq  Help
         lda   #MaxEnts		get maximum entries we support
         sta   <devcount	and save as count
         leax  Init,pcr
         clra
         pshs  u
         os9   F$Link
         bcs   Exit
         lda   <DevCnt,u	get device count
         os9   F$UnLink		unlink module
         puls  u		restore static pointer
         cmpa  <devcount	is table same or larger than our default?
         bge   cont		branch if so
         sta   <devcount	else store smaller count
cont     stu   <memstrt
         clr   <narrow		assume wide
         lda   #$01
         ldb   #SS.ScSiz
         os9   I$GetStt
         bcs   cont2
         cmpx  #HeaderL+1
         bge   cont2
         sta   <narrow
cont2    leax  >MyCR,pcr
         ldy   #$0001
         os9   I$WritLn   output a CR
         lbcs  Exit 
         leax  >Header1,pcr dump out header
         ldy   #x12Len
         os9   I$Write  
         lbcs  Exit 
         IFGT  Level-1
         lda   #$01
         leax  >syspdesc,u
         os9   F$GPrDsc   get system process descriptor
         bcs   Exit 
         leax  <P$DATImg,x
         stx   <datimg     save address of system's DAT image
         ENDC
         bra   L00D3

ClnExit  clrb  
Exit     os9   F$Exit   

L00D3    equ   *
         IFGT  Level-1
         ldu   <memstrt
         leau  <ddevtbl,u
         ldd   <datimg
         ldx   #D.DevTbl  I/O device table
         ldy   #$0002     size of the pointer
         os9   F$CpyMem 
         lbcs  Exit 
         ldu   <memstrt
         ldd   <ddevtbl
         ELSE
         ldd   >D.DevTbl
         std   <ddevtbl
         ENDC
         leay  <lnbuff,u
         sty   <outptr
         lbsr  HexWord		output D as hex word
         lbsr  PrintBuf

         lda   #$01
         leax  >MyCR,pcr dump out another CR
         ldy   #$0001
         os9   I$WritLn 
         lbcs  Exit 

         leax  >Header,pcr
         ldy   #HeaderL
         tst   <narrow
         beq   branch1
         leax  >NHeader,pcr
         ldy   #NHeaderL
branch1  os9   I$WritLn 
         lbcs  Exit 

         leax  >Header2,pcr
         ldy   #Header2L
         tst   <narrow
         beq   branch2
         leax  >NHeader2,pcr
         ldy   #NHeader2L
branch2  os9   I$WritLn 
         lbcs  Exit 
         leax  >Undln,pcr
         ldy   #UndlnL
         tst   <narrow
         beq   branch3
         leax  >NUndln,pcr
         ldy   #NUndlnL
branch3  os9   I$WritLn 
         lbcs  Exit

         IFGT  Level-1
         ldu   <memstrt
         lda   <devcount
         ldb   #DEVSIZ
         mul
         tfr   d,y
         leau  >devtbcpy,u
         ldx   <ddevtbl
         ldd   <datimg
         os9   F$CpyMem   copy the device table over
         lbcs  Exit 
         stu   <curdte     save pointer to start of DevTbl
         ELSE
         ldd   <ddevtbl
         std   <curdte
         ENDC
         ldb   <devcount
         stb   <counter		total number of entries to get

L0155    bsr   L0165
         dec   <counter
         lbeq  ClnExit		if done them all, exit

         ldx   <curdte		get current pointer
         leax  DEVSIZ,x		go to the next one
         stx   <curdte		save the pointer again
         bra   L0155		and loop back

L0165    ldu   <memstrt		get static pointer
         leay  <lnbuff,u	point to line buffer
         sty   <outptr		save as ptr
         lda   #C$SPAC		space
         ldb   #5		assume this length
         tst   <narrow		are we narrow?
         beq   L0171		branch if not
         ldb   #3		else load new size
L0171    sta   ,y+		save spaces
         decb  
         bne   L0171

         ldx   <curdte     get the current pointer
         ldx   V$DESC,x   descriptor?
         bne   L017D      if exists, go do it
         rts              otherwise exit

L017D    equ   *
         IFGT  Level-1
         pshs  u
         leau  >descrip,u   to another buffer
         ldd   <datimg    system DAT image
         ldy   #256
         os9   F$CpyMem 
         puls  u
         lbcs  Exit 

         leax  >descrip,u   point to the start of the buffer
         ELSE
         stx   <descptr		save descriptor pointer
         ENDC
         ldd   M$Name,x   pointer to the name
         leax  d,x
         lda   #5		assume this size
         tst   <narrow		are we narrow?
         beq   branch4		branch if not
         lda   #3		else get new size
branch4  bsr   Str2Buf		dump out the first few bytes of the name

         IFGT  Level-1
         leax  >descrip,u
         ELSE
         ldx   <descptr
         ENDC
         tst   <narrow
         bne   skip1
         lda   M$Port,x   port address of the device
         lbsr  HexByte
         ldy   <outptr
         leay  -1,y
         sty   <outptr
skip1    ldd   M$Port+1,x
         lbsr  HexWord
         lbsr  Space
*         IFGT  Level-1
*         leax  >descrip,u
*         ELSE
*         ldx   <descptr
*         ENDC
         ldd   M$PDev,x   device driver name offset
         leax  d,x
         lda   #9
         tst   <narrow
         beq   branch5
         lda   #7
branch5  bsr   Str2Buf      dump out bytes of the driver name
         ldx   <curdte
         ldd   V$STAT,x
         lbsr  HexWord
         lbsr  Space
         IFGT  Level-1
         leax  >descrip,u
         ELSE
         ldx   <descptr
         ENDC
         ldd   M$FMGr,x   file manager name offset
         leax  d,x        point to it
         lda   #9
         tst   <narrow
         beq   branch6
         lda   #7
branch6  bsr   Str2Buf		dump out bytes of the file manager's name
         ldx   <curdte
         lda   V$USRS,x		use count
         lbsr  HexByte      print it
         ldx   <outptr
         leax  -1,x
         bra   L01E8

PrintBuf ldx   <outptr
L01E8    lda   #C$CR      save a CR in memory
         sta   ,x
         ldu   <memstrt
         leax  <lnbuff,u   to the buffer
         ldy   #80        80 characters max.
         lda   #1
         os9   I$WritLn   dump the buffer out
         lbcs  Exit 
         rts

* Entry:
*    A = number of bytes to write buffer
*    X = ptr to string to write to buffer
Str2Buf    sta   <numbytes	dump out A bytes at X
         clrb  
         bra   L0207

L0204    lbsr  Put2Buf
L0207    incb  			increment B
         cmpb  <numbytes	equal to number of bytes?
         bcc   NSpaces		branch if so
         lda   ,x+		else get byte at X
         bpl   L0204		branch if hi bit clear
         anda  #$7F		else clear it
         lbsr  Put2Buf          dump it out
         cmpb  <numbytes	compare against num bytes
         bcc   L0221		branch if equal

* Fill the rest with spaces
NSpaces  lbsr  Space
         incb  
         cmpb  <numbytes
         bcs   NSpaces
L0221    rts   

HexWord  pshs  b
         bsr   MakeHex
         puls  a
HexByte  bsr   MakeHex
Space    lda   #C$SPAC   output a space
         bra   Put2Buf

MakeHex  tfr   a,b
         lsra  
         lsra  
         lsra  
         lsra  
         bsr   L0238
         tfr   b,a
L0238    anda  #$0F       get the number
         cmpa  #$0A       >10?
         bcs   L0240      no, make it a number
         adda  #$07       if so, make it A-F
L0240    adda  #$30
* Entry: A = char to put in buffer
Put2Buf  pshs  x		save X
         ldx   <outptr		get buffer pointer
         sta   ,x+		store char and in X
         stx   <outptr		save new outptr
         puls  pc,x		and return

Help     lda   #1         to STDOUT
         leax  HMsg,pcr
         ldy   #HLen
         os9   I$Write
         clrb
         os9   F$Exit

HMsg     fcc   /devs: show devices in device table/
         fdb   C$CR,C$LF
HLen     equ   *-HMsg

         emod
eom      equ   *
         end