Dedupe icon masks using explicit pointers

This commit is contained in:
Joshua Bell 2019-01-01 11:55:10 -08:00
parent 39bf5c771a
commit 0c44a6e073
2 changed files with 33 additions and 106 deletions

View File

@ -26,6 +26,7 @@ graphics_icon:
.byte px(%1001111),px(%1111111),px(%1111111),px(%1111001)
.byte px(%1000000),px(%0000000),px(%0000000),px(%0000001)
.byte px(%1111111),px(%1111111),px(%1111111),px(%1111111)
graphics_mask:
.byte px(%1111111),px(%1111111),px(%1111111),px(%1111111)
.byte px(%1111111),px(%1111111),px(%1111111),px(%1111111)
@ -58,25 +59,6 @@ aw_wp_icon:
.byte px(%0100000),px(%0000000),px(%0000000),px(%0000010)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
;; TODO: Dedupe these document masks by making icon bitmap
;; entries explicitly link to masks.
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1100000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
aw_ss_icon:
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0100000),px(%0000000),px(%0001011),px(%0000000)
@ -95,23 +77,6 @@ aw_ss_icon:
.byte px(%0100000),px(%0000000),px(%0000000),px(%0000010)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1100000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
aw_db_icon:
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0100000),px(%0000000),px(%0001011),px(%0000000)
@ -130,25 +95,6 @@ aw_db_icon:
.byte px(%0100000),px(%0000000),px(%0000000),px(%0000010)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1100000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
PAD_TO $8800
;;; ============================================================
@ -1720,25 +1666,32 @@ L9F9F: copy #$80, L9F92
lda L9F92
ora #$40
sta L9F92
;; copy icon coords and bits
;; copy icon entry coords and bits
: ldy #IconEntry::iconx
: lda ($06),y
sta icon_paintbits_params::viewloc-IconEntry::iconx,y
sta mask_paintbits_params::viewloc-IconEntry::iconx,y
iny
cpy #IconEntry::iconx + 6 ; x/y/bits
bne :-
jsr push_pointers
;; copy icon definition bits
copy16 icon_paintbits_params::mapbits, $08
ldy #11
ldy #.sizeof(MGTK::MapInfo) - .sizeof(MGTK::Point) - 1
: lda ($08),y
sta icon_paintbits_params::mapbits,y
sta mask_paintbits_params::mapbits,y
dey
bpl :-
bit L9F92
bpl :+
jsr prepare_mask_params
;; Icon definition is followed by pointer to mask address.
;; NOTE: For volume icons, this is random data, but it is unused.
ldy #.sizeof(MGTK::MapInfo) - .sizeof(MGTK::Point)
copy16in ($08),y, mask_paintbits_params::mapbits
: jsr pop_pointers
ldy #9
@ -1828,24 +1781,6 @@ setbg: sta settextbg_params
;;; ============================================================
.proc prepare_mask_params
COPY_BLOCK icon_paintbits_params, mask_paintbits_params
;; Calculate address of mask bitmap
ldy mask_paintbits_params::maprect::y2
loop: lda mask_paintbits_params::mapwidth
clc
adc mask_paintbits_params::mapbits
sta mask_paintbits_params::mapbits
bcc :+
inc mask_paintbits_params::mapbits+1
: dey
bpl loop
rts
.endproc
;;; ============================================================
.proc LA14D
ldx #0
loop: add16 icon_paintbits_params::viewloc::xcoord,x, icon_paintbits_params::maprect::x1,x, paintrect_params6::x1,x
@ -1866,6 +1801,8 @@ loop: add16 icon_paintbits_params::viewloc::xcoord,x, icon_paintbits_params:
.endproc
PAD_TO $A182
;;; ============================================================
;;; v0 v1

View File

@ -1470,25 +1470,28 @@ type_deltay_table:
.byte 2, 2, 2
.byte 0
.macro DEFICON mapbits, mapwidth, x1, y1, x2, y2
.macro DEFICON mapbits, mapwidth, x1, y1, x2, y2, maskbits
;; First part is MGTK::MapInfo without leading viewloc
.addr mapbits
.byte mapwidth
.byte 0 ; reserved
.word x1, y1, x2, y2
;; Next part is link to mask
.addr maskbits
.endmacro
gen: DEFICON generic_icon, 4, 0, 0, 27, 15
gen: DEFICON generic_icon, 4, 0, 0, 27, 15, generic_mask
src:
txt: DEFICON text_icon, 4, 0, 0, 27, 15
bin: DEFICON binary_icon, 4, 0, 0, 27, 14
dir: DEFICON folder_icon, 4, 0, 0, 27, 11
sys: DEFICON sys_icon, 4, 0, 0, 27, 17
bas: DEFICON basic_icon, 4, 0, 0, 27, 14
fot: DEFICON desktop_aux::graphics_icon, 4, 0, 0, 27, 11
aw_db: DEFICON desktop_aux::aw_db_icon, 4, 0, 0, 27, 15
aw_wp: DEFICON desktop_aux::aw_wp_icon, 4, 0, 0, 27, 15
aw_ss: DEFICON desktop_aux::aw_ss_icon, 4, 0, 0, 27, 15
app: DEFICON app_icon, 5, 0, 0, 34, 16
txt: DEFICON text_icon, 4, 0, 0, 27, 15, generic_mask
bin: DEFICON binary_icon, 4, 0, 0, 27, 14, binary_mask
dir: DEFICON folder_icon, 4, 0, 0, 27, 11, folder_mask
sys: DEFICON sys_icon, 4, 0, 0, 27, 17, sys_mask
bas: DEFICON basic_icon, 4, 0, 0, 27, 14, basic_mask
fot: DEFICON desktop_aux::graphics_icon, 4, 0, 0, 27, 11, desktop_aux::graphics_mask
aw_db: DEFICON desktop_aux::aw_db_icon, 4, 0, 0, 27, 15, generic_mask
aw_wp: DEFICON desktop_aux::aw_wp_icon, 4, 0, 0, 27, 15, generic_mask
aw_ss: DEFICON desktop_aux::aw_ss_icon, 4, 0, 0, 27, 15, generic_mask
app: DEFICON app_icon, 5, 0, 0, 34, 16, app_mask
;;; Generic
@ -1510,6 +1513,7 @@ generic_icon:
.byte px(%0100000),px(%0000000),px(%0000000),px(%0000010)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
;; Generic mask is re-used for multiple "document" types
generic_mask:
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%0000000)
@ -1548,24 +1552,6 @@ text_icon:
.byte px(%0100000),px(%0000000),px(%0000000),px(%0000010)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
text_mask:
.byte px(%0111111),px(%1111111),px(%1111100),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%0000000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1100000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111000)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
.byte px(%0111111),px(%1111111),px(%1111111),px(%1111110)
;;; Binary
binary_icon:
@ -1586,6 +1572,7 @@ binary_icon:
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
binary_mask:
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
.byte px(%0000000),px(%0000111),px(%1110000),px(%0000000)
.byte px(%0000000),px(%0011111),px(%1111100),px(%0000000)
@ -1599,6 +1586,7 @@ binary_mask:
.byte px(%0000000),px(%0011111),px(%1111100),px(%0000000)
.byte px(%0000000),px(%0000111),px(%1110000),px(%0000000)
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
;;; Folder
folder_icon:
@ -1691,6 +1679,7 @@ basic_icon:
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
basic_mask:
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
.byte px(%0000000),px(%0000111),px(%1110000),px(%0000000)
.byte px(%0000000),px(%0011111),px(%1111100),px(%0000000)
@ -1704,6 +1693,7 @@ basic_mask:
.byte px(%0000000),px(%0011111),px(%1111100),px(%0000000)
.byte px(%0000000),px(%0000111),px(%1110000),px(%0000000)
.byte px(%0000000),px(%0000001),px(%1000000),px(%0000000)
.byte px(%0000000),px(%0000000),px(%0000000),px(%0000000)
;;; System (with .SYSTEM suffix)