; ; dyn_apcs.s ; ; APCS interface to Dynamite SWIs ; ; © 1994-1998 Straylight ; ;----- Licensing note ------------------------------------------------------- ; ; This file is part of Straylight's Dynamite ; ; Dynamite is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation; either version 2, or (at your option) ; any later version. ; ; Dynamite is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with Dynamite. If not, write to the Free Software Foundation, ; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ;----- Standard header ------------------------------------------------------ GET libs:header GET libs:swis GET libs:stream ;----- Main code ------------------------------------------------------------ AREA |C$$Code|,CODE,READONLY ; --- dynamite_alloc --- ; ; On entry: a1 == address of anchor ; a2 == size of block, in bytes ; a3 == block ID ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_alloc dynamite_alloc MOV ip,lr SWI XDynamite_Alloc MOVVC a1,#0 MOVS pc,ip ; --- dynamite_free --- ; ; On entry: a1 == address of anchor ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_free dynamite_free MOV ip,lr SWI XDynamite_Free MOVVC a1,#0 MOVS pc,ip ; --- dynamite_freeWithID --- ; ; On entry: a1 == block ID (must be non-zero) ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_freeWithID dynamite_freeWithID MOV ip,lr SWI XDynamite_FreeWithID MOVVC a1,#0 MOVS pc,ip ; --- dynamite_blockInfo --- ; ; On entry: a1 == address of block anchor ; a2 == address of structure to fill in ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_blockInfo dynamite_blockInfo STMFD sp!,{lr} MOV ip,a2 SWI XDynamite_BlockInfo STMVCIA ip,{a3,a4} MOVVC a1,#0 LDMFD sp!,{pc}^ ; --- dynamite_changeID --- ; ; On entry: a1 == address of anchor, or 0 ; a2 == new ID ; a3 == (optional) old ID ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_changeID dynamite_changeID MOV ip,lr SWI XDynamite_ChangeID MOVVC a1,#0 MOVS pc,ip ; --- dynamite_resize --- ; ; On entry: a1 == address of anchor ; a2 == new size, in bytes ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_resize dynamite_resize MOV ip,lr SWI XDynamite_Resize MOVVC a1,#0 MOVS pc,ip ; --- dynamite_midExtend --- ; ; On entry: a1 == address of anchor ; a2 == offset at which to extend ; a3 == number of bytes to add ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_midExtend dynamite_midExtend MOV ip,lr SWI XDynamite_MidExtend MOVVC a1,#0 MOVS pc,ip ; --- dynamite_save --- ; ; On entry: a1 == value to save ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_save dynamite_save MOV ip,lr MOV a2,a1 MOV a1,#2 SWI XDynamite_Save MOVVC a1,#0 MOVS pc,ip ; --- dynamite_load --- ; ; On entry: -- ; ; On exit: a1 == value loaded from relocation stack EXPORT dynamite_load dynamite_load MOV ip,lr MOV a1,#1 SWI XDynamite_Load MOVS pc,ip ; --- dynamite_reduce --- ; ; On entry: -- ; ; On exit: a1 == 0 if compaction not performed, nonzero otherwise EXPORT dynamite_reduce dynamite_reduce MOV ip,lr SWI XDynamite_Reduce MOVCC a1,#1 MOVCS a1,#0 MOVS pc,ip ; --- dynamite_compact --- ; ; On entry: -- ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_compact dynamite_compact MOV ip,lr SWI XDynamite_Compact MOVVC a1,#0 MOVS pc,ip ; --- dynamite_lock --- ; ; On entry: -- ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_lock dynamite_lock MOV ip,lr SWI XDynamite_Lock MOVVC a1,#0 MOVS pc,ip ; --- dynamite_unlock --- ; ; On entry: -- ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_unlock dynamite_unlock MOV ip,lr SWI XDynamite_Unlock MOVVC a1,#0 MOVS pc,ip ; --- dynamite_claimAnchor --- ; ; On entry: a1 == address of where to store anchor ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_claimAnchor dynamite_claimAnchor MOV ip,lr MOV a2,a1 SWI XDynamite_ClaimAnchor STRVC a1,[a2,#0] MOVVC a1,#0 MOVS pc,ip ; --- dynamite_releaseAnchor --- ; ; On entry: a1 == address of anchor ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_releaseAnchor dynamite_releaseAnchor MOV ip,lr SWI XDynamite_ReleaseAnchor MOVVC a1,#0 MOVS pc,ip ; --- dynamite_readSpriteSize --- ; ; On entry: a1 == where to store the sprite size ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_readSpriteSize dynamite_readSpriteSize MOV ip,lr MOV a2,a1 SWI XDynamite_ReadSpriteSize STRVC a1,[a2,#0] MOVVC a1,#0 MOVS pc,ip ; --- dynamite_describe --- ; ; On entry: a1 == address of a structure to fill in ; ; On exit: a1 == 0 or pointer to error EXPORT dynamite_describe dynamite_describe MOV ip,lr MOV a4,a1 SWI XDynamite_Describe MOVVS pc,ip CMP a4,#0 STMNEIA a4,{a1-a3} MOV a1,#0 MOVS pc,ip ;----- That's all, folks ---------------------------------------------------- END