;============================================================= ; hgr copy from page in A to current DRAW_PAGE but magnify 2x ;========================================================= ; SPRITE_X, SPRITE_Y = offset to load from hgr_copy_magnify: lda SPRITE_X sta hcm_smc1+1 clc adc #20 sta hcm_smc2+1 ldx #0 ; start at top magnify_outer_loop: txa pha ; store X on stack clc ; offset IN to our sprite adc SPRITE_Y tax lda hposn_low,X sta INL lda hposn_high,X clc adc #$40 ; hardcode at $60 sta INH pla ; get X off stack again pha asl ; multiply by 2 tax lda hposn_low,X sta OUTL lda hposn_high,X clc adc DRAW_PAGE ; adjust for draw page sta OUTH inx ; calculate (x*2)+1 lda hposn_low,X sta GBASL lda hposn_high,X clc adc DRAW_PAGE sta GBASH hcm_smc1: ldy #0 ; 2 magnify_inner_loop: lda (INL),Y ; 5 and #$f ; 2 tax ; 2 lda magnify_table_low,X ; 4 sta (OUTL),Y ; output at 2*X ; 6 sta (GBASL),Y ; output at (2*X)+1 ; 6 inc OUTL ; point to next xpos ; 5 inc GBASL ; " ; 5 lda (INL),Y ; 5 lsr ; 2 lsr ; 2 lsr ; 2 tax ; 2 lda magnify_table_high,X ; 4 sta (OUTL),Y ; 6 sta (GBASL),Y ; 6 iny ; 2 hcm_smc2: cpy #20 ; 2 bne magnify_inner_loop ; 2/3 pla ; get X off stack tax inx ; increment cpx #96 bne magnify_outer_loop rts ; XXXXABCD = XA BB CC DD magnify_table_low: .byte $00 ; 0000 => 000 0000 .byte $03 ; 0001 => 000 0011 .byte $0C ; 0010 => 000 1100 .byte $0F ; 0011 => 000 1111 .byte $30 ; 0100 => 011 0000 .byte $33 ; 0101 => 011 0011 .byte $3C ; 0110 => 011 1100 .byte $3F ; 0111 => 011 1111 .byte $40 ; 1000 => 100 0000 .byte $43 ; 1001 => 100 0011 .byte $4C ; 1010 => 100 1100 .byte $4F ; 1011 => 100 1111 .byte $70 ; 1100 => 111 0000 .byte $73 ; 1101 => 111 0011 .byte $7C ; 1110 => 111 1100 .byte $7F ; 1111 => 111 1111 ; XEFGABCD = XE EF FG GA magnify_table_high: .byte $00 ; 0000 => 000 0000 .byte $01 ; 0001 => 000 0001 .byte $06 ; 0010 => 000 0110 .byte $07 ; 0011 => 000 0111 .byte $18 ; 0100 => 001 1000 .byte $19 ; 0101 => 001 1001 .byte $1E ; 0110 => 001 1110 .byte $1F ; 0111 => 001 1111 .byte $60 ; 1000 => 110 0000 .byte $61 ; 1001 => 110 0001 .byte $66 ; 1010 => 110 0110 .byte $67 ; 1011 => 110 0111 .byte $78 ; 1100 => 111 1000 .byte $79 ; 1101 => 111 1001 .byte $7E ; 1110 => 111 1110 .byte $7F ; 1111 => 111 1111