diff options
author | alekseiplusplus <alekseijeaves@protonmail.com> | 2023-11-28 12:02:07 +1100 |
---|---|---|
committer | alekseiplusplus <alekseijeaves@protonmail.com> | 2023-11-28 12:02:07 +1100 |
commit | b4452ce8455ded6ecd4373ba30323c5c245260e8 (patch) | |
tree | 4dc718c3de1e2c26a3a0c988af33058fd1ddf421 /src/video | |
parent | 2ded6baaab3946e461a7cf0b39618b31e5806c89 (diff) |
terminal
Diffstat (limited to 'src/video')
-rw-r--r-- | src/video/interface.h | 4 | ||||
-rw-r--r-- | src/video/ncurses.c | 47 | ||||
-rw-r--r-- | src/video/signetics.c | 9 |
3 files changed, 48 insertions, 12 deletions
diff --git a/src/video/interface.h b/src/video/interface.h index db9bd54..49ac75c 100644 --- a/src/video/interface.h +++ b/src/video/interface.h @@ -5,6 +5,4 @@ void TerminalInit(); void TerminalClose(); -void TerminalInput(char n); - -void TerminalPrompt();
\ No newline at end of file +void TerminalInput(char n);
\ No newline at end of file diff --git a/src/video/ncurses.c b/src/video/ncurses.c index 05653e2..76bfb26 100644 --- a/src/video/ncurses.c +++ b/src/video/ncurses.c @@ -15,30 +15,65 @@ void TerminalInit() initscr(); cbreak(); noecho(); + curs_set(0); TerminalShiftRegister = (byte*)malloc(960); + TerminalShiftRegisterPosition = TerminalShiftRegister; TerminalShiftRegisterOffset = 0; } void TerminalClose() { free(TerminalShiftRegister); + curs_set(0); endwin(); } -void TerminalInput() +void TerminalInput(char n) { + mvaddch(TermY,TermX,n); + + *TerminalShiftRegisterPosition = n; + TerminalShiftRegisterPosition++; + if (TerminalShiftRegisterPosition >= (TerminalShiftRegister + 960)) + TerminalShiftRegisterPosition = TerminalShiftRegister; + + + TermX++; + + if (n == KEY_ENTER) { + TermY++; + } + if (TermX >= 40) { TermX = 0; TermY++; } if (TermY >= 24) { - + TerminalShiftRegisterOffset += 40; // Discard first line + if (TerminalShiftRegisterOffset >= 960) + TerminalShiftRegisterOffset = TerminalShiftRegister; + + byte *offset = TerminalShiftRegister + TerminalShiftRegisterOffset; + + // For every position, fill with contents of the terminal shift register + for (int i = 0; i < 23; i++) { + for (int j = 0; j < 40; j++) { + + if (offset >= (TerminalShiftRegister + 960)) + offset -= 960; + + mvaddch(i,j, *(offset)); + offset++; + }} + + TermY = 23; + TermX = 0; + + // Clear bottom line. + mvwprintw(stdscr, TermY, TermX, " "); } -} -void TerminalPrompt() -{ - addch('@' | A_BLINK); + mvaddch(TermY, TermX, '@' | A_BLINK); }
\ No newline at end of file diff --git a/src/video/signetics.c b/src/video/signetics.c index 944ac4d..c6dca10 100644 --- a/src/video/signetics.c +++ b/src/video/signetics.c @@ -1,6 +1,7 @@ // 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" +// Signetics refers to the various Signetics brand chips which the Apple I came with, including a character ROM, and a shift-register based video memory. + +#include"../cpu/core.h" #include"stdlib.h" const byte CharacterROM[0x40] = { @@ -10,7 +11,9 @@ const byte CharacterROM[0x40] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , ':' , ';' , '<' , '=' , '>' , '?' }; -byte* TerminalShiftRegister; +const byte* TerminalShiftRegister; + +byte* TerminalShiftRegisterPosition; int TerminalShiftRegisterOffset; |