dos33fsprogs/pt3_player/pt3_dumper.s
2019-09-09 01:06:21 -04:00

443 lines
5.4 KiB
ArmAsm

; VMW Chiptune Dumper
; for debug purposes prints the raw values to screen
; we re-route this to the printer in Slot #1 for debugging
.include "zp.inc"
.include "hardware.inc"
PT3_LOC = $4000
NUM_FILES = 15
;=============================
; Setup
;=============================
pt3_setup:
jsr HOME
jsr TEXT
; Init disk code
jsr rts_init
; init variables
lda #0
sta DRAW_PAGE
sta DONE_PLAYING
sta WHICH_FILE
; Set to 1MHz mode (no translate) for validation purposes
lda #$18
sta convert_177_smc1
sta convert_177_smc2
sta convert_177_smc3
sta convert_177_smc4
sta convert_177_smc5
;==================
; load first song
;==================
; Set COUT to the printer in PR#1
lda #$02
sta $36
lda #$C1
sta $37
jsr new_song
;============================
; Loop forever
;============================
main_loop:
jsr pt3_make_frame
lda FRAMEH
jsr PRBYTE
lda FRAMEL
jsr PRBYTE
lda #':'+$80
jsr COUT
lda #' '+$80
jsr COUT
; A
lda #'A'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+1
jsr PRBYTE
lda AY_REGISTERS+0
jsr PRBYTE
lda #' '+$80
jsr COUT
; B
lda #'B'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+3
jsr PRBYTE
lda AY_REGISTERS+2
jsr PRBYTE
lda #' '+$80
jsr COUT
; C
lda #'C'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+5
jsr PRBYTE
lda AY_REGISTERS+4
jsr PRBYTE
lda #' '+$80
jsr COUT
; N
lda #'N'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+6
jsr PRBYTE
lda #' '+$80
jsr COUT
; M
lda #'M'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+7
jsr PRBYTE
lda #' '+$80
jsr COUT
jsr CROUT1
ldx #6
six_space:
lda #' '+$80
jsr COUT
dex
bne six_space
; A amp
lda #'V'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+8
jsr PRBYTE
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
; B amp
lda #'V'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+9
jsr PRBYTE
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
; C amp
lda #'V'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+10
jsr PRBYTE
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
lda #' '+$80
jsr COUT
; Envelope
lda #'E'+$80
jsr COUT
lda #':'+$80
jsr COUT
lda AY_REGISTERS+12
jsr PRBYTE
lda AY_REGISTERS+11
jsr PRBYTE
; Envelope type
lda #','+$80
jsr COUT
lda AY_REGISTERS+13
jsr PRBYTE
jsr CROUT1
inc FRAMEL
bne no_frame_oflo
inc FRAMEH
no_frame_oflo:
; STOP EARLY for DEBUGGING
; lda FRAMEL
; cmp #$A4
; bne checkcheck
; lda FRAMEH
; cmp #$1
; beq all_done
;checkcheck:
; check if end
lda DONE_SONG
bne all_done
jmp main_loop
all_done:
jmp all_done
;=================
; load a new song
;=================
new_song:
;=========================
; Init Variables
;=========================
; ?
;===========================
; Print loading message
;===========================
; lda #<loading_message
; sta OUTL
; lda #>loading_message
; sta OUTH
; jsr print_cout
;===========================
; Load in PT3 file
;===========================
jsr get_filename
; needs to be space-padded $A0 30-byte filename
lda #<readfile_filename
sta namlo
lda #>readfile_filename
sta namhi
ldy #0
ldx #30 ; 30 chars
name_loop:
lda (INL),Y
beq space_loop
ora #$80
sta (namlo),Y
iny
dex
bne name_loop
beq done_name_loop
space_loop:
lda #$a0 ; pad with ' '
sta (namlo),Y
iny
dex
bne space_loop
done_name_loop:
; open and read a file
; loads to whatever it was BSAVED at (default is $2000)
jsr read_file ; read PT3 file from disk
;=========================
; Print Info
;=========================
; NUL terminate the strings we want to print
lda #0
sta PT3_LOC+$3E
sta PT3_LOC+$62
; print title
lda #>(PT3_LOC+$1E) ; point to header title
sta OUTH
lda #<(PT3_LOC+$1E)
sta OUTL
jsr print_cout
jsr CROUT1
; Print Author
lda #>(PT3_LOC+$42) ; point to header title
sta OUTH
lda #<(PT3_LOC+$42)
sta OUTL
jsr print_cout
jsr CROUT1
jsr CROUT1
jsr pt3_init_song
rts
;==================
; Get filename
;==================
; WHICH_FILE holds number
; MAX_FILES has max
; Scroll through until find
; point INH:INL to it
get_filename:
ldy #0
ldx WHICH_FILE
lda #<song_list ; point to filename
sta INL
lda #>song_list
sta INH
get_filename_loop:
cpx #0
beq filename_found
inner_loop:
iny
lda (INL),Y
bne inner_loop
iny
dex
jmp get_filename_loop
filename_found:
tya
clc
adc INL
sta INL
lda INH
adc #0
sta INH
rts
;===============================
; Increment file we want to load
;===============================
increment_file:
inc WHICH_FILE
lda WHICH_FILE
cmp #NUM_FILES
bne done_increment
lda #0
sta WHICH_FILE
done_increment:
rts
;===============================
; Decrement file we want to load
;===============================
decrement_file:
dec WHICH_FILE
bpl done_decrement
lda #(NUM_FILES-1)
sta WHICH_FILE
done_decrement:
rts
;===============
; print cout
;===============
print_cout:
ldy #0
cout_loop:
lda (OUTL),Y
beq cout_done
clc
adc #$80
jsr COUT
iny
jmp cout_loop
cout_done:
rts
FRAMEL: .byte $00
FRAMEH: .byte $00
;==========
; filenames
;==========
song_list:
; .asciiz "CR.PT3"
.asciiz "EA.PT3"
; .asciiz "RI.PT3"
; .asciiz "OO.PT3"
; .asciiz "DY.PT3"
;=========
;routines
;=========
.include "qkumba_rts.s"
;.include "../pt3_lib/pt3_lib.s"
.include "pt3_lib.s"
;============
; dummy vars
;============
pt3_loop_smc: