Код:
void _Laser2_XYtoScr (int dummy, int r2, int r3,
int x, int y, int len, int hgt)
{ /* R0 - screen address */
asm("\
MOV %4, R0 // y \n\
MOV R0, R1 \n\
ASL R0 \n\
ASL R0 \n\
ADD R1, R0 \n\
SWAB R0 // * 640 \n\
ROR R0 \n\
ADD $041000, R0 \n\
ADD %3, R0 \n\
ADD %3, R0 // + 2*x \n\
MOVB %5, R2 // len \n\
MOVB %6, R3 // hgt \n"
::"g"(dummy), "g"(r2), "g"(r3),
"g"(x), "g"(y), "g"(len), "g"(hgt)
);
} // _Laser2_XYtoScr
void Laser2_WL4V (int x, int y, int len, int hgt)
{
asm("\
JSR PC, __Laser2_XYtoScr \n\
ASL R2 // 2*x \n\
MOV R4, -(SP) \n\
MOV R5, -(SP) \n\
OUTLN4: MOV R0, R1 \n\
MOV R2, R4 \n\
MOVB @R1, R5 \n\
OUTWR4: MOVB 1(R1), (R1)+ \n\
SOB R4, OUTWR4 \n\
MOVB R5, @R1 \n\
ADD $0100, R0 \n\
SOB R3, OUTLN4 \n\
MOV (SP)+, R5 \n\
MOV (SP)+, R4 \n"
:::"r2", "r3"
);
} // Laser2_WL4V
void Laser2_WL8V (int x, int y, int len, int hgt)
{
asm("\
JSR PC, __Laser2_XYtoScr \n\
MOV R4, -(SP) \n\
MOV R5, -(SP) \n\
OUTLN5: MOV R0, R1 \n\
MOV R2, R4 \n\
MOV @R1, R5 \n\
OUTWR5: MOV 2(R1), (R1)+ \n\
SOB R4, OUTWR5 \n\
MOV R5, @R1 \n\
ADD $0100, R0 \n\
SOB R3, OUTLN5 \n\
MOV (SP)+, R5 \n\
MOV (SP)+, R4 \n"
:::"r2", "r3"
);
} // Laser2_WL8V