Skip to content

Instantly share code, notes, and snippets.

View tschak909's full-sized avatar
🏠
Working from home

Thomas Cherryhomes tschak909

🏠
Working from home
View GitHub Profile
@tschak909
tschak909 / slowdown.c
Created July 3, 2018 04:48
Slow-down connection for pokey 8-bit machines - tcp forwarder
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <string.h>
#include <signal.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@tschak909
tschak909 / slowdown.erl
Created July 11, 2018 06:25
slowdown - a tcp forwarder with throttling for retro-computing applications connecting to large tcp servers.
-module(slowdown).
-export([run/0]).
-define(PORT_FROM, 6005).
-define(PORT_TO, 8005).
-define(BACKLOG, 10000).
run() ->
@tschak909
tschak909 / io.c
Created July 11, 2018 22:36
Snippets to implement flow control using c64 user port modems in C
/** In io_base.c - io_recv_serial is called as part of main loop */
/**
* io_recv_serial() - Receive and interpret serial data.
*/
void io_recv_serial(void)
{
recv_buffer_size=io_serial_buffer_size();
if (recv_buffer_size>XOFF_THRESHOLD && xoff_enabled==false)
{
@tschak909
tschak909 / terminal_char_load.c
Created July 27, 2018 03:03
PLATO character set loading, transposition, and scaling. (very first pass)
/**
* PLATOTerm64 - A PLATO Terminal for the Commodore 64
* Based on Steve Peltz's PAD
*
* Author: Thomas Cherryhomes <thom.cherryhomes at gmail dot com>
*
* terminal_char_load.c - Character set loading routine for 5x6 font.
*/
#include <string.h>
@tschak909
tschak909 / terminal_char_load.c
Created July 28, 2018 21:33
Latest version that mostly works.
/**
* PLATOTerm64 - A PLATO Terminal for the Commodore 64
* Based on Steve Peltz's PAD
*
* Author: Thomas Cherryhomes <thom.cherryhomes at gmail dot com>
*
* terminal_char_load.c - Character set loading routine for 5x6 font.
*/
#include <cbm.h>
@tschak909
tschak909 / font_transform.c
Created July 31, 2018 15:40
platoterm character set scaling test harness
#include <stdio.h>
// Pulled in typedef from protocol.h
typedef short padWord;
typedef padWord charData[8];
// const unsigned short word_data[]={0x5555,0xAAAA,0x5555,0xAAAA,0x5555,0xAAAA,0x5555,0xAAAA}; // every other dot.
// The example line. This renders well enough with alg A
//const unsigned short word_data[]={0x0003, 0x000F, 0x003F, 0x00FF, 0x03FF, 0x0FFF, 0x3FFC, 0xFFF0}; // A sort of line.
@tschak909
tschak909 / terminal_char_load.c
Created August 1, 2018 21:09
terminal_char_load current implementation.
/**
* PLATOTerm64 - A PLATO Terminal for the Commodore 64
* Based on Steve Peltz's PAD
*
* Author: Thomas Cherryhomes <thom.cherryhomes at gmail dot com>
*
* terminal_char_load.c - Character set loading routine for 5x6 font.
* Thanks to Michael Sternberg (16kRAM/atari) for fixing Algorithm B
*/
@tschak909
tschak909 / checkers_charset_data.txt
Created August 2, 2018 05:53
Character set data for PLATO checkers, for image processing testing.
000: 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000
001: 0XFFFF, 0XE00F, 0XE00F, 0XE67F, 0XE67F, 0XE00F, 0XE00F, 0XFFFF
002: 0XFFFF, 0XE00F, 0XE00F, 0XE4CF, 0XE4CF, 0XE00F, 0XF01F, 0XFFFF
003: 0XFFFF, 0XE00F, 0XE00F, 0XE7CF, 0XE7CF, 0XE7CF, 0XE7CF, 0XFFFF
004: 0XFFFF, 0XE00F, 0XE00F, 0XE7CF, 0XE7CF, 0XE00F, 0XF01F, 0XFFFF
005: 0XFFFF, 0XE00F, 0XE00F, 0XE4CF, 0XE4CF, 0XE7CF, 0XE7CF, 0XFFFF
006: 0XFFFF, 0XE00F, 0XE00F, 0XE4FF, 0XE4FF, 0XE7FF, 0XE7FF, 0XFFFF
007: 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000, 0X0000
008: 0XFFFF, 0XE00F, 0XE00F, 0XFC7F, 0XFC7F, 0XE00F, 0XE00F, 0XFFFF
009: 0XFFFF, 0XFFFF, 0XFFFF, 0XE00F, 0XE00F, 0XFFFF, 0XFFFF, 0XFFFF
@tschak909
tschak909 / atari_tgi_ser_test.c
Created August 7, 2018 23:50
Atari 8-bit CC65 serial and TGI test harness.
/* Guaranteed to make the computer puke. */
#include <tgi.h>
#include <serial.h>
static struct ser_params params = {
SER_BAUD_2400,
SER_BITS_8,
SER_STOP_1,
SER_PAR_NONE,
@tschak909
tschak909 / tgi_fill.c
Created October 18, 2018 16:11
implementation of scanline fill for CC65 TGI.
/**
* screen_paint - Paint screen scanline_fill
*/
void _screen_paint(unsigned short x, unsigned short y)
{
static unsigned short xStack[320];
static unsigned char yStack[192];
unsigned char stackentry = 1;
unsigned char spanAbove, spanBelow;