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

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