mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-08-15 08:27:41 +00:00
dya: almost have playing out of same buffer
need to also update the copy code
This commit is contained in:
@@ -380,6 +380,11 @@ done_name_loop:
|
|||||||
lda #>UNPACK_BUFFER1
|
lda #>UNPACK_BUFFER1
|
||||||
sta INH
|
sta INH
|
||||||
|
|
||||||
|
lda #<UNPACK_BUFFER2 ; set input pointer
|
||||||
|
sta INL2
|
||||||
|
lda #>UNPACK_BUFFER2
|
||||||
|
sta INH2
|
||||||
|
|
||||||
; Decompress first chunks
|
; Decompress first chunks
|
||||||
|
|
||||||
lda #$0
|
lda #$0
|
||||||
|
@@ -77,26 +77,19 @@ mb_not_13:
|
|||||||
|
|
||||||
; address
|
; address
|
||||||
stx MOCK_6522_ORA1 ; put address on PA1 ; 4
|
stx MOCK_6522_ORA1 ; put address on PA1 ; 4
|
||||||
stx MOCK_6522_ORA2 ; put address on PA2 ; 4
|
|
||||||
lda #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2
|
lda #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2
|
||||||
sta MOCK_6522_ORB1 ; latch_address on PB1 ; 4
|
sta MOCK_6522_ORB1 ; latch_address on PB1 ; 4
|
||||||
sta MOCK_6522_ORB2 ; latch_address on PB2 ; 4
|
|
||||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||||
sta MOCK_6522_ORB1 ; 4
|
sta MOCK_6522_ORB1 ; 4
|
||||||
sta MOCK_6522_ORB2 ; 4
|
|
||||||
|
|
||||||
; value
|
; value
|
||||||
lda REGISTER_DUMP,X ; load register value ; 4
|
lda REGISTER_DUMP,X ; load register value ; 4
|
||||||
sta MOCK_6522_ORA1 ; put value on PA1 ; 4
|
sta MOCK_6522_ORA1 ; put value on PA1 ; 4
|
||||||
sta MOCK_6522_ORA2 ; put value on PA2 ; 4
|
|
||||||
lda #MOCK_AY_WRITE ; ; 2
|
lda #MOCK_AY_WRITE ; ; 2
|
||||||
sta MOCK_6522_ORB1 ; write on PB1 ; 4
|
sta MOCK_6522_ORB1 ; write on PB1 ; 4
|
||||||
sta MOCK_6522_ORB2 ; write on PB2 ; 4
|
|
||||||
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||||
sta MOCK_6522_ORB1 ; 4
|
sta MOCK_6522_ORB1 ; 4
|
||||||
sta MOCK_6522_ORB2 ; 4
|
|
||||||
;===========
|
|
||||||
; 62
|
|
||||||
mb_no_write:
|
mb_no_write:
|
||||||
inx ; point to next register ; 2
|
inx ; point to next register ; 2
|
||||||
cpx #14 ; if 14 we're done ; 2
|
cpx #14 ; if 14 we're done ; 2
|
||||||
@@ -118,6 +111,75 @@ mb_reg_copy:
|
|||||||
;=============
|
;=============
|
||||||
; 171
|
; 171
|
||||||
|
|
||||||
|
|
||||||
|
;======================================
|
||||||
|
; Write frames to Mockingboard
|
||||||
|
;======================================
|
||||||
|
; actually plays frame loaded at end of
|
||||||
|
; last interrupt, so 20ms behind?
|
||||||
|
|
||||||
|
mb_write_frame2:
|
||||||
|
|
||||||
|
|
||||||
|
ldx #0 ; set up reg count ; 2
|
||||||
|
;============
|
||||||
|
; 2
|
||||||
|
mb_write_loop2:
|
||||||
|
lda REGISTER_DUMP2,X ; load register value ; 4
|
||||||
|
cmp REGISTER_OLD2,X ; compare with old values ; 4
|
||||||
|
beq mb_no_write2 ; 3/2nt
|
||||||
|
;=============
|
||||||
|
; typ 11
|
||||||
|
|
||||||
|
; special case R13. If it is 0xff, then don't update
|
||||||
|
; otherwise might spuriously reset the envelope settings
|
||||||
|
|
||||||
|
cpx #13 ; 2
|
||||||
|
bne mb_not_132 ; 3/2nt
|
||||||
|
cmp #$ff ; 2
|
||||||
|
beq mb_skip_132 ; 3/2nt
|
||||||
|
;============
|
||||||
|
; typ 5
|
||||||
|
mb_not_132:
|
||||||
|
|
||||||
|
|
||||||
|
; address
|
||||||
|
stx MOCK_6522_ORA2 ; put address on PA2 ; 4
|
||||||
|
lda #MOCK_AY_LATCH_ADDR ; latch_address for PB1 ; 2
|
||||||
|
sta MOCK_6522_ORB2 ; latch_address on PB2 ; 4
|
||||||
|
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||||
|
sta MOCK_6522_ORB2 ; 4
|
||||||
|
|
||||||
|
; value
|
||||||
|
lda REGISTER_DUMP2,X ; load register value ; 4
|
||||||
|
sta MOCK_6522_ORA2 ; put value on PA2 ; 4
|
||||||
|
lda #MOCK_AY_WRITE ; ; 2
|
||||||
|
sta MOCK_6522_ORB2 ; write on PB2 ; 4
|
||||||
|
lda #MOCK_AY_INACTIVE ; go inactive ; 2
|
||||||
|
sta MOCK_6522_ORB2 ; 4
|
||||||
|
|
||||||
|
mb_no_write2:
|
||||||
|
inx ; point to next register ; 2
|
||||||
|
cpx #14 ; if 14 we're done ; 2
|
||||||
|
bmi mb_write_loop2 ; otherwise, loop ; 3/2nt
|
||||||
|
;============
|
||||||
|
; 7
|
||||||
|
mb_skip_132:
|
||||||
|
|
||||||
|
|
||||||
|
;=====================================
|
||||||
|
; Copy registers to old
|
||||||
|
;=====================================
|
||||||
|
ldx #13 ; 2
|
||||||
|
mb_reg_copy2:
|
||||||
|
lda REGISTER_DUMP2,X ; load register value ; 4
|
||||||
|
sta REGISTER_OLD2,X ; compare with old values ; 4
|
||||||
|
dex ; 2
|
||||||
|
bpl mb_reg_copy2 ; 2nt/3
|
||||||
|
;=============
|
||||||
|
; 171
|
||||||
|
|
||||||
|
|
||||||
;===================================
|
;===================================
|
||||||
; Load all 14 registers in advance
|
; Load all 14 registers in advance
|
||||||
;===================================
|
;===================================
|
||||||
@@ -134,6 +196,8 @@ mb_load_values:
|
|||||||
mb_load_loop:
|
mb_load_loop:
|
||||||
lda (INL),y ; load register value ; 5
|
lda (INL),y ; load register value ; 5
|
||||||
sta REGISTER_DUMP,X ; 4
|
sta REGISTER_DUMP,X ; 4
|
||||||
|
lda (INL2),y
|
||||||
|
sta REGISTER_DUMP2,X
|
||||||
;============
|
;============
|
||||||
; 9
|
; 9
|
||||||
;====================
|
;====================
|
||||||
@@ -145,6 +209,11 @@ mb_load_loop:
|
|||||||
adc CHUNKSIZE ; 3
|
adc CHUNKSIZE ; 3
|
||||||
sta INH ; 3
|
sta INH ; 3
|
||||||
|
|
||||||
|
clc
|
||||||
|
lda INH2
|
||||||
|
adc CHUNKSIZE
|
||||||
|
sta INH2
|
||||||
|
|
||||||
inx ; point to next register ; 2
|
inx ; point to next register ; 2
|
||||||
cpx #14 ; if 14 we're done ; 2
|
cpx #14 ; if 14 we're done ; 2
|
||||||
bmi mb_load_loop ; otherwise, loop ; 3/2nt
|
bmi mb_load_loop ; otherwise, loop ; 3/2nt
|
||||||
@@ -225,15 +294,24 @@ back_to_first_reg_b:
|
|||||||
|
|
||||||
back_to_first_reg_a:
|
back_to_first_reg_a:
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc #>UNPACK_BUFFER1 ; in proper chunk 1 or 2 ; 2
|
adc #>UNPACK_BUFFER1 ; in proper chunk 1 or 2; 2
|
||||||
|
sta INH ; update r0 pointer ; 3
|
||||||
|
sec
|
||||||
|
sbc #>UNPACK_BUFFER1
|
||||||
|
clc
|
||||||
|
adc #>UNPACK_BUFFER2
|
||||||
|
sta INH2
|
||||||
|
|
||||||
jmp update_r0_pointer ; 3
|
jmp update_r0_pointer ; 3
|
||||||
|
|
||||||
back_to_first_reg_c:
|
back_to_first_reg_c:
|
||||||
lda #>(UNPACK_BUFFER1+$2A00) ; in linear C area ; 2
|
lda #>(UNPACK_BUFFER1+$2A00) ; in linear C area ; 2
|
||||||
|
sta INH ; update r0 pointer ; 3
|
||||||
|
lda #>(UNPACK_BUFFER2+$2A00) ; in linear C area ; 2
|
||||||
|
sta INH2 ; update r0 pointer ; 3
|
||||||
|
|
||||||
update_r0_pointer:
|
update_r0_pointer:
|
||||||
sta INH ; update r0 pointer ; 3
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -351,6 +429,8 @@ quiet_exit:
|
|||||||
mb_clear_reg:
|
mb_clear_reg:
|
||||||
sta REGISTER_DUMP,X ; clear register value ; 4
|
sta REGISTER_DUMP,X ; clear register value ; 4
|
||||||
sta REGISTER_OLD,X ; clear old values ; 4
|
sta REGISTER_OLD,X ; clear old values ; 4
|
||||||
|
sta REGISTER_DUMP2,X ; clear register value ; 4
|
||||||
|
sta REGISTER_OLD2,X ; clear old values ; 4
|
||||||
dex ; 2
|
dex ; 2
|
||||||
bpl mb_clear_reg ; 2nt/3
|
bpl mb_clear_reg ; 2nt/3
|
||||||
|
|
||||||
@@ -374,3 +454,6 @@ exit_interrupt:
|
|||||||
|
|
||||||
REGISTER_OLD:
|
REGISTER_OLD:
|
||||||
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
REGISTER_OLD2:
|
||||||
|
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
33
dya/zp.inc
33
dya/zp.inc
@@ -32,12 +32,29 @@ COLOR EQU $30
|
|||||||
|
|
||||||
; DOS33: Confirmed kills $68
|
; DOS33: Confirmed kills $68
|
||||||
|
|
||||||
RWTSL EQU $60
|
|
||||||
RWTSH EQU $61
|
REGISTER_DUMP2 EQU $60
|
||||||
DOSBUFL EQU $62
|
A_FINE_TONE2 EQU $60
|
||||||
DOSBUFH EQU $63
|
A_COARSE_TONE2 EQU $61
|
||||||
FILEML EQU $64
|
B_FINE_TONE2 EQU $62
|
||||||
FILEMH EQU $65
|
B_COARSE_TONE2 EQU $63
|
||||||
|
C_FINE_TONE2 EQU $64
|
||||||
|
C_COARSE_TONE2 EQU $65
|
||||||
|
NOISE2 EQU $66
|
||||||
|
ENABLE2 EQU $67
|
||||||
|
A_VOLUME2 EQU $68
|
||||||
|
B_VOLUME2 EQU $69
|
||||||
|
C_VOLUME2 EQU $6A
|
||||||
|
ENVELOPE_FINE2 EQU $6B
|
||||||
|
ENVELOPE_COARSE2 EQU $6C
|
||||||
|
ENVELOPE_SHAPE2 EQU $6D
|
||||||
|
|
||||||
|
;RWTSL EQU $60
|
||||||
|
;RWTSH EQU $61
|
||||||
|
;DOSBUFL EQU $62
|
||||||
|
;DOSBUFH EQU $63
|
||||||
|
;FILEML EQU $64
|
||||||
|
;FILEMH EQU $65
|
||||||
;TURNING EQU $60
|
;TURNING EQU $60
|
||||||
;SCREEN_X EQU $61 ; not used?
|
;SCREEN_X EQU $61 ; not used?
|
||||||
;SCREEN_Y EQU $62
|
;SCREEN_Y EQU $62
|
||||||
@@ -72,6 +89,8 @@ C_VOLUME EQU $7A
|
|||||||
ENVELOPE_FINE EQU $7B
|
ENVELOPE_FINE EQU $7B
|
||||||
ENVELOPE_COARSE EQU $7C
|
ENVELOPE_COARSE EQU $7C
|
||||||
ENVELOPE_SHAPE EQU $7D
|
ENVELOPE_SHAPE EQU $7D
|
||||||
|
|
||||||
|
|
||||||
COPY_OFFSET EQU $7E
|
COPY_OFFSET EQU $7E
|
||||||
DECODER_STATE EQU $7F
|
DECODER_STATE EQU $7F
|
||||||
;SPACEY_I EQU $70
|
;SPACEY_I EQU $70
|
||||||
@@ -158,6 +177,8 @@ LASTKEY EQU $F1
|
|||||||
;XPOS EQU $F3
|
;XPOS EQU $F3
|
||||||
;YPOS EQU $F4
|
;YPOS EQU $F4
|
||||||
|
|
||||||
|
INL2 = $f4
|
||||||
|
INH2 = $f5
|
||||||
|
|
||||||
namlo = $f6
|
namlo = $f6
|
||||||
namhi = $f7
|
namhi = $f7
|
||||||
|
Reference in New Issue
Block a user