mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-05 16:58:37 +00:00
193 lines
2.6 KiB
ArmAsm
193 lines
2.6 KiB
ArmAsm
|
; 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
|
||
|
|
||
|
draw_box_loop:
|
||
|
|
||
|
; get color/Y0
|
||
|
jsr load_byte
|
||
|
tax ; Y0 is in X
|
||
|
|
||
|
tya ; check for end
|
||
|
|
||
|
bmi end
|
||
|
|
||
|
|
||
|
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
|
||
|
|
||
|
|
||
|
;=========================
|
||
|
; draw the demo
|
||
|
;=========================
|
||
|
; screen is from (11,6) - (20,23)
|
||
|
; so size is 9,17?
|
||
|
end:
|
||
|
|
||
|
lda #128
|
||
|
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
|
||
|
rts
|
||
|
|
||
|
;=========================
|
||
|
; 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
|