From fae36952892d02a18f7710d124ca8c2048081a3b Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sat, 28 Oct 2023 12:12:24 -0400 Subject: [PATCH] second: start in on disk1 --- demos/second/Makefile | 10 +- .../second/{part19_nuts => }/hgr_copy_fast.s | 0 demos/second/part17_polar/Makefile | 34 +++ demos/second/part17_polar/polar.s | 85 ++++++ demos/second/part19_nuts/Makefile | 1 + demos/second/part19_nuts/nuts.s | 2 +- demos/second/qload.s | 49 ++-- demos/second/start.s | 244 ++++++------------ 8 files changed, 230 insertions(+), 195 deletions(-) rename demos/second/{part19_nuts => }/hgr_copy_fast.s (100%) create mode 100644 demos/second/part17_polar/Makefile create mode 100644 demos/second/part17_polar/polar.s diff --git a/demos/second/Makefile b/demos/second/Makefile index d72bfe6a..b6335c46 100644 --- a/demos/second/Makefile +++ b/demos/second/Makefile @@ -8,21 +8,21 @@ LINKER_SCRIPTS = ../../linker_scripts/ all: second_d1.dsk second_d2.dsk -second_d1.dsk: QBOOT QLOAD MUSIC START music.inc \ +second_d1.dsk: QBOOT QLOAD MUSIC music.inc \ ./part01_intropan/INTRO \ ./part05_dot_tunnel/TUNNEL \ ./part16_ocean/OCEAN \ - ./part18_3d/THREED + ./part17_polar/POLAR cp $(EMPTY_DISK) second_d1.dsk $(DOS33_RAW) second_d1.dsk 0 0 QBOOT 0 1 $(DOS33_RAW) second_d1.dsk 0 2 QBOOT 1 1 $(DOS33_RAW) second_d1.dsk 0 4 QBOOT 2 1 $(DOS33_RAW) second_d1.dsk 1 0 QLOAD 0 0 $(DOS33_RAW) second_d1.dsk 3 0 MUSIC 0 0 - $(DOS33_RAW) second_d1.dsk 5 0 START 0 0 $(DOS33_RAW) second_d1.dsk 8 0 ./part01_intropan/INTRO 0 0 $(DOS33_RAW) second_d1.dsk 11 0 ./part05_dot_tunnel/TUNNEL 0 0 $(DOS33_RAW) second_d1.dsk 13 0 ./part16_ocean/OCEAN 0 0 + $(DOS33_RAW) second_d1.dsk 34 0 ./part17_polar/POLAR 0 0 second_d2.dsk: QBOOT QLOAD2 MUSIC2 music2.inc \ ./part18_3d/THREED \ @@ -67,7 +67,7 @@ qload.o: qload.s \ gr_offsets.s \ wait.s wait_a_bit.s \ lc_detect.s gr_fast_clear.s \ - text_print.s \ + text_print.s start.s \ hgr_table.s \ pt3_lib_detect_model.s pt3_lib_mockingboard_detect.s \ pt3_lib_mockingboard_setup.s interrupt_handler.s \ @@ -169,6 +169,8 @@ music.inc: generate_common MUSIC ./generate_common -a 0xd000 -s mockingboard_disable_interrupt music.lst >> music.inc ./generate_common -a 0xd000 -s done_pt3_irq_handler music.lst >> music.inc ./generate_common -a 0xd000 -s PT3_LOC music.lst >> music.inc + ./generate_common -a 0xd000 -s current_pattern_smc music.lst >> music.inc + ./generate_common -a 0xd000 -s pt3_set_pattern music.lst >> music.inc ./generate_common -a 0xd000 -s copy_main_aux music.lst >> music.inc ./generate_common -a 0xd000 -s copy_aux_main music.lst >> music.inc diff --git a/demos/second/part19_nuts/hgr_copy_fast.s b/demos/second/hgr_copy_fast.s similarity index 100% rename from demos/second/part19_nuts/hgr_copy_fast.s rename to demos/second/hgr_copy_fast.s diff --git a/demos/second/part17_polar/Makefile b/demos/second/part17_polar/Makefile new file mode 100644 index 00000000..0fb7556b --- /dev/null +++ b/demos/second/part17_polar/Makefile @@ -0,0 +1,34 @@ +include ../../../Makefile.inc + +DOS33 = ../../../utils/dos33fs-utils/dos33 +DOS33_RAW = ../../../utils/dos33fs-utils/dos33_raw +EMPTY_DISK = ../../../empty_disk/empty.dsk +TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft +LINKER_SCRIPTS = ../../../linker_scripts/ + + +all: POLAR + +#### + +POLAR: polar.o + ld65 -o POLAR polar.o -C $(LINKER_SCRIPTS)/apple2_8000.inc + +polar.o: polar.s \ + ../zx02_optim.s \ + ../hgr_copy_fast.s \ + ../zp.inc ../hardware.inc ../qload.inc \ + graphics/polar2.hgr.zx02 + ca65 -o polar.o polar.s -l polar.lst + +### + +graphics/fc_iipix.hgr.zx02: + cd graphics && make + +### + + +clean: + rm -f *~ *.o *.lst POLAR + cd graphics && make clean diff --git a/demos/second/part17_polar/polar.s b/demos/second/part17_polar/polar.s new file mode 100644 index 00000000..51ff9d79 --- /dev/null +++ b/demos/second/part17_polar/polar.s @@ -0,0 +1,85 @@ +; Polar Bear + +; do the animated bounce if possible + +; +; by deater (Vince Weaver) + +.include "../zp.inc" +.include "../hardware.inc" +.include "../qload.inc" + +mod7_table = $1c00 +div7_table = $1d00 +hposn_low = $1e00 +hposn_high = $1f00 + +polar_start: + ;===================== + ; initializations + ;===================== + + ;=================== + ; Load graphics + ;=================== +load_loop: + + bit SET_GR + bit HIRES + bit FULLGR + bit PAGE1 + + lda #0 + jsr hgr_page1_clearscreen + jsr hgr_page2_clearscreen + + bit PAGE2 + + ; load image offscreen $6000 + + lda #polar_data + sta zx_src_h+1 + lda #$60 + jsr zx02_full_decomp + + + lda #0 + sta COUNT + sta DRAW_PAGE + +ship_sprite_loop: + + lda #$60 + jsr hgr_copy + + bit PAGE1 + + jsr wait_until_keypress + +polar_done: + rts + + +.align $100 + .include "../wait_keypress.s" + .include "../zx02_optim.s" +; .include "../hgr_table.s" + .include "../hgr_clear_screen.s" + .include "../hgr_copy_fast.s" + + + + ; wait A * 1/50s +wait_irq: +; lda #50 + sta IRQ_COUNTDOWN +wait_irq_loop: + lda IRQ_COUNTDOWN + bne wait_irq_loop + rts + +polar_data: + .incbin "graphics/polar2.hgr.zx02" + diff --git a/demos/second/part19_nuts/Makefile b/demos/second/part19_nuts/Makefile index fcc24fe8..3b04e9eb 100644 --- a/demos/second/part19_nuts/Makefile +++ b/demos/second/part19_nuts/Makefile @@ -16,6 +16,7 @@ NUTS: nuts.o nuts.o: nuts.s \ ../zx02_optim.s \ ../zp.inc ../hardware.inc ../qload2.inc \ + ../hgr_copy_fast.s \ graphics/fc_iipix.hgr.zx02 \ graphics/ship_sprites.inc ca65 -o nuts.o nuts.s -l nuts.lst diff --git a/demos/second/part19_nuts/nuts.s b/demos/second/part19_nuts/nuts.s index 610b75f6..0fe3ff39 100644 --- a/demos/second/part19_nuts/nuts.s +++ b/demos/second/part19_nuts/nuts.s @@ -133,7 +133,7 @@ nuts_done: ; .include "../hgr_table.s" .include "../hgr_clear_screen.s" .include "hgr_sprite_big.s" - .include "hgr_copy_fast.s" + .include "../hgr_copy_fast.s" ; wait A * 1/50s diff --git a/demos/second/qload.s b/demos/second/qload.s index 2a13803d..34d3e6aa 100644 --- a/demos/second/qload.s +++ b/demos/second/qload.s @@ -2,6 +2,7 @@ .include "zp.inc" .include "hardware.inc" +.include "music.inc" ;.include "common_defines.inc" .include "qboot.inc" @@ -15,15 +16,17 @@ qload_start: ; first time entry ; start by loading text title - lda #0 ; load ZW engine - sta WHICH_LOAD +; lda #0 ; load ZW engine +; sta WHICH_LOAD lda #1 sta CURRENT_DISK ; current disk number - jsr load_file +; jsr load_file - jmp $2000 ; jump to ZW + jmp second_start + +; jmp $2000 ; jump to ZW ;==================================== ; loads file specified by WHICH_LOAD @@ -160,40 +163,46 @@ error_string: .endif which_disk_array: - .byte 1,1,1,1 ; SECOND, MUSIC, INTRO, TUNNEL - .byte 1,1 ; 3D, OCEAN + .byte 1,1,1,1 ; MUSIC, INTRO, TUNNEL, OCEAN + .byte 1 ; POLAR load_address_array: - .byte $20,$D0,$60,$60 ; SECOND, MUSIC, INTRO, TUNNEL - .byte $40,$60 ; 3D, OCEAN + .byte $D0,$60,$60,$60 ; MUSIC, INTRO, TUNNEL, OCEAN + .byte $60 ; POLAR track_array: - .byte 5, 3, 8, 11 ; SECOND, MUSIC, INTRO, TUNNEL - .byte 20,13 ; 3D, OCEAN + .byte 3, 8, 11, 20 ; MUSIC, INTRO, TUNNEL, OCEAN + .byte 34 ; POLAR sector_array: - .byte 0, 0, 0, 0 ; SECOND, MUSIC, INTRO, TUNNEL - .byte 0, 0 ; 3D, OCEAN + .byte 0, 0, 0, 0 ; MUSIC, INTRO, TUNNEL, OCEAN + .byte 0 ; POLAR length_array: - .byte 16, 32, 84, 16 ; SECOND, MUSIC, INTRO, TUNNEL - .byte 128,96 ; 3D, OCEAN + .byte 32, 84, 16, 96 ; MUSIC, INTRO, TUNNEL, OCEAN + .byte 16 ; POLAR + + .include "wait.s" + + .include "start.s" .include "lc_detect.s" - .include "wait.s" + .include "wait_a_bit.s" .include "gr_fast_clear.s" .include "text_print.s" .include "gr_offsets.s" -; .include "pt3_lib_mockingboard_patch.s" .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" +mod7_table = $1c00 +div7_table = $1d00 +hposn_low = $1e00 +hposn_high = $1f00 + + .include "hgr_table.s" + qload_end: .assert (>qload_end - >qload_start) < $e , error, "loader too big" diff --git a/demos/second/start.s b/demos/second/start.s index c1d34bc1..eee1274c 100644 --- a/demos/second/start.s +++ b/demos/second/start.s @@ -1,57 +1,21 @@ -; Unwisely messing with Second Reality +; Apple ][ Second Reality, Startup for Disk1 ; ; by deater (Vince Weaver) -.include "zp.inc" -.include "hardware.inc" -.include "qload.inc" -.include "music.inc" +;.include "zp.inc" +;.include "hardware.inc" +;.include "qload.inc" +;.include "music.inc" second_start: ;===================== ; initializations ;===================== - ;===================== - ; detect model - ;===================== + jsr hardware_detect ; FIXME: remove when hook up part00 - jsr detect_appleii_model - - ;===================== - ; Machine workarounds - ;===================== - ; mostly IIgs - ; thanks to 4am for 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: + jsr hgr_make_tables ;=================== @@ -61,102 +25,6 @@ restart: lda #0 sta DRAW_PAGE - ;=================== - ; show title screen - ;=================== - - jsr show_title - - - ;=================== - ; print config - ;=================== - - jsr set_normal - - 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 (64k) - ;=================================== - ; we might want to later load sound high, - ; for now always enable sound - - - lda #0 - sta SOUND_STATUS ; clear out, sound enabled - - jsr detect_language_card - bcs no_language_card - -yes_language_card: - ; update status on title screen - 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 - -; jmp done_language_card - -no_language_card: - -done_language_card: - - ;=================================== - ; Detect Mockingboard - ;=================================== - - ; detect mockingboard - jsr mockingboard_detect - - bcc mockingboard_notfound - -mockingboard_found: - ; print detected location - - lda #'S'+$80 ; change NO to slot - sta $7d0+30 - - lda MB_ADDR_H ; $C4 = 4, want $B4 1100 -> 1011 - and #$87 - ora #$30 - - sta $7d0+31 ; 23,31 - - - ; for now, don't require language card - lda SOUND_STATUS - and #SOUND_IN_LC - beq dont_enable_mc - - lda SOUND_STATUS - ora #SOUND_MOCKINGBOARD - sta SOUND_STATUS - ;================================== ; load sound into the language card ; into $D000 set 1 @@ -166,7 +34,7 @@ mockingboard_found: bit $C083 bit $C083 - lda #1 + lda #0 sta WHICH_LOAD jsr load_file @@ -201,66 +69,101 @@ mockingboard_found: jsr pt3_init_song - - - - dont_enable_mc: -mockingboard_notfound: - skip_all_checks: - ;======================= - ; wait for keypress - ;======================= - -; jsr wait_until_keypress - - lda #25 - jsr wait_a_bit - - - ;=================== ; Load graphics ;=================== load_loop: ; jsr HGR - bit SET_GR - bit HIRES - bit FULLGR +; bit SET_GR +; bit HIRES +; bit FULLGR bit PAGE1 + ;======================= - ; start music + ; Load, copy to AUXMEM ;======================= - lda #5 ; OCEAN + sta $C008 ; use MAIN zero-page/stack/language card -; lda #4 ; THREED -; lda #3 ; TUNNEL -; lda #2 ; INTRO - sta WHICH_LOAD - jsr load_file + ;==================== + ; load POLAR to $6000 + lda #4 ; POLAR + sta WHICH_LOAD + jsr load_file + + ;====================== + ; copy POLAR to AUX $1000 + + lda #$10 ; AUX dest $1000 + ldy #$60 ; MAIN src $6000 + ldx #16 ; 16 pages + jsr copy_main_aux + + + ;======================= + ; run POLAR + ;============================================ + ; copy POLAR from AUX $1000 to MAIN $8000 + + lda #$10 ; AUX src $1000 + ldy #$80 ; MAIN dest $8000 + ldx #16 ; 16 pages + jsr copy_aux_main ; setup music ; ocean=pattern24 (3:07) pattern#43 lda #43 - sta $55A+$D000 ;current_pattern_smc+1 - jsr $559+$D000 ; pt3_set_pattern + sta current_pattern_smc+1 + jsr pt3_set_pattern cli + ; run polar + + jsr $8000 + + + + + ;======================= + ; start music + ;======================= + +; lda #5 ; POLAR +; lda #4 ; OCEAN +; lda #3 ; THREED +; lda #2 ; TUNNEL +; lda #1 ; INTRO + +; sta WHICH_LOAD +; jsr load_file + + + ; setup music + ; ocean=pattern24 (3:07) pattern#43 + +; lda #43 +; sta $55A+$D000 ;current_pattern_smc+1 +; jsr $559+$D000 ; pt3_set_pattern + +; cli + ; jmp $4000 - jmp $6000 +; jmp $6000 + + forever: jmp forever @@ -277,3 +180,4 @@ config_string: .include "pt3_lib_mockingboard_patch.s" +.include "hardware_detect.s"