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_SIZE_NORMAL%00000000player widths
PMG_SIZE_x2%00000001
PMG_SIZE_x4%00000011
PMG_MSIZE0_x2%00000001missile widths
PMG_MSIZE0_x4%00000011
PMG_MSIZE1_x2%00000100
PMG_MSIZE1_x4%00001100
PMG_MSIZE2_x2%00010000
PMG_MSIZE2_x4%00110000
PMG_MSIZE3_x2%01000000
PMG_MSIZE4_x4%11000000
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_screen_disabled0
PMG_sdmctl_screen_narrow1
PMG_sdmctl_screen_normal%10
PMG_sdmctl_screen_wide%11
PMG_sdmctl_defaultPMG_sdmctl_DMA_both or PMG_sdmctl_screen_normal
PMG_collision_player_to_p01Player overlaps Player0
PMG_collision_player_to_p12Player overlaps Player1
PMG_collision_player_to_p24Player overlaps Player2
PMG_collision_player_to_p38Player overlaps Player3
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_pcolr$D012array [0..3] of byte
PMG_pcolr0_S$2C0bytePlayer colors - shadow registers.
PMG_pcolr1_S$2C1byte
PMG_pcolr2_S$2C2byte
PMG_pcolr3_S$2C3byte
PMG_pcolr_S$2C0array [0..3] of byte
PMG_hpos0$D000byteHorizontal positions of players.
PMG_hpos1$D001byte
PMG_hpos2$D002byte
PMG_hpos3$D003byte
PMG_hpos$D000array [0..3] of byte
PMG_hposm0$D004byteHorizontal positions of missiles.
PMG_hposm1$D005byte
PMG_hposm2$D006byte
PMG_hposm3$D007byte
PMG_hposm$D004array [0..3] of byte
PMG_sizep0$D008byteSize of players.
PMG_sizep1$D009byte
PMG_sizep2$D00Abyte
PMG_sizep3$D00Bbyte
PMG_sizep$D008array [0..3] of byte
PMG_sizem$D00CbyteSize of missiles
PMG_grafp0$D00DbytePlayers graphics shapes (non DMA).
PMG_grafp1$D00Ebyte
PMG_grafp2$D00Fbyte
PMG_grafp3$D010byte
PMG_grafp$D00Darray [0..3] of byte
PMG_grafm$D011byteMissile graphics shapes (non DMA).
PMG_p0pl$D00CbytePlayer to player collison statuses.
PMG_p1pl$D00Dbyte
PMG_p2pl$D00Ebyte
PMG_p3pl$D00Fbyte
PMG_ppl$D00Carray [0..3] of byte
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.
    PMG_Disable

    procedure PMG_Disable;


    Turns off PMG