dos33fsprogs/demos/second/start.s

565 lines
8.8 KiB
ArmAsm
Raw Normal View History

2023-10-28 16:12:24 +00:00
; Apple ][ Second Reality, Startup for Disk1
2023-10-03 20:27:24 +00:00
;
; by deater (Vince Weaver) <vince@deater.net>
2023-10-28 16:12:24 +00:00
;.include "zp.inc"
;.include "hardware.inc"
;.include "qload.inc"
;.include "music.inc"
2023-10-03 20:27:24 +00:00
2023-11-04 00:27:14 +00:00
DEBUG=0
2023-11-03 03:06:16 +00:00
2023-10-03 20:27:24 +00:00
second_start:
;=====================
; initializations
;=====================
jsr hardware_detect
2023-10-03 20:27:24 +00:00
2023-10-28 16:12:24 +00:00
jsr hgr_make_tables
2023-10-03 20:27:24 +00:00
;===================
; restart?
;===================
restart:
lda #0
sta DRAW_PAGE
2023-11-03 02:46:35 +00:00
;========================
; fake BIOS
;========================
lda #13 ; load FAKE_BIOS
sta WHICH_LOAD
jsr load_file
; run fake boot / fake bios
2023-11-03 02:46:35 +00:00
2023-11-04 00:27:14 +00:00
jsr $6000
2023-11-03 02:46:35 +00:00
2023-10-03 20:27:24 +00:00
;==================================
2023-11-03 02:46:35 +00:00
; load music into the language card
2023-10-03 20:27:24 +00:00
; into $D000 set 1
;==================================
; read/write RAM, use $d000 bank1
bit $C083
bit $C083
lda #0 ; load MUSIC_INTRO from disk
2023-10-03 20:27:24 +00:00
sta WHICH_LOAD
jsr load_file
lda #0
sta DONE_PLAYING
lda #1
sta LOOP
; patch mockingboard
lda SOUND_STATUS
beq skip_mbp1
2023-10-03 20:27:24 +00:00
jsr mockingboard_patch ; patch to work in slots other than 4?
skip_mbp1:
2023-10-03 20:27:24 +00:00
;=======================
; Set up 50Hz interrupt
;========================
jsr mockingboard_init
jsr mockingboard_setup_interrupt
;============================
; Init the Mockingboard
;============================
jsr reset_ay_both
jsr clear_ay_both
;==================
; init song
;==================
jsr pt3_init_song
dont_enable_mc:
skip_all_checks:
;====================================
;====================================
; Pre-Load some programs into AUX MEM
;====================================
;====================================
; 4 - 9
2023-10-03 20:27:24 +00:00
2023-10-28 23:13:02 +00:00
sta $C008 ; use MAIN zero-page/stack/language card
2023-10-03 20:27:24 +00:00
2023-10-28 23:13:02 +00:00
;=============================
; want to load 4..9
2023-10-03 20:27:24 +00:00
lda #4
2023-10-28 23:13:02 +00:00
sta COUNT
2023-10-17 05:19:06 +00:00
2023-10-28 23:13:02 +00:00
load_program_loop:
;============================
; load next program to MAIN $6000
2023-10-05 19:02:28 +00:00
2023-10-28 23:13:02 +00:00
; load from disk
lda COUNT ; which one
sta WHICH_LOAD
jsr load_file
; copy to proper AUX location
ldx COUNT
lda aux_dest,X ; load AUX dest
pha
ldy #$60 ; MAIN src $6000
lda length_array,X ; number of pages
tax ; in X
pla ; restore AUX dest to A
jsr copy_main_aux
inc COUNT
lda COUNT
cmp #10
2023-10-28 23:13:02 +00:00
bne load_program_loop
2023-10-03 20:27:24 +00:00
;=======================
;=======================
; Load intro
;=======================
;=======================
2023-10-28 16:12:24 +00:00
2023-10-29 05:06:06 +00:00
; load from disk
lda #2 ; INTRO
sta WHICH_LOAD
jsr load_file
2023-10-28 16:12:24 +00:00
;=======================
;=======================
; Run intro
;=======================
;=======================
2023-10-28 16:12:24 +00:00
2023-11-03 01:52:50 +00:00
cli ; start music
2023-10-30 00:27:56 +00:00
jsr $8000
2023-10-28 16:12:24 +00:00
2023-10-28 23:13:02 +00:00
;=======================
;=======================
; Load music / chess
;=======================
;=======================
2023-10-28 23:13:02 +00:00
sei ; stop music interrupts
2023-11-03 01:52:50 +00:00
jsr mute_ay_both
jsr clear_ay_both ; stop from making noise
; load music
lda #1 ; MUSIC_MAIN
sta WHICH_LOAD
jsr load_file
2023-10-29 04:51:28 +00:00
; load from disk
lda #3 ; CHESS
2023-10-29 04:51:28 +00:00
sta WHICH_LOAD
jsr load_file
2023-10-28 23:13:02 +00:00
; restart music
;============================
; Re-Init the Mockingboard
;============================
; NOTE: I don't know how much of this is actually necessary
; wasted a lot of time debugging, leaving it as-is
; as it seems to be working
lda #0
sta DONE_PLAYING
lda #1
sta LOOP
;========================
; patch mockingboard
lda SOUND_STATUS
beq skip_mbp2
jsr mockingboard_patch ; patch to work in slots other than 4?
skip_mbp2:
jsr mockingboard_init
;=======================
; Set up 50Hz interrupt
;========================
jsr mockingboard_setup_interrupt
jsr reset_ay_both
jsr clear_ay_both
;==================
; init song
;==================
jsr pt3_init_song
2023-11-03 01:52:50 +00:00
cli ; start interrupts (music)
;=======================
;=======================
; Run Chess
;=======================
;=======================
2023-10-28 23:13:02 +00:00
2023-10-29 04:51:28 +00:00
jsr $8000
2023-10-28 23:13:02 +00:00
;==========================
;==========================
; Run 4-9, copy from AUX
;==========================
;==========================
2023-10-28 23:13:02 +00:00
2023-10-29 03:51:26 +00:00
;=======================
; run GORILLA (#4)
;=======================
; copy GORILLA from AUX $7000 to MAIN $8000
lda #$70 ; AUX src $7000
ldy #$80 ; MAIN dest $8000
ldx #32 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug gorilla music
lda #25
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run gorilla
2023-10-29 03:51:26 +00:00
jsr $8000
2023-10-29 03:38:44 +00:00
;=======================
; run LEAVES (#5)
;=======================
; copy LEAVES from AUX $5000 to MAIN $8000
lda #$50 ; AUX src $5000
ldy #$80 ; MAIN dest $8000
ldx #32 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug leaves music
lda #30
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run leaves
2023-10-29 03:38:44 +00:00
jsr $8000
2023-10-29 03:23:04 +00:00
;=======================
; run LENS/ROTOZOOM (#6)
;=======================
; copy LENS from AUX $4000 to MAIN $6000
lda #$40 ; AUX src $4000
ldy #$60 ; MAIN dest $6000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug lens music
lda #34
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run lens
2023-10-29 03:23:04 +00:00
jsr $6000
2023-10-29 02:56:39 +00:00
;=======================
; run PLASMA (#7)
2023-10-29 03:16:35 +00:00
;=======================
; copy PLASMA from AUX $3000 to MAIN $8000
2023-10-29 03:16:35 +00:00
lda #$30 ; AUX src $3000
ldy #$80 ; MAIN dest $8000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug plasma music
lda #47
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run plasma
2023-10-29 03:16:35 +00:00
jsr $8000
;=======================
; run PLASMACUBE (#8)
2023-10-29 02:56:39 +00:00
;=======================
; copy PLASMACUBE from AUX $2000 to MAIN $8000
2023-10-29 03:16:35 +00:00
lda #$20 ; AUX src $2000
2023-10-29 02:56:39 +00:00
ldy #$80 ; MAIN dest $8000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug plasmacube music
lda #52
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run plasmacube
2023-10-29 02:56:39 +00:00
jsr $8000
2023-10-28 23:13:02 +00:00
;=======================
; run DOTS (#9)
;=======================
; copy DOTS from AUX $1000 to MAIN $8000
2023-10-28 23:13:02 +00:00
lda #$10 ; AUX src $1000
2023-10-28 23:13:02 +00:00
ldy #$80 ; MAIN dest $8000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug dots music
lda #60
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run dots
2023-10-28 23:13:02 +00:00
jsr $8000
;=======================
;=======================
; Load 10-12 to RAM
;=======================
;=======================
2023-10-29 04:13:32 +00:00
; disable music
sei
2023-11-03 01:52:50 +00:00
jsr mute_ay_both ; stop from making noise
2023-10-29 04:13:32 +00:00
;=============================
; want to load 10..12
lda #10
sta COUNT
load_program_loop2:
;============================
; load next program to MAIN $6000
; load from disk
lda COUNT ; which one
sta WHICH_LOAD
jsr load_file
; copy to proper AUX location
ldx COUNT
lda aux_dest,X ; load AUX dest
pha
ldy #$60 ; MAIN src $6000
lda length_array,X ; number of pages
tax ; in X
pla ; restore AUX dest to A
jsr copy_main_aux
inc COUNT
lda COUNT
cmp #13
bne load_program_loop2
;==========================
;==========================
; Run 10-12
;==========================
;==========================
2023-11-01 00:27:19 +00:00
; restart music
2023-11-03 01:52:50 +00:00
jsr unmute_ay_both ; restart
2023-11-01 00:27:19 +00:00
cli
2023-10-28 23:13:02 +00:00
;=======================
; run SPHERES
;============================================
2023-10-29 04:13:32 +00:00
; copy SPHERES from AUX $8000 to MAIN $8000
2023-10-28 23:13:02 +00:00
2023-10-29 04:13:32 +00:00
lda #$80 ; AUX src $8000
ldy #$80 ; MAIN dest $8000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug spheres music
lda #68
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
2023-10-29 04:13:32 +00:00
jsr $8000
;=======================
; run OCEAN
;=======================
; copy OCEAN from AUX $2000 to MAIN $6000
2023-10-28 23:13:02 +00:00
2023-10-29 04:13:32 +00:00
lda #$20 ; AUX src $1000
ldy #$60 ; MAIN dest $6000
ldx #96 ; 16 pages
jsr copy_aux_main
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; debug ocean music
lda #72
sta current_pattern_smc+1
jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
2023-10-29 04:13:32 +00:00
jsr $6000
2023-10-28 23:13:02 +00:00
2023-10-28 16:12:24 +00:00
;=======================
; run POLAR
2023-10-29 04:13:32 +00:00
;=======================
; copy POLAR from AUX $1000 to MAIN $8000
2023-10-28 16:12:24 +00:00
2023-10-29 04:13:32 +00:00
lda #$10 ; AUX src $1000
ldy #$80 ; MAIN dest $8000
ldx #16 ; 16 pages
jsr copy_aux_main
2023-10-03 20:27:24 +00:00
2023-11-03 03:06:16 +00:00
.if DEBUG=1
; setup music ocean=pattern24 (3:07) pattern#47
; lda #76
2023-10-28 23:13:02 +00:00
; sta current_pattern_smc+1
; jsr pt3_set_pattern
2023-11-03 03:06:16 +00:00
.endif
; run polar
jsr $8000
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
;=============================
; ask for side2
;=============================
2023-10-28 16:12:24 +00:00
sei ; disable music
jsr clear_ay_both ; stop from making noise
2023-10-28 16:12:24 +00:00
2023-11-02 20:24:57 +00:00
lda #0
sta DRAW_PAGE
bit PAGE1 ; be sure we're on PAGE1
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
; clear text screen
2023-11-02 02:35:08 +00:00
lda #$A0
sta clear_all_color+1
2023-10-28 19:52:18 +00:00
jsr clear_all
2023-10-28 16:12:24 +00:00
; switch to text/gr
bit TEXTGR
2023-10-28 19:52:18 +00:00
; print non-inverse
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
jsr set_normal
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
; print messages
lda #<disk_change_string
sta OUTL
lda #>disk_change_string
sta OUTH
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
; print the text
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
jsr move_and_print
bit KEYRESET ; just to be safe
2023-10-28 19:52:18 +00:00
jsr wait_until_keypress
;==================
; reboot
;==================
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
; swap back in ROM
2023-10-17 05:19:06 +00:00
2023-10-28 19:52:18 +00:00
lda $C08A ; read rom, no write
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
lda WHICH_SLOT
lsr
lsr
lsr
lsr
ora #$C0
sta reboot_smc+2
2023-10-28 16:12:24 +00:00
2023-10-28 19:52:18 +00:00
reboot_smc:
jmp $C600
2023-10-03 20:27:24 +00:00
forever:
jmp forever
;.align $100
2023-10-03 20:27:24 +00:00
.include "wait_keypress.s"
.include "zx02_optim.s"
.include "gs_interrupt.s"
;.include "title.s"
2023-10-03 20:27:24 +00:00
2023-10-28 19:52:18 +00:00
disk_change_string:
2023-10-03 20:27:24 +00:00
; 0123456789012345678901234567890123456789
2023-10-28 19:52:18 +00:00
.byte 5,22,"INSERT DISK 2 AND PRESS ANY KEY",0
2023-10-03 20:27:24 +00:00
.include "pt3_lib_mockingboard_patch.s"
2023-10-28 16:12:24 +00:00
.include "hardware_detect.s"