NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/lsdev
*--------------------------------------
				.INB inc/macros.i
				.INB inc/mli.i
				.INB inc/a2osx.i
				.INB inc/kernel.i
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ZPFDPtr			.BS 2
hFD				.BS 1
ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA #0					S.PS.F.EVENT
				.DA #0
				.DA CS.END-CS.START		Code Size (without Constants)
				.DA DS.END-DS.START		Data SegmentSize
				.DA #64					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.EVENT		
				.DA	CS.QUIT
L.MSG.Header	.DA MSG.Header
L.MSG.FD		.DA MSG.FD
L.MSG.DEV		.DA MSG.DEV
L.MSG.DEV.ERR	.DA MSG.DEV.ERR
L.MSG.DEV.DIB	.DA MSG.DEV.DIB
L.MSG.DEV.NA	.DA MSG.DEV.NA
L.MSG.DEV.B		.DA MSG.DEV.B
J.FD			.DA DumpFD.REG
				.DA DumpFD.DIR
				.DA DumpFD.CDEV
				.DA DumpFD.CDEV
				.DA DumpFD.LNK
				.DA DumpFD.DSOCK
				.DA DumpFD.SSOCK
				.DA DumpFD.PIPE
L.FD.T			.DA FD.T.REG
				.DA FD.T.DIR
				.DA FD.T.CDEV
				.DA FD.T.BDEV
				.DA FD.T.LNK
				.DA FD.T.DSOCK
				.DA FD.T.SSOCK
				.DA FD.T.PIPE
				.DA 0
*--------------------------------------
CS.INIT			clc
				rts
*--------------------------------------
CS.RUN			>LDYA L.MSG.Header
				>SYSCALL PutS

				ldx #1

.1				stx hFD
				lda FDs.pHI-1,x
				beq .7

				sta ZPFDPtr+1
				lda FDs.pLO-1,x
				sta ZPFDPtr

				jsr DumpFD
				bcs .9

				ldx hFD

.7				inx
				cpx #K.FD.MAX+1
				bne .1

.8				lda #0
				sec
.9				rts
*--------------------------------------
DumpFD			>PUSHW L.MSG.FD

				>PUSHB hFD

				ldy #S.FD.DEV.BUSID
				lda (ZPFDPtr),y
				asl
				asl
				asl
				asl
				
				iny 					#S.FD.DEV.DEVID
				ora (ZPFDPtr),y
				>PUSHA

				lda (ZPFDPtr)			S.FD.T	
				tax
				>PUSHW L.FD.T,x

				ldy #S.FD.DEV.BUSPTR+1
				>PUSHB (ZPFDPtr),y
				dey
				>PUSHB (ZPFDPtr),y
				
				>PUSHBI 6
				
				>SYSCALL PrintF
				
				lda (ZPFDPtr)
				tax
				jmp (J.FD,x)
*--------------------------------------
DumpFD.CDEV
DumpFD.BDEV		>PUSHW L.MSG.DEV

				lda ZPFDPtr
				clc
				adc #S.FD.DEV
				tay
				lda ZPFDPtr+1
				adc /S.FD.DEV

				>PUSHYA
				
				>PUSHBI 2
				
				>SYSCALL PrintF
				bcs .9
				
				ldy #DEV.DIB+S.DIB-1
				ldx #S.DIB-1
				
.1				lda BLANK.DIB,x
				sta (pData),y		
				dey
				dex
				bpl .1

				lda #S.IOCTL.S.GETDIB
				>STA.G DEV.IOCTL+S.IOCTL.S
				
				>LEA.G DEV.DIB
				>STYA.G DEV.IOCTL+S.IOCTL.BUFPTR

				>PUSHB hFD
				>PUSHBI IOCTL.STATUS
				>PUSHEA.G DEV.IOCTL
				>SYSCALL IOCTL
				bcc DumpFD.DevDIB
				
				pha
				>PUSHW L.MSG.DEV.ERR
				pla
				>PUSHA
				>PUSHBI 1
				>SYSCALL PrintF
				
.9				rts
*--------------------------------------
DumpFD.DevDIB	>PUSHW L.MSG.DEV.DIB

				>LDA.G DEV.DIB+S.DIB.S

				ldy #DEV.SFLAGS+7
				ldx #7

.1				lsr
				pha
				lda #'-'
				bcc .2

				lda MSG.SFLAGS,x

.2				sta (pData),y
				pla
				dey
				dex
				bpl .1
				
				>PUSHEA.G DEV.SFLAGS
				>PUSHB.G DEV.DIB+S.DIB.T
				>PUSHB.G DEV.DIB+S.DIB.ST
				>PUSHEA.G DEV.DIB+S.DIB.IDS
				>PUSHB.G DEV.DIB+S.DIB.VERSION
				>PUSHB.G DEV.DIB+S.DIB.VERSION+1

				>PUSHBI 8

				>SYSCALL PrintF
				bcs .9

				>LDA.G DEV.DIB+S.DIB.S
				bpl DumpFD.NA			char device...

				>PUSHW L.MSG.DEV.B
				
				>PUSHBI 0
				>PUSHB.G DEV.DIB+S.DIB.SIZE+2
				>PUSHB.G DEV.DIB+S.DIB.SIZE+1
				>PUSHB.G DEV.DIB+S.DIB.SIZE
				>PUSHBI 4
				>SYSCALL PrintF
.9				rts
*--------------------------------------				
DumpFD.REG
DumpFD.DIR
DumpFD.LNK
DumpFD.DSOCK
DumpFD.SSOCK
DumpFD.PIPE

DumpFD.NA		>LDYA L.MSG.DEV.NA
				>SYSCALL PutS
				rts
*--------------------------------------
CS.EVENT		sec
				rts
*--------------------------------------
CS.QUIT			clc
				rts
*--------------------------------------
CS.END
MSG.Header		.CZ "hFD ID Type Addr Name         Status   TP.ST IDString         Version Size (BLK)"
MSG.FD			.CZ " %2h %h %4s %H "
MSG.DEV			.CZ "%12s "
MSG.DEV.ERR		.CZ "[%h] Device Error.\r\n"
MSG.DEV.DIB		.CZ "%s %h.%h %16S %3d.%3d "
MSG.DEV.B		.CZ "%10u\r\n"
MSG.DEV.NA		.CZ "n/a"
*--------------------------------------
MSG.SFLAGS		.AS "bwrlneio" 
*--------------------------------------
FD.T.REG		.AZ "REG"
FD.T.DIR		.AZ "DIR"
FD.T.CDEV		.AZ "CDEV"
FD.T.BDEV		.AZ "BDEV"
FD.T.LNK		.AZ "LNK"
FD.T.DSOCK		.AZ "DSCK"
FD.T.SSOCK		.AZ "SSCK"
FD.T.PIPE		.AZ "PIPE"
*--------------------------------------
BLANK.DIB		.DA #0					#S.DIB.S.BLOCK+S.DIB.S.WRITE+S.DIB.S.READ
				.BS 3
				.PS "(No IDS String!)"
				.DA #0
				.DA #0
				.DA 0					K.VER
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
DEV.IOCTL		.BS S.IOCTL
DEV.DIB			.BS S.DIB
DEV.SFLAGS		.BS 9
DS.END			.ED
*--------------------------------------
MAN
SAVE usr/src/bin/lsdev.s
ASM
