tfv: update flying code some more

This commit is contained in:
Vince Weaver 2017-08-25 01:34:14 -04:00
parent 373a289ca3
commit 65b72664ac
3 changed files with 156 additions and 46 deletions

View File

@ -240,10 +240,10 @@ void draw_background_mode7(void) {
fixed_mul(&space_z,&BETA,&factor);
printf("spacez=%lf beta=%lf factor=%lf\n",
fixed_to_double(&space_z),
fixed_to_double(&BETA),
fixed_to_double(&factor));
// printf("spacez=%lf beta=%lf factor=%lf\n",
// fixed_to_double(&space_z),
// fixed_to_double(&BETA),
// fixed_to_double(&factor));
for (screen_y = 8; screen_y < LOWRES_H; screen_y+=2) {

View File

@ -2,6 +2,8 @@ SHIPY EQU $E4
; FIXME, sort out available ZP page space
TURNING EQU $40
SCREEN_X EQU $41
SCREEN_Y EQU $42
SHIPX EQU 15
@ -122,18 +124,16 @@ draw_background_mode7:
; Draw Sky
lda #COLOR_BOTH_MEDIUMBLUE
lda #COLOR_BOTH_MEDIUMBLUE ; MEDIUMBLUE color
sta COLOR
lda #0
sky_loop:
ldy #40
sky_loop: ; draw line across screen
ldy #40 ; from y=0 to y=6
sty V2
ldy #0
pha
jsr hlin_double
jsr hlin_double ; hlin y,V2 at A
pla
clc
adc #2
@ -142,43 +142,146 @@ sky_loop:
; Draw Horizon
lda #COLOR_BOTH_GREY
lda #COLOR_BOTH_GREY ; Horizon is Grey
sta COLOR
lda #6
lda #6 ; draw single line at 6/7
ldy #40
sty V2
jsr hlin_double
sty V2 ; hlin Y,V2 at A
ldy #0
jsr hlin_double ; hlin 0,40 at 6
; Temporarily Draw Ocean Everywhere
lda #COLOR_BOTH_DARKBLUE
sta COLOR
lda #8
sta SCREEN_Y
lda #6
sea_loop:
ldy #40
sty V2
screeny_loop:
ldy #0
pha
jsr hlin_setup
jsr hlin_double
pla
lda #0
sta SCREEN_X
screenx_loop:
jsr lookup_map ; get color in A
ldy #0
sta (GBASL),Y
inc GBASL
inc SCREEN_X
lda SCREEN_X
cmp #40 ; LOWRES width
bne screenx_loop
lda SCREEN_Y
clc
adc #2
cmp #40
bne sea_loop
sta SCREEN_Y
cmp #40 ; LOWRES height
bne screeny_loop
rts
;====================
; lookup_map
;====================
; finds value in space_x.i,space_y.i
; returns color in A
lookup_map:
lda #COLOR_BOTH_DARKBLUE ; the color of the sea
rts
flying_map:
.byte 2,15,15,15, 15,15,15, 2
.byte 13,12,12, 8, 4, 4, 0,13
.byte 13,12,12,12, 8, 4, 4,13
.byte 13,12,12, 8, 4, 4, 4,13
.byte 13,12, 9, 9, 8, 4, 4,13
.byte 13,12, 9, 8, 4, 4, 4,13
.byte 13,12, 9, 9, 1, 4, 4,13
.byte 2,13,13,13, 13,13,13, 2
.byte $22,$ff,$ff,$ff, $ff,$ff,$ff,$22
.byte $dd,$cc,$cc,$88, $44,$44,$00,$dd
.byte $dd,$cc,$cc,$cc, $88,$44,$44,$dd
.byte $dd,$cc,$cc,$88, $44,$44,$44,$dd
.byte $dd,$cc,$99,$99, $88,$44,$44,$dd
.byte $dd,$cc,$99,$88, $44,$44,$44,$dd
.byte $dd,$cc,$99,$99, $11,$44,$44,$dd
.byte $22,$dd,$dd,$dd, $dd,$dd,$dd,$22
; http://www.llx.com/~nparker/a2/mult.html
; MULTIPLY NUM1H:NUM1L * NUM2H:NUM2L
NUM1: .byte 0,0
NUM2: .byte 0,0
RESULT: .byte 0,0,0,0
multiply:
lda #0 ; Initialize RESULT to 0
sta RESULT+2
ldx #16 ; There are 16 bits in NUM2
L1:
lsr NUM2+1 ; Get low bit of NUM2
ror NUM2
bcc L2 ; 0 or 1?
tay ; If 1, add NUM1 (hi byte of RESULT is in A)
clc
lda NUM1
adc RESULT+2
sta RESULT+2
tya
adc NUM1+1
L2:
ror A ; "Stairstep" shift
ror RESULT+2
ror RESULT+1
ror RESULT
dex
bne L1
sta RESULT+3
rts
; 8.8 fixed point
fixed_sin:
.byte $00,$00 ; 0.000000=00.00
.byte $00,$61 ; 0.382683=00.61
.byte $00,$b5 ; 0.707107=00.b5
.byte $00,$ec ; 0.923880=00.ec
.byte $01,$00 ; 1.000000=01.00
.byte $00,$ec ; 0.923880=00.ec
.byte $00,$b5 ; 0.707107=00.b5
.byte $00,$61 ; 0.382683=00.61
.byte $00,$00 ; 0.000000=00.00
.byte $ff,$9f ; -0.382683=ff.9f
.byte $ff,$4b ; -0.707107=ff.4b
.byte $ff,$14 ; -0.923880=ff.14
.byte $ff,$00 ; -1.000000=ff.00
.byte $ff,$14 ; -0.923880=ff.14
.byte $ff,$4b ; -0.707107=ff.4b
.byte $ff,$9f ; -0.382683=ff.9f
fixed_sin_scale:
.byte $00,$00
.byte $00,$0c
.byte $00,$16
.byte $00,$1d
.byte $00,$20
.byte $00,$1d
.byte $00,$16
.byte $00,$0c
.byte $00,$00
.byte $ff,$f4
.byte $ff,$ea
.byte $ff,$e3
.byte $ff,$e0
.byte $ff,$e3
.byte $ff,$ea
.byte $ff,$f4
horizontal_lookup:
.byte $0C,$0A,$09,$08,$07,$06,$05,$05,$04,$04,$04,$04,$03,$03,$03,$03
.byte $26,$20,$1B,$18,$15,$13,$11,$10,$0E,$0D,$0C,$0C,$0B,$0A,$0A,$09
.byte $40,$35,$2D,$28,$23,$20,$1D,$1A,$18,$16,$15,$14,$12,$11,$10,$10
.byte $59,$4A,$40,$38,$31,$2C,$28,$25,$22,$20,$1D,$1C,$1A,$18,$17,$16
.byte $73,$60,$52,$48,$40,$39,$34,$30,$2C,$29,$26,$24,$21,$20,$1E,$1C
.byte $8C,$75,$64,$58,$4E,$46,$40,$3A,$36,$32,$2E,$2C,$29,$27,$25,$23
.byte $A6,$8A,$76,$68,$5C,$53,$4B,$45,$40,$3B,$37,$34,$30,$2E,$2B,$29

View File

@ -477,19 +477,12 @@ vlin_too_slow:
rts ; return
;================================
; hlin_double:
; hlin_setup
;================================
; VLIN Y, V2 AT A
; Y, X, A trashed
hlin_double:
;int hlin_double(int page, int x1, int x2, int at) {
; put address in GBASL/GBASH
; Ycoord in A, X coord inY
hlin_setup:
sty TEMPY
tay ; y=A
lda gr_offsets,Y ; lookup low-res memory address
@ -501,6 +494,20 @@ hlin_double:
lda gr_offsets,Y
adc DRAW_PAGE ; add in draw page offset
sta GBASH
rts
;================================
; hlin_double:
;================================
; HLIN Y, V2 AT A
; Y, X, A trashed
hlin_double:
;int hlin_double(int page, int x1, int x2, int at) {
jsr hlin_setup
sec
lda V2
@ -527,7 +534,7 @@ hlin_loop:
inc GBASL
dex
bne hlin_loop
return:
rts