mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-01 01:06:33 +00:00
306 lines
5.8 KiB
ArmAsm
306 lines
5.8 KiB
ArmAsm
;=================
|
|
; VMW PT3_LIB test
|
|
;=================
|
|
; template for using the pt3_lib
|
|
|
|
; zero page definitions
|
|
.include "zp.inc"
|
|
|
|
; some firmware locations
|
|
.include "hardware.inc"
|
|
|
|
; Location the files load at.
|
|
; If you change this, you need to update the Makefile
|
|
|
|
PT3_LOC = song
|
|
PT3_LOC_2 = song2
|
|
|
|
; the below will make for more compact code, at the expense
|
|
; of using $80 - $ff zero page addresses by the decoder.
|
|
|
|
; PT3_USE_ZERO_PAGE = 1
|
|
|
|
|
|
; Comment this to disable Apple IIc support which will free a small amount
|
|
; of room
|
|
|
|
PT3_ENABLE_APPLE_IIC = 1
|
|
|
|
; Enable ROM copying on IIc
|
|
|
|
;PT3_ENABLE_IIC_COPY_ROM = 1
|
|
|
|
|
|
; The Vortex Tracker by default generates Atari-ST style pt3 files
|
|
; which assume there is a 1.77MHz clock frequency driving
|
|
; the AY-3-8910. Apple II Mockingboards run at 1MHz, so unless
|
|
; you convert the frequency the music will sound pitched lower.
|
|
; The 1.77MHz frequency conversion code can be in three states:
|
|
; Enabled (always convert)
|
|
; PT3_DISABLE_FREQ_CONVERSION commented out
|
|
; PT3_DISABLE_SWITCHABLE_FREQ_CONVERSION = 1
|
|
; Disabled (don't convert)
|
|
; PT3_DISABLE_FREQ_CONVERSION = 1
|
|
; PT3_DISABLE_SWITCHABLE_FREQ_CONVERSION = 1
|
|
; Switchable (can disable/enable on the fly)
|
|
; this is the default for historical reasons
|
|
; PT3_DISABLE_FREQ_CONVERSION commented out
|
|
; PT3_DISABLE_SWITCHABLE_FREQ_CONVERSION commented out
|
|
|
|
; PT3_DISABLE_FREQ_CONVERSION = 1
|
|
; PT3_DISABLE_SWITCHABLE_FREQ_CONVERSION = 1
|
|
|
|
;=============================
|
|
; Setup
|
|
;=============================
|
|
pt3_setup:
|
|
jsr HOME
|
|
jsr TEXT
|
|
|
|
;===============
|
|
; init variables
|
|
;===============
|
|
|
|
lda #0
|
|
sta DONE_PLAYING
|
|
|
|
lda #1 ; change to 0 to not loop
|
|
sta LOOP
|
|
sta LOOP_2
|
|
|
|
;=======================
|
|
; Detect Apple II Model
|
|
;========================
|
|
; IRQ setup is different on IIc
|
|
; You can possibly skip this if you only care about II+/IIe
|
|
|
|
.ifdef PT3_ENABLE_APPLE_IIC
|
|
jsr detect_appleii_model
|
|
.endif
|
|
|
|
;=======================
|
|
; Detect mockingboard
|
|
;========================
|
|
|
|
jsr print_mockingboard_detect ; print message
|
|
|
|
jsr mockingboard_detect ; call detection routine
|
|
|
|
bcs mockingboard_found
|
|
|
|
jsr print_mocking_notfound
|
|
|
|
; possibly can't detect on IIc so just try with slot#4 anyway
|
|
; even if not detected
|
|
|
|
jmp setup_interrupt
|
|
|
|
mockingboard_found:
|
|
|
|
; print found message
|
|
|
|
|
|
; modify message to print slot value
|
|
|
|
lda MB_ADDR_H
|
|
sec
|
|
sbc #$10
|
|
sta found_message+11
|
|
|
|
jsr print_mocking_found
|
|
|
|
jsr print_artist_message
|
|
|
|
;==================================================
|
|
; patch the playing code with the proper slot value
|
|
;==================================================
|
|
|
|
jsr mockingboard_patch
|
|
|
|
setup_interrupt:
|
|
|
|
;=======================
|
|
; 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
|
|
|
|
;============================
|
|
; Enable 6502 interrupts
|
|
;============================
|
|
|
|
jsr pt3_toggle_freq_conversion
|
|
jsr pt3_toggle_freq_conversion_2
|
|
|
|
|
|
start_interrupts:
|
|
cli ; clear interrupt mask
|
|
|
|
|
|
;============================
|
|
; Loop forever
|
|
;============================
|
|
bit SET_GR
|
|
bit LORES
|
|
bit TEXTGR
|
|
bit PAGE1
|
|
forever_loop:
|
|
|
|
jsr visualization
|
|
|
|
jmp forever_loop
|
|
|
|
|
|
;========================================
|
|
;========================================
|
|
|
|
; Helper routines below
|
|
|
|
;========================================
|
|
;========================================
|
|
|
|
;==================================
|
|
; Print mockingboard detect message
|
|
;==================================
|
|
; note: on IIc must do this before enabling interrupt
|
|
; as we disable ROM (COUT won't work?)
|
|
|
|
print_mockingboard_detect:
|
|
lda APPLEII_MODEL
|
|
sta apple_message+17
|
|
|
|
; print detection message for Apple II type
|
|
ldy #0
|
|
print_apple_message:
|
|
lda apple_message,Y ; load loading message
|
|
beq done_apple_message
|
|
ora #$80
|
|
jsr COUT
|
|
iny
|
|
jmp print_apple_message
|
|
done_apple_message:
|
|
jsr CROUT1
|
|
|
|
|
|
; print detection message
|
|
ldy #0
|
|
print_mocking_message:
|
|
lda mocking_message,Y ; load loading message
|
|
beq done_mocking_message
|
|
ora #$80
|
|
jsr COUT
|
|
iny
|
|
jmp print_mocking_message
|
|
done_mocking_message:
|
|
jsr CROUT1
|
|
|
|
rts
|
|
|
|
print_mocking_notfound:
|
|
|
|
ldy #0
|
|
print_not_message:
|
|
lda not_message,Y ; load loading message
|
|
beq print_not_message_done
|
|
ora #$80
|
|
jsr COUT
|
|
iny
|
|
jmp print_not_message
|
|
print_not_message_done:
|
|
rts
|
|
|
|
print_mocking_found:
|
|
ldy #0
|
|
print_found_message:
|
|
lda found_message,Y ; load loading message
|
|
beq done_found_message
|
|
ora #$80
|
|
jsr COUT
|
|
iny
|
|
jmp print_found_message
|
|
done_found_message:
|
|
|
|
rts
|
|
|
|
|
|
|
|
print_artist_message:
|
|
jsr CROUT1
|
|
|
|
ldy #0
|
|
print_artist_message_loop:
|
|
lda artist_message,Y ; load loading message
|
|
beq done_artist_message
|
|
ora #$80
|
|
jsr COUT
|
|
iny
|
|
jmp print_artist_message_loop
|
|
done_artist_message:
|
|
|
|
rts
|
|
|
|
|
|
;=========
|
|
; strings
|
|
;=========
|
|
apple_message: .asciiz "DETECTED APPLE II "
|
|
|
|
mocking_message: .asciiz "LOOKING FOR MOCKINGBOARD: "
|
|
not_message: .byte "NOT "
|
|
found_message: .asciiz "FOUND SLOT#4"
|
|
|
|
artist_message: .asciiz "PLAYING: 'DANCE OF THE DEAD' BY DYA"
|
|
|
|
|
|
;=========
|
|
; vars
|
|
;=========
|
|
|
|
;=========
|
|
;routines
|
|
;=========
|
|
|
|
.ifdef PT3_ENABLE_APPLE_IIC
|
|
.include "pt3_lib_detect_model.s"
|
|
.endif
|
|
|
|
.include "pt3_lib_common.s"
|
|
.include "pt3_lib_core.s"
|
|
.include "pt3_lib_core2.s"
|
|
.include "pt3_lib_init.s"
|
|
.include "pt3_lib_mockingboard_setup.s"
|
|
.include "interrupt_handler.s"
|
|
; if you're self patching, detect has to be after interrupt_handler.s
|
|
.include "pt3_lib_mockingboard_detect.s"
|
|
|
|
.include "visual.s"
|
|
|
|
;=============
|
|
; include song
|
|
;=============
|
|
.align 256 ; must be on page boundary
|
|
; this can be fixed but some changes would have
|
|
; to be made throughout the player code
|
|
song:
|
|
.incbin "music/dya_dance_1.pt3"
|
|
;.incbin "../pt3_player/music/EA.PT3"
|
|
|
|
.align 256
|
|
song2:
|
|
.incbin "music/dya_dance_2.pt3"
|
|
;.incbin "../pt3_player/music/EA.PT3"
|