Add (soft) video abstraction library.
This commit is contained in:
parent
b3763de255
commit
99da9e2e4f
28
src/video.c
Normal file
28
src/video.c
Normal file
@ -0,0 +1,28 @@
|
||||
#include "video.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
static char *const VIDEO_MEMORY = (char *)0xd000;
|
||||
static uint16_t offset = 0;
|
||||
|
||||
void video_putchar(char c) {
|
||||
if (c == '\n' || c == '\r') {
|
||||
offset += 80 - (offset % 80);
|
||||
|
||||
} else if (c == '\t') {
|
||||
offset += 8 - offset % 8;
|
||||
} else {
|
||||
*(VIDEO_MEMORY + offset++) = c;
|
||||
}
|
||||
|
||||
offset = offset % 2000;
|
||||
}
|
||||
|
||||
void video_put(uint8_t x, uint8_t y, char c) {
|
||||
if (x >= 80)
|
||||
return;
|
||||
if (y >= 25)
|
||||
return;
|
||||
|
||||
*(VIDEO_MEMORY + x + y * 80) = c;
|
||||
}
|
10
src/video.h
Normal file
10
src/video.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef CEDA_PRINT_H
|
||||
#define CEDA_PRINT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void video_cls(void);
|
||||
void video_put(uint8_t x, uint8_t y, char c);
|
||||
void video_putchar(char c);
|
||||
|
||||
#endif // CEDA_PRINT_H
|
26
src/video_a.asm
Normal file
26
src/video_a.asm
Normal file
@ -0,0 +1,26 @@
|
||||
SECTION code
|
||||
PUBLIC _video_cls
|
||||
|
||||
_video_cls:
|
||||
push af
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
|
||||
ld hl,$d000
|
||||
ld de,2000
|
||||
ld c,$20
|
||||
_video_cls_loop:
|
||||
ld (hl),c
|
||||
inc hl
|
||||
dec de
|
||||
ld a,d
|
||||
or e
|
||||
jp nz,_video_cls_loop
|
||||
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
|
||||
ret
|
Loading…
Reference in New Issue
Block a user