summaryrefslogtreecommitdiff
path: root/src/video
diff options
context:
space:
mode:
Diffstat (limited to 'src/video')
-rw-r--r--src/video/interface.h8
-rw-r--r--src/video/ncurses.c41
-rw-r--r--src/video/sdl.c39
-rw-r--r--src/video/signetics.c32
4 files changed, 96 insertions, 24 deletions
diff --git a/src/video/interface.h b/src/video/interface.h
index 0167037..db9bd54 100644
--- a/src/video/interface.h
+++ b/src/video/interface.h
@@ -1,8 +1,10 @@
// interface.h
// Provides the interface with which all video interactions must occur.
-void VideoInit();
+void TerminalInit();
-void VideoClose();
+void TerminalClose();
-void DisplayCharacter(char In); \ No newline at end of file
+void TerminalInput(char n);
+
+void TerminalPrompt(); \ No newline at end of file
diff --git a/src/video/ncurses.c b/src/video/ncurses.c
index a9221e1..05653e2 100644
--- a/src/video/ncurses.c
+++ b/src/video/ncurses.c
@@ -2,4 +2,43 @@
// Implements interface.h
// Provides an in-terminal interface to the emulator.
-#include"interface.h" \ No newline at end of file
+#include"interface.h"
+#include"signetics.c"
+#include<ncurses.h>
+
+
+int TermX = 0;
+int TermY = 0;
+
+void TerminalInit()
+{
+ initscr();
+ cbreak();
+ noecho();
+
+ TerminalShiftRegister = (byte*)malloc(960);
+ TerminalShiftRegisterOffset = 0;
+}
+
+void TerminalClose()
+{
+ free(TerminalShiftRegister);
+ endwin();
+}
+
+void TerminalInput()
+{
+ if (TermX >= 40) {
+ TermX = 0;
+ TermY++;
+ }
+
+ if (TermY >= 24) {
+
+ }
+}
+
+void TerminalPrompt()
+{
+ addch('@' | A_BLINK);
+} \ No newline at end of file
diff --git a/src/video/sdl.c b/src/video/sdl.c
index 811b0d3..7161a08 100644
--- a/src/video/sdl.c
+++ b/src/video/sdl.c
@@ -5,34 +5,35 @@
#include"interface.h"
#include<SDL2/SDL.h>
-#define SCALE 2
+#define SCALE 2
-#define CHR_WIDTH 5
-#define CHR_HEIGHT 8
+#define CHR_WIDTH 5
+#define CHR_HEIGHT 8
#define WIDTH_SPACE 1 * SCALE
-#define MIN_WIDTH (40 * CHR_WIDTH) + 39*WIDTH_SPACE
-#define MIN_HEIGHT (24 * CHR_HEIGHT)
+#define MIN_WIDTH (40 * CHR_WIDTH) + 39*WIDTH_SPACE
+#define MIN_HEIGHT (24 * CHR_HEIGHT)
-int VideoInit(){
+int TerminalInit(){
// INITIALIZATION
SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO);
- SDL_Window* window = SDL_CreateWindow(
+
+ SDL_Window* window = SDL_CreateWindow(
"Apple C",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
- MIN_WIDTH * SCALE,
- MIN_HEIGHT * SCALE,
+ MIN_WIDTH * SCALE,
+ MIN_HEIGHT * SCALE,
SDL_WINDOW_SHOWN
);
- SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0);
- SDL_Surface* font_surface = SDL_LoadBMP("font.bmp");
- SDL_Texture* font_texture = SDL_CreateTextureFromSurface(render, font_surface);
+ SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0);
+ SDL_Surface* font_surface = SDL_LoadBMP("font.bmp");
+ SDL_Texture* font_texture = SDL_CreateTextureFromSurface(render, font_surface);
SDL_FreeSurface(font_surface);
- SDL_Rect character = {
+ SDL_Rect character = {
.x = 0,
.y = 0,
.w = CHR_WIDTH,
@@ -46,15 +47,13 @@ int VideoInit(){
.h = CHR_HEIGHT * SCALE
};
- SDL_SetRenderDrawColor (render, 0, 0, 0, 255);
- SDL_RenderClear (render);
- SDL_RenderCopy (render, font_texture, &character, &draw_character);
- SDL_RenderPresent (render);
+ SDL_SetRenderDrawColor (render, 0, 0, 0, 255);
+ SDL_RenderClear (render);
+ SDL_RenderCopy (render, font_texture, &character, &draw_character);
+ SDL_RenderPresent (render);
}
-void VideoClose() {
-
-
+void TerminalClose() {
SDL_Quit();
} \ No newline at end of file
diff --git a/src/video/signetics.c b/src/video/signetics.c
new file mode 100644
index 0000000..944ac4d
--- /dev/null
+++ b/src/video/signetics.c
@@ -0,0 +1,32 @@
+// signetics.h
+// The Apple I came with its own terminal on-board, with a Signetics 2513 character ROM, and multiple shift registers acting as video memory.
+#include"cpu/core.h"
+#include"stdlib.h"
+
+const byte CharacterROM[0x40] = {
+ '@' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' ,
+ 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '[' , '\\', ']' , '^' , '_' ,
+ ' ' , '!' , '"' , '#' , '$' , '%' , '&' , '\'', '(' , ')' , '*' , '+' , ',' , '-' , '.' , '/' ,
+ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , ':' , ';' , '<' , '=' , '>' , '?'
+};
+
+byte* TerminalShiftRegister;
+
+int TerminalShiftRegisterOffset;
+
+byte ToAppleASCII(char x)
+{
+ if (x < 0x20 || x >= 0x60)
+ return -1;
+ if (x >= 0x40)
+ x -= 0x40;
+ return x;
+}
+
+byte ToRegularASCII(char x)
+{
+ if (x < 0x20)
+ x += 0x40;
+ return x;
+}
+