NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/PS *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/KERNEL.I *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPSPtr .BS 2 ZPArgV .BS 2 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 #32 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.MSG0 .DA MSG0 L.MSG1 .DA MSG1 L.MSG2 .DA MSG2 L.MSG3 .DA MSG3 .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN lda #1 >SYSCALL ArgV bcs .10 >SYSCALL atoi bcs .90 tax bne .90 tya * ldx #0 .11 cmp PS.Table.PID,x beq .12 inx cpx #K.PS.MAX bne .11 lda #E.NSP * sec rts .12 jsr CS.RUN.DUMP bcs .9 lda #0 sec rts .10 >PUSHBI 0 >LDYA L.MSG0 >SYSCALL printf >LDA.G PS.Index .1 tax beq .2 PS0 lda PS.Table.PID,x beq .7 .2 jsr CS.RUN.DUMP >SLEEP .7 >INC.G PS.Index cmp #K.PS.MAX bne .1 .8 lda #0 tell Kernel that all done ok, but sec we do not want to stay in memory .9 rts .90 lda #E.SYN sec rts *-------------------------------------- CS.RUN.DUMP phx lda PS.Table.hPS,x >SYSCALL GetMemPtr >STYA ZPPSPtr ldy #S.PS.PPID lda (ZPPSPtr),y >PUSHA Parent PID ldy #S.PS.hUsr lda (ZPPSPtr),y >PUSHA jsr CS.RUN.DecodeFlags >PUSHEA.G PS.FLAGS plx lda PS.Table.Stats,x >PUSHA CPU% ldy #S.PS.PID lda (ZPPSPtr),y >PUSHA >PUSHBI 6 >LDYA L.MSG1 >SYSCALL printf bcs .9 jmp CS.RUN.PrintArgs .9 rts *-------------------------------------- CS.RUN.DecodeFlags lda (ZPPSPtr) Get flags ldy #PS.FLAGS+7 ldx #7 .2 lsr pha lda #'-' bcc .3 lda MSG.FLAGS,x .3 sta (pData),y pla dey dex bpl .2 rts *-------------------------------------- CS.RUN.PrintArgs ldy #S.PS.hARGV lda (ZPPSPtr),y beq .8 NO ARGV in PS0 >SYSCALL GetMemPtr >STYA ZPArgV .1 lda (ZPArgV) beq .8 >PUSHW ZPArgV >PUSHBI 2 >LDYA L.MSG2 >SYSCALL printf bcs .9 .2 inc ZPArgV bne .3 inc ZPArgV+1 .3 lda (ZPArgV) bne .2 inc ZPArgV bne .1 inc ZPArgV+1 bra .1 .8 >PUSHBI 0 >LDYA L.MSG3 >SYSCALL printf .9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- CS.END MSG0 .AZ "\e[7lID CPU\% Flags UID PID Command Line\r\n" MSG1 .AZ "%03d %3d\% %s %03d %03d" MSG2 .AZ " %s" MSG3 .AZ "\r\n" MSG.FLAGS .AS "IRQDHSEN" *-------------------------------------- .DUMMY .OR 0 DS.START PS.Index .BS 1 PS.FLAGS .BS 9 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/PS.S ASM