Initial text driver work for VICKY III

This commit is contained in:
Peter Weingartner 2021-09-11 22:05:36 -04:00
parent ddc9c962ef
commit 3c073aa35c
45 changed files with 2011 additions and 8 deletions

7
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,7 @@
{
"files.associations": {
"*.s": "assembly",
"*.forth": "forth",
"syscalls_m68k.h": "c"
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

324
C256Mgr/c256mgr.py Normal file
View file

@ -0,0 +1,324 @@
import intelhex
import wdc
import foenix
import srec
import configparser
import re
import sys
import argparse
import os
from serial.tools import list_ports
FLASH_SIZE = 524288 # Required size of flash file: 512 KB
CHUNK_SIZE = 4096 # Size of block of binary data to transfer
label_file = ""
to_send = ""
port = ""
start_address = ""
count = ""
label = ""
def confirm(question):
return input(question).lower().strip()[:1] == "y"
def revision(port):
"""Get the version code for the debug port."""
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
c256.enter_debug()
try:
data = c256.get_revision()
return "%X" % data
finally:
c256.exit_debug()
finally:
c256.close()
def upload_binary(port, filename, address):
"""Upload a binary file into the C256 memory."""
with open(filename, "rb") as f:
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
c256.enter_debug()
try:
current_addr = int(address, 16)
block = f.read(CHUNK_SIZE)
while block:
c256.write_block(current_addr, block)
current_addr += len(block)
block = f.read(CHUNK_SIZE)
finally:
c256.exit_debug()
finally:
c256.close()
def program_flash(port, filename, hex_address):
"""Program the flash memory using the contents of the C256's RAM."""
base_address = int(hex_address, 16)
address = base_address
print("About to upload image to address 0x{:X}".format(address), flush=True)
if os.path.getsize(filename) == FLASH_SIZE:
if confirm("Are you sure you want to reprogram the flash memory? (y/n): "):
with open(filename, "rb") as f:
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
c256.enter_debug()
try:
block = f.read(CHUNK_SIZE)
while block:
c256.write_block(address, block)
address += len(block)
block = f.read(CHUNK_SIZE)
print("Binary file uploaded...", flush=True)
c256.erase_flash()
print("Flash memory erased...", flush=True)
c256.program_flash(base_address)
print("Flash memory programmed...")
finally:
c256.exit_debug()
finally:
c256.close()
else:
print("The provided flash file is not the right size.")
def dereference(port, file, label):
"""Get the address contained in the pointer with the label in the label file."""
c256 = foenix.FoenixDebugPort()
try:
address = lookup(file, label)
c256.open(port)
c256.enter_debug()
try:
data = c256.read_block(int(address, 16), 3)
deref = data[2] << 16 | data[1] << 8 | data[0]
return "%X" % deref
finally:
c256.exit_debug()
finally:
c256.close()
def lookup(file, label):
"""Return the hex address linked to the passed label in the label file."""
with open(file) as f:
for line in f:
match = re.match('^(\S+)\s*\=\s*\$(\S+)', line)
if match:
if match.group(1) == label:
return match.group(2)
sys.stderr.write("Could not find a definition for that label.\n")
sys.exit(2)
def display(base_address, data):
"""Write a block of data to the console in a nice, hexadecimal format."""
text_buff = ""
for i in range(0, len(data)):
if (i % 16) == 0:
if text_buff != "":
sys.stdout.write(" {}\n".format(text_buff))
text_buff = ""
sys.stdout.write("{:06X}: ".format(base_address + i))
elif (i % 8) == 0:
sys.stdout.write(" ")
sys.stdout.write("{:02X}".format(data[i]))
b = bytearray(1)
b[0] = data[i]
if (b[0] & 0x80 == 0):
c = b.decode('ascii')
if c.isprintable():
text_buff = text_buff + c
else:
text_buff = text_buff + "."
else:
text_buff = text_buff + "."
sys.stdout.write(' {}\n'.format(text_buff))
def send_wdc(port, filename):
"""Send the data in the hex file 'filename' to the C256 on the given serial port."""
infile = wdc.WdcBinFile()
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
infile.open(filename)
try:
infile.set_handler(lambda address, data: c256.write_block(address, data))
c256.enter_debug()
try:
# Process the lines in the hex file
infile.read_blocks()
finally:
c256.exit_debug()
finally:
infile.close()
finally:
c256.close()
def send_srec(port, filename):
"""Send the data in the SREC hex file 'filename' to the C256 on the given serial port."""
infile = srec.SRECFile()
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
infile.open(filename)
try:
infile.set_handler(lambda address, data: c256.write_block(address, bytes.fromhex(data)))
c256.enter_debug()
try:
# Process the lines in the hex file
infile.read_lines()
finally:
c256.exit_debug()
finally:
infile.close()
finally:
c256.close()
def send(port, filename):
"""Send the data in the hex file 'filename' to the C256 on the given serial port."""
infile = intelhex.HexFile()
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
infile.open(filename)
try:
infile.set_handler(lambda address, data: c256.write_block(address, bytes.fromhex(data)))
c256.enter_debug()
try:
# Process the lines in the hex file
infile.read_lines()
finally:
c256.exit_debug()
finally:
infile.close()
finally:
c256.close()
def get(port, address, length):
"""Read a block of data from the C256."""
c256 = foenix.FoenixDebugPort()
try:
c256.open(port)
c256.enter_debug()
try:
data = c256.read_block(int(address, 16), int(length, 16))
display(int(address, 16), data)
finally:
c256.exit_debug()
finally:
c256.close()
def list_serial_ports():
serial_ports = list_ports.comports()
if len(serial_ports) == 0:
print("No serial ports found")
for serial_port in serial_ports:
print(f"{serial_port.device}")
print(f" Description: {serial_port.description}")
print(f" Manufacturer: {serial_port.manufacturer}")
print(f" Product: {serial_port.product}")
print()
config = configparser.ConfigParser()
config.read('c256.ini')
parser = argparse.ArgumentParser(description='Manage the C256 Foenix through its debug port.')
parser.add_argument("--port", dest="port", default=config['DEFAULT'].get('port', 'COM3'),
help="Specify the serial port to use to access the C256 debug port.")
parser.add_argument("--list-ports", dest="list_ports", action="store_true",
help="List available serial ports.")
parser.add_argument("--label-file", dest="label_file", default=config['DEFAULT'].get('labels', 'basic8'),
help="Specify the label file to use for dereference and lookup")
parser.add_argument("--count", dest="count", default="10", help="the number of bytes to read")
parser.add_argument("--dump", metavar="ADDRESS", dest="dump_address",
help="Read memory from the C256's memory and display it.")
parser.add_argument("--deref", metavar="LABEL", dest="deref_name",
help="Lookup the address stored at LABEL and display the memory there.")
parser.add_argument("--lookup", metavar="LABEL", dest="lookup_name",
help="Display the memory starting at the address indicated by the label.")
parser.add_argument("--revision", action="store_true", dest="revision",
help="Display the revision code of the debug interface.")
parser.add_argument("--flash", metavar="BINARY FILE", dest="flash_file",
help="Attempt to reprogram the flash using the binary file provided.")
parser.add_argument("--binary", metavar="BINARY FILE", dest="binary_file",
help="Upload a binary file to the C256's RAM.")
parser.add_argument("--address", metavar="ADDRESS", dest="address",
default=config['DEFAULT'].get('flash_address', '380000'),
help="Provide the starting address of the memory block to use in flashing memory.")
parser.add_argument("--upload", metavar="HEX FILE", dest="hex_file",
help="Attempt to reprogram the flash using the binary file provided.")
parser.add_argument("--upload-wdc", metavar="BINARY FILE", dest="wdc_file",
help="Upload a WDCTools binary hex file. (WDCLN.EXE -HZ)")
parser.add_argument("--upload-srec", metavar="SREC FILE", dest="srec_file",
help="Upload a Motorola SREC hex file.")
options = parser.parse_args()
try:
if options.port != "":
if options.hex_file:
send(options.port, options.hex_file)
elif options.wdc_file:
send_wdc(options.port, options.wdc_file)
elif options.srec_file:
send_srec(options.port, options.srec_file)
elif options.deref_name and options.label_file:
address = dereference(options.port, options.label_file, options.deref_name)
get(options.port, address, options.count)
elif options.lookup_name and options.label_file:
address = lookup(options.label_file, options.lookup_name)
get(options.port, address, options.count)
elif options.dump_address:
get(options.port, options.dump_address, options.count)
elif options.revision:
rev = revision(options.port)
print(rev)
elif options.address and options.binary_file:
upload_binary(options.port, options.binary_file, options.address)
elif options.address and options.flash_file:
program_flash(options.port, options.flash_file, options.address)
elif options.list_ports:
list_serial_ports()
else:
parser.print_help()
else:
parser.print_help()
finally:
print

140
C256Mgr/foenix.py Normal file
View file

@ -0,0 +1,140 @@
import serial
class FoenixDebugPort:
"""Provide the conneciton to a C256 Foenix debug port."""
connection = 0
status0 = 0
status1 = 0
def open(self, port):
"""Open a connection to the C256 Foenix."""
self.connection = serial.Serial(port=port,
baudrate=6000000,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=60,
write_timeout=60)
try:
self.connection.open()
except:
self.connection.close()
self.connection.open()
def is_open(self):
return self.connection.is_open()
def close(self):
"""Close the connection to the C256 Foenix."""
self.connection.close()
def enter_debug(self):
"""Send the command to make the C256 Foenix enter its debug mode."""
self.transfer(0x80, 0, 0, 0)
def exit_debug(self):
"""Send the command to make the C256 Foenix leave its debug mode.
This will make the C256 reset.
"""
self.transfer(0x81, 0, 0, 0)
def erase_flash(self):
"""Send the command to have the C256 Foenix erase its flash memory."""
self.transfer(0x11, 0, 0, 0)
def get_revision(self):
"""Gets the revision code for the debug interface.
RevB2's revision code is 0, RevC4A is 1."""
self.transfer(0xFE, 0, 0, 0)
return self.status1
def program_flash(self, address):
"""Send the command to have the C256 Foenix reprogram its flash memory.
Data to be written should already be in the C256's RAM at address."""
self.transfer(0x10, address, 0, 0)
def write_block(self, address, data):
"""Write a block of data to the specified starting address in the C256's memory."""
self.transfer(0x01, address, data, 0)
def read_block(self, address, length):
"""Read a block of data of the specified length from the specified starting address of the C256's memory."""
return self.transfer(0x00, address, 0, length)
def readbyte(self):
b = self.connection.read(1)
return b[0]
def transfer(self, command, address, data, read_length):
"""Send a command to the C256 Foenix"""
self.status0 = 0
self.status1 = 0
lrc = 0
length = 0
if data == 0:
length = read_length
else:
length = len(data)
# if command == 0x80:
# print('Switching to debug mode')
# elif command == 0x81:
# print('Resetting')
# else:
# print('Writing data of length {:X} to {:X}'.format(length, address))
command_bytes = command.to_bytes(1, 'big')
address_bytes = address.to_bytes(3, 'big')
length_bytes = length.to_bytes(2, 'big')
header = bytearray(7)
header[0] = 0x55
header[1] = command_bytes[0]
header[2] = address_bytes[0]
header[3] = address_bytes[1]
header[4] = address_bytes[2]
header[5] = length_bytes[0]
header[6] = length_bytes[1]
for i in range(0, 6):
lrc = lrc ^ header[i]
if data:
for i in range(0, length):
lrc = lrc ^ data[i]
lrc_bytes = lrc.to_bytes(1, 'big')
if data:
packet = header + data + lrc_bytes
written = self.connection.write(packet)
if written != len(packet):
raise Exception("Could not write packet correctly.")
else:
packet = header + lrc_bytes
written = self.connection.write(packet)
if written != len(packet):
raise Exception("Could not write packet correctly.")
# print('Sent [{}]'.format(packet.hex()))
c = 0
while c != 0xAA:
c = self.readbyte()
# print('Got 0xAA')
read_bytes = 0
if c == 0xAA:
self.status0 = self.readbyte()
self.status1 = self.readbyte()
if read_length > 0:
read_bytes = self.connection.read(read_length)
read_lrc = self.readbyte()
# print("Status: {:X}, {:X}".format(self.status0, self.status1))
return read_bytes

52
C256Mgr/intelhex.py Normal file
View file

@ -0,0 +1,52 @@
import re
class HexFile:
"""Read information from an Intel Hex file."""
file = 0
base_address = 0
handler = 0
def __init__(self):
self.file = 0
self.base_address = 0
self.handler = 0
def open(self, filename):
self.file = open(filename, 'r')
def set_handler(self, proc):
self.handler = proc
def close(self):
self.file.close()
def read_lines(self):
line = self.file.readline()
while line:
self.parse_line(line)
line = self.file.readline()
def parse_line(self, line):
m = re.match("^:([0-9a-fA-F]{2})([0-9a-fA-F]{4})([0-9a-fA-F]{2})([0-9a-fA-F]*)([0-9a-fA-F]{2})", line)
size = int(m.group(1), 16)
address = int(m.group(2), 16)
code = int(m.group(3), 16)
data = m.group(4)
crc = int(m.group(5), 16)
if code == 0:
if self.handler:
# print('Sending record to {:X}'.format(self.base_address + address))
self.handler(self.base_address + address, data)
elif code == 2:
# Set the base address based on a segment
self.base_address = int(data, 16) << 4 # shity 80x86 real mode addressing : take the address an do *16 to get the final address
# print('Setting base address to {:X}'.format(self.base_address))
elif code == 4:
# Set the base address given on address[31..16]
self.base_address = int(data, 16) << 16
# print('Setting base address to {:X}'.format(self.base_address))

73
C256Mgr/srec.py Normal file
View file

@ -0,0 +1,73 @@
import re
class SRECFile:
"""Read information from a Motorola SREC file."""
file = 0
handler = 0
def __init__(self):
self.file = 0
self.handler = 0
def open(self, filename):
self.file = open(filename, 'r')
def set_handler(self, proc):
self.handler = proc
def close(self):
self.file.close()
def read_lines(self):
line = self.file.readline()
while line:
self.parse_line(line)
line = self.file.readline()
def parse_line(self, line):
# Format of line will vary based on the type, so let's get the type first
m = re.match("^S([0-9a-fA-F])([0-9a-fA-F]+)", line)
code = int(m.group(1), 16)
hex_digits = m.group(2)
# Codes...
# 0 = Comment/header
# 1 = Data with 16-bit address
# 2 = Data with 24-bit address
# 3 = Data with 32-bit address
# 4 = Reserved
# 5 = 16-bit record count
# 6 = 24-bit record count
# 7 = 32-bit start address
# 8 = 24-bit start address
# 9 = 16-bit start address
#
# This code will ignore all records by 1, 2, and 3
if code == 1:
# Unpack a record with a 16-bit address
m2 = re.match("^([0-9a-fA-F]{2})([0-9a-fA-F]{4})([0-9a-fA-F]*)([0-9a-fA-F]{2})", hex_digits)
count = int(m2.group(1), 16)
address = int(m2.group(2), 16)
data = m2.group(3)
crc = int(m2.group(4), 16)
self.handler(address, data)
elif code == 2:
# Unpack a record with a 24-bit address
m2 = re.match("^([0-9a-fA-F]{2})([0-9a-fA-F]{6})([0-9a-fA-F]*)([0-9a-fA-F]{2})", hex_digits)
count = int(m2.group(1), 16)
address = int(m2.group(2), 16)
data = m2.group(3)
crc = int(m2.group(4), 16)
self.handler(address, data)
elif code == 3:
# Unpack a record with a 32-bit address
m2 = re.match("^([0-9a-fA-F]{2})([0-9a-fA-F]{8})([0-9a-fA-F]*)([0-9a-fA-F]{2})", hex_digits)
count = int(m2.group(1), 16)
address = int(m2.group(2), 16)
data = m2.group(3)
crc = int(m2.group(4), 16)
self.handler(address, data)

49
C256Mgr/wdc.py Normal file
View file

@ -0,0 +1,49 @@
from pathlib import Path
##
# See: http://www.westerndesigncenter.com/wdc/datasheets/Assembler_Linker.pdf
# page 37
#
# Initial byte 'Z' as signature.
#
# Then for each block:
# 3 byte address
# 3 byte length
# length bytes of data
#
# The final block has an address and length of 0.
#
class WdcBinFile:
"""Reads information from WDCTools BIN formated file"""
data = 0
handler = 0
def __init__(self):
pass
def open(self, filename):
self.data = Path(filename).read_bytes()
def close(self):
self.data = []
def set_handler(self, proc):
self.handler = proc
def read_blocks(self):
offset = 1
while offset < len(self.data):
(addr, block, offset) = self.__read_block(self.data, offset)
if addr > 0:
self.handler(addr, block)
def __read_block(self, data, offset):
addr = int.from_bytes(data[offset:offset+3], byteorder='little', signed=False)
size = int.from_bytes(data[offset+3:offset+6], byteorder='little', signed=False)
if addr == 0:
return (0, [], offset+6)
block = data[offset+6:offset+6+size]
return (addr, block, offset+6+size)

4
c256.ini Normal file
View file

@ -0,0 +1,4 @@
[DEFAULT]
port=COM9
labels=sample.lbl
flash_address=380000

9
deref.bat Normal file
View file

@ -0,0 +1,9 @@
@echo off
REM Print the contents of memory, given the label of a pointer to the start address
REM usage: deref {label}
if [%2%]==[] (
python C256Mgr\c256mgr.py --deref %1
) ELSE (
python C256Mgr\c256mgr.py --deref %1 --count %2
)

19
docs/gabe_details.txt Normal file
View file

@ -0,0 +1,19 @@
assign CS_GABE_Config_o = ( iBUS_A_i[16:6] == 11'b0_0000_0000_00) & iBUS_CS_GABE_i; // $00C00000..$00C0003F - Control Registers
assign CS_A2560K_KB_o = ( iBUS_A_i[16:6] == 11'b0_0000_0000_01) & iBUS_CS_GABE_i; // $00C00040..$00C0007F - Control Registers
assign CS_RTC_o = ( iBUS_A_i[16:7] == 10'b0_0000_0000_1) & iBUS_CS_GABE_i; // $00C00000..$00C0008F - Control Registers
assign CS_Interrupt_Ctrl_o = ( iBUS_A_i[16:8] == 9'b0_0000_0001) & iBUS_CS_GABE_i; // $00C00100..$00C001FF - Interrupt Controllers
assign CS_Timer_o = ( iBUS_A_i[16:8] == 9'b0_0000_0010) & iBUS_CS_GABE_i; // $00C00200..$00C002FF - Timer Block
assign CS_SDCard_o = ( iBUS_A_i[16:8] == 9'b0_0000_0011) & iBUS_CS_GABE_i; // $00C00300..$00C003FF - SD Card Controller
assign CS_IDE_o = ( iBUS_A_i[16:8] == 9'b0_0000_0100) & iBUS_CS_GABE_i; // $00C00400..$00C004FF - IDE
assign CS_Joystick_o = ( iBUS_A_i[16:8] == 9'b0_0000_0101) & iBUS_CS_GABE_i; // $00C00500..$00C005FF - JOYSTICK/JOYPAD
assign CS_NIC_o = ( iBUS_A_i[16:9] == 8'b0_0000_011) & iBUS_CS_GABE_i; // $00C00600..$00C007FF - NIC
// LPC Block
assign CS_LPC_o = (iBUS_A_i[16:10] == 7'b0_0010_00) & iBUS_CS_GABE_i; // $00C02000..$00C023FF - LPC
// Math Block
assign CS_UNSIGNED_MULT_o = ( iBUS_A_i[16:5] == 12'b0_0011_0000_000) & iBUS_CS_GABE_i; // $00C03000..$00C0301F - 32 x 32 Unsigned
assign CS_SIGNED_MULT_o = ( iBUS_A_i[16:5] == 12'b0_0011_0000_001) & iBUS_CS_GABE_i; // $00C03020..$00C0303F - 32 x 32 Signed
assign CS_UNSIGNED_DIV_o = ( iBUS_A_i[16:5] == 12'b0_0011_0000_010) & iBUS_CS_GABE_i; // $00C03040..$00C0305F - 32 x 32 Unsigned
assign CS_SIGNED_DIV_o = ( iBUS_A_i[16:5] == 12'b0_0011_0000_011) & iBUS_CS_GABE_i; // $00C03060..$00C0307F - 32 x 32 Signed
assign CS_MATH_FLOAT_o = ( iBUS_A_i[16:7] == 8'b0_0100_000) & iBUS_CS_GABE_i; // $00C04000..$00C041FF - Float Module

View file

@ -0,0 +1,26 @@
lirq0 <= { DAC0_Playback_Done_IRQ_i, 1'b0, DAC1_Playback_Done_IRQ_i, 1'b0, BTX_IRQ_i[3:0], 2'b00, OPL3_EXT_IRQ_i, OPN2_EXT_IRQ_i, OPM_IXT_IRQ_i, SD_IRQ_i, SD_Card_Insert_i, IDE_IRQ_i,
RTC_IRQ_i, 2'b00, ~Timer4_i, ~Timer3_i, ~Timer2_i, ~Timer1_i, ~Timer0_i, !MPU_401_int_PulSe[3], !FDC_int_PulSe[3], !LPT1_int_PulSe[3], !COM2_int_PulSe[3], !COM1_int_PulSe[3], !Mouse_int_PulSe[3], A2560K_Keyboard_IRQ_i , !Keyboard_int_PulSe[3], //16bits
VID_B_HP_INT1n_i, 1'b0, VKY_III_Channel_B_IRQ_i, VID_A_HP_INT1n_i, 1'b0, VKY_III_Channel_A_IRQ_i }; //16bits
case(CPU_A_i[4:1])
4'b0000: begin pending[15:0] <= (pending[15:0] & ~CPU_D_i); end
4'b0001: begin pending[31:16] <= (pending[31:16] & ~CPU_D_i); end
4'b0010: begin pending[47:32] <= (pending[47:32] & ~CPU_D_i); end
4'b0011: begin Temp_Reg_Unused[0] <= CPU_D_i; end
4'b0100: begin pol[15:0] <= CPU_D_i; end
4'b0101: begin pol[31:16] <= CPU_D_i; end
4'b0110: begin pol[47:32] <= CPU_D_i; end
4'b0111: begin Temp_Reg_Unused[1] <= CPU_D_i; end
4'b1000: begin edgen[15:0] <= CPU_D_i; end
4'b1001: begin edgen[31:16]<= CPU_D_i; end
4'b1010: begin edgen[47:32]<= CPU_D_i; end
4'b1011: begin Temp_Reg_Unused[2] <= CPU_D_i; end
4'b1100: begin mask[15:0] <= CPU_D_i; end
4'b1101: begin mask[31:16] <= CPU_D_i; end
4'b1110: begin mask[47:32] <= CPU_D_i; end
4'b1111: begin Temp_Reg_Unused[3] <= CPU_D_i; end
default: begin end

35
docs/math_details.txt Normal file
View file

@ -0,0 +1,35 @@
5'b00000: iBUS_D_FixedMATH_o = UnsignedMult[1];
5'b00001: iBUS_D_FixedMATH_o = UnsignedMult[0];
5'b00010: iBUS_D_FixedMATH_o = UnsignedMult[3];
5'b00011: iBUS_D_FixedMATH_o = UnsignedMult[2];
5'b00100: iBUS_D_FixedMATH_o = UnsignedMultOutput[31:16];
5'b00101: iBUS_D_FixedMATH_o = UnsignedMultOutput[15:0];
5'b00110: iBUS_D_FixedMATH_o = UnsignedMultOutput[63:48];
5'b00111: iBUS_D_FixedMATH_o = UnsignedMultOutput[47:32];
// Signed Mult
5'b01000: iBUS_D_FixedMATH_o = SignedMult[1];
5'b01001: iBUS_D_FixedMATH_o = SignedMult[0];
5'b01010: iBUS_D_FixedMATH_o = SignedMult[3];
5'b01011: iBUS_D_FixedMATH_o = SignedMult[2];
5'b01100: iBUS_D_FixedMATH_o = SignedMultOutput[31:16];
5'b01101: iBUS_D_FixedMATH_o = SignedMultOutput[15:0];
5'b01110: iBUS_D_FixedMATH_o = SignedMultOutput[63:48];
5'b01111: iBUS_D_FixedMATH_o = SignedMultOutput[47:32];
// Unsigned Div
5'b10000: iBUS_D_FixedMATH_o = UnsignedDiv[1];
5'b10001: iBUS_D_FixedMATH_o = UnsignedDiv[0];
5'b10010: iBUS_D_FixedMATH_o = UnsignedDiv[3];
5'b10011: iBUS_D_FixedMATH_o = UnsignedDiv[2];
5'b10100: iBUS_D_FixedMATH_o = UnsignedDivisionQuotient[31:16];
5'b10101: iBUS_D_FixedMATH_o = UnsignedDivisionQuotient[15:0];
5'b10110: iBUS_D_FixedMATH_o = UnsignedDivisionremain[31:16];
5'b10111: iBUS_D_FixedMATH_o = UnsignedDivisionremain[15:0];
// Signed Div
5'b11000: iBUS_D_FixedMATH_o = SignedDiv[1];
5'b11001: iBUS_D_FixedMATH_o = SignedDiv[0];
5'b11010: iBUS_D_FixedMATH_o = SignedDiv[3];
5'b11011: iBUS_D_FixedMATH_o = SignedDiv[2];
5'b11100: iBUS_D_FixedMATH_o = SignedDivisionQuotient[31:16];
5'b11101: iBUS_D_FixedMATH_o = SignedDivisionQuotient[15:0];
5'b11110: iBUS_D_FixedMATH_o = SignedDivisionremain[31:16];
5'b11111: iBUS_D_FixedMATH_o = SignedDivisionremain[15:0];

23
docs/sound_details.txt Normal file
View file

@ -0,0 +1,23 @@
assign CS_BEATRIX_Config_o = ( iBUS_A_i[16:8] == 9'b0_0000_0000) & iBUS_CS_BEATRIX_i; // $00C20000..$00C200FF - Control Registers
// PSG
assign CS_Ext_PSG_o = ( iBUS_A_i[16:4] == 9'b0_0000_0001_0000) & iBUS_CS_BEATRIX_i; // $00C20100..$00C2010F - Extern PSG
assign CS_Int_L_PSG_o = ( iBUS_A_i[16:4] == 9'b0_0000_0001_0001) & iBUS_CS_BEATRIX_i; // $00C20110..$00C2011F - Internal PSG - L Channel
assign CS_Int_R_PSG_o = ( iBUS_A_i[16:4] == 9'b0_0000_0001_0010) & iBUS_CS_BEATRIX_i; // $00C20120..$00C2012F - Internal PSG - R Channel
assign CS_Int_S_PSG_o = ( iBUS_A_i[16:4] == 9'b0_0000_0001_0011) & iBUS_CS_BEATRIX_i; // $00C20130..$00C2013F - Internal PSG - S Channel
// External Devices
assign CS_OPL3_o = ( iBUS_A_i[16:9] == 8'b0_0000_001) & iBUS_CS_BEATRIX_i; // $00C20200..$00C203FF - Extern OPL3
assign CS_Ext_OPN2_o = ( iBUS_A_i[16:9] == 8'b0_0000_010) & iBUS_CS_BEATRIX_i; // $00C20400..$00C205FF - Extern OPN2
assign CS_Ext_OPM_o = ( iBUS_A_i[16:9] == 8'b0_0000_011) & iBUS_CS_BEATRIX_i; // $00C20600..$00C207FF - Extern OPM
assign CS_Ext_L_SID_o = ( iBUS_A_i[16:8] == 9'b0_0000_1000) & iBUS_CS_BEATRIX_i; // $00C20800..$00C208FF - Extern Left SID
assign CS_Ext_R_SID_o = ( iBUS_A_i[16:8] == 9'b0_0000_1001) & iBUS_CS_BEATRIX_i; // $00C20900..$00C209FF - Extern Right SID
// Internal Devices
assign CS_Int_OPN2_o = ( iBUS_A_i[16:9] == 8'b0_0000_101) & iBUS_CS_BEATRIX_i; // $00C20A00..$00C20BFF - Internal OPN2
assign CS_Int_OPM_o = ( iBUS_A_i[16:9] == 8'b0_0000_110) & iBUS_CS_BEATRIX_i; // $00C20C00..$00C20DFF - Internal OPM
assign CS_CODEC_o = ( iBUS_A_i[16:9] == 8'b0_0000_111) & iBUS_CS_BEATRIX_i; // $00C20E00..$00C20FFF - CODEC
assign CS_Int_L_SID_o = ( iBUS_A_i[16:9] == 8'b0_0001_000) & iBUS_CS_BEATRIX_i; // $00C21000..$00C211FF - Internal SID Left
assign CS_Int_R_SID_o = ( iBUS_A_i[16:9] == 8'b0_0001_001) & iBUS_CS_BEATRIX_i; // $00C21200..$00C213FF - Internal SID Right
assign CS_Int_S_SID_o = ( iBUS_A_i[16:9] == 8'b0_0001_010) & iBUS_CS_BEATRIX_i; // $00C21400..$00C215FF - Internal SID Stereo
assign CS_CPU_2_DAC48_o = ( iBUS_A_i[16:8] == 9'b0_0010_0000) & iBUS_CS_BEATRIX_i; // $00C20000..$00C000FF - CPU 2 DAC - 48Khz
assign CS_CPU_2_DAC44_o = ( iBUS_A_i[16:8] == 9'b0_0010_0001) & iBUS_CS_BEATRIX_i; // $00C20100..$00C001FF - CPU 2 DAC - 44Khz

0
docs/syscalls.md Normal file
View file

BIN
docs/syscalls.ods Normal file

Binary file not shown.

0
docs/syscalls.tex Normal file
View file

101
docs/vicky_details.txt Normal file
View file

@ -0,0 +1,101 @@
MasterControl[0] = Text Mode Enable
MasterControl[1] = Text Mode overlay
MasterControl[2] = Graphic Mode Enable
MasterControl[9:8] = resolution - 00: 640x480, 01:800x600, 10: 1024x768 (doesn't work yet), 11: 640x400 (I didn't try yet)
MasterControl[10] = Doubling Pixel
MasterControl[16] = GAMMA Enable
MasterControl[17] = Enable Manual GAMMA Enable
MasterControl[18] = Turn OFF sync (to monitor in sleep mode)
it is 32 bits Register and always should be treated as such
Mimiru Miru — Today at 7:01 PM
Do you also have this for the border and cursor control registers?
c256foenix — Today at 7:01 PM
BorderControlReg0 and BorderControlReg1 are a 32bits Register
BorderControlReg[0] = Border Enable
BorderControlReg[6:4] = X Scroll
BorderControlReg[13:8] = X Size
BorderControlReg[21:16] = Y Size
Dude, chill out!
Mimiru Miru — Today at 7:01 PM
Sorry!
c256foenix — Today at 7:01 PM
I am decyphering my own Verilog Code
Mimiru Miru — Today at 7:01 PM
ah ok
c256foenix — Today at 7:02 PM
BorderControl2 and BoardControl3 are 1x 32 bit register
BorderControlColor[23:0] = RGB;
Cursor Control Register is made out of MasterControl[8] and MasterControl[9]
CursorControl[0] = Cursor Enable
CursorControl[2:1] = Flash Rate = 00: 1 per Sec, 01: 2 per sec, 10: 4 per sec, 11: 5 per sec
CursorControl[15:8] = Reg Rext Pointer Offset (not sure if we still use that)
CursorControl[23:16] = Cursor Character
CursorControl[31:24] = Cursor Color
Cursor Control Register Position is made out of MasterControl[10] and MasterControl[11]
Cursor Control Position[15:0] = X Position
Cursor Control Position[31:16] = Y Position
assign CS_VICKY_REG_A_o = ( iBUS_A_i[16:7] == 10'b0_0000_0000_0) & iBUS_CS_VICKY_A_i; // $00C40000..$00C4007F - Control Registers
assign CS_Mouse_Ptr_A_Graphics_o = ( iBUS_A_i[16:10] == 7'b0_0000_01) & iBUS_CS_VICKY_A_i; // $00C40400..$00C80BFF - Mouser Pointer graphics 16x16 ARGB x2
assign CS_Mouse_Ptr_A_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_1100) & iBUS_CS_VICKY_A_i; // $00C40C00..$00C80CFF - Mouser Pointer Registers
assign CS_GAMMA_B_A_o = ( iBUS_A_i[16:8] == 9'b0_0100_0000) & iBUS_CS_VICKY_A_i; // $00C44000..$00C440FF - GAMMA Blue
assign CS_GAMMA_G_A_o = ( iBUS_A_i[16:8] == 9'b0_0100_0001) & iBUS_CS_VICKY_A_i; // $00C44100..$00C441FF - GAMMA Green
assign CS_GAMMA_R_A_o = ( iBUS_A_i[16:8] == 9'b0_0100_0010) & iBUS_CS_VICKY_A_i; // $00C44200..$00C442FF - GAMMA Red
// Channel A TEXT MEM
assign CS_TextMemory_A_o = (iBUS_A_i[16:14] == 3'b0_00) & iBUS_CS_VICKY_MEM_A_i; //$C60000 - $C63FFF
assign CS_ColorMemory_A_o = (iBUS_A_i[16:14] == 3'b0_10) & iBUS_CS_VICKY_MEM_A_i; //$C68000 - $C6BFFF
assign CS_BF_CLUT_A_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_00) & iBUS_CS_VICKY_MEM_A_i; //$C6C400 - $C6C43F
assign CS_BG_CLUT_A_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_01) & iBUS_CS_VICKY_MEM_A_i; //$C6C440 - $C6C47F
assign CS_VICKY_REG_B_o = ( iBUS_A_i[16:7] == 10'b0_0000_0000_0) & iBUS_CS_VICKY_B_i; // $00C80000..$00C8007F - Control Registers
assign CS_Bitmap_B_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_0001) & iBUS_CS_VICKY_B_i; // $00C80100..$00C801FF - Bitmap Control Registers
assign CS_Tile0_B_Registers_o = ( iBUS_A_i[16:7] == 10'b0_0000_0010_0) & iBUS_CS_VICKY_B_i; // $00C80200..$00C8027F - TileMap Control Registers
assign CS_Tile1_B_Registers_o = ( iBUS_A_i[16:7] == 10'b0_0000_0010_1) & iBUS_CS_VICKY_B_i; // $00C80280..$00C802FF - TileSet Control Registers
assign CS_Collisions_B_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_0011) & iBUS_CS_VICKY_B_i; // $00C80300..$00C803FF - Collision Control Registers
assign CS_Mouse_Ptr_B_Graphics_o = ( iBUS_A_i[16:10] == 7'b0_0000_01) & iBUS_CS_VICKY_B_i; // $00C80400..$00C80BFF - Mouser Pointer graphics 16x16 ARGB x2
assign CS_Mouse_Ptr_B_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_1100) & iBUS_CS_VICKY_B_i; // $00C80C00..$00C80CFF - Mouser Pointer Registers
assign CS_Sprites_B_Registers_o = ( iBUS_A_i[16:12] == 5'b0_0001) & iBUS_CS_VICKY_B_i; // $00C81000..$00C81FFF - Sprites Registers
assign CS_LUT0_B_o = ( iBUS_A_i[16:13] == 4'b0_001) & iBUS_CS_VICKY_B_i; // $00C82000..$00C83FFF - LUT
assign CS_GAMMA_B_B_o = ( iBUS_A_i[16:8] == 9'b0_0100_0000) & iBUS_CS_VICKY_B_i; // $00C84000..$00C840FF - GAMMA Blue
assign CS_GAMMA_G_B_o = ( iBUS_A_i[16:8] == 9'b0_0100_0001) & iBUS_CS_VICKY_B_i; // $00C84100..$00C841FF - GAMMA Green
assign CS_GAMMA_R_B_o = ( iBUS_A_i[16:8] == 9'b0_0100_0010) & iBUS_CS_VICKY_B_i; // $00C84200..$00C842FF - GAMMA Red
// $00CA_0000 - $00CB_FFFF - VICKY TEXT MODE Internal Memory and CLUT
// Channel B
assign CS_TextMemory_B_o = (iBUS_A_i[16:14] == 3'b000) & iBUS_CS_VICKY_MEM_B_i; //$CA0000 - $CA3FFF
assign CS_ColorMemory_B_o = (iBUS_A_i[16:14] == 3'b010) & iBUS_CS_VICKY_MEM_B_i; //$CA8000 - $CABFFF
assign CS_BF_CLUT_B_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_00) & iBUS_CS_VICKY_MEM_B_i; //$CAC400 - $CAC43F
assign CS_BG_CLUT_B_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_01) & iBUS_CS_VICKY_MEM_B_i; //$CAC440 - $CAC47F
SYSTEM
assign CS0 = ( Internal_Address[23:21] == 3'b000 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$00 (2M)
assign CS1 = ( Internal_Address[23:21] == 3'b001 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$02 (2M)
// System RAM
assign CS_MERA = ( Internal_Address[23:22] == 2'b01 ) & ( UserData | SuperData ); //$040000 - $07FFFF (4M) (out of 64Meg)
// Video RAM
assign CS_VRAM_A = ( Internal_Address[23:21] == 3'b100 ) & ( UserData | SuperData ); //$080000 - 09FFFF (2M) (out of 8M)
assign CS_VRAM_B = ( Internal_Address[23:21] == 3'b101 ) & ( UserData | SuperData ); //$0A0000 - 0BFFFF (2M) (out of 8M)
assign CS_GABE = ( Internal_Address[23:17] == 7'b1100_000 ) & ( UserData | SuperData ); //$C0
assign CS_BEATRIX = ( Internal_Address[23:17] == 7'b1100_001 ) & ( UserData | SuperData ); //$C2
// Vicky Channel A
assign CS_VICKY_A = ( Internal_Address[23:17] == 7'b1100_010 ) & ( UserData | SuperData ); //$C4
assign CS_VICKY_MEM_A = ( Internal_Address[23:17] == 7'b1100_011 ) & ( UserData | SuperData ); //$C6
//$00C6_8000 - $00C9_FFFF - Reserved
// Vicky Channel B
assign CS_VICKY_B = ( Internal_Address[23:17] == 7'b1100_100 ) & ( UserData | SuperData ); //$C8
assign CS_VICKY_MEM_B = ( Internal_Address[23:17] == 7'b1100_101 ) & ( UserData | SuperData ); //$CA
assign FLASH0 = ( Internal_Address[23:21] == 3'b111 ) & ( SuperData | SuperProgram ); //$E0_0000
assign FLASH1 = 1'b0;

9
dump.bat Normal file
View file

@ -0,0 +1,9 @@
@echo off
REM Print the contents of memory
REM usage: dump {start address} [{byte count}]
if [%2%]==[] (
python C256Mgr\c256mgr.py --dump %1
) ELSE (
python C256Mgr\c256mgr.py --dump %1 --count %2
)

8
flash.bat Normal file
View file

@ -0,0 +1,8 @@
@echo off
REM Reprogram the flash memory on the C256 Foenix
if [%2%]==[] (
python C256Mgr\c256mgr.py --flash %1
) ELSE (
python C256Mgr\c256mgr.py --flash %1 --address %2
)

9
lookup.bat Normal file
View file

@ -0,0 +1,9 @@
@echo off
REM Print the contents of memory at the labeled address
REM usage: lookup {label}
if [%2%]==[] (
python C256Mgr\c256mgr.py --lookup %1
) ELSE (
python C256Mgr\c256mgr.py --lookup %1 --count %2
)

3
revision.bat Normal file
View file

@ -0,0 +1,3 @@
@echo off
REM Get the revision code of the C256 Foenix's debug interface
python C256Mgr\c256mgr.py --revision

2
run256.bat Normal file
View file

@ -0,0 +1,2 @@
@echo off
python C256Mgr\c256mgr.py --upload %1

2
runsrec.bat Normal file
View file

@ -0,0 +1,2 @@
@echo off
python C256Mgr\c256mgr.py --upload-srec %1

View file

@ -1,7 +1,7 @@
export AS = vasmm68k_mot export AS = vasmm68k_mot
export ASFLAGS = -quiet -Fvobj -nowarn=62 export ASFLAGS = -quiet -Fvobj -nowarn=62
export CC = vc export CC = vc
export CFLAGS = +../vbcc/config/m68k-foenix -I. -Iinclude export CFLAGS = +../vbcc/config/m68k-foenix -I. -Iinclude -DCPU=32 -DSYSTEM=4
export RM = cmd /C del /Q /F export RM = cmd /C del /Q /F
cpu = m68k cpu = m68k
@ -17,8 +17,8 @@ all: foenixmcp.s68 $(cpu)
$(cpu): $(cpu):
$(MAKE) --directory=$@ $(MAKE) --directory=$@
foenixmcp.s68: foenixmcp.o $(cpu) foenixmcp.s68: foenixmcp.o text_screen.o $(cpu)
$(CC) $(CFLAGS) -o foenixmcp.s68 foenixmcp.o $(cpu_c_obj) $(CC) $(CFLAGS) -o foenixmcp.s68 foenixmcp.o text_screen.o $(cpu_c_obj)
%.o: %.c $(DEPS) %.o: %.c $(DEPS)
$(CC) -S -c -o $@ $< $(CFLAGS) $(CC) -S -c -o $@ $< $(CFLAGS)

View file

@ -2,13 +2,25 @@
* Startup file for the Foenix/MCP * Startup file for the Foenix/MCP
*/ */
#include <string.h>
#include "sys_general.h"
#include "m68k/syscalls_m68k.h" #include "m68k/syscalls_m68k.h"
#include "text_screen.h"
void print(short screen, char * message) {
int i;
for (i = 0; i < strlen(message); i++) {
text_put_raw(screen, message[i]);
}
}
int main(int argc, char * argv[]) { int main(int argc, char * argv[]) {
bconout('A'); text_init();
bconout('B');
bconout('C');
print(0, "Hello from Screen A!");
print(1, "Hello from Screen B!");
/* Infinite loop... */ /* Infinite loop... */
while (1) {}; while (1) {};
} }

View file

@ -0,0 +1,96 @@
/*
* Registers and memory blocks for VICKY III
*/
#ifndef __VICKYIII_General_H
#define __VICKYIII_General_H
/*
* Screen Channel A
*/
#define MasterControlReg_A ((volatile uint32_t *)0x00C40000)
#define BorderControlReg_L_A ((volatile uint32_t *)0x00C40004)
#define BorderControlReg_H_A ((volatile uint32_t *)0x00C40008)
#define BackGroundControlReg_A ((volatile uint32_t *)0x00C4000C)
#define CursorControlReg_L_A ((volatile uint32_t *)0x00C40010)
#define CursorControlReg_H_A ((volatile uint32_t *)0x00C40014)
#define LineInterrupt0_A ((volatile uint16_t *)0x00C40018)
#define LineInterrupt1_A ((volatile uint16_t *)0x00C4001A)
#define LineInterrupt2_A ((volatile uint16_t *)0x00C4001C)
#define LineInterrupt3_A ((volatile uint16_t *)0x00C4001E)
#define MousePointer_Mem_A ((volatile uint16_t *)0x00C40400)
#define MousePtr_A_CTRL_Reg ((volatile uint16_t *)0x00C40C00)
#define MousePtr_A_X_Pos ((volatile uint16_t *)0x00C40C02)
#define MousePtr_A_Y_Pos ((volatile uint16_t *)0x00C40C04)
#define MousePtr_A_Mouse0 ((volatile uint16_t *)0x00C40C0A)
#define MousePtr_A_Mouse1 ((volatile uint16_t *)0x00C40C0C)
#define MousePtr_A_Mouse2 ((volatile uint16_t *)0x00C40C0E)
#define ScreenText_A ((volatile char *)0x00C60000) // Text matrix
#define ColorText_A ((volatile uint8_t *)0x00C68000) // Color matrix
#define FG_CLUT_A ((volatile uint16_t *)0x00C6C400) // Foreground LUT
#define BG_CLUT_A ((volatile uint16_t *)0x00C6C440) // Background LUT
/*
* Screen Channel B
*/
#define MasterControlReg_B ((volatile uint32_t *)0x00C80000)
#define BorderControlReg_L_B ((volatile uint32_t *)0x00C80004)
#define BorderControlReg_H_B ((volatile uint32_t *)0x00C80008)
#define BackGroundControlReg_B ((volatile uint32_t *)0x00C8000C)
#define CursorControlReg_L_B ((volatile uint32_t *)0x00C80010)
#define CursorControlReg_H_B ((volatile uint32_t *)0x00C80014)
#define LineInterrupt0_B ((volatile uint16_t *)0x00C80018)
#define LineInterrupt1_B ((volatile uint16_t *)0x00C8001A)
#define LineInterrupt2_B ((volatile uint16_t *)0x00C8001C)
#define LineInterrupt3_B ((volatile uint16_t *)0x00C8001E)
#define MousePointer_Mem_B ((volatile uint16_t *)0x00C80400)
#define MousePtr_B_CTRL_Reg ((volatile uint16_t *)0x00C80C00)
#define MousePtr_B_X_Pos ((volatile uint16_t *)0x00C80C02)
#define MousePtr_B_Y_Pos ((volatile uint16_t *)0x00C80C04)
#define MousePtr_B_Mouse0 ((volatile uint16_t *)0x00C80C0A)
#define MousePtr_B_Mouse1 ((volatile uint16_t *)0x00C80C0C)
#define MousePtr_B_Mouse2 ((volatile uint16_t *)0x00C80C0E)
#define ScreenText_B ((volatile char *)0x00CA0000) // Text matrix
#define ColorText_B ((volatile uint8_t *)0x00CA8000) // Color matrix
#define FG_CLUT_B ((volatile uint16_t *)0x00CAC400) // Foreground LUT
#define BG_CLUT_B ((volatile uint16_t *)0x00CAC440) // Background LUT
#define BM0_Control_Reg ((volatile uint16_t *)0x00C80100)
#define BM0_Addy_Pointer_Reg ((volatile uint16_t *)0x00C80104)
#define Sprite_0_CTRL ((volatile uint16_t *)0x00C81000)
#define Sprite_0_ADDY_HI ((volatile uint16_t *)0x00C81002)
#define Sprite_0_POS_X ((volatile uint16_t *)0x00C81004)
#define Sprite_0_POS_Y ((volatile uint16_t *)0x00C81006)
/*
* Color lookup tables
*/
#define LUT_0 ((volatile uint8_t *)0x00C82000)
#define LUT_1 ((volatile uint8_t *)0x00C82400)
#define LUT_2 ((volatile uint8_t *)0x00C82800)
#define LUT_3 ((volatile uint8_t *)0x00C82C00)
#define LUT_4 ((volatile uint8_t *)0x00C83000)
#define LUT_5 ((volatile uint8_t *)0x00C83400)
#define LUT_6 ((volatile uint8_t *)0x00C83800)
#define LUT_7 ((volatile uint8_t *)0x00C83C00)
/*
* Location of VRAM
*/
#define VRAM_Bank0 ((volatile uint8_t *)0x00800000)
#define VRAM_Bank1 ((volatile uint8_t *)0x00A00000)
#endif

View file

@ -0,0 +1,60 @@
/**
* Definitions for the Vicky graphics controller
*/
#ifndef __VICKYII_GENERAL_H
#define __VICKYII_GENERAL_H
#define VKY_MASTER_CONTROL_L 0xAF0000
#define Mstr_Ctrl_Text_Mode_En 0x01
#define Mstr_Ctrl_Text_Overlay 0x02
#define Mstr_Ctrl_Graph_Mode_En 0x04
#define Mstr_Ctrl_Bitmap_En 0x08
#define Mstr_Ctrl_TileMap_En 0x10
#define Mstr_Ctrl_Sprite_En 0x20
#define Mstr_Ctrl_GAMMA_En 0x40
#define Mstr_Ctrl_Disable_Vid 0x80
#define VKY_MASTER_CONTROL_H 0xAF0001
#define VKY_RESOLUTION_640_480 0
#define VKY_RESOLUTION_320_240 2
#define VKY_RESOLUTION_800_600 1
#define VKY_RESOLUTION_400_300 3
#define BORDER_CTRL_REG 0xAF0004
#define Border_Ctrl_Enable 0x01
#define BORDER_COLOR_B 0xAF0005
#define BORDER_COLOR_G 0xAF0006
#define BORDER_COLOR_R 0xAF0007
#define BORDER_X_SIZE 0xAF0008 // X- Values: 0 - 32 (Default: 32)
#define BORDER_Y_SIZE 0xAF0009 // Y- Values 0 - 32 (Default: 32)
#define BACKGROUND_COLOR_B 0xAF000D // When in Graphic Mode, if a pixel is "0" then the Background pixel is chosen
#define BACKGROUND_COLOR_G 0xAF000E
#define BACKGROUND_COLOR_R 0xAF000F
#define VKY_TXT_CURSOR_CTRL_REG 0xAF0010 // [0] Enable Text Mode
#define Vky_Cursor_Enable 0x01
#define Vky_Cursor_Flash_Rate0 0x02 // 00 - 1/Sec, 01 - 2/Sec, 10 - 4/Sec, 11 - 5/Sec
#define Vky_Cursor_Flash_Rate1 0x04
#define Vky_Cursor_FONT_Page0 0x08 // Pick Font Page 0 or Font Page 1
#define Vky_Cursor_FONT_Page1 0x10 // Pick Font Page 0 or Font Page 1
#define VKY_TXT_START_ADD_PTR 0xAF0011 // This is an offset to change the Starting address of the Text Mode Buffer (in x)
#define VKY_TXT_CURSOR_CHAR_REG 0xAF0012
#define VKY_TXT_CURSOR_COLR_REG 0xAF0013
#define VKY_TXT_CURSOR_X_REG_L 0xAF0014
#define VKY_TXT_CURSOR_X_REG_H 0xAF0015
#define VKY_TXT_CURSOR_Y_REG_L 0xAF0016
#define VKY_TXT_CURSOR_Y_REG_H 0xAF0017
#define MAX_TEXT_COLORS 15 // The maximum number of colors in the text LUTs
#define FG_CHAR_LUT_PTR 0xAF1F40 // Text screen foreground color LUT
#define BG_CHAR_LUT_PTR 0xAF1F80 // Text screen background color LUT
#define FONT_MEMORY_BANK0 0xAF8000 // The memory area for the font
#define CS_TEXT_MEM_PTR 0xAFA000 // The text cell matrix
#define CS_COLOR_MEM_PTR 0xAFC000 // The color cell matrix
#endif

View file

@ -16,4 +16,26 @@ typedef unsigned short uint16_t;
typedef int int32_t; typedef int int32_t;
typedef unsigned int uint32_t; typedef unsigned int uint32_t;
typedef unsigned char bool;
//
// A color (BGR)
//
typedef struct s_color3 {
uint8_t blue;
uint8_t green;
uint8_t red;
} t_color3;
//
// A color entry for a color lookup table (BGRA)
//
typedef struct s_color4 {
uint8_t blue;
uint8_t green;
uint8_t red;
uint8_t alpha;
} t_color4;
#endif #endif

View file

@ -0,0 +1,19 @@
/*
* Include file for the basic set of VICKY registers
*/
#ifndef __vicky_general_h
#define __vicky_general_h
#include "types.h"
// #if SYSTEM == A2560K
// /* VICKY registers for the A2560K */
#include "A2560K/VICKYIII_General.h"
// #elif SYSTEM == C256_FMX || SYSTEM == C256_U || SYSTEM == C256_U_PLUS
// /* VICKY registers for the C256 FMX, U, and U+ */
// #include "FMX/vicky_general.h"
// #endif
#endif

View file

@ -2,6 +2,11 @@
xdef _bios xdef _bios
xdef ___exit xdef ___exit
section "vectors",code
dc.l ___STACK ; Initial stack pointer
dc.l coldboot ; Initial PC
code code
coldboot: lea ___STACK,sp coldboot: lea ___STACK,sp

170
src/mapfile Normal file
View file

@ -0,0 +1,170 @@
..\vbcc\targets\m68k-foenix\lib\libvc.a (_main.o) needed due to ___main
Files:
startup_m68k.o: vectors 0(8), CODE 10000(62) hex
..\vbcc\targets\m68k-foenix\lib\libvc.a (_main.o): CODE 10064(be), DATA 105c8(4), BSS 105d0(4) hex
foenixmcp.o: CODE 10124(95) hex
text_screen.o: CODE 101bc(39a), BSS 105d4(44) hex
bios_m68k.o: CODE 10558(40), DATA 105cc(4) hex
syscalls_m68k.o: CODE 10598(1e) hex
INITEXIT: .dtors 105b6(8), .ctors 105be(8) hex
Section mapping (numbers in hex):
------------------------------
00000000 vectors (size 8)
00000000 - 00000008 startup_m68k.o(vectors)
------------------------------
00010000 text (size 5b6)
00010000 - 00010062 startup_m68k.o(CODE)
00010064 - 00010122 _main.o(CODE)
00010124 - 000101b9 foenixmcp.o(CODE)
000101bc - 00010556 text_screen.o(CODE)
00010558 - 00010598 bios_m68k.o(CODE)
00010598 - 000105b6 syscalls_m68k.o(CODE)
------------------------------
000105b6 .dtors (size 8, allocated 0)
000105b6 - 000105be INITEXIT(.dtors)
------------------------------
000105be .ctors (size 8, allocated 0)
000105be - 000105c6 INITEXIT(.ctors)
------------------------------
000105c8 data (size 8, allocated 4)
000105c8 - 000105cc _main.o(DATA)
000105cc - 000105d0 bios_m68k.o(DATA)
------------------------------
000105d0 bss (size 48, allocated 0)
000105d0 - 000105d4 _main.o(BSS)
000105d4 - 00010618 text_screen.o(BSS)
Symbols of text:
0x00000000 l17: local abs, size 0
0x00000000 l5: local abs, size 0
0x00000000 l57: local abs, size 0
0x00000000 l3: local abs, size 0
0x00000000 l59: local abs, size 0
0x00000000 l19: local abs, size 0
0x00000004 l3: local abs, size 0
0x00000004 l5: local abs, size 0
0x00000008 l31: local abs, size 0
0x00000008 l6: local abs, size 0
0x00000008 l13: local abs, size 0
0x00000008 l43: local abs, size 0
0x0000000c l27: local abs, size 0
0x0000000c l18: local abs, size 0
0x0000000c l9: local abs, size 0
0x0000000c l11: local abs, size 0
0x00000014 l34: local abs, size 0
0x00000014 l45: local abs, size 0
0x00000018 l13: local abs, size 0
0x00000018 l52: local abs, size 0
0x00000018 l20: local abs, size 0
0x0000001c l25: local abs, size 0
0x0000007c l32: local abs, size 0
0x000000fc l11: local abs, size 0
0x0000040c l7: local abs, size 0
0x0000043c l43: local abs, size 0
0x0000047c l18: local abs, size 0
0x00000c00 l29: local abs, size 0
0x00000c00 l4: local abs, size 0
0x00000c00 l41: local abs, size 0
0x00000c04 l16: local abs, size 0
0x00000c3c l50: local abs, size 0
0x00010000 coldboot: local reloc, size 0
0x00010014 clrloop: local reloc, size 0
0x00010024 callmain: local reloc, size 0
0x0001002a ___exit: global reloc, size 0
0x0001002c _bios: global reloc, size 0
0x00010054 h_trap_13: local reloc, size 0
0x00010064 __Exit: global reloc, size 0
0x0001007e l12: local reloc, size 0
0x0001008a l14: local reloc, size 0
0x0001008e l13: local reloc, size 0
0x0001009c l15: local reloc, size 0
0x000100b0 _exit: global reloc, size 0
0x000100ce l27: local reloc, size 0
0x000100da l28: local reloc, size 0
0x000100e2 l23: local reloc, size 0
0x000100e8 ___main: global reloc, size 0
0x000100fe l39: local reloc, size 0
0x00010106 l40: local reloc, size 0
0x00010124 _print: global reloc, size 0
0x00010134 l3: local reloc, size 0
0x0001014e l6: local reloc, size 0
0x00010150 l4: local reloc, size 0
0x00010160 l1: local reloc, size 0
0x00010160 l5: local reloc, size 0
0x00010168 _main: global reloc, size 0
0x00010184 l14: local reloc, size 0
0x00010186 l16: local reloc, size 0
0x00010188 l10: local reloc, size 0
0x0001018c l12: local reloc, size 0
0x000101a4 l13: local reloc, size 0
0x000101bc _text_init: global reloc, size 0
0x0001025a l2: local reloc, size 0
0x00010260 _text_set_cursor: global reloc, size 0
0x0001027e l9: local reloc, size 0
0x000102f2 l10: local reloc, size 0
0x000102f2 l7: local reloc, size 0
0x000102f8 _text_set_xy: global reloc, size 0
0x00010310 l16: local reloc, size 0
0x000103b0 l17: local reloc, size 0
0x000103b0 l14: local reloc, size 0
0x000103b8 _text_setsizes: global reloc, size 0
0x000103c6 l23: local reloc, size 0
0x000103f8 l21: local reloc, size 0
0x000103f8 l24: local reloc, size 0
0x00010400 _text_set_color: global reloc, size 0
0x00010416 l30: local reloc, size 0
0x0001045e l28: local reloc, size 0
0x0001045e l31: local reloc, size 0
0x00010464 _text_clear: global reloc, size 0
0x00010472 l37: local reloc, size 0
0x0001049c l39: local reloc, size 0
0x000104ae l42: local reloc, size 0
0x000104b0 l40: local reloc, size 0
0x000104d6 l35: local reloc, size 0
0x000104d6 l38: local reloc, size 0
0x000104d6 l41: local reloc, size 0
0x000104dc _text_put_raw: global reloc, size 0
0x000104ee l48: local reloc, size 0
0x0001054a l46: local reloc, size 0
0x0001054a l49: local reloc, size 0
0x00010550 _text_put_ansi: global reloc, size 0
0x00010554 l53: local reloc, size 0
0x00010554 l55: local reloc, size 0
0x00010554 l56: local reloc, size 0
0x00010558 _impl_bconout: global reloc, size 0
0x00010572 l1: local reloc, size 0
0x00010574 _bios_dispatch: global reloc, size 0
0x00010588 l9: local reloc, size 0
0x00010590 l10: local reloc, size 0
0x00010592 l6: local reloc, size 0
0x00010592 l8: local reloc, size 0
0x00010598 _bconout: global reloc, size 0
0x000105b2 l1: local reloc, size 0
Symbols of .dtors:
0x000105b6 ___DTOR_LIST__: global reloc object, size 8
Symbols of .ctors:
0x000105be ___CTOR_LIST__: global reloc object, size 8
Symbols of data:
0x000105c8 l21: local reloc, size 0
0x000105cc _text_cursor_0: global reloc, size 0
Symbols of bss:
0x000105d0 ___firstexit: global reloc, size 0
0x000105d4 l1: local reloc, size 0
Linker symbols:
0x00010000 RAMSTART: global abs, size 0
0x00010000 RAMSIZE: global abs, size 0
0x00000400 STACKLEN: global abs, size 0
0x00010618 ___heap: global abs, size 0
0x0001fc00 ___heapend: global abs, size 0
0x000105d0 ___BSSSTART: global abs, size 0
0x00000048 ___BSSSIZE: global abs, size 0
0x00020000 ___STACK: global abs, size 0

BIN
src/rsrc/font/MSX_8x8.bin Normal file

Binary file not shown.

174
src/rsrc/font/MSX_8x8.h Normal file
View file

@ -0,0 +1,174 @@
unsigned char MSX_8x8[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x28, 0x28, 0x28, 0x00,
0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x28, 0x00,
0x10, 0x3c, 0x50, 0x38, 0x14, 0x78, 0x10, 0x00, 0x60, 0x64, 0x08, 0x10,
0x20, 0x4c, 0x0c, 0x00, 0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00,
0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x40, 0x40,
0x40, 0x20, 0x10, 0x00, 0x10, 0x08, 0x04, 0x04, 0x04, 0x08, 0x10, 0x00,
0x10, 0x54, 0x38, 0x10, 0x38, 0x54, 0x10, 0x00, 0x00, 0x10, 0x10, 0x7c,
0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00,
0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00,
0x38, 0x44, 0x44, 0x54, 0x44, 0x44, 0x38, 0x00, 0x10, 0x30, 0x50, 0x10,
0x10, 0x10, 0x7c, 0x00, 0x38, 0x44, 0x04, 0x08, 0x30, 0x40, 0x7c, 0x00,
0x38, 0x44, 0x04, 0x18, 0x04, 0x44, 0x38, 0x00, 0x08, 0x18, 0x28, 0x48,
0x7c, 0x08, 0x08, 0x00, 0x7c, 0x40, 0x70, 0x08, 0x04, 0x08, 0x70, 0x00,
0x18, 0x20, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, 0x7c, 0x44, 0x08, 0x10,
0x10, 0x10, 0x10, 0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x3c, 0x04, 0x08, 0x30, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x20, 0x00,
0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7c, 0x00,
0x00, 0x7c, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
0x38, 0x44, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00, 0x38, 0x44, 0x04, 0x34,
0x54, 0x54, 0x38, 0x00, 0x10, 0x28, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x00,
0x78, 0x24, 0x24, 0x38, 0x24, 0x24, 0x78, 0x00, 0x18, 0x24, 0x40, 0x40,
0x40, 0x24, 0x18, 0x00, 0x70, 0x28, 0x24, 0x24, 0x24, 0x28, 0x70, 0x00,
0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x7c, 0x00, 0x7c, 0x40, 0x40, 0x78,
0x40, 0x40, 0x40, 0x00, 0x38, 0x44, 0x40, 0x5c, 0x44, 0x44, 0x38, 0x00,
0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, 0x38, 0x10, 0x10, 0x10,
0x10, 0x10, 0x38, 0x00, 0x1c, 0x08, 0x08, 0x08, 0x48, 0x48, 0x30, 0x00,
0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x40, 0x40, 0x40, 0x40,
0x40, 0x40, 0x7c, 0x00, 0x44, 0x6c, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00,
0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x00, 0x38, 0x44, 0x44, 0x44,
0x44, 0x44, 0x38, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00,
0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, 0x78, 0x44, 0x44, 0x78,
0x50, 0x48, 0x44, 0x00, 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00,
0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x38, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00,
0x44, 0x44, 0x44, 0x54, 0x54, 0x6c, 0x44, 0x00, 0x44, 0x44, 0x28, 0x10,
0x28, 0x44, 0x44, 0x00, 0x44, 0x44, 0x44, 0x38, 0x10, 0x10, 0x10, 0x00,
0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 0x00, 0x3c, 0x20, 0x20, 0x20,
0x20, 0x20, 0x3c, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
0x3c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x00, 0x10, 0x28, 0x44, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00,
0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04,
0x3c, 0x44, 0x3c, 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x64, 0x58, 0x00,
0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00, 0x04, 0x04, 0x34, 0x4c,
0x44, 0x4c, 0x34, 0x00, 0x00, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00,
0x18, 0x24, 0x20, 0x78, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x38, 0x44,
0x44, 0x3c, 0x04, 0x38, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00,
0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x00, 0x08, 0x00, 0x18,
0x08, 0x08, 0x48, 0x30, 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00,
0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x68, 0x54,
0x54, 0x54, 0x54, 0x00, 0x00, 0x00, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00,
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x58, 0x64,
0x64, 0x58, 0x40, 0x40, 0x00, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x04, 0x04,
0x00, 0x00, 0x58, 0x64, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x3c, 0x40,
0x38, 0x04, 0x78, 0x00, 0x20, 0x20, 0x78, 0x20, 0x20, 0x24, 0x18, 0x00,
0x00, 0x00, 0x48, 0x48, 0x48, 0x48, 0x34, 0x00, 0x00, 0x00, 0x44, 0x44,
0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x28, 0x00,
0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x44, 0x44,
0x4c, 0x34, 0x04, 0x38, 0x00, 0x00, 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00,
0x0c, 0x10, 0x10, 0x20, 0x10, 0x10, 0x0c, 0x00, 0x10, 0x10, 0x10, 0x00,
0x10, 0x10, 0x10, 0x00, 0x30, 0x08, 0x08, 0x04, 0x08, 0x08, 0x30, 0x00,
0x20, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c,
0x7c, 0x7c, 0x7c, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x38, 0x7c, 0x00,
0x00, 0x6c, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x38, 0x38, 0xfe, 0xfe,
0x54, 0x10, 0x7c, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00,
0x7c, 0x82, 0x82, 0x82, 0x82, 0x82, 0x7c, 0x00, 0x7c, 0xfe, 0xfe, 0xfe,
0xfe, 0xfe, 0x7c, 0x00, 0x10, 0x78, 0x26, 0x38, 0x54, 0x20, 0x1e, 0x00,
0x00, 0x10, 0x3c, 0x10, 0x3c, 0x5a, 0x32, 0x00, 0x00, 0x00, 0x48, 0x44,
0x44, 0x44, 0x20, 0x00, 0x00, 0x38, 0x00, 0x38, 0x44, 0x04, 0x18, 0x00,
0x00, 0x38, 0x00, 0x78, 0x10, 0x30, 0x4c, 0x00, 0x00, 0x10, 0x7c, 0x12,
0x3c, 0x52, 0x34, 0x00, 0x00, 0x48, 0x2c, 0x32, 0x54, 0x10, 0x08, 0x00,
0x00, 0x08, 0x5c, 0x6a, 0x4a, 0x0c, 0x10, 0x00, 0x00, 0x08, 0x0e, 0x08,
0x38, 0x4c, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02, 0x0c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7c, 0x20, 0x7c,
0xaa, 0x92, 0x64, 0x00, 0x00, 0x44, 0x42, 0x42, 0x42, 0x40, 0x20, 0x00,
0x38, 0x00, 0x38, 0x44, 0x04, 0x08, 0x30, 0x00, 0x38, 0x00, 0x7c, 0x08,
0x10, 0x30, 0x4e, 0x00, 0x12, 0x7d, 0x10, 0x3e, 0x51, 0x51, 0x22, 0x00,
0x20, 0x22, 0x79, 0x25, 0x24, 0x44, 0x18, 0x00, 0x10, 0x7e, 0x08, 0x7e,
0x04, 0x40, 0x3c, 0x00, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00,
0x04, 0x44, 0x5e, 0x44, 0x44, 0x44, 0x28, 0x00, 0x3c, 0x02, 0x00, 0x00,
0x00, 0x40, 0x3e, 0x00, 0x10, 0x7e, 0x08, 0x04, 0x04, 0x80, 0x78, 0x00,
0x80, 0x80, 0x80, 0x80, 0x84, 0x88, 0x70, 0x00, 0x08, 0xfe, 0x38, 0x48,
0x38, 0x08, 0x10, 0x00, 0x44, 0x44, 0xfe, 0x44, 0x48, 0x40, 0x3c, 0x00,
0x44, 0x28, 0xfe, 0x20, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x50, 0x50, 0x20, 0x00, 0x00, 0x00,
0x38, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x08, 0x08, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x7c, 0x04, 0x7c, 0x04,
0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x78, 0x08, 0x30, 0x20, 0x40, 0x00,
0x00, 0x00, 0x08, 0x10, 0x30, 0x50, 0x10, 0x00, 0x00, 0x10, 0x78, 0x48,
0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x78, 0x10, 0x10, 0x10, 0x78, 0x00,
0x00, 0x10, 0x78, 0x30, 0x50, 0x50, 0x10, 0x00, 0x00, 0x20, 0x7c, 0x24,
0x28, 0x20, 0x20, 0x00, 0x00, 0x00, 0x38, 0x08, 0x08, 0x08, 0x7c, 0x00,
0x00, 0x00, 0x7c, 0x04, 0x7c, 0x04, 0x7c, 0x00, 0x00, 0x00, 0x54, 0x54,
0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x00, 0x00, 0x00,
0x7c, 0x04, 0x14, 0x18, 0x10, 0x10, 0x20, 0x00, 0x04, 0x08, 0x10, 0x30,
0x50, 0x10, 0x10, 0x00, 0x10, 0x7c, 0x44, 0x04, 0x04, 0x08, 0x10, 0x00,
0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7c, 0x00, 0x08, 0x7c, 0x08, 0x18,
0x28, 0x48, 0x08, 0x00, 0x10, 0x7c, 0x14, 0x14, 0x14, 0x24, 0x44, 0x00,
0x10, 0x7c, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x3c, 0x24, 0x44, 0x04,
0x04, 0x08, 0x10, 0x00, 0x20, 0x3c, 0x28, 0x48, 0x08, 0x08, 0x10, 0x00,
0x7c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7c, 0x00, 0x28, 0x7c, 0x28, 0x28,
0x08, 0x08, 0x10, 0x00, 0x00, 0x60, 0x04, 0x64, 0x04, 0x08, 0x70, 0x00,
0x00, 0x7c, 0x04, 0x08, 0x10, 0x28, 0x44, 0x00, 0x20, 0x7c, 0x24, 0x28,
0x20, 0x20, 0x1c, 0x00, 0x44, 0x44, 0x24, 0x04, 0x08, 0x10, 0x20, 0x00,
0x3c, 0x24, 0x3c, 0x44, 0x04, 0x08, 0x10, 0x00, 0x08, 0x70, 0x10, 0x7c,
0x10, 0x10, 0x20, 0x00, 0x54, 0x54, 0x54, 0x04, 0x04, 0x08, 0x10, 0x00,
0x38, 0x00, 0x7c, 0x10, 0x10, 0x10, 0x20, 0x00, 0x40, 0x40, 0x60, 0x50,
0x48, 0x40, 0x40, 0x00, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00,
0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x04, 0x68,
0x10, 0x28, 0x44, 0x00, 0x10, 0x7c, 0x04, 0x18, 0x74, 0x10, 0x10, 0x00,
0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x10, 0x08, 0x24, 0x24,
0x24, 0x24, 0x44, 0x00, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x3c, 0x00,
0x7c, 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x20, 0x50, 0x08,
0x04, 0x04, 0x00, 0x00, 0x10, 0x7c, 0x10, 0x10, 0x54, 0x54, 0x10, 0x00,
0x00, 0x7c, 0x04, 0x04, 0x28, 0x10, 0x08, 0x00, 0x78, 0x00, 0x30, 0x00,
0x00, 0x78, 0x04, 0x00, 0x08, 0x10, 0x20, 0x40, 0x48, 0x44, 0x7c, 0x00,
0x04, 0x04, 0x04, 0x28, 0x10, 0x28, 0x40, 0x00, 0x3c, 0x10, 0x7c, 0x10,
0x10, 0x10, 0x0c, 0x00, 0x20, 0x7c, 0x24, 0x24, 0x28, 0x20, 0x20, 0x00,
0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x00, 0x00, 0x7c, 0x04, 0x7c,
0x04, 0x04, 0x7c, 0x00, 0x38, 0x00, 0x7c, 0x04, 0x04, 0x08, 0x10, 0x00,
0x48, 0x48, 0x48, 0x48, 0x48, 0x10, 0x20, 0x00, 0x00, 0x28, 0x28, 0x28,
0x28, 0x2c, 0x48, 0x00, 0x40, 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0x00,
0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x7c, 0x44, 0x44, 0x04,
0x04, 0x08, 0x10, 0x00, 0x00, 0x60, 0x00, 0x04, 0x04, 0x08, 0x70, 0x00,
0x48, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48, 0x30, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xf8, 0x20, 0x4e, 0x40, 0x90, 0x8e, 0x00,
0x10, 0xfe, 0x20, 0x78, 0x04, 0x04, 0x78, 0x00, 0x00, 0xfc, 0x02, 0x02,
0x02, 0x04, 0x18, 0x00, 0xfe, 0x08, 0x10, 0x20, 0x20, 0x20, 0x1c, 0x00,
0x10, 0x12, 0x1c, 0x30, 0x40, 0x40, 0x3e, 0x00, 0x2c, 0xf2, 0x44, 0x44,
0x9c, 0x26, 0x1c, 0x00, 0x00, 0x9e, 0x80, 0x80, 0x80, 0x90, 0x4e, 0x00,
0x48, 0x48, 0x7c, 0xd2, 0xb6, 0xaa, 0x4c, 0x00, 0x40, 0x4c, 0xd2, 0x62,
0x4e, 0xd2, 0x4e, 0x00, 0x00, 0x38, 0x54, 0x92, 0xa2, 0xa2, 0x44, 0x00,
0x04, 0x9e, 0x84, 0x84, 0x8c, 0x96, 0x4c, 0x00, 0x10, 0xe4, 0x26, 0x44,
0x44, 0x48, 0x30, 0x00, 0x20, 0x10, 0x00, 0x20, 0x14, 0x52, 0xb2, 0x00,
0x00, 0x00, 0x20, 0x50, 0x88, 0x04, 0x02, 0x00, 0x1e, 0x84, 0x9e, 0x84,
0x8c, 0x96, 0x4c, 0x00, 0x10, 0xfc, 0x10, 0xfc, 0x70, 0x98, 0x74, 0x00,
0x70, 0x10, 0x14, 0x7e, 0xa4, 0xa4, 0x48, 0x00, 0x20, 0xf4, 0x22, 0x60,
0xa2, 0x62, 0x1c, 0x00, 0x48, 0x48, 0x7c, 0xaa, 0x92, 0xa2, 0x44, 0x00,
0x10, 0x7c, 0x10, 0x7c, 0x10, 0x12, 0x0c, 0x00, 0x48, 0x5c, 0x6a, 0xe2,
0x24, 0x10, 0x10, 0x00, 0x10, 0x9c, 0xb2, 0xd2, 0x92, 0x1c, 0x20, 0x00,
0x10, 0x1c, 0x10, 0x10, 0x78, 0x94, 0x70, 0x00, 0x60, 0x10, 0x80, 0xb8,
0xc4, 0x84, 0x38, 0x00, 0x04, 0x82, 0x82, 0x82, 0x42, 0x04, 0x18, 0x00,
0x3c, 0x08, 0x1c, 0x22, 0x5a, 0x26, 0x1c, 0x00, 0x20, 0x2c, 0xf4, 0x24,
0x64, 0xa4, 0x26, 0x00, 0x3c, 0x08, 0x10, 0x3c, 0x42, 0x02, 0x1c, 0x00,
0x40, 0x40, 0xdc, 0x62, 0x42, 0xc2, 0x44, 0x00, 0x10, 0x10, 0x20, 0x20,
0x60, 0x52, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
unsigned int MSX_8x8_bin_len = 2048;

Binary file not shown.

View file

@ -0,0 +1,174 @@
unsigned char foenix_st_8x8[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81,
0xbd, 0x99, 0x81, 0x7e, 0x3c, 0x7e, 0xdb, 0xff, 0xc3, 0x7e, 0x3c, 0x00,
0x00, 0xee, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x10, 0x38, 0x7c, 0xfe,
0x7c, 0x38, 0x10, 0x00, 0x00, 0x3c, 0x18, 0xff, 0xff, 0x08, 0x18, 0x00,
0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x10, 0x38, 0x00, 0x00, 0x00, 0x18, 0x3c,
0x18, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0xe7, 0xff, 0xff, 0xff,
0x00, 0x3c, 0x42, 0x81, 0x81, 0x42, 0x3c, 0x00, 0xff, 0xc3, 0xbd, 0x7e,
0x7e, 0xbd, 0xc3, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff,
0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x04, 0x06, 0x07, 0x04,
0x04, 0xfc, 0xf8, 0x00, 0x0c, 0x0a, 0x0d, 0x0b, 0xf9, 0xf9, 0x1f, 0x1f,
0x00, 0x92, 0x7c, 0x44, 0xc6, 0x7c, 0x92, 0x00, 0x00, 0x00, 0x60, 0x78,
0x7e, 0x78, 0x60, 0x00, 0x00, 0x00, 0x06, 0x1e, 0x7e, 0x1e, 0x06, 0x00,
0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x66, 0x66, 0x66, 0x66,
0x66, 0x00, 0x66, 0x00, 0xff, 0xb6, 0x76, 0x36, 0x36, 0x36, 0x36, 0x00,
0x7e, 0xc1, 0xdc, 0x22, 0x22, 0x1f, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x7e,
0x7e, 0x00, 0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x00, 0xff,
0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18,
0x18, 0x7e, 0x18, 0x00, 0x00, 0x04, 0x06, 0xff, 0x06, 0x04, 0x00, 0x00,
0x00, 0x20, 0x60, 0xff, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xc0, 0xc0, 0xff, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00,
0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, 0x66, 0x66, 0x66, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0x6c, 0x6c, 0xfe, 0x6c, 0x00,
0x18, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x18, 0x00, 0x00, 0x66, 0x6c, 0x18,
0x30, 0x66, 0x46, 0x00, 0x38, 0x6c, 0x38, 0x70, 0xde, 0xcc, 0x76, 0x00,
0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1c, 0x18, 0x18,
0x18, 0x1c, 0x0e, 0x00, 0x70, 0x38, 0x18, 0x18, 0x18, 0x38, 0x70, 0x00,
0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60,
0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x18, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00,
0x3c, 0x66, 0x6e, 0x76, 0x66, 0x66, 0x3c, 0x00, 0x18, 0x38, 0x18, 0x18,
0x18, 0x18, 0x7e, 0x00, 0x3c, 0x66, 0x06, 0x0c, 0x18, 0x30, 0x7e, 0x00,
0x7e, 0x0c, 0x18, 0x0c, 0x06, 0x66, 0x3c, 0x00, 0x0c, 0x1c, 0x3c, 0x6c,
0x7e, 0x0c, 0x0c, 0x00, 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x3c, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, 0x7e, 0x06, 0x0c, 0x18,
0x30, 0x30, 0x30, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00,
0x3c, 0x66, 0x66, 0x3e, 0x06, 0x0c, 0x38, 0x00, 0x00, 0x18, 0x18, 0x00,
0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, 0x00,
0x06, 0x0c, 0x18, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x7e, 0x00,
0x00, 0x7e, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
0x3c, 0x66, 0x06, 0x0c, 0x18, 0x00, 0x18, 0x00, 0x3c, 0x66, 0x6e, 0x6a,
0x6e, 0x60, 0x3e, 0x00, 0x18, 0x3c, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x3c, 0x66, 0x60, 0x60,
0x60, 0x66, 0x3c, 0x00, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00,
0x7e, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x7e, 0x00, 0x7e, 0x60, 0x60, 0x7c,
0x60, 0x60, 0x60, 0x00, 0x3e, 0x60, 0x60, 0x6e, 0x66, 0x66, 0x3e, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18,
0x18, 0x18, 0x3c, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00, 0x60, 0x60, 0x60, 0x60,
0x60, 0x60, 0x7e, 0x00, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0x00,
0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66,
0x66, 0x66, 0x3c, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00,
0x3c, 0x66, 0x66, 0x66, 0x76, 0x6c, 0x36, 0x00, 0x7c, 0x66, 0x66, 0x7c,
0x6c, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x3e, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00,
0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00, 0x66, 0x66, 0x3c, 0x18,
0x3c, 0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, 0x1e, 0x18, 0x18, 0x18,
0x18, 0x18, 0x1e, 0x00, 0x40, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00,
0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x10, 0x38, 0x6c, 0xc6,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00,
0x00, 0xc0, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x06,
0x3e, 0x66, 0x3e, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x00,
0x00, 0x00, 0x3c, 0x60, 0x60, 0x60, 0x3c, 0x00, 0x06, 0x06, 0x3e, 0x66,
0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0x1c, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x3e, 0x66,
0x66, 0x3e, 0x06, 0x7c, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x00, 0x18, 0x18,
0x18, 0x18, 0x18, 0x70, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00,
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0xec, 0xfe,
0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00,
0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x7c, 0x66,
0x66, 0x66, 0x7c, 0x60, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x3e, 0x06,
0x00, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x3e, 0x60,
0x3c, 0x06, 0x7c, 0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x66, 0x66,
0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0x7c, 0x6c, 0x00,
0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66,
0x66, 0x3e, 0x06, 0x7c, 0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00,
0x0e, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0e, 0x00, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0c, 0x18, 0x18, 0x70, 0x00,
0x00, 0x60, 0xf2, 0x9e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x34,
0x34, 0x62, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78,
0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00,
0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x0c,
0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x70, 0xe0,
0x60, 0x60, 0x7e, 0x00, 0x81, 0x5a, 0x24, 0x5a, 0x5a, 0x24, 0x5a, 0x81,
0x6c, 0x64, 0x68, 0x60, 0x60, 0x60, 0x7e, 0x00, 0x0c, 0x3e, 0x60, 0x3c,
0x06, 0x66, 0x3c, 0x00, 0x0e, 0x1b, 0x3c, 0x66, 0x66, 0x3c, 0xd8, 0x70,
0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x3e, 0x60, 0x3c,
0x06, 0x66, 0x3c, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x08, 0x38,
0x24, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0c, 0x7e, 0x0c, 0x18,
0x30, 0x60, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x24, 0x7e, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, 0x08, 0x7e, 0x0c, 0x18,
0x30, 0x60, 0x7e, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0x44, 0x22, 0x44, 0x22,
0x44, 0x22, 0x44, 0x22, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
0x18, 0xf8, 0x18, 0x18, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0xf8,
0x18, 0xf8, 0x18, 0x18, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0xfe,
0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00,
0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xf8,
0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x36, 0x36, 0x36, 0x37,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36,
0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x00, 0x00, 0x00, 0xff,
0x00, 0xff, 0x00, 0x00, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36,
0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x36, 0x36, 0x36, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18,
0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x00, 0x00, 0x00, 0x3f,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36,
0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x00,
0x0c, 0x18, 0x00, 0x3c, 0x06, 0x7e, 0x3e, 0x00, 0x18, 0x66, 0x00, 0x3c,
0x06, 0x7e, 0x3e, 0x00, 0x24, 0x18, 0x00, 0x3c, 0x06, 0x7e, 0x3e, 0x00,
0x66, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, 0x76, 0x34, 0x30, 0x30,
0x30, 0x30, 0x78, 0x00, 0x0c, 0x18, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x00,
0x00, 0x00, 0x3c, 0x60, 0x60, 0x3c, 0x08, 0x18, 0x24, 0x18, 0x00, 0x3c,
0x60, 0x60, 0x3c, 0x00, 0x0c, 0x18, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0x00, 0x00, 0x3c, 0x7e, 0x60, 0x3c, 0x18, 0x0c, 0x66, 0x00, 0x3c, 0x66,
0x7e, 0x60, 0x3c, 0x00, 0x24, 0x18, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x24, 0x00, 0x38,
0x18, 0x18, 0x3c, 0x00, 0x0d, 0x0d, 0x7c, 0xcc, 0xcc, 0xcc, 0x7c, 0x00,
0x06, 0x1f, 0x06, 0x3e, 0x66, 0x66, 0x3e, 0x00, 0x0c, 0x18, 0x00, 0x7c,
0x66, 0x66, 0x66, 0x00, 0x24, 0x18, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x00,
0x0c, 0x18, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, 0x18, 0x66, 0x00, 0x3c,
0x66, 0x66, 0x3c, 0x00, 0x36, 0x6c, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00, 0x18, 0x18, 0x00, 0x7e,
0x00, 0x18, 0x18, 0x00, 0x24, 0x18, 0x00, 0x7c, 0x66, 0x60, 0x60, 0x00,
0x18, 0x24, 0x18, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x0c, 0x18, 0x00, 0x66,
0x66, 0x66, 0x3e, 0x00, 0x36, 0x6c, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00,
0x66, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x0c, 0x18, 0x66, 0x66,
0x66, 0x3e, 0x06, 0x7c, 0x00, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x0e, 0x18,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int foenix_st_8x8_bin_len = 2048;

50
src/sys_general.c Normal file
View file

@ -0,0 +1,50 @@
#include "sys_general.h"
/*
* Fill out a s_sys_info structure with the information about the current system
*
* Inputs:
* info = pointer to a s_sys_info structure to fill out
*/
void sys_get_info(p_sys_info info) {
/* Model, CPU, and the presence of the floppy are set at compile time */
info->model = MODEL;
info->cpu = CPU;
#if MODEL==SYS_FOENIX_FMX || MODEL==SYS_FOENIX_A2560K || MODEL==SYS_FOENIX_A2560X || MODEL==SYS_FOENIX_GENX
info->has_floppy = 1;
#else
info->has_floppy = 0;
#endif
info->gabe_rev = 0x0000; /* TODO: get this from GABE */
info->vicky_rev = 0x0000; /* TODO: get this from VICKY */
info->system_ram_size = 0; /* TODO: compute this by testing RAM */
info->has_expansion_card = 0; /* TODO: figure this out by checking with GABE */
info->has_hard_drive = 0; /* TODO: figure this out by checking with GABE */
/* Set the number of screens and the presence of ethernet based on the model and expansion card */
switch (info->model) {
case SYS_FOENIX_A2560K:
case SYS_FOENIX_A2560X:
case SYS_FOENIX_GENX:
/* These systems are built with 2 screens and ethernet */
info->screens = 2;
info->has_ethernet = 1;
break;
default:
/* Otherwise, we need the correct expansion card */
info->screens = 1;
info->has_ethernet = 0;
// if (info->has_expansion_card) {
// /* TODO: detect card and set screen number and/or ethernet accordingly */
// ;
// }
break;
}
}

55
src/sys_general.h Normal file
View file

@ -0,0 +1,55 @@
/*
* Gather and return information about the system
*/
#ifndef __SYS_GENERAL_H
#define __SYS_GENERAL_H
#include "types.h"
/* IDs for the various Foenix machines supported */
#define SYS_FOENIX_FMX 1
#define SYS_FOENIX_U 2
#define SYS_FOENIX_U_PLUS 3
#define SYS_FOENIX_A2560K 4
#define SYS_FOENIX_A2560U 5
#define SYS_FOENIX_A2560U_PLUS 6
#define SYS_FOENIX_A2560X 7
#define SYS_FOENIX_GENX 8
/* IDs for the CPUs supported */
#define CPU_WDC65816 0x16 /* CPU code for the Western Design Center 65816 */
#define CPU_M68000 0x20 /* CPU code for the Motorola 68000 */
#define CPU_M68010 0x21 /* CPU code for the Motorola 68010 */
#define CPU_M68020 0x22 /* CPU code for the Motorola 68020 */
#define CPU_M68030 0x23 /* CPU code for the Motorola 68030 */
#define CPU_M68040 0x24 /* CPU code for the Motorola 68040 */
#define CPU_I486DX 0x34 /* CPU code for the Intel 486DX */
/*
* Structure to describe the hardware
*/
typedef struct s_sys_info {
unsigned short model; /* Code to say what model of machine this is */
unsigned short cpu; /* Code to say which CPU is running */
unsigned short gabe_rev; /* Code for the GABE revision number */
unsigned short vicky_rev; /* Code for the VICKY revision number */
int system_ram_size; /* The number of bytes of system RAM on the board */
bool has_floppy; /* TRUE if the board has a floppy drive installed */
bool has_hard_drive; /* TRUE if the board has a PATA device installed */
bool has_expansion_card; /* TRUE if an expansion card is installed on the device */
bool has_ethernet; /* TRUE if an ethernet port is present */
unsigned short screens; /* How many screens are on this computer */
} t_sys_info, *p_sys_info;
/*
* Fill out a s_sys_info structure with the information about the current system
*
* Inputs:
* info = pointer to a s_sys_info structure to fill out
*/
extern void sys_get_info(p_sys_info info);
#endif

176
src/text_screen.c Normal file
View file

@ -0,0 +1,176 @@
/*
* Driver for VICKY III text screens, both channel A and channel B
*/
#include "vicky_general.h"
#include "text_screen.h"
#define MAX_TEXT_CHANNELS 2
/*
* Structure to hold pointers to the text channel's registers and memory
*/
typedef struct s_text_channel {
volatile char * text_cells;
volatile uint8_t * color_cells;
volatile uint32_t * cursor_settings;
volatile uint32_t * cursor_position;
short columns;
short rows;
short x;
short y;
volatile char * text_cursor_ptr;
volatile uint8_t * color_cursor_ptr;
uint8_t current_color;
} t_text_channel, *p_text_channel;
static t_text_channel text_channel[MAX_TEXT_CHANNELS];
/*
* Initialize the text screen driver
*/
int text_init() {
int x;
p_text_channel chan_a = &text_channel[0];
p_text_channel chan_b = &text_channel[1];
/* TODO: initialize everything... only do a screen if it's present */
chan_a->text_cells = ScreenText_A;
chan_a->color_cells = ColorText_A;
chan_a->cursor_settings = CursorControlReg_L_A;
chan_a->cursor_position = CursorControlReg_H_A;
text_setsizes(0);
text_set_color(0, 1, 0);
text_clear(0);
text_set_xy(0, 0, 0);
chan_b->text_cells = ScreenText_B;
chan_b->color_cells = ColorText_B;
chan_b->cursor_settings = CursorControlReg_L_B;
chan_b->cursor_position = CursorControlReg_H_B;
text_setsizes(1);
text_set_color(1, 4, 0);
text_clear(1);
text_set_xy(1, 0, 0);
return 0;
}
/*
* Set the cursor properties
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* color = the color index for the cursor
* character = the character to display for the cursor
* rate = the rate of blinking (0 = 1 per sec, 1 = 2 per sec, 2 = 4 per sec, 3 = 5 per sec)
* enable = 1 to display the cursor, 0 to disable
*/
void text_set_cursor(short screen, short color, char character, short rate, short enable) {
if (screen < MAX_TEXT_CHANNELS) {
p_text_channel chan = &text_channel[screen];
*(chan->cursor_settings) = ((color & 0xff) << 24) | (character << 16) | ((rate & 0x02) << 1) | (enable & (0x01));
}
}
/*
* Set the position of the cursor on the screen. Adjusts internal pointers used for printing the characters
*
* If the x and y coordinates are out of bounds of the display, the routine will attempt to handle wrapping and
* scrolling accordingly.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* x = the column of the cursor (0 is left most)
* y = the row of the cursor (0 is right most)
*/
void text_set_xy(short screen, unsigned short x, unsigned short y) {
if (screen < MAX_TEXT_CHANNELS) {
/* TODO: add in wrapping and scrolling */
p_text_channel chan = &text_channel[screen];
chan->x = x;
chan->y = y;
*(chan->cursor_position) = y << 16 | x;
chan->text_cursor_ptr = &chan->text_cells[y * chan->columns + x];
chan->color_cursor_ptr = &chan->color_cells[y * chan->columns + x];
}
}
/*
* Compute the size information for the text screen based on the current settings in VICKY
* These settings are needed to correctly position text on the screen.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
*/
void text_setsizes(short screen) {
if (screen < MAX_TEXT_CHANNELS) {
/* TODO: compute sizes based on master control register settings */
p_text_channel chan = &text_channel[screen];
chan->rows = (short)((480 - 32) / 8);
chan->columns = (short)((640 - 32) / 8);
}
}
/*
* Set the foreground and background color for printing
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* foreground = the foreground color number to use (0 - 15)
* background = the background color number to use (0 - 15)
*/
void text_set_color(short screen, short foreground, short background) {
if (screen < MAX_TEXT_CHANNELS) {
p_text_channel chan = &text_channel[screen];
chan->current_color = ((foreground & 0x0f) << 4) | (background & 0x0f);
}
}
/*
* Clear the screen of data
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
*/
void text_clear(short screen) {
if (screen < MAX_TEXT_CHANNELS) {
int i;
p_text_channel chan = &text_channel[screen];
for (i = 0; i < chan->columns * chan->rows; i++) {
chan->text_cells[i] = ' ';
chan->color_cells[i] = chan->current_color;
}
}
}
/*
* Send a character to the screen without any escape code interpretation
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* c = the character to print
*/
void text_put_raw(short screen, char c) {
if (screen < MAX_TEXT_CHANNELS) {
p_text_channel chan = &text_channel[screen];
*chan->text_cursor_ptr++ = c;
*chan->color_cursor_ptr++ = chan->current_color;
text_set_xy(screen, chan->x + 1, chan->y);
}
}
/*
* Send a character to the screen... but handle ANSI escape codes and process accordingly.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* c = the character to print
*/
void text_put_ansi(short screen, char c) {
if (screen < MAX_TEXT_CHANNELS) {
/* TODO: magic! */
}
}

83
src/text_screen.h Normal file
View file

@ -0,0 +1,83 @@
#ifndef __TEXT_SCREEN_H
#define __TEXT_SCREEN_H
/*
* Driver for VICKY III text screens, both channel A and channel B
*/
/*
* Initialize the text screen driver
*/
extern int text_init();
/*
* Set the cursor properties
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* color = the color index for the cursor
* character = the character to display for the cursor
* rate = the rate of blinking (0 = 1 per sec, 1 = 2 per sec, 2 = 4 per sec, 3 = 5 per sec)
* enable = 1 to display the cursor, 0 to disable
*/
extern void text_set_cursor(short screen, short color, char character, short rate, short enable);
/*
* Set the position of the cursor on the screen. Adjusts internal pointers used for printing the characters
*
* If the x and y coordinates are out of bounds of the display, the routine will attempt to handle wrapping and
* scrolling accordingly.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* x = the column of the cursor (0 is left most)
* y = the row of the cursor (0 is right most)
*/
extern void text_set_xy(short screen, unsigned short x, unsigned short y);
/*
* Compute the size information for the text screen based on the current settings in VICKY
* These settings are needed to correctly position text on the screen.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
*/
extern void text_setsizes(short screen);
/*
* Send a character to the screen without any escape code interpretation
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* c = the character to print
*/
extern void text_put_raw(short screen, char c);
/*
* Send a character to the screen... but handle ANSI escape codes and process accordingly.
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* c = the character to print
*/
void text_put_ansi(short screen, char c);
/*
* Set the foreground and background color for printing
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
* foreground = the foreground color number to use (0 - 15)
* background = the background color number to use (0 - 15)
*/
extern void text_set_color(short screen, short foreground, short background);
/*
* Clear the screen of data
*
* Inputs:
* screen = the screen number 0 for channel A, 1 for channel B
*/
extern void text_clear(short screen);
#endif

8
upload.bat Normal file
View file

@ -0,0 +1,8 @@
@echo off
REM Upload a binary file to the C256 Foenix
if [%2%]==[] (
python C256Mgr\c256mgr.py --binary %1
) ELSE (
python C256Mgr\c256mgr.py --binary %1 --address %2
)

4
uploadsrec.bat Normal file
View file

@ -0,0 +1,4 @@
@echo off
REM Upload an SREC file to the C256 Foenix
python C256Mgr\c256mgr.py --upload-srec %1

View file

@ -1,5 +1,5 @@
-cc=vbccm68k -quiet %s -o= %s %s -O=%ld -Ivbcc\targets\m68k-foenix\include -cc=vbccm68k -quiet %s -o= %s %s -O=%ld -I..\vbcc\targets\m68k-foenix\include
-ccv=vbccm68k %s -o= %s %s -O=%ld -Ivbcc\targets\m68k-foenix\include -ccv=vbccm68k %s -o= %s %s -O=%ld -I..\vbcc\targets\m68k-foenix\include
-as=vasmm68k_mot -quiet -Fvobj -nowarn=62 %s -o %s -as=vasmm68k_mot -quiet -Fvobj -nowarn=62 %s -o %s
-asv=vasmm68k_mot -Fvobj -nowarn=62 %s -o %s -asv=vasmm68k_mot -Fvobj -nowarn=62 %s -o %s
-rm=del %s -rm=del %s