home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0651.ZIP / CCE_0651.PD / TRUE_COL.OR / FINAL.S < prev    next >
Text File  |  1993-05-09  |  8KB  |  428 lines

  1. _p_cookies equ $5a0
  2. F30_val equ $00030000
  3. modeVGA equ %100010100
  4. modeRGB equ %000100100
  5. anz_spr equ 25
  6.  
  7. text
  8.  
  9.          move.l 4(sp),a0;
  10.          lea newstack,sp
  11.          move.l #$100,d0
  12.          add.l $c(a0),d0
  13.          add.l $14(a0),d0
  14.          add.l $1c(a0),d0
  15.          move.l d0,-(sp)
  16.          move.l a0,-(sp)
  17.          clr.w -(sp)
  18.          move.w #$4a,-(sp)
  19.          trap #1
  20.          lea 12(sp),sp
  21.          clr.l -(sp)
  22.          move.w #$20,-(sp)
  23.          trap #1
  24.          addq.l #6,sp
  25.     move.l d0,oldstack
  26.     lea $5a0.w,a0
  27.     move.l (a0),a0
  28.     beq.s failure
  29.     move.l #'_VDO',d0
  30. search_cookie:
  31.     tst.l (a0)
  32.     beq.s failure
  33.     lea 8(a0),a0
  34.     cmp.l -8(a0),d0
  35.     bne.s search_cookie
  36.     cmp.l #F30_val,-4(a0)
  37.     beq.s found_cookie
  38. failure:
  39.     pea fail_text
  40.     move.w #9,-(sp)
  41.     trap #1
  42.     addq.l #6,sp
  43.         move.l oldstack,-(sp)
  44.     move.w #$20,-(sp)
  45.     trap #1
  46.     move.w #1,-(sp)
  47.     trap #1
  48.     addq.l #2,sp
  49.     clr.w -(sp)
  50.     trap #1
  51. found_cookie:
  52.     move.w #-1,-(sp)
  53.     move.w #88,-(sp)
  54.     trap #14
  55.     addq.l #4,sp
  56.     move.w d0,oldmode
  57.         move.w #2,-(sp)
  58.     trap #14
  59.     addq.l #2,sp
  60.     move.l d0,oldphys
  61.     move.w #3,-(sp)
  62.     trap #14
  63.     addq.l #2,sp
  64.     move.l d0,oldlog
  65.     move.w #89,-(sp)
  66.     trap #14
  67.     addq.l #2,sp
  68.     tst d0
  69.     beq.s failure
  70.     cmp.w #2,d0
  71.     beq.s vga_init
  72. rgb_init:
  73.     move.w #modeRGB,d0
  74.     bsr.s scr_allocate
  75.     move.w #modeRGB,d0
  76.     move.w #3,-(sp)
  77.     move.l screen1,-(sp)
  78.     move.l screen2,-(sp)
  79.     move.w #5,-(sp)
  80.     trap #14
  81.     lea 14(sp),sp
  82.     move.w #modergb,-(sp)
  83.     move.w #88,-(sp)
  84.     trap #14
  85.     addq.l #4,sp
  86.     move.w #199,y_max
  87.     bra go_on
  88. vga_init:
  89.     move.w #modevga,d0
  90.     bsr.s scr_allocate
  91.     move.w #modeVGA,-(sp)
  92.     move.w #3,-(sp)
  93.     move.l screen1,-(sp)
  94.     move.l screen2,-(sp)
  95.     move.w #5,-(sp)
  96.     trap #14
  97.     lea 14(sp),sp
  98.     move.w #239,y_max
  99.     bra go_on
  100. scr_allocate:
  101.     move.w d0,-(sp)
  102.     move.w #91,-(sp)
  103.     trap #14
  104.     addq.l #4,sp
  105.     move.l d0,d6
  106.     lsl.l #1,d0
  107.     add.l #1,d0
  108.     move.l d0,-(sp)
  109.     move.w #$48,-(sp)
  110.     trap #1
  111.     addq.l #6,sp
  112.     tst d0
  113.     beq failure
  114.     addq.l #1,d0
  115.     and.l #$fffffffe,d0
  116.     move.l d0,screen1
  117.     add.l d6,d0
  118.     move.l d0,screen2
  119.     rts
  120. quit:
  121.     pea mausan
  122.     clr.w -(sp)
  123.     move.w #$19,-(sp)
  124.     trap #14
  125.     addq.l #8,sp
  126.     pea oldcolor
  127.     move.w #1,-(sp)
  128.     clr.w -(sp)
  129.     move.w #93,-(sp)
  130.     trap #14
  131.     lea 10(sp),sp
  132.     move.w oldmode,-(sp)
  133.     move.w #3,-(sp)
  134.     move.l oldphys,-(sp)
  135.     move.l oldlog,-(sp)
  136.     move.w #5,-(sp)
  137.     trap #14
  138.     lea 14(sp),sp
  139.     move.w oldmode,-(sp)
  140.     move.w #88,-(sp)
  141.     trap #14
  142.     addq.l #4,sp
  143.     move.l oldstack,-(sp)
  144.     move.w #$20,-(sp)
  145.     trap #1
  146.     clr.w -(sp)
  147.     trap #1
  148. go_on:
  149.     pea oldcolor
  150.     move.w #1,-(sp)
  151.     clr.w -(sp)
  152.     move.w #94,-(sp)
  153.     trap #14
  154.     lea 10(sp),sp
  155.     pea newcolor
  156.     move.w #1,-(sp)
  157.     clr.w -(sp)
  158.     move.w #93,-(sp)
  159.     trap #14
  160.     lea 10(sp),sp
  161.     pea mausaus
  162.     clr.w -(sp)
  163.     move.w #$19,-(sp)
  164.     trap #14
  165.     addq.l #8,sp
  166.     bsr prepare_screens
  167.     bsr init_koords
  168. main_loop:
  169.     bsr clear_sprites
  170.     bsr calc_koords
  171.     bsr draw_sprites
  172.     move.w #$ff,-(sp)
  173.     move.w #6,-(sp)
  174.     trap #1
  175.     addq.l #4,sp
  176.     tst d0
  177.     bne quit
  178.     move.w #37,-(sp)
  179.     trap #14
  180.     addq.l #2,sp
  181.     move.l screen1,d0
  182.     move.l screen2,screen1
  183.     move.l d0,screen2
  184.     move.l sprbuff1,d0
  185.     move.l sprbuff2,sprbuff1
  186.     move.l d0,sprbuff2
  187.     move.w #-1,-(sp)
  188.     move.l screen1,-(sp)
  189.     move.l screen2,-(sp)
  190.     move.w #5,-(sp)
  191.     trap #14
  192.     lea 12(sp),sp
  193.     bra.s main_loop
  194. init_koords:
  195.     lea koordtab(pc),a6
  196.     move.w y_max,d6
  197.     sub #14,d6
  198.     move.w #anz_spr-1,d7
  199.     moveq #0,d5
  200. init_loop:
  201.     bsr.s random
  202.     move.b d0,d5
  203.     move.w d5,(a6)+
  204.     move.w #1,(a6)+
  205.     btst #0,d0
  206.     beq.s .right
  207.     move.w #-1,-2(a6)
  208. .right:
  209.     bsr.s random
  210.     move.b d0,d5
  211.     cmp.w d6,d5
  212.     ble.s .in_range
  213.     sub.w #70,d5
  214. .in_range:
  215.     move.w d5,(a6)+
  216.     move.w #1,(a6)+
  217.     btst #0,d0
  218.     beq.s .down
  219.     move.w #-1,-2(a6)
  220. .down:
  221.     dbra d7,init_loop
  222.     move.l #-1,buffer1
  223.     move.l #-1,buffer2
  224.     rts
  225. random:
  226.     move.w #$11,-(sp)
  227.     trap #14
  228.     addq.l #2,sp
  229.     rts
  230. calc_koords:
  231.     lea koordtab(pc),a0
  232.     move.w y_max,d4
  233.     sub #14,d4
  234.     move.w #anz_spr-1,d7
  235. .fly_loop:
  236.     movem.w (a0),d0-d3
  237.     tst d0
  238.     bne.s .mayberight
  239.     moveq #1,d1
  240.     bra.s .calc_x
  241. .mayberight:
  242.     cmp.w #320-15,d0
  243.     bne.s .calc_x
  244.     moveq #-1,d1
  245. .calc_x:
  246.     add d1,d0
  247.     tst d2
  248.     bne.s .maybeup
  249.     moveq #1,d3
  250.     bra.s .calc_y
  251. .maybeup:
  252.     cmp.w d4,d2
  253.     bne.s .calc_y
  254.     moveq #-1,d3
  255. .calc_y:
  256.     add d3,d2
  257.     movem.w d0-d3,(a0)
  258.     lea 8(a0),a0
  259.     dbra d7,.fly_loop
  260.     rts
  261. draw_sprites:
  262.     move.l sprbuff2(pc),a5
  263.     lea koordtab(pc),a4
  264.     move.w #anz_spr-1,d7
  265. .draw_loop:
  266.     move.w (a4),d0
  267.     ext.l d0
  268.     move.w 4(a4),d1
  269.     ext.l d1
  270.     addq #8,a4
  271.     mulu #640,d1 ; 68030 Befehl !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  272.     lsl d0
  273.     add.l d0,d1
  274.     move.l screen2(pc),a6
  275.     add.l d1,a6
  276.     move.l d1,(a5)+
  277.     lea spritegfx(pc),a3
  278.     move.w #15-1,d6
  279. .zeilenloop:
  280.     movem.l (a6),d0-d4/a0-a2
  281.     movem.l d0-d4/a0-a2,(a5)
  282.     lea 32(a5),a5
  283.     move.w #15-1,d5
  284. .pixelloop:
  285.     move.w (a3)+,d0
  286.     beq.s .transparent
  287.     move.w d0,(a6)
  288. .transparent:
  289.     addq #2,a6
  290.     dbra d5,.pixelloop
  291.     lea 640-30(a6),a6
  292.     dbra d6,.zeilenloop
  293.     dbra d7,.draw_loop
  294.     rts
  295. clear_sprites:
  296.     move.l sprbuff2(pc),a5
  297.     tst.l (a5)
  298.     bpl.s .yip_yip
  299.     rts
  300. .yip_yip:
  301.     move.l screen2(pc),a6
  302.     move.w #anz_spr-1,d7
  303.     move.w d7,d6
  304.     ext.l d6
  305.     mulu #484,d6 ; 68030, wenn mehr als 63 Sprites !!!!!!!!!!!!!!!!
  306.     add.l d6,a5
  307. .clear_loop:
  308.     move.l a6,a4
  309.     add.l (a5)+,a4
  310.     moveq #15-1,d6
  311. .zeilenloop:
  312.     movem.l (a5)+,d0-d5/a0-a1
  313.     movem.l d0-d5/a0-a1,(a4)
  314.     lea 640(a4),a4
  315.     dbra d6,.zeilenloop
  316.     lea -484*2(a5),a5
  317.     dbra d7,.clear_loop
  318.     rts
  319. prepare_screens:
  320.     move.l screen1(pc),a0
  321.     move.l screen2(pc),a1
  322.     move.w y_max,d7
  323. .zeilenloop:
  324.     move.w #5-1,d6
  325.     lea colcode(pc),a2
  326.     moveq #0,d0
  327. .balkenloop:
  328.     move.w (a2)+,d1
  329.     move.w #32-1,d5
  330. .lefthalf:
  331.     move.w d0,(a0)+
  332.     move.w d0,(a1)+
  333.     add.w d1,d0
  334.     dbra d5,.lefthalf
  335.     move.w #32-1,d5
  336. .righthalf:
  337.     sub.w d1,d0
  338.     move.w d0,(a0)+
  339.     move.w d0,(a1)+
  340.     dbra d5,.righthalf
  341.     dbra d6,.balkenloop
  342.     dbra d7,.zeilenloop
  343.     rts
  344.     data
  345. fail_text:
  346.     dc.b ' Sorry, your machine is not '
  347.     dc.b ' powerful enough to launch this',0
  348. mausaus: dc.b $12
  349. mausan: dc.b $08
  350.     even
  351. colcode: dc.w $41,$800,$40,1,$840
  352. newcolor: dc.l 0
  353. sprbuff1: dc.l buffer1
  354. sprbuff2: dc.l buffer2
  355. spritegfx:
  356.     dc.w $0000,$0000,$0000,$0000,$0000
  357.     dc.w $4208,$4208,$4208,$4208,$3186
  358.     dc.w $0000,$0000,$0000,$0000,$0000
  359.     dc.w $0000,$0000,$0000,$4208,$630c
  360.     dc.w $8410,$738e,$738e,$630c,$528a
  361.     dc.w $4208,$3186,$0000,$0000,$0000
  362.     dc.w $0000,$0000,$4208,$9492,$a514
  363.     dc.w $a514,$9492,$8410,$738e,$630c
  364.     dc.w $528a,$3186,$3186,$0000,$0000
  365.     dc.w $0000,$4208,$a514,$d69a,$e71c
  366.     dc.w $d69a,$b596,$a514,$8410,$738e
  367.     dc.w $630c,$4208,$3186,$3186,$0000
  368.     dc.w $0000,$8410,$c618,$e71c,$f79e
  369.     dc.w $e71c,$c618,$b596,$9492,$8410
  370.     dc.w $528a,$528a,$3186,$3186,$0000
  371.     dc.w $3186,$9492,$c618,$d69a,$e71c
  372.     dc.w $d69a,$d69a,$b596,$9492,$8410
  373.     dc.w $630c,$528a,$4208,$3186,$1082
  374.     dc.w $528a,$9492,$9492,$c618,$c618
  375.     dc.w $c618,$b596,$9492,$9492,$8410
  376.     dc.w $630c,$528a,$4208,$3186,$2104
  377.     dc.w $528a,$8410,$9492,$b596,$b596
  378.     dc.w $a514,$b596,$9492,$8410,$738e
  379.     dc.w $630c,$528a,$4208,$3186,$1082
  380.     dc.w $630c,$630c,$8410,$9492,$9492
  381.     dc.w $9492,$9492,$8410,$738e,$630c
  382.     dc.w $528a,$528a,$4208,$3186,$1082
  383.     dc.w $3186,$630c,$630c,$8410,$8410
  384.     dc.w $8410,$8410,$738e,$630c,$528a
  385.     dc.w $528a,$4208,$3186,$2104,$1082
  386.     dc.w $2104,$3186,$4208,$528a,$630c
  387.     dc.w $630c,$630c,$528a,$528a,$528a
  388.     dc.w $4208,$3186,$3186,$1082,$0000
  389.     dc.w $0000,$3186,$3186,$4208,$4208
  390.     dc.w $4208,$4208,$4208,$4208,$4208
  391.     dc.w $3186,$3186,$2104,$1082,$0000
  392.     dc.w $0000,$0000,$3186,$3186,$3186
  393.     dc.w $3186,$3186,$3186,$3186,$3186
  394.     dc.w $3186,$2104,$1082,$0000,$0000
  395.     dc.w $0000,$0000,$0000,$2104,$2104
  396.     dc.w $2104,$2104,$2104,$2104,$2104
  397.     dc.w $1082,$1082,$0000,$0000,$0000
  398.     dc.w $0000,$0000,$0000,$0000,$0000
  399.     dc.w $1082,$1082,$1082,$1082,$1082
  400.     dc.w $0000,$0000,$0000,$0000,$0000
  401.     bss
  402. oldstack: 
  403.          ds.l 1
  404. oldmode: 
  405.          ds.w 1
  406. oldphys: 
  407.          ds.l 1
  408. oldlog: 
  409.          ds.l 1
  410. oldcolor: 
  411.          ds.l 1
  412. screen1: 
  413.          ds.l 1
  414. screen2: 
  415.          ds.l 1
  416. y_max: 
  417.          ds.w 1
  418. koordtab: 
  419.          ds.w 4*anz_spr
  420. buffer1: 
  421.          ds.w (16*15+2)*anz_spr
  422. buffer2: 
  423.          ds.w (16*15+2)*anz_spr
  424.      ds.l 300
  425. newstack: 
  426.          ds.l 1
  427.  
  428.