Skip to content

Commit fd73d55

Browse files
committed
Opcodes, QuickSave disabled, Videomode
1 parent 08ae5bc commit fd73d55

File tree

3 files changed

+72
-11
lines changed

3 files changed

+72
-11
lines changed

odroid-go-common/components/odroid/odroid_display_pcengine.h

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#ifndef ODROID_DISPLAY_EMU_IMPL
22
void ili9341_write_frame_pcengine_mode0(uint8_t* buffer, uint16_t* pal);
3+
void ili9341_write_frame_pcengine_mode0_w224(uint8_t* buffer, uint16_t* pal);
34
void ili9341_write_frame_pcengine_mode0_w256(uint8_t* buffer, uint16_t* pal);
45
void ili9341_write_frame_pcengine_mode0_w320(uint8_t* buffer, uint16_t* pal);
56
void ili9341_write_frame_pcengine_mode0_w336(uint8_t* buffer, uint16_t* pal);
@@ -87,6 +88,44 @@ void ili9341_write_frame_pcengine_mode0(uint8_t* buffer, uint16_t* pal)
8788
//memset(sPtr, 0, MISSING);
8889
}
8990

91+
#define ODROID_DISPLAY_FRAME_RES(FUNC_NAME, WIDTH) \
92+
void FUNC_NAME(uint8_t* buffer, uint16_t* pal) \
93+
{ \
94+
uint8_t* framePtr = buffer ; \
95+
uint8_t *sPtr = SPM; \
96+
short x, y; \
97+
uchar pal0 = Pal[0]; \
98+
send_reset_drawing((320-WIDTH)/2, 0, WIDTH, 240); \
99+
for (y = 0; y < PCENGINE_GAME_HEIGHT; y += 4) \
100+
{ \
101+
uint16_t* line_buffer = line_buffer_get(); \
102+
uint16_t* line_buffer_ptr = line_buffer; \
103+
for (short i = 0; i < 4; ++i) \
104+
{ \
105+
for (x = 0; x < WIDTH; ++x) \
106+
{ \
107+
uint8_t source=*framePtr; \
108+
*framePtr = pal0; \
109+
framePtr++; \
110+
uint16_t value1 = pal[source]; \
111+
*line_buffer_ptr = value1; \
112+
line_buffer_ptr++; \
113+
*sPtr = 0; \
114+
sPtr++; \
115+
} \
116+
framePtr+=280 + (320-WIDTH); \
117+
sPtr+=280 + (320-WIDTH); \
118+
} \
119+
send_continue_line(line_buffer, WIDTH, 4); \
120+
} \
121+
}
122+
123+
ODROID_DISPLAY_FRAME_RES(ili9341_write_frame_pcengine_mode0_w224, 224)
124+
125+
126+
127+
128+
90129
void ili9341_write_frame_pcengine_mode0_w256(uint8_t* buffer, uint16_t* pal)
91130
{
92131
uint8_t* framePtr = buffer ;

pcengine-go/components/huexpress/engine/h6280_instr_switch.h

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,7 @@ static _used[256];
175175
break;
176176
case 0x15:
177177
// {ora_zpx, AM_ZPX, "ORA"}
178-
OP_CALL_THROUGH_LOOKUP
179-
//_OPCODE_ora__(zpindy_operand, 10, 7, _)
178+
_OPCODE_ora__(zpx_operand, 7, 4, 2)
180179
break;
181180
case 0x16:
182181
// {asl_zpx, AM_ZPX, "ASL"}
@@ -210,7 +209,19 @@ static _used[256];
210209
break;
211210
case 0x1C:
212211
// {trb_abs, AM_ABS, "TRB"}
213-
OP_CALL_THROUGH_LOOKUP
212+
{
213+
uint16 abs_addr = get_16bit_addr(reg_pc + 1);
214+
uchar temp = get_8bit_addr(abs_addr);
215+
uchar temp1 = (~reg_a) & temp;
216+
217+
reg_p = (reg_p & ~(FL_N | FL_V | FL_T | FL_Z))
218+
| ((temp1 & 0x80) ? FL_N : 0)
219+
| ((temp1 & 0x40) ? FL_V : 0)
220+
| ((temp & reg_a) ? 0 : FL_Z);
221+
cycles += 7;
222+
put_8bit_addr(abs_addr, temp1);
223+
reg_pc += 3;
224+
}
214225
break;
215226
case 0x1D:
216227
// {ora_absx, AM_ABSX, "ORA"}
@@ -297,7 +308,7 @@ static _used[256];
297308
break;
298309
case 0x2C:
299310
// {bit_abs, AM_ABS, "BIT"}
300-
OP_CALL_THROUGH_LOOKUP
311+
_OPCODE_bit__(abs_operand, 5, 3)
301312
break;
302313
case 0x2D:
303314
// {and_abs, AM_ABS, "AND"}
@@ -338,8 +349,7 @@ static _used[256];
338349
break;
339350
case 0x36:
340351
// {rol_zpx, AM_ZPX, "ROL"}
341-
OP_CALL_THROUGH_LOOKUP
342-
// _OPCODE_rol_zp(reg_x)
352+
_OPCODE_rol_zp(reg_x)
343353
break;
344354
case 0x37:
345355
// {rmb3, AM_ZP, "RMB3"}
@@ -396,7 +406,14 @@ static _used[256];
396406
break;
397407
case 0x42:
398408
// {say, AM_IMPL, "SAY"}
399-
OP_CALL_THROUGH_LOOKUP
409+
{
410+
uchar temp = reg_y;
411+
reg_p &= ~FL_T;
412+
reg_y = reg_a;
413+
reg_a = temp;
414+
reg_pc++;
415+
cycles += 3;
416+
}
400417
break;
401418
case 0x43:
402419
// {tma, AM_IMMED, "TMA"}
@@ -954,7 +971,7 @@ static _used[256];
954971
break;
955972
case 0xA3:
956973
// {tstins_zpx, AM_TST_ZPX, "TST"}
957-
OP_CALL_THROUGH_LOOKUP
974+
_OPCODE_tstins_(zpx_operand, 7, 3)
958975
break;
959976
case 0xA4:
960977
// {ldy_zp, AM_ZP, "LDY"}
@@ -1369,7 +1386,9 @@ static _used[256];
13691386
break;
13701387
case 0xF4:
13711388
// {set, AM_IMPL, "SET"}
1372-
OP_CALL_THROUGH_LOOKUP
1389+
reg_p |= FL_T;
1390+
reg_pc++;
1391+
cycles += 2;
13731392
break;
13741393
case 0xF5:
13751394
// {sbc_zpx, AM_ZPX, "SBC"}

pcengine-go/main/main.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ void videoTask_mode0(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0_sc
151151

152152

153153
void videoTask_mode0(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0) }
154+
void videoTask_mode0_w224(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0_w224) }
154155
void videoTask_mode0_w256(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0_w256) }
155156
void videoTask_mode0_w320(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0_w320) }
156157
void videoTask_mode0_w336(void *arg) { VID_TASK(ili9341_write_frame_pcengine_mode0_w336) }
@@ -282,7 +283,9 @@ NOINLINE void update_display_task(int width)
282283
}
283284

284285
TaskFunction_t taskFunc;
285-
if (width == 256)
286+
if (width == 224)
287+
taskFunc = &videoTask_mode0_w224;
288+
else if (width == 256)
286289
taskFunc = &videoTask_mode0_w256;
287290
else if (width == 320)
288291
taskFunc = &videoTask_mode0_w320;
@@ -416,7 +419,7 @@ NOINLINE void app_init(void)
416419
#endif
417420
#endif
418421

419-
// void QuickSaveSetBuffer(void* data);
422+
QuickSaveSetBuffer(my_special_alloc(false, 1, 512));
420423

421424
odroid_audio_init(odroid_settings_AudioSink_get(), AUDIO_SAMPLE_RATE);
422425

0 commit comments

Comments
 (0)