mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-27 02:31:00 +00:00
peasant: fix narrow rectangles being drawn
also drop use of HGLIN, use rectangles for everything
This commit is contained in:
parent
32d20ead2f
commit
c680123ada
@ -66,3 +66,25 @@ EO EO
|
||||
6|----c>>>-----------c------c-------|
|
||||
5|-aaa----aaab>>>aaa---a-b-a---------|
|
||||
|
||||
|
||||
|
||||
46, XRUN=2
|
||||
|
||||
46/7= 6R4 ; RUN of 0=1 wide, run of 1=2 wide
|
||||
|
||||
start at 4, end at 5
|
||||
|
||||
start at 4 (left) = $F0 1111 0000
|
||||
end at 5 (Right) = $BF 1011 1111
|
||||
=========
|
||||
x011 0000
|
||||
OR them!!!!
|
||||
|
||||
left_masks:
|
||||
.byte $FF,$FE,$FC,$F8, $F0,$E0,$C0
|
||||
|
||||
right_masks:
|
||||
.byte $81,$83,$87, $8F,$9F,$BF,$FF
|
||||
|
||||
|
||||
|
||||
|
@ -15,7 +15,11 @@ draw_box:
|
||||
lda BOX_Y1
|
||||
sta VGI_RY1
|
||||
|
||||
sec
|
||||
; calculate X run
|
||||
sec ; 16-bit subtract?
|
||||
lda BOX_X2H ; doesn't handle >255
|
||||
sbc BOX_X1H
|
||||
|
||||
lda BOX_X2L
|
||||
sbc BOX_X1L
|
||||
sta VGI_RXRUN
|
||||
@ -29,12 +33,101 @@ draw_box:
|
||||
|
||||
; draw lines
|
||||
|
||||
ldx #2 ; color is purple
|
||||
lda colortbl,X
|
||||
sta HGR_COLOR
|
||||
; ldx #2 ; color is purple
|
||||
; lda colortbl,X
|
||||
; sta HGR_COLOR
|
||||
|
||||
lda #$22 ; color is purple
|
||||
sta VGI_RCOLOR
|
||||
|
||||
; draw outer rectangle, x+6, y+5 x-6, y-5
|
||||
|
||||
; draw 4 boxes
|
||||
; x1+6,y1+5 ... x2-6,y1+6
|
||||
; x1+6,y2-6 ... x2-6,y2-5
|
||||
; x1+6,y1+5 ... x1+7,y2-6
|
||||
; x2-7,y1+5 ... x2-6,y2-6
|
||||
|
||||
;===============================
|
||||
; top: x1+6,y1+5 ... x2-6,y1+6
|
||||
|
||||
clc
|
||||
lda VGI_RX1
|
||||
adc #6
|
||||
sta VGI_RX1
|
||||
|
||||
sec
|
||||
lda VGI_RXRUN
|
||||
sbc #12
|
||||
sta VGI_RXRUN
|
||||
|
||||
|
||||
clc
|
||||
lda BOX_Y1
|
||||
adc #5
|
||||
sta VGI_RY1
|
||||
|
||||
lda #2
|
||||
sta VGI_RYRUN
|
||||
|
||||
jsr vgi_simple_rectangle
|
||||
|
||||
|
||||
;===============================
|
||||
; bottom: x1+6,y2-6 ... x2-6,y2-5
|
||||
|
||||
sec
|
||||
lda BOX_Y2
|
||||
sbc #6
|
||||
sta VGI_RY1
|
||||
|
||||
lda #2
|
||||
sta VGI_RYRUN
|
||||
|
||||
jsr vgi_simple_rectangle
|
||||
|
||||
;===============================
|
||||
; left: x1+6,y1+5 ... x1+7,y2-6
|
||||
|
||||
clc
|
||||
lda BOX_Y1
|
||||
adc #5
|
||||
sta VGI_RY1
|
||||
|
||||
lda #2
|
||||
sta VGI_RXRUN
|
||||
|
||||
sec
|
||||
lda BOX_Y2
|
||||
sbc BOX_Y1
|
||||
sbc #10
|
||||
sta VGI_RYRUN
|
||||
|
||||
jsr vgi_simple_rectangle
|
||||
|
||||
|
||||
;===============================
|
||||
; right: x2-7,y1+5 ... x2-6,y2-6
|
||||
|
||||
sec
|
||||
lda BOX_X2L
|
||||
sbc #7
|
||||
sta VGI_RX1
|
||||
|
||||
clc
|
||||
lda BOX_Y1
|
||||
adc #5
|
||||
sta VGI_RY1
|
||||
|
||||
sec
|
||||
lda BOX_Y2
|
||||
sbc BOX_Y1
|
||||
sbc #9
|
||||
sta VGI_RYRUN
|
||||
|
||||
jsr vgi_simple_rectangle
|
||||
|
||||
.if 0
|
||||
clc
|
||||
lda BOX_X1L
|
||||
adc #6
|
||||
@ -80,11 +173,11 @@ draw_box:
|
||||
|
||||
jsr draw_rectangle
|
||||
|
||||
|
||||
.endif
|
||||
rts
|
||||
|
||||
|
||||
|
||||
.if 0
|
||||
draw_rectangle:
|
||||
|
||||
ldy #0
|
||||
@ -114,3 +207,4 @@ draw_rectangle:
|
||||
|
||||
rts
|
||||
|
||||
.endif
|
||||
|
@ -61,16 +61,30 @@ simple_rectangle_loop:
|
||||
bcs not_corner
|
||||
|
||||
corner:
|
||||
; want to use MASK of left_mask, MOD7 and 7-XRUN
|
||||
; left=(RX1 MOD 7) right=(RX1 MOD 7)+XRUN
|
||||
; mask is left AND right
|
||||
|
||||
ldx VGI_RX1
|
||||
lda mod7_table,X
|
||||
tax
|
||||
lda left_masks,X
|
||||
sta OTHER_MASK
|
||||
|
||||
txa
|
||||
clc
|
||||
adc XRUN
|
||||
tax
|
||||
lda right_masks,X
|
||||
and OTHER_MASK
|
||||
sta OTHER_MASK
|
||||
|
||||
; actual
|
||||
|
||||
lda (GBASL),Y
|
||||
eor HGR_BITS
|
||||
and left_masks,X
|
||||
ldx XRUN
|
||||
and right_masks,X
|
||||
|
||||
and OTHER_MASK
|
||||
|
||||
eor (GBASL),Y
|
||||
sta (GBASL),Y
|
||||
|
||||
|
@ -68,9 +68,25 @@ hposn_loop:
|
||||
|
||||
rts
|
||||
|
||||
; left masks
|
||||
; in memory on screen
|
||||
; x111 1111 1111111 start at 0
|
||||
; x111 1110 0111111 start at 1
|
||||
; x111 1100 0011111 start at 2
|
||||
; ...
|
||||
; x100 0000 0000001 start at 6
|
||||
|
||||
left_masks:
|
||||
.byte $FF,$FE,$FC,$F8, $F0,$E0,$C0
|
||||
|
||||
; right masks
|
||||
; in memory on screen
|
||||
; x000 0001 1000000 end at 0
|
||||
; x000 0011 1100000 end at 1
|
||||
; x000 0111 1110000 end at 2
|
||||
; ...
|
||||
; x011 1111 1111110 end at 5
|
||||
; x111 1111 1111111 end at 6
|
||||
right_masks:
|
||||
.byte $81,$83,$87, $8F,$9F,$BF,$FF
|
||||
|
||||
|
@ -176,8 +176,8 @@ done_cottage:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; even odd
|
||||
; 01234567 01234567
|
||||
|
||||
|
||||
peasant_text:
|
||||
@ -185,7 +185,7 @@ peasant_text:
|
||||
|
||||
|
||||
cottage_text1:
|
||||
.byte 0,53,24, 0,253,82
|
||||
.byte 0,52,24, 0,253,82
|
||||
.byte 9,35,"YOU are Rather Dashing, a",13
|
||||
.byte "humble peasant living in",13
|
||||
.byte "the peasant kingdom of",13
|
||||
@ -194,7 +194,7 @@ cottage_text1:
|
||||
; wait a few seconds
|
||||
|
||||
cottage_text2:
|
||||
.byte 0,40,15, 0,255,96
|
||||
.byte 0,41,15, 0,255,96
|
||||
.byte 8,25,"You return home from a",13
|
||||
.byte "vacation on Scalding Lake",13
|
||||
.byte "only to find that TROGDOR",13
|
||||
|
@ -114,16 +114,30 @@ not_striped:
|
||||
bcs not_corner
|
||||
|
||||
corner:
|
||||
; want to use MASK of left_mask, MOD7 and 7-XRUN
|
||||
; left=(RX1 MOD 7) right=(RX1 MOD 7)+XRUN
|
||||
; mask is left AND right
|
||||
|
||||
ldx VGI_RX1
|
||||
lda mod7_table,X
|
||||
tax
|
||||
lda left_masks,X
|
||||
sta OTHER_MASK
|
||||
|
||||
txa
|
||||
clc
|
||||
adc XRUN
|
||||
tax
|
||||
lda right_masks,X
|
||||
and OTHER_MASK
|
||||
sta OTHER_MASK
|
||||
|
||||
; actual
|
||||
|
||||
lda (GBASL),Y
|
||||
eor HGR_BITS
|
||||
and left_masks,X
|
||||
ldx XRUN
|
||||
and right_masks,X
|
||||
|
||||
and OTHER_MASK
|
||||
|
||||
eor (GBASL),Y
|
||||
sta (GBASL),Y
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user