-
Content count
1,134 -
Joined
-
Last visited
Everything posted by SCPCD
-
PoulphappyBirthday sh3 !
-
Happy Birthday GT Turbo !
-
Félicitation \o/
-
it's not safe only if you would like to restart it from the last instruction or if you would like to know the last instruction executed by reading the PC register. If you don't care about both, you can kill it this way. The object processor is forced to restart each line at OLP addr, so it's not a problem.
-
to soft reset the jag, you need to do something like that : wait_blitter: move.l B_CMD, d0 ; Wait end last blitter cmd btst #0, d0 beq.s .wait_blitter move.w #$2700, sr ; movea.l #$4000, sp move.w #$FF00, INT1 ; disable all 68k jaguar interrupts move.w #$FFFF, INT2 ; 68k leave interrupts move.w #$FFFF, VI ; no vbl interrupts move.l #0, G_CTRL ; Stop GPU move.l #$00070007, G_END ; Big Endian move.l #%100011111000000000, G_FLAGS ; Clear Flags and interrupts move.l #0, D_CTRL ; Stop DSP move.l #$00070007, D_END ; Big Endian move.l #%100011111000000000, D_FLAGS ; Clear Flags and interrupts move.l #0, $1000 ; STOP Obj High move.l #4, $1004 ; STOP Obj Low move.l #$1000, d0 swap d0 move.l d0, OLP ; OLP pointer move.w #0, PIT0 ; disable timer move.w #0, PIT1 ; disable timer move.w #0, JPIT2_W ; disable timer move.w #0, JPIT1_W ; disable timer move.w #$3F00, JINT ; disable Jerry interrupts move.l #0, SMODE ; disable audio move.w #0, ASICTRL ; disable juart move.w #0, ASIDATA ; dummy read to clear fifo ;;;;=> reinit blitter regs move.l #$00000000,A1_BASE ; move.l #$00000000,A1_FLAGS ; move.l #$00000000,A1_CLIP ; move.l #$00000000,A1_PIXEL ; move.l #$00000000,A1_STEP ; move.l #$00000000,A1_FSTEP ; move.l #$00000000,A1_FPIXEL ; move.l #$00000000,A1_INC ; move.l #$00000000,A1_FINC ; move.l #$00000000,A2_BASE ; move.l #$00000000,A2_FLAGS ; move.l #$00000000,A2_MASK ; move.l #$00000000,A2_PIXEL ; move.l #$00000000,A2_STEP ; move.l #$00000000,B_COUNT ; move.l #$00000000,B_SRCD ; move.l #$00000000,B_DSTD ; move.l #$00000000,B_DSTZ ; move.l #$00000000,B_SRCZ1 ; move.l #$00000000,B_SRCZ2 ; move.l #$00000000,B_PATD ; move.l #$00000000,B_IINC ; move.l #$00000000,B_ZINC ; move.l #$00000002,B_STOP ; move.l #$00000000,B_I3 ; move.l #$00000000,B_I2 ; move.l #$00000000,B_I1 ; move.l #$00000000,B_I0 ; move.l #$00000000,B_Z3 ; move.l #$00000000,B_Z2 ; move.l #$00000000,B_Z1 ; move.l #$00000000,B_Z0 ; ;;;;<= and go back to your startup code
-
happy birthday fredifredo
-
\o/
-
Found the bug in smac : you need to change those lines in "sect.c" in the "fixup" function : if(*fexpr == SYMBOL && fexpr[2] == ENDEXPR) if((attr & 0x0F00) == FU_JR) { // <-- correct line //if((attr & 0x0200) == FU_JR) { // <-- wrong line then some lines before the end of the same function : if((attr & 0x0F00) == FU_JR) { // <-- correct line //if((attr & 0x0200) == FU_JR) { // <-- wrong line if(orgactive) *fchptr.lp++ = orgaddr; else *fchptr.lp++ = 0x00000000; } If 0x0200 is applied to "attr", there will have not only FU_JR that will be valid, those next code also : #define FU_JR 0x0200 #define FU_MJR 0x0300 #define FU_NUM31 0x0600 #define FU_NUM32 0x0700
-
if there is not too much depends for asm files that crash smac, i can take it a look
-
RMW makes : ADDSAT4 PIXC, LBC ADDSAT4 PIXR, LBR ADDSAT8 PIXY, LBY and if I remind correctly all composent of LB pixel (C, R and Y) are signed. On RGB pix this will have strange result
-
Because we don't know where the OP list is so we can accidentaly erased it when copying ROM to DRAM ?
-
Happy birthday SH-3
-
for the OP : X position is relative to HDB1/2 Y position is absolute, you can make relative value in your homemade OP List by computing YPos+VDB. the visible screen is inside the scare [HDB1/2 to HDE] and [VDB to VDE]. If VDE is greater than VBB, then the visible screen will cut at VBB. The correct method to center a screen is using HDB1/2, HDE, VDB and VDE. All those values are computed depending the screen mode (NTSC/PAL) Values should be the same in all color mode (RGB16, CRY, RGB24)
-
like this : http://www.jagware.org/index.php?showtopic=836 ?
-
ABS header : - Magic Number = 0x601B - TEXT segment size (4 Bytes) - DATA segment size (4 Bytes) - BSS segment size (4 Bytes) - Symbol table size (4 Bytes) - ? (4 Bytes) - TEXT base address (4 Bytes) - Flags = 0xFFFF - DATA base address (4 Bytes) - BSS base address (4 Bytes)
-
collision: clr.w d0 clr.w d1 move.w OBJ1X,d0 add.w OBJ1W,d0 move.w OBJ2X,d1 cmp.w d0,d1 blt .none; if OBJ2X < (OBJ1X+OBJ1W) goto .none => should be if OBJ2X > (OBJ1X+OBJ1W) goto .none clr.w d0 clr.w d1 move.w OBJ1X,d0 move.w OBJ2X,d1 add.w OBJ2W,d1 cmp.w d0,d1 bgt .none; if (OBJ2X+OBJ2W) > OBJ1X goto .none => should be if (OBJ2X+OBJ2W) < OBJ1X goto .none clr.w d0 clr.w d1 move.w OBJ1Y,d0 add.w OBJ1H,d0 move.w OBJ2Y,d1 cmp.w d0,d1 blt .none; if OBJ2Y < (OBJ1Y+OBJ1H) goto .none => should be if OBJ2Y > (OBJ1Y+OBJ1H) goto .none clr.w d0 clr.w d1 move.w OBJ1Y,d0 add.w OBJ1H,d0 move.w OBJ2Y,d1 cmp.w d0,d1 blt .none; if OBJ2Y < (OBJ1Y+OBJ1H) goto .none (why do it again ? :p) clr.w d0 clr.w d1 move.w OBJ1Y,d0 move.w OBJ2Y,d1 add.w OBJ2H,d1 cmp.w d0,d1 bgt .none; if (OBJ2Y+OBJ2H) > OBJ1Y goto .none => should be if (OBJ2Y+OBJ2H) < OBJ1Y goto .none move.w #$FFFF,BG rts .none: move.w #$0000,BG rts "cmp" computes: destination - source => condition code. To check if destination > source : cmp src, dst bgt dst_greater_than_src To check if destination < source : cmp src, dst blt dst_lower_than_src