diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index 09d62a1b..ef072562 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -40,6 +40,7 @@ The full set of tests is only run for tagged releases. - added dasm-11, a PDP-11 disassembler ### New features - new verification codes + - tools/mcode: added memclr.mac (writes zero into memory) - tools/tcode: fast cpu verification codes - tools/tests: test programs - tools/bin: added dasm-11, a PDP-11 disassembler @@ -79,7 +80,7 @@ The full set of tests is only run for tagged releases. - pdp11_mmu_mmr1: MMR1 write logic fix, see [ECO-032](ECO-032-MMR1_fix.md) - general changes - - segment -< page rename + - segment -> page rename - DEC used in early documents 'segment', later on 'page' for the MMU object - in the w11a code base (\*.vhd,\*.\*pp,\*.tcl,\*.mac) the naming was mixed - now all changed to page,mmr\*,pdr,par; all segment,ssr\*,sdr,sar removed diff --git a/tools/mcode/sys/README.md b/tools/mcode/sys/README.md index 634d2140..8363c5f8 100644 --- a/tools/mcode/sys/README.md +++ b/tools/mcode/sys/README.md @@ -3,4 +3,5 @@ This directory tree contains **system codes** and contains | File | Docu | Comments | | --------- | --------- | ------- | | [blink.mac](blink.mac) | - | _blinking lights_ demo | +| [memclr.mac](memclr.mac) | - | clear memory | | [noboot.mac](noboot.mac) | - | boot blocker (for disk block 0) | diff --git a/tools/mcode/sys/memclr.mac b/tools/mcode/sys/memclr.mac new file mode 100644 index 00000000..771df349 --- /dev/null +++ b/tools/mcode/sys/memclr.mac @@ -0,0 +1,104 @@ +; $Id: memclr.mac 1280 2022-08-15 09:12:03Z mueller $ +; SPDX-License-Identifier: GPL-3.0-or-later +; Copyright 2009-2022 by Walter F.J. Mueller +; +; Revision History: +; Date Rev Version Comment +; 2022-08-09 1277 2.0 ported to asm-11 +; 2009-07-04 231 1.0 Initial version (for RT-11 MACRO-11) +; +; Program to clear all available memory +; +; definitions +; + .include |lib/defs_cpu.mac| + .include |lib/defs_reg70.mac| + .include |lib/defs_mmu.mac| +; + kipdr0=kipdr+ 0 + kipdr1=kipdr+ 2 + kipdr7=kipdr+16 + kipar0=kipar+ 0 + kipar1=kipar+ 2 + kipar7=kipar+16 +; +; set up vector catchers +; + .include |lib/vec_cpucatch.mac| +; +; setup 2 word code starting at 0 will zero the main part of the memclr +; this will be the only trace left when memclr halts + .=0 +beg: clr (r3)+ + sob r1,beg +; +; main clear routine, will be erased by code at 0 and 2 at the end... +; + .=200 +start: mov #start,sp + reset + mov #end,r0 ; r0=end-of-code address + add #76,r0 + bic #76,r0 ; r0=base of first free click +; + mov r0,r1 + ash #-6.,r1 ; r1=size of memclr in clicks +; + mov @#losize,r2 ; memory size in clicks + sub r1,r2 ; r2=clicks to be cleared +; + mov #000000,@#kipar0 ; page 0: base 0 + mov #<127.*md.plf>!md.arw,@#kipdr0 ; 128 clicks, read/write + mov r1,@#kipar1 ; page 1: base above memclr + mov #<127.*md.plf>!md.arw,@#kipdr1 ; 128 clicks, read/write + mov #177600,@#kipar7 ; page 7: io page + mov #<127.*md.plf>!md.arw,@#kipdr7 ; 128 clicks, read/write +; + mov #m3.e22,@#mmr3 ; enable 22bit mapping + mov #m0.ena,@#mmr0 ; enable mmu +; +nxtblk: mov #020000,r3 ; base of page 1 + + clr (r3)+ ; clear a click (64 byte/32 words) + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ ; +8 + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ ; +16 + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ ; +24 + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + clr (r3)+ + + inc @#kipar1 ; advance to next click + sob r2,nxtblk ; and go till end +; + mov #0000004,r3 ; clear now from here + ash #5.,r1 ; size of memclr in words + jmp @#beg +; +end: ; end-of-code +; + .end start