mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-19 22:06:35 +00:00
75 lines
1.4 KiB
C
75 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
char b1[23] ="0123456789abcdefghijklm";
|
|
char b2[23] ="mlkjihgfedcba9876543210";
|
|
char b3[23] ="mmmmmmmmmmmmmmmmmmmmmmm";
|
|
char b4[23] ="00000000000000000000000";
|
|
char longbuf1[256];
|
|
char longbuf2[256];
|
|
|
|
static int clc(char *a1,char *a2, int l)
|
|
{
|
|
int cc;
|
|
|
|
asm volatile( "larl 1, 1f\n"
|
|
"ex %3,0(1)\n"
|
|
"j 2f\n"
|
|
"1: clc 0(1,%1),0(%2)\n"
|
|
"2: ipm %0\n"
|
|
"srl %0,28\n"
|
|
:"=d" (cc)
|
|
:"a" (a1), "a" (a2), "d" (l): "1", "cc");
|
|
return cc;
|
|
}
|
|
|
|
|
|
void testrun(char *a1, char *a2, int l)
|
|
{
|
|
int cc;
|
|
|
|
cc = clc(a1, a2, l);
|
|
printf("%d bytes:%d\n",l, cc);
|
|
}
|
|
|
|
|
|
void multiplex(int l, long offset1, long offset2)
|
|
{
|
|
testrun(b1 + offset1, b1 + offset2, l);
|
|
testrun(b1 + offset1, b2 + offset2, l);
|
|
testrun(b1 + offset1, b3 + offset2, l);
|
|
testrun(b1 + offset1, b4 + offset2, l);
|
|
testrun(b2 + offset1, b2 + offset2, l);
|
|
testrun(b2 + offset1, b3 + offset2, l);
|
|
testrun(b2 + offset1, b4 + offset2, l);
|
|
testrun(b3 + offset1, b3 + offset2, l);
|
|
testrun(b3 + offset1, b4 + offset2, l);
|
|
testrun(b4 + offset1, b4 + offset2, l);
|
|
}
|
|
|
|
void sweep(int l)
|
|
{
|
|
multiplex(l, 0, 0);
|
|
multiplex(l, 1, 0);
|
|
multiplex(l, 1, 1);
|
|
multiplex(l, 0, 1);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
sweep(0);
|
|
sweep(1);
|
|
sweep(2);
|
|
sweep(3);
|
|
sweep(4);
|
|
sweep(5);
|
|
sweep(22);
|
|
testrun(longbuf1, longbuf2, 255);
|
|
longbuf1[255] = 'a';
|
|
testrun(longbuf1, longbuf2, 255);
|
|
longbuf2[255] = 'b';
|
|
testrun(longbuf1, longbuf2, 255);
|
|
return 0;
|
|
}
|
|
|