mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-03-03 12:31:32 +00:00
rotate: more work on shear rotate
This commit is contained in:
parent
904a7df6cc
commit
18c512d502
@ -8,22 +8,39 @@ TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
|
||||
|
||||
all: rotate.dsk
|
||||
|
||||
rotate.dsk: HELLO ROTATE.BAS
|
||||
rotate.dsk: HELLO ROTATE.BAS ROTATE2.BAS ROTATE
|
||||
cp $(EMPTY_DISK) rotate.dsk
|
||||
$(DOS33) -y rotate.dsk SAVE A HELLO
|
||||
$(DOS33) -y rotate.dsk SAVE A ROTATE.BAS
|
||||
$(DOS33) -y rotate.dsk SAVE A ROTATE2.BAS
|
||||
$(DOS33) -y rotate.dsk BSAVE -a 0xc00 ROTATE
|
||||
|
||||
###
|
||||
|
||||
HELLO: hello.bas
|
||||
$(TOKENIZE) < hello.bas > HELLO
|
||||
|
||||
###
|
||||
|
||||
ROTATE.BAS: rotate.bas
|
||||
$(TOKENIZE) < rotate.bas > ROTATE.BAS
|
||||
|
||||
###
|
||||
|
||||
ROTATE2.BAS: rotate2.bas
|
||||
$(TOKENIZE) < rotate2.bas > ROTATE2.BAS
|
||||
|
||||
####
|
||||
|
||||
ROTATE: rotate.o
|
||||
ld65 -o ROTATE rotate.o -C $(LINKER_DIR)/apple2_c00.inc
|
||||
|
||||
rotate.o: rotate.s
|
||||
ca65 -o rotate.o rotate.s -l rotate.lst
|
||||
|
||||
|
||||
####
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst HELLO ROTATE.BAS
|
||||
rm -f *~ *.o *.lst HELLO ROTATE.BAS ROTATE2.BAS ROTATE
|
||||
|
||||
|
@ -1,26 +1,17 @@
|
||||
5 GR
|
||||
10 FOR Y=5 TO 43:COLOR=Y:HLIN5,35ATY:NEXT
|
||||
15 INPUT A$
|
||||
20 A=(45*3.14)/180:T=TAN(A/2):S=SIN(A)
|
||||
30 FOR Y=0 TO 47
|
||||
40 O=-(Y-24)*T
|
||||
50 FOR X=0 TO 39
|
||||
55 C=0
|
||||
60 IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
70 COLOR=C:PLOT X,Y
|
||||
80 NEXT X,Y
|
||||
130 FOR X=0 TO 39
|
||||
140 O=(X-20)*S
|
||||
150 FOR Y=0 TO 47
|
||||
155 C=0
|
||||
160 IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
170 COLOR=C:PLOT X,Y
|
||||
180 NEXT Y,X
|
||||
230 FOR Y=0 TO 47
|
||||
240 O=-(Y-24)*T
|
||||
250 FOR X=0 TO 39
|
||||
255 C=0
|
||||
260 IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
270 COLOR=C:PLOT X,Y
|
||||
280 NEXT X,Y
|
||||
|
||||
15 INPUT R
|
||||
20 A=(R*3.14)/180:T=TAN(A/2):S=SIN(A)
|
||||
30 GOSUB 1000
|
||||
130 FOR X=0 TO 39:O=(X-20)*S:IF O<0 GOTO 160
|
||||
150 FOR Y=0 TO 47:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
155 GOTO 170
|
||||
160 FOR Y=47 TO 0 STEP -1:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
170 COLOR=C:PLOT X,Y:NEXT Y,X
|
||||
200 GOSUB 1000
|
||||
300 END
|
||||
1000 FOR Y=0 TO 47:O=-(Y-24)*T:IF O<0 GOTO 1030
|
||||
1010 FOR X=0 TO 39:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1020 GOTO 1040
|
||||
1030 FOR X=39 TO 0 STEP -1:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1040 COLOR=C:PLOT X,Y:NEXT X,Y:RETURN
|
||||
|
190
graphics/gr/rotate/rotate.s
Normal file
190
graphics/gr/rotate/rotate.s
Normal file
@ -0,0 +1,190 @@
|
||||
; attempt at rotate-by-shear
|
||||
|
||||
; zero-page
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
|
||||
; soft-switches
|
||||
FULLGR = $C052
|
||||
|
||||
; ROM routines
|
||||
PLOT = $F800 ;; PLOT AT Y,A
|
||||
SETGR = $FB40
|
||||
|
||||
|
||||
rotate:
|
||||
jsr SETGR
|
||||
bit FULLGR
|
||||
|
||||
ldx #8
|
||||
box_loop:
|
||||
ldy #12
|
||||
txa
|
||||
jsr PLOT
|
||||
|
||||
lda #$ff
|
||||
draw_line:
|
||||
sta (GBASL),Y
|
||||
iny
|
||||
cpy #28
|
||||
bne draw_line
|
||||
|
||||
inx
|
||||
inx
|
||||
cpx #40
|
||||
bne box_loop
|
||||
|
||||
|
||||
shear_right:
|
||||
|
||||
ldx #0
|
||||
shear_right_loop:
|
||||
ldy #0 ; set GBASL/GBASL
|
||||
txa
|
||||
jsr PLOT
|
||||
|
||||
lda GBASL
|
||||
sta rlin_smc+1
|
||||
lda GBASH
|
||||
sta rlin_smc+2
|
||||
|
||||
|
||||
clc
|
||||
lda x_shift,X
|
||||
adc GBASL
|
||||
sta rlout_smc+1
|
||||
lda #0
|
||||
adc GBASH
|
||||
sta rlout_smc+2
|
||||
|
||||
ldy #39
|
||||
rlinner_loop:
|
||||
|
||||
rlin_smc:
|
||||
lda $400,Y
|
||||
rlout_smc:
|
||||
sta $400,Y
|
||||
dey
|
||||
bpl rlinner_loop
|
||||
|
||||
inx
|
||||
inx
|
||||
cpx #48
|
||||
bne shear_right_loop
|
||||
|
||||
|
||||
|
||||
done:
|
||||
jmp done
|
||||
|
||||
|
||||
.if 0
|
||||
5 GR
|
||||
10 FOR Y=5 TO 43:COLOR=Y:HLIN5,35ATY:NEXT
|
||||
15 INPUT R
|
||||
20 A=(R*3.14)/180:T=TAN(A/2):S=SIN(A)
|
||||
30 GOSUB 1000
|
||||
130 FOR X=0 TO 39:O=(X-20)*S:IF O<0 GOTO 160
|
||||
150 FOR Y=0 TO 47:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
155 GOTO 170
|
||||
160 FOR Y=47 TO 0 STEP -1:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
170 COLOR=C:PLOT X,Y:NEXT Y,X
|
||||
200 GOSUB 1000
|
||||
300 END
|
||||
1000 FOR Y=0 TO 47:O=-(Y-24)*T:IF O<0 GOTO 1030
|
||||
1010 FOR X=0 TO 39:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1020 GOTO 1040
|
||||
1030 FOR X=39 TO 0 STEP -1:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1040 COLOR=C:PLOT X,Y:NEXT X,Y:RETURN
|
||||
.endif
|
||||
|
||||
x_shift:
|
||||
.byte $F9 ; 0 -7.653669
|
||||
.byte $F9 ; 1 -7.270985
|
||||
.byte $FA ; 2 -6.888302
|
||||
.byte $FA ; 3 -6.505618
|
||||
.byte $FA ; 4 -6.122935
|
||||
.byte $FB ; 5 -5.740251
|
||||
.byte $FB ; 6 -5.357568
|
||||
.byte $FC ; 7 -4.974885
|
||||
.byte $FC ; 8 -4.592201
|
||||
.byte $FC ; 9 -4.209518
|
||||
.byte $FD ; 10 -3.826834
|
||||
.byte $FD ; 11 -3.444151
|
||||
.byte $FD ; 12 -3.061467
|
||||
.byte $FE ; 13 -2.678784
|
||||
.byte $FE ; 14 -2.296101
|
||||
.byte $FF ; 15 -1.913417
|
||||
.byte $FF ; 16 -1.530734
|
||||
.byte $FF ; 17 -1.148050
|
||||
.byte $00 ; 18 -0.765367
|
||||
.byte $00 ; 19 -0.382683
|
||||
.byte $00 ; 20 0.000000
|
||||
.byte $00 ; 21 0.382683
|
||||
.byte $00 ; 22 0.765367
|
||||
.byte $01 ; 23 1.148050
|
||||
.byte $01 ; 24 1.530734
|
||||
.byte $01 ; 25 1.913417
|
||||
.byte $02 ; 26 2.296101
|
||||
.byte $02 ; 27 2.678784
|
||||
.byte $03 ; 28 3.061467
|
||||
.byte $03 ; 29 3.444151
|
||||
.byte $03 ; 30 3.826834
|
||||
.byte $04 ; 31 4.209518
|
||||
.byte $04 ; 32 4.592201
|
||||
.byte $04 ; 33 4.974885
|
||||
.byte $05 ; 34 5.357568
|
||||
.byte $05 ; 35 5.740251
|
||||
.byte $06 ; 36 6.122935
|
||||
.byte $06 ; 37 6.505618
|
||||
.byte $06 ; 38 6.888302
|
||||
.byte $07 ; 39 7.270985
|
||||
y_shift:
|
||||
.byte $04 ; 0 4.773897
|
||||
.byte $04 ; 1 4.574984
|
||||
.byte $04 ; 2 4.376072
|
||||
.byte $04 ; 3 4.177160
|
||||
.byte $03 ; 4 3.978247
|
||||
.byte $03 ; 5 3.779335
|
||||
.byte $03 ; 6 3.580423
|
||||
.byte $03 ; 7 3.381510
|
||||
.byte $03 ; 8 3.182598
|
||||
.byte $02 ; 9 2.983686
|
||||
.byte $02 ; 10 2.784773
|
||||
.byte $02 ; 11 2.585861
|
||||
.byte $02 ; 12 2.386948
|
||||
.byte $02 ; 13 2.188036
|
||||
.byte $01 ; 14 1.989124
|
||||
.byte $01 ; 15 1.790211
|
||||
.byte $01 ; 16 1.591299
|
||||
.byte $01 ; 17 1.392387
|
||||
.byte $01 ; 18 1.193474
|
||||
.byte $00 ; 19 0.994562
|
||||
.byte $00 ; 20 0.795649
|
||||
.byte $00 ; 21 0.596737
|
||||
.byte $00 ; 22 0.397825
|
||||
.byte $00 ; 23 0.198912
|
||||
.byte $00 ; 24 0.000000
|
||||
.byte $00 ; 25 -0.198912
|
||||
.byte $00 ; 26 -0.397825
|
||||
.byte $00 ; 27 -0.596737
|
||||
.byte $00 ; 28 -0.795649
|
||||
.byte $00 ; 29 -0.994562
|
||||
.byte $FF ; 30 -1.193474
|
||||
.byte $FF ; 31 -1.392387
|
||||
.byte $FF ; 32 -1.591299
|
||||
.byte $FF ; 33 -1.790211
|
||||
.byte $FF ; 34 -1.989124
|
||||
.byte $FE ; 35 -2.188036
|
||||
.byte $FE ; 36 -2.386948
|
||||
.byte $FE ; 37 -2.585861
|
||||
.byte $FE ; 38 -2.784773
|
||||
.byte $FE ; 39 -2.983686
|
||||
.byte $FD ; 40 -3.182598
|
||||
.byte $FD ; 41 -3.381510
|
||||
.byte $FD ; 42 -3.580423
|
||||
.byte $FD ; 43 -3.779335
|
||||
.byte $FD ; 44 -3.978247
|
||||
.byte $FC ; 45 -4.177160
|
||||
.byte $FC ; 46 -4.376072
|
||||
.byte $FC ; 47 -4.574984
|
17
graphics/gr/rotate/rotate2.bas
Normal file
17
graphics/gr/rotate/rotate2.bas
Normal file
@ -0,0 +1,17 @@
|
||||
5 GR
|
||||
10 FOR Y=0 TO 16:COLOR=Y+1:HLIN12,28AT(Y*2)+4:HLIN12,28AT(Y*2)+5:NEXT
|
||||
15 INPUT R
|
||||
20 A=(R*3.14159265)/180:T=TAN(A/2):S=SIN(A)
|
||||
30 GOSUB 1000
|
||||
130 FOR X=0 TO 39:O=(X-20)*S:IF O<0 GOTO 160
|
||||
150 FOR Y=0 TO 47:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
155 GOTO 170
|
||||
160 FOR Y=47 TO 0 STEP -1:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||
170 COLOR=C:PLOT X,Y:NEXT Y,X
|
||||
200 GOSUB 1000
|
||||
300 END
|
||||
1000 FOR Y=0 TO 47:O=-(Y-24)*T:IF O<0 GOTO 1030
|
||||
1010 FOR X=0 TO 39:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1020 GOTO 1040
|
||||
1030 FOR X=39 TO 0 STEP -1:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||
1040 COLOR=C:PLOT X,Y:NEXT X,Y:RETURN
|
Loading…
x
Reference in New Issue
Block a user