vgi: update to better fit in myst code
This commit is contained in:
parent
63c8595d28
commit
069d90dd0b
|
@ -31,7 +31,8 @@ mist_hgr.dsk: QBOOT TEXT_TITLE QLOAD \
|
||||||
$(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
|
$(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
|
||||||
$(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
|
$(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
|
||||||
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 14
|
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 14
|
||||||
$(DOS33_RAW) mist_hgr.dsk 2 0 MIST_TITLE 0 84
|
$(DOS33_RAW) mist_hgr.dsk 2 0 MIST_TITLE 0 0
|
||||||
|
# 84
|
||||||
# $(DOS33_RAW) mist_hgr.dsk 8 0 MIST 0 159
|
# $(DOS33_RAW) mist_hgr.dsk 8 0 MIST 0 159
|
||||||
# $(DOS33_RAW) mist_hgr.dsk 18 0 OCTAGON 0 128
|
# $(DOS33_RAW) mist_hgr.dsk 18 0 OCTAGON 0 128
|
||||||
# $(DOS33_RAW) mist_hgr.dsk 26 0 DENTIST 0 31
|
# $(DOS33_RAW) mist_hgr.dsk 26 0 DENTIST 0 31
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
#include ../Makefile.inc
|
||||||
|
|
||||||
|
B2D = ../../../utils/bmp2dhr/b2d
|
||||||
|
PNG2GR = ../../../utils/gr-utils/png2gr
|
||||||
|
LZSA = ~/research/lzsa/lzsa/lzsa
|
||||||
|
MAKE_VGI = ../../../graphics/hgr/vgi/make_vgi_asm
|
||||||
|
|
||||||
|
all: title_graphics.inc
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
title_graphics.inc: clock.lzsa
|
||||||
|
echo "m_link_book_lzsa: .incbin \"clock.lzsa\"" > title_graphics.inc
|
||||||
|
echo "m_title_m_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "m_title_y_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "m_title_s_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "m_title_t_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "fissure_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "fissure_book_small_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "fissure_book_big_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "falling_right_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "falling_left_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_air_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_sparks_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_glow_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_ground_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_ground_n_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
echo "book_closed_n_lzsa: .incbin \"clock.lzsa\"" >> title_graphics.inc
|
||||||
|
|
||||||
|
|
||||||
|
# m_link_book.lzsa \
|
||||||
|
# m_title_m.lzsa m_title_y.lzsa m_title_s.lzsa m_title_t.lzsa \
|
||||||
|
# fissure.lzsa fissure_book_small.lzsa fissure_book_big.lzsa \
|
||||||
|
# falling_right.lzsa falling_left.lzsa \
|
||||||
|
# book_air.lzsa book_sparks.lzsa book_glow.lzsa \
|
||||||
|
# book_ground.lzsa book_ground_n.lzsa \
|
||||||
|
# book_closed_n.lzsa
|
||||||
|
# echo "m_link_book_lzsa: .incbin \"m_link_book.lzsa\"" > title_graphics.inc
|
||||||
|
# echo "m_title_m_lzsa: .incbin \"m_title_m.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "m_title_y_lzsa: .incbin \"m_title_y.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "m_title_s_lzsa: .incbin \"m_title_s.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "m_title_t_lzsa: .incbin \"m_title_t.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "fissure_lzsa: .incbin \"fissure.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "fissure_book_small_lzsa: .incbin \"fissure_book_small.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "fissure_book_big_lzsa: .incbin \"fissure_book_big.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "falling_right_lzsa: .incbin \"falling_right.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "falling_left_lzsa: .incbin \"falling_left.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_air_lzsa: .incbin \"book_air.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_sparks_lzsa: .incbin \"book_sparks.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_glow_lzsa: .incbin \"book_glow.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_ground_lzsa: .incbin \"book_ground.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_ground_n_lzsa: .incbin \"book_ground_n.lzsa\"" >> title_graphics.inc
|
||||||
|
# echo "book_closed_n_lzsa: .incbin \"book_closed_n.lzsa\"" >> title_graphics.inc
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
%.data: %.vgi
|
||||||
|
$(MAKE_VGI) -b < $< > $@
|
||||||
|
|
||||||
|
%.lzsa: %.data
|
||||||
|
$(LZSA) -r -f2 $< $@
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *~ *.o *.lst *.data *.lzsa
|
|
@ -0,0 +1,79 @@
|
||||||
|
; Clock from Myst
|
||||||
|
CLS 255 ; white background
|
||||||
|
RECT 1 6 0 90 140 191 ; ocean left
|
||||||
|
RECT 1 6 140 90 279 191 ; ocean right
|
||||||
|
DRECT 0x8 0x22 157 121 208 165 ; tower shadow
|
||||||
|
DRECT 0x8 0x22 160 165 204 191 ; tower shadow
|
||||||
|
; Gear Base
|
||||||
|
RECT 4 0 141 116 209 129 ; gear base shade
|
||||||
|
RECT 4 0 147 125 164 134 ; gear base shade left
|
||||||
|
RECT 7 3 157 129 176 134 ; gear base left
|
||||||
|
RECT 7 3 192 128 212 134 ; gear base center
|
||||||
|
RECT 4 0 156 131 171 136 ; gear base shade left
|
||||||
|
RECT 7 3 211 115 221 131 ; gear base right
|
||||||
|
RECT 7 3 211 120 233 131 ; gear base right
|
||||||
|
RECT 4 4 176 130 190 134 ; shade center
|
||||||
|
RECT 4 4 193 134 213 137 ; shade center right
|
||||||
|
RECT 4 4 212 129 230 134 ; shade center-right
|
||||||
|
RECT 4 4 222 122 234 125 ; shade base right
|
||||||
|
; Tower
|
||||||
|
RECT 0 0 180 17 213 121 ; tower right
|
||||||
|
DRECT 0x4c 0x33 156 20 209 126 ; tower
|
||||||
|
DRECT 0x4c 0x33 145 9 212 20 ; left roof
|
||||||
|
DRECT 0x4c 0x33 154 4 212 20 ; left roof
|
||||||
|
DRECT 0x4c 0x33 162 0 220 20 ; right roof
|
||||||
|
POINT 7 155 28
|
||||||
|
LINETO 212 17 ; bottom line
|
||||||
|
POINT 0 150 20
|
||||||
|
LINETO 214 9 ; middle line
|
||||||
|
POINT 0 146 13
|
||||||
|
LINETO 219 0 ; top line
|
||||||
|
RECT 0 0 214 0 219 23 ; right roof
|
||||||
|
; Door
|
||||||
|
FCIRC 7 180 98 12 ; doorway top
|
||||||
|
RECT 7 7 168 96 192 127 ; doorway
|
||||||
|
RECT 7 7 164 98 195 104 ; doorway cross
|
||||||
|
RECT 7 7 177 83 182 88 ; doorway top
|
||||||
|
FCIRC 5 180 98 8 ; door circle top
|
||||||
|
RECT 5 5 172 96 188 123 ; door
|
||||||
|
; clock face
|
||||||
|
FCIRC 5 181 49 20 ; clock face ring
|
||||||
|
FCIRC 7 181 49 18 ; clock face white
|
||||||
|
CIRC 5 181 49 14 ; clock face inner
|
||||||
|
POINT 0 181 49 ; clock hand origin
|
||||||
|
LINETO 181 32 ; clock hand
|
||||||
|
; marker switch
|
||||||
|
RECT 5 5 148 110 156 120 ; marker switch
|
||||||
|
RECT 2 2 149 106 155 109 ; top switch
|
||||||
|
; puzzle
|
||||||
|
RECT 0 4 60 152 120 178 ; black box
|
||||||
|
RECT 0 4 70 147 109 152 ; black box (more)
|
||||||
|
RECT 0 4 81 145 99 147 ; black box (more)
|
||||||
|
POINT 7 104 173 ; edge (white)
|
||||||
|
LINETO 104 161 ; lineto top
|
||||||
|
POINT 5 60 152 ; top edge (orange)
|
||||||
|
LINETO 104 161 ; right
|
||||||
|
LINETO 118 151 ; more right
|
||||||
|
LINETO 84 143 ; left
|
||||||
|
LINETO 60 152 ; back to origin
|
||||||
|
RECT 0 0 78 142 86 147 ; left shaft
|
||||||
|
RECT 5 5 72 137 86 140 ; left knob
|
||||||
|
RECT 5 5 75 146 85 151 ; left base
|
||||||
|
RECT 0 0 90 145 97 152 ; right shaft
|
||||||
|
RECT 5 5 88 141 101 145 ; right knob
|
||||||
|
RECT 5 5 91 150 96 154 ; right base
|
||||||
|
RECT 2 5 100 152 105 157 ; button
|
||||||
|
; grass / trees
|
||||||
|
RECT 5 1 0 163 63 191 ; grass left
|
||||||
|
RECT 5 1 63 167 143 191 ; grass middle
|
||||||
|
RECT 5 1 133 177 184 191 ; grass again
|
||||||
|
RECT 5 1 177 185 230 191 ; grass right
|
||||||
|
DRECT 0xA8 0xAA 28 0 39 178 ; middle tree
|
||||||
|
DRECT 0x8 0x22 1 13 99 44 ; leaves
|
||||||
|
DRECT 0xA8 0xAA 0 0 12 188 ; left tree
|
||||||
|
DRECT 0xA8 0xAA 70 0 81 187 ; right tree
|
||||||
|
RECT 0 0 39 183 67 186 ; shadow
|
||||||
|
RECT 0 0 12 179 39 183 ; shadow
|
||||||
|
DRECT 0x8 0x22 66 1 99 19 ; leaves
|
||||||
|
DRECT 0x8 0x22 15 49 49 79 ; leaves
|
||||||
|
END
|
|
@ -1,9 +1,9 @@
|
||||||
;; HARDWARE LOCATIONS
|
; HARDWARE LOCATIONS
|
||||||
|
|
||||||
KEYPRESS = $C000
|
KEYPRESS = $C000
|
||||||
KEYRESET = $C010
|
KEYRESET = $C010
|
||||||
|
|
||||||
;; SOFT SWITCHES
|
; SOFT SWITCHES
|
||||||
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
||||||
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
||||||
EIGHTYCOLOFF = $C00C
|
EIGHTYCOLOFF = $C00C
|
||||||
|
@ -22,41 +22,43 @@ LORES = $C056 ; Enable LORES graphics
|
||||||
HIRES = $C057 ; Enable HIRES graphics
|
HIRES = $C057 ; Enable HIRES graphics
|
||||||
AN3 = $C05E ; Annunciator 3
|
AN3 = $C05E ; Annunciator 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PADDLE_BUTTON0 = $C061
|
PADDLE_BUTTON0 = $C061
|
||||||
PADDL0 = $C064
|
PADDL0 = $C064
|
||||||
PTRIG = $C070
|
PTRIG = $C070
|
||||||
|
|
||||||
;; BASIC ROUTINES
|
; APPLESOFT BASIC ROUTINES
|
||||||
|
|
||||||
NORMAL = $F273
|
NORMAL = $F273
|
||||||
|
BKGND0 = $F3F4 ; clear current page to A
|
||||||
|
HPOSN = $F411 ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
||||||
|
HPLOT0 = $F457 ; plot at (Y,X), (A)
|
||||||
|
COLOR_SHIFT = $F47E
|
||||||
|
HLINRL = $F530 ; (X,A),(Y)
|
||||||
|
HGLIN = $F53A ; line to (X,A),(Y)
|
||||||
|
COLORTBL = $F6F6
|
||||||
|
|
||||||
;; MONITOR ROUTINES
|
|
||||||
|
|
||||||
HLINE = $F819 ;; HLINE Y,$2C at A
|
; MONITOR ROUTINES
|
||||||
VLINE = $F828 ;; VLINE A,$2D at Y
|
|
||||||
CLRSCR = $F832 ;; Clear low-res screen
|
HLINE = $F819 ; HLINE Y,$2C at A
|
||||||
CLRTOP = $F836 ;; clear only top of low-res screen
|
VLINE = $F828 ; VLINE A,$2D at Y
|
||||||
SETCOL = $F864 ;; COLOR=A
|
CLRSCR = $F832 ; Clear low-res screen
|
||||||
ROM_TEXT2COPY = $F962 ;; iigs
|
CLRTOP = $F836 ; clear only top of low-res screen
|
||||||
|
SETCOL = $F864 ; COLOR=A
|
||||||
|
ROM_TEXT2COPY = $F962 ; iigs
|
||||||
TEXT = $FB36
|
TEXT = $FB36
|
||||||
TABV = $FB5B ;; VTAB to A
|
TABV = $FB5B ; VTAB to A
|
||||||
ROM_MACHINEID = $FBB3 ;; iigs
|
ROM_MACHINEID = $FBB3 ; iigs
|
||||||
BELL = $FBDD ;; ring the bell
|
BELL = $FBDD ; ring the bell
|
||||||
BASCALC = $FBC1 ;;
|
BASCALC = $FBC1 ;
|
||||||
VTAB = $FC22 ;; VTAB to CV
|
VTAB = $FC22 ; VTAB to CV
|
||||||
HOME = $FC58 ;; Clear the text screen
|
HOME = $FC58 ; Clear the text screen
|
||||||
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
CROUT1 = $FD8B
|
CROUT1 = $FD8B
|
||||||
SETINV = $FE80 ;; INVERSE
|
SETINV = $FE80 ; INVERSE
|
||||||
SETNORM = $FE84 ;; NORMAL
|
SETNORM = $FE84 ; NORMAL
|
||||||
COUT = $FDED ;; output A to screen
|
COUT = $FDED ; output A to screen
|
||||||
COUT1 = $FDF0 ;; output A to screen
|
COUT1 = $FDF0 ; output A to screen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,15 @@
|
||||||
|
|
||||||
mist_start:
|
mist_start:
|
||||||
|
|
||||||
|
;===================
|
||||||
|
; init vgi
|
||||||
|
;===================
|
||||||
|
|
||||||
|
lda #$20
|
||||||
|
sta HGR_PAGE ; put this somewhere else?
|
||||||
|
|
||||||
|
jsr vgi_init
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
; detect model
|
; detect model
|
||||||
;===================
|
;===================
|
||||||
|
@ -247,14 +256,14 @@ reload_everything:
|
||||||
; init screen
|
; init screen
|
||||||
;===================
|
;===================
|
||||||
|
|
||||||
jsr TEXT
|
; jsr TEXT
|
||||||
jsr HOME
|
; jsr HOME
|
||||||
bit KEYRESET
|
; bit KEYRESET
|
||||||
|
|
||||||
bit SET_GR
|
; bit SET_GR
|
||||||
bit PAGE0
|
; bit PAGE0
|
||||||
bit LORES
|
; bit LORES
|
||||||
bit FULLGR
|
; bit FULLGR
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta DRAW_PAGE
|
sta DRAW_PAGE
|
||||||
|
@ -588,9 +597,16 @@ draw_and_wait:
|
||||||
lda #$c ; load to page $c00
|
lda #$c ; load to page $c00
|
||||||
jsr decompress_lzsa2_fast
|
jsr decompress_lzsa2_fast
|
||||||
|
|
||||||
jsr gr_copy_to_current
|
lda #$0
|
||||||
|
sta VGIL
|
||||||
|
lda #$c
|
||||||
|
sta VGIH
|
||||||
|
|
||||||
|
jsr play_vgi
|
||||||
|
|
||||||
|
; jsr gr_copy_to_current
|
||||||
|
; jsr page_flip
|
||||||
|
|
||||||
jsr page_flip
|
|
||||||
pla
|
pla
|
||||||
jsr wait_a_bit
|
jsr wait_a_bit
|
||||||
rts
|
rts
|
||||||
|
@ -674,3 +690,6 @@ config_string:
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
.byte 0,23,"APPLE II?, 48K RAM, MOCKINGBOARD: SLOT ?",0
|
.byte 0,23,"APPLE II?, 48K RAM, MOCKINGBOARD: SLOT ?",0
|
||||||
; MOCKINGBOARD: NONE
|
; MOCKINGBOARD: NONE
|
||||||
|
|
||||||
|
|
||||||
|
.include "vgi_common.s"
|
||||||
|
|
|
@ -213,7 +213,7 @@ sector_array:
|
||||||
.byte 0 ; FIRST_SECTOR
|
.byte 0 ; FIRST_SECTOR
|
||||||
|
|
||||||
length_array:
|
length_array:
|
||||||
.byte 88,159,157,145 ; MIST_TITLE,MIST,MECHE,SELENA
|
.byte 99,159,157,145 ; MIST_TITLE,MIST,MECHE,SELENA
|
||||||
.byte 128, 20,158,135 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
.byte 128, 20,158,135 ; OCTAGON,VIEWER,STONEY,CHANNEL
|
||||||
.byte 61, 31,159,109 ; CABIN,DENTIST,ARBOR,NIBEL
|
.byte 61, 31,159,109 ; CABIN,DENTIST,ARBOR,NIBEL
|
||||||
.byte 20, 33, 27, 78 ; SHIP,GENERATOR,D'NI,SUB
|
.byte 20, 33, 27, 78 ; SHIP,GENERATOR,D'NI,SUB
|
||||||
|
|
|
@ -0,0 +1,303 @@
|
||||||
|
; VGI_Circles
|
||||||
|
|
||||||
|
|
||||||
|
XX = TEMP0
|
||||||
|
MINUSXX = TEMP1
|
||||||
|
YY = TEMP2
|
||||||
|
MINUSYY = TEMP3
|
||||||
|
D = TEMP4
|
||||||
|
COUNT = TEMP5
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI circle
|
||||||
|
;========================
|
||||||
|
|
||||||
|
VGI_CCOLOR = P0
|
||||||
|
VGI_CX = P1
|
||||||
|
VGI_CY = P2
|
||||||
|
VGI_CR = P3
|
||||||
|
|
||||||
|
vgi_circle:
|
||||||
|
ldx VGI_CCOLOR
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
;===============================
|
||||||
|
; draw circle
|
||||||
|
;===============================
|
||||||
|
; draw circle at (CX,CY) of radius R
|
||||||
|
; signed 8-bit math so problems if R > 64?
|
||||||
|
|
||||||
|
; XX=0 YY=R
|
||||||
|
; D=3-2*R
|
||||||
|
; GOTO6
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta XX
|
||||||
|
|
||||||
|
lda VGI_CR
|
||||||
|
sta YY
|
||||||
|
|
||||||
|
lda #3
|
||||||
|
sec
|
||||||
|
sbc VGI_CR
|
||||||
|
sbc VGI_CR
|
||||||
|
sta D
|
||||||
|
|
||||||
|
jmp do_plots
|
||||||
|
|
||||||
|
circle_loop:
|
||||||
|
; X=X+1
|
||||||
|
|
||||||
|
inc XX
|
||||||
|
|
||||||
|
; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10
|
||||||
|
lda D
|
||||||
|
bmi else
|
||||||
|
|
||||||
|
dec YY
|
||||||
|
|
||||||
|
lda XX
|
||||||
|
sec
|
||||||
|
sbc YY
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc D
|
||||||
|
adc #10
|
||||||
|
jmp store_D
|
||||||
|
|
||||||
|
else:
|
||||||
|
; ELSE D=D+4*X+6
|
||||||
|
lda XX
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc D
|
||||||
|
adc #6
|
||||||
|
store_D:
|
||||||
|
sta D
|
||||||
|
|
||||||
|
do_plots:
|
||||||
|
; setup constants
|
||||||
|
|
||||||
|
lda XX
|
||||||
|
eor #$FF
|
||||||
|
sta MINUSXX
|
||||||
|
inc MINUSXX
|
||||||
|
|
||||||
|
lda YY
|
||||||
|
eor #$FF
|
||||||
|
sta MINUSYY
|
||||||
|
inc MINUSYY
|
||||||
|
|
||||||
|
; HPLOT CX+X,CY+Y
|
||||||
|
; HPLOT CX-X,CY+Y
|
||||||
|
; HPLOT CX+X,CY-Y
|
||||||
|
; HPLOT CX-X,CY-Y
|
||||||
|
; HPLOT CX+Y,CY+X
|
||||||
|
; HPLOT CX-Y,CY+X
|
||||||
|
; HPLOT CX+Y,CY-X
|
||||||
|
; HPLOT CX-Y,CY-X
|
||||||
|
|
||||||
|
; calc X co-ord
|
||||||
|
|
||||||
|
lda #7
|
||||||
|
sta COUNT
|
||||||
|
pos_loop:
|
||||||
|
lda COUNT
|
||||||
|
and #$4
|
||||||
|
lsr
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda COUNT
|
||||||
|
lsr
|
||||||
|
bcc xnoc
|
||||||
|
iny
|
||||||
|
xnoc:
|
||||||
|
lda VGI_CX
|
||||||
|
clc
|
||||||
|
adc XX,Y
|
||||||
|
tax
|
||||||
|
|
||||||
|
; calc y co-ord
|
||||||
|
|
||||||
|
lda COUNT
|
||||||
|
lsr
|
||||||
|
eor #$2
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda VGI_CY
|
||||||
|
clc
|
||||||
|
adc XX,Y
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
|
||||||
|
dec COUNT
|
||||||
|
bpl pos_loop
|
||||||
|
|
||||||
|
|
||||||
|
; IFY>=XTHEN4
|
||||||
|
lda YY
|
||||||
|
cmp XX
|
||||||
|
bcs circle_loop
|
||||||
|
|
||||||
|
jmp vgi_loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI circle
|
||||||
|
;========================
|
||||||
|
; VGI_CCOLOR = P0
|
||||||
|
; VGI_CX = P1
|
||||||
|
; VGI_CY = P2
|
||||||
|
; VGI_CR = P3
|
||||||
|
|
||||||
|
vgi_filled_circle:
|
||||||
|
ldx VGI_CCOLOR
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
;===============================
|
||||||
|
; draw filled circle
|
||||||
|
;===============================
|
||||||
|
; draw filled circle at (CX,CY) of radius R
|
||||||
|
; signed 8-bit math so problems if R > 64?
|
||||||
|
|
||||||
|
|
||||||
|
; XX=0 YY=R
|
||||||
|
; D=3-2*R
|
||||||
|
; GOTO6
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta XX
|
||||||
|
|
||||||
|
lda VGI_CR
|
||||||
|
sta YY
|
||||||
|
|
||||||
|
lda #3
|
||||||
|
sec
|
||||||
|
sbc VGI_CR
|
||||||
|
sbc VGI_CR
|
||||||
|
sta D
|
||||||
|
|
||||||
|
jmp do_filled_plots
|
||||||
|
|
||||||
|
filled_circle_loop:
|
||||||
|
; X=X+1
|
||||||
|
|
||||||
|
inc XX
|
||||||
|
|
||||||
|
; IF D>0 THEN Y=Y-1:D=D+4*(X-Y)+10
|
||||||
|
lda D
|
||||||
|
bmi filled_else
|
||||||
|
|
||||||
|
dec YY
|
||||||
|
|
||||||
|
lda XX
|
||||||
|
sec
|
||||||
|
sbc YY
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc D
|
||||||
|
adc #10
|
||||||
|
jmp store_filled_D
|
||||||
|
|
||||||
|
filled_else:
|
||||||
|
; ELSE D=D+4*X+6
|
||||||
|
lda XX
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc D
|
||||||
|
adc #6
|
||||||
|
store_filled_D:
|
||||||
|
sta D
|
||||||
|
|
||||||
|
do_filled_plots:
|
||||||
|
; setup constants
|
||||||
|
|
||||||
|
lda XX
|
||||||
|
eor #$FF
|
||||||
|
sta MINUSXX
|
||||||
|
inc MINUSXX
|
||||||
|
|
||||||
|
lda YY
|
||||||
|
eor #$FF
|
||||||
|
sta MINUSYY
|
||||||
|
inc MINUSYY
|
||||||
|
|
||||||
|
; HPLOT CX+X,CY+Y
|
||||||
|
; HPLOT CX-X,CY+Y
|
||||||
|
; HPLOT CX+X,CY-Y
|
||||||
|
; HPLOT CX-X,CY-Y
|
||||||
|
; HPLOT CX+Y,CY+X
|
||||||
|
; HPLOT CX-Y,CY+X
|
||||||
|
; HPLOT CX+Y,CY-X
|
||||||
|
; HPLOT CX-Y,CY-X
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
lda #3
|
||||||
|
sta COUNT
|
||||||
|
filled_pos_loop:
|
||||||
|
|
||||||
|
; calc left side
|
||||||
|
|
||||||
|
; calc X co-ord
|
||||||
|
|
||||||
|
lda COUNT
|
||||||
|
ora #$1
|
||||||
|
eor #$2
|
||||||
|
tay
|
||||||
|
lda VGI_CX
|
||||||
|
clc
|
||||||
|
adc XX,Y
|
||||||
|
tax
|
||||||
|
|
||||||
|
; calc y co-ord
|
||||||
|
|
||||||
|
ldy COUNT
|
||||||
|
lda VGI_CY
|
||||||
|
clc
|
||||||
|
adc XX,Y
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
; pha ; save Y value for later
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
|
||||||
|
|
||||||
|
; calc right side
|
||||||
|
lda COUNT
|
||||||
|
and #$2
|
||||||
|
eor #$2
|
||||||
|
tay
|
||||||
|
lda XX,Y
|
||||||
|
asl
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
jsr HLINRL ; plot relative (X,A), (Y)
|
||||||
|
; so in our case (0,XX*2),0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dec COUNT
|
||||||
|
bpl filled_pos_loop
|
||||||
|
|
||||||
|
|
||||||
|
; IFY>=XTHEN4
|
||||||
|
lda YY
|
||||||
|
cmp XX
|
||||||
|
bcs filled_circle_loop
|
||||||
|
|
||||||
|
jmp vgi_loop
|
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
vgi_clearscreen:
|
||||||
|
|
||||||
|
lda P0
|
||||||
|
jsr BKGND0
|
||||||
|
|
||||||
|
jmp vgi_loop ; return
|
|
@ -0,0 +1,72 @@
|
||||||
|
; VGI library
|
||||||
|
|
||||||
|
VGI_MAXLEN = 7
|
||||||
|
|
||||||
|
;==================================
|
||||||
|
; play_vgi
|
||||||
|
;==================================
|
||||||
|
play_vgi:
|
||||||
|
|
||||||
|
vgi_loop:
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
data_smc:
|
||||||
|
lda (VGIL),Y
|
||||||
|
sta VGI_BUFFER,Y
|
||||||
|
iny
|
||||||
|
cpy #VGI_MAXLEN
|
||||||
|
bne data_smc
|
||||||
|
|
||||||
|
lda VGI_TYPE
|
||||||
|
and #$f
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc VGIL
|
||||||
|
sta VGIL
|
||||||
|
bcc no_oflo
|
||||||
|
inc VGIH
|
||||||
|
no_oflo:
|
||||||
|
|
||||||
|
lda VGI_TYPE
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
|
||||||
|
; look up action in jump table
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda vgi_rts_table+1,X
|
||||||
|
pha
|
||||||
|
lda vgi_rts_table,X
|
||||||
|
pha
|
||||||
|
rts ; "jump" to subroutine
|
||||||
|
|
||||||
|
vgi_rts_table:
|
||||||
|
.word vgi_clearscreen-1 ; 0 = clearscreen
|
||||||
|
.word vgi_simple_rectangle-1 ; 1 = simple rectangle
|
||||||
|
.word vgi_circle-1 ; 2 = plain circle
|
||||||
|
.word vgi_filled_circle-1 ; 3 = filled circle
|
||||||
|
.word vgi_point-1 ; 4 = dot
|
||||||
|
.word vgi_lineto-1 ; 5 = line to
|
||||||
|
.word vgi_dithered_rectangle-1 ; 6 = dithered rectangle
|
||||||
|
.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 vgi_line-1 ;10 = line
|
||||||
|
.word vgi_line_far-1 ;11 = line far
|
||||||
|
.word all_done-1
|
||||||
|
.word all_done-1
|
||||||
|
.word all_done-1
|
||||||
|
.word all_done-1 ; 15 = done
|
||||||
|
|
||||||
|
all_done:
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
.include "vgi_clearscreen.s"
|
||||||
|
.include "vgi_circles.s"
|
||||||
|
.include "vgi_rectangle.s"
|
||||||
|
.include "vgi_lines.s"
|
||||||
|
.include "vgi_triangles.s"
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
; VGI Lines
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; 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_common:
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
lda VGI_PCOLOR
|
||||||
|
bpl vgi_point_color
|
||||||
|
iny
|
||||||
|
vgi_point_color:
|
||||||
|
and #$7f
|
||||||
|
tax
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
ldx VGI_PX
|
||||||
|
lda VGI_PY
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI line to
|
||||||
|
;========================
|
||||||
|
VGI_LX = P0
|
||||||
|
VGI_LY = P1
|
||||||
|
|
||||||
|
vgi_lineto:
|
||||||
|
ldx #0
|
||||||
|
ldy VGI_LY
|
||||||
|
lda VGI_LX
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI LINE FAR
|
||||||
|
;========================
|
||||||
|
; assume second x-coord is > 256
|
||||||
|
; VGI_LX = P0
|
||||||
|
; VGI_LY = P1
|
||||||
|
; VGI_LX2 = P3
|
||||||
|
; VGI_LY2 = P4
|
||||||
|
|
||||||
|
vgi_line_far:
|
||||||
|
jsr vgi_point_common
|
||||||
|
|
||||||
|
ldx #1
|
||||||
|
ldy VGI_LY2
|
||||||
|
lda VGI_LX2
|
||||||
|
|
||||||
|
jsr HGLIN ; line to (X,A),(Y)
|
||||||
|
|
||||||
|
jmp vgi_loop
|
||||||
|
|
|
@ -0,0 +1,454 @@
|
||||||
|
; VGI Rectangle
|
||||||
|
|
||||||
|
; VGI Rectangle test
|
||||||
|
|
||||||
|
COLOR_MODE = TEMP1
|
||||||
|
OTHER_MASK = TEMP2
|
||||||
|
XRUN = TEMP3
|
||||||
|
|
||||||
|
|
||||||
|
div7_table = $BE00
|
||||||
|
mod7_table = $BF00
|
||||||
|
|
||||||
|
USE_FAST = 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.if (USE_FAST=0)
|
||||||
|
|
||||||
|
; slow
|
||||||
|
;=================================
|
||||||
|
; Simple Rectangle
|
||||||
|
;=================================
|
||||||
|
VGI_RCOLOR = P0
|
||||||
|
VGI_RX1 = P1
|
||||||
|
VGI_RY1 = P2
|
||||||
|
VGI_RXRUN = P3
|
||||||
|
VGI_RYRUN = P4
|
||||||
|
|
||||||
|
vgi_simple_rectangle:
|
||||||
|
|
||||||
|
simple_rectangle_loop:
|
||||||
|
|
||||||
|
lda VGI_RCOLOR
|
||||||
|
|
||||||
|
asl ; nibble swap by david galloway
|
||||||
|
adc #$80
|
||||||
|
rol
|
||||||
|
asl
|
||||||
|
adc #$80
|
||||||
|
rol
|
||||||
|
|
||||||
|
sta VGI_RCOLOR
|
||||||
|
|
||||||
|
and #$f
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
ldx VGI_RX1 ; X1 into X
|
||||||
|
lda VGI_RY1 ; Y1 into A
|
||||||
|
ldy #0 ; always 0
|
||||||
|
jsr HPOSN ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
||||||
|
|
||||||
|
|
||||||
|
lda VGI_RXRUN ; XRUN into A
|
||||||
|
ldx #0 ; always 0
|
||||||
|
ldy #0 ; relative Y is 0
|
||||||
|
jsr HLINRL ; (X,A),(Y)
|
||||||
|
|
||||||
|
inc VGI_RY1
|
||||||
|
dec VGI_RYRUN
|
||||||
|
bne simple_rectangle_loop
|
||||||
|
|
||||||
|
jmp vgi_loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=================================
|
||||||
|
; Dithered Rectangle
|
||||||
|
;=================================
|
||||||
|
; VGI_RCOLOR = P0
|
||||||
|
; VGI_RX1 = P1
|
||||||
|
; VGI_RY1 = P2
|
||||||
|
; VGI_RXRUN = P3
|
||||||
|
; VGI_RYRUN = P4
|
||||||
|
VGI_RCOLOR2 = P5
|
||||||
|
|
||||||
|
vgi_dithered_rectangle:
|
||||||
|
|
||||||
|
dithered_rectangle_loop:
|
||||||
|
lda COUNT
|
||||||
|
and #$1
|
||||||
|
beq even_color
|
||||||
|
odd_color:
|
||||||
|
lda VGI_RCOLOR
|
||||||
|
jmp save_color
|
||||||
|
even_color:
|
||||||
|
lda VGI_RCOLOR2
|
||||||
|
save_color:
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
inc COUNT
|
||||||
|
|
||||||
|
ldx VGI_RX1 ; X1 into X
|
||||||
|
lda VGI_RY1 ; Y1 into A
|
||||||
|
ldy #0 ; always 0
|
||||||
|
jsr HPOSN ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
||||||
|
|
||||||
|
|
||||||
|
lda VGI_RXRUN ; XRUN into A
|
||||||
|
ldx #0 ; always 0
|
||||||
|
ldy #0 ; relative Y is 0
|
||||||
|
jsr HLINRL ; (X,A),(Y)
|
||||||
|
|
||||||
|
inc VGI_RY1
|
||||||
|
dec VGI_RYRUN
|
||||||
|
bne dithered_rectangle_loop
|
||||||
|
|
||||||
|
jmp vgi_loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.else
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; FAST
|
||||||
|
;=================================
|
||||||
|
; Simple Rectangle
|
||||||
|
;=================================
|
||||||
|
VGI_RCOLOR = P0
|
||||||
|
VGI_RX1 = P1
|
||||||
|
VGI_RY1 = P2
|
||||||
|
VGI_RXRUN = P3
|
||||||
|
VGI_RYRUN = P4
|
||||||
|
VGI_RCOLOR2 = P5 ; only for dither
|
||||||
|
|
||||||
|
;==================================
|
||||||
|
; VGI Simple Rectangle
|
||||||
|
;==================================
|
||||||
|
|
||||||
|
vgi_simple_rectangle:
|
||||||
|
lda #0
|
||||||
|
sta COLOR_MODE
|
||||||
|
|
||||||
|
simple_rectangle_loop:
|
||||||
|
|
||||||
|
lda COLOR_MODE
|
||||||
|
beq simple_colors
|
||||||
|
bmi striped_colors
|
||||||
|
bpl handle_dither
|
||||||
|
|
||||||
|
|
||||||
|
simple_colors:
|
||||||
|
|
||||||
|
lda VGI_RCOLOR
|
||||||
|
|
||||||
|
asl ; nibble swap by david galloway
|
||||||
|
adc #$80
|
||||||
|
rol
|
||||||
|
asl
|
||||||
|
adc #$80
|
||||||
|
rol
|
||||||
|
|
||||||
|
sta VGI_RCOLOR
|
||||||
|
|
||||||
|
and #$f
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
jmp done_colors
|
||||||
|
|
||||||
|
handle_dither:
|
||||||
|
|
||||||
|
lda COUNT
|
||||||
|
and #$1
|
||||||
|
beq deven_color
|
||||||
|
dodd_color:
|
||||||
|
lda VGI_RCOLOR
|
||||||
|
jmp dsave_color
|
||||||
|
deven_color:
|
||||||
|
lda VGI_RCOLOR2
|
||||||
|
dsave_color:
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
inc COUNT
|
||||||
|
jmp done_colors
|
||||||
|
striped_colors:
|
||||||
|
|
||||||
|
; don't need to do anything here?
|
||||||
|
|
||||||
|
done_colors:
|
||||||
|
|
||||||
|
; get ROW into (GBASL)
|
||||||
|
|
||||||
|
ldx VGI_RX1 ; X1 into X
|
||||||
|
lda VGI_RY1 ; Y1 into A
|
||||||
|
ldy #0 ; always 0
|
||||||
|
jsr HPOSN ; (Y,X),(A) (values stores in HGRX,XH,Y)
|
||||||
|
|
||||||
|
; Y is already the RX1/7
|
||||||
|
|
||||||
|
; adjust color if in striped mode
|
||||||
|
lda COLOR_MODE
|
||||||
|
bpl not_striped
|
||||||
|
|
||||||
|
jsr swap_colors
|
||||||
|
|
||||||
|
not_striped:
|
||||||
|
|
||||||
|
; copy the XRUN
|
||||||
|
|
||||||
|
lda VGI_RXRUN
|
||||||
|
sta XRUN
|
||||||
|
|
||||||
|
inc XRUN ; needed because we compare with beq/bne
|
||||||
|
|
||||||
|
|
||||||
|
; check if narrow corner case where begin and end same block
|
||||||
|
; if RX%7 + XRUN < 8
|
||||||
|
|
||||||
|
ldx VGI_RX1
|
||||||
|
lda mod7_table,X
|
||||||
|
clc
|
||||||
|
adc XRUN
|
||||||
|
cmp #8
|
||||||
|
bcs not_corner
|
||||||
|
|
||||||
|
corner:
|
||||||
|
; want to use MASK of left_mask, MOD7 and 7-XRUN
|
||||||
|
|
||||||
|
lda mod7_table,X
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda (GBASL),Y
|
||||||
|
eor HGR_BITS
|
||||||
|
and left_masks,X
|
||||||
|
ldx XRUN
|
||||||
|
and right_masks,X
|
||||||
|
eor (GBASL),Y
|
||||||
|
sta (GBASL),Y
|
||||||
|
|
||||||
|
jmp done_row ; that's all
|
||||||
|
|
||||||
|
not_corner:
|
||||||
|
|
||||||
|
; see if not starting on boundary
|
||||||
|
ldx VGI_RX1
|
||||||
|
lda mod7_table,X
|
||||||
|
beq draw_run
|
||||||
|
|
||||||
|
; handle not full left border
|
||||||
|
|
||||||
|
tax
|
||||||
|
lda (GBASL),Y
|
||||||
|
eor HGR_BITS
|
||||||
|
and left_masks,X
|
||||||
|
eor (GBASL),Y
|
||||||
|
sta (GBASL),Y
|
||||||
|
|
||||||
|
iny ; move to next
|
||||||
|
|
||||||
|
; adjust RUN length by 7- mod7
|
||||||
|
txa ; load mod7
|
||||||
|
eor #$ff
|
||||||
|
sec
|
||||||
|
adc #7
|
||||||
|
eor #$ff
|
||||||
|
sec
|
||||||
|
adc XRUN
|
||||||
|
sta XRUN
|
||||||
|
|
||||||
|
; lda HGR_BITS ; cycle colors for next
|
||||||
|
; jsr COLOR_SHIFT
|
||||||
|
|
||||||
|
jsr swap_colors
|
||||||
|
|
||||||
|
;no_shift:
|
||||||
|
|
||||||
|
; draw common
|
||||||
|
draw_run:
|
||||||
|
lda XRUN
|
||||||
|
cmp #7
|
||||||
|
bcc draw_right ; blt
|
||||||
|
|
||||||
|
lda HGR_BITS ; get color
|
||||||
|
sta (GBASL),Y ; store out
|
||||||
|
; jsr COLOR_SHIFT ; shift colors
|
||||||
|
|
||||||
|
iny ; move to next block
|
||||||
|
|
||||||
|
jsr swap_colors
|
||||||
|
|
||||||
|
lda XRUN ; take 7 off the run
|
||||||
|
sec
|
||||||
|
sbc #7
|
||||||
|
sta XRUN
|
||||||
|
|
||||||
|
jmp draw_run
|
||||||
|
|
||||||
|
; draw rightmost
|
||||||
|
draw_right:
|
||||||
|
|
||||||
|
beq done_row
|
||||||
|
|
||||||
|
; lda HGR_BITS
|
||||||
|
; jsr COLOR_SHIFT
|
||||||
|
|
||||||
|
; see if not starting on boundary
|
||||||
|
ldx XRUN
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda (GBASL),Y
|
||||||
|
eor HGR_BITS
|
||||||
|
and right_masks,X
|
||||||
|
eor (GBASL),Y
|
||||||
|
sta (GBASL),Y
|
||||||
|
|
||||||
|
done_row:
|
||||||
|
|
||||||
|
inc VGI_RY1
|
||||||
|
dec VGI_RYRUN
|
||||||
|
;bne simple_rectangle_loop
|
||||||
|
beq done_done
|
||||||
|
jmp simple_rectangle_loop
|
||||||
|
|
||||||
|
done_done:
|
||||||
|
jmp vgi_loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;==========================
|
||||||
|
; swap colors
|
||||||
|
;==========================
|
||||||
|
swap_colors:
|
||||||
|
|
||||||
|
lda COLOR_MODE
|
||||||
|
bmi swap_colors_striped
|
||||||
|
|
||||||
|
lda HGR_BITS ; get color
|
||||||
|
jsr COLOR_SHIFT ; shift colors
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
swap_colors_striped:
|
||||||
|
|
||||||
|
tya
|
||||||
|
and #1
|
||||||
|
bne swap_odd
|
||||||
|
|
||||||
|
lda VGI_RCOLOR
|
||||||
|
jmp swap_done
|
||||||
|
|
||||||
|
swap_odd:
|
||||||
|
lda VGI_RCOLOR2
|
||||||
|
swap_done:
|
||||||
|
sta HGR_BITS
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=================================
|
||||||
|
; Dithered Rectangle
|
||||||
|
;=================================
|
||||||
|
; VGI_RCOLOR = P0
|
||||||
|
; VGI_RX1 = P1
|
||||||
|
; VGI_RY1 = P2
|
||||||
|
; VGI_RXRUN = P3
|
||||||
|
; VGI_RYRUN = P4
|
||||||
|
; VGI_RCOLOR2 = P5
|
||||||
|
|
||||||
|
vgi_dithered_rectangle:
|
||||||
|
lda #1
|
||||||
|
sta COLOR_MODE
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta COUNT
|
||||||
|
|
||||||
|
jmp simple_rectangle_loop
|
||||||
|
|
||||||
|
|
||||||
|
;=================================
|
||||||
|
; Vertical Striped Rectangle
|
||||||
|
;=================================
|
||||||
|
; VGI_RCOLOR = P0
|
||||||
|
; VGI_RX1 = P1
|
||||||
|
; VGI_RY1 = P2
|
||||||
|
; VGI_RXRUN = P3
|
||||||
|
; VGI_RYRUN = P4
|
||||||
|
; VGI_RCOLOR2 = P5
|
||||||
|
|
||||||
|
vgi_vstripe_rectangle:
|
||||||
|
lda #128
|
||||||
|
sta COLOR_MODE
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta COUNT
|
||||||
|
|
||||||
|
jmp simple_rectangle_loop
|
||||||
|
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
; make /7 %7 tables
|
||||||
|
;=====================
|
||||||
|
|
||||||
|
vgi_init:
|
||||||
|
|
||||||
|
vgi_make_tables:
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda #0
|
||||||
|
ldx #0
|
||||||
|
div7_loop:
|
||||||
|
sta div7_table,Y
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #7
|
||||||
|
bne div7_not7
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
ldx #0
|
||||||
|
div7_not7:
|
||||||
|
iny
|
||||||
|
bne div7_loop
|
||||||
|
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
lda #0
|
||||||
|
mod7_loop:
|
||||||
|
sta mod7_table,Y
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
cmp #7
|
||||||
|
bne mod7_not7
|
||||||
|
lda #0
|
||||||
|
mod7_not7:
|
||||||
|
iny
|
||||||
|
bne mod7_loop
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
left_masks:
|
||||||
|
.byte $FF,$FE,$FC,$F8, $F0,$E0,$C0
|
||||||
|
|
||||||
|
right_masks:
|
||||||
|
.byte $81,$83,$87, $8F,$9F,$BF,$FF
|
||||||
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
; VGI Triangles
|
||||||
|
|
||||||
|
SKIP = TEMP0
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI vertical triangle
|
||||||
|
;========================
|
||||||
|
|
||||||
|
VGI_TCOLOR = P0
|
||||||
|
VGI_VX = P1
|
||||||
|
VGI_VY = P2
|
||||||
|
VGI_TXL = P3
|
||||||
|
VGI_TXR = P4
|
||||||
|
VGI_TYB = P5
|
||||||
|
|
||||||
|
vgi_vertical_triangle:
|
||||||
|
lda VGI_TCOLOR
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
sta SKIP
|
||||||
|
|
||||||
|
lda VGI_TCOLOR
|
||||||
|
and #$f
|
||||||
|
tax
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
vtri_loop:
|
||||||
|
ldy #0
|
||||||
|
ldx VGI_VX
|
||||||
|
lda VGI_VY
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
ldy VGI_TYB
|
||||||
|
lda VGI_TXL
|
||||||
|
|
||||||
|
jsr HGLIN ; line to (X,A),(Y)
|
||||||
|
|
||||||
|
lda VGI_TXL
|
||||||
|
clc
|
||||||
|
adc SKIP
|
||||||
|
sta VGI_TXL
|
||||||
|
; inc VGI_TXL
|
||||||
|
; lda VGI_TXL
|
||||||
|
cmp VGI_TXR
|
||||||
|
bcc vtri_loop
|
||||||
|
|
||||||
|
done_vtri:
|
||||||
|
jmp vgi_loop ; bra
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;========================
|
||||||
|
; VGI horizontal triangle
|
||||||
|
;========================
|
||||||
|
|
||||||
|
; VGI_TCOLOR = P0
|
||||||
|
; VGI_VX = P1
|
||||||
|
; VGI_VY = P2
|
||||||
|
VGI_THYT = P3
|
||||||
|
VGI_THYB = P4
|
||||||
|
VGI_THXR = P5
|
||||||
|
|
||||||
|
vgi_horizontal_triangle:
|
||||||
|
|
||||||
|
ldx VGI_TCOLOR
|
||||||
|
lda COLORTBL,X
|
||||||
|
sta HGR_COLOR
|
||||||
|
|
||||||
|
htri_loop:
|
||||||
|
ldy #0
|
||||||
|
ldx VGI_VX
|
||||||
|
lda VGI_VY
|
||||||
|
|
||||||
|
jsr HPLOT0 ; plot at (Y,X), (A)
|
||||||
|
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
ldy VGI_THYT
|
||||||
|
lda VGI_THXR
|
||||||
|
|
||||||
|
jsr HGLIN ; line to (X,A),(Y)
|
||||||
|
|
||||||
|
inc VGI_THYT
|
||||||
|
lda VGI_THYT
|
||||||
|
cmp VGI_THYB
|
||||||
|
bcc htri_loop
|
||||||
|
|
||||||
|
done_htri:
|
||||||
|
jmp vgi_loop
|
||||||
|
|
|
@ -2,8 +2,31 @@
|
||||||
|
|
||||||
;; LZSA addresses
|
;; LZSA addresses
|
||||||
NIBCOUNT = $00
|
NIBCOUNT = $00
|
||||||
|
|
||||||
APPLEII_MODEL = $01
|
APPLEII_MODEL = $01
|
||||||
|
|
||||||
|
VGI_BUFFER = $02
|
||||||
|
VGI_TYPE = $02
|
||||||
|
P0 = $03
|
||||||
|
P1 = $04
|
||||||
|
P2 = $05
|
||||||
|
P3 = $06
|
||||||
|
P4 = $07
|
||||||
|
P5 = $08
|
||||||
|
VGIL = $09
|
||||||
|
VGIH = $0A
|
||||||
|
|
||||||
|
TEMP0 = $10
|
||||||
|
TEMP1 = $11
|
||||||
|
TEMP2 = $12
|
||||||
|
TEMP3 = $13
|
||||||
|
TEMP4 = $14
|
||||||
|
TEMP5 = $15
|
||||||
|
|
||||||
|
HGR_SHAPE = $1A ; also used in BKGND0
|
||||||
|
HGR_SHAPE2 = $1B
|
||||||
|
HGR_BITS = $1C
|
||||||
|
|
||||||
;; Zero page monitor routines addresses
|
;; Zero page monitor routines addresses
|
||||||
|
|
||||||
WNDLFT = $20
|
WNDLFT = $20
|
||||||
|
@ -296,15 +319,24 @@ SOUND_STATUS = $DE
|
||||||
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
|
SOUND_MOCKINGBOARD = $02 ; mockingboard detected
|
||||||
|
|
||||||
GRID_PAGE = $DF
|
GRID_PAGE = $DF
|
||||||
ANIMATE_FRAME = $E0
|
|
||||||
LEVEL_OVER = $E1
|
|
||||||
LOCATIONS_L = $E2
|
; HGR routines (ROM)
|
||||||
LOCATIONS_H = $E3
|
HGR_X = $E0
|
||||||
|
HGR_XH = $E1
|
||||||
|
HGR_Y = $E2
|
||||||
|
HGR_COLOR = $E4
|
||||||
|
HGR_PAGE = $E6
|
||||||
|
|
||||||
|
ANIMATE_FRAME = $E8
|
||||||
|
LEVEL_OVER = $E9
|
||||||
|
LOCATIONS_L = $EA
|
||||||
|
LOCATIONS_H = $EB
|
||||||
|
|
||||||
; temp var per-world define
|
; temp var per-world define
|
||||||
LONG_FRAME = $E4 ; nibel
|
LONG_FRAME = $EC ; nibel
|
||||||
CURRENT_DISPLAY = $E4 ; selena
|
CURRENT_DISPLAY = $EC ; selena
|
||||||
LAST_PLAYED = $E4 ; selena
|
LAST_PLAYED = $EC ; selena
|
||||||
|
|
||||||
DISP_PAGE = $ED ; ALL
|
DISP_PAGE = $ED ; ALL
|
||||||
DRAW_PAGE = $EE ; ALL
|
DRAW_PAGE = $EE ; ALL
|
||||||
|
|
|
@ -40,9 +40,7 @@ static int output_bytes(int mode, unsigned char *bytes, int count) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for(i=0;i<count;i++) {
|
fwrite(bytes,1,count,stdout);
|
||||||
fwrite(bytes,1,count,stdout);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
; VGI_Circles
|
; VGI_Circles
|
||||||
|
|
||||||
|
|
||||||
XX = $70
|
XX = TEMP0
|
||||||
MINUSXX = $71
|
MINUSXX = TEMP1
|
||||||
YY = $72
|
YY = TEMP2
|
||||||
MINUSYY = $73
|
MINUSYY = TEMP3
|
||||||
D = $74
|
D = TEMP4
|
||||||
COUNT = $75
|
COUNT = TEMP5
|
||||||
|
|
||||||
;========================
|
;========================
|
||||||
; VGI circle
|
; VGI circle
|
||||||
|
|
|
@ -17,7 +17,7 @@ data_smc:
|
||||||
cpy #VGI_MAXLEN
|
cpy #VGI_MAXLEN
|
||||||
bne data_smc
|
bne data_smc
|
||||||
|
|
||||||
lda TYPE
|
lda VGI_TYPE
|
||||||
and #$f
|
and #$f
|
||||||
|
|
||||||
clc
|
clc
|
||||||
|
@ -27,7 +27,7 @@ data_smc:
|
||||||
inc VGIH
|
inc VGIH
|
||||||
no_oflo:
|
no_oflo:
|
||||||
|
|
||||||
lda TYPE
|
lda VGI_TYPE
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
|
|
|
@ -2,18 +2,9 @@
|
||||||
|
|
||||||
; VGI Rectangle test
|
; VGI Rectangle test
|
||||||
|
|
||||||
HGR_BITS = $1C
|
COLOR_MODE = TEMP0
|
||||||
|
OTHER_MASK = TEMP1
|
||||||
GBASL = $26
|
XRUN = TEMP2
|
||||||
GBASH = $27
|
|
||||||
|
|
||||||
COLOR_MODE = $72
|
|
||||||
OTHER_MASK = $73
|
|
||||||
XRUN = $74
|
|
||||||
;COUNT = $75
|
|
||||||
|
|
||||||
;HGR_COLOR = $E4
|
|
||||||
|
|
||||||
|
|
||||||
div7_table = $9000
|
div7_table = $9000
|
||||||
mod7_table = $9100
|
mod7_table = $9100
|
||||||
|
@ -417,7 +408,9 @@ vgi_vstripe_rectangle:
|
||||||
; make /7 %7 tables
|
; make /7 %7 tables
|
||||||
;=====================
|
;=====================
|
||||||
|
|
||||||
make_tables:
|
vgi_init:
|
||||||
|
|
||||||
|
vgi_make_tables:
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
lda #0
|
lda #0
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
; VGI Triangles
|
; VGI Triangles
|
||||||
|
|
||||||
SKIP = $70
|
SKIP = TEMP0
|
||||||
|
|
||||||
;========================
|
;========================
|
||||||
; VGI vertical triangle
|
; VGI vertical triangle
|
||||||
|
|
|
@ -1,7 +1,19 @@
|
||||||
; zero page
|
; zero page
|
||||||
|
|
||||||
|
TEMP0 = $10
|
||||||
|
TEMP1 = $11
|
||||||
|
TEMP2 = $12
|
||||||
|
TEMP3 = $13
|
||||||
|
TEMP4 = $14
|
||||||
|
TEMP5 = $15
|
||||||
|
|
||||||
;; Zero page addresses
|
;; Zero page addresses
|
||||||
|
|
||||||
|
HGR_BITS = $1C
|
||||||
|
|
||||||
|
GBASL = $26
|
||||||
|
GBASH = $27
|
||||||
|
|
||||||
ORNAMENT_L = $60
|
ORNAMENT_L = $60
|
||||||
ORNAMENT_H = $61
|
ORNAMENT_H = $61
|
||||||
SAMPLE_L = $62
|
SAMPLE_L = $62
|
||||||
|
@ -42,9 +54,10 @@ HGR_X = $E0
|
||||||
HGR_XH = $E1
|
HGR_XH = $E1
|
||||||
HGR_Y = $E2
|
HGR_Y = $E2
|
||||||
HGR_COLOR = $E4
|
HGR_COLOR = $E4
|
||||||
|
HGR_PAGE = $E6
|
||||||
|
|
||||||
VGI_BUFFER = $F0
|
VGI_BUFFER = $F0
|
||||||
TYPE = $F0
|
VGI_TYPE = $F0
|
||||||
P0 = $F1
|
P0 = $F1
|
||||||
P1 = $F2
|
P1 = $F2
|
||||||
P2 = $F3
|
P2 = $F3
|
||||||
|
|
Loading…
Reference in New Issue