dos33fsprogs/games/peasant/draw_box.s

128 lines
1.5 KiB
ArmAsm

;========================
; draw dialog box
;========================
; from X1H:X1L,Y1 to X2H:X2L, Y2
; FIXME: X1H/X2H mostly ignored
draw_box:
; draw rectangle
lda #$33 ; color is white1
sta VGI_RCOLOR
lda BOX_X1L
sta VGI_RX1
lda BOX_Y1
sta VGI_RY1
; 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
sec
lda BOX_Y2
sbc BOX_Y1
sta VGI_RYRUN
jsr vgi_simple_rectangle
; draw lines
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
rts