1
0
mirror of https://github.com/wfjm/w11.git synced 2026-01-21 10:42:10 +00:00
wfjm.w11/tools/mcode/sys/memclr.mac
2022-09-07 08:30:47 +02:00

105 lines
2.9 KiB
Plaintext

; $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 <W.F.J.Mueller@gsi.de>
;
; 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