mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-04 03:29:29 +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
|
all: rotate.dsk
|
||||||
|
|
||||||
rotate.dsk: HELLO ROTATE.BAS
|
rotate.dsk: HELLO ROTATE.BAS ROTATE2.BAS ROTATE
|
||||||
cp $(EMPTY_DISK) rotate.dsk
|
cp $(EMPTY_DISK) rotate.dsk
|
||||||
$(DOS33) -y rotate.dsk SAVE A HELLO
|
$(DOS33) -y rotate.dsk SAVE A HELLO
|
||||||
$(DOS33) -y rotate.dsk SAVE A ROTATE.BAS
|
$(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
|
HELLO: hello.bas
|
||||||
$(TOKENIZE) < hello.bas > HELLO
|
$(TOKENIZE) < hello.bas > HELLO
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
ROTATE.BAS: rotate.bas
|
ROTATE.BAS: rotate.bas
|
||||||
$(TOKENIZE) < 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:
|
clean:
|
||||||
rm -f *~ *.o *.lst HELLO ROTATE.BAS
|
rm -f *~ *.o *.lst HELLO ROTATE.BAS ROTATE2.BAS ROTATE
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,17 @@
|
||||||
5 GR
|
5 GR
|
||||||
10 FOR Y=5 TO 43:COLOR=Y:HLIN5,35ATY:NEXT
|
10 FOR Y=5 TO 43:COLOR=Y:HLIN5,35ATY:NEXT
|
||||||
15 INPUT A$
|
15 INPUT R
|
||||||
20 A=(45*3.14)/180:T=TAN(A/2):S=SIN(A)
|
20 A=(R*3.14)/180:T=TAN(A/2):S=SIN(A)
|
||||||
30 FOR Y=0 TO 47
|
30 GOSUB 1000
|
||||||
40 O=-(Y-24)*T
|
130 FOR X=0 TO 39:O=(X-20)*S:IF O<0 GOTO 160
|
||||||
50 FOR X=0 TO 39
|
150 FOR Y=0 TO 47:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||||
55 C=0
|
155 GOTO 170
|
||||||
60 IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
160 FOR Y=47 TO 0 STEP -1:C=0:IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
||||||
70 COLOR=C:PLOT X,Y
|
170 COLOR=C:PLOT X,Y:NEXT Y,X
|
||||||
80 NEXT X,Y
|
200 GOSUB 1000
|
||||||
130 FOR X=0 TO 39
|
300 END
|
||||||
140 O=(X-20)*S
|
1000 FOR Y=0 TO 47:O=-(Y-24)*T:IF O<0 GOTO 1030
|
||||||
150 FOR Y=0 TO 47
|
1010 FOR X=0 TO 39:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||||
155 C=0
|
1020 GOTO 1040
|
||||||
160 IF ((Y+O)>0) AND ((Y+O)<47) THEN C=SCRN(X,Y+O)
|
1030 FOR X=39 TO 0 STEP -1:C=0:IF ((X+O)>0) AND ((X+O)<39) THEN C=SCRN(X+O,Y)
|
||||||
170 COLOR=C:PLOT X,Y
|
1040 COLOR=C:PLOT X,Y:NEXT X,Y:RETURN
|
||||||
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
|
|
||||||
|
|
||||||
|
|
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…
Reference in New Issue
Block a user