The .byte, .word, .dword and .text directives are used to generate byte, word (one word= two bytes), dword (double word = 4 bytes) and text data as in standard 65xx assemblers.
.byte 1,2,3,4 // Generates the bytes 1,2,3,4 .word $2000,$1234 // Generates the bytes $00,$20,$34,$12 .dword $12341234 // Generates the bytes $34,$12,$34,$12 .text "Hello World"
You can use .by, .wo and .dw as aliases for .byte, .word and .dword, so '.by $10' is the same as '.byte $10'.
With the .fill directive you can fill a section of the memory with bytes. It works like a loop and automatically sets the variable i to the iteration number.
// Nomal filling .fill 5, 0 // Generates byte 0,0,0,0,0 .fill 5, i // Generates byte 0,1,2,3,4 .fill 256, 127.5 + 127.5*sin(toRadians(i*360/256)) // Generates a sine curve // Use [,,] to fill with a repeat pattern .fill 4, [$10,$20] // Generates .byte $10,$20,$10,$20,$10,$20,$10,$20 .fill 3, ['D','E','M','O','!'] // Generates the same bytes as .text "DEMO!DEMO!DEMO!" .fill 3, [i,i*$10] // Generates .byte 0,0,1,$10,2,$20 // .fillword is like .fill but with .word directives .fillword 5,i*$80 // Generates .word $0000,$0080,$0100,$0180,$0200 .fillword 2,[$100,0] // Generates .word $0100,$0000,$0100,$0000
In most cases it is more desirable to have two lists, one with low byte and one with high byte, than a word list. To generate this you can use the .lohifill directive. It generates the two list right after each each other and lets your access them using a hi/lo field on a connected label like this:
ldx #20 // ychar coord ldy #15 // xchar coord clc lda mul40.lo,x // Access lo byte table sta $fe lda mul40.hi,x // Access hi byte table ora #$04 sta $ff lda #'x' sta ($fe),y // Draws 'x' at screenpos x,y rts mul40: .lohifill $100, 40*i // Generates lo/hi table: // .byte <0, <40, <80, <120, .... // .byte >0, >40, >80, >120, ....
Generating bytes using the fill directive will compile faster than generating byte using the .for and .byte directives. (The .for directive will be explained later.)