Path: blob/main/static/src/gs/public/microsoft-flight-simulator/src/main.c
1325 views
#include "wasm_libc_wrapper/stdio.h"1#include "wasm_libc_wrapper/stdlib.h"23#include"devices/ram.h"4#include"devices/vga.h"5#include"devices/pic.h"6#include"devices/pit.h"7#include"devices/rom.h"8#include"devices/ems.h"9#include"devices/screen.h"10#include"devices/disk.h"11#include"fs/fs.h"12#include"dos/dos.h"13#include"cpu/cpu.h"14#include"utils/exit_strategy.h"1516#include"dos/mz.h"17#include"sdl.h"18#include"fs4.h"19#include"debug/compare.h"2021//#define DEBUG22//#define SINGLESTEP2324void disasmcsip(int count) {25uint16_t seg, ofs;26getcsip(&seg, &ofs);27disasmout(seg, ofs, count);28}2930void LoadMz(char *filename) {31uint16_t index = 0;32FILEFS *file = FindFile(filename, &index);33if (file == NULL) {34printf("Error: Cannot open file '%s'\n", filename);35exit(1);36}37printf("open %s\n", file->filename);38LoadMzExe(file->data, file->size);39}4041void UpdateScreen() {42VGA_Draw();43SDLUpdate();44SDLPoll();45}4647#ifndef __wasm__4849int fsize(FILE *fp) {50int prev = ftell(fp);51fseek(fp, 0L, SEEK_END);52int sz = ftell(fp);53fseek(fp, prev, SEEK_SET);54return sz;55}5657void MountFs(char *filename) {58FILE *fp = fopen(filename, "rb");59if (fp == NULL) {60fprintf(stderr, "Error: Cannot open file '%s'\n", filename);61exit(1);62}63int size = fsize(fp);64printf("Load filesystem '%s' with size %i\n", filename, size);65char *data = GetMountStorage(size);66size_t ret = fread(data, size, 1, fp);67fclose(fp);68FinishMountStorage();69}7071#else72void MountFs(char *filename) {}73#endif7475void SetFSVersion(int _version) {76int fsversion = _version;7778printf("Loading FS version\n");79if (fsversion == 1) {80MountFs("data/fs1.fs");81RunImage("fs1.img");82}83if (fsversion == 2) {84MountFs("data/fs2.fs");85RunImage("fs2.img");86}87if (fsversion == 3) {88MountFs("data/fs3.fs");89LoadMz("fs3.exe");90}91if (fsversion == 4) {92MountFs("data/fs4.fs");93LoadMz("fs4.exe");94}95if (fsversion == 5) {96MountFs("data/fs5.fs");97LoadMz("fs5.ovl");98//LoadMz("fs5.exe");99}100}101102void Init() {103printf("Init system\n");104printf(" - Init screen\n");105ScreenInit();106printf(" - Init SDL\n");107SDLInit();108printf(" - Init RAM\n");109RAMInit();110printf(" - Init ROM\n");111ROMInit();112printf(" - Init DOS\n");113DOSInit();114printf(" - Init EMS\n");115EMSInit();116printf(" - Init PIC\n");117PIC_Init();118printf(" - Init PIT\n");119PIT_Init();120printf(" - Init VGA\n");121VGA_Init();122printf(" - Init x86\n");123reset86();124printf("Init system finished\n");125126//LoadMzExeFromFile("fs/plasma/PLASMA.EXE");127//LoadMzExeFromFile("fs/fc/FCSLIDE1.EXE");128//LoadMzExeFromFile("fs/scr/cga.exe");129//LoadMzExeFromFile("fs/nebega/Nebega.exe");130//LoadMzExeFromFile("fs/tower/TOWER.EXE");131//LoadMzExeFromFile("fs/scr/ega.exe");132//LoadCOMFromFile("fs/bcctests/float.com");133//LoadMzExeFromFile("fs/tcc/TC/TCDEF.EXE");134//LoadMzExeFromFile("fs/tcc/tc2/tc2/NONAME.EXE");135//LoadMzExeFromFile("fs/tcc/TC/BIN/TEST.EXE");136//LoadMzExeFromFile("fs/tcc/TC/TEST.EXE");137}138139static uint32_t count = 0;140141void Run(int steps) {142if (isRestart()) {143printf("Restart\n");144Init();145}146147#ifdef DEBUG148//if (count > 8890000) disasmcsip(1);149//exec86(0x1);150compare(count);151if ((count & 0xFFFF) == 0) UpdateScreen();152#elif defined SINGLESTEP153disasmcsip(1);154exec86(0x1);155if ((count & 0xFFFF) == 0) UpdateScreen();156#else157//disasmcsip(1);158exec86(steps);159//#ifndef __wasm__160if ((count&0xF) == 0) UpdateScreen();161//#endif162#endif163count++;164/*165int ticks = SDL_GetTicks();166if (c64->cpu.count / 985 - ((ticks - starttick)) > 0) {167SDL_Delay(c64->cpu.count / 985 - ((ticks - starttick)));168}169*/170}171172int main() {173Init();174SetFSVersion(4);175//FS4Expandexe();176177while (1) {178Run(0x5FFFF);179//Run(0x001FF);180//SDLDelay(50);181}182}183184185