extern void SP_HAM7SCR(void* c2pscreen __asm("a0"), void* bitplanes __asm("a1"));
section text, code xdef SP_HAM7SCR xdef _SP_HAM7SCR SP_HAM7SCR _SP_HAM7SCR movem.l d2-d7/a2-a6,-(sp) move.l #%00001111000011110000111100001111,d6 move.l #%00000000111111110000000011111111,d7 move.l #%00010001000100010001000100010001,a5 ; lea chunkybuffer,a0 ;pointer to 15bit scrambled word chunkybuffer ; move.l logscreen,a1 ;pointer to interleaved 8bpl ham8 screen
movem.l (sp)+,d2-d7/a2-a6 rtsDodatkowo zmienne:
Scrx i Scryzamieniłem w kodzie na odpowiednio
1280 i 256
// Get real, full info from display mode id. struct DimensionInfo dn_Dimensioninfo; GetDisplayInfoData(NULL, (UBYTE*)&dn_Dimensioninfo, sizeof(struct DimensionInfo), DTAG_DIMS, FRM_requested_mode_id); FRM_requested_width = dn_Dimensioninfo.Nominal.MaxX + 1; FRM_requested_height = dn_Dimensioninfo.Nominal.MaxY + 1; FRM_requested_bits_per_pixel = dn_Dimensioninfo.MaxDepth; // Add HAM flag to requested display mode id. FRM_requested_mode_id |= HAM_KEY; FRM_screen = OpenScreenTags( NULL, SA_DisplayID, FRM_requested_mode_id, SA_Depth, FRM_requested_bits_per_pixel, SA_Type, CUSTOMSCREEN, SA_Quiet, TRUE, SA_Behind, TRUE, SA_ShowTitle, FALSE, SA_Draggable, FALSE, SA_Exclusive, TRUE, SA_AutoScroll, FALSE, // SA_Interleaved, TRUE, TAG_END);
SP_HAM7SCR(IO_prefs.output_buffer_32, FRM_Chip_Buffer[buffer_counter]); // Link ready buffer to screen bitmap. FRM_screen->BitMap.Planes[0] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 0; FRM_screen->BitMap.Planes[1] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 1; FRM_screen->BitMap.Planes[2] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 2; FRM_screen->BitMap.Planes[3] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 3; FRM_screen->BitMap.Planes[4] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 4; FRM_screen->BitMap.Planes[5] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 5; // ---- nie jestem pewien tych dwóchostatnich - u Kalmsa nie mogło ich być --- FRM_screen->BitMap.Planes[6] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 6; FRM_screen->BitMap.Planes[7] = (PLANEPTR)FRM_Chip_Buffer[buffer_counter] + FRM_HAM8_bitplane_size * 7; RethinkDisplay();
UBYTE* FRM_Chip_Buffer[] = { NULL, NULL };
for (int y = 0; y < 256; y++) { for (int x = 0; x < 320; x++) { UWORD rgb555 = (5 << 5) | (15 << 5) | 5; buf15[x+y*320] = rgb555; } }
@mateusz_s, post #1
@mateusz_s, post #1