	title 'sqrt'
;
; argument is passed in ax
; sqrt value is returned in ax
;  integer value returned is sqrt(1-(x/1024)^2)*4096

_MODEL	equ	<SMALL>
include model.inc

	public	csqrt
atnseg	segment	para 'horseshit'
sqrttbl	dw	1474
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1473
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1472
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1471
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1470
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1469
	dw	1468
	dw	1468
	dw	1468
	dw	1468
	dw	1468
	dw	1468
	dw	1468
	dw	1468
	dw	1467
	dw	1467
	dw	1467
	dw	1467
	dw	1467
	dw	1467
	dw	1467
	dw	1466
	dw	1466
	dw	1466
	dw	1466
	dw	1466
	dw	1466
	dw	1466
	dw	1465
	dw	1465
	dw	1465
	dw	1465
	dw	1465
	dw	1465
	dw	1464
	dw	1464
	dw	1464
	dw	1464
	dw	1464
	dw	1464
	dw	1464
	dw	1463
	dw	1463
	dw	1463
	dw	1463
	dw	1463
	dw	1462
	dw	1462
	dw	1462
	dw	1462
	dw	1462
	dw	1462
	dw	1461
	dw	1461
	dw	1461
	dw	1461
	dw	1461
	dw	1460
	dw	1460
	dw	1460
	dw	1460
	dw	1460
	dw	1459
	dw	1459
	dw	1459
	dw	1459
	dw	1459
	dw	1458
	dw	1458
	dw	1458
	dw	1458
	dw	1458
	dw	1457
	dw	1457
	dw	1457
	dw	1457
	dw	1457
	dw	1456
	dw	1456
	dw	1456
	dw	1456
	dw	1455
	dw	1455
	dw	1455
	dw	1455
	dw	1454
	dw	1454
	dw	1454
	dw	1454
	dw	1454
	dw	1453
	dw	1453
	dw	1453
	dw	1453
	dw	1452
	dw	1452
	dw	1452
	dw	1452
	dw	1451
	dw	1451
	dw	1451
	dw	1451
	dw	1450
	dw	1450
	dw	1450
	dw	1450
	dw	1449
	dw	1449
	dw	1449
	dw	1448
	dw	1448
	dw	1448
	dw	1448
	dw	1447
	dw	1447
	dw	1447
	dw	1447
	dw	1446
	dw	1446
	dw	1446
	dw	1445
	dw	1445
	dw	1445
	dw	1445
	dw	1444
	dw	1444
	dw	1444
	dw	1443
	dw	1443
	dw	1443
	dw	1442
	dw	1442
	dw	1442
	dw	1442
	dw	1441
	dw	1441
	dw	1441
	dw	1440
	dw	1440
	dw	1440
	dw	1439
	dw	1439
	dw	1439
	dw	1438
	dw	1438
	dw	1438
	dw	1437
	dw	1437
	dw	1437
	dw	1436
	dw	1436
	dw	1436
	dw	1436
	dw	1435
	dw	1435
	dw	1434
	dw	1434
	dw	1434
	dw	1433
	dw	1433
	dw	1433
	dw	1432
	dw	1432
	dw	1432
	dw	1431
	dw	1431
	dw	1431
	dw	1430
	dw	1430
	dw	1430
	dw	1429
	dw	1429
	dw	1429
	dw	1428
	dw	1428
	dw	1427
	dw	1427
	dw	1427
	dw	1426
	dw	1426
	dw	1426
	dw	1425
	dw	1425
	dw	1424
	dw	1424
	dw	1424
	dw	1423
	dw	1423
	dw	1423
	dw	1422
	dw	1422
	dw	1421
	dw	1421
	dw	1421
	dw	1420
	dw	1420
	dw	1419
	dw	1419
	dw	1419
	dw	1418
	dw	1418
	dw	1417
	dw	1417
	dw	1417
	dw	1416
	dw	1416
	dw	1415
	dw	1415
	dw	1414
	dw	1414
	dw	1414
	dw	1413
	dw	1413
	dw	1412
	dw	1412
	dw	1411
	dw	1411
	dw	1411
	dw	1410
	dw	1410
	dw	1409
	dw	1409
	dw	1408
	dw	1408
	dw	1407
	dw	1407
	dw	1407
	dw	1406
	dw	1406
	dw	1405
	dw	1405
	dw	1404
	dw	1404
	dw	1403
	dw	1403
	dw	1402
	dw	1402
	dw	1402
	dw	1401
	dw	1401
	dw	1400
	dw	1400
	dw	1399
	dw	1399
	dw	1398
	dw	1398
	dw	1397
	dw	1397
	dw	1396
	dw	1396
	dw	1395
	dw	1395
	dw	1394
	dw	1394
	dw	1393
	dw	1393
	dw	1392
	dw	1392
	dw	1391
	dw	1391
	dw	1390
	dw	1390
	dw	1389
	dw	1389
	dw	1388
	dw	1388
	dw	1387
	dw	1387
	dw	1386
	dw	1386
	dw	1385
	dw	1385
	dw	1384
	dw	1384
	dw	1383
	dw	1383
	dw	1382
	dw	1382
	dw	1381
	dw	1380
	dw	1380
	dw	1379
	dw	1379
	dw	1378
	dw	1378
	dw	1377
	dw	1377
	dw	1376
	dw	1376
	dw	1375
	dw	1374
	dw	1374
	dw	1373
	dw	1373
	dw	1372
	dw	1372
	dw	1371
	dw	1371
	dw	1370
	dw	1369
	dw	1369
	dw	1368
	dw	1368
	dw	1367
	dw	1367
	dw	1366
	dw	1365
	dw	1365
	dw	1364
	dw	1364
	dw	1363
	dw	1362
	dw	1362
	dw	1361
	dw	1361
	dw	1360
	dw	1359
	dw	1359
	dw	1358
	dw	1358
	dw	1357
	dw	1356
	dw	1356
	dw	1355
	dw	1355
	dw	1354
	dw	1353
	dw	1353
	dw	1352
	dw	1351
	dw	1351
	dw	1350
	dw	1350
	dw	1349
	dw	1348
	dw	1348
	dw	1347
	dw	1346
	dw	1346
	dw	1345
	dw	1344
	dw	1344
	dw	1343
	dw	1343
	dw	1342
	dw	1341
	dw	1341
	dw	1340
	dw	1339
	dw	1339
	dw	1338
	dw	1337
	dw	1337
	dw	1336
	dw	1335
	dw	1335
	dw	1334
	dw	1333
	dw	1333
	dw	1332
	dw	1331
	dw	1330
	dw	1330
	dw	1329
	dw	1328
	dw	1328
	dw	1327
	dw	1326
	dw	1326
	dw	1325
	dw	1324
	dw	1324
	dw	1323
	dw	1322
	dw	1321
	dw	1321
	dw	1320
	dw	1319
	dw	1319
	dw	1318
	dw	1317
	dw	1316
	dw	1316
	dw	1315
	dw	1314
	dw	1313
	dw	1313
	dw	1312
	dw	1311
	dw	1311
	dw	1310
	dw	1309
	dw	1308
	dw	1308
	dw	1307
	dw	1306
	dw	1305
	dw	1305
	dw	1304
	dw	1303
	dw	1302
	dw	1302
	dw	1301
	dw	1300
	dw	1299
	dw	1298
	dw	1298
	dw	1297
	dw	1296
	dw	1295
	dw	1295
	dw	1294
	dw	1293
	dw	1292
	dw	1291
	dw	1291
	dw	1290
	dw	1289
	dw	1288
	dw	1287
	dw	1287
	dw	1286
	dw	1285
	dw	1284
	dw	1283
	dw	1283
	dw	1282
	dw	1281
	dw	1280
	dw	1279
	dw	1279
	dw	1278
	dw	1277
	dw	1276
	dw	1275
	dw	1274
	dw	1274
	dw	1273
	dw	1272
	dw	1271
	dw	1270
	dw	1269
	dw	1268
	dw	1268
	dw	1267
	dw	1266
	dw	1265
	dw	1264
	dw	1263
	dw	1262
	dw	1262
	dw	1261
	dw	1260
	dw	1259
	dw	1258
	dw	1257
	dw	1256
	dw	1255
	dw	1255
	dw	1254
	dw	1253
	dw	1252
	dw	1251
	dw	1250
	dw	1249
	dw	1248
	dw	1247
	dw	1246
	dw	1246
	dw	1245
	dw	1244
	dw	1243
	dw	1242
	dw	1241
	dw	1240
	dw	1239
	dw	1238
	dw	1237
	dw	1236
	dw	1235
	dw	1234
	dw	1234
	dw	1233
	dw	1232
	dw	1231
	dw	1230
	dw	1229
	dw	1228
	dw	1227
	dw	1226
	dw	1225
	dw	1224
	dw	1223
	dw	1222
	dw	1221
	dw	1220
	dw	1219
	dw	1218
	dw	1217
	dw	1216
	dw	1215
	dw	1214
	dw	1213
	dw	1212
	dw	1211
	dw	1210
	dw	1209
	dw	1208
	dw	1207
	dw	1206
	dw	1205
	dw	1204
	dw	1203
	dw	1202
	dw	1201
	dw	1200
	dw	1199
	dw	1198
	dw	1197
	dw	1196
	dw	1195
	dw	1194
	dw	1193
	dw	1192
	dw	1191
	dw	1190
	dw	1189
	dw	1188
	dw	1187
	dw	1186
	dw	1184
	dw	1183
	dw	1182
	dw	1181
	dw	1180
	dw	1179
	dw	1178
	dw	1177
	dw	1176
	dw	1175
	dw	1174
	dw	1173
	dw	1172
	dw	1170
	dw	1169
	dw	1168
	dw	1167
	dw	1166
	dw	1165
	dw	1164
	dw	1163
	dw	1162
	dw	1160
	dw	1159
	dw	1158
	dw	1157
	dw	1156
	dw	1155
	dw	1154
	dw	1152
	dw	1151
	dw	1150
	dw	1149
	dw	1148
	dw	1147
	dw	1146
	dw	1144
	dw	1143
	dw	1142
	dw	1141
	dw	1140
	dw	1138
	dw	1137
	dw	1136
	dw	1135
	dw	1134
	dw	1133
	dw	1131
	dw	1130
	dw	1129
	dw	1128
	dw	1126
	dw	1125
	dw	1124
	dw	1123
	dw	1122
	dw	1120
	dw	1119
	dw	1118
	dw	1117
	dw	1115
	dw	1114
	dw	1113
	dw	1112
	dw	1110
	dw	1109
	dw	1108
	dw	1107
	dw	1105
	dw	1104
	dw	1103
	dw	1102
	dw	1100
	dw	1099
	dw	1098
	dw	1096
	dw	1095
	dw	1094
	dw	1093
	dw	1091
	dw	1090
	dw	1089
	dw	1087
	dw	1086
	dw	1085
	dw	1083
	dw	1082
	dw	1081
	dw	1079
	dw	1078
	dw	1077
	dw	1075
	dw	1074
	dw	1073
	dw	1071
	dw	1070
	dw	1069
	dw	1067
	dw	1066
	dw	1064
	dw	1063
	dw	1062
	dw	1060
	dw	1059
	dw	1057
	dw	1056
	dw	1055
	dw	1053
	dw	1052
	dw	1050
	dw	1049
	dw	1048
	dw	1046
	dw	1045
	dw	1043
	dw	1042
	dw	1040
	dw	1039
	dw	1038
	dw	1036
	dw	1035
	dw	1033
	dw	1032
	dw	1030
	dw	1029
	dw	1027
	dw	1026
	dw	1024
	dw	1023
	dw	1021
	dw	1020
	dw	1018
	dw	1017
	dw	1015
	dw	1014
	dw	1012
	dw	1011
	dw	1009
	dw	1008
	dw	1006
	dw	1005
	dw	1003
	dw	1002
	dw	1000
	dw	998
	dw	997
	dw	995
	dw	994
	dw	992
	dw	991
	dw	989
	dw	987
	dw	986
	dw	984
	dw	983
	dw	981
	dw	979
	dw	978
	dw	976
	dw	974
	dw	973
	dw	971
	dw	970
	dw	968
	dw	966
	dw	965
	dw	963
	dw	961
	dw	960
	dw	958
	dw	956
	dw	955
	dw	953
	dw	951
	dw	949
	dw	948
	dw	946
	dw	944
	dw	943
	dw	941
	dw	939
	dw	937
	dw	936
	dw	934
	dw	932
	dw	930
	dw	929
	dw	927
	dw	925
	dw	923
	dw	921
	dw	920
	dw	918
	dw	916
	dw	914
	dw	912
	dw	911
	dw	909
	dw	907
	dw	905
	dw	903
	dw	901
	dw	899
	dw	898
	dw	896
	dw	894
	dw	892
	dw	890
	dw	888
	dw	886
	dw	884
	dw	882
	dw	880
	dw	879
	dw	877
	dw	875
	dw	873
	dw	871
	dw	869
	dw	867
	dw	865
	dw	863
	dw	861
	dw	859
	dw	857
	dw	855
	dw	853
	dw	851
	dw	849
	dw	847
	dw	845
	dw	843
	dw	840
	dw	838
	dw	836
	dw	834
	dw	832
	dw	830
	dw	828
	dw	826
	dw	824
	dw	821
	dw	819
	dw	817
	dw	815
	dw	813
	dw	811
	dw	808
	dw	806
	dw	804
	dw	802
	dw	800
	dw	797
	dw	795
	dw	793
	dw	791
	dw	788
	dw	786
	dw	784
	dw	782
	dw	779
	dw	777
	dw	775
	dw	772
	dw	770
	dw	768
	dw	765
	dw	763
	dw	760
	dw	758
	dw	756
	dw	753
	dw	751
	dw	748
	dw	746
	dw	743
	dw	741
	dw	739
	dw	736
	dw	734
	dw	731
	dw	728
	dw	726
	dw	723
	dw	721
	dw	718
	dw	716
	dw	713
	dw	710
	dw	708
	dw	705
	dw	703
	dw	700
	dw	697
	dw	695
	dw	692
	dw	689
	dw	686
	dw	684
	dw	681
	dw	678
	dw	675
	dw	673
	dw	670
	dw	667
	dw	664
	dw	661
	dw	658
	dw	655
	dw	653
	dw	650
	dw	647
	dw	644
	dw	641
	dw	638
	dw	635
	dw	632
	dw	629
	dw	626
	dw	623
	dw	620
	dw	616
	dw	613
	dw	610
	dw	607
	dw	604
	dw	601
	dw	597
	dw	594
	dw	591
	dw	587
	dw	584
	dw	581
	dw	577
	dw	574
	dw	571
	dw	567
	dw	564
	dw	560
	dw	557
	dw	553
	dw	550
	dw	546
	dw	542
	dw	539
	dw	535
	dw	531
	dw	528
	dw	524
	dw	520
	dw	516
	dw	512
	dw	509
	dw	505
	dw	501
	dw	497
	dw	493
	dw	489
	dw	484
	dw	480
	dw	476
	dw	472
	dw	468
	dw	463
	dw	459
	dw	454
	dw	450
	dw	445
	dw	441
	dw	436
	dw	432
	dw	427
	dw	422
	dw	417
	dw	412
	dw	407
	dw	402
	dw	397
	dw	392
	dw	387
	dw	382
	dw	376
	dw	371
	dw	365
	dw	359
	dw	354
	dw	348
	dw	342
	dw	336
	dw	330
	dw	323
	dw	317
	dw	310
	dw	303
	dw	296
	dw	289
	dw	282
	dw	275
	dw	267
	dw	259
	dw	251
	dw	242
	dw	234
	dw	224
	dw	215
	dw	205
	dw	194
	dw	183
	dw	172
	dw	159
	dw	145
	dw	130
	dw	112
	dw	92
	dw	65
atnseg	ends	

.dataseg
.ends

.codeseg
	;assume cs:@codeseg,
	assume ds:@dataseg

.proc	csqrt	auto
	mov	si,offset	atnseg:sqrttbl
	or	ax,ax		; make a few checks
	js	sqrte
	cmp	ax,1024		;
	jns	sqrte
	shl	ax,1
	add	si,ax
	push	es
	mov	ax,atnseg
	assume	es:atnseg
	mov	es,ax
	mov	ax,es:[si]		; pick up table entry
	assume	es:nothing
	pop	es
	clc			; set no error flag
	ret
sqrte:	xor	ax,ax		; return zero
	stc			; set error flag
	ret
.endp
.ends
	end
