2019-02-24 15:36:38 +00:00
|
|
|
|
|
|
|
#ifndef _VRAMBUF_H
|
|
|
|
#define _VRAMBUF_H
|
|
|
|
|
|
|
|
#include "neslib.h"
|
|
|
|
|
|
|
|
// VBUFSIZE = maximum update buffer bytes
|
|
|
|
#define VBUFSIZE 128
|
|
|
|
|
|
|
|
// update buffer starts at $100 (stack page)
|
2019-03-10 16:17:12 +00:00
|
|
|
#define updbuf ((byte* const)0x100)
|
2019-02-24 15:36:38 +00:00
|
|
|
|
|
|
|
// index to end of buffer
|
|
|
|
extern byte updptr;
|
|
|
|
|
2019-03-06 20:54:37 +00:00
|
|
|
// macro to add a multibyte header
|
2019-02-24 15:36:38 +00:00
|
|
|
#define VRAMBUF_PUT(addr,len,flags)\
|
2019-03-06 20:54:37 +00:00
|
|
|
VRAMBUF_ADD(((addr) >> 8) | (flags));\
|
|
|
|
VRAMBUF_ADD(addr);\
|
|
|
|
VRAMBUF_ADD(len);
|
2019-02-24 15:36:38 +00:00
|
|
|
|
2019-03-10 16:17:12 +00:00
|
|
|
// macro to set a single byte in buffer
|
|
|
|
#define VRAMBUF_SET(b)\
|
2019-03-06 20:54:37 +00:00
|
|
|
__A__ = (b);\
|
|
|
|
asm("ldy %v", updptr);\
|
2019-03-10 16:17:12 +00:00
|
|
|
asm("sta $100,y");
|
|
|
|
|
|
|
|
// macro to set a single byte to buffer, then increment
|
|
|
|
#define VRAMBUF_ADD(b)\
|
|
|
|
VRAMBUF_SET(b)\
|
2019-03-06 20:54:37 +00:00
|
|
|
asm("inc %v", updptr);
|
2019-02-24 15:36:38 +00:00
|
|
|
|
2019-03-06 20:54:37 +00:00
|
|
|
// add EOF marker to buffer (but don't increment pointer)
|
2019-02-24 15:36:38 +00:00
|
|
|
void cendbuf(void);
|
|
|
|
|
2019-03-06 20:54:37 +00:00
|
|
|
// clear vram buffer and place EOF marker
|
2019-02-24 15:36:38 +00:00
|
|
|
void cclearbuf(void);
|
|
|
|
|
2019-03-06 20:54:37 +00:00
|
|
|
// wait for next frame, then clear buffer
|
|
|
|
// this assumes the NMI will call flush_vram_update()
|
2019-02-24 15:36:38 +00:00
|
|
|
void cflushnow(void);
|
|
|
|
|
|
|
|
// 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
|
|
|
|
|
|
|
#endif // vrambuf.h
|