Jump to content

Photo

Laser Demo dissasembly

atari assembler 8bit programming dissasembly demo code

8 replies to this topic

#1 Estece OFFLINE  

Estece

    Space Invader

  • 11 posts

Posted Wed Sep 27, 2017 4:21 PM

I always wanted to know how software sprites worked in this demo.

Here it is a dis6502 2.2.2015-04-06 zipped workspace of laser demo.

I don't think i will be working on disassembling it anymore.

Maybe someone will use it for something else.

 

Attached Files



#2 shanti77 OFFLINE  

shanti77

    Chopper Commander

  • 146 posts
  • Location:Poland

Posted Wed Sep 27, 2017 11:15 PM

thx


Edited by shanti77, Wed Sep 27, 2017 11:18 PM.


#3 Estece OFFLINE  

Estece

    Space Invader

  • Topic Starter
  • 11 posts

Posted Mon Oct 30, 2017 7:57 AM

Can You write how Your bosconian sprite engine works and if yes then please, post a wall of text?



#4 shanti77 OFFLINE  

shanti77

    Chopper Commander

  • 146 posts
  • Location:Poland

Posted Mon Oct 30, 2017 11:28 AM

Every sprite use from 4 to 9 chars. I draw one sprite in one  big loop:

 

In 128K version:

lda background_char,y
and mask,y
ora shape,y
sta sprite_char,y    ;4 color sprites

Shape takes 4chars*8bytes*16phases+ 3shifts*6chars*8bytes*16phases=512+3*768=2816bytes

Mask takes the same 2816bytes

5 enemy shapes + explosion shape (only 3 phases) (2*5*2816+2*528=29216)

 

------

 

Version 64K use forbidden instruction "LAX":

lax shape,y
and background_char,y
ora oratab[1-3],x    ;3 different tabs , I can change one color in sprite(2 colors) or print normal(3 colors) sprite
sta sprite_char,y

Only 3 shapes + explosion shape (3 phases) (3*2816+528=8976)

3 oraTab 768bytes



#5 MrFish OFFLINE  

MrFish

    River Patroller

  • 4,773 posts
  • Location:1010-1010

Posted Mon Oct 30, 2017 1:17 PM

Version 64K use forbidden instruction "LAX":

 

I like that term for it... "forbidden"...



#6 shanti77 OFFLINE  

shanti77

    Chopper Commander

  • 146 posts
  • Location:Poland

Posted Mon Oct 30, 2017 1:24 PM

:) Illegal, undocumented, unofficial, but stable on "real" Atari.



#7 Estece OFFLINE  

Estece

    Space Invader

  • Topic Starter
  • 11 posts

Posted Mon Oct 30, 2017 5:12 PM

Dziękuje Shanti77 ;)

Can You describe it little more ?

How a one frame looks like in the code and what display list and interrupts bosconian use ?

Do You use double buffer for screen display in mode 4?

Great that You use powerful instructions on 65 XE! That is the only way to use that hardware to the maximum. 

Mr.Fish and others ,please don't derail this topic.This forum is like junkyard with trash here and there that is not on topic and nobody cares to clean that up.

I like good work that Shanti77 do and want a detailed and technical info on software sprites in practical and good software on real hardware :)



#8 dmsc OFFLINE  

dmsc

    Moonsweeper

  • 364 posts
  • Location:Viņa del Mar, Chile

Posted Mon Oct 30, 2017 8:47 PM

Hi!
 

Version 64K use forbidden instruction "LAX":

lax shape,y
and background_char,y
ora oratab[1-3],x    ;3 different tabs , I can change one color in sprite(2 colors) or print normal(3 colors) sprite
sta sprite_char,y
Only 3 shapes + explosion shape (3 phases) (3*2816+528=8976)
3 oraTab 768bytes


Clever.

So, only limitation is you can use only 3 colors in the sprites, but changing "oratab" table you can select any three colors.

To select the shift, do you modify the "shape" pointer in place, or have different loops?

#9 shanti77 OFFLINE  

shanti77

    Chopper Commander

  • 146 posts
  • Location:Poland

Posted Tue Oct 31, 2017 12:48 AM

@dmsc 4 procedures:

DX==0,DY=0
chars:
13
24

dx>0,DY=0
135
246

DX=0,DY>0 (2 loops)
14
25
36

DX>0,DY>0 (2 loops)
147
258
369

@Estece

I use double buffer, clear frame, draw all objects (starts,rocket,bases,mines,metors,explosions,etc), at last I draw sprites . After I draw frame I check collisions. Ship shoots are draw 2x for frame (1/50 or 1/60).

 

One DLI interrupt run POKEY interrupt (64Khz), last intterupt switch off POKEY interrupt, I change vector and AUDF value every IRQ.

DLIST is very simple:

Blank_lines+DLI
$04+LMS+VSCROL+HSCROL,SCREEN_ADR
$04+VSCROL+HSCROL
.
.
.
$04
jvb dlist






Also tagged with one or more of these keywords: atari, assembler, 8bit, programming, dissasembly, demo, code

0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users