// ramToPpm: write the displayed hires page of a 64K RAM dump as a PPM. // usage: ramToPpm dump.bin out.ppm [1|2] #include #include #include "hires.h" #include "machine.h" int main(int argc, char **argv) { if (argc < 3) { fprintf(stderr, "usage: %s dump.bin out.ppm [1|2]\n", argv[0]); return 2; } FILE *f = fopen(argv[1], "rb"); if (f == NULL || fread(fs2Ram, 1, MACHINE_RAM_SIZE, f) != MACHINE_RAM_SIZE) { fprintf(stderr, "cannot read %s\n", argv[1]); return 1; } fclose(f); int page = (argc > 3) ? atoi(argv[3]) : 1; uint32_t *pixels = malloc((size_t)HIRES_WIDTH * HIRES_ROWS * sizeof(uint32_t)); hiresDecodeToRgb(page == 2 ? MACHINE_HIRES_PAGE2 : MACHINE_HIRES_PAGE1, pixels); FILE *o = fopen(argv[2], "wb"); if (o == NULL) { fprintf(stderr, "cannot write %s\n", argv[2]); return 1; } fprintf(o, "P6\n%d %d\n255\n", HIRES_WIDTH, HIRES_ROWS); for (int i = 0; i < HIRES_WIDTH * HIRES_ROWS; i++) { uint8_t rgb[3] = { (uint8_t)(pixels[i] >> 16), (uint8_t)(pixels[i] >> 8), (uint8_t)pixels[i] }; fwrite(rgb, 1, 3, o); } fclose(o); free(pixels); return 0; }