A2osX/BIN/LSDEV.S.txt
2023-10-18 07:41:12 +02:00

273 lines
5.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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