unit b_pmg

Player and missile graphics library.

author: bocianu bocianu@gmail.com


Set of useful constants, registers and methods to fiddle with hardware Atari 8-bit sprites (and missiles).
This library is a part of 'blibs' - set of custom Mad-Pascal libraries.
https://gitlab.com/bocianu/blibs

Constants:

name:value:description:
PMG_vdelay_m0%00000001Vertical delay patterns
PMG_vdelay_m1%00000010
PMG_vdelay_m2%00000100
PMG_vdelay_m3%00001000
PMG_vdelay_p0%00010000
PMG_vdelay_p1%00100000
PMG_vdelay_p2%01000000
PMG_vdelay_p3%10000000
PMG_gractl_missiles%00000001Turns on missiles
PMG_gractl_players%00000010Turns on players
PMG_gractl_latch%00000100
PMG_gractl_defaultPMG_gractl_missiles or PMG_gractl_players
PMG_sdmctl_DMA_missile%00000100Enable missiles DMA
PMG_sdmctl_DMA_player%00001000Enable players DMA
PMG_sdmctl_DMA_both%00001100
PMG_sdmctl_oneline%00010000Set one line resolution
PMG_sdmctl_defaultPMG_sdmctl_DMA_both
PMG_5player%00010000Turn on 5th player
PMG_overlap%00100000Additional color on players overlap

Register Variables:

name:address:type:description:
PMG_sdmctl$D400byteDirect Memory Access (DMA) enable flag.
PMG_sdmctl_S$22FbyteDirect Memory Access (DMA) enable flag - shadow register.
PMG_gprior$D01BbytePriority selection register.
PMG_gprior_S$26FbytePriority selection register - shadow register.
PMG_pcolr0$D012bytePlayer colors.
PMG_pcolr1$D013byte
PMG_pcolr2$D014byte
PMG_pcolr3$D015byte
PMG_pcolr0_S$2C0bytePlayer colors - shadow registers.
PMG_pcolr1_S$2C1byte
PMG_pcolr2_S$2C2byte
PMG_pcolr3_S$2C3byte
PMG_hpos0$D000byteHorizontal positions of players.
PMG_hpos1$D001byte
PMG_hpos2$D002byte
PMG_hpos3$D003byte
PMG_hposm0$D004byteHorizontal positions of missiles.
PMG_hposm1$D005byte
PMG_hposm2$D006byte
PMG_hposm3$D007byte
PMG_sizep0$D008byteSize of players.
PMG_sizep1$D009byte
PMG_sizep2$D00Abyte
PMG_sizep3$D00Bbyte
PMG_sizem$D00CbyteSize of missiles
PMG_grafp0$D00DbytePlayers graphics shapes (non DMA).
PMG_grafp1$D00Ebyte
PMG_grafp2$D00Fbyte
PMG_grafp3$D010byte
PMG_grafm$D011byteMissile graphics shapes (non DMA).
PMG_p0pl$D00CbytePlayer to player collison statuses.
PMG_p1pl$D00Dbyte
PMG_p2pl$D00Ebyte
PMG_p3pl$D00Fbyte
PMG_vdelay$D01CbyteVertical delay register.
PMG_gractl$D01DbyteGraphics Control register. Controls receipt of Player/Missile DMA data
PMG_hitclr$D01EbyteClear Collisions
PMG_pmbase$D407byteUpper byte of the player/missile base address

Global Variables:

name:type:description:
PMG_onelinebooleancontains true if current mode uses single line resolution. contains false for double line resolution
PMG_basepointercontains base address
PMG_sizewordcontains memory size used by PMG

Interface:

name:description:
PMG_Init

procedure PMG_Init(base: byte); overload;


Initializes PMG engine with default settings.
    parameters:
  • base - upper byte of PMG memory address
PMG_Init

procedure PMG_Init(base, sdmctl: byte); overload;


Initializes PMG engine with custom sdmctl value.
    parameters:
  • base - upper byte of PMG memory address
  • sdmctl - SDMCTL register initial value
PMG_Init

procedure PMG_Init(base, sdmctl, gractl: byte); overload;


Initializes PMG engine with custom sdmctl and gractl values.
    parameters:
  • base - upper byte of PMG memory address
  • sdmctl - SDMCTL register initial value
  • gractl - GRACTL register initial value
PMG_Clear

procedure PMG_Clear;


Clears memory of sprites and missiles filling it with zeroes.