Finished the VIA machine.
This commit is contained in:
@@ -9,13 +9,13 @@
|
||||
* Implementation of the IDE emulation for hard disks and ATAPI
|
||||
* CD-ROM devices.
|
||||
*
|
||||
* Version: @(#)hdc_ide.c 1.0.65 2019/11/19
|
||||
* Version: @(#)hdc_ide.c 1.0.66 2020/01/14
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2008-2019 Sarah Walker.
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2008-2020 Sarah Walker.
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
*/
|
||||
#define __USE_LARGEFILE64
|
||||
#define _LARGEFILE_SOURCE
|
||||
@@ -2315,7 +2315,7 @@ ide_set_handlers(uint8_t board)
|
||||
if (ide_boards[board] == NULL)
|
||||
return;
|
||||
|
||||
if (ide_boards[board]->base_main & 0x300) {
|
||||
if (ide_boards[board]->base_main) {
|
||||
if (ide_boards[board]->bit32) {
|
||||
io_sethandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
@@ -2332,7 +2332,7 @@ ide_set_handlers(uint8_t board)
|
||||
ide_writeb, NULL, NULL,
|
||||
ide_boards[board]);
|
||||
}
|
||||
if (ide_boards[board]->side_main & 0x300) {
|
||||
if (ide_boards[board]->side_main) {
|
||||
io_sethandler(ide_boards[board]->side_main, 1,
|
||||
ide_read_alt_status, NULL, NULL,
|
||||
ide_write_devctl, NULL, NULL,
|
||||
@@ -2347,25 +2347,29 @@ ide_remove_handlers(uint8_t board)
|
||||
if (ide_boards[board] == NULL)
|
||||
return;
|
||||
|
||||
if (ide_boards[board]->bit32) {
|
||||
io_removehandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
} else {
|
||||
io_removehandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, NULL,
|
||||
ide_writeb, ide_writew, NULL,
|
||||
if (ide_boards[board]->base_main) {
|
||||
if (ide_boards[board]->bit32) {
|
||||
io_removehandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, ide_readl,
|
||||
ide_writeb, ide_writew, ide_writel,
|
||||
ide_boards[board]);
|
||||
} else {
|
||||
io_removehandler(ide_boards[board]->base_main, 1,
|
||||
ide_readb, ide_readw, NULL,
|
||||
ide_writeb, ide_writew, NULL,
|
||||
ide_boards[board]);
|
||||
}
|
||||
io_removehandler(ide_boards[board]->base_main + 1, 7,
|
||||
ide_readb, NULL, NULL,
|
||||
ide_writeb, NULL, NULL,
|
||||
ide_boards[board]);
|
||||
}
|
||||
if (ide_boards[board]->side_main) {
|
||||
io_removehandler(ide_boards[board]->side_main, 1,
|
||||
ide_read_alt_status, NULL, NULL,
|
||||
ide_write_devctl, NULL, NULL,
|
||||
ide_boards[board]);
|
||||
}
|
||||
io_removehandler(ide_boards[board]->base_main + 1, 7,
|
||||
ide_readb, NULL, NULL,
|
||||
ide_writeb, NULL, NULL,
|
||||
ide_boards[board]);
|
||||
io_removehandler(ide_boards[board]->side_main, 1,
|
||||
ide_read_alt_status, NULL, NULL,
|
||||
ide_write_devctl, NULL, NULL,
|
||||
ide_boards[board]);
|
||||
}
|
||||
|
||||
|
||||
@@ -2556,10 +2560,8 @@ ide_board_init(int board, int irq, int base_main, int side_main, int type)
|
||||
ide_boards[board]->cur_dev = board << 1;
|
||||
if (type & 6)
|
||||
ide_boards[board]->bit32 = 1;
|
||||
if (base_main != -1)
|
||||
ide_boards[board]->base_main = base_main;
|
||||
if (side_main != -1)
|
||||
ide_boards[board]->side_main = side_main;
|
||||
ide_boards[board]->base_main = base_main;
|
||||
ide_boards[board]->side_main = side_main;
|
||||
ide_set_handlers(board);
|
||||
|
||||
timer_add(&ide_boards[board]->timer, ide_callback, ide_boards[board], 0);
|
||||
@@ -2607,7 +2609,7 @@ ide_qua_close(void *priv)
|
||||
void *
|
||||
ide_xtide_init(void)
|
||||
{
|
||||
ide_board_init(0, -1, -1, -1, 0);
|
||||
ide_board_init(0, -1, 0, 0, 0);
|
||||
|
||||
return ide_boards[0];
|
||||
}
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
* word 0 - base address
|
||||
* word 1 - bits 1-15 = byte count, bit 31 = end of transfer
|
||||
*
|
||||
* Version: @(#)hdc_ide_sff8038i.c 1.0.1 2019/10/30
|
||||
* Version: @(#)hdc_ide_sff8038i.c 1.0.1 2020/01/14
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2008-2019 Sarah Walker.
|
||||
* Copyright 2016-2019 Miran Grca.
|
||||
* Copyright 2008-2020 Sarah Walker.
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
@@ -370,13 +370,17 @@ sff_bus_master_set_irq(int channel, void *priv)
|
||||
|
||||
channel &= 0x01;
|
||||
if (dev->status & 0x04) {
|
||||
if (channel && pci_use_mirq(0))
|
||||
if ((dev->irq_mode == 2) && (channel & 1) && pci_use_mirq(0))
|
||||
pci_set_mirq(0, 0);
|
||||
else if (dev->irq_mode == 1)
|
||||
pci_set_irq(dev->slot, dev->irq_pin);
|
||||
else
|
||||
picint(1 << (14 + channel));
|
||||
} else {
|
||||
if ((channel & 1) && pci_use_mirq(0))
|
||||
if ((dev->irq_mode == 2) && (channel & 1) && pci_use_mirq(0))
|
||||
pci_clear_mirq(0, 0);
|
||||
else if (dev->irq_mode == 1)
|
||||
pci_clear_irq(dev->slot, dev->irq_pin);
|
||||
else
|
||||
picintc(1 << (14 + channel));
|
||||
}
|
||||
@@ -401,6 +405,9 @@ sff_bus_master_reset(sff8038i_t *dev, uint16_t old_base)
|
||||
dev->addr = 0x00000000;
|
||||
dev->ptr0 = 0x00;
|
||||
dev->count = dev->eot = 0x00000000;
|
||||
dev->slot = 7;
|
||||
dev->irq_mode = 2;
|
||||
dev->irq_pin = PCI_INTA;
|
||||
|
||||
ide_pri_disable();
|
||||
ide_sec_disable();
|
||||
@@ -425,6 +432,27 @@ sff_reset(void *p)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
sff_set_slot(sff8038i_t *dev, int slot)
|
||||
{
|
||||
dev->slot = slot;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
sff_set_irq_mode(sff8038i_t *dev, int irq_mode)
|
||||
{
|
||||
dev->irq_mode = irq_mode;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
sff_set_irq_pin(sff8038i_t *dev, int irq_pin)
|
||||
{
|
||||
dev->irq_pin = irq_pin;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
sff_close(void *p)
|
||||
{
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
*
|
||||
* Emulation core dispatcher.
|
||||
*
|
||||
* Version: @(#)hdc_ide_sff8038i.h 1.0.0 2019/05/12
|
||||
* Version: @(#)hdc_ide_sff8038i.h 1.0.1 2020/01/14
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Copyright 2008-2018 Sarah Walker.
|
||||
* Copyright 2016-2018 Miran Grca.
|
||||
* Copyright 2008-2020 Sarah Walker.
|
||||
* Copyright 2016-2020 Miran Grca.
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
@@ -22,7 +22,9 @@ typedef struct
|
||||
ptr0, enabled;
|
||||
uint32_t ptr, ptr_cur,
|
||||
addr;
|
||||
int count, eot;
|
||||
int count, eot,
|
||||
slot,
|
||||
irq_mode, irq_pin;
|
||||
} sff8038i_t;
|
||||
|
||||
|
||||
@@ -36,3 +38,8 @@ extern int sff_bus_master_dma_write(int channel, uint8_t *data, int transfer_len
|
||||
extern void sff_bus_master_set_irq(int channel, void *priv);
|
||||
|
||||
extern void sff_bus_master_reset(sff8038i_t *dev, uint16_t old_base);
|
||||
|
||||
extern void sff_set_slot(sff8038i_t *dev, int slot);
|
||||
|
||||
extern void sff_set_irq_mode(sff8038i_t *dev, int irq_mode);
|
||||
extern void sff_set_irq_pin(sff8038i_t *dev, int irq_pin);
|
||||
|
||||
Reference in New Issue
Block a user