NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/memdump *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/KERNEL.I *-------------------------------------- PAGELEN .EQ 22 *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPTR1 .BS 2 ZPPTR2 .BS 2 ZPPSPtr .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.INV .DA MSG1.INV L.MSG1 .DA MSG1 L.MSG1.BIN .DA MSG1.BIN L.MSG1.STR .DA MSG1.STR L.MSG1.HEX .DA MSG1.HEX L.MSG2 .DA MSG2 L.MSG3 .DA MSG3 .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN >LEA.G MemStat >SYSCALL GetMemStat >LDYAI Mem.Table+S.MEM >STYA ZPPTR1 >LDYA L.MSG0 >SYSCALL puts >INC.G MEM.COUNT skip slot 0 CS.RUN.LOOP >LDA.G bSTOP beq .1 .10 >SYSCALL GetChar cmp #3 Ctrl-C ? beq CS.RUN.LOOP.RTS cmp #C.SPACE bne .10 >STZ.G bSTOP .1 lda (ZPPTR1) bpl .2 >INC.G USED.COUNT .2 jsr CS.RUN.PRINTMEM lda ZPPTR1 clc adc #S.MEM sta ZPPTR1 bcc .3 inc ZPPTR1+1 .3 >INC.G MEM.COUNT >CMP.G MemStat+S.MSTAT.MLast beq CS.RUN.FOOTER bra CS.RUN.LOOP CS.RUN.LOOP.RTS rts CS.RUN.FOOTER >SYSCALL GetChar bcs CS.RUN.LOOP.RTS >PUSHW L.MSG2 >PUSHB.G USED.COUNT >PUSHB.G MEM.COUNT >PUSHBI 2 >SYSCALL printf >PUSHW L.MSG3 >PUSHW.G MemStat+S.MSTAT.MH >PUSHW.G MemStat+S.MSTAT.MF >PUSHW.G MemStat+S.MSTAT.ML >LDA.G MemStat+S.MSTAT.MF sec >SBC.G MemStat+S.MSTAT.ML pha >LDA.G MemStat+S.MSTAT.MF+1 >SBC.G MemStat+S.MSTAT.ML+1 ply >PUSHYA >PUSHBI 8 >SYSCALL printf lda #0 sec rts *-------------------------------------- CS.RUN.PRINTMEM >PUSHW L.MSG1 >PUSHB.G MEM.COUNT lda (ZPPTR1) Get flags ldy #MEM.FLAGS+7 ldx #7 .20 lsr pha lda #'-' bcc .30 lda MSG.FLAGS,x .30 sta (pData),y pla dey dex bpl .20 >PUSHEA.G MEM.FLAGS ldy #S.MEM.OWNERPID lda (ZPPTR1),y >PUSHA ldy #S.MEM.REFCNT lda (ZPPTR1),y >PUSHA ldy #S.MEM.PTR+1 lda (ZPPTR1),y >PUSHA dey lda (ZPPTR1),y >PUSHA ldy #S.MEM.LEN+1 lda (ZPPTR1),y >PUSHA dey lda (ZPPTR1),y >PUSHA lda (ZPPTR1) Get flags bpl .12 ldy #S.MEM.OWNERPID lda (ZPPTR1),y jsr CS.RUN.CHECKPS bcc .12 >PUSHW L.MSG1.INV >PUSHBI 0 >SYSCALL printf .12 >PUSHBI 9 >SYSCALL printf lda (ZPPTR1) and #S.MEM.F.CODE bne CS.RUN.PRINTMEM.BIN CS.RUN.PRINTMEM.DATA ldy #S.MEM.PTR lda (ZPPTR1),y sta ZPPTR2 iny lda (ZPPTR1),y sta ZPPTR2+1 ldy #$0 .1 lda (ZPPTR2),y Check if it looks like a printable string beq .11 bmi .2 cmp #$20 bcc .2 not printable....->hex iny bne .1 .11 >PUSHW L.MSG1.STR tya beq .2 Starting with 0...PrintHEX >PUSHA len >PUSHW ZPPTR2 String >PUSHBI 3 bra CS.RUN.PRINTMEM.OUT .2 >PUSHW L.MSG1.HEX ldy #0 .3 >PUSHB (ZPPTR2),y iny cpy #16 bne .3 >PUSHBI 16 bra CS.RUN.PRINTMEM.OUT CS.RUN.PRINTMEM.BIN >PUSHW L.MSG1.BIN ldy #S.MEM.BIN lda (ZPPTR1),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 CS.RUN.PRINTMEM.OUT >SYSCALL printf >INC.G LINE.COUNT cmp #PAGELEN beq .9 rts .9 lda #$FF >STA.G bSTOP inc >STA.G LINE.COUNT rts *-------------------------------------- CS.RUN.CHECKPS ldx #0 .1 cmp PS.Table.PID,x beq .8 inx cpx K.PS.MAX bne .1 rts CS .8 clc rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- CS.END MSG0 .AZ "hMem Flags PID REF PTR LEN BINPATH/DATA" MSG1.INV .AZ "\e[7m" MSG1 .AZ "$%h %s %3d %3d $%H %5D " MSG1.BIN .AZ "{%s}\e[0m\r\n" MSG1.STR .AZ "[%03d:%s]\e[0m\r\n" MSG1.HEX .AZ "?HEX:%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h.%h%h\e[0m\r\n" MSG2 .AZ "\r\nAllocated hMem:%d, Total:%d\r\n" MSG3 .AS "High Memory: $%H\r\n" .AS "Free ULimit: $%H\r\n" .AS "Low Memory: $%H\r\n" .AZ "\r\nFree Memory: %D Bytes.\r\n" MSG.FLAGS .AS "UZXAfcds" *-------------------------------------- .DUMMY .OR 0 DS.START LINE.COUNT .BS 1 MEM.COUNT .BS 1 USED.COUNT .BS 1 bSTOP .BS 1 MemStat .BS S.MSTAT MEM.FLAGS .BS 9 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/MEMDUMP.S ASM