mirror of
https://github.com/reactos/reactos.git
synced 2025-07-30 20:01:50 +00:00
[FREELDR] Add ARC-emulation support for NEC PC-98 series
- Add ARC-emulation support for NEC PC-98 series - Add global definition for PC-98 port into CMakeLists.txt - Add floppy verison of freeldr.ini for PC-98 CD boot
This commit is contained in:
parent
9ccd179e4a
commit
c14cc22bfd
22 changed files with 3853 additions and 29 deletions
26
sdk/include/reactos/drivers/pc98/fdc.h
Normal file
26
sdk/include/reactos/drivers/pc98/fdc.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* PROJECT: NEC PC-98 series onboard hardware
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: NEC uPD765A FDC header file
|
||||
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define FDC1_IO_BASE 0x90
|
||||
#define FDC2_IO_BASE 0xC8
|
||||
|
||||
#define FDC_IO_o_MODE_SWITCH 0xBE
|
||||
#define FDC_IO_o_EMODE_SWITCH 0x4BE
|
||||
#define FDC_IO_i_MODE 0xBE
|
||||
#define FDC_IO_i_EMODE 0x4BE
|
||||
|
||||
/*
|
||||
* FDC registers offsets
|
||||
*/
|
||||
#define FDC_o_DATA 0x02
|
||||
#define FDC_o_CONTROL 0x04
|
||||
|
||||
#define FDC_i_STATUS 0x00
|
||||
#define FDC_i_DATA 0x02
|
||||
#define FDC_i_READ_SWITCH 0x04
|
279
sdk/include/reactos/drivers/pc98/video.h
Normal file
279
sdk/include/reactos/drivers/pc98/video.h
Normal file
|
@ -0,0 +1,279 @@
|
|||
/*
|
||||
* PROJECT: NEC PC-98 series onboard hardware
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Graphics system header file
|
||||
* COPYRIGHT: Copyright 2020 Dmitry Borisov (di.sean@protonmail.com)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Video memory ***************************************************************/
|
||||
|
||||
#define VRAM_NORMAL_PLANE_B 0xA8000
|
||||
#define VRAM_NORMAL_PLANE_G 0xB0000
|
||||
#define VRAM_NORMAL_PLANE_R 0xB8000
|
||||
#define VRAM_NORMAL_PLANE_I 0xE0000
|
||||
#define VRAM_PLANE_SIZE 0x08000
|
||||
#define VRAM_NORMAL_TEXT 0xA0000
|
||||
#define VRAM_TEXT_ATTR_OFFSET 0x02000
|
||||
#define VRAM_TEXT_SIZE 0x02000
|
||||
#define VRAM_ATTR_SIZE 0x02000
|
||||
|
||||
/* High-resolution machine */
|
||||
#define VRAM_HI_RESO_PLANE_B 0xC0000
|
||||
#define VRAM_HI_RESO_PLANE_G 0xC8000
|
||||
#define VRAM_HI_RESO_PLANE_R 0xD0000
|
||||
#define VRAM_HI_RESO_PLANE_I 0xD8000
|
||||
#define VRAM_HI_RESO_TEXT 0xE0000
|
||||
|
||||
/* GDC definitions ************************************************************/
|
||||
|
||||
#define GDC_STATUS_DRDY 0x01
|
||||
#define GDC_STATUS_FIFO_FULL 0x02
|
||||
#define GDC_STATUS_FIFO_EMPTY 0x04
|
||||
#define GDC_STATUS_DRAWING 0x08
|
||||
#define GDC_STATUS_DMA_EXECUTE 0x10
|
||||
#define GDC_STATUS_VSYNC 0x20
|
||||
#define GDC_STATUS_HBLANK 0x40
|
||||
#define GDC_STATUS_LPEN 0x80
|
||||
|
||||
#define GDC_ATTR_VISIBLE 0x01
|
||||
#define GDC_ATTR_BLINK 0x02
|
||||
#define GDC_ATTR_REVERSE 0x04
|
||||
#define GDC_ATTR_UNDERLINE 0x08
|
||||
#define GDC_ATTR_VERTICAL_LINE 0x10
|
||||
|
||||
#define GDC_ATTR_BLACK 0x00
|
||||
#define GDC_ATTR_BLUE 0x20
|
||||
#define GDC_ATTR_RED 0x40
|
||||
#define GDC_ATTR_PURPLE 0x60
|
||||
#define GDC_ATTR_GREEN 0x80
|
||||
#define GDC_ATTR_LIGHTBLUE 0xA0
|
||||
#define GDC_ATTR_YELLOW 0xC0
|
||||
#define GDC_ATTR_WHITE 0xE0
|
||||
|
||||
#define GDC_COMMAND_RESET 0x00
|
||||
#define GDC_COMMAND_BCTRL_STOP 0x0C
|
||||
#define GDC_COMMAND_BCTRL_START 0x0D
|
||||
#define GDC_COMMAND_SYNC_ON 0x0E
|
||||
#define GDC_COMMAND_SYNC_OFF 0x0F
|
||||
#define GDC_COMMAND_WRITE 0x20
|
||||
#define GDC_COMMAND_SLAVE 0x6E
|
||||
#define GDC_COMMAND_MASTER 0x6F
|
||||
|
||||
#define GDC_COMMAND_CSRFORM 0x4B
|
||||
typedef struct _CSRFORMPARAM
|
||||
{
|
||||
BOOLEAN Show;
|
||||
BOOLEAN Blink;
|
||||
UCHAR BlinkRate;
|
||||
UCHAR LinesPerRow;
|
||||
UCHAR StartScanLine;
|
||||
UCHAR EndScanLine;
|
||||
} CSRFORMPARAM, *PCSRFORMPARAM;
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
WRITE_GDC_CSRFORM(PUCHAR Port, PCSRFORMPARAM CursorParameters)
|
||||
{
|
||||
WRITE_PORT_UCHAR(Port, ((CursorParameters->Show & 0x01) << 7) |
|
||||
(CursorParameters->LinesPerRow - 1));
|
||||
WRITE_PORT_UCHAR(Port, ((CursorParameters->BlinkRate & 0x03) << 6) |
|
||||
((!CursorParameters->Blink & 0x01) << 5) | CursorParameters->StartScanLine);
|
||||
WRITE_PORT_UCHAR(Port, (CursorParameters->EndScanLine << 3) | ((CursorParameters->BlinkRate & 0x1C) >> 2));
|
||||
}
|
||||
|
||||
#define GDC_COMMAND_START 0x6B
|
||||
#define GDC_COMMAND_ZOOM 0x46
|
||||
|
||||
#define GDC_COMMAND_CSRW 0x49
|
||||
typedef struct _CSRWPARAM
|
||||
{
|
||||
ULONG CursorAdress;
|
||||
UCHAR DotAddress;
|
||||
} CSRWPARAM, *PCSRWPARAM;
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
WRITE_GDC_CSRW(PUCHAR Port, PCSRWPARAM CursorParameters)
|
||||
{
|
||||
ASSERT(CursorParameters->CursorAdress < 0xF00000);
|
||||
ASSERT(CursorParameters->DotAddress < 0x10);
|
||||
|
||||
WRITE_PORT_UCHAR(Port, CursorParameters->CursorAdress & 0xFF);
|
||||
WRITE_PORT_UCHAR(Port, (CursorParameters->CursorAdress >> 8) & 0xFF);
|
||||
WRITE_PORT_UCHAR(Port, (CursorParameters->DotAddress << 4) |
|
||||
((CursorParameters->CursorAdress >> 16) & 0x03));
|
||||
}
|
||||
|
||||
#define GDC_COMMAND_PRAM 0x70
|
||||
#define GDC_COMMAND_PITCH 0x47
|
||||
#define GDC_COMMAND_MASK 0x4A
|
||||
#define GDC_COMMAND_FIGS 0x4C
|
||||
#define GDC_COMMAND_FIGD 0x6C
|
||||
#define GDC_COMMAND_GCHRD 0x68
|
||||
#define GDC_COMMAND_READ 0xA0
|
||||
#define GDC_COMMAND_CURD 0xE0
|
||||
#define GDC_COMMAND_LPRD 0xC0
|
||||
#define GDC_COMMAND_DMAR 0xA4
|
||||
#define GDC_COMMAND_DMAW 0x24
|
||||
|
||||
/* Master GDC *****************************************************************/
|
||||
|
||||
#define GDC1_IO_i_STATUS 0x60
|
||||
#define GDC1_IO_i_DATA 0x62
|
||||
#define GDC1_IO_i_MODE_FLIPFLOP1 0x68
|
||||
|
||||
#define GDC1_IO_o_PARAM 0x60
|
||||
#define GDC1_IO_o_COMMAND 0x62
|
||||
#define GDC1_IO_o_VSYNC 0x64 /* CRT interrupt reset */
|
||||
|
||||
#define GDC1_IO_o_MODE_FLIPFLOP1 0x68
|
||||
#define GDC1_MODE_VERTICAL_LINE 0x00 /* Character attribute */
|
||||
#define GDC1_MODE_SIMPLE_GRAPHICS 0x01
|
||||
#define GDC1_MODE_COLORED 0x02
|
||||
#define GDC1_MODE_MONOCHROME 0x03
|
||||
#define GDC1_MODE_COLS_80 0x04
|
||||
#define GDC1_MODE_COLS_40 0x05
|
||||
#define GDC1_MODE_ANK_6_8 0x06
|
||||
#define GDC1_MODE_ANK_7_13 0x07
|
||||
#define GDC1_MODE_LINES_400 0x08
|
||||
#define GDC1_MODE_LINES_200 0x09 /* Hide odd raster line */
|
||||
#define GDC1_MODE_KCG_CODE 0x0A /* CG access during V-SYNC */
|
||||
#define GDC1_MODE_KCG_BITMAP 0x0B
|
||||
#define GDC1_NVMW_PROTECT 0x0C
|
||||
#define GDC1_NVMW_UNPROTECT 0x0D /* Memory at TextVramSegment:(3FE2-3FFEh) */
|
||||
#define GDC1_MODE_DISPLAY_DISABLE 0x0E
|
||||
#define GDC1_MODE_DISPLAY_ENABLE 0x0F
|
||||
|
||||
#define GDC1_IO_o_BORDER_COLOR 0x6C /* PC-H98 */
|
||||
|
||||
/* Slave GDC ******************************************************************/
|
||||
|
||||
#define GDC2_IO_i_STATUS 0xA0
|
||||
#define GDC2_IO_i_DATA 0xA2
|
||||
#define GDC2_IO_i_VIDEO_PAGE 0xA4
|
||||
#define GDC2_IO_i_VIDEO_PAGE_ACCESS 0xA6
|
||||
#define GDC2_IO_i_PALETTE_INDEX 0xA8
|
||||
#define GDC2_IO_i_GREEN 0xAA
|
||||
#define GDC2_IO_i_RED 0xAC
|
||||
#define GDC2_IO_i_BLUE 0xAE
|
||||
#define GDC2_IO_i_MODE_FLIPFLOP2 0x6A
|
||||
#define GDC2_IO_i_MODE_FLIPFLOP3 0x6E
|
||||
|
||||
#define GDC2_IO_o_PARAM 0xA0
|
||||
#define GDC2_IO_o_COMMAND 0xA2
|
||||
#define GDC2_IO_o_VIDEO_PAGE 0xA4 /* Video page to display (invalid in 480 height mode) */
|
||||
#define GDC2_IO_o_VIDEO_PAGE_ACCESS 0xA6 /* Video page to CPU access */
|
||||
#define GDC2_IO_o_PALETTE_INDEX 0xA8
|
||||
#define GDC2_IO_o_GREEN 0xAA
|
||||
#define GDC2_IO_o_RED 0xAC
|
||||
#define GDC2_IO_o_BLUE 0xAE
|
||||
|
||||
#define GDC2_IO_o_MODE_FLIPFLOP2 0x6A
|
||||
#define GDC2_MODE_COLORS_8 0x00
|
||||
#define GDC2_MODE_COLORS_16 0x01
|
||||
#define GDC2_MODE_GRCG 0x04
|
||||
#define GDC2_MODE_EGC 0x05
|
||||
#define GDC2_EGC_FF_PROTECT 0x06
|
||||
#define GDC2_EGC_FF_UNPROTECT 0x07 /* Unprotect the EGC F/F registers */
|
||||
#define GDC2_MODE_PEGS_DISABLE 0x20
|
||||
#define GDC2_MODE_PEGC_ENABLE 0x21
|
||||
// #define GDC2_MODE_ 0x26
|
||||
// #define GDC2_MODE_ 0x27
|
||||
// #define GDC2_MODE_ 0x28
|
||||
// #define GDC2_MODE_ 0x29
|
||||
// #define GDC2_MODE_ 0x2A
|
||||
// #define GDC2_MODE_ 0x2B
|
||||
// #define GDC2_MODE_ 0x2C
|
||||
// #define GDC2_MODE_ 0x2D
|
||||
#define GDC2_MODE_CRT 0x40
|
||||
#define GDC2_MODE_LCD 0x41
|
||||
// #define GDC2_MODE_VRAM_PLAIN 0x62 /* PC-H98 */
|
||||
// #define GDC2_MODE_VRAM_PACKED 0x63
|
||||
#define GDC2_MODE_LINES_400 0x68 /* 128 kB VRAM boundary */
|
||||
#define GDC2_MODE_LINES_800 0x69 /* 256 kB VRAM boundary */
|
||||
// #define GDC2_MODE_ 0x6C
|
||||
// #define GDC2_MODE_ 0x6D
|
||||
#define GDC2_CLOCK1_2_5MHZ 0x82
|
||||
#define GDC2_CLOCK1_5MHZ 0x83
|
||||
#define GDC2_CLOCK2_2_5MHZ 0x84
|
||||
#define GDC2_CLOCK2_5MHZ 0x85
|
||||
|
||||
#define GDC2_IO_o_MODE_FLIPFLOP3 0x6E
|
||||
// #define GDC2_MODE_ 0x02
|
||||
// #define GDC2_MODE_ 0x03
|
||||
// #define GDC2_MODE_ 0x08
|
||||
// #define GDC2_MODE_ 0x09
|
||||
// #define GDC2_MODE_ 0x0A
|
||||
// #define GDC2_MODE_ 0x0B
|
||||
// #define GDC2_MODE_ 0x0C
|
||||
// #define GDC2_MODE_ 0x0D
|
||||
// #define GDC2_MODE_ 0x0E
|
||||
// #define GDC2_MODE_ 0x0F
|
||||
// #define GDC2_MODE_ 0x14
|
||||
// #define GDC2_MODE_ 0x15
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
WRITE_GDC1_COMMAND(UCHAR Command)
|
||||
{
|
||||
while (!(READ_PORT_UCHAR((PUCHAR)GDC1_IO_i_STATUS) & GDC_STATUS_FIFO_EMPTY))
|
||||
NOTHING;
|
||||
|
||||
WRITE_PORT_UCHAR((PUCHAR)GDC1_IO_o_COMMAND, Command);
|
||||
}
|
||||
|
||||
FORCEINLINE
|
||||
VOID
|
||||
WRITE_GDC2_COMMAND(UCHAR Command)
|
||||
{
|
||||
while (!(READ_PORT_UCHAR((PUCHAR)GDC2_IO_i_STATUS) & GDC_STATUS_FIFO_EMPTY))
|
||||
NOTHING;
|
||||
|
||||
WRITE_PORT_UCHAR((PUCHAR)GDC2_IO_o_COMMAND, Command);
|
||||
}
|
||||
|
||||
/* CRT Controller *************************************************************/
|
||||
|
||||
#define CRTC_IO_o_SCANLINE_START 0x70
|
||||
#define CRTC_IO_o_SCANLINE_END 0x72
|
||||
#define CRTC_IO_o_SCANLINE_BLANK_AT 0x74
|
||||
#define CRTC_IO_o_SCANLINES 0x76
|
||||
#define CRTC_IO_o_SUR 0x78
|
||||
#define CRTC_IO_o_SDR 0x7A
|
||||
|
||||
/* GRCG (Graphic Charger) *****************************************************/
|
||||
|
||||
#define GRCG_IO_i_MODE 0x7C
|
||||
#define GRCG_IO_o_MODE 0x7C
|
||||
typedef union _GRCG_MODE_REGISTER
|
||||
{
|
||||
struct
|
||||
{
|
||||
UCHAR DisablePlaneB:1;
|
||||
UCHAR DisablePlaneR:1;
|
||||
UCHAR DisablePlaneG:1;
|
||||
UCHAR DisablePlaneI:1;
|
||||
UCHAR Unused:2;
|
||||
|
||||
UCHAR Mode:1;
|
||||
#define GRCG_MODE_TILE_DIRECT_WRITE 0
|
||||
#define GRCG_MODE_TILE_COMPARE_READ 0
|
||||
#define GRCG_MODE_READ_MODIFY_WRITE 1
|
||||
|
||||
UCHAR Enable:1;
|
||||
};
|
||||
UCHAR Bits;
|
||||
} GRCG_MODE_REGISTER, *PGRCG_MODE_REGISTER;
|
||||
|
||||
#define GRCG_IO_o_TILE_PATTERN 0x7E
|
||||
|
||||
/* CG Window ******************************************************************/
|
||||
|
||||
#define KCG_IO_o_CHARCODE_HIGH 0xA1
|
||||
#define KCG_IO_o_CHARCODE_LOW 0xA3
|
||||
#define KCG_IO_o_LINE 0xA5
|
||||
#define KCG_IO_o_PATTERN 0xA9
|
||||
|
||||
#define KCG_IO_i_PATTERN 0xA9
|
Loading…
Add table
Add a link
Reference in a new issue