Skip to content

Commit 358ca41

Browse files
port doom to new video library
1 parent 4f804e4 commit 358ca41

File tree

5 files changed

+14
-41
lines changed

5 files changed

+14
-41
lines changed

libraries/Arduino_H7_Video/src/Arduino_H7_Video.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ int Arduino_H7_Video::begin() {
9898
#endif
9999

100100
/* Configure SDRAM */
101-
SDRAM.begin(dsi_getFramebufferEnd());
101+
SDRAM.begin(dsi_getFramebufferEnd()); //FIXME: SDRAM init after video controller init can cause display glitch at start-up
102102

103103
return 0;
104104
}

libraries/Arduino_H7_Video/src/dsi.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -321,16 +321,6 @@ uint32_t dsi_getFramebufferEnd(void) {
321321
return (FB_BASE_ADDRESS + 2 * (lcd_x_size * lcd_y_size * BYTES_PER_PIXEL));
322322
}
323323

324-
uint32_t dsi_getNextFrameBuffer() {
325-
int fb = pend_buffer++ % 2;
326-
327-
__HAL_LTDC_LAYER_ENABLE(&(ltdc), fb);
328-
__HAL_LTDC_LAYER_DISABLE(&(ltdc), !fb);
329-
__HAL_LTDC_VERTICAL_BLANKING_RELOAD_CONFIG(&(ltdc));
330-
331-
return fb ? ltdc.LayerCfg[0].FBStartAdress : ltdc.LayerCfg[1].FBStartAdress;
332-
}
333-
334324
void dsi_drawCurrentFrameBuffer(void) {
335325
int fb = pend_buffer++ % 2;
336326

libraries/Arduino_H7_Video/src/dsi.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ void dsi_lcdDrawImage(void *pSrc, void *pDst, uint32_t xSize, uint32_t ySize, u
3737
void dsi_lcdFillArea(void *pDst, uint32_t xSize, uint32_t ySize, uint32_t ColorMode);
3838
void dsi_configueCLUT(uint32_t* clut);
3939
void dsi_drawCurrentFrameBuffer(void);
40-
uint32_t dsi_getNextFrameBuffer(void);
4140
uint32_t dsi_getCurrentFrameBuffer(void);
4241
uint32_t dsi_getActiveFrameBuffer(void);
4342
uint32_t dsi_getFramebufferEnd(void);

libraries/doom/src/doomgeneric_arduino.cpp

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
#include "Arduino.h"
44
#include "mbed.h"
5-
#include "Portenta_Video.h"
5+
#include "Arduino_H7_Video.h"
6+
#include "dsi.h"
67

78
#define sleep _sleep
89

@@ -89,8 +90,6 @@ static void addKeyToQueue(int pressed, unsigned char keyCode)
8990
s_KeyQueueWriteIndex %= KEYQUEUE_SIZE;
9091
}
9192

92-
struct edid recognized_edid;
93-
9493
uint32_t LCD_X_Size = 0, LCD_Y_Size = 0;
9594
DMA2D_HandleTypeDef DMA2D_Handle;
9695

@@ -162,30 +161,13 @@ static void DMA2D_Init(uint16_t xsize, uint16_t ysize)
162161
HAL_DMA2D_PollForTransfer(&DMA2D_Handle, 100);
163162
}
164163

165-
void DG_Init()
166-
{
167-
int ret = -1;
168-
169-
ret = anx7625_init(0);
170-
if(ret < 0) {
171-
printf("Cannot continue, anx7625 init failed.\n");
172-
while(1);
173-
}
164+
Arduino_H7_Video display(640, 480, USBCVideo);
174165

175-
anx7625_wait_hpd_event(0);
176-
anx7625_dp_get_edid(0, &recognized_edid);
177-
//edid_set_framebuffer_bits_per_pixel(&recognized_edid, 16, 0);
178-
//set_display_mode(&recognized_edid, EDID_MODE_720x480_60Hz);
179-
//anx7625_dp_start(0, &recognized_edid, EDID_MODE_1280x720_60Hz);
180-
anx7625_dp_start(0, &recognized_edid, EDID_MODE_640x480_60Hz);
166+
uint32_t fbs[2];
181167

182-
LCD_X_Size = stm32_getXSize();
183-
LCD_Y_Size = stm32_getYSize();
184-
185-
SDRAM.begin(getFramebufferEnd());
186-
187-
stm32_LCD_Clear(0);
188-
stm32_LCD_Clear(0);
168+
void DG_Init()
169+
{
170+
display.begin();
189171
}
190172

191173
void DG_OnPaletteReload() {
@@ -224,8 +206,8 @@ static void DMA2D_CopyBuffer(uint32_t *pSrc, uint32_t *pDst)
224206
uint32_t xPos, yPos, destination;
225207

226208
/*##-1- calculate the destination transfer address ############*/
227-
xPos = (stm32_getXSize() - DOOMGENERIC_RESX) / 2;
228-
yPos = (stm32_getYSize() - DOOMGENERIC_RESY) / 2;
209+
xPos = (display.width() - DOOMGENERIC_RESX) / 2;
210+
yPos = (display.height() - DOOMGENERIC_RESY) / 2;
229211

230212
destination = (uint32_t)pDst; // + ((yPos * stm32_getXSize()) + xPos) * 4;
231213

@@ -239,14 +221,15 @@ static void DMA2D_CopyBuffer(uint32_t *pSrc, uint32_t *pDst)
239221

240222
void DG_DrawFrame()
241223
{
242-
uint32_t fb = getNextFrameBuffer();
224+
uint32_t fb = dsi_getCurrentFrameBuffer();
243225
#ifdef CORE_CM7
244226
//SCB_CleanInvalidateDCache();
245227
//SCB_InvalidateICache();
246228
SCB_InvalidateDCache_by_Addr((uint32_t *)fb, DOOMGENERIC_RESX * DOOMGENERIC_RESY * 4);
247229
#endif
248230

249231
DMA2D_CopyBuffer((uint32_t *)DG_ScreenBuffer, (uint32_t *)fb);
232+
dsi_drawCurrentFrameBuffer();
250233
//handleKeyInput();
251234
}
252235

libraries/doom/src/i_video.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ int mouse_threshold = 10;
114114

115115
// Gamma correction level to use
116116

117-
int usegamma = 0;
117+
int usegamma = 2;
118118

119119
typedef struct
120120
{
@@ -266,6 +266,7 @@ void I_FinishUpdate (void)
266266
uint8_t* inbuf = I_VideoBuffer;
267267
uint8_t* outbuf = I_VideoBuffer_FB;
268268

269+
// this function simply doubles the resolution
269270
for (uint32_t i = 0; i < SCREENHEIGHT; i++) {
270271
uint8_t* inbuf_temp = inbuf;
271272
uint8_t* outbuf_temp = outbuf;

0 commit comments

Comments
 (0)