# New Ticket Created by Leon Brocard
# Please include the string: [netlabs #745]
# in the subject line of all future correspondence about this issue.
# <URL: http://bugs6.perl.org/rt2/Ticket/Display.html?id=745 >
This .pasm file was one of the first largish Parrot programs and I
don't quite remember why it never made it into Parrot. Anyway, I
think it should be as it produces a very pretty picture with
surprisingly few lines of code, so here it is. It should go into the
examples/assembly/ folder.
Thanks! Leon
--
Leon Brocard.............................http://www.astray.com/
Nanoware...............................http://www.nanoware.org/
........ Warranty void if tagline removed
-- attachment 1 ------------------------------------------------------
url: http://bugs6.perl.org/rt2/attach/3477/3319/a25294/mandel.pasm
# Print the Mandlebrot set
#
# Translated from C code by Glenn Rhoads into Parrot assembler
# by Leon Brocard <[EMAIL PROTECTED]>
#
# The C code is:
#
# main(){
#
# int x, y, k;
# char *b = " .:,;!/>)|&IH%*#";
# float r, i, z, Z, t, c, C;
# for (y=30; puts(""), C = y*0.1 - 1.5, y--;){
# for (x=0; c = x*0.04 - 2, z=0, Z=0, x++ < 75;){
# for (r=c, i=C, k=0; t = z*z - Z*Z + r, Z = 2*z*Z + i, z=t, k<112; k++)
# if (z*z + Z*Z > 10) break;
# printf ("%c", b[k%16]);
# }
# }
# }
#
# We store the following variables in these registers:
# x, y, k
# I1, I2, I3
#
# r, i, z, Z, t, c, C
# N1, N2, N3, N4, N5, N6, N7
set S1, " .:,;!/>)|&IH%*#"
set I2, 30
YREDO: # C = y*0.1 - 1.5
set N8, I2
set N9, 0.1
mul N7, N8, N9
set N8, 1.5
sub N7, N7, N8
set I1, 0
XREDO: # c = x*0.04 - 2
set N8, I1
set N9, 0.04
mul N6, N8, N9
set N8, 2.0
sub N6, N6, N8
set N3, 0
set N4, 0
set N1, N6
set N2, N7
set I3, 0
KREDO: # t = z*z - Z*Z + r
mul N8, N3, N3
mul N9, N4, N4
sub N5, N8, N9
add N5, N5, N1
# Z = 2*z*Z + i
add N4, N4, N4
mul N4, N4, N3
add N4, N4, N2
# z = t
set N3, N5
# if (z*z + Z*Z > 10) break;
mul N8, N3, N3
mul N9, N4, N4
add N8, N8, N9
gt N8, 10.0, PRINT
inc I3
lt I3, 112, KREDO
PRINT: mod I4, I3, 16
substr S2, S1, I4, 1
print S2
inc I1
lt I1, 75, XREDO
print "\n"
dec I2
gt I2, 0, YREDO
END: end