diff --git a/quickdev16.tmproj b/quickdev16.tmproj index 28b8263..ee46526 100644 --- a/quickdev16.tmproj +++ b/quickdev16.tmproj @@ -3,7 +3,7 @@ currentDocument - avr/usbload/shell.c + avr/usbload/main.c documents @@ -28,12 +28,28 @@ column 0 line - 141 + 88 + columnSelection + firstVisibleColumn 0 firstVisibleLine - 94 + 56 + selectFrom + + column + 0 + line + 56 + + selectTo + + column + 0 + line + 88 + avr/usbload/command.h @@ -138,30 +154,14 @@ caret column - 10 + 1 line - 53 + 62 - columnSelection - firstVisibleColumn 0 firstVisibleLine - 25 - selectFrom - - column - 5 - line - 53 - - selectTo - - column - 22 - line - 53 - + 24 avr/usbload/irq.h @@ -198,9 +198,9 @@ caret column - 80 + 0 line - 18 + 0 firstVisibleColumn 0 @@ -214,26 +214,42 @@ column 0 line - 74 + 299 + columnSelection + firstVisibleColumn 0 firstVisibleLine - 46 + 190 + selectFrom + + column + 0 + line + 292 + + selectTo + + column + 0 + line + 299 + avr/usbload/pwm.c caret column - 25 + 0 line - 32 + 100 firstVisibleColumn 0 firstVisibleLine - 20 + 33 avr/usbload/pwm.h @@ -254,14 +270,14 @@ caret column - 20 + 0 line - 56 + 0 firstVisibleColumn 0 firstVisibleLine - 9 + 13 avr/usbload/rle.c @@ -312,30 +328,14 @@ caret column - 0 + 14 line - 70 + 235 - columnSelection - firstVisibleColumn 0 firstVisibleLine - 61 - selectFrom - - column - 0 - line - 64 - - selectTo - - column - 0 - line - 70 - + 210 avr/usbload/shared_memory.h @@ -358,12 +358,12 @@ column 0 line - 43 + 0 firstVisibleColumn 0 firstVisibleLine - 30 + 289 avr/usbload/shell.h @@ -384,30 +384,56 @@ caret column - 22 + 9 line - 287 + 36 - columnSelection - firstVisibleColumn 0 firstVisibleLine - 215 - selectFrom + 3 + + avr/usbload/sram.h + + caret column - 5 + 9 line - 287 + 198 - selectTo + firstVisibleColumn + 0 + firstVisibleLine + 178 + + avr/usbload/system.c + + caret column - 31 + 0 line - 287 + 85 + firstVisibleColumn + 0 + firstVisibleLine + 48 + + avr/usbload/system.h + + caret + + column + 0 + line + 25 + + firstVisibleColumn + 0 + firstVisibleLine + 0 avr/usbload/timer.c @@ -456,30 +482,14 @@ caret column - 0 + 14 line - 43 + 71 - columnSelection - firstVisibleColumn 0 firstVisibleLine - 16 - selectFrom - - column - 0 - line - 42 - - selectTo - - column - 0 - line - 43 - + 36 avr/usbload/usb_bulk.h @@ -579,6 +589,48 @@ firstVisibleLine 211 + tools/qdinc/opendevice.h + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 0 + + tools/qdinc/qdinc.c + + caret + + column + 0 + line + 26 + + firstVisibleColumn + 0 + firstVisibleLine + 15 + + tools/qdinc/qdinc.h + + caret + + column + 0 + line + 0 + + firstVisibleColumn + 0 + firstVisibleLine + 3 + tools/ucon64/src/backup/quickdev16.c caret @@ -642,6 +694,11 @@ avr/usbload/sram.c avr/usbload/main.c + tools/qdinc/qdinc.c + tools/qdinc/opendevice.h + tools/qdinc/qdinc.h + avr/usbload/system.h + avr/usbload/sram.h avr/usbload/usb_bulk.c avr/usbload/usbconfig.h avr/usbload/requests.h @@ -658,6 +715,7 @@ scripts/check_rle.py avr/usbload/pwm.h avr/usbload/shared_memory.c + avr/usbload/system.c avr/usbload/command.c avr/usbload/command.h avr/usbload/irq.c @@ -715,28 +773,19 @@ subItems + qdinc + + isExpanded + + subItems + + ucon64 isExpanded subItems - - src - - isExpanded - - subItems - - console - - isExpanded - - subItems - - - - - + diff --git a/snes/qd16/makefile b/snes/qd16/makefile new file mode 100755 index 0000000..9573bbb --- /dev/null +++ b/snes/qd16/makefile @@ -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 diff --git a/snes/qd16/routines/defines.h b/snes/qd16/routines/defines.h new file mode 100755 index 0000000..c80f9f2 --- /dev/null +++ b/snes/qd16/routines/defines.h @@ -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 +;************************************************************************* + +;************************************************************************* diff --git a/snes/qd16/routines/eventroutines.asm b/snes/qd16/routines/eventroutines.asm new file mode 100755 index 0000000..24fb2b9 --- /dev/null +++ b/snes/qd16/routines/eventroutines.asm @@ -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 + \ No newline at end of file diff --git a/snes/qd16/routines/main.h b/snes/qd16/routines/main.h new file mode 100755 index 0000000..7b7567a --- /dev/null +++ b/snes/qd16/routines/main.h @@ -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" + + diff --git a/snes/qd16/routines/qd16cmdhandler.asm b/snes/qd16/routines/qd16cmdhandler.asm new file mode 100755 index 0000000..c83e52b --- /dev/null +++ b/snes/qd16/routines/qd16cmdhandler.asm @@ -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 diff --git a/snes/qd16/routines/variables.h b/snes/qd16/routines/variables.h new file mode 100755 index 0000000..b74c97f --- /dev/null +++ b/snes/qd16/routines/variables.h @@ -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 +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