A2osX/BIN/MEMDUMP.S.txt
2020-03-06 17:20:29 +01:00

446 lines
7.7 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/memdump
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/IO.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPPTR2 .BS 2
MEM.COUNT .BS 1
USED.COUNT .BS 1
bSTOP .BS 1
ZPReadAux sta SETREADAUX
lda (ZPPTR1),y
sta CLRREADAUX
rts
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.MSG1X .DA MSG1X
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
CS.INIT.RTS rts
*--------------------------------------
CS.RUN ldx #ZPCodeLen-1
.1 lda ZPCode,x
sta ZPReadAux,x
dex
bpl .1
>LEA.G MemStat
>SYSCALL GetMemStat
jsr CS.RUN.INIT
CS.RUN.LOOP inc MEM.COUNT skip slot 0
lda bSTOP
beq .1
.10 >SYSCALL GetChar
bcs CS.INIT.RTS
cmp #3 Ctrl-C
beq CS.INIT.RTS
cmp #$13 Ctrl-S
stz bSTOP
.1 lda (ZPPTR1)
bpl .2
inc USED.COUNT
.2 jsr CS.RUN.PRINTMEM
lda ZPPTR1
clc
adc #S.MEM
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 lda MEM.COUNT
>CMP.G MemStat+S.MSTAT.MLast
bne CS.RUN.LOOP
jsr CS.RUN.MSTAT
jsr CS.RUN.INIT
CS.RUN.LOOPX inc MEM.COUNT skip slot 0
lda bSTOP
beq .1
.10 >SYSCALL GetChar
bcs CS.INIT.RTS
cmp #3 Ctrl-C ?
beq CS.INIT.RTS
cmp #$13 Ctrl-S
bne .10
stz bSTOP
.1 ldy #S.MEM.F
jsr ZPReadAux
bpl .2
inc USED.COUNT
.2 jsr CS.RUN.PRINTMEMX
lda ZPPTR1
clc
adc #S.MEM
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 lda MEM.COUNT
>CMP.G MemStat+S.MSTAT.XLast
bne CS.RUN.LOOPX
CS.RUN.XSTAT >PUSHW L.MSG2
>PUSHB USED.COUNT
>PUSHB MEM.COUNT
>PUSHBI 2
>SYSCALL PrintF
>PUSHW L.MSG3
>PUSHW.G MemStat+S.MSTAT.XH
>PUSHW.G MemStat+S.MSTAT.XF
>PUSHW.G MemStat+S.MSTAT.XL
>LDA.G MemStat+S.MSTAT.XF
sec
>SBC.G MemStat+S.MSTAT.XL
pha
>LDA.G MemStat+S.MSTAT.XF+1
>SBC.G MemStat+S.MSTAT.XL+1
ply
>PUSHYA
>PUSHBI 8
>SYSCALL PrintF
lda #0
sec
rts
*--------------------------------------
CS.RUN.MSTAT >PUSHW L.MSG2
>PUSHB USED.COUNT
>PUSHB 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.INIT >LDYAI Mem.Table+S.MEM skip slot 0
>STYA ZPPTR1
>LDYA L.MSG0
>SYSCALL PutS
stz MEM.COUNT
stz USED.COUNT
rts
*--------------------------------------
CS.RUN.PRINTMEM >PUSHW L.MSG1
>PUSHB 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
tax
>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
txa
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
>SYSCALL PrintF
rts
.2 >PUSHW L.MSG1.HEX
ldy #0
.3 >PUSHB (ZPPTR2),y
iny
cpy #16
bne .3
>PUSHBI 16
>SYSCALL PrintF
rts
CS.RUN.PRINTMEM.BIN
>PUSHW L.MSG1.BIN
ldy #S.MEM.BIN
lda (ZPPTR1),y
>SYSCALL GetMemPtr
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.PRINTMEMX
>PUSHW L.MSG1X
>PUSHB MEM.COUNT
ldy #S.MEM.F Get flags
jsr ZPReadAux
ldy #MEM.FLAGS+7
ldx #7
.20 lsr
pha
lda #'-'
bcc .30
lda MSG.FLAGSX,x
.30 sta (pData),y
pla
dey
dex
bpl .20
>PUSHEA.G MEM.FLAGS
ldy #S.MEM.OWNERPID
jsr ZPReadAux
tax
>PUSHA
ldy #S.MEM.REFCNT
jsr ZPReadAux
>PUSHA
ldy #S.MEM.PTR+1
jsr ZPReadAux
>PUSHA
dey
jsr ZPReadAux
>PUSHA
ldy #S.MEM.LEN+1
jsr ZPReadAux
>PUSHA
dey
jsr ZPReadAux
>PUSHA
ldy #S.MEM.F
jsr ZPReadAux Get flags
bpl .12
txa
jsr CS.RUN.CHECKPS
bcc .12
>PUSHW L.MSG1.INV
>PUSHBI 0
>SYSCALL PrintF
.12 >PUSHBI 9
>SYSCALL PrintF
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
ZPCode sta SETREADAUX
lda (ZPPTR1),y
sta CLRREADAUX
rts
ZPCodeLen .EQ *-ZPCode
*--------------------------------------
MSG0 .AZ "hMem Flags PID REF PTR LEN BINPATH/DATA"
MSG1.INV .AZ "\e[7m"
MSG1 .AZ "$%h %s %3d %3d $%H %5D "
MSG1X .AZ "$%h %s %3d %3d $%H %5D\e[0m\r\n"
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\r\n"
MSG.FLAGS .AS "UZXAfcds"
MSG.FLAGSX .AS "UZXAidep"
*--------------------------------------
.DUMMY
.OR 0
DS.START
MemStat .BS S.MSTAT
MEM.FLAGS .BS 9
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/MEMDUMP.S
ASM