http://zx81.vb81.free.fr/
This is the ZX-COMPILER program I wrote pasted on top the ZX- COMPILER program making a circle in machine code with only adding, multiplying, dividing, and subtracting. No square root makes it sort of difficult.
Code: Select all
10 REM LETH=34
20 REM LETK=22
30 REM PLOTH,K
40 REM LETR=20
50 REM LETT=R
60 REM LETU=R
70 REM LETL=0
80 REM LETL=L+1
90 REM IFL=RGOTO150
100 REM LETE=K+L
110 REM LETF=K-L
120 REM PLOTH,E
130 REM PLOTH,F
140 REM GOTO80
150 REM LETL=0
160 REM LETL=L+1
170 REM IFL=RGOTO230
180 REM LETE=H+L
190 REM LETF=H-L
200 REM PLOTE,K
210 REM PLOTF,K
220 REM GOTO160
230 REM LETT=R
240 REM LETX=T
250 REM LETY=0
260 REM LETY=Y+1
270 REM IFY=RGOTO420
280 REM LETG=R*R
290 REM LETJ=Y*Y
300 REM LETW=G-J
310 REM LETT=X
320 REM LETX=W/T
330 REM LETA=X+H
340 REM LETB=H-X
350 REM LETC=Y+K
360 REM LETD=K-Y
370 REM PLOTA,C
380 REM PLOTB,C
390 REM PLOTA,D
400 REM PLOTB,D
410 REM GOTO260
420 REM LETY=R
430 REM LETX=0
440 REM LETX=X+1
450 REM IFX=RGOTO600
460 REM LETM=R*R
470 REM LETN=X*X
480 REM LETQ=M-N
490 REM LETU=Y
500 REM LETY=Q/U
510 REM LETA=X+H
520 REM LETB=H-X
530 REM LETC=K-Y
540 REM LETD=Y+K
550 REM PLOTB,C
560 REM PLOTA,C
570 REM PLOTB,D
580 REM PLOTA,D
590 REM GOTO440
600 REM RETURN
# REM **COMPILER**
1000 REM [HEX:\
17,17,28,34,32,35,2E,31,\
2A,37,17,17,76 ]
1010 FAST
1011 LET Q=3950
1012 LET Q1=2830
1013 LET Q2=3320
1014 LET Q3=3630
1015 LET Q4=3970
1016 LET Q5=1320
1017 LET Q6=4
1020 LET P=28858
1030 LET P1=16514
1040 GOSUB 2920
1050 IF PEEK (P1-1)<>234 THEN GOTO Q1
1060 IF PEEK P1=118 THEN GOTO Q1
1070 GOSUB 2880
1080 LET A$=""
1090 LET A$=A$+CHR$ PEEK P1
1100 LET P1=P1+1
1110 IF PEEK (P1-1)<>118 THEN GOTO 1090
1120 IF PEEK (P1+1)*256+PEEK (P1+2)=1010 THEN GOTO 3690
1130 LET P1=P1-3
1140 LET T$=A$( TO 2)
1150 LET B$=A$+" "
1160 LET J=0
1170 LET J=J+(T$="RE")*2170+(T$="SC")*1200+(T$="PR")*1360+(T$="GE")*1530+(T$="EN")*1620+(T$="PA")*1670+(T$="CL")*1720+(T$="MO")*1770+(T$="LE")*1890+(A$( TO 3)="GOT")*2060+(A$( TO 3)="GOS")*2130+(T$="IF")*2200+(T$="PO")*2430+(T$="UN")*2550+(T$="PL")*2580+(T$="DO")*2720
1180 IF NOT J THEN LET J=Q1
1190 GOTO J
1201 IF B$(7)<>CHR$ 118 THEN GOTO Q1
1202 LET U$="2A0C40112100EB1901F702EDB00620AF131210FC"
1203 GOSUB Q3
1204 GOTO Q5
1320 LET P1=P1+8
1330 GOTO 1050
1360 LET B$=B$(6 TO )
1370 IF B$(1)=CHR$ 11 THEN GOTO 1420
1380 GOSUB Q2
1390 LET U$="7DD7"
1400 GOSUB Q3
1410 GOTO Q5
1420 GOSUB Q
1430 LET U$="CDBA40"
1440 GOSUB Q3
1450 POKE P,CODE (B$(1))
1460 GOSUB Q
1470 IF B$(1)=CHR$ 11 THEN POKE P+1,255
1480 LET P=P+1
1490 IF B$(1)=CHR$ 11 THEN GOTO 1510
1500 GOTO 1450
1510 LET P=P+1
1520 GOTO Q5
1530 LET B$=B$(Q6 TO )
1540 LET U$="CDBB02444D51142808CDBD077ECB7728023E8021004077233600"
1550 GOSUB Q3
1560 LET V=CODE B$(1)
1570 IF CODE B$(2)<>118 THEN GOTO Q1
1580 IF V<38 OR V>63 THEN GOTO Q1
1590 LET V=(V-38)*2+130
1600 POKE P-6,V
1610 GOTO Q5
1620 LET B$=B$(Q6 TO )
1630 IF B$(1)<>CHR$ 118 THEN GOTO Q1
1640 LET U$="CFFF"
1650 GOSUB Q3
1660 GOTO Q5
1670 LET B$=B$(6 TO )
1680 GOSUB Q2
1690 LET U$="2B7CB520FB"
1700 GOSUB Q3
1710 GOTO Q5
1720 LET B$=B$(Q6 TO )
1730 IF B$(1)<>CHR$ 118 THEN GOTO Q1
1740 LET U$="2A0C40161823062036002310FB1520F5010000CDF508"
1750 GOSUB Q3
1760 GOTO Q5
1770 LET B$=B$(5 TO )
1780 GOSUB Q2
1790 GOSUB Q4
1830 LET U$="45"
1840 GOSUB Q3
1850 GOSUB Q2
1860 LET U$="4DCDF508"
1870 GOSUB Q3
1880 GOTO Q5
1890 LET B$=B$(Q6 TO )
1900 LET L=(CODE B$-38)*2+130
1910 LET B$=B$(3 TO )
1920 GOSUB Q2
1930 GOSUB 3570
1940 IF CODE B$=118 THEN GOTO 2020
1950 LET U$="EB"
1960 GOSUB Q3
1970 LET S$=B$(1)
1980 GOSUB Q
1990 GOSUB Q2
1991 LET N$="CD0913"
1992 IF PEEK 4869=197 THEN LET N$="CD0513"
2000 LET U$=(N$ AND S$="*")+("EBCDC440" AND S$="/")+("19" AND S$="+")+("EBA7ED52" AND S$="-")
2010 GOSUB Q3
2020 LET U$="220040"
2030 GOSUB Q3
2040 POKE P-2,L
2050 GOTO Q5
2060 LET B$=B$(5 TO )
2070 GOSUB Q2
2080 POKE P-3,195
2090 LET G(N1,1)=PEEK (P-2)+PEEK (P-1)*256
2100 LET G(N1,2)=P-2
2110 LET N1=N1+1
2120 GOTO Q5
2130 LET B$=B$(6 TO )
2140 GOSUB Q2
2150 POKE P-3,205
2160 GOTO 2090
2170 LET U$="C9"
2180 GOSUB Q3
2190 GOTO Q5
2200 LET B$=B$(3 TO )
2210 GOSUB Q2
2220 GOSUB 3570
2230 LET U$="EB"
2240 GOSUB Q3
2250 LET S$=B$(1)
2260 GOSUB Q
2270 GOSUB Q2
2280 IF CODE B$>37 THEN GOSUB Q
2290 IF CODE B$<38 THEN GOSUB 3600
2300 LET U$="A7ED52"
2310 IF S$="<>" THEN LET U$=U$+"CA"
2320 IF S$="=" THEN LET U$=U$+"C2"
2330 IF S$="<" THEN LET U$=U$+"DA"
2340 IF S$=">" THEN LET U$=U$+"D2"
2350 LET U$=U$+"0000"
2360 IF S$<>">" AND S$<>"=" AND S$<>"<" AND S$<>"<>" THEN GOTO Q1
2370 GOSUB Q3
2380 LET G(N1,2)=P-2
2390 LET G(N1,1)=1000
2400 LET N1=N1+1
2410 LET A$=B$
2420 GOTO 1140
2430 LET B$=B$(5 TO )
2440 GOSUB Q2
2450 GOSUB Q4
2490 LET U$="EB"
2500 GOSUB Q3
2510 GOSUB Q2
2520 LET U$="EB73"
2530 GOSUB Q3
2540 GOTO Q5
2550 LET B$=B$(3 TO )
2560 LET U$="3EA0323040"
2570 GOTO 2590
2580 LET U$="3E9B323040"
2590 GOSUB Q3
2600 LET B$=B$(5 TO )
2610 GOSUB Q2
2620 LET U$="4D"
2630 GOSUB Q3
2640 GOSUB Q4
2680 GOSUB Q2
2690 LET U$="45CDB20B"
2700 GOSUB Q3
2710 GOTO Q5
2720 LET B$=B$(5 TO )
2730 GOSUB Q2
2740 GOSUB Q4
2771 LET U$="EB"
2780 GOSUB Q3
2790 GOSUB Q2
2800 LET U$="EB732372"
2810 GOSUB Q3
2820 GOTO Q5
2830 IF PEEK (P1-1)=118 THEN GOTO 3180
2840 IF P1=16509 THEN GOTO 3180
2850 LET P1=P1-1
2860 GOTO 2830
2870 SLOW
2880 LET L(N,1)=PEEK (P1-5)*256+PEEK (P1-4)
2890 LET L(N,2)=P-12288
2900 LET N=N+1
2910 RETURN
2920 DIM L(100,2)
2930 DIM G(70,2)
2940 LET N=1
2950 LET N1=N
2960 LET U$="E17E23E5FEFFC8D718F601FFFFA7ED520330FAC5E1C9A6AFAC"
2965 LET U$=U$+"FD3622002182403600237DFEBA20F8"
2970 GOSUB Q3
2980 RETURN
2990 IF N1=1 THEN RETURN
3000 FOR X=1 TO N1-1
3010 LET PO=G(X,2)
3020 LET L=G(X,1)
3030 LET G=1
3040 GOTO 3120
3050 LET G=G+1
3060 IF G=N THEN GOTO 3150
3070 GOTO 3040
3080 POKE PO,L(G,2)-256*INT (L(G,2)/256)
3090 POKE PO+1,INT (L(G,2)/256)
3100 NEXT X
3110 RETURN
3120 IF L=1000 THEN IF PO-12288<=L(G,2) THEN GOTO 3080
3130 IF L=L(G,1) THEN GOTO 3080
3140 GOTO 3050
3160 GOTO 3200
3170 RETURN
3190 LET L=PEEK P1*256+PEEK (P1+1)
3200 SLOW
3201 POKE 16418,0
3202 PRINT AT 22,0;"*******ERROR IN ";L;"******";AT 0,0;
3203 POKE 16418,2
3204 LIST L
3205 GOTO 3200
3230 LET V=CODE B$
3240 IF V<38 OR V>63 THEN GOTO Q1
3250 LET V=(V-38)*2+16514
3260 LET U$="2A"
3270 GOSUB Q3
3280 POKE P,V-16384
3290 POKE P+1,64
3300 LET P=P+2
3310 RETURN
3320 LET V=1
3330 IF CODE B$(V)>37 OR CODE B$(V)<28 THEN GOTO 3360
3340 LET V=V+1
3350 GOTO 3330
3360 IF V=1 THEN GOTO 3420
3370 LET V=VAL (B$( TO V-1))
3380 IF V<>INT V OR V>65536 THEN GOTO Q1
3390 GOSUB 3530
3400 POKE P+1,INT (V/256)
3405 LET P=P+2
3410 RETURN
3420 LET U$=""
3430 IF B$( TO 3)="TOP" THEN LET U$="2A0C4023"
3440 GOSUB 3780
3450 IF B$( TO 3)<>"USR" THEN GOTO 3850
3460 LET B$=B$(Q6 TO )
3470 GOSUB Q2
3480 POKE P-3,205
3490 RETURN
3500 IF U$="" THEN GOTO 3220
3510 GOSUB Q3
3520 RETURN
3530 LET U$="21"
3540 GOSUB Q3
3550 POKE P,V-256*INT (V/256)
3560 RETURN
3570 IF CODE B$<28 OR CODE B$>63 THEN RETURN
3580 GOSUB Q
3590 GOTO 3570
3600 IF CODE B$<28 OR CODE B$>37 THEN RETURN
3610 GOSUB Q
3620 GOTO 3600
3630 POKE P,CODE U$*16+CODE U$(2)-476
3640 LET U$=U$(3 TO )
3650 LET P=P+1
3660 IF P>=32700 THEN STOP
3670 IF U$="" THEN RETURN
3680 GOTO Q3
3690 GOSUB 2990
3700 LET J=P-12287
3710 LET P=28672
3720 LET U$="210000E5C103E52182401182701A7723137DB920F87CB820F4E136A62336AF2336AC233676E5118040A7ED52227F40E123C30304"
3730 GOSUB Q3
3740 LET P=J
3750 POKE 28673,P-256*INT (P/256)
3760 POKE 28674,INT (P/256)
3770 RAND USR 28672
3780 IF B$( TO 3)<>"RND" THEN RETURN
3790 LET U$="D92A3240545D29291929292919223240EB"
3800 GOSUB Q3
3810 LET B$=B$(Q6 TO )
3820 GOSUB Q2
3830 LET U$="EBA7ED5230FB19E5D9E1"
3840 RETURN
3850 IF B$( TO Q6)<>"PEEK" THEN GOTO 3900
3860 LET B$=B$(5 TO )
3870 GOSUB Q2
3880 LET U$="6E2600"
3890 GOTO 3500
3900 IF B$( TO Q6)<>"DEEK" THEN GOTO 3500
3910 LET B$=B$(5 TO )
3920 GOSUB Q2
3930 LET U$="D55E2356EBD1"
3940 GOTO 3500
3950 LET B$=B$(2 TO )
3960 RETURN
3970 IF B$(1)="," THEN GOTO 4000
3980 GOSUB Q
3990 GOTO Q4
4000 GOSUB Q
4010 RETURN
Code: Select all
# REM Q : , > P ? (_6 ( - =
# = < = _= _ __7____
10 REM [HEX:\
36,00,0E,00,1A,00,12,00,\
35,00,0F,00,90,01,22,00,\
00,00,10,00,16,00,14,00,\
00,00,00,00,00,00,00,00,\
00,00,14,00,00,00,13,00,\
14,00,00,00,80,01,14,00,\
04,00,00,00,00,00,00,00,\
E1,7E,23,E5,FE,FF,C8,D7,\
18,F6,01,FF,FF,A7,ED,52,\
03,30,FA,C5,E1,C9,A6,AF,\
AC,FD,36,22,00,21,82,40,\
36,00,23,7D,FE,BA,20,F8,\
21,22,00,22,90,40,21,16,\
00,22,96,40,3E,9B,32,30,\
40,2A,90,40,4D,2A,96,40,\
45,CD,B2,0B,21,14,00,22,\
A4,40,2A,A4,40,22,A8,40,\
2A,A4,40,22,AA,40,21,00,\
00,22,98,40,2A,98,40,EB,\
21,01,00,19,22,98,40,2A,\
98,40,EB,2A,A4,40,A7,ED,\
52,C2,31,41,C3,6D,41,2A,\
96,40,EB,2A,98,40,19,22,\
8A,40,2A,96,40,EB,2A,98,\
40,EB,A7,ED,52,22,8C,40,\
3E,9B,32,30,40,2A,90,40,\
4D,2A,8A,40,45,CD,B2,0B,\
3E,9B,32,30,40,2A,90,40,\
4D,2A,8C,40,45,CD,B2,0B,\
C3,16,41,21,00,00,22,98,\
40,2A,98,40,EB,21,01,00,\
19,22,98,40,2A,98,40,EB,\
2A,A4,40,A7,ED,52,C2,8E,\
41,C3,CA,41,2A,90,40,EB,\
2A,98,40,19,22,8A,40,2A,\
90,40,EB,2A,98,40,EB,A7,\
ED,52,22,8C,40,3E,9B,32,\
30,40,2A,8A,40,4D,2A,96,\
40,45,CD,B2,0B,3E,9B,32,\
30,40,2A,8C,40,4D,2A,96,\
40,45,CD,B2,0B,C3,73,41,\
2A,A4,40,22,A8,40,2A,A8,\
40,22,B0,40,21,00,00,22,\
B2,40,2A,B2,40,EB,21,01,\
00,19,22,B2,40,2A,B2,40,\
EB,2A,A4,40,A7,ED,52,C2,\
F7,41,C3,A8,42,2A,A4,40,\
EB,2A,A4,40,CD,09,13,22,\
8E,40,2A,B2,40,EB,2A,B2,\
40,CD,09,13,22,94,40,2A,\
8E,40,EB,2A,94,40,EB,A7,\
ED,52,22,AE,40,2A,B0,40,\
22,A8,40,2A,AE,40,EB,2A,\
A8,40,EB,CD,C4,40,22,B0,\
40,2A,B0,40,EB,2A,90,40,\
19,22,82,40,2A,90,40,EB,\
2A,B0,40,EB,A7,ED,52,22,\
84,40,2A,B2,40,EB,2A,96,\
40,19,22,86,40,2A,96,40,\
EB,2A,B2,40,EB,A7,ED,52,\
22,88,40,3E,9B,32,30,40,\
2A,82,40,4D,2A,86,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,84,40,4D,2A,86,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,82,40,4D,2A,88,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,84,40,4D,2A,88,40,45,\
CD,B2,0B,C3,DC,41,2A,A4,\
40,22,B2,40,21,00,00,22,\
B0,40,2A,B0,40,EB,21,01,\
00,19,22,B0,40,2A,B0,40,\
EB,2A,A4,40,A7,ED,52,C2,\
CF,42,C3,80,43,2A,A4,40,\
EB,2A,A4,40,CD,09,13,22,\
9A,40,2A,B0,40,EB,2A,B0,\
40,CD,09,13,22,9C,40,2A,\
9A,40,EB,2A,9C,40,EB,A7,\
ED,52,22,A2,40,2A,B2,40,\
22,AA,40,2A,A2,40,EB,2A,\
AA,40,EB,CD,C4,40,22,B2,\
40,2A,B0,40,EB,2A,90,40,\
19,22,82,40,2A,90,40,EB,\
2A,B0,40,EB,A7,ED,52,22,\
84,40,2A,96,40,EB,2A,B2,\
40,EB,A7,ED,52,22,86,40,\
2A,B2,40,EB,2A,96,40,19,\
22,88,40,3E,9B,32,30,40,\
2A,84,40,4D,2A,86,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,82,40,4D,2A,86,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,84,40,4D,2A,88,40,45,\
CD,B2,0B,3E,9B,32,30,40,\
2A,82,40,4D,2A,88,40,45,\
CD,B2,0B,C3,B4,42,C9,45,\
A6,AF,AC ]
100 LET X=USR 16595
120 SLOW
130 FOR D=1 TO 100
140 NEXT D
145 CLS
150 GOTO 100