mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-27 02:31:00 +00:00
mist_hgr: urgh previously uncommitted too much
This commit is contained in:
parent
a49b1d8c85
commit
9f3d86eadb
523
games/mist_hgr/Makefile
Normal file
523
games/mist_hgr/Makefile
Normal file
@ -0,0 +1,523 @@
|
||||
include ../../Makefile.inc
|
||||
|
||||
DOS33 = ../../utils/dos33fs-utils/dos33
|
||||
DOS33_RAW = ../../utils/dos33fs-utils/dos33_raw
|
||||
PNG_TO_40x96 = ../../utils/gr-utils/png_to_40x96
|
||||
PNG_TO_40x48D = ../../utils/gr-utils/png_to_40x48d
|
||||
PNG2RLE = ../../utils/gr-utils/png2rle
|
||||
B2D = ../../utils/bmp2dhr/b2d
|
||||
|
||||
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
|
||||
|
||||
|
||||
all: mist_hgr.dsk
|
||||
# mist_side2.dsk mist_side3.dsk
|
||||
|
||||
#zip: mist_hgr.dsk mist_side2.dsk mist_side3.dsk
|
||||
# zip mist.zip mist_hgr.dsk mist_side2.dsk mist_side3.dsk
|
||||
|
||||
mist_hgr.dsk: QBOOT TEXT_TITLE QLOAD \
|
||||
MIST_TITLE MIST OCTAGON VIEWER \
|
||||
DENTIST D\'NI SHIP GENERATOR \
|
||||
SAVE1 SAVE2 SAVE3 SAVE4 SAVE5
|
||||
cp extra_empty.dsk mist_hgr.dsk
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 0 QBOOT 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 2 QBOOT 1 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 4 QBOOT 2 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 6 TEXT_TITLE 0 3
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 11 SAVE1 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 12 SAVE2 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 13 SAVE3 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
|
||||
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 14
|
||||
$(DOS33_RAW) mist_hgr.dsk 2 0 MIST_TITLE 0 84
|
||||
# $(DOS33_RAW) mist_hgr.dsk 8 0 MIST 0 159
|
||||
# $(DOS33_RAW) mist_hgr.dsk 18 0 OCTAGON 0 128
|
||||
# $(DOS33_RAW) mist_hgr.dsk 26 0 DENTIST 0 31
|
||||
# $(DOS33_RAW) mist_hgr.dsk 28 0 D\'NI 0 27
|
||||
# $(DOS33_RAW) mist_hgr.dsk 30 0 SHIP 0 20
|
||||
# $(DOS33_RAW) mist_hgr.dsk 31 8 VIEWER 0 20
|
||||
# $(DOS33_RAW) mist_hgr.dsk 32 13 GENERATOR 0 33
|
||||
|
||||
|
||||
#mist_side2.dsk: WBOOT2 CHANNEL ARBOR NIBEL CABIN
|
||||
# cp extra_empty.dsk mist_side2.dsk
|
||||
# $(DOS33_RAW) mist_side2.dsk 0 0 WBOOT2 0 1
|
||||
# $(DOS33_RAW) mist_side2.dsk 1 0 CHANNEL 0 135
|
||||
# $(DOS33_RAW) mist_side2.dsk 10 0 ARBOR 0 159
|
||||
# $(DOS33_RAW) mist_side2.dsk 20 0 NIBEL 0 109
|
||||
# $(DOS33_RAW) mist_side2.dsk 27 0 CABIN 0 61
|
||||
|
||||
#mist_side3.dsk: WBOOT3 MECHE SELENA STONEY SUB
|
||||
# cp extra_empty.dsk mist_side3.dsk
|
||||
# $(DOS33_RAW) mist_side3.dsk 0 0 WBOOT3 0 1
|
||||
# $(DOS33_RAW) mist_side3.dsk 1 0 MECHE 0 157
|
||||
# $(DOS33_RAW) mist_side3.dsk 11 0 STONEY 0 158
|
||||
# $(DOS33_RAW) mist_side3.dsk 21 0 SELENA 0 145
|
||||
# $(DOS33_RAW) mist_side3.dsk 30 1 SUB 0 78
|
||||
|
||||
###
|
||||
|
||||
#WBOOT2: wrong_boot2.o
|
||||
# ld65 -o WBOOT2 wrong_boot2.o -C ../../linker_scripts/apple2_800.inc
|
||||
|
||||
#wrong_boot2.o: wrong_boot2.s
|
||||
# ca65 -o wrong_boot2.o wrong_boot2.s -l wrong_boot2.lst
|
||||
|
||||
###
|
||||
|
||||
#WBOOT3: wrong_boot3.o
|
||||
# ld65 -o WBOOT3 wrong_boot3.o -C ../../linker_scripts/apple2_800.inc
|
||||
|
||||
#wrong_boot3.o: wrong_boot3.s
|
||||
# ca65 -o wrong_boot3.o wrong_boot3.s -l wrong_boot3.lst
|
||||
|
||||
|
||||
###
|
||||
|
||||
QBOOT: qboot_sector.o
|
||||
ld65 -o QBOOT qboot_sector.o -C ../../linker_scripts/apple2_800.inc
|
||||
|
||||
qboot_sector.o: qboot_sector.s qboot_stage2.s
|
||||
ca65 -o qboot_sector.o qboot_sector.s -l qboot_sector.lst
|
||||
|
||||
###
|
||||
|
||||
TEXT_TITLE: text_title.o
|
||||
ld65 -o TEXT_TITLE text_title.o -C ../../linker_scripts/apple2_800.inc
|
||||
|
||||
text_title.o: text_title.s text_print.s wait_a_bit.s
|
||||
ca65 -o text_title.o text_title.s -l text_title.lst
|
||||
|
||||
|
||||
###
|
||||
|
||||
QLOAD: qload.o
|
||||
ld65 -o QLOAD qload.o -C ../../linker_scripts/apple2_1200.inc
|
||||
|
||||
qload.o: qload.s qboot.inc \
|
||||
gr_copy.s gr_offsets.s gr_pageflip.s gr_putsprite_crop.s \
|
||||
text_print.s gr_fast_clear.s decompress_fast_v2.s \
|
||||
keyboard.s draw_pointer.s end_level.s audio.s loadstore.s \
|
||||
qkumba_popwr.s
|
||||
ca65 -o qload.o qload.s -l qload.lst
|
||||
|
||||
|
||||
###
|
||||
|
||||
LOADER: loader.o
|
||||
ld65 -o LOADER loader.o -C ../../linker_scripts/apple2_1000.inc
|
||||
|
||||
loader.o: loader.s \
|
||||
gr_copy.s gr_offsets.s gr_pageflip.s gr_putsprite_crop.s \
|
||||
text_print.s gr_fast_clear.s decompress_fast_v2.s \
|
||||
keyboard.s draw_pointer.s end_level.s audio.s loadstore.s \
|
||||
qkumba_popwr.s
|
||||
ca65 -o loader.o loader.s -l loader.lst
|
||||
|
||||
###
|
||||
|
||||
SAVE1: save1.o
|
||||
ld65 -o SAVE1 save1.o -C ../../linker_scripts/apple2_e00.inc
|
||||
|
||||
save1.o: save1.s
|
||||
ca65 -o save1.o save1.s -l save1.lst
|
||||
|
||||
###
|
||||
|
||||
SAVE2: save2.o
|
||||
ld65 -o SAVE2 save2.o -C ../../linker_scripts/apple2_e00.inc
|
||||
|
||||
save2.o: save2.s
|
||||
ca65 -o save2.o save2.s -l save2.lst
|
||||
|
||||
###
|
||||
|
||||
SAVE3: save3.o
|
||||
ld65 -o SAVE3 save3.o -C ../../linker_scripts/apple2_e00.inc
|
||||
|
||||
save3.o: save3.s
|
||||
ca65 -o save3.o save3.s -l save3.lst
|
||||
|
||||
###
|
||||
|
||||
SAVE4: save4.o
|
||||
ld65 -o SAVE4 save4.o -C ../../linker_scripts/apple2_e00.inc
|
||||
|
||||
save4.o: save4.s
|
||||
ca65 -o save4.o save4.s -l save4.lst
|
||||
|
||||
###
|
||||
|
||||
SAVE5: save5.o
|
||||
ld65 -o SAVE5 save5.o -C ../../linker_scripts/apple2_e00.inc
|
||||
|
||||
save5.o: save5.s
|
||||
ca65 -o save5.o save5.s -l save5.lst
|
||||
|
||||
####
|
||||
|
||||
generate_common: generate_common.o
|
||||
$(CC) $(LFLAGS) -o generate_common generate_common.o
|
||||
|
||||
generate_common.o: generate_common.c
|
||||
$(CC) $(CFLAGS) -c generate_common.c
|
||||
|
||||
####
|
||||
|
||||
common_routines.inc: qload.lst generate_common
|
||||
./generate_common > common_routines.inc
|
||||
|
||||
####
|
||||
|
||||
MIST_TITLE: mist_title.o
|
||||
ld65 -o MIST_TITLE mist_title.o -C ../../linker_scripts/apple2_4000.inc
|
||||
|
||||
mist_title.o: mist_title.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_title_hgr/mist_title.lzsa graphics_title/title_graphics.inc \
|
||||
gr_copy.s gr_offsets.s gr_pageflip.s gr_putsprite_crop.s \
|
||||
text_print.s gr_fast_clear.s decompress_fast_v2.s \
|
||||
keyboard.s draw_pointer.s end_level.s audio.s \
|
||||
init_state.s wait_a_bit.s \
|
||||
link_book_mist_dock.s common_sprites.inc leveldata_title.inc \
|
||||
pt3_lib_core.s pt3_lib_init.s pt3_lib_mockingboard_detect.s \
|
||||
pt3_lib_mockingboard_setup.s pt3_lib_irq_handler.s interrupt_handler.s
|
||||
ca65 -o mist_title.o mist_title.s -l mist_title.lst
|
||||
|
||||
####
|
||||
|
||||
MIST: mist.o
|
||||
ld65 -o MIST mist.o -C ./apple2_2000.inc
|
||||
|
||||
mist.o: mist.s zp.inc hardware.inc common_defines.inc common_routines.inc \
|
||||
graphics_mist/mist_graphics.inc \
|
||||
common_sprites.inc \
|
||||
leveldata_mist.inc \
|
||||
clock_bridge_puzzle.s clock_sprites.inc \
|
||||
marker_switch.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
end_level.s \
|
||||
mist_puzzles.s \
|
||||
handle_pages.s
|
||||
ca65 -o mist.o mist.s -l mist.lst
|
||||
|
||||
####
|
||||
|
||||
GENERATOR: generator.o
|
||||
ld65 -o GENERATOR generator.o -C ./apple2_2000.inc
|
||||
|
||||
generator.o: generator.s zp.inc hardware.inc \
|
||||
common_defines.inc common_routines.inc \
|
||||
graphics_generator/generator_graphics.inc \
|
||||
leveldata_generator.inc \
|
||||
generator_puzzle.s
|
||||
ca65 -o generator.o generator.s -l generator.lst
|
||||
|
||||
|
||||
####
|
||||
|
||||
OCTAGON: octagon.o
|
||||
ld65 -o OCTAGON octagon.o -C ./apple2_2000.inc
|
||||
|
||||
octagon.o: octagon.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_octagon/octagon_graphics.inc \
|
||||
books/octagon_books.inc \
|
||||
common_sprites.inc page_sprites.inc \
|
||||
leveldata_octagon.inc \
|
||||
brother_books.s \
|
||||
handle_pages.s \
|
||||
octagon_bookshelf.s \
|
||||
octagon_rotation.s \
|
||||
octagon_fireplace.s
|
||||
ca65 -o octagon.o octagon.s -l octagon.lst
|
||||
|
||||
####
|
||||
|
||||
D\'NI: dni.o
|
||||
ld65 -o D\'NI dni.o -C ./apple2_2000.inc
|
||||
|
||||
dni.o: dni.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_dni/dni_graphics.inc \
|
||||
leveldata_dni.inc \
|
||||
dni_ending.s
|
||||
ca65 -o dni.o dni.s -l dni.lst
|
||||
|
||||
|
||||
|
||||
####
|
||||
|
||||
MECHE: meche.o
|
||||
ld65 -o MECHE meche.o -C ./apple2_2000.inc
|
||||
|
||||
meche.o: meche.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_meche/meche_graphics.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
leveldata_meche.inc \
|
||||
link_book_meche.s \
|
||||
link_book_mist.s \
|
||||
meche_rotation.s \
|
||||
handle_pages.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o meche.o meche.s -l meche.lst
|
||||
|
||||
####
|
||||
|
||||
SELENA: selena.o
|
||||
ld65 -o SELENA selena.o -C ./apple2_2000.inc
|
||||
|
||||
selena.o: selena.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_selena/selena_graphics.inc \
|
||||
common_sprites.inc \
|
||||
leveldata_selena.inc \
|
||||
link_book_mist.s \
|
||||
end_level.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
speaker_beeps.s \
|
||||
selena_organ_puzzle.s selena_sound_puzzle.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o selena.o selena.s -l selena.lst
|
||||
|
||||
####
|
||||
|
||||
SUB: sub.o
|
||||
ld65 -o SUB sub.o -C ./apple2_2000.inc
|
||||
|
||||
sub.o: sub.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_sub/sub_graphics.inc \
|
||||
common_sprites.inc \
|
||||
leveldata_sub.inc \
|
||||
link_book_mist.s \
|
||||
end_level.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
sub_puzzle.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o sub.o sub.s -l sub.lst
|
||||
|
||||
####
|
||||
|
||||
VIEWER: viewer.o
|
||||
ld65 -o VIEWER viewer.o -C ./apple2_2000.inc
|
||||
|
||||
viewer.o: viewer.s zp.inc hardware.inc common_defines.inc \
|
||||
graphics_viewer/viewer_graphics.inc \
|
||||
common_routines.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
number_sprites.inc \
|
||||
leveldata_viewer.inc \
|
||||
viewer_controls.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o viewer.o viewer.s -l viewer.lst
|
||||
|
||||
####
|
||||
|
||||
STONEY: stoney.o
|
||||
ld65 -o STONEY stoney.o -C ./apple2_2000.inc
|
||||
|
||||
stoney.o: stoney.s zp.inc hardware.inc common_defines.inc \
|
||||
graphics_stoney/stoney_graphics.inc \
|
||||
common_routines.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
leveldata_stoney.inc \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
link_book_stoney.s \
|
||||
link_book_mist.s \
|
||||
handle_pages.s \
|
||||
hlin_list.s \
|
||||
lights_off.s stoney_puzzles.s
|
||||
ca65 -o stoney.o stoney.s -l stoney.lst
|
||||
|
||||
####
|
||||
|
||||
SHIP: ship.o
|
||||
ld65 -o SHIP ship.o -C ./apple2_2000.inc
|
||||
|
||||
ship.o: ship.s zp.inc hardware.inc common_defines.inc \
|
||||
graphics_ship/ship_graphics.inc \
|
||||
common_routines.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
leveldata_ship.inc \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
link_book_stoney.s \
|
||||
link_book_mist.s \
|
||||
handle_pages.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o ship.o ship.s -l ship.lst
|
||||
|
||||
####
|
||||
|
||||
CABIN: cabin.o
|
||||
ld65 -o CABIN cabin.o -C ./apple2_2000.inc
|
||||
|
||||
cabin.o: cabin.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_cabin/cabin_graphics.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
leveldata_cabin.inc \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
link_book_channel.s \
|
||||
marker_switch.s \
|
||||
cabin_boiler_puzzle.s \
|
||||
number_sprites.inc
|
||||
ca65 -o cabin.o cabin.s -l cabin.lst
|
||||
|
||||
|
||||
####
|
||||
|
||||
CHANNEL: channel.o
|
||||
ld65 -o CHANNEL channel.o -C ./apple2_2000.inc
|
||||
|
||||
channel.o: channel.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_channel/channel_graphics.inc \
|
||||
common_sprites.inc \
|
||||
page_sprites.inc \
|
||||
leveldata_channel.inc \
|
||||
channel_switches.s \
|
||||
keyboard.s \
|
||||
draw_pointer.s \
|
||||
link_book_channel.s \
|
||||
link_book_mist.s \
|
||||
gr_copy.s audio.s text_print.s decompress_fast_v2.s
|
||||
ca65 -o channel.o channel.s -l channel.lst
|
||||
|
||||
####
|
||||
|
||||
ARBOR: arbor.o
|
||||
ld65 -o ARBOR arbor.o -C ./apple2_2000.inc
|
||||
|
||||
arbor.o: arbor.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_arbor/arbor_graphics.inc \
|
||||
leveldata_arbor.inc \
|
||||
arbor_switches.s
|
||||
ca65 -o arbor.o arbor.s -l arbor.lst
|
||||
|
||||
####
|
||||
|
||||
NIBEL: nibel.o
|
||||
ld65 -o NIBEL nibel.o -C ./apple2_2000.inc
|
||||
|
||||
nibel.o: nibel.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_nibel/nibel_graphics.inc \
|
||||
leveldata_nibel.inc \
|
||||
handle_pages.s nibel_switches.s
|
||||
ca65 -o nibel.o nibel.s -l nibel.lst
|
||||
|
||||
####
|
||||
|
||||
DENTIST: dentist.o
|
||||
ld65 -o DENTIST dentist.o -C ./apple2_2000.inc
|
||||
|
||||
dentist.o: dentist.s zp.inc hardware.inc common_defines.inc \
|
||||
common_routines.inc \
|
||||
graphics_dentist/dentist_graphics.inc \
|
||||
leveldata_dentist.inc \
|
||||
dentist_panel.s \
|
||||
marker_switch.s
|
||||
ca65 -o dentist.o dentist.s -l dentist.lst
|
||||
|
||||
|
||||
####
|
||||
|
||||
graphics_title/title_graphics.inc:
|
||||
cd graphics_title && make
|
||||
|
||||
graphics_mist/mist_graphics.inc:
|
||||
cd graphics_mist && make
|
||||
|
||||
graphics_octagon/octagon_graphics.inc:
|
||||
cd graphics_octagon && make
|
||||
|
||||
books/octagon_books.inc:
|
||||
cd books && make
|
||||
|
||||
graphics_viewer/viewer_graphics.inc:
|
||||
cd graphics_viewer && make
|
||||
|
||||
graphics_meche/meche_graphics.inc:
|
||||
cd graphics_meche && make
|
||||
|
||||
graphics_selena/selena_graphics.inc:
|
||||
cd graphics_selena && make
|
||||
|
||||
graphics_cabin/cabin_graphics.inc:
|
||||
cd graphics_cabin && make
|
||||
|
||||
graphics_channel/channel_graphics.inc:
|
||||
cd graphics_channel && make
|
||||
|
||||
graphics_stoney/stoney_graphics.inc:
|
||||
cd graphics_stoney && make
|
||||
|
||||
graphics_dentist/dentist_graphics.inc:
|
||||
cd graphics_dentist && make
|
||||
|
||||
graphics_generator/generator_graphics.inc:
|
||||
cd graphics_generator && make
|
||||
|
||||
graphics_arbor/arbor_graphics.inc:
|
||||
cd graphics_arbor && make
|
||||
|
||||
graphics_nibel/nibel_graphics.inc:
|
||||
cd graphics_nibel && make
|
||||
|
||||
graphics_dni/dni_graphics.inc:
|
||||
cd graphics_dni && make
|
||||
|
||||
graphics_ship/ship_graphics.inc:
|
||||
cd graphics_ship && make
|
||||
|
||||
graphics_sub/sub_graphics.inc:
|
||||
cd graphics_sub && make
|
||||
|
||||
|
||||
####
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst HELLO HELLO_DISK2 \
|
||||
LOADER MIST_TITLE \
|
||||
MIST OCTAGON VIEWER DENTIST \
|
||||
MECHE SELENA SHIP STONEY CHANNEL ARBOR NIBEL \
|
||||
GENERATOR \
|
||||
generate_common
|
||||
cd graphics_title && make clean
|
||||
cd graphics_mist && make clean
|
||||
cd graphics_octagon && make clean
|
||||
cd books && make clean
|
||||
cd graphics_viewer && make clean
|
||||
cd graphics_meche && make clean
|
||||
cd graphics_selena && make clean
|
||||
cd graphics_cabin && make clean
|
||||
cd graphics_channel && make clean
|
||||
cd graphics_stoney && make clean
|
||||
cd graphics_dentist && make clean
|
||||
cd graphics_generator && make clean
|
||||
cd graphics_arbor && make clean
|
||||
cd graphics_nibel && make clean
|
||||
cd graphics_dni && make clean
|
||||
cd graphics_ship && make clean
|
||||
cd graphics_sub && make clean
|
||||
|
204
games/mist_hgr/audio.s
Normal file
204
games/mist_hgr/audio.s
Normal file
@ -0,0 +1,204 @@
|
||||
; Based on BTC.SYSTEM by Oliver Schmidt
|
||||
|
||||
; How to generate proper audio for this:
|
||||
|
||||
; -Open MP3 in Audacity
|
||||
; -Change Project Rate (Hz) to 33,000 (bottom left box)
|
||||
; -Tracks --> Mix... --> Mix Stereo Down to Mono
|
||||
; -File --> Export --> Export as WAV
|
||||
; - Select "WAV (Microsoft) signed 16-bit PCM"
|
||||
; - Under "Edit Metadata Tags" hit "Clear", then "Okay"
|
||||
; -Open saved WAV file in BTc Sound Encoder 3.0
|
||||
; -Change Algorithm to "1 bit" (leave fineness as BTc16)
|
||||
; -File --> Export binary file .BTC format
|
||||
|
||||
|
||||
spkr = $C030
|
||||
|
||||
;****************************************************************
|
||||
;* Audio playback *
|
||||
;****************************************************************
|
||||
; audio file in BTC_L/BTC_H
|
||||
; pages to play in X
|
||||
|
||||
|
||||
play_audio:
|
||||
ldy #0
|
||||
|
||||
; loop here as long as BITs are [F]alse (aka 0)
|
||||
F_NX: NOP ; 2 2
|
||||
NOP ; 2 2
|
||||
NOP ; 2 2
|
||||
BIT $00 ; 3 3
|
||||
F_RD: LDA (BTC_L),y ; 5 5 5
|
||||
ASL ; 2 2 2
|
||||
BCS T_1_SW ; 2/3 2
|
||||
NOP ; 2 2
|
||||
NOP ; 2 2
|
||||
NOP ; 2 2
|
||||
NOP ; 2 2
|
||||
F_1: JSR delay ; 6 (+13) 19
|
||||
ASL ; 2 2 = 31
|
||||
BCS T_2_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_2: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_3_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_3: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_4_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_4: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_5_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_5: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_6_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_6: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_7_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
F_7: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCS T_8_SW ; 2/3 2 2
|
||||
NOP ; 2 2 2
|
||||
NOP ; 2 2 2
|
||||
NOP ; 2 2 2
|
||||
NOP ; 2 2 2
|
||||
F_8: INY ; 2 2 2
|
||||
BNE F_NX ; 2/3 3 = 31 2
|
||||
INC BTC_H ; 5 5
|
||||
DEX ; 2 2
|
||||
BNE F_RD ; 2/3 3 = 31
|
||||
RTS
|
||||
; click speaker on transitions
|
||||
T_1_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [1]
|
||||
BCS T_1 ; 3 (always)
|
||||
T_2_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [2]
|
||||
BCS T_2 ; 3 (always)
|
||||
T_3_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [3]
|
||||
BCS T_3 ; 3 (always)
|
||||
T_4_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [4]
|
||||
BCS T_4 ; 3 (always)
|
||||
T_5_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [5]
|
||||
BCS T_5 ; 3 (always)
|
||||
T_6_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [6]
|
||||
BCS T_6 ; 3 (always)
|
||||
T_7_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [7]
|
||||
BCS T_7 ; 3 (always)
|
||||
T_8_SW: STA spkr ; 4 [SW]itch to [T]rue on BIT [8]
|
||||
BCS T_8 ; 3 (always)
|
||||
|
||||
F_1_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [1]
|
||||
BCC F_1 ; 3 (always)
|
||||
F_2_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [2]
|
||||
BCC F_2 ; 3 (always)
|
||||
F_3_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [3]
|
||||
BCC F_3 ; 3 (always)
|
||||
F_4_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [4]
|
||||
BCC F_4 ; 3 (always)
|
||||
F_5_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [5]
|
||||
BCC F_5 ; 3 (always)
|
||||
F_6_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [6]
|
||||
BCC F_6 ; 3 (always)
|
||||
F_7_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [7]
|
||||
BCC F_7 ; 3 (always)
|
||||
F_8_SW: STA spkr ; 4 [SW]itch to [F]alse on BIT [8]
|
||||
BCC F_8 ; 3 (always)
|
||||
|
||||
; loop here as long as BITs are [T]rue (aka 1)
|
||||
T_NX: NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
BIT $00 ; 3
|
||||
T_RD: LDA (BTC_L),y ; 5
|
||||
ASL ; 2
|
||||
BCC F_1_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_1: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_2_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_2: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_3_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_3: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_4_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_4: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_5_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_5: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_6_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_6: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_7_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_7: JSR delay ; 6 (+13)
|
||||
ASL ; 2
|
||||
BCC F_8_SW ; 2/3
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
NOP ; 2
|
||||
T_8: INY ; 2
|
||||
BNE T_NX ; 2/3
|
||||
INC BTC_H ; 5
|
||||
DEX ; 2
|
||||
BNE T_RD ; 2/3
|
||||
RTS
|
||||
|
||||
delay:
|
||||
nop ; 2
|
||||
nop ; 2
|
||||
BIT $00 ; 3
|
||||
RTS ; 6 = 13
|
||||
|
||||
|
370
games/mist_hgr/decompress_fast_v2.s
Normal file
370
games/mist_hgr/decompress_fast_v2.s
Normal file
@ -0,0 +1,370 @@
|
||||
; note -- modified by Vince Weaver to assemble with ca65
|
||||
; in this case, A = page to decompress to
|
||||
; getsrc_smc+1, getsrc_smc+2 is src location
|
||||
|
||||
; -----------------------------------------------------------------------------
|
||||
; Decompress raw LZSA2 block.
|
||||
; Create one with lzsa -r -f2 <original_file> <compressed_file>
|
||||
;
|
||||
; in:
|
||||
; * LZSA_SRC_LO and LZSA_SRC_HI contain the compressed raw block address
|
||||
; * LZSA_DST_LO and LZSA_DST_HI contain the destination buffer address
|
||||
;
|
||||
; out:
|
||||
; * LZSA_DST_LO and LZSA_DST_HI contain the last decompressed byte address, +1
|
||||
;
|
||||
; -----------------------------------------------------------------------------
|
||||
; Backward decompression is also supported, use lzsa -r -b -f2 <original_file> <compressed_file>
|
||||
; To use it, also define BACKWARD_DECOMPRESS=1 before including this code!
|
||||
;
|
||||
; in:
|
||||
; * LZSA_SRC_LO/LZSA_SRC_HI must contain the address of the last byte of compressed data
|
||||
; * LZSA_DST_LO/LZSA_DST_HI must contain the address of the last byte of the destination buffer
|
||||
;
|
||||
; out:
|
||||
; * LZSA_DST_LO/LZSA_DST_HI contain the last decompressed byte address, -1
|
||||
;
|
||||
; -----------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (C) 2019 Emmanuel Marty, Peter Ferrie
|
||||
;
|
||||
; This software is provided 'as-is', without any express or implied
|
||||
; warranty. In no event will the authors be held liable for any damages
|
||||
; arising from the use of this software.
|
||||
;
|
||||
; Permission is granted to anyone to use this software for any purpose,
|
||||
; including commercial applications, and to alter it and redistribute it
|
||||
; freely, subject to the following restrictions:
|
||||
;
|
||||
; 1. The origin of this software must not be misrepresented; you must not
|
||||
; claim that you wrote the original software. If you use this software
|
||||
; in a product, an acknowledgment in the product documentation would be
|
||||
; appreciated but is not required.
|
||||
; 2. Altered source versions must be plainly marked as such, and must not be
|
||||
; misrepresented as being the original software.
|
||||
; 3. This notice may not be removed or altered from any source distribution.
|
||||
; -----------------------------------------------------------------------------
|
||||
|
||||
;NIBCOUNT = $FC ; zero-page location for temp offset
|
||||
|
||||
decompress_lzsa2_fast:
|
||||
|
||||
sta LZSA_DST_HI
|
||||
|
||||
ldy #$00
|
||||
sty LZSA_DST_LO
|
||||
sty NIBCOUNT
|
||||
|
||||
decode_token:
|
||||
jsr getsrc ; read token byte: XYZ|LL|MMM
|
||||
pha ; preserve token on stack
|
||||
|
||||
and #$18 ; isolate literals count (LL)
|
||||
beq no_literals ; skip if no literals to copy
|
||||
cmp #$18 ; LITERALS_RUN_LEN_V2?
|
||||
bcc prepare_copy_literals ; if less, count is directly embedded in token
|
||||
|
||||
jsr getnibble ; get extra literals length nibble
|
||||
; add nibble to len from token
|
||||
adc #$02 ; (LITERALS_RUN_LEN_V2) minus carry
|
||||
cmp #$12 ; LITERALS_RUN_LEN_V2 + 15 ?
|
||||
bcc prepare_copy_literals_direct ; if less, literals count is complete
|
||||
|
||||
jsr getsrc ; get extra byte of variable literals count
|
||||
; the carry is always set by the CMP above
|
||||
; GETSRC doesn't change it
|
||||
sbc #$EE ; overflow?
|
||||
jmp prepare_copy_literals_direct
|
||||
|
||||
prepare_copy_literals_large:
|
||||
; handle 16 bits literals count
|
||||
; literals count = directly these 16 bits
|
||||
jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A
|
||||
tay ; put high 8 bits in Y
|
||||
bcs prepare_copy_literals_high ; (*same as JMP PREPARE_COPY_LITERALS_HIGH but shorter)
|
||||
|
||||
prepare_copy_literals:
|
||||
lsr ; shift literals count into place
|
||||
lsr
|
||||
lsr
|
||||
|
||||
prepare_copy_literals_direct:
|
||||
tax
|
||||
bcs prepare_copy_literals_large ; if so, literals count is large
|
||||
|
||||
prepare_copy_literals_high:
|
||||
txa
|
||||
beq copy_literals
|
||||
iny
|
||||
|
||||
copy_literals:
|
||||
jsr getput ; copy one byte of literals
|
||||
dex
|
||||
bne copy_literals
|
||||
dey
|
||||
bne copy_literals
|
||||
|
||||
no_literals:
|
||||
pla ; retrieve token from stack
|
||||
pha ; preserve token again
|
||||
asl
|
||||
bcs repmatch_or_large_offset ; 1YZ: rep-match or 13/16 bit offset
|
||||
|
||||
asl ; 0YZ: 5 or 9 bit offset
|
||||
bcs offset_9_bit
|
||||
|
||||
; 00Z: 5 bit offset
|
||||
|
||||
ldx #$FF ; set offset bits 15-8 to 1
|
||||
|
||||
jsr getcombinedbits ; rotate Z bit into bit 0, read nibble for bits 4-1
|
||||
ora #$E0 ; set bits 7-5 to 1
|
||||
bne got_offset_lo ; go store low byte of match offset and prepare match
|
||||
|
||||
offset_9_bit: ; 01Z: 9 bit offset
|
||||
;;asl ; shift Z (offset bit 8) in place
|
||||
rol
|
||||
rol
|
||||
and #$01
|
||||
eor #$FF ; set offset bits 15-9 to 1
|
||||
bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match
|
||||
; (*same as JMP GOT_OFFSET_HI but shorter)
|
||||
|
||||
repmatch_or_large_offset:
|
||||
asl ; 13 bit offset?
|
||||
bcs repmatch_or_16bit ; handle rep-match or 16-bit offset if not
|
||||
|
||||
; 10Z: 13 bit offset
|
||||
|
||||
jsr getcombinedbits ; rotate Z bit into bit 8, read nibble for bits 12-9
|
||||
adc #$DE ; set bits 15-13 to 1 and substract 2 (to substract 512)
|
||||
bne got_offset_hi ; go store high byte, read low byte of match offset and prepare match
|
||||
; (*same as JMP GOT_OFFSET_HI but shorter)
|
||||
|
||||
repmatch_or_16bit: ; rep-match or 16 bit offset
|
||||
;;ASL ; XYZ=111?
|
||||
bmi rep_match ; reuse previous offset if so (rep-match)
|
||||
|
||||
; 110: handle 16 bit offset
|
||||
jsr getsrc ; grab high 8 bits
|
||||
got_offset_hi:
|
||||
tax
|
||||
jsr getsrc ; grab low 8 bits
|
||||
got_offset_lo:
|
||||
sta OFFSLO ; store low byte of match offset
|
||||
stx OFFSHI ; store high byte of match offset
|
||||
|
||||
rep_match:
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression - substract match offset
|
||||
|
||||
sec ; add dest + match offset
|
||||
lda putdst+1 ; low 8 bits
|
||||
OFFSLO = *+1
|
||||
sbc #$AA
|
||||
sta copy_match_loop+1 ; store back reference address
|
||||
lda putdst+2
|
||||
OFFSHI = *+1
|
||||
sbc #$AA ; high 8 bits
|
||||
sta copy_match_loop+2 ; store high 8 bits of address
|
||||
sec
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression - add match offset
|
||||
|
||||
clc ; add dest + match offset
|
||||
lda putdst+1 ; low 8 bits
|
||||
OFFSLO = *+1
|
||||
adc #$AA
|
||||
sta copy_match_loop+1 ; store back reference address
|
||||
OFFSHI = *+1
|
||||
lda #$AA ; high 8 bits
|
||||
adc putdst+2
|
||||
sta copy_match_loop+2 ; store high 8 bits of address
|
||||
.endif
|
||||
|
||||
pla ; retrieve token from stack again
|
||||
and #$07 ; isolate match len (MMM)
|
||||
adc #$01 ; add MIN_MATCH_SIZE_V2 and carry
|
||||
cmp #$09 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2?
|
||||
bcc prepare_copy_match ; if less, length is directly embedded in token
|
||||
|
||||
jsr getnibble ; get extra match length nibble
|
||||
; add nibble to len from token
|
||||
adc #$08 ; (MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2) minus carry
|
||||
cmp #$18 ; MIN_MATCH_SIZE_V2 + MATCH_RUN_LEN_V2 + 15?
|
||||
bcc prepare_copy_match ; if less, match length is complete
|
||||
|
||||
jsr getsrc ; get extra byte of variable match length
|
||||
; the carry is always set by the CMP above
|
||||
; GETSRC doesn't change it
|
||||
sbc #$E8 ; overflow?
|
||||
|
||||
prepare_copy_match:
|
||||
tax
|
||||
bcc prepare_copy_match_y ; if not, the match length is complete
|
||||
beq decompression_done ; if EOD code, bail
|
||||
|
||||
; Handle 16 bits match length
|
||||
jsr getlargesrc ; grab low 8 bits in X, high 8 bits in A
|
||||
tay ; put high 8 bits in Y
|
||||
|
||||
prepare_copy_match_y:
|
||||
txa
|
||||
beq copy_match_loop
|
||||
iny
|
||||
|
||||
copy_match_loop:
|
||||
lda $AAAA ; get one byte of backreference
|
||||
jsr putdst ; copy to destination
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression -- put backreference bytes backward
|
||||
|
||||
lda copy_match_loop+1
|
||||
beq getmatch_adj_hi
|
||||
getmatch_done:
|
||||
dec copy_match_loop+1
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression -- put backreference bytes forward
|
||||
|
||||
inc copy_match_loop+1
|
||||
beq getmatch_adj_hi
|
||||
getmatch_done:
|
||||
|
||||
.endif
|
||||
|
||||
dex
|
||||
bne copy_match_loop
|
||||
dey
|
||||
bne copy_match_loop
|
||||
jmp decode_token
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
getmatch_adj_hi:
|
||||
dec copy_match_loop+2
|
||||
jmp getmatch_done
|
||||
|
||||
.else
|
||||
|
||||
getmatch_adj_hi:
|
||||
inc copy_match_loop+2
|
||||
jmp getmatch_done
|
||||
.endif
|
||||
|
||||
getcombinedbits:
|
||||
eor #$80
|
||||
asl
|
||||
php
|
||||
|
||||
jsr getnibble ; get nibble into bits 0-3 (for offset bits 1-4)
|
||||
plp ; merge Z bit as the carry bit (for offset bit 0)
|
||||
combinedbitz:
|
||||
rol ; nibble -> bits 1-4; carry(!Z bit) -> bit 0 ; carry cleared
|
||||
decompression_done:
|
||||
rts
|
||||
|
||||
getnibble:
|
||||
NIBBLES = *+1
|
||||
lda #$AA
|
||||
lsr NIBCOUNT
|
||||
bcc need_nibbles
|
||||
and #$0F ; isolate low 4 bits of nibble
|
||||
rts
|
||||
|
||||
need_nibbles:
|
||||
inc NIBCOUNT
|
||||
jsr getsrc ; get 2 nibbles
|
||||
sta NIBBLES
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
sec
|
||||
rts
|
||||
|
||||
.ifdef BACKWARD_DECOMPRESS
|
||||
|
||||
; Backward decompression -- get and put bytes backward
|
||||
|
||||
getput:
|
||||
jsr getsrc
|
||||
putdst:
|
||||
LZSA_DST_LO = *+1
|
||||
LZSA_DST_HI = *+2
|
||||
sta $AAAA
|
||||
lda putdst+1
|
||||
beq putdst_adj_hi
|
||||
dec putdst+1
|
||||
rts
|
||||
|
||||
putdst_adj_hi:
|
||||
dec putdst+2
|
||||
dec putdst+1
|
||||
rts
|
||||
|
||||
getlargesrc:
|
||||
jsr getsrc ; grab low 8 bits
|
||||
tax ; move to X
|
||||
; fall through grab high 8 bits
|
||||
|
||||
getsrc:
|
||||
LZSA_SRC_LO = *+1
|
||||
LZSA_SRC_HI = *+2
|
||||
lda $AAAA
|
||||
pha
|
||||
lda getsrc+1
|
||||
beq getsrc_adj_hi
|
||||
dec getsrc+1
|
||||
pla
|
||||
rts
|
||||
|
||||
getsrc_adj_hi:
|
||||
dec getsrc+2
|
||||
dec getsrc+1
|
||||
pla
|
||||
rts
|
||||
|
||||
.else
|
||||
|
||||
; Forward decompression -- get and put bytes forward
|
||||
|
||||
getput:
|
||||
jsr getsrc
|
||||
putdst:
|
||||
LZSA_DST_LO = *+1
|
||||
LZSA_DST_HI = *+2
|
||||
sta $AAAA
|
||||
inc putdst+1
|
||||
beq putdst_adj_hi
|
||||
rts
|
||||
|
||||
putdst_adj_hi:
|
||||
inc putdst+2
|
||||
rts
|
||||
|
||||
getlargesrc:
|
||||
jsr getsrc ; grab low 8 bits
|
||||
tax ; move to X
|
||||
; fall through grab high 8 bits
|
||||
|
||||
getsrc:
|
||||
getsrc_smc:
|
||||
LZSA_SRC_LO = *+1
|
||||
LZSA_SRC_HI = *+2
|
||||
lda $AAAA
|
||||
inc getsrc+1
|
||||
beq getsrc_adj_hi
|
||||
rts
|
||||
|
||||
getsrc_adj_hi:
|
||||
inc getsrc+2
|
||||
rts
|
||||
.endif
|
||||
|
201
games/mist_hgr/gr_fast_clear.s
Normal file
201
games/mist_hgr/gr_fast_clear.s
Normal file
@ -0,0 +1,201 @@
|
||||
;clear_screens:
|
||||
; ;===================================
|
||||
; ; Clear top/bottom of page 0
|
||||
; ;===================================
|
||||
;
|
||||
; lda #$0
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_top
|
||||
; jsr clear_bottom
|
||||
|
||||
; ;===================================
|
||||
; ; Clear top/bottom of page 1
|
||||
; ;===================================
|
||||
;
|
||||
; lda #$4
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_top
|
||||
; jsr clear_bottom
|
||||
;
|
||||
; rts
|
||||
|
||||
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_top
|
||||
;=========================================================
|
||||
; clear DRAW_PAGE
|
||||
; original = 14,558 cycles(?) 15ms, 70Hz
|
||||
; OPTIMIZED MAX (page0,48rows): 45*120+4+6 = 5410 = 5.4ms 185Hz
|
||||
; (pageX,40rows): 50*120+4+6 = 6010 = 6.0ms 166Hz
|
||||
; 50*120+4+6+37 = 6055 = 6.0ms 166Hz
|
||||
clear_top:
|
||||
lda #0 ; 2
|
||||
clear_top_a:
|
||||
sta COLOR ; 3
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #4 ; 2
|
||||
sta __ctf+2 ; 3
|
||||
sta __ctf+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf+8 ; 3
|
||||
sta __ctf+11 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf2+2 ; 3
|
||||
sta __ctf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __ctf2+8 ; 3
|
||||
sta __ctf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
lda COLOR ; 3
|
||||
clear_top_fast_loop:
|
||||
__ctf:
|
||||
sta $400,Y ; 5
|
||||
sta $480,Y ; 5
|
||||
sta $500,Y ; 5
|
||||
sta $580,Y ; 5
|
||||
|
||||
cpy #80 ; 2
|
||||
bpl no_draw_bottom ; 2nt/3
|
||||
__ctf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
no_draw_bottom:
|
||||
|
||||
dey ; 2
|
||||
bpl clear_top_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
||||
|
||||
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_bottom
|
||||
;=========================================================
|
||||
; clear bottom of draw page
|
||||
|
||||
clear_bottom:
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #6 ; 2
|
||||
sta __cbf2+2 ; 3
|
||||
sta __cbf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __cbf2+8 ; 3
|
||||
sta __cbf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
lda #$a0 ; Normal Space ; 2
|
||||
clear_bottom_fast_loop:
|
||||
__cbf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
|
||||
dey ; 2
|
||||
cpy #80 ; 2
|
||||
bpl clear_bottom_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
||||
|
||||
|
||||
;clear_screens_notext:
|
||||
;===================================
|
||||
; Clear top/bottom of page 0
|
||||
;===================================
|
||||
|
||||
; lda #$0
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_all
|
||||
|
||||
;===================================
|
||||
; Clear top/bottom of page 1
|
||||
;===================================
|
||||
|
||||
; lda #$4
|
||||
; sta DRAW_PAGE
|
||||
; jsr clear_all
|
||||
|
||||
; rts
|
||||
|
||||
|
||||
clear_bottoms:
|
||||
|
||||
lda DRAW_PAGE
|
||||
pha
|
||||
|
||||
;===================================
|
||||
; Clear bottom of page 0
|
||||
;===================================
|
||||
|
||||
lda #$0
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
|
||||
;===================================
|
||||
; Clear bottom of page 1
|
||||
;===================================
|
||||
|
||||
lda #$4
|
||||
sta DRAW_PAGE
|
||||
jsr clear_bottom
|
||||
|
||||
pla
|
||||
sta DRAW_PAGE
|
||||
|
||||
rts
|
||||
|
||||
|
||||
;=========================================================
|
||||
; clear_all
|
||||
;=========================================================
|
||||
; clear 48 rows
|
||||
|
||||
clear_all:
|
||||
clc ; 2
|
||||
lda DRAW_PAGE ; 3
|
||||
|
||||
adc #4 ; 2
|
||||
sta __caf+2 ; 3
|
||||
sta __caf+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf+8 ; 3
|
||||
sta __caf+11 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf2+2 ; 3
|
||||
sta __caf2+5 ; 3
|
||||
adc #1 ; 2
|
||||
sta __caf2+8 ; 3
|
||||
sta __caf2+11 ; 3
|
||||
|
||||
|
||||
ldy #120 ; 2
|
||||
clear_all_color:
|
||||
lda #' '|$80 ; 2
|
||||
clear_all_fast_loop:
|
||||
__caf:
|
||||
sta $400,Y ; 5
|
||||
sta $480,Y ; 5
|
||||
sta $500,Y ; 5
|
||||
sta $580,Y ; 5
|
||||
__caf2:
|
||||
sta $600,Y ; 5
|
||||
sta $680,Y ; 5
|
||||
sta $700,Y ; 5
|
||||
sta $780,Y ; 5
|
||||
|
||||
dey ; 2
|
||||
bpl clear_all_fast_loop ; 2nt/3
|
||||
|
||||
rts ; 6
|
5
games/mist_hgr/gr_offsets.s
Normal file
5
games/mist_hgr/gr_offsets.s
Normal file
@ -0,0 +1,5 @@
|
||||
gr_offsets:
|
||||
.word $400,$480,$500,$580,$600,$680,$700,$780
|
||||
.word $428,$4a8,$528,$5a8,$628,$6a8,$728,$7a8
|
||||
.word $450,$4d0,$550,$5d0,$650,$6d0,$750,$7d0
|
||||
|
98
games/mist_hgr/hardware.inc
Normal file
98
games/mist_hgr/hardware.inc
Normal file
@ -0,0 +1,98 @@
|
||||
;; HARDWARE LOCATIONS
|
||||
|
||||
KEYPRESS = $C000
|
||||
KEYRESET = $C010
|
||||
|
||||
;; SOFT SWITCHES
|
||||
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
||||
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
||||
EIGHTYCOLOFF = $C00C
|
||||
EIGHTYCOLON = $C00D
|
||||
TBCOLOR = $C022 ; IIgs text foreground / background colors
|
||||
NEWVIDEO = $C029 ; IIgs graphics modes
|
||||
SPEAKER = $C030
|
||||
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color
|
||||
SET_GR = $C050
|
||||
SET_TEXT = $C051
|
||||
FULLGR = $C052
|
||||
TEXTGR = $C053
|
||||
PAGE0 = $C054
|
||||
PAGE1 = $C055
|
||||
LORES = $C056 ; Enable LORES graphics
|
||||
HIRES = $C057 ; Enable HIRES graphics
|
||||
AN3 = $C05E ; Annunciator 3
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PADDLE_BUTTON0 = $C061
|
||||
PADDL0 = $C064
|
||||
PTRIG = $C070
|
||||
|
||||
;; BASIC ROUTINES
|
||||
|
||||
NORMAL = $F273
|
||||
|
||||
;; MONITOR ROUTINES
|
||||
|
||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
||||
CLRSCR = $F832 ;; Clear low-res screen
|
||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
||||
SETCOL = $F864 ;; COLOR=A
|
||||
ROM_TEXT2COPY = $F962 ;; iigs
|
||||
TEXT = $FB36
|
||||
TABV = $FB5B ;; VTAB to A
|
||||
ROM_MACHINEID = $FBB3 ;; iigs
|
||||
BELL = $FBDD ;; ring the bell
|
||||
BASCALC = $FBC1 ;;
|
||||
VTAB = $FC22 ;; VTAB to CV
|
||||
HOME = $FC58 ;; Clear the text screen
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
CROUT1 = $FD8B
|
||||
SETINV = $FE80 ;; INVERSE
|
||||
SETNORM = $FE84 ;; NORMAL
|
||||
COUT = $FDED ;; output A to screen
|
||||
COUT1 = $FDF0 ;; output A to screen
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
COLOR_BLACK = 0
|
||||
COLOR_RED = 1
|
||||
COLOR_DARKBLUE = 2
|
||||
COLOR_PURPLE = 3
|
||||
COLOR_DARKGREEN = 4
|
||||
COLOR_GREY = 5
|
||||
COLOR_MEDIUMBLUE = 6
|
||||
COLOR_LIGHTBLUE = 7
|
||||
COLOR_BROWN = 8
|
||||
COLOR_ORANGE = 9
|
||||
COLOR_GREY2 = 10
|
||||
COLOR_PINK = 11
|
||||
COLOR_LIGHTGREEN = 12
|
||||
COLOR_YELLOW = 13
|
||||
COLOR_AQUA = 14
|
||||
COLOR_WHITE = 15
|
||||
|
||||
COLOR_BOTH_BLACK = $00
|
||||
COLOR_BOTH_RED = $11
|
||||
COLOR_BOTH_DARKBLUE = $22
|
||||
COLOR_BOTH_DARKGREEN = $44
|
||||
COLOR_BOTH_GREY = $55
|
||||
COLOR_BOTH_MEDIUMBLUE = $66
|
||||
COLOR_BOTH_LIGHTBLUE = $77
|
||||
COLOR_BOTH_BROWN = $88
|
||||
COLOR_BOTH_ORANGE = $99
|
||||
COLOR_BOTH_PINK = $BB
|
||||
COLOR_BOTH_LIGHTGREEN = $CC
|
||||
COLOR_BOTH_YELLOW = $DD
|
||||
COLOR_BOTH_AQUA = $EE
|
||||
COLOR_BOTH_WHITE = $FF
|
||||
|
46
games/mist_hgr/joystick.s
Normal file
46
games/mist_hgr/joystick.s
Normal file
@ -0,0 +1,46 @@
|
||||
; Oliver Schmidt
|
||||
; comp.sys.apple2.programmer
|
||||
|
||||
; Call with joystick number (0 or 1) in A.
|
||||
; Results are stored in value0 and value1.
|
||||
; UPPER_THRESHOLD is the paddle value you want to consider as "right enough" /
|
||||
; "down enough".
|
||||
|
||||
UPPER_THRESHOLD = 128
|
||||
|
||||
;PTRIG = $c070
|
||||
PADDL1 = $C065
|
||||
|
||||
handle_joystick:
|
||||
lda #0
|
||||
|
||||
; Read both paddles simultaneously
|
||||
asl ; Joystick number -> paddle number
|
||||
tax
|
||||
ldy #$00
|
||||
sty value0
|
||||
sty value1
|
||||
lda PTRIG ; Trigger paddles
|
||||
loop: lda PADDL0,x ; Read paddle (0 or 2)
|
||||
bmi set0 ; Cycles: 2 3
|
||||
nop ; Cycles: 2
|
||||
bpl nop0 ; Cycles: 3
|
||||
set0: sty value0 ; Cycles: 4
|
||||
nop0: ; - -
|
||||
; Cycles: 7 7
|
||||
lda PADDL1,x ; Read paddle (1 or 3)
|
||||
bmi set1 ; Cycles: 2 3
|
||||
nop ; Cycles: 2
|
||||
bpl nop1 ; Cycles: 3
|
||||
set1: sty value1 ; Cycles: 4
|
||||
nop1: ; - -
|
||||
; Cycles: 7 7
|
||||
iny
|
||||
cpy #UPPER_THRESHOLD+1
|
||||
bne loop
|
||||
|
||||
rts
|
||||
|
||||
value0: .byte $00
|
||||
value1: .byte $00
|
||||
|
435
games/mist_hgr/keyboard.s
Normal file
435
games/mist_hgr/keyboard.s
Normal file
@ -0,0 +1,435 @@
|
||||
|
||||
;==============================
|
||||
; Handle Keypress
|
||||
;==============================
|
||||
handle_keypress:
|
||||
|
||||
; first handle joystick
|
||||
lda JOYSTICK_ENABLED
|
||||
beq actually_handle_keypress
|
||||
|
||||
; only check joystick every-other frame
|
||||
lda FRAMEL
|
||||
and #$1
|
||||
beq actually_handle_keypress
|
||||
|
||||
check_button:
|
||||
lda PADDLE_BUTTON0
|
||||
bpl button_clear
|
||||
|
||||
lda JS_BUTTON_STATE
|
||||
bne js_check
|
||||
|
||||
lda #1
|
||||
sta JS_BUTTON_STATE
|
||||
lda #' '
|
||||
jmp check_sound
|
||||
|
||||
button_clear:
|
||||
lda #0
|
||||
sta JS_BUTTON_STATE
|
||||
|
||||
js_check:
|
||||
jsr handle_joystick
|
||||
|
||||
js_check_left:
|
||||
lda value0
|
||||
cmp #$20
|
||||
bcs js_check_right ; if less than 32, left
|
||||
lda #'A'
|
||||
bne check_sound
|
||||
|
||||
js_check_right:
|
||||
cmp #$40
|
||||
bcc js_check_up
|
||||
lda #'D'
|
||||
bne check_sound
|
||||
|
||||
js_check_up:
|
||||
lda value1
|
||||
cmp #$20
|
||||
bcs js_check_down
|
||||
lda #'W'
|
||||
|
||||
bne check_sound
|
||||
|
||||
js_check_down:
|
||||
cmp #$40
|
||||
bcc done_joystick
|
||||
lda #'S'
|
||||
bne check_sound
|
||||
|
||||
|
||||
done_joystick:
|
||||
|
||||
|
||||
|
||||
actually_handle_keypress:
|
||||
lda KEYPRESS
|
||||
bmi keypress
|
||||
|
||||
jmp no_keypress
|
||||
|
||||
keypress:
|
||||
and #$7f ; clear high bit
|
||||
cmp #' '
|
||||
beq check_sound ; make sure not to lose space
|
||||
and #$df ; convert uppercase to lower case
|
||||
|
||||
check_sound:
|
||||
cmp #$14 ; control-T
|
||||
bne check_joystick
|
||||
|
||||
lda SOUND_STATUS
|
||||
eor #SOUND_DISABLED
|
||||
sta SOUND_STATUS
|
||||
jmp done_keypress
|
||||
|
||||
; can't be ^J as that's the same as down
|
||||
check_joystick:
|
||||
; cmp #$10 ; control-P
|
||||
cmp #'J'
|
||||
bne check_load
|
||||
|
||||
lda JOYSTICK_ENABLED
|
||||
eor #1
|
||||
sta JOYSTICK_ENABLED
|
||||
jmp done_keypress
|
||||
|
||||
check_load:
|
||||
cmp #$C ; control-L
|
||||
bne check_save
|
||||
|
||||
jsr load_game
|
||||
jmp done_keypress
|
||||
|
||||
check_save:
|
||||
cmp #$13 ; control-S
|
||||
bne check_left
|
||||
|
||||
jsr save_game
|
||||
jmp done_keypress
|
||||
|
||||
check_left:
|
||||
cmp #'A'
|
||||
beq left_pressed
|
||||
cmp #8 ; left key
|
||||
bne check_right
|
||||
left_pressed:
|
||||
lda CURSOR_X ; if 41<x<$FB don't decrement
|
||||
cmp #41
|
||||
bcc do_dec_cursor_x
|
||||
cmp #$FB
|
||||
bcc done_left_pressed
|
||||
do_dec_cursor_x:
|
||||
dec CURSOR_X
|
||||
done_left_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
check_right:
|
||||
cmp #'D'
|
||||
beq right_pressed
|
||||
cmp #$15 ; right key
|
||||
bne check_up
|
||||
right_pressed:
|
||||
lda CURSOR_X ; if 40<x<$FA don't increment
|
||||
cmp #40
|
||||
bcc do_inc_cursor_x
|
||||
cmp #$FA
|
||||
bcc done_right_pressed
|
||||
do_inc_cursor_x:
|
||||
inc CURSOR_X
|
||||
done_right_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
check_up:
|
||||
cmp #'W'
|
||||
beq up_pressed
|
||||
cmp #$0B ; up key
|
||||
bne check_down
|
||||
up_pressed:
|
||||
lda CURSOR_Y ; if 49<y<$F0 don't decrement
|
||||
cmp #49
|
||||
bcc do_dec_cursor_y
|
||||
cmp #$F0
|
||||
bcc done_up_pressed
|
||||
do_dec_cursor_y:
|
||||
dec CURSOR_Y
|
||||
dec CURSOR_Y
|
||||
done_up_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
check_down:
|
||||
cmp #'S'
|
||||
beq down_pressed
|
||||
cmp #$0A
|
||||
bne check_return
|
||||
down_pressed:
|
||||
lda CURSOR_Y ; if 48<y<$EE don't decrement
|
||||
cmp #48
|
||||
bcc do_inc_cursor_y
|
||||
cmp #$EE
|
||||
bcc done_down_pressed
|
||||
do_inc_cursor_y:
|
||||
inc CURSOR_Y
|
||||
inc CURSOR_Y
|
||||
done_down_pressed:
|
||||
jmp done_keypress
|
||||
|
||||
check_return:
|
||||
cmp #' '
|
||||
beq return_pressed
|
||||
cmp #13
|
||||
bne done_keypress
|
||||
|
||||
return_pressed:
|
||||
|
||||
lda IN_SPECIAL
|
||||
beq not_special_return
|
||||
|
||||
special_return:
|
||||
jsr handle_special
|
||||
|
||||
; special case, don't make cursor visible
|
||||
jmp no_keypress
|
||||
|
||||
not_special_return:
|
||||
|
||||
lda IN_RIGHT
|
||||
beq not_right_return
|
||||
|
||||
cmp #1
|
||||
beq right_return
|
||||
|
||||
right_uturn:
|
||||
jsr uturn
|
||||
jmp no_keypress
|
||||
|
||||
right_return:
|
||||
jsr turn_right
|
||||
jmp no_keypress
|
||||
|
||||
not_right_return:
|
||||
|
||||
lda IN_LEFT
|
||||
beq not_left_return
|
||||
|
||||
cmp #1
|
||||
beq left_return
|
||||
left_uturn:
|
||||
jsr uturn
|
||||
jmp no_keypress
|
||||
|
||||
left_return:
|
||||
jsr turn_left
|
||||
jmp no_keypress
|
||||
|
||||
not_left_return:
|
||||
|
||||
jsr go_forward
|
||||
jmp no_keypress
|
||||
|
||||
done_keypress:
|
||||
lda #1 ; make cursor visible
|
||||
sta CURSOR_VISIBLE
|
||||
|
||||
no_keypress:
|
||||
bit KEYRESET
|
||||
rts
|
||||
|
||||
;============================
|
||||
; handle_special
|
||||
;===========================
|
||||
|
||||
; set up jump table fakery
|
||||
handle_special:
|
||||
ldy #LOCATION_SPECIAL_FUNC+1
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
pha
|
||||
dey
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
pha
|
||||
rts
|
||||
|
||||
|
||||
;=============================
|
||||
; change direction
|
||||
;=============================
|
||||
change_direction:
|
||||
|
||||
; load background
|
||||
lda DIRECTION
|
||||
bpl no_split
|
||||
|
||||
; split text/graphics
|
||||
bit TEXTGR
|
||||
|
||||
; also change sprite cutoff
|
||||
ldx #40
|
||||
; stx psc_smc1+1
|
||||
;; stx psc_smc2+1
|
||||
|
||||
jmp done_split
|
||||
no_split:
|
||||
bit FULLGR
|
||||
|
||||
; also change sprite cutoff
|
||||
ldx #48
|
||||
; stx psc_smc1+1
|
||||
;; stx psc_smc2+1
|
||||
|
||||
done_split:
|
||||
and #$f ; mask off special flags
|
||||
tay
|
||||
lda log2_table,Y
|
||||
asl
|
||||
clc
|
||||
adc #LOCATION_NORTH_BG
|
||||
tay
|
||||
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta LZSA_SRC_LO
|
||||
iny
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta LZSA_SRC_HI
|
||||
lda #$c ; load to page $c00
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
rts
|
||||
|
||||
|
||||
;=============================
|
||||
; change location
|
||||
;=============================
|
||||
change_location:
|
||||
; reset graphics
|
||||
bit SET_GR
|
||||
|
||||
; reset pointer to not visible, centered
|
||||
lda #0
|
||||
sta ANIMATE_FRAME
|
||||
sta CURSOR_VISIBLE
|
||||
lda #20
|
||||
sta CURSOR_X
|
||||
sta CURSOR_Y
|
||||
|
||||
lda LOCATION
|
||||
asl
|
||||
tay
|
||||
|
||||
lda (LOCATIONS_L),Y
|
||||
sta LOCATION_STRUCT_L
|
||||
iny
|
||||
lda (LOCATIONS_L),Y
|
||||
sta LOCATION_STRUCT_H
|
||||
|
||||
jsr change_direction
|
||||
|
||||
rts
|
||||
|
||||
;==========================
|
||||
; go forward
|
||||
;===========================
|
||||
go_forward:
|
||||
|
||||
; update new location
|
||||
|
||||
lda DIRECTION
|
||||
and #$f
|
||||
tay
|
||||
lda log2_table,Y
|
||||
clc
|
||||
adc #LOCATION_NORTH_EXIT
|
||||
tay
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
|
||||
cmp #$ff
|
||||
beq cant_go_forward
|
||||
|
||||
sta LOCATION
|
||||
|
||||
; update new direction
|
||||
|
||||
lda DIRECTION
|
||||
and #$f
|
||||
tay
|
||||
lda log2_table,Y
|
||||
clc
|
||||
adc #LOCATION_NORTH_EXIT_DIR
|
||||
tay
|
||||
lda (LOCATION_STRUCT_L),Y
|
||||
sta DIRECTION
|
||||
|
||||
jsr change_location
|
||||
cant_go_forward:
|
||||
rts
|
||||
|
||||
;==========================
|
||||
; turn left
|
||||
;===========================
|
||||
turn_left:
|
||||
|
||||
lda DIRECTION
|
||||
and #$f
|
||||
cmp #DIRECTION_N
|
||||
beq go_west
|
||||
cmp #DIRECTION_W
|
||||
beq go_south
|
||||
cmp #DIRECTION_S
|
||||
beq go_east
|
||||
bne go_north
|
||||
|
||||
;==========================
|
||||
; turn right
|
||||
;===========================
|
||||
turn_right:
|
||||
lda DIRECTION
|
||||
and #$f
|
||||
cmp #DIRECTION_N
|
||||
beq go_east
|
||||
cmp #DIRECTION_E
|
||||
beq go_south
|
||||
cmp #DIRECTION_S
|
||||
beq go_west
|
||||
bne go_north
|
||||
|
||||
;==========================
|
||||
; uturn
|
||||
;===========================
|
||||
uturn:
|
||||
|
||||
lda DIRECTION
|
||||
and #$f
|
||||
cmp #DIRECTION_N
|
||||
beq go_south
|
||||
cmp #DIRECTION_W
|
||||
beq go_east
|
||||
cmp #DIRECTION_S
|
||||
beq go_north
|
||||
bne go_west
|
||||
|
||||
go_north:
|
||||
lda #DIRECTION_N
|
||||
jmp done_turning
|
||||
go_east:
|
||||
lda #DIRECTION_E
|
||||
jmp done_turning
|
||||
go_south:
|
||||
lda #DIRECTION_S
|
||||
jmp done_turning
|
||||
go_west:
|
||||
lda #DIRECTION_W
|
||||
jmp done_turning
|
||||
|
||||
|
||||
done_turning:
|
||||
sta DIRECTION
|
||||
jsr change_direction
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
34
games/mist_hgr/linking_noise.s
Normal file
34
games/mist_hgr/linking_noise.s
Normal file
@ -0,0 +1,34 @@
|
||||
linking_noise = $d000
|
||||
LINKING_NOISE_LENGTH = 43
|
||||
|
||||
;============================
|
||||
; play the linking noise
|
||||
;============================
|
||||
play_link_noise:
|
||||
lda SOUND_STATUS
|
||||
bmi done_link_noise
|
||||
|
||||
; only avail if language card
|
||||
and #SOUND_IN_LC
|
||||
beq done_link_noise
|
||||
|
||||
; switch in language card
|
||||
; read RAM, no write, $d000 bank 1
|
||||
|
||||
bit $C088
|
||||
|
||||
; call the btc player
|
||||
|
||||
lda #<linking_noise
|
||||
sta BTC_L
|
||||
lda #>linking_noise
|
||||
sta BTC_H
|
||||
ldx #LINKING_NOISE_LENGTH ; 45 pages long???
|
||||
jsr play_audio
|
||||
|
||||
; restore rom, no write, $d000 bank 1
|
||||
|
||||
bit $c08A
|
||||
|
||||
done_link_noise:
|
||||
rts
|
203
games/mist_hgr/loadstore.s
Normal file
203
games/mist_hgr/loadstore.s
Normal file
@ -0,0 +1,203 @@
|
||||
|
||||
;===================================
|
||||
;===================================
|
||||
; load the game
|
||||
;===================================
|
||||
;===================================
|
||||
load_game:
|
||||
|
||||
lda #<load_message
|
||||
sta OUTL
|
||||
lda #>load_message
|
||||
sta OUTH
|
||||
|
||||
jsr confirm_slot
|
||||
|
||||
bcs done_load
|
||||
|
||||
; actually load it
|
||||
clc
|
||||
adc #LOAD_SAVE1
|
||||
sta WHICH_LOAD
|
||||
|
||||
jsr load_file
|
||||
|
||||
; copy to zero page
|
||||
|
||||
ldx #0
|
||||
load_loop:
|
||||
lda $e00,X
|
||||
sta WHICH_LOAD,X
|
||||
inx
|
||||
cpx #(END_OF_SAVE-WHICH_LOAD+1)
|
||||
bne load_loop
|
||||
|
||||
lda #$ff
|
||||
sta LEVEL_OVER
|
||||
|
||||
done_load:
|
||||
|
||||
bit SET_GR ; turn graphics back on
|
||||
|
||||
rts
|
||||
|
||||
;===================================
|
||||
;===================================
|
||||
; save the game
|
||||
;===================================
|
||||
;===================================
|
||||
|
||||
save_game:
|
||||
|
||||
lda #<save_message
|
||||
sta OUTL
|
||||
lda #>save_message
|
||||
sta OUTH
|
||||
|
||||
jsr confirm_slot
|
||||
|
||||
bcs done_save
|
||||
|
||||
pha
|
||||
|
||||
|
||||
;========================
|
||||
; actually save
|
||||
actually_save:
|
||||
|
||||
;===============================
|
||||
; first load something from
|
||||
; disk1/track0 to seek the head there
|
||||
|
||||
lda WHICH_LOAD
|
||||
pha
|
||||
|
||||
lda #LOAD_SAVE1
|
||||
sta WHICH_LOAD
|
||||
jsr load_file
|
||||
|
||||
pla
|
||||
sta WHICH_LOAD
|
||||
|
||||
; copy save data to $d00
|
||||
|
||||
ldx #0
|
||||
copy_loop:
|
||||
lda WHICH_LOAD,X
|
||||
sta $d00,X
|
||||
inx
|
||||
cpx #(END_OF_SAVE-WHICH_LOAD+1)
|
||||
bne copy_loop
|
||||
|
||||
; spin up disk
|
||||
jsr driveon
|
||||
|
||||
; actually save it
|
||||
pla
|
||||
clc
|
||||
adc #11
|
||||
sta requested_sector+1
|
||||
|
||||
jsr sector_write
|
||||
|
||||
jsr driveoff
|
||||
|
||||
done_save:
|
||||
|
||||
jsr change_location ; restore graphics
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;================================
|
||||
; confirm and get slot number
|
||||
;================================
|
||||
; call with first message in OUTL/OUTH
|
||||
; return: carry set if skipping
|
||||
|
||||
confirm_slot:
|
||||
|
||||
bit KEYRESET ; clear keyboard buffer
|
||||
|
||||
;===============================
|
||||
; print "are you sure" message
|
||||
|
||||
bit SET_TEXT ; set text mode
|
||||
|
||||
lda #' '|$80
|
||||
sta clear_all_color+1
|
||||
jsr clear_all ; clear screen
|
||||
|
||||
jsr move_and_print
|
||||
|
||||
lda #<are_you_sure
|
||||
sta OUTL
|
||||
lda #>are_you_sure
|
||||
sta OUTH
|
||||
jsr move_and_print
|
||||
|
||||
; jsr page_flip
|
||||
|
||||
wait_confirmation:
|
||||
lda KEYPRESS
|
||||
bpl wait_confirmation
|
||||
|
||||
bit KEYRESET ; clear keypress
|
||||
|
||||
and #$7f
|
||||
cmp #'Y'
|
||||
bne dont_do_it
|
||||
|
||||
;===============================
|
||||
; print "Which one?"
|
||||
|
||||
jsr clear_all ; clear screen
|
||||
|
||||
lda #<which_message
|
||||
sta OUTL
|
||||
lda #>which_message
|
||||
sta OUTH
|
||||
jsr move_and_print
|
||||
|
||||
; jsr page_flip
|
||||
|
||||
which_slot:
|
||||
lda KEYPRESS
|
||||
bpl which_slot
|
||||
|
||||
bit KEYRESET ; clear keypress
|
||||
|
||||
and #$7f
|
||||
sec
|
||||
sbc #'1'
|
||||
|
||||
bmi dont_do_it
|
||||
cmp #5
|
||||
bcs dont_do_it
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
dont_do_it:
|
||||
sec
|
||||
rts
|
||||
|
||||
|
||||
which_message:
|
||||
.byte 9,5,"WHICH SLOT (1-5)?",0
|
||||
|
||||
load_message:
|
||||
.byte 10,5,"LOAD GAME FROM DISK",0
|
||||
|
||||
save_message:
|
||||
.byte 11,5,"SAVE GAME TO DISK",0
|
||||
|
||||
are_you_sure:
|
||||
.byte 10,7,"ARE YOU SURE? (Y/N)",0
|
||||
|
||||
;save_filename:
|
||||
;.byte "SAVE0",0
|
5
games/mist_hgr/log_table.s
Normal file
5
games/mist_hgr/log_table.s
Normal file
@ -0,0 +1,5 @@
|
||||
log2_table:
|
||||
; 0 1 2 3 4 5 6 7 8
|
||||
.byte 0,0,1,1,2,2,2,2,3
|
||||
|
||||
|
676
games/mist_hgr/mist_title.s
Normal file
676
games/mist_hgr/mist_title.s
Normal file
@ -0,0 +1,676 @@
|
||||
; Mist Title
|
||||
|
||||
; loads a HGR version of the title
|
||||
; also handles the initial link to mist
|
||||
|
||||
; by deater (Vince Weaver) <vince@deater.net>
|
||||
|
||||
; Zero Page
|
||||
.include "zp.inc"
|
||||
.include "hardware.inc"
|
||||
.include "common_defines.inc"
|
||||
.include "common_routines.inc"
|
||||
|
||||
mist_start:
|
||||
|
||||
;===================
|
||||
; detect model
|
||||
;===================
|
||||
|
||||
jsr detect_appleii_model
|
||||
|
||||
;===================
|
||||
; machine workarounds
|
||||
;===================
|
||||
; mostly IIgs
|
||||
;===================
|
||||
; thanks to 4am who provided this code from Total Replay
|
||||
|
||||
lda ROM_MACHINEID
|
||||
cmp #$06
|
||||
bne not_a_iigs
|
||||
sec
|
||||
jsr $FE1F ; check for IIgs
|
||||
bcs not_a_iigs
|
||||
|
||||
; gr/text page2 handling broken on early IIgs models
|
||||
; this enables the workaround
|
||||
|
||||
jsr ROM_TEXT2COPY ; set alternate display mode on IIgs
|
||||
cli ; enable VBL interrupts
|
||||
|
||||
; also set background color to black instead of blue
|
||||
lda NEWVIDEO
|
||||
and #%00011111 ; bit 7 = 0 -> IIgs Apple II-compat video modes
|
||||
; bit 6 = 0 -> IIgs 128K memory map same as IIe
|
||||
; bit 5 = 0 -> IIgs DHGR is color, not mono
|
||||
; bits 0-4 unchanged
|
||||
sta NEWVIDEO
|
||||
lda #$F0
|
||||
sta TBCOLOR ; white text on black background
|
||||
lda #$00
|
||||
sta CLOCKCTL ; black border
|
||||
sta CLOCKCTL ; set twice for VidHD
|
||||
|
||||
not_a_iigs:
|
||||
|
||||
;===================
|
||||
; print config
|
||||
;===================
|
||||
|
||||
; print non-inverse
|
||||
jsr set_normal
|
||||
|
||||
lda #<config_string
|
||||
sta OUTL
|
||||
lda #>config_string
|
||||
sta OUTH
|
||||
|
||||
jsr move_and_print
|
||||
|
||||
; print detected model
|
||||
|
||||
lda APPLEII_MODEL
|
||||
ora #$80
|
||||
sta $7d0+8 ; 23,8
|
||||
|
||||
; if GS print the extra S
|
||||
cmp #'G'|$80
|
||||
bne not_gs
|
||||
lda #'S'|$80
|
||||
sta $7d0+9
|
||||
|
||||
not_gs:
|
||||
|
||||
;===================================
|
||||
; detect if we have a language card
|
||||
; and load sound into it if possible
|
||||
;===================================
|
||||
|
||||
lda #0
|
||||
sta SOUND_STATUS ; clear out, sound enabled
|
||||
|
||||
jsr detect_language_card
|
||||
bcs no_language_card
|
||||
|
||||
yes_language_card:
|
||||
; update status
|
||||
lda #'6'|$80
|
||||
sta $7d0+11 ; 23,11
|
||||
lda #'4'|$80
|
||||
sta $7d0+12 ; 23,12
|
||||
|
||||
; update sound status
|
||||
lda SOUND_STATUS
|
||||
ora #SOUND_IN_LC
|
||||
sta SOUND_STATUS
|
||||
|
||||
; load sounds into LC
|
||||
|
||||
; read ram, write ram, use $d000 bank1
|
||||
bit $C08B
|
||||
bit $C08B
|
||||
|
||||
lda #<linking_noise_compressed
|
||||
sta getsrc_smc+1
|
||||
lda #>linking_noise_compressed
|
||||
sta getsrc_smc+2
|
||||
|
||||
lda #$D0 ; decompress to $D000
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
blah:
|
||||
|
||||
; read rom, nowrite, use $d000 bank1
|
||||
bit $C08A
|
||||
|
||||
no_language_card:
|
||||
|
||||
;===================================
|
||||
; Setup Mockingboard
|
||||
;===================================
|
||||
|
||||
PT3_ENABLE_APPLE_IIC = 1
|
||||
|
||||
lda #0
|
||||
sta DONE_PLAYING
|
||||
sta LOOP
|
||||
|
||||
; detect mockingboard
|
||||
jsr mockingboard_detect
|
||||
|
||||
bcc mockingboard_notfound
|
||||
|
||||
mockingboard_found:
|
||||
|
||||
; print detected location
|
||||
|
||||
lda MB_ADDR_H ; $C4 = 4, want $B4 1100 -> 1011
|
||||
and #$87
|
||||
ora #$30
|
||||
|
||||
sta $7d0+39 ; 23,39
|
||||
|
||||
jsr mockingboard_patch ; patch to work in slots other than 4?
|
||||
|
||||
lda SOUND_STATUS
|
||||
ora #SOUND_MOCKINGBOARD
|
||||
sta SOUND_STATUS
|
||||
|
||||
;=======================
|
||||
; Set up 50Hz interrupt
|
||||
;========================
|
||||
|
||||
jsr mockingboard_init
|
||||
jsr mockingboard_setup_interrupt
|
||||
|
||||
;============================
|
||||
; Init the Mockingboard
|
||||
;============================
|
||||
|
||||
jsr reset_ay_both
|
||||
jsr clear_ay_both
|
||||
|
||||
;==================
|
||||
; init song
|
||||
;==================
|
||||
|
||||
jsr pt3_init_song
|
||||
|
||||
jmp done_setup_sound
|
||||
|
||||
|
||||
mockingboard_notfound:
|
||||
|
||||
|
||||
done_setup_sound:
|
||||
|
||||
|
||||
;==========================
|
||||
; wait a bit at text title
|
||||
;==========================
|
||||
|
||||
lda #$40
|
||||
jsr wait_a_bit
|
||||
|
||||
;===================
|
||||
; setup HGR
|
||||
;===================
|
||||
|
||||
; we could just call HGR2 here instead?
|
||||
|
||||
bit SET_GR
|
||||
bit PAGE0
|
||||
bit HIRES
|
||||
bit FULLGR
|
||||
|
||||
;===================
|
||||
; setup location
|
||||
;===================
|
||||
|
||||
lda #<locations
|
||||
sta LOCATIONS_L
|
||||
lda #>locations
|
||||
sta LOCATIONS_H
|
||||
|
||||
;===================
|
||||
; Load hires graphics
|
||||
;===================
|
||||
reload_everything:
|
||||
|
||||
lda #<file
|
||||
sta getsrc_smc+1 ; LZSA_SRC_LO
|
||||
lda #>file
|
||||
sta getsrc_smc+2 ; LZSA_SRC_HI
|
||||
|
||||
lda #$20
|
||||
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
;===================================
|
||||
; Do Intro Sequence
|
||||
;===================================
|
||||
|
||||
; SKIP: broderbund logo (w music)
|
||||
; SKIP: cyan logo (with cyan theme)
|
||||
|
||||
|
||||
; wait a bit at MYST screen
|
||||
|
||||
lda #50
|
||||
jsr wait_a_bit
|
||||
|
||||
|
||||
|
||||
;===================
|
||||
; init screen
|
||||
;===================
|
||||
|
||||
jsr TEXT
|
||||
jsr HOME
|
||||
bit KEYRESET
|
||||
|
||||
bit SET_GR
|
||||
bit PAGE0
|
||||
bit LORES
|
||||
bit FULLGR
|
||||
|
||||
lda #0
|
||||
sta DRAW_PAGE
|
||||
|
||||
;===================================
|
||||
; M Y S T letters
|
||||
;===================================
|
||||
; missing the dramatic music
|
||||
; they should spin in, and letters are made of fire
|
||||
|
||||
; M
|
||||
ldx #<m_title_m_lzsa
|
||||
ldy #>m_title_m_lzsa
|
||||
lda #4
|
||||
jsr draw_and_wait
|
||||
|
||||
; Y
|
||||
ldx #<m_title_y_lzsa
|
||||
ldy #>m_title_y_lzsa
|
||||
lda #4
|
||||
jsr draw_and_wait
|
||||
|
||||
; S
|
||||
ldx #<m_title_s_lzsa
|
||||
ldy #>m_title_s_lzsa
|
||||
lda #4
|
||||
jsr draw_and_wait
|
||||
|
||||
; T
|
||||
ldx #<m_title_t_lzsa
|
||||
ldy #>m_title_t_lzsa
|
||||
lda #25
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; FISSURE: I realized the moment...
|
||||
;===================================
|
||||
; touch linking book as fissure pulses
|
||||
|
||||
bit TEXTGR ; split text/gr
|
||||
|
||||
ldx #<fissure_lzsa
|
||||
ldy #>fissure_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
|
||||
;===================================
|
||||
; FISSURE_BOOK_SMALL: starry expanse...
|
||||
;===================================
|
||||
|
||||
ldx #<fissure_book_small_lzsa
|
||||
ldy #>fissure_book_small_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; FISSURE_BOOK_BIG: I have tried to speculate...
|
||||
;===================================
|
||||
|
||||
ldx #<fissure_book_big_lzsa
|
||||
ldy #>fissure_book_big_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; FALLING_LEFT: Still, the question...
|
||||
;===================================
|
||||
|
||||
ldx #<falling_left_lzsa
|
||||
ldy #>falling_left_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; FALLING_RIGHT: I know my aprehensions...
|
||||
;===================================
|
||||
|
||||
ldx #<falling_right_lzsa
|
||||
ldy #>falling_right_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; BOOK_AIR : The ending...
|
||||
;===================================
|
||||
|
||||
ldx #<book_air_lzsa
|
||||
ldy #>book_air_lzsa
|
||||
lda #15
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; BOOK_SPARKS : has not yet...
|
||||
;===================================
|
||||
|
||||
ldx #<book_sparks_lzsa
|
||||
ldy #>book_sparks_lzsa
|
||||
lda #15
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; BOOK_GLOW : been written...
|
||||
;===================================
|
||||
|
||||
ldx #<book_glow_lzsa
|
||||
ldy #>book_glow_lzsa
|
||||
lda #15
|
||||
jsr draw_and_wait
|
||||
|
||||
;===================================
|
||||
; BOOK_GROUND :
|
||||
;===================================
|
||||
|
||||
ldx #<book_ground_lzsa
|
||||
ldy #>book_ground_lzsa
|
||||
lda #50
|
||||
jsr draw_and_wait
|
||||
|
||||
|
||||
done_intro:
|
||||
|
||||
; restore to full screen (no text)
|
||||
|
||||
bit FULLGR
|
||||
bit LORES
|
||||
|
||||
; init cursor
|
||||
|
||||
lda #20
|
||||
sta CURSOR_X
|
||||
sta CURSOR_Y
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
|
||||
;============================
|
||||
; init vars
|
||||
|
||||
jsr init_state
|
||||
|
||||
;============================
|
||||
; set up initial location
|
||||
|
||||
lda #TITLE_BOOK_GROUND
|
||||
sta LOCATION ; start at first room
|
||||
|
||||
lda #DIRECTION_N
|
||||
sta DIRECTION
|
||||
|
||||
jsr change_location
|
||||
|
||||
lda #1
|
||||
sta CURSOR_VISIBLE ; visible at first
|
||||
|
||||
game_loop:
|
||||
;=================
|
||||
; reset things
|
||||
;=================
|
||||
|
||||
lda #0
|
||||
sta IN_SPECIAL
|
||||
sta IN_RIGHT
|
||||
sta IN_LEFT
|
||||
|
||||
;====================================
|
||||
; copy background to current page
|
||||
;====================================
|
||||
|
||||
jsr gr_copy_to_current
|
||||
|
||||
;====================================
|
||||
; handle special-case forground logic
|
||||
;====================================
|
||||
|
||||
; handle animated linking book
|
||||
lda LOCATION
|
||||
cmp #TITLE_BOOK_OPEN
|
||||
bne nothing_special
|
||||
|
||||
lda ANIMATE_FRAME
|
||||
cmp #32 ; if done animating, skip
|
||||
bcs nothing_special
|
||||
|
||||
animate_ocean:
|
||||
cmp #26
|
||||
bcs animate_actual
|
||||
|
||||
and #1
|
||||
beq even_ocean
|
||||
|
||||
odd_ocean:
|
||||
lda #<dock_animate_sprite1
|
||||
sta INL
|
||||
lda #>dock_animate_sprite1
|
||||
jmp draw_animation
|
||||
even_ocean:
|
||||
lda #<dock_animate_sprite2
|
||||
sta INL
|
||||
lda #>dock_animate_sprite2
|
||||
jmp draw_animation
|
||||
|
||||
animate_actual:
|
||||
sec
|
||||
sbc #26
|
||||
asl
|
||||
tay
|
||||
|
||||
; slow down animation
|
||||
lda #$3f
|
||||
sta if_smc+1
|
||||
|
||||
lda dock_animation_sprites,Y
|
||||
sta INL
|
||||
lda dock_animation_sprites+1,Y
|
||||
|
||||
draw_animation:
|
||||
|
||||
sta INH
|
||||
lda #24
|
||||
sta XPOS
|
||||
lda #12
|
||||
sta YPOS
|
||||
jsr put_sprite_crop
|
||||
|
||||
inc_frame:
|
||||
lda FRAMEL
|
||||
if_smc:
|
||||
and #$f
|
||||
bne done_inc_frame
|
||||
|
||||
inc ANIMATE_FRAME
|
||||
|
||||
done_inc_frame:
|
||||
|
||||
nothing_special:
|
||||
|
||||
;====================================
|
||||
; draw pointer
|
||||
;====================================
|
||||
|
||||
jsr draw_pointer
|
||||
|
||||
;====================================
|
||||
; page flip
|
||||
;====================================
|
||||
|
||||
jsr page_flip
|
||||
|
||||
;====================================
|
||||
; handle keypress/joystick
|
||||
;====================================
|
||||
|
||||
jsr handle_keypress
|
||||
|
||||
|
||||
;====================================
|
||||
; inc frame count
|
||||
;====================================
|
||||
|
||||
inc FRAMEL
|
||||
bne room_frame_no_oflo
|
||||
inc FRAMEH
|
||||
room_frame_no_oflo:
|
||||
|
||||
;====================================
|
||||
; check level over
|
||||
;====================================
|
||||
|
||||
lda LEVEL_OVER
|
||||
bne really_exit
|
||||
jmp game_loop
|
||||
|
||||
really_exit:
|
||||
jmp end_level
|
||||
|
||||
|
||||
;==========================
|
||||
; includes
|
||||
;==========================
|
||||
|
||||
|
||||
.include "init_state.s"
|
||||
|
||||
.include "graphics_title/title_graphics.inc"
|
||||
|
||||
.include "lc_detect.s"
|
||||
|
||||
; puzzles
|
||||
|
||||
; linking books
|
||||
|
||||
.include "link_book_mist_dock.s"
|
||||
|
||||
.include "common_sprites.inc"
|
||||
|
||||
.include "leveldata_title.inc"
|
||||
|
||||
|
||||
; pt3 player
|
||||
.include "pt3_lib_detect_model.s"
|
||||
.include "pt3_lib_core.s"
|
||||
.include "pt3_lib_init.s"
|
||||
.include "pt3_lib_mockingboard_setup.s"
|
||||
.include "interrupt_handler.s"
|
||||
.include "pt3_lib_mockingboard_detect.s"
|
||||
|
||||
|
||||
|
||||
.include "wait_a_bit.s"
|
||||
|
||||
|
||||
file:
|
||||
.incbin "graphics_title_hgr/mist_title.lzsa"
|
||||
|
||||
linking_noise_compressed:
|
||||
.incbin "audio/link_noise.btc.lzsa"
|
||||
|
||||
|
||||
;====================================
|
||||
; draw a screen and wait
|
||||
;====================================
|
||||
; X = low of lzsa
|
||||
; Y = high of lzsa
|
||||
; A = pause delay
|
||||
|
||||
draw_and_wait:
|
||||
pha
|
||||
stx getsrc_smc+1
|
||||
sty getsrc_smc+2
|
||||
lda #$c ; load to page $c00
|
||||
jsr decompress_lzsa2_fast
|
||||
|
||||
jsr gr_copy_to_current
|
||||
|
||||
jsr page_flip
|
||||
pla
|
||||
jsr wait_a_bit
|
||||
rts
|
||||
|
||||
|
||||
get_mist_book:
|
||||
|
||||
; play music if mockingboard
|
||||
|
||||
lda SOUND_STATUS
|
||||
and #SOUND_MOCKINGBOARD
|
||||
beq skip_start_music
|
||||
cli
|
||||
skip_start_music:
|
||||
|
||||
lda #TITLE_BOOK_CLOSED
|
||||
sta LOCATION
|
||||
jmp change_location
|
||||
|
||||
|
||||
PT3_LOC = theme_music
|
||||
|
||||
.align $100
|
||||
theme_music:
|
||||
.incbin "audio/theme.pt3"
|
||||
|
||||
|
||||
|
||||
|
||||
.if 0
|
||||
|
||||
|
||||
; click on book, plays theme
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; FISSURE: I realized the momemnt
|
||||
|
||||
; 1 2 3
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte " I REALIZED, THE MOMENT I FELL INTO THE"
|
||||
.byte " FISSURE, THAT THE BOOK WOULD NOT BE"
|
||||
.byte " DESTROYED AS I HAD PLANNED."
|
||||
|
||||
; FISSURE_BOOK: _starry expanse (book tiny)
|
||||
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte " IT CONTINUED FALLING INTO THAT STARRY"
|
||||
.byte " EXPANSE OF WHICH I HAD ONLY A"
|
||||
.byte " FLEETING GLIMPSE."
|
||||
|
||||
; FALLING_BOOK: (book big) falling by starscape (I have tried to speculate)
|
||||
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte "I HAVE TRIED TO SPECULATE WHERE IT MIGHT"
|
||||
.byte " HAVE LANDED, BUT I MUST ADMIT,"
|
||||
.byte " HOWEVER-- SUCH CONJECTURE IS FUTILE."
|
||||
|
||||
; FALLING_LEFT (still, the question) /(left)
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte " STILL, THE QUESTION ABOUT WHOSE HANDS"
|
||||
.byte " MIGHT SOMEDAY HOLD MY MYST BOOK ARE"
|
||||
.byte " UNSETTLING TO ME."
|
||||
|
||||
; FALLING_RIGHT I know my aprehensions (right)
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte " I KNOW THAT MY APPREHENSIONS MIGHT"
|
||||
.byte " NEVER BE ALLAYED, AND SO I CLOSE,"
|
||||
.byte " REALIZING THAT PERHAPS,"
|
||||
|
||||
; BOOK_GROUND the ending has not yet been written (falls, blue sparks)
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte " THE ENDING HAS NOT YET BEEN WRITTEN"
|
||||
|
||||
|
||||
.endif
|
||||
|
||||
config_string:
|
||||
; 0123456789012345678901234567890123456789
|
||||
.byte 0,23,"APPLE II?, 48K RAM, MOCKINGBOARD: SLOT ?",0
|
||||
; MOCKINGBOARD: NONE
|
244
games/mist_hgr/qboot_sector.s
Normal file
244
games/mist_hgr/qboot_sector.s
Normal file
@ -0,0 +1,244 @@
|
||||
; fast seek/multi-read
|
||||
; copyright (c) Peter Ferrie 2015-16
|
||||
|
||||
; Paramaters for loading QLOAD
|
||||
|
||||
sectors = 14 ; user-defined
|
||||
firsttrk = 1 ; user-defined, first track to read
|
||||
firstsec = 0 ; user-defined, first sector to read
|
||||
address = $12 ; user-defined
|
||||
entry = $1200 ; user-defined
|
||||
version = 1
|
||||
|
||||
;memory usage:
|
||||
;256 bytes ($200-2ff) static table
|
||||
grouped = $200
|
||||
|
||||
; stay away from interrupt vectors at $3fe !!!
|
||||
|
||||
;106 bytes ($300-369) static table
|
||||
preshift = $300
|
||||
zvalue = $fd ; only during init
|
||||
znibble = $fe ; only during init
|
||||
zmask = $ff ; only during init
|
||||
|
||||
WHICH_SLOT = $DA
|
||||
|
||||
; $26/$27 sector read location (ROM)
|
||||
; $3D sector number (ROM)
|
||||
|
||||
|
||||
; at entry (at least on AppleWin) A=1, X=60 (slot<<4), Y=0
|
||||
; qkumba says cffa cards leave Y at $10
|
||||
; 26/27 = 00/09
|
||||
; 3D = 1
|
||||
|
||||
; For Disk II booting, the firmware loads track0/sector0
|
||||
; to $800 and then jumps to $801
|
||||
|
||||
.org $800
|
||||
.byte 1 ; number of sectors for ROM to load
|
||||
|
||||
boot_entry:
|
||||
; this code loads two sectors up to $10/$11
|
||||
|
||||
; assume A=1 coming in here
|
||||
|
||||
lsr ; check sector number
|
||||
; A=0, carry=1
|
||||
tay ; Y=0
|
||||
adc #$0f ; A=$10 (destintation)
|
||||
|
||||
sta $27 ; set or update address as needed
|
||||
cmp #$12
|
||||
; 10 11 12 (1 1 1)
|
||||
; be, bf, c0 (1011 1011 1100)
|
||||
; so if hit $c000 we are done
|
||||
|
||||
beq done_load_2 ; branch if loaded 2
|
||||
|
||||
inc $3d ; increment sector (faster to find)
|
||||
|
||||
; call to the read routine in proper slot
|
||||
; using rts to jump indirect to
|
||||
; $CX5C
|
||||
|
||||
; this routine reads sector in $3D on track in $41
|
||||
; to address in $26/$27
|
||||
; when it's done it jumps back to $801
|
||||
stx WHICH_SLOT ; save for later
|
||||
|
||||
txa ; x is slot# << 4
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$c0 ; slot to PROM base
|
||||
pha
|
||||
lda #$5b ;read-1
|
||||
pha
|
||||
rts ; return used to call $CX5C in DISK II ROM
|
||||
|
||||
done_load_2:
|
||||
|
||||
; patch self modifying code for Q6L read
|
||||
|
||||
txa
|
||||
ora #$8c ; slot to Q6L
|
||||
; Q6L?
|
||||
; if slot 6, after this A is $EC
|
||||
; Y should be 2 here
|
||||
patch_loop:
|
||||
iny
|
||||
ldx patchtbl-3, Y
|
||||
sta code_begin, X ; replace placeholders with Q6L
|
||||
; BE02 = EC? lda c0ec
|
||||
; so sets to c08c (Q6L)
|
||||
|
||||
bne patch_loop
|
||||
|
||||
; patch self-modifying code for turning motor off
|
||||
|
||||
and #$f8 ; MOTOROFF (c088) -> c0e8
|
||||
sta slotpatch7+1
|
||||
|
||||
; patch self-modifying code for turning motor on
|
||||
clc
|
||||
adc #1 ; MOTORON (c089) -> c0e9
|
||||
sta slotpatch9+1
|
||||
|
||||
; patch self-modifying code for phase off
|
||||
|
||||
eor #9 ; PHASEOFF (c080)
|
||||
sta slotpatch8+1
|
||||
|
||||
ldx #$3f
|
||||
stx zmask
|
||||
inx
|
||||
ldy #$7f
|
||||
|
||||
bne skip_ahead ; branch always
|
||||
|
||||
; pad with zeros until $839
|
||||
; $839 is the entry point
|
||||
; adjusts address at $8FE to be entry point
|
||||
; jumps to boot 2
|
||||
;.res $839-*
|
||||
|
||||
; lda #>(entry-1)
|
||||
; pha
|
||||
; lda #<(entry-1)
|
||||
; pha
|
||||
; jsr preread
|
||||
; jmp $1000 ; stage2 entry point
|
||||
|
||||
patchtbl:
|
||||
.byte <(slotpatch1+1), <(slotpatch2+1), <(slotpatch3+1)
|
||||
.byte <(slotpatch4+1), <(slotpatch5+1), <(slotpatch6+1)
|
||||
indextbl: ;the 0 also terminates the patchtbl list!
|
||||
.byte 0, 2, 1, 3
|
||||
|
||||
|
||||
;construct denibbilisation table
|
||||
;pre-shifted for interleave read
|
||||
|
||||
skip_ahead:
|
||||
loopaa:
|
||||
sty znibble
|
||||
tya
|
||||
asl
|
||||
bit znibble
|
||||
beq loopz
|
||||
ora znibble
|
||||
eor #$ff
|
||||
and #$7e
|
||||
loopa:
|
||||
bcs loopz
|
||||
lsr
|
||||
bne loopa
|
||||
dex
|
||||
txa
|
||||
asl
|
||||
asl
|
||||
sta preshift-$16, Y
|
||||
loopz:
|
||||
dey
|
||||
bne loopaa
|
||||
|
||||
;construct 2-bit group table
|
||||
|
||||
sty zvalue
|
||||
loopbb:
|
||||
lsr zmask
|
||||
lsr zmask
|
||||
loopb:
|
||||
lda indextbl, X
|
||||
sta grouped, Y
|
||||
inc zvalue
|
||||
lda zvalue
|
||||
and zmask
|
||||
bne loopy
|
||||
inx
|
||||
txa
|
||||
and #3
|
||||
tax
|
||||
loopy:
|
||||
iny
|
||||
iny
|
||||
iny
|
||||
iny
|
||||
cpy #3
|
||||
bcs loopb
|
||||
iny
|
||||
cpy #3
|
||||
bcc loopbb
|
||||
lda #>(entry-1)
|
||||
pha
|
||||
lda #<(entry-1)
|
||||
pha
|
||||
jsr preread
|
||||
|
||||
; seek backward support
|
||||
; sty startsec+1
|
||||
; sta tmpadr+1
|
||||
; stx total+1
|
||||
|
||||
jmp seekread
|
||||
|
||||
preread:
|
||||
|
||||
;copy post-read if necessary
|
||||
;push post-read address here
|
||||
; pla
|
||||
; tax
|
||||
; pla
|
||||
; tay
|
||||
; lda #>(postread-1)
|
||||
; pha
|
||||
; lda #<(postread-1)
|
||||
; pha
|
||||
; tya
|
||||
; pha
|
||||
; txa
|
||||
; pha
|
||||
|
||||
lda #<(firsttrk*2)
|
||||
sta phase+1
|
||||
ldx #sectors
|
||||
lda #address
|
||||
ldy #firstsec
|
||||
rts
|
||||
|
||||
|
||||
|
||||
end_code:
|
||||
|
||||
.res $8fe-*
|
||||
|
||||
; traditionally, entry point to jump to at end of loading
|
||||
; $1000 in this case
|
||||
;*=$8fe
|
||||
.byte $10, $00
|
||||
|
||||
|
||||
.include "qboot_stage2.s"
|
363
games/mist_hgr/qboot_stage2.s
Normal file
363
games/mist_hgr/qboot_stage2.s
Normal file
@ -0,0 +1,363 @@
|
||||
; the following lives on sectors $0E and $0D
|
||||
; why?
|
||||
; request sector 2 and 4, and the interleave is
|
||||
|
||||
; beneath apple dos (3-23)
|
||||
; Physical (firmware) : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
; DOS33 mapping : 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15
|
||||
|
||||
|
||||
; Beneath Apple DOS
|
||||
; p86 (dos reference)
|
||||
;
|
||||
|
||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
||||
|
||||
.org $1000
|
||||
|
||||
code_begin:
|
||||
|
||||
.byte version
|
||||
|
||||
readnib:
|
||||
slotpatch1: ; smc
|
||||
lda $c0d1 ; gets set to C08C (Q6L) read
|
||||
bpl readnib
|
||||
rts
|
||||
|
||||
;fill address array for one track
|
||||
seekread:
|
||||
sty startsec+1
|
||||
sta tmpadr+1
|
||||
stx total+1
|
||||
|
||||
inittrk:
|
||||
sec
|
||||
lda #$10
|
||||
sbc startsec+1
|
||||
cmp total+1
|
||||
bcs it_skip
|
||||
|
||||
tax
|
||||
|
||||
it_skip:
|
||||
stx partial1
|
||||
stx partial2
|
||||
jsr seek
|
||||
|
||||
startsec:
|
||||
ldy #$d1
|
||||
|
||||
tmpadr:
|
||||
tmpadr_loop:
|
||||
lda #$d1
|
||||
sta addrtbl, y
|
||||
inc tmpadr+1
|
||||
iny
|
||||
dec partial1
|
||||
bne tmpadr_loop
|
||||
|
||||
;====================================
|
||||
; read a sector
|
||||
;====================================
|
||||
; first address field
|
||||
;====================================
|
||||
; starts with $D5 $AA $96
|
||||
; then XX YY volume
|
||||
; then XX YY track
|
||||
; then XX YY sector
|
||||
; then XX YY checksum
|
||||
; then ends with $DE $AA $EB
|
||||
;====================================
|
||||
; data field
|
||||
;====================================
|
||||
; starts with $D5 $AA $AD
|
||||
; 342 bytes of data
|
||||
; XX checksum
|
||||
; ends with $DE $AA $EB
|
||||
read:
|
||||
|
||||
outer_read:
|
||||
jsr readnib
|
||||
inner_read:
|
||||
cmp #$d5 ; look for $D5 part of addr field
|
||||
bne outer_read
|
||||
|
||||
jsr readnib ; look for $D5 $AA
|
||||
cmp #$aa
|
||||
bne inner_read
|
||||
|
||||
; look for $D5 $AA $AD
|
||||
|
||||
tay ; we need Y=#$AA later
|
||||
jsr readnib
|
||||
eor #$ad ; zero A if match
|
||||
beq check_mode
|
||||
|
||||
; if not #$AD, then #$96 is assumed
|
||||
; so in address field
|
||||
|
||||
ldy #2 ; volume, track, sector
|
||||
another:
|
||||
jsr readnib
|
||||
rol ; set carry
|
||||
sta sector+1
|
||||
jsr readnib
|
||||
and sector+1
|
||||
dey
|
||||
bpl another
|
||||
|
||||
tay
|
||||
ldx addrtbl, Y ; fetch corresponding address
|
||||
beq read ; done?
|
||||
|
||||
sta sector+1 ; store index for later
|
||||
|
||||
stx adrpatch1+2
|
||||
stx adrpatch8+2
|
||||
stx adrpatch2+2
|
||||
stx adrpatch3+2
|
||||
stx adrpatch5+2
|
||||
stx adrpatch7+2
|
||||
|
||||
inx
|
||||
stx adrpatch9+2
|
||||
dex
|
||||
|
||||
dex
|
||||
stx adrpatch4+2
|
||||
stx adrpatch6+2
|
||||
|
||||
ldy #$fe
|
||||
|
||||
loop2:
|
||||
adrpatch1:
|
||||
lda $d102, Y
|
||||
pha
|
||||
iny
|
||||
bne loop2
|
||||
|
||||
branch_read:
|
||||
bcs read ; branch always
|
||||
|
||||
check_mode:
|
||||
cpx #0
|
||||
beq read ; loop if not expecting #$AD
|
||||
|
||||
loop33:
|
||||
sta tmpval+1 ; zero rolling checksum
|
||||
slotpatch2:
|
||||
loop4:
|
||||
ldx $c0d1
|
||||
bpl loop4
|
||||
lda preshift-$96, X
|
||||
adrpatch2:
|
||||
sta $d102, Y ; store 2-bit array
|
||||
|
||||
tmpval:
|
||||
eor #$d1
|
||||
iny
|
||||
bne loop33
|
||||
ldy #$aa
|
||||
slotpatch3:
|
||||
loop5:
|
||||
ldx $c0d1
|
||||
bpl loop5
|
||||
eor preshift-$96, X
|
||||
adrpatch3:
|
||||
ldx $d102, Y ; bit2tbl
|
||||
eor grouped+2, X ; first 86 nibbles use group bits 0-1
|
||||
adrpatch4:
|
||||
sta $d156, y
|
||||
iny
|
||||
bne loop5
|
||||
and #$fc
|
||||
ldy #$aa
|
||||
slotpatch4:
|
||||
loop6:
|
||||
ldx $c0d1
|
||||
bpl loop6
|
||||
eor preshift-$96, X
|
||||
adrpatch5:
|
||||
ldx $d102, Y ; bit2tbl
|
||||
eor grouped+1, X ; second 86 nibbles use group bits 2-3
|
||||
adrpatch6:
|
||||
sta $d1ac, Y
|
||||
iny
|
||||
bne loop6
|
||||
and #$fc
|
||||
ldx #$ac
|
||||
slotpatch5:
|
||||
loop7:
|
||||
ldy $c0d1
|
||||
bpl loop7
|
||||
eor preshift-$96, Y
|
||||
adrpatch7:
|
||||
ldy $d100, X ; bit2tbl
|
||||
eor grouped, Y ; last 84 nibbles use group bits 4-5
|
||||
adrpatch8:
|
||||
sta $d100, x
|
||||
inx
|
||||
bne loop7
|
||||
and #$fc
|
||||
slotpatch6:
|
||||
loop8:
|
||||
ldy $c0d1
|
||||
bpl loop8
|
||||
eor preshift-$96, Y
|
||||
cmp #1 ; carry = !zero
|
||||
ldy #1
|
||||
loop9:
|
||||
pla
|
||||
adrpatch9:
|
||||
sta $d100, Y
|
||||
dey
|
||||
bpl loop9
|
||||
branch_read2:
|
||||
bcs branch_read ; branch if checksum failure
|
||||
|
||||
sector:
|
||||
ldy #$d1
|
||||
txa
|
||||
sta addrtbl, Y ; zero corresponding address
|
||||
dec total+1
|
||||
dec partial2 ; adjust remaining count
|
||||
; (faster than looping over array)
|
||||
sec
|
||||
bne branch_read2 ; read all requested sectors in one track
|
||||
|
||||
sta startsec+1 ; this was missing from original code
|
||||
; leading to trouble on wrap around
|
||||
; it not starting at sector0
|
||||
total:
|
||||
ldx #$d1
|
||||
beq driveoff
|
||||
inc phase+1
|
||||
inc phase+1 ; update current track
|
||||
jmp inittrk
|
||||
|
||||
driveoff:
|
||||
slotpatch7:
|
||||
lda $c0d1
|
||||
|
||||
seekret:
|
||||
rts
|
||||
|
||||
seek:
|
||||
ldx #0
|
||||
stx step+1
|
||||
copy_cur:
|
||||
curtrk:
|
||||
lda #0
|
||||
sta tmpval+1
|
||||
sec
|
||||
phase:
|
||||
sbc #$d1
|
||||
beq seekret
|
||||
|
||||
; if seek backwards
|
||||
bcs sback
|
||||
|
||||
eor #$ff
|
||||
inc curtrk+1
|
||||
|
||||
bcc ssback
|
||||
sback:
|
||||
adc #$fe
|
||||
dec curtrk+1
|
||||
ssback:
|
||||
cmp step+1
|
||||
bcc loop10
|
||||
step:
|
||||
lda #$d1
|
||||
loop10:
|
||||
cmp #8
|
||||
bcs loop11
|
||||
tay
|
||||
sec
|
||||
loop11:
|
||||
lda curtrk+1
|
||||
ldx step1, Y
|
||||
bne loop12
|
||||
loopmmm:
|
||||
clc
|
||||
lda tmpval+1
|
||||
ldx step2, Y
|
||||
loop12:
|
||||
stx sector+1
|
||||
and #3
|
||||
rol
|
||||
tax
|
||||
slotpatch8:
|
||||
sta $c0d1, X
|
||||
loopmm:
|
||||
ldx #$13
|
||||
loopm:
|
||||
dex
|
||||
bne loopm
|
||||
dec sector+1
|
||||
bne loopmm
|
||||
lsr
|
||||
bcs loopmmm
|
||||
inc step+1
|
||||
bne copy_cur
|
||||
|
||||
step1: .byte 1, $30, $28, $24, $20, $1e, $1d, $1c
|
||||
step2: .byte $70, $2c, $26, $22, $1f, $1e, $1d, $1c
|
||||
addrtbl: .res 16
|
||||
|
||||
partial1: .byte $00
|
||||
partial2: .byte $00
|
||||
code_end:
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
; enable drive motor
|
||||
;==========================
|
||||
|
||||
driveon:
|
||||
|
||||
slotpatch9:
|
||||
lda $c0d1
|
||||
|
||||
; wait 1s
|
||||
|
||||
ldx #6
|
||||
wait_1s:
|
||||
lda #255
|
||||
jsr WAIT
|
||||
dex
|
||||
bne wait_1s
|
||||
|
||||
rts
|
||||
|
||||
load_new:
|
||||
|
||||
jsr driveon
|
||||
|
||||
lda load_track
|
||||
asl ; track to start*2
|
||||
sta phase+1
|
||||
|
||||
lda load_sector
|
||||
tay ; sector to start
|
||||
|
||||
lda load_length ; length
|
||||
tax
|
||||
|
||||
lda load_address ; address to load
|
||||
|
||||
jsr seekread
|
||||
|
||||
rts
|
||||
|
||||
load_address:
|
||||
.byte $00
|
||||
load_track:
|
||||
.byte $00
|
||||
load_sector:
|
||||
.byte $00
|
||||
load_length:
|
||||
.byte $00
|
||||
|
247
games/mist_hgr/qkumba_popwr.s
Normal file
247
games/mist_hgr/qkumba_popwr.s
Normal file
@ -0,0 +1,247 @@
|
||||
; popwr -- code provided by qkumba
|
||||
|
||||
|
||||
frombuff=$d00 ; sector data to write
|
||||
|
||||
; note these must be contiguous
|
||||
encbuf=$e00 ; nibble buffer must be page alined
|
||||
bit2tbl=$f00
|
||||
|
||||
readnib = $1001
|
||||
|
||||
|
||||
readd5aa:
|
||||
|
||||
try_again:
|
||||
jsr readnib
|
||||
try_for_d5:
|
||||
cmp #$d5
|
||||
bne try_again
|
||||
jsr readnib
|
||||
cmp #$aa
|
||||
bne try_for_d5
|
||||
|
||||
jsr readnib
|
||||
rts
|
||||
|
||||
;================================
|
||||
; set up the self-modifying code
|
||||
; to point to the proper slot
|
||||
;================================
|
||||
; slot number is in high nibble of A
|
||||
popwr_init:
|
||||
and #$70 ; the slot number is in the top here
|
||||
sta slotpatchw1+1 ; self modify the code
|
||||
sta slotpatchw2+1
|
||||
sta slotpatchw3+1
|
||||
sta slotpatchw4+1
|
||||
|
||||
rts
|
||||
|
||||
;================================
|
||||
; write a sector
|
||||
;================================
|
||||
|
||||
sector_write:
|
||||
|
||||
; convert the input to nibbles
|
||||
|
||||
ldy #2 ; why start at 2?
|
||||
aa:
|
||||
ldx #$aa
|
||||
b1:
|
||||
dey
|
||||
frombuff_smc:
|
||||
lda frombuff, y
|
||||
lsr
|
||||
rol bit2tbl-$aa, x
|
||||
lsr
|
||||
rol bit2tbl-$aa, x
|
||||
sta encbuf, y
|
||||
lda bit2tbl-$aa, x
|
||||
and #$3f
|
||||
sta bit2tbl-$aa, x
|
||||
inx
|
||||
bne b1
|
||||
tya
|
||||
bne aa
|
||||
|
||||
jmp cmpsecwr
|
||||
|
||||
.align $100
|
||||
|
||||
; look for the proper sector to write
|
||||
|
||||
cmpsecwr:
|
||||
b2:
|
||||
jsr readd5aa ; look for dd55aa marker
|
||||
cmp #$96
|
||||
bne b2
|
||||
|
||||
ldy #3 ; try getting the sector number
|
||||
b3:
|
||||
jsr readnib
|
||||
rol
|
||||
sta tmpsec
|
||||
jsr readnib
|
||||
and tmpsec ; and with prev nibble?
|
||||
dey
|
||||
bne b3
|
||||
|
||||
|
||||
requested_sector:
|
||||
cmp #$d1
|
||||
|
||||
bne cmpsecwr ; retry if not what we want?
|
||||
|
||||
;skip tail #$DE #$AA #$EB some #$FFs ...
|
||||
|
||||
ldy #$24
|
||||
b4:
|
||||
dey
|
||||
bpl b4
|
||||
|
||||
|
||||
; c0e0 slot 6 ph0 off
|
||||
; c0e1 slot 6 ph0 on
|
||||
; c0e2 slot 6 ph1 off
|
||||
; c0e3 slot 6 ph1 on
|
||||
; c0e4 slot 6 ph2 off
|
||||
; c0e5 slot 6 ph2 on
|
||||
; c0e6 slot 6 ph3 off
|
||||
; c0e7 slot 6 ph3 on
|
||||
; c0e8 slot 6 motor off
|
||||
; c0e9 slot 6 motor on
|
||||
; c0ea slot 6 drive 1
|
||||
; c0eb slot 6 drive 2
|
||||
; c0ec slot 6 q6 off \ Q6 Q7
|
||||
; c0ed slot 6 q6 on |-- state machine 0 0 READ
|
||||
; c0ee slot 6 q7 off | 0 1 WRITE
|
||||
; c0ef slot 6 q7 on / 1 0 SENSE WRITE PROTECT
|
||||
; 1 1 WRITE LOAD
|
||||
|
||||
; write sector data
|
||||
|
||||
slotpatchw1:
|
||||
ldx #$d1 ; cycle num smc Q6 Q7
|
||||
lda $c08d, x ; prime drive 1 X
|
||||
lda $c08e, x ; required by Unidisk 1 0 ; senese wp?
|
||||
tya
|
||||
sta $c08f, x ; 1 1 ; write load
|
||||
ora $c08c, x ; 0 1 ; write
|
||||
|
||||
; 40 cycles
|
||||
|
||||
ldy #4 ; 2 cycles
|
||||
cmp $ea ; nop ; 3 cycles
|
||||
cmp ($ea,x) ; nop ; 6 cycles
|
||||
b5:
|
||||
jsr writenib1 ; (29 cycles)
|
||||
|
||||
; +6 cycles
|
||||
dey ; 2 cycles
|
||||
bne b5 ; 3/2nt
|
||||
|
||||
; 36 cycles
|
||||
; +10 cycles
|
||||
ldy #(prolog_e-prolog)
|
||||
; 2 cycles
|
||||
cmp $ea ; nop ; 3 cycles
|
||||
b6:
|
||||
lda prolog-1, y ; 4 cycles
|
||||
jsr writenib3 ; (17 cycles)
|
||||
|
||||
; 32 cycles if branch taken
|
||||
; +6 cycles
|
||||
dey ; 2 cycles
|
||||
bne b6 ; 3/2nt
|
||||
|
||||
; 36 cycles on first pass
|
||||
; +10 cycles
|
||||
tya ; 2 cycles
|
||||
ldy #$56 ; 2 cycles
|
||||
b7:
|
||||
eor bit2tbl-1, y ; 5 cycles
|
||||
tax ; 2 cycles
|
||||
lda xlattbl, x ; 4 cycles
|
||||
slotpatchw2:
|
||||
ldx #$d1 ; slot number smc ; 2 cycles
|
||||
sta $c08d, x ; wp sense ; 5 cycles
|
||||
lda $c08c, x ; read ; 4 cycles
|
||||
|
||||
; 32 cycles if branch taken
|
||||
|
||||
lda bit2tbl-1, y ; 5 cycles
|
||||
dey ; 2 cycles
|
||||
bne b7 ; 3/2nt
|
||||
|
||||
; 32 cycles
|
||||
; +9 cycles
|
||||
clc ; 2 cycles
|
||||
b88:
|
||||
eor encbuf, y ; 4 cycles
|
||||
b8:
|
||||
tax ; 2 cycles
|
||||
lda xlattbl, x ; 4 cycles
|
||||
slotpatchw3:
|
||||
ldx #$d1 ; slot number smc ; 2 cycles
|
||||
sta $c08d, x ; wp sense ; 5 cycles
|
||||
lda $c08c, x ; read ; 4 cycles
|
||||
bcs f1 ; 3/2nt
|
||||
|
||||
; 32 cycles if branch taken
|
||||
|
||||
lda encbuf, y ; 4 cycles
|
||||
iny ; 2 cycles
|
||||
bne b88 ; 3/2nt
|
||||
|
||||
; 32 cycles
|
||||
; +10 cycles
|
||||
sec ; 2 cycles
|
||||
bcs b8 ; 3 cycles
|
||||
|
||||
; 32 cycles
|
||||
; +3 cycles
|
||||
f1:
|
||||
ldy #(epilog_e-epilog)
|
||||
; 2 cycles
|
||||
cmp ($ea,x) ; nop ; 6 cycles
|
||||
b9:
|
||||
lda epilog-1, y ; 4 cycles
|
||||
jsr writenib3 ; (17 cycles)
|
||||
|
||||
; 32 cycles if branch taken
|
||||
; +6 cycles
|
||||
dey ; 2 cycles
|
||||
bne b9 ;3/2nt
|
||||
|
||||
lda $c08e, x ; read/wp
|
||||
lda $c08c, x ; read
|
||||
lda $c088, x ; motor off
|
||||
rts ; 6 cycles
|
||||
|
||||
writenib1:
|
||||
cmp ($ea,x) ; nop ; 6 cycles
|
||||
cmp ($ea,x) ; nop ; 6 cycles
|
||||
writenib3:
|
||||
slotpatchw4:
|
||||
ldx #$d1 ; slot number ; 2 cycles
|
||||
writenib4:
|
||||
sta $c08d, x ; wp sense? ; 5 cycles
|
||||
ora $c08c, x ; read ; 4 cycles
|
||||
rts ; 6 cycles
|
||||
|
||||
prolog: .byte $ad, $aa, $d5
|
||||
prolog_e:
|
||||
epilog: .byte $ff, $eb, $aa, $de
|
||||
epilog_e:
|
||||
|
||||
xlattbl:
|
||||
.byte $96,$97,$9A,$9B,$9D,$9E,$9F,$A6
|
||||
.byte $A7,$AB,$AC,$AD,$AE,$AF,$B2,$B3
|
||||
.byte $B4,$B5,$B6,$B7,$B9,$BA,$BB,$BC
|
||||
.byte $BD,$BE,$BF,$CB,$CD,$CE,$CF,$D3
|
||||
.byte $D6,$D7,$D9,$DA,$DB,$DC,$DD,$DE
|
||||
.byte $DF,$E5,$E6,$E7,$E9,$EA,$EB,$EC
|
||||
.byte $ED,$EE,$EF,$F2,$F3,$F4,$F5,$F6
|
||||
.byte $F7,$F9,$FA,$FB,$FC,$FD,$FE,$FF
|
247
games/mist_hgr/qload.s
Normal file
247
games/mist_hgr/qload.s
Normal file
@ -0,0 +1,247 @@
|
||||
; Loader for MIST
|
||||
|
||||
.include "zp.inc"
|
||||
.include "hardware.inc"
|
||||
|
||||
.include "common_defines.inc"
|
||||
.include "qboot.inc"
|
||||
|
||||
qload_start:
|
||||
|
||||
; init the write code
|
||||
lda WHICH_SLOT
|
||||
jsr popwr_init
|
||||
|
||||
; first time entry
|
||||
; start by loading text title
|
||||
|
||||
lda #LOAD_TEXT_TITLE ; load title
|
||||
sta WHICH_LOAD
|
||||
|
||||
lda #1
|
||||
sta CURRENT_DISK ; current disk number
|
||||
|
||||
jsr load_file
|
||||
|
||||
jsr $800
|
||||
|
||||
lda #LOAD_TITLE ; load title
|
||||
sta WHICH_LOAD
|
||||
|
||||
main_game_loop:
|
||||
jsr load_file
|
||||
|
||||
lda WHICH_LOAD
|
||||
bne not_title
|
||||
|
||||
start_title:
|
||||
jsr $4000
|
||||
jmp main_game_loop
|
||||
|
||||
not_title:
|
||||
jsr $2000
|
||||
jmp main_game_loop
|
||||
|
||||
;====================================
|
||||
; loads file specified by WHICH_LOAD
|
||||
;====================================
|
||||
load_file:
|
||||
ldx WHICH_LOAD
|
||||
|
||||
lda which_disk_array,X
|
||||
cmp CURRENT_DISK
|
||||
bne change_disk
|
||||
|
||||
load_file_no_diskcheck:
|
||||
lda load_address_array,X
|
||||
sta load_address
|
||||
|
||||
lda track_array,X
|
||||
sta load_track
|
||||
|
||||
lda sector_array,X
|
||||
sta load_sector
|
||||
|
||||
lda length_array,X
|
||||
sta load_length
|
||||
|
||||
jsr load_new
|
||||
|
||||
rts
|
||||
|
||||
;===================================================
|
||||
;===================================================
|
||||
; change disk
|
||||
;===================================================
|
||||
;===================================================
|
||||
|
||||
change_disk:
|
||||
|
||||
; turn off disk drive light
|
||||
|
||||
jsr driveoff
|
||||
|
||||
jsr TEXT
|
||||
jsr HOME
|
||||
|
||||
lda #<error_string
|
||||
sta OUTL
|
||||
lda #>error_string
|
||||
sta OUTH
|
||||
|
||||
ldx WHICH_LOAD
|
||||
lda which_disk_array,X
|
||||
clc
|
||||
adc #48
|
||||
|
||||
ldy #19
|
||||
sta (OUTL),Y
|
||||
|
||||
ldy #0
|
||||
|
||||
quick_print:
|
||||
lda (OUTL),Y
|
||||
beq quick_print_done
|
||||
jsr COUT1
|
||||
iny
|
||||
jmp quick_print
|
||||
|
||||
quick_print_done:
|
||||
|
||||
fnf_keypress:
|
||||
lda KEYPRESS
|
||||
bpl fnf_keypress
|
||||
bit KEYRESET
|
||||
|
||||
;==============================================
|
||||
; actually verify proper disk is there
|
||||
; read T0:S0 and verify proper disk
|
||||
|
||||
lda WHICH_LOAD
|
||||
pha
|
||||
|
||||
ldx #LOAD_FIRST_SECTOR ; load track 0 sector 0
|
||||
stx WHICH_LOAD
|
||||
|
||||
jsr load_file_no_diskcheck
|
||||
|
||||
pla
|
||||
sta WHICH_LOAD
|
||||
tax
|
||||
|
||||
; first sector now in $c00
|
||||
; offset 59
|
||||
; disk1 = $0a
|
||||
; disk2 = $32 ('2')
|
||||
; disk3 = $33 ('3')
|
||||
|
||||
lda $c59
|
||||
cmp #$0a
|
||||
beq is_disk1
|
||||
cmp #$32
|
||||
beq is_disk2
|
||||
cmp #$33
|
||||
beq is_disk3
|
||||
bne change_disk ; unknown disk
|
||||
|
||||
is_disk1:
|
||||
lda #1
|
||||
bne disk_compare
|
||||
|
||||
is_disk2:
|
||||
lda #2
|
||||
bne disk_compare
|
||||
|
||||
is_disk3:
|
||||
lda #3
|
||||
|
||||
disk_compare:
|
||||
cmp which_disk_array,X
|
||||
bne change_disk ; disk mismatch
|
||||
|
||||
;==============================================
|
||||
; all good, retry original load
|
||||
|
||||
jsr HOME
|
||||
|
||||
ldx WHICH_LOAD
|
||||
lda which_disk_array,X
|
||||
sta CURRENT_DISK
|
||||
|
||||
jmp load_file
|
||||
|
||||
; offset for disk number is 19
|
||||
error_string:
|
||||
.byte "PLEASE INSERT DISK 1, PRESS RETURN",0
|
||||
|
||||
|
||||
which_disk_array:
|
||||
.byte 1,1,3,3 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||
.byte 1,1,3,2 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||
.byte 2,1,2,2 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||
.byte 1,1,1,3 ; SHIP,GENERATOR,D'NI,SUB
|
||||
.byte 1 ; TEXT_TITLE
|
||||
.byte 1,1,1,1,1 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5
|
||||
.byte $f ; FIRST_SECTOR
|
||||
|
||||
load_address_array:
|
||||
.byte $40,$20,$20,$20 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||
.byte $20,$20,$20,$20 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||
.byte $20,$20,$20,$20 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||
.byte $20,$20,$20,$20 ; SHIP,GENERATOR,D'NI,SUB
|
||||
.byte $08 ; TEXT_TITLE
|
||||
.byte $0E,$0E,$0E,$0E
|
||||
.byte $0E ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5
|
||||
.byte $0C ; FIRST_SECTOR
|
||||
|
||||
track_array:
|
||||
.byte 2, 8, 1,21 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||
.byte 18,31,11, 1 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||
.byte 27,26,10,20 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||
.byte 30,32,28,30 ; SHIP,GENERATOR,D'NI,SUB
|
||||
.byte 0 ; TEXT_TITLE
|
||||
.byte 0, 0, 0, 0, 0 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5
|
||||
.byte 0 ; FIRST_SECTOR
|
||||
|
||||
sector_array:
|
||||
.byte 0, 0, 0, 0 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||
.byte 0, 8, 0, 0 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||
.byte 0, 0, 0, 0 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||
.byte 0,13, 0, 1 ; SHIP,GENERATOR,D'NI,SUB
|
||||
.byte 6 ; TEXT_TITLE
|
||||
.byte 11,12,13,14,15 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5
|
||||
.byte 0 ; FIRST_SECTOR
|
||||
|
||||
length_array:
|
||||
.byte 88,159,157,145 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||
.byte 128, 20,158,135 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||
.byte 61, 31,159,109 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||
.byte 20, 33, 27, 78 ; SHIP,GENERATOR,D'NI,SUB
|
||||
.byte 3 ; TEXT_TITLE
|
||||
.byte 1,1,1,1,1 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5
|
||||
.byte 1 ; FIRST_SECTOR
|
||||
|
||||
.include "audio.s"
|
||||
.include "linking_noise.s"
|
||||
.include "decompress_fast_v2.s"
|
||||
; .include "draw_pointer.s"
|
||||
; .include "end_level.s"
|
||||
; .include "gr_copy.s"
|
||||
.include "gr_fast_clear.s"
|
||||
.include "gr_offsets.s"
|
||||
; .include "gr_pageflip.s"
|
||||
; .include "gr_putsprite_crop.s"
|
||||
.include "keyboard.s"
|
||||
.include "text_print.s"
|
||||
.include "loadstore.s"
|
||||
.include "joystick.s"
|
||||
.include "log_table.s"
|
||||
|
||||
; .include "page_sprites.inc"
|
||||
; .include "common_sprites.inc"
|
||||
|
||||
.include "qkumba_popwr.s"
|
||||
|
||||
qload_end:
|
||||
|
||||
.assert (>qload_end - >qload_start) < $e , error, "loader too big"
|
82
games/mist_hgr/text_print.s
Normal file
82
games/mist_hgr/text_print.s
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
;================================
|
||||
; move_and_print
|
||||
;================================
|
||||
; get X,Y from OUTL/OUTH
|
||||
; then print following string to that address
|
||||
; stop at NUL
|
||||
; convert to APPLE ASCII (or with 0x80)
|
||||
; leave OUTL/OUTH pointing to next string
|
||||
|
||||
move_and_print:
|
||||
ldy #0
|
||||
lda (OUTL),Y
|
||||
sta CH
|
||||
iny
|
||||
lda (OUTL),Y
|
||||
asl
|
||||
tay
|
||||
lda gr_offsets,Y ; lookup low-res memory address
|
||||
clc
|
||||
adc CH ; add in xpos
|
||||
sta BASL ; store out low byte of addy
|
||||
|
||||
lda gr_offsets+1,Y ; look up high byte
|
||||
adc DRAW_PAGE ;
|
||||
sta BASH ; and store it out
|
||||
; BASH:BASL now points at right place
|
||||
|
||||
clc
|
||||
lda OUTL
|
||||
adc #2
|
||||
sta OUTL
|
||||
lda OUTH
|
||||
adc #0
|
||||
sta OUTH
|
||||
|
||||
;================================
|
||||
; print_string
|
||||
;================================
|
||||
|
||||
print_string:
|
||||
ldy #0
|
||||
print_string_loop:
|
||||
lda (OUTL),Y
|
||||
beq done_print_string
|
||||
ps_smc1:
|
||||
and #$3f ; make sure we are inverse
|
||||
sta (BASL),Y
|
||||
iny
|
||||
bne print_string_loop
|
||||
done_print_string:
|
||||
iny
|
||||
clc
|
||||
tya
|
||||
adc OUTL
|
||||
sta OUTL
|
||||
lda OUTH
|
||||
adc #0
|
||||
sta OUTH
|
||||
|
||||
rts
|
||||
|
||||
; set normal text
|
||||
set_normal:
|
||||
lda #$80
|
||||
sta ps_smc1+1
|
||||
|
||||
lda #09 ; ora
|
||||
sta ps_smc1
|
||||
|
||||
rts
|
||||
|
||||
; restore inverse text
|
||||
set_inverse:
|
||||
lda #$29
|
||||
sta ps_smc1
|
||||
lda #$3f
|
||||
sta ps_smc1+1
|
||||
|
||||
rts
|
||||
|
||||
|
58
games/mist_hgr/text_title.s
Normal file
58
games/mist_hgr/text_title.s
Normal file
@ -0,0 +1,58 @@
|
||||
.include "common_defines.inc"
|
||||
.include "zp.inc"
|
||||
.include "hardware.inc"
|
||||
|
||||
text_title:
|
||||
jsr TEXT
|
||||
jsr HOME
|
||||
|
||||
lda #0
|
||||
sta DRAW_PAGE
|
||||
|
||||
; print non-inverse
|
||||
lda #$80
|
||||
sta ps_smc1+1
|
||||
|
||||
lda #09 ; ora
|
||||
sta ps_smc1
|
||||
|
||||
lda #<boot_message
|
||||
sta OUTL
|
||||
lda #>boot_message
|
||||
sta OUTH
|
||||
|
||||
ldx #15
|
||||
text_loop:
|
||||
|
||||
jsr move_and_print
|
||||
|
||||
dex
|
||||
bne text_loop
|
||||
|
||||
|
||||
; lda #40
|
||||
; jsr wait_a_bit
|
||||
|
||||
rts
|
||||
|
||||
; 0123456789012345678901234567890123456789
|
||||
boot_message:
|
||||
.byte 0,0, "LOADING HGR MIST V0.01",0
|
||||
.byte 0,3, "CONTROLS:",0
|
||||
.byte 5,4, "MOVE CURSOR : ARROWS OR WASD",0
|
||||
.byte 5,5, "FORWARD/ACTION : RETURN OR SPACE",0
|
||||
.byte 5,7, "ENABLE JOYSTICK: J",0
|
||||
.byte 5,8, "LOAD GAME : CONTROL-L",0
|
||||
.byte 5,9, "SAVE : CONTROL-S",0
|
||||
.byte 5,10,"TOGGLE SOUND : CONTROL-T",0
|
||||
.byte 0,13,"BASED ON MYST BY CYAN INC",0
|
||||
.byte 0,14,"APPLE II PORT: VINCE WEAVER",0
|
||||
.byte 0,15,"DISK CODE : QKUMBA",0
|
||||
.byte 0,16,"SOUND CODE : OLIVER SCHMIDT",0
|
||||
.byte 0,17,"LZSA CODE : EMMANUEL MARTY",0
|
||||
.byte 8,19,"______",0
|
||||
.byte 6,20,"A \/\/\/ SOFTWARE PRODUCTION",0
|
||||
|
||||
.include "text_print.s"
|
||||
.include "gr_offsets.s"
|
||||
;.include "wait_a_bit.s"
|
27
games/mist_hgr/wait_a_bit.s
Normal file
27
games/mist_hgr/wait_a_bit.s
Normal file
@ -0,0 +1,27 @@
|
||||
;====================================
|
||||
; wait for keypress or a few seconds
|
||||
;====================================
|
||||
|
||||
wait_a_bit:
|
||||
|
||||
bit KEYRESET
|
||||
tax
|
||||
|
||||
keyloop:
|
||||
lda #200 ; delay a bit
|
||||
jsr WAIT
|
||||
|
||||
lda KEYPRESS
|
||||
bmi done_keyloop
|
||||
|
||||
; bmi keypress_exit
|
||||
|
||||
dex
|
||||
bne keyloop
|
||||
|
||||
done_keyloop:
|
||||
|
||||
bit KEYRESET
|
||||
|
||||
rts
|
||||
|
360
games/mist_hgr/zp.inc
Normal file
360
games/mist_hgr/zp.inc
Normal file
@ -0,0 +1,360 @@
|
||||
;; Zero Page
|
||||
|
||||
;; LZSA addresses
|
||||
NIBCOUNT = $00
|
||||
APPLEII_MODEL = $01
|
||||
|
||||
;; 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 ; $01 sound effects in language card
|
||||
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
|
||||
|
||||
GRID_PAGE = $DF
|
||||
ANIMATE_FRAME = $E0
|
||||
LEVEL_OVER = $E1
|
||||
LOCATIONS_L = $E2
|
||||
LOCATIONS_H = $E3
|
||||
|
||||
; temp var per-world define
|
||||
LONG_FRAME = $E4 ; nibel
|
||||
CURRENT_DISPLAY = $E4 ; selena
|
||||
LAST_PLAYED = $E4 ; 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
|
||||
|
Loading…
Reference in New Issue
Block a user