|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 6184 (0x1828)
Types: TextFile
Names: »DATA_LOGGER.S«
└─⟦b8af24a88⟧ Bits:30005796 CR80 Disc Pack ( MINICAMPS )
└─⟦this⟧ »GENS.D!DATA_LOGGER.D!DATA_LOGGER.S«
%LIST %LIST %LIST
"-----------------------------------------------------------------------
"
" MODULE NAME: DATA_LOGGER
" MODULE ID NBR: X
" MODULE VERSION: 0
" MODULE RELEASE: 0
" MODULE TYPE: UTILITY LINK (SUB)MODULE
" SPECIFICATIONS: X
" AUTHOR/DATE: LKN/810520
" DELIVERABLE: NO
" SOURCE LANGUAGE: SWELL
" COMPILE COMPUTER: CR80
" TARGET COMPUTER: CR80
" OPERATING SYSTEM: AMOS
"
"-----------------------------------------------------------------------
"
" CHANGE RECORD
"
" VERSION RELEASE AUTHOR/DATE DESCRIPTION OF CHANGE
" ------- ------- ----------- ---------------------
"
"-----------------------------------------------------------------------
%NOLIST %NOLIST %NOLIST
submodule data_logger;
%NOLIST
%SOURCE @**DAMOS.D*GENS.D*GENERAL.S
%SOURCE @**DAMOS.D*GENS.D*HARDWARE.S
%SOURCE @**DAMOS.D*GENS.D*DAMOS_GENERAL.S
%SOURCE @**DAMOS.D*KERNEL.D*GENS.D*KERNEL_GENERAL.S
%SOURCE @**DAMOS.D*KERNEL.D*GENS.D*PPP.S
%SOURCE @**DAMOS.D*KERNEL.D*GENS.D*TEST_PPP.I
procedure hide_away
"================="
(r6); " C K
%SOURCE @**GENS.D*SWELLPREFIX.D*GENERALPARAMS.S
%SOURCE @**GENS.D*SWELLPREFIX.D*MONITORNAMES.S
%SOURCE @**GENS.D*SWELLPREFIX.D*IOSPARAMS.S
%SOURCE @**GENS.D*UTILITYHELP.D*UTH.I
%SOURCE @**GENS.D*DEBUG.D*DEBUG.I
%LIST
const
dr = 128;
dx = 129;
dd = 130;
dt = 131;
t_outtextb = 'OUTTEXTB(:0:)';
t_outhexa = 'OUTHEXA(:0:)';
t_flush = 'FLUSH(:0:)';
var
logfile, out: integer; "ptr to output file type
saveregs: array [0..7] of integer;
procedure x_outb
"=============="
(r3; " C K char to print
r6); " C D link
begin
r6 => saveregs[6];
r4 => saveregs[4];
logfile => r4;
outb(r4, r3, r6);
if out => r4 <> nil then outb(r4, r3, r6);
saveregs[4] => r4;
exit(saveregs[6]);
end;
procedure x_outhexa
"================="
(r2; " C K value to print
r3; " C K preceeding character
r6); " C K link
begin
r7 => saveregs[7];
stc(6, address(saveregs[7])=>r7);
logfile => r4;
r4@filetype.s => r4;
switch mon(stream, outhexa, r4, r2, r3, r7): fail_pass to
fail: fileerror(logfile=>r4, address(t_outhexa)=>r5, r7, r6);
end;
if out => r4 <> nil then
begin
r4@filetype.s => r4;
switch mon(stream, outhexa, r4, r2, r3, r7): fail_pass to
fail: fileerror(out=>r4, address(t_outhexa)=>r5, r7, r6);
end;
end;
uns(7, address(saveregs)=>r7);
exit(r6);
end;
procedure x_outtextb
"=================="
(r0; " C K ptr to text
r6); " C K link
begin
r7 => saveregs[7];
stc(6, address(saveregs[7])=>r7);
logfile => r4;
r4@filetype.s => r4;
switch mon(stream, outtextb, r4, r0=>r6, r7): fail_pass to
fail: fileerror(logfile=>r4, address(t_outtextb)=>r5, r7, r6);
end;
if out => r4 <> nil then
begin
r4@filetype.s => r4;
switch mon(stream, outtextb, r4, r0=>r6, r7): fail_pass to
fail: fileerror(out=>r4, address(t_outtextb)=>r5, r7, r6);
end;
end;
uns(7, address(saveregs)=>r7);
exit(r6);
end;
procedure x_flush
"==============="
(r6); " C K link
begin
r6 => saveregs[6];
r4 => saveregs[4];
if out => r4 <> nil then
begin
r4@filetype.s => r4;
switch mon(stream, flush, r4, r7): fail_pass to
fail: fileerror(out=>r4, address(t_flush)=>r5, r7, r6);
end;
end;
saveregs[4] => r4;
exit(saveregs[6]);
end;
procedure print_it
"================"
(r0; " C - address of text
r1; " C - address of first word
r2; " C - labelling address
r3; " C - word count
r4; " - D
r5; " - D
r7; " - D
r6); " C - link
var
link, startposition, count: integer;
begin
r6 => link;
r3 => count;
x_outb(10=>r3, r6);
x_outtextb(r0, r6);
x_outb(10=>r3, r6);
10=>r5;
while r5-1 <> -1 do x_outb(' '=>r3, r6);
x_outhexa(r2, ' '=>r3, r6);
x_outb(':'=>r3, r6);
0 => r0;
while r0 < count => r3 do
begin
if r0 <> 0 logand r0=>r2 extract 3 = 0 then
begin
x_outb(10=>r3, r6);
10=>r5;
while r5-1 <> -1 do x_outb(' '=>r3, r6);
x_outhexa(r1=>r2, ' '=>r3, r6);
x_outb(':'=>r3, r6);
end;
x_outhexa(r1@integer=>r2, ' '=>r3, r6);
incd(r0, r1);
end;
x_outb(10=>r3, r6);
x_flush(r6);
exit(link);
end; "print_it"
procedure dump_r
"=============="
(textaddr: integer;
r7); " C K link
begin
r7@dump_r.textaddr => r0;
ppp_addr@ppp.ppb.context_admin.cur_ptr => r1;
8 => r3;
print_it(r0, r1, 0=>r2, r3, "*" r4, r5, r7, r6);
trp(0);
rtm(0, size(dump_r));
end; "dump_r"
procedure dump_x
"=============="
(textaddr: integer;
regno: integer;
count: integer;
r7); " C K link
begin
r7@dump_x.textaddr=>r0;
ppp_addr@ppp.ppb.context_admin.cur_ptr => r1;
r7@dump_x.regno => r3;
(r1+r3)@integer => r1;
r1 => r2;
r7@dump_x.count => r3;
print_it(r0, r1, r2, r3, "*" r4, r5, r7, r6);
trp(0);
rtm(0, size(dump_x));
end; "dump_x"
procedure dump_d
"=============="
(textaddr: integer;
dataaddr: integer;
count: integer;
r7); " C K link
begin
r7@dump_d.textaddr => r0;
r7@dump_d.dataaddr => r1;
r1 => r2;
r7@dump_d.count => r3;
print_it(r0, r1, r2, r3, "*" r4, r5, r7, r6);
trp(0);
rtm(0, size(dump_d));
end; "dump_d"
procedure dump_t
"=============="
(textaddr: integer;
r7); " C K link
begin
x_outb(10=>r3, r6);
r7@dump_t.textaddr => r0;
x_outtextb(r0, r6);
x_outb(10=>r3, r6);
trp(0);
rtm(0, size(dump_t));
end; "dump_t"
export procedure init_data_logger
"==============================="
(r4; " C K ptr to output filetype
r6); " C K link
var
saveregs: array [0..7] of integer;
begin
r7 => saveregs[7];
stc(6, address(saveregs[7])=>r7);
r4 => logfile;
address(coutfiletype) => r6;
if r6 = r4 then nil => r6;
r6 => out;
init_mon(location(dump_r)=>r0, 1=>r1, dr=>r4, r6);
init_mon(location(dump_x)=>r0, 1=>r1, dx=>r4, r6);
init_mon(location(dump_d)=>r0, 1=>r1, dd=>r4, r6);
init_mon(location(dump_t)=>r0, 1=>r1, dt=>r4, r6);
uns(7, address(saveregs)=>r7);
exit(r6);
end; "init_data_logger"
begin
end; "hideaway"
endmodule «a5»