PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/BIN/DEV/MEMDUMP *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I *-------------------------------------- PAGELEN .EQ 22 FOOTERLEN .EQ 8 *-------------------------------------- ZPPTR1 .EQ ZPBIN ZPPTR2 .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START Code Length To Relocate .DA DS.END-DS.START Data Segment to Allocate .DA 0 .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.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 L.MSG4 .DA MSG4 L.MSG5 .DA MSG5 L.MSG6 .DA MSG6 .DA 0 *-------------------------------------- CS.INIT ldy #MEM.COUNT Skip SLOT0 lda (pData),y inc sta (pData),y lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts *-------------------------------------- CS.RUN >SYSCALL GetChar bcs .13 cmp #3 Ctrl-C ? beq .9 cmp #19 Ctrl-S ? bne .12 ldy #bSTOP lda (pData),y eor #$ff sta (pData),y bra .13 .12 ldy #bSTOP lda #0 sta (pData),y .13 ldy #bSTOP lda (pData),y bne .8 ldy #MEM.COUNT lda (pData),y cmp MemMgr.LastSlot beq .10 ldy #LINE.COUNT lda (pData),y bne .1 >LDYA L.MSG0 >SYSCALL PrintF.YA .1 ldy #MEM.COUNT lda (pData),y >SYSCALL GetMemByID.A >STYA ZPPTR1 lda (ZPPTR1) bpl .2 ldy #USED.COUNT lda (pData),y inc sta (pData),y .2 jsr CS.RUN.PRINTMEM ldy #MEM.COUNT lda (pData),y inc sta (pData),y .8 clc rts .9 sec rts .10 ldy #LINE.COUNT lda (pData),y clc adc #FOOTERLEN cmp #PAGELEN bcc .11 lda #$FF ldy #bSTOP sta (pData),y lda #0 ldy #LINE.COUNT sta (pData),y clc rts .11 ldy #MEM.COUNT >PUSHB (pData),y ldy #USED.COUNT >PUSHB (pData),y >LDYA L.MSG2 >SYSCALL PrintF.YA >PUSHW MemMgr.HiMem >LDYA L.MSG3 >SYSCALL PrintF.YA >PUSHW MemMgr.Free >LDYA L.MSG4 >SYSCALL PrintF.YA >PUSHW MemMgr.LoMem >LDYA L.MSG5 >SYSCALL PrintF.YA lda MemMgr.Free sec sbc MemMgr.LoMem tay lda MemMgr.Free+1 sbc MemMgr.LoMem+1 >PUSHYA >LDYA L.MSG6 >SYSCALL PrintF.YA sec rts *-------------------------------------- CS.RUN.PRINTMEM ldy #S.MEM.LEN lda (ZPPTR1),y pha iny lda (ZPPTR1),y ply >PUSHYA ldy #S.MEM.PTR lda (ZPPTR1),y pha iny lda (ZPPTR1),y ply >PUSHYA ldy #S.MEM.REFCNT lda (ZPPTR1),y >PUSHA ldy #S.MEM.OWNERPID lda (ZPPTR1),y >PUSHA lda (ZPPTR1) >PUSHA ldy #MEM.COUNT lda (pData),y >PUSHA >LDYA L.MSG1 >SYSCALL PrintF.YA lda (ZPPTR1) Free ? assume raw data... bpl .10 ldy #S.MEM.BIN lda (ZPPTR1),y bne .7 ****** DATA .10 ldy #S.MEM.PTR lda (ZPPTR1),y sta ZPPTR2 iny lda (ZPPTR1),y sta ZPPTR2+1 lda (ZPPTR2) tay .1 lda (ZPPTR2),y Check if it looks like a printable string cmp #$20 bcc .2 not printable....->hex dey bne .1 >PUSHW ZPPTR2 String >PUSHB (ZPPTR2) Len >LDYA L.MSG1.STR >SYSCALL PrintF.YA bra .8 .2 ldy #15 .3 >PUSHB (ZPPTR2),y dey bpl .3 >LDYA L.MSG1.HEX >SYSCALL PrintF.YA bra .8 ****** BIN .7 >SYSCALL GetMemPtr.A >PUSHYA >LDYA L.MSG1.BIN >SYSCALL PrintF.YA .8 ldy #LINE.COUNT lda (pData),y inc sta (pData),y cmp #PAGELEN bne .9 lda #$FF ldy #bSTOP sta (pData),y ldy #LINE.COUNT lda #0 sta (pData),y .9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- CS.END MSG0 >CSTR " # Flags PID REF PTR LEN BINPATH/DATA\r\n" MSG1 >CSTR "%03d %b %03d %03d $%H %05D " MSG1.BIN >CSTR "!BIN:%41s\r\n" MSG1.STR >CSTR "[%02h]:%41s\r\n" MSG1.HEX >CSTR "?HEX:%h%h%h%h.%h%h%h%h.%h%h%h%h.%h%h%h%h\r\n" MSG2 >CSTR "\r\nAllocated hMem:%d, Total:%d\r\n" MSG3 >CSTR "High Memory: $%H\r\n" MSG4 >CSTR "Free ULimit: $%H\r\n" MSG5 >CSTR "Low Memory: $%H\r\n" MSG6 >CSTR "\r\nFree Memory: %D Bytes.\r\n" *-------------------------------------- .DUMMY .OR 0 DS.START LINE.COUNT .BS 1 MEM.COUNT .BS 1 USED.COUNT .BS 1 bSTOP .BS 1 DS.END .ED *-------------------------------------- MAN SAVE /A2OSX.SRC/BIN/MEMDUMP.S ASM