mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-11-04 05:05:13 +00:00
parent
79b9b17bac
commit
2e4a237fff
@ -33,9 +33,9 @@ done_fire_line_loop:
|
|||||||
lda FIRE_FB_L
|
lda FIRE_FB_L
|
||||||
adc #40
|
adc #40
|
||||||
sta FIRE_FB_L
|
sta FIRE_FB_L
|
||||||
bcc skip_inc_hi
|
lda FIRE_FB_H
|
||||||
inc FIRE_FB_H
|
adc #0
|
||||||
skip_inc_hi:
|
sta FIRE_FB_H
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bne clear_fire_loop
|
bne clear_fire_loop
|
||||||
@ -142,18 +142,18 @@ fire_low:
|
|||||||
; Q=1 3/4 of time
|
; Q=1 3/4 of time
|
||||||
lda FIRE_Q ; 3
|
lda FIRE_Q ; 3
|
||||||
bne fire_one ; 0-3, is not 0 3/4 of time ; 2/3
|
bne fire_one ; 0-3, is not 0 3/4 of time ; 2/3
|
||||||
beq fire_set ; 3
|
beq fire_zero ; 3
|
||||||
fire_medium:
|
fire_medium:
|
||||||
cmp #$d ; 2
|
cmp #$d ; 2
|
||||||
lda FIRE_Q ; 3
|
|
||||||
bcs fire_high ; bge ; 2/3
|
bcs fire_high ; bge ; 2/3
|
||||||
|
|
||||||
; Q=1 1/2 of time
|
; Q=1 1/2 of time
|
||||||
|
lda FIRE_Q ; 3
|
||||||
and #$1 ; 2
|
and #$1 ; 2
|
||||||
bcc fire_set ; branch always ; 3
|
jmp fire_set ; 3
|
||||||
fire_high:
|
fire_high:
|
||||||
; Q=1 1/4 of time
|
; Q=1 1/4 of time
|
||||||
;;lda FIRE_Q ; is 0 1/4 of time ; 3
|
lda FIRE_Q ; is 0 1/4 of time ; 3
|
||||||
bne fire_zero ; 2/3
|
bne fire_zero ; 2/3
|
||||||
fire_one:
|
fire_one:
|
||||||
lda #1 ; 2
|
lda #1 ; 2
|
||||||
@ -174,7 +174,7 @@ fire_set:
|
|||||||
; bounds check
|
; bounds check
|
||||||
; on edges, don't wrap
|
; on edges, don't wrap
|
||||||
|
|
||||||
tya ; 2
|
cpy #0 ; 2
|
||||||
beq fire_r_same ; 2/3
|
beq fire_r_same ; 2/3
|
||||||
cpy #39 ; 2
|
cpy #39 ; 2
|
||||||
beq fire_r_same ; 2/3
|
beq fire_r_same ; 2/3
|
||||||
@ -184,14 +184,15 @@ fire_set:
|
|||||||
; 25% chance comes from right
|
; 25% chance comes from right
|
||||||
; 25% change comes from left
|
; 25% change comes from left
|
||||||
|
|
||||||
lda SEEDH ; 3
|
lda #$2 ; 2
|
||||||
lsr ; 2
|
bit SEEDH ; 3
|
||||||
and #$1 ; 2
|
|
||||||
bne fire_r_same ; 2/3
|
bne fire_r_same ; 2/3
|
||||||
bcc r_up ; 2/3
|
lda SEEDH ; 3
|
||||||
|
and #$1 ; 2
|
||||||
|
beq r_up ; 2/3
|
||||||
r_down:
|
r_down:
|
||||||
dey ; 2
|
dey ; 2
|
||||||
.byte $a9 ; 2
|
jmp fire_r_same ; 3
|
||||||
r_up:
|
r_up:
|
||||||
iny ; 2
|
iny ; 2
|
||||||
fire_r_same:
|
fire_r_same:
|
||||||
@ -231,17 +232,17 @@ done_fire_fb_update_loop:
|
|||||||
lda fire_smc5_fb+1 ; 4
|
lda fire_smc5_fb+1 ; 4
|
||||||
adc #40 ; 2
|
adc #40 ; 2
|
||||||
sta fire_smc5_fb+1 ; 4
|
sta fire_smc5_fb+1 ; 4
|
||||||
bcc skip_fb_inc1 ; 2/3
|
lda fire_smc5_fb+2 ; 4
|
||||||
inc fire_smc5_fb+2 ; 4
|
adc #0 ; 2
|
||||||
clc ; 2
|
sta fire_smc5_fb+2 ; 4
|
||||||
skip_fb_inc1:
|
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
lda fire_smc5_fb2+1 ; 4
|
lda fire_smc5_fb2+1 ; 4
|
||||||
adc #40 ; 2
|
adc #40 ; 2
|
||||||
sta fire_smc5_fb2+1 ; 4
|
sta fire_smc5_fb2+1 ; 4
|
||||||
bcc skip_fb2_inc1 ; 2/3
|
lda fire_smc5_fb2+2 ; 4
|
||||||
inc fire_smc5_fb2+2 ; 4
|
adc #0 ; 2
|
||||||
skip_fb2_inc1:
|
sta fire_smc5_fb2+2 ; 4
|
||||||
|
|
||||||
inx ; 2
|
inx ; 2
|
||||||
cpx #(FIRE_YSIZE-1) ; 2
|
cpx #(FIRE_YSIZE-1) ; 2
|
||||||
@ -258,12 +259,11 @@ fire_update_done:
|
|||||||
|
|
||||||
lda #<fire_framebuffer ; 2
|
lda #<fire_framebuffer ; 2
|
||||||
sta fire_smc_fb+1 ; 5
|
sta fire_smc_fb+1 ; 5
|
||||||
lda #<(fire_framebuffer+40) ; 2
|
|
||||||
sta fire_smc_fb2+1 ; 5
|
|
||||||
|
|
||||||
lda #>fire_framebuffer ; 2
|
lda #>fire_framebuffer ; 2
|
||||||
sta fire_smc_fb+2 ; 5
|
sta fire_smc_fb+2 ; 5
|
||||||
;this lda could be omitted if values match
|
|
||||||
|
lda #<(fire_framebuffer+40) ; 2
|
||||||
|
sta fire_smc_fb2+1 ; 5
|
||||||
lda #>(fire_framebuffer+40) ; 2
|
lda #>(fire_framebuffer+40) ; 2
|
||||||
sta fire_smc_fb2+2 ; 5
|
sta fire_smc_fb2+2 ; 5
|
||||||
|
|
||||||
@ -323,17 +323,17 @@ done_fire_fb_copy_loop:
|
|||||||
lda fire_smc_fb+1 ; 4
|
lda fire_smc_fb+1 ; 4
|
||||||
adc #80 ; 2
|
adc #80 ; 2
|
||||||
sta fire_smc_fb+1 ; 5
|
sta fire_smc_fb+1 ; 5
|
||||||
bcc skip_fb_inc2 ; 2/3
|
lda fire_smc_fb+2 ; 4
|
||||||
inc fire_smc_fb+2 ; 5
|
adc #0 ; 2
|
||||||
clc ; 2
|
sta fire_smc_fb+2 ; 5
|
||||||
skip_fb_inc2:
|
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
lda fire_smc_fb2+1 ; 4
|
lda fire_smc_fb2+1 ; 4
|
||||||
adc #80 ; 2
|
adc #80 ; 2
|
||||||
sta fire_smc_fb2+1 ; 5
|
sta fire_smc_fb2+1 ; 5
|
||||||
bcc skip_fb2_inc2 ; 2/3
|
lda fire_smc_fb2+2 ; 4
|
||||||
inc fire_smc_fb2+2 ; 5
|
adc #0 ; 2
|
||||||
skip_fb2_inc2:
|
sta fire_smc_fb2+2 ; 5
|
||||||
|
|
||||||
dex ; 2
|
dex ; 2
|
||||||
bne fire_fb_copy ; 2/3
|
bne fire_fb_copy ; 2/3
|
||||||
|
@ -21,24 +21,27 @@ put_sprite:
|
|||||||
sta CV ; ysize is in CV ; 3
|
sta CV ; ysize is in CV ; 3
|
||||||
iny ; 2
|
iny ; 2
|
||||||
|
|
||||||
ldx YPOS ; make a copy of ypos ; 3
|
lda YPOS ; make a copy of ypos ; 3
|
||||||
|
sta TEMPY ; as we modify it ; 3
|
||||||
;===========
|
;===========
|
||||||
; 25
|
; 28
|
||||||
put_sprite_loop:
|
put_sprite_loop:
|
||||||
stx TEMPY ; as we modify it ; 3
|
sty TEMP ; save sprite pointer ; 3
|
||||||
lda gr_offsets,X ; lookup low-res memory address ; 4
|
ldy TEMPY ; 3
|
||||||
|
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc XPOS ; add in xpos ; 3
|
adc XPOS ; add in xpos ; 3
|
||||||
sta OUTL ; store out low byte of addy ; 3
|
sta OUTL ; store out low byte of addy ; 3
|
||||||
lda gr_offsets+1,X ; look up high byte ; 4
|
lda gr_offsets+1,Y ; look up high byte ; 4
|
||||||
adc DRAW_PAGE ; ; 3
|
adc DRAW_PAGE ; ; 3
|
||||||
sta OUTH ; and store it out ; 3
|
sta OUTH ; and store it out ; 3
|
||||||
|
ldy TEMP ; restore sprite pointer ; 3
|
||||||
|
|
||||||
; OUTH:OUTL now points at right place
|
; OUTH:OUTL now points at right place
|
||||||
|
|
||||||
ldx CH ; load xsize into x ; 3
|
ldx CH ; load xsize into x ; 3
|
||||||
;===========
|
;===========
|
||||||
; 28
|
; 34
|
||||||
put_sprite_pixel:
|
put_sprite_pixel:
|
||||||
lda (INL),Y ; get sprite colors ; 5
|
lda (INL),Y ; get sprite colors ; 5
|
||||||
iny ; increment sprite pointer ; 2
|
iny ; increment sprite pointer ; 2
|
||||||
@ -85,13 +88,12 @@ put_sprite_done_draw:
|
|||||||
;==============
|
;==============
|
||||||
; 12/13
|
; 12/13
|
||||||
|
|
||||||
ldx TEMPY ; 3
|
inc TEMPY ; each line has two y vars ; 5
|
||||||
inx ; each line has two y vars ; 2
|
inc TEMPY ; 5
|
||||||
inx ; 2
|
|
||||||
dec CV ; decemenet total y count ; 5
|
dec CV ; decemenet total y count ; 5
|
||||||
bne put_sprite_loop ; loop if not done ; 2nt/3
|
bne put_sprite_loop ; loop if not done ; 2nt/3
|
||||||
;==============
|
;==============
|
||||||
; 14/15
|
; 17/18
|
||||||
|
|
||||||
rts ; return ; 6
|
rts ; return ; 6
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ pt3_play_music:
|
|||||||
sta current_subframe
|
sta current_subframe
|
||||||
sta DONE_SONG ; undo the next song
|
sta DONE_SONG ; undo the next song
|
||||||
|
|
||||||
beq done_interrupt ; branch always
|
jmp done_interrupt
|
||||||
|
|
||||||
move_to_next:
|
move_to_next:
|
||||||
; same as "press right"
|
; same as "press right"
|
||||||
@ -68,7 +68,7 @@ move_to_next:
|
|||||||
mb_write_frame:
|
mb_write_frame:
|
||||||
|
|
||||||
|
|
||||||
tax ; set up reg count ; 2
|
ldx #0 ; set up reg count ; 2
|
||||||
;============
|
;============
|
||||||
; 2
|
; 2
|
||||||
|
|
||||||
@ -138,9 +138,10 @@ update_time:
|
|||||||
inc frame_count_smc+1 ; 5
|
inc frame_count_smc+1 ; 5
|
||||||
frame_count_smc:
|
frame_count_smc:
|
||||||
lda #$0 ; 2
|
lda #$0 ; 2
|
||||||
eor #50 ; 3
|
cmp #50 ; 3
|
||||||
bne done_time ; 3/2nt
|
bne done_time ; 3/2nt
|
||||||
|
|
||||||
|
lda #$0 ; 2
|
||||||
sta frame_count_smc+1 ; 3
|
sta frame_count_smc+1 ; 3
|
||||||
|
|
||||||
update_second_ones:
|
update_second_ones:
|
||||||
@ -167,7 +168,7 @@ update_minutes:
|
|||||||
; we don't handle > 9:59 songs yet
|
; we don't handle > 9:59 songs yet
|
||||||
done_time:
|
done_time:
|
||||||
;=============
|
;=============
|
||||||
; 87 worst
|
; 89 worst
|
||||||
|
|
||||||
|
|
||||||
;=================================
|
;=================================
|
||||||
@ -183,7 +184,7 @@ check_keyboard:
|
|||||||
;====================
|
;====================
|
||||||
; space pauses
|
; space pauses
|
||||||
|
|
||||||
cmp #(' '+$80) ; set carry if true
|
cmp #(' '+$80)
|
||||||
bne key_M
|
bne key_M
|
||||||
key_space:
|
key_space:
|
||||||
lda #$80
|
lda #$80
|
||||||
@ -194,7 +195,7 @@ key_space:
|
|||||||
sta DONE_PLAYING
|
sta DONE_PLAYING
|
||||||
beq yes_bar
|
beq yes_bar
|
||||||
lda #0
|
lda #0
|
||||||
beq lowbar ; branch always
|
jmp lowbar
|
||||||
yes_bar:
|
yes_bar:
|
||||||
lda #7
|
lda #7
|
||||||
lowbar:
|
lowbar:
|
||||||
@ -202,7 +203,7 @@ lowbar:
|
|||||||
|
|
||||||
lda DONE_PLAYING
|
lda DONE_PLAYING
|
||||||
|
|
||||||
bcs quiet_exit ; branch always
|
jmp quiet_exit
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
; M key switches MHz mode
|
; M key switches MHz mode
|
||||||
@ -221,14 +222,14 @@ key_M:
|
|||||||
lda #'7'+$80
|
lda #'7'+$80
|
||||||
sta $7F4
|
sta $7F4
|
||||||
sta $BF4
|
sta $BF4
|
||||||
bne done_key ; branch always
|
jmp done_key
|
||||||
|
|
||||||
at_1MHz:
|
at_1MHz:
|
||||||
lda #'0'+$80
|
lda #'0'+$80
|
||||||
sta $7F4
|
sta $7F4
|
||||||
sta $BF4
|
sta $BF4
|
||||||
|
|
||||||
bne done_key ; branch always
|
jmp done_key
|
||||||
|
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
@ -248,14 +249,14 @@ key_L:
|
|||||||
lda #'L'+$80
|
lda #'L'+$80
|
||||||
sta $7D0+18
|
sta $7D0+18
|
||||||
sta $BD0+18
|
sta $BD0+18
|
||||||
bne done_key ; branch always
|
jmp done_key
|
||||||
|
|
||||||
music_looping:
|
music_looping:
|
||||||
lda #'/'+$80
|
lda #'/'+$80
|
||||||
sta $7D0+18
|
sta $7D0+18
|
||||||
sta $BD0+18
|
sta $BD0+18
|
||||||
|
|
||||||
bne done_key ; branch always
|
jmp done_key
|
||||||
|
|
||||||
|
|
||||||
;======================
|
;======================
|
||||||
@ -276,6 +277,10 @@ key_right:
|
|||||||
bne done_key
|
bne done_key
|
||||||
|
|
||||||
lda #$20
|
lda #$20
|
||||||
|
bne quiet_exit
|
||||||
|
|
||||||
|
done_key:
|
||||||
|
jmp exit_interrupt
|
||||||
|
|
||||||
;========================
|
;========================
|
||||||
; stop playing for now
|
; stop playing for now
|
||||||
@ -289,7 +294,6 @@ quiet_exit:
|
|||||||
lda #$ff ; also mute the channel
|
lda #$ff ; also mute the channel
|
||||||
sta AY_REGISTERS+7 ; just in case
|
sta AY_REGISTERS+7 ; just in case
|
||||||
|
|
||||||
done_key:
|
|
||||||
exit_interrupt:
|
exit_interrupt:
|
||||||
|
|
||||||
; pla ; restore a ; 4
|
; pla ; restore a ; 4
|
||||||
|
@ -7,40 +7,40 @@ get_key:
|
|||||||
|
|
||||||
lda KEYPRESS ; 3
|
lda KEYPRESS ; 3
|
||||||
bpl no_key ; 2nt/3
|
bpl no_key ; 2nt/3
|
||||||
bit KEYRESET ; clear the keyboard buffer ; 4
|
|
||||||
|
|
||||||
figure_out_key:
|
figure_out_key:
|
||||||
cmp #' '+128 ; the mask destroys space ; 2
|
cmp #' '+128 ; the mask destroys space ; 2
|
||||||
beq save_key ; so handle it specially ; 2nt/3
|
beq save_key ; so handle it specially ; 2nt/3
|
||||||
|
|
||||||
|
and #$5f ; mask, to make upper-case ; 2
|
||||||
check_right_arrow:
|
check_right_arrow:
|
||||||
cmp #$95 ; 2
|
cmp #$15 ; 2
|
||||||
bne check_left_arrow ; 2nt/3
|
bne check_left_arrow ; 2nt/3
|
||||||
lda #'D' ; 2
|
lda #'D' ; 2
|
||||||
check_left_arrow:
|
check_left_arrow:
|
||||||
cmp #$88 ; 2
|
cmp #$08 ; 2
|
||||||
bne check_up_arrow ; 2nt/3
|
bne check_up_arrow ; 2nt/3
|
||||||
lda #'A' ; 2
|
lda #'A' ; 2
|
||||||
check_up_arrow:
|
check_up_arrow:
|
||||||
cmp #$8B ; 2
|
cmp #$0B ; 2
|
||||||
bne check_down_arrow ; 2nt/3
|
bne check_down_arrow ; 2nt/3
|
||||||
lda #'W' ; 2
|
lda #'W' ; 2
|
||||||
check_down_arrow:
|
check_down_arrow:
|
||||||
cmp #$8A ; 2
|
cmp #$0A ; 2
|
||||||
bne check_escape ; 2nt/3
|
bne check_escape ; 2nt/3
|
||||||
lda #'S' ; 2
|
lda #'S' ; 2
|
||||||
check_escape:
|
check_escape:
|
||||||
and #$5f ; mask, to make upper-case ; 2
|
|
||||||
cmp #$1B ; 2
|
cmp #$1B ; 2
|
||||||
bne save_key ; 2nt/3
|
bne save_key ; 2nt/3
|
||||||
lda #'Q' ; 2
|
lda #'Q' ; 2
|
||||||
bne save_key ; branch always ; 3
|
jmp save_key ; 3
|
||||||
|
|
||||||
no_key:
|
no_key:
|
||||||
lda #0 ; no key, so save a zero ; 2
|
lda #0 ; no key, so save a zero ; 2
|
||||||
|
|
||||||
save_key:
|
save_key:
|
||||||
sta LASTKEY ; save the key to our buffer ; 2
|
sta LASTKEY ; save the key to our buffer ; 2
|
||||||
|
bit KEYRESET ; clear the keyboard buffer ; 4
|
||||||
rts ; 6
|
rts ; 6
|
||||||
;============
|
;============
|
||||||
|
|
||||||
|
@ -66,7 +66,6 @@ reset_ay_both:
|
|||||||
; Reset Right AY-3-8910
|
; Reset Right AY-3-8910
|
||||||
;======================
|
;======================
|
||||||
;reset_ay_right:
|
;reset_ay_right:
|
||||||
;could be merged with both
|
|
||||||
lda #MOCK_AY_RESET
|
lda #MOCK_AY_RESET
|
||||||
sta MOCK_6522_ORB2
|
sta MOCK_6522_ORB2
|
||||||
lda #MOCK_AY_INACTIVE
|
lda #MOCK_AY_INACTIVE
|
||||||
@ -165,41 +164,6 @@ mb_not_in_this_slot:
|
|||||||
ldx #00
|
ldx #00
|
||||||
beq done_mb_detect
|
beq done_mb_detect
|
||||||
|
|
||||||
;alternative MB detection from Nox Archaist
|
|
||||||
; lda #$04
|
|
||||||
; sta MB_ADDRL
|
|
||||||
; ldx #$c7
|
|
||||||
;
|
|
||||||
;find_mb:
|
|
||||||
; stx MB_ADDRH
|
|
||||||
;
|
|
||||||
; ;detect sound I
|
|
||||||
;
|
|
||||||
; sec
|
|
||||||
; ldy #$00
|
|
||||||
; lda (MB_ADDRL), y
|
|
||||||
; sbc (MB_ADDRL), y
|
|
||||||
; cmp #$05
|
|
||||||
; beq found_mb
|
|
||||||
; dex
|
|
||||||
; cpx #$c0
|
|
||||||
; bne find_mb
|
|
||||||
; ldx #$00 ;no mockingboard found
|
|
||||||
; rts
|
|
||||||
;
|
|
||||||
;found_mb:
|
|
||||||
; ldx #$01 ;mockingboard found
|
|
||||||
; rts
|
|
||||||
;
|
|
||||||
; ;optionally detect sound II
|
|
||||||
;
|
|
||||||
; sec
|
|
||||||
; ldy #$80
|
|
||||||
; lda (MB_ADDRL), y
|
|
||||||
; sbc (MB_ADDRL), y
|
|
||||||
; cmp #$05
|
|
||||||
; beq found_mb
|
|
||||||
|
|
||||||
|
|
||||||
;=======================================
|
;=======================================
|
||||||
; Detect a Mockingboard card in Slot4
|
; Detect a Mockingboard card in Slot4
|
||||||
|
@ -277,6 +277,7 @@ load_ornament:
|
|||||||
;pt3->ornament_patterns[i]=
|
;pt3->ornament_patterns[i]=
|
||||||
; (pt3->data[0xaa+(i*2)]<<8)|pt3->data[0xa9+(i*2)];
|
; (pt3->data[0xaa+(i*2)]<<8)|pt3->data[0xa9+(i*2)];
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
asl ; A*2 ; 2
|
asl ; A*2 ; 2
|
||||||
adc #PT3_ORNAMENT_LOC_L ; 2
|
adc #PT3_ORNAMENT_LOC_L ; 2
|
||||||
tay ; 2
|
tay ; 2
|
||||||
@ -288,6 +289,7 @@ load_ornament:
|
|||||||
|
|
||||||
iny ; 2
|
iny ; 2
|
||||||
lda PT3_LOC,Y ; 4+
|
lda PT3_LOC,Y ; 4+
|
||||||
|
clc ; 2
|
||||||
|
|
||||||
; we're assuming PT3 is loaded to a page boundary
|
; we're assuming PT3 is loaded to a page boundary
|
||||||
|
|
||||||
@ -312,6 +314,7 @@ load_ornament:
|
|||||||
|
|
||||||
; Set the pointer to the value past the length
|
; Set the pointer to the value past the length
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
lda ORNAMENT_L ; 3
|
lda ORNAMENT_L ; 3
|
||||||
adc #$2 ; 2
|
adc #$2 ; 2
|
||||||
sta note_a+NOTE_ORNAMENT_POINTER_L,X ; 5
|
sta note_a+NOTE_ORNAMENT_POINTER_L,X ; 5
|
||||||
@ -324,7 +327,7 @@ load_ornament:
|
|||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
;============
|
;============
|
||||||
; 87
|
; 93
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
; Load Sample
|
; Load Sample
|
||||||
@ -350,6 +353,7 @@ load_sample:
|
|||||||
;pt3->ornament_patterns[i]=
|
;pt3->ornament_patterns[i]=
|
||||||
; (pt3->data[0x6a+(i*2)]<<8)|pt3->data[0x69+(i*2)];
|
; (pt3->data[0x6a+(i*2)]<<8)|pt3->data[0x69+(i*2)];
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
asl ; A*2 ; 2
|
asl ; A*2 ; 2
|
||||||
adc #PT3_SAMPLE_LOC_L ; 2
|
adc #PT3_SAMPLE_LOC_L ; 2
|
||||||
tay ; 2
|
tay ; 2
|
||||||
@ -362,6 +366,7 @@ load_sample:
|
|||||||
|
|
||||||
iny ; 2
|
iny ; 2
|
||||||
lda PT3_LOC,Y ; 4+
|
lda PT3_LOC,Y ; 4+
|
||||||
|
clc ; 2
|
||||||
|
|
||||||
; assume pt3 file is at page boundary
|
; assume pt3 file is at page boundary
|
||||||
adc #>PT3_LOC ; 2
|
adc #>PT3_LOC ; 2
|
||||||
@ -383,6 +388,7 @@ load_sample:
|
|||||||
|
|
||||||
; Set pointer to beginning of samples
|
; Set pointer to beginning of samples
|
||||||
|
|
||||||
|
clc ; 2
|
||||||
lda SAMPLE_L ; 3
|
lda SAMPLE_L ; 3
|
||||||
adc #$2 ; 2
|
adc #$2 ; 2
|
||||||
sta note_a+NOTE_SAMPLE_POINTER_L,X ; 5
|
sta note_a+NOTE_SAMPLE_POINTER_L,X ; 5
|
||||||
@ -394,15 +400,14 @@ load_sample:
|
|||||||
|
|
||||||
rts ; 6
|
rts ; 6
|
||||||
;============
|
;============
|
||||||
; 80
|
; 86
|
||||||
|
|
||||||
;====================================
|
;====================================
|
||||||
; pt3_init_song
|
; pt3_init_song
|
||||||
;====================================
|
;====================================
|
||||||
;
|
;
|
||||||
; TODO: change to a memset type instruction?
|
; TODO: change to a memset type instruction?
|
||||||
; it will save bytes only if the labels are adjacent
|
|
||||||
; it will add a lot more cycles, though
|
|
||||||
pt3_init_song:
|
pt3_init_song:
|
||||||
lda #$f ; 2
|
lda #$f ; 2
|
||||||
sta note_a+NOTE_VOLUME ; 4
|
sta note_a+NOTE_VOLUME ; 4
|
||||||
@ -431,6 +436,7 @@ pt3_init_song:
|
|||||||
sta pt3_envelope_type ; 4
|
sta pt3_envelope_type ; 4
|
||||||
|
|
||||||
; default ornament/sample in A
|
; default ornament/sample in A
|
||||||
|
lda #0 ; 2
|
||||||
ldx #(NOTE_STRUCT_SIZE*0) ; 2
|
ldx #(NOTE_STRUCT_SIZE*0) ; 2
|
||||||
jsr load_ornament ; 6+93
|
jsr load_ornament ; 6+93
|
||||||
lda #1 ; 2
|
lda #1 ; 2
|
||||||
@ -467,23 +473,26 @@ pt3_init_song:
|
|||||||
|
|
||||||
;======================
|
;======================
|
||||||
; calculate version
|
; calculate version
|
||||||
ldx #6 ; 2
|
lda #6 ; 2
|
||||||
|
sta pt3_version ; 3
|
||||||
lda PT3_LOC+PT3_VERSION ; 4
|
lda PT3_LOC+PT3_VERSION ; 4
|
||||||
|
cmp #'0' ; 2
|
||||||
|
bcc not_ascii_number ; blt ; 2/3
|
||||||
|
cmp #'9' ; 2
|
||||||
|
bcs not_ascii_number ; bge ; 2/3
|
||||||
sec ; 2
|
sec ; 2
|
||||||
sbc #'0' ; 2
|
sbc #'0' ; 2
|
||||||
cmp #9 ; 2
|
sta pt3_version ; 4
|
||||||
bcs not_ascii_number ; bge ; 2/3
|
|
||||||
tax ; 2
|
|
||||||
|
|
||||||
not_ascii_number:
|
not_ascii_number:
|
||||||
stx pt3_version ; 3
|
|
||||||
|
|
||||||
;=======================
|
;=======================
|
||||||
; Pick which volume number, based on version
|
; Pick which volume number, based on version
|
||||||
|
|
||||||
; if (PlParams.PT3.PT3_Version <= 4)
|
; if (PlParams.PT3.PT3_Version <= 4)
|
||||||
|
|
||||||
cpx #5 ; 2
|
lda pt3_version ; 4
|
||||||
|
cmp #5 ; 2
|
||||||
|
|
||||||
; carry clear = 3.3/3.4 table
|
; carry clear = 3.3/3.4 table
|
||||||
; carry set = 3.5 table
|
; carry set = 3.5 table
|
||||||
@ -510,6 +519,7 @@ calculate_note:
|
|||||||
lda note_a+NOTE_ENABLED,X ; 4+
|
lda note_a+NOTE_ENABLED,X ; 4+
|
||||||
bne note_enabled ; 2/3
|
bne note_enabled ; 2/3
|
||||||
|
|
||||||
|
lda #0 ; 2
|
||||||
sta note_a+NOTE_AMPLITUDE,X ; 5
|
sta note_a+NOTE_AMPLITUDE,X ; 5
|
||||||
jmp done_note ; 3
|
jmp done_note ; 3
|
||||||
|
|
||||||
@ -542,36 +552,44 @@ note_enabled:
|
|||||||
|
|
||||||
; a->tone = pt3->data[a->sample_pointer + a->sample_position*4+2];
|
; a->tone = pt3->data[a->sample_pointer + a->sample_position*4+2];
|
||||||
; a->tone+=(pt3->data[a->sample_pointer + a->sample_position*4+3])<<8;
|
; a->tone+=(pt3->data[a->sample_pointer + a->sample_position*4+3])<<8;
|
||||||
; a->tone += a->tone_accumulator;
|
|
||||||
iny ; 2
|
iny ; 2
|
||||||
clc ; 2
|
|
||||||
lda (SAMPLE_L),Y ; 5+
|
lda (SAMPLE_L),Y ; 5+
|
||||||
adc note_a+NOTE_TONE_ACCUMULATOR_L,X ; 4+
|
|
||||||
sta note_a+NOTE_TONE_L,X ; 4
|
sta note_a+NOTE_TONE_L,X ; 4
|
||||||
|
|
||||||
iny ; 2
|
iny ; 2
|
||||||
lda (SAMPLE_L),Y ; 5+
|
lda (SAMPLE_L),Y ; 5+
|
||||||
adc note_a+NOTE_TONE_ACCUMULATOR_H,X ; 4+
|
|
||||||
sta note_a+NOTE_TONE_H,X ; 4
|
sta note_a+NOTE_TONE_H,X ; 4
|
||||||
|
|
||||||
|
; a->tone += a->tone_accumulator;
|
||||||
|
clc ; 2
|
||||||
|
lda note_a+NOTE_TONE_L,X ; 4+
|
||||||
|
adc note_a+NOTE_TONE_ACCUMULATOR_L,X ; 4+
|
||||||
|
sta note_a+NOTE_TONE_L,X ; 4+
|
||||||
|
lda note_a+NOTE_TONE_H,X ; 4+
|
||||||
|
adc note_a+NOTE_TONE_ACCUMULATOR_H,X ; 4+
|
||||||
|
sta note_a+NOTE_TONE_H,X ; 4+
|
||||||
|
|
||||||
;=============================
|
;=============================
|
||||||
; Accumulate tone if set
|
; Accumulate tone if set
|
||||||
; (if sample_b1 & $40)
|
; (if sample_b1 & $40)
|
||||||
|
|
||||||
|
lda #$40 ; if (b1&0x40)
|
||||||
bit sample_b1
|
bit sample_b1
|
||||||
bvc no_accum ; (so, if b1&0x40 is zero, skip it)
|
beq no_accum ; (so, if b1&0x40 is zero, skip it)
|
||||||
|
|
||||||
sta note_a+NOTE_TONE_ACCUMULATOR_H,X
|
|
||||||
lda note_a+NOTE_TONE_L,X ; tone_accumulator=tone
|
lda note_a+NOTE_TONE_L,X ; tone_accumulator=tone
|
||||||
sta note_a+NOTE_TONE_ACCUMULATOR_L,X
|
sta note_a+NOTE_TONE_ACCUMULATOR_L,X
|
||||||
|
lda note_a+NOTE_TONE_H,X
|
||||||
|
sta note_a+NOTE_TONE_ACCUMULATOR_H,X
|
||||||
|
|
||||||
no_accum:
|
no_accum:
|
||||||
|
|
||||||
;============================
|
;============================
|
||||||
; Calculate tone
|
; Calculate tone
|
||||||
; j = a->note + (pt3->data[a->ornament_pointer + a->ornament_position]
|
; j = a->note + (pt3->data[a->ornament_pointer + a->ornament_position]
|
||||||
clc ;;can be removed if ADC ACCUMULATOR_H cannot overflow
|
clc
|
||||||
ldy note_a+NOTE_ORNAMENT_POSITION,X
|
lda note_a+NOTE_ORNAMENT_POSITION,X
|
||||||
|
tay
|
||||||
lda (ORNAMENT_L),Y
|
lda (ORNAMENT_L),Y
|
||||||
adc note_a+NOTE_NOTE,X
|
adc note_a+NOTE_NOTE,X
|
||||||
|
|
||||||
@ -602,7 +620,7 @@ note_not_too_high:
|
|||||||
adc note_a+NOTE_TONE_SLIDING_H,X
|
adc note_a+NOTE_TONE_SLIDING_H,X
|
||||||
sta note_a+NOTE_TONE_H,X
|
sta note_a+NOTE_TONE_H,X
|
||||||
|
|
||||||
clc ;;can be removed if ADC SLIDING_H cannot overflow
|
clc
|
||||||
lda note_a+NOTE_TONE_L,X
|
lda note_a+NOTE_TONE_L,X
|
||||||
adc freq_l
|
adc freq_l
|
||||||
sta note_a+NOTE_TONE_L,X
|
sta note_a+NOTE_TONE_L,X
|
||||||
@ -623,7 +641,7 @@ note_not_too_high:
|
|||||||
|
|
||||||
|
|
||||||
; a->tone_sliding+=a->tone_slide_step
|
; a->tone_sliding+=a->tone_slide_step
|
||||||
clc ;;can be removed if ADC freq_h cannot overflow
|
clc
|
||||||
lda note_a+NOTE_TONE_SLIDING_L,X
|
lda note_a+NOTE_TONE_SLIDING_L,X
|
||||||
adc note_a+NOTE_TONE_SLIDE_STEP_L,X
|
adc note_a+NOTE_TONE_SLIDE_STEP_L,X
|
||||||
sta note_a+NOTE_TONE_SLIDING_L,X
|
sta note_a+NOTE_TONE_SLIDING_L,X
|
||||||
@ -707,15 +725,17 @@ calc_amplitude:
|
|||||||
|
|
||||||
; adjust amplitude sliding
|
; adjust amplitude sliding
|
||||||
|
|
||||||
bit sample_b0 ; if ((b0 & 0x80)!=0) {
|
lda sample_b0 ; if ((b0 & 0x80)!=0) {
|
||||||
bpl done_amp_sliding ; so if top bit not set, skip
|
and #$80
|
||||||
|
beq done_amp_sliding ; so if top bit not set, skip
|
||||||
|
|
||||||
;================================
|
;================================
|
||||||
; if top bits 0b11 then slide up
|
; if top bits 0b11 then slide up
|
||||||
; if top buts 0b10 then slide down
|
; if top buts 0b10 then slide down
|
||||||
|
|
||||||
; if ((b0 & 0x40)!=0) {
|
lda sample_b0 ; if ((b0&0x40)!=0) {
|
||||||
bvc amp_slide_down
|
and #$40
|
||||||
|
beq amp_slide_down
|
||||||
|
|
||||||
amp_slide_up:
|
amp_slide_up:
|
||||||
; if (a->amplitude_sliding < 15) {
|
; if (a->amplitude_sliding < 15) {
|
||||||
@ -728,7 +748,7 @@ amp_slide_up:
|
|||||||
asu_signed:
|
asu_signed:
|
||||||
bpl done_amp_sliding ; skip if A>=15
|
bpl done_amp_sliding ; skip if A>=15
|
||||||
inc note_a+NOTE_AMPLITUDE_SLIDING,X ; a->amplitude_sliding++;
|
inc note_a+NOTE_AMPLITUDE_SLIDING,X ; a->amplitude_sliding++;
|
||||||
bne done_amp_sliding
|
jmp done_amp_sliding
|
||||||
|
|
||||||
amp_slide_down:
|
amp_slide_down:
|
||||||
; if (a->amplitude_sliding > -15) {
|
; if (a->amplitude_sliding > -15) {
|
||||||
@ -757,7 +777,7 @@ done_amp_sliding:
|
|||||||
check_amp_lo:
|
check_amp_lo:
|
||||||
bpl check_amp_hi
|
bpl check_amp_hi
|
||||||
lda #0
|
lda #0
|
||||||
beq write_clamp_amplitude
|
jmp write_clamp_amplitude
|
||||||
|
|
||||||
check_amp_hi:
|
check_amp_hi:
|
||||||
cmp #16
|
cmp #16
|
||||||
@ -810,23 +830,15 @@ check_envelope_enable:
|
|||||||
|
|
||||||
|
|
||||||
envelope_slide:
|
envelope_slide:
|
||||||
lda sample_b0
|
|
||||||
lsr
|
|
||||||
tay
|
|
||||||
|
|
||||||
; Envelope slide
|
; Envelope slide
|
||||||
; If b1 top bits are 10 or 11
|
; If b1 top bits are 10 or 11
|
||||||
|
|
||||||
|
lda #$80
|
||||||
|
bit sample_b1
|
||||||
|
beq else_noise_slide ; if ((b1 & 0x80) != 0) {
|
||||||
|
|
||||||
lda #$20
|
lda #$20
|
||||||
bit sample_b0
|
bit sample_b0
|
||||||
php
|
|
||||||
|
|
||||||
bit sample_b1
|
|
||||||
bpl else_noise_slide ; if ((b1 & 0x80) != 0) {
|
|
||||||
|
|
||||||
plp
|
|
||||||
php
|
|
||||||
;;bug? always falls through
|
|
||||||
beq envelope_slide_down ; if ((b0 & 0x20) != 0) {
|
beq envelope_slide_down ; if ((b0 & 0x20) != 0) {
|
||||||
|
|
||||||
; FIXME: this can be optimized
|
; FIXME: this can be optimized
|
||||||
@ -834,16 +846,17 @@ envelope_slide:
|
|||||||
envelope_slide_down:
|
envelope_slide_down:
|
||||||
|
|
||||||
; j = ((b0>>1)|0xF0) + a->envelope_sliding
|
; j = ((b0>>1)|0xF0) + a->envelope_sliding
|
||||||
tya
|
lda sample_b0
|
||||||
|
lsr
|
||||||
ora #$f0
|
ora #$f0
|
||||||
clc
|
clc
|
||||||
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
||||||
sta e_slide_amount ; j
|
sta e_slide_amount ; j
|
||||||
;;+jmp envelope_slide_done?
|
|
||||||
|
|
||||||
envelope_slide_up:
|
envelope_slide_up:
|
||||||
; j = ((b0>>1)&0xF) + a->envelope_sliding;
|
; j = ((b0>>1)&0xF) + a->envelope_sliding;
|
||||||
tya
|
lda sample_b0
|
||||||
|
lsr
|
||||||
and #$0f
|
and #$0f
|
||||||
clc
|
clc
|
||||||
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
||||||
@ -851,10 +864,12 @@ envelope_slide_up:
|
|||||||
|
|
||||||
envelope_slide_done:
|
envelope_slide_done:
|
||||||
|
|
||||||
plp
|
lda #$20
|
||||||
|
bit sample_b1
|
||||||
beq last_envelope ; if (( b1 & 0x20) != 0) {
|
beq last_envelope ; if (( b1 & 0x20) != 0) {
|
||||||
|
|
||||||
; a->envelope_sliding = j;
|
; a->envelope_sliding = j;
|
||||||
|
lda e_slide_amount
|
||||||
sta note_a+NOTE_ENVELOPE_SLIDING,X
|
sta note_a+NOTE_ENVELOPE_SLIDING,X
|
||||||
|
|
||||||
last_envelope:
|
last_envelope:
|
||||||
@ -873,15 +888,18 @@ else_noise_slide:
|
|||||||
; else {
|
; else {
|
||||||
|
|
||||||
; pt3->noise_add = (b0>>1) + a->noise_sliding;
|
; pt3->noise_add = (b0>>1) + a->noise_sliding;
|
||||||
tya
|
lda sample_b0
|
||||||
|
lsr
|
||||||
clc
|
clc
|
||||||
adc note_a+NOTE_NOISE_SLIDING,X
|
adc note_a+NOTE_NOISE_SLIDING,X
|
||||||
sta pt3_noise_add
|
sta pt3_noise_add
|
||||||
|
|
||||||
plp
|
lda #$20
|
||||||
|
bit sample_b1
|
||||||
beq noise_slide_done ; if ((b1 & 0x20) != 0) {
|
beq noise_slide_done ; if ((b1 & 0x20) != 0) {
|
||||||
|
|
||||||
; noise_sliding = pt3_noise_add
|
; noise_sliding = pt3_noise_add
|
||||||
|
lda pt3_noise_add
|
||||||
sta note_a+NOTE_NOISE_SLIDING,X
|
sta note_a+NOTE_NOISE_SLIDING,X
|
||||||
|
|
||||||
noise_slide_done:
|
noise_slide_done:
|
||||||
@ -928,7 +946,9 @@ done_note:
|
|||||||
; set mixer value
|
; set mixer value
|
||||||
; this is a bit complex (from original code)
|
; this is a bit complex (from original code)
|
||||||
; after 3 calls it is set up properly
|
; after 3 calls it is set up properly
|
||||||
lsr pt3_mixer_value
|
lda pt3_mixer_value
|
||||||
|
lsr
|
||||||
|
sta pt3_mixer_value
|
||||||
|
|
||||||
handle_onoff:
|
handle_onoff:
|
||||||
lda note_a+NOTE_ONOFF,X ;if (a->onoff>0) {
|
lda note_a+NOTE_ONOFF,X ;if (a->onoff>0) {
|
||||||
@ -1168,7 +1188,16 @@ decode_case_bX:
|
|||||||
and #$f
|
and #$f
|
||||||
beq decode_case_b0
|
beq decode_case_b0
|
||||||
cmp #1
|
cmp #1
|
||||||
bne decode_case_bx_higher
|
beq decode_case_b1
|
||||||
|
jmp decode_case_bx_higher
|
||||||
|
|
||||||
|
decode_case_b0:
|
||||||
|
; Disable envelope
|
||||||
|
lda #0
|
||||||
|
sta note_a+NOTE_ENVELOPE_ENABLED,X
|
||||||
|
sta note_a+NOTE_ORNAMENT_POSITION,X
|
||||||
|
jmp done_decode
|
||||||
|
|
||||||
|
|
||||||
decode_case_b1:
|
decode_case_b1:
|
||||||
; Set Length
|
; Set Length
|
||||||
@ -1181,13 +1210,6 @@ decode_case_b1:
|
|||||||
sta note_a+NOTE_LEN_COUNT,X
|
sta note_a+NOTE_LEN_COUNT,X
|
||||||
jmp done_decode
|
jmp done_decode
|
||||||
|
|
||||||
decode_case_b0:
|
|
||||||
; Disable envelope
|
|
||||||
sta note_a+NOTE_ENVELOPE_ENABLED,X
|
|
||||||
sta note_a+NOTE_ORNAMENT_POSITION,X
|
|
||||||
jmp done_decode
|
|
||||||
|
|
||||||
|
|
||||||
decode_case_bx_higher:
|
decode_case_bx_higher:
|
||||||
|
|
||||||
sec
|
sec
|
||||||
@ -1211,6 +1233,7 @@ decode_case_cX:
|
|||||||
decode_case_c0:
|
decode_case_c0:
|
||||||
; special case $C0 means shut down the note
|
; special case $C0 means shut down the note
|
||||||
|
|
||||||
|
lda #0
|
||||||
sta note_a+NOTE_ENABLED,X ; enabled=0
|
sta note_a+NOTE_ENABLED,X ; enabled=0
|
||||||
|
|
||||||
jsr reset_note ; 6+69
|
jsr reset_note ; 6+69
|
||||||
@ -1240,6 +1263,11 @@ decode_case_dX:
|
|||||||
lda #1
|
lda #1
|
||||||
sta decode_done
|
sta decode_done
|
||||||
|
|
||||||
|
jmp done_decode
|
||||||
|
decode_case_dx_not_d0:
|
||||||
|
|
||||||
|
jsr load_sample ; load sample in bottom nybble
|
||||||
|
|
||||||
jmp done_decode
|
jmp done_decode
|
||||||
decode_case_eX:
|
decode_case_eX:
|
||||||
;==============================
|
;==============================
|
||||||
@ -1251,13 +1279,10 @@ decode_case_eX:
|
|||||||
lda note_command
|
lda note_command
|
||||||
sec
|
sec
|
||||||
sbc #$d0
|
sbc #$d0
|
||||||
;fall through
|
jsr load_sample
|
||||||
|
|
||||||
decode_case_dx_not_d0:
|
|
||||||
|
|
||||||
jsr load_sample ; load sample in bottom nybble
|
|
||||||
|
|
||||||
jmp done_decode
|
jmp done_decode
|
||||||
|
|
||||||
decode_case_fX:
|
decode_case_fX:
|
||||||
;==============================
|
;==============================
|
||||||
; $FX - change ornament/sample
|
; $FX - change ornament/sample
|
||||||
@ -1308,10 +1333,6 @@ effect_1:
|
|||||||
cmp #$1
|
cmp #$1
|
||||||
bne effect_2
|
bne effect_2
|
||||||
|
|
||||||
sta note_a+NOTE_SIMPLE_GLISS,X
|
|
||||||
lsr
|
|
||||||
sta note_a+NOTE_ONOFF,X
|
|
||||||
|
|
||||||
lda (PATTERN_L),Y ; load byte, set as slide delay
|
lda (PATTERN_L),Y ; load byte, set as slide delay
|
||||||
iny
|
iny
|
||||||
|
|
||||||
@ -1326,6 +1347,11 @@ effect_1:
|
|||||||
iny
|
iny
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta note_a+NOTE_ONOFF,X
|
||||||
|
lda #1
|
||||||
|
sta note_a+NOTE_SIMPLE_GLISS,X
|
||||||
|
|
||||||
jmp no_effect
|
jmp no_effect
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
@ -1363,11 +1389,12 @@ effect_2_small: ; FIXME: make smaller
|
|||||||
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
lda note_a+NOTE_TONE_SLIDE_STEP_L,X
|
lda note_a+NOTE_TONE_SLIDE_STEP_L,X
|
||||||
eor #$ff
|
eor #$ff
|
||||||
adc #$0 ;+carry set by earlier CMP
|
clc
|
||||||
|
adc #$1
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
||||||
bcc skip_step_inc1
|
lda note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
inc note_a+NOTE_TONE_SLIDE_STEP_H,X
|
adc #$0
|
||||||
skip_step_inc1:
|
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
|
|
||||||
slide_step_positive:
|
slide_step_positive:
|
||||||
|
|
||||||
@ -1433,9 +1460,9 @@ weird_version:
|
|||||||
clc
|
clc
|
||||||
adc #$1
|
adc #$1
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
||||||
bcc skip_step_inc2
|
lda note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
inc note_a+NOTE_TONE_SLIDE_STEP_H,X
|
adc #$0
|
||||||
skip_step_inc2:
|
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
|
|
||||||
no_need:
|
no_need:
|
||||||
|
|
||||||
@ -1570,13 +1597,13 @@ set_envelope:
|
|||||||
lda (PATTERN_L),Y ; 5+
|
lda (PATTERN_L),Y ; 5+
|
||||||
sta pt3_envelope_period_l ; 4
|
sta pt3_envelope_period_l ; 4
|
||||||
|
|
||||||
lda #1 ; 2
|
lda #0 ; 2
|
||||||
sta note_a+NOTE_ENVELOPE_ENABLED,X ; envelope_enabled=1 ; 5
|
|
||||||
lsr ; 2
|
|
||||||
sta note_a+NOTE_ORNAMENT_POSITION,X ; ornament_position=0 ; 5
|
sta note_a+NOTE_ORNAMENT_POSITION,X ; ornament_position=0 ; 5
|
||||||
sta pt3_envelope_delay ; envelope_delay=0 ; 4
|
sta pt3_envelope_delay ; envelope_delay=0 ; 4
|
||||||
sta pt3_envelope_slide_l ; envelope_slide=0 ; 4
|
sta pt3_envelope_slide_l ; envelope_slide=0 ; 4
|
||||||
sta pt3_envelope_slide_h ; 4
|
sta pt3_envelope_slide_h ; 4
|
||||||
|
lda #1 ; 2
|
||||||
|
sta note_a+NOTE_ENVELOPE_ENABLED,X ; envelope_enabled=1 ; 5
|
||||||
|
|
||||||
rts ; 6
|
rts ; 6
|
||||||
;===========
|
;===========
|
||||||
@ -1723,15 +1750,13 @@ not_done:
|
|||||||
; update pattern or line if necessary
|
; update pattern or line if necessary
|
||||||
; then calculate the values for the next frame
|
; then calculate the values for the next frame
|
||||||
|
|
||||||
;==========================
|
|
||||||
; pattern done early!
|
|
||||||
|
|
||||||
early_end:
|
pt3_make_frame:
|
||||||
inc current_pattern ; increment pattern ; 6
|
|
||||||
sta current_line ; 4
|
|
||||||
sta current_subframe ; 4
|
|
||||||
|
|
||||||
check_subframe:
|
; see if we need a new pattern
|
||||||
|
; we do if line==0 and subframe==0
|
||||||
|
lda current_line ; 4
|
||||||
|
bne pattern_good ; 2/3
|
||||||
lda current_subframe ; 4
|
lda current_subframe ; 4
|
||||||
bne pattern_good ; 2/3
|
bne pattern_good ; 2/3
|
||||||
|
|
||||||
@ -1742,14 +1767,6 @@ check_subframe:
|
|||||||
beq pattern_good ; 2/3
|
beq pattern_good ; 2/3
|
||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
pt3_make_frame:
|
|
||||||
|
|
||||||
; see if we need a new pattern
|
|
||||||
; we do if line==0 and subframe==0
|
|
||||||
; allow fallthrough where possible
|
|
||||||
lda current_line ; 4
|
|
||||||
beq check_subframe ; 2/3
|
|
||||||
|
|
||||||
pattern_good:
|
pattern_good:
|
||||||
|
|
||||||
; see if we need a new line
|
; see if we need a new line
|
||||||
@ -1762,7 +1779,16 @@ pattern_good:
|
|||||||
|
|
||||||
; check if pattern done early
|
; check if pattern done early
|
||||||
lda pt3_pattern_done ; 4
|
lda pt3_pattern_done ; 4
|
||||||
beq early_end ; 2/3
|
bne line_good ; 2/3
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; pattern done early!
|
||||||
|
|
||||||
|
inc current_pattern ; increment pattern ; 6
|
||||||
|
lda #0 ; 2
|
||||||
|
sta current_line ; 4
|
||||||
|
sta current_subframe ; 4
|
||||||
|
jmp pt3_make_frame ; 3
|
||||||
|
|
||||||
line_good:
|
line_good:
|
||||||
|
|
||||||
@ -1772,20 +1798,22 @@ line_good:
|
|||||||
lda current_subframe ; 4
|
lda current_subframe ; 4
|
||||||
|
|
||||||
; if we hit pt3_speed, move to next
|
; if we hit pt3_speed, move to next
|
||||||
eor pt3_speed ; 4
|
cmp pt3_speed ; 4
|
||||||
bne do_frame ; 2/3
|
bne do_frame ; 2/3
|
||||||
|
|
||||||
next_line:
|
next_line:
|
||||||
sta current_subframe ; reset subframe to 0 ; 4
|
lda #0 ; reset subframe to 0 ; 2
|
||||||
|
sta current_subframe ; 4
|
||||||
|
|
||||||
inc current_line ; and increment line ; 6
|
inc current_line ; and increment line ; 6
|
||||||
lda current_line ; 4
|
lda current_line ; 4
|
||||||
|
|
||||||
eor #64 ; always end at 64. ; 2
|
cmp #64 ; always end at 64. ; 2
|
||||||
bne do_frame ; is this always needed? ; 2/3
|
bne do_frame ; is this always needed? ; 2/3
|
||||||
|
|
||||||
next_pattern:
|
next_pattern:
|
||||||
sta current_line ; reset line to 0 ; 4
|
lda #0 ; reset line to 0 ; 2
|
||||||
|
sta current_line ; 4
|
||||||
|
|
||||||
inc current_pattern ; increment pattern ; 6
|
inc current_pattern ; increment pattern ; 6
|
||||||
|
|
||||||
@ -1802,6 +1830,7 @@ do_frame:
|
|||||||
; R13 = Envelope Shape, 0xff means don't write
|
; R13 = Envelope Shape, 0xff means don't write
|
||||||
; R14/R15 = I/O (ignored)
|
; R14/R15 = I/O (ignored)
|
||||||
|
|
||||||
|
lda #0 ; 2
|
||||||
sta pt3_mixer_value ; 4
|
sta pt3_mixer_value ; 4
|
||||||
sta pt3_envelope_add ; 4
|
sta pt3_envelope_add ; 4
|
||||||
|
|
||||||
@ -1812,124 +1841,133 @@ do_frame:
|
|||||||
ldx #(NOTE_STRUCT_SIZE*2) ; Note C ; 2
|
ldx #(NOTE_STRUCT_SIZE*2) ; Note C ; 2
|
||||||
jsr calculate_note ; 6+?
|
jsr calculate_note ; 6+?
|
||||||
|
|
||||||
|
; Load up the Frequency Registers
|
||||||
|
|
||||||
|
lda note_a+NOTE_TONE_L ; Note A Period L ; 4
|
||||||
|
sta AY_REGISTERS+0 ; into R0 ; 3
|
||||||
|
lda note_a+NOTE_TONE_H ; Note A Period H ; 4
|
||||||
|
sta AY_REGISTERS+1 ; into R1 ; 3
|
||||||
|
|
||||||
; FIXME: make this self-modifying?
|
; FIXME: make this self-modifying?
|
||||||
|
|
||||||
lda convert_177 ; 4
|
lda convert_177 ; 4
|
||||||
cmp #1 ; 2
|
beq no_scale_a ; 2/3
|
||||||
|
|
||||||
; Load up the Frequency Registers
|
|
||||||
|
|
||||||
lda note_a+NOTE_TONE_H ; Note A Period H ; 4
|
|
||||||
sta AY_REGISTERS+1 ; into R1 ; 3
|
|
||||||
lda note_a+NOTE_TONE_L ; Note A Period L ; 4
|
|
||||||
bcc no_scale_a ; 2/3
|
|
||||||
|
|
||||||
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
; conversion costs 100 cycles!
|
; conversion costs 100 cycles!
|
||||||
|
|
||||||
; first multiply by 8
|
; first multiply by 8
|
||||||
asl ; 2
|
asl AY_REGISTERS+0 ; 5
|
||||||
rol AY_REGISTERS+1 ; 5
|
rol AY_REGISTERS+1 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+0 ; 5
|
||||||
rol AY_REGISTERS+1 ; 5
|
rol AY_REGISTERS+1 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+0 ; 5
|
||||||
rol AY_REGISTERS+1 ; 5
|
rol AY_REGISTERS+1 ; 5
|
||||||
|
|
||||||
; add in original to get 9
|
; add in original to get 9
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc note_a+NOTE_TONE_L ; 4
|
lda note_a+NOTE_TONE_L ; 4
|
||||||
|
adc AY_REGISTERS+0 ; 3
|
||||||
sta AY_REGISTERS+0 ; 3
|
sta AY_REGISTERS+0 ; 3
|
||||||
lda note_a+NOTE_TONE_H ; 4
|
lda note_a+NOTE_TONE_H ; 4
|
||||||
adc AY_REGISTERS+1 ; 3
|
adc AY_REGISTERS+1 ; 3
|
||||||
|
sta AY_REGISTERS+1 ; 3
|
||||||
|
|
||||||
; divide by 16 to get proper value
|
; divide by 16 to get proper value
|
||||||
ror ; 2
|
ror AY_REGISTERS+1 ; 5
|
||||||
ror AY_REGISTERS+0 ; 5
|
ror AY_REGISTERS+0 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+1 ; 5
|
||||||
ror AY_REGISTERS+0 ; 5
|
ror AY_REGISTERS+0 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+1 ; 5
|
||||||
ror AY_REGISTERS+0 ; 5
|
ror AY_REGISTERS+0 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+1 ; 5
|
||||||
ror AY_REGISTERS+0 ; 5
|
ror AY_REGISTERS+0 ; 5
|
||||||
|
lda AY_REGISTERS+1 ; 3
|
||||||
and #$0f ; 2
|
and #$0f ; 2
|
||||||
sta AY_REGISTERS+1 ; 3
|
sta AY_REGISTERS+1 ; 3
|
||||||
|
|
||||||
no_scale_a:
|
no_scale_a:
|
||||||
|
|
||||||
lda convert_177 ; 4
|
lda note_b+NOTE_TONE_L ; Note B Period L ; 4
|
||||||
cmp #1 ; 2
|
sta AY_REGISTERS+2 ; into R2 ; 3
|
||||||
|
|
||||||
lda note_b+NOTE_TONE_H ; Note B Period H ; 4
|
lda note_b+NOTE_TONE_H ; Note B Period H ; 4
|
||||||
sta AY_REGISTERS+3 ; into R3 ; 3
|
sta AY_REGISTERS+3 ; into R3 ; 3
|
||||||
lda note_b+NOTE_TONE_L ; Note B Period L ; 4
|
|
||||||
bcc no_scale_b ; 2/3
|
lda convert_177 ; 4
|
||||||
|
beq no_scale_b ; 2/3
|
||||||
|
|
||||||
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
; first multiply by 8
|
; first multiply by 8
|
||||||
asl ; 2
|
asl AY_REGISTERS+2 ; 5
|
||||||
rol AY_REGISTERS+3 ; 5
|
rol AY_REGISTERS+3 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+2 ; 5
|
||||||
rol AY_REGISTERS+3 ; 5
|
rol AY_REGISTERS+3 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+2 ; 5
|
||||||
rol AY_REGISTERS+3 ; 5
|
rol AY_REGISTERS+3 ; 5
|
||||||
|
|
||||||
; add in original to get 9
|
; add in original to get 9
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc note_b+NOTE_TONE_L ; 4
|
lda note_b+NOTE_TONE_L ; 4
|
||||||
|
adc AY_REGISTERS+2 ; 3
|
||||||
sta AY_REGISTERS+2 ; 3
|
sta AY_REGISTERS+2 ; 3
|
||||||
lda note_b+NOTE_TONE_H ; 4
|
lda note_b+NOTE_TONE_H ; 4
|
||||||
adc AY_REGISTERS+3 ; 3
|
adc AY_REGISTERS+3 ; 3
|
||||||
|
sta AY_REGISTERS+3 ; 3
|
||||||
|
|
||||||
; divide by 16 to get proper value
|
; divide by 16 to get proper value
|
||||||
ror ; 2
|
ror AY_REGISTERS+3 ; 5
|
||||||
ror AY_REGISTERS+2 ; 5
|
ror AY_REGISTERS+2 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+3 ; 5
|
||||||
ror AY_REGISTERS+2 ; 5
|
ror AY_REGISTERS+2 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+3 ; 5
|
||||||
ror AY_REGISTERS+2 ; 5
|
ror AY_REGISTERS+2 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+3 ; 5
|
||||||
ror AY_REGISTERS+2 ; 5
|
ror AY_REGISTERS+2 ; 5
|
||||||
|
lda AY_REGISTERS+3 ; 3
|
||||||
and #$0f ; 2
|
and #$0f ; 2
|
||||||
sta AY_REGISTERS+3 ; 3
|
sta AY_REGISTERS+3 ; 3
|
||||||
|
|
||||||
no_scale_b:
|
no_scale_b:
|
||||||
|
|
||||||
lda convert_177 ; 4
|
lda note_c+NOTE_TONE_L ; Note C Period L ; 4
|
||||||
cmp #1 ; 2
|
sta AY_REGISTERS+4 ; into R4 ; 3
|
||||||
|
|
||||||
lda note_c+NOTE_TONE_H ; Note C Period H ; 4
|
lda note_c+NOTE_TONE_H ; Note C Period H ; 4
|
||||||
sta AY_REGISTERS+5 ; into R5 ; 3
|
sta AY_REGISTERS+5 ; into R5 ; 3
|
||||||
lda note_c+NOTE_TONE_L ; Note C Period L ; 4
|
|
||||||
bcc no_scale_c ; 2/3
|
lda convert_177 ; 4
|
||||||
|
beq no_scale_c ; 2/3
|
||||||
|
|
||||||
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
; first multiply by 8
|
; first multiply by 8
|
||||||
asl ; 2
|
asl AY_REGISTERS+4 ; 5
|
||||||
rol AY_REGISTERS+5 ; 5
|
rol AY_REGISTERS+5 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+4 ; 5
|
||||||
rol AY_REGISTERS+5 ; 5
|
rol AY_REGISTERS+5 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+4 ; 5
|
||||||
rol AY_REGISTERS+5 ; 5
|
rol AY_REGISTERS+5 ; 5
|
||||||
|
|
||||||
; add in original to get 9
|
; add in original to get 9
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc note_c+NOTE_TONE_L ; 4
|
lda note_c+NOTE_TONE_L ; 4
|
||||||
|
adc AY_REGISTERS+4 ; 3
|
||||||
sta AY_REGISTERS+4 ; 3
|
sta AY_REGISTERS+4 ; 3
|
||||||
lda note_c+NOTE_TONE_H ; 4
|
lda note_c+NOTE_TONE_H ; 4
|
||||||
adc AY_REGISTERS+5 ; 3
|
adc AY_REGISTERS+5 ; 3
|
||||||
|
sta AY_REGISTERS+5 ; 3
|
||||||
|
|
||||||
; divide by 16 to get proper value
|
; divide by 16 to get proper value
|
||||||
ror ; 2
|
ror AY_REGISTERS+5 ; 5
|
||||||
ror AY_REGISTERS+4 ; 5
|
ror AY_REGISTERS+4 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+5 ; 5
|
||||||
ror AY_REGISTERS+4 ; 5
|
ror AY_REGISTERS+4 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+5 ; 5
|
||||||
ror AY_REGISTERS+4 ; 5
|
ror AY_REGISTERS+4 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+5 ; 5
|
||||||
ror AY_REGISTERS+4 ; 5
|
ror AY_REGISTERS+4 ; 5
|
||||||
|
lda AY_REGISTERS+5 ; 3
|
||||||
and #$0f ; 2
|
and #$0f ; 2
|
||||||
sta AY_REGISTERS+5 ; 3
|
sta AY_REGISTERS+5 ; 3
|
||||||
|
|
||||||
@ -1943,6 +1981,7 @@ no_scale_c:
|
|||||||
adc pt3_noise_add ; 4
|
adc pt3_noise_add ; 4
|
||||||
and #$1f ; 2
|
and #$1f ; 2
|
||||||
sta AY_REGISTERS+6 ; 3
|
sta AY_REGISTERS+6 ; 3
|
||||||
|
sta temp_word_l ; 4
|
||||||
|
|
||||||
lda convert_177 ; 3
|
lda convert_177 ; 3
|
||||||
beq no_scale_n ; 2/3
|
beq no_scale_n ; 2/3
|
||||||
@ -1950,20 +1989,21 @@ no_scale_c:
|
|||||||
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
; first multiply by 8
|
; first multiply by 8
|
||||||
lda AY_REGISTERS+6 ; 3
|
asl AY_REGISTERS+6 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+6 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+6 ; 5
|
||||||
asl ; 2
|
|
||||||
|
|
||||||
; add in original to get 9
|
; add in original to get 9
|
||||||
clc ; 2
|
clc ; 2
|
||||||
adc temp_word_l ; 4
|
lda temp_word_l ; 4
|
||||||
|
adc AY_REGISTERS+6 ; 3
|
||||||
|
|
||||||
; divide by 16 to get proper value
|
; divide by 16 to get proper value
|
||||||
ror ; 2
|
ror AY_REGISTERS+6 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+6 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+6 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+6 ; 5
|
||||||
|
lda AY_REGISTERS+6 ; 3
|
||||||
and #$1f ; 2
|
and #$1f ; 2
|
||||||
sta AY_REGISTERS+6 ; 3
|
sta AY_REGISTERS+6 ; 3
|
||||||
|
|
||||||
@ -1999,6 +2039,7 @@ no_scale_n:
|
|||||||
clc ; 2
|
clc ; 2
|
||||||
lda pt3_envelope_slide_l ; 4
|
lda pt3_envelope_slide_l ; 4
|
||||||
adc temp_word_l ; 4
|
adc temp_word_l ; 4
|
||||||
|
sta temp_word_l ; 4
|
||||||
sta AY_REGISTERS+11 ; 3
|
sta AY_REGISTERS+11 ; 3
|
||||||
lda temp_word_h ; 4
|
lda temp_word_h ; 4
|
||||||
adc pt3_envelope_slide_h ; 4
|
adc pt3_envelope_slide_h ; 4
|
||||||
@ -2011,30 +2052,32 @@ no_scale_n:
|
|||||||
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
; Convert from 1.77MHz to 1MHz by multiplying by 9/16
|
||||||
|
|
||||||
; first multiply by 8
|
; first multiply by 8
|
||||||
lda AY_REGISTERS+11 ; 3
|
asl AY_REGISTERS+11 ; 5
|
||||||
asl ; 2
|
|
||||||
rol AY_REGISTERS+12 ; 5
|
rol AY_REGISTERS+12 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+11 ; 5
|
||||||
rol AY_REGISTERS+12 ; 5
|
rol AY_REGISTERS+12 ; 5
|
||||||
asl ; 2
|
asl AY_REGISTERS+11 ; 5
|
||||||
rol AY_REGISTERS+12 ; 5
|
rol AY_REGISTERS+12 ; 5
|
||||||
|
|
||||||
; add in original to get 9
|
; add in original to get 9
|
||||||
clc ; 2
|
clc ; 2
|
||||||
|
lda temp_word_l ; 4
|
||||||
adc AY_REGISTERS+11 ; 3
|
adc AY_REGISTERS+11 ; 3
|
||||||
sta AY_REGISTERS+11 ; 3
|
sta AY_REGISTERS+11 ; 3
|
||||||
lda temp_word_h ; 4
|
lda temp_word_h ; 4
|
||||||
adc AY_REGISTERS+12 ; 3
|
adc AY_REGISTERS+12 ; 3
|
||||||
|
sta AY_REGISTERS+12 ; 3
|
||||||
|
|
||||||
; divide by 16 to get proper value
|
; divide by 16 to get proper value
|
||||||
ror ; 2
|
ror AY_REGISTERS+12 ; 5
|
||||||
ror AY_REGISTERS+11 ; 5
|
ror AY_REGISTERS+11 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+12 ; 5
|
||||||
ror AY_REGISTERS+11 ; 5
|
ror AY_REGISTERS+11 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+12 ; 5
|
||||||
ror AY_REGISTERS+11 ; 5
|
ror AY_REGISTERS+11 ; 5
|
||||||
ror ; 2
|
ror AY_REGISTERS+12 ; 5
|
||||||
ror AY_REGISTERS+11 ; 5
|
ror AY_REGISTERS+11 ; 5
|
||||||
|
lda AY_REGISTERS+12 ; 3
|
||||||
and #$0f ; 2
|
and #$0f ; 2
|
||||||
sta AY_REGISTERS+12 ; 3
|
sta AY_REGISTERS+12 ; 3
|
||||||
|
|
||||||
@ -2045,13 +2088,15 @@ no_scale_e:
|
|||||||
|
|
||||||
lda pt3_envelope_type ; 4
|
lda pt3_envelope_type ; 4
|
||||||
cmp pt3_envelope_type_old ; 4
|
cmp pt3_envelope_type_old ; 4
|
||||||
sta pt3_envelope_type_old ; copy old to new ; 4
|
|
||||||
bne envelope_diff ; 2/3
|
bne envelope_diff ; 2/3
|
||||||
envelope_same:
|
envelope_same:
|
||||||
lda #$ff ; if same, store $ff ; 2
|
lda #$ff ; if same, store $ff ; 2
|
||||||
envelope_diff:
|
envelope_diff:
|
||||||
sta AY_REGISTERS+13 ; 3
|
sta AY_REGISTERS+13 ; 3
|
||||||
|
|
||||||
|
lda pt3_envelope_type ; 4
|
||||||
|
sta pt3_envelope_type_old ; copy old to new ; 4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
@ -2273,19 +2318,34 @@ vol_outer:
|
|||||||
pha ; save HL
|
pha ; save HL
|
||||||
|
|
||||||
clc ; add HL,DE
|
clc ; add HL,DE
|
||||||
|
lda z80_l
|
||||||
adc z80_e
|
adc z80_e
|
||||||
sta z80_e
|
sta z80_l
|
||||||
lda z80_h
|
lda z80_h
|
||||||
adc z80_d
|
adc z80_d
|
||||||
sta z80_d ; carry is important
|
sta z80_h ; carry is important
|
||||||
|
|
||||||
|
lda z80_h ; ex de,hl ; swap
|
||||||
|
pha
|
||||||
|
lda z80_l
|
||||||
|
pha
|
||||||
|
lda z80_d
|
||||||
|
sta z80_h
|
||||||
|
lda z80_e
|
||||||
|
sta z80_l
|
||||||
|
pla
|
||||||
|
sta z80_e
|
||||||
|
pla
|
||||||
|
sta z80_d
|
||||||
|
|
||||||
; sbc hl,hl
|
; sbc hl,hl
|
||||||
lda #$ff
|
|
||||||
bcs vol_ffs
|
bcs vol_ffs
|
||||||
vol_zeros:
|
vol_zeros:
|
||||||
lda #0
|
lda #0
|
||||||
|
beq vol_write
|
||||||
|
|
||||||
vol_ffs:
|
vol_ffs:
|
||||||
|
lda #$ff
|
||||||
vol_write:
|
vol_write:
|
||||||
sta z80_h
|
sta z80_h
|
||||||
sta z80_l
|
sta z80_l
|
||||||
|
Loading…
Reference in New Issue
Block a user