284 lines
14 KiB
ArmAsm
284 lines
14 KiB
ArmAsm
;-----------------------------------------------------------------------------
|
|
; defs.inc
|
|
; Part of manic miner, the zx spectrum game, made for Apple II
|
|
;
|
|
; Stefan Wessels, 2020
|
|
; This is free and unencumbered software released into the public domain.
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; These from apple2.inc for use with ca65
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; Zero page
|
|
|
|
WNDLFT gequ $20 ; Text window left
|
|
WNDWDTH gequ $21 ; Text window width
|
|
WNDTOP gequ $22 ; Text window top
|
|
WNDBTM gequ $23 ; Text window bottom+1
|
|
CH gequ $24 ; Cursor horizontal position
|
|
CV gequ $25 ; Cursor vertical position
|
|
BASL gequ $28 ; Text base address low
|
|
BASH gequ $29 ; Text base address high
|
|
INVFLG gequ $32 ; Normal/inverse(/flash)
|
|
PROMPT gequ $33 ; Used by GETLN
|
|
RNDL gequ $4E ; Random counter low
|
|
RNDH gequ $4F ; Random counter high
|
|
HIMEM gequ $73 ; Highest available memory address+1
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; Vectors
|
|
|
|
DOSWARM gequ $03D0 ; DOS warmstart vector
|
|
BRKVec gequ $03F0 ; Break vector
|
|
SOFTEV gequ $03F2 ; Vector for warm start
|
|
PWREDUP gequ $03F4 ; This must be = EOR #$A5 of SOFTEV+1
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; Hardware
|
|
|
|
; Keyboard input
|
|
KBD gequ $C000 ; Read keyboard
|
|
KBDSTRB gequ $C010 ; Clear keyboard strobe
|
|
|
|
; 80 column video
|
|
CLR80COL gequ $C000 ; Disable 80 column store
|
|
SET80COL gequ $C001 ; Enable 80 column store
|
|
RD80COL gequ $C018 ; >127 if 80 column store enabled
|
|
RD80VID gequ $C01F ; >127 if 80 column video enabled
|
|
|
|
; Character set
|
|
CLRALTCHAR gequ $C00E ; Normal Apple II char set
|
|
SETALTCHAR gequ $C00F ; Norm/inv LC, no flash
|
|
ALTCHARSET gequ $C01E ; >127 if alt charset switched in
|
|
|
|
; Language card
|
|
RDLCBNK2 gequ $C011 ; >127 if LC bank 2 in use
|
|
RDLCRAM gequ $C012 ; >127 if LC is read enabled
|
|
ROMIN gequ $C081 ; Swap in D000-FFFF ROM
|
|
LCBANK2 gequ $C083 ; Swap in LC bank 2
|
|
LCBANK1 gequ $C08B ; Swap in LC bank 1
|
|
|
|
; Vertical blanking
|
|
RDVBLBAR gequ $C019 ; >127 if not vertical blanking
|
|
RDVBLMSK gequ $C041 ; >127 if VBL interrupts enabled
|
|
DISVBL gequ $C05A ; Disable VBL interrupts
|
|
ENVBL gequ $C05B ; Enable VBL interrupts
|
|
|
|
; Video mode
|
|
TXTCLR gequ $C050 ; Display graphics
|
|
TXTSET gequ $C051 ; Display text
|
|
MIXCLR gequ $C052 ; Disable 4 lines of text
|
|
MIXSET gequ $C053 ; Enable 4 lines of text
|
|
LOWSCR gequ $C054 ; Page 1
|
|
HISCR gequ $C055 ; Page 2
|
|
LORES gequ $C056 ; Lores graphics
|
|
HIRES gequ $C057 ; Hires graphics
|
|
DHIRESON gequ $C05E ; Enable double-width graphics
|
|
DHIRESOFF gequ $C05F ; Disable double-width graphics
|
|
|
|
; Game controller
|
|
TAPEIN gequ $C060 ; Read casette input / Switch input 3
|
|
BUTN0 gequ $C061 ; Switch input 0 / Open-Apple key
|
|
BUTN1 gequ $C062 ; Switch input 1 / Closed-Apple key
|
|
BUTN2 gequ $C063 ; Switch input 2 / Shift key
|
|
PADDL0 gequ $C064 ; Analog input 0
|
|
PADDL1 gequ $C065 ; Analog input 1
|
|
PADDL2 gequ $C066 ; Analog input 2
|
|
PADDL3 gequ $C067 ; Analog input 3
|
|
PTRIG gequ $C070 ; Analog input reset
|
|
|
|
; Input/Output Unit
|
|
IOUDISON gequ $C07E ; Disable IOU
|
|
IOUDISOFF gequ $C07F ; Enable IOU
|
|
|
|
; Control Your Apple
|
|
CYAREG gequ $C036 ; Bits 0-3=disk detect 4=shadow all banks 7=fast
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; These are for mminer-apple2
|
|
|
|
;-----------------------------------------------------------------------------
|
|
HGRPage1 gequ $2000
|
|
HGRPage2 gequ $4000
|
|
MLI gequ $BF00
|
|
SPEAKER gequ $C030
|
|
PLACEHOLDER gequ $FFFF
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; Cheat Key (binary 0-19 reverse) 12345
|
|
LEVEL_Central_Cavern gequ 0 ; 00000
|
|
LEVEL_The_Cold_Room gequ 1 ; 10000
|
|
LEVEL_The_Menagerie gequ 2 ; 01000
|
|
LEVEL_Abandoned_Uranium_Workings gequ 3 ; 11000
|
|
LEVEL_Eugenes_Lair gequ 4 ; 00100
|
|
LEVEL_Processing_Plant gequ 5 ; 10100
|
|
LEVEL_The_Vat gequ 6 ; 01100
|
|
LEVEL_Miner_Willy_meets_the_Kong gequ 7 ; 11100
|
|
LEVEL_Wacky_Amoebatrons gequ 8 ; 00010
|
|
LEVEL_The_Endorian_Forest gequ 9 ; 10010
|
|
LEVEL_Attack_of_the_Mutant_Telephones gequ 10 ; 01010
|
|
LEVEL_Return_of_the_Alien_Kong_Beast gequ 11 ; 11010
|
|
LEVEL_Ore_Refinery gequ 12 ; 00110
|
|
LEVEL_Skylab_Landing_Bay gequ 13 ; 10110
|
|
LEVEL_The_Bank gequ 14 ; 01110
|
|
LEVEL_The_Sixteenth_Cavern gequ 15 ; 11110
|
|
LEVEL_The_Warehouse gequ 16 ; 00001
|
|
LEVEL_Amoebatrons_Revenge gequ 17 ; 10001
|
|
LEVEL_Solar_Power_Generator gequ 18 ; 01001
|
|
LEVEL_The_Final_Barrier gequ 19 ; 11001
|
|
LEVEL_Game_Over gequ 20
|
|
|
|
;-----------------------------------------------------------------------------
|
|
DATA_BLANK gequ $00
|
|
DATA_FLOOR1 gequ $10
|
|
DATA_FLOOR2 gequ $20
|
|
DATA_CONVEYOR gequ $30
|
|
DATA_WALL gequ $40
|
|
DATA_BUSH gequ $50
|
|
DATA_ROCK gequ $60
|
|
DATA_COLLAPSE gequ $70
|
|
DATA_KEY gequ $80
|
|
DATA_SWITCH1 gequ $90
|
|
DATA_SWITCH1_OPEN gequ $A0
|
|
DATA_SWITCH2 gequ $B0
|
|
DATA_SWITCH2_OPEN gequ $C0
|
|
DATA_DOOR gequ $D0
|
|
|
|
;-----------------------------------------------------------------------------
|
|
START_LIVES gequ 2
|
|
MAX_LIVES gequ 5
|
|
|
|
PLAY_ROWS gequ 16
|
|
PLAY_COLS gequ 32
|
|
VISIBLE_COLS gequ 20
|
|
|
|
TILES_PER_LEVEL gequ 8
|
|
TILE_BYTES gequ 16
|
|
CONVEYOR_FRAMES gequ 7
|
|
KEYS_FRAMES gequ 4
|
|
|
|
MAX_SPRITES gequ 10
|
|
SPRITE_BYTES gequ 64
|
|
MAX_SPRITE_IFRAMES gequ 36
|
|
|
|
AIR_STR_LEN gequ 5
|
|
AIR_SPEED gequ 14
|
|
|
|
DEMO_TIMER_DURATION gequ 2
|
|
DEMO_TIMER_INITAL gequ 18
|
|
|
|
;-----------------------------------------------------------------------------
|
|
zero_base gequ $50
|
|
currPageH gequ $50 ; $02 or $04 - Hi for screen buffer to draw t0
|
|
backPage gequ $51 ; 0 or 1 - just used to toggle HISCR or LOSCR
|
|
monochrome gequ $52 ; 0 for color, 1 for black and white
|
|
leftEdge gequ $53 ; distance the screen has scrolled to the right
|
|
cameraMode gequ $54
|
|
tilesRendered gequ $55 ; count the number of tiles shown in a screen. Used to time music delay
|
|
willyXPos gequ $56 ; column for willy
|
|
willyYPos gequ $57 ; pixel-row for willy
|
|
willyYRow gequ $58 ; row (YPos / 8) for willy
|
|
willyFrame gequ $59 ; willy animation frame
|
|
willyDir gequ $5A ; direction willy is facing
|
|
willyJumpCounter gequ $5B ; what phase of a jump willy is in
|
|
willyFallFromJump gequ $5C ; 0 or 1. 1 when willy starts jumping. Affects falling death
|
|
numSprites gequ $5D ; how many sprites (excl. willy) to draw in a level (door is last)
|
|
spriteXPos gequ $5E ; MAX_SPRITES col position of the sprite
|
|
spriteYPos gequ $68 ; MAX_SPRITES pixel row
|
|
spriteDir gequ $72 ; MAX_SPRITES facing direction
|
|
spriteMin gequ $7C ; MAX_SPRITES min (turn/hold) point for path
|
|
spriteMax gequ $86 ; MAX_SPRITES max point for path
|
|
spriteSpeed gequ $90 ; MAX_SPRITES speed (frames/pixels) to move the sprite
|
|
spriteTick gequ $9A ; MAX_SPRITES counter how often a sprite animates (spritespeed as init)
|
|
spriteFramesIdx gequ $A4 ; MAX_SPRITES Index into
|
|
spriteFrame gequ $AE ; MAX_SPRITES which frame the sprite is on
|
|
spriteClass gequ $B8 ; MAX_SPRITES see CLASS_* in defs.inc for masks
|
|
spriteColor gequ $C2 ; MAX_SPRITES index into masks<Left|Right> in rosystem.inc
|
|
movementMask gequ $CC ; movement that happened in willyMove. See MASK_* in defs.inc
|
|
userKeyMask gequ $CD ; user desire to move based on keys pressed. See MASK_* in defs.inc
|
|
conveyorMask gequ $CE ; 0, willy not on conveyor, 2 for left, 1 for right
|
|
currLevel gequ $CF ; level that's active
|
|
lives gequ $D0 ; lives in reserve
|
|
airCols gequ $D1 ; screen columns that have an air bar in them
|
|
airTipGfx gequ $D2 ; the bit pattern for the tip of the air bar
|
|
airFlow gequ $D3 ; the "tick" till a unit of air is decreased
|
|
livesFrame gequ $D4 ; anim frame for the walking willy's at the bottom
|
|
keysFrameNum gequ $D5 ; animation frame for keys in the level (color)
|
|
conveyorFrameNum gequ $D6 ; animation frame for conveyor tile to be active
|
|
keysToCollect gequ $D7 ; number of keys that remain to be collected
|
|
eventState gequ $D8 ; see EVENT_* in defs.inc for bitmask values
|
|
updateUICount gequ $D9 ; updateUI is called when non-zero
|
|
uiComponent gequ $DA ; See UI_COMPONENT_* in defs.inc for mask values. What UI to update
|
|
fullScreenClearCount gequ $DB ; 0 - clear only top, non-zero all. Is counted down by gameAI
|
|
musicL gequ $DC ; pointer or index for playing music
|
|
musicH gequ $DD ; hi pointer for playing UI music
|
|
audioMask gequ $DE ; see AUDIO_* in defs.inc
|
|
demoMode gequ $DF ; 0 - not a demo, 1 when demo mode active
|
|
demoTimer gequ $E0 ; in demo mode, scroll when counter is 0
|
|
demoDirection gequ $E1 ; direction the demo scroll will move the screen
|
|
cheatIndex gequ $E2 ; count cheat code entry or when active, if 6 is down
|
|
cheatActive gequ $E3 ; non-zero when the cheat was successfully entered
|
|
srcPtrL gequ $E4 ; often a pointer Lo
|
|
srcPtrH gequ $E5 ; often a pointer Hi
|
|
dstPtrL gequ $E6 ; often a pointer Lo
|
|
dstPtrH gequ $E7 ; often a pointer Hi
|
|
sizeL gequ $E8 ; sometimes a size used in ptr operations
|
|
sizeH gequ $E9 ; sometimes a size used in ptr operations
|
|
tmpBot gequ $EA ; start of block of 7 zp values used randomly
|
|
bitMasks gequ $F1 ; constant - used mostly for bit instruction (see below)
|
|
bit0Mask gequ $F1 ; 1
|
|
bit1Mask gequ $F2 ; 2
|
|
bit2Mask gequ $F3 ; 4
|
|
bit3Mask gequ $F4 ; 8
|
|
bit4Mask gequ $F5 ; 16
|
|
bit5Mask gequ $F6 ; 32
|
|
bit6Mask gequ $F7 ; 64
|
|
bit7Mask gequ $F8 ; 128
|
|
|
|
CLASS_MOVE_Y gequ bit0Mask
|
|
CLASS_FOUR_FRAME gequ bit1Mask
|
|
CLASS_UNUSED gequ bit2Mask
|
|
CLASS_HOLDATEND gequ bit3Mask
|
|
CLASS_EUGENE gequ bit4Mask
|
|
CLASS_KONG gequ bit5Mask
|
|
CLASS_SKYLAB gequ bit6Mask
|
|
CLASS_DOOR gequ bit7Mask
|
|
|
|
;-----------------------------------------------------------------------------
|
|
CAMERA_MODE_3_ZONE gequ 0
|
|
CAMERA_MODE_SCROLL gequ 1
|
|
|
|
;-----------------------------------------------------------------------------
|
|
EVENT_OK gequ 0
|
|
EVENT_DIED gequ 1
|
|
EVENT_LEVEL_RESTART gequ 2
|
|
EVENT_NEXT_LEVEL gequ 4
|
|
EVENT_EXIT_GAME gequ 8
|
|
EVENT_CHEAT_JUMP gequ 16
|
|
|
|
;-----------------------------------------------------------------------------
|
|
UI_COMPONENT_NAME gequ 1
|
|
UI_COMPONENT_AIR_NAME gequ 2
|
|
UI_COMPONENT_AIR gequ 4
|
|
UI_COMPONENT_SCORE_NAME gequ 8
|
|
UI_COMPONENT_SCORE gequ 16
|
|
UI_COMPONENT_LIVES gequ 32
|
|
UI_COMPONENT_HIGHSCORE gequ 64
|
|
|
|
;-----------------------------------------------------------------------------
|
|
MASK_RIGHT gequ 1
|
|
MASK_LEFT gequ 2
|
|
MASK_AIR gequ 4
|
|
|
|
;-----------------------------------------------------------------------------
|
|
AUDIO_MUSIC gequ $80
|
|
AUDIO_SOUND gequ $40
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|