home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / dse-src1.dms / in.adf / doublevector.S < prev    next >
Encoding:
Text File  |  1978-05-14  |  9.2 KB  |  473 lines

  1. ;* USE THIS COPPERLIST IF YOU WANT TO *
  2.  
  3. >extern "asmdisk1:binary/perspective",perspective
  4.  
  5. org $30000
  6. load $30000
  7.  
  8. o:    jmp    rutin
  9. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  10. doss:    dc.b    "dos.library",0
  11.     even
  12. graf:    dc.b    "graphics.library",0
  13.     even
  14. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  15. copp:    blk.l    1,0
  16. grap:    blk.l    1,0
  17. lagr:    blk.l    1,0
  18. stack:    blk.l    1,0
  19. screen:    dc.l    0
  20. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  21. rutin:    move.l    $4,a6        ; Find the Copperlist-Pointer...
  22.     jsr    -150(a6)
  23.     move.l    d0,stack
  24.     lea    graf(pc),a1
  25.     clr.l    d0
  26.     jsr    -552(a6)
  27.     move.l    d0,grap
  28.     add.l    #$32,d0
  29.     move.l    d0,copp
  30. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  31.     move.l    copp,a5        ; Start the Copperlist
  32.     move.w  #$00a0,$dff096
  33.     move.l  (a5),lagr
  34.     move.l  #list,(a5)
  35.     move.w  #$8380,$dff096
  36.     move.l    #$40000,a0
  37.     clr.l    d0
  38.     clr.l    d1
  39.  
  40. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  41. next:    cmp.b    #$ff,$dff006
  42.     bne    next
  43. ;    move.w    #$000f,$dff180
  44.     jsr    cpixel
  45. ;    move.w    #$0ff0,$dff180
  46.  
  47.     move.w    #0,my
  48.     move.w    #0,mx
  49.     move.b    $dff00a,my+1
  50.     move.b    $dff00b,mx+1
  51.     cmp.b    #$33,$bfec01
  52.     bne    key
  53.     sub.w    #1,depth
  54. key:    cmp.b    #$37,$bfec01
  55.     bne    key2
  56.     add.w    #1,depth
  57. key2:    add.w    #2,b
  58.     cmp.w    #360,b
  59.     blt    go
  60.     move.w    #2,b
  61. go:
  62.     add.w    #4,a
  63.     cmp.w    #360,a
  64.     blt    go1
  65.     move.w    #0,a
  66. go1:
  67.     add.w    #1,c
  68.     cmp.w    #360,c
  69.     blt    go2
  70.     move.w    #0,c
  71. go2:
  72.     move.w    #0,nu
  73.     bsr    initlinedraw
  74. ploop:    move.l    #coords,a4    ; Count all coords
  75.     move.l    #coords2,a6
  76.     move.w    nu,d2
  77.     add.l    d2,a4
  78.     add.l    d2,a6
  79.     move.w    (a4),d0
  80.     move.w    2(a4),d1
  81.     move.w    4(a4),d2
  82.     bsr    vectorcalc
  83.     move.w    x2,d0
  84.     move.w    y2,d1
  85.     move.w    z2,d2
  86.     lea    perspective,a3
  87.     add    depth,d2
  88.     add    d2,d2
  89.     move    (a3,d2),d5
  90.     muls    d5,d0
  91.     muls    d5,d1
  92.     add.l    d0,d0
  93.     add.l    d1,d1
  94.     swap    d0
  95.     swap    d1
  96.     add.w    mx,d0
  97.     add.w    my,d1
  98.     move.w    d0,(a6)
  99.     move.w    d1,2(a6)
  100.     add.w    #6,nu
  101.     move.w    no,d2
  102.     cmp.w    nu,d2
  103.     bne    ploop
  104.  
  105. ;    move.w    #$0f00,$dff180
  106.     lea    connections,a4
  107.     move.l    #40,d4
  108.     clr.l    d2
  109.     clr.l    d3
  110.     clr.l    d5
  111.     clr.l    d6
  112.  
  113. lloop:    lea    coords2,a6
  114.     move.w    (a4),d5
  115.     move.w    2(a4),d6
  116.     mulu    #6,d5
  117.     mulu    #6,d6
  118.     move.w    (a6,d5),d0
  119.     move.w    2(a6,d5),d1
  120.     move.w    (a6,d6),d2
  121.     move.w    2(a6,d6),d3
  122.     move.l    screen,a0
  123.     bsr    initlinedraw
  124.     bsr    linedraw
  125. ;    bsr    pixel
  126.     add.l    #4,a4
  127.     cmp.w    #-1,(a4)
  128.     bne    lloop
  129.     btst    #6,$bfe001
  130.     bne    next
  131.  
  132. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  133.  
  134. close:    move.l    copp,a5        ; Close Copperlist
  135.     move.w  #$0080,$dff096
  136.     move.l  lagr,(a5)
  137.     move.w  #$80a0,$dff096
  138.     move.l    $4,a6
  139.     move.l    stack,d0
  140.     jsr    -156(a6)
  141.     clr.l    d0
  142.     rts
  143.  
  144. pixel:    clr.l    d2
  145.     mulu    #$28,d1
  146.     divu    #8,d0
  147.     move.b    d0,d2
  148.  
  149.     add.l    d1,a0
  150.     add.l    d2,a0
  151.     swap    d0
  152.     not.b    d0
  153.     
  154.     bset    d0,(a0)
  155.     rts
  156. cpixel:    
  157.     move.l    bp,d0
  158.     move.w    bpls+6,d1
  159.     swap    d1
  160.     move.w    bpls+2,d1
  161.     swap    d1
  162.     move.w    d0,bpls+6
  163.     swap    d0
  164.     move.w    d0,bpls+2
  165.     move.l    d1,bp
  166.     swap     d0
  167.     move.l    d1,screen
  168.     add.l    #40*8,d1
  169.     move.l    d1,$dff054    
  170.     move.w    #0,$dff064
  171.     move.w    #0,$dff066
  172.     move.l    #$0000,$dff044
  173.     move.w    #$0100,$dff040
  174.     move.w    #$0000,$dff042
  175.     move.w    #$4014,$dff058
  176. ts:    btst    #14,$dff002
  177.     bne    ts
  178.     
  179.     rts
  180.  
  181. vectorcalc:
  182.     move.w    a,d6
  183.     lsl.w    #1,d6
  184.     lea    sinus(pc),a0
  185.  
  186.     move.w    (a0,d6),d3
  187.  
  188.     move.w    d3,d5
  189.     muls    d1,d3
  190.     lsr.l    #8,d3
  191.     lsr.l    #6,d3    ;d3 holds y*sin(a)
  192.     lea    cosinus(pc),a1
  193.     move.w    (a1,d6),d4
  194.  
  195.     move.w    d4,d7
  196.     muls    d0,d4
  197.     lsr.l    #8,d4
  198.     lsr.l    #6,d4    ;d4 holds x*cos(a)
  199.     
  200.     sub.w    d3,d4    ;d4 holds x*cos(a)-y*sin(a)=x1
  201.     move.w    d4,x1
  202.     muls    d1,d7
  203.     muls    d0,d5
  204.     lsr.l    #8,d7
  205.     lsr.l    #6,d7
  206.     lsr.l    #8,d5
  207.     lsr.l    #6,d5
  208.     add.w    d5,d7    ;d7 holds y*cos(a)-x*sin(a)=y1
  209.     move.w    d7,y1
  210.  
  211.     
  212.     move.w    b,d6
  213.     lsl.w    #1,d6
  214.  
  215.  
  216.     move.w    (a0,d6),d3
  217.  
  218.     move.w    d3,d5
  219.     muls    d2,d3
  220.     lsr.l    #8,d3
  221.     lsr.l    #6,d3    ;d3 holds z*sin(b)
  222.  
  223.     move.w    (a1,d6),d4
  224.  
  225.     move.w    d4,d7
  226.     muls    y1,d4
  227.     lsr.l    #8,d4
  228.     lsr.l    #6,d4    ;d4 holds y1*cos(b)
  229.     
  230.     sub.w    d3,d4    ;d4 holds y1*cos(b)-z*sin(b)=y2
  231.     move.w    d4,y2
  232.     muls    d2,d7
  233.     muls    y1,d5
  234.     lsr.l    #8,d7
  235.     lsr.l    #6,d7
  236.     lsr.l    #8,d5
  237.     lsr.l    #6,d5
  238.     add.w    d5,d7    ;d7 holds z*cos(b)+y1*sin(b)=z1
  239.     move.w    d7,z1
  240.  
  241.     
  242.  
  243.     move.w    c,d6
  244.     lsl.w    #1,d6
  245.  
  246.  
  247.     move.w    (a0,d6),d3
  248.  
  249.     move.w    d3,d5
  250.     muls    x1,d3
  251.     lsr.l    #8,d3
  252.     lsr.l    #6,d3    ;d3 holds x1*sin(c)
  253.  
  254.     move.w    (a1,d6),d4
  255.  
  256.     move.w    d4,d7
  257.     muls    z1,d4
  258.     lsr.l    #8,d4
  259.     lsr.l    #6,d4    ;d4 holds z1*cos(c)
  260.     
  261.     sub.w    d3,d4    ;d4 holds z1*cos(c)-x1*sin(c)=z2
  262.     move.w    d4,z2
  263.     muls    x1,d7
  264.     muls    z1,d5
  265.     lsr.l    #8,d7
  266.     lsr.l    #6,d7
  267.     lsr.l    #8,d5
  268.     lsr.l    #6,d5
  269.     add.w    d5,d7    ;d7 holds x1*cos(c)+z1*sin(c)=x2
  270.     move.w    d7,x2
  271.  
  272.     rts
  273.  
  274. swid=40
  275.  
  276. linedraw:
  277. cmp.w    d0,d2
  278. bne.s    ld_not1pix
  279. cmp.w    d1,d3
  280. bne.s    ld_not1pix
  281. rts
  282. ld_not1pix:
  283. movem.l    d4/d7/a3-a4,-(a7)
  284. moveq    #0,d7
  285. sub.w    d0,d2
  286. bge.s    ld_xok
  287. neg.w    d2
  288. addq.w    #2,d7
  289. ld_xok:
  290. sub.w    d1,d3
  291. bge.s    ld_yok
  292. neg.w    d3
  293. addq.w    #4,d7
  294. ld_yok:
  295. cmp.w    d3,d2
  296. bgt.s    ld_xyok
  297. bne.s    ld_not45
  298. add.w    #16,d7
  299. ld_not45:
  300. exg    d2,d3
  301. addq.w    #8,d7
  302. ld_xyok:
  303. add.w    d3,d3
  304. move.w    d3,d4
  305. sub.w    d2,d4
  306. add.w    d3,d3
  307. move.w    d3,a3
  308. add.w    d2,d2
  309. add.w    d2,d2
  310. sub.w    d2,d3
  311. mulu    #swid,d1
  312. move.l    a0,a4
  313. add.w    d1,a4
  314. move.w    d0,d1
  315. lsr.w    #3,d1
  316. add.w    d1,a4
  317. andi.w    #$f,d0
  318. ror.w    #4,d0
  319. add.w    #$bc8,d0
  320. swap    d0
  321. move.w    (a1,d7.w),d0
  322. lsl.w    #4,d2
  323. addq.w    #2,d2
  324. ld_wldraw:
  325. btst    #6,$2(a2)
  326. bne.s    ld_wldraw
  327. move.l    d0,$40(a2)
  328. move.w    d3,$64(a2)
  329. move.w    a3,$62(a2)
  330. move.w    d4,$52(a2)
  331. move.l    a4,$48(a2)
  332. move.l    a4,$54(a2)
  333. move.w    d2,$58(a2)
  334. movem.l    (a7)+,d4/d7/a3-a4
  335. rts
  336.  
  337. initlinedraw:
  338. lea.l    octant(pc),a1
  339. move.l    #$dff000,a2
  340. waitinit:
  341. btst    #6,$2(a2)
  342. bne.s    waitinit
  343. move.l    #-1,$44(a2)
  344. move.l    #$ffff8000,$72(a2)
  345. move.w    #swid,$60(a2)
  346. move.w    #swid,$66(a2)
  347. rts
  348.  
  349. octant:
  350. dc.w    $0051,$0055,$0059,$005d
  351. dc.w    $0041,$0049,$0045,$004d
  352. dc.w    $0011,$0015,$0019,$001d
  353. dc.w    $0001,$0009,$0005,$000d
  354.  
  355.  
  356.  
  357. a:    dc.l    0
  358. b:    dc.l    0
  359. c:    dc.l    0
  360. x2:    dc.l    0
  361. y2:    dc.l    0
  362. z2:    dc.l    0
  363. x1:    dc.l    0
  364. y1:    dc.l    0
  365. z1:    dc.l    0
  366. mx:    dc.l    0
  367. my:    dc.l    0
  368. depth:    dc.w    $100
  369. sinus:
  370.  
  371.     dc.w    0,286,572,857,1143,1428,1713,1997,2280,2563,2845,3126
  372.     dc.w    3406,3686,3964,4240,4516,4790,5063,5334,5604,5872
  373.     dc.w    6138,6402,6664,6924,7182,7438,7692,7943,8192,8438
  374.     dc.w    8682,8923,9162,9397,9630,9860,10087,10311,10531
  375.     dc.w    10749,10963,11174,11381,11585,11786,11982,12176
  376.     dc.w    12365,12551,12733,12911,13085,13255,13421,13583
  377.     dc.w    13741,13894,14044,14189,14330,14466,14598,14726,14849
  378.     dc.w    14968,15082,15191,15296,15396,15491,15582,15668,15749
  379.     dc.w    15826,15897,15964,16026,16083,16135,16182,16225,16262
  380.     dc.w    16294,16322,16344,16362,16374,16382,16383
  381.  
  382. cosinus:
  383.     dc.w    16382,16374,16362,16344,16322,16294,16262,16225,16182
  384.     dc.w    16135,16083,16026,15964,15897,15826,15749,15668,15582
  385.     dc.w    15491,15396,15296,15191,15082,14968,14849,14726,14598
  386.     dc.w    14466,14330,14189,14044,13894,13741,13583,13421,13255
  387.     dc.w    13085,12911,12733,12551,12365,12176,11982,11786,11585
  388.     dc.w    11381,11174,10963,10749,10531,10311,10087,9860,9630
  389.     dc.w    9397,9163,8923,8682,8438,8192,7943,7692,7438,7132,6924
  390.     dc.w    6664,6402,6138,5872,5604,5334,5063,4790,4516,4240,3964
  391.     dc.w    3686,3406,3126,2845,2563,2280,1997,1713,1428
  392.     dc.w    1143,857,572,286,0
  393.     
  394. dc.w    -286,-572,-857,-1143,-1428,-1713,-1997,-2280,-2563,-2845,-3126
  395. dc.w    -3406,-3686,-3964,-4240,-4516,-4790,-5063,-5334,-5604,-5872
  396. dc.w    -6138,-6402,-6664,-6924,-7182,-7438,-7692,-7943,-8192,-8438
  397. dc.w    -8682,-8923,-9162,-9397,-9630,-9860,-10087,-10311,-10531
  398. dc.w    -10749,-10963,-11174,-11381,-11585,-11786,-11982,-12176
  399. dc.w    -12365,-12551,-12733,-12911,-13085,-13255,-13421,-13583
  400. dc.w    -13741,-13894,-14044,-14189,-14330,-14466,-14598,-14726,-14849
  401. dc.w    -14968,-15082,-15191,-15296,-15396,-15491,-15582,-15668,-15749
  402. dc.w    -15826,-15897,-15964,-16026,-16083,-16135,-16182,-16225,-16262
  403. dc.w    -16294,-16322,-16344,-16362,-16374,-16382,-16383
  404.  
  405. dc.w    -16382,-16374,-16362,-16344,-16322,-16294,-16262,-16225,-16182
  406. dc.w    -16135,-16083,-16026,-15964,-15897,-15826,-15749,-15668,-15582
  407. dc.w    -15491,-15396,-15296,-15191,-15082,-14968,-14849,-14726,-14598
  408. dc.w    -14466,-14330,-14189,-14044,-13894,-13741,-13583,-13421,-13255
  409. dc.w    -13085,-12911,-12733,-12551,-12365,-12176,-11982,-11786,-11585
  410. dc.w    -11381,-11174,-10963,-10749,-10531,-10311,-10087,-9860,-9630
  411. dc.w    -9397,-9163,-8923,-8682,-8438,-8192,-7943,-7692,-7438,-7132,-6924
  412. dc.w    -6664,-6402,-6138,-5872,-5604,-5334,-5063,-4790,-4516,-4240,-3964
  413. dc.w    -3686,-3406,-3126,-2845,-2563,-2280,-1997,-1713,-1428
  414. dc.w    -1143,-857,-572,-286
  415.     dc.w    0,286,572,857,1143,1428,1713,1997,2280,2563,2845,3126
  416.     dc.w    3406,3686,3964,4240,4516,4790,5063,5334,5604,5872
  417.     dc.w    6138,6402,6664,6924,7182,7438,7692,7943,8192,8438
  418.     dc.w    8682,8923,9162,9397,9630,9860,10087,10311,10531
  419.     dc.w    10749,10963,11174,11381,11585,11786,11982,12176
  420.     dc.w    12365,12551,12732,12911,13085,13255,13421,13583
  421.     dc.w    13741,13894,14044,14189,14330,14466,14598,14726,14849
  422.     dc.w    14968,15082,15191,15296,15396,15491,15582,15668,15749
  423.     dc.w    15826,15897,15964,16026,16083,16135,16182,16225,16262
  424.     dc.w    16294,16322,16344,16362,16374,16382,16384
  425.  
  426. coords:    
  427.  
  428. dc.w    -100,-100,-100,100,-100,-100,100,100,-100,-100,100,-100
  429. dc.w    -100,-100,100,100,-100,100,100,100,100,-100,100,100
  430.  
  431. dc.w    -80,-80,-80,80,-80,-80,80,80,-80,-80,80,-80
  432. dc.w    -80,-80,80,80,-80,80,80,80,80,-80,80,80
  433.  
  434. dc.w    -60,-60,-60,60,-60,-60,60,60,-60,-60,60,-60
  435. dc.w    -60,-60,60,60,-60,60,60,60,60,-60,60,60
  436.  
  437. dc.w    -40,-40,-40,40,-40,-40,40,40,-40,-40,40,-40
  438. dc.w    -40,-40,40,40,-40,40,40,40,40,-40,40,40
  439.  
  440. no:    dc.w    32*6
  441. nu:    dc.w    0
  442.  
  443.  
  444.  
  445. connections:
  446.  
  447. dc.w    0,1,1,2,2,3,0,3,4,5,5,6,6,7,4,7,0,4,1,5,2,6,3,7,8,9,9,10
  448. dc.w    10,11,8,11,12,13,13,14,14,15,12,15,16,17,17,18,18,19,19,16
  449. dc.w    20,21,21,22,22,23,20,23,8,12,9,13,10,14,11,15,16,20,17,21
  450. dc.w    18,22,19,23,24,25,25,26,26,27,24,27,28,29,29,30,30,31,28,31
  451. dc.w    24,28,25,29,26,30,27,31,-1,-1
  452.  
  453. coords2:    blk.b    2000,0
  454.  
  455. perspective:    equ    $60000
  456. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  457. even
  458. bp:    dc.l    $45000
  459. list:    
  460. ;    dc.w     %0000000100000000,$0096
  461.     dc.l    $01800000,$01820fff
  462.     dc.l    $2001fffe
  463. ;    dc.w     %1000000100000000,$0096
  464. bpls:    dc.l    $00e00004,$00e20000
  465.     dc.l    $01001200,$01020000
  466.     dc.l    $ffddfffe,$2001fffe
  467. ;    dc.w     %0000000100000000,$0096
  468.     dc.l    $fffffffe    
  469.  
  470.  
  471.  
  472.  
  473.