ScriptedAmigaEmulator/sae/filesys.js
Rupert Hausberger fbf36a4fa5 update 0.9.0
2016-07-15 19:44:16 +02:00

179 lines
5.1 KiB
JavaScript

/*-------------------------------------------------------------------------
| SAE - Scripted Amiga Emulator
| https://github.com/naTmeg/ScriptedAmigaEmulator
|
| Copyright (C) 2012-2016 Rupert Hausberger
|
| This program is free software; you can redistribute it and/or
| modify it under the terms of the GNU General Public License
| as published by the Free Software Foundation; either version 2
| of the License, or (at your option) any later version.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| Note: ported from WinUAE 3.2.x
-------------------------------------------------------------------------*/
function SAEO_Filesys() {
this.uci_set_defaults = function(uci, rdb) {
//memset(uci, 0, sizeof(struct uaedev_config_info));
//controller
//if (uci.controller_type == 0)
uci.controller_type = SAEC_Config_Mount_Controller_Type_MB_IDE;
uci.controller_unit = 0; //IDE channel + unit
uci.controller_media_type = 0; // 1 = CF IDE, 0 = normal
uci.unit_feature_level = SAEC_Config_Mount_Controller_Level_ATA_2;
uci.unit_special_flags = 0; //1 = force LBA48
//file
//uci.type = UAEDEV_HDF;
//uci.file.name = "";
//uci.file.size = 0;
//uci.file.data = "";
uci.readonly = false;
//rdb
//drive geometry
uci.blocksize = 512;
uci.cyls = 0; // calculated/corrected highcyl
if (!rdb) {
uci.surfaces = 1;
uci.sectors = 32;
}
//partition
uci.bootable = true;
uci.automount = true;
uci.unit = 0;
uci.flags = 0;
uci.devname = "";
//DosEnvec
uci.sectorsperblock = 1;
if (!rdb)
uci.reserved = 2;
uci.interleave = false;
uci.lowcyl = 0;
uci.highcyl = 0; // zero if detected from size
uci.buffers = 50;
uci.bufmemtype = 1;
uci.maxtransfer = 0x7fffffff;
uci.mask = 0xffffffff;
uci.bootpri = 0;
uci.dostype = 0x444f5301;
//filesystem
uci.filesys = "";
//DeviceNode
uci.stacksize = 4000;
uci.priority = -129;
//uci.device_emu_unit = -1;
}
/*-----------------------------------------------------------------------*/
function allocuci(p, nr, idx, unitnum) {
if (typeof unitnum == "undefined")
unitnum = -1;
var uci = p.mount.config[nr];
if (idx >= 0) {
/*var ui = mountinfo.ui[idx];
ui.configureddrive = 1;*/
uci.configoffset = idx;
uci.unitnum = unitnum;
} else {
uci.configoffset = -1;
uci.unitnum = -1;
}
}
/*---------------------------------*/
function getunittype(uci) {
return "HD" //uci.type == UAEDEV_CD ? "CD" : (uci.type == UAEDEV_TAPE ? "TAPE" : "HD");
}
function ismainboardide() {
return SAEV_config.chipset.ide != 0;
}
/*function isa3000scsi() {
return SAEV_config.chipset.mbdmac == 1;
}
function isa4000tscsi() {
return SAEV_config.chipset.mbdmac == 2;
}
function iscdtvscsi() {
return currprefs.cs_cdtvscsi != 0;
}*/
function add_mainboard_unit_init() {
if (ismainboardide()) {
SAEF_log("filesys.add_mainboard_unit_init() Initializing mainboard IDE");
SAER.gayle.gayle_add_ide_unit(-1, null);
}
/*if (isa3000scsi()) {
SAEF_log("filesys.add_mainboard_unit_init() Initializing A3000 mainboard SCSI");
a3000_add_scsi_unit(-1, null, null);
}
if (isa4000tscsi()) {
SAEF_log("filesys.add_mainboard_unit_init() Initializing A4000T mainboard SCSI");
a4000t_add_scsi_unit(-1, null, null);
}
if (iscdtvscsi()) {
SAEF_log("filesys.add_mainboard_unit_init() Initializing CDTV SCSI expansion");
cdtv_add_scsi_unit(-1, null, null);
}*/
}
function add_ide_unit(type, unit, uci) {
var added = false;
if (type == SAEC_Config_Mount_Controller_Type_MB_IDE) {
if (ismainboardide()) {
SAEF_log("filesys.add_ide_unit() Adding mainboard IDE %s unit %d ('%s')", getunittype(uci), unit, uci.file.name);
SAER.gayle.gayle_add_ide_unit(unit, uci);
added = true;
}
}
return added;
}
function initialize_mountinfo() {
// init all controllers first
add_mainboard_unit_init();
for (var nr = 0; nr < 6; nr++) {
var uci = SAEV_config.mount.config[nr].ci;
var type = uci.controller_type;
var unit = uci.controller_unit;
var added = false;
if (type == 0 || uci.file.size == 0)
continue;
if (type == SAEC_Config_Mount_Controller_Type_MB_IDE)
added = add_ide_unit(type, unit, uci);
else if (type == SAEC_Config_Mount_Controller_Type_PCMCIA_SRAM) {
SAER.gayle.gayle_add_pcmcia_sram_unit(uci);
added = true;
}
else if (type == SAEC_Config_Mount_Controller_Type_PCMCIA_IDE) {
SAER.gayle.gayle_add_pcmcia_ide_unit(uci);
added = true;
}
if (added)
allocuci(SAEV_config, nr, -1);
}
}
function free_mountinfo() {
SAER.gayle.free_units();
}
/*-----------------------------------------------------------------------*/
this.start_threads = function() {} //filesys_start_threads()
this.cleanup = function() { //filesys_cleanup()
free_mountinfo();
}
this.reset = function() { //filesys_reset()
free_mountinfo();
initialize_mountinfo();
}
this.prepare_reset = function() {} //filesys_prepare_reset()
}