2019-02-24 15:36:38 +00:00
|
|
|
|
|
|
|
#include "neslib.h"
|
|
|
|
#include "vrambuf.h"
|
|
|
|
|
|
|
|
// index to end of buffer
|
|
|
|
byte updptr = 0;
|
|
|
|
|
|
|
|
// add EOF marker to buffer
|
|
|
|
void cendbuf(void) {
|
|
|
|
updbuf[updptr] = NT_UPD_EOF;
|
|
|
|
}
|
|
|
|
|
|
|
|
void cclearbuf(void) {
|
|
|
|
updptr = 0;
|
|
|
|
cendbuf();
|
|
|
|
}
|
|
|
|
|
|
|
|
// flush buffer now, waiting for next frame
|
|
|
|
void cflushnow(void) {
|
|
|
|
// make sure buffer has EOF marker
|
|
|
|
cendbuf();
|
|
|
|
// wait for next frame to flush update buffer
|
|
|
|
// this will also set the scroll registers properly
|
|
|
|
ppu_wait_frame();
|
|
|
|
// clear the buffer
|
|
|
|
cclearbuf();
|
|
|
|
}
|
|
|
|
|
|
|
|
// add multiple characters to update buffer
|
|
|
|
// using horizontal increment
|
2019-02-26 15:56:51 +00:00
|
|
|
void putbytes(word addr, const char* str, byte len) {
|
2019-02-24 15:36:38 +00:00
|
|
|
if (updptr >= VBUFSIZE-4-len) cflushnow();
|
|
|
|
updbuf[updptr++] = (addr >> 8) ^ NT_UPD_HORZ;
|
|
|
|
updbuf[updptr++] = addr & 0xff;
|
|
|
|
updbuf[updptr++] = len;
|
|
|
|
while (len--) {
|
|
|
|
updbuf[updptr++] = *str++;
|
|
|
|
}
|
|
|
|
cendbuf();
|
|
|
|
}
|