Mercurial > hg > Members > kono > os9 > sbc09
diff CoCoOS9/level2v3/CMDS/mmap.asm @ 31:bd2b07db8917 cocoos9lv2v3
CoCoOS9 version
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Jul 2018 15:16:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CoCoOS9/level2v3/CMDS/mmap.asm Sat Jul 14 15:16:13 2018 +0900 @@ -0,0 +1,287 @@ +******************************************************************** +* MMap - Show memory block map +* +* $Id: mmap.asm,v 1.1.1.1 2001/02/21 23:30:54 boisy Exp $ +* +* From Kevin Darling, "Inside OS9 Level II" +* +* Ed. Comments Who YY/MM/DD +* ------------------------------------------------------------------ +* ? Original verison KKD 88/??/?? +* 4 Modified by Ken Drexler fr various block sizes KD 89/07/30 + + nam MMap + ttl Memory Block Utility + + ifp1 + use defsfile + endc + +Revs set ReEnt+1 +Type set Prgrm+Objct +edition set 4 + + mod prglen,name,type,revs,MMap,datsiz + +Name fcs /MMap/ + fcb edition + +*************************************************** +* +* Data +* +buffsiz set 512 + +numflag rmb 1 flag for leading zeros +rowcnt rmb 1 no rows to print +free rmb 1 no free blocks +rowno rmb 1 row number +lcnt rmb 1 line length counter +outptr rmb 2 output pointer +out rmb 80 output buffer +mapsiz rmb 2 size of map block +blksiz rmb 2 block size +buffer rmb buffsiz map itself +stack rmb 200 +datsiz equ . + + pag +*************************************************** +* +* Messages +* +header fcc / 0 1 2 3 4 5 6 7 8 9 A B C D E F/ + fcb C$CR +hdrlen equ *-header + +hdr2 fcc / # = = = = = = = = = = = = = = = =/ + fcb C$CR +hdrlen2 equ *-hdr2 + +BlockMsg fcc / Block Size: / +blklen equ *-Blockmsg + +Freemsg fcc / Free Blocks: / +freelen equ *-Freemsg + +Rammsg fcc / KBytes Free: / +ramlen equ *-Rammsg + +********************************************** +* +MMap lbsr pcrtn print line + leax header,pcr print headers + lda #1 + ldy #hdrlen + os9 I$WritLn + leax hdr2,pcr + ldy #hdrlen2 + os9 I$WritLn + leax buffer,u get block map to read + os9 F$GBlkMp + lbcs error + std blksiz save block size + sty mapsiz save map size + clr free + clr rowno + ldd mapsiz compute number of rows + lsra at 16 per row + rorb + lsra + rorb + lsra + rorb + lsra + rorb + stb rowcnt save count + leax out,u + stx outptr + leax buffer,u point at map + pshs x + bra loop2 + +loop dec lcnt count -= 1 + bne loop3 if more, skip line print + +* print line, start next line +loop1 pshs x save map pointer + lbsr prline print line + dec rowcnt done? + beq exit yes +loop2 lda #16 set line length count + sta lcnt + lbsr Space 1 space + lda rowno print row number + lbsr Hex1 + inc rowno row number += 1 + lbsr space2 2 spaces + puls x + +* Print one block status +loop3 ldb ,x+ get next block + beq freeram + bmi noram + bitb #2 module? + bne module + lda #'U must be ram in use + bra put + +freeram lda #'_ not used + inc free count it + bra put + +module lda #'M module + bra put + +noram lda #'. not ram + +* Print character in A and space +put equ * + lbsr print put character in output buffer + lda #C$SPAC add space + lbsr print + + bra loop + +* Add summary messages +Exit equ * + leax BlockMsg,pcr print "Block Size" + ldy #blklen + lbsr Prstr + ldd blksiz + clr numflag suppress zeros + bsr outdec + lbsr prline print line + leax freemsg,pcr print "Free Blocks" + ldy #freelen + lbsr Prstr + ldb free get number of blocks + clra + clr numflag suppress zeros + bsr outdec print in decimal + bsr prline + leax rammsg,pcr print "Ram Free" + ldy #ramlen + lbsr Prstr + ldb free get number of blocks + lda blksiz get #k/block + lsra by dividing msb by 4 + lsra + mul + clr numflag suppress zeros + bsr outdec print in decimal + bsr prline + +bye clrb no errors + +error os9 F$Exit + + +********************************************** +* +* Subroutines +* +Pcrtn pshs a,x Output carriage return + lda #C$CR + sta out + leax out,u point at buffer + ldy #1 one char. + lda #1 + os9 I$WritLn + puls a,x,pc + + +** Decimal output routine +* IN: D - number to output +* X - destination buffer +* OUT: X,Y,U preserved +* +Outdec pshs b,x,y,u + ldx outptr get pointer + leau <dectbl,pcr + ldy #5 set counter + +Outdec1 clr ,s clear workspace + +Outdec2 subd ,u subtract power of ten + bcs outdec3 + inc ,s + bra outdec2 + +outdec3 addd ,u++ add back one power + pshs b save b + ldb 1,s + addb #'0 convert to ascii + cmpb #'0 zero? + bne outdec4 no, print it + tst numflag suppress zero? + beq outdec5 yes +outdec4 inc numflag + stb ,x+ put in buffer +outdec5 puls b restore b + leay -1,y counter -= 1 + bne outdec1 + stx outptr update pointer + puls b,x,y,u,pc + +Dectbl fdb 10000 + fdb 1000 + fdb 100 + fdb 10 + fdb 1 + + +* Print Line +Prline ldx outptr now print line + lda #C$CR + sta ,x terminate line + leax out,u + ldy #80 + lda #1 + os9 I$Writln + bcs error + leax out,u set pointer + stx outptr + rts + + +* Print Spaces +Space2 bsr Space + +Space lda #C$SPAC + bra Print + +* Print Hexidecimal Digit in A +Hex1 tfr a,b + lsra + lsra + lsra + lsra + bsr outhex + tfr b,a +Outhex anda #$0f + cmpa #$0a 0 - 9 + bcs outdig + adda #$07 A - F +outdig adda #'0 make ASCII +print pshs X + ldx outptr + sta ,X+ + stx outptr + puls x,pc + + +* Print string to output buffer +* IN: X - string pointer +* Y - string length +* +Prstr equ * + lda ,x+ get character + bsr print put in buffer + leay -1,y + bne Prstr + rts + + emod +Prglen equ * + end