2021-05-09 04:53:32 +00:00
|
|
|
; Apple II self portrait using Boxes
|
|
|
|
|
|
|
|
;================================
|
|
|
|
; Clear screen and setup graphics
|
|
|
|
;================================
|
|
|
|
a2_inside:
|
|
|
|
|
|
|
|
jsr SETGR ; set lo-res 40x40 mode
|
|
|
|
bit PAGE0
|
|
|
|
bit LORES
|
|
|
|
bit FULLGR ; make it 40x48
|
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
|
|
|
|
;=============================
|
|
|
|
; init wires
|
|
|
|
|
|
|
|
jsr wires_create_lookup
|
|
|
|
|
|
|
|
;=============================
|
|
|
|
; draw the computer
|
|
|
|
|
2021-05-09 04:53:32 +00:00
|
|
|
draw_box_loop:
|
|
|
|
|
|
|
|
; get color/Y0
|
|
|
|
jsr load_byte
|
|
|
|
tax ; Y0 is in X
|
|
|
|
|
|
|
|
tya ; check for end
|
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
bmi done_computer
|
2021-05-09 04:53:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
jsr load_byte ; Y1
|
|
|
|
sta Y1
|
|
|
|
|
|
|
|
jsr load_byte ; X0
|
|
|
|
sta X0
|
|
|
|
|
|
|
|
tya
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
sta COLOR
|
|
|
|
|
|
|
|
|
|
|
|
jsr load_byte ; X1
|
|
|
|
sta H2
|
|
|
|
|
|
|
|
tya
|
|
|
|
and #$C0
|
|
|
|
ora COLOR
|
|
|
|
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
|
|
|
|
jsr SETCOL
|
|
|
|
|
|
|
|
|
|
|
|
inner_loop:
|
|
|
|
|
|
|
|
;; HLINE Y,H2 at A
|
|
|
|
;; X left alone, carry set on exit
|
|
|
|
;; H2 left alone
|
|
|
|
;; Y and A trashed
|
|
|
|
|
|
|
|
ldy X0
|
|
|
|
txa
|
|
|
|
jsr HLINE
|
|
|
|
|
|
|
|
cpx Y1
|
|
|
|
inx
|
|
|
|
bcc inner_loop
|
|
|
|
bcs draw_box_loop
|
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
done_computer:
|
2021-05-09 04:53:32 +00:00
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
;====================================
|
|
|
|
; draw the demo, sierpinski at first
|
|
|
|
;====================================
|
2021-05-09 04:53:32 +00:00
|
|
|
; screen is from (11,6) - (20,23)
|
|
|
|
; so size is 9,17?
|
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
|
|
|
|
lda #200
|
2021-05-09 04:53:32 +00:00
|
|
|
sta FRAME
|
|
|
|
|
|
|
|
|
|
|
|
; pause a bit at beginning
|
|
|
|
jsr WAIT
|
|
|
|
|
|
|
|
sier_loop:
|
|
|
|
|
|
|
|
lda #100 ; Wait a bit, we're too fast
|
|
|
|
jsr WAIT
|
|
|
|
|
|
|
|
inc FRAME ; increment frame
|
|
|
|
|
|
|
|
ldx #17 ; YY
|
|
|
|
|
|
|
|
sier_yloop:
|
|
|
|
|
|
|
|
lda #9 ; XX
|
|
|
|
sta XX
|
|
|
|
|
|
|
|
sier_xloop:
|
|
|
|
|
|
|
|
txa ; get YY
|
|
|
|
clc
|
|
|
|
adc FRAME ; and add in FRAME
|
|
|
|
|
|
|
|
and XX ; and it with XX
|
|
|
|
|
|
|
|
bne black
|
|
|
|
lda FRAME ; color is based on frame
|
|
|
|
lsr ; only update every 16 lines?
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
lsr
|
|
|
|
bne not_zero ; but no color 0 (would be all black)
|
|
|
|
lda #3 ; how about purple instead
|
|
|
|
|
|
|
|
not_zero:
|
|
|
|
|
|
|
|
.byte $2C ; bit trick
|
|
|
|
black:
|
|
|
|
lda #$00
|
|
|
|
|
|
|
|
jsr SETCOL ; set top/bottom nibble same color
|
|
|
|
|
|
|
|
lda XX ; offset XX to tiny screen
|
|
|
|
clc
|
|
|
|
adc #11
|
|
|
|
tay ; put into Y
|
|
|
|
|
|
|
|
txa ; offset YY to tiny screen
|
|
|
|
clc
|
|
|
|
adc #6 ; put into A
|
|
|
|
|
|
|
|
jsr PLOT ; PLOT AT Y,A
|
|
|
|
|
|
|
|
dec XX
|
|
|
|
bpl sier_xloop
|
|
|
|
|
|
|
|
dex
|
|
|
|
bpl sier_yloop
|
|
|
|
|
|
|
|
lda FRAME
|
|
|
|
bne sier_loop
|
2021-05-10 05:49:01 +00:00
|
|
|
; rts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;====================================
|
|
|
|
; draw the demo, wires
|
|
|
|
;====================================
|
|
|
|
; screen is from (11,6) - (20,23)
|
|
|
|
; so size is 9,17?
|
|
|
|
|
|
|
|
|
|
|
|
lda #200
|
|
|
|
sta FRAME
|
|
|
|
|
|
|
|
|
|
|
|
; pause a bit at beginning
|
|
|
|
jsr WAIT
|
|
|
|
|
|
|
|
a2_wire_loop:
|
|
|
|
|
|
|
|
jsr wires_cycle_colors
|
|
|
|
|
|
|
|
lda #100 ; Wait a bit, we're too fast
|
|
|
|
jsr WAIT
|
|
|
|
|
|
|
|
inc FRAME ; increment frame
|
|
|
|
|
|
|
|
ldx #17 ; YY
|
|
|
|
|
|
|
|
a2_wire_yloop:
|
|
|
|
|
|
|
|
lda #9 ; XX
|
|
|
|
sta XX
|
|
|
|
|
|
|
|
a2_wire_xloop:
|
|
|
|
|
|
|
|
txa
|
|
|
|
and #$f
|
|
|
|
|
|
|
|
asl
|
|
|
|
asl
|
|
|
|
asl
|
|
|
|
asl
|
|
|
|
ora XX
|
|
|
|
tay
|
|
|
|
|
|
|
|
lda wires_lookup,Y ; load from array ; 4
|
|
|
|
|
|
|
|
cmp #11
|
|
|
|
bcs acolor_notblue ; if < 11, blue
|
|
|
|
|
|
|
|
acolor_blue:
|
|
|
|
lda #$11 ; blue offset
|
|
|
|
|
|
|
|
acolor_notblue:
|
|
|
|
tay
|
|
|
|
lda wires_colorlookup-11,Y ; lookup color
|
|
|
|
|
|
|
|
acolor_notblack:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jsr SETCOL ; set top/bottom nibble same color
|
|
|
|
|
|
|
|
lda XX ; offset XX to tiny screen
|
|
|
|
clc
|
|
|
|
adc #11
|
|
|
|
tay ; put into Y
|
|
|
|
|
|
|
|
txa ; offset YY to tiny screen
|
|
|
|
clc
|
|
|
|
adc #6 ; put into A
|
|
|
|
|
|
|
|
jsr PLOT ; PLOT AT Y,A
|
|
|
|
|
|
|
|
dec XX
|
|
|
|
bpl a2_wire_xloop
|
|
|
|
|
|
|
|
dex
|
|
|
|
bpl a2_wire_yloop
|
|
|
|
|
|
|
|
lda FRAME
|
|
|
|
bne a2_wire_loop
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;=======================================
|
|
|
|
; copy to $c00
|
|
|
|
;=======================================
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
sta DRAW_PAGE
|
|
|
|
jsr gr_copy_from_current
|
|
|
|
|
|
|
|
lda #4
|
|
|
|
sta DISP_PAGE
|
|
|
|
|
|
|
|
;============================
|
|
|
|
; rotozoom
|
|
|
|
;============================
|
|
|
|
|
|
|
|
; do a (hopefully fast) roto-zoom
|
|
|
|
|
|
|
|
; jsr clear_screens
|
|
|
|
; jsr init_multiply_tables
|
|
|
|
|
|
|
|
jsr gr_copy_to_current
|
|
|
|
jsr page_flip
|
|
|
|
jsr gr_copy_to_current
|
|
|
|
|
|
|
|
;=================================
|
|
|
|
; main loop
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
sta ANGLE
|
|
|
|
sta SCALE_F
|
|
|
|
sta FRAME
|
|
|
|
|
|
|
|
lda #1
|
|
|
|
sta direction
|
|
|
|
lda #$10
|
|
|
|
sta scaleaddl
|
|
|
|
lda #$00
|
|
|
|
sta scaleaddh
|
|
|
|
|
|
|
|
lda #1
|
|
|
|
sta SCALE_I
|
|
|
|
|
|
|
|
rz_main_loop:
|
|
|
|
|
|
|
|
jsr rotozoom_c00
|
|
|
|
|
|
|
|
jsr page_flip
|
|
|
|
|
|
|
|
;wait_for_keypress:
|
|
|
|
; lda KEYPRESS
|
|
|
|
; bpl wait_for_keypress
|
|
|
|
; bit KEYRESET
|
|
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
lda FRAME
|
|
|
|
adc direction
|
|
|
|
sta FRAME
|
|
|
|
|
|
|
|
cmp #$f8
|
|
|
|
beq rback_at_zero
|
|
|
|
cmp #33
|
|
|
|
beq rat_far_end
|
|
|
|
bne rdone_reverse
|
|
|
|
|
|
|
|
rback_at_zero:
|
|
|
|
; inc which_image
|
|
|
|
; lda which_image
|
|
|
|
; cmp #3
|
|
|
|
; bne refresh_image
|
|
|
|
; lda #0
|
|
|
|
; sta which_image
|
|
|
|
;refresh_image:
|
|
|
|
; jsr load_background
|
|
|
|
|
|
|
|
rat_far_end:
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
; change bg color
|
|
|
|
; lda roto_color_even_smc+1
|
|
|
|
; clc
|
|
|
|
; adc #$01
|
|
|
|
; and #$0f
|
|
|
|
; sta roto_color_even_smc+1
|
|
|
|
|
|
|
|
; lda roto_color_odd_smc+1
|
|
|
|
; clc
|
|
|
|
; adc #$10
|
|
|
|
; and #$f0
|
|
|
|
; sta roto_color_odd_smc+1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; reverse direction
|
|
|
|
;; lda direction
|
|
|
|
; eor #$ff
|
|
|
|
; clc
|
|
|
|
; adc #1
|
|
|
|
; sta direction
|
|
|
|
|
|
|
|
; lda scaleaddl
|
|
|
|
; eor #$ff
|
|
|
|
; clc
|
|
|
|
; adc #1
|
|
|
|
; sta scaleaddl
|
|
|
|
|
|
|
|
; lda scaleaddh
|
|
|
|
; eor #$ff
|
|
|
|
; adc #0
|
|
|
|
; sta scaleaddh
|
|
|
|
|
|
|
|
rdone_reverse:
|
|
|
|
clc
|
|
|
|
lda ANGLE
|
|
|
|
adc direction
|
|
|
|
and #$1f
|
|
|
|
sta ANGLE
|
|
|
|
|
|
|
|
clc
|
|
|
|
lda SCALE_F
|
|
|
|
adc scaleaddl
|
|
|
|
sta SCALE_F
|
|
|
|
lda SCALE_I
|
|
|
|
adc scaleaddh
|
|
|
|
sta SCALE_I
|
|
|
|
|
|
|
|
jmp rz_main_loop
|
|
|
|
|
|
|
|
|
|
|
|
;direction: .byte $01
|
|
|
|
;scaleaddl: .byte $10
|
|
|
|
;scaleaddh: .byte $00
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-05-09 04:53:32 +00:00
|
|
|
rts
|
|
|
|
|
2021-05-10 05:49:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2021-05-09 04:53:32 +00:00
|
|
|
;=========================
|
|
|
|
; load byte routine
|
|
|
|
;=========================
|
|
|
|
|
|
|
|
load_byte:
|
|
|
|
inc load_byte_smc+1
|
|
|
|
bne load_byte_nowrap
|
|
|
|
inc load_byte_smc+2
|
|
|
|
|
|
|
|
load_byte_nowrap:
|
|
|
|
; so no need to wrap
|
|
|
|
load_byte_smc:
|
|
|
|
lda box_data-1
|
|
|
|
tay
|
|
|
|
and #$3f
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
; 4 6 6 6 6
|
|
|
|
box_data:
|
|
|
|
.byte $00,$2F,$C0,$E7
|
|
|
|
.byte $01,$2B,$0A,$9B
|
|
|
|
.byte $28,$29,$43,$D4
|
|
|
|
.byte $24,$27,$43,$D6
|
|
|
|
.byte $20,$23,$45,$D7
|
|
|
|
.byte $1C,$1F,$48,$D8
|
|
|
|
.byte $23,$26,$07,$8E
|
|
|
|
.byte $24,$27,$08,$92
|
|
|
|
.byte $1F,$1F,$0D,$92
|
|
|
|
.byte $2A,$2B,$43,$54
|
|
|
|
.byte $2C,$2D,$46,$53
|
|
|
|
.byte $2C,$2D,$14,$97
|
|
|
|
.byte $08,$16,$1C,$9C
|
|
|
|
.byte $02,$1A,$49,$D8
|
|
|
|
.byte $04,$18,$0A,$95
|
|
|
|
.byte $06,$17,$0B,$14
|
|
|
|
.byte $15,$29,$22,$A2
|
|
|
|
.byte $13,$28,$22,$A4
|
|
|
|
.byte $13,$14,$5C,$63
|
|
|
|
.byte $15,$16,$5B,$61
|
|
|
|
.byte $17,$2B,$59,$E1
|
|
|
|
.byte $18,$20,$1A,$20
|
|
|
|
.byte $22,$2A,$1A,$20
|
|
|
|
.byte $1C,$1C,$5B,$60
|
|
|
|
.byte $26,$26,$5B,$60
|
|
|
|
.byte $1F,$20,$DF,$1F
|
|
|
|
.byte $29,$2A,$DF,$1F
|
|
|
|
.byte $19,$1E,$5D,$5E
|
|
|
|
.byte $23,$28,$5D,$5E
|
|
|
|
.byte $02,$03,$17,$D7
|
|
|
|
.byte $FF
|