-
Content count
1,134 -
Joined
-
Last visited
Posts posted by SCPCD
-
-
n'anniv

-

The Retro-gaming Connexion association and Jagware is proud to announce the upcoming release of the game Another World on Atari Jaguar console using JagtopusTM technology.
The game has been adapted by Sebastien Briais from Removers'group with the courtesy of Eric Chahi.
The RGC association is responsible for producing this game in the truest spirit of the games of the time: Cartridge with box and manual.
In order to fund the project through the various stages of manufacture the game is being offered by pre-order..
Each person who reserve a copy will receive a confirmation slip numbered by mail.
The price: 62 euros by Paypal (60 euros by check / IBAN payable to "Retro-gaming Connexion")
For when: Output of Another World is scheduled for spring 2013.
How: Contact the association by mail directly to RGC
Order:
More technicals informations, screenshots and video ingame: Remover's AnotherWorld Page
-
Félicitation \o/

-
SCPCD : remember, you're supposed not to stop the GPU and the DSP from 68k code, but only from GPU/DSP code
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.
Same thing for the object list pointer, I'm not sure it's safe to write it outside of the VBL (or even from 68k code at all, even if we all do this
)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
-
N'anniv

-
Happy birthday zero

-
Ny'anniv Orion_ !
-
happy birthday !

-
happy birthday fredifredo

-
-
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 linethen 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

-
my guess is that getting transparency is only really achieved through RMW bit and CRY coloring or can the RMW bit be used with RGB successfully?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 ?
-
Thanks

-
Thanks

Nyanpy birthday

-
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)
-
-
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)

-
Nyanniv !!
-
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

-
Merry christmas !
Gt Is The Man Of The Day
in Random chatter
Posted · Report reply
Happy Birthday GT Turbo !