pokered/macros.asm

368 lines
6.9 KiB
NASM
Raw Normal View History

2013-12-05 06:25:12 +00:00
text EQUS "db $00," ; Start writing text.
next EQUS "db $4e," ; Move a line down.
line EQUS "db $4f," ; Start writing at the bottom line.
para EQUS "db $51," ; Start a new paragraph.
cont EQUS "db $55," ; Scroll to the next line.
done EQUS "db $57" ; End a text box.
prompt EQUS "db $58" ; Prompt the player to end a text box (initiating some other event).
page EQUS "db $49," ; Start a new Pokedex page.
dex EQUS "db $5f, $50" ; End a Pokedex entry.
callba: MACRO
ld b, BANK(\1)
ld hl, \1
call Bankswitch
ENDM
callab: MACRO
ld hl, \1
ld b, BANK(\1)
call Bankswitch
ENDM
2013-12-05 06:25:12 +00:00
;\1 = X
;\2 = Y
FuncCoord: MACRO
Coord = $C3A0 + 20 * \2 + \1
ENDM
;\1 = Map Width
;\2 = Rows above (Y-blocks)
;\3 = X movement (X-blocks)
EVENT_DISP: MACRO
dw ($C6EF + (\1) + ((\1) + 6) * ((\2) >> 1) + ((\3) >> 1)) ; Ev.Disp
db \2,\3 ;Y,X
ENDM
FLYWARP_DATA: MACRO
EVENT_DISP \1,\2,\3
db ((\2) & $01) ;sub-block Y
db ((\3) & $01) ;sub-block X
ENDM
; external map entry macro
EMAP: MACRO ; emap x-coordinate,y-coordinate,textpointer
; the appearance of towns and routes in the town map, indexed by map id
; nybble: y-coordinate
; nybble: x-coordinate
; word : pointer to map name
db (\1 + (\2 << 4))
dw \3
ENDM
; internal map entry macro
IMAP: MACRO ; imap mapid_less_than,x-coordinate,y-coordinate,textpointer
; the appearance of buildings and dungeons in the town map
; byte : maximum map id subject to this rule
; nybble: y-coordinate
; nybble: x-coordinate
; word : pointer to map name
db \1
db \2 + \3 << 4
dw \4
ENDM
; tilesets' headers macro
tileset: MACRO
db BANK(\2) ; BANK(GFX)
dw \1, \2, \3 ; Block, GFX, Coll
db \4, \5, \6 ; counter tiles
db \7 ; grass tile
db \8 ; permission (indoor, cave, outdoor)
2013-12-05 06:25:12 +00:00
ENDM
INDOOR EQU 0
CAVE EQU 1
OUTDOOR EQU 2
2013-12-05 06:25:12 +00:00
; macro for two nibbles
dn: MACRO
db (\1 << 4 | \2)
ENDM
; macro for putting a byte then a word
dbw: MACRO
db \1
dw \2
ENDM
; data format macros
RGB: MACRO
dw (\3 << 10 | \2 << 5 | \1)
ENDM
; text macros
TX_NUM: MACRO
; print a big-endian decimal number.
; \1: address to read from
; \2: number of bytes to read
; \3: number of digits to display
db $09
dw \1
db \2 << 4 | \3
ENDM
TX_FAR: MACRO
db $17
dw \1
db BANK(\1)
ENDM
; text engine command $1
TX_RAM: MACRO
; prints text to screen
; \1: RAM address to read from
db $1
dw \1
ENDM
; Predef macro.
PREDEF: MACRO
ld a, (\1 - PredefPointers) / 3
call Predef
ENDM
PREDEF_JUMP: MACRO
ld a, (\1 - PredefPointers) / 3
jp Predef
ENDM
;1_channel EQU $00
;2_channels EQU $40
;3_channels EQU $80
;4_channels EQU $C0
CH0 EQU 0
CH1 EQU 1
CH2 EQU 2
CH3 EQU 3
CH4 EQU 4
CH5 EQU 5
CH6 EQU 6
CH7 EQU 7
;Note Pitch
C_ EQU $0
C# EQU $1
D_ EQU $2
D# EQU $3
E_ EQU $4
F_ EQU $5
F# EQU $6
G_ EQU $7
G# EQU $8
A_ EQU $9
A# EQU $A
B_ EQU $B
;drum instruments
snare1 EQU $01
snare2 EQU $02
snare3 EQU $03
snare4 EQU $04
snare5 EQU $05
triangle1 EQU $06
triangle2 EQU $07
snare6 EQU $08
snare7 EQU $09
snare8 EQU $0a
snare9 EQU $0b
cymbal1 EQU $0c
cymbal2 EQU $0d
cymbal3 EQU $0e
mutedsnare1 EQU $0f
triangle3 EQU $10
mutedsnare2 EQU $11
mutedsnare3 EQU $12
mutedsnare4 EQU $13
unknownsfx0x10: MACRO
db $10
db \1
ENDM
unknownsfx0x20: MACRO
db $20 | \1
db \2
db \3
db \4
ENDM
unknownnoise0x20: MACRO
db $20 | \1
db \2
db \3
ENDM
;format: note pitch, length (in 16ths)
note: MACRO
db (\1 << 4) | (\2 - 1)
ENDM
;format: dnote length (in 16ths), instrument
dnote: MACRO
db $B0 | (\1 - 1)
db \2
ENDM
;format: rest length (in 16ths)
rest: MACRO
db $C0 | (\1 - 1)
ENDM
; format: notetype speed, volume, fade
notetype: MACRO
db $D0 | \1
db (\2 << 4) | \3
ENDM
dspeed: MACRO
db $D0 | \1
ENDM
octave: MACRO
db $E8 - \1
ENDM
togglecall: MACRO
db $E8
ENDM
;format: vibrato delay, rate, depth
vibrato: MACRO
db $EA
db \1
db (\2 << 4) | \3
ENDM
pitchbend: MACRO
db $EB
db \1
db \2
ENDM
duty: MACRO
db $EC
db \1
ENDM
tempo: MACRO
db $ED
db \1
db \2
ENDM
unknownmusic0xee: MACRO
db $EE
db \1
ENDM
stereopanning: MACRO
db $F0
db \1
ENDM
executemusic: MACRO
db $F8
ENDM
dutycycle: MACRO
db $FC
db \1
ENDM
;format: callchannel address
;callchannel: MACRO
; db $FD
; dw \1
;ENDM
;format: loopchannel count, address
;loopchannel: MACRO
; db $FE
; db \1
; dw \2
;ENDM
endchannel: MACRO
db $FF
ENDM
2013-12-21 00:47:05 +00:00
;\1 (byte) = connected map id
;\2 (byte) = connected map width
;\3 (byte) = connected map height
;\4 (byte) = x movement of connection strip
;\5 (byte) = connection strip offset
;\6 (byte) = width of connection strip
;\7 (word) = connected map blocks pointer
NORTH_MAP_CONNECTION: MACRO
db \1 ; map id
dw \7 + (\2 * (\3 - 3)) + \5; "Connection Strip" location
dw $C6EB + \4 ; current map position
db \6 ; width of connection strip
db \2 ; map width
db (\3 * 2) - 1 ; y alignment (y coordinate of player when entering map)
db (\4 - \5) * -2 ; x alignment (x coordinate of player when entering map)
dw $C6E9 + (\3 * (\2 + 6)) ; window (position of the upper left block after entering the map)
ENDM
;\1 (byte) = connected map id
;\2 (byte) = connected map width
;\3 (byte) = x movement of connection strip
;\4 (byte) = connection strip offset
;\5 (byte) = width of connection strip
;\6 (word) = connected map blocks pointer
;\7 (byte) = current map width
;\8 (byte) = current map height
SOUTH_MAP_CONNECTION: MACRO
db \1 ; map id
dw \6 + \4 ; "Conection Strip" location
dw $C6EB + (\8 + 3) * (\7 + 6) + \3 ; current map positoin
db \5 ; width of connection strip
db \2 ; map width
db 0 ; y alignment (y coordinate of player when entering map)
db (\3 - \4) * -2 ; x alignment (x coordinate of player when entering map)
dw $C6EF + \2 ; window (position of the upper left block after entering the map)
ENDM
;\1 (byte) = connected map id
;\2 (byte) = connected map width
;\3 (byte) = y movement of connection strip
;\4 (byte) = connection strip offset
;\5 (byte) = height of connection strip
;\6 (word) = connected map blocks pointer
;\7 (byte) = current map width
EAST_MAP_CONNECTION: MACRO
db \1 ; map id
dw \6 + (\2 * \4) ; "Connection Strip" location
dw $C6E5 + (\7 + 6) * (\3 + 4) ; current map position
db \5 ; height of connection strip
db \2 ; map width
db (\3 - \4) * -2 ; y alignment
db 0 ; x alignment
dw $C6EF + \2 ; window (position of the upper left block after entering the map)
ENDM
;\1 (byte) = connected map id
;\2 (byte) = connected map width
;\3 (byte) = y movement of connection strip
;\4 (byte) = connection strip offset
;\5 (byte) = height of connection strip
;\6 (word) = connected map blocks pointer
;\7 (byte) = current map width
WEST_MAP_CONNECTION: MACRO
db \1 ; map id
dw \6 + (\2 * \4) + \2 - 3 ; "Connection Strip" location
dw $C6E8 + (\7 + 6) * (\3 + 3) ; current map position
db \5 ; height of connection strip
db \2 ; map width
db (\3 - \4) * -2 ; y alignment
db (\2 * 2) - 1 ; x alignment
dw $C6EE + (2 * \2) ; window (position of the upper left block after entring the map)
ENDM