Skip to content

Commit e66ce09

Browse files
committed
WIP fleshing out sms component
1 parent 6010599 commit e66ce09

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

components/sms/include/sms.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
#include <vector>
66

77
void reset_sms();
8-
void init_sms(const std::string& rom_filename, uint8_t *romdata, size_t rom_data_size);
8+
void init_sms(uint8_t *romdata, size_t rom_data_size);
9+
void init_gg(uint8_t *romdata, size_t rom_data_size);
910
void load_sms(std::string_view save_path);
1011
void save_sms(std::string_view save_path);
1112
void start_sms_tasks();

components/sms/src/sms.cpp

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
// include private sms headers
44
extern "C" {
5-
#include "emuapi.h"
5+
#include "sms.h"
6+
#include "wrapemu.h"
7+
#include "vdp.h"
68
}
79

810
#include <string>
@@ -37,17 +39,31 @@ void set_sms_video_fill() {
3739
void reset_sms() {
3840
}
3941

40-
static uint8_t first_frame = 0;
41-
void init_sms(const std::string& rom_filename, uint8_t *romdata, size_t rom_data_size) {
42-
static bool initialized = false;
43-
if (!initialized) {
44-
} else {
45-
}
46-
initialized = true;
42+
void emu_DrawLinePal16(unsigned char * VBuf, int width, int height, int line) {
43+
// TODO: implement
44+
}
45+
46+
void init_sms(uint8_t *romdata, size_t rom_data_size) {
47+
sms_Init();
48+
sms.ram = (uint8_t*)get_vram0();
49+
sms.sram= (uint8_t*)get_vram1();
50+
sms.dummy = get_frame_buffer1();
51+
vdp.vram = get_frame_buffer0();
52+
sms_Start(romdata, rom_data_size);
53+
}
54+
55+
void init_gg(uint8_t *romdata, size_t rom_data_size) {
56+
sms_Init();
57+
sms.ram = (uint8_t*)get_vram0();
58+
sms.sram= (uint8_t*)get_vram1();
59+
sms.dummy = get_frame_buffer1();
60+
vdp.vram = get_frame_buffer0();
61+
gg_Start(romdata, rom_data_size);
4762
}
4863

4964
void run_sms_rom() {
5065
auto start = std::chrono::high_resolution_clock::now();
66+
sms_Step();
5167
// frame rate should be 60 FPS, so 1/60th second is what we want to sleep for
5268
auto delay = std::chrono::duration<float>(1.0f/60.0f);
5369
std::this_thread::sleep_until(start + delay);
@@ -65,7 +81,7 @@ std::vector<uint8_t> get_sms_video_buffer() {
6581
std::vector<uint8_t> frame(SMS_SCREEN_WIDTH * SMS_VISIBLE_HEIGHT * 2);
6682
// the frame data for the SMS is stored in frame_buffer0 as a 8 bit index into the palette
6783
// we need to convert this to a 16 bit RGB565 value
68-
uint8_t *frame_buffer0 = get_frame_buffer0();
84+
// uint8_t *frame_buffer0 = get_frame_buffer0();
6985
// uint16_t *palette = nullptr; // get_sms_palette();
7086
// for (int i = 0; i < SMS_SCREEN_WIDTH * SMS_VISIBLE_HEIGHT; i++) {
7187
// uint8_t index = frame_buffer0[i];
@@ -83,4 +99,5 @@ void start_sms_tasks() {
8399
}
84100

85101
void deinit_sms() {
102+
sms_DeInit();
86103
}

0 commit comments

Comments
 (0)