Changeset 1efc42c in buchla-emu for emu


Ignore:
Timestamp:
07/30/2017 06:18:21 PM (7 years ago)
Author:
Thomas Lopatic <thomas@…>
Branches:
master
Children:
c5b6c90
Parents:
caff491
Message:

Load floppy disk image file.

Location:
emu
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • emu/all.h

    rcaff491 r1efc42c  
    6262extern int32_t kbd_verbose;
    6363
     64extern const char *bios;
     65extern const char *disk;
     66
    6467extern void sdl_init(void);
    6568extern void sdl_quit(void);
    6669
    67 extern void cpu_loop(const char *bios);
     70extern void cpu_loop(void);
    6871
    6972extern void fpu_init(void);
  • emu/cpu.c

    rcaff491 r1efc42c  
    131131}
    132132
    133 static void bios_init(const char *bios)
     133static void bios_init(void)
    134134{
    135135        inf("loading BIOS file %s", bios);
     
    611611}
    612612
    613 void cpu_loop(const char *bios)
     613void cpu_loop(void)
    614614{
    615615        hw_init();
    616         bios_init(bios);
     616        bios_init();
    617617
    618618        inf("entering CPU loop");
  • emu/fdd.c

    rcaff491 r1efc42c  
    2424int32_t fdd_verbose = 0;
    2525
     26#define N_CYL 80
     27#define N_SID 2
     28#define N_SEC 18
     29#define SZ_SEC 512
     30
     31#define SZ_DISK (N_CYL * N_SID * N_SEC * SZ_SEC)
     32
     33static uint8_t image[SZ_DISK];
     34
    2635void fdd_init(void)
    2736{
    2837        ver("fdd init");
     38        inf("loading disk image file %s", disk);
     39
     40        SDL_RWops *ops = SDL_RWFromFile(disk, "rb");
     41
     42        if (ops == NULL) {
     43                fail("error while opening disk image file %s", disk);
     44        }
     45
     46        size_t loaded = 0;
     47
     48        while (loaded < SZ_DISK) {
     49                size_t n_rd = SDL_RWread(ops, image + loaded, 1, SZ_DISK - loaded);
     50
     51                if (n_rd == 0) {
     52                        fail("error while reading disk image file %s", disk);
     53                }
     54
     55                loaded += n_rd;
     56        }
     57
     58        SDL_RWclose(ops);
    2959}
    3060
  • emu/main.c

    rcaff491 r1efc42c  
    3838};
    3939
    40 static const char *bios = "bios.abs";
     40const char *bios = "bios.abs";
     41const char *disk = "buchla.disk";
    4142
    4243static void usage(FILE *fh)
    4344{
    44         fprintf(fh, "usage: buchla [-h] [-v comp [-v comp [...]]] [-b bios]\n");
     45        fprintf(fh, "usage: buchla [-h] [-v comp [-v comp [...]]] [-b bios] [-d disk]\n");
    4546        fprintf(fh, "where comp is one of: ");
    4647
     
    6869
    6970                        bios = argv[i];
     71                        continue;
     72                }
     73
     74                if (strcmp(argv[i], "-d") == 0) {
     75                        if (++i == argc) {
     76                                usage(stderr);
     77                                fprintf(stderr, "missing argument to -d\n");
     78                                exit(1);
     79                        }
     80
     81                        disk = argv[i];
    7082                        continue;
    7183                }
     
    111123        sdl_init();
    112124
    113         cpu_loop(bios);
     125        cpu_loop();
    114126
    115127        sdl_quit();
Note: See TracChangeset for help on using the changeset viewer.