@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; }