PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.DEV/BIN/MEMDUMP *-------------------------------------- .INB INC/MACROS.I .INB 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 .9 rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y bne .9 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 SYS.PrintFYA .1 ldy #MEM.COUNT lda (pData),y >SYSCALL SYS.GetMemByIDA >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 SYS.PrintFYA >PUSHW MemMgr.HiMem >LDYA L.MSG3 >SYSCALL SYS.PrintFYA >PUSHW MemMgr.Free >LDYA L.MSG4 >SYSCALL SYS.PrintFYA >PUSHW MemMgr.LoMem >LDYA L.MSG5 >SYSCALL SYS.PrintFYA lda MemMgr.Free sec sbc MemMgr.LoMem tay lda MemMgr.Free+1 sbc MemMgr.LoMem+1 >PUSHYA >LDYA L.MSG6 >SYSCALL SYS.PrintFYA 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 SYS.PrintFYA ldy #S.MEM.BIN lda (ZPPTR1),y bne .7 ****** DATA 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 SYS.PrintFYA bra .8 .2 ldy #15 .3 >PUSHB (ZPPTR2),y dey bpl .3 >LDYA L.MSG1.HEX >SYSCALL SYS.PrintFYA bra .8 ****** BIN .7 >SYSCALL SYS.GetMemPtrA >PUSHYA >LDYA L.MSG1.BIN >SYSCALL SYS.PrintFYA .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 ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y ldy #S.PS.hINDEV cmp (pPs),y bne .9 lda (pEvent) and #S.EVT.F.KEY is it a KEY event? beq .9 ldy #S.EVT.DATAHI is it an O or SAPPLE key ? lda (pEvent),y bne .9 ldy #S.EVT.DATALO lda (pEvent),y cmp #$03 Ctrl-C bne .1 lda #$FF ldy #bCANCEL sta (pData),y bra .8 .1 cmp #$13 Ctrl-S bne .2 ldy #bSTOP lda (pData),y eor #$FF sta (pData),y bra .8 .2 ldy #bSTOP lda #0 sta (pData),y .8 clc rts .9 sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- CS.END MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n" MSG1 >CSTRING " %03d %b %03d %03d $%H %05D " MSG1.BIN >CSTRING "!BIN:%40S\n" MSG1.STR >CSTRING "#STR:[%03d]:%32S\n" MSG1.HEX >CSTRING "?HEX:%h%h%h%h.%h%h%h%h.%h%h%h%h.%h%h%h%h\n" MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n" MSG3 >CSTRING "High Memory: $%H\n" MSG4 >CSTRING "Free ULimit: $%H\n" MSG5 >CSTRING "Low Memory: $%H\n" MSG6 >CSTRING "\nFree Memory: %D Bytes.\n" *-------------------------------------- .DUMMY .OR 0 DS.START LINE.COUNT .BS 1 MEM.COUNT .BS 1 USED.COUNT .BS 1 bSTOP .BS 1 bCANCEL .BS 1 DS.END .ED *-------------------------------------- MAN SAVE BIN/MEMDUMP.S ASM