From b5d998d60c08a1a82496024e07b16cdd9e3876a6 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 21 Jun 2020 01:38:07 -0400 Subject: [PATCH] anothermist: got it working --- another_myst/Makefile | 33 +- another_myst/gr_plot.s | 47 + another_myst/gr_run_sequence.s | 129 ++ another_myst/gr_vlin.s | 55 + another_myst/hello.bas | 2 +- another_myst/intro.s | 2012 +++++++++++++++++ another_myst/intro_data_01.s | 124 + another_myst/intro_data_04.s | 247 ++ another_myst/intro_data_06.s | 265 +++ another_myst/intro_data_08.s | 228 ++ another_myst/intro_data_09.s | 315 +++ another_myst/loader.s | 711 ++++++ another_myst/lz4_decode.s | 207 ++ another_myst/ootw_graphics/Makefile | 6 +- another_myst/ootw_graphics/another_pool.png | Bin 0 -> 12833 bytes another_myst/ootw_graphics/logo.png | Bin 0 -> 13264 bytes another_myst/ootw_graphics/ootw_c16_end.inc | 21 +- another_myst/ootw_graphics/ootw_uboot_bg.png | Bin 0 -> 11763 bytes .../ootw_graphics/ootw_uboot_flash1.png | Bin 0 -> 250 bytes .../ootw_graphics/ootw_uboot_flash2.png | Bin 0 -> 10999 bytes another_myst/ootw_graphics/rooftop02.png | Bin 9241 -> 9447 bytes another_myst/title.s | 62 + 22 files changed, 4421 insertions(+), 43 deletions(-) create mode 100644 another_myst/gr_plot.s create mode 100644 another_myst/gr_run_sequence.s create mode 100644 another_myst/gr_vlin.s create mode 100644 another_myst/intro.s create mode 100644 another_myst/intro_data_01.s create mode 100644 another_myst/intro_data_04.s create mode 100644 another_myst/intro_data_06.s create mode 100644 another_myst/intro_data_08.s create mode 100644 another_myst/intro_data_09.s create mode 100644 another_myst/loader.s create mode 100644 another_myst/lz4_decode.s create mode 100644 another_myst/ootw_graphics/another_pool.png create mode 100644 another_myst/ootw_graphics/logo.png create mode 100644 another_myst/ootw_graphics/ootw_uboot_bg.png create mode 100644 another_myst/ootw_graphics/ootw_uboot_flash1.png create mode 100644 another_myst/ootw_graphics/ootw_uboot_flash2.png create mode 100644 another_myst/title.s diff --git a/another_myst/Makefile b/another_myst/Makefile index 2970ef23..22cdfa49 100644 --- a/another_myst/Makefile +++ b/another_myst/Makefile @@ -7,12 +7,12 @@ PNG2LZ4 = ../gr-utils/png2lz4 all: am.dsk -am.dsk: HELLO ANOTHERMIST +am.dsk: HELLO ANOTHERMIST INTRO TITLE cp empty.dsk am.dsk $(DOS33) -y am.dsk SAVE A HELLO $(DOS33) -y am.dsk BSAVE -a 0x1700 ANOTHERMIST - - + $(DOS33) -y am.dsk BSAVE -a 0x1700 INTRO + $(DOS33) -y am.dsk BSAVE -a 0xd00 TITLE #### @@ -23,33 +23,6 @@ intro.o: intro.s \ gr_copy.s gr_fast_clear.s gr_pageflip.s gr_unrle.s gr_putsprite.s \ gr_overlay.s gr_run_sequence.s \ keyboard.s random16.s text_print.s zp.inc \ - intro_graphics/01_building/intro_car.inc \ - intro_graphics/01_building/intro_building_car.inc \ - intro_graphics/01_building/intro_building.inc \ - intro_graphics/02_outer_door/outer_door.inc \ - intro_graphics/02_outer_door/feet.inc \ - intro_graphics/03_elevator/intro_elevator.inc \ - intro_graphics/03_elevator/intro_off_elevator.inc \ - intro_graphics/03_elevator/intro_walking.inc \ - intro_graphics/04_keypad/intro_scanner_door.inc \ - intro_graphics/04_keypad/intro_approach.inc \ - intro_graphics/04_keypad/intro_keypad_bg.inc \ - intro_graphics/04_keypad/intro_hands.inc \ - intro_graphics/04_keypad/intro_opening.inc \ - intro_graphics/05_scanner/intro_scanner.inc \ - intro_graphics/05_scanner/intro_scanning.inc \ - intro_graphics/05_scanner/intro_ai_bg.inc \ - intro_graphics/05_scanner/intro_ai.inc \ - intro_graphics/06_console/intro_desktop.inc \ - intro_graphics/06_console/intro_cursor.inc \ - intro_graphics/06_console/intro_collider.inc \ - intro_graphics/07_soda/intro_open_soda.inc \ - intro_graphics/07_soda/intro_drinking.inc \ - intro_graphics/08_lightning/lightning.inc \ - intro_graphics/09_tunnel/intro_tunnel1.inc \ - intro_graphics/09_tunnel/intro_tunnel2.inc \ - intro_graphics/10_gone/intro_zappo.inc \ - intro_graphics/10_gone/intro_gone.inc \ intro_data_01.lz4 \ intro_data_04.lz4 \ intro_data_06.lz4 \ diff --git a/another_myst/gr_plot.s b/another_myst/gr_plot.s new file mode 100644 index 00000000..38f81ac3 --- /dev/null +++ b/another_myst/gr_plot.s @@ -0,0 +1,47 @@ + ;================================ + ; plot routine + ;================================ + ; Xcoord in X + ; Ycoord in A + ; color in COLOR +plot: + stx XPOS + lsr ; shift bottom bit into carry ; 2 + + bcc plot_even ; 2nt/3 +plot_odd: + ldx #$f0 ; 2 + bcs plot_c_done ; 2nt/3 +plot_even: + ldx #$0f ; 2 +plot_c_done: + stx MASK ; 3 + + asl ; shift back (now even) ; 2 + tay + + lda gr_offsets,Y ; lookup low-res memory address ; 4 + clc ; 2 + adc XPOS ; 3 + sta GBASL ; 3 + iny ; 2 + + lda gr_offsets,Y ; 4 + adc DRAW_PAGE ; add in draw page offset ; 3 + sta GBASH ; 3 + + ldy #0 ; 2 + +plot_write: + lda MASK ; 3 + eor #$ff ; 2 + + and (GBASL),Y ; 5 + sta COLOR_MASK ; 3 + + lda COLOR ; 3 + and MASK ; 3 + ora COLOR_MASK ; 3 + sta (GBASL),Y ; 5 + + rts ; 6 diff --git a/another_myst/gr_run_sequence.s b/another_myst/gr_run_sequence.s new file mode 100644 index 00000000..edb9755e --- /dev/null +++ b/another_myst/gr_run_sequence.s @@ -0,0 +1,129 @@ + + + + ;================================= + ; Display a sequence of images + ;================================= + ; quit if escape pressed? + + ; pattern is TIME, PTR + ; if time==0, then done + ; if time==255, reload $C00 with PTR + ; if time==0..127 wait TIME, then overlay PTR over $C00 + ; if time==128..254, wait TIME-128, then overlay GBASL over $C00 + +run_sequence: + ldy #0 + +run_sequence_loop: + lda (INTRO_LOOPL),Y ; get time + beq run_sequence_done ; if zero, then done + + cmp #$ff ; if $ff, then load image to $c00 + bne not_reload + +reload_image: + iny + lda (INTRO_LOOPL),Y + sta GBASL + iny + lda (INTRO_LOOPL),Y + sta GBASH + iny + sty INTRO_LOOPER ; save for later + lda #$0c ; load to $c00 + jsr load_rle_gr + jmp seq_stuff + +not_reload: + tax + cmp #$80 ;if negative, no need to load pointer + bcs no_set_image_ptr ; bge (branch if greater equal) + + +get_image_ptr: + iny + lda (INTRO_LOOPL),Y + sta GBASL + iny + lda (INTRO_LOOPL),Y + sta GBASH + +no_set_image_ptr: + txa + and #$7f + tax + cpx #1 + beq seq_no_wait + + jsr long_wait +seq_no_wait: + + iny + sty INTRO_LOOPER ; save for later + lda #$10 ; load to $1000 + jsr load_rle_gr + + jsr gr_overlay + jsr page_flip +seq_stuff: + ldy INTRO_LOOPER + + ; exit early if escape pressed + + lda KEYPRESS + cmp #27+$80 + beq run_sequence_done + bit KEYRESET + + jmp run_sequence_loop +run_sequence_done: + rts + + + ;==================================== + ; Display a sequence of images 40x40 + +run_sequence_40x40: + ldy #0 + +run_sequence_40x40_loop: + lda (INTRO_LOOPL),Y ; get time + beq run_sequence_40x40_done + tax + + jsr long_wait + + iny + + lda (INTRO_LOOPL),Y + sta GBASL + iny + lda (INTRO_LOOPL),Y + sta GBASH + iny + sty INTRO_LOOPER ; save for later + lda #$10 ; load to $1000 + jsr load_rle_gr + + jsr gr_overlay_40x40 + jsr page_flip + ldy INTRO_LOOPER + + jmp run_sequence_40x40_loop +run_sequence_40x40_done: + rts + + + + + ;===================== + ; long(er) wait + ; waits approximately ?? ms + +long_wait: + lda #64 + jsr WAIT ; delay + dex + bne long_wait + rts diff --git a/another_myst/gr_vlin.s b/another_myst/gr_vlin.s new file mode 100644 index 00000000..3142f29f --- /dev/null +++ b/another_myst/gr_vlin.s @@ -0,0 +1,55 @@ + + ;========================================= + ; vlin + ;========================================= + ; X, V2 at Y + ; from x=top, v2=bottom +vlin: + + sty TEMPY ; save Y (x location) +vlin_loop: + + txa ; a=x (get first y) + and #$fe ; Clear bottom bit + tay ; + lda gr_offsets,Y ; lookup low-res memory address low + sta GBASL ; put it into our indirect pointer + iny + lda gr_offsets,Y ; lookup low-res memory address high + clc + adc DRAW_PAGE ; add in draw page offset + sta GBASH ; put into top of indirect + + ldy TEMPY ; load back in y (x offset) + + txa ; load back in x (current y) + lsr ; check the low bit + bcc vlin_low ; if not set, skip to low + +vlin_high: + lda #$F0 ; setup masks + sta MASK + lda #$0f + bcs vlin_too_slow + +vlin_low: ; setup masks + lda #$0f + sta MASK + lda #$f0 +vlin_too_slow: + + and (GBASL),Y ; mask current byte + sta (GBASL),Y ; and store back + + lda MASK ; mask the color + and COLOR + ora (GBASL),Y ; or into the right place + sta (GBASL),Y ; store it + + inx ; increment X (current y) + cpx V2 ; compare to the limit + bcc vlin_loop ; if <= then loop + + rts ; return + + diff --git a/another_myst/hello.bas b/another_myst/hello.bas index 78b6167d..48ee74cb 100644 --- a/another_myst/hello.bas +++ b/another_myst/hello.bas @@ -1,3 +1,3 @@ 5 HOME 10 PRINT "ANOTHER MIST V0.1 LOADING" -120 PRINT CHR$(4);"BRUN ANOTHERMIST" +120 PRINT CHR$(4);"BRUN TITLE" diff --git a/another_myst/intro.s b/another_myst/intro.s new file mode 100644 index 00000000..de278ecc --- /dev/null +++ b/another_myst/intro.s @@ -0,0 +1,2012 @@ + +;===================================== +; Intro + +.include "zp.inc" +.include "hardware.inc" + +intro: + lda #0 + sta INTRO_REPEAT + bit KEYRESET + +repeat_intro: + ;=========================== + ; Enable graphics + + bit LORES + bit SET_GR + bit FULLGR + + ;=========================== + ; Setup pages + + lda #4 + sta DRAW_PAGE + lda #0 + sta DISP_PAGE + +; jmp tunnel1 + +;=============================== +;=============================== +; Opening scene with car +;=============================== +;=============================== + + jmp desk + + ;================================== + ; Uncompress the data + ;================================== + lda #intro1_data_lz4 + sta LZ4_SRC+1 + + lda #$90 ; load to $9000 + + jsr lz4_decode + + ;================================== + ; draw the car driving up + ;================================== + ; draw getting out of the car + + lda #building_sequence + sta INTRO_LOOPH + + jsr run_sequence + +;=============================== +;=============================== +; Walk into door +;=============================== +;=============================== + + ;================================== + ; draw feet going into door + + lda #feet_sequence + sta INTRO_LOOPH + + jsr run_sequence + + +;=============================== +;=============================== +; Elevator going down +;=============================== +;=============================== + +elevator: + ;============================= + ; Load background to $c00 and $1000 + + lda #>(elevator_rle) + sta GBASH + lda #<(elevator_rle) + sta GBASL + + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + lda #>(elevator_rle) + sta GBASH + lda #<(elevator_rle) + sta GBASL + lda #$10 ; load also to off-screen $1000 + jsr load_rle_gr + + + jsr gr_copy_to_current + + lda #$66 + sta COLOR + + ; elevator outer door + + ldx #39 + stx V2 + ldx #4 + ldy #14 + jsr vlin ; VLIN 4,39 AT 14 (X, V2 at Y) + + ldx #35 + stx V2 + ldx #7 + ldy #18 + jsr vlin ; VLIN 7,35 AT 18 (X, V2 at Y) + + ; elevator inner door + ldx #2 + stx ELEVATOR_COUNT +elevator_middle: + ldx #38 + stx V2 + ldx #5 + ldy #15 + + jsr vlin ; X, V2 at Y + + ldx #36 + stx V2 + ldx #6 + ldy #17 + + jsr vlin ; X, V2 at Y + +elevator_inner: + ldx #37 + stx V2 + ldx #5 + ldy #16 + + jsr vlin ; X, V2 at Y + + + + jsr page_flip + + jsr gr_copy_to_current + + ldx #50 + jsr long_wait + + dec ELEVATOR_COUNT + lda ELEVATOR_COUNT + beq elevator_inner + cmp #1 + beq elevator_middle + + ; door closed + + jsr page_flip + + ldx #100 + jsr long_wait + + ;====================== + ; yellow line goes down + ;====================== + + lda #0 + sta COLOR + lda #5 + sta V2 +yellow_line_down: + + jsr gr_copy_to_current + + ldx #5 + ldy #16 + jsr vlin ; X, V2 at Y + + jsr page_flip + + ldx #12 + jsr long_wait + + inc V2 + lda V2 + cmp #37 + bne yellow_line_down + + lda DRAW_PAGE + pha + + lda #$c ; erase yellow line + sta DRAW_PAGE ; on page $1000 version + ldx #5 + ldy #16 + jsr vlin ; X, V2 at Y + + pla + sta DRAW_PAGE + + ;======================== + ; change floor indicators + ;======================== + + lda #$33 + sta COLOR + lda #5 + sta V2 + + lda #4 + sta PARTICLE_COUNT +floor_loop: + + jsr gr_copy_to_current_1000 + + lda PARTICLE_COUNT + asl + tay + ldx indicators,Y + lda indicators+1,Y + + jsr plot + + jsr page_flip + ldx #150 + jsr long_wait + + dec PARTICLE_COUNT + bpl floor_loop + + ;==================== + ; dark elevator + ;==================== + + ; clear $c00 to black + + lda DRAW_PAGE + pha + + lda #$8 + sta DRAW_PAGE + jsr clear_all + + pla + sta DRAW_PAGE + + ; blue from 20, 30 - 20,34 and yellow (brown?) from 20,0 to 20,30 + ; scrolls down until all yellow + + lda #30 + sta ELEVATOR_COUNT +going_down_loop: + + jsr gr_copy_to_current ; copy black screen in + + ; draw the yellow part + + lda #$DD + sta COLOR + lda ELEVATOR_COUNT + sta V2 + ldx #0 + ldy #20 + jsr vlin ; X, V2 at Y + + lda #$22 ; draw the blue part + sta COLOR + + lda ELEVATOR_COUNT + clc + adc #4 + cmp #40 + bmi not_too_big + + lda #40 +not_too_big: + sta V2 + ldx ELEVATOR_COUNT + ldy #20 + jsr vlin ; X, V2 at Y + + jsr page_flip + + ldx #8 ; pause + jsr long_wait + + inc ELEVATOR_COUNT + lda ELEVATOR_COUNT + cmp #40 + bne going_down_loop + + ;===================== + ; all yellow for a bit + ;===================== + + jsr gr_copy_to_current ; copy black screen in + lda #$DD + sta COLOR + lda #40 + sta V2 + ldx #0 + ldy #20 + jsr vlin ; X, V2 at Y + jsr page_flip + + ldx #100 ; wait a bit + jsr long_wait + + + ; single blue dot + ; solid blue line 10 later + + lda #2 + sta ELEVATOR_CYCLE + +going_down_repeat: + + lda #1 + sta ELEVATOR_COUNT +going_down_blue: + + jsr gr_copy_to_current ; copy black screen in + + ; draw the blue part + + lda #$22 + sta COLOR + lda ELEVATOR_COUNT + sta V2 + ldx #0 + ldy #20 + jsr vlin ; X, V2 at Y + +gdb_smc: + lda #$dd ; draw the blue part + sta COLOR + + lda #40 + sta V2 + ldx ELEVATOR_COUNT + ldy #20 + jsr vlin ; X, V2 at Y + + jsr page_flip + + ldx #8 ; pause + jsr long_wait + + inc ELEVATOR_COUNT + lda ELEVATOR_COUNT + cmp #40 + bne going_down_blue + + dec ELEVATOR_CYCLE + beq elevator_exit + + + lda #1 + sta ELEVATOR_COUNT +going_down_black: + + jsr gr_copy_to_current ; copy black screen in + + ; draw the blue part + + lda #$00 + sta COLOR + lda ELEVATOR_COUNT + sta V2 + ldx #0 + ldy #20 + jsr vlin ; X, V2 at Y + + lda #$22 ; draw the blue part + sta COLOR + + lda #40 + sta V2 + ldx ELEVATOR_COUNT + ldy #20 + jsr vlin ; X, V2 at Y + + jsr page_flip + + ldx #8 ; pause + jsr long_wait + + inc ELEVATOR_COUNT + lda ELEVATOR_COUNT + cmp #40 + bne going_down_black + + lda #$00 + sta gdb_smc+1 + + jmp going_down_repeat + + + ; black, 2, blue, black about 20 + ; blue until hit bottom, doors open + + + +elevator_exit: + + ldx #100 ; pause + jsr long_wait + + + +;=============================== +;=============================== +; Getting out of Elevator +;=============================== +;=============================== + + + ;============================= + ; Load elevator background + + lda #>(off_elevator_rle) + sta GBASH + lda #<(off_elevator_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + lda #>(walking00_rle) + sta GBASH + lda #<(walking00_rle) + sta GBASL + lda #$10 ; load to off-screen $1000 + jsr load_rle_gr + + + lda #10 + sta ELEVATOR_COUNT + +elevator_open_loop: + jsr gr_overlay ; note: overwrites color + lda #$00 + sta COLOR + +; Would have liked to have a central purple stripe, but not easy + +; 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 + + + lda ELEVATOR_COUNT + sta ELEVATOR_CYCLE +elevator_inner_loop: + lda #9 + clc + adc ELEVATOR_CYCLE + tay + + lda #40 + sta V2 + ldx #0 + jsr vlin ; X, V2 at Y + + sec + lda #30 + sbc ELEVATOR_CYCLE + tay + + lda #40 + sta V2 + ldx #0 + jsr vlin ; X, V2 at Y + + dec ELEVATOR_CYCLE + bne elevator_inner_loop + + jsr page_flip + + ldx #25 + jsr long_wait ; pause + + dec ELEVATOR_COUNT + bne elevator_open_loop + + ;================================== + ; draw walking off the elevator + + lda #walking_sequence + sta INTRO_LOOPH + + jsr run_sequence + + ;====================================== + ; make background black and pause a bit + + jsr clear_all + jsr page_flip + + ; no need to pause as uncompressing LZ4 below + ; takes a bit + +; ldx #80 +; jsr long_wait + +;=============================== +;=============================== +; Keycode +;=============================== +;=============================== + +keypad: + ;================================== + ; Uncompress the data + ;================================== + lda #intro4_data_lz4 + sta LZ4_SRC+1 + + lda #$90 ; load to $9000 + + jsr lz4_decode + + ;============================= + ; Load background to $c00 + + lda #>(scanner_door_rle) + sta GBASH + lda #<(scanner_door_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + lda #approach_sequence + sta INTRO_LOOPH + + jsr run_sequence + + + ;============================= + ; Load background to $c00 + + lda #>(keypad_rle) + sta GBASH + lda #<(keypad_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + ;================================== + ; draw keypad sequence + + lda #keypad_sequence + sta INTRO_LOOPH + + jsr run_sequence + + + ;================================== + ; doop opening sequence + + lda #>(scanner_door_rle) + sta GBASH + lda #<(scanner_door_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + + lda #opening_sequence + sta INTRO_LOOPH + + jsr run_sequence + + +;=============================== +;=============================== +; Scanner +;=============================== +;=============================== + +scanner: + lda #>(scanner_rle) + sta GBASH + lda #<(scanner_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #scanning_sequence + sta INTRO_LOOPH + + jsr run_sequence + +;=============================== +;=============================== +; Spinny DNA / Key +;=============================== +;=============================== + +scanner2: + + lda #>(ai_bg_rle) + sta GBASH + lda #<(ai_bg_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr clear_bottom + bit TEXTGR ; split graphics/text + + jsr gr_copy_to_current_40x40 + jsr page_flip + + jsr clear_bottom + + ;============================= + ; Identification (nothing) + ;============================= + + lda #0 + sta DNA_OUT + sta DNA_PROGRESS + + lda #ai_sequence + sta INTRO_LOOPH + + jsr run_sequence_static + + ; slices / | - / nothing (pause) + ; more slices / | - / nothing (pause) + ; small circle / | - / nothing (pause) + ; big circle / | - / nothing (pause) + +; jsr gr_copy_to_current_40x40 +; jsr draw_dna +; jsr page_flip + + ; approx one rotation until "Good evening" + ; two rotation, then switch to key + Ferrari + ; three rotations, then done + + ; - !!! DNA START 1 line + ; / !!! DNA start 1 line + ; !!! DNA 2 lines + ; DNA 5 lines + ; Good evening professor. + ; DNA all lines + + ; Triggers: + ; + DNA starts midway through big circle + ; + Good evening printed at DNA_OUT=5 + ; + Switch to key, print ferrari + + + ; Key | + ; I see you have driven here in your \ Ferrari. + ; Key - / nothing (pause) + + + ldx #35 +spin_on_key: + txa + pha + + jsr draw_dna + jsr page_flip + + pla + tax + + lda #250 + jsr WAIT + + dex + bne spin_on_key + + + +;=============================== +; Sitting at Desk +;=============================== + +desk: + ;================================== + ; Uncompress the data + ;================================== + lda #intro6_data_lz4 + sta LZ4_SRC+1 + + lda #$90 ; load to $9000 + + jsr lz4_decode + + + jmp after_soda + + ;====================== + ; load bg + + lda #>(desktop_rle) + sta GBASH + lda #<(desktop_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + + bit FULLGR ; back to full graphics + + jsr page_flip + + ;================================= + ; Display rises up + ;================================= + + lda #powerup_sequence + sta INTRO_LOOPH + + jsr run_sequence + + ldx #80 ; pause a bit + jsr long_wait + + ;================================= + ; Zoom in, mouse move + ;================================= + ; FIXME: shimmery edges to display? + + lda #>(desktop_bg_rle) + sta GBASH + lda #<(desktop_bg_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #cursor_sequence + sta INTRO_LOOPH + + jsr run_sequence + + ldx #40 ; pause a bit + jsr long_wait + + +;=============================== +; Peanut OS +;=============================== + +peanutos: + + ; 1 2 3 + ; 0123456789012345678901234567890123456789 + ; + ; Copyright (c) 1977 Peanut Computer, Inc. + ; All rights reserved. + ; + ; CDOS Version 5.01 + ; + ; > # + + lda #$a0 + jsr clear_top_a + jsr clear_bottom + + lda #peanut + sta OUTH + + jsr move_and_print_list + + jsr page_flip + + bit SET_TEXT + + ; wait 1s + + ldx #60 + jsr long_wait + + lda #1 + sta CURSOR_COUNT + +project_23_loop: + ; RUN PROJECT 23# (typed) + ; # + + lda #$a0 + jsr clear_top_a + jsr clear_bottom + + lda #peanut + sta OUTH + + jsr move_and_print_list + + ; $550 + + lda #$5 + clc + adc DRAW_PAGE + sta OUTH + lda #$52 + sta OUTL + + ldy #0 +print_project23_loop: + + lda project_23,Y + eor #$80 + sta (OUTL),Y + + iny + cpy CURSOR_COUNT + bne print_project23_loop + + lda #' ' + sta (OUTL),Y + + jsr page_flip + + ldx #10 + jsr long_wait + + inc CURSOR_COUNT + lda CURSOR_COUNT + cmp #15 + bne project_23_loop + + ldx #20 ; brief pasue at end of line + jsr long_wait + + lda #(' '|$80) ; clear out last cursor + sta (OUTL),Y + + lda #' ' ; put cursor on next line + sta $5d2 ; both pages + sta $9d2 + + + ; wait 1s + + ldx #100 + jsr long_wait + + + +;=============================== +; Particle Accelerator Screen +;=============================== + + ; MODIFICATION OF PARAMETERS + ; RELATING TO PARTICLE + ; ACCELERATOR (SYNCHOTRON). + ;____________ E: 23% + ; ROOM 3 X:\ g: .005 + ; : : + ; : : RK: 77.2L + ; : : + ;___________:_: opt: g+ + ; ROOM 1 X: : + ; : : Shield: + ; : : 1: OFF + ; : : 2: ON + ; : : 3: ON + ; : : + ; : : P^: 1 + ; __________: : + ;/__________|/ + + ; the actual intro draws background 3-d stuff first, gradually + ; then writes text + + + lda #$a0 + jsr clear_top_a + jsr clear_bottom + + lda #accelerator + sta OUTH + + jsr move_and_print_list + + jsr page_flip + + ldx #50 + jsr long_wait + + ; Cusrsor starts at E + ; Down to .005 (pauses) + ; End of RK + ; End of g+ (pauses) + ; erase + + ; change to - (pauses) + ; down to 1 (pauses) + ; down to 2 + ; down to 3 + ; down to P (pause) + + ldy #0 + lda #accel_paramaters + sta INH +accel_input_loop: + lda (INL),Y ; get X + cmp #$ff + beq done_accel_input + sta accel_smc+1 + sta accel_smc+4 + iny + lda (INL),Y ; get Y + sta accel_smc+2 + clc + adc #$4 + sta accel_smc+5 + iny + lda (INL),Y ; get char + iny +accel_smc: + sta $400 + sta $800 + + lda (INL),Y ; get time + tax + jsr long_wait + iny + jmp accel_input_loop +done_accel_input: + + + ; FLASH: RUN EXPERIMENT ? (pause) + ; Y + lda #2 + sta CURSOR_COUNT +flash_loop: + + lda #run_experiment + sta OUTH + jsr print_both_pages + + ldx #75 + jsr long_wait + + lda #run_blank + sta OUTH + jsr print_both_pages + + ldx #75 + jsr long_wait + + lda CURSOR_COUNT + cmp #1 + bne not_yes + + lda #'Y'|$80 + sta $670 + sta $A70 + +not_yes: + dec CURSOR_COUNT + bpl flash_loop + + +;====================== +; Accelerate +;====================== +accelerate: + bit SET_GR + + lda #>(collider_rle) + sta GBASH + lda #<(collider_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + bit TEXTGR + jsr clear_bottoms + + ; --- Theoretical Study --- + ; make this inverse? + + lda #theoretical_study + sta OUTH + + jsr print_both_pages + + ;========================== + ; - Phase 0: + ; INJECTION of particles + ; into synchrotron + + lda #0 + sta PARTICLE_COUNT + + lda #phase0 + sta OUTH + + jsr move_and_print_list_both_pages + + jsr gr_copy_to_current_40x40 + jsr plot_particle + jsr page_flip + ldx #40 + jsr long_wait + + jsr gr_copy_to_current_40x40 + jsr plot_particle + jsr page_flip + ldx #40 + jsr long_wait + + + ;=========================== + ; - Phase 1: + ; Particle ACCELERATION. + + + ; Note: goes around at least 4 times + + jsr clear_bottoms + + ; --- Theoretical Study --- + lda #theoretical_study + sta OUTH + + jsr print_both_pages + + lda #phase1 + sta OUTH + + jsr move_and_print_list_both_pages + + ; 5 times around? (total = 39) + +particle_loop: + jsr gr_copy_to_current_40x40 + jsr plot_particle + jsr page_flip + ldx #20 + jsr long_wait + + lda PARTICLE_COUNT + cmp #38 + bne particle_loop + + ;===================================== + ; - Phase 2: + ; EJECTION of particles + ; on the shield. + + ; Note: goes around once more, then does shield animation + + jsr clear_bottoms + + ; --- Theoretical Study --- + lda #theoretical_study + sta OUTH + + jsr print_both_pages + + lda #phase2 + sta OUTH + + jsr move_and_print_list_both_pages + + + jsr gr_copy_to_current_40x40 + jsr plot_particle + jsr page_flip + ldx #20 + jsr long_wait + + lda #shield_sequence + sta INTRO_LOOPH + + jsr run_sequence_40x40 + + ldx #30 + jsr long_wait + + ;============================= + ; A N A L Y S I S + + jsr clear_bottoms + + ; --- Theoretical Study --- + lda #theoretical_study + sta OUTH + + jsr print_both_pages + + lda #analysis + sta OUTH + + jsr print_both_pages + + ldx #200 + jsr long_wait + + ;============================= + ; - RESULT: + ; Probability of creating: + ; ANTIMATTER: 91.V % + ; NEUTRINO 27: 0.04 % + ; NEUTRINO 424: 18 % + + jsr clear_bottoms + + lda #result + sta OUTH + + jsr move_and_print_list_both_pages + + ldx #200 + jsr long_wait + + + ;================================ + ; Practical verification Y/N ?" + + jsr clear_bottoms + + lda #practical_verification + sta OUTH + + jsr print_both_pages + + ldx #200 + jsr long_wait + + ;========================================== + ; THE EXPERIMENT WILL BEGIN IN 20 SECONDS + ; 19, 18, 17 + + jsr gr_copy_to_current_40x40 + jsr page_flip + + jsr clear_bottoms + + lda #experiment + sta OUTH + + ; 20 + jsr print_both_pages + ldx #100 + jsr long_wait + + ; 19 + jsr print_both_pages + ldx #100 + jsr long_wait + + ; 18 + jsr print_both_pages + ldx #100 + jsr long_wait + + ; 17 + jsr print_both_pages + ldx #100 + jsr long_wait + + + +;=============================== +;=============================== +; Opening Soda +;=============================== +;=============================== +soda: + lda #>(soda_bg_rle) + sta GBASH + lda #<(soda_bg_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + bit FULLGR + + lda #soda_sequence + sta INTRO_LOOPH + + jsr run_sequence + + +; ldx #30 +; jsr long_wait + +;open_soda_loop: +; lda KEYPRESS +; bpl open_soda_loop +; bit KEYRESET + +;=============================== +;=============================== +; Drinking Soda +;=============================== +;=============================== + + lda #>(drinking02_rle) + sta GBASH + lda #<(drinking02_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + lda #drinking_sequence + sta INTRO_LOOPH + + jsr run_sequence + + ldx #200 + jsr long_wait + +;drinking_loop: +; lda KEYPRESS +; bpl drinking_loop +; bit KEYRESET + + +;=============================== +;=============================== +; More crazy screen +;=============================== +;=============================== + +after_soda: + lda #>(collider_rle) + sta GBASH + lda #<(collider_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + bit TEXTGR + jsr clear_bottoms + + ; THE EXPERIMENT WILL BEGIN IN 5 SECONDS + jsr gr_copy_to_current_40x40 + jsr page_flip + + lda #experiment + sta OUTH + jsr print_both_pages + + lda #five + sta OUTH + jsr print_both_pages + + lda #0 + sta MESSAGE_COUNT + sta MESSAGE_CURRENT + sta TIME_COUNT +message_loop: + + ; Shield 9A.5F Ok + ; Flux % 5.0177 Ok + ; CDI Vector ok + ; %%%ddd ok + ; Race-Track ok + ; -----REPEAT ; 10 + + ldx MESSAGE_CURRENT + lda message_list,X + sta OUTL + lda message_list+1,X + sta OUTH + jsr print_both_pages + + inc MESSAGE_CURRENT + inc MESSAGE_CURRENT + lda MESSAGE_CURRENT + cmp #10 + bne not_ten + lda #0 + sta MESSAGE_CURRENT +not_ten: + + ; 4 SECONDS + ; Shield " + ; -----REPEAT ; 10 + + ; 3 SECONDS + ; Sheild " + ; -----REPEAT ; 10 + + ; 2 SECONDS ; 10 + + ; 1 SECONDS (at CDI Vector) ; 10 + ; 0 SECONDS (at %%%) ; 10 + + ldx #10 + jsr long_wait + + inc CURSOR_COUNT + + lda CURSOR_COUNT + and #$07 + bne not_time_oflo + + inc TIME_COUNT + inc TIME_COUNT + + ; update seconds + + ldx TIME_COUNT + lda times,X + sta OUTL + lda times+1,X + sta OUTH + jsr print_both_pages + +not_time_oflo: + + lda CURSOR_COUNT + cmp #42 + bne not_time_gone + + ; clear out when near end + jsr clear_bottoms + +not_time_gone: + + lda CURSOR_COUNT + cmp #48 + bne message_loop + + ;============================= + ; EXPERIMENT LINES GOES AWAY + ; Stop printing at race track + ; dark blue going around track + + ; Note: goes around at least 4 times + + jsr clear_bottoms + + ldx #30 + jsr long_wait + +;collider_ui_loop: +; lda KEYPRESS +; bpl collider_ui_loop +; bit KEYRESET + + + + ; 1 times around? (total = 8) + + lda #0 + sta PARTICLE_COUNT + +particle_loop2: + jsr gr_copy_to_current_40x40 + jsr plot_particle + jsr page_flip + ldx #20 + jsr long_wait + + lda PARTICLE_COUNT + cmp #10 + bne particle_loop2 + + +;collider_ui_loop: +; lda KEYPRESS +; bpl collider_ui_loop +; bit KEYRESET + + + +;=============================== +;=============================== +; Thunderstorm Outside +;=============================== +;=============================== + + +thunderstorm: + + ;================================== + ; Uncompress the data + ;================================== + lda #intro8_data_lz4 + sta LZ4_SRC+1 + + lda #$90 ; load to $9000 + + jsr lz4_decode + + + lda #>(building_car_rle) + sta GBASH + lda #<(building_car_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + bit FULLGR + + lda #lightning_sequence + sta INTRO_LOOPH + + jsr run_sequence + + lda #bolt_sequence + sta INTRO_LOOPH + + jsr run_sequence + +;outside_loop: +; lda KEYPRESS +; bpl outside_loop +; bit KEYRESET + + +;=============================== +;=============================== +; Tunnel 1 +;=============================== +;=============================== + +tunnel1: + + ;================================== + ; Uncompress the data + ;================================== + lda #intro9_data_lz4 + sta LZ4_SRC+1 + + lda #$90 ; load to $9000 + + jsr lz4_decode + + + lda #>(tunnel1_rle) + sta GBASH + lda #<(tunnel1_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #tunnel1_sequence + sta INTRO_LOOPH + + jsr run_sequence + + +;tunnel1_loop: +; lda KEYPRESS +; bpl tunnel1_loop +; bit KEYRESET + + + +;=============================== +;=============================== +; Tunnel 2 +;=============================== +;=============================== + + + ;============================= + ; Load background to $c00 + + lda #>(tunnel2_rle) + sta GBASH + lda #<(tunnel2_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #tunnel2_sequence + sta INTRO_LOOPH + + jsr run_sequence + + +;tunnel2_loop: +; lda KEYPRESS +; bpl tunnel2_loop +; bit KEYRESET + + + +;=============================== +;=============================== +; Zappo / Gone +;=============================== +;=============================== + + ;========================= + ; zappo + + lda #>(blue_zappo_rle) + sta GBASH + lda #<(blue_zappo_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #zappo_sequence + sta INTRO_LOOPH + + jsr run_sequence + + ;====================== + ; gone + + lda #>(gone_rle) + sta GBASH + lda #<(gone_rle) + sta GBASL + lda #$c ; load to off-screen $c00 + jsr load_rle_gr + + jsr gr_copy_to_current + jsr page_flip + + lda #gone_sequence + sta INTRO_LOOPH + + + jsr run_sequence + + ;====================== + ; Pause a bit + + ldx #180 + jsr long_wait + +;gone_loop: +; lda KEYPRESS +; bpl gone_loop +; bit KEYRESET + + ; see if R pressed, if so, repeat + ; otherwise, return and indicate we want to start the game + + lda KEYPRESS + bpl check_repeat ; if no keypress, jump ahead + + and #$7f ; clear high bit + + cmp #'R' + bne check_repeat + + lda INTRO_REPEAT + eor #$1 + sta INTRO_REPEAT + + +check_repeat: + bit KEYRESET ; reset keyboard strobe + lda INTRO_REPEAT + beq done_intro + + jmp repeat_intro + +done_intro: + lda #1 ; start game + sta WHICH_LOAD + + rts + + +.include "gr_pageflip.s" +.include "gr_unrle.s" +.include "lz4_decode.s" +.include "gr_copy.s" +.include "gr_offsets.s" +.include "gr_overlay.s" +.include "gr_vlin.s" +.include "gr_plot.s" +.include "gr_fast_clear.s" +.include "gr_putsprite.s" +.include "text_print.s" +.include "gr_run_sequence.s" + + + ;================================= + ; Display a sequence of images + ; with /-|/ static overlay + +run_sequence_static: + ldy #0 ; init + +run_sequence_static_loop: + + lda (INTRO_LOOPL),Y ; draw DNA + sta DNA_OUT + iny + + lda (INTRO_LOOPL),Y ; pause for time + beq run_sequence_static_done + tax + + lda DNA_OUT + bne pause_draw_dna + + jsr long_wait + jmp done_pause_dna +pause_draw_dna: + txa + pha + + tya + pha + + jsr draw_dna + jsr page_flip + + pla + tay + + pla + tax + + lda #250 + jsr WAIT + + dex + bne pause_draw_dna + +done_pause_dna: + + iny ; point to overlay + + lda #10 ; set up static loop + sta STATIC_LOOPER + + sty INTRO_LOOPER ; save for later + +static_loop: + + lda (INTRO_LOOPL),Y + sta GBASL + iny + lda (INTRO_LOOPL),Y + sta GBASH + + lda #$10 ; load to $1000 + jsr load_rle_gr + + jsr gr_overlay_40x40 + + ldy STATIC_LOOPER + lda static_pattern,Y + sta GBASL + lda static_pattern+1,Y + sta GBASH + + lda #$10 ; load to $1000 + jsr load_rle_gr + + + ; force 40x40 overlay + + jsr gr_overlay_40x40_noload + + lda DNA_OUT + beq no_dna + + jsr draw_dna + +no_dna: + jsr page_flip + + ldy INTRO_LOOPER + + ldx #3 + jsr long_wait + + dec STATIC_LOOPER + dec STATIC_LOOPER + + bpl static_loop + + iny + iny + + jmp run_sequence_static_loop +run_sequence_static_done: + rts + + + + + + ;==================================== + ; Draw DNA + ;==================================== +draw_dna: + + lda #0 ; count + sta DNA_COUNT + +draw_dna_loop: + clc + lda DNA_COUNT + adc #10 + sta YPOS + + lda #26 + sta XPOS + + lda DNA_COUNT ; 0, 4, 8, 12, 16.... + lsr + clc + adc DNA_PROGRESS ; 0,2,4,6,8,... + + and #$e + tax + + lda dna_list,X + sta INL + lda dna_list+1,X + sta INH + + jsr put_sprite + + lda DNA_COUNT + clc + adc #4 + sta DNA_COUNT + + ; for DNA_PROGRESS 0,2,4,6,8,10,12 we only want to print + ; first X lines (gradually fade in) + ; after that, draw the whole thing + + lda DNA_PROGRESS + cmp #14 + bpl dna_full + + asl + cmp DNA_COUNT + bpl draw_dna_loop + bmi dna_full_done + +dna_full: + lda DNA_COUNT + cmp #28 + bne draw_dna_loop + +dna_full_done: + + inc DNA_PROGRESS + inc DNA_PROGRESS + + ; see if printing message + lda DNA_PROGRESS + cmp #10 + bne no_good_message + + lda #good_evening + sta OUTH + jsr print_both_pages + jmp no_ferrari_message + +no_good_message: + cmp #$30 + bne no_ferrari_message + + lda #ferrari + sta OUTH + jsr print_both_pages + jsr print_both_pages + + +no_ferrari_message: + rts + + + ;====================== + ; Plot particle + ;====================== +plot_particle: + ; Xcoord in X + ; Ycoord in A + ; color in COLOR + + lda #$22 + sta COLOR + + lda PARTICLE_COUNT + and #7 + asl + tay + ldx particles,Y + lda particles+1,Y + + jsr plot + + inc PARTICLE_COUNT + + rts + + +;.include "intro_data.s" + +DATA_LOCATION = $9000 + +; intro1,intro2,intro3 +building_sequence = (DATA_LOCATION+$083C) +feet_sequence = (DATA_LOCATION+$12CC) +walking_sequence = (DATA_LOCATION+$1A31) +walking00_rle = (DATA_LOCATION+$1593) +off_elevator_rle = (DATA_LOCATION+$1495) +indicators = (DATA_LOCATION+$1A27) +elevator_rle = (DATA_LOCATION+$12E8) + +intro1_data_lz4: + .word (intro1_data_lz4_end-intro1_data_lz4) + .incbin "intro_data_01.lz4",11 +intro1_data_lz4_end: + +; intro4,intro5 + +opening_sequence = (DATA_LOCATION+$204E) +keypad_sequence = (DATA_LOCATION+$1FF3) +keypad_rle = (DATA_LOCATION+$0496) +approach_sequence = (DATA_LOCATION+$1FE6) +scanner_door_rle = (DATA_LOCATION+$0000) + +ferrari = (DATA_LOCATION+$2D47) +good_evening = (DATA_LOCATION+$2D2D) +dna_list = (DATA_LOCATION+$2D77) +static_pattern = (DATA_LOCATION+$2D21) +ai_sequence = (DATA_LOCATION+$2D0B) +ai_bg_rle = (DATA_LOCATION+$2744) +scanning_sequence = (DATA_LOCATION+$2CF2) +scanner_rle = (DATA_LOCATION+$2063) + +intro4_data_lz4: + .word (intro4_data_lz4_end-intro4_data_lz4) + .incbin "intro_data_04.lz4",11 +intro4_data_lz4_end: + +; intro6,intro7 + +experiment = (DATA_LOCATION+$0D2C) +practical_verification = (DATA_LOCATION+$0D0D) +result = (DATA_LOCATION+$0CA6) +analysis = (DATA_LOCATION+$0C8D) +shield_sequence = (DATA_LOCATION+$0D75) +phase2 = (DATA_LOCATION+$0C56) +phase1 = (DATA_LOCATION+$0C2F) +phase0 = (DATA_LOCATION+$0BF5) +particles = (DATA_LOCATION+$0D65) +theoretical_study = (DATA_LOCATION+$0BD9) +collider_rle = (DATA_LOCATION+$06D8) +run_blank = (DATA_LOCATION+$0BC6) +run_experiment = (DATA_LOCATION+$0BB3) +accel_paramaters = (DATA_LOCATION+$0B62) +accelerator = (DATA_LOCATION+$09C1) +project_23 = (DATA_LOCATION+$09B2) +peanut = (DATA_LOCATION+$0955) +cursor_sequence = (DATA_LOCATION+$0947) +desktop_bg_rle = (DATA_LOCATION+$0242) +powerup_sequence = (DATA_LOCATION+$093E) +desktop_rle = (DATA_LOCATION+$0000) + +times = (DATA_LOCATION+$0E0C) +message_list = (DATA_LOCATION+$0DE4) +five = (DATA_LOCATION+$0DEE) +drinking_sequence = (DATA_LOCATION+$1C29) +drinking02_rle = (DATA_LOCATION+$1705) +soda_sequence = (DATA_LOCATION+$1C1A) +soda_bg_rle = (DATA_LOCATION+$0E1A) + + +intro6_data_lz4: + .word (intro6_data_lz4_end-intro6_data_lz4) + .incbin "intro_data_06.lz4",11 +intro6_data_lz4_end: + +; intro8 + +bolt_sequence = (DATA_LOCATION+$1484) +lightning_sequence = (DATA_LOCATION+$13D2) +building_car_rle = (DATA_LOCATION+$1259) + +intro8_data_lz4: + .word (intro8_data_lz4_end-intro8_data_lz4) + .incbin "intro_data_08.lz4",11 +intro8_data_lz4_end: + +; intro9, intro10 + +gone_sequence = (DATA_LOCATION+$2C66) +gone_rle = (DATA_LOCATION+$2039) +zappo_sequence = (DATA_LOCATION+$2C1B) +blue_zappo_rle = (DATA_LOCATION+$1737) +tunnel2_sequence = (DATA_LOCATION+$1718) +tunnel2_rle = (DATA_LOCATION+$0B0F) +tunnel1_sequence = (DATA_LOCATION+$16F2) +tunnel1_rle = (DATA_LOCATION+$0000) + +intro9_data_lz4: + .word (intro9_data_lz4_end-intro9_data_lz4) + .incbin "intro_data_09.lz4",11 +intro9_data_lz4_end: diff --git a/another_myst/intro_data_01.s b/another_myst/intro_data_01.s new file mode 100644 index 00000000..7f5dde23 --- /dev/null +++ b/another_myst/intro_data_01.s @@ -0,0 +1,124 @@ +;================================= +;================================= +; Intro Segment 01 Data (Building) +;================================= +;================================= + +.include "intro_graphics/01_building/intro_building.inc" +.include "intro_graphics/01_building/intro_car.inc" +.include "intro_graphics/01_building/intro_building_car.inc" + +;======================== +; Car driving up sequence + +building_sequence: + .byte 255 + .word building_rle + .byte 1 + .word building_rle + .byte 128+126 ; .word intro_car1 + .byte 128+2 ; .word intro_car2 + .byte 128+2 ; .word intro_car3 + .byte 128+2 ; .word intro_car4 + .byte 128+2 ; .word intro_car5 + .byte 128+2 ; .word intro_car6 + .byte 128+2 ; .word intro_car7 + .byte 128+2 ; .word intro_car8 + .byte 128+2 ; .word intro_car9 + .byte 128+126 ; .word intro_car10 +; .byte 0 + +;======================== +; Getting out of car sequence + +outtacar_sequence: + .byte 255 + .word building_car_rle + .byte 1 + .word building_car_rle + .byte 100 + .word intro_car12 + .byte 128+50 ; .word intro_car13 + .byte 128+125 ; .word intro_car14 + .byte 125 + .word intro_car14 + .byte 0 + + +;================================= +;================================= +; Intro Segment 02 Data (Door) +;================================= +;================================= + +; background graphics + +.include "intro_graphics/02_outer_door/outer_door.inc" +.include "intro_graphics/02_outer_door/feet.inc" +.include "intro_graphics/08_lightning/nothing.inc" + +;============================= +; Feet going in door sequence + +feet_sequence: + .byte 255 + .word outer_door_rle + .byte 1 + .word outer_door_rle + .byte 128+100 ; .word feet01_rle + .byte 128+10 ; .word feet02_rle + .byte 128+10 ; .word feet03_rle + .byte 128+10 ; .word feet04_rle + .byte 128+10 ; .word feet05_rle + .byte 128+10 ; .word feet06_rle + .byte 128+10 ; .word feet07_rle + .byte 128+10 ; .word feet08_rle + .byte 128+30 ; .word feet09_rle + .byte 128+10 ; .word feet10_rle + .byte 128+10 ; .word feet11_rle + .byte 128+10 ; .word feet12_rle + .byte 128+10 ; .word feet13_rle + .byte 128+10 ; .word feet14_rle + .byte 128+10 ; .word feet15_rle + .byte 10 + .word nothing_rle + .byte 100 + .word nothing_rle + .byte 0 + + +;================================= +;================================= +; Intro Segment 03 Data (Elevator) +;================================= +;================================= + +.include "intro_graphics/03_elevator/intro_elevator.inc" +.include "intro_graphics/03_elevator/intro_off_elevator.inc" +.include "intro_graphics/03_elevator/intro_walking.inc" + + + ; Elevator light co-ordinates + ; we load them backwards +indicators: + .byte 18,4 ; 4 + .byte 16,3 ; 3 + .byte 14,2 ; 2 + .byte 18,2 ; 1 + .byte 16,1 ; 0 + +; Walking off elevator sequence + +walking_sequence: + .byte 20 + .word walking01_rle + .byte 128+20 ; .word walking02_rle + .byte 128+20 ; .word walking03_rle + .byte 128+20 ; .word walking04_rle + .byte 128+20 ; .word walking05_rle + .byte 128+20 ; .word walking06_rle + .byte 128+20 ; .word walking07_rle + .byte 128+20 ; .word walking08_rle + .byte 20 + .word walking08_rle + .byte 0 diff --git a/another_myst/intro_data_04.s b/another_myst/intro_data_04.s new file mode 100644 index 00000000..44d6482d --- /dev/null +++ b/another_myst/intro_data_04.s @@ -0,0 +1,247 @@ +;================================= +;================================= +; Intro Segment 04 Data (Keypad) +;================================= +;================================= + +.include "intro_graphics/04_keypad/intro_scanner_door.inc" +.include "intro_graphics/04_keypad/intro_approach.inc" +.include "intro_graphics/04_keypad/intro_keypad_bg.inc" +.include "intro_graphics/04_keypad/intro_hands.inc" +.include "intro_graphics/04_keypad/intro_opening.inc" + +.include "intro_graphics/08_lightning/nothing.inc" + +; Approaching keypad sequence + +approach_sequence: + .byte 20 + .word approach01_rle + .byte 128+20 ; .word approach02_rle + .byte 128+20 ; .word approach03_rle + .byte 128+20 ; .word approach04_rle + .byte 128+20 ; .word approach05_rle + .byte 128+20 ; .word approach06_rle + .byte 128+20 ; .word approach07_rle + .byte 80 + .word approach07_rle + .byte 0 + +; Using keypad sequence + +keypad_sequence: + .byte 9 + .word hand04_01_rle + .byte 9 + .word hand04_02_rle + .byte 9 + .word hand04_03_rle + .byte 9 + .word hand04_02_rle + .byte 9 + .word hand05_01_rle + .byte 9 + .word hand05_02_rle + .byte 9 + .word hand05_03_rle + .byte 9 + .word hand05_04_rle + .byte 9 + .word hand01_01_rle + .byte 9 + .word hand01_02_rle + .byte 9 + .word hand01_03_rle + .byte 9 + .word hand04_02_rle + .byte 9 + .word hand01_02_rle + .byte 9 + .word hand01_03_rle + .byte 9 + .word hand04_02_rle + .byte 9 + .word hand09_01_rle + .byte 9 + .word hand09_02_rle + .byte 9 + .word hand09_03_rle + .byte 9 + .word hand09_04_rle + .byte 9 + .word hand09_05_rle + .byte 9 + .word hand03_01_rle + .byte 9 + .word hand03_02_rle + .byte 9 + .word hand03_03_rle + .byte 9 + .word hand03_04_rle + .byte 9 + .word hand02_01_rle + .byte 9 + .word hand02_02_rle + .byte 9 + .word hand02_03_rle + .byte 9 + .word hand02_04_rle + .byte 9 + .word hand02_05_rle + .byte 12 + .word hand02_05_rle + .byte 0 + + +; Door opening sequence + +opening_sequence: + .byte 15 + .word opening01_rle + .byte 128+15 ; .word opening02_rle + .byte 128+15 ; .word opening03_rle + .byte 128+15 ; .word opening04_rle + .byte 128+15 ; .word opening05_rle + .byte 128+15 ; .word opening06_rle + .byte 128+15 ; .word opening07_rle + .byte 128+15 ; .word opening08_rle + .byte 128+15 ; .word opening09_rle + .byte 128+15 ; .word opening10_rle + .byte 128+15 ; .word opening11_rle + .byte 128+15 ; .word opening12_rle + .byte 15 + .word nothing_rle + .byte 100 + .word nothing_rle + .byte 0 + + +;================================= +;================================= +; Intro Segment 05 Data (Scanner) +;================================= +;================================= + +.include "intro_graphics/05_scanner/intro_scanner.inc" +.include "intro_graphics/05_scanner/intro_scanning.inc" +.include "intro_graphics/05_scanner/intro_ai_bg.inc" +.include "intro_graphics/05_scanner/intro_ai.inc" + + +; Scanning sequence + +scanning_sequence: + .byte 15 + .word scan01_rle + .byte 128+15 ; .word scan02_rle + .byte 128+15 ; .word scan03_rle + .byte 128+15 ; .word scan04_rle + .byte 128+15 ; .word scan05_rle + .byte 128+15 ; .word scan06_rle + .byte 128+15 ; .word scan07_rle + .byte 128+15 ; .word scan08_rle + .byte 128+15 ; .word scan09_rle + .byte 128+15 ; .word scan10_rle + .byte 128+20 ; .word scan11_rle + .byte 128+20 ; .word scan12_rle + .byte 128+20 ; .word scan13_rle + .byte 128+20 ; .word scan14_rle + .byte 128+20 ; .word scan15_rle + .byte 128+20 ; .word scan16_rle + .byte 128+40 ; .word scan17_rle + .byte 128+40 ; .word scan18_rle + .byte 128+40 ; .word scan19_rle + .byte 40 + .word scan19_rle + .byte 0 + + +; AI sequence + +ai_sequence: + .byte 0,50 ; pause at start, no dna + .word ai01_rle ; slices + + .byte 0,50 ; pause at start, no dna + .word ai02_rle ; slices_zoom + + .byte 0,50 ; pasue as start, no dna + .word ai03_rle ; little circle + + .byte 0,50 ; pause at start, no dna + .word ai04_rle ; big circle + + .byte 1,20 ; pause longer, yes dna + .word ai05_rle ; key + + .byte 0,0 +; .word ai05_rle ; key +; .byte 0 + +static_pattern: + .word nothing_rle ; 0 + .word nothing_rle ; 2 + .word static01_rle ; 4 + .word static03_rle ; 6 + .word static02_rle ; 8 + .word static01_rle ; 10 + + ; Scanning text + +good_evening: + .byte 2,21,"GOOD EVENING PROFESSOR.",0 +ferrari: + .byte 2,21,"I SEE YOU HAVE DRIVEN HERE IN YOUR",0 + .byte 2,22,"FERRARI.",0 + + +dna_list: + .word dna0_sprite + .word dna1_sprite + .word dna2_sprite + .word dna3_sprite + .word dna4_sprite + .word dna5_sprite + .word dna6_sprite + .word dna7_sprite + +dna0_sprite: + .byte $7,$2 + .byte $66,$40,$40,$40,$40,$40,$cc + .byte $06,$00,$00,$00,$00,$00,$0c + +dna1_sprite: + .byte $7,$2 + .byte $00,$66,$40,$40,$40,$cc,$00 + .byte $00,$06,$00,$00,$00,$0c,$00 + +dna2_sprite: + .byte $7,$2 + .byte $00,$00,$66,$40,$cc,$00,$00 + .byte $00,$00,$06,$00,$0c,$00,$00 + +dna3_sprite: + .byte $7,$2 + .byte $00,$00,$00,$66,$00,$00,$00 + .byte $00,$00,$00,$06,$00,$00,$00 + +dna4_sprite: + .byte $7,$2 + .byte $00,$00,$CC,$40,$66,$00,$00 + .byte $00,$00,$0C,$00,$06,$00,$00 + +dna5_sprite: + .byte $7,$2 + .byte $00,$CC,$40,$40,$40,$66,$00 + .byte $00,$0C,$00,$00,$00,$06,$00 + +dna6_sprite: + .byte $7,$2 + .byte $CC,$40,$40,$40,$40,$40,$66 + .byte $0C,$00,$00,$00,$00,$00,$06 + +dna7_sprite: + .byte $7,$2 + .byte $66,$40,$40,$40,$40,$40,$cc + .byte $06,$00,$00,$00,$00,$00,$0c + diff --git a/another_myst/intro_data_06.s b/another_myst/intro_data_06.s new file mode 100644 index 00000000..6dfafb1b --- /dev/null +++ b/another_myst/intro_data_06.s @@ -0,0 +1,265 @@ +;================================= +;================================= +; Intro Segment 06 Data (Console) +;================================= +;================================= + +.include "intro_graphics/06_console/intro_desktop.inc" +.include "intro_graphics/06_console/intro_cursor.inc" +.include "intro_graphics/06_console/intro_collider.inc" + + +; Power-up sequence + +powerup_sequence: + .byte 20 + .word powerup01_rle + .byte 128+60 ; .word powerup02_rle + .byte 128+20 ; .word powerup03_rle + .byte 20 + .word powerup03_rle + .byte 0 + + +; Cursor sequence + +cursor_sequence: + .byte 60 + .word cursor01_rle + .byte 128+40 ; .word cursor02_rle + .byte 128+20 ; .word cursor03_rle + .byte 128+20 ; .word cursor04_rle + .byte 128+20 ; .word cursor05_rle + .byte 128+20 ; .word cursor06_rle + .byte 128+20 ; .word cursor07_rle + .byte 128+20 ; .word cursor08_rle + .byte 60 + .word cursor08_rle + .byte 0 + + +peanut: + .byte 0,2,"COPYRIGHT (C) 1977 PEANUT COMPUTER, INC.",0 + .byte 0,3,"ALL RIGHTS RESERVED.",0 + .byte 0,5,"CDOS VERSION 5.01",0 + .byte 0,18,"> ",(' '|$80),0 + .byte 255 +project_23: + .byte "RUN PROJECT 23",0 + +accelerator: + .byte 0,0, "MODIFICATION OF PARAMETERS",0 + .byte 0,1, "RELATING TO PARTICLE",0 + .byte 0,2, "ACCELERATOR (SYNCHOTRON).",0 + .byte 0,3, " ___________",0 + .byte 0,4, ":ROOM 3 ",('+'|$80),":\ E: 23%",0 + .byte 0,5, ": : : G: .005",0 + .byte 0,6, ": : : : RK: 77.2L",0 + .byte 0,7, ": : :",0 + .byte 0,8, ": : : OPT: G+",0 + .byte 0,9, ": : : :",0 + .byte 0,10, ":__________:_: SHIELD:",0 + .byte 0,11, ":ROOM 1 ",('+'|$80),": : 1: OFF",0 + .byte 0,12, ": : : : 2: ON",0 + .byte 0,13, ": : : 3: ON",0 + .byte 0,14, ": : : :",0 + .byte 0,15, ": : : P^: 1",0 + .byte 0,16, ": : : :",0 + .byte 0,17, ": _________:_:",0 + .byte 0,18, ":/_________:/",0 + .byte 255 + +accel_paramaters: + .byte $15,$6,' ',20 ; 21,4 = $615 Cursor starts at E + .byte $15,$6,' '|$80,1 ; Cusrsor off at E + .byte $96,$6,' ',100 ; 22,5 = $696 Down to .005 (pauses) + .byte $96,$6,' '|$80,1 ; off + .byte $18,$7,' ',20 ; 24,6 = $718 End of RK + .byte $18,$7,' '|$80,1 ; off + .byte $3E,$4,' ',100 ; 22,8 = $43E End of g+ (pauses) + .byte $3E,$4,' '|$80,1 ; off + .byte $3D,$4,' ',20 ; 21,8 = $43D erase + + .byte $3D,$4,'-'|$80,1 ; change to - (pauses) + .byte $3E,$4,' ',100 ; 22,8 = $43e change to - (pauses) + .byte $3E,$4,' '|$80,1 ; off + .byte $BD,$5,' ',100 ; 22,11= $5bd down to 1 (pauses) + .byte $BD,$5,' '|$80,1 ; off + .byte $3C,$6,' ',20 ; 21,12= $63c down to 2 + .byte $3C,$6,' '|$80,1 ; off + .byte $BC,$6,' ',20 ; 21,13= $6bc down to 3 + .byte $BC,$6,' '|$80,1 ; off + .byte $BC,$7,' ',20 ; 21,15= $7bc down to P (pause) + .byte $BC,$7,' '|$80,1 ; off + .byte $ff + + + ; FLASH: RUN EXPERIMENT ? (pause) +run_experiment: + .byte 10,20,"RUN EXPERIMENT ?",0 +run_blank: + .byte 10,20," ",0 + +;'R'|$80,'U'|$80,'N'|$80,' '|$80 +; .byte 10,20,'R'|$80,'U'|$80,'N'|$80,' '|$80 +; .byte 'E'|$80,'X'|$80,'P'|$80,'E'|$80,'R'|$80,'I'|$80 +; .byte 'M'|$80,'E'|$80,'N'|$80,'T'|$80,' '|$80,'?'|$80,0 + + + + + ; --- Theoretical Study --- + ; make this inverse? +theoretical_study: + .byte 7,20,"--- THEORETICAL STUDY ---",0 + + ; - Phase 0: + ; INJECTION of particles + ; into synchrotron +phase0: + .byte 0,21,"- PHASE 0:",0 + .byte 0,22,"INJECTION OF PARTICLES",0 + .byte 0,23,"INTO SYNCHROTRON",0 + .byte $ff + + ; - Phase 1: + ; Particle ACCELERATION. +phase1: + .byte 0,21,"- PHASE 1:",0 + .byte 0,22,"PARTICLE ACCELERATION.",0 + .byte $ff + + ; - Phase 2: + ; EJECTION of particles + ; on the shield. +phase2: + .byte 0,21,"- PHASE 2:",0 + .byte 0,22,"EJECTION OF PARTICLES",0 + .byte 0,23,"ON THE SHIELD.",0 + .byte $ff + + ; A N A L Y S I S +analysis: + .byte 8,22,"A N A L Y S I S",0 + + ; - RESULT: + ; Probability of creating: + ; ANTIMATTER: 91.V % + ; NEUTRINO 27: 0.04 % + ; NEUTRINO 424: 18 % +result: + .byte 0,20,"- RESULT, PROBABILITY OF CREATING:",0 + .byte 10,21,"ANTIMATTER: 91.V %",0 + .byte 10,22,"NEUTRINO 27: 0.04 %",0 + .byte 10,23,"NEUTRINO 424: 18 %",0 + .byte $ff + + ; Practical verification Y/N ?" +practical_verification: + .byte 6,21,"PRACTICAL VERIFICATION Y/N ?",0 + + ; THE EXPERIMENT WILL BEGIN IN 20 SECONDS +experiment: + .byte 0,20,"THE EXPERIMENT WILL BEGIN IN 20 SECONDS",0 + .byte 29,20,"19",0 + .byte 29,20,"18",0 + .byte 29,20,"17",0 + + + ; Particle co-ordinates +particles: + .byte 21,23 ; 0 + .byte 21,15 ; 1 + .byte 22,7 ; 2 + .byte 27,2 ; 3 + .byte 32,6 ; 4 + .byte 34,13 ; 5 + .byte 31,26 ; 6 + .byte 27,28 ; 7 + + +shield_sequence: + .byte 30 + .word collider_p200_rle + .byte 30 + .word collider_p201_rle + .byte 30 + .word collider_p202_rle + .byte 30 + .word collider_p203_rle + .byte 30 + .word collider_p200_rle + .byte 0 + + +message0: + .byte 8,22,"SHIELD 9A.5F OK ",0 +message1: + .byte 8,22,"FLUX % 5.0177 OK",0 +message2: + .byte 8,22,"CDI VECTOR OK ",0 +message3: + .byte 8,22,"%%%DDD OK ",0 +message4: + .byte 8,22,"RACE-TRACK OK ",0 + +message_list: + .word message0 + .word message1 + .word message2 + .word message3 + .word message4 + + +five: + .byte 29,20,"5 ",0 +four: + .byte 29,20,"4 ",0 +three: + .byte 29,20,"3 ",0 +two: + .byte 29,20,"2 ",0 +one: + .byte 29,20,"1 ",0 +zero: + .byte 29,20,"0 ",0 + +times: + ; note, the second zero is there because we get a TIME_COUNT + ; of 6 even though it is printed then erased (but never displayed) + .word five,four,three,two,one,zero,zero + + +;================================= +;================================= +; Intro Segment 07 Data (Soda) +;================================= +;================================= + +.include "intro_graphics/07_soda/intro_open_soda.inc" +.include "intro_graphics/07_soda/intro_drinking.inc" + +; Soda sequence + +soda_sequence: + .byte 1 + .word soda01_rle + .byte 128+30 ; .word soda02_rle + .byte 128+15 ; .word soda03_rle + .byte 128+15 ; .word soda04_rle + .byte 128+15 ; .word soda05_rle + .byte 128+15 ; .word soda06_rle + .byte 128+15 ; .word soda07_rle + .byte 128+15 ; .word soda08_rle + .byte 128+15 ; .word soda09_rle + .byte 20 + .word soda09_rle + .byte 0 + + +drinking_sequence: + .byte 30 + .word drinking02_rle + .byte 128+30 ; .word drinking03_rle + .byte 128+30 ; .word drinking04_rle + .byte 128+30 ; .word drinking05_rle + .byte 0 diff --git a/another_myst/intro_data_08.s b/another_myst/intro_data_08.s new file mode 100644 index 00000000..16bb5ae7 --- /dev/null +++ b/another_myst/intro_data_08.s @@ -0,0 +1,228 @@ +;================================= +;================================= +; Intro Segment 08 Data (Lightning) +;================================= +;================================= + +.include "intro_graphics/08_lightning/lightning.inc" +.include "intro_graphics/01_building/intro_building_car.inc" + + ; Lightning sequence +lightning_sequence: + ; 125 start + ; 126, small central lightning 1,2,3,4 + ; + .byte 100 + .word storm01_rle + .byte 7 + .word storm02_rle + .byte 7 + .word storm03_rle + .byte 7 + .word storm04_rle + .byte 7 + ; 128.2 center glow in cloud 5,6,5 + ; + .word nothing_rle + .byte 100 + .word storm05_rle + .byte 7 + .word storm06_rle + .byte 7 + .word storm05_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 128.7 inverse flash + ; + .word flash_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 129.6 center left glow in cloud 8 + ; + .word storm08_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 130.1 glow in cloud, right 9 + ; + .word storm09_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 130.4 glow in cloud, right 10 + ; + .word storm10_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 131.7 small glow, center right 11,12 + ; + .word storm11_rle + .byte 7 + .word storm12_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 133.5 lightning bolt right 13,14,15,16 + ; + .word storm13_rle + .byte 7 + .word storm14_rle + .byte 7 + .word storm15_rle + .byte 7 + .word storm16_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 134.7 glow center left 8 + ; + .word storm08_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 135.2 small glow center 5,6,5 + ; + .word storm05_rle + .byte 7 + .word storm06_rle + .byte 7 + .word storm05_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 135.4 inverse flash + ; + .word flash_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 135.8 another inverse flash + ; + .word flash_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 135.5 glow right 9 + ; + .word storm09_rle + .byte 7 + .word nothing_rle + .byte 40 + ; 136 small glow right 0 + ; + .word storm10_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 138.6 cloud glow 12,11,12 + ; + .word storm12_rle + .byte 7 + .word storm11_rle + .byte 7 + .word storm12_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 139.6 small bolt center 1,2,3,4 + ; + .word storm01_rle + .byte 7 + .word storm02_rle + .byte 7 + .word storm03_rle + .byte 7 + .word storm04_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 141.4 right glow in cloud 10 + ; + .word storm10_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 143 glow in center 5,6,5 + ; + .word storm05_rle + .byte 7 + .word storm06_rle + .byte 7 + .word storm05_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 144.8 glow left 8 + ; + .word storm08_rle + .byte 7 + .word nothing_rle + .byte 80 + ; 145.7 center glow cloud 11,12 + ; + .word storm11_rle + .byte 7 + .word storm12_rle + .byte 7 + .word nothing_rle + .byte 0 +; .word nothing_rle + + ;============== + ; split, as was > 256 + +bolt_sequence: + .byte 80 + ;======================= + ; 147 bolt right + ;======================= + ; 13,14,15 + .word storm13_rle + .byte 128+5 ; .word storm14_rle + .byte 128+5 ; .word storm15_rle + .byte 5 + ; screen goes white + ; *all white + .word white_rle + .byte 8 + ; lightning animation + ; * bolt1, 2,3,4,5,6,7 + .word bolt1_rle + .byte 128+5 ; .word bolt2_rle + .byte 128+5 ; .word bolt3_rle + .byte 128+5 ; .word bolt4_rle + .byte 128+5 ; .word bolt5_rle + .byte 128+5 ; .word bolt6_rle + .byte 128+5 ; .word bolt7_rle + .byte 5 + ; * all white (a while) + .word white_rle + ; * all black (a while) + .word 128+30,black_rle + .byte 30 + ; 148.3 big bolt behind car + ; 29 .. 38, 40.. 42 (38 twice as long?) + .word storm29_rle + .byte 128+5 ; .word storm30_rle + .byte 128+5 ; .word storm31_rle + .byte 128+5 ; .word storm32_rle + .byte 128+5 ; .word storm33_rle + .byte 128+5 ; .word storm34_rle + .byte 128+5 ; .word storm35_rle + .byte 128+5 ; .word storm36_rle + .byte 128+5 ; .word storm37_rle + .byte 128+5 ; .word storm38_rle + .byte 128+5 ; .word storm40_rle + .byte 128+5 ; .word storm41_rle + .byte 128+5 ; .word storm42_rle + .byte 5 + ; by 150 faded out and on to tunnel + .word nothing_rle + .byte 0 +; .word nothing_rle + + + diff --git a/another_myst/intro_data_09.s b/another_myst/intro_data_09.s new file mode 100644 index 00000000..01ccd8b2 --- /dev/null +++ b/another_myst/intro_data_09.s @@ -0,0 +1,315 @@ +;================================= +;================================= +; Intro Segment 09 Data (Tunnel) +;================================= +;================================= + + + +; background graphics + +.include "intro_graphics/09_tunnel/intro_tunnel1.inc" +.include "intro_graphics/09_tunnel/intro_tunnel2.inc" +.include "intro_graphics/08_lightning/nothing.inc" +.include "intro_graphics/08_lightning/whiteblack.inc" + + ;======================= + ; Tunnel1 Sequence + ;======================= +tunnel1_sequence: + .byte 10 + .word nothing_rle + .byte 50 + ; red blob + .word tunnel1_01_rle + .byte 128+2 ; .word tunnel1_02_rle + .byte 128+2 ; .word tunnel1_03_rle + .byte 128+2 ; .word tunnel1_04_rle + .byte 128+2 ; .word tunnel1_05_rle + .byte 2 + + ; lightning blob + .word nothing_rle + .byte 50 + .word tunnel1_06_rle + .byte 128+2 ; .word tunnel1_07_rle + .byte 2 + .word white_rle + .byte 2 + .word tunnel1_08_rle + .byte 128+2 ; .word tunnel1_09_rle + .byte 128+2 ; .word tunnel1_10_rle + .byte 128+2 ; .word tunnel1_11_rle + .byte 128+2 ; .word tunnel1_12_rle + .byte 128+2 ; .word tunnel1_13_rle + .byte 128+2 ; .word tunnel1_14_rle + .byte 128+2 ; .word tunnel1_15_rle + .byte 128+2 ; .word tunnel1_16_rle + .byte 128+2 ; .word tunnel1_17_rle + .byte 128+2 ; .word tunnel1_18_rle + .byte 128+2 ; .word tunnel1_19_rle + .byte 2 + .word nothing_rle + .byte 0 + + + ;======================= + ; Tunnel2 Sequence + ;======================= +tunnel2_sequence: + .byte 10 + .word nothing_rle + .byte 50 + ; red blob + .word tunnel2_01_rle + .byte 128+2 ; .word tunnel2_02_rle + .byte 128+2 ; .word tunnel2_03_rle + .byte 128+2 ; .word tunnel2_04_rle + .byte 128+2 ; .word tunnel2_05_rle + .byte 128+2 ; .word tunnel2_06_rle + .byte 128+2 ; .word tunnel2_07_rle + .byte 128+2 ; .word tunnel2_08_rle + .byte 128+2 ; .word tunnel2_09_rle + .byte 2 + .word nothing_rle + .byte 50 + + ; lightning blob + .word tunnel2_10_rle + .byte 128+2 ; .word tunnel2_11_rle + .byte 128+2 ; .word tunnel2_12_rle + .byte 128+2 ; .word tunnel2_13_rle + .byte 128+2 ; .word tunnel2_14_rle + .byte 128+2 ; .word tunnel2_15_rle + .byte 128+2 ; .word tunnel2_16_rle + .byte 128+2 ; .word tunnel2_17_rle + .byte 2 + .word nothing_rle + .byte 0 + + + +;================================= +;================================= +; Intro Segment 10 Data (Zappo) +;================================= +;================================= + +.include "intro_graphics/10_gone/intro_zappo.inc" +.include "intro_graphics/10_gone/intro_gone.inc" + + ;======================= + ; Zappo Sequence + ;======================= +zappo_sequence: + + .byte 50 + .word white_rle + + .byte 2 + .word zappo01_rle ; B + + .byte 128+2 ; .word zappo02_rle ; B + .byte 128+2 ; .word zappo03_rle ; A + .byte 128+2 ; .word zappo04_rle ; B + .byte 128+2 ; .word zappo05_rle ; B + + .byte 255 + .word zappo03_rle ; load A + .byte 2 + .word zappo06_rle ; A + + .byte 255 + .word blue_zappo_rle ; load b + .byte 2 + .word zappo07_rle ; B + + .byte 2 + .word zappo08_rle ; B + + .byte 255 + .word zappo03_rle ; load A + .byte 2 + .word zappo09_rle ; A + + .byte 255 + .word blue_zappo_rle ; load b + .byte 2 + .word zappo10_rle ; B + + .byte 255 + .word zappo03_rle ; load A + .byte 2 + .word zappo11_rle ; A + + .byte 255 + .word blue_zappo_rle ; load b + .byte 2 + .word zappo12_rle ; B + .byte 128+2 ; .word zappo13_rle ; B + .byte 128+2 ; .word zappo14_rle ; B + + .byte 255 + .word zappo03_rle ; load A + .byte 2 + .word zappo15_rle ; A + + .byte 255 + .word blue_zappo_rle ; load b + .byte 2 + .word zappo16_rle ; B + .byte 128+2 ; .word zappo17_rle ; B + .byte 2 + .word white_rle + .byte 128+5 ; .word black_rle + .byte 5 + .word white_rle + .byte 128+5 ; .word black_rle +; .byte 5 +; .word white_rle +; .byte 1 +; .word black_rle +; .byte 1 +; .word white_rle +; .byte 1 +; .word black_rle +; .byte 1 +; .word white_rle +; .byte 1 +; .word black_rle + .byte 0 + .word nothing_rle + + + ;======================= + ; Gone Sequence + ;======================= +gone_sequence: + + .byte 50 + .word white_rle + + .byte 7 + .word gone01_rle ; B + + .byte 128+7 ; .word gone02_rle ; B + .byte 128+7 ; .word gone03_rle ; B + .byte 128+7 ; .word gone04_rle ; B + .byte 128+7 ; .word gone05_rle ; B + .byte 128+7 ; .word gone06_rle ; B + .byte 128+7 ; .word gone07_rle ; B + .byte 128+7 ; .word gone08_rle ; B + .byte 128+7 ; .word gone09_rle ; LB + .byte 128+7 ; .word gone10_rle ; CY + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone11_rle ; LB + + .byte 255 + .word gone_rle ; B back into $c00 + .byte 7 + .word gone02_rle ; B (12 is dupe of 2) + + .byte 7 + .word gone13_rle ; B + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone14_rle ; LB + + .byte 255 + .word gone_rle ; B back into $c00 + plain + .byte 7 + .word nothing_rle + + .byte 7 + .word gone16_rle ; B + + .byte 7 + .word nothing_rle ; B (plain?) + + .byte 7 + .word gone18_rle ; B + .byte 128+7 ; .word gone19_rle ; B + .byte 128+7 ; .word gone20_rle ; B + .byte 128+7 ; .word gone21_rle ; B + + .byte 7 + .word nothing_rle ; B (plain?) + + .byte 7 + .word gone23_rle ; B + .byte 128+7 ; .word gone24_rle ; B + .byte 128+7 ; .word gone25_rle ; B + .byte 128+7 ; .word gone26_rle ; B + .byte 128+7 ; .word gone27_rle ; B + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone28_rle ; LB + +; .byte 255 +; .word gone10_rle ; CY into $c00 + .byte 7 + .word gone10_rle ; CY (same as 10) + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone28_rle ; LB (30 same as 28) + + .byte 255 + .word gone_rle ; B back into $c00 + plain + .byte 7 + .word gone31_rle ; B + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone32_rle ; LB + + .byte 255 + .word gone_rle ; B back into $c00 + plain + .byte 7 + .word nothing_rle ; B (plain?) + + .byte 7 + .word gone34_rle ; B + + .byte 128+7 ; .word gone35_rle ; B + .byte 128+7 ; .word gone36_rle ; B + .byte 128+7 ; .word gone37_rle ; B + .byte 128+7 ; .word gone38_rle ; B + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone39_rle ; LB + + .byte 255 + .word gone10_rle ; CY into $c00 + .byte 7 + .word gone40_rle ; CY + + .byte 7 + .word gone10_rle ; CY (same as 10) + + .byte 255 + .word gone09_rle ; LB into $c00 + .byte 7 + .word gone42_rle ; LB + + .byte 255 + .word gone_rle ; B back into $c00 + plain + .byte 7 + .word gone43_rle ; B + + .byte 7 + .word nothing_rle + .byte 0 + + diff --git a/another_myst/loader.s b/another_myst/loader.s new file mode 100644 index 00000000..1180c8f4 --- /dev/null +++ b/another_myst/loader.s @@ -0,0 +1,711 @@ +; Loader for OOTW + +; Used to be standalone, now loaded as part of TITLE +; But still loads at $1400 + +; the TITLE program sets $05 with which thing to load +; this part of the program stays resident, so when a level ends +; it changes $05 (WHICH_LOAD) and this code loads the proper executable + +nibtbl = $300 ; nothing uses the bottom 128 bytes of $300, do they? +bit2tbl = $380 ; bit2tbl: .res 86 ; = nibtbl+128 +filbuf = $3D6 ; filbuf: .res 4 ; = bit2tbl+86 + +; read any file slot 6 version +; based on FASTLD6 and RTS copyright (c) Peter Ferrie 2011-2013,2018 + +; modified to assembled with ca65 -- vmw +; added code to patch it to run from current disk slot -- vmw + + +; WHICH_LOAD = $05 ; thing to load + 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 + namlo = $f8 + namhi = $f9 +; TEMPY = $fa + step = $fd ; state for stepper motor + tmptrk = $fe ; temporary copy of current track + phase = $ff ; current phase for /seek +; OUTL = $fe ; for picking filename +; OUTH = $ff + + dirbuf = $c00 + ; note, don't put this immediately below + ; the value being read as destaddr-4 + ; is temporarily overwritten during read + ; process + + + FILENAME = $280 + + ;=================================================== + ;=================================================== + ; START / INIT + ;=================================================== + ;=================================================== + +loader_start: + jsr init ; unhook DOS, init nibble table + + + ;=================================================== + ;=================================================== + ; SETUP THE FILENAME + ;=================================================== + ;=================================================== + +which_load_loop: + ldx WHICH_LOAD + beq load_intro + jmp load_ending + + lda #ootw_filename + sta OUTH + + ldy #6 + cpx #10 + bcc load_less_than_10 ; blt + + txa + sec + sbc #10 + tax + + lda #'1' ; assume it's 10-15 + sta (OUTL),Y + iny + +load_less_than_10: + txa + clc + adc #48 + sta (OUTL),Y + iny + lda #0 + sta (OUTL),Y ; be sure NUL terminated + ; might be issue if load >10 level + ; then back to lower? that possible? + + jmp opendir_filename + +load_intro: + lda #intro_filename + sta OUTH + bne opendir_filename ; branch always + +load_ending: + lda #ending_filename + sta OUTH + ; fallthrough + + + ;=================================================== + ;=================================================== + ; SET UP DOS3.3 FILENAME + ;=================================================== + ;=================================================== + +opendir_filename: + + ; clear out the filename with $A0 (space) + + lda #FILENAME + sta namhi + + ldy #29 +wipe_filename_loop: + lda #$A0 + sta (namlo),Y + dey + bpl wipe_filename_loop + + ldy #0 +copy_filename_loop: + lda (OUTL),Y + beq copy_filename_done + ora #$80 + sta (namlo),Y + iny + bne copy_filename_loop + +copy_filename_done: + jsr opendir ; open and read entire file into memory + + jsr $1700 ; jump to common entry point + + ; hope they updated the WHICH_LOAD value + + jmp which_load_loop + +; filename to open is 30-character Apple text, must be padded with space ($A0) +;filename: +; .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 +; .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 +; .byte $A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0,$A0 + +intro_filename: + .byte "INTRO",0 + +ending_filename: + .byte "ANOTHERMIST",0 + +ootw_filename: + .byte "OOTW_C",0,0,0 + + + + ;=================================================== + ;=================================================== + ; INIT (build nibble table) + ;=================================================== + ;=================================================== + + ;unhook DOS and build nibble table + +init: + ; patch to use current drive + + ; locate input paramater list + jsr $3E3 + ; result is in A:Y + sta $FF + sty $FE + ldy #1 + lda ($FE),y + + ; list+1 should have slot<<8 + + + ora #$80 ; add in $80 + + ; c0e0 + sta mlsmc06+1 + + ; c0e8 + clc + adc #8 + sta mlsmc02+1 + sta mlsmc07+1 + + ; c0e9 + clc + adc #1 + sta mlsmc01+1 + + ; c0ec + clc + adc #3 + sta mlsmc03+1 + sta mlsmc04+1 + sta mlsmc05+1 + + jsr $fe93 ; clear COUT + jsr $fe89 ; clear KEYIN + + ;======================== + ; Create nibble table + ; Note: the table starts 16 bytes in, and is sparse + ; so it doesn't entirely look like the DOS33 table at + + ldy #0 + ldx #3 +L1: stx $3c ; store tempx (3?) + txa ; a=x (a=3) + asl ; a*=2 (a=6) + bit $3c ; a&tempx, set N/V (a=6) + beq L3 ; if 0, skip to L3 + ora $3c ; a|=tempx (a=7) + eor #$ff ; a=~a (a=f8) + and #$7e ; a&=0x7e 0111 1110 (a=78) +L2: bcs L3 ; this set way back at asl?? + lsr ; a>>1 a=3c c=0 + ; a=1e c=0 + ; a=0f c=0 + ; a=07 c=1 + bne L2 ; if a!=0 goto l2 + tya ; if a==0, a=y + sta nibtbl, x ; write out to table + iny ; increment y +L3: inx ; increment x x=4, a=0f + bpl L1 ; loop while high bit not set + + rts + + + ;=================================================== + ;=================================================== + ; file not found + ;=================================================== + ;=================================================== + +file_not_found: + +mlsmc07:lda $c0e8 ; turn off drive motor? + + jsr TEXT + jsr HOME + + ldy #0 + + lda #disk_string + sta OUTH + +quick_print: + lda (OUTL),Y + beq quick_print_done + jsr COUT1 + iny + jmp quick_print + +quick_print_done: +; rts + +; jsr quick_print + +fnf_keypress: + lda KEYPRESS + bpl fnf_keypress + bit KEYRESET + + jmp which_load_loop + +disk_string: +.byte "INSERT OTHER DISK, PRESS RETURN",0 + + + + + + ;=================================================== + ;=================================================== + ; OPENDIR: actually load the file + ;=================================================== + ;=================================================== + + ; turn on drive and read volume table of contents +opendir: +mlsmc01:lda $c0e9 ; turn slot#6 drive on + ldx #0 + stx adrlo ; zero out adrlo + stx secsize ; zero out secsize + lda #$11 ; a=$11 (VTOC) + jsr readdirsec +firstent: + + lda dirbuf+1 + + ; lock if entry not found +entry_not_found: + beq file_not_found + + ; read directory sector + + ldx dirbuf+2 + jsr seekread1 + ldy #7 ;number of directory entries in a sector + ldx #$2b ;offset of filename in directory entry +nextent: + tya + pha ; was **phy** + txa + pha ; was **phx** + ldy #$1d + + ; match name backwards (slower but smaller) + +L4: + lda (namlo), y + cmp dirbuf, x + beq foundname + pla + + ; move to next directory in this block, if possible + + clc + adc #$23 + tax + pla + tay ; was **ply** + dey + bne nextent + beq firstent ; was **bra** + +foundname: + dex + dey + bpl L4 + pla + tay ; was **ply** + pla + + ; read track/sector list + + lda dirbuf-32, y + ldx dirbuf-31, y + jsr seekread1 + + ; read load offset and length info only, initially + + lda #filbuf + jsr seekread + + ; reduce load offset by 4, to account for offset and length + + sec + lda filbuf + sbc #4 + sta adrlo + + lda filbuf+1 + sbc #0 + sta adrhi + + ; save on stack bytes that will be overwritten by extra read + + ldy #3 +L5: + lda (adrlo), y + pha + dey + bpl L5 + + lda adrhi + pha + lda adrlo + pha + + ; increase load size by 4, to account for offst and length + + lda filbuf+2 + adc #3 + sta sizelo + sta secsize + + lda filbuf+3 + adc #0 + sta sizehi + beq readfirst + lda #0 ; was **stz secsize** + sta secsize + +readfirst: + ldy #$0c + + ; read a file sector + +readnext: + tya + pha + lda dirbuf, y ; A = track + ldx dirbuf+1, y ; x = sector + jsr seekread1 + pla + tay + + ; if low count is non-zero then we are done + ; (can happen only for partial last block) + + lda secsize + bne readdone + + ; continue if more than $100 bytes left + + dec sizehi + bne L6 + + ; set read size to min(length, $100) + + lda sizelo + beq readdone + sta secsize +L6: + inc adrhi + iny + iny + bne readnext + + ; save current address for after t/s read + + lda adrhi + pha + lda adrlo + pha + lda #0 + sta adrlo ; was **stz adrlo** + + ; read next track/sector sector + + lda dirbuf+1 + ldx dirbuf+2 + jsr readdirsec + clc + + ; restore current address +readdone: + pla + sta adrlo ; code originally had this backwards + pla + sta adrhi + bcc readfirst + +mlsmc02:lda $c0e8 + + ; restore from stack bytes that were overwritten by extra read + + ldx #3 + ldy #0 +L7: + pla + sta (adrlo), y + iny + dex + bpl L7 + rts + + + ;====================== + ; readdirsec + ;====================== + ; a = track? + ; x = sector? +readdirsec: + ldy #>dirbuf +seekread: + sty adrhi +seekread1: + sta phase + lda sectbl, x + sta reqsec + jsr readadr + + ; if track does not match, then seek + + cpx phase + beq checksec + jsr seek + + + ;========================================= + ; re merge in with qkumba's recent changes + ; to fix seek problem? + ;========================================= + + ; [re-]read sector + +re_read_addr: + jsr readadr +checksec: + cmp reqsec + bne re_read_addr + + ;========================= + ; read sector data + ;========================= + +readdata: + jsr readd5aa + eor #$ad ; zero A if match + bne re_read_addr + +L12: +mlsmc03:ldx $c0ec ; read until valid data (high bit set) + bpl L12 + eor nibtbl-$80, x + sta bit2tbl-$aa, y + iny + bne L12 +L13: +mlsmc04:ldx $c0ec ; read until valid data (high bit set) + bpl L13 + eor nibtbl-$80, x + sta (adrlo), y ; the real address + iny + cpy secsize + bne L13 + ldy #0 +L14: + ldx #$a9 +L15: + inx + beq L14 + lda (adrlo), y + lsr bit2tbl-$aa, x + rol + lsr bit2tbl-$aa, x + rol + sta (adrlo), y + iny + cpy secsize + bne L15 + rts + + ; no tricks here, just the regular stuff + + ;======================= + ; readaddr -- read the address field + ;======================= + ; Find address field, put track in cutrk, sector in tmpsec + +readadr: + jsr readd5aa + cmp #$96 + bne readadr + ldy #3 ; three? + ; first read volume/volume + ; then track/track + ; then sector/sector? +adr_read_two_bytes: + tax + jsr readnib + rol + sta tmpsec + jsr readnib + and tmpsec + dey + bne adr_read_two_bytes + rts + + ;======================== + ; make sure we see the $D5 $AA pattern + +readd5aa: +L16: + jsr readnib +L17: + cmp #$d5 + bne L16 + jsr readnib + cmp #$aa + bne L17 + tay ; we need Y=#$AA later + +readnib: +mlsmc05:lda $c0ec ; read until valid (high bit set) + bpl readnib + +seekret: + rts + + ;===================== + ; SEEK + ;===================== + ; current track in X? + ; desired track in phase + +seek: + ldy #0 + sty step + asl phase ; multiply by two + txa ; current track? + asl ; mul by two +copy_cur: + tax + sta tmptrk + sec + sbc phase + beq L22 + bcs L18 + eor #$ff + inx + bcc L19 +L18: + sbc #1 + dex +L19: + cmp step + bcc L20 + lda step +L20: + cmp #8 + bcs L21 + tay + sec +L21: + txa + pha + ldx step1, y +L22: + php + bne L24 +L23: + clc + lda tmptrk + ldx step2, y +L24: + stx tmpsec + and #3 + rol + tax + lsr +mlsmc06:lda $c0e0, x +L25: + ldx #$12 +L26: + dex + bpl L26 + dec tmpsec + bne L25 + bcs L23 + plp + beq seekret + pla + inc step + bne copy_cur + + + +step1: .byte $01, $30, $28, $24, $20, $1e, $1d, $1c +step2: .byte $70, $2c, $26, $22, $1f, $1e, $1d, $1c + +sectbl: .byte $00,$0d,$0b,$09,$07,$05,$03,$01,$0e,$0c,$0a,$08,$06,$04,$02,$0f + + +; From $BA96 of DOS33 +;nibtbl: .res 128 ; = * +; .byte $00,$01,$98,$99,$02,$03,$9C,$04 ; $BA96 ; 00 +; .byte $05,$06,$A0,$A1,$A2,$A4,$A4,$A5 ; $BA9E ; 08 +; .byte $07,$08,$A8,$A9,$AA,$09,$0A,$0B ; $BAA6 ; 10 +; .byte $0C,$0D,$B0,$B1,$0E,$0F,$10,$11 ; $BAAE ; 18 +; .byte $12,$13,$B8,$14,$15,$16,$17,$18 ; $BAB6 ; 20 +; .byte $19,$1A,$C0,$C1,$C2,$C3,$C4,$C5 ; $BABE ; 28 +; .byte $C6,$C7,$C8,$C9,$CA,$1B,$CC,$1C ; $BAC6 ; 30 +; .byte $1D,$1E,$D0,$D1,$D2,$1E,$D4,$D5 ; $BACE ; 38 +; .byte $20,$21,$D8,$22,$23,$24,$25,$26 ; $BAD6 ; 40 +; .byte $27,$28,$E0,$E1,$E2,$E3,$E4,$29 ; $BADE ; 48 +; .byte $2A,$2B,$E8,$2C,$2D,$2E,$2F,$30 ; $BAE6 ; 50 +; .byte $31,$32,$F0,$F1,$33,$34,$35,$36 ; $BAEE ; 58 +; .byte $37,$38,$F8,$39,$3A,$3B,$3C,$3D ; $BAF6 ; 60 +; .byte $3E,$3F,$13,$00,$01,$02,$01,$00 ; $BAFE ; 68 +; .byte $00,$00,$00,$00,$00,$00,$00,$00 +; .byte $00,$00,$00,$00,$00,$00,$00,$00 + + +;bit2tbl: .res 86 ; = nibtbl+128 +;filbuf: .res 4 ; = bit2tbl+86 + ;dataend = filbuf+4 + +loader_end: + +.assert (3, error, "loader too big" diff --git a/another_myst/lz4_decode.s b/another_myst/lz4_decode.s new file mode 100644 index 00000000..96016bc5 --- /dev/null +++ b/another_myst/lz4_decode.s @@ -0,0 +1,207 @@ +; LZ4 data decompressor for Apple II + + +; NOTE: this version is optimized for loading LORES graphics +; on even page boundaries (usually $C00) +; Don't use it for generic purposes! + +; Code originally by Peter Ferrie (qkumba) (peter.ferrie@gmail.com) +; "LZ4 unpacker in 143 bytes (6502 version) (2013)" +; http://pferrie.host22.com/misc/appleii.htm + +; For LZ4 reference see +; https://github.com/lz4/lz4/wiki/lz4_Frame_format.md + + +; We expect src in LZ4_SRC +; Incoming Accumulator is page to write to +; Size is in first 2 bytes pointed to by LZ4_SRC +; LZ4 data should have 11 byte header stripped off beginning +; and 8 byte checksum stripped off the end + +;LZ4_SRC EQU $00 ; 25:10 (size=7c) +;LZ4_DST EQU $02 ; 0c:00 +;LZ4_END EQU $04 ; 25:8c +;COUNT EQU $06 +;DELTA EQU $08 + + + ;====================== + ; LZ4 decode + ;====================== + ; input buffer in LZ4_SRC + ; A is destination page + ; size in first two bytes +lz4_decode: + sta LZ4_DST+1 ; set to page we want + lda #0 + sta LZ4_DST + + ldy #0 + + ; calculate LZ4_END based on start and total size in + ; first two bytes + clc + lda (LZ4_SRC),Y ; size (low) + adc LZ4_SRC + sta LZ4_END + iny + lda (LZ4_SRC),Y ; size (high) + adc LZ4_SRC+1 + sta LZ4_END+1 + + ; skip past size + clc + lda LZ4_SRC + adc #2 + sta LZ4_SRC + lda LZ4_SRC+1 + adc #0 + sta LZ4_SRC+1 + + +unpmain: + ldy #0 ; used to index, always zero + +parsetoken: + jsr getsrc ; get next token + pha ; save for later (need bottom 4 bits) + + lsr ; number of literals in top 4 bits + lsr ; so shift into place + lsr + lsr + beq copymatches ; if zero, then no literals + ; jump ahead and copy + + jsr buildcount ; add up all the literal sizes + ; result is in ram[count+1]-1:A + tax ; now in ram[count+1]-1:X + jsr docopy ; copy the literals + + lda LZ4_SRC ; 16-bit compare + cmp LZ4_END ; to see if we have reached the end + lda LZ4_SRC+1 + sbc LZ4_END+1 + bcs done + +copymatches: + jsr getsrc ; get 16-bit delta value + sta DELTA + jsr getsrc + sta DELTA+1 + + pla ; restore token + and #$0f ; get bottom 4 bits + ; match count. 0 means 4 + ; 15 means 19+, must be calculated + + jsr buildcount ; add up count bits, in ram[count+1]-:A + + clc + adc #4 ; adjust count by 4 (minmatch) + + tax ; now in ramp[count+1]-1:X + + beq copy_no_adjust ; BUGFIX, don't increment if + ; exactly a multiple of 0x100 + bcc copy_no_adjust + + inc COUNT+1 ; increment if we overflowed +copy_no_adjust: + + lda LZ4_SRC+1 ; save src on stack + pha + lda LZ4_SRC + pha + + sec ; subtract delta + lda LZ4_DST ; from destination, make new src + sbc DELTA + sta LZ4_SRC + lda LZ4_DST+1 + sbc DELTA+1 + sta LZ4_SRC+1 + + jsr docopy ; do the copy + + pla ; restore the src + sta LZ4_SRC + pla + sta LZ4_SRC+1 + + jmp parsetoken ; back to parsing tokens + +done: + pla + rts + + ;========= + ; getsrc + ;========= + ; gets byte from src into A, increments pointer +getsrc: + lda (LZ4_SRC), Y ; get a byte from src + inc LZ4_SRC ; increment pointer + bne done_getsrc ; update 16-bit pointer + inc LZ4_SRC+1 ; on 8-bit overflow +done_getsrc: + rts + + ;============ + ; buildcount + ;============ +buildcount: + ldx #1 ; high count starts at 1 + stx COUNT+1 ; (loops at zero?) + cmp #$0f ; if LITERAL_COUNT < 15, we are done + bne done_buildcount +buildcount_loop: + sta COUNT ; save LITERAL_COUNT (15) + jsr getsrc ; get the next byte + tax ; put in X + clc + adc COUNT ; add new byte to old value + bcc bc_8bit_oflow ; if overflow, increment high byte + inc COUNT+1 +bc_8bit_oflow: + inx ; check if read value was 255 + beq buildcount_loop ; if it was, keep looping and adding +done_buildcount: + rts + + ;============ + ; getput + ;============ + ; gets a byte, then puts the byte +getput: + jsr getsrc + ; fallthrough to putdst + + ;============= + ; putdst + ;============= + ; store A into destination +putdst: + sta (LZ4_DST), Y ; store A into destination + inc LZ4_DST ; increment 16-bit pointer + bne putdst_end ; if overflow, increment top byte + inc LZ4_DST+1 +putdst_end: + rts + + ;============================= + ; docopy + ;============================= + ; copies ram[count+1]-1:X bytes + ; from src to dst +docopy: + +docopy_loop: + jsr getput ; get/put byte + dex ; decrement count + bne docopy_loop ; if not zero, loop + dec COUNT+1 ; if zero, decrement high byte + bne docopy_loop ; if not zero, loop + + rts diff --git a/another_myst/ootw_graphics/Makefile b/another_myst/ootw_graphics/Makefile index dcd6fc2a..e73caf1d 100644 --- a/another_myst/ootw_graphics/Makefile +++ b/another_myst/ootw_graphics/Makefile @@ -3,10 +3,14 @@ include ../../Makefile.inc PNG2RLE = ../../gr-utils/png2rle PNG2LZ4 = ../../gr-utils/png2lz4 -all: ootw_c16_end.inc +all: ootw_c16_end.inc logo.inc ##### +logo.inc: $(PNG2RLE) \ + logo.png + $(PNG2RLE) asm logo.png logo_rle > logo.inc + ootw_c16_end.inc: $(PNG2RLE) \ wing_bg.png \ left_unfurl1.png left_unfurl2.png \ diff --git a/another_myst/ootw_graphics/another_pool.png b/another_myst/ootw_graphics/another_pool.png new file mode 100644 index 0000000000000000000000000000000000000000..484a328302e1f228fbfd0dbb71c57cf58bcc1a05 GIT binary patch literal 12833 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 literal 0 HcmV?d00001 diff --git a/another_myst/ootw_graphics/logo.png b/another_myst/ootw_graphics/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6887532a1f086ac7d11f163c21237101951d6e38 GIT binary patch literal 13264 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 literal 0 HcmV?d00001 diff --git a/another_myst/ootw_graphics/ootw_c16_end.inc b/another_myst/ootw_graphics/ootw_c16_end.inc index b141425a..d0e6c121 100644 --- a/another_myst/ootw_graphics/ootw_c16_end.inc +++ b/another_myst/ootw_graphics/ootw_c16_end.inc @@ -291,17 +291,16 @@ rooftop2_rle: .byte $28 ; ysize=48 .byte $00, $A0,$1F,$AA, $00, $11, $A0,$01,$AA, $A3,$00, $A0,$01,$AA .byte $99, $00, $A0,$1F,$AA, $A0,$01,$A0, $11, $A0,$01,$AA, $A3,$00 .byte $A0,$01,$AA, $99, $00, $A0,$20,$AA, $11, $A4,$00, $A0,$01,$AA - .byte $99, $A9,$AA, $5A,$5A, $AD,$AA, $8A,$8A, $A4,$AA, $0A - .byte $00,$00, $10, $A0,$01,$A0, $00,$00, $A0,$01,$A0, $A0,$01,$AA, $99 - .byte $A0,$14,$AA, $0A, $00,$00, $40, $BB, $88, $A4,$AA - .byte $0A, $A0,$01,$A0, $A0,$01,$AA, $01, $1A, $00,$00, $A0,$01,$AA - .byte $9A, $99, $A0,$14,$AA, $88,$88, $A0,$01,$A0, $44, $AA,$AA - .byte $A0,$01,$A0, $A0,$01,$AA, $00, $A0,$01,$AA, $A0,$01,$A0, $AB,$AA, $FA,$FA - .byte $7A, $FA,$FA, $A5,$AA, $55, $88, $A0,$02,$AA, $B4 - .byte $AA,$AA, $00,$00, $0A, $A3,$AA, $A7,$DD, $FD, $FF - .byte $7F, $F7, $FF, $F2, $A5,$DD, $00, $70 - .byte $48, $4B, $00,$00, $BB, $99, $A0,$15,$DD, $D4,$D4 - .byte $4F, $D4,$D4, $A0,$1C,$DD + .byte $99, $A0,$18,$AA, $8A,$8A, $A4,$AA, $0A, $00,$00, $10 + .byte $A0,$01,$A0, $00,$00, $A0,$01,$A0, $A0,$01,$AA, $99, $A0,$14,$AA, $0A + .byte $00,$00, $40, $BB, $88, $A4,$AA, $0A, $A0,$01,$A0 + .byte $A0,$01,$AA, $01, $1A, $00,$00, $A0,$01,$AA, $9A, $99 + .byte $A0,$14,$AA, $88,$88, $A0,$01,$A0, $44, $AA,$AA, $A0,$01,$A0, $A0,$01,$AA + .byte $00, $A0,$01,$AA, $A0,$01,$A0, $AB,$AA, $FA,$FA, $7A, $FA,$FA + .byte $A6,$AA, $88, $A0,$02,$AA, $B4, $AA,$AA, $00,$00, $0A + .byte $A3,$AA, $A7,$DD, $FD, $FF, $7F, $F7, $FF + .byte $F2, $A5,$DD, $00, $70, $48, $4B, $00,$00 + .byte $BB, $99, $A0,$15,$DD, $D4,$D4, $4F, $D4,$D4, $A0,$1C,$DD .byte $A1 ; cycles=859 rooftop3_rle: .byte $28 ; ysize=48 diff --git a/another_myst/ootw_graphics/ootw_uboot_bg.png b/another_myst/ootw_graphics/ootw_uboot_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..8c19ac15fba5dce4803e846b42c66c232e61ded4 GIT binary patch literal 11763 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 literal 0 HcmV?d00001 diff --git a/another_myst/ootw_graphics/ootw_uboot_flash1.png b/another_myst/ootw_graphics/ootw_uboot_flash1.png new file mode 100644 index 0000000000000000000000000000000000000000..f1aa2deef4cb7075b6f477d87bdc21a38ffd5c4f GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0YGfP!VDx!PCqyT;sp4FxB}_NatR53d;h!qWmudr zXU-gv^M5ZK{-039{6EWP?%cWm7hDkeYIEUkZ_)n?|Ns9_WS?0J)Wcce5n0T@AiN%g z8Izy&9R>=rmw5WRvOi{*5HS*}%lE4U3Q3l@MwB?`=jNv7l`uFLr6!i7rYMwWmSiZn zd-?{1H}Z)C6vpHL{+0%8HmVVf>x)W#ygQu&X%Q~loCICkRTDSlJ literal 0 HcmV?d00001 diff --git a/another_myst/ootw_graphics/ootw_uboot_flash2.png b/another_myst/ootw_graphics/ootw_uboot_flash2.png new file mode 100644 index 0000000000000000000000000000000000000000..efaab0b5798c2a6f5da2f22ee20370e1fa34fbcc GIT binary patch literal 10999 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 QD*ylh07*qoM6N<$f>x8W%>V!Z diff --git a/another_myst/title.s b/another_myst/title.s new file mode 100644 index 00000000..6d2a221f --- /dev/null +++ b/another_myst/title.s @@ -0,0 +1,62 @@ +; Title Screen / Menu for OOTW + +.include "zp.inc" +.include "hardware.inc" + +title: + bit SET_GR + bit LORES + bit TEXTGR + bit PAGE0 + lda #0 + sta DRAW_PAGE + + lda #>(logo_rle) + sta GBASH + lda #<(logo_rle) + sta GBASL + lda #$04 ; load image off-screen $c00 + jsr load_rle_gr + + lda #title_text + sta OUTH + jsr move_and_print_list + + +title_loop: + lda #0 + sta WHICH_LOAD + +wait_for_keypress: + lda KEYPRESS + bpl wait_for_keypress + bit KEYRESET + +ready_to_load: + jmp $1400 ; LOADER starts here + +.include "text_print.s" +.include "gr_offsets.s" +.include "gr_unrle.s" + +.include "ootw_graphics/logo.inc" + +title_text: +.byte 13,20, "______",0 +.byte 0,21,"BY DEATER, A \/\/\/ SOFTWARE PRODUCTION",0 +.byte 26,22,",",0 +.byte 4,23,"APOLOGIES TO CYAN AND ERIC CHAHI",0 +.byte 255 + +.align $100 +.byte 1 +.align $100 +.byte 1 +.align $100 +.byte 1 +.align $100 + + +.include "loader.s"