diff --git a/graphics/hgr/vgi/make_boxes_asm.c b/graphics/hgr/vgi/make_boxes_asm.c index 5fef3a9c..24bc8781 100644 --- a/graphics/hgr/vgi/make_boxes_asm.c +++ b/graphics/hgr/vgi/make_boxes_asm.c @@ -12,6 +12,7 @@ #define VGI_VERT_TRIANGLE 7 #define VGI_HORIZ_TRIANGLE 8 #define VGI_VSTRIPE_RECTANGLE 9 +#define VGI_LINE 10 #define VGI_END 15 /* non-encoded pseudo-values */ @@ -54,6 +55,9 @@ int main(int argc, char **argv) { if (!strncmp(buffer,"LINETO",6)) { type=VGI_LINETO; } + else if (!strncmp(buffer,"LINE",4)) { + type=VGI_LINE; + } if (!strncmp(buffer,"DRECT",5)) { type=VGI_DITHER_RECTANGLE; } @@ -215,6 +219,23 @@ int main(int argc, char **argv) { size+=7; break; + case VGI_LINE: /* line */ + sscanf(buffer,"%*s %i %i %i %i %i", + &color1, + &x1,&y1,&x2,&y2); + printf(".byte $%02X,",(type<<4)|6); + if (x1>255) { + x1=x1&0xff; + color1|=128; + } + printf("$%02X,",color1); + printf("$%02X,",x1); + printf("$%02X,",y1); + printf("$%02X,",x2); + printf("$%02X\n",y2); + size+=6; + break; + case VGI_END: /* end */ printf(".byte $FF\n"); size+=1; diff --git a/graphics/hgr/vgi/myst_vgi.s b/graphics/hgr/vgi/myst_vgi.s index b24c64fe..0c44c108 100644 --- a/graphics/hgr/vgi/myst_vgi.s +++ b/graphics/hgr/vgi/myst_vgi.s @@ -206,7 +206,7 @@ vgi_rts_table: .word vgi_vertical_triangle-1 ; 7 = vertical triangle .word vgi_horizontal_triangle-1 ; 8 = horizontal triangle .word vgi_vstripe_rectangle-1 ; 9 = vstripe rectangle - .word all_done-1 + .word vgi_line-1 ;10 = line .word all_done-1 .word all_done-1 .word all_done-1 diff --git a/graphics/hgr/vgi/path.vgi b/graphics/hgr/vgi/path.vgi index dc19bc24..f364b2cb 100644 --- a/graphics/hgr/vgi/path.vgi +++ b/graphics/hgr/vgi/path.vgi @@ -3,16 +3,23 @@ CLS 255 ; white background RECT 1 5 0 85 140 191 ; ground left RECT 1 5 140 85 279 191 ; ground right ; tower -DRECT 0x4c 0x33 216 22 235 33 ; tower +;DRECT 0x4c 0x33 216 22 235 33 ; tower +DRECT 0x4c 216 216 22 235 33 ; tower +;RECT 6 6 216 22 235 33 ; tower RECT 5 5 216 33 236 56 ; mountain VTRI 5 216 33 207 216 60 ; mountain ; temple DRECT 0x4c 0x33 181 56 237 96 ; tower VTRI 0 204 53 186 225 60 ; triangle RECT 0 0 203 68 211 81 ; door -POINT 7 189 68 -LINETO 189 82 -POINT 7 197 67 -LINETO 197 84 -POINT 7 +LINE 7 189 68 189 82 ; columns +LINE 7 197 67 197 84 +LINE 7 214 80 214 66 +LINE 7 224 78 223 65 +; marker switch +RECT 5 5 209 76 217 86 ; marker switch +; trees +RECT 5 5 98 0 101 114 ; tree ? +VTRISK 1 97 0 88 110 87 4 ; leaves? +VTRISK 1 101 0 88 110 87 4 ; leaves? END diff --git a/graphics/hgr/vgi/vgi_lines.s b/graphics/hgr/vgi/vgi_lines.s index c8236a7d..19d8c6ca 100644 --- a/graphics/hgr/vgi/vgi_lines.s +++ b/graphics/hgr/vgi/vgi_lines.s @@ -3,12 +3,20 @@ ;======================== ; VGI point ;======================== +vgi_point: + jsr vgi_point_common + jmp vgi_loop + + + ;======================== + ; VGI point common + ;======================== VGI_PCOLOR = P0 ; if high bit set, then PX=PX+256 VGI_PX = P1 VGI_PY = P2 -vgi_point: +vgi_point_common: ldy #0 lda VGI_PCOLOR @@ -25,7 +33,7 @@ vgi_point_color: jsr HPLOT0 ; plot at (Y,X), (A) - jmp vgi_loop + rts @@ -44,3 +52,23 @@ vgi_lineto: jsr HGLIN ; line to (X,A),(Y) jmp vgi_loop + + + ;======================== + ; VGI LINE + ;======================== +; VGI_LX = P0 +; VGI_LY = P1 + VGI_LX2 = P3 + VGI_LY2 = P4 + +vgi_line: + jsr vgi_point_common + + ldx #0 + ldy VGI_LY2 + lda VGI_LX2 + + jsr HGLIN ; line to (X,A),(Y) + + jmp vgi_loop