Код:
Proc # 0: 142422B
PVD: 030466B
First free codesegment: 3
First free physical block: 002073B
First free variablelocation: 030472B
First free constantlocation: 030502B
First free codelocation: 140000B
CLOCK.MOD
Код:
IMPLEMENTATION MODULE Clock; (* LG/ETH-Z~urich: 26.02.81 *)
(*
>
> (c) Copyright (1981, 1988) by Gunter Dotzel
> ModulaWare GmbH
> Wilhelmstr. 17A
> D-8520 Erlangen/West-Germany
> Tel. 09131 208395
>
GD/22-Jun-1988: automatic 50/60 cycles detection and conversion
(derived from module clock.mod, clk60.mod by GD/Rev: 09-Dec-1981).
For 50 Hz with LTC in Europe.
For 60 Hz clock (MXV-11, 11/23+, and for other countries line frequency)
*)
FROM SYSTEM IMPORT ADR, RT11CALL, REGISTER;
VAR cycle50: BOOLEAN; (* see module body *)
PROCEDURE GetTime(VAR tim : Time);
(* get computer time and date *)
VAR datearea : RECORD chan,code : CHAR END;
timearea : RECORD
chan, code: CHAR;
buffaddr : CARDINAL;
END;
timebuff : RECORD
hightick : CARDINAL;
lowtick : CARDINAL;
END;
d, m, y : CARDINAL;
BEGIN
WITH tim DO
(* get date *)
WITH datearea DO chan := 0C; code := 12C (* .DATE *) END;
RT11CALL(374B,CARDINAL(datearea));
day := REGISTER(0);
IF day <> 0 THEN (* reformat day *)
d := day DIV 40B MOD 40B;
m := day DIV 2000B MOD 20B;
y := day MOD 40B + 72;
day := (y * 20B + m) * 40B + d;
END;
(* get time *)
WITH timearea DO
chan := 0C; code := 21C; (* .GTIM *)
buffaddr := ADR(timebuff);
END;
RT11CALL(375B,ADR(timearea));
(* calculate seconds and milliseconds *)
WITH timebuff DO
IF cycle50 THEN
(* tickperiod = 20 milliseconds; ticks per minute = 3000 *)
(* 65536 / 3000 = 21 + 317 / 375 *)
minute := lowtick DIV 3000 + hightick * 21;
hightick := hightick * 317;
lowtick := lowtick MOD 3000 + hightick MOD 375 * 8;
minute := minute + lowtick DIV 3000 + hightick DIV 375;
millisecond := lowtick MOD 3000 * 20;
ELSE
(* tickperiod = 16.666 milliseconds; ticks per minute = 3600 *)
(* 65536 / 3600 = 18 + 46/225 *)
(* 3600 / 225 = 16 *)
minute := lowtick DIV 3600 + hightick * 18;
hightick := hightick * 46;
lowtick := lowtick MOD 3600 + hightick MOD 225 * 16;
minute := minute + lowtick DIV 3600 + hightick DIV 225;
millisecond := lowtick MOD 3600;
millisecond := millisecond * 16 + (millisecond * 2) DIV 3;
END;
END;
END; (* WITH *)
END GetTime;
PROCEDURE InitCycle;
VAR
gvalarea : RECORD
chan,code : CHAR;
offset : CARDINAL;
END;
BEGIN
WITH gvalarea DO
chan := 0C; code := 34C; (* .GVAL *)
offset := 300B; (* fixed offset to RMON base *)
END;
RT11CALL(375B,ADR(gvalarea));
cycle50:={5}<=BITSET(REGISTER(0)); (* bit 5 is sysgened clock speed *)
END InitCycle;
BEGIN
InitCycle;
END Clock.
CLOCK.DEF
Код:
DEFINITION MODULE Clock; (* LG 23.04.80 *)
EXPORT QUALIFIED Time, GetTime;
TYPE Time = RECORD
day : CARDINAL; (* ((y-1900) * 20B + m) * 40B + d *)
minute : CARDINAL;
millisecond : CARDINAL;
END;
PROCEDURE GetTime(VAR tim : Time);
(* get computer time *)
END Clock.
-------- Forwarded Message --------
Subject: m2 und m2/vrs
Date: Sun, 28 Feb 2010 16:42:22 +0100
From: Guenter Dotzel
To: Ian Hammond
Ian,
attached I'm sending just a few components of m2kit (except *.mod all are binary files.) I zipped the files under windows.
comint = m2 command interpreter
m2: ms*.sav needs comint.m2s on sy: (m2 for mapped RT11 on logical vs
m2/vrs: xm*.sav needs comint.xm2 on sy: ( " )
the suffixes (of (ms, xm).sav are:
nf = runs on lsi-11 with no floating hardware
p = runs on sharePlus or other mapped version of rt-11
x = version with higher stack start (stack start can be patched in MS*.sav [and XM*.SAV]in locations 42, 50, 512)
f8 = forgot, most probably for double precision FP (mathlib?)
don't know what q,c,s suffixes eg. in xmcnfs.sav mean, but will find out.
2 example programs:
- list.lod (m2), list.xml (m2/vrs), list.mod source code
- chase.lod (chase game; uses vt52 esc-controls; works great)
if the comint prompt comes up (and it does in v11/lsi rust with msnf.sav):
RTS>
type 'list<RET>' and list.lod is loaded. it displays the content of file list.mod if you give this file name or type 'chase<RET>'. navigate left right up etc with keys explained in intro. please try to find out why xmcnfs.sav crashes to halt.
xm.sav (don't know if it requires fpu or fis or none) gives trap 4 on v11/lsi rust.
so I guess the mmu regs are not accessible with short iopage.
best
Gunter
--
-------- Forwarded Message --------
Subject: m2/vrs start and compile success with rust2
Date: Sun, 28 Feb 2010 19:41:48 +0100
From: Guenter Dotzel
To: Ian Hammond
Ian,
just installed rust2
! one time installation operations:
copy modula.* sy:
copy comint.* sy:
crea/all:123 sy:dump.cor
! apply one time patch to set program size of m2/vrs for rust:
copy xmq.sav to xmqr.sav
ru patch ! rt-11 version
xmqr.sav
42/132000
50/132002
512/132000
E
===
with this patch:
.sh prog xmqr
Program name DK:XMQR.SAV
File size 39. blocks
Start address 5704
Stack address 132000
Job status word 50400 = Lower Single Chain
Program size 132002 bytes, 23041. words
Memory limit None
the m2 compiler runs under m2/vrs:
.xmqr
VRS>DK:COMP.XML
M2Compiler V05.1, source file> LIST.MOD
p1
Lister: DK:Lister.SYM
p2
p3
p4
p5
end compilation
VRS>
I was able to compile bigger programs.
but when I start the linker, it crashes rust to halt.
===
! m2kit rust/sj startup commands.
unload sl
unload nf
def dk dl1 ! m2kit
def vc dk
def ve dk
def vl dk
def vs sy ! don't know if they are all needed
set def dk
===
best
g
-------- Forwarded Message --------
Subject: modula-2 under rust/sj with v11
Date: Sat, 27 Feb 2010 13:24:40 +0100
From: Guenter Dotzel
To: Ian Hammond
Ian
yesterday I copied the whole directory of the modula-2/rt-11 kit from alpha vms
by ftp into a dir on the pc under w2k and then under RUST into a RT-11 disk
container (DL1) because I thought strange behaviour below came from
using files on native windows directory (but it made no difference).
under SHE I start rust with
v11 rust
there is unmapped m2(1. m2) and mapped m2(2. m2/vrs).
the latter allows very big programs without overlays by mapping mmu via par6.
both worked great also under shareplus.
1. with m2:
even with unloaded SL, since user can't be set swap in rust,
I had to patch the (max.) size of m2 run-time system/command interpreter
program sav file from 132500 to 130000.
.sh progr sy:modula
Program name SY:MODULA.SAV
File size 14. blocks
Start address 2720
Stack address 130000
Job status word 50400 = Lower Single Chain
Program size 130002 bytes, 22529. words
Memory limit None
Image options 4040 = IOpage Nopaths
with this version of m2, it's runtime system and command interpreter starts and I can load and execute m2 programs with varying mileage:
a) some m2 tools no longer run with this lower limit but that'd be fixable.
b) some m2 programs are running great: chase game, list, dir, vir,. ...
c) some m2 programs show strange behaviour, e.g.: editor med, m2 compiler comp
c.a) comp actually starts and asks for input file name and starts pass 1 (of 5) but then asks again for input file name. if I type it again, it crashes without error message to '.' prompt. in case of non existing input file, comp says 'error file not found' and reprompts.
c.b) med opens an input file and displays the first screen full of text and then immediately reprompts for input file name (without saying 'file not found'), it seems to restart.
2. with m2/vrs
I also patched the program size but it doesn't start up: the (no floating point) version which runs on shareplus (xmcnfs.sav, patched xmrust.sav) crashes to halt.
.sh prog xmrust.sav
Program name DK:XMRUST.SAV
File size 39. blocks
Start address 5452
Stack address 132000
Job status word 50400 = Lower Single Chain
Program size 132002 bytes, 23041. words
Memory limit None
Image options 124040 = Traps IOpage Nopaths MMU
(I tried both /unmapped and /nounmapped)
.sh mem
Address Module Words
------- ------ -----
160000 IOPAGE 4096.
143004 RMON 3326.
134172 USR 1733.
132714 DL 343.
132370 NF 106.
132266 Logicals 33.
132256 Commands 4.
000000 (free) 23127.
512kw physical memory
any suggestions? if you want to try it, I can send you the programs concerned.
for me m2 on pdp it is just for curiosity. I'm willing to spend some time because it would be fun to show young people how -given the right concept - fast, easy, and fluid program development was with the seamless cyle of edit, compile, run, debug (symbolic post-mortem debugger) nearly 30 years ago - without any mouse click, with seperate compilation, automatic linker (self-collecting all required modules, checking cross-module interdependencies without the need of an object time librarian - the latter being still necessary even with m2 under openvms. I still miss this linker and debugger although the oberon system (under openvms) has it all except that it comes with the burden of 'YAG' (yet another GUI)) and simple but efficient debugger.
best
g