@c64portal, post #1
- startup kod który wyłączy WB i przełączy tryb w PAL i pozwoli zbudować własną copper listę ale uwzględni że mogę go uruchomić z RTG. Startup Photona tego nie uwzględnia
movea.l 4.w,a6 lea intuitionName(pc),a1 moveq #40,d0 jsr _LVOOpenLibrary(a6) move.l d0,intuitionBase beq.s .libError intuitionBase: dc.l 0 intuitionName: dc.b 'intuition.library',0
movea.l intuitionBase(pc),a6 jsr _LVOCloseWorkBench(a6). tst.l d0 beq.s .wbCloseError
@Hexmage960, post #2
@c64portal, post #3
Z kolorami (24 bit) to w sumie bym sobie jakoś poradził bo w sumie wiem jak to się robi ale może ktoś ma gotowca, np jakieś makro? procedurkę?
w zasadzie to co nie jest dla mnie jasne to jak wyłączyć tryb RTG, przełączyć się na PAL i moją copperlistę a potem wrócić do RTG
@Hexmage960, post #4
chyba AGA i RTG pracują niezależnie
@c64portal, post #5
view = GfxBase->ActiView; LoadView( NULL ); WaitTOF(); WaitTOF(); SetUpCop( &pic ); custom.dmacon = DMAF_SPRITE; custom.intena = INTF_VERTB; custom.cop1lc = (ULONG)cprlist1; custom.copjmp1 = NULL; MouseWait(); custom.cop1lc = (ULONG)GfxBase->copinit; custom.copjmp1 = NULL; custom.intena = INTF_SETCLR|INTF_VERTB; custom.dmacon = DMAF_SETCLR|DMAF_SPRITE; LoadView( view ); WaitTOF(); WaitTOF();
@asman, post #6
A możesz wkleić kod Twojego startupu ?
@c64portal, post #9
planes: dc.w bplpt,0,bplpt+2,0 dc.w bplpt+4,0,bplpt+6,0 dc.w bplpt+8,0,bplpt+10,0 dc.w bplpt+12,0,bplpt+14,0 dc.w $1007,$fffe sprites: dc.w sprpt,0,sprpt+2,0 dc.w sprpt+4,0,sprpt+6,0 dc.w sprpt+8,0,sprpt+10,0 dc.w sprpt+12,0,sprpt+14,0 dc.w sprpt+16,0,sprpt+18,0 dc.w sprpt+20,0,sprpt+22,0 dc.w sprpt+24,0,sprpt+26,0 dc.w sprpt+28,0,sprpt+30,0 dc.w $ffff,$fffe
MainGameLoop: bsr WaitForFrame bsr UpdateSpritePointers ;poruszanie hero i enemies, kolizje, boby i inne bzdety.
@asman, post #10
UWORD nyb1 = 0x000;
UWORD nyb2 ;
for (int j=1; j<9 ; j++){
for (int i=0; i<32; i++){
nyb2 = 0x000;
custom->bplcon3 = nyb1 | nyb2;
UBYTE r = c[k+1 ] >>4 ;
UBYTE g = c[k+2 ] >>4 ;
UBYTE b = c[k+3 ] >>4 ;
custom->color[i] = r<<8 | g<<4 | b;
nyb2 = 0x200;
custom->bplcon3 = nyb1 | nyb2;
r = c[k+1 ] &0x0f ;
g = c[k+2 ] &0x0f ;
b = c[k+3 ] &0x0f ;
custom->color[i] = r<<8 | g<<4 | b;
k+=4;
}
nyb1 = 0x2000*j;
}CCFLAGS = -g -MP -MMD -m68060 -Ofast -nostdlib -Wextra -Wno-unused-function -Wno-volatile-register-var -fomit-frame-pointer -fno-tree-loop-distribution -flto -fwhole-program -fno-exceptions VASMFLAGS = -m68060 -Felf -opt-fconst -nowarn=62 -dwarf=3 -quiet -x -I. -I$(SDKDIR)
@Don_Adan, post #12
static APTR GetVBR(void) {
APTR vbr = 0;
UWORD getvbr[] = { 0x4e7a, 0x0801, 0x4e73 }; // MOVEC.L VBR,D0 RTE
if (SysBase->AttnFlags & AFF_68010)
vbr = (APTR)Supervisor((ULONG (*)())getvbr);
return vbr;
}@c64portal, post #15
@asman, post #17
__attribute__((section("text")))
__attribute__((aligned(4)))
static const UWORD getvbr[] = {0x4e7a, 0x0801, 0x4e73};@asman, post #19
@c64portal, post #18
GetVBR
moveq #0,d0 ; default at $0
move.l 4.w,a6
btst #0,296+1(a6) ; 68010+?
beq.b is68k ; nope.
jsr SuperState(a6)
movec vbr,d0
jsr UserState(a6)
is68k
; VBR in D0@teh_KaiN, post #20
@Don_Adan, post #24
ULONG asmVBR(void)="\tmovec vbr,d0";
ULONG VbrGet(void)
{
return asmVBR();
}@Don_Adan, post #24
@asman, post #25
@Don_Adan, post #27
Ciekawe czy "c64portal" uzywa tego VBR do czegos, bo nie trzeba jego uzywac.
void SetInterruptHandler(APTR interrupt) {
*(volatile APTR*)(((UBYTE*)VBR)+0x6c) = interrupt;
}