add new loader

This commit is contained in:
optixx 2009-10-16 07:25:18 +02:00
parent cfceee4db3
commit ec555efafd
7 changed files with 1410 additions and 100 deletions

View File

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>currentDocument</key>
<string>avr/usbload/shell.c</string>
<string>avr/usbload/main.c</string>
<key>documents</key>
<array>
<dict>
@ -28,12 +28,28 @@
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>141</integer>
<integer>88</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>94</integer>
<integer>56</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>56</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>88</integer>
</dict>
</dict>
<key>avr/usbload/command.h</key>
<dict>
@ -138,30 +154,14 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>10</integer>
<integer>1</integer>
<key>line</key>
<integer>53</integer>
<integer>62</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>25</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>5</integer>
<key>line</key>
<integer>53</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>22</integer>
<key>line</key>
<integer>53</integer>
</dict>
<integer>24</integer>
</dict>
<key>avr/usbload/irq.h</key>
<dict>
@ -198,9 +198,9 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>80</integer>
<integer>0</integer>
<key>line</key>
<integer>18</integer>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
@ -214,26 +214,42 @@
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>74</integer>
<integer>299</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>46</integer>
<integer>190</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>292</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>299</integer>
</dict>
</dict>
<key>avr/usbload/pwm.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>25</integer>
<integer>0</integer>
<key>line</key>
<integer>32</integer>
<integer>100</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>20</integer>
<integer>33</integer>
</dict>
<key>avr/usbload/pwm.h</key>
<dict>
@ -254,14 +270,14 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>20</integer>
<integer>0</integer>
<key>line</key>
<integer>56</integer>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>9</integer>
<integer>13</integer>
</dict>
<key>avr/usbload/rle.c</key>
<dict>
@ -312,30 +328,14 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<integer>14</integer>
<key>line</key>
<integer>70</integer>
<integer>235</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>61</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>64</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>70</integer>
</dict>
<integer>210</integer>
</dict>
<key>avr/usbload/shared_memory.h</key>
<dict>
@ -358,12 +358,12 @@
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>43</integer>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>30</integer>
<integer>289</integer>
</dict>
<key>avr/usbload/shell.h</key>
<dict>
@ -384,30 +384,56 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>22</integer>
<integer>9</integer>
<key>line</key>
<integer>287</integer>
<integer>36</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>215</integer>
<key>selectFrom</key>
<integer>3</integer>
</dict>
<key>avr/usbload/sram.h</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>5</integer>
<integer>9</integer>
<key>line</key>
<integer>287</integer>
<integer>198</integer>
</dict>
<key>selectTo</key>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>178</integer>
</dict>
<key>avr/usbload/system.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>31</integer>
<integer>0</integer>
<key>line</key>
<integer>287</integer>
<integer>85</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>48</integer>
</dict>
<key>avr/usbload/system.h</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>25</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>avr/usbload/timer.c</key>
<dict>
@ -456,30 +482,14 @@
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<integer>14</integer>
<key>line</key>
<integer>43</integer>
<integer>71</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>16</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>42</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>43</integer>
</dict>
<integer>36</integer>
</dict>
<key>avr/usbload/usb_bulk.h</key>
<dict>
@ -579,6 +589,48 @@
<key>firstVisibleLine</key>
<integer>211</integer>
</dict>
<key>tools/qdinc/opendevice.h</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>tools/qdinc/qdinc.c</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>26</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>15</integer>
</dict>
<key>tools/qdinc/qdinc.h</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>3</integer>
</dict>
<key>tools/ucon64/src/backup/quickdev16.c</key>
<dict>
<key>caret</key>
@ -642,6 +694,11 @@
<array>
<string>avr/usbload/sram.c</string>
<string>avr/usbload/main.c</string>
<string>tools/qdinc/qdinc.c</string>
<string>tools/qdinc/opendevice.h</string>
<string>tools/qdinc/qdinc.h</string>
<string>avr/usbload/system.h</string>
<string>avr/usbload/sram.h</string>
<string>avr/usbload/usb_bulk.c</string>
<string>avr/usbload/usbconfig.h</string>
<string>avr/usbload/requests.h</string>
@ -658,6 +715,7 @@
<string>scripts/check_rle.py</string>
<string>avr/usbload/pwm.h</string>
<string>avr/usbload/shared_memory.c</string>
<string>avr/usbload/system.c</string>
<string>avr/usbload/command.c</string>
<string>avr/usbload/command.h</string>
<string>avr/usbload/irq.c</string>
@ -715,28 +773,19 @@
<true/>
<key>subItems</key>
<dict>
<key>qdinc</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict/>
</dict>
<key>ucon64</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict>
<key>src</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict>
<key>console</key>
<dict>
<key>isExpanded</key>
<true/>
<key>subItems</key>
<dict/>
</dict>
</dict>
</dict>
</dict>
<dict/>
</dict>
</dict>
</dict>

26
snes/qd16/makefile Executable file
View File

@ -0,0 +1,26 @@
# 65816 stuff
ROMFILE = qd16boot.smc
VPATH = routines/
AC = wla-65816
AFLAGS = -o
LD = wlalink
LDFLAGS = -vdsr
FL = snesflash
FLFLAGS = -wf
sources := $(wildcard routines/*.asm)
objects := $(patsubst %.asm,%.o,$(sources))
linkfile := linkobjs.lst
all: $(objects)
$(LD) $(LDFLAGS) $(linkfile) $(ROMFILE)
$(objects): $(sources)
$(AC) $(AFLAGS) $(patsubst %.o,%.asm,$@) $@
flash:
$(FL) $(FLFLAGS) $(ROMFILE)
clean:
rm -f $(ROMFILE) $(objects) core *~ *.sym *.srm

321
snes/qd16/routines/defines.h Executable file
View File

@ -0,0 +1,321 @@
; .include "routines/main.h"
;*************************************************************************
.define DEBUG 1 ;enable debugmenu
;*************************************************************************
.define BaseAdress $7f0000
.define HEADER_OFF $8000
;*************************************************************************
;spc interface definitions:
.define SpcFrameSize 144
.define SpcFramesPerBank 455
.define SpcCmdUploadSong $f1 ;indicates that a song is to be uploaded
.define SpcCmdUploadSongT1 $f2 ;indicates that data for transfer1 is on apu ports
.define SpcCmdUploadSongT2 $f3 ;indicates that data for transfer2 is on apu ports
.define SpcCmdUploadSongDone $f4 ;indicates that song upload is complete
.define SpcCmdReceiveStream $f5 ;indicates that 65816 wants to stream brr data to spc
.define SpcCmdSubmitStreamNumber $f7 ;indicates that hdma transfer has started. It's important that bit0 of this command is set.(brr end bit)
.define SpcCmdReceiveStreamComplete $f6 ;spc wants to end stream transmission.
.define SpcCmdUploadSamplePack $f8 ;indicates that a sample pack is to be uploaded. the rest of the commands are taken from normal song upload
.define SpcCmdUploadSamplePackDone $f9 ;indicates that sample pack upload is complete
.define SpcCmdPlaySoundEffect $fa ;play a sound effect
.define SpcCmdStopSong $fb ;stop song or stream
.define SpcCmdSetSongSpeed $fc ;set timer speed of mod playback routine
.define SpcCmdSetSongChMask $fd ;song channel mask
.define SpcCmdReportType $fe ;type of data spc should respond with
.define SpcScanlineWaitCount 5 ;amount of scanlines to wait before frame send
;spc fifo commands for other routines to write to
.define SpcFifoCmdUploadSong $02 ;arg 0 is song number
.define SpcFifoCmdUploadSamplePack $04 ;arg 0 is song number
.define SpcFifoCmdStreamBrr $06 ;arg 0 is stream frameset number
.define SpcFifoCmdPlaySE $08 ;arg 0 is stream frameset number
.define SpcFifoCmdStopSong $0a ;arg 0 is stream frameset number
.define SpcFifoCmdSetSpeed $0c ;arg 0 is speed
.define SpcFifoCmdSetChMask $0e ;arg 0 is mask
.define SpcFifoCmdSetReportType $10 ;arg 0 is mask, arg 1 used for some report types(instruments etc)
;*************************************************************************
;*************************************************************************
;background settings
.define FontVramOffset $2500 ;$2800 ;vram offset of the font, starting tile index is $180
.define FontTileConfig $20 ;priority bit set, tiles $100+, palette 1
.define TileBufferSizeX 28 ;number of tiles in tilebuffer per x-line
.define TileBufferSizeY 26 ;number of tiles in tilebuffer per y-line
.define TileMapSizeX 31 ;number of tiles in tilebuffer per x-line
.define TileMapSizeY 31 ;number of tiles in tilebuffer per y-line
;*************************************************************************
;*************************************************************************
;fifo buffer entry definitions:
.define DmaFifoEntryLength 8 ;length of an entry in the dma fifo buffer
.define DmaFifoEntryType DmaFifoBuffer &$ffff + $7e0000
.define DmaFifoEntryCount DmaFifoBuffer &$ffff + $7e0000+1
.define DmaFifoEntryTarget DmaFifoBuffer &$ffff + $7e0000+3
.define DmaFifoEntrySrcLo DmaFifoBuffer &$ffff + $7e0000+5
.define DmaFifoEntrySrcHi DmaFifoBuffer &$ffff + $7e0000+6
.define DmaFifoEntrySrcBank DmaFifoBuffer &$ffff + $7e0000+7
.define DmaFifoBytesPerFrame $1000-$220-$200-$200 ;substract oam and cgram transfer sizes
.define DmaFifoMinTransferSize 128
;*************************************************************************
.define ObjListPntW ObjectList & $ffff -1
;*************************************************************************
;object buffer entry definitions:
.define ObjectFileSize 32
.define ObjEntryType ObjectList & $ffff ;0 object type designation
;bit0=X position sign of sprite(usually 0)
;bit1=Object size flag
;bit2=collidable
;bit3=subroutine? if set, this object has its own subroutine that must be executed every frame
;bit4=animate? if set, this object is animated(a special table for each object specifies the exact animation with commands for tileloading, waiting, animation loop etc)
;bit5=bg-bound? if set, this object must move in accordance with background layer 0
;bit6=object active? if set, this object is active and needs to be drawn. if clear, this sprite doesnt need to be drawn, but must be processed, anyway
;bit7=object present? if set, this slot has an object. if clear, its considered empty and can be overwritten
.define ObjEntryType2 ObjectList & $ffff + 1 ;extra type definitions. msb set=pseudo-3d sprite that has to be moved when scrolling.
;bit7=pseudo 3d sprite that needs to be moved according to z-value when background moves
;bit6=don't upload tiles for this sprite. useful for stuff like particles and such where lots of sprites share the same tiles.
;bit5=don't upload palette for this sprite.
;bit4=decaying gravity sprite
;bits0-3: current position in vector angle LUT (didn't fit anywhere else)
.define ObjEntrySubRout ObjectList & $ffff + 2
.define ObjEntryTileset ObjectList & $ffff + 3
.define ObjEntryTilesetFrame ObjectList & $ffff + 4
.define ObjEntryVramTile ObjectList & $ffff + 5 ;vram tile and
.define ObjEntryPalConf ObjectList & $ffff + 6 ;pal config must be in that order because they are accessed word-wise together
.define ObjEntryXPos ObjectList & $ffff + 7 ;word size
.define ObjEntryYPos ObjectList & $ffff + 9 ;word size
.define ObjEntryAniFrame ObjectList & $ffff + 11
.define ObjEntryAniList ObjectList & $ffff + 12
.define ObjEntryListOffset ObjectList & $ffff + 13
.define ObjEntryPalNumber ObjectList & $ffff + 14
.define ObjEntryObjectNumber ObjectList & $ffff + 15 ;number of object type so other routines know what object the`re dealing with. this is not the number of the object in the lookup table, but an arbitrary number that defines certain object types/groups so they can be moved/deleted alltogether.
.define ObjEntryXDisplacement ObjectList & $ffff + 17 ;used only by obj2oam writer to center objects
.define ObjEntryYDisplacement ObjectList & $ffff + 18 ;used only by obj2oam writer to center objects
.define ObjEntryZDisplacement ObjectList & $ffff + 19 ;used to calculate priority. also used as direct z-value in pseudo-3d scenes.
.define ObjEntryAniCmdRepeat ObjectList & $ffff + 20 ;used by animation list processor. allows repeated nops with a single command
.define ObjEntryColliSub ObjectList & $ffff + 21 ;subroutine to execute when mainchara hits this object(only active if object is collidable)
.define ObjEntryVectorSpeed ObjectList & $ffff + 22 ;bit0-2:subpixel speed. bit3-5:pixel speed. bit7 set: target speed met
.define ObjEntryVectorTarSpeed ObjectList & $ffff + 23 ;bit0-2:subpixel speed target. bit3-5:pixel speed target. bit6,7: movement type(direct, linear slow, linear fast, smooth)
.define ObjEntryVectorDir ObjectList & $ffff + 24 ;bit0-5:direction.0=facing up. bit6=turning direction.(set=clockwise) msb set=target direction met.
.define ObjEntryVectorTarDir ObjectList & $ffff + 25 ;bit0-5:target direction.0=facing up. bit6,7: movement type(direct, linear slow, linear fast, smooth)
.define ObjEntryVectorTurnSpeed ObjectList & $ffff + 26 ;bit0-2:vector speed subpixel buffer. bit3-7: direction turn speed sub-pixel buffer.
.define ObjEntryXSpeed ObjectList & $ffff + 22 ;byte, gets added to x-pos every frame. lower 4bit subpixel precision
.define ObjEntryYSpeed ObjectList & $ffff + 23 ;word, gets added to y-pos every frame. lower 4bit subpixel precision. needs to be word because of +/- handling and gravity
.define ObjEntryGravity ObjectList & $ffff + 25 ;byte, gets added to y-speed every frame.
.define ObjEntryLifeCounter ObjectList & $ffff + 26 ;word, decreased every frame
.define ObjEntrySpareVar ObjectList & $ffff + 27 ;5 bytes of data that can be used as a variable depending on the objects needs. for example, npcs uses this to store direction and walk count
;.define MaxGravObjCount 20 ;maximum amount of allowed particles onscreen
;zsort buffer definitions:
.define OamZSortBufferSize 6 ;entries:
;0 - sprite x
;1 - sprite y
;2 - sprite config
;3 - sprite config
;4 - size/sign bits (bit0,1) bit7 clear: sprite present flag
;5 - z priority (scanline number)
.define SpriteTileSizeX 8 ;pixel size of one tile for sprite processor
.define SpriteTileSizeY 8 ;pixel size of one tile for sprite processor
;*************************************************************************
;*************************************************************************
;exit & collision definitions
.define ExitFileSize 8
.define ExitTargetMap ExitList & $ffff
.define ExitSubroutine ExitList & $ffff +1 ;bit 7 indicates that an exit is present and is masked off when jumping. it can conveniently be checked by loading the first word and checking for the sign flag
.define ExitXPosition ExitList & $ffff +2
.define ExitYPosition ExitList & $ffff +3
.define ExitXTargetPosition ExitList & $ffff +4
.define ExitYTargetPosition ExitList & $ffff +5
;collidable objects definitions
.define ColObjFileSize 6
.define ColObjNumber ColObjList & $ffff ;object number in object list
.define ColObjEnableFlagsSub ColObjList & $ffff +1 ;msb is enable flag, lower 7 bits are subroutine number
;.define ColObjSubroutine ColObjList & $ffff +2
.define ColObjXPos ColObjList & $ffff +2 ;xpos/8
.define ColObjYPos ColObjList & $ffff +4 ;ypos/8
.define NumberOfCollidableObjects 32 ;how far to check into object array to find collidable objects. slows down object processor alot when many people are walking
;*************************************************************************
;*************************************************************************
;hdma buffer definitions
.define HdmaBufferTableEntry HdmaBuffer & $ffff
.define HdmaBufferFlags HdmaBuffer & $ffff +1 ;msb:effect present. bit0-2: number of bg/window etc to operate on(manually used on effects, bg scroll for example)
.define HdmaBufferBBusTarget HdmaBuffer & $ffff +2
.define HdmaBufferWriteConfig HdmaBuffer & $ffff +3
.define HdmaBufferRomDataTbl HdmaBuffer & $ffff +4
.define HdmaBufferRomCountTbl HdmaBuffer & $ffff +5
.define HdmaBufferSubRout HdmaBuffer & $ffff +6
.define HdmaBufferRamDataPnt HdmaBuffer & $ffff +7 ;2 bytes
.define HdmaBufferRamCountPnt HdmaBuffer & $ffff +9 ;2 bytes
.define HdmaBufferEntryPnt HdmaBuffer & $ffff +11 ;2 bytes simple relative pointer to hdma table in ram to speed up processing
.define HdmaBufferRomDataPnt HdmaBuffer & $ffff +13 ;3 bytes
.define HdmaBufferRomDataLength HdmaBuffer & $ffff +16 ;2 bytes
.define HdmaBufferRomCountPnt HdmaBuffer & $ffff +18 ;2 bytes
.define HdmaBufferBlockIndex HdmaBuffer & $ffff +21 ;2 bytes, pointer into first repeat block
.define HdmaBufferVarPointer HdmaBuffer & $ffff +23 ;2 byte, word-pointer into source table data
.define HdmaBufferTable HdmaBuffer & $ffff +25 ;start of actual table
.define HdmaBufferSize $340
.define HdmaEffectFileSize 6 ;size of a hdma effect file in rom
.define HdmaBufferNumber 6
.define Hdma3dScrollLineNumber 80 ;number of lines to process for this effect.
;*************************************************************************
;*************************************************************************
;Textbox menu definitions:
.define TextBoxMenuSubrout TextBoxMenuBuffer & $ffff ;uses same subroutines as script commands
.define TextBoxMenuFlags TextBoxMenuBuffer & $ffff + 1
.define TextBoxMenuParam1 TextBoxMenuBuffer & $ffff + 2
.define TextBoxMenuParam2 TextBoxMenuBuffer & $ffff + 3
.define TextBoxMenuParam3 TextBoxMenuBuffer & $ffff + 4
.define TextBoxMenuTilePos TextBoxMenuBuffer & $ffff + 5 ;x-pixelposition inside buffer
.define TextBoxMenuLinePos TextBoxMenuBuffer & $ffff + 6 ;y-pixelposition inside buffer
.define TextBoxMenuVoid TextBoxMenuBuffer & $ffff + 7 ;future expansion
.define TextBoxMenuEntrySize 8
;*************************************************************************
;*************************************************************************
;script commands ($00-$1f)
.define StringEnd 0 ;end string and close textbox immediately
.define StringBreak 1
.define StringCls 2
.define StringButtonWait 3
.define StringFontChng 4 ;takes one additional byte
.define StringFetchFixedLength 5 ;fetch string from 24bit pointer + 8bit length, copy to buffer, replace commands with whitespaces
.define StringMenuEntry 6 ;create menu entry. takes 4 parameters
.define StringMenuWait 7 ;wait for button press/menu decision
.define StringLoadString 8 ;immediately clear screen and load another textstring. takes 2 parameters(15bit textstring number)
.define StringLoadLevel 9 ;immediately clear screen and load another level. takes 3 parameter(8bit level number, 8bit x-pos, 8bit y-pos target/8)
.define StringPlaySong 10 ;upload & play a mod song. arg0: song number
.define StringGotoBattle 11 ;goto battle mode. arg0: battle number arg1: event routine to load after returning from battle. arg2,3: vwf string to load after returning from battle. 0=dont load any textstring at all
.define StringGotoSubstring 12 ;goto substring, returnable, can be nested 16 times. arg0,1: string number(word)
.define StringSubstringReturn 13 ;return to previous string, no argument
.define StringPrintDecimal 14 ;prints byte in decimal mode. uses substring in ram with return to print number. takes 4 parameter bytes, 3-byte adress of number to print, 1 byte for number length(valid values: 1-4). number can be 32bits long. (4294967295/$ffffffff max). if longer than 16bit, store low word first, then high word.
.define StringEndNoCls 15 ;same as end string, but dont clear screen. (used for statusbox)
; .define StringSetPosition 16 ;changes tile draw position in vwf buffer. 1 argument, 0-128 valid
.define StringSetSpeed 17 ;set drawing speed. 1 argument: 0=slowest, 7f=fastest. msb set: draw instantly
.define StringClsNoUpload 18 ;clear screen, but dont upload vwf buffer so textbox doesnt flicker.
.define StringGotoEvent 19 ;reset to debug mode
.define StringCondGotoSub 20 ;conditional goto substring. substring is only printed if all bits set in target bitmask are set in target byte. 6 arguments. arg0,1: substring number(word). arg2-4:target byte to check for condition. arg 5:bitmask to check for with target
.define StringReturnBattle 21 ;returns from battle, just goes to preset battle return event routine
.define StringSetBitEvent 22 ;sets a bitevent flag. arg0=number of flag (0-255)
.define StringSaveSram 23 ;saves sram to buffer
.define StringSetModVol 24 ;sets mod vol,l,r, stereo separation etc. 2 arguments
.define StringSetXY 25 ;goto line
.define StringPercentage 26 ;goto line
.define VwfPlotBufferLength 28*31*16 ;tile number * tile length * line count
.define VwfSpriteUpdFlagsLength 16 ;10 sprites to update, upper 5 sprites at $0, lower 5 sprites at $8
.define VwfTileOffset $800 ;number of tiles where to upload vwf linebuffer to
;*************************************************************************
;*************************************************************************
;nwarp daisakusen specific stuff:
.define MaleHitpoints 8 ;hp - health
.define SpasmToRespawn 20
.define DefaultBlockCounter 25 ;number of frames to block after trigger
;player objects:
.define ObjEntryMaleDirection ObjectList & $ffff + 28 ;direction in which the object is currently facing
;0=down 1=up 2=left 3=right
.define ObjEntryMaleHP ObjectList & $ffff + 29 ;amount of health this player has. 0=dead
.define ObjEntryMaleInvinc ObjectList & $ffff + 30 ;if not zero, player is invincible
.define ObjEntryMaleSpasmCount ObjectList & $ffff + 30 ;this is the revival counter. if a certain value is reached, player is revived with one hp.
.define ObjEntryMaleBlockCounter ObjectList & $ffff + 31 ;this is the revival counter. if a certain value is reached, player is revived with one hp.
.define OamTypeMainCharaCtrl 3 ;main character top/controlling sprite
.define MainCharaHotspotSize 32 ;size of mainchara hotspot square in pixels
.define NPCHotspotSizeX 14 ;size of walking player hotspot square in pixels
.define NPCHotspotSizeY 20 ;size of walking player hotspot square in pixels
.define NPCHitPointSizeX 12
.define NPCHitPointSizeY 20
;hdma gradient colors
.define CreditsGradientColor 247 ;cgram entry for color gradient
.define TextBoxGradientColor 113 ;cgram entry for color gradient
.define BattleBoxGradientColor 113 ;cgram entry for color gradient
;*************************************************************************
;*************************************************************************
;qd16 stuff
.define QD16McAck $a5
.define QD16SnesAck $5a
.define QD16RomBase $c00000
.define QD16OpenBusMirror $400000
.define QD16McHandshake QD16RomBase
.define QD16McCommand QD16RomBase+1
.define QD16RamIrq BaseAdress+$ffec
.define QD16RomIrq QD16RomBase+$ffee
.define LoromOffset $0000
.define HiromOffset $8000
.define RomHeaderTitle QD16RomBase+$7fc0
.define RomHeaderMap QD16RomBase+$7fd5
.define RomHeaderSize QD16RomBase+$7fd7
.define RomVectorReset QD16RomBase+$7ffc
;*************************************************************************
;legacy labels:
.define LevelLUT 0
.define StreamSetLut 0
.define StatArrayName 0
.define StatArrayHp 0
.define StatArrayMaxHp 0
.define StatArrayExp 0
.define StatArrayLevel 0
.define StatArrayMoney 0
.define CharaStatusArraySize 0
;*************************************************************************
;palette effect definitions
.define PalEffectFlags PalEffectBuffer&$ffff
.define PalEffectId PalEffectBuffer&$ffff+1
.define PalEffectSub PalEffectBuffer&$ffff+2
.define PalEffectStart PalEffectBuffer&$ffff+3
.define PalEffectLength PalEffectBuffer&$ffff+4
.define PalEffectSpeed PalEffectBuffer&$ffff+5
.define PalEffectRomTbl PalEffectBuffer&$ffff+6
.define PalEffectVoid PalEffectBuffer&$ffff+7
.define PalEffectTarBuff PalEffectBuffer&$ffff+8
.define PalEffectEntrySize $100
;*************************************************************************
;*************************************************************************

View File

@ -0,0 +1,216 @@
.include "routines/main.h"
.section "events" semifree
EventPtTable:
.dw EventRoutine0
.dw EventRoutine1
.dw EventRoutine2
.dw EventRoutine3
.dw EventRoutine4
;boot init, also debug menu check
EventRoutine0:
rep #$31
lda.w #200
sta.w GravityCutOffYPos
sep #$20
lda.b #0
sta.b ScreenBrightness
lda.b #$80
sta.l $2100
; jsr InitOam
jsr InitHdma
jsr ResetScrollOffsets
jsr InitDmaFifo
; jsr ClearColObjList
; jsr ClearZBuffer
jsr PalEffectInit
jsr ClearVRAM
jsr ClearBg3TilemapBuffer ;cls
jsr ClearBg2TilemapBuffer ;cls
jsr ClearBg1TilemapBuffer ;cls
inc.b NMIBg1UploadFlag
inc.b NMIBg2UploadFlag
inc.b NMIBg3UploadFlag
stz.b FocusScreenFlags
lda.b #0
sta.b CheckJoypadMode ;set joypad check to 8 players
lda.b #$80
sta.w IrqBrightnessIncDec
lda.b #20
sta.w MaxGravObjCount
lda.b #0 ;load bgmode config #1
jsr SetBGMode
; jsr DMATilesToVramBG3
; jsr ClearBg3TilemapBuffer ;cls
lda.b #0
jsr SpcPlaySong
stz.b LoadMenuDoInit
inc.b CurrentEvent
lda.b #13 ;window effect
jsr CreateHdmaEffect
lda.b #14 ;wavy scroll
jsr CreateHdmaEffect
rep #$31
lda.w #%00100100
ldx.w #0
ldy.w #0
jsr UploadBgObject
lda.w #%00101001+$0100
ldx.w #0
ldy.w #0
jsr UploadBgObject
lda.w #0
jsr VwfCreateTextbox
lda.w #11
jsr PalEffectCreate
lda.w #12
jsr PalEffectCreate
lda.w #$0504
sta.w SpcReportType
jsr SpcSetReportType
rts
;wait for rom upload to start
EventRoutine1:
sep #$20
lda.w Qd16Flags
lsr a
bcc EventNoRomLoad
inc.b CurrentEvent
rep #$31
lda.w #1
jsr VwfCreateTextbox ;print "loading rom"
sep #$20
EventNoRomLoad:
jsr ShakeShake
jsr QD16CommandPoll
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
;seek rom header:
EventRoutine2:
jsr QD16CheckHeaderValid
bcc SeekHeaderNotFound
rep #$31
lda.l RomHeaderSize,x ;get romsize
txy
sec
sbc.w #8
and.w #7
tax
lda.l RomSizeLUT+BaseAdress,x
sta.w Qd16Mbit
tya
bne SeekHeaderHirom
lda.w #5
jsr VwfCreateTextbox ;print lorom header
bra SeekHeaderNotFound
SeekHeaderHirom:
lda.w #6
jsr VwfCreateTextbox ;print hirom header
SeekHeaderNotFound:
jsr ShakeShake
jsr QD16CommandPoll
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
RomSizeLUT:
.db 2
.db 4
.db 8
.db 16
.db 32
.db 64
.db 0
.db 0
ShakeShake:
php
sep #$20
lda.b #$0f
sta.b ScreenBrightness
lda.l SpcReportBuffer+8
beq event1Noshake
lda.b Mosaic
clc
adc.b #$80
sta.b Mosaic
event1Noshake:
; jsr ObjectProcessor
lda.b Mosaic
and.b #$f0
beq Event1MosDec
sec
sbc.b #$10
Event1MosDec:
ora.b #%10
sta.b Mosaic
plp
rts
;wait some frames
EventRoutine3:
sep #$20
dec.w FrameWait
bne EventRoutine3Wait
lda.w EventBuffer
sta.b CurrentEvent
EventRoutine3Wait:
rts
;fade out, dont accept any new commands
EventRoutine4:
jsr VwfHandler
jsr ProcessHdmaList
jsr PalEffectHandler
rts
WaitFrameEvent:
pha
php
sep #$20
sta.w FrameWait
lda.b CurrentEvent
sta.w EventBuffer
lda.b #3
sta.b CurrentEvent
plp
pla
rts
.ends

49
snes/qd16/routines/main.h Executable file
View File

@ -0,0 +1,49 @@
.MEMORYMAP
DEFAULTSLOT 0
SLOTSIZE $10000
SLOT 0 $0000
.ENDME
.ROMBANKMAP
BANKSTOTAL 2
BANKSIZE $10000
BANKS 2
.ENDRO
.snesheader
id "QD16"
name "QUICKDEV16"
hirom
fastrom
cartridgetype 0
romsize 8
sramsize 0
country 0
licenseecode $33
version 0
.endsnes
.SNESNATIVEVECTOR
COP EmptyHandler
BRK EmptyHandler
ABORT EmptyHandler
NMI EmptyHandler
UNUSED IrqHookUp
IRQ EmptyHandler
.ENDNATIVEVECTOR
.SNESEMUVECTOR
COP EmptyHandler
ABORT EmptyHandler
NMI EmptyHandler
RESET Boot
IRQBRK EmptyHandler
.ENDEMUVECTOR
.EMPTYFILL $ff
.include "routines/variables.h"
.include "routines/defines.h"

View File

@ -0,0 +1,282 @@
.include "routines/main.h"
.section "qd16cmd" semifree
/*
processes commands from qd16 microcontroller.
communicates using physical rom adresses $00:0000(ACK), $00:0001(CMD), $00:0000(DAT)
check for open bus before processing any commands
*/
QD16CommandPoll:
php
sep #$20
lda.w Qd16Flags
bit.b #%100
bne QD16CommandPollCancel ;cancel manual command polling if irq-com mode is enabled
jsr QD16CommandHandler
QD16CommandPollCancel:
plp
rts
QD16CommandHandler:
php
rep #$31
lda.l QD16McCommand ;get data first(in case the mc is just about to steal the bus again)
sta.b tmp
lda.l QD16McHandshake ;has microcontroller disabled rom access for snes?(reading open bus returns differing values here)
cmp.l QD16OpenBusMirror
bne QD16OpenBus
sep #$20
cmp.b #QD16McAck
bne QD16OpenBus ;either open bus or the mc hasn't written any new command yet
lda.b tmp
bit.b #$f8 ;valid command present?(max number of commands is 8)
bne QD16OpenBus ;if any of the upper 5 bits are set, command is invalid
lda.b #QD16SnesAck
sta.l $c00000 ;tell mc that data has been received
;handshake complete, process data
rep #$31
lda.b tmp
pha
and.w #$7 ;8 commands max
asl a
tax
pla
jsr (QD16CmdLUT,x) ;execute command
QD16OpenBus:
plp
rts
QD16CmdLUT:
.dw QD16GetBankCount
.dw QD16EnableIrqCom
.dw QD16UpdateLoadPercentage
.dw QD16FadeOut
.dw QD16DrawHeader
.dw QD16CmdVoid
.dw QD16CmdVoid
.dw QD16CmdVoid
QD16CmdVoid:
rts
;this can be triggered by an explicit mc-command. apart from that, it's also triggered when mc reports bank 0 has been uploaded.
QD16DrawHeader:
rts
QD16EnableIrqCom:
rep #$31
lda.l QD16RamIrq ;did mc copy irq-vector to correct location in rom?
cmp.l QD16RomIrq
; beq QD16EnableIrqVectorOk ;debug
lda.w #$adba ;clear mc-ack, signalize error, don't enter irq-mode
sta.l QD16McHandshake
rts
QD16EnableIrqVectorOk:
sep #$20
lda.b #1
sta.w IrqRoutineNumber
lda.b #%100
ora.w Qd16Flags
sta.w Qd16Flags ;set "enable irq-com"-flag
rts
;input:x,header position in bank
QD16CheckHeaderValid:
php
sep #$20
lda.w Qd16Flags
bit.b #%10
bne QD16CheckHeaderNoHirom ;skip header drawing if a valid header has been found before
rep #$31
lda.l RomVectorReset ;reset vector
bpl QD16CheckHeaderNoLorom
lda.l RomHeaderMap ;rom map, lorom?
lsr a
bcs QD16CheckHeaderNoLorom
lda.l RomHeaderSize ;rom size
and.w #$ff
cmp.w #$7 ;smaller than 4mbit?
bcc QD16CheckHeaderNoLorom
cmp.w #$e ;bigger than 64mbit?
bcs QD16CheckHeaderNoLorom
ldx.w #LoromOffset ;header found
jsr QD16CheckTitle
bcc QD16CheckHeaderNoLorom
sep #$20
lda.b #%10
ora.w Qd16Flags
sta.w Qd16Flags ;set "header found, title printed"-flag
plp
sec
rts
QD16CheckHeaderNoLorom:
rep #$31
lda.l RomVectorReset+HiromOffset ;reset vector high byte
bpl QD16CheckHeaderNoHirom
lda.l RomHeaderMap+HiromOffset ;rom map, lorom?
lsr a
bcc QD16CheckHeaderNoHirom
lda.l RomHeaderSize+HiromOffset ;rom size
and.w #$ff
cmp.w #$7 ;smaller than 4mbit?
bcc QD16CheckHeaderNoHirom
cmp.w #$e ;bigger than 64mbit?
bcs QD16CheckHeaderNoHirom
ldx.w #HiromOffset ;header found
jsr QD16CheckTitle
bcc QD16CheckHeaderNoHirom
sep #$20
lda.b #%10
ora.w Qd16Flags
sta.w Qd16Flags ;set "header found, title printed"-flag
plp
sec
rts
QD16CheckHeaderNoHirom:
plp
clc
rts
;input:x,16bit:lo/hirom pointer.
;checks if bytes are within ranges $20-$7f and $a7-$df(kana)
QD16CheckTitle:
php
phx
sep #$20
ldy.w #0
QD16CheckTitleLoop:
;check if chars are in ASCII/kana range and return null if any invalid ones are found.
lda.l RomHeaderTitle,x
cmp.b #$20
bcc QD16CheckTitleVoid
;is bigger than $20
cmp.b #$df+1
bcs QD16CheckTitleVoid
;is between $20 and $df
bpl QD16CheckTitleCharOk
;is between $80 and $df
cmp.b #$a7
bcc QD16CheckTitleVoid
;is between $a7 and $df
QD16CheckTitleCharOk:
inx ;is between $a7 and $df or between $20 and $7f
iny
cpy.w #21
bne QD16CheckTitleLoop
plx ;title is ok, ready to print
plp
sec
rts
QD16CheckTitleVoid:
plx ;title is not present/contains bad chars
plp
clc
rts
QD16GetBankCount:
sep #$20
xba
sta.w QD16BankCount
lda.b #%1
ora.w Qd16Flags
sta.w Qd16Flags ;set "rom upload commenced"-flag
rts
QD16UpdateLoadPercentage:
sep #$20
xba
cmp.b #101
bcc QD16UpdateLoadPercentageNoOver
lda.b #100
QD16UpdateLoadPercentageNoOver:
cmp.w PercentageBuff
beq QD16UpdateLoadPercentageNoUpdate
sta.w PercentageBuff
rep #$31
lda.w #2 ;print percentage bar
jsr VwfCreateTextbox
QD16UpdateLoadPercentageNoUpdate:
sep #$20
lda.b #%1
ora.w Qd16Flags
sta.w Qd16Flags ;set "rom upload commenced"-flag
rts
/*
? = loadstat
100 = bankcount
*/
QD16UpdateLoadstatus:
sep #$20
xba
sta.l $4202 ;current banks*100
lda.b #100
sta.l $4203
nop
nop
nop
nop
rep #$31
lda.l $4216
sta.l $4204
sep #$20
lda.w QD16BankCount ;divide by 100
sta.l $4206
nop ;wait some cycles for division to finish
nop
nop
nop
nop
nop
nop
nop
rep #$31
lda.l $4214
sta.w Qd16LoadProgress
QD16DivErr:
rts
QD16Cmd2:
rts
QD16FadeOut:
sep #$20
jsr PalEffectInit
lda.b #13
jsr PalEffectCreate
rts
.ends

367
snes/qd16/routines/variables.h Executable file
View File

@ -0,0 +1,367 @@
; .include "routines/main.h"
.ENUM $00 ;1byte direct page variables for kernel and game mechanics
tmp ds 25
tmpdma ds 4
CurrentEvent db
FrameCounterLo db
FrameCounterHi db
SetIni db
ScreenMode db
MainScreen db
SubScreen db
ScreenBrightness db
BGTilesVram12 db
BGTilesVram34 db
BG1TilemapVram db
BG2TilemapVram db
BG3TilemapVram db
BG4TilemapVram db
SpriteTileOffsetVram dw
ObjSel db
BG1HOfLo db
BG1HOfHi db
BG1VOfLo db
BG1VOfHi db
BG2HOfLo db
BG2HOfHi db
BG2VOfLo db
BG2VOfHi db
HdmaFlags db
HdmaPause db ;if msb is set, dont initiate further hdma transfers. this is useful when the rom hdma is trying to read from isnt present atm.
ThreeBytePointerLo db
ThreeBytePointerHi db
ThreeBytePointerBank db
ThreeBytePointerLo2 db
ThreeBytePointerHi2 db
ThreeBytePointerBank2 db
BrightnessSpeed db
LastFrameLo db
LastFrameHi db
CGWsel db
CgadsubConfig db
FixedColourR db
FixedColourG db
FixedColourB db
InterruptEnableFlags db
IrqRoutineNumber db
IrqRoutineNumberBuffer db ;backup in case multiple irqs are executed per frame. nmi writes this number back to irq number every frame
IrqVCounter dw
IrqHCounter dw
W12SEL db
W34SEL db
WOBJSEL db
W1L db
W1R db
W2L db
W2R db
WBGLOG db
WOBJLOG db
WMS db
WSS db
Mosaic db
BGTilesVram2 dw
Bg3Status db
PrintStringThreeBytePointerLo db
PrintStringThreeBytePointerHi db
PrintStringThreeBytePointerBank db
VramBg1Tilemap dw
VramBg2Tilemap dw
VramBg3Tilemap dw
VramBg4Tilemap dw
VramBg1Tiles dw
VramBg2Tiles dw
VramBg3Tiles dw
VramBg4Tiles dw
SetBGThreeBytePointerLo db
SetBGThreeBytePointerHi db
SetBGThreeBytePointerBank db
NMIOamUploadFlag db
NMIPaletteUploadFlag db ;refresh palette during nmi?
NMIBg1UploadFlag db ;refresh bg1 tilemap during nmi?
NMIBg2UploadFlag db
NMIBg3UploadFlag db ;UploadBg3Map db ;if this is not zero, upload tilemap to bg3
CurrentMapNumber db ;number of currently loaded map
CurrentMapPointer ds 3 ;24bit pointer to current map file
CurrentColMapPointer ds 3 ;24 bit pointer to current collision map
BgScrollCounterX db ;ranges from 0-7 inside one tile
BgScrollCounterY db
BgMapCurrentPositionX db ;current upper left tile on screen
BgMapCurrentPositionY db
ScreenPixelPositionX dw ;exact pixel position of upper left border for sprite position calculation
ScreenPixelPositionY dw ;exact pixel position of upper left border for sprite position calculation
BgScrollRowUploadDisplace db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1)
BgScrollTilemapRowUploadDisplaceX db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1)
BgScrollTilemapRowUploadDisplaceY db ;number of tiles to add/substract when uploading tilerows. this gets added to current position in map depending on the scrolling direction.(scroll right: add 28/scroll left: substract 1)
BgScrollOffsetPointerTilesX db ;pointer to current vertical column that holds the leftmost tiles onscreen(goes from 0-27)
BgScrollOffsetPointerTilesY db
BgScrollOffsetPointerTilemapX db ;pointer to current vertical column that holds the leftmost tiles onscreen for tilemap (goes from 0-32)
BgScrollOffsetPointerTilemapY db
BgScrollTileSourcePointer ds 3 ;pointer to first tile of tileline to be uplodaded
DmaFifoPointer dw ;relative pointer to current free entry in buffer
DmaFifoPointerIrq dw
DmaFifoSourcePointerLo dw
DmaFifoSourcePointerBa db
DmaFifoOverhang dw
DmaFifoTotalBytesTransferred dw ;used to guesstimate how much time we have left for transfers
ObjectListPointer dw ;pointer to next free object in object list
ObjectListPointerCurrent dw ;pointer to current object in object list, used to set direct register
CurrentObjectNumber db ;number of currently selected object in list
OamBufferPointer dw ;pointer to current sprite in oam buffer
OamZsortBufferPointer dw ;pointer to current sprite in oam zsort buffer
OamZsortSpriteNumber db ;number of sprites to sort
OamAniListStraightRepeatFlag dw
FocusScreenFlags db ;flags for focus
;bit0=enable focus on object
FocusScreenObject db ;number of object in object list to focus to
FocusScreenSpline db ;number of preset table to use for scrolling depending on distance to object(linear,sine,exp etc)
FocusScreenXWait db
FocusScreenYWait db
CollisionPixelX dw
CollisionPixelY dw
CollisionTemp dw
PalTemp db ;used for object subroutine
ExitCollisionPointer dw ;bits0-14 contain number of exit. old:;bits0-14 contain pointer to an entry in the exit list. if bit15 is set, this exit has been hit and needs to be procesed.
R1 db ;random number generator buffers
R2 db
R3 db
R4 db
ColObjListPointer dw
HdmaListPointer dw
VwfFontPointerLo ds 3
Spctmp ds 8 ;temp buffer for spc stuff
SpcCurrentStreamSet db
SpcHandlerState db
SpcHandlerArgument0 db
SpcHandlerArgument1 db
SpcHandlerArgument2 db
SpcCmdFifoStart db
SpcCmdFifoEnd db
PtPlayerDataPointerLo db ;assumes dreg: $0000
PtPlayerDataPointerHi db ;assumes dreg: $0000
PtPlayerDataPointerBa db ;assumes dreg: $0000
PtPlayerCurrentSong db ;assumes dreg: $0000
PtPlayerCurrentSamplePack db
PtPlayerCurrentSoundEffect db
PtPlayerSmplBufferPosLo db ;not needed at all
PtPlayerSmplBufferPosHi db
SpcUploadedFlag db ;msb set=song upload complete and playing. bit6 set=sample pack uploaded
VideoHandlerState db
CheckJoypadMode db ;0=1 player, 1=8 players, 2=instruments + 1 joypad
FontSelector db
FixedStringLength db
PrintStringPalette db
MenuFileThreeBytePointerLo db
MenuFileThreeBytePointerHi db
MenuFileThreeBytePointerBank db
MenuRowsThreeBytePointerLo db
MenuRowsThreeBytePointerHi db
MenuRowsThreeBytePointerBank db
MenuRowsThreeByteOptionPointerLo db
MenuRowsThreeByteOptionPointerHi db
MenuRowsThreeByteOptionPointerBank db
MenuRowsThreeByteCodePointerLo db
MenuRowsThreeByteCodePointerHi db
MenuRowsThreeByteCodePointerBank db
LoadMenuInitialOffset dw
LoadMenuInitialOptionOffset dw
LoadMenuVerticalSpacing dw
LoadMenuNumberOfRows db
LoadMenuCurrentRow db
LoadMenuStringPosLo db
LoadMenuStringPosHi db
LoadMenuPalUnselSel db
LoadMenuDoInit db
;BattleSubroutine db
HdmaListCounter db ;counter used by hdma handler to switch through channels
tmpIrq ds 8 ;Temporary Buffer for irq routines
BattleMusicState db
;CurrentTablistPointer ds 3
.ENDE
.ENUM $200 ;2-byte adresses for game status stuff
tmpTest ds 4
Hdma3dScrollCountV db ;amount of lines to wait before hdma table
CurrentBattleFile db
MapStartPosX db ;map start position set by external routine
MapStartPosY db
MapSizeX db ;/must not be seperated cause they may be written to both at the same time in word-mode
MapSizeY db ;\
BGMapStartPosX db ;start position for bg upload(may differ from sprite location if near a border)
BGMapStartPosY db
CurrentStringTarget db ;current position in bg1 tilemap to write to, 2 bytes
CurrentStringTargetHi db
FixedColourRsave db
FixedColourGsave db
FixedColourBsave db
CpuUsageScanline db
SpcStreamVolume db
SpcSEVolume db
SpcSEPitch db
SpcSongSpeed db ;default $a0
SpcSongChMask db ;default $0f
SpcReportType dw ;0=none 1=timecode 2=channel-levels(vol out) 3=special mod command
SpcCmdFifo ds 64
MessageDeleteCounter dw ;inactive when zero, delete message when 1(then set zero), decrease each frame when not 0 or 1
HdmaFadeInOutState db ;bit7set=fade in/bit7clear=fade out,bit6set=done fading bit0-5=current state in LUT for window and mosiac size
MainCharaObjectNumber db
MainCharaXPos dw
MainCharaYPos dw
ExitMapTarget dw ;target map
ExitXTarget dw ;target x-pos on map
ExitYTarget dw ;target y-pos on map
Pseudo3dScrollUpdateFlag db ;if this isnt zero, update scroll table
CurrentLevel dw
PlayerState db ;current mode of player characters. 0=active battle 1=player select menu(start sitting. when start pressed for that player, switch to subroutine that is similar to battle, but without being able to fight) 2=results screen.
PlayersPresentFlags db ;flags to signalize players connected.
ActivePlayers db ;number of alive players
WinningPlayer db ;number of player that has won the match. $ff=invalid
IrqBrightnessIncDec db ;just a flag. bit0 set=increase. bit1 clear=decrease. bit8=ack/done
BrightnessEventBuffer db ;buffer event routine to jum p to after brightness inc/dec
SpcStreamFrame dw
SpcSoundEffectFlipFlag dw ;flag alternating between each sound effect upload so that spc doesnt trigger the same one twice.
BattleFinished db ;$80 if battle is finished
IntroScene3ScrollPoint dw
VideoFrames db
VideoFrameRate dw ;ANDed with framecounter. 0=60hz, 1=30hz, 3=15hz etc.
CurrentVideo db
CurrentVideoFrame db
PlayerSelectScrollCounter dw
WinningPlayerPointer dw
RandomLevelCounter db ;msb=shuffle direction. bits0-3 level number
RandomStreamCounter db ;msb=shuffle direction. bits0-3 Streamset number
SpecialReportOld db
HdmaScrollPointerBuffer dw
GravityCutOffYPos dw ;y-pos of object(with 4bit precision) that triggers delete if bigger and gravity affected
GravObjectCounter db ;counter of particle/gravity objects to create to prevent slowdown and such
MaxGravObjCount db ;max allowed particles per frame. dont create new ones if exceeded
EventJumper db ;variable to select which event to jump to in debug menu
CollisionObjPointer dw ;pointer to object that just has collided with calling obj
Reg3000WriteVar db
VIrqCounter dw
ExtIrqCounter dw
CartChecksum dw
QD16BankCount db ;number of rom banks
Qd16LoadProgress dw ;percentage of banks loaded
Qd16Flags db ;bit0=rom upload started
;bit1=header found
;bit2=irq-com mode entered
Qd16Mbit dw
VwfStringLineBreakCounter dw ;keeps track of the last <space>
VwfStringPixelCounter dw ;keeps track of position in line
VwfStringTileCounter dw ;keeps track of tile position in line
VwfStringLineCounter dw ;keeps track of position in line
VwfStringStringPointer dw ;pointer to current letter in string buffer
VwfStringLineLength db ;length of line in tiles. must be set before stringprocessor is executed
VwfStringLineNumber db ;number of lines. must be set before blablah.
VwfStringCurrentFont db
VwfEvent db ;which vwf routine to execute
VwfCurrentString dw ;15bit, which string to load
VwfTextBoxXPos db ;position of left, upper sprite of textbox
VwfTextBoxYPos db ;position of left, upper sprite of textbox
VwfTextBoxMenuPointer dw
VwfCursorObjectNumber db ;number of object in object list
VwfDrawSpeed db ;0=1 letter per frame. msb set: max speed, draw until string end command has been.
VwfDrawSpeedCounter db
VwfLineUpdateFlag ds 4
VwfSubStringStackPointer dw
ObjectFreezeFlag db ;if not zero, applicable objects should not be processed.
TextWindowFadeStatus db
TextWindow db
PercentageBuff db ;buffer for percentage display
PalEffectPointer dw ;pointer to current pal-effect
EventBuffer db
FrameWait db
SpcReportInstrBuff dw
.ENDE
.ENUM $7e0300
JoyPort1Data1Io0Buffer ds 4
JoyPort1Data2Io0Buffer ds 4
JoyPort2Data1Io0Buffer ds 4
JoyPort2Data2Io0Buffer ds 4
JoyPort1Data1Io1Buffer ds 4
JoyPort1Data2Io1Buffer ds 4
JoyPort2Data1Io1Buffer ds 4
JoyPort2Data2Io1Buffer ds 4
VectorAngleSMCode ds 9 ;8 inc/decs per frame + rtl
LoadMenuStringBuffer ds 9
PrintStringBuffer0 ds 16
;.ende
JoyPortBuffer ds 16 ;8 joypads max, word entries.
;0=port1 joy 1
;2=port1 joy 2
;4=port1 joy 3
;6=port1 joy 4
;8=port2 joy 1
;a=port2 joy 2
;c=port2 joy 3
;e=port2 joy 4
JoyPortBufferOld ds 16
JoyPortBufferTrigger ds 16
;joypad buttons:
;15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
;b y se st U D L R a x l r 0 0 0 0
PaletteBuffer ds $0200 ;bg3 palettes: buffer $0-$20 (4 different 4-color palettes, for text
Bg1MapBuffer ds $1000
Bg2MapBuffer ds $800
Bg3MapBuffer ds $0800
Bg4MapBuffer ds $1
OamZSortBuffer ds $0500 ;256 entries, each 6 bytes
OamZSortObjList ds 128*2 ;prioritized list of objects that need priority processing(2 byte relative pointers)
;ZSortOamPriorityBuffer ds $0040
OamBuffer ds $0200
OamPriorityBuffer ds $0020
DmaFifoBuffer ds $1000 ;DmaFifoEntryLength*256
ObjectList ds $0800 ;32 entries, each 32 bytes
ExitList ds $0080 ;16 entries, each 8 bytes
ColObjList ds $00c0 ;32 entries, each 4 bytes
HdmaBuffer ds $0340
HdmaBuffer1 ds $0340
HdmaBuffer2 ds $0340
HdmaBuffer3 ds $0340
HdmaBuffer4 ds $0340
HdmaBuffer5 ds $0340
HdmaDataBuffer1 ds $0400
HdmaSpcBuffer ds 200 ;streaming table, uses channel 7
TextBoxMenuBuffer ds $0040 ;8 entries * 8
SpcReportBuffer ds 16 ;8 entries, each 2 bytes
;0=none
;2=timecode
;4=channel levels
;6=special mod cmd
Hdma3dScrollBuffer ds 400 ;80 entries, each 5 bytes
WinnerArray ds 8*1
PalEffectBuffer ds $800
VwfSubStringStack ds 16*8 ;can ne nested 16 times
VwfSubstringBuffer ds 16 ;used for printing numbers
VwfStringBuffer ds $0400
VwfPlotBuffer ds $1000 ;28 tiles * 8 lines * 16bytes per tile
.ENDE