;; Zero Page

;; LZSA addresses
NIBCOUNT	= $00

APPLEII_MODEL	= $01

VGI_BUFFER	= $02
VGI_TYPE	= $02
P0		= $03
P1		= $04
P2		= $05
P3		= $06
P4		= $07
P5		= $08
VGIL		= $09
VGIH		= $0A
UPDATE_POINTER	= $0B

TEMP0		= $10
TEMP1		= $11
TEMP2		= $12
TEMP3		= $13
TEMP4		= $14
TEMP5		= $15

LAST_KEY	= $16

SPEECH_PTRL    = $17
SPEECH_PTRH    = $18

HGR_SHAPE	= $1A	; also used in BKGND0
HGR_SHAPE2	= $1B
HGR_BITS	= $1C

;; Zero page monitor routines addresses

WNDLFT		= $20
WNDWDTH		= $21
WNDTOP		= $22
WNDBTM		= $23
CH		= $24
CV		= $25
GBASL		= $26
GBASH		= $27
BASL		= $28
BASH		= $29
H2		= $2C
X_LEFT		= $2C		; ???
V2		= $2D
MASK		= $2E
COLOR_MASK	= $2F
COLOR		= $30


SEEDL		= $4e
SEEDH		= $4f
XMAX		= $50

; MIST zero page addresses

FRAMEL			= $60
FRAMEH			= $61
CURSOR_X		= $62
CURSOR_Y		= $63
XPOS			= $64
YPOS			= $65
LOCATION_STRUCT_L	= $66
LOCATION_STRUCT_H	= $67
IN_SPECIAL		= $68
CURSOR_VISIBLE		= $69
IN_LEFT			= $6A
IN_RIGHT		= $6B
BTC_L			= $6C
BTC_H			= $6D

; pt3 player registers
AY_REGISTERS    = $70
A_FINE_TONE     = $70
A_COARSE_TONE   = $71
B_FINE_TONE     = $72
B_COARSE_TONE   = $73
C_FINE_TONE     = $74
C_COARSE_TONE   = $75
NOISE           = $76
ENABLE          = $77
PT3_MIXER_VAL   = $77
A_VOLUME        = $78
B_VOLUME        = $79
C_VOLUME        = $7A
ENVELOPE_FINE   = $7B
ENVELOPE_COARSE = $7C
ENVELOPE_SHAPE  = $7D
PATTERN_L       = $7E
PATTERN_H       = $7F

; note 70-7f also used by disk code

; note: rest are up at $f0

; We have to save/restore the following values
; when loading/storing from disk

WHICH_LOAD		= $80		; which file to load
DIRECTION		= $81		; direction we are pointing
	DIRECTION_N = $1
	DIRECTION_S = $2
	DIRECTION_E = $4
	DIRECTION_W = $8
	DIRECTION_ANY=$f
	DIRECTION_ONLY_POINT = $40	; do not change pointer to grab
	DIRECTION_SPLIT = $80		; split text/graphics

LOCATION		= $82		; location on the map

RED_PAGES_TAKEN		= $83		; red pages that have been picked up
	OCTAGON_PAGE = $01
	MECHE_PAGE   = $02
	SELENA_PAGE  = $04
	STONEY_PAGE  = $08
	CHANNEL_PAGE = $10
	FINAL_PAGE   = $20
BLUE_PAGES_TAKEN=	$84		; blue pages that have been picked up
CLOCK_BRIDGE	=	$85		; is the clock island bridge raised
GEAR_OPEN	=	$86		; is the big gear open
MARKER_SWITCHES	=	$87		; state of the marker switches
	MARKER_DOCK      = $01
	MARKER_GEARS     = $02
	MARKER_SPACESHIP = $04
	MARKER_GENERATOR = $08
	MARKER_CLOCK     = $10
	MARKER_TREE      = $20
	MARKER_POOL      = $40
	MARKER_DENTIST   = $80
	
CLOCK_HOUR	=	$88		; hour on the mist clock
CLOCK_MINUTE	=	$89		; minute on the mist clock

BOILER_LEVEL	=	$8A		; furnace in the cabin level

FIREPLACE_GRID0	=	$8B		; fireplace grid puzzle state
FIREPLACE_GRID1	=	$8C
FIREPLACE_GRID2	=	$8D
FIREPLACE_GRID3	=	$8E
FIREPLACE_GRID4	=	$8F
FIREPLACE_GRID5	=	$90

CLOCK_COUNT	=	$91		; clock puzzle (turns taken)
CLOCK_TOP	=	$92		; clock puzzle (top dial)
CLOCK_MIDDLE	=	$93		; clock puzzle (middle dial)
CLOCK_BOTTOM	=	$94		; clock puzzle (bottom dial)
CLOCK_LAST	=	$95		; clock puzzle (last dial turned)

BREAKER_TRIPPED	=	$96		; generator (circuit breakers status)
GENERATOR_VOLTS	=	$97		; generator (total volts)
ROCKET_VOLTS	=	$98		; generator (rocket volts)
SWITCH_TOP_ROW	=	$99		; generator (switch top row)
SWITCH_BOTTOM_ROW =	$9A		; generator (switch bottom row)
GENERATOR_VOLTS_DISP =	$9B		; generator (total volts on display)
ROCKET_VOLTS_DISP =	$9C		; generator (rocket volts on display)

ROCKET_HANDLE_STEP =	$9D		; organ (which knob is lit) [why zp?]
ROCKET_NOTE1	=	$9E		; organ (note slider 1)
ROCKET_NOTE2	=	$9F		; organ (note slider 2)
ROCKET_NOTE3	=	$A0		; organ (note slider 3)
ROCKET_NOTE4	=	$A1		; organ (note slider 4)

MECHE_ELEVATOR	=	$A2		; fortress elevator state
MECHE_ROTATION	=	$A3		; fortress rotation state
	; 0..3  = S
	; 4..7  = E
	; 8..11  = N
	; 12..15 = W
MECHE_LEVERS	=	$A4		; fortress rotation levers
	LEFT_LEVER = 1
	RIGHT_LEVER = 2
MECHE_LOCK1	=	$A5		; meche lock symbol1
MECHE_LOCK2	=	$A6		; meche lock symbol2
MECHE_LOCK3	=	$A7		; meche lock symbol3
MECHE_LOCK4	=	$A8		; meche lock symbol4

HOLDING_PAGE	=	$A9		; which page in hand
	HOLDING_RED_PAGE	= $80
	HOLDING_BLUE_PAGE	= $40
	HOLDING_WHITE_PAGE	= $C0
	;FINAL_PAGE   = $20
	;CHANNEL_PAGE = $10
	;STONEY_PAGE  = $08
	;SELENA_PAGE  = $04
	;MECHE_PAGE   = $02
	;OCTAGON_PAGE = $01

RED_PAGE_COUNT	=	$AA		; # of red pages in book
BLUE_PAGE_COUNT	=	$AB		; # of blue pages in book

VIEWER_CHANNEL	=	$AC		; viewer: current channel
VIEWER_LATCHED	=	$AD		; viewer: latched channel

TOWER_ROTATION	=	$AE		; tower rotation: which
	ROTATION_GEARS = 2
	ROTATION_DOCK  = 3
	ROTATION_TREE  = 4
	ROTATION_SPACESHIP = 8

SHIP_RAISED	=	$AF		; ship raised or not

PUMP_STATE	=	$B0		; stoneship pump state
	DRAINED_EXIT = $01
	DRAINED_TUNNELS = $02
	DRAINED_LIGHTHOUSE=$04

BATTERY_CHARGE	=	$B1		; stoneship battery charge
COMPASS_STATE	=	$B2		; stoneship compass state
	COMPASS_DEFAULT	= 0	; cabin lights off
	COMPASS_LIGHT_ON= 1	; proper angle selected
CRANK_ANGLE	=	$B3		; stoneship crank angle

WHITE_PAGE_TAKEN=	$B4		; white page taken

CHANNEL_SWITCHES=	$B5		; channelwood switches
	CHANNEL_SW_FAUCET	= $80
	CHANNEL_SW_WINDMILL	= $40
	CHANNEL_SW_GATE_BOTTOM	= $20
	CHANNEL_ELEVATOR1_UP	= $10
	CHANNEL_SW_GATE_TOP	= $08
	CHANNEL_BOOK_ELEVATOR_UP= $04
	CHANNEL_PIPE_EXTENDED	= $02
	CHANNEL_BRIDGE_UP	= $01

CHANNEL_VALVES	=	$B6		; channelwood valves
	CHANNEL_VALVE1		= $01		; elevator2
	CHANNEL_VALVE2		= $02		; big tree
	CHANNEL_VALVE3		= $04		; broken
	CHANNEL_VALVE4		= $08		; elevator1
	CHANNEL_VALVE5		= $10		; entry
	CHANNEL_VALVE6		= $20		; bridge

DENTIST_LIGHT	=	$B7		; dentist lightswitch
DENTIST_MONTH	=	$B8		; dentist panel: month
DENTIST_DAY	=	$B9		; dentist panel: day
DENTIST_CENTURY	=	$BA		; dentist panel: century
DENTIST_YEAR	=	$BB		; dentist panel: year
DENTIST_HOURS	=	$BC		; dentist panel: hours
DENTIST_MINUTES	=	$BD		; dentist panel: minutes

PILLAR_ON	=	$BE		; pillars: which on/off
	PILLAR_EYE		= $01
	PILLAR_SNAKE		= $02
	PILLAR_BUG		= $04
	PILLAR_ANCHOR		= $08
	PILLAR_ARROW		= $10
	PILLAR_LEAF		= $20
	PILLAR_CROSS		= $40
	PILLAR_EMU		= $80

GREEN_BOOK_PROGRESS	= $BF		; green book: what's ben seen

DNI_PROGRESS		= $C0		; dni: atrus status

COMPARTMENT_OPEN	= $C1		; dock marker switch compartment

GAME_COMPLETE		= $C2		; game has been completed

SAFE_HUNDREDS		= $C3		; safe combination, hundreds
SAFE_TENS		= $C4		; safe combination, tens
SAFE_ONES		= $C5		; safe combination, ones

TREE_LEVEL		= $C6		; how high is the tree hole

HOLDING_ITEM		= $C7
	HOLDING_KEY		= $04
	HOLDING_LIT_MATCH	= $02
	HOLDING_MATCH		= $01

BOILER_VALVE		= $C8		; how many turns of the boiler valve

TRUNK_STATE		= $C9		; trunk state in stonsehip
	TRUNK_VALVE_OPEN    = $01
	TRUNK_WATER_DRAINED = $02
	TRUNK_KEY_TAKEN	    = $04
	TRUNK_LID_OPEN	    = $08
	TRUNK_HATCH_OPEN    = $10
	TRUNK_KEY_ON_FLOOR  = $20

SELENA_BUTTON_STATUS	= $CA
	SELENA_BUTTON1	=	$01	; POOL  (water)
	SELENA_BUTTON2	=	$02	; CHASM (fire)
	SELENA_BUTTON3	=	$04	; CLOCK (ticking)
	SELENA_BUTTON4	=	$08	; CRYSTALS (whistle)
	SELENA_BUTTON5	=	$10	; TUNNEL (wind)
	SELENA_LIGHTSWITCH=	$80	; light in the tunnel

SELENA_ANTENNA1		= $CB	; rotation angle for antenna1
SELENA_ANTENNA2		= $CC	; rotation angle for antenna1
SELENA_ANTENNA3		= $CD	; rotation angle for antenna1
SELENA_ANTENNA4		= $CE	; rotation angle for antenna1
SELENA_ANTENNA5		= $CF	; rotation angle for antenna1

SELENA_LOCK1		= $D0	; antenna lock slider1
SELENA_LOCK2		= $D1	; antenna lock slider2
SELENA_LOCK3		= $D2	; antenna lock slider3
SELENA_LOCK4		= $D3	; antenna lock slider4
SELENA_LOCK5		= $D4	; antenna lock slider5

SELENA_ANTENNA_ACTIVE	= $D5	; which antenna currently selected

SUB_LOCATION		= $D6
SUB_DIRECTION		= $D7

NIBEL_PROJECTOR		= $D8	; which button on projector in nibel

END_OF_SAVE	=	$D9


; done game puzzle state


WHICH_SLOT	=	$DA
JS_BUTTON_STATE	=	$DB
CURRENT_DISK	=	$DC
JOYSTICK_ENABLED=	$DD
SOUND_STATUS	=	$DE
	SOUND_DISABLED	= $80
	SOUND_IN_LC	= $01		; speaker effects in language card
	SOUND_MOCKINGBOARD = $02	; mockingboard detected
	SOUND_SSI263	= $04		; SSI-263 speech chip detected

GRID_PAGE	=	$DF


; HGR routines (ROM)
HGR_X           = $E0
HGR_XH          = $E1
HGR_Y           = $E2
HGR_COLOR       = $E4
HGR_PAGE	= $E6

ANIMATE_FRAME	=	$E8
LEVEL_OVER	=	$E9
LOCATIONS_L	=	$EA
LOCATIONS_H	=	$EB

; temp var per-world define
LONG_FRAME	=	$EC	; nibel
CURRENT_DISPLAY	=	$EC	; selena
LAST_PLAYED	=	$EC	; selena

DISP_PAGE	=	$ED	; ALL
DRAW_PAGE	=	$EE	; ALL

; rest of pt3_player
PT3_TEMP        = $EF
ORNAMENT_L      = $F0
ORNAMENT_H      = $F1
SAMPLE_L        = $F2
SAMPLE_H        = $F3
LOOP            = $F4
MB_VALUE        = $F5
MB_ADDR_L       = $F6
MB_ADDR_H       = $F7
DONE_PLAYING    = $F8
DONE_SONG       = $F9

;TINL		=	$F0
;TINH		=	$F1
;BINL		=	$F2
;BINH		=	$F3
;SCROLL_COUNT	=	$F9

TEMP		=	$FA
TEMPY		=	$FB
INL		=	$FC
INH		=	$FD
OUTL		=	$FE
OUTH		=	$FF

; read any file slot 6 version
; based on FASTLD6 and RTS copyright (c) Peter Ferrie 2011-2013,2018

; modified to assembled with ca64 -- vmw
; added code to patch it to run from current disk slot -- vmw


        adrlo   =       $26     ; constant from boot prom
        adrhi   =       $27     ; constant from boot prom
        tmpsec  =       $3c     ; constant from boot prom
        reqsec  =       $3d     ; constant from boot prom
        sizelo  =       $44
        sizehi  =       $45
        secsize =       $46

        ldsizel =       $70
        ldsizeh =       $71
        namlo   =       $7b
        namhi   =       $7c
        step    =       $7d     ; state for stepper motor
        tmptrk  =       $7e     ; temporary copy of current track
        phase   =       $7f     ; current phase for /seek

