my C version does a lot of that but not all . since there was so little interest in a pbp version I left it pretty basic

C header

Code:
/* 
 * File:   ks0108 driver  21/4/18  20 pin ver
 * Author: rc
 * Comments: ver 1.00
 * Revision history: 
 * pins gCS1,gCS2,gRS,gRW,gRST,gE  all defined in mcc files
 * see user defines  for data bus and frame buffer
 */

// This is a guard condition so that contents of this file are not included
// more than once.  
#ifndef XC_HEADER_TEMPLATE_H
#define	XC_HEADER_TEMPLATE_H

#include <xc.h> // include processor files - each processor file is guarded.  
#include "mcc_generated_files/mcc.h"
#include <stdlib.h>
//#include <string.h>
#include "font1.h"

#define cs_on  1
#define cs_off 0
#define Out 0
#define In 255
#define bitset(var, bitno) ((var) |= 1UL << (bitno))
#define bitclr(var, bitno) ((var) &= ~(1UL << (bitno)))

//user defines
#define gPort  PORTC
#define gLat   LATC
#define gDir   TRISC
#define USE_FRAME_BUFFER 1

void GlcdInit(void);
void GlcdBox(char gx, char gy, char gw, char gh);
void GlcdHline(char gx, char gy, char gw);
void GlcdVline(char gx, char gy, char gh);
void GlcdPixel(char gx, char gy);
void GlcdSetxy(char gx, char gy);
void GlcdCls();
void GlcdCircle(char x, char y, char r);
void GlcdLine(char x0, char y0, char x1, char y1);
void GlcdClrxy(char x0, char y0, char x1, char y1);
void GlcdChr(char x, char y, char ch);
void GlcdStr(char x, char y, char * dat);
void GlcdBitmap(char x,char y,char w,char h,const char *bm);


char gread_byte();
char gread_data();
void gcmd_byte(char db, char rs);
const char gMSK[]= {0,1,3,7,0xf,0x1f,0x3f,0x7f};
char gMODE=0;  //  0 normal 255 inverse 1 xor function

// frame buffer functions
#ifdef USE_FRAME_BUFFER
char gFrame[1024];
void gUpdate();
void gScrollL();
void gScrollR();
#endif



#ifdef	__cplusplus
extern "C" {
#endif /* __cplusplus */

    // TODO If C++ is being used, regular C code needs function names to have C 
    // linkage so the functions can be used by the c code. 

#ifdef	__cplusplus
}
#endif /* __cplusplus */

#endif	/* XC_HEADER_TEMPLATE_H */