From 13435bfc961fd2abd5f688ce37e94d5f96b0873b Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 22 Jul 2017 22:17:18 +0200 Subject: added 16-bit port class --- src/hardware/port.asm | 24 ++++++++++++++++++++++++ src/hardware/port.c | 7 +++++++ src/hardware/port.h | 10 +++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/hardware/port.asm b/src/hardware/port.asm index 555a4e8..c7e7bc4 100644 --- a/src/hardware/port.asm +++ b/src/hardware/port.asm @@ -24,6 +24,30 @@ port8_read: leave ret +global port16_write +global port16_read + +; void port16_write( port16_t *port, uint16_t data ); +port16_write: + push ebp + mov ebp, esp + mov ecx, [ebp+8] + mov edx, DWORD [ecx] + mov ax, WORD [ebp+12] + out dx, ax + leave + ret + +; uint16_t port16_read( port16_t *port ) +port16_read: + push ebp + mov ebp, esp + mov ecx, DWORD [ebp+8] + mov edx, [ecx] + in ax, dx + leave + ret + global port32_write global port32_read diff --git a/src/hardware/port.c b/src/hardware/port.c index 46e7f37..aa92b82 100644 --- a/src/hardware/port.c +++ b/src/hardware/port.c @@ -9,6 +9,13 @@ void port8_init( port8_t *port, uint16_t number ) port->number = number; } +void port16_init( port16_t *port, uint16_t number ) +{ + memset( port, 0, sizeof( port16_t ) ); + + port->number = number; +} + void port32_init( port32_t *port, uint16_t number ) { memset( port, 0, sizeof( port32_t ) ); diff --git a/src/hardware/port.h b/src/hardware/port.h index 8203fea..d083220 100644 --- a/src/hardware/port.h +++ b/src/hardware/port.h @@ -12,7 +12,15 @@ void port8_write( port8_t *port, uint8_t data ); uint8_t port8_read( port8_t *port ); typedef struct { - uint16_t number; // port number, e.g. 0x3d4 VGA index register + uint16_t number; +} port16_t; + +void port16_init( port16_t *port, uint16_t number ); +void port16_write( port16_t *port, uint16_t data ); +uint16_t port16_read( port16_t *port ); + +typedef struct { + uint16_t number; } port32_t; void port32_init( port32_t *port, uint16_t number ); -- cgit v1.2.3-54-g00ecf