diff --git a/src/asm/asmy.y b/src/asm/asmy.y index cebca0a0..cac9b637 100644 --- a/src/asm/asmy.y +++ b/src/asm/asmy.y @@ -806,13 +806,16 @@ ds : T_POP_DS uconst { out_Skip( $2 ); } ; -db : T_POP_DB constlist_8bit +db : T_POP_DB constlist_8bit_entry ',' constlist_8bit + | T_POP_DB constlist_8bit_entry_single ; -dw : T_POP_DW constlist_16bit +dw : T_POP_DW constlist_16bit_entry ',' constlist_16bit + | T_POP_DW constlist_16bit_entry_single ; -dl : T_POP_DL constlist_32bit +dl : T_POP_DL constlist_32bit_entry ',' constlist_32bit + | T_POP_DL constlist_32bit_entry_single ; purge : T_POP_PURGE @@ -1000,6 +1003,18 @@ constlist_8bit_entry : /* empty */ { } ; +constlist_8bit_entry_single : /* empty */ { + out_Skip( 1 ); + } | const_8bit { + out_RelByte( &$1 ); + } | string { + char *s = $1; + int length = charmap_Convert(&s); + out_AbsByteGroup(s, length); + free(s); + } +; + constlist_16bit : constlist_16bit_entry | constlist_16bit_entry ',' constlist_16bit ; @@ -1013,6 +1028,13 @@ constlist_16bit_entry : /* empty */ { } ; +constlist_16bit_entry_single : /* empty */ { + out_Skip( 2 ); + } | const_16bit { + out_RelWord( &$1 ); + } +; + constlist_32bit : constlist_32bit_entry | constlist_32bit_entry ',' constlist_32bit ; @@ -1026,6 +1048,13 @@ constlist_32bit_entry : /* empty */ { } ; +constlist_32bit_entry_single : /* empty */ { + out_Skip( 4 ); + } | relocconst { + out_RelLong( &$1 ); + } +; + const_PCrel : relocconst { $$ = $1; diff --git a/src/asm/rgbasm.5 b/src/asm/rgbasm.5 index f4051afb..f25d5696 100644 --- a/src/asm/rgbasm.5 +++ b/src/asm/rgbasm.5 @@ -598,7 +598,7 @@ allocates a number of bytes. The content is undefined. This is the preferred method of allocationg space in a RAM section. You can, however, use -.Ic DB , +.Ic DB , .Ic DW and .Ic DL