Mercurial > hg > Members > kono > nitros9-code
view level2/cmds/smap.asm @ 3194:2ecebda8716b
mfree.asm: Fix zero-day Block Map entry bug
Previously, code assumed that the final entry in the block map would be
used. This was true for CoCo but is not necessarily true (and is not
true for mc09). Slight mod removes that implicit assumption; the code
now works correctly on both platforms.
author | Neal Crook <foofoobedoo@gmail.com> |
---|---|
date | Tue, 30 May 2017 23:59:46 +0100 |
parents | 147d2267d9b8 |
children |
line wrap: on
line source
******************************************************************* * SMap - Show System Memory Map * * $Id$ * * From "Inside OS9 Level II", by Kevin Darling * * Edt/Rev YYYY/MM/DD Modified by * Comment * ------------------------------------------------------------------ * 1 ????/??/?? * Original version. nam SMap ttl Show System Memory Map * Disassembled 02/05/12 22:05:11 by Disasm v1.6 (C) 1988 by RML ifp1 use defsfile endc tylg set Prgrm+Objct atrv set ReEnt+rev rev set $00 edition set 1 mod eom,name,tylg,atrv,start,msize leadflag rmb 1 decbuff rmb 3 decimal buffer (100, 10, 1s place) free rmb 1 number of free 256 byte pages in system memory row rmb 1 spc rmb 1 out rmb 3 ONLY 2 BYTES USED mapsiz rmb 2 NEVER USED blksiz rmb 2 NEVER USED blknum rmb 1 buffer rmb 256 stack rmb 200 msize equ . name fcs /SMap/ fcb edition H1 fcc " 0 1 2 3 4 5 6 7 8 9 A B C D E F" CrRt fcb C$CR H1L equ *-H1 H2 fcc " # = = = = = = = = = = = = = = = =" * fcb C$CR H2L equ *-H2 SysDat fcb $00,$00,$00,$00 start lbsr WriteCR Write a carriage return to standard out leax <H1,pcr point to header 1 lda #$01 ldy #H1L os9 I$WritLn and write it to standard out leax <H2,pcr same with header 2 ldy #H2L os9 I$Write * Get SysMap pointer leax <SysDat,pcr tfr x,d ldx #D.SysMem point to System Memory global ldy #$0002 get 2 byte pointer into system RAM pshs u save statics leau buffer,u point to destination os9 F$CpyMem get it puls u restore statics lbcs error branch if error * Get SysMap ldx buffer,u get pointer into system memory table in system space ldy #256 all 256 bytes pshs u save statics leau buffer,u point to destination os9 F$CpyMem copy memory puls u restore statics lbcs error branch if error clr <blknum clr <free clear free counter leax buffer,u lda #$30 sta <row clr ,-s save count loop lda ,s bita #$0F bne loop2 pshs x lbsr WriteCR leax spc,u ldy #$0004 lda <row cmpa #': bne oknum lda #'A sta <row oknum sta <out inc <row ldd #C$SPAC*256+C$SPAC sta <spc std <out+1 lda #$01 os9 I$Write puls x loop2 ldb ,x+ get next block beq unused bmi noram ldb #'U RAM-in-use bra put noram ldb #'. not RAM bra put unused ldb #'_ not used inc <free increment free page counter put stb <out ldb #C$SPAC stb <out+1 pshs x leax out,u ldy #$0002 lda #$01 os9 I$Write puls x dec ,s lbhi loop puls a bsr WriteCR bsr WriteCR leax >FreePgs,pcr ldy #FreePgsL lda #$01 os9 I$Write ldb <free clra lbsr outdec bsr WriteCR leax >FreeRAM,pcr ldy #FreeRAML lda #$01 os9 I$Write ldb <free clra lsrb lsrb lbsr outdec bsr WriteCR clrb error os9 F$Exit FreePgs fcc " Number of Free Pages: " FreePgsL equ *-FreePgs FreeRAM fcc " RAM Free in KBytes: " FreeRAML equ *-FreeRAM WriteCR pshs x,a leax CrRt,pcr ldy #$0001 lda #$01 os9 I$WritLn puls pc,x,a print sta <out pshs x leax out,u ldy #$0001 lda #$01 os9 I$Write puls pc,x outdec leax decbuff,u D=number clr <leadflag clr ,x clr $01,x clr $02,x hundred inc ,x subd #100 bcc hundred addd #100 ten inc $01,x subd #10 bcc ten addd #10 incb stb $02,x bsr printled bsr printled printnum lda ,x+ adda #$2F make ASCII bra print printled tst <leadflag print leading zero? bne printnum ..yes ldb ,x is it zero? inc <leadflag decb bne printnum ..no, print zeroes clr <leadflag else supress lda #C$SPAC leax 1,x bra print emod eom equ * end