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 .INB INC/LIBSTR.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.LIBSTR .DA LIBSTR L.MSG0 .DA MSG0 L.MSG1 .DA MSG1 L.MSG2 .DA MSG2 L.MSG3 .DA MSG3 L.MSG4 .DA MSG4 L.MSG5 .DA MSG5 L.MSG6 .DA MSG6 .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBSTR >SYSCALL SYS.LoadLibYA bcs .9 sta hLIBSTR 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 >PUSHW L.MSG0 >LIBCALL hLIBSTR,LIBSTR.PRINTF .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 >PUSHW L.MSG2 >LIBCALL hLIBSTR,LIBSTR.PRINTF >PUSHW MemMgr.HiMem >PUSHW L.MSG3 >LIBCALL hLIBSTR,LIBSTR.PRINTF >PUSHW MemMgr.Free >PUSHW L.MSG4 >LIBCALL hLIBSTR,LIBSTR.PRINTF >PUSHW MemMgr.LoMem >PUSHW L.MSG5 >LIBCALL hLIBSTR,LIBSTR.PRINTF lda MemMgr.Free sec sbc MemMgr.LoMem tay lda MemMgr.Free+1 sbc MemMgr.LoMem+1 >PUSHYA >PUSHW L.MSG6 >LIBCALL hLIBSTR,LIBSTR.PRINTF 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 >PUSHW L.MSG1 >LIBCALL hLIBSTR,LIBSTR.PRINTF ldy #S.MEM.BIN lda (ZPPTR1),y bne .3 ldy #S.MEM.PTR lda (ZPPTR1),y sta ZPPTR2 iny lda (ZPPTR1),y sta ZPPTR2+1 lda #"{" >SYSCALL SYS.COutA lda (ZPPTR2) lsr lsr lsr lsr ora #$30 >SYSCALL SYS.COutA lda (ZPPTR2) and #$0F ora #$30 >SYSCALL SYS.COutA lda #"|" >SYSCALL SYS.COutA ldy #1 .1 lda (ZPPTR2),y cmp #$20 bcs .2 ora #$20 .2 >SYSCALL SYS.COutA iny cpy #40 bne .1 lda #"}" >SYSCALL SYS.COutA bra .4 .3 >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.PStrOutYA .4 lda #13 >SYSCALL SYS.COutA ldy #LINE.COUNT lda (pData),y inc sta (pData),y cmp #PAGELEN bne .5 lda #$FF ldy #bSTOP sta (pData),y ldy #LINE.COUNT lda #0 sta (pData),y .5 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 lda hLIBSTR >SYSCALL SYS.UnloadLibA clc rts *-------------------------------------- CS.END LIBSTR >PSTRING "libstr.o" MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n" MSG1 >CSTRING " %03d %b %03d %03d $%H %05D " 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" hLIBSTR .BS 1 *-------------------------------------- .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