Jump to content
IGNORED

GTIA mode animation?


Big_Mo

Recommended Posts

APAC is not owned by anyone, its a machine language trick that alternates between 2 GTIA modes, 9 & 11, (+64, +192 on the prior register.) It can be done in combination with Antic Modes 2,3, or 15, a character mapped, or bit mapped screen. Character Mapped lines, you need to do a WSYNC for each line before storing a new PRIOR register value and therefore probably eat up more CPU time. Bit Mapped mode can just set the DLI bit on each line and toggle between the two Prior restister values.

 

I have been considering the mode for simple puzzle like games such as Tetris, or Puzzler (COMPUTE! magazine basic program) to where a few things have to move at a time. To do more complicated stuff, the whole program probably needs to be ML driven.

Link to comment
Share on other sites

APAC is not owned by anyone, its a machine language trick that alternates between 2 GTIA modes, 9 & 11, (+64, +192 on the prior register.) It can be done in combination with Antic Modes 2,3, or 15, a character mapped, or bit mapped screen. Character Mapped lines, you need to do a WSYNC for each line before storing a new PRIOR register value and therefore probably eat up more CPU time. Bit Mapped mode can just set the DLI bit on each line and toggle between the two Prior restister values.

 

I have been considering the mode for simple puzzle like games such as Tetris, or Puzzler (COMPUTE! magazine basic program) to where a few things have to move at a time. To do more complicated stuff, the whole program probably needs to be ML driven.

I have seen that more you write to WSYNC register, the more it throws off the audio quality. In my application, the audio is almost always playing. Probably need to invent a new mode using temporal dithering with a VBI or DLI that does not require a WSYNC write, or factor out the WSYNC by simulating a DLI using POKEY IRQ timer #2 as I did before for some application:

 

;*** Test timer accuracy on Atari 400/800 by Krishna Software Inc. without using DLIs.

TIMERFREQLSB = 53760

TIMERFREQMSB = 53762

WSYNC = 54282

VCOUNT = 54283

 

DOSVEC = 10

CASINI = 2

WARMSTART = 58484

VMIRQ = 534 ;hardware irq ptr

 

ORG = 600h

;DW 0FFFFh

;DW StartAdr

;DW LastOffset-1

DB 0,3 ;# of sectors to load 1..255

DW ORG

DW StartAdr

Rts

StartAdr: Lda #MyReset,L

Sta CASINI

Lda #MyReset,H

Sta CASINI+1

Lda #0

Sta 580

Lda #2

Sta 9

Jmp WARMSTART

MyReset: Lda #2

Sta 9

Lda #MyReset,L

Sta CASINI

Lda #MyReset,H

Sta CASINI+1

Sei

Lda #0 ;no VBIs nor DLIs for maximum performance

Sta 54286

Sta 53774 ;disable all IRQs

Sta 54272 ;turn off screen

Lda #TimerTwoIRQ,L ;general IRQ routine but we use only for timer #2

Sta VMIRQ

Lda #TimerTwoIRQ,H

Sta VMIRQ+1

Lda #80 ;40 for join channels 3,4; +80 for channels 1+2 @1.79Mhz

Sta 53768 ;join channels at 1.79 Mhz

Lda #165 ;lsb 165

Sta 53760 ;timer #2 freq = 1789790/[A+1]

Lda #116 ;msb for rate divisor A

Sta 53762

Lda #2 ;2=timer interrupt

Sta 53774 ;enable IRQ #2

NotMidScreen: Lda VCOUNT

Cmp #65

Bne NotMidScreen

Sta WSYNC

Sta 53769 ;start timer counter

CLI

Lda #34

Sta 54272

IdleLoop: ;put your code here

Jmp IdleLoop

 

TimerTwoIRQ: Pha

Lda #255

Sta 53272 ;change register (like color for example)

Lda #0

Sta 53774

Lda #2

Sta 53774 ;send ack to timer irq

Nop

Nop

Lda #96

Sta 53272 ;change register (like color for example)

Pla

Rti

 

;LastOffset: DW 2e0h,2e1h,ORG

Link to comment
Share on other sites

Rybag's...I read in some Atari book somewhere that the maximum amount you can hardware scroll (before you have to reset the H/Vscroll locations and also point LMS to a new section of memory, is 8 pixels or poking the H/Vscroll locations with a value betw. 0-8

 

Does your idea mean that other values within H/V scroll locations do other things

Link to comment
Share on other sites

Rybag's...I read in some Atari book somewhere that the maximum amount you can hardware scroll (before you have to reset the H/Vscroll locations and also point LMS to a new section of memory, is 8 pixels or poking the H/Vscroll locations with a value betw. 0-8

 

Does your idea mean that other values within H/V scroll locations do other things

 

VScroll and HScroll are 4-bit registers so you can scroll upto 15 pixels (0-15) without need to change LMS.

Link to comment
Share on other sites

H/VSCROLL can be triggered 0-$0f without any issues.

 

but while I am on C64 right now and they play around with $d011 it reminds me...do we ever played around in triggering ANTIC/GTIA on special screenpositions to get new suprises?

 

I can only remember 2 things which I would count in this category:

 

- "3 graphics mode" per scanline

- mode9++

Link to comment
Share on other sites

I've played with changing HSCROL mid-scanline. The results at times are weird and hard to document.

 

Whether they would be of any use for anything is doubtful.

With vertical tricks - well, I believe you can play with DMACTL and get Antic to do funny stuff like: redisplay a character line without the screen DMA (but still reads chr data).

 

In fact, if you read the docs - Antic has a register, not directly accessible to tell it what mode to generate. You can have a single-line display list, and if you just turn off Display List DMA, it'll repeat the same graphics mode for the entire screen (incrementing it's memory scan in the normal fashion).

 

 

Carmel: HSCROL can shift along by 15 colour clocks, which equates to moving 4 full GR. 0 character cells, before a memory move or LMS change is needed.

 

The "HDELAY" thing I wished for before would be so we could shift pixels in GTIA mode. Putting the register on GTIA would have probably been the easy way to go about it.

Link to comment
Share on other sites

I don't think there's any official stuff I've seen with timings relating to internal workings. Only stuff like bus interface etc which isn't really relevant to programming.

 

There's the huge DMA chart that someone here did, showing Antic's bus access in different modes with various HSCROL values.

Link to comment
Share on other sites

I'm no programmer...

I thought the way to do the animation is to use a redefined character set, that appears to be graphics mode 9 or 10.

I'm only aware of the programs, etc that were present till around 1989, and not after this date.

There was that helicopter taking off animation using ATASCII characters - using simple BASIC - that could be redone with a Gr.9 or 10 character set?

 

Could you redo other demos? Changing their graphics mode too? To be even more spectacular?

 

Harvey

Link to comment
Share on other sites

  • 3 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...