From e9f3645e5276fd023026fe2e56fc03c7d5923a9f Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 2 Nov 2023 22:46:35 -0400 Subject: [PATCH] second: hook up fake bios --- demos/second/Makefile | 6 ++ demos/second/NOTES | 4 +- demos/second/part00_boot/fake_bios.s | 140 ++++++++++++++++----------- demos/second/qload.s | 14 +-- demos/second/start.s | 15 ++- demos/second/zp.inc | 8 ++ 6 files changed, 121 insertions(+), 66 deletions(-) diff --git a/demos/second/Makefile b/demos/second/Makefile index ddddffa0..d0fdc0ea 100644 --- a/demos/second/Makefile +++ b/demos/second/Makefile @@ -11,6 +11,7 @@ all: second_d1.dsk second_d2.dsk second_d1.dsk: QBOOT QLOAD music.inc qload.inc \ MUSIC_INTRO \ MUSIC \ + ./part00_boot/FAKE_BIOS \ ./part01_intropan/INTRO \ ./part04_chess_shapes/CHESS \ ./part05_dot_tunnel/TUNNEL \ @@ -30,6 +31,7 @@ second_d1.dsk: QBOOT QLOAD music.inc qload.inc \ $(DOS33_RAW) second_d1.dsk 1 0 QLOAD 0 0 $(DOS33_RAW) second_d1.dsk 2 0 MUSIC_INTRO 0 0 $(DOS33_RAW) second_d1.dsk 4 0 MUSIC 0 0 + $(DOS33_RAW) second_d1.dsk 9 0 ./part00_boot/FAKE_BIOS 0 0 $(DOS33_RAW) second_d1.dsk 10 0 ./part01_intropan/INTRO 0 0 $(DOS33_RAW) second_d1.dsk 15 0 ./part04_chess_shapes/CHESS 0 0 # $(DOS33_RAW) second_d1.dsk 16 0 ./part05_dot_tunnel/TUNNEL 0 0 @@ -46,6 +48,9 @@ second_d1.dsk: QBOOT QLOAD music.inc qload.inc \ #### +part00_boot/FAKE_BIOS: + cd part00_boot && make + part01_intropan/INTRO: cd part01_intropan && make @@ -319,6 +324,7 @@ generate_common.o: generate_common.c clean: rm -f *~ *.o *.lst HELLO SECOND QBOOT QLOAD MUSIC START rm -f qload.inc qload2.inc music.inc music2.inc + cd part00_boot && make clean cd part01_intropan && make clean cd part04_chess_shapes && make clean cd part08_gorilla && make clean diff --git a/demos/second/NOTES b/demos/second/NOTES index 54f4c9ad..d3af293f 100644 --- a/demos/second/NOTES +++ b/demos/second/NOTES @@ -80,8 +80,8 @@ qload 4k 1 16 00 music_intro ?? 2-3 32 01 music_main ?? 4-7 48 -02 fake_bios: 4k 10 16 -02 intro_pan: 16k 11-14 64 +02 fake_bios: 4k 9 16 +02 intro_pan: 16k 10-14 64 02 title: 4k ; pause to load new music diff --git a/demos/second/part00_boot/fake_bios.s b/demos/second/part00_boot/fake_bios.s index e9f3132c..b0474535 100644 --- a/demos/second/part00_boot/fake_bios.s +++ b/demos/second/part00_boot/fake_bios.s @@ -3,20 +3,27 @@ .include "../zp.inc" .include "../hardware.inc" +.include "../qload.inc" +mod7_table = $1c00 +div7_table = $1d00 +hposn_low = $1e00 +hposn_high = $1f00 bios_test: ;=================== ; set graphics mode ;=================== - jsr HOME bit HIRES bit FULLGR bit SET_GR bit PAGE1 - jsr build_tables + lda #0 + sta FAKE_KEY_COUNT + +; jsr build_tables ;======================= ; Hardware Detect Model @@ -173,16 +180,18 @@ done_detect_cpu: ;==================== ; detect disk slot ;==================== - ; this depends on DOS3.3 loading - lda $B5F7 ; slot*16 +; lda $B5F7 ; slot*16 + + lda WHICH_SLOT + lsr lsr lsr lsr adc #'0' sta slot_patch1+1 - sta slot_patch2+1 +; sta slot_patch2+1 sta slot_patch3+1 sta slot_patch5+7 sta slot_patch6+7 @@ -212,14 +221,15 @@ mockingboard_found: mockingboard_notfound: + ;=================== ; Load graphics ;=================== lda #graphics_data - sta ZX0_src+1 + sta zx_src_h+1 lda #$20 ; temporarily load to $2000 @@ -351,7 +361,7 @@ print_rest: ; type the CD command ;==================== - ldx #17 + ldx #15 jsr draw_dos_command jsr DrawCondensedStringAgain @@ -360,36 +370,58 @@ print_rest: ; type the DIR command ;==================== - jsr DrawCondensedStringAgain - ldx #6 - jsr draw_dos_command +; jsr DrawCondensedStringAgain +; ldx #6 +; jsr draw_dos_command - jsr DrawCondensedStringAgain +; jsr DrawCondensedStringAgain ;==================== ; show DIR ;==================== - bit $C0E9 ; turn on drive motor (slot6) +; bit $C0E9 ; turn on drive motor (slot6) - lda #bios_message_6 - ldx #7 - jsr draw_multiple_strings +; lda #bios_message_6 +; ldx #7 +; jsr draw_multiple_strings - bit $C0E8 ; turn off drive motor (slot6) +; bit $C0E8 ; turn off drive motor (slot6) ;======================= - ; type the LEMM command + ; type the A2 command ;======================= - ldx #5 + ldx #4 jsr draw_dos_command end: - jmp end + ldx #5 + jsr long_wait + + rts + + +fake_keypress: + inc FAKE_KEY_COUNT + + lda FAKE_KEY_COUNT + and #$1 + beq do_fake_key + +no_fake_key: + clc + rts + +do_fake_key: + sec + rts + + +; jmp end ; 0123456789012345678901234567890123456789 @@ -462,21 +494,20 @@ slot_patch1: .byte "c",0 .byte "d",0 .byte " ",0 - .byte "g",0 - .byte "a",0 - .byte "m",0 + .byte "d",0 .byte "e",0 + .byte "m",0 + .byte "o",0 .byte "s",0 .byte "\",0 - .byte "l",0 + .byte "a",0 + .byte "2",0 + .byte "r",0 .byte "e",0 - .byte "m",0 - .byte "m",0 - .byte "i",0 - .byte "n",0 - .byte "g",0 - .byte "s",13,0 + .byte "a",0 + .byte "l",13,0 +.if 0 bios_message5: .byte 13,0 slot_patch2: @@ -496,34 +527,28 @@ bios_message_6: .byte "LEVEL9 LEVEL10 LEMM",13,0 .byte " 13 File(s) 90,624 Bytes.",13,0 .byte " 2 Dir(s) 52,736 Bytes free.",13,13,0 +.endif bios_message7: slot_patch3: .byte "S6D1>",0 ; 184 - .byte "l",0 - .byte "e",0 - .byte "m",0 - .byte "m",0 + .byte "a",0 + .byte "2",0 + .byte "r",0 .include "font_console_1x8.s" .include "fonts/a2_cga_thin.inc" - .include "../zx02_optim.s" - graphics_data: .incbin "graphics/a2_energy.hgr.zx02" -hposn_low = $1713 ; 0xC0 bytes (lifetime, used by DrawLargeCharacter) -hposn_high = $1800 ; 0xC0 bytes (lifetime, used by DrawLargeCharacter) + .include "../wait_keypress.s" - .include "../hgr_table.s" - - -wait_until_keypress: - lda KEYPRESS ; 4 - bpl wait_until_keypress ; 3 - bit KEYRESET ; clear the keyboard buffer - rts ; 6 +;wait_until_keypress: +; lda KEYPRESS ; 4 +; bpl wait_until_keypress ; 3 +; bit KEYRESET ; clear the keyboard buffer +; rts ; 6 memcount: @@ -660,16 +685,19 @@ dos_command_inner: lda #200 jsr wait - lda KEYPRESS - bmi dos_keypress + jsr fake_keypress +; lda KEYPRESS + bcs dos_keypress jsr DrawCondensedStringAgain dec CH lda #200 jsr wait - lda KEYPRESS - bmi dos_keypress + jsr fake_keypress + +; lda KEYPRESS + bcs dos_keypress jmp dos_command_inner dos_keypress: @@ -752,13 +780,13 @@ early_out: .include "../hgr_clear_screen.s" -.include "pt3_lib_detect_model.s" -.include "../lc_detect.s" +;.include "pt3_lib_detect_model.s" + .include "aux_detect.s" .include "65c02_detect.s" .include "pt3_lib_mockingboard_setup.s" -.include "../pt3_lib_mockingboard_detect.s" - -.include "../wait.s" +;.include "../lc_detect.s" +;.include "../pt3_lib_mockingboard_detect.s" +;.include "../wait.s" diff --git a/demos/second/qload.s b/demos/second/qload.s index a8243b84..d9ec95ec 100644 --- a/demos/second/qload.s +++ b/demos/second/qload.s @@ -166,44 +166,44 @@ which_disk_array: .byte 1,1,1,1 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte 1,1,1,1 ; GORILLA,LEAVES,LENS,PLASMA .byte 1,1,1,1 ; CUBE,DOTS,SPHERES,OCEAN - .byte 1 ; POLAR + .byte 1,1 ; POLAR,FAKE_BIOS load_address_array: .byte $D0,$D0,$60,$80 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte $60,$60,$60,$60 ; GORILLA,LEAVES,LENS,PLASMA .byte $60,$60,$60,$60 ; CUBE,DOTS,SPHERES,OCEAN - .byte $60 ; POLAR + .byte $60,$60 ; POLAR,FAKE_BIOS start_address: .byte $D0,$D0,$60,$80 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte $60,$60,$60,$80 ; GORILLA,LEAVES,LENS,PLASMA .byte $80,$80,$80,$60 ; CUBE,DOTS,SPHERES,OCEAN - .byte $80 ; POLAR + .byte $80,$60 ; POLAR,FAKE_BIOS aux_dest: .byte $D0,$D0,$A0,$A0 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte $70,$50,$40,$30 ; GORILLA,LEAVES,LENS,PLASMA .byte $20,$10,$80,$20 ; CUBE,DOTS,SPHERES,OCEAN - .byte $10 ; POLAR + .byte $10,$A0 ; POLAR,FAKE_BIOS track_array: .byte 2,4,10,15 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte 19,21,23,24 ; GORILLA,LEAVES,LENS,PLASMA .byte 25,26,27,28 ; CUBE,DOTS,SPHERES,OCEAN - .byte 34 ; POLAR + .byte 34,9 ; POLAR,FAKE_BIOS sector_array: .byte 0,0,0,0 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte 0,0,0,0 ; GORILLA,LEAVES,LENS,PLASMA .byte 0,0,0,0 ; CUBE,DOTS,SPHERES,OCEAN - .byte 0 ; POLAR + .byte 0,0 ; POLAR,FAKE_BIOS length_array: .byte 32,48,80,48 ; MUSIC_INTRO, MUSIC_MAIN, INTRO, CHESS .byte 32,32,16,16 ; GORILLA,LEAVES,LENS,PLASMA .byte 16,16,16,96 ; CUBE,DOTS,SPHERES,OCEAN - .byte 16 ; POLAR + .byte 16,16 ; POLAR,FAKE_BIOS .include "wait.s" diff --git a/demos/second/start.s b/demos/second/start.s index b2a3148a..caa75f65 100644 --- a/demos/second/start.s +++ b/demos/second/start.s @@ -25,8 +25,21 @@ restart: lda #0 sta DRAW_PAGE + ;======================== + ; fake BIOS + ;======================== + + lda #13 ; load FAKE_BIOS + sta WHICH_LOAD + + jsr load_file + + ; run it + + jsr $6000 + ;================================== - ; load sound into the language card + ; load music into the language card ; into $D000 set 1 ;================================== diff --git a/demos/second/zp.inc b/demos/second/zp.inc index 9fe04108..f84eb6ff 100644 --- a/demos/second/zp.inc +++ b/demos/second/zp.inc @@ -226,6 +226,14 @@ REF2L = $F7 REF2H = $F8 REFCOUNT = $F9 +; BIOS +STRING_COUNT = $F0 +LEAD0 = $F1 +SCROLL_OUT = $F2 +SCROLL_IN = $F3 +MEMCOUNT = $F4 +FAKE_KEY_COUNT = $F5 + ;============================================== ; $FC-$FF we use for in/out pointers ;==============================================